Repet_25-Calcular+letra+más+proxima

=__**Calcular la letra más próxima a la primera que se ha leído**__=

Sólo se tienen en cuenta las letras de la A a la Z. Se copnsideran iguales las letras mayúsculas que las minúsculas.

**Utilizando ReadLn para leer los carateres**

code format="pascal" PROGRAM P_33_E_25 ; USES Crt; VAR cPrimerCaracterLeido, cCaracterLeido, cLetraMasProxima : Char ; byDistancia, byDistanciaMenor                         : Byte ; boEsElPrimerCaracter                                  : Boolean ;

BEGIN Clrscr ; Writeln ; Writeln ('Programa que calcula la letra más próxima a la primera que escribas' ) ; Writeln ('(se considera igual la mayúsculas que las minúsculas)') ; WriteLn (' -- para finalizar vuelve a escribir la letra inicial --') ; WriteLn ;

Writeln ; WriteLN  (' -- Se utiliza el procedimiento READLN ---') ;

REPEAT Write ('Escribe la primera letra (que sera el final de la serie) ') ; Write ('y pulsa RETURN: ') ; Readln (cPrimerCaracterLeido) ;

cPrimerCaracterLeido := UpCase (cPrimerCaracterLeido) UNTIL ('A' <= cPrimerCaracterLeido) AND (cPrimerCaracterLeido <= 'Z') ;

cLetraMasProxima    := '?'  ;       { Carácter interrogación (valdría cualquiera que no sea una letra) } boEsElPrimerCaracter := TRUE ;

Writeln ; Write ('Escribe una letra ( ', cPrimerCaracterLeido, ' para terminar), y pulsa RETURN: ') ; Readln (cCaracterLeido) ; cCaracterLeido := Upcase (cCaracterLeido) ;

WHILE cCaracterLeido <> cPrimerCaracterLeido DO      BEGIN IF ('A' <= cCaracterLeido) AND (cCaracterLeido <= 'Z') THEN BEGIN byDistancia := Abs (Ord(cPrimerCaracterLeido)- Ord(cCaracterLeido)) ;

IF boEsElPrimerCaracter THEN BEGIN byDistanciaMenor := byDistancia ; cLetraMasProxima := cCaracterLeido ; END ELSE IF (byDistanciaMenor > byDistancia) THEN BEGIN byDistanciaMenor := byDistancia ; cLetraMasProxima := cCaracterLeido ; END ; boEsElPrimerCaracter := FALSE END ELSE Writeln (' ', cCaracterLeido, ' No se considera una letra') ;

Write ('Escribe una letra y pulsa RETURN: ') ; Readln (cCaracterLeido) ; cCaracterLeido := Upcase (cCaracterLeido) ; END ;

IF cLetraMasProxima = '?' THEN BEGIN Writeln ; Writeln ('No has escrito ninguna letra válida, salvo la primera') ; END ELSE BEGIN Writeln ; Writeln ('Una de las letras más próxima es: ', cLetraMasProxima) ; Writeln ('   Su distancia a la letra ', cPrimerCaracterLeido, ' es: ', byDistanciaMenor) ; END ;

ReadLN ; END. code

code format="pascal" PROGRAM P_33_E_25 ; USES Crt; VAR cPrimerCaracterLeido, cCaracterLeido, cLetraMasProxima : Char ; byDistancia, byDistanciaMenor                         : Byte ;

BEGIN Clrscr ; Writeln ; Writeln ('Programa que calcula la letra más próxima a la primera que escribas' ) ; Writeln ('(se considera igual la mayúsculas que las minúsculas)') ; WriteLn (' -- para finalizar vuelve a escribir la letra inicial --') ; WriteLn ;

Writeln ; WriteLn  (' -- Se utiliza el procedimiento READLN --') ; Writeln ;

REPEAT Write ('Escribe la primera letra (que sera el final de la serie) ') ; Write ('y pulsa RETURN: ') ; Readln (cPrimerCaracterLeido) ;

cPrimerCaracterLeido := UpCase (cPrimerCaracterLeido) UNTIL ('A' <= cPrimerCaracterLeido) AND (cPrimerCaracterLeido <= 'Z') ;

byDistanciaMenor := 255 ; cLetraMasProxima := #255 ;           { Carácter cuyo código ASCII es el 255  (valdría cualquiera que no sea una letra) }

Writeln ; Write ('Escribe una letra ( ', cPrimerCaracterLeido, ' para terminar), y pulsa RETURN: ') ; Readln (cCaracterLeido) ; cCaracterLeido := Upcase (cCaracterLeido) ;

WHILE cCaracterLeido <> cPrimerCaracterLeido DO BEGIN IF ('A' <= cCaracterLeido) AND (cCaracterLeido <= 'Z') THEN BEGIN byDistancia := Abs (Ord(cPrimerCaracterLeido) - Ord(cCaracterLeido)) ;

IF (byDistanciaMenor > byDistancia) THEN BEGIN byDistanciaMenor := byDistancia ; cLetraMasProxima := cCaracterLeido ; END ; END ELSE Writeln (' ', cCaracterLeido, ' No se considera una letra') ;

Write ('Escribe una letra y pulsa RETURN: ') ; Readln (cCaracterLeido) ; cCaracterLeido := Upcase (cCaracterLeido) ; END ;

IF byDistanciaMenor = 255 THEN BEGIN Writeln ; Writeln ('No has escrito ninguna letra válida, salvo la primera') ; END ELSE BEGIN Writeln ; Writeln ('Una de las letras más próxima es: ', cLetraMasProxima) ; Writeln (' Su distancia a la letra ', cPrimerCaracterLeido, ' es: ', byDistanciaMenor) ; END ;

ReadLN ; END. code