Sie sind auf Seite 1von 16

Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

11 - Estructura repetitiva for

Cualquier problema que requiera una estructura repetitiva se puede resolver empleando la estructura while. Pero hay otra
estructura repetitiva cuyo planteo es más sencillo en ciertas situaciones.

No se puede emplear la estructura for en todos los casos, sólo en aquellas situaciones en las cuales CONOCEMOS la
cantidad de veces que queremos que se ejecute el bloque de instrucciones. Ejemplo: cargar 10 números, ingresar 5 notas
de alumnos, etc. Conocemos de antemano la cantidad de veces que queremos que el bloque se repita.

Representación gráfica:

Esta estructura requiere una variable entera que cumple la función de CONTADOR. En el símbolo de la estructura
indicamos inicialmente el nombre de la variable luego el símbolo de asignación (:=) y los valores inicial y final que tomará la
variable.

En la primera vuelta, la variable del for toma el <Valor inicial> y cada repetición se incrementa en uno, hasta que llega al
<Valor final> que es la última vez que se ejecuta el bloque repetitivo.

Si conocemos la cantidad de veces que se repite el bloque es muy sencillo emplear un for, por ejemplo si se repite 50
veces el bloque de instrucciones tenemos:

La variable del for puede tener cualquier nombre. En este ejemplo se la ha definido con el nombre f.

Analicemos el ejemplo:

- La variable f toma inicialmente el valor 1.


- Se ejecutan la/s operación/es.
- La variable f se incrementa en uno en forma AUTOMATICA.
- Si f no ha superado el <valor final> se ejecuta nuevamente el bloque de instrucciones e incrementa nuevamente la variable del for.

La variable f NO puede ser modificada dentro del for. La modificación la hace la misma estructura for incrementándola en
uno cada vuelta o ciclo

.
La variable f puede comenzar en cualquier valor entero y finalizar en cualquier valor siempre y cuando el valor inicial sea
menor o igual al valor final.

Si el valor inicial es igual al valor final se ejecuta una única vez el bloque repetitivo. En caso que el valor inicial sea mayor
al valor final no se ejecuta el bloque del for.

La sintaxis del for en Pascal es la siguiente:

1 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

for <Nombre de la variable>:=<Valor inicial> to <Valor final> do


begin
<Instrucciones>
end;

Problema 1
Realizar un programa que imprima en pantalla los números del 1 al 100 utilizando la estructura repetitiva for.
Diagrama de flujo:

Podemos observar y comparar con el ejercicio resuelto con while y ver los puntos comunes. Con la estructura while el
CONTADOR x sirve para contar las vueltas. Con el for el CONTADOR f cumple dicha función. El incremento de la variable f
es automática, cada vez que se repite el bloque.

Inicialmente f vale 1 y como no es superior a 100 se ejecuta el bloque, imprimimos el contenido de f, al finalizar el bloque
repetitivo se incrementa la variable f en 1, como 2 no es superior a 100 (valor final) se repite el bloque de instrucciones.
Cuando la variable del for llega a 101 sale de la estructura repetitiva y continua la ejecución del algoritmo que se indica
después del círculo.

La variable f debe estar definida en la zona de la var como variable entera.


Proyecto38

program Proyecto38;

{$APPTYPE CONSOLE}

var
f: Integer;

begin
for f:=1 to 100 do
begin
Write(f, '-');
end;
ReadLn;
end.

Problema 2
Desarrollar un programa que permita la carga de 10 valores por teclado y nos muestre posteriormente la suma de los
valores ingresados y su promedio. Este problema ya lo desarrollamos, lo resolveremos empleando la estructura for.
Diagrama de flujo:

2 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

En este caso, a la variable del for (f) sólo se la requiere para que se repita el bloque de instrucciones 10 veces.
Proyecto39

program Proyecto39;

{$APPTYPE CONSOLE}

var
f, suma, valor: Integer;
promedio: Double;
begin
suma := 0;
for f:=1 to 10 do
begin
Write('Ingrese un valor:');
ReadLn(valor);
suma := suma + valor;
end;
promedio := suma / 10;
WriteLn('La suma es :', suma);
WriteLn('El promedio es :', promedio:0:2);
ReadLn;
end.

