Está en la página 1de 8

Ejercicios Capítulo 4: Estructuras de Control: Repetición

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.

c) Datos del archivo 5, 2, 10, -6.

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.

2) Considerar el siguiente programa:


PROGRAM Cambio;
VAR
num:INTEGER;
BEGIN
Write('Ingresa un número entero: ');
Readln(num);
WHILE num<20 DO
Begin
num:=num+1;
Write(num,' ');
End;
END.
a) Reescribir el programa anterior cambiando While por Repeat de manera que ambos produzcan las
mismas salidas. ¿Cuál de las dos estructuras de repetición resulta más conveniente?
b) Ejecutar ambos programas, probándolos con los siguientes Lotes de Prueba: 17; 21

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:

Planeta Distancia en millones de kilómetros


Mercurio 58
Venus 108
La Tierra 147
Marte 228
Júpiter 778
Saturno 1429
Urano 2871
Neptuno 4504

Computación – Departamento de Informática – Facultad de Ingeniería – UNMDP 2


Ejercicios Capítulo 4: Estructuras de Control: Repetición

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)

Desarrollar un programa que permita ingresar la información correspondiente a una cantidad


desconocida de vehículos, utilizando como condición de fin de datos la patente “xxxxxxx”. Además,
el programa debe calcular y mostrar en pantalla la siguiente información:
a) La cantidad de vehículos que superaron la velocidad máxima permitida.
b) La velocidad promedio, mínima y máxima de los vehículos que atravesaron el control de
velocidad.
c) La cantidad de vehículos que circularon dentro de una franja horaria, determinada por dos horas
(hhmmss) de un mismo día, definidas por el usuario.

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?

10) Realizar la prueba de escritorio del siguiente programa:

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.

Computación – Departamento de Informática – Facultad de Ingeniería – UNMDP 4


Ejercicios Capítulo 4: Estructuras de Control: Repetición

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𝜋𝑓𝑡 + 𝜑 )

Donde A es la amplitud de la señal, f la frecuencia, y 0 la fase inicial.


En algunas aplicaciones, para reducir el costo computacional que requiere este tipo de cálculos, se
suele utilizar la aproximación de Taylor:

(−1)
𝑠𝑒𝑛(𝑥) ≅ 𝑥
(2𝑘 + 1)!

Donde N representa la cantidad de términos de la serie, y determina la precisión de la aproximación.


Utilizando esta aproximación, escribir un programa que permita ingresar la frecuencia, amplitud y
fase inicial de la señal, y muestre los valores de la señal para 20 valores de t entre 0 y 1 segundos
Nota: Probar el programa para distintos valores de N (cantidad de términos de la aproximación de
Taylor). Verificar los resultados con la función sin(x) de Pascal.

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.

Computación – Departamento de Informática – Facultad de Ingeniería – UNMDP 5


Capítulo 4: Estructura de control: repetición

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:

El 1 (primer número impar) es el primer cubo;


sumando los dos siguientes impares, se obtiene el segundo cubo;
sumando los tres siguientes, se obtiene el tercer cubo, etc.

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.

Realizar un programa que permita ingresar los datos e informe:


a) La magnitud y fase de la resultante de las fuerzas externas
aplicadas
b) La magnitud y fase de la fuerza NETA resultante, es decir,
considerando también el propio peso del cuerpo.
c) La dirección del movimiento en caso de haberlo.
d) La aceleración que sufre el cuerpo.

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}

19) Considérese la función:


3𝑛 + 1 𝑠𝑖 𝑛 𝑒𝑠 𝑖𝑚𝑝𝑎𝑟
𝑃(𝑛) = 𝑛  
𝑠𝑖 𝑛 𝑒𝑠 𝑝𝑎𝑟
2

y sea N un número natural arbitrario. La sucesión numérica

Computación – Departamento de Informática – Facultad de Ingeniería – UNMDP 6


Ejercicios Capítulo 4: Estructuras de Control: Repetición

𝑁, 𝑃(𝑁), 𝑃 𝑃(𝑁) , 𝑃 𝑃 𝑃(𝑁) , … , 𝑃(𝑃 … (𝑃(𝑁). . ) , …


está formada por los llamados números pedrisco generados por N. Por ejemplo, para N=5, su
sucesión de números pedrisco es {5, 16, 8, 4, 2, 1, 4, 2, 1,…} donde, a partir del 6to término, los
valores 4, 2 y 1 se repiten indefinidamente.
Escribir un programa que, dado un número natural N, escriba su sucesión de números pedrisco y
cuente las iteraciones necesarias para llegar a 1 (y entrar en el bucle 1, 4, 2, 1,...). Aplicarlo a todos
los enteros menores que 30. ¿Se observa algo especial para N=27?

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

Resolución del ejercicio 18


program heladeras;
var
codigo:string[3];
i,n:byte;
resultado:char;
Malo:boolean;
contEB,contProd,contRechazado:byte;
BEGIN
contProd:=0;
contRechazado:=0;
write('Cantidad de pruebas: ');
readln(n);
write('Codigo de producto / zzz para finalizar: ');
readln(codigo);
while upcase(codigo) <> 'ZZZ' do
begin
contProd:=contProd+1;
contEB:=0;
Malo:=FALSE;
for i:=1 to n do
Computación – Departamento de Informática – Facultad de Ingeniería – UNMDP 7
Capítulo 4: Estructura de control: repetición

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.

Computación – Departamento de Informática – Facultad de Ingeniería – UNMDP 8

También podría gustarte