UTNianos

Versión completa: Consulta - Ej 27 (guia nueva) Modulo 1
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola a todos los q tengan ganas de ayudarme....
bue vamos a los bifes, el programa me funka bien sin problemas hasta q llega a la parte 'c' del ejercicio,
no se xq cuenta un caracter de mas siempre Confused ... no se q esta mal ...
ustedes q dicen... thumbup3 o thumbdown

enunciado:
Ej. MI-27: Dada una serie de caracteres que conforman una oración, donde cada palabra está separada de la siguiente por un carácter blanco y la oración finaliza con un punto. Se pide informar:
a) cantidad de veces que apareció cada vocal
b) cantidad de palabras que contiene la oración
c) cantidad de letras que posee la palabra más larga.

aca va my codigo:



program Ejercicio_27;

{$APPTYPE CONSOLE}

uses
SysUtils,console;


var s:string;
var n,i,k,contA,contE,contI,contO,contU:integer;
var contLetra,contPalabra,maxLetra:integer;

begin
/// se ingresa s ---> oracion
readln(s);

n:=length(s);

i:=1;
k:=1;
contA:=0;
contE:=0;
contI:=0;
contO:=0;
contU:=0;
contPalabra:=1;
maxLetra:=0;

while (i <= n) do begin
contLetra:=0;

if (s[i] = 'a') then begin
contA:=contA + 1;
end;
if (s[i] = 'e') then begin
contE:=contE + 1;
end;
if (s[i] = 'i') then begin
contI:=contI + 1;
end;
if (s[i] = 'o') then begin
contO:=contO + 1;
end;
if (s[i] = 'u') then begin
contU:=contU + 1;
end;
if (s[i] = ' ') then begin
contPalabra:=contPalabra + 1;
end;

repeat
if ( k <= n) then begin
contLetra:=contLetra + 1;
if (contLetra > maxLetra) then begin
maxLetra:=contLetra;
end;
end;
k:=k+1;
until ( (s[k]=' ') OR (s[k]='.' ) );

i:=i+1;

end;

writeln('La cantidad de veces que aparecen las vocales son:');
writeln('La vocal a: ',contA,' veces');
writeln('La vocal e: ',contE,' veces');
writeln('La vocal i: ',contI,' veces');
writeln('La vocal o: ',contO,' veces');
writeln('La vocal u: ',contU,' veces');
writeln('La cantidad de palabras que aparecen son: ',contPalabra);
writeln('La palabra mas larga tiene: ',maxLetra,' letras');

readkey();
end.

buenas..a 'k' lo consideras como un contador de las letras verdad?proba definiendolo como cero para el ciclo repeat
saludos
creo que tu problema esta en sumar 1 a la cantidad de letras antes del if.

te paso mi programa, en la guia vieja es el ej 31. (sisis, uso un array, hace de cuenta que que tenes 5 contadores)



type
ar=array [1..5] of integer;


procedure pro(pal:string[50];var a:ar;i:integer;var contle:integer;var contpal:integer;var max:integer);
begin

case pal[i] of
'a','A' : begin a[1]:=a[1]+1; end;
'e','E' : begin a[2]:=a[2]+1; end;
'i','I' : begin a[3]:=a[3]+1; end;
'o','O' : begin a[4]:=a[4]+1; end;
'u','U' : begin a[5]:=a[5]+1; end;
end;

contle:=contle+1;
if (pal[i]=' ') then begin
contpal:=contpal+1;
if (contle>max) then
max:=contle;

contle:=0;
end;

end;

procedure res(a:ar;max:integer;contpal:integer);
begin

writeln ('Hay ',a[1],' vocales a');
writeln ('Hay ',a[2],' vocales e');
writeln ('Hay ',a[3],' vocales i');
writeln ('Hay ',a[4],' vocales o');
writeln ('Hay ',a[5],' vocales u');
writeln('La palabra mas larga tiene ',max,' letras');
writeln ('Hay ',contpal,' palabras');

end;

var
pal:string[50];
a:ar;
contpal,i,contle,l,max:integer;

begin

contle:=0; max:=0; contpal:=1;
for i:= 1 to 5 do begin
a[i]:=0; //inicializa el array en 0
end;

write ('Ingrese una oracion: ');
readln(pal);

l:=length(pal);

for i:=1 to l do begin
pro(pal,a,i,contle,contpal,max); //procesa
end;

res(a,max,contpal); //muestra la resolucion

end.


edit:
referencias: contle = contador de letras
contpal = contador de palabras
Gracias k-po tenias razon thumbup3