En este problema queremos que se repita 10 veces este bloque:

3 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

Write('Ingrese un valor:');
ReadLn(valor);
suma := suma + valor;

El problema requiere que se carguen 10 valores y se sumen los mismos.

Tener en cuenta encerrar entre un begin y end el bloque de instrucciones a repetir dentro del for.

El promedio se calcula fuera del for luego de haber cargado los 10 valores.

Problema 3
Escribir un programa que lea 10 notas de alumnos y nos informe cuántos tienen notas mayores o iguales a 7 y cuántos
menores.
Diagrama de flujo:

Para resolver este problema se requieren tres contadores:

aprobados (Cuenta la cantidad de alumnos aprobados)


reprobados (Cuenta la cantidad de reprobados)
f (es el contador del for)

Dentro de la estructura repetitiva debemos hacer la carga de la variable nota y verificar con una estructura condicional si el
contenido de la variable nota es mayor o igual a 7 para incrementar el contador aprobados, en caso de que la condición
retorne falso debemos incrementar la variable reprobados.
Proyecto40

4 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

program Proyecto40;

{$APPTYPE CONSOLE}

var
aprobados: Integer;
reprobados: Integer;
f: Integer;
nota: integer;

begin
aprobados := 0;
reprobados := 0;
for f:=1 to 10 do
begin
Write('Ingrese nota:');
ReadLn(nota);
if nota >= 7 then
begin
aprobados := aprobados + 1;
end
else
begin
reprobados := reprobados + 1;
end;
end;
WriteLn;
WriteLn; //Dejamos 2 líneas en blanco
WriteLn('Cantidad de alumnos aprobados :', aprobados);
WriteLn('Cantidad de alumnos reprobados:', reprobados);
ReadLn;
end.

Los contadores deben definirse en la var. El contador f se inicializa con la misma estructura for, en cambio a los contadores
aprobados y reprobados los inicializamos antes de entrar a la estructura repetitiva.

Si llamamos al procedimiento WriteLn sin indicar qué se imprime entre paréntesis, se deja una línea en blanco. Podemos
llamar al procedimiento tantas veces como líneas en blanco necesitemos.

En Pascal/Delphi podemos dejar comentarios (no se compilan y tienen por objetivo documentar el algoritmo) dentro del
programa utilizando las siguientes sintaxis:

Comentarios de línea con los caracteres //

WriteLn; //Dejamos 2 líneas en blanco

También podemos utilizar la sintaxis:

WriteLn; {Dejamos 2 líneas en blanco}

O la sintaxis:

WriteLn; (*Dejamos 2 líneas en blanco*)

Si utilizamos llaves podemos encerrar varias líneas, por ejemplo:

5 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

{ Escribir un programa que lea 10 notas de alumnos y nos informe


cuántos tienen notas mayores o iguales a 7 y cuántos menores. }

program Proyecto40;

{$APPTYPE CONSOLE}

var
aprobados: Integer;
reprobados: Integer;
f: Integer;
nota: integer;

begin
aprobados := 0;
reprobados := 0;
for f:=1 to 10 do
begin
Write('Ingrese nota:');
ReadLn(nota);
if nota >= 7 then
begin
aprobados := aprobados + 1;
end
else
begin
reprobados := reprobados + 1;
end;
end;
WriteLn;
WriteLn; (*Dejamos 2 líneas en blanco*)
WriteLn('Cantidad de alumnos aprobados :', aprobados);
WriteLn('Cantidad de alumnos reprobados:', reprobados);
ReadLn;
end.

Las directivas de compilación también utilizan las llaves, pero comienzan con el carater $:

{$APPTYPE CONSOLE}

Problema 4
Escribir un programa que lea 10 números enteros y luego muestre cuántos valores ingresados fueron múltiplos de 3 y
cuántos de 5. Debemos tener en cuenta que hay números que son múltiplos de 3 y de 5 a la vez.
Diagrama de flujo:

6 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

Recordemos que el operador matemático mod retorna el resto de dividir un valor por otro, en este caso: valor mod 3
retorna el resto de dividir el valor que ingresamos por teclado por tres.

