Guia de Algoritmos
Guia de Algoritmos
Miembros de la Cátedra
Profesor Titular
Ing. Domingo Mandrafina
Ayudantes
Lic. Martín Salvia
Ing. María Silvia Saba
Ayudantes Ad Honorems
Sr. Ramiro Perelmiter
Sr. César Gazzo Huck
Sr. Maximiliano Déboli
Página 2 de 2
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
Contenido
1 PROLOGO ...........................................................................................................................................................................4
2 ALGORITMOS - PSEUDOCÓDIGO................................................................................................................................5
9 REGISTROS ......................................................................................................................................................................28
10 ARCHIVOS ........................................................................................................................................................................31
10.1 MODELO DE DATOS:....................................................................................................................................................37
Página 3 de 3
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
1 PROLOGO
En esta Guía de Trabajos Prácticos los estudiantes de Algoritmos I encontrarán una gran
variedad de ejercicios que los ayudarán a comprender, reafirmar y practicar todos los temas
dictados en nuestra Cátedra.
Les recomendamos que realicen la mayor cantidad de ejercicios posibles, haciendo hincapié
sobre todo en aquellos que se les indica expresamente que piensen durante las clases.
Como apoyo a la presente guía, también sería conveniente que trabajaran con la “Guía de
Trabajos Prácticos “ de Algoritmos y Programación del C.E.I.
Esperamos sinceramente, que la presente cartilla sea de ayuda en la cursada y aprobación de
la materia Algoritmos I.
Ante cualquier duda, consulte a los autores.
Página 4 de 4
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
2 Algoritmos - Pseudocódigo
Escribir en pseudocódigo los algoritmos que permitan realizar las tareas que se detallan a
continuación.
8) Dada una lista de números positivos que finaliza con un cero, hallar el rango.
9) Dado un número que representa un mes, escribir el nombre del mes correspondiente. Puede
haber error en el número dado.
11) Dada una fecha año, mes y dia, informar si es correcta o no.
12) Calcular e informar los cubos de los 10 primeros números naturales impares y la suma de los
mismos.
15) Se ingresan pares de valores reales y se debe emitir el promedio de cada par. El ingreso de
datos finaliza cuando
Página 5 de 5
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
16) Una empresa fabrica tapas de material laminado en 3 formatos: redondo, cuadrado o
rectangular. Cobra $9 el metro cuadrado y si la tapa es redonda, le suma $4 más al total. Se
pide:
17) La compañía Revirelli toma dos pruebas a cada persona que llena una solicitud de empleo.
Se la contrata si obtiene al menos 65 puntos en cada prueba; en caso contrario se la
rechaza. De cada persona se ingresan el nombre y los resultados de las dos pruebas. El fin
de estos datos se indica con nombre igual a “zzz” . Se solicita:
a) Mostrar una lista en pantalla con los nombres de todas las personas que entraron
18) Se ingresan pares de valores reales y se debe informar el promedio de cada par. El ingreso
de datos finaliza cuando el operador responde NO a la siguiente pregunta: “ Desea calcular
el promedio? (SI / NO)?”
19) Dados los coeficientes de una ecuación ce segundo grado, hallar las dos raíces reales o la
única raíz. Si no tiene raíces reales emitir una leyenda que lo indique.
20) Se han anotado las temperaturas máximas y mínimas de cada uno de los días del mes de
marzo. Determinar e imprimir el promedio de las temperaturas máximas, cuántos días la
temperatura superó los 30 grados y cuantos días la diferencia entre la temperatura máxima y
mínima fue superior a los 15 grados.
Página 6 de 6
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
1) Definir qué se entiende por señal analógica, señal digital, sistema analógico y sistema digital.
a) Sistema numérico.
b) Sistema numérico posicional.
c) Base de un sistema posicional.
d) Sistemas numéricos :
decimal octal
binario hexadecimal
e) Bit, byte y word. Indicar cuál es la expresión general que permite obtener la cantidad de
combinaciones o palabras posibles de n bits.
123.328 a bases 2, 4, 16
Página 7 de 7
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
2) Indicar cuál es el mayor número positivo y cuál es el menor negativo que se puede expresar
con un byte, destinando el primero a la izquierda como bit de signo y almacenando los
negativos en :
a) Signo y módulo
b) Signo y complemento a la base menos uno
c) Signo y complemento a la base
Nota :
4) Efectuar las siguientes operaciones, para el caso de un sistema que trabaja con 8 bits, el
MSB como signo y que almacena los negativos en complemento a la base :
63 – 75 75 – 63 75 + 63 - 63 - 75
5) Repetir el punto anterior para el caso en que se almacenan los negativos en signo y
complemento a la base menos uno.
7) Indicar qué número decimal representa el siguiente número binario, si se trata de un dato en
punto flotante norma IEEE : 1001 1111 1001 1101 0000 0000 0000 0000
3.3 Arquitectura
1) Explicar las características funcionales de una computadora digital a partir de un diagrama
en bloques.
Página 8 de 8
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
1) Indicar cuáles de los siguientes identificadores no son nombres de variables válidas y por
qué:
x1 x_1 1x x-1 suma SUMA sum1 int CHAR %cambio primer.pas abc1234 cant_al
program
3) Escribir un programa que contenga instrucciones que muestren por pantalla el valor de tres
variables de tipo entero, real y caracter que hayan sido definidas pero no inicializadas.
Compilar y ejecutar el programa. Analizar la salida que se produce.
1 a+b
b 2 − 4ac x( y + z )
x + x+3
2
c+d
Program desconocido;
var
a , b , c : char,
begin
a:= ‘a’ ;
b:= ‘c’ ;
c:= a ;
writeln(a, b, c, ‘c’) ;
end.
Program desconocido2;
var
Num: integer;
begin
num:=(1/3)*3;
writeln (´(1/3)*3 es igual a´, num) ;
end.
Página 9 de 9
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
Program celsiusaFahrenheit;
var
c,f : real;
Begin
c:=20
f:= (9/5)*c + 32.0 ;
Writeln (f);
End.
Indicar :
Program overflowyunderflow;
var
i: short ;
ii: integer ;
l: longint ;
f: real ;
c: char ;
begin
i := 32767 ;
i:= i+1 ;
writeln (´32767 + 1 como short da´, i) ;
ii := 32767 ;
ii := ii+1 ;
writeln (´32767 + 1 como entero da´, ii) ;
i := -32768 ;
i := i-1 ;
writeln (´32768 - 1 como short da´, i) ;
i := 45000 ;
writeln (´i := 45000 como short da´, i) ;
i := 32000 + 25000 ;
f := i ;
writeln (´32000 + 25000 como entero ´, i) ;
writeln (´32000 + 25000 como real´, f) ;
Página 10 de 10
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
f := 32000 + 25000 ;
i := f ;
writeln (´32000 + 25000 como entero ´, i) ;
writeln (´32000 + 25000 como real´, f) ;
c := 'A' ;
writeln (´La A como char da´, c);
c := 65 ;
writeln (´c= 65 como char da´, c);
c := 254 ;
writeln (´c= 254 como char da´, c);
c := 257 ;
writeln (´c= 257 como char da´, c);
c := -258 ;
writeln (´c= -258 como char da´, c);
end.
Program desconocido3 :
var
x : integer
y :char ;
writeln (´Ingresar cualquier número para continuar, 0 para salir´ );
readln (x);
while x <> 0 do
begin
if x > 10 then
y:= ´s´
else
y:= ´n´;
writeln (´Ingresar cualquier número para continuar, 0 para salir´ );
readln (x);
end;
end.
Program Desconocido4 ;
Var
x, y, xx : integer;
writeln (´ ********************************************** ´ );
Página 11 de 11
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
Página 12 de 12
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
5 Estructuras de Control
Nota Porcentaje
Excelente 100
Bueno Entre 61 y 90
Regular Entre 40 y 60
5) Se tiene un listado de alumnos que consiste en apellido, nombre y 4 notas por alumno. La
condición de aprobación es un promedio mayor o igual que 4. Informar un listado en el
mismo orden de entrada con el apellido, el nombre, el promedio y una leyenda (aprobado o
desaprobado) por alumno. No se conoce la cantidad total de alumnos a procesar. El listado
puede estar vacío.
Página 13 de 13
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
8) Se tiene un listado de pares ordenados (x,y) de puntos de un plano, con -99< x <+99, -99< y
<+99. Informar por cada par, si pertenece, si es exterior o interior al rectángulo de
coordenadas 3 <+x <+5 , 2<+y <+3.
9) Dados a y n, informar los primeros n múltiplos de a. Realizar 3 versiones, una con el ciclo
mientras (while), otra con el ciclo repetir (do while) y otra con el ciclo para (for).
10) Dado n, informar los n primeros términos de la sucesión geométrica de razón 3 (1, 3, 9, 27,
etc).
13) Dados a y n enteros, informar las n primeras potencias de exponente par de a, en forma
creciente.
15) Informar un listado de números entre el 000 y el 999, escritos separando cada dígito de
cada número con un guión, 0-0-0 0-0-1 0-0-2 ......... 9-9-9.
16) Informar los números capicúas entre el 000 y el 999, escritos separando cada dígito de cada
número con un guión, 0-0-0 0-1-0 0-2-0 ......... 9-9-9.
17) Se dan como datos de entrada las fechas de nacimiento (día, mes, año) y los nombres de
cada integrante de un grupo. Se indica fin de datos de entrada cuando día = 0. Muestre por
pantalla el nombre del integrante más joven del grupo.
18) Se tienen los siguientes datos de un empleado: apellido y nombre, categoría a la que
pertenece, fecha de ingreso a la empresa, cantidad de horas trabajadas en el mes y cantidad
Página 14 de 14
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
a) Informar el apellido, el nombre, el sueldo base, el monto por horas extras si existe, el
monto por antigüedad, el monto de cada descuento y el sueldo a cobrar.
b) Realizar la impresión en un formato típico de liquidación de sueldo.
19) Se tienen los siguientes datos de los n inscriptos a una carrera: apellido, nombre, edad y
tiempo obtenido.
Los competidores se clasifican según su edad en: veterano (edad > 35 años), mayor (21 <
edad < 35) juvenil (18 < edad < 21) y cadete (12 < edad < 18).
Se pide:
a) informar un listado con el apellido-nombre, categoría y tiempo de cada competidor;
b) informar la cantidad de competidores por categoría y el tiempo promedio de la prueba.
20) Dado un lote de registros, cada uno de los cuales contiene: numero de legajo de un alumno,
3 notas correspondientes a las materias rendidas en el cuatrimestre y un código de carrera
(10, 20, 30 o 40). El último registro tiene número de legajo = 0. Informar el legajo del alumno
que obtuvo el mejor promedio y la cantidad de alumnos de cada carrera.
21) Suponer que el listado de entrada del problema anterior está ordenado por categoría de
veterano a cadete. Se pide el mismo listado de salida pero indicando la cantidad de
competidores por categoría y el tiempo promedio por categoría inmediatamente después de
listar el último competidor de cada categoría.
22) Realizar un programa que permita imprimir facturas en formato típico, ingresando como
datos el apellido-nombre del cliente y por cada artículo, el código, la descripción, la cantidad
de unidades y el precio por unidad. El número de factura se genera automáticamente a partir
del ingreso del número de la primera factura del día.
Realizar un descuento del 10% por cada artículo comprado en 10 ó más unidades.
23) Por cada colegio de un determinado distrito escolar se tienen los siguientes datos: número
de escuela y cantidad de grados. A continuación y en forma separada, se ingresan la
cantidad de alumnos de cada grado. Sabiendo que hay 25 colegios en el distrito, se pide
para cada colegio informar su número y total de alumnos y además informar que escuela
tiene la mayor cantidad de alumnos en total.
24) Se tiene un listado de alumnos de un curso con el apellido-nombre, código y una cantidad
variable de notas obtenidas ( 2 como mínimo y 4 como máximo ).
Las notas corresponden a primer parcial, segundo parcial, recuperación de primer parcial y
recuperación de segundo parcial, exámenes que se suceden en ese orden en el tiempo.
La aprobación de cada parcial requiere un promedio mayor o igual que 4 considerando la
primera y/o segunda oportunidad.
La ausencia se ingresa como un 0 y se computa como tal solo en la segunda oportunidad
(es decir, un alumno que no se presenta en la primera oportunidad y obtiene 4 ó mas en la
segunda oportunidad del correspondiente parcial tiene como promedio la nota de esta
segunda oportunidad).
Informar el listado en el mismo orden de entrada con apellido-nombre, código, promedio por
parcial y la leyenda " a examen final " ó " recursa " en caso de aprobación de los dos
parciales o no respectivamente.
25) Una agencia de automóviles tiene 4 vendedores, los cuales se identifican con los números
enteros entre 1 y 4.
Por cada venta realizada durante un mes, se tiene un listado con el número de vendedor
que la realizó y el monto de la venta.
La comisión de cada vendedor es del 20% del monto total de venta que haya acumulado en
el mes.
Se pide informar:
a) El monto total de venta de la agencia, el monto total de venta de cada vendedor junto con
la comisión correspondiente y el porcentaje respecto al total de la agencia
b) La cantidad total de unidades vendidas de la agencia, la cantidad total de cada vendedor
y el porcentaje que esta última cantidad representa con respecto a la primera.
26) Se tiene un listado de alumnos que consiste en apellido, nombre y 4 notas por alumno.
Informar el mayor y el menor promedio registrado junto con el nombre y apellido del alumno,
suponiendo que ambos son únicos.
Página 16 de 16
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
27) Dados los datos del problema anterior, informar el menor promedio registrado y la cantidad
de alumnos que lo obtuvieron, suponiendo que puede existir más de un alumno en esa
condición. ¿Se puede informar quiénes son estos alumnos?. Justificar la respuesta.
28) Se tienen los siguientes datos de los n inscriptos a una carrera: apellido-nombre, edad y
tiempo obtenido.
Los competidores se clasifican según su edad en : veterano (edad > 30 años), mayor (21 <
edad < 30) juvenil (18 < edad < 21) y cadete (12 < edad < 18).
Se pide:
a) Informar el mínimo tiempo obtenido y la categoría con menor cantidad de competidores.
Analizar la diferencia desde el punto de vista del procesamiento de ambos mínimos.
b) Informar el apellido y nombre del ganador junto con el tiempo obtenido, por categoría.
Suponer que el ganador por categoría es único. El listado de entrada no tiene ningún
orden particular.
Página 17 de 17
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
3) Escribir una función que dado un número entero, devuelva una señal que indique si dicho
número es primo o no.
4) Escribir una función que dados 2 números, calcule el porcentaje que el primero representa
respecto del segundo.
5) Escribir una función que dados a y b devuelva el cociente de la división entera, sin utilizar el
operador correspondiente del lenguaje. Validar los tipos de datos de entrada.
6) Escribir una función que dados a y b devuelva el resto de la división entera, sin utilizar el
operador correspondiente de lenguaje. Validar los tipos de datos de entrada.
7) Escribir una función que dado un código numérico de m dígitos, separe un sub-código
consistente en una cantidad n<m de dígitos a partir del k-ésimo lugar a contar del dígito
menos significativo. Utilizarla en un programa que ingrese un listado de códigos numéricos
junto con sus correspondientes parámetros m,n y k y liste dichos códigos de entrada junto
con el sub-código deseado.
8) Un número entero positivo se dice perfecto si es igual a la suma de todos sus divisores.
excepto el mismo.
Ejemplo: los números 6 (1+2+3), 28 (1+2+4+7+14) y 496 (1+2+4+8+16+31+62+124 +248)
son perfectos.
Se pide:
a) Escribir una función booleana que llamada desde un programa, permita discernir si un
número (único parámetro) es perfecto.
b) Dar un ejemplo de cómo se hace referencia a dicha función desde un programa o desde
otro subprograma.
Nota: no usar variables globales.
9) Dos números se dicen amigos cuando uno de ellos es igual a la suma de todos los divisores
del otro excepto el mismo.
Ejemplo: los números 220 (1+2+4+5+10+11+20+22+44+55+110=284)
y 284 (1+2+4+71+142=220) son amigos.
Se pide:
a) escribir una función booleana que llamada desde un programa, permita discernir si dos
números (parámetros) son amigos.
Página 18 de 18
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
b) Usar otra función para calcular la suma de los divisores de un número determinado.
c) Hacer referencia a dichas funciones desde un programa o desde otro subprograma.
Escribir los programas correspondientes a los siguientes problemas utilizando funciones
que retornen un valor según lo indicado.
10) Escribir un programa que ingrese un listado de números e informe la cantidad de múltiplos
de 2, 3, 5 y 7. Utilizar una función que dados 2 números devuelva una señal que indique si el
primero es o no múltiplo del segundo.
11) Generar los primeros n números naturales e informar un listado de cada número generado
junto con el factorial correspondiente. Utilizar una función que dado un número devuelva su
factorial.
Resolver los siguientes problemas utilizando funciones que retornen un valor. Decidir la
estructura de subprogramas a utilizar.
12) Dadas 2 fechas, informar cuál es la fecha anterior. Los datos se dan según los siguientes
casos:
a) Cada fecha consiste en 3 números, día, mes y año.
b) Cada fecha consiste en un único número en formato aammdd.
c) Cada fecha consiste en un único número en formato ddmmaa.
13) Dada una fecha en formato aammdd, verificar si es correcta. Si lo es, informarla según dd de
cccc de 19aa. Si no lo es, informar un mensaje de error. cccc es la cadena de caracteres
correspondiente al mes mm.
14) Dado un listado de números enteros informar aquellos que sean primos, la cantidad y la
sumatoria de los mismos.
15) Dado un listado de números enteros informar los n primeros números primos que aparezcan
y su sumatoria.
17) Escribir un programa que determine el máximo común divisor entre dos números.
18) Escribir un programa para cambiar un número binario de cuatro cifras a un número de base
10
a) Los datos a leer son 4 números de un dígito cada uno
b) El dato es un solo número de 4 cifras
Nota: Una buena aproximación está dada por el desarrollo de 10 términos como mínimo.
20) Un pastor cuenta sus ovejas. Le sobra siempre una si las cuenta de la siguiente forma: de 3
en 3, de 5 en 5, de 6 en 6 o de 9 en 9. En cambio si las cuenta de 7 en 7 no le sobra
ninguna. Se pide escribir un programa que le permita obtener ese valor, sabiendo que el
número de ovejas no supera el millar.
22) Escribir un subprograma que dadas 2 coordenadas rectangulares (x,y) devuelva las
correspondientes coordenadas polares r = ( x2 + y2 )½ y α = arctg ( y / x ) .
23) Escribir un subprograma que dadas las coordenadas polares r y α devuelva las
correspondientes coordenadas rectangulares x = r cos α , y = r sen α.
24) Escribir un subprograma que dada una fecha en formato aaaammdd la convierta en los
parámetros numéricos aaaa, mm y dd.
25) Escribir un subprograma que dado un tiempo expresado en segundos, devuelva los
parámetros numéricos horas, minutos y segundos.
26) Realizar un subprograma que dada una cadena de caracteres, la devuelva invertida.
27) Escribir un subprograma que dado n , lea n caracteres que forman un número romano y que
devuelva:
28) Si la entrada fue correcta, un string que represente a dicho número romano y un número que
represente el equivalente decimal,
29) Si la entrada fue errónea, el string debe devolver la palabra error y el número la cantidad -1.
30) Revisar la resolución de los ejercicios de la sección Estructuras de Control y decidir una
nueva estructura, si correspondiera, para esos programas, en términos de los conocimientos
adquiridos a partir del tema de subprogramas.
Se pide:
a) Para cada participante mostrar por pantalla el nombre, la edad y la marca obtenida
Página 20 de 20
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
2) Dado un listado de números reales del cual no se conoce la cantidad, almacenar los
números en un vector en el orden de entrada. Informar la cantidad de números y el
contenido del vector indicando la posición ocupada por cada número a partir de la primera
posición.
10) Dado un vector a de longitud n y un elemento p del mismo tipo que los elementos del vector,
buscar p en el vector a y devolver la posición que ocupa en caso de encontrarlo o una señal
en caso contrario. Suponer que no hay repeticiones.
Página 21 de 21
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
12) Dado un vector a de longitud n ordenado ascendente y un elemento p del mismo tipo que los
elementos del vector, intercalar p en el vector a de modo que siga ordenado.
13) Escribir un subprograma que dado un vector de caracteres y su longitud, devuelva un vector
que contenga la cadena de entrada invertida.
14) Escribir un subprograma que dado un vector y su longitud, devuelva el elemento máximo, la
cantidad de veces que se repite y la/s posición/es que ocupa.
15) Escribir un subprograma que dado un vector de nombres de personas, en donde puede
haber nombres repetidos, (los nombres son cadenas de caracteres de longitud máxima 30) y
su longitud, devuelva otro vector en donde se hallan eliminado todas las repeticiones.
16) Escribir un subprograma que dado un vector de nombres de personas, en donde puede
haber nombres repetidos, (los nombres son cadenas de caracteres de longitud máxima 30 )
y su longitud, devuelva el mismo vector en donde se han eliminado todas las repeticiones sin
dejar espacios vacíos.
17) Cargar un conjunto de nombres de personas (cadenas de caracteres de longitud máxima 30)
en un vector. Informar un listado ordenado alfabéticamente. Utilizar un subprograma de
ordenamiento de un vector.
18) Escribir un subprograma que dadas 2 (dos) matrices y sus dimensiones, las multiplique en
caso de ser posible o devuelva una señal si la operación no puede realizarse.
19) Escribir un subprograma que dada una matriz de números reales, de n x m, devuelva un
vector que en cada posición i almacene el elemento mínimo de cada fila i de la matriz.
Legajo Apellido-Nombre Documento Fecha Nacimiento Domicilio Fecha Alta Fecha Baja
(8 díg.) (30 caracteres) (8 dígitos) (aaaa/mm/dd) (30 car.) (aaaa/mm/dd) (aaaa/mm/dd)
Se quiere informar un listado ordenado alfabéticamente por apellido-nombre con todos los
datos asociados.
a) Utilizar un subprograma de ordenamiento de un vector con arrastre del vector de índices.
b) Utilizar un subprograma de obtención de los índices que ordenan un vector
Página 22 de 22
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
22) Se tiene un registro de la temperatura por hora (0 a 23) por día (1 a n) de un mes,
ordenada cronológicamente. Se pide:
a) Ingresar el número de mes para conocer la cantidad de días registrados.
b) Cargar el listado en una matriz e informarla en forma bidimensional.
c) Informar además la máxima y la mínima temperatura por día, la máxima y la mínima
temperatura del mes.
23) Un depósito almacena m productos distintos. Al comienzo del día se tiene un listado con el
stock inicial de cada uno de los m productos.
a) Durante el día se realizan movimientos de entrada y/o salida de productos, los cuales
se van registrando cronológicamente según los siguientes datos:
Código de Producto (1 a m) Tipo de Movimiento ('e', 's'). Cantidad de Unidades
(entero)
Se tiene además un listado con los precios unitarios de cada producto.
i) Se pide informar :
(1) Cantidad total de movimientos de entrada.
(2) Cantidad total de movimientos de salida.
(3) Stock actualizado de cada producto al final del día.
(4) Cantidad total de unidades ingresadas de cada producto.
(5) Cantidad total de unidades salidas de cada producto.
(6) Monto total en stock al final del día.
(7) Monto total en stock al final del día por producto.
(8) Monto equivalente a los movimientos de entrada.
(9) Monto equivalente a los movimientos de salida.
24) En una prueba de atletismo se inscriben n participantes de los cuales se registra nombre y
apellido, número de documento, lugar y fecha de nacimiento y se le asigna un código de
participante.
• No necesariamente todos los inscriptos se presentan a la prueba.
• Los participantes deben cumplir con el requisito de tener 18 años cumplidos a la
fecha
de la prueba.
• El código de participante es una cadena de 7 caracteres, formado por el sub-
código de lugar de nacimiento ( 3 letras ) y un número de orden de inscripción ( 4
dígitos ).
• Luego de realizada la prueba se tiene una lista con el código de participante,
apellido y nombre, y puntaje obtenido.
Se pide:
(1) Verificar la edad de los concursantes al día de la prueba y descalificar a los que no
cumplan el requisito indicado.
(2) Informar un listado ordenado por puntaje decreciente con apellido y nombre, lugar
de nacimiento y puntaje de los participantes que hayan completado la prueba.
(3) Informar un listado ordenado por código decreciente con código, apellido y
Página 23 de 23
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
26) Una empresa de transporte de pasajeros de larga distancia posee micros de 4 categorías y
viaja a 250 localidades de zonas turísticas del país. No necesariamente todas las
temporadas se habilitan las 4 categorías, ni hay viajes a todas las localidades posibles.
a) Se dispone de un registro de todos los pasajes vendidos en una temporada
consistente en: código de categoría (a, b, c, d y código de destino (1 a 250 )
y de un listado ordenado por código del nombre de cada localidad de destino.
Se pide informar :
(1) La cantidad de pasajeros por localidad, por categoría.
(2) La cantidad de pasajeros por localidad.
(3) La cantidad de pasajeros por categoría.
(4) El nombre de la localidad a la que viajó la mayor cantidad de pasajeros.
(5) El nombre de la localidad a la que viajó la menor cantidad de pasajeros.
a) Utilizar un subprograma que dada una matriz, sus dimensiones y una opción, devuelva
un vector que almacene la sumatoria de las filas o las columnas de la matriz según el
valor de la opción.
• Utilizar un subprograma de búsqueda de un elemento en un vector.
• Utilizar un subprograma que dado un vector, su dimensión y una opción, devuelva
la posición del máximo o del mínimo elemento del vector según el valor de la
opción.
Página 24 de 24
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
29) Se quiere imprimir la tabla de posiciones final de un campeonato de fútbol, en donde los
equipos juegan todos contra todos. Para ello se cuenta con la siguiente información :
a) Listado de los nombres de los equipos participantes.
b) Listado de los resultados de los partidos jugados : nombre del equipo local, nombre del
equipo visitante, cantidad de goles del equipo local y cantidad de goles del equipo
visitante.
c) La tabla debe contener el nombre de cada equipo junto con la cantidad de goles a
favor, la cantidad de goles en contra y los puntos obtenidos, y debe estar ordenada
por puntos decrecientes.
d) Los puntos por partido se asignan según : ganado, 2 (dos) puntos; empatado, 1 punto;
perdido, 0 punto. En caso de igualdad de puntos se considera la diferencia de goles y
en caso de persistir, el orden dado en la lista de equipos.
e) Utilizar un subprograma de búsqueda, que dado un vector v de elementos tipo cadena
de caracteres y un elemento c del mismo tipo que los del vector, devuelva la posición
en donde se halla c dentro de v.
f) Utilizar un subprograma que realice un ordenamiento según 3 (tres) claves.
Página 25 de 25
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
Nota:
• Las palabras pueden estar separadas por uno o más espacios en blanco.
• Pueden haber varios espacios en blanco antes de la primera palabra y también después
de la última.
• Se considera que una palabra finaliza cuando se encuentra un espacio en blanco o un
signo de puntuación.
3) Escribir una función inversa que recibe una cadena como parámetro y devuelve los
caracteres de la misma en orden inverso.
4) Escribir un programa que lea una frase y a continuación visualice cada palabra de la frase en
columna, seguido del número de letras que componen cada palabra. La frase termina con un
¨.¨
Ejemplo:
Solución:
La 2
casa 4
es 2
linda 5
Página 26 de 26
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
Ejemplo:
Solución:
a 4 ****
e 1 *
i 1 *
Página 27 de 27
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
6) Registros
Se pide:
Imprimir un listado con los apellidos y nombres de las personas que cumplan años en el
mes y calcular e informar una suma de regalo equivalente al uno por mil del sueldo por cada
año cumplido.
2) Se tiene una lista de fechas en formato día (1..31), mes (enero, febrero, .. diciembre), año
(80..99).
Leer la lista y a medida que se la lee, determinar cuál es la menor fecha ingresada. No
utilizar array.
4) Escribir un programa que permita ingresar los datos necesarios y calcular el perímetro y
superficie de un círculo, de un rectángulo o de un triángulo a elección del usuario.
Página 28 de 28
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
• Los niveles de mando están codificados de mayor a menor en nivel 1, nivel 2 y nivel
3.
• Las jerarquías administrativas están codificadas de mayor a menor en a,b,c,d.
• Los sectores son: Mecánica, Electricidad y Electrónica.
Se pide:
a) Hacer un programa que almacene los datos de todos los empleados en una tabla en
memoria y que permita obtener un listado ordenado por impresora según distintos ítems,
como por ejemplo, por identificación, por número de legajo, por categoría, por edad, por
antigüedad, por localidad, por título, por especialidad, etc.
6) Dada la estructura de datos del problema anterior, escribir el algoritmo de búsqueda binaria
para la búsqueda de un dato correspondiente a los campos de identificación o número de
legajo, a elección del usuario.
Listado de Stock:
Código de producto (entero de 4 cifras), Cantidad en stock (real mayor que cero).
Listado de Productos:
Código de producto (entero de 4 cifras), Descripción, Precio unitario.
Listado de Ventas
Código de producto (entero de 4 cifras), Cantidad vendida en una venta.
Los listados de Stock y Productos están ordenados por código y no necesariamente todos
los registros de uno están en el otro.
El listado de ventas corresponde a un día y no está ordenado.
Se pide :
8) Dados dos 2 listados de inscripción de alumnos a 3 turnos de una misma materia, se pide
generar un listado único ordenado por número de alumno.
La estructura de los listados es: número de alumno (5 dígitos), apellido y nombre, turno (1,2,
3). Puede ocurrir que un alumno se haya inscripto en mas de un turno por lo cual en el
listado generado deben aparecer todos los turnos en los que se inscribió en un único
registro de alumno con campo variable.
Página 29 de 29
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
9) Escribir un programa que dados dos pares de números reales que representan a dos
números complejos, ya sea dados en coordenadas rectangulares o bien en coordenadas
polares, obtenga la representación de los datos en ambas coordenadas y la suma, la resta,
la multiplicación y la división de los datos también en ambas coordenadas.
Página 30 de 30
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
9 Archivos
1) Dado un archivo de números enteros mayores o iguales que 0, generar otro archivo que
almacene los factoriales de cada número del registro correspondiente del archivo de entrada.
2) Dado un archivo de números enteros, generar otro archivo que contenga aquellos que son
primos en el primero.
3) Dado un archivo de números enteros entre 0 y 255, imprimir los caracteres correspondientes
según el código ASCII.
4) Dados dos archivos de números enteros de 5 dígitos ordenados en forma creciente, generar
un archivo que contenga todos los números, ordenado de igual forma. No hay números
repetidos.
5) Dado un archivo de apellidos y nombres, generar otro archivo con los mismos datos
ordenados alfabéticamente.
Suponer los siguientes casos:
a) El archivo de entrada cabe en memoria.
b) El archivo de entrada no cabe en memoria y se procesa en forma secuencial.
c) El archivo de entrada no cabe en memoria y se procesa en forma directa.
7) Leer un archivo de caracteres que representa un texto formado por oraciones terminadas en
punto. Copiarlo en otro archivo eliminando los espacios superfluos.
8) Leer un archivo de caracteres que representa un texto formado por oraciones terminadas en
punto. Calcular la cantidad de monosílabos que hay en el texto, la longitud promedio de las
palabras y la cantidad de palabras.
9) Se tiene un archivo con los siguientes datos de los empleados de una empresa:
Apellido y Nombre (35 caracteres)
Sexo (f,m)
Página 31 de 31
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
10) Una empresa tiene en un archivo llamado “PERSONAL.DAT”, los siguientes datos de sus
empleados: NOMBRE CATEGORIA SUELDO. El archivo está ordenado por categoría. Se
pide emitir el siguiente listado:
LISTADO DE PERSONAL
CATEGORIA XX
RIOS, LORENA
CATEGORIA YY
SALERNO, VICTORIA
ARANDA, MIGUEL
a) Emita un listado con las categorías y el total de sueldos de cada una de ellas.
Se pide:
a) Hacer un programa que almacene los datos de todos los empleados en un archivo en
disco y que permita obtener un listado ordenado por impresora según distintos ítems,
como por ejemplo, por identificación, por número de legajo, por categoría, por edad, por
antigüedad, por localidad, por título, por especialidad, etc.
Utilizar un esquema tipo menú.
El archivo no cabe en memoria.
12) Dada la estructura de datos del problema anterior, escribir el algoritmo de búsqueda para la
búsqueda de un dato correspondiente a los campos de identificación o número de legajo, a
elección del usuario.
13) Una escuela tiene en el archivo ARCHIVO.DAT, los siguientes datos de sus alumnos:
NOMBRE, AÑO, DIVISION, PROMEDIO GENERAL.
• Imprimir un listado por año y división con los nombres de los alumnos y sus
promedios
• Informar, al final del proceso, el nombre del alumno de mejor promedio de la escuela
• Grabar en un archivo los siguientes datos de cada año y división: AÑO, DIVISION,
CANTIDAD DE ALUMNOS
14) Analizar la eficiencia de los algoritmos propuestos en los problemas anteriores. Obtener
conclusiones. Investigar sobre las formas prácticas de realizarlos.
Ambos archivos están ordenados por legajo y sus registros contienen legajo y ficha de
inscripción. Confeccione un programa que obtenga un listado de alumnos que están
Página 33 de 33
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
16) En un colegio tienen dos archivos correspondientes a dos divisiones de 4to año, cada uno
ordenado alfabéticamente, con nombre y nro. de documento de los alumnos. Por razones
presupuestarias se decide abrir una sola división. Construir un programa que grabe en un
archivo, en orden alfabético, los datos de los alumnos de la división creada.
17) Una empresa prestadora de servicios de Internet, requiere facturar a todos sus usuarios.
Para ello, dispone de los siguientes archivos:
Ingresando por teclado el costo del abono y el costo del minuto de conexión, utilice los dos
archivos mencionados para:
DOMICILIO:…………………………………………………………
ABONO XXXXX
ADICIONAL XXXXX
TOTAL XXXXX
18) Dado un archivo, donde cada registro contienen las coordenadas de un punto del plano,
determinar e imprimir cuántos puntos caen en cada cuadrante y que % sobre el total
representan los que caen en el primer cuadrante.
19) Una empresa que transporta carga tiene en un archivo los siguientes datos de cada viaje:
b. Destino
Página 34 de 34
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
d. Peso de la carga en KG
20) Una línea de subterráneos desea hacer una estadística, para ello cuenta con un archivo que
contiene un registro por cada día de cada mes con los siguientes datos: MES DIA
CANTIDAD DE PASAJEROS TRANSPORTADOS. El archivo tiene información de todo un
año y está ordenado por mes y día. Se pide:
21) En un negocio se realizan ventas al contado o en cuotas (de 2 a 6) en dólares. Por cada
compra se ingresan los siguientes datos: nombre del cliente, fecha, importe de la compra,
código de la compra (si es al contado o en cuotas, indicando la cantidad de cuotas). El fin de
ingreso de datos se da con el nombre del cliente “ZZZ”.
Se pide:
a. Grabar en un archivo tantos registros como cuotas (una por mes, a partir del mes
siguiente al de la compra) deben pagarse con los siguientes datos: NOMBRE DEL
CLIENTE IMPORTE DE LA CUOTA FECHA DE VENCIMIENTO.
22) Una empresa de venta de productos alimenticios posee los siguientes archivos:
Archivo de Stock
Código de producto (entero de 4 cifras), Cantidad en stock (real mayor que cero), Fecha
de actualización.
Archivo de Productos
Código de producto (entero de 4 cifras), Descripción, Precio unitario.
Archivo de Ventas
Código de producto (entero de 4 cifras), Cantidad vendida en una venta.
Los archivos de Stock y Productos están ordenados por código y no necesariamente todos
los registros de uno están en el otro.
El archivo de ventas corresponde a un día y no está ordenado.
Se pide :
Página 35 de 35
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
23) El Supermercado Toto al final de su ejercicio comercial requiere sintetizar los resultados de
sus ventas. Para ello necesita generar un archivo “ventasdia.dat” con las ventas del día
elegido con el siguiente formato:
Los registros son únicos y están ordenados en forma ascendente por CodArt .
• Un archivo “Ventas.dat” que contiene las Ventas diarias de todo año con el siguiente
formato:
Estos registros son múltiples a razón de ninguno, uno o varios por CodArt. Ordenados en
forma ascendente por CodArt y FechaVenta. El archivo contiene aproximadamente
1.000.000 registros.
• Un archivo “Precios.dat” que contiene todos los precios del articulo en el año.
Estos registros son múltiples a razón de ninguno, uno o varios por CodArt. Ordenados en
forma ascendente por CodArt y FechaVigencia. El archivo contiene aproximadamente
100.000 registros.
Se debe tener en cuenta que puede haber Artículos en el archivo Precios que no existen en
Ventas.
Página 36 de 36
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
Archivo Ventas
Archivo Precios
Página 37 de 37
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina
Página 38 de 38