0% encontró este documento útil (0 votos)
1K vistas

Guia de Algoritmos

Este documento presenta la cátedra de Algoritmos I de la Facultad de Ingeniería de la Universidad de Buenos Aires. Detalla los miembros de la cátedra, incluyendo al profesor titular, jefe de trabajos prácticos y ayudantes. Además, contiene el contenido de la materia, organizado en diez capítulos que abarcan temas como algoritmos, representación de datos, estructuras de control, subprogramas, arreglos, strings, registros y archivos.

Cargado por

pmchacin
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
1K vistas

Guia de Algoritmos

Este documento presenta la cátedra de Algoritmos I de la Facultad de Ingeniería de la Universidad de Buenos Aires. Detalla los miembros de la cátedra, incluyendo al profesor titular, jefe de trabajos prácticos y ayudantes. Además, contiene el contenido de la materia, organizado en diez capítulos que abarcan temas como algoritmos, representación de datos, estructuras de control, subprogramas, arreglos, strings, registros y archivos.

Cargado por

pmchacin
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 38

Universidad de Buenos Aires Facultad de Ingeniería

Algoritmos I Cátedra Ing. Domingo Mandrafina

Miembros de la Cátedra

Profesor Titular
Ing. Domingo Mandrafina

Jefe de Trabajos Prácticos


Lic. Marcos Otero

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

3 REPRESENTACIÓN DE DATOS - ARQUITECTURA DE COMPUTADORAS........................................................7


3.1 SISTEMAS NUMÉRICOS ..................................................................................................................................................7
3.2 REPRESENTACIÓN DE ENTEROS Y REALES .....................................................................................................................7
3.3 ARQUITECTURA .............................................................................................................................................................8
4 TIPOS DE DATOS SIMPLES - EXPRESIONES.............................................................................................................9

5 ESTRUCTURAS DE CONTROL ....................................................................................................................................13


5.1 ESTRUCTURAS DE DECISIÓN ........................................................................................................................................13
5.2 ESTRUCTURAS DE DECISIÓN Y DE REPETICIÓN ............................................................................................................13
6 SUBPROGRAMAS: FUNCIONES Y PROCEDIMIENTOS ........................................................................................18

7 ARREGLOS (VECTORES Y MATRICES)....................................................................................................................21

8 STRINGS (CADENA DE CARACTERES).....................................................................................................................26

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.

1) Dado un número entero decir si:


a) es par o impar;
b) es mayor, menor o igual a cero:
c) es primo

2) Hallar la superficie de un triangulo conociendo la base y la altura

3) Calcular el sueldo de un operario conociendo la cantidad de horas que trabajó en el mes y el


valor de la hora

4) Dados tres números hallar el mayor.

5) Dado el radio de una esfera calcular el volumen.

6) Calcular la suma de los n primeros números naturales.

7) Dada una serie de números informar si se encuentran ordenados.

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.

10) Dado un mes escribir la cantidad de días de dicho mes.

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.

13) Escribir las tablas de multiplicar del número 1 al número 9.

14) De cada uno de los 30 alumnos de un curso se tiene el nombre y la cantidad de


inasistencias en el año. Hacer una lista con los nombres acompañados de la leyenda
“REGULAR” o “LIBRE”. (Un alumno queda libre cuando posee más de 20 inasistencias)

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:

a) Ingresar el código de forma: 1-redonda, 2- cuadrada, 3- rectangular

b) Ingresar la longitud en metros: si es cuadrada, se ingresa un solo valor y si es redonda,


corresponde al radio del circulo

c) Informar el costo total de la tapa

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

b) Informar la cantidad total de personas que ingresaron

c) Indicar el porcentaje de personas ingresadas sobre el total de personas que se


presentaron.

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

3 Representación de Datos - Arquitectura de Computadoras

3.1 Sistemas Numéricos

1) Definir qué se entiende por señal analógica, señal digital, sistema analógico y sistema digital.

2) Definir los siguientes conceptos :

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.

3) Realizar las siguientes conversiones :

si es posible, a sus equivalentes en decimal, si no, explicar por qué :

AB12 1F.E16 133 10110100.111010012

a sus equivalentes en binario y hexadecimal :

2048 2047 2563

sin pasar por el sistema decimal :

123.328 a bases 2, 4, 16

3.2 Representación de Enteros y Reales


