Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Turbo Pascal Repetitivas
Turbo Pascal Repetitivas
ESTRUCTURAS REPETITIVAS
Se llaman problemas repetitivos o cclicos a aquellos en cuya solucin es necesario
utilizar un mismo conjunto de acciones que se puedan ejecutar una cantidad
especfica de veces. Esta cantidad puede ser fija (previamente determinada por el
programador) o puede ser variable (estar en funcin de algn dato dentro del
programa).
En PASCAL existen tres estructuras de repeticin que son las estructuras: FOR - DO,
REPEAT - UNTIL, Y WHILE - DO.
La primera de ellas, la estructura FOR - DO, tiene la siguiente sintaxis:
FOR contador := principio TO final DO STEP incremento
BEGIN
instruccin_1;
instruccin_2;
END;
donde contador es una variable que puede almacenar un dato ordinal, principio es
el valor que se le asigna a esa variable antes de realizar la accin, final es el valor
mximo que puede alcanzar la variable contador antes de finalizar la accin. La
variable incremento es el valor que se va a suma a la variable contador cada vez
que se entra al ciclo. Si se va a ejecutar una sola instruccin dentro de la estructura, se
puede omitir las instrucciones BEGIN y END; si el contador es entero y se desea
incrementar de uno en uno, entonces se puede omitir la sentencia STEP y la variable
de incremento.
Existe tambin la opcin equivalente
FOR identificador := principio DOWNTO final DO
BEGIN
instruccin _1;
instruccin _2;
END;
ESTRUCTURAS REPETITIVAS
en la que el valor del identificador se decrementa en uno cada vez que se realiza la
accin.
La limitacin bsica de la estructura For-Do es que la accin que implcitamente se
realiza cada vez es simplemente el aumento o decremento de una variable ordinal. No
obstante, hay que tener presente que las variables ordinales no son solamente los
Integer.
La variable que se utiliza como contador en la estructura For-Do puede modificarse
tambin en la accin que se repite, pero hay que ser extremadamente cuidadoso
porque de lo contrario se puede generar un bucle infinito.
Una estructura muy similar a la FOR - DO pero ms verstil es la REPEAT UNTIL. Su sintaxis es:
REPEAT
instruccin_1
instruccin_2;
UNTIL (condicin)
En esta estructura se especifica que se repita el conjunto de acciones situado entre el
REPEAT y el UNTIL mientras que no sea verdadero el valor de la condicin. Las
acciones se realizan al menos una vez porque la verificacin de la condicin se hace
despus que las acciones.
Sin embargo, en la estructura WHILE - DO se realiza la comprobacin de la
condicin que ha de finalizar la repeticin antes de ejecutarse la accin.
Su sintaxis es:
WHILE (condicin) DO
BEGIN
instruccin_1
instruccin_2;
END;
donde la condicin es una expresin cuyo resultado es un dato Boolean, y las
instrucciones se repetirn mientras la condicin se evale verdadera.
Cuando se ha de programar un procedimiento repetitivo, la eleccin de una de las tres
estructuras se har siempre considerando la claridad y facilidad de programacin.
ESTRUCTURAS REPETITIVAS
ESTRUCTURAS REPETITIVAS
comenzar el bucle y debe cambiar su estado (Valor) dentro del cuerpo del
bucle para preparar la siguiente iteracin.
ESTRUCTURAS REPETITIVAS
Positivo := false;
while not Positivo do
begin
Write ( Introduzca un entero mayor que cero );
Readln ( N );
if N > 0
then Positivo := true
end
Ejercicios prcticos de tipo repetitivo.
1.Escribir un programa en Pascal que calcula el equivalente en grados
Fahrenheit o Celsius de las siguientes temperaturas.
Temperatura 1 = 32 Fahrenheit
Temperatura 2 = 10 Celsius
{Regla de 3: Celsius / 5 = (Fahrenheit 32) 9}
PROGRAM EJER1;
USES
CRT;
VAR
Fahrenheit, Celsius:REAL;
T1C,T2F:REAL;
respuesta:CHAR;
BEGIN
CLRSCR;
REPEAT
BEGIN
WRITE ('DESEA PASARLO A FAHRENHEIT O CELSIUS? F/C: ');
READLN (respuesta); WRITELN ('');
END;
UNTIL (respuesta='C') OR (respuesta='F') OR (respuesta='c') OR
(respuesta='f');
IF UPCASE(respuesta)='F' THEN
BEGIN
WRITELN ('Introduzca los grados para pasar a Fahrenheit: ');
WRITE ('Celsius: '); READLN (Celsius);
Fahrenheit:= ((9 * Celsius) / 5) + 32;
WRITE (Fahrenheit:5:2,' grados Fahrenheit.');
WRITELN (' ');
END
ESTRUCTURAS REPETITIVAS
ESTRUCTURAS REPETITIVAS
UNTIL x=10;
READKEY;
END.
4.Escribir un programa en Pascal que realice un bucle con FOR y muestre en
pantalla del 1 al 10.
PROGRAM EJER4;
USES
CRT;
VAR
x:INTEGER;
BEGIN
CLRSCR;
FOR x:=0 TO 10 DO
WRITELN(x);
READKEY;
END.
5.Escribir un programa en Pascal que visualice en pantalla los nmeros pares
entre 1 y 25.
PROGRAM EJER5;
USES
CRT;
VAR
num:INTEGER;
BEGIN
CLRSCR;
num:=2;
REPEAT
WRITELN (num);
num:= num + 2;
UNTIL num= 26;
READKEY;
END.
PROGRAM EJER5B;
USES
CRT;
ESTRUCTURAS REPETITIVAS
VAR
sem:INTEGER;
BEGIN
CLRSCR;
sem:=1;
WHILE sem <= 25 DO
BEGIN
IF sem mod 2=0 THEN
WRITELN(sem);
sem:=sem + 1;
END;
READKEY;
END.
6.Escribir un programa en Pascal que visualice en pantalla los nmeros
mltiplos de 5 comprendidos entre 1 y 100.
PROGRAM EJER6;
USES
CRT;
VAR
num:INTEGER;
BEGIN
CLRSCR;
num:= 5;
WHILE num <= 100 DO
BEGIN
WRITELN (num);
num:= num + 5;
END;
READKEY;
END.
PROGRAM EJER6B;
USES
CRT;
VAR
sem:INTEGER;
BEGIN
CLRSCR;
FOR sem:= 1 TO 100 DO
BEGIN
IF sem mod 5=0 THEN
ESTRUCTURAS REPETITIVAS
WRITELN(sem);
END;
READKEY;
END.
7.y 10.
PROGRAM EJER7;
USES
CRT;
VAR
num, x:INTEGER;
BEGIN
CLRSCR;
num:=1;
x:=1;
WHILE num <= 10 DO
BEGIN
WRITELN (x);
num:= num + 1;
x:= x + num;
END;
READKEY;
END.
8.Escribir un programa en Pascal que genere la tabla de multiplicar de un
nmero introducido por el teclado.
PROGRAM EJER8;
USES
CRT;
VAR
tabla, x, num:INTEGER;
BEGIN
CLRSCR;
WRITE ('Introduzca un numero para hacer su tabla de multiplicar: ');
READLN (num);
WRITELN ('');
REPEAT
WRITELN (tabla);
x:= x + 1;
tabla:= num * x;
UNTIL x=11;
ESTRUCTURAS REPETITIVAS
10
READKEY;
END.
PROGRAM EJER8B;
USES
CRT;
VAR
num,sem:INTEGER;
BEGIN
CLRSCR;
WRITE('Introduzca un numero entero: '); READLN(num);
FOR sem:=1 TO 10 DO
BEGIN
WRITE(num); WRITE(' * '); WRITE(sem); WRITE(' = ');
WRITELN(num*sem);
END;
READKEY;
END.
9.Escribir un programa en Pascal que realice la pregunta Desea continuar
S/N? y que no deje de hacerla hasta que el usuario teclee N.
PROGRAM EJER9;
USES
CRT;
VAR
respuesta:CHAR;
BEGIN
CLRSCR;
REPEAT
WRITELN ('DESEA CONTINUAR: S/N '); READLN (respuesta);
UNTIL respuesta='N';
{Pascal distingue entre N y n}
READKEY;
END.
PROGRAM EJER9B;
USES
CRT;
VAR
respuesta:STRING;
BEGIN
CLRSCR;
ESTRUCTURAS REPETITIVAS
11
REPEAT
WRITELN ('DESEA CONTINUAR: SI/NO '); READLN (respuesta);
UNTIL respuesta='NO';
READKEY;
END.
PROGRAM EJER9C;
USES
CRT;
VAR
resp:CHAR;
BEGIN
CLRSCR;
resp:='S';
WHILE UPCASE(resp)='S' DO
BEGIN
WRITE('Desea continuar? '); READLN(resp);
END;
READKEY;
END.
10.- Escribir un programa en Pascal que calcule cuantos aos tarda en duplicarse
un capital depositado al 5% de inters anual
PROGRAM EJER10;
USES
CRT;
VAR
tiempo:REAL;
cap_ini,cap_fin:REAL;
CONST
interes = 0.05;
BEGIN
CLRSCR;
WRITE ('Intruduzca el capital para calcular cuanto tardara ');
WRITE ('en duplicarse, con un interes del 5%: ');
READLN (cap_ini);
WRITELN ('');
IF cap_ini < 0 THEN
BEGIN
WRITE ('No se puede incluir un capital negativo');
EXIT;
END;
ESTRUCTURAS REPETITIVAS
12
tiempo:=0;
cap_fin:= cap_ini;
REPEAT
cap_fin:=cap_fin + (cap_fin * interes);
tiempo:= tiempo + 1;
UNTIL cap_fin > (cap_ini * 2);
WRITELN ('Tardara',tiempo:3:0,' aos en duplicarse');
WRITELN ('Capital final: ',cap_fin:5:2,' pts');
READKEY;
END.
PROGRAM EJER10B;
USES
CRT;
VAR
cap_ini,cap_fin:REAL;
num_year:INTEGER;
CONST
INTERES=0.05;
BEGIN
CLRSCR;
num_year:=0;
WRITE('Capital inicial -----: '); READLN(cap_ini);
cap_fin:=cap_ini;
WHILE cap_fin < (cap_ini*2) DO
BEGIN
cap_fin:=cap_fin+(cap_fin*interes);
num_year:=num_year + 1;
END;
WRITE('Capital inicial -----: '); WRITELN(cap_ini:5:2);
WRITE('Capital final -------: '); WRITELN(cap_fin:5:2);
WRITE('Capital duplicado en '); WRITE(num_year); WRITE(' aos');
READKEY;
END.
11.- Escribir un programa que calcule la suma de los nmeros hasta un nmero
dado (introducido por el usuario).
PROGRAM EJER11;
USES
CRT;
VAR
x, y, num:INTEGER;
ESTRUCTURAS REPETITIVAS
13
BEGIN
CLRSCR;
WRITE ('Este programa calcula la suma de los numeros hasta uno ');
WRITE ('introducido por el usuario: ');
READLN (num);
WRITELN ('');
x:=0;
WHILE num >= 0 DO
BEGIN
WRITELN (x);
x:= x + num;
num:=num - 1;
END;
READKEY;
END.
PROGRAM EJER11B;
USES
CRT;
VAR
i,num:INTEGER;
suma:LONGINT;
BEGIN
CLRSCR;
WRITE('Introduzca un numero -> '); READLN(num);
FOR i:=0 TO num DO
suma:=suma+ i;
WRITE('Suma '); WRITE('0-'); WRITE(num); WRITE('---->');
WRITE(suma);
READKEY;
END.
12.- Escribir un programa que pida un nmero y si el que se introduce por el
teclado es menor de 100 que vuelva a solicitarlo.
PROGRAM EJER12;
USES
CRT;
VAR
num:INTEGER;
BEGIN
{Este programa no finaliza hasta que se escribe un numero mayor a 100}
CLRSCR;
REPEAT
ESTRUCTURAS REPETITIVAS
14
ESTRUCTURAS REPETITIVAS
15
USES
CRT;
VAR
temp,num,fac:LONGINT;
BEGIN
CLRSCR;
fac:=1;
temp:=num;
WRITE('Introduzca un numero -> '); READLN(num);
temp:=num;
WHILE num>=1 DO
BEGIN
fac:=fac*num;
num:=num-1;
END;
WRITE('El factorial de '); WRITE(temp); WRITE(' es '); WRITE(fac);
READKEY;
END.
14.- Escribir un programa en Pascal que calcule la media de 5 nmeros
introducidos por el teclado.
PROGRAM EJER14;
USES
CRT;
VAR
i:INTEGER;
num,suma:REAL;
BEGIN
CLRSCR;
i:=0;
REPEAT
WRITE('Introduzca un numero: '); READLN(num);
suma:=suma+num;
i:=i+1;
UNTIL i=5;
WRITE('La media es: '); WRITELN(suma/i:5:2);
READKEY;
END.
15.- Escribir un programa en Pascal que detecte si un nmero es primo o no. Un
nmero es primo si slo es divisible por s mismo y por la unidad.
ESTRUCTURAS REPETITIVAS
16
ESTRUCTURAS REPETITIVAS
17
PROBLEMAS PROPUESTOS
18
EJERCICIOS PROPUESTOS.
1.- Leer 100 nmeros enteros y posteriormente calcule y muestre lo siguiente:
Cantidad de nmeros positivos.
Promedio de los nmeros pares.
Mayor numero positivo.
Menor numero negativo.
2.- Se tiene la siguiente informacin de los empleados de una compaa: # de
empleados, nombre del empleado, salario bsico por hora, horas trabajadas,
deducciones. Se desea calcular e imprimir al final, el total de salarios pagados a todos
los empleados y el promedio salarial por empleado.
3.- Una persona guarda en el banco 120.000 Bs. Si gana el 45% de inters anual.
Calcule cunto tendr a los 5 aos.
4.- Utilizando ciclos anidados generar las siguientes parejas de enteros
0
1
1
1
2
2
3
2
4
3
5
3
6
4
7
4
8
5
9
5
PROBLEMAS PROPUESTOS
19