Fecha de efectividad: _______________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formatos para prácticas de laboratorio CARRERA PLAN DE ESTUDIO CLAVE ASIGNATURA NOMBRE DE LA ASIGNATURA LSC 2003-1 5221 Lenguaje de Programación Estructurada PRÁCTICA No. LABORATORIO DE 4 NOMBRE DE LA PRÁCTICA Licenciado en Sistemas Computacionales DURACIÓN (HORA) Cadenas de Caracteres 2 1. INTRODUCCIÓN Esta práctica presenta algunas funciones estándar de la biblioteca de C, que facilitan el procesamiento de cadenas y caracteres. Una cadena es una serie de caracteres tratados como una sola unidad, puede contener letras, dígitos y varios caracteres especiales como +, - , * , /, $, y otros, y siempre terminará con el carácter nulo ('\0'), que indica el fin de la cadena. Para declarar una cadena lo deberás hacer de tipo char de la siguiente manera: char letra; Aquí la variable letra tiene capacidad para almacenar un carácter. char palabra[20]; Aquí la variable palabra, podrá almacenar hasta 19 caracteres. Esto debido a que el último carácter debe ser el caracter nulo ('\0') o fin de cadena. En C, las constantes de cadena se escriben entre dobles comillas (" ") y las constantes de carácter entre comillas sencillas (' ') y pueden asignarse constantes de cadenas o de carácter a las variables al momento de su declaración de la siguiente manera: char letra='a'; letra es una variable que solo puede almacenar un carácter, en este caso almacena una 'a'. Gráficamente se vería así: letra Formuló Ing. Verónica Beltrán Pérez Ing. Eva Herrera Revisó Aprobó L.S.C.Mónica Cristina Lam Mora Autorizó M.C. Miguel Ángel Martínez Romero Ramírez L.I. Hilda Olivia Albarrán Padilla Maestro Coordinador de Programa Educativo Gestión de Calidad Director de la Facultad Código GC-N4-017 Revisión 1 Página 1 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formatos para prácticas de laboratorio char palabra[20]="UNIVERSIDAD"; palabra es una variable que puede almacenar hasta 20 caracteres, debido a que el último de esos caracteres es el carácter nulo ('\0') o fin de cadena, la variable podrá almacenar en forma efectiva 19 caracteres. Gráficamente se vería así: Palabra Es importante notar que una cadena puede manejarse como una unidad o bien como un conjunto de caracteres, los cuales pueden ser direccionados por la posición que ocupan dentro de la cadena. Por ejemplo una cadena se podría imprimir de las siguientes maneras: char palabra[20]="UNIVERSIDAD"; printw("El contenido de la cadena es %s\n",palabra); char palabra="UNIVERSIDAD"; printw("El contenido de la cadena es\n"); for (c=0;c<11;c++) printw("%c\n",palabra[c]); En este caso nosotros sabemos la longitud de la cadena, por lo que podemos imprimir desde la posición 0 hasta la 10, que es la posición donde se encuentra la última letra de la palabra UNIVERSIDAD. Cuando nosotros no conocemos de antemano la longitud de una cadena, ésta puede ser obtenida mediante una función de cadena llamada strlen(), que se verá adelante. NOTA: Al declarar una cadena, la dimensión de la cadena debe ser, lo suficientemente grande para almacenar la cadena y su carácter de terminación o carácter nulo ( '\0') 2. OBJETIVO (COMPETENCIA) El alumno aplicará las funciones para el manejo de cadenas de caracteres. 3. FUNDAMENTO Funciones de entrada (Input) getch() Esta función lee un caracter de la pantalla. En el modo de no_espera, si no hay una dato de entrada esperando, retorna un valor de ERR. En el modo de espera, el programa espera hasta que el sistema pase un texto a través del programa. Dependiendo de como haya sido activado cbreak(), getch() espera por un carácter en el modo cbreak() y por un carácter de nueva línea en el modo nocbreak(). En el ejemplo de abajo al introducir las vocales no debes presionar enter ya que se activo el modo cbreak();. Ejemplo: #include<ncurses.h> #include<string.h> int main() Código GC-N4-017 Revisión 1 Página 2 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formatos para prácticas de laboratorio { char letra; int c,a,e,i,o,u,vocales; initscr(); clear(); cbreak(); printw("Introduce las cinco vocales en cualquier orden \n"); for (c=1;c<=5;c++) { printw("\nDame la vocal [%d] :",c); letra=getch(); if(letra=='a') a=1; if(letra=='e') e=1; if(letra=='i') i=1; if(letra=='o') o=1; if(letra=='u') u=1; } vocales=a+e+i+o+u; if(vocales==5) printw("\n\nProporcionaste las cinco vocales"); else printf("\n\nNo proporcionaste las 5 vocales"); getch(); endwin(); return 0; } getstr() Esta funció permite leer una cadena de la entrada estándar, en general su funcionamiento es similar a una serie de llamadas a la funció getch(), hasta que se introduce nueva línea o retorno de carro. Ejemplo: #include<ncurses.h> #include<string.h> int main() { char palabra[20]; initscr(); clear(); printw("Introduce una cadena de caracteres :"); getstr(palabra); printw("\n\nLa cadena proporcionada es %s",palabra); getch(); endwin(); Código GC-N4-017 Revisión 1 Página 3 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formatos para prácticas de laboratorio return 0; } Funciones para la manipulación de cadenas biblioteca string.h strlen(s1) Regresa el numero de bytes (caracteres) en la cadena s1, no incluye el carácter nulo o fin de cadena. strcmp(s1,s2) Compara las cadenas s1 y s2, regresando un valor igual a cero, si ambas cadenas son iguales, mayor a cero, si s1 es mayor que s2 o menor que cero si s1 es menor que s2. strcpy(s1,s2) Copia el contenido de la cadena s2 en la cadena s1, incluyendo el carácter nulo. strcat(s1,s2) Agrega la cadena s2, a el final de la cadena s1, eliminando de s1 el carácter nulo de fin de cadena. Funciones para la manipulación de caracteres biblioteca ctype.h isalnum() Verifica si un carácter es alfanumérico o numérico. isalpha() Verifica si un carácter es alfabético. isascii() Verifica si un carácter pertenece a los primeros 127 caracteres de la tabla ASCII. isblank() Verifica si un carácter es un espacio en blanco o tabulador. isdigit() Verifica si un carácter es numérico. islower() Verifica si un carácter es una letra minúscula. isupper() Verifica si un carácter es una letra mayúscula. tolower() Convierte una letra a su correspondiente minúscula. toupper() Convierte una letra a su correspondiente mayúscula. Los siguientes programas ejemplifican la utilización de funciones de cadenas y de caracteres. Recuerda que los programas en que se incluye ncurses.h deben compilarse con -lncurses. El programa siguiente muestra en pantalla un refrán al cual le faltan tres palabras, el programa es capaz de identificar las palabras que faltan, mediante la función strcmp(). #include<ncurses.h> #include<string.h> int main() { char palabra1[20]; char palabra2[20]; char palabra3[20]; int pal1=0,pal2=0,pal3=0,aciertos=0; initscr(); clear(); move(3,1);printw("Un conocido refrán dice así:"); move(5,1);printw("El que tenga ...... que la ...... y si no que la ......"); refresh(); move(6,1);printw("dame la primer palabra que falta :"); getstr(palabra1); if (strcmp(palabra1,"tienda")==0) pal1=1; move(8,1);printw("dame la segunda palabra que falta :"); getstr(palabra2); if (strcmp(palabra2,"atienda")==0) pal2=1; move(10,1);printw("dame la tercer palabra que falta:"); Código GC-N4-017 Revisión 1 Página 4 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formatos para prácticas de laboratorio getstr(palabra3); if (strcmp(palabra3,"venda")==0) pal3=1; aciertos=pal1+pal2+pal3; if(aciertos==3) { move(12,1);printw("Felicidades tus respuestas fueron las correctas"); move(14,1);printw("El refrán completo dice:"); move(15,1);printw("El que tenga TIENDA que la ATIENDA"); move(16,1);printw("y si no que la VENDA"); } else { move(12,1);printw("LO SIENTO NO ACERTASTE LAS PALABRAS"); move(13,1);printw("Tus aciertos fueron %d",aciertos); } refresh(); getch(); endwin(); return 0; } El siguiente programa pide la edad y nombre de 5 amigos y muestra al final a la persona de mayor edad. #include<ncurses.h> #include<string.h> int main() { char nombre[30],nombre_persona_mayor[30]; int edad,edad_mayor=0,c; initscr(); clear(); for (c=1;c<=5;c++) { printw("Proporciona Nombre de tu amigo [%d] :",c); getstr(nombre); printw("Proporciona la Edad de tu amigo %s :",nombre); scanw("%d",&edad); if(edad_mayor<edad) { edad_mayor=edad; strcpy(nombre_persona_mayor,nombre); } } printw("El Amigo de mayor edad es [ %s ] ",nombre_persona_mayor); printw("Su edad es %d",edad_mayor); refresh(); getch(); endwin(); return 0; } Código GC-N4-017 Revisión 1 Página 5 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formatos para prácticas de laboratorio El programa siguiente identifica los caracteres de una cadena, mediante funciones de caracteres. #include<ncurses.h> #include<string.h> int main() { char cadena[21]; int c,longitud; initscr(); clear(); printw("Proporciona una cadena getstr(cadena); longitud=strlen(cadena); for (c=0;c<longitud;c++) { if(isalpha(cadena[c])) printw("Cadena [%d] = if(isdigit(cadena[c])) printw("Cadena [%d] = if(isspace(cadena[c])) printw("Cadena [%d] = } getch(); endwin(); return 0; } de no más de 20 caracteres : "); %c = esto es una letra\n",c,cadena[c]); %c = esto es un número\n",c,cadena[c]); %c = es un espacio\n",c,cadena[c]); 4. PROCEDIMIENTO (DESCRIPCIÓN) A) EQUIPO NECESARIO Computadoras con Linux instalado MATERIAL DE APOYO Practica 7 de Leng.Programacion Estructurada impresa B) DESARROLLO DE LA PRÁCTICA A continuación se listan 5 grupos de ejercicios para ser resueltos de la siguiente manera: Lunes ejercicios A1 y A2 Martes ejercicios B1 y B2 Miércoles ejercicios C1 y C2 Jueves ejercicios D1 y D2 Viernes ejercicios E1 y E2 Código GC-N4-017 Revisión 1 Página 6 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formatos para prácticas de laboratorio A1).- Escribir un programa que lea cadenas hasta que no se desee continuar (leer si o no para finalizar), mostrar: cada cadena leída, la cantidad de consonantes y vocales que contiene por separado, además que muestre junto a cada cadena leída (convertida a mayúsculas) otra cadena en la que cada vocal haya sido reemplazada por un punto, y al final mostrara: la cadena de mayor longitud, la de menor longitud y que longitud tiene cada una de ellas. A2).- Escribe un programa que pida una cadena y elimine de la cadena de caracteres todos los espacios en blanco que tenga, mostrando la cadena nuevamente e imprimiendo la cantidad de espacio en blanco que borro, el programa finalizara cuando se de una cadena sin espacios en blanco. B1).- Escribir un programa que permita hasta en tres oportunidades proporcionar cual es la capital correcta de Baja California, si en los 3 intentos no atina a la capital correcta mostrara un mensaje indicándola y si acierta felicidades lo lograste y terminara el ciclo. Al entrar solicitara tu nombre completo y una vez que acertaste o no mostrara el siguiente mensaje: Ej.- JUAN MARTINEZ GOMEZ muchas felicidades acertaste o JUAN MARTINEZ GOMEZ no acertaste, la capital correcta es Mexicali, según sea el caso si acertó o no. Mostrara tu nombre en mayúsculas si se ingreso en minúsculas y en minúsculas si se ingreso en mayúsculas. B2).- Escribe un programa iterativo que pida un grupo de cadenas de caracteres y que cada que ingrese una cadena la imprima en forma inversa, el programa finalizará cuando la cadena que se proporcione sea la palabra FIN. C1).- Escribe un programa iterativo que pida una cadena de caracteres y enseguida la muestre con todas sus consonantes en mayúsculas y todas sus vocales en minúsculas cuando la longitud de la cadena sea menor de 7 caracteres, de lo contrario la muestre con todas su consonantes en minúsculas y todas sus vocales en mayúsculas, el programa terminará cuando la palabra proporcionada sea FIN. C2).- Escriba un programa que lea los siguientes datos de un grupo de personas: Nombre, Nacionalidad, Sexo (FEMENINO/MASCULINO), Estado Civil (soltero/casado/viudo/divorciado), Edad. Y con ello imprima lo siguiente: - El nombre del hombre de mayor edad. - Un mensaje indicando si hubo mas personas de Japón que de México o viceversa - El nombre de la mujer japonesa más joven. - Cuantos mexicanos se leyeron. - Total de mujeres francesas solteras. - El nombre del hombre de menor edad cuyo estado civil sea casado. - Los datos de la mujer de menor edad cuyo estado civil sea soltera y mexicana. Nota.- Al comparar Sexo se va a considerar la cadena en mayúsculas, y al comparar Estado Civil se va considerar en minúsculas. D1) Escriba un programa que lea un grupo de cadenas de caracteres e imprima para cada una de ellas si la cadena es un palíndromo o no lo es. Por ejemplo: Oso Palíndromo Código GC-N4-017 Revisión 1 Página 7 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formatos para prácticas de laboratorio Luís No es palíndromo Ana Palíndromo El programa terminará al teclear 5 Palíndromos o al teclear la cadena ADIOS. D2).- Se tiene una urna con pelotas de color rojo, azul y verde y se desea elaborar un programa que permita contar las pelotas de cada color por separado mostrar el total de pelotas que se sacaron de cada color y al final muestre de cuales pelotas se sacaron más. La salida se dará cuando se saque una pelota negra. El color de la pelota se leerá como cadena (ROJA, AZUL, VERDE, NEGRA). Considerar solo mayúsculas para contar para lo cual se deberá convertir la cadena a mayúsculas si se da en minúsculas. E1).- Escribe un programa que haga las siguientes preguntas: Capital de Baja California? Capital de Sonora? Capital de Durango? Por cada respuesta correcta el programa dará una puntuación de 33 puntos, el programa deberá mostrar la puntuación obtenida, un mensaje de felicitación en caso de haber obtenido solo aciertos y un mensaje que indique que preguntas se respondieron erróneamente en caso contrario. El programa dará tres oportunidades para responder las preguntas, esas oportunidades se harán efectivas solamente si el usuario tiene máximo 2 respuestas erróneas, en caso de responder a todas las preguntas equivocadamente el programa no dará más oportunidades y mostrará el siguiente mensaje "REGRESATE A PRIMARIA". E2).- Elaborar un programa que permita leer: estado donde nació y el nombre completo en tres variables distintas: nombre, apellido paterno, apellido materno y posteriormente los junte en una sola variable y muestre el nombre completo (ya concatenado), se pide que al final muestre el total de personas que se llaman María, total de personas que cuyo apellido paterno es López, total de personas cuyo apellido materno es igual a uno proporcionado por el usuario y total de personas que son originarias del estado de Sinaloa, Sonora y Baja California por separado. Indicar con un mensaje en cual de estos estados nació mas gente. Código GC-N4-017 Revisión 1 Página 8 de 9 Fecha de efectividad: ______________________ UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD Formatos para prácticas de laboratorio C) CÁLCULOS Y REPORTE 5. RESULTADOS Y CONCLUSIONES Los resultados serán solo a nivel visualización, no serán impresos, éstos podrán variar dependiendo de los ejercicios que el alumno realice. 6. ANEXOS 7. REFERENCIAS http://garota.fismat.umich.mx/mn1/manual/node18.html Código GC-N4-017 Revisión 1 Página 9 de 9