1) Hallar el complemento a la base y el complemento a la base menos uno de los siguientes
números aplicando la definición, según el formato de cantidad de bits que se indica.

000001102 (8 bits) 111001102 (8 bits) 2A7816 (4 dígitos) 12023 (4 dígitos)

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 :

Escribir los números binarios y los equivalentes en decimal correspondientes.


MSB = Bit más significativo
Módulo = Valor absoluto
MSB = 0 Número positivo MSB = 1 Número negativo

3) Considerar los números de 8 bits A = 01011001 y B = 10110100. Realizar A + B en binario e


interpretar los operandos y resultados en decimal suponiendo que se trata de :

a) Números sin signo ( inherentemente positivos)


b) números con signo y almacenando los negativos en cada una de las formas de
representación de enteros (signo y magnitud, signo y complemento a la base, signo y
complemento a la base menos uno).

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

En todos los casos, interpretar operandos y resultados en decimal y extraer


conclusiones.

5) Repetir el punto anterior para el caso en que se almacenan los negativos en signo y
complemento a la base menos uno.

6) Representar el siguiente número decimal en la norma IEEE simple precisión : 36.75

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

4 Tipos de Datos Simples - Expresiones

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

2) Indicar la declaración de dos variables llamadas distancia y cuenta, la primera real y la


segunda entera. Ambas deben inicializarse en cero.

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.

4) Escribir las siguientes expresiones matemáticas según el lenguaje de programación:

1 a+b
b 2 − 4ac x( y + z )
x + x+3
2
c+d

5) Indicar qué salida produce el siguiente programa:

Program desconocido;
var
a , b , c : char,
begin
a:= ‘a’ ;
b:= ‘c’ ;
c:= a ;
writeln(a, b, c, ‘c’) ;
end.

6) Indicar qué salida produce el siguiente programa:

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

7) Dado el siguiente fragmento de programa que supuestamente convierte temperaturas de


grados Celsius a grados Fahrenheit

Program celsiusaFahrenheit;
var
c,f : real;
Begin
c:=20
f:= (9/5)*c + 32.0 ;
Writeln (f);
End.

Indicar :

a) Qué valor se asigna a f


b) Qué quiso hacer el programador
c) Qué está ocurriendo realmente
d) Cómo reescribir el código para realizar la operación correctamente.

8) Analizar las salidas del siguiente programa:

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.

9) Analizar la salida del siguiente programa:

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.

Indicar cuál es el papel que juega la variable y

10) Analizar la salida del siguiente programa:

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

writeln (´Ingresar cualquier número para continuar, 0 para salir´ );


readln (x);

writeln ( ´ ********************************************** ´);


while x <> 0 do
begin
xx:= x;
x:=x+1;
x:=x*10;
x:= x-1;
writeln (´ Los valores de x e y son: ´, x, y );
xx:=xx+1;
xx:x=x*10;
xx:= xx-1;
writeln (´ Los valores de xx e y son: ´, x, y );
writeln (´Ingresar cualquier número para continuar, 0 para salir´ );
readln (x);
end;
end.

Página 12 de 12
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina

5 Estructuras de Control

Realizar los programas que solucionan los siguientes problemas.

5.1 Estructuras de Decisión


1) Dadas las 4 notas obtenidas por un alumno, calcular e informar por pantalla su promedio e
informar una leyenda que indique si está aprobado o no. La condición de aprobación es
obtener un promedio mayor o igual que 4.

2) Dados 3 números, mostrarlos por pantalla en orden creciente.

3) Dados 5 números, mostrarlos por pantalla en orden creciente.

4) De una prueba de nivel realizada a un alumno se conoce la cantidad total de preguntas


realizadas y la cantidad de respuestas correctas. Informar el nivel registrado de acuerdo a la
siguiente escala :

Nota Porcentaje

Excelente 100

Muy bueno Entre 91 y 99

Bueno Entre 61 y 90

Regular Entre 40 y 60

Malo Menor que 40

5.2 Estructuras de Decisión y de Repetición

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

6) Repetir el problema anterior, suponiendo que se conoce la cantidad de alumnos a procesar.

7) Se realiza una encuesta para estimar el grado de aceptación de los productos x e y en el


mercado. A cada encuestado se le pregunta si consume el producto x y si consume el
producto y. La respuesta puede ser si o no. Se pide calcular e informar el porcentaje de
consumidores de:
a) del producto x
b) del producto y
c) del producto x solamente
d) del producto y solamente
e) de ambos productos
f) de ninguno de los productos

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).

