Está en la página 1de 16

Unidad 3

1 //Escenario
Escenario25
Lectura fundamental
Fundamental

Instrucciones
Etapas de un plan
repetitivas
de comunicación
estratégica

Contenido

1 Instrucciones repetitivas

2 La instrucción while

3 La instrucción for

4 Elección entre while y for

5 Ciclos infinitos

6 Resumen

Palabras clave: algoritmo, programa, Java, instrucción repetitiva, ciclo.


1. Instrucciones repetitivas
En las Lecturas fundamentales anteriores se han presentado diferentes tipos de instrucciones, cada
una de las cuales es ejecutada una o cero veces en cada programa, conforme a si está o no dentro de
una instrucción condicional y si la condición correspondiente es satisfecha. Esto permite resolver gran
cantidad de problemas, sin embargo, ¿qué pasa si su problema requiere que una instrucción se realice
una cantidad arbitraria de veces? Por ejemplo, suponga que su programa debe totalizar las ventas
diarias de una tienda de zapatos. Para calcular dicho total sería deseable ejecutar tantas veces como
sea necesario un conjunto de instrucciones como:

valor_venta = entrada.nextDouble();

total_ventas = total_ventas + valor_venta;

Más aún, el número de veces que dichas instrucciones deben ser ejecutadas no tiene por qué ser el
mismo cada día.

En esta Lectura fundamental se introducirá una nueva familia de instrucciones que le permitirá
ejecutar un fragmento de código tantas veces como sea necesario hasta que una condición particular
se cumpla; en el caso del ejemplo señalado, hasta que todas las ventas del día sean agregadas. Este
tipo de instrucciones se conocen con el nombre de instrucciones repetitivas o ciclos. En la primera
parte se presenta la instrucción while, su significado, sintaxis y uso. De manera similar, en una
segunda parte se expone la instrucción for. La tercera parte se enfoca en las diferencias entre ambos
tipos de instrucciones y en qué ocasiones el empleo de una debería ser preferido sobre la otra.
Finalmente, en la última parte se discute cómo identificar ciclos infinitos a partir de ejemplos clásicos.

2. La instrucción while
La palabra while traduce al español mientras, que a su vez es definida por la Real Academia de la
Lengua Española (2014) como “Durante el tiempo en que (…)”. La palabra mientras declara que una
acción se realiza siempre que un hecho se siga cumpliendo, por ejemplo, “Mientras estés en Roma, vive
de acuerdo con las costumbres romanas” indica que debe realizarse la acción “vive de acuerdo con las
costumbres romanas” siempre que se siga cumpliendo que “estés en Roma”.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 2
El mismo concepto puede ser aplicado a tareas particulares de un algoritmo: “mientras que falten ventas
por registrar, agregar siguiente venta en el total”.

La sintaxis de la instrucción while se presenta a continuación (Oracle Inc., 2015):

...

