Ejercicios practicos(AlgoritmosI)

14
EJERCICIOS PRÁCTICOS 1ra. EDICIÓN AÑO 2001 Cátedra Lic. Gustavo López Facultad de Ingeniería – Universidad de Buenos Aires Lic. Gustavo López Sr. Augusto Vega

Transcript of Ejercicios practicos(AlgoritmosI)

Page 1: Ejercicios practicos(AlgoritmosI)

E J E R C I C I O S P R Á C T I C O S 1 r a . E D I C I Ó N

A Ñ O 2 0 0 1

Cátedra Lic. Gustavo López Facultad de Ingeniería – Universidad de Buenos Aires

Lic. Gustavo LópezSr. Augusto Vega

Page 2: Ejercicios practicos(AlgoritmosI)

GUÍA N° 1

Page 3: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 3

GUÍA N° 1

Datos escalares. 1.- Leer un número real y decir si es mayor, menor o igual a cero. 2.- Leer dos números reales e imprimir el mayor de ellos. 3.- Dado el radio R de una esfera, calcular e imprimir su superficie y su volúmen. 4.- Leer un número N y calcular su factorial. 5.- Leer la base y la altura de un rectángulo, calcular el perímetro y la superficie. 6.- Leer dos números A y B e intercambiar el valor de sus variables. 7.- Dadas las horas de partida y de llegada de un móvil, expresadas en horas, minutos y segundos, calcular su velocidad promedio sabiendo que la distancia recorrida es D. 8.- Escribir un algoritmo que determine si un número es par. 9.- Escribir un algoritmo que lea un número real cualquiera y lo imprima redondeado con dos decimales. 10.- Escribir un algoritmo que determine si un número N es divisible por M. 11.- Leer una serie de números reales, terminando la serie con un cero. Imprimir los datos a medida que se los ingresa junto con la suma parcial de los mismos. 12.- Dada una serie de números reales, determinar el valor máximo, el mínimo y las posiciones en que éstos se encontraban en la serie. 13.- Leer un valor N y luego N números enteros de cuatro cifras. Se pide imprimir el mayor y el menor y las veces que aparece cada uno. Pueden venir datos erróneos. 14.- Escribir un algoritmo que determine si un número N es primo. 15.- Leer A y B, enteros de cuatro cifras. Calcular C = A * B mediante sumas sucesivas e imprimir el resultado. 16.- Leer A y B, enteros de cuatro cifras. Calcular C = A ^ B mediante multiplicaciones sucesivas e imprimir el resultado. 17.- Escribir un algoritmo que descomponga un número en sus factores primos.

Page 4: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 4

18.- Desarrollar un algoritmo para hallar el máximo común divisor entre dos enteros dados. 19.- Dada una serie de números enteros terminada en cero, imprimir los cuatro mayores. 20.- Dada una lista de nombres y de salarios respectivos, determinar el salario máximo, el mínimo y la persona que percibe cada uno. 21.- Realizar un algoritmo que lea una serie de números reales y verifique si están ordenados ascendentemente o no, informando por pantalla. 22.- Dada una serie de datos de la forma mes (1 a 12, no vienen ordenados), cantidad recaudada (en pesos) y costo total (en pesos), hacer un algoritmo que calcule e imprima cuál fue el mes que arrojó mayor ganancia. La serie termina con mes igual a cero y pueden venir datos erróneos. 23.- La ecuación para estimar la población en un período de N años, si el crecimiento porcentual es R %, es:

P = Po * (1 + R/100) ^ N

