You are on page 1of 13

1

UNIVERSIDAD NACIONAL EXPERIMENTAL POLITCNICA


DE LA FUERZA ARMADA BOLIVARIANA

Ciclo Bsico de Ingeniera Diurno


Asignatura: Programacin
Docentes: MSc. Javier A. Arellano G. Lcdo. Jos Wilmer Jaimes J.
Estructuras de Control Repetitivo en Turbo Pascal
Las estructuras de control repetitivo son aquellas en las que una sentencia o grupo de sentencias se repiten varias
veces, estas estructuras son conocidas como ciclos, bucles, lazos o iteraciones; de acuerdo a Joyanes (1995) Pascal
proporciona tres estructuras o sentencias de control para especificar la repeticin: while, repeat y for. Asociadas a las
estructuras de repeticin se encuentran a menudo algunas variables auxiliares. Como siempre se utilizan de la misma
manera, se denominan con nombre propio (contador, acumulador, centinela, etc.), sin embargo es importante aclarar
que son variables comunes, aunque se usan de un modo especial.
Contador
Un contador es una variable, fundamentalmente de tipo entero, cuyo valor se incrementa o decrementa cada vez que
ocurre un evento (generalmente cada repeticin de un bucle). Es habitual llamar a esta variable cont (de contador).
Se debe inicializar el contador antes de utilizarlo.
Operaciones sobre Contadores
Inicializacin
contador = valor_inicial;
Incremento
contador = contador + constante;
Decremento
contador = contador - constante;
Ejemplo:
cont = 0
cont = cont +1
cont = 10
cont = 10 - 1
Acumuladores
Son variables cuyo valor se modifica, en una cantidad variable, cada vez que ocurre un evento. La modificacin puede
ser incrementar o decrementar el valor. Es habitual llamar a esta variable acum (de acumulador). Al igual que los
contadores, los acumuladores deben ser inicializados antes de utilizarse.
Inicializacin
acumulador = valor_inicial;
Operaciones
acumulador = acumulador + valor;
acumulador = acumulador valor;
acumulador = acumulador * valor;
acumulador = acumulador / valor;
Ejemplo
acum = 0
acum = acum + sueldo
acum = acum cantidad

2
Centinelas o banderas
Son variables que pueden tomar dos valores (cierto, falso). Segn la expresin lgica evaluada, uno de estos valores
permite la ejecucin repetida de un bloque de instrucciones.
Adems de la inicializacin respectiva, existe otro punto crtico de los centinelas y es cuando se cambia su valor.
Ciclos o Bucles
Los ciclos o bucles son estructuras que de acuerdo a Joyanes (2002) repiten una secuencia de instrucciones un nmero
determinado de veces estas estructuras son empleadas cuando nos interesa que cierto grupo de instrucciones se repita;
a cada una de las repeticiones o ejecuciones de ese grupo de sentencias se denomina iteracin.
La manera como se controla en nmero de repeticiones, nos permite definir los tipos:
FOR (Reipta Para)
WHILE (Repita Mientras)
REPEAT - UNTIL (Repita Hasta)
CICLO REPITA PARA FOR
Se emplea cuando conocemos a priori (por anticipado) en nmero de veces que se va a repetir (iterar) las instrucciones
asociadas a tal estructura, de acuerdo a Joyanes (2002) ella ejecuta las acciones del cuerpo del bucle un nmero
especificado de veces y de modo automtico controla el nmero de iteraciones o pasos a travs del cuerpo del bucle
generalmente depende de una variable que realiza la actividad de conteo. Una vez finalizado el ciclo se pasa a la
siguiente sentencia del programa. .

Donde:
V es una variable de control o conteo que
permite definir la parada.
Vi: es la asignacin con la que comenzar el
conteo
Vf: es el valor final o de parada.
Inc: es el valor en que se va a incrementar la
variable de control (V)
Sentencias: una ms instrucciones
(sentencias) asociadas al ciclo.

Existen dos formas de utilizar esta estructura de control repetitivo


a) Con INCREMENTO DEL CONTADOR (Vi < Vf):
Turbo Pascal
FOR V:= Vi TO Vf DO
Sentencia;

Pseudocdigo
Para V:= Vi a Vf hacer
Sentencia;

FOR V:= Vi TO Vf DO
BEGIN
Sentencia1;
Sentencia2;
:
SentenciaN

Para V:= Vi a Vf hacer


Sentencia 1;
Sentencia 2;
:
Sentencia N;

Cuando Vi es menor que Vf el


