Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejercicios Capítulo 4
Estructura de control: Repetición
1) Para los incisos a), b) y c) realizar las pruebas de escritorio de los programas, con los lotes de prueba
dados en caso de ser necesarios:
a) Program Cuenta;
Var
Lote de prueba: 4 , -4 , 2 , 3 , -2
suma, dato, conta:integer;
Begin
conta:=0; suma:=0;
while conta< 5 do
begin
readln(dato);
suma:=suma+dato;
conta:=conta+1;
end;
writeln('La suma de ',conta, ' enteros es: ', suma);
writeln('el promedio de los datos es ',(suma/conta):5:2);
End.
b) Program potencia;
var
pot:integer;
begin
pot:=1;
repeat
write(pot:5);
pot:=pot*2;
until pot >30;
end.
Program Maximo;
var
Dato, Max :integer;
Arch : text;
Begin
Assign(Arch,'Numeros.txt');
Reset(Arch);
Max :=-999;
While Not Eof(Arch) do
begin
read(Arch, Dato);
If Dato>Max then
Max:=Dato;
End;
Computación – Departamento de Informática – Facultad de Ingeniería – UNMDP 1
Capítulo 4: Estructura de control: repetición
Close(Arch);
Writeln(Max);
End.
3) Resolver cada uno de los siguientes problemas utilizando un MENÚ que permita optar por una o
varias opciones. Incluir una opción para fin de programa.
Nota: K es un número natural leído por teclado (variable de entrada). Utilizar ciclos Condicionales.
a) Mostrar por pantalla los números enteros que se encuentran comprendidos en el intervalo [-K, K],
en orden ascendente y luego en orden descendente.
b) Mostrar por pantalla los términos de la sucesión 1, 3, 6, 10, 15, 21, 28, ... menores al número K.
c) De un conjunto de números enteros leídos de un archivo, hallar el máximo de los que cumplan
con ser divisibles por K.
4) La sonda Solar Parker planea orbitar alrededor del sol en el año 2025, a una velocidad máxima de
700.000 km/h, lo que la convertirá en la nave más rápida de la historia de la exploración espacial.
Anteriormente, una de las sondas espaciales más veloces era la New Horizons, la cual fue lanzada en
el año 2006, y es capaz de desplazarse a una velocidad 54.000 km/h. Sabiendo que la distancia entre
el sol y cada uno de los planetas de nuestro sistema solar es la siguiente:
Escribir un programa que ofrezca un menú, que se reitere hasta que el usuario decida salir, que
permita elegir un planeta de la lista y calcule el tiempo aproximado (en años, meses y días) que le
llevaría a cada sonda alcanzarlo.
5) El número de Euler, e ≈ 2,71828, puede ser representado como la siguiente suma infinita:
1 1 1 1 1
𝑒= + + + + +⋯
0! 1! 2! 3! 4!
Desarrollar un programa que devuelva un valor aproximado de e, calculando esta suma hasta que la
diferencia entre dos sumandos consecutivos sea menor que 0,0001.
Nota: para el cálculo de cada factorial, utilizar el valor del factorial anterior.
6) Un sistema de control de velocidad registra la información de los vehículos que circulan por una
avenida. La velocidad máxima permitida de dicha avenida es de 60 km/h. La información que se
registra es la siguiente:
Velocidad del vehiculo (m/s),
Patente (AB123CD),
Fecha (dd/mm/aaaa)
Hora del día (hhmmss)
7) Un automóvil que está parado, arranca con una aceleración de 𝑎 m/s2. En ese mismo instante es
adelantado por un camión que lleva una velocidad constante de 𝑣 m/s. Desarrollar un programa que
permita ingresar, para distintos pares de vehículos, los valores de aceleración y velocidad, e informe
la posición y el instante del encuentro. Incluir una opción para indicar la finalización del ingreso de
datos.
8) Realizar las pruebas de escritorio del siguiente programa con los lotes de prueba dados
Program Promedio;
Var
Dato, Suma: real;
Lotes de prueba: 4, 100.3, 45.8, 320.5, 300.0 ;
N, Num, Cant: integer;
3, 100, 45.8, 320
Begin
readln(N);
Cant:=0;
Suma:=0;
For Num:=1 to N do
Begin
readln(Dato)
If (Dato>0) and (int(Dato)=Dato) then
Computación – Departamento de Informática – Facultad de Ingeniería – UNMDP 3
Capítulo 4: Estructura de control: repetición
Begin
Cant:=Cant+1;
Suma:=Suma+Dato;
End
Else
Writeln(Dato,'No se considera para el cálculo')
End;
If Cant<>0 then
writeln(Suma/Cant)
else
Writeln('No se puede efectuar el cálculo');
End.
9) Leer un conjunto de números reales. Se pide calcular el promedio de los números que se encuentran
en el intervalo (A, B). A es menor a B, siendo ambos datos de tipo numérico real.
Ejemplo: A = 3.5, B = 6.5
Conjunto = 2, 4, 5.5, 7, 3.5, 5.5, 1.25, 0 Promedio = 5
¿Cambiaría la condición de finalización del ciclo si los números estuvieran ordenados?
Program Serie;
Var
Suma,Signo,N,I,Factorial,K:integer;
Begin
readln(N);
Suma:=0;
Signo:=-1; Lote de prueba: 4
I:=0
While I<N do
Begin
I:=I+1;
Factorial:=1;
For K:=2 to I do
Factorial:=Factorial*K;
Suma:=Suma+Factorial*Signo;
Signo:=-Signo;
End;
writeln('El cálculo para ',N,' términos es: ',Suma);
End.
11) Una fábrica de envases plásticos desea evaluar el funcionamiento de sus máquinas. De cada una se
conoce su número de identificación, la cantidad total de envases que produce y la cantidad de envases
con fallas. Ingresar dicha información (puede ser desde un archivo) para calcular e indicar:
a) para cada máquina, el número de identificación y el porcentaje de envases desechados respecto al
total de envases que ha producido. Junto al cartel DEFICIENTE, NORMAL u OPTIMO según el
porcentaje de envases desechados sea: mayor al 20%, menor o igual al 20% o 0%
respectivamente.
b) producción promedio de máquinas con calificación NORMAL.
c) cantidad de máquinas en cada una de las calificaciones.
12) Una prueba consiste en lanzar una moneda hasta que aparezca cara. El número promedio de
lanzamientos en una prueba es el límite para n tendiendo a infinito de:
n
i
2
i 1
i
Encontrar un valor aproximado para este límite (valor de la sumatoria).
Desarrollar dos programas diferentes, teniendo en cuenta las siguientes condiciones:
a) n es dato.
b) El último término de la sumatoria debe ser el menor de los términos que se mantiene mayor que
un valor dado.
13) Desarrollar un programa que evalúe polinomios de una variable real de la forma:
𝑃(𝑥) = 𝑎 𝑥 + 𝑎 𝑥 + ⋯ … … . . +𝑎 𝑥 + 𝑎 𝑥 + 𝑎
Se deberán ingresar el valor a asignar a la variable 𝑥, y a continuación los coeficientes del polinomio,
en forma ordenada, desde el correspondiente al término de mayor grado hasta el término
independiente. Considerar que el grado 𝑛 del polinomio no se conoce de antemano, y que los
coeficientes están el rango -1000..1000
(Pista: investigar sobre el algoritmo de Horner)
14) Las señales senoidales son ampliamente utilizadas para representar ondas sonoras. Por ejemplo, un
tono (que es una señal de una única frecuencia) puede ser representado mediante la siguiente función:
𝑦(𝑡) = 𝐴 ∗ 𝑠𝑒𝑛(2𝜋𝑓𝑡 + 𝜑 )
(−1)
𝑠𝑒𝑛(𝑥) ≅ 𝑥
(2𝑘 + 1)!
15) Una pelota de golf cae desde un edificio de N pisos, de 3 metros de altura cada uno. Utilizando la
fórmula de caída libre
a) Escribir un programa que informe la distancia total recorrida por la pelota después de 0.1
segundos desde que comienza a caer, después de 0.2, de 0.3…y hasta después de 1 segundo.
Indicar además, la distancia recorrida en cada intervalo. (N se ingresa por teclado siendo N>6)
b) Modificar el programa anterior para que siga mostrando las distancias recorridas por la pelota
hasta que ésta alcance el suelo, y para mejorar la precisión de los resultados, disminuir el
intervalo de tiempo a 0.01 segundos cuando la pelota está cerca de alcanzar el suelo.
16) Nicómaco de Gerasa fue un filósofo y matemático que vivió en Palestina entre los siglos I y II DC.
Escribió Arithmetike eisagoge (Introducción a la aritmética) que fue el primer tratado en el que la
aritmética se consideraba de forma independiente a la geometría. Este libro se utilizó durante miles de
años como texto básico de aritmética y, contrariamente a Euclides, Nicómaco no ofrecía
demostraciones abstractas de sus teoremas, sino que se limitaba a enunciarlos e ilustrarlos con ayuda
de ejemplos numéricos. La siguiente propiedad fue descubierta por Nicómaco:
1 = 13
3+5=8 = 23
7 + 9 +11 = 27 = 33
13 +15 + 17 + 19 = 64 = 43
Desarrollar un programa que escriba los n primeros cubos utilizando esta propiedad. El valor de
n se ingresa por teclado.
17) Un cuerpo de masa M apoyado sobre una superficie plana sin roce, experimenta un conjunto de N
fuerzas, cuyos módulos y ángulos respecto de la horizontal son ingresados por el usuario.
18) En una fábrica de heladeras se realiza un control de calidad, sobre una cantidad no conocida de
unidades, identificadas cada una con un código. Cada unidad es sometida a N pruebas de calidad (N
es igual para todas las unidades). El resultado de cada prueba puede ser excelente, bueno, regular o
malo. Escribir un programa Pascal para:
a) Ingresar para cada producto su código ('zzz' indica fin de datos) y a continuación los N resultados
de los controles efectuados, codificados como [E]xcelente, [B]ueno, [R]egular, [M]alo.
b) Determinar y escribir si el producto es “aceptado” o “rechazado”. Son aceptados los productos
que cumplen con lo siguiente: No tienen ninguna prueba con calificación mala (M) y tienen como
mínimo un 50% entre excelentes y buenos (E o B).
c) Escribir el porcentaje de productos “rechazados”.
{EJERCICIO RESUELTO AL FINAL DE LA GUIA}
20) Una empresa tecnológica solicita contraseña para el acceso a sus sistemas. La misma debe estar
conformada como mínimo por 8 caracteres, incluyendo obligatoriamente, al menos una letra y
exactamente cuatro dígitos. No están permitidos otro tipo de caracteres. Para finalizar el ingreso de
cada contraseña se usa un * que no se considera como parte de ella).
Se pide desarrollar un programa Pascal, correctamente indentado y eficiente, que ingrese (carácter a
carácter) N contraseñas de longitud variable, evalúe e indique la validez de cada una, y al final
informe la longitud de la contraseña inválida más larga (puede no existir).
Ejemplo N=7
Si las contraseñas ingresadas fueran:
eR68G12a* válida
91jY643ebjp* inválida
eRty74kLh* inválida
24fG92* inválida
aj85gt32* válida
eL8j$8215* inválida
dGb9357jKoup2* válida
La salida del programa sería: La longitud de la contraseña inválida más larga es de 11
caracteres
*************************************************************************************
begin
write('Resultado de la prueba ',i,': ');
readln(resultado);
case upcase(resultado) of
'E','B':contEB:=contEB+1;
'M': Malo:=TRUE;
end;
end;
if Not Malo and ((contEB)>=(0.5*N)) then
writeln('ACEPTADO')
else
begin
writeln('RECHAZADO');
contRechazado:=contRechazado+1;
end;
write('Codigo de producto / zzz para finalizar: ');
readln(codigo);
end;
if contProd > 0 then
writeln('Productos rechazados: ',((contRechazado/contProd)*100):5:2,'%';
END.