compass.gif (56962 bytes) CICLOS compass.gif (56962 bytes)

En la mayor parte de los programas se necesita repetir bloques de instrucciones tantas veces como lo requiera, la vida diaria de cualquier persona, animal o cosa esta repleta de ejemplos de ciclos, las computadoras solo se han encargado de copiarlos.

Podemos citar la acción que se produce cuando ingieres un delicioso sandwich: lo muerdes y lo muerdes, y así repites el proceso hasta que este se acaba; en un equipo de sonido si colocas un casete de música y observas detenidamente el movimiento giratorio de los engranajes, estos se repiten y se repiten hasta que la cinta se ha rebobinado completamente o hasta que alguien la detiene, del mismo modo ocurre con los videojuegos que practicas podemos citar a MARIO BROS, aquí juegas hasta que se te acaben las vidas o rescates a la princesa.

Una forma de hacer un proceso repetitivo consiste en escribir tantas veces como se necesite las instrucciones a utilizar, como ejemplo de ello cito un programa en el que se deben almacenar 5 números en un arreglo de tipo entero y después sumarlos.

Program Sin_Ciclos;

Uses Crt;

Const

N=5;

Type

Vector = Array[1..N] Of Integer;

Var

Vector_Numeros : Vector;

Suma : Integer;

Promedio : Real;

Begin

Clrscr;

Textcolor(Lightmagenta);

Writeln(‘Lectura Sin Ciclos : ‘);

Textcolor(White);

Write(‘Digite Número :’);

Readln(Vector_Numeros[1]);

Write(‘Digite Número :’);

Readln(Vector_Numeros[2]);

Write(‘Digite Número :’);

Readln(Vector_Numeros[3]);

Write(‘Digite Número :’);

Readln(Vector_Numeros[4]);

Write(‘Digite Número :’);

Readln(Vector_Numeros[5]);

Suma:= Vector_Numeros[1]+ Vector_Numeros[2]+ Vector_Numeros[3]+ Vector_Numeros[4]+ Vector_Numeros[5];

Promedio:=Suma/N;

Writeln(‘La Suma Es = ‘,Suma);

Writeln(‘El Promedio Es ‘,Promedio:0:2);

Readln;

End.

Este programa es demasiado ineficaz, pues debe escribirse 5 veces el mismo mensaje, 5 veces la sentencia de lectura y ademas deben ser 5, ni mas ni menos para solucionar este tipo de problemas se inventaron los ciclos repetitivos, en TURBO PASCAL contamos con 3:

 For –Do

 Repeat-Until

 While – Do

En cada uno de estos daremos una solución más práctica al ejemplo anterior, cabe destacar que todos funcionan hasta que se cumple con una condición que es la encargada de hacer parar el ciclo y continuar con el resto de instrucciones del programa.

 Se acabo el camino

 

 

line1.gif (286 bytes)

Ciclo For – Do (Para – Haga)

Este ciclo ejecuta una serie de instrucciones incrementando o decrementando una variable hasta un tope determinado.

 SINTAXIS GENERAL

For Variable:=Inicio To Tope Do

Begin

{Bloque De Instrucciones}

End;

 

Forma Incremental

For Variable:=Valor_Menor To Valor_Mayor Do

Begin

{Bloque De Instrucciones}

End;

 

Forma Decremental

 For Variable:=Valor_Menor To Valor_Mayor Do

Begin

{Bloque De Instrucciones}

End;

 

La variable controladora del ciclo es generalmente de tipo INTEGER, pero tambien se puede en algunas ocasiones declarar de tipo carácter asi:

For Letras:=’a’ to ‘z’ do

Begin

{En este ciclo se recorre el alfabeto de la ‘a’ a la ‘z’ de letra en letra}

End;

 

Similar a otras instrucciones, si el ciclo FOR – DO tiene una sola instrucción no requiere BEGIN – END, en caso contrario si!, una delas desventajas de este ciclo es que hasta que no se hallan ejecutado el número de instrucciones determinado no se detiene, si alguna vez tienes un problemilla de este tipo deberas recurrir a alguno de los otros dos : REPEAT – UNTIL o WHILE – DO

Ejemplo:

Program Ciclo_For;

Uses Crt;

Const

    N=5;

Type

    Vector = Array[1..N] Of Integer;

Var

    Vector_Numeros : Vector;

    Suma : Integer;

    Promedio : Real;

    I : Byte;

Begin

    Clrscr;

    Textcolor(Lightmagenta);

    Writeln(‘Lectura Con Ciclo For ‘);

Textcolor(White);

For I:=1 To N Do

    Begin

        Write(‘Digite Número:’);

        Readln(Vector_Numeros[I]);    

        Suma:= Suma + Vector_Numeros[I];

    End;

Promedio:=Suma/N;

Writeln(‘La Suma Es = ‘,Suma);

Writeln(‘El Promedio Es ‘,Promedio:0:2);

Readln;

End.

Compara este programa con el diseñado sin ciclos y veras la gran diferencia.

Para mayor claridad, a continuación presento otros ejemplos, codificalos, compilalos y observa que es lo que hacen.

Nota: Como puedes ver, estos programas usan ninguna unidad, en este caso emplean la estándar por defecto.

