Problema pascal

Iniciado por netca, 1 Mayo 2011, 01:52 AM

0 Miembros y 1 Visitante están viendo este tema.

netca

se lee secuencia de caracteres hasta encontarar un punto. Informar la longuitud de la palabras mas larga que empieza con 't'.

Program ejemplo;
var
   cant,maximot:integer;
   letra:char;
begin
     cant:=0;
     maximot:=0;

     Writeln('Inserte los caracteres :' ); Read(letra);

     while(letra='')do
                   read(letra);

     while (letra <>'.')do begin
           cant:=0 ;

           if( letra='t') then  begin
               cant:=cant+1;

               while(letra<>'') or (letra <>'.') do begin
                             read(letra) ;
                              cant:=cant+1 ;
               end;
               if(cant>maximot)then
                                   maximot:=cant;
              end;
     end;
     Writeln('La cantidad de caracteres leidos fue de : ' , cant);
     readln;
     readln
end.   


No se cual es el error...

Valkyr

Si eres un poco más claro y nos dices que error es el que te da pues podremos ayudarte mejor. Te da error al compilar? no hace la función que esperas que haga? o que?

netca

Cita de: Valkyr en  1 Mayo 2011, 17:54 PM
Si eres un poco más claro y nos dices que error es el que te da pues podremos ayudarte mejor. Te da error al compilar? no hace la función que esperas que haga? o que?


Puedo insertar caracteres aunque ponga puntos... no se si me explico.No informa nada.

leogtz

Cita de: netca en  1 Mayo 2011, 19:02 PM

Puedo insertar caracteres aunque ponga puntos... no se si me explico.No informa nada.

Mmmm, fijate en la condición, creo que deberías cambiar el OR por el AND para hacerlo más estricto.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Valkyr

Cita de: netca en  1 Mayo 2011, 01:52 AM

     while (letra <>'.')do begin
           cant:=0 ;

           if( letra='t') then  begin
               cant:=cant+1;

               while(letra<>'') or (letra <>'.') do begin
                             read(letra) ;
                              cant:=cant+1 ;
               end;
               if(cant>maximot)then
                                   maximot:=cant;
              end;
     end;


Fijate que en ese bucle si no se cumple la condición de que la letra sea una 't' cae en un bucle infinito ya que no vuelve a leer otro caracter y por tanto nunca va a ser ni una t ni un punto. Es decir deberías hacer algo así:


     while (letra <>'.')do begin
           cant:=0 ;

           if( letra='t') then  begin
               cant:=cant+1;

               while(letra<>'') or (letra <>'.') do begin
                             read(letra) ;
                              cant:=cant+1 ;
               end;
               if(cant>maximot)then
                                   maximot:=cant;
              end;
           else read(letra);
     end;


Algo así para que en caso de que no sea una t vuelva a leer otro caracter.

Por otro lado esta parte de código sobraría:
     
while(letra='')do
                   read(letra);


Ya que en el bucle que he citado más arriba sería suficiente.

También, aunque de esto ya estoy menos seguro, en las condiciones no deberías poner el caracter ' ' en lugar de ''? Se supone que '' es un caracter nulo o algo así no? xD, y también lo que dice Leo, deberías cambiar la condición en lugar de OR poner AND.

Haz los cambios y ya nos cuentas!

Suerte!

netca

Al parecer se soluciono ^^ , gracias