[ Foro de Pascal ]

AYUDA PASCAL

25-Jun-2020 18:34
agustin mayora
5 Respuestas

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.


26-Jun-2020 00:58
Luis Torres (+18)

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.


26-Jun-2020 14:44
agustin mayora

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.


26-Jun-2020 14:50
agustin mayora

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.


26-Jun-2020 18:19
agustin mayora

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.




26-Jun-2020 23:58
Luis Torres (+18)

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.)