Veamos: si ingresamos 6 el resto de dividirlo por 3 es 0, si ingresamos 12 el resto de dividirlo por 3 es 0. Generalizando:
cuando el resto de dividir por 3 el valor que ingresamos por teclado es cero se trata de un múltiplo de dicho valor.

Ahora bien ¿por qué no hemos dispuesto una estructura if anidada? pues hay valores que son múltiplos de 3 y de 5 a la
vez. Por lo tanto con if anidados no podríamos analizar los dos casos.

Es importante darse cuenta cuando conviene emplear if anidados y cuando no debe emplearse.
Proyecto41

7 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

program Proyecto41;

{$APPTYPE CONSOLE}

var
mul3, mul5: Integer;
f: Integer;
valor: Integer;

begin
mul3 := 0;
mul5 := 0;
for f:=1 to 10 do
begin
Write('Ingrese valor:');
ReadLn(valor);
if valor mod 3 = 0 then
begin
mul3 := mul3 + 1;
end;
if valor mod 5 = 0 then
begin
mul5 := mul5 + 1;
end;
end;
WriteLn;
WriteLn('Cantidad de múltiplos de 3:', mul3);
WriteLn('Cantidad de múltiplos de 5:', mul5);
ReadLn;
end.

Problema 5
Escribir un programa que lea "n" números enteros y calcule la cantidad de valores mayores o iguales a 1000.

Este tipo de problemas también se puede resolver empleando la estructura repetitiva for. Lo primero que se hace es cargar
una variable que indique la cantidad de valores a ingresar. Dicha variable se carga antes de entrar a la estructura repetitiva
for.
Diagrama de flujo:

8 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

Tenemos dos contadores llamado cantidad y f.

La variable entera n se carga previo al inicio del for, por lo que podemos fijar el valor final del for con la variable n.

Por ejemplo si el operador carga 5 en n la estructura repetitiva for se ejecutará 5 veces.

La variable valor se ingresa dentro de la estructura repetitiva, y se verifica si el valor de la misma es mayor o igual a 1000,
en dicho caso se incrementa en uno el contador cantidad.

Fuera de la estructura repetitiva imprimimos el contador cantidad que tiene almacenado la cantidad de valores ingresados
mayores o iguales a 1000.
Proyecto42

9 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

program Proyecto42;

{$APPTYPE CONSOLE}

{$R *.res}

var
f: Integer;
cantidad: Integer;
n: Integer;
valor: Integer;
begin
cantidad := 0;
Write('Ingrese cuantos números quiere cargar:');
ReadLn(n);
for f:=1 to n do
begin
Write('Ingrese valor:');
ReadLn(valor);
if valor >= 1000 then
begin
cantidad := cantidad + 1;
end;
end;
WriteLn;
Write('La cantidad de valores ingresados mayores o iguales a 1000 fueron:', cantid
ReadLn;
end.

Problemas propuestos
Ha llegado nuevamente la parte fundamental, que es el momento donde uno desarrolla individualmente un algoritmo para
la resolución de un problema.

Confeccionar un programa que lea n pares de datos, cada par de datos corresponde a la medida de la base y la
altura de un triángulo. El programa deberá informar:
a) De cada triángulo la medida de su base, su altura y su superficie (la superficie se calcula multiplicando la base por
la altura y dividiendo dicho valor por 2)
b) La cantidad de triángulos cuya superficie es mayor a 12.

Desarrollar un programa que solicite la carga de 10 números e imprima la suma de los últimos 5 valores ingresados.

Desarrollar un programa que muestre la tabla de multiplicar del 5 (del 5 al 50)

Confeccionar un programa que permita ingresar un valor del 1 al 10 y nos muestre la tabla de multiplicar del mismo
(los primeros 12 términos)
Ejemplo: Si ingreso 3 deberá aparecer en pantalla los valores 3, 6, 9, hasta el 36.

Realizar un programa que lea los lados de n triángulos, e informar:


a) De cada uno de ellos, qué tipo de triángulo es: equilátero (tres lados iguales), isósceles (dos lados iguales), o
escaleno (ningún lado igual)
b) Cantidad de triángulos de cada tipo.
c) Tipo de triángulo que posee menor cantidad.