Escribir un algoritmo que tabule las poblaciones previstas para la Ciudad de Buenos Aires entre 1980 y 2050, con intervalo de 10 años, sabiendo que: R = 1,7% y Po = 9.927.000 (en 1980) 24.- Por cada empleado de una empresa se leen tres datos que representan el nombre, sueldo básico y antigüedad de dicho empleado. Se debe emitir un listado que contenga el nombre y sueldo a cobrar de todos los empleados. El sueldo se calcula adicionando al básico el 50% si la antigüedad supera los 10 años. El lote de datos finaliza con un nombre de empleado NN. 25.- Pasar un período expresado en segundos a un período expresado en días, horas, minutos y segundos. 26.- Se leen 300 datos que representan el peso de la misma cantidad de niños que hay internados en un hospital. Se desea confeccionar la siguiente tabla: Entre 0,000 y 10,000 kg. hay ............. niños. Entre 10,001 y 20,000 kg. hay ............. niños. Entre 20,001 y 30,000 kg. hay ............. niños. De más de 30,000 kg. hay ............. niños. 27.- Leer una fecha base, y luego N fechas del tipo DD/MM/AA, pasándolas a días a partir de la fecha base.

Page 5: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 5

28.- Hacer un procedimiento que dada una fecha en formato DD/MM/AA, verifique si es correcta o errónea. Ej.: El 31/02/97 es una fecha errónea. 29.- Leer datos de lados de un triángulo A, B, C; haciendo consistencia de datos (Debe ser A < B + C si A es el lado mayor). Informar según sea A^2 con respecto a B^2 + C^2, si el triángulo es rectángulo, acutángulo u obtusángulo. 30.- La relación entre temperaturas Celsius y Fahrenheit está dada por: C = 5/9 * (F - 32) Escribir un algoritmo que haga una tabla de valores Celsius-Fahrenheit, para valores entre O °F y 200 °F, con intervalos de 10°. 31.- Contar la cantidad de letras de un telegrama que termina en punto (los textos se leen letra por letra). 32.- Contar la cantidad de palábras, separadas por uno o más espacios, de un telegrama que termina en punto. 33.- Dado un texto terminado en punto, determinar cuál es la vocal que aparece con mayor frecuencia. 34.- Dado un texto terminado en “/” se pide determinar cuántas veces aparece determinada letra, leída de teclado. 35.- Dado un texto terminado en “/” averiguar qué cantidad de letras tiene la palábra más larga. Suponer que nunca sucede que la primera letra del texto es una “/”. 36.- Dado un texto terminado en “/” determinar cuántas veces tres palábras seguidas comienzan con la misma letra. 37.- Leer dos letras de teclado y luego un texto terminado en “/”. Se pide determinar la cantidad de veces que la primera letra precede a la segunda en el texto. 38.- Leer N y luego N lotes de números reales que terminan con un valor 0, y calcular la media individual de cada lote, junto con la media total de todos los números ingresados. 39.- Se dispone del registro diario de lluvias de un mes para una localidad. Si llovió algún día del mes, indicar cuál fue el día más lluvioso y utilizar un indicador lógico para discriminar si llovieron dos días seguidos en el mes. Si no llovió en todo el mes emitir un mensaje.

Page 6: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 6

40.- Se leen una serie de códigos de empleados, con su sexo (caracter “M” o “F”) y sus antigüedades (en años), finalizando el lote con código de empleado nulo. Se debe determinar qué empleados varones tienen una antigüedad mayor a 3 años y qué empleadas mujeres tienen código menor a 500. 41.- Se lee un texto terminado en “&” con palábras separadas por uno o más de los siguientes caracteres: blanco, coma, punto, punto y coma. Las oraciones se encuentran separadas por puntos, seguidos eventualmente de una serie de blancos. Se debe determinar cuántas oraciones de más de cinco palábras hay en el texto. Vectores. Procedimientos. 42.- Desarrollar un procedimiento que devuelva en un vector los números primos entre 2 y 200. 43.- Dada la siguiente definición: type TipoBaseConj = 1..256; Conj = array [TipoBaseConj] of boolean; Implementar como subprogramas sepadados las operaciones unión, intersección y diferencia entre dos conjuntos A y B (en este ejercicio llamamos conjuntos a los arrays). 44.- Dadas las siguientes declaraciones: Const Primanio = 1; Ultanio = 200; Type Rango = Primanio .. Ultanio; Escribir un programa que cargue en un vector llamado bisiestos todos los años bisiestos correspondientes al intervalo de tiempo que va entre los años definidos. Nota: Un año es bisiesto cuando es múltiplo de cuatro, exceptuando los múltiplos de 100 que no lo sean de 400. Ej.: son bisiestos: 1988, 1992, 2000 no lo son: 1800, 1853, 1900 45.- Dados dos vectores A y B, de N elementos cada uno, se desean calcular

