Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: netca en 1 Mayo 2011, 01:52 am



Título: Problema pascal
Publicado por: netca en 1 Mayo 2011, 01:52 am
se lee secuencia de caracteres hasta encontarar un punto. Informar la longuitud de la palabras mas larga que empieza con 't'.

Código:
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...


Título: Re: Problema pascal
Publicado por: 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?


Título: Re: Problema pascal
Publicado por: netca en 1 Mayo 2011, 19:02 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.


Título: Re: Problema pascal
Publicado por: leogtz en 1 Mayo 2011, 19:10 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.


Título: Re: Problema pascal
Publicado por: Valkyr en 2 Mayo 2011, 02:48 am
Código:
     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í:

Código:
     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:
Código:
     
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!


Título: Re: Problema pascal
Publicado por: netca en 4 Mayo 2011, 01:07 am
Al parecer se soluciono ^^ , gracias