Escribir un programa que pida ingresar coordenadas (x,y) que representan puntos en el plano.
Informar cuántos puntos se han ingresado en el primer, segundo, tercer y cuarto cuadrante. Al comenzar el programa
se pide que se ingrese la cantidad de puntos a procesar.

10 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

Se realiza la carga de 10 valores enteros por teclado. Se desea conocer:


a) La cantidad de valores ingresados negativos.
b) La cantidad de valores ingresados positivos.
c) La cantidad de múltiplos de 15.
d) El valor acumulado de los números ingresados que son pares.

Se cuenta con la siguiente información:


Las edades de 5 estudiantes del turno mañana.
Las edades de 6 estudiantes del turno tarde.
Las edades de 11 estudiantes del turno noche.
Las edades de cada estudiante deben ingresarse por teclado.
a) Obtener el promedio de las edades de cada turno (tres promedios)
b) Imprimir dichos promedios (promedio de cada turno)
c) Mostrar por pantalla un mensaje que indique cual de los tres turnos tiene un promedio de edades mayor.

11 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

program Proyecto43;

{$APPTYPE CONSOLE}

{$R *.res}

var
basetri: Integer;
altura: Integer;
superficie: Double;
cantidad: Integer;
f: Integer;
n: Integer;

begin
cantidad := 0;
Write('Cuantos triángulos procesará:');
ReadLn(n);
for f:= 1 to n do
begin
Write('Ingrese el valor de la base:');
ReadLn(basetri);
Write('Ingrese el valor de la altura:');
ReadLn(altura);
superficie := basetri * altura / 2;
WriteLn('La superficie es:', superficie:0:2);
if superficie > 12 then
begin
cantidad := cantidad + 1;
end;
end;
Write('La cantidad de triángulos con superficie superior a 12 son:', cantidad);
ReadLn;
end.

program Proyecto44;

{$APPTYPE CONSOLE}

var
f: Integer;
valor: Integer;
suma: Integer;

begin
suma := 0;
for f:=1 to 10 do
begin
Write('Ingrese un valor:');
ReadLn(valor);
if f > 5 then
begin
suma := suma + valor;
end;
end;
Write('La suma de los últimos 5 valores es:', suma);
ReadLn;
end.

program Proyecto45;

{$APPTYPE CONSOLE}

{$R *.res}

var
f: Integer;
tabla: Integer;
begin
tabla := 5;
for f:=1 to 10 do
begin

12 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

Write(tabla, ' - ');


tabla := tabla + 5;
end;
ReadLn;
end.

program Proyecto46;

{$APPTYPE CONSOLE}

var
f: Integer;
valor: Integer;
tabla: Integer;

begin
Write('Ingrese un valor entre 1 y 10:');
ReadLn(valor);
for f:=1 to 10 do
begin
tabla := valor * f;
Write(tabla, ' - ');
end;
ReadLn;
end.

program Proyecto47;

{$APPTYPE CONSOLE}

var
cant1, cant2, cant3: Integer;
n: Integer;
f: Integer;
lado1, lado2, lado3: Integer;

begin
cant1 := 0;
cant2 := 0;
cant3 := 0;
Write('Ingrese la cantidad de triángulos:');
ReadLn(n);
for f:=1 to n do
begin
Write('Ingrese lado 1:');
ReadLn(lado1);
Write('Ingrese lado 2:');
ReadLn(lado2);
Write('Ingrese lado 3:');
ReadLn(lado3);
if (lado1 = lado2) and (lado1 = lado3) then
begin
WriteLn('Es un triángulo equilatero.');
cant1 := cant1 + 1;
end
else
begin
if (lado1 = lado2) or (lado1 = lado3) or (lado2 = lado3) then
begin
WriteLn('Es un triángulo isósceles.');
cant2 := cant2 +1;
end
else
begin
WriteLn('Es un triángulo escaleno.');
cant3 := cant3 + 1;
end;
end;
end;
WriteLn('Cantidad de triángulos equilateros:', cant1);
WriteLn('Cantidad de triángulos isósceles:', cant2);
WriteLn('Cantidad de triángulos escalenos:', cant3);
if (cant1 < cant2) and (cant1 < cant3) then
begin

13 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

WriteLn('Hay menor cantidad de triángulos equilateros.');


