Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. Secuencias1: que muestra el uso de la proposici¢n while y de las funciones de entrada y salida de caracteres. El siguiente programa lee una línea de texto de la entrada estándar y la escribe en la pantalla en mayúsculas. #include <stdio.h> #include <ctype.h> #define MF '.' /*..\me2000\ejemp12.cpp */ /* defino la constante Marca Final */ main() { char car; /* con este lazo leo y controlo en forma simult nea */ while ((car=getchar()) != MF) putchar(toupper(car)); putchar(car); return 0; } /* lectura abreviada */ /* escribo en may£sculas */ Observación: toupper() es una función de la biblioteca estándar ctype.h que transforma los caracteres a su correspondiente en mayúscula. Secuencias2: Diseño y código de un programa que lee una línea de texto de la entrada estándar y determina cual es la longitud de la palabra más larga . ALGORITMO larga; ENTRADA: secuencia de caracteres con MF; cc: carácter; SALIDA: max: entero >=0; SUPUESTOS: LA LÍNEA DE TEXTO NO TIENE BLANCOS ANTES DE LA PRIMERA PALABRA. l1. LEER(CAR); l2.. MIENTRAS( CC <> MF) leer_palabra_y_contar_cantidad_de_letras; controlar_maxima_longitud; LEER(cc); C4. ESCRIBIR(max). C5. PARAR. #include <stdio.h> /*..\me2000\ejemp13.c */ #include <ctype.h> #define MF '=' /* defino la constante Marca Final */ #define BL ' ' /* defino la constante BLanco */ main() { char car; int max=0,cont = 0; car = getchar(); while (car != MF) { /* leer_palabra_y_contar_cantidad_de_letras; */ while ((car != BL) & (car != MF)) { cont = cont +1; car = getchar(); } /* controlar_maxima_longitud; */ if (cont > max) max = cont ; /* LEER (Car); */ if (car != MF) car = getchar(); cont = 0; } printf("Longitud m xima %d\n",max); return 0; } Agrm. María Eugenia Marquetti de Vallvé 1 de 4 Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. Secuencias2.1: otra solución del ejercicio Secuencias2 #include <stdio.h> /*..\me2000\ejemp131.c */ #include <ctype.h> #define MF '=' /* defino la constante Marca Final */ #define BL ' ' /* defino la constante BLanco */ main() { char car; do { int max=0,cont = 0; while ((car != BL) & (car != MF)) { cont = cont +1; car = getchar(); } if (cont > max) max = cont ; if (car != MF) car = getchar(); cont = 0; } while (car != MF); printf("Longitud m xima %d\n",max); return 0; } Secuencias2.2: otra solución del ejercicio Secuencias2 Para esta solucion suponga que entre la ultima letra y la marca final no hay caracteres blancos. #include <stdio.h> /*..\me2000\pru.cpp */ #include <ctype.h> /* 12/oct/01 */ #define MF '=' /* defino la constante Marca Final */ #define BL ' ' /* defino la constante BLanco */ main() { char car; int max=0,cont = 0; do { do { car = getchar(); cont = cont +1; } while ((car != BL) & (car != MF)) ; if (cont > max) max = cont ; if (car != MF) car = getchar(); cont = 0; } while (car != MF); printf("Longitud m xima %d\n",max); return 0; } Secuencias2.3: otra solución del ejercicio Secuencias2 #include <stdio.h> /*..\prog99\car91.c */ #include <ctype.h> /* 17/sept/99 */ #define MF '=' /* defino la constante Marca Final */ #define BL ' ' /* defino la constante BLanco */ #define LEER car=getchar() main() { char car; int max=0,cont = 0; Agrm. María Eugenia Marquetti de Vallvé 2 de 4 Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. LEER; while (car != MF) { while ((car != BL) & (car != MF)) { cont = cont +1; LEER; } if (cont > max) max = cont ; if (car != MF) LEER; cont = 0; } printf("Longitud m xima %d\n",max); return 0; } Secuencias3: Ejemplo de uso de estructuras apropiadas para el tratamiento de secuencias. Algoritmo para verificar si una frase es un tautograma, es decir, que todas las palabras que componen la frase comienzan con la misma letra. Se consideran los posibles casos: • • • • la frase puede estar precedida por blancos la frase puede ser nula (secuencia vacía) las palabras de la frase pueden estar separadas por mas de un blanco una frase de una sola palabra se considerará un tautograma ALGORITMO tautograma; ENTRADA: secuencia de caracteres con MF, car : carácter; SALIDA : mensaje; V: AUXILIARES: Es_tauto, indicador lógico ó variable booleana; pri: carácter; NIVEL 1 T0. T1. T2. T3. T4. Es_tauto Å verdadero; Saltar_blancos_iniciales; SI ( car = MF) ENTONCES ESCRIBIR(Secuencia con blancos y MF) SINO pri Å car; MIENTRAS (car <> MF y es_tauto) saltar_palabra; SI (car <> MF) ENTONCES saltar_blancos_intermedios; controlar_tauto_con_el_1º_car_de_la_proxima_palabra; FIN-MIENTRAS; SI (Es_tauto ) ENTONCES ESCRIBIR ( Es tautograma) SINO ESCRIBIR (NO es tautograma) PARAR. NIVEL 2 Saltar_blancos_iniciales; LEER(car); MIENTRAS (car = blanco y car <> MF) LEER(car); FIN_MIENTRAS; saltar_palabra; MIENTRAS (car <> blanco y car <> MF) LEER(car); FIN_MIENTRAS; Agrm. María Eugenia Marquetti de Vallvé 3 de 4 Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. saltar_blancos_intermedios; MIENTRAS (car = blanco y car <> MF) LEER(car); FIN_MIENTRAS; controlar_tauto_con_el_1º_car_de_la_proxima_palabra; SI (car <> MF ) ENTONCES SI (car <> pri) ENTONCES Es_tauto Å falso; SINO Leer(car); Se sugiere al alumno la codificación y posterior prueba de este ejercicio. Secuencias4: Ejemplo de uso de estructuras apropiadas para el tratamiento de secuencias. Una frase es “ un conjunto de palabras que basta para formar sentido”. Una palabra es “ un conjunto de caracteres unidos que designan una cosa o expresan una idea”. El ejemplo considera una frase como una secuencia de caracteres con marca final, por ejemplo un punto. Se presenta el diseño de un algoritmo que lee la frase y cuenta la cantidad de diptongos “ai” presentes en la misma. La salida de este algoritmo es el valor del contador de diptongos. Por ejemplo: Para la frase “Inauguración del Mundial de Voley”, el contador tendrá el valor 1. ALGORITMO diptongo; ENTRADA: secuencia de caracteres con MF; car: carácter; SALIDA: cont, entero >=0; Nivel 1 D1. LEER(car); D2. MIENTRAS (car <> MF) Saltar_blancos; Procesar_palabra; FIN_MIENTRAS; D3. ESCRIBIR(cont); D4. PARAR. #include <stdio.h> /*..\prog99\car10.c */ #include <ctype.h> /* 17/sept/99 */ #define MF '.' /* defino la constante Marca #define A 'a' /* defino la constante #define I 'i' /* defino la constante #define U 'u' /* defino la constante main() { char car; Final */ 'a' */ 'i' */ 'u' */ int cont = 0; car = getchar(); while (car != MF) { do car = getchar(); while ((car == ' ') && (car != MF)); while ((car != ' ') && (car != MF)) { if (car == A) Agrm. María Eugenia Marquetti de Vallvé 4 de 4 Programador Universitario Facultad de Ciencias Exactas y Tecnología – U.N.T. { car = getchar(); if ((car == I ) || (car == U)) cont = cont +1; } if (car != MF) car = getchar(); } } printf("Hay %d diptongos que comienzan con a\n",cont); return 0; } Sugerencia: modifique el algoritmo de modo tal que le permita contar la cantidad de diptongos del tipo: “au”, “ei”, “eu”, “ou”, “oí”. Codifique y pruebe para distintas entradas. Agrm. María Eugenia Marquetti de Vallvé 5 de 4