Trabajo práctico Nº 6 (Trabajos con cadenas de caracteres y estructuras) Realiza el programa en Lenguaje C correspondiente. Cadenas de caracteres 1- Construir una función PASSWORD que pida por teclado una cadena y la compare con una cadena guardada. Si coinciden, el programa debe devolver 0; en otro caso, devolver 1. Utilizando el resultado de la función mostrar el mensaje Acceso Permitido o Acceso denegado según corresponda. 2- Escriba un programa que lea una cadena, la longitud de la línea no será especificada (se terminará el ingreso con el retorno de carro), pero se asume que no excederá los 80 caracteres. El programa debe contener: Una función que lea la cadena. Una función que devuelva un entero que indica la cantidad de vocales que hay en la cadena, además se debe reemplazar cada vocal con * en la mima función. Una función que imprima la cantidad de vocales y la cadena modificada. Ejemplo: L A C A S A E S T A D E S O C U P A D A El programa debe devolver En la cadena hay 10 vocales, y la cadena modificada: L * C * S * * S T * D * S * C * P * D * 3- Diseñe un programa que me permita ordenar alfabéticamente una lista de contactos de la agenda del usuario. Se ingresa el apellido de cada contacto y para finalizar se debe ingresar fin. Utilizar un array bidimensional. 4- Diseñe y codifique un programa que pueda realizar los siguientes procesos utilizando un menú que le permita al usuario escoger la acción a ejecutar: a. Capturar dos cadenas, concatenarlas y visualizar el resultado. b. Capturar dos cadenas e intercambiarlas. c. Capturar una cadena y pedir la búsqueda de una cadena en ella. Visualizar su posición. d. Capturar dos cadenas, compararlas y visualizarlas en orden. e. Capturar una cadena y visualizar su longitud. f. Capturar dos cadenas y copiar n caracteres de la primera en la segunda. Visualizar el resultado. g. Finalizar Estructuras 1- Define un tipo de dato que represente a una persona siendo sus campos: el nombre (char[20]), apellido (char[20]), DNI (long int) y la edad (int). Llamar persona a este - 1 -
tipo de dato. Escribir un programa que pida los datos de N personas y muestre la cantidad de personas mayores a 50 años, promedio de edades y finalmente imprima en pantalla los datos de las personas ingresadas. 2- Un médico almacena información de sus pacientes: nombre, dirección, teléfono, fecha última visita, obra social. Se desea un programa con las siguientes opciones: a. Introducción de los datos. b. Impresión en pantalla de toda la información de un paciente. c. Listar los pacientes de una obra social ingresada por el usuario. 3- En un mercado se guarda la siguiente información de los artículos: a. Nro de artículo b. Precio unitario c. Cantidad mínima necesaria d. Cantidad actual en el local e. Fecha de última venta f. Nro de depósito ( entero que representa el nro. de depósito donde se encuentra el stock restante de este artículo) g. Cantidad en depósito Con esta información se pide realizar las siguientes funciones: a) Diseñar una función que imprima los datos de los artículos cuya cantidad actual en el local sea menor que la cantidad mínima necesaria y si hay stock en depósito se debe imprimir los datos donde se encuentra la mercadería. b) Diseñar una función que devuelva la cantidad de artículos cuyo mes de última venta fue septiembre (mes 09). Ejercicios Propuestos 1- Escribir un programa que lea una cadena, la longitud de la línea no será especificada (finalizara el ingreso con el retorno de carro), pero se asume que no excederá los 80 caracteres y terminará siempre con.. El programa debe contener: Una función que lea una cadena Una función que devuelva la cantidad de palabras de cuatro letras que hay en la cadena, además de deber reemplazar las palabras de cuatro letras por # en la misma función. Una función que imprima la cantidad de palabras de cuatro letras y la cadena modificada. 2- Escribir un programa que, dada una cadena de caracteres y un entero correspondiente a una posición válida dentro de ella, genere una nueva cadena de caracteres que contenga todos los caracteres a la izquierda de dicha posición, pero en orden inverso. - 2 -
3- Escribir un programa que, dada una cadena de caracteres, la limpie de caracteres blancos. Por ejemplo, la cadena "Esto es una frase" deberá transformarse en Estoesunafrase". 4- Escriba un programa para manejar números racionales. Las operaciones a tener en cuenta son: suma, diferencia, multiplicación, división y simplificación. La simplificación se puede realizar hallando el máximo común divisor entre el numerador y el denominador, para esto se puede utilizar el algoritmo de Euclides 5- Realizar la declaración de arreglos adecuada para que una empresa de turismo pueda almacenar la información necesaria de los X viajes que realiza como: medio de transporte, nro de viaje, fecha de salida y todos los datos que considere necesario. También se almacenará información de los N pasajeros de los viajes como sus datos personales nombre, DNI, domicilio, teléfono y nro de viaje. a. Realizar la carga de la información. b. Con la estructura declarada diseñar un procedimiento para que dado un nro. de viaje muestre los datos del mismo y la lista de pasajeros. c. Imprimir los datos de los viajes que van a salir en el mes de diciembre (mes 12) 6- Dado un arreglo de empleados, con los siguientes datos: Nro. de empleado, nombre, DNI, fecha de nacimiento, salario del último cuatrimestre. Se pide: a) Cargar los datos de N empleados. b) Ordenar los datos por Nro. de empleado c) Dado un número de empleado buscarlo e imprimir sus datos. d) Listar los datos de los empleados que en cuatrimestre han ganado mas de $2000. 7- Se tiene dos arreglos: uno de estudiantes y otro de empleados. De cada estudiante se mantiene el DNI, apellido y promedio, de cada empleado se mantiene DNI, apellido y salario. Escribir un programa con opciones para: a) Ordenar los arreglos por DNI. b) Imprimir los datos de un estudiante cuyo DNI es pasado como parámetro. c) Aumentar en un 10% el salario de cada empleado que sea estudiante y tenga promedio >7. 8- Dada la siguiente definición de tipos de datos: struct Tagente { char nombre[30]; char area[20]; long int ventas[4]; } ; Escribir un programa que defina un vector de N agentes, permita la introducción de los datos por teclado y, finalmente, muestre los datos del agente con la máxima media de ventas. - 3 -
10- El inventario de un almacén de artículos deportivos se desea guardar en un arreglo de registros ARTICULO con los siguientes campos: código del articulo, descripción, precio unitario, cantidad en stock, código del proveedor. En un arreglo se mantiene información acerca de los proveedores: código, nombre y teléfono. a) Escribir un procedimiento donde se realiza la carga de datos de los N artículos y otro para la carga de datos de los proveedores que son 3. b) Imprimir en pantalla todo el inventario junto con el nombre del proveedor correspondiente. c) Listar aquellos artículos cuya cantidad es menor a una ingresada por el usuario. d) Dado un nombre de un proveedor, calcular la cantidad de artículos provistos por el mismo. e) Calcular el valor total del inventario. - 4 -
Ejercicios de autoevaluación 1. Si definimos char palabra[]="hola" entonces: palabra[4] es el carácter a No da error de compilación, pero no reserva memoria para la variable palabra palabra[4] es el carácter \0 Tendremos un error de compilación palabra[4] es el carácter " 2. Se declara: char s[4]; se ejecuta la siguiente instrucción: scanf("%s", s); se introduce por teclado: PEPITO GRILLO, e inmediatamente se ejecuta la instrucción: puts(s); Cuál de los siguientes literales se visualizará en la pantalla y por qué? PEPI PEPITO GRILLO PEPITO PEPIT Ninguno, porque hay un error de sintaxis en alguna instrucción. 3. Cuál de las siguientes definiciones es correcta? char tab[3][2]={"ca","se","co"}; Ninguna es correcta char tab[3][2]={'c','a','s','e','c','o'}; Hay más de una correcta char tab[3][2]={ {'C','A'},{'S','E'},{'C','O'}}; - 5 -
4. El valor que devuelve la expresión strcmp("2345","23345") es: Un valor entero menor que cero Un valor numérico resultado de 2345-23345 Un valor entero mayor que cero Un valor numérico resultado de 23345-2345 Ninguna es correcta 5. Sean las siguientes afirmaciones sobre estructuras: a) Todos los campos de una estructura han de ser de tipos diferentes b) Un campo de una estructura puede ser una tabla bidimensional c) Un campo de una estructura no puede ser otra estructura d) Un campo de una estructura puede ser un puntero a la propia estructura Cuántas de ellas son de ciertas? Todas las afirmaciones son falsas Sólo tres de las afirmaciones son ciertas Sólo dos de las afirmaciones son ciertas Todas las afirmaciones son ciertas Sólo una de las afirmaciones es falsa - 6 -