end
else
begin
if cant2 < cant3 then
begin
WriteLn('Hay menor cantidad de triángulos isósceles');
end
else
begin
WriteLn('Hay menor cantidad de triángulos escalenos');
end;
end;
ReadLn;
end.

program Proyecto48;

{$APPTYPE CONSOLE}

var
cant1, cant2, cant3, cant4: Integer;
f: Integer;
n: Integer;
x, y: Integer;

begin
cant1 := 0;
cant2 := 0;
cant3 := 0;
cant4 := 0;
Write('Cantidad de puntos:');
ReadLn(n);
for f:=1 to n do
begin
Write('Ingrese coordenada x:');
ReadLn(x);
Write('Ingrese coordenada y:');
ReadLn(y);
if (x > 0) and (y > 0) then
begin
cant1 := cant1 + 1;
end
else
begin
if (x < 0) and (y > 0) then
begin
cant2 := cant2 +1;
end
else
begin
if (x < 0) and (y < 0) then
begin
cant3 := cant3 + 1;
end
else
begin
if (x > 0) and (y < 0) then
begin
cant4 := cant4 + 1;
end;
end;
end;
end;
end;
WriteLn('Cantidad de puntos en el primer cuadrante:', cant1);
WriteLn('Cantidad de puntos en el segundo cuadrante:', cant2);
WriteLn('Cantidad de puntos en el tercer cuadrante:', cant3);
WriteLn('Cantidad de puntos en el cuarto cuadrante:', cant4);
ReadLn;
end.

program Proyecto49;

14 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

{$APPTYPE CONSOLE}

{$R *.res}

var
negativos: Integer;
positivos: Integer;
mult15: Integer;
sumapares: Integer;
valor: Integer;
f: Integer;

begin
negativos := 0;
positivos := 0;
mult15 := 0;
sumapares := 0;
for f:=1 to 10 do
begin
Write('Ingrese valor:');
ReadLn(valor);
if valor < 0 then
begin
negativos := negativos + 1;
end
else
begin
if valor > 0 then
begin
positivos := positivos + 1;
end;
end;
if valor mod 15 = 0 then
begin
mult15 := mult15 + 1;
end;
if valor mod 2 = 0 then
begin
sumapares := sumapares + valor;
end;
end;
WriteLn('Cantidad de valores negativos:', negativos);
WriteLn('Cantidad de valores positivos:', positivos);
WriteLn('Cantidad de valores múltiplos de 15:', mult15);
WriteLn('Suma de los valores pares:', sumapares);
ReadLn;
end.

program Proyecto50;

{$APPTYPE CONSOLE}

var
suma1, suma2, suma3: Integer;
f: Integer;
edad: Integer;
prom1, prom2, prom3: Double;

begin
suma1 := 0;
suma2 := 0;
suma3 := 0;
for f:= 1 to 5 do
begin
Write('Ingrese edad:');
ReadLn(edad);
suma1 := suma1 + edad;
end;
prom1 := suma1 / 5;
WriteLn('Promedio de edades del turno mañana:', prom1:0:2);
for f:= 1 to 6 do
begin
Write('Ingrese edad:');
ReadLn(edad);
suma2 := suma2 + edad;
end;
prom2 := suma2 / 6;

15 de 16 12/05/2019 07:46 a. m.
Estructura repetitiva for https://www.tutorialesprogramacionya.com/delphiya/detalleconcepto.php?punto=11&codigo=93&ini...

WriteLn('Promedio de edades del turno tarde:', prom2:0:2);


for f:= 1 to 11 do
begin
Write('Ingrese edad:');
ReadLn(edad);
suma3 := suma3 + edad;
end;
prom3 := suma3 / 11;
WriteLn('Promedio de edades del turno noche:', prom3:0:2);
if (prom1 < prom2) and (prom1 < prom3) then
begin
WriteLn('El turno mañana tiene un promedio menor de edades.');
end
else
begin
if prom2 < prom3 then
begin
WriteLn('El turno tarde tiene un promedio menor de edades.');
end
else
begin
WriteLn('El turno noche tiene un promedio menor de edades.');
end;
end;
ReadLn;
end.

Retornar (index.php?inicio=0)

16 de 16 12/05/2019 07:46 a. m.

Das könnte Ihnen auch gefallen