[ Foro de Pascal ]
Chicos no puedo contar la cantidad de palabras en un string con este codigo. La consigna pide: "Se lee una secuencia de caracteres terminada en '*'. La secuencia está dividida en oraciones que terminan en '.' (punto). Para cada oración se pide contar e informar la cantidad de veces que aparece la subsecuencia 'LA' y contar la cantidad de palabras por oración."
program Ejer9Tpntres;
var
cade,cantLA:string;
cantp,cantora,o,i:integer;
flg:Boolean;
begin
cantp:=0;
cantora:=0;
flg:= FALSE;
writeln('Ingrese cadena terminada en *.Cada oración debe terminar en punto.Mostraremos la subsecuencia LA de cada oración y cantidad de palabras de cada oracion.');
read(cade);
for i:=1 to length(cade)do
begin
if (cade[i]='') then
begin
cantp:=cantp+1;
writeln('Cantidad de palabras: ',cantp);
end;
if (cade[i]= '.') then
begin
cantora:=cantora+1;
writeln('Oracion n ',cantora);
end;
if (cade[i]='l') and (cade[i+1]='a') then
begin
cantLA:=cade[i];
writeln('Subsecuencias LA: ',cantLA);
end;
if (cade[i]='*') then
begin
flg:=TRUE;
end;
end;
end.
digamos que "funciona" todo, menos el conteo de la cantidad de palabras.
Lo primero que te puedo decir es que nunca uses "READ" para recibir datos del teclado como es el caso de este programa que está intentando recibir una oración por el teclado; en lugar de "READ" debes usar "READLN". Recibe este consejo para los programas que hagas de ahora en adelante. "READ" es muy útil cuando trabajemos con archivos o ficheros. Creo que en esto tendrás una mejora importante en resolver el problema.
Saludos.
Perfecto! Gracias Luis! ahora mi código se ve de esta manera. Lo que no puedo lograr es contar de forma correcta la cantidad de palabras por oración... teniendo en cuenta que cada oración termina en punto " . " y cada palabra esta separada por un espacio.
var
cade:string;
cantp,cantora,cantLA, i:integer;
begin
cantp:=0;
cantora:=0;
cantLA:=0;
writeln('Ingrese cadena terminada en *.Cada oración debe terminar en punto.Mostraremos la
subsecuencia LA de cada oración y cantidad de palabras de cada oracion.');
readln(cade);
for i:=1 to length(cade)do
begin
if (cade[i]='l') and (cade[i+1]='a') then
begin
cantLA:=cantLA+1;
end;
if (cade[i]='') or (cade[i]='.') then
begin
cantp:=cantp+1;
end;
if (cade[i]= '.') then
begin
cantora:=cantora+1;
writeln('Oracion n ',cantora);
writeln('Cantidad de palabras: ',cantp);
writeln('Subsecuencias LA: ',cantLA);
cantp:=0;
cantLA:=0;
end;
end;
end.
PERDON... ESTE ES EL CODIGO ACTUAL
Lo que no puedo lograr es contar de forma correcta la cantidad de palabras por oración... teniendo en cuenta que cada oración termina en punto " . " y cada palabra esta separada por un espacio.
var
cade:string;
cantp,cantora,cantLA, i:integer;
begin
cantp:=0;
cantora:=0;
cantLA:=0;
writeln('Ingrese cadena terminada en *.Cada oración debe terminar en punto.Mostraremos la subsecuencia LA de cada oración y cantidad de palabras de cada oracion.');
readln(cade);
for i:=1 to length(cade)do
begin
if (cade[i]='l') and (cade[i+1]='a') then
begin
cantLA:=cantLA+1;
writeln('Subsecuencias LA: ',cantLA);
end;
if (cade[i]='') or (cade[i]='.') then
begin
cantp:=cantp+1;
writeln('Cantidad de palabras: ',cantp);
end;
if (cade[i]= '.') then
begin
cantora:=cantora+1;
writeln('Oracion n ',cantora);
cantp:=0;
cantLA:=0;
end;
end;
end.
ya encontre la solucion gracias
program Ejer9Tpntres;
var
cade:string;
cantp,cantora,cantLA, i:integer;
begin
cantp:=0; //cantidad de palabras
cantora:=0; //cantidad de oraciones
cantLA:=0; //cantidad de subsecuencias LA
writeln('Ingrese cadena terminada en *.Cada oración debe terminar en punto.Mostraremos la subsecuencia LA de cada oración y cantidad de palabras de cada oracion.');
readln(cade);
for i:=1 to length(cade)do //leemos la cadena desde principio a fin
begin
if (cade[i]='l') and (cade[i+1]='a') then //comprobamos si el caracter leido es 'l' y si el siguiente [i+1] es 'a'.
begin
cantLA:=cantLA+1; //si es asi vamos sumando la subsecuencia 'la'.
end;
if (cade[i]=' ') or (cade[i]='.') then //para contar las palabras vemos si el caracter leido es un espacio en blanco O un punto.
begin //ya que la oracion termina en punto pero tenemos q leer tambien esa ultima palabra...
cantp:=cantp+1;
end;
if (cade[i]= '.') then //aca vemos si el caracter leido es solo un punto( . ) entonces cantora(cantidad de oracion)va incrementandose
begin
cantora:=cantora+1;
writeln('Oracion n ',cantora);
writeln('Cantidad de palabras: ',cantp);
writeln('Subsecuencias LA: ',cantLA);
cantp:=0; // igualamos 0 para que en cada pasada vuelva a contar desde cero la cantidad
cantLA:=0; // lo mismo
end;
end;
end.
Pero, solo cuenta bien la cantidad de palabras de la primera oración, el resto siempre pone una palabra de más, eso debes corregirlo; te adelanto que el error está en que la cada oración termina con un punto pero comienza con un espacio en blanco, el cual está contando como una palabra.
En cuanto a las secuencias "la", solo cuenta aquellas que son minúsculas, no contaría "LA", ni "La" ni tampoco "lA", y es que para el programa un caracter en minúsculas es distinto al mismo caracter en mayúsculas. Te sugiero corregirlo sustituyendo en el condicional respectivo lo que has escrito por lo siguiente:
if ((cade[i]='L') or (cade[i]='l')) and ((cade[i+1]='A') or (cade[i+1]='a')) then
Saludos.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)