while (<condición>) {

       <instrucciones>

...

           

La interpretación de esta instrucción es la siguiente:

Al ejecutar la instrucción

1. Se evalúa la expresión booleana <condición>

2. Si el resultado de la evaluación es verdadero (true):

a. se ejecuta el conjunto de instrucciones respectivo

b. se repite el proceso desde i

3. En caso contrario, la ejecución de la instrucción finaliza.

Note que el conjunto de instrucciones en el interior del bloque while puede ser ejecutado desde 0
hasta infinitas veces según la condición del ciclo y los datos del programa.

A continuación se presentan algunos ejemplos de uso de la instrucción while:

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 3
Problema:

Totalizar las ventas diarias de una tienda de zapatos. El final de las ventas a registrar se
representa con una entrada negativa o cero.

Solución:

static int registrar_ventas(){

  Scanner entrada = new Scanner(System.in);

  int total_ventas = 0;

  int valor_venta = entrada.nextInt();

  while (valor_venta > 0) {

        total_ventas = total_ventas + valor_venta;

        valor_venta = entrada.nextInt();

  }

  entrada.close();

  return total_ventas;

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 4
Problema:

Calcular el número de dígitos de un número positivo n.

Solución:

static int contar_digitos(int n) {

  int digitos = 0;

  while (n > 0) {

    digitos = digitos + 1;

    n = n / 10;

  }

  return digitos;

Problema:

Calcular el valor, después de un año, de una deuda inicial de $C, sobre la que se cobra un interés
de i % mensual.

Solución:

static double valor_final(double C, double i) {

  double valor = C;

  int meses_contados = 0;

  while (meses_contados < 12) {

    valor = valor + valor * i / 100d;

    meses_contados = meses_contados + 1;

  }

  return valor;       

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 5
3. La instrucción for
Al igual que while, la instrucción for permite ejecutar un conjunto de instrucciones un número
arbitrario de veces. La sintaxis de la instrucción for se presenta a continuación (Oracle Inc., 2015):

...

for (<inicialización>; <condición>; <paso hacia finalización>) {

<instrucciones>

...

Como se puede apreciar, la estructura del bloque for es más compleja que la de su par, el while; no
obstante, facilita la escritura de un tipo especial de ciclos.

Para comprender cómo se ejecuta un ciclo for es importante aclarar que este está asociado a una variable
que controla su ejecución general, pero no necesariamente entera, que se denomina variable de ciclo.

Al ejecutar la instrucción for:

1. Se ejecuta la instrucción <inicialización>. Esta instrucción asigna el valor inicial a la


variable de ciclo

2. Se evalúa la expresión booleana <condición>

3. Si el resultado de la evaluación es verdadero (true)

a. se ejecuta el conjunto de instrucciones respectivo

b. se ejecuta la instrucción <paso hacia finalización>

c. se repite el proceso desde ii.

4. En caso contrario, la ejecución de la instrucción finaliza.

Note que el tiempo de vida del ciclo está determinado por las instrucciones <inicialización> y
<paso hacia finalización>, y por la expresión <condición>. <inicialización> especifica
el valor inicial de la variable de ciclo; <paso hacia finalización> señala cómo cambia la variable
después de cada iteración; y <condición> determina cuándo debe finalizar el ciclo.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 6
<paso hacia finalización>, como el nombre lo indica, debe garantizar que <condición> sea
falsa después de un número finito de iteraciones.

En su forma más común, un ciclo for hace que una variable entera siga una sucesión finita de valores
de la forma:

{a, a + b, a + 2b, a + 3b, ..., a + kb <= n}

Esto se logra mediante la instrucción (i es el nombre más frecuentemente usado para la variable de
ciclo, tal como ocurre en matemáticas con las sumatorias):

...

for (i = a; i <= n; a = a + b) {

<instrucciones>

...

Reemplazando las variables a por 1 y b por 1, la variable i toma, en orden, los valores de la sucesión:

{1, 2, 3, 4, 5, ..., n}

3.1. Ámbito de la variable de ciclo

Es posible usar como variable de ciclo una variable ya declarada anteriormente o una nueva, e incluir
su declaración en la inicialización del ciclo:

for (int i = a; i <= n; a = a + b) {

<instrucciones>

En este caso se debe tener en cuenta que la variable solamente existe, i.e., puede ser usada en el
interior del ciclo.

A continuación se presentan algunos ejemplos de uso de la instrucción for:

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 7
Problema:

Calcular el monto total vendido en un año por una tienda de zapatos, dadas las cantidades
totales de cada mes.

Solución:
static int total_venta_anual(){
  Scanner entrada = new Scanner(System.in);
  int total_ventas = 0;
  int valor_venta;
  for (int i = 1; i <= 12; i = i + 1) {
        System.out.print(“Total de ventas del mes “ + i + “: “);
        valor_venta = entrada.nextInt();
        total_ventas = total_ventas + valor_venta;
  }
  entrada.close();
  return total_ventas;
}

Problema:

Mostrar en pantalla una cuenta regresiva iniciando en n.

Solución:

static void cuenta_regresiva(int n) {

  System.out.print(“Lanzamiento en “);

  for (int i = n ; i >=1 ; i = i - 1) {

    System.out.print(i + “ “);

  }

  System.out.println(“Despegue!!”);

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 8
Problema:

Calcular el valor, después de un año, de una deuda inicial de $C, sobre la que se cobra un interés
de i % mensual.

Solución:

static double valor_final(double C, double i) {

  double valor = C;

for (int i = 1; i <= 12; i = i + 1) {

  valor = valor + valor * i / 100d;

  return valor;       

3.2. Omisión de llaves

Al igual que ocurre con la instrucción if-else, cuando el contenido del bloque while o del bloque
for consiste de una única instrucción es posible omitir las llaves que encierran dicho bloque. En este
caso, la sintaxis de la instrucción es:
Tabla 1. Sintaxis de la situación

... ...

while (<condición>) for (<inic.>; <condición>; <paso hacia fin.>)


<instrucción>
      <instrucción>
...
...      

Fuente: elaboración propia

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 9
Como ya se dijo en la Lectura correspondiente a instrucciones condicionales, se recomienda que,
mientras se está aprendiendo, siempre sean incluidas las llaves en cada uno de los bloques de código.
Esto reduce el número de errores que se cometen al escribir programas.

4. Elección entre while y for


Cualquier problema que requiera del uso de una instrucción repetitiva puede ser resuelto usando
tanto un ciclo while como un ciclo for, por lo que es posible decir que los dos tipos de
instrucciones son equivalentes. A continuación, se muestra cómo es posible reemplazar un tipo de
ciclo por el otro:
Tabla 2. Reemplazar un tipo de ciclo por otro

El ciclo Puede ser reemplazado por


for (<inic>;<condición>;<paso>) { <inic>;

<instrucciones> while (<condición>) {

}       <instrucciones>

      <paso>;

}
while (<condición>) { for (;<condición>;) {

      <instrucciones> <instrucciones>

} }

Fuente: elaboración propia

Sin embargo, algunos usos de estos ciclos no son naturales según el fin con el que fueron creadas las
instrucciones; un claro ejemplo de esto es el ciclo for que reemplaza al while en la tabla anterior.

En su forma usual, la inicialización, condición y paso a fin del ciclo for definen el número exacto de veces
que el ciclo se ejecutará.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 10
Por otra parte, la condición del while indica cuándo este debe terminar, pero no precisa el número de
iteraciones que hará el ciclo. Usaremos esto para definir una regla de uso del while: siempre que se
conozca la condición de terminación del ciclo, pero no sea evidente el número de iteraciones que este debe
realizar, hay que emplear un ciclo while. Por otra parte, cuando el número de iteraciones sea conocido es
posible aplicar tanto un ciclo while como un ciclo for.

En la siguiente Lectura se introducen los arreglos con los que el ciclo for cobrará aún más importancia.

Los siguientes ejemplos demuestran cuándo se recomienda el uso del ciclo while y en qué
circunstancias puede usarse cualquiera de los dos tipos de instrucciones:

Problema: calcular el número de dígitos de un número positivo n.

Análisis: en cada iteración el ciclo debe quitar un dígito del número y aumentar el contador
correspondiente (ver ejemplo en la sección 1). El número de iteraciones del ciclo es igual al número de
dígitos del número, que es desconocido. Por lo anterior, la elección correcta es un ciclo while.

Problema: calcular el valor, después de un año, de una deuda inicial de $C sobre los que se cobra un
interés de i % mensual.

Análisis: se debe calcular el valor de la deuda al finalizar cada uno de los doce meses, por lo que el
ciclo debe iterar exactamente doce veces. Es posible entonces usar tanto un ciclo while como un
ciclo for.

Problema: calcular el número de meses en que una deuda, sobre la que se cobra un interés de i %
mensual, duplicará su valor.

Análisis: a pesar de la similitud con la situación del problema anterior, en este caso el número de
veces en que debe aplicarse el interés es desconocido (de hecho, es la salida del problema). Por tanto,
debe usarse la instrucción while.

5. Ciclos infinitos
Un ciclo infinito es un ciclo cuya ejecución nunca termina, esto es, su condición nunca llega a
ser verdadera. Con contadas excepciones, es una situación no deseable ya que se espera que
eventualmente el programa genere un resultado.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 11
Estos ciclos, con gran frecuencia, son producto de errores en el proceso de escritura de los
programas; además, son fácilmente detectables, ya que programas que deberían requerir poco
esfuerzo para la máquina no terminan en una cantidad de tiempo razonable (sin embargo, se debe
estar seguro de que la demora no se deba a la naturaleza del algoritmo implementado o a que el
programa espera el ingreso de datos por parte del usuario).

A continuación, se presentan algunos errores típicos que redundan en ciclos infinitos:

for (int i = n ; i >=1 ; i = i + 1) {

     ...

En este ciclo se espera que i decrezca desde n hasta 1; sin embargo, el paso hacia finalización
incrementa la variable en vez de decrementarla.
while (i < n) {

     ...

Dado que en el cuerpo de un ciclo for no es necesario incrementar la variable de ciclo, es común olvidar
hacerlo en un ciclo while. Puesto que el valor de la variable no cambia, el ciclo nunca terminará.

for (int i = 1 ; i != n ; i = i + 2) {

     ...

En este caso, i toma únicamente valores impares, por lo que si n es par el ciclo nunca terminará.
El problema se resuelve cambiando != por <.
int i = 1, suma = 0;

while (i < n)

     suma = suma + i;

     i = i + 1;

Aunque a primera vista el programa parezca correcto, la omisión de las llaves genera que el
incremento de i nunca se realice.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 12
for (int i = 1 ; i <= n ; i = i + 1) {
     ...
     i = 0;
     ...
}

El valor de la variable de ciclo no debería ser modificado en el cuerpo de este. Es evidente que el
ciclo anterior nunca termina si n ≥ 1.

6. Resumen

Las instrucciones repetitivas o ciclos permiten ejecutar un fragmento de código tantas veces
como sea necesario hasta que una condición particular se cumpla. Existen dos tipos principales de
instrucciones repetitivas: while y for.

La sintaxis de la instrucción while es:

...

while (<condición>) {

       <instrucciones>

...

La sintaxis de la instrucción for es:

...

for (<inicialización>; <condición>; <paso hacia finalización>) {

<instrucciones>

...

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 13
En los dos tipos de ciclos las instrucciones son ejecutadas hasta que <condición> deje de ser
satisfecha. Cuando el número de iteraciones que deba realizar un ciclo no sea conocido a priori, se
recomienda el uso de la instrucción while. En caso contrario, es posible usar tanto la instrucción
while como la instrucción for.

Una consecuencia común de algunos errores típicos de programación son los ciclos infinitos, i.e.,
ciclos cuya condición nunca se vuelve falsa. Este tipo de errores se identifica fácilmente, ya que los
programas toman mucho tiempo para ejecutarse aún para instancias del problema en que esto no
debería ocurrir.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 14
Referencias
Real Academia Española. (2014). Diccionario de la lengua española. Recuperado de http://www.rae.es/

Oracle Inc. (2015). Language Basics. The Java ™ Tutorials. Oracle Inc. Recuperado de https://docs.
oracle.com/javase/tutorial/java/nutsandbolts/if.html

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 15
INFORMACIÓN TÉCNICA

Módulo: Programación de Computadores


Unidad 3: Instrucciones repetitivas, arreglos y matrices
Escenario 5: Instrucciones repetitivas

Autor:Edwin Andrés Niño Velásquez

Asesor Pedagógico: Jeiner Velandia


Diseñador Gráfico: Kelly Yohana Valencia Forero
Asistente: Ginna Quiroga

Este material pertenece al Politécnico Grancolombiano.


Prohibida su reproducción total o parcial.

POLITÉCNICO
POLITÉCNICO GRANCOLOMBIANO
GRANCOLOMBIANO 16

También podría gustarte