132
Capítulo 4 Instrucciones de control: parte 1
Figura 4.9
| Repetición controlada por centinela: problema del promedio de una clase. (Parte 3 de 3).
Comparación entre la lógica del programa para la repetición controlada por centinela, y la repetición
controlada por contador
Compare la lógica de esta aplicación para la repetición controlada por centinela con la repetición controlada por
contador en la fi gura 4.6. En la repetición controlada por contador, cada iteración de la instrucción
while
(líneas
52 a 58 de la fi gura 4.6) lee un valor del usuario, para el número especifi cado de iteraciones. En la repetición
controlada por centinela, el programa lee el primer valor (líneas 53 y 54 de la fi gura 4.9) antes de llegar al
whi-
le
. Este valor determina si el fl ujo de control del programa debe entrar al cuerpo del
while
. Si la condición del
while
es falsa, el usuario introdujo el valor centinela, por lo que el cuerpo del
while
no se ejecuta (es decir, no
se introdujeron califi caciones). Si, por otro lado, la condición es verdadera, el cuerpo comienza a ejecutarse y el
ciclo suma el valor de
calificacion
al
total
(línea 59). Después, las líneas 63 y 64 en el cuerpo del ciclo reciben
el siguiente valor escrito por el usuario. A continuación, el control del programa se acerca a la llave derecha de
terminación (
}
) del cuerpo del ciclo en la línea 65, por lo que la ejecución continúa con la evaluación de la con-
dición del
while
(línea 57). La condición utiliza el valor más reciente de
calificacion
que acaba de introducir
el usuario, para determinar si el cuerpo de la instrucción
while
debe ejecutarse otra vez. Observe que el valor
de la variable
calificacion
siempre lo introduce el usuario inmediatamente antes de que el programa evalúe la
condición del
while
. Esto permite al programa determinar si el valor que acaba de introducir el usuario es el valor
centinela,
antes de que el programa procese ese valor (es decir, que lo sume al
total
). Si el valor introducido es el
valor centinela, el ciclo termina y el programa no suma –1 al
total
.
Buena práctica de programación 4.6
En un ciclo controlado por centinela, los indicadores que solicitan la introducción de datos deben recordar explícita-
mente al usuario el valor que representa al centinela.
Una vez que termina el ciclo se ejecuta la instrucción
if...else
en las líneas 69 a 80. La condición en la
línea 69 determina si se introdujeron califi caciones o no. Si no se introdujo ninguna, se ejecuta la parte del
else
(líneas 79 y 80) de la instrucción
if...else
y muestra el mensaje
"No se introdujeron calificaciones"
, y
el método devuelve el control al método que lo llamó.
Observe el bloque de la instrucción
while
en la fi gura 4.9 (líneas 58 a 65). Sin las llaves, el ciclo considera-
ría que su cuerpo sólo consiste en la primera instrucción, que suma la
calificacion
al
total
.Las últimas tres
instrucciones en el bloque quedarían fuera del cuerpo del ciclo, ocasionando que la computadora interpretara el
código incorrectamente, como se muestra a continuación:
while
( calificacion !=
-1
)
total = total + calificacion;
// suma calificación al total
contadorCalif = contadorCalif +
1
;
// incrementa el contador
// obtiene como entrada la siguiente calificación del usuario
System.out.print(
"Escriba calificacion o –1 para terminar: "
);
calificacion = entrada.nextInt();
El código anterior ocasionaría un ciclo infi nito en el programa, si el usuario no introduce el centinela
–1
como
valor de entrada en la línea 54 (antes de la instrucción
while
).
78
}
// fin de if
79
else
//no se introdujeron calificaciones, por lo que se imprime el mensaje
apropiado
80
System.out.println(
"No se introdujeron calificaciones"
);
81
}
// fin del método determinarPromedioClase
82
83
}
// fin de la clase LibroCalificaciones
04_MAQ_CAP_04.indd132
4/19/081:20:43AM