Program Segundo_ejemplo_ciclo_for;

Var

    Numero: integer;

Begin

    For numero:=1 to 150 do writeln(numero);{Aquí se imprime de forma incremental linea a linea desde el número 1 hasta el 150}

    Readln;

End.

line3.gif (1636 bytes)

Program Tercer_ejemplo_ciclo_for;

Var

    Numero: integer;

Begin

    For numero:=150 downto 1 do writeln(numero); {Aquí se imprime de forma decremental linea a linea desde el número 150 hasta el 1}

    Readln;

End.

line1.gif (286 bytes)

CICLO WHILE – DO (MIENTRAS – HAGA)

Este ejecuta una serie de instrucciones un número no determinado de veces hasta que se cumpla con una condición establecida , aunque tambien se puede hacer que trabaje de manera similar al ciclo FOR.

Una de las ventajas del ciclo WHILE es que puede evaluar variables de muchos mas tipos que el ciclo FOR(Recuerda que en este solo se pueden usar variables de tipo CARÁCTER y ENTERAS) entre ellas destacamos las de tipo STRING, BOOLEAN, INTEGER, REAL, ARREGLO.

El ciclo WHILE evalua y despues ejecuta instruccciones

Si lleva mas de una instrcción necesita BEGIN - END

SINTAXIS

While (Expresión_A_Evaluar) Do

Begin

       {Bloque De Instrucciones}

End;

 

Program Ciclo_While;

Uses Crt;

Const

    N=5;

Type

    Vector = Array[1..N] Of Integer;

Var

Vector_Numeros : Vector;

Suma : Integer;

Promedio : Real;

I : Byte;

Begin

Clrscr;

Textcolor(Lightmagenta);

Writeln(‘Lectura Con Ciclo While ‘);

Textcolor(White);

I:=0;{Notese Que Primero Se Debe Inicializar La Variable}

While (I<=N) Do

Begin

I:=I+1;{La Variable Controladora Del Ciclo Se Incrementa En Un Valor Determinado, En Este Caso Hemos Escogido 1, Pero Podría Ser Otro}

            Write(‘ Digite Número :’);

Readln(Vector_Numeros[I]);

Suma:= Suma +Vector_Numeros[I];

End;

Ppromedio:=Suma/N;

Writeln(‘La Suma Es = ‘,Suma);

Writeln(‘El Promedio Es ‘,Promedio:0:2);

Readln;

End.

line3.gif (1636 bytes)

Otro de impresión de números, pero este se incrementa de dos en dos.

Program ciclo_WHILE2;
Var

    Numero: Integer;
Begin


Numero:= 1;
While Numero <= 100 do

Begin

WriteLn (Numero);
Numero := Numero +2;

End;

Readln;

End.

line1.gif (286 bytes)

CICLO REPEAT – UNTIL (REPITA – HASTA)

EL CICLO "REPITA" (Como cariñosamente se le llama en la jerga de los programadores) actua de manera similar al ciclo WHILE – DO, con la pequeña diferencia de que en este se ejecutan las instrucciones y despues se evalua la condición.

Este no necesita BEGIN ni END, aunque tampoco dice nada si se los colocas.

SINTAXIS

Repeat

           {Bloque de instrucciones}

Until (Expresión_a_evaluar)

line3.gif (1636 bytes)

Program ciclo_repeat_until;

Uses crt;

Const

N=5;

Type

Vector = Array[1..N] of Integer;

Var

Vector_numeros : Vector;

Suma : Integer;

Promedio : Real;

I : Byte;

Begin

Clrscr;

Textcolor(LightMagenta);

Writeln(‘Lectura con ciclo REPEAT ‘);

Textcolor(White);

i:=0;{Notese que primero se debe inicializar la variable}

Repeat

I:=i+1;{La variable controladora del ciclo se incrementa en un valor determinado, en este caso hemos escogido 1, pero podría ser otro}

Write(‘Digite número :’);

Readln(Vector_numeros[i]);

Suma:= Suma + Vector_numeros[i];

Until (i>=N);

Ppromedio:=Suma/N;

Writeln(‘La Suma es = ‘,SUMA);

Writeln(‘El promedio es = ‘,PROMEDIO:0:2);

Readln;

End.

line3.gif (1636 bytes)

Otro ejemplo del ciclo repeat, este imprime números de 5 en 5

Program Ciclo_Repeat_Until2;
Var
   Numero: Integer;
Begin

Numero:= 1;
Repeat
    WriteLn (Numero); 
     Numero := Numero + 5;
Until Numero = 200;
readln;

End.

Ya para finalizar te presento un programa que mediante el uso de el ciclo REPEAT - UNTIL simula un PUBLIK, desplegando mensajes que se pueden entrar desde teclado, la hora que es tomada del sistema y una temperatura que se genera aleatoriamente al igual que los tipos de letra.

Como práctica seria muy provechoso que implementaras el mismo programa pero con CICLOS WHILE-DO y FOR - DO.

Ver Código Fuente bk51.gif (2790 bytes)

Ver Ejecutable dentada1.wmf (2214 bytes)

 

line6.gif (917 bytes)

  Regresar Pulsa aquí para regresar

Indice Presiona aquí para regresar al índice