Page 7: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 7

a) el vector suma: c(i) = a(i) + b(i) b) el producto escalar: p = a i b i( ) * ( )∑ 46.- Construir un algoritmo que para cada auto particapante en una carrera de TC 2000 lea un código de auto y dos tiempos de vuelta (en segundos y centésimas). Previamente se debe leer la longitud del circuito. Dada una serie de códigos de auto leídos a continuación, se deben informar las velocidades promedio correspondientes a cada tiempo de vuelta de dichos autos. Ambos conjuntos de datos terminan con un código de auto negativo. 47.- Por cada alumno que rindió un exámen de inglés se lee el número de padrón, el código de carrera (entre 1 y 9) y la nota obtenida. Se desea saber la cantidad de alumnos por carrera que rindieron el exámen y el porcentaje de alumnos que obtuvieron cada nota. Hallar el porcentaje de alumnos de cada carrera que resultaron aprobados. 48.- Se lee un vector X de N elementos (enteros). Escribir un algoritmo que devuelva un vectos que tenga todos los elementos de X, pero sin repetirlos (es decir, “representación de conjunto”). 49.- Se leen dos vectores A y B, de N y M elementos respectivamente. Construir un algoritmo que halle los vectores unión e intersección de A y B. 50.- Por cada alumno que aprueba una materia en la Facultad de Ingeniería se ingresa el número de padrón del alumno y el código de la materia aprobada. El lote de datos termina con un número de padrón negativo. Se pide: a) Un listado en el que, para cada alumno, conste la cantidad de materias aprobadas. b) Un listado de las materias que fueron aprobadas por lo menos por un alumno. c) El o los números de padrón de los alumnos que aprobaron la mayor cantidad de materias. 51.- Escribir un programa Pascal que lea un texto (caracter por caracter) terminado en “/” y con palábras separadas por uno o más blancos, determine cual es la palábra palíndroma (capicúa) más larga del texto, y la imprima. Suponer que los palíndormos tienen todos una longitud distinta. El texto puede tener blancos antes de la primera palábra. 52.- Se lee un texto terminado en “&” con palábras separadas por uno o más de los siguientes caracteres: blanco, coma, punto y coma o punto. Se debe determinar la longitud de la palábra más corta e imprimir dicha palábra. Si hubiera más de una palábra de esa longitud, imprimirlas todas, suponiendo que no son más de 100.

Page 8: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 8

Arreglos Multidimensionales. Funciones y parámetros. 53.- Diseñar un algoritmo que halle una matriz C como suma de dos matrices A y B. La dimensión de las matrices de MxN se lee como dato. 54.- Diseñar un algoritmo que halle un vector cuyos elementos son la suma de los elementos de cada fila de una matriz previamente ingresada. 55.- Escribir un programa que calcule la traza de una matriz cuadrada. Recordar que la traza de una matriz es la suma de los elementos de su diagonal principal. La matriz dato se leerá a razón de una fila por línea. 56.- Diseñar un algoritmo que determine si una matriz cuadrada ingresada es la matriz identidad. 57.- Escribir un subprograma que, al ser invocado TriDiag(M,N), determine si la matriz M, cuadrada y de orden N, es tridiagonal. Una matriz es tridiagonal cuando los únicos elementos distintos de cero son los que se encuentran sobre la diagonal principal y sus dos diagonales paralelas adyacentes. Se presume que el módulo invocante posee las siguientes declaraciones: Const Max = 20; Type Rango = 1 .. Max; Matriz = array [Rango, Rango] of real; 58.- Escribir un subprograma que, al ser invocado InvSim (M,N), determine si la matriz M, cuadrada y de orden N, es simétrica respecto de su diagonal secundaria. Se denomina diagonal secundaria a los elementos de la matriz que están sobre la línea que va desde el ángulo superior derecho hasta el ángulo inferior izquierdo de la misma. Se presume que el módulo invocante posee las siguientes declaraciones: Const Max = 20; Type Rango = 1 .. Max; Matriz = array [Rango, Rango] of real; 59.- Dada una matriz de MxN y un vector de S elementos, determinar si los elementos del vector pertenecen a la matriz.

