¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros y videos
  2. Algoritmia - Técnicas fundamentales de programación
  3. Técnicas fundamentales de programación
Extrait - Algoritmia - Técnicas fundamentales de programación Ejemplos en PHP (numerosos ejercicios corregidos)
Extractos del libro
Algoritmia - Técnicas fundamentales de programación Ejemplos en PHP (numerosos ejercicios corregidos) Volver a la página de compra del libro

Los bucles

Estructuras iterativas

1. Definición

Como se ha indicado en el primer capítulo, el bucle es la cuarta gran estructura básica de la algoritmia y, por tanto, de la programación. Después de este capítulo, todo lo demás es una aplicación o derivación de estas cuatro estructuras básicas. Los bucles son estructuras iterativas. Una iteración o estructura iterativa es una secuencia de instrucciones destinada a ser ejecutada varias veces. También es la acción de ejecutar esta instrucción. A veces oirá referirse a esto como estructuras repetitivas, que es lo mismo, pero de una forma diferente. El propósito de un bucle es repetir un bloque de instrucciones varias veces. Según el tipo de bucle, este bloque se repetirá un número fijo de veces (n veces) o según un cierto número de criterios (una prueba de una o varias condiciones) que ya conoce muy bien.

El bucle es un elemento muy sencillo a primera vista. Los primeros ejemplos que encuentre le resultarán obvios. Sin embargo, rápidamente se convierte en algo molesto para los programadores novatos, debido a los famosos criterios de salida. Si las pruebas ejecutan una acción determinada (estructura SI) en caso de éxito o de fracaso, un error en una condición de salida puede hacer que el número de bucles sea incorrecto, que nunca entren o, peor aún...

Mientras

1. Estructura general

El bucle de tipo "MientrasQue" permite repetir un bloque de instrucciones siempre que se verifique la condición bajo prueba, es decir, que sea verdadera. Su sintaxis es la siguiente:

MientrasQue booleano Hacer  
  Bloque de instrucciones  
FinMientrasQue 

Cuando el programa se ejecuta, llega a la instrucción "MientrasQue". Evalúa la expresión booleana (una o más condiciones o una única variable). Si la expresión devuelve VERDADERO, el programa ejecuta las siguientes instrucciones hasta llegar a la instrucción "FinMientrasQue".  

Si es VERDADERO, entonces ejecuta las instrucciones de nuevo y así sucesivamente mientras la expresión devuelva VERDADERO. Si la expresión se vuelve falso, entonces el programa salta a la instrucción justo después de "FinMientrasQue". He aquí un ejemplo sencillo contando del 1 al 10:

PROGRAMA MQUE1  
VAR  
  Contador:entero  
INICIO  
  Contador1  
  MientrasQue Contador<=10 Hacer  
    Visualizar Contador  
    ContadorContador+1  
  FinMientrasQue  
FIN 

En PHP, el bucle "MientrasQue" se representa mediante "while()", con la expresión booleana entre paréntesis.

while(booleen) {  
  /* bloque de instrucciones */  
} 

Si sólo hay una instrucción en el bucle, los corchetes son innecesarios.

while(booleano) instrucción; 

Aquí está el código PHP correspondiente al algoritmo MQUE1:

<html>  
  <head><meta/>  
    <title>mque1</title>  
  </head>  
  <body>  
   <?php  
  
  $cpt=1;  
  while($contador<=10) {  
    echo "$contador<br />";  
    $contador++;  
  }  
  ?>  
  </body>  
</html> 

2. Bucles infinitos y break

Asegúrese siempre de que su bucle tiene una condición...

Repetir ... Hasta

1. Diferencias fundamentales

A pesar de la abundancia de ejemplos vistos hasta ahora, la estructura iterativa "MientrasQue" no es la única. Aunque es posible programar todo con este tipo de bucle, aún faltan dos, entre ellos la estructura "Repetir ... Hasta". Su pseudocódigo es el siguiente:

Repetir  
  Bloque de instrucciones  
Hasta booleano 

“Repetir" es muy similar a "MientrasQue", pero con dos diferencias importantes:

  • Pase lo que pase, siempre habrá al menos una pasada por el bucle: el bloque de instrucciones se ejecutará al menos una vez.

  • La expresión booleana final se invierte. Un "mientras a !=1" se convierte en un "hasta que a=1".

El "hasta" se entiende como "hasta que se verifique la condición". Para hacer un bucle infinito, hay que hacer:

Repetir  
  Bloque de instrucciones  
Hasta FALSO 

Volviendo al algoritmo para introducir la transcripción de los registros, que había causado algunos problemas, ahora es un poco más sencillo:

PROGRAMA REPITE  
VAR  
  Nota:entero  
Inicio  
  Repetir  
    Escribir "Escriba una nota"  
    Leer nota  
    Si nota<-1 O nota>20 Entonces  
      Repetir  ...

Para ... FinPara

1. Una estructura para contar

La tercera y última estructura iterativa en algoritmos es el bucle "Para … FinPara", que se utiliza casi exclusivamente para contadores. Cada vez que se pasa por el bucle, se incrementa o decrementa un contador, según corresponda. Esto se conoce como una estructura incremental.

Su sintaxis en pseudocódigo es la siguiente:

Para variable De inicio a fin [PASO paso] Hacer  
  Bloque de instrucciones  
FinPara 

Cada vez que pase por el bucle, la variable tomará sucesivamente cada uno de los valores del intervalo [a;b] (incluyendo a y b). El tamaño del paso es opcional y es 1 por defecto. El siguiente pseudocódigo cuenta de 1 a 10:

Variable contador en Numerico  
Inicio  
  Para contador De 1 hasta 10 Hacer  
    Escribir contador  
  FinPara  
Fin 

Puede encontrar sintaxis ligeramente diferentes, pero todas son equivalentes:

Para variable Yendo Desde inicio hasta fin [PASO paso] Hacer  
  Bloque de instrucciones  
FinPara 

O:

Para contador  inicio a fin [Paso paso]  
  Bloque de instrucciones  
contado siguiente 

En esta última forma, es interesante observar que, es más fácil orientarse en el caso de bucles que contienen un gran bloque de instrucciones, ya que la variable se repite en la sintaxis de fin de bucle. Por último, es posible encontrar sintaxis alternativas derivadas de estas tres formas.

2. ... pero no imprescindible

Se habrá dado cuenta rápidamente de que este bucle sólo se utiliza para los contadores. Es decir, todo lo que hace ya es posible con las estructuras "MientrasQue" y "Repetir". Sólo que con "Para" no tiene que calcular tú mismo el contador. Así que es una simplificación.

No hay ningún caso en el que la estructura "Para FinPara" sea estrictamente necesaria. Simplemente simplifica las otras estructuras iterativas cuando se utilizan contadores.

3. ¿Qué estructura elegir?

Pero, ¿cuándo hay que utilizar una estructura determinada? Una estructura "Para" se utiliza cuando se conoce de antemano el número de iteraciones necesarias para el tratamiento. Este número puede ser fijo o calculado con antelación...

Ejercicios

Ejercicio 1

Escriba un algoritmo que pida un número inicial y luego calcule la suma de los enteros hasta ese número. Ejemplo con el número 6:

1+2+3+4+5+6 = 21 

Escriba el programa PHP equivalente.

Ejercicio 2

Escriba un algoritmo que pida un número inicial y luego muestre la tabla de multiplicar de ese número. Ejemplo con el número 6:

Tabla del 6:  
6 x 1 = 6  
6 x 2 = 12  
6 x 3 = 18  
... 

Escriba el programa PHP equivalente.

Ejercicio 3

Escriba un algoritmo que pida un número inicial y luego muestre el factorial de ese número. Ejemplo con el número 7:

1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040

Escriba el algoritmo utilizando el bucle Para y luego el bucle MientrasQue.

Escribe el programa PHP equivalente.

Ejercicio 4

Escriba un algoritmo que pida un número y realice el siguiente cálculo (ejemplo con el número 9):

1 + 1/1 + 1/(1*2)+1/(1*2*3)+1/(1*2*3*4)+...+1/(1*2*3*4*5*6*7*8*9)

Escriba el programa PHP equivalente.

Ejercicio 5

Escriba un algoritmo que pida un número mayor que 100 y luego busque su mayor divisor entero entre 2 y 100. Por ejemplo, para 150, el mayor divisor entre 2 y 100 es 75.

Escriba el programa PHP equivalente.

Ejercicio 6

Escriba un algoritmo que pida un número y luego calcule la última ocurrencia de la sucesión de Fibonacci para ese número. La sucesión de Fibonacci es una sucesión de números enteros...