Repet_32-Leer+caracteres+hasta+leer+STOP

=__**leer caracteres hasta leer las letras de STOP**__=

Escribir un programa que lea caracteres desde teclado, bien hasta que le hayan le¡do 20 caracteres o hasta que se hayan introducido los caracteres de la palabra STOP, en este orden aunque no necesariamente de modo consecutivo.

**Utilizando ReadLn para leer los carateres**

Tendremos en cuenta que no se repiten letras en la palabra STOP

code format="pascal" PROGRAM P_39_E32_A ; USES Crt ; CONST cPRIMERA = 'S' ; cSEGUNDA = 'T' ; cTERCERA = 'O' ; cCUARTA = 'P' ; VAR cLetraLeida, cLetraBuscada, cEspera : Char ; boLeidasTodas : Boolean ; iContador : integer ;

BEGIN { Mostrar mensaje explicativo } Writeln ; Writeln ('Este programa termina cuando se haya escrito STOP') ; Writeln ('  (con los caracteres consecutivos o no)') ; Writeln (' - o cuando se hayan escrito 20 caracteres - ') ; Writeln ; { Inicializar las variables } iContador    := 0 ; boLeidasTodas := FALSE ; cLetraBuscada := cPRIMERA ;

WriteLn ('Escribe una secuencia de letras y pulsa RETURN tras cada una de ellas: ') ;

REPEAT { leer una letra } Write ('Escribe una letra y pulsa RETURN: ') ; ReadLn (cLetraLeida) ;             { se considera que siempre se lee una letra }

iContador := iContador + 1 ;

cLetraLeida := Upcase (cLetraLeida) ;

IF cLetraLeida = cLetraBuscada THEN { Si se ha leido la tecla buscada, buscar la siguiente } CASE Upcase (cLetraLeida) OF            cPRIMERA :  cLetraBuscada := cSEGUNDA ; cSEGUNDA : cLetraBuscada := cTERCERA ; cTERCERA : cLetraBuscada := cCUARTA ; cCUARTA :  boLeidasTodas := TRUE ; END UNTIL boLeidasTodas OR (iContador = 20 ); { Mensaje final }

Writeln ; Writeln ;

IF boLeidasTodas THEN Writeln ('FIN DEL PROGRAMA: Has escrito STOP') ELSE Writeln ('FIN DEL PROGRAMA: entre los 20 primeros caracteres, ',              'NO has escrito STOP'); Writeln ; Writeln ; Write ('Pulsa una tecla para terminar...') ; cEspera := Readkey ; END. code

**Utilizando ReadKey para leer los carateres**

Tendremos en cuenta que no se repiten letras en la palabra STOP

code format="pascal" PROGRAM P_39_E32_B ; USES Crt ; CONST cPRIMERA = 'S' ; cSEGUNDA = 'T' ; cTERCERA = 'O' ; cCUARTA = 'P' ; VAR cLetraLeida, cLetraBuscada, cEspera : Char ; boLeidasTodas : Boolean ; iContador : integer ;

BEGIN { Mostrar mensaje explicativo } Writeln ; Writeln ('Este programa termina cuando se haya escrito STOP') ; Writeln ('  (con los caracteres consecutivos o no)') ; Writeln (' - o cuando se hayan escrito 20 caracteres - ') ; Writeln ; { Inicializar las variables } iContador    := 0 ; boLeidasTodas := FALSE ; cLetraBuscada := cPRIMERA ;

WriteLn ('Escribe una secuencia de letras y pulsa RETURN: ') ;

REPEAT REPEAT                                            { leer una letra } cLetraLeida := UpCase (ReadKey) ; UNTIL ('A' <= cLetraLeida) AND (cLetraLeida <= 'Z') ; Write (cLetraLeida) ;

iContador := iContador + 1 ;

IF cLetraLeida = cLetraBuscada THEN { Si se ha leido la tecla buscada, buscar la siguiente } CASE Upcase (cLetraLeida) OF            cPRIMERA :  cLetraBuscada := cSEGUNDA ; cSEGUNDA : cLetraBuscada := cTERCERA ; cTERCERA : cLetraBuscada := cCUARTA ; cCUARTA :  boLeidasTodas := TRUE ; END UNTIL boLeidasTodas OR (iContador = 20 ); { Mensaje final }

Writeln ; Writeln ;

IF boLeidasTodas THEN Writeln ('FIN DEL PROGRAMA: Has escrito STOP') ELSE Writeln ('FIN DEL PROGRAMA: entre los 20 primeros caracteres, ',              'NO has escrito STOP'); Writeln ; Writeln ; Write ('Pulsa una tecla para terminar...') ; cEspera := Readkey ; END. code