Page 9: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 9

60.- Escribir un programa Pascal que lea una serie de fechas (día, mes y año), la cantidad de pasajeros transportados por una línea aérea en esa fecha y el monto recaudado en dólares, determinando en qué días del período se transportanron más de 2000 pasajeros (puede no haber ninguno), indicando el monto recaudado en ese día. También deberá emitirse un listado de los días en que el monto recaudado superó los 500.000 dólares (puede no haber ninguno). Ambos listados deber ser emitidos por separado. El lote de datos termina con una fecha inválida. El período no será mayor a 366 días. 61.- Dadas las siguientes declaraciones: Const MaxRango = 100; Type Rango = 1 .. MaxRango; Matriz = array [Rango, Rango] of real; Escribir un subprograma que, al ser invocado como DiagDom (A,N) verifique que la matriz A (cuadrada y de orden N) sea una matriz diagonal dominante. Nota: Una matriz diagonal dominante es aquélla en la que cada valor absoluto de un elemento de la diagonal principal es mayor a la suma de los valores absolutos del resto de los elementos de su fila más la suma de los valores absolutos del resto de los elementos de su columna. 62.- Dadas las siguientes declaraciones: Const MaxRango = 100; Type Rango = 1 .. MaxRango; Matriz = array [Rango, Rango] of real; Escribir un subprograma que, invocado como Múltiplo (A, B, N), verifique que la matriz B sea múltiplo de la matriz A (ambas cuadradas y de orden N).

Page 10: Ejercicios practicos(AlgoritmosI)

GUÍA N° 2

Page 11: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 11

GUÍA N° 2

Cadenas de caracteres. Métodos de Ordenamiento. Recursividad. 1.- Construir un procedimiento que, invocado como Intercal (X,Y), intercambie los valores de las variables X e Y. 2.- Construir un procedimiento que obtenga una cadena de caracteres B, de M posiciones, como una subcadena de otra cadena A dada, de N posiciones, al ser invocado como Subcad (A, N, B, M, Pos), donde Pos es la posición de la cadena A a partir de la cual se debe comenzar a extraer la cadena B. 3.- Dada una serie de N números reales, ordenarlos en forma creciente. 4.- Dada una serie de nombres de hasta 30 caracteres cada uno, ordenarlos alfabéticamente. 5.- Escribir una función recursiva que, al ser invocada como MCD (A, B) halle el máximo común divisor entre A y B mediante el algoritmo de Euclides. MCD (A,A) = A MCD (A,B) = MCD (B,A) (si A > B) MCD (A,B) = MCD (A,B-A) (si A < B) 6.- Construir procedimientos para la búsqueda secuencial y binaria. 7.- Escribir un procedimiento que determine cuántas veces aparece cada letra en una cadena de tamaño N. 8.- Escribir un procedimiento que al ser invocado como Blanc (S, Lado) elimine los blancos superfluos del lado especificado (Izquierdo, Derecha, Ambos) de la cadena S. 9.- Diseñar un subprograma que, invocado como OrdenarYRepetidos (V,N) ordene el vector V de N elementos eliminando, de paso, todos aquellos que se repitan. Variables Compuestas y Tablas. Unidades de Biblioteca. 10.- Se realiza una encuesta entre los alumnos de Algoritmos I, en la cual se obtienen los siguientes datos: Nombre del Alumno, cantidad de Fines de Semana

Page 12: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 12

