En la lección Bucles for se explica la sintaxis del bucle for. En la definición del bucle se suele emplear una variable que juega el papel de variable de control del propio bucle, que puede aparecer en el cuerpo del bucle, pero que normalmente no se modifica en el cuerpo del bucle.
Pero en los cuerpos de los bucles pueden intervenir otras variables, que no suelen intervenir en el control del bucle, pero que realizan tareas necesarias para el programa. En esta lección se comentan tres tipos de situaciones, que podemos denominar testigos, contadores o acumuladores, por el papel que juegan esas variables adicionales.
Se entiende por testigo una variable que indica simplemente si una condición se ha cumplido o no. Es un caso particular de contador, pero se suele hacer con variables lógicas en vez de numéricas.
En el ejemplo siguiente, el programa indica si al simular unas tiradas de dados se ha obtenido algún 5. La variable que hace de testigo es la variable $hayCinco).
Ejemplo de testigo
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 4</p>
<p>Ha salido al menos un 5.</p>
<p>Final</p>
Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.
Ejemplo de testigo - Paso 1
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
Se ejecuta la primera instrucción del programa.
En este caso, imprime el párrafo de comienzo.
Ejemplo de testigo - Paso 2
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
Se ejecuta la segunda instrucción del programa.
En este caso, inicializa la variable $hayCinco.
Ejemplo de testigo - Paso 3
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
A continuación se ejecuta el bucle. El primer paso es dar el valor inicial a la variable de control.
En este caso, la variable de control es $i y toma el valor 0.
Ejemplo de testigo - Paso 4
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i es inferior a 3 (vale 0), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de testigo - Paso 5
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
A continuación se ejecutan las instrucciones del bloque.
Se obtiene un valor aleatorio entre 1 y 6, por ejemplo, 1.
Ejemplo de testigo - Paso 6
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
Se imprime el valor obtenido.
Ejemplo de testigo - Paso 7
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
A continuación se comprueba si el dado tiene el valor 5.
Como en este caso el valor es 1, la condición no se cumple, por lo que no se ejecutarán las instrucciones del bucle if y se termina el bloque de instrucciones del bucle for.
Ejemplo de testigo - Paso 8
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
A continuación se ejecuta la instrucción de paso.
En este caso, la variable $i aumenta una unidad, por lo que ahora vale 1.
Ejemplo de testigo - Paso 9
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i es inferior a 3 (vale 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de testigo - Paso 10
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
A continuación se ejecutan las instrucciones del bloque.
Se obtiene un valor aleatorio entre 1 y 6, por ejemplo, 5.
Ejemplo de testigo - Paso 11
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
Se imprime el valor obtenido.
Ejemplo de testigo - Paso 12
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
A continuación se comprueba si el dado tiene el valor 5.
Como en este caso el valor es 5, la condición se cumple, por lo que se ejecutarán las instrucciones del bucle if.
Ejemplo de testigo - Paso 13
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
La variable $hayCinco pasa a tomar el valor true y se termina el bloque de instrucciones del bucle if.
Ejemplo de testigo - Paso 14
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
A continuación se ejecuta la instrucción de paso.
En este caso, la variable $i aumenta una unidad, por lo que ahora vale 2.
Ejemplo de testigo - Paso 15
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i es inferior a 3 (vale 2), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de testigo - Paso 16
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
A continuación se ejecutan las instrucciones del bloque.
Se obtiene un valor aleatorio entre 1 y 6, por ejemplo, 4.
Ejemplo de testigo - Paso 17
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 4</p>
Se imprime el valor obtenido.
Ejemplo de testigo - Paso 18
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 4</p>
A continuación se comprueba si el dado tiene el valor 5.
Como en este caso el valor es 4, la condición no se cumple, por lo que no se ejecutarán las instrucciones del bucle if y se termina el bloque de instrucciones del bucle for.
Ejemplo de testigo - Paso 19
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 4</p>
A continuación se ejecuta la instrucción de paso.
En este caso, la variable $i aumenta una unidad, por lo que ahora vale 3.
Ejemplo de testigo - Paso 20
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 4</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i ya no es inferior a 3 (vale 3), así que el bucle se termina y ya no se ejecutarán las instrucciones del bloque de sentencias.
Ejemplo de testigo - Paso 21
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 4</p>
A continuación se comprueba la condición del if, que en este caso es el valor de la variable $hayCinco.
Como $hayCinco es ahora true, se cumple la condición, así que se ejecuta el bloque correspondiente.
Ejemplo de testigo - Paso 22
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 4</p>
<p>Ha salido al menos un 5.</p>
Imprime la frase que indica que se ha encontrado al menos un 5.
Ejemplo de testigo - Paso 23
<?php
print "<p>Comienzo</p>\n";
$hayCinco = false;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$hayCinco = true;
}
}
if ($hayCinco) {
print "<p>Ha salido al menos un 5.</p>\n";
} else {
print "<p>No ha salido ningún 5.</p>\n";
}
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 4</p>
<p>Ha salido al menos un 5.</p>
<p>Final</p>
Por último, imprime el párrafo final.
Detalles importantes:
Se entiende por contador una variable que lleva la cuenta del número de veces que se ha cumplido una condición.
En el ejemplo siguiente, el programa indica cuántos 5 se han obtenido al simular unas tiradas de dados. La variable que hace de contador es la variable $cuenta).
Ejemplo de contador
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 5</p>
<p>Han salido 2 cinco(s).</p>
<p>Final</p>
Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.
Ejemplo de contador - Paso 1
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
Se ejecuta la primera instrucción del programa.
En este caso, imprime el párrafo de comienzo.
Ejemplo de contador - Paso 2
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
Se ejecuta la segunda instrucción del programa.
En este caso, inicializa la variable $cuenta.
Ejemplo de contador - Paso 3
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
A continuación se ejecuta el bucle. El primer paso es dar el valor inicial a la variable de control.
En este caso, la variable de control es $i y toma el valor 0.
Ejemplo de contador - Paso 4
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i es inferior a 3 (vale 0), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de contador - Paso 5
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
A continuación se ejecutan las instrucciones del bloque.
Se obtiene un valor aleatorio entre 1 y 6, por ejemplo, 1.
Ejemplo de contador - Paso 6
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
Se imprime el valor obtenido.
Ejemplo de contador - Paso 7
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
A continuación se comprueba si el dado tiene el valor 5.
Como en este caso el valor es 1, la condición no se cumple, por lo que no se ejecutarán las instrucciones del bucle if y se termina el bloque de instrucciones del bucle for.
Ejemplo de contador - Paso 8
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
A continuación se ejecuta la instrucción de paso.
En este caso, la variable $i aumenta una unidad, por lo que ahora vale 1.
Ejemplo de contador - Paso 9
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i es inferior a 3 (vale 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de contador - Paso 10
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
A continuación se ejecutan las instrucciones del bloque.
Se obtiene un valor aleatorio entre 1 y 6, por ejemplo, 5.
Ejemplo de contador - Paso 11
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
Se imprime el valor obtenido.
Ejemplo de contador - Paso 12
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
A continuación se comprueba si el dado tiene el valor 5.
Como en este caso el valor es 5, la condición se cumple, por lo que se ejecutarán las instrucciones del bucle if.
Ejemplo de contador - Paso 13
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
Se aumenta en un unidad la variable $cuenta, que pasa a tomar el valor 1 y se termina el bloque de instrucciones del bucle if.
Ejemplo de contador - Paso 14
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
A continuación se ejecuta la instrucción de paso.
En este caso, la variable $i aumenta una unidad, por lo que ahora vale 2.
Ejemplo de contador - Paso 15
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i es inferior a 3 (vale 2), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de contador - Paso 16
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
A continuación se ejecutan las instrucciones del bloque.
Se obtiene un valor aleatorio entre 1 y 6, por ejemplo, 5.
Ejemplo de contador - Paso 17
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 5</p>
Se imprime el valor obtenido.
Ejemplo de contador - Paso 18
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 5</p>
A continuación se comprueba si el dado tiene el valor 5.
Como en este caso el valor es 5, la condición se cumple, por lo que se ejecutarán las instrucciones del bucle if.
Ejemplo de contador - Paso 19
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 5</p>
Se aumenta en un unidad la variable $cuenta, que pasa a tomar el valor 2 y se termina el bloque de instrucciones del bucle if.
Ejemplo de contador - Paso 20
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 5</p>
A continuación se ejecuta la instrucción de paso.
En este caso, la variable $i aumenta una unidad, por lo que ahora vale 3.
Ejemplo de contador - Paso 21
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 5</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i ya no es inferior a 3 (vale 3), así que el bucle se termina y ya no se ejecutarán las instrucciones del bloque de sentencias.
Ejemplo de contador - Paso 22
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 5</p>
<p>Han salido 2 cinco(s).</p>
Imprime la frase que indica que en este caso se han encontrado 2 cincos.
Ejemplo de contador - Paso 23
<?php
print "<p>Comienzo</p>\n";
$cuenta = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
if ($dado == 5) {
$cuenta++;
}
}
print "<p>Han salido $cuenta cinco(s).</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
<p>Tirada de dado: 5</p>
<p>Han salido 2 cinco(s).</p>
<p>Final</p>
Por último, imprime el párrafo final.
Detalles importantes:
Se entiende por acumulador una variable que acumula el resultado de una operación.
En el ejemplo siguiente, el programa calcula el total de puntos obtenido al simular unas tiradas de dados. La variable que hace de acumulador es la variable $total).
Ejemplo de acumulador
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 6</p>
<p>Ha obtenido 11 puntos.</p>
<p>Final</p>
Puede ver la ejecución paso a paso de este programa utilizando los iconos de avance y retroceso situados abajo a la derecha.
Ejemplo de acumulador - Paso 1
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
Se ejecuta la primera instrucción del programa.
En este caso, imprime el párrafo de comienzo.
Ejemplo de acumulador - Paso 2
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
Se ejecuta la segunda instrucción del programa.
En este caso, inicializa la variable $total.
Ejemplo de acumulador - Paso 3
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
A continuación se ejecuta el bucle. El primer paso es dar el valor inicial a la variable de control.
En este caso, la variable de control es $i y toma el valor 0.
Ejemplo de acumulador - Paso 4
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i es inferior a 3 (vale 0), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de acumulador - Paso 5
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
A continuación se ejecutan las instrucciones del bloque.
Se obtiene un valor aleatorio entre 1 y 6, por ejemplo, 4.
Ejemplo de acumulador - Paso 6
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
Se imprime el valor obtenido.
Ejemplo de acumulador - Paso 7
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
A continuación se aumenta la variable $total con el valor de la variable $dado.
En este caso, la variable $total pasa de valer 0 a valer 4.
Ejemplo de acumulador - Paso 8
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
A continuación se ejecuta la instrucción de paso.
En este caso, la variable $i aumenta una unidad, por lo que ahora vale 1.
Ejemplo de acumulador - Paso 9
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i es inferior a 3 (vale 1), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de acumulador - Paso 10
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
A continuación se ejecutan las instrucciones del bloque.
Se obtiene un valor aleatorio entre 1 y 6, por ejemplo, 1.
Ejemplo de acumulador - Paso 11
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
Se imprime el valor obtenido.
Ejemplo de acumulador - Paso 12
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
A continuación se aumenta la variable $total con el valor de la variable $dado.
En este caso, la variable $total pasa de valer 4 a valer 1.
Ejemplo de acumulador - Paso 13
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
A continuación se ejecuta la instrucción de paso.
En este caso, la variable $i aumenta una unidad, por lo que ahora vale 2.
Ejemplo de acumulador - Paso 14
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i es inferior a 3 (vale 2), así que se pasa a ejecutar las instrucciones del bloque de sentencias.
Ejemplo de acumulador - Paso 15
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
A continuación se ejecutan las instrucciones del bloque.
Se obtiene un valor aleatorio entre 1 y 6, por ejemplo, 6.
Ejemplo de acumulador - Paso 16
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 5</p>
Se imprime el valor obtenido.
Ejemplo de acumulador - Paso 17
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 6</p>
A continuación se aumenta la variable $total con el valor de la variable $dado.
En este caso, la variable $total pasa de valor 5 a valer 11.
Ejemplo de acumulador - Paso 18
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 6</p>
A continuación se ejecuta la instrucción de paso.
En este caso, la variable $i aumenta una unidad, por lo que ahora vale 3.
Ejemplo de acumulador - Paso 19
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 6</p>
A continuación se comprueba que la condición de continuación se cumple.
En este caso, $i ya no es inferior a 3 (vale 3), así que el bucle se termina y ya no se ejecutarán las instrucciones del bloque de sentencias.
Ejemplo de acumulador - Paso 20
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 6</p>
<p>Ha obtenido 11 puntos.</p>
Imprime la frase que indica el total de puntos obtenidos, 11.
Ejemplo de acumulador - Paso 21
<?php
print "<p>Comienzo</p>\n";
$total = 0;
for ($i = 0; $i < 3; $i++) {
$dado = rand(1, 6);
print "<p>Tirada de dado: $dado</p>\n";
$total = $total + $dado;
}
print "<p>Ha obtenido $total puntos.</p>\n";
print "<p>Final</p>\n";
?>
<p>Comienzo</p>
<p>Tirada de dado: 4</p>
<p>Tirada de dado: 1</p>
<p>Tirada de dado: 6</p>
<p>Ha obtenido 11 puntos.</p>
<p>Final</p>
Por último, imprime el párrafo final.
Detalles importantes: