UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS, ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN Visita la nueva página de Algoritmos www.ciens.ucv.ve/algoritmosyprogramacion PRÁCTICA #7 -- Tipos de Datos Estructurados Parte 1: Arreglos, Matrices, Recorridos y Búsquedas 1. Dado un arreglo de enteros con N elementos de tipo real suministrados por el usuario, se quiere: 1.1. Leer y escribir los valores del arreglo. 1.2. Calcular la suma de los valores del arreglo. 1.3. Calcular la media de los valores del arreglo. 1.4. Calcular la cantidad de números impares y números pares. 1.5. Calcular cuántos números son mayores que la media y cuántos son menores. 1.6. Transformar el arreglo colocando en las posiciones pares un valor dado por el usuario. 2. Dado un arreglo unidimensional de N posiciones, donde el tipo base del arreglo es entero, se desea que usted elabore un algoritmo que determine el valor máximo y el mínimo del arreglo, además debe decir el número de ocurrencias de los mismos dentro de la estructura. 3. Dado un arreglo cuyos elementos son enteros, y un entero K, obtenga el arreglo resultante de realizar K desplazamientos circulares sobre el arreglo de entrada. Los desplazamientos serán a la derecha si K es mayor que 0 y a la izquierda en caso contrario. 4. Dado un arreglo de enteros S, escriba un algoritmo que guarde en un arreglo T la secuencia de sumas parciales de S. (S[1], S[1]+S[2], S[1]+S[2]+S[3],...) 5. Dados dos arreglos A y B de enteros, los cuales debe ordenar en forma ascendente, se desea que genere otro arreglo C con el mismo orden a partir de la mezcla de los dos arreglos anteriores, adicionalmente se pide que el arreglo C no contenga elementos repetidos. 6. Dado un arreglo de caracteres y una letra, determinar si un elemento dado pertenece al arreglo e indicar el número de veces que aparezca. 7. Escriba un algoritmo que lea una secuencia de enteros la almacene en un arreglo de tamaño N y guarde en otro arreglo de igual tamaño una nueva secuencia aplicando las siguientes reglas al primer arreglo. 7.1. Si el elemento i es menor que cero, se guardará su valor absoluto 7.2. Si el elemento i es mayor que cero, se guardará su cuadrado 7.3. Si es un cero, se guardará tal cual. 8. Dada una secuencia de enteros guardada en un arreglo S, escriba un algoritmo que indique si alguno de sus elementos coincide con la suma de los elementos de la secuencia que le siguen. El problema debe resolverse sin acceder más de dos veces a cada elemento de la secuencia. Ejemplo: dado S = [-1, 2, 4, -2, 8, 3, -2, -3], el tercer elemento cumpliría la propiedad 9. Dado un arreglo de enteros de tamaño N par, se desea que: 9.1. Escriba una acción Intercalar que reciba un arreglo unidimensional ordenado e intercale su “mitad inferior” con su “mitad superior”. Ejemplo: Dado el arreglo [1, 2, 3, 4, 5, 6, 7, 8] genere el arreglo [5, 1, 6, 2, 7, 3, 8, 4] 9.2. Escriba una función Numero que reciba un arreglo ordenado y retorne el número de intercalaciones necesarias para restaurarlo en su orden original. Ejemplo: Dado el arreglo [1,2,3,4,5,6,7,8] [5,1,6,2,7,3,8,4] [7,5,3,1,8,6,4,2] … [2,4,6,8,1,3,5,7] [1,2,3,4,5,6,7,8] el número de intercalaciones es 4 1 UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS, ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN 10. Dado un arreglo A de enteros de N posiciones, construya un algoritmo para crear arreglos de apuntadores a las posiciones de A. Se desea generar el arreglo apuntador para cada uno de los siguientes casos: 10.1. Orden ascendente utilizando el método de selección. 10.2. Orden ascendente utilizando el método de burbuja. 10.3. Orden descendente utilizando el método de selección. 10.4. Orden descendente utilizando el método de burbuja. 11. Dada una matriz A de enteros de NxM posiciones, donde el valor de M es par, se desea que realice lo siguiente 11.1. Por fila, intercambie el valor de la 1era columna con el valor de la M-esima columna, el valor de la 2da columna con el de la M-1 columna, y así sucesivamente, tantas veces como lo indique el valor de la penúltima posición de la fila. Ejemplo: Original 5 7 1 7 7 8 4 5 1 9 14 12 4 8 7 3 7 2 7 5 1 2 3 1 3 Resultado 3 0 8 18 6 3 0 8 18 6 8 2 3 12 3 4 1 2 4 5 3 7 12 7 7 1 5 9 1 8 5 7 1 7 7 Nota: asuma que el valor de la penúltima posición es válido 12. Dada una matriz de dimensión NxN, cuyos elementos son números enteros. Construya un algoritmo que imprima los valores de las diagonales secundarias de la matriz. Entrada 1 5 9 13 2 6 1 0 14 3 7 11 15 4 8 12 16 9 13 14 Salida 1 5 2 6 3 10 7 11 8 15 12 16 4 13. Elabore un algoritmo que realice el recorrido de una matriz según el esquema: a) matriz de NxM b) matriz de NxM 2 UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS, ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN c) matriz de NxM d) matriz de NxN e) matriz de NxN f) matriz de NxN g) matriz de NxN h) matriz de NxN i) matriz de NxN j) matriz de NxN k) matriz de NxM 3 UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS, ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN Buscamos por aquí … Buscamos por allá … y estos son los ejercicios preferidos para un parcial PARTE 2: Combinación de Arreglos, Registros y Archivos 14. Dada una secuencia de caracteres suministrada en un archivo de texto llamado Letras.txt, proponga un algoritmo que calcule la frecuencia de todas las letras presentes en la secuencia y cuantas veces aparece cada letra. Suponga: La secuencia suministrada solo contiene letras y espacios (“ ”) y podría ser suministrada vacía. Ud. cuenta con una función abstracta llamada Leer_Archivo(variableArchivo):Caracter, ya implementada y que puede usar para obtener el próximo carácter en la secuencia del archivo. La frecuencia de cada letra se calcula dividiendo la cantidad de veces que se ha contado esa letra, entre la cantidad total de letras de la secuencia. 15. Dada la siguiente información referente a vehículos que una empresa oferta para la venta: - Marca - Motor (capacidad en litros) - Precio Proponga una estructura de datos que permita almacenar la información de todos los carros en venta, asuma que el usuario le indicará el número de carros que se están vendiendo. Proponga una función, acción o método (lo que ud. prefiera) que permita consultar y guardar la posición o índice de los vehículos cuyo precio es menor o igual a un precio P suministrado por el usuario. UTILICE UNA ESTRUCTURA EFICIENTE para guardar la información de estos vehículos. Proponga un método que permita hallar el vehículo más económico de 2.2 litros 16. Dada un archivo llamado “GENTE.bin” que contiene: nombre, cédula, sexo y edad de un grupo de personas, se desea generar otro archivo llamado “Menores.bin” que contenga sólo la información de las mujeres menores en edad que la primera persona del archivo. La estructura de datos que almacena la información de cada persona es la siguiente Tipo Registro Persona = String Nombre; Entero CI; Entero Edad; Carácter sexo; Fregistro; // sexo ‘M’ ó ‘F’ 17. Dado un arreglo de 1000 números enteros (todos entre -100 y 100), haga una acción que imprima cuál es el número que más se repite entre ellos. En caso de que exista mas de un número con estas condiciones, imprímalos todos. Por ejemplo, si el arreglo contiene los elementos: -2, 4, 1, -2, 3, 1, la salida debería ser: -2 1. 18. La compañía T-shirt tiene 2 almacenes en Caracas: el almacén TRINITI, y el almacén GUACAMAYA. Esta compañía está dedicada a la venta de franelas. En cada almacén se conocen las tallas de franelas que tienen dentro del almacén. Suponiendo que no hay más de 50 tallas distintas, el dueño de la compañía requiere saber qué tallas no están en los dos almacenes a la vez (tallas críticas). Para ello, usted ha sido elegido para elaborar un algoritmo que, dado dos arreglos de tallas, correspondientes a cada almacén, imprima las tallas críticas ordenadas descendentemente. 4 UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS, ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN 19. Un escritor escribe un texto y lo guarda en un archivo llamado “relato.txt”. Por razones esotéricas, nos interesa saber la cantidad de palabras en dicho texto, específicamente en cuanto a su longitud (número de letras). Para ello, se desea que ud. haga un algoritmo que lea dicho archivo y genere un reporte con la cantidad de palabras existentes por longitud, es decir, debe indicar cuántas palabras hay de una sola letra, cuántas palabras hay de dos letras, cuántas de tres y así sucesivamente hasta llegar a diez letras. En el caso de haber palabras de más de diez letras, éstas deben ser contabilizadas junto con las de 10 letras. Nota: el archivo de entrada debe ser leído caracter por caracter, y no hay otros caracteres sino las alfabéticas y los espacios en blanco. 20. Dados dos arreglos A y B de M y N enteros respectivamente, ordenados ascendentemente, genere un tercer arreglo de a lo sumo N+M elementos que contenga los elementos de A y B ordenados ascendentemente, pero sin elementos repetidos. Nota: no debe utilizar ningún algoritmo de ordenamiento, y los arreglos A y B deben ser recorridos una sola vez. 21. Se desea desarrollar un sistema que permita realizar la gestión de un almacén y los productos guardados en él. La información es almacenada en un archivo llamado Productos y los datos relevantes de cada producto se reflejan en el siguiente registro: Tipo Registro Producto = Entero Código; String Nombre; Entero stockActual; // el stock es la cantidad de ese producto que hay en el almacén Entero stockMínimo; // cantidad mínima que debe haber de ese producto Entero stockMáximo; // cantidad máxima del producto que se puede almacenar Entero IDProveedor; // número del proveedor para el producto Fregistro; El sistema también almacena el Código, Nombre, Email y Teléfono de los trece (13) Proveedores con que trabaja la empresa. Se desea que usted proponga una solución algorítmica con acciones o funciones que: 21.1. Especifique las estructuras de datos más convenientes y la utilice en la solución propuesta. 21.2. Lea e inicialice los datos a almacenar en el archivo de productos. Los datos será suministrados por el usuario. La cantidad de productos a almacenar no es conocida previamente, ni es suministrada en el archivo, siendo el usuario el encargado de indicar cuando termina la entrada de información. 21.3. Genere un archivo Pedidos en donde se almacene la información de los productos cuyo stockActual es menor al stockMínimo. En el archivo Pedidos se desea mantener la mínima información que identifique al producto, la cantidad a pedir y el proveedor que lo suministra. La cantidad a pedir debe permitir que el nuevo stock del producto sea igual a su stock máximo. 21.4. Imprima información que permita contactar a los Proveedores de los productos que fueron incluidos en el archivo Pedidos. 22. El Observatorio “Parque Sierra Nevada” desea desarrollar un sistema que le permita monitorear las temperaturas de los páramos venezolanos. Para ello se recopila información en 21 puntos de observación ubicados a diferentes alturas en la Cordillera Andina. Para cada día del mes se registra, en cada uno de los puntos, la temperatura mínima y la temperatura máxima alcanzada y medida en ºC. 5 UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS, ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN La información recopilada en un año le será suministrada en el archivo TemperaturasAnuales, el cual no está ordenado y en donde se le dan los datos: númeroMes, númeroDía, codPuntoObs, tempMín y tempMáx. Se desea que usted proponga una solución algorítmica con acciones o funciones que: 22.1. Especifique las estructuras de datos más convenientes y las utilice en la solución propuesta. 22.2. Indique para cada mes la temperatura mínima, la temperatura máxima y donde fue recopilada. 22.3. Almacene e indique los puntos que presentaron más de 30 observaciones con temperaturas inferiores a los –4ºC. 22.4. Indique los puntos que presentaron la menor y la mayor temperatura del año, además en que mes y día ocurrió. El archivo TemperaturasAnuales, sólo puede ser recorrido una sola vez. Debe utilizar las estructuras auxiliares en forma eficiente. 23. En un archivo se suministra información sobre estaciones de servicio y venta de gasolina. Para cada estación se indica su código, zona del país donde está ubicada (Este, Oeste, Sur, Centro, Metropolita) y la cantidad de litros de gasolina vendidos de 91 y de 95 octanos para los meses de enero, febrero y marzo. Adicionalmente se suministra los precios de venta de gasolina para 91 y 95 octanos. Se desea que: 23.1. Defina variables y estructuras de datos convenientes para almacenar la información del problema. 23.2. Elabore un algoritmo en donde se calcule e informe: La cantidad total y el monto total de litros vendidos para cada octanaje. La estación en donde se vendió la máxima cantidad de litros para el mes de febrero. El monto promedio de las ventas de gasolina en cada mes para las estaciones de la Zona Metropolitana. Considere que el archivo no necesariamente será suministrado con datos. GDAyP. Mayo 2008 "Los obstáculos son esas cosas que las personas ven cuando dejan de mirar sus metas." - Joseph Cossman 6