2.10 Reescriba la función lower, que convierte letras mayúsculas en minúsculas, con una expresión condicional en vez de un if-else.
___________________________________________________________________________________
SOLUCIÓN: La modificación es directa. El programa está escrito de tal manera que se puede recibir como entrada un archivo de texto y convertirlo a minúsculas. La razón por la que éste programa sólo funciona con el código ASCII, es porque la línea principal de la función lower es la siguiente:
x = (c >= 'A' && c <= 'Z')? c + 'a' - 'A': c;
básicamente hace uso del hecho que en ASCII, las letras mayúsculas aparecen antes que las minúsculas, y la distancia entre una mayúscula y su correspondiente minúscula es de 32 posiciones. Así, el valor de A es 65, y el de a es 97; el de S es 83, y el de s 115. Por tal motivo, en la instrucción de asignación, primero se verifica que el carácter sea mayúscula, si lo es, entonces se cambia a el correspondiente valor más 32 ( escrito como c + 'a' -'A'), de lo contrario, se deja igual.
#include <stdio.h> int lower(int s); //////////////////////////////////////////////// // MAIN //////////////////////////////////////////////// int main() { /*Abre main*/ int z, l; printf("\nPor favor, introduzca un texto. "); printf("Se imprimira en minusculas.\n"); while( (z = getchar()) != EOF) { /* Abre while */ l = lower(z); putchar(l); }/*Cierra while */ return 0; } /*Cierra main*/ /*////////////////////////////////////////////// // LOWER //////////////////////////////////////////////*/ int lower(int c) { /*Abre lower*/ int x; x = (c >= 'A' && c <= 'Z')? c + 'a' - 'A': c; return x; } /*Cierra lower*/
La ejecución con éste texto como entrada
ERASE UN HOMBRE A UNA NARIZ PEGADO, ERASE UNA NARIZ SUPERLATIVA UNASE UNA NARIZ ZAYON Y ESCRIBA, ERASE UN PEJE ESPADA MUY BARBADO.
produce:
Por favor, introduzca un texto. Se imprimira en minusculas. erase un hombre a una nariz pegado, erase una nariz superlativa unase una nariz zayon y escriba, erase un peje espada muy barbado.
No hay comentarios:
Publicar un comentario