11) Dados a y b enteros, informar el producto de ambos por sumas sucesivas.

12) Dados a y n enteros, informar la potencia enésima de a por productos sucesivos.

13) Dados a y n enteros, informar las n primeras potencias de exponente par de a, en forma
creciente.

14) Idem anterior en forma decreciente.

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

de horas extras trabajadas.


• La categoría puede ser: administrativo, técnico, profesional u operario.
• El valor de la hora trabajada por categoría es: $5, $7, $12 y $3 respectivamente.
• Las horas extras tienen un valor superior en un 50%.
• El sueldo a cobrar se compone de: sueldo base (cantidad de horas * valor hora) +
monto por horas extras + porcentaje por años de antigüedad - un descuento del
3% por obra social - un descuento del 10% por jubilación.
• Los porcentajes se calculan sobre el sueldo base.
• La antigüedad se calcula según: 5% entre 1 y 3 años, 10% entre 4 y 6 años, 20%
entre 7 y 10 años, 50% entre 11 y 15 años, 100% mas de 16 años (años
cumplidos). La fecha de procesamiento se ingresa una única vez.

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.

El listado de entrada no tiene ningún orden particular.

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.

Formato de cada categoría:

Juan Perez (veterano) 2’


Pedro Ramos (veterano) 3’

Cantidad de competidores Veteranos: 2


Promedio Veteranos: 2.5’
Página 15 de 15
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina

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.

29) En una carrera de automóviles se inscriben n participantes de los cuales se registra el


apellido y nombre, y la marca que representa, a medida que se inscriben se les asigna un
número de competidor.
El día de la prueba se completan los siguientes datos: cantidad de vueltas realizadas y
tiempo obtenido.
No todos los inscriptos se presentan a la prueba.
La cantidad máxima de vueltas es 50 y el tiempo máximo de la prueba es 2 horas.
Si un competidor abandona la prueba se le asigna un tiempo mayor a 2 horas.
La prueba es ganada por aquel competidor que complete las 50 vueltas en el menor tiempo,
dentro de las 2 horas, o bien el que mas vueltas haya realizado al alcanzarse las 2 horas
desde la largada.
Se pide informar todos los datos del ganador, si es único, en caso contrario informar las
mejores condiciones alcanzadas y la cantidad de participantes que las obtuvieron.

Página 17 de 17
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina

6 Subprogramas: Funciones y Procedimientos

Escribir las siguientes funciones que retornan un valor

1) Escribir una función que dados a y b enteros devuelva ab.

2) Idem 1 para parámetros reales.

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.

Puede darse el caso que las fechas sean iguales.

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.

16) Escribir un programa que descomponga a un número en sus factores primos.

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

19) Diseñar un algoritmo que calcule la aproximación del seno:


sen(x)= 1 - (x^3)/3! + (x^5)/5 - (x^7)/7! + ..........
Página 19 de 19
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina

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.

21) Escribir un subprograma que dados a y b devuelva el cociente y el resto de la división


entera, sin utilizar los operadores correspondientes al lenguaje. Validar los tipos de datos de
entrada.

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.

31) En una competencia de salto en largo, se presentaron 20 participantes. De cada uno se


ingresa: nombre, fecha de nacimiento (dd/mm/aaaa) y los alcances de sus 3 saltos
expresados en metros. El mejor de los 3 saltos se considera como la mejor marca obtenida.

Se pide:

a) Para cada participante mostrar por pantalla el nombre, la edad y la marca obtenida

b) Informar el nombre del atleta que obtuvo la mejor marca

Página 20 de 20
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina

7 Arreglos (Vectores y Matrices)


1) Dado n entero positivo y un listado de n números reales, almacenar los números en un
vector en el orden de entrada. Informar el contenido del vector indicando la posición ocupada
por cada número a partir de la primera posición.

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.

3) Dado un listado de valores numéricos i y x, donde i es un entero mayor que 0 y x un real,


almacenar x en la posición i de un vector. El listado no se ingresa ordenado por posición.
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.

4) Cargar un conjunto de números reales en un vector. No se conoce la cantidad exacta de


datos, pero se sabe que no superan los 100. No se conocen cotas para los datos. Informar el
valor máximo, la cantidad de veces que aparece y la/s posición/es que ocupa.