Lo habia revisado pero no me di cuenta de eso Confused
Es alto choclo el mio.... pero el profe no queria q usemos arrays, subprogramas, etc... lo queria base.
Claro, porque en el Módulo 1 no se ve arrays, entonces no hay que usarlo
Me parece que lo que se desea para el ejercicio es que aprendas a hacer corte de control.

[attachment=3351]


program Ejercicio_27;

var oracion:string;
var contA,contE,contI,contO,contU:integer;
var contPalabras,maxLetras,letras: integer;
var i:integer;

begin

readln(oracion);

//Inicialización oracion
contA:=0;
contE:=0;
contI:=0;
contO:=0;
contU:=0;
contPalabras:=0;
maxLetras:=0;
i := 1;

while (oracion[i]<>'.') do begin //Ciclo que corta cuando termina la oración


//Inicialización palabra
contPalabras := contPalabras +1;
letras := 0;

while( (oracion[i]<>' ') and (oracion[i]<>'.') ) do begin //Ciclo que corta cuando termina la palabra y/o oracion

letras:=letras+1;

case oracion[i] of
'a','A' : contA:=contA+1;
'e','E' : contE:=contE+1;
'i','I' : contI:=contI+1;
'o','O' : contO:=contO+1;
'u','U' : contU:=contU+1;
end;
i:=i+1;

end;

//Finalización palabra
if letras>maxLetras then maxLetras:=letras;
if oracion[i]=' ' then i:=i+1;

end;

//Finalización oracion
writeln('La cantidad de veces que aparecen las vocales son:');
writeln('La vocal a: ',contA,' veces');
writeln('La vocal e: ',contE,' veces');
writeln('La vocal i: ',contI,' veces');
writeln('La vocal o: ',contO,' veces');
writeln('La vocal u: ',contU,' veces');
writeln('La cantidad de palabras que aparecen son: ',contPalabras);
writeln('La palabra mas larga tiene: ',maxLetras,' letras');

end.



Los cortes de control se usan cuando tenés cosas dentro de otras(ejemplo: palabras dentro de una oración), son siempre iguales: Tenés varios ciclos anidados y para cada uno tenés acciones de inicialización (por ejemplo en este fue inicializar las variables que importan para toda la oración antes del ciclo que recorre la oración, y las que importan para la palabra antes del ciclo de palabra) y de finalización (en la finalización de la oración imprimís, al final del ciclo que recorre la palabra te fijás si es la que tiene más letras)

Si en vez de una oración te pasaran un párrafo(y te pidieran por ejemplo contar la cantidad de oraciones) se agregaría un ciclo más.



program Ejercicio_27;



var parrafo:string;
var contA,contE,contI,contO,contU:integer;
var contPalabras,contOraciones,maxLetras,letras: integer;
var i:integer;
begin

readln(parrafo);

//Inicialización párrafo
contOraciones:=0;
i:=1;


while(i < Length (parrafo)) do begin

//Inicialización oracion
contA:=0;
contE:=0;
contI:=0;
contO:=0;
contU:=0;
contPalabras:=0;
maxLetras:=0;

contOraciones:= contOraciones+1;

while ( (parrafo[i]<>'.')) do begin


//Inicialización palabra
contPalabras := contPalabras +1;
letras := 0;

while( (parrafo[i]<>' ') and (parrafo[i]<>'.')) do begin

letras:=letras+1;

case parrafo[i] of
'a','A' : contA:=contA+1;
'e','E' : contE:=contE+1;
'i','I' : contI:=contI+1;
'o','O' : contO:=contO+1;
'u','U' : contU:=contU+1;
end;
i:=i+1;

end;

//Finalización palabra
if letras>maxLetras then maxLetras:=letras;
if parrafo[i]=' ' then i:=i+1;

end;

//Finalización oracion
writeln('Oracion nro: ',contOraciones);
writeln('La cantidad de veces que aparecen las vocales son:');
writeln('La vocal a: ',contA,' veces');
writeln('La vocal e: ',contE,' veces');
writeln('La vocal i: ',contI,' veces');
writeln('La vocal o: ',contO,' veces');
writeln('La vocal u: ',contU,' veces');
writeln('La cantidad de palabras que aparecen son: ',contPalabras);
writeln('La palabra mas larga tiene: ',maxLetras,' letras');
writeln('==========================================================');
writeln();
i:=i+2;//Avanzo el . y el espacio.
end;

//Finalización párrafo
writeln('La cantidad de oraciones es: ',contOraciones);


end.

URLs de referencia