Logo Studenta

programacion c ejercicios resueltos-72

¡Estudia con miles de materiales!

Vista previa del material en texto

186 | Capítulo 5: Condiciones, expresiones lógicas y estructuras de control de selección
en lugar de
if (dataAreOK)
 :
Para convencerse usted mismo de que estas tres variaciones funcionan, inténtelas a mano con algunos datos 
de prueba. Si todas estas sentencias hacen lo mismo, ¿cómo elige una para usarla? Si su objetivo es la efi ciencia, la 
variación fi nal, la condición compuesta en la sentencia If principal, es mejor. Si su intención es tratar de expresar 
su código lo más claro posible, la forma más larga mostrada en el programa puede ser mejor. Las otras variaciones 
están en alguna parte intermedia. (Sin embargo, algunas personas encontrarían que la condición compuesta en 
la sentencia If principal no es sólo la más efi caz, sino la más fácil de entender.) No hay reglas absolutas para seguir 
aquí, pero la pauta general es esforzarse por lograr claridad, incluso si debe sacrifi car un poco de efi ciencia.
Prueba y depuración
En el capítulo 1 se analizaron las fases de resolución de problemas y ejecución de la programación 
en computadora. Probar es parte integral de ambas fases. Aquí se prueban ambas fases del proceso 
empleado para desarrollar el programa del IMC. La prueba en la fase de resolución del problema se 
hace después de que se desarrolló la solución, pero antes de ponerla en práctica. En la fase de imple-
mentación se prueba después de que el algoritmo se tradujo en un programa, y de nuevo después de 
que el programa se ha compilado con éxito. La compilación en sí es otra etapa de prueba que se 
efectúa de manera automática.
Prueba en la fase de resolución del problema: repaso del algoritmo
Determinar precondiciones y poscondiciones Para probar durante la fase de resolución del proble-
ma, se hace un repaso del algoritmo. Para cada módulo de la descomposición funcional, se establece 
una afi rmación denominada precondición y otra nombrada poscondi-
ción. Una precondición es una afi rmación que debe ser verdadera antes de 
ejecutar un módulo, a fi n de que el módulo se ejecute de manera correc-
ta. Una poscondición es una afi rmación que debe ser verdadera después de 
que se ejecutó el módulo, si ha hecho su trabajo correctamente. Para 
probar un módulo, se “repasan” los pasos del algoritmo para confi rmar 
que producen la poscondición requerida, dada la precondición estándar.
Nuestro algoritmo tiene cinco módulos: el módulo Principal, Obtener datos, Probar datos, Calcular 
el IMC e Imprimir un mensaje que indica el estado. En general, no hay precondición para el módulo 
principal. La poscondición del módulo principal es que produzca los resultados correctos, dada la 
entrada correcta. De modo más específi co, la poscondición para el módulo principal es:
• La computadora ha introducido dos valores reales en weight y height.
• Si la entrada no es válida, se imprime un mensaje de error; de lo contrario, el índice de masa 
corporal ha sido calculado y se imprime un mensaje apropiado con base en el resultado.
Debido a que Obtener datos es el módulo principal ejecutado en el algoritmo y a que en él no se 
supone nada acerca del contenido de las variables que se manejarán, no tiene precondición.
Su poscondición es que dataAreOK contiene true si los valores en weight y height son no 
negativos; de lo contrario, dataAreOK contiene false.
La precondición para el módulo Calcular el IMC es que weight y height contienen valores 
signifi cativos. Su poscondición es que la variable llamada bodyMassIndex contiene la evaluación de 
la fórmula para el IMC (peso * 703 /(estatura * estatura)).
La precondición para el módulo Imprimir mensaje que indica el estado es que bodyMassIndex 
contiene el resultado de evaluar la fórmula del IMC. Su poscondición es que se han impreso la docu-
Precondición Afi rmación que debe ser verdadera antes 
de ejecutar un módulo.
Poscondición Afi rmación que debe ser verdadera des-
pués de que se ejecutó un módulo.
Dale005.indd 186Dale005.indd 186 4/12/06 19:01:054/12/06 19:01:05
 www.FreeLibros.me
mentación apropiada y el valor de bodyMassIndex, junto con los mensajes: “Peso debajo del nor-
mal: tome una malteada.”, si el valor del IMC es menor que 20; “Normal: tome un vaso de leche.”, si 
el valor es menor que o igual a 26; “Sobrepeso: tome un vaso de té helado.”, si el valor es menor que 
o igual a 30, y “ Obeso: consulte a su médico.”, si el valor es mayor que 30.
A continuación se resumen las precondiciones y poscondiciones del módulo en forma tabular. 
En la tabla se usa AND con su signifi cado usual en una afi rmación, la operación lógica AND. 
Asimismo, una frase como “someVariable está asignada” es una forma abreviada de afi rmar que a 
someVariable ya se le asignó un valor signifi cativo.
Módulo Precondición Poscondición
Principal — Dos valores fl oat han sido introducidos AND si la 
entrada es válida, se calcula la fórmula del IMC y se 
imprime el valor con un mensaje apropiado; de lo 
contrario, se ha impreso un mensaje de error.
Obtener datos — se han introducido weight y height
Probar datos weight y height son valores dataAreOK contiene true si
 asignados weight y height son no negativos; de otro 
modo, dataAreOK contiene false.
Calcular IMC weight y height son valores bodyMassIndex contiene la evaluación
 asignados de la fórmula del IMC.
Imprimir mensaje bodyMassIndex contiene la El valor de bodyMassIndex ha sido
Indicar estado evaluación de la fórmula del IMC impreso, junto con un mensaje que
 interpreta el valor.
Efectuar el repaso del algoritmo Ahora que se han establecido las precondiciones y poscondiciones, 
se repasa el módulo principal. En este punto, sólo interesan los pasos del módulo principal, así que 
por el momento se supone que cada módulo de nivel inferior se ejecuta de modo correcto. En cada 
paso se deben determinar las condiciones actuales. Si el paso es una referencia a otro módulo, se debe 
comprobar que las condiciones actuales satisfacen la precondición de ese módulo.
Se empieza con la primera sentencia del módulo principal. Obtener datos no tiene una precondi-
ción, y se supone que Obtener datos satisface su poscondición de que introduce de manera correcta 
dos valores reales en weight y height.
La precondición para el módulo Probar datos es que weight y height son valores asignados. 
Éste debe ser el caso si la poscondición de Obtener datos es verdadera. De nuevo, debido a que sólo 
interesa el paso a nivel 0, se supone que Probar datos satisface su poscondición de que dataAreOK
contiene true o false, dependiendo de los valores de entrada.
A continuación, la sentencia If comprueba si dataAreOK es true. Si es así, el algoritmo ejecuta 
la cláusula then. Suponiendo que Calcular IMC evalúa de manera correcta la fórmula del IMC y que 
Imprimir mensaje indicando el estado imprime el resultado y el mensaje apropiado (recuerde: por 
ahora se está suponiendo que los módulos de nivel inferior son correctos), entonces la cláusula then 
de la sentencia If es correcta. Si el valor en dataAreOK es false, el algoritmo ejecuta la cláusula else 
e imprime un mensaje de error.
Ahora se ha comprobado que el módulo principal (nivel 0) es correcto, suponiendo que los mó-
dulos del nivel 1 son correctos. El siguiente paso es examinar cada módulo en el nivel 1 y contestar 
esta pregunta: si se supone que los módulos (si existen) del nivel 2 son correctos, ¿este módulo de 
nivel 1 hace lo que se supone tiene que hacer? Simplemente se repite el proceso de repaso para cada 
módulo, empezando con su precondición particular. En este ejemplo, no hay módulos de nivel 2, así 
que deben estar completos los módulos del nivel 1.
Obtener datos lee correctamente dos valores —weight y height—, así que satisfacen su poscon-
dición. (El siguiente refi namiento es codifi car la instrucción en C++. Si está codifi cada o no de ma-
Prueba y depuración | 187
Dale005.indd 187Dale005.indd 187 4/12/06 19:01:074/12/06 19:01:07
 www.FreeLibros.me
188 | Capítulo 5: Condiciones, expresiones lógicas y estructurasde control de selección
nera correcta, no es asunto de esta fase; se trata con el código cuando se efectúa la prueba en la fase 
de implementación.)
Probar datos comprueba si ambas variables contienen valores no negativos. La condición If usa 
correctamente operadores OR para combinar las expresiones relacionales de modo que si cualquiera 
de ellas es true, se ejecuta la cláusula then. Así, se asigna false a dataAreOK si alguno de los 
números es negativo; de otro modo, se asigna true. Por tanto, el módulo satisface su poscondición.
Calcular IMC evalúa la fórmula del IMC: peso * 703 /(estatura * estatura). Por consiguiente, la 
poscondición requerida es verdadera. ¿Pero qué pasa si el valor de la estatura es 0? Se comprobó que 
las entradas sean no negativas, pero se olvidó que la estatura se usa como divisor y no puede ser cero. 
Será necesario arreglar este problema antes de liberar este programa para uso general.
Imprimir mensaje que indique el estado produce el valor en bodyMassIndex con documentación 
apropiada. Luego compara el resultado con los estándares e imprime la interpretación apropiada. Se 
imprime “Peso debajo del normal: tome una malteada.”, si el valor es menor que 20; “Normal: tome 
un vaso de leche.”, si el valor es menor o igual a 26; “Sobrepeso: tome un vaso de té helado.”, si el 
valor es menor que o igual a 30, y “Obeso: consulte a su médico.”, si el valor es mayor que 30. Así, 
el módulo satisface su poscondición.
Una vez completado el repaso del algoritmo, se tiene que corregir cualquier discrepancia y repe-
tir el proceso. Cuando se sabe que los módulos hacen lo que se supone tienen que hacer, se empieza 
a traducir el algoritmo en el lenguaje de programación.
Una poscondición estándar para cualquier programa es que el usuario ha sido notifi cado de datos 
no válidos. Se debe validar todo valor de entrada para el cual aplica cualquier restricción. Una sen-
tencia If de validación de datos prueba un valor de entrada y produce un mensaje de error si el valor 
no es aceptable. (Se validan los datos cuando se prueban valores negativos en el programa del IMC.) 
El mejor lugar para validar los datos es inmediatamente después de su ingreso. Para satisfacer la 
poscondición de validación de datos, el algoritmo debe probar también los valores de entrada para 
asegurar que no son demasiado grandes o demasiado pequeños.
Prueba en la fase de implementación
Ahora que se ha hablado acerca de la prueba en la fase de resolución de problemas, se dirige la aten-
ción a la prueba en la fase de implementación. En esta fase es necesario probar en varios puntos.
Repaso del código Después de escribir el código, se debe revisar línea por línea para asegurarse de 
que el algoritmo se reprodujo fi elmente, un proceso conocido como repaso del código. En una situa-
una piedra
computarizada ¿inventaste una piedra que maldice?
ése es sólo el cursor
JUGUetes JUGUetes
¿Qué es 
esto?
A.C. Por Johnny Hart
Con la autorización de Johny Hart and Creators Syndicate, Inc.
Dale005.indd 188Dale005.indd 188 4/12/06 19:01:094/12/06 19:01:09
 www.FreeLibros.me

Continuar navegando