perdidos estudiando la materia, y un valor de verdad que responda a la pregunta: ¿Sirve de algo la materia?. Se pide realizar un listado por impresora de los alumnos que hayan respondido NO a la última pregunta o cuya cantidad de Fines de Semana sea inferior a 5, a fin de disponer de esa información para utilizarla en el Coloquio. 11.- Escribir un subprograma que, al ser invocado como CadMayor (C1, C2) determine si la cadena C2 precede a la cadena C1 en orden alfabético. Luego incluir este subprograma en otro que realice una búsqueda binaria en una tabla ordenada ascendentemente por el campo nombre y devuelva el contenido del campo teléfono al ser invocado como DevTele (Nombre, Tabla, Telef). Se presume que el módulo invocante posee las siguientes declaraciones: Const Max = 200; Type Rango = 1 .. Max; Cadena = String; Usuario = Record Nombre, Teléfono: Cadena End; Tabla = array [Rango] of Usuario; Archivos. 12.- El INDEC debe procesar los datos del censo a realizarse en el año 2010. Para ello, se debe construir un programa que lea de un archivo, para cada partido o departamento de la Argentina, un registro conteniendo: Nombre del partido o departamento (hasta 40 caracteres) Código de provincia en la que se encuentra Población Porcentaje de hombres Porcentaje de analfabetos Previamente a este archivo se debe leer otro que, para cada código de provincia, informe el nombre de la provincia correspondiente. El programa debe: a.- Imprimir un listado ordenado por nombre de provincia que informe para cada provincia, su nombre, población, porcentaje de mujeres y de analfabetos. b.- Imprimir la población total del país, y porcentaje de mujeres y analfabetos correspondientes a todo el país.

Page 13: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 13

c.- Informar cuál es el departamento o partido con mayor porcentaje de analfabetos, en que provincia se encuentra y cuál es ese porcentaje máximo. 13.- Dados dos archivos de una misma materia (de dos turnos diferentes), cada uno con registros que contienen: Número de padrón (40000 a 75000) Nombre (30 caracteres) Turno (1 o 2) Hay un registro por cada alumno de cada turno. Los archivos se encuentran ordenados por número de padrón. Se pide obtener un archivo único de la materia con la misma información, también ordenado por número de padrón. (Debe tenerse en cuenta que un mismo alumno no puede pertenecer a ambos turnos). 14.- La Universidad de Buenos Aires cuenta con un archivo binario BIBLIOTECAS, ordenado por Código de Biblioteca (clave primaria) y por Código de Editorial (secundaria), cuyos registros contienen: Código de Biblioteca (1 a 50) Código de Editorial (1 a 2000) Nombre de autor (30 caracteres) Título del libro (40 caracteres) Cantidad de ejemplares (1 a 300) Hay un registro por cada título dispnible en cada biblioteca. Se debe hacer un listado con cortes de control por editorial y por biblioteca, informando totales de libros disponibles. El listado tendrá los siguientes campos: Libro, Autor y Cantidad de ejemplares. Luego de cada corte de control se debe saltar de página e imprimir los títulos. Cada página del listado estará numerada y se encabezará con: Renglón en blanco, Código de biblioteca, Renglón en blanco, Nombre de editorial, Renglón en blanco, Encabezamiento de columna, Renglón en blanco, y 55 renglones de datos. Los nombres de las editoriales se encuentran en otro archivo, el cual entra en memoria, y cuyos registros son del siguiente tipo: Código de editorial Nombre (20 caracteres). 15.- Escribir un algoritmo que lea un texto de un archivo, y cuente cuántos caracteres hay entre la primera y la segunda aparición del caracter “A”, o entre la

Page 14: Ejercicios practicos(AlgoritmosI)

75.40 Algoritmos y Programación I Cátedra Lic. Gustavo López Página 14

primer “A” y el punto final, si ésta aparece una sóla vez. Si “A” no aparece desplegar un mensaje. El último caracter del archivo es un punto. 16.- Leer un texto terminado en punto, de un archivo de texto y copiarlo en otro archivo eliminando los espacios en blanco superfluos (más de un espacio entre dos palábras).