5) Cargar un conjunto de nombres de personas (cadenas de caracteres de longitud máxima 30)


en un vector. No se conoce la cantidad de datos válidos. Informar el nombre que es el último
en orden alfabético del conjunto y la posición que ocupa. Puede haber repetición, en este
caso informar todas las posiciones que ocupa.

6) Escribir un subprograma que dado un vector de caracteres, su longitud n y un valor k,


devuelva el caracter que se halla en la k-ésima posición. Considerar el caso en que k > n.

7) Escribir un subprograma que dado un vector y su dimensión, devuelva la sumatoria de sus


elementos.

8) Escribir un subprograma que dados n y dos vectores a y b de igual dimensión n, devuelva el


producto escalar p, es decir, p = Σ(a[i] * b[i]) , para 0<=i <= n-1 .

9) Dados 2 vectores a y b de longitudes n y m, el primero ordenado ascendente y el segundo


ordenado descendente, crear un nuevo vector c de n + m elementos intercalando los
elementos de a y b de modo que c quede ordenado ascendente.

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.

11) Idem problema anterior, pero el vector está ordenado ascendente.

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.

20) Se tiene un listado consistente en los siguientes ítems :


Número de Legajo Apellido-Nombre
(8 dígitos) (30 caracteres)

Se quiere obtener un listado ordenado alfabéticamente por apellido-nombre, con el número


de legajo correspondiente. Utilizar un subprograma de ordenamiento de un vector en forma
ascendente con arrastre de un vector asociado.

21) Se tiene un listado consistente en los siguientes ítems :

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

No modificar la posición original de los datos en memoria, ni crear nuevas estructuras.

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

nombre, y lugar de nacimiento de los participantes que no se hayan presentado a


la prueba.
(4) Informar un listado ordenado por código decreciente con código, apellido y
nombre, y lugar de nacimiento de los participantes que no hayan completado la
prueba.
(5) Informar todos los datos del ganador. No hay empate posible.

25) Se tiene un listado con los siguientes datos:


número de alumno ( 1 a n ) , número de materia ( 1 a m ), nota ( 0 a 10 ).
a) El mismo número de alumno y de materia puede aparecer más de una vez.
b) El listado no está ordenado, ni necesariamente completo. Esto último quiere decir que
puede ser que un alumno no haya cursado una o más materias, y por lo tanto no
existan los datos correspondientes en el listado.
Se pide :
(1) Crear una estructura bidimensional que almacene el promedio por materia de cada
alumno e informarla asignándole en la impresión un guión al caso de falta de datos
mencionado.
(2) Informar el porcentaje de alumnos que cursó cada materia y el promedio general
por materia considerando los alumnos que la cursaron.
(3) Informar la cantidad de materias que cursó cada alumno y el promedio que obtuvo
considerando las materias que cursó.

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.

27) La cantidad de localidades a las cuales viajaron más de 1000 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

• Utilizar un subprograma que dado un vector, su dimensión y un elemento x,


devuelva la cantidad de elementos del vector mayores que x.

28) Se tienen los datos de una carrera en donde participaron m competidores.


(1) La carrera se divide en n tramos.
(2) Los competidores se numeran de 1 a m por orden de inscripción.
(3) De cada tramo se tiene el tiempo obtenido por cada competidor, según el siguiente
orden : en el primer tramo los tiempos están ordenados de acuerdo al número de
inscripción, a partir del segundo tramo el orden de los tiempos corresponde a los
competidores según orden ascendente de los tiempos obtenidos en el tramo
anterior, es decir, en el tramo i el primer tiempo en el listado corresponde al
competidor que obtuvo el menor tiempo en el tramo i -1.
(4) Se tiene además un listado con los nombres de los competidores según el orden
de inscripción.
Se pide informar :
(1) El nombre y número de inscripción del ganador.
(2) El tiempo por tramo obtenido por el ganador.
(3) El tiempo total obtenido por el ganador.
(4) El tiempo promedio obtenido por el ganador.
(5) El número de tramo y el tiempo del tramo en que el ganador obtuvo el tiempo
mínimo.
(6) El tiempo mínimo registrado en un tramo junto con el número de tramo y el
competidor que lo obtuvo.

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

8 Strings (Cadena de Caracteres)

1) Dado un texto de un telegrama que termina en punto:


a) Contar la cantidad de palabras que posean más de 10 letras
b) Informar la cantidad de veces que aparece cada vocal
c) Informar el porcentaje de espacios en blanco.

Nota: Las palabras están separadas por un espacio en blanco.

2) Dado un texto que finaliza en punto, se pide:


a) La posición inicial de la palabra más larga,
b) La longitud del texto,
c) Cuantas palabras con una longitud entre 8 y 16 caracteres poseen más de tres veces la
vocal “a”

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:

Frase: La casa es linda.

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

5) Escribir un programa que calcule la frecuencia de aparición de las vocales de un texto


proporcionado por el usuario. El mismo termina con un ¨.¨. La solución se debe presentar en
forma de histograma.

Ejemplo:

Frase: La casa es linda.

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

1) Se tienen los siguientes datos de los empleados de una empresa:

Apellido y Nombre (35 caracteres)


Sexo (f,m)
Fecha de Nacimiento (día, mes y año)
Fecha de Ingreso (día, mes y año)
Sueldo Básico
Se conoce la cantidad N de empleados y la fecha de procesamiento.

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.

3) Se tiene una lista de personas con los siguientes datos:


Número de documento, fecha de nacimiento (día, mes y año), sexo (f, m).
Se quiere buscar la pareja (de distinto sexo) cuyas edades sean las más cercanas.
Considerar posible repetición, así como la posibilidad de que no haya parejas posibles o
datos.

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.

5) Se tienen datos de empleados de una empresa según la siguiente estructura:

Identificación --------------- Apellido, Nombre.


Legajo
Dirección --------------------
Calle, N°, Localidad, Provincia, Código Postal.
Fecha de Nacimiento ----- Día, Mes, Año.
Fecha de Ingreso ---------- Día, Mes, Año.
Categoría -------------------
Profesional ------------ Título, Area, Nivel de Mando.
Administrativo ------- Jerarquía.
Operario --------------- Especialidad, Area, Sector.
Ordenanza
Seguridad
Las areas son: Producción, Mantenimiento, Desarrollo.

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.

Utilizar un esquema tipo menú.

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.

7) Una empresa de venta de productos alimenticios posee los siguientes listados:

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 :

a) Listar la cantidad total vendida por producto.


b) Listar el monto de venta por producto y el monto total.
c) Listar el stock actualizado por producto, eliminando de la misma aquellos productos sin
existencia y generando una lista aparte de faltantes.

Encabezar todos los listados con la fecha correspondiente.

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

Los listados de entrada están ordenados por número de alumno.

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.

6) Se tiene un archivo de números telefónicos cuyos registros son de la forma:

Característica de localidad (4 dígitos)


Característica central (3 dígitos)
Número (4 dígitos)
Dado un número que representa una característica de localidad, listar todos los números
telefónicos con dicha característica.
Suponer los siguientes casos:
a) El archivo no cabe en memoria y está desordenado.
b) El archivo no cabe en memoria y está ordenado según números telefónicos crecientes.

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

Fecha de Nacimiento (día, mes y año)


Fecha de Ingreso (día , mes y año)
Sueldo Básico
Se conoce la fecha de procesamiento.
Se pide:
a) imprimir un listado con los apellidos y nombres de las personas que cumplan años en el
mes
b) calcular e informar una suma de regalo equivalente al uno por mil del sueldo por cada
año cumplido.

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

MEDINA, JUAN PABLO

RIOS, LORENA

CATEGORIA YY

SALERNO, VICTORIA

ARANDA, MIGUEL

Además, utilizando el citado archivo:

a) Emita un listado con las categorías y el total de sueldos de cada una de ellas.

b) Informe el empleado de mayor sueldo de cada categoría

c) Informe cuántos empleados hay en cada categoría y cuántos hay en toda la


empresa.

11) Se tienen datos de empleados de una empresa según la siguiente estructura:

Identificación --------------- Apellido, Nombre.


Legajo
Dirección -------------------- Calle, N°, Localidad, Provincia, Código Postal.
Fecha de Nacimiento ----- Día, Mes, Año.
Fecha de Ingreso ---------- Día, Mes, Año.
Categoría ------------------- Profesional ------------ Título, Area, Nivel de Mando.
Página 32 de 32
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina

Administrativo ------- Jerarquía.


Operario --------------- Especialidad, Area, Sector.
Ordenanza
Seguridad

Las areas son: Producción, Mantenimiento, Desarrollo.


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 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.

El archivo está ordenado en forma creciente por año y división. Se pide:

• 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.

15) En una universidad se tienen dos archvos:

a) Archivo de alumnos inscriptos en Análisls

b) Archivo de alumnos inscriptos en Álgebra

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

inscriptos en las dos materias.

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:

a. De usuarios (ordenado por número de usuario), en el que cada registro contiene:


NRO DE USUARIO NOMBRE DOMICILIO

b. De conexiones (ordenado por numero de usuario, solo figuran en el mismo los


usuarios que se conectaron en el mes), cada registro contiene: NRO DE USUARIOS
CANTIDAD DE MINUTOS UTILIZADOS EN EL MES.

Ingresando por teclado el costo del abono y el costo del minuto de conexión, utilice los dos
archivos mencionados para:

a. Obtener la factura de cada usuario, según el siguiente formato:

NRO DE USUARIO:…………………… NOMBRE:……………..

DOMICILIO:…………………………………………………………

ABONO XXXXX

ADICIONAL XXXXX

TOTAL XXXXX

b. Grabar en un archivo los datos leídos que correspondan a conexiones


erróneas.

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:

a. Nro de patente de del camión

b. Destino

c. Costo del viaje

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

El archivo está ordenado por nro. de patente. Se pide:

a. Informar el nro. de patente del camión que realizó más viajes

b. Informar cuántos viajes se realizaron al destino “Córdoba”

c. Grabar en un archivo, para cada camión, número de patente y cantidad de


kg. Transportados en total.

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:

a. Imprimir un listado con número de mes y cantidad de pasajeros transportados en total

b. Informar en que semestre se transportaron más personas

c. Determinar y mostrar por pantalla la fecha en la que viajaron más personas

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

a) Listar la cantidad total vendida por producto.


b) Listar el monto de venta por producto y el monto total.
c) Actualizar el stock por producto, eliminando de la misma aquellos productos sin existencia
y generando un archivo de faltantes.

Encabezar todos los listados con la fecha correspondiente.

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:

CodArt (Valor alfanumerico tipo String[4])


CantVendidas (Valor entero mayor que cero)
Total (Valor real)

Los registros son únicos y están ordenados en forma ascendente por CodArt .

Se tienen los siguientes archivos:

• Un archivo “Ventas.dat” que contiene las Ventas diarias de todo año con el siguiente
formato:

CodArt (Valor alfanumerico tipo String[4])


CantVendidas (Valor entero mayor que cero)
FechaVenta (Formato [aaaammdd])
Ganancia (Valor real)

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.

CodArt (Valor alfanumerico tipo String[4])


FechaVigencia (Formato [aaaammdd])
Precio (Valor real)
Costo (Valor real)

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

9.1 Modelo de Datos:

Archivo Ventas

Prr CodArt CantVendidas UltFechaVent Ganancia


000 A001 05 20020103
001 A001 15 20020205
... ... .. ........
010 A001 10 20020626
011 A002 07 20020315
012 A002 09 20020626
013 A005 03 20020215
014 A005 01 20020626
... ... .. ........
150 B523 02 20020626
... ... .. ........

Archivo Precios

Prr CodArt FechaVigencia Precio Costo


000 A001 20020101 $03.50
001 A001 20020315 $03.40
002 A001 20020403 $05.20
003 A002 20020128 $12.30
004 A002 20020405 $15.50
005 A002 20020620 $17.60
006 A003 20020329 $00.99
... ... ........ ....
009 A003 20020625 $01.50
010 A004 20020623 $02.73
011 A005 20020505 $07.43
012 A005 20020620 $49.59
... ... ........ ....
273 B215 20020321 $04.25
274 B215 20020615 $06.89
... .. ........ ....
415 B523 20020107 $00.25
416 B523 20020215 $00.32
417 B523 20020305 $00.73
418 B523 20020306 $00.98
419 B523 20020515 $01.23
... ... ........ ....

Página 37 de 37
Universidad de Buenos Aires Facultad de Ingeniería
Algoritmos I Cátedra Ing. Domingo Mandrafina

Archivo Ventas Hoy

Prr CodArt CantVendidas Total


000 A001 10 $052.00
001 A002 09 $158.40
002 A005 01 $009.59
. .. ... .. .....
100 A193 05 $074.51
... .. .. .....
510 B523 02 $002.46
... .. .. .....

Página 38 de 38

También podría gustarte