valor de V se incrementa al
valor
sucesivo
de
la
progresin (generalmente de
uno en uno) desde el valor de
Vi hasta el valor de Vf. Por
cada valor que V toma, el
cuerpo del bucle se ejecuta
una vez, es decir se realiza

3
una iteracin.

END;
b) Con DECREMENTO DEL CONTADOR (Vi > Vf):
Turbo Pascal

Pseudocdigo

FOR V:= Vi DOWNTO Vf DO


Sentencia;

Para V:= Vi a Vf, - 1 hacer


Sentencia;

FOR V:= Vi DOWNTO Vf DO


BEGIN
Sentencia1;
Sentencia2;
:
SentenciaN
END;

Para V:= Vi a Vf - 1 hacer


Sentencia 1;
Sentencia 2;
:
Sentencia N;

Cuando Vi es mayor que Vf el


valor de V se decrementa al valor
subsiguiente de la progresin
(generalmente de uno en uno)
desde el valor de Vi hasta el valor
de Vf. Por cada valor que V toma,
el cuerpo del bucle se ejecuta una
vez, es decir se realiza una
iteracin.

Para ambas formas:


V debe ser de tipo ordinal (entero, carcter, lgico u otro tipo ordinal) o subrango.
V, Vi, Vf deben ser todas del mismo tipo, pero el tipo real no est permitido.
Vi, Vf pueden ser expresiones o constantes.
No se debe modificar el valor de V, Vi, Vf dentro del cuerpo del bucle.

El valor de V queda indefinido cuando se termina el bucle.

Ejercicios ciclo Repita Para For


Realice un programa en Turbo Pascal que muestre por pantalla la tabla de multiplicar (1 al 10) de un nmero dado
program TABLAS;
uses crt;
Var
i, num, resul: integer;
begin
writeln ('PROGRAMA PARA CALCULAR LAS TABLAS DE MULTIPLICAR');
write ('Indique nmero: ');
readln (num);
for i:= 1 to 10 do
begin
resul:= num * i;
writeln (num:2, ' por: ', i:2, ' es: ', resul:3);
end
end.

Ejercicio 2
Desarrolle un programa en Turbo Pascal que calcule e imprima el promedio de notas, la cantidad de estudiantes que
aprobaron y la cantidad de estudiantes que reprobaron la asignatura Programacin en una seccin con una cantidad
dada de estudiantes, la escala de notas es de 1 a 20 puntos
program notas;
uses crt;
Var
cant, cant_apro, cant_repr, i: integer;
nota, acum, prom: real;
begin
write ('indique cantidad de estudiantes');
readln (cant);
acum := 0;
cant_apro:= 0;
cant_repr:= 0;
for i := 1 to cant do
begin
write ('indique nota del estudiante N ' , i );
readln (nota);
acum := acum + nota;
if (nota >= 10) then
cant_apro:= cant_apro + 1
else
cant_repr:= cant_repr + 1;
end;
prom := acum/cant;
writeln ('Asignatura Programacin, Promedio de la Seccin: ', prom:2:2, ' puntos');
writeln ('Cantidad de Estudiantes Aprobados:', cant_apro);
writeln ('Cantidad de Estudiantes Reprobados:', cant_repr);
writeln ('Cantidad de Estudiantes inscritos em la Seccin:', cant);
end.

5
CICLO WHILE (MIENTRAS)
La estructura repetitiva While (mientras) se utiliza cuando el nmero de iteraciones no se conoce por anticipado, el
ciclo while ejecuta un bloque de acciones mientras que una condicin dada se cumpla, es decir, cuando la condicin
evala a verdadero. Cuando la condicin se haga falsa el programa continuar en la sentencia siguiente al ciclo.
La forma general del ciclo mientras es la siguiente:

ENTRADA

FALSO
CONDICIN

VERDADERO
SENTENCIA (S)

SALIDA

Reglas de Funcionamiento (Joyanes 1995 pg. 147).


1. La condicin (expresin lgica) se evala antes y despus de cada ejecucin del ciclo. Si la condicin es
verdadera se ejecuta el bucle, y si es falsa el control pasa a la sentencia siguiente al ciclo
2. Si la condicin se evala falsa cuando se ejecuta el bucle por primera vez, el cuerpo del ciclo no se ejecutar
nunca, es decir el bucle se ha ejecutado cero veces.
3. Mientras la condicin sea verdadera el bucle se ejecutar; esto significa que el ciclo se ejecutar
indefinidamente a menos que algo al interior del ciclo modifique la condicin haciendo que su valor cambie
a falso. Si esto no sucede el ciclo no terminar nunca, esto se conoce como ciclo infinito.

6
Turbo Pascal
WHILE condicin lgica DO
Sentencia;

Pseudocdigo
mientras (condicin) hacer
<bloque de instrucciones>
fin_mientras

WHILE condicin lgica DO


BEGIN
Sentencia 1;
Sentencia 2;
:
Sentencia N
END;

Ejercicios Ciclo While


Dado un nmero natural n desarrolle un algoritmo para calcular el nmero factorial (n!) de dicho nmero; utilice un
Ciclo Mientras
n! = 1 * 2 * 3 * 4 * . * (n 1) * n
n = 0 n! = 1
program factorial;
uses crt;
Var
n, fact, i: integer;
begin
write ('Ingrese el nmero: ');
readln (n);
fact:=1;
if (n >= 1) then
begin
i:=1;
while (i<=n) do
begin
fact:=fact*i;
i:=i+1
end;
Writeln ('El Numero Factorial de: ', n , ' es ' ,fact)
end
else
if (n = 0) then
begin
fact:=1;
writeln ('El Numero Factorial de: ', n , ' es ' ,fact);
end
else
writeln ('numero no valido');
end.

7
Desarrolle un algoritmo que teniendo como datos de entrada las medidas (largo, alto y ancho (espesor)) de varias
estructuras, permita determinar (mostrar por pantalla) la cantidad de M 3 de concreto necesarios para ser vaciadas, y la
cantidad de materiales necesarios para elaborar una mezcla de resistencia RCC 180 kgs/cm 2, sabiendo que para cada
M3 de mezcla se necesita un (01) saco de cemento, veinte palas de piedra picada, 18 palas de arena y dieciocho litros
de agua.
Iprogram rcc;
uses crt;
var
l, h, e, vol, acu_vol, cant_cem, cant_pp, cant_pa, cant_ag: real;
cont: integer;
resp: char;
begin
resp:= 's';
cont:= 0;
acu_vol:=0;
while (resp = 's') or (resp = 's') do
begin
cont:= cont + 1;
write ('indique largo de la estructura N: ', cont, ' ');
readln (l);
write ('indique altura de la estructura N: ', cont, ' ');
readln (h);
write ('indique ancho (espesor) de la estructura N: ', cont, ' ');
readln (e);
vol:= l*h*e;
acu_vol:= acu_vol + vol;
write ('desea procesar otra estructura pulse s para continuar o cualquier otra tecla para salir');
readln (resp);
end;
cant_cem:= acu_vol;
cant_pp:= acu_vol * 20;
cant_pa:= acu_vol * 18;
cant_ag:= acu_vol * 18;
writeln (' Total de estructuras a vaciar: ', cont:3);
writeln ('total de metros cbicos vaciar: ', acu_vol:3:2);
writeln ('Cantidad de Sacos de Cemento que se necesitan: ', cant_cem:3:2);
writeln ('Cantidad de Palas de Piedra Picada que se necesitan : ', cant_pp:3:2);
writeln ('Cantidad de Palas de Arena que se necesitan : ', cant_pa:3:2);
writeln ('Cantidad de Litros de Agua que se necesitan : ', cant_ag:3:2);
end.

8
CICLO REPEAT UNTIL (REPITA HASTA)
La estructura repetitiva Repeat Until (Repita Hasta), especifica un ciclo condicional que se repite hasta que la
condicin se hace verdadero. Este ciclo es similar al ciclo While, la diferencia est en que el bloque de sentencias se
ejecuta nuevamente si la condicin es evaluada como falso y no se ejecuta ms si la condicin es evaluada como
verdadero, es importante recalcar que el bloque de sentencias se ejecuta al menos una vez.

Despus de cada iteracin el cuerpo del ciclo evala la condicin. Si la condicin se cumple (verdadero) el ciclo se
termina y se sale de l, ejecutndose la siguiente sentencia. Si la condicin no se cumple (falso) el ciclo se repite.
Reglas de Funcionamiento de acuerdo a Joyanes (1995)

La condicin (expresin lgica) se evala al final del ciclo despus de ejecutarse todas las sentencias
incluidas en l.
Si la expresin lgica es falsa, se vuelve a repetir el bucle y se ejecutan todas las sentencias incluidas en l.
Si la expresin lgica es verdadera se sale del bucle y se ejecuta la sentencia posterior al Hasta (Until).
La sintaxis en Turbo Pascal no requiere Begin y End.

Sintaxis
Turbo Pascal

Pseudocdigo

REPEAT

Repita

Sentencia 1;
Sentencia 2;
:
Sentencia N
UNTIL (condicin lgica)

Sentencia 1;
Sentencia 2;
:
Sentencia N
Hasta (condicin lgica)

9
Comparacin entre los ciclos Repita Mientras y Repita Hasta de acuerdo a Joyanes (1995)
Repita Mientras

Repita Hasta

La Condicin (expresin lgica) se verifica


antes de que se ejecute el cuerpo del ciclo.

La Condicin (expresin lgica) se verifica


despus de que se ejecuta el cuerpo del ciclo.

Como resultado de (1), el cuerpo del ciclo


puede no ser ejecutado si la condicin es
falsa).

Como resultado de (1), el cuerpo del ciclo se


ejecutar al menos una vez (sin importar el valor
de la condicin).

Como resultado de (1), las variables de la


condicin deben haber sido inicializadas
antes de alcanzar la sentencia Mientras
(While) de modo que la condicin pueda
ser verificada

Como resultado de (1), las variables de la


condicin no necesitan haber sido inicializadas
antes de alcanzar la sentencia Repita (Repeat).
A esas variables se les puede asignar valores en
el cuerpo del bucle que se ejecutaran antes de
que se verifique la condicin

Si la condicin es verdadera, el cuerpo de


ciclo se ejecutar y continuar el ciclo.

Si la condicin es verdadera, el cuerpo de ciclo


habr sido ejecutado, pero se detiene el ciclo.

Para evitar un ciclo infinito debe asegurarse


que la condicin contenga una variable cuyo
valor se modifique en el cuerpo de ciclo,
pasando a tomar un valor falso.

Para evitar un ciclo infinito debe asegurarse que


la condicin contenga una variable cuyo valor se
modifique en el cuerpo de ciclo, pasando a tomar
un valor verdadero.

Complemento de una condicin de acuerdo a Joyanes (1995)


Se puede complementar una condicin simple cambiando el operador relacional de acuerdo a la siguiente tabla:
Operador
<
<=
>
>=
=
<>

Operador que complementa


>=
>
<=
<
<>
=

10
Ejercicios Ciclo Repeat - Until
Desarrolle un programa en turbo Pascal que permita calcular la suma de los nmeros naturales desde 1 hasta un
nmero dado utilizando el Ciclo Repita Hasta Repeat Until
program numeros;
uses crt;
var
n,suma,i:integer;
begin
write ('Ingrese el Numero: ');
readln (n);
suma:=0;
i:=1;
repeat
suma:=suma+i;
i:=i+1;
until (i > n);
write ('La Suma es: ',suma);
write ('Presione una Tecla para Continuar');
end.
Desarrolle un programa en Turbo Pascal que lea las notas de un estudiante y calcule el promedio de notas en la escala
del 1 al 20.
program notas;
uses crt;
var
nom: string;
cont:integer;
suma,nota,prom:real;
resp: char;
begin
write ('Indique Nombre del estudiante: ');
readln (nom);
suma:=0; cont:=0;
repeat
write('Ingrese la Nota N: ', cont +1,': ');
readln (nota);
if (nota >= 1) and (nota <= 20) then
begin
suma:=suma+nota;
cont:=cont+1
end
else
write('La Nota NO ES VALIDA');
writeln ('Desea procesar otra nota pulse N para salir');
writeln ('cualquier otra tecla para continuar');
readln (resp);
until (resp = 'n') or (resp = 'N');
prom:=suma/cont;
writeln ('Estudiante: ', nom);
writeln ('La Cantidad de notas ingresadas es: ',cont);
writeln ('Promedio de las Notas es de: ',prom:2:2);
end.

11
CICLOS ANIDADOS
En clases anteriores se pudo evidenciar que el cuerpo de un ciclo puede contener cualquier tipo de sentencias
secuenciales o selectivas (if them else, case), incluso puede contener sentencias repetitivas (for, while, repeat). Si
un ciclo est contenido en otro ciclo se denominan ciclos anidados. Un ciclo anidado no tiene una estructura nueva,
sino que consiste en poner un ciclo dentro de otro. Cuando se anidan ciclos se debe tener cuidado que el ciclo interior
est completamente dentro del ciclo exterior; si los ciclos se cruzan, no sern vlidos, a continuacin se muestra
algunos ejemplos de ciclos anidados

While ( condicin 1) do
begin
For (condicin 2) do
begin
bloque de sentencias
end;
end;

Repeat
For (condicin 2) do
begin
bloque de sentencias
end;
Until (condicin 1)

For (condicin 1) do
begin
For (condicin 2) do
Begin
Bloque de sentencias
End;

Repeat

End;

Until (condicin 1)

While (condicin 1) do
begin
Repeat
bloque de sentencias
until (condicin 2)
end;

While ( condicin 2) do
Begin
bloque de sentencias
end;

Repeat
Repeat
bloque de sentencias
Until (condicin 2)
Until (condicin 1)

12
Ejercicios Ciclos Anidados
Desarrolle un programa en Turbo Pascal que permita generar las tablas de multiplicar del 1 al 10 utilizando ciclos
anidados.
program tablas 1;
uses crt;
var
i, j, res: integer;
begin
for i:= 1 to 10 do
begin
writeln ('TABLA DEL: ', i:2);
for j:= 1 to 10 do
begin
res := i * j;
writeln ( i:2, ' * ', j:2, ' = ', res:2)
end
end
end.
La empresa Tony Tornillos a travs de sus vendedores, distribuye productos ferreteros en el occidente del pas, con la
finalidad de automatizar sus sistema de ventas ha solicitado a los estudiantes de programacin de la UNEFA el
desarrollo de un sistema que le permita saber los datos personales y el total de las ventas mensuales realizadas por
cada uno de sus vendedores en el primer semestre del ao y el total de las ventas efectuadas por la empresa en dicho
periodo. Resuelva utilizando ciclos anidados.
program tony_tor;
uses crt;
Var
Nom, Ced: string;
Resp: char;
i: integer;
Venta, Tot_vent, Tot_gen: real;
begin
Tot_gen:= 0;
repeat
write ('indique Nombre del Vendedor ');
readln (Nom);
write ('indique Cdula del Vendedor');
readln (Ced);
Tot_vent:= 0;
for i:= 1 to 6 do
begin
writeln ('indique monto de la venta del mes: ', i);
readln (Venta);
Tot_vent := Tot_vent + venta
end;
Tot_gen := Tot_gen + Tot_vent;
writeln ('Vendedor: ', Nom, ' Cdula N: ', Ced);
writeln ('Monto de las ventas realizadas en el semestre Bs.: ', Tot_vent:4:2);
writeln ('Desea procesar otro vendedor, pulse N para salir y cualquier otra tecla para continuar');
readln (Resp);
until (Resp = 'N') or (Resp = 'n');
writeln ('Total Ventas efectuadas por la Empresa Bs.: ', Tot_gen:4:2);
end.

13
Los estudiantes del primer semestre de la UNET cursan cinco asignaturas (Clculo, Fsica, Qumica, Ingls y
Lenguaje) , para no entrar en periodo de prueba deben alcanzar un promedio mnimo de 3,60 puntos (la escala
utilizada es de 1 al 9) , desarrolle un programa que permita capturar, el nmero de estudiantes inscritos en una seccin,
los datos de cada estudiante (Nombre y notas) y muestre por pantalla el nombre del estudiante el promedio de las
asignaturas e indique si el estudiante entra o no a periodo de prueba. Valide la nota en la escala del 1 al 9.
program notas_unet;
uses crt;
var
ne, i, j: integer;
nota, prom: real;
nom, status: string;
begin
write ('Indique nmero de estudiantes de la Seccin: ');
readln (ne);
for i:= 1 to ne do
begin
prom:=0;
write ('indique nombre del estudiante N: ', i, ' ');
read (nom);
for j:= 1 to 5 do
begin
Case j of
1: write ('Indique nota de Clculo: ');
2: write ('Indique nota de Fsica: ');
3: write ('Indique nota de Qumica: ');
4: write ('Indique nota de Ingls: ');
5: write ('Indique nota de lenguaje: ');
End;
readln (nota);
repeat
if (nota<1) or (nota > 9) then
begin
writeln ('nota no vlida');
write ('indique nuevamente la nota: ');
readln (nota)
end;
until (nota >=1) and (nota <= 9);
prom:= prom + nota;
end;
prom:= prom/5;
if (prom >=3.60) then
status := 'Estudiante Regular'
else
status := 'Estudiante en Periodo de Prueba';
writeln ('Estudiante: ', nom, ' Promedio: ', prom:2:2, ' puntos ', status)
end
end.

Bibliografa
JOYANES, Luis. Programacin en Turbo Pascal Versiones 5.5, 6.0 y 7.0 segunda edicin, McGraw Hill, Mexico
1995.
JOYANES, Luis. Fundamentos de Programacin tercera edicin, McGraw Hill, Espaa 2002.
CARBALLO, Yusneyi. Gua de clases y ejercicios Escuela de Computacin. Recopilaciones varias desde 2004.
Disponible en la pgina: http://www.ciens.ucv.ve/algoritmosyprogramacion/paraRevisar.htm

You might also like