Pascal/Turbo Pascal - urgente!!! ayuda lo mas pronto

 
Vista:

urgente!!! ayuda lo mas pronto

Publicado por CRISTIAN (2 intervenciones) el 19/08/2009 16:56:22
Alguien que me pudiera explicar como se hacen el punto 2,5,6 del menu (abajo) por medio de procedure o function.
Selo agradeceria bastante.

program telegrama;
uses crt;
var op:integer; frase:string;

procedure uno;
begin
clrscr;
Writeln('Telegrama:');
readln(frase);
end;

procedure tres;
var i: integer;
conta,conte,conti,conto,contu:integer;

begin
conta:=0;conte:=0;conti:=0;conto:=0;contu:=0;
for i:= 1 to length(frase) do
begin
if (frase[i]= 'a') or (frase[i] = 'A') then
conta:= conta +1;
if (frase[i]= 'e') or (frase[i] = 'E') then
conte:= conte +1;
if (frase[i]= 'i') or (frase[i] = 'I') then
conti:= conti +1;
if (frase[i]= 'o') or (frase[i] = 'O') then
conto:= conto +1;
if (frase[i]= 'u') or (frase[i] = 'U') then
contu:= contu +1;
end;
writeln('La vocal A aparece cada:' ,contA, ' veces');readkey;
writeln('La vocal E aparece cada:' ,contE, ' veces');readkey;
writeln('La vocal I aparece cada:' ,contI, ' veces');readkey;
writeln('La vocal O aparece cada:' ,contO, ' veces');readkey;
writeln('La vocal U aparece cada:' ,contU, ' veces');readkey;
end;

procedure cuatro(var oracion:string);
var i,espacio,letras,carac:integer; palabras:integer; porcentaje:real;
begin
palabras:=1;
begin
for i:= 2 to length(oracion) do
if oracion[i] = ' ' then palabras:=palabras + 1;
end;
begin
espacio:=palabras -1;
carac:=length(frase);
letras:=(carac-espacio)-1;
writeln('Cantidad de letras ',letras) ;
writeln('Cantidad de espacios ',espacio);
writeln('Porcentaje: ',((espacio / (letras))*100):10:2) ;readkey;

end;
end;

Procedure menu;
begin
clrscr;
writeln('1.Telegrama ');
writeln('2.Cantidad de palabras con 10 o mas caracteres');
writeln('3.Cantidad de vocales');
writeln('4.Porcentaje de espacios en blanco');
writeln('5.Palabra mas larga');
writeln('6.Cantidad de palabras con una longitud entre 8 y 16');
writeln('caracteres posee mas de 3 veces la vocal A');
writeln('7.Salir');
writeln;
writeln('Opcion:');
readln(op);

end;

begin
clrscr;
repeat
menu;
case op of
1:uno;
3:tres;
4:cuatro(frase);
end;
until op=7 ;
end.





--------------------------------------------------------------------------------


RESPONDER
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:urgente!!! ayuda lo mas pronto

Publicado por juan (44 intervenciones) el 21/08/2009 00:44:13
lo miré asi nomas , pero de seguro el procedimiento menu que tenes que hacer no es mas ni menos que un readln(opcion) donde opcion es un integer, y dps del 1 viene el 2 :P saludos espero averte ayudado en algo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:urgente!!! ayuda lo mas pronto

Publicado por Alexis (44 intervenciones) el 21/08/2009 02:35:56
Esto es de acuerdo a lo que yo entendí del programa ;)

Opción 2:

Teóricamente hablando, el usuario ingresará palabras separadas por un espacio en blanco. Lo que yo haría es utilizar un ciclo for que recorra todo el string:

for i:=1 to length(cadena) do

luego solo haría un if

if cadena[i] <> ' ' then
contador_caracteres:=contador_caracteres+1;
else
begin
if contador_caracteres>=10 then
diez_o_mas_caracteres:=diez_o_mas_caracteres+1;
contador_caracteres:=0;
end;

luego imprimiría el resultado con un if (ya eso te lo dejo a ti)

Opción5:

Para determinar la palabra con mayor longuitud, sólo me bastaría con hacer algo parecido a la opción 2, pero esta vez utilizaría un contador (que "cuente" la longuitud de cada palabra) y una variable tipo integer en la que almacenaría la posición que ocupa la primera letra de esa palabra en la variable tipo string que contiene el texto.

mayor:=1;
pos:=1; // se guarda la posicion de la primera letra del texto
for i:=1 to length(cadena) do
begin
if cadena[i] <> ' ' then
contador_caracteres:=contador_caracteres+1;
else
begin
if contador_caracteres>mayor then
begin
mayor:=contador_caracteres;
contador_caracteres:=0;
pos:=i; //se guarda la porisción del espacio en blanco para saber que la palabra que está antes es la de mayor longuitud
end;
end;
end;

Después para imprimir esa palabra, solo haría un ciclo while que decremente valores

while (pos>=1 and cadena[pos]<>' ') do
begin
pos:=pos-1;
i:=i+1;
vector[i]:=cadena[pos];
end;

Aquí ya tendría la palabra mas larga pero guardada al contrario, para imprimirla haría:
for j:=length(vector) downto 1 do
write(vector[j]);

Opción 6:

Exactamente lo mismo que la opción 2, sólo que el if cambia

if contador_caracteres>=8 and contador_caracteres<=16 then
ocho_y_diez_caracteres:=ocho_y_diez_caracteres+1;

Espero que te sirva de ayuda!!!!
P.D.: Esto lo escribí sin codificarlo primero en un compilador, así que si hay un error ya sabrás el motivo.
Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar