Vista previa del material en texto
Caso práctico de resolución de problemas | 183 Principal Obtener datos Probar datos Calcula IMC Imprimir mensaje Obtener datos Nivel 1 Solicitar el peso Leer el peso Solicitar la estatura Leer la estatura Probar datos SI peso < 0 O estatura < 0 Establecer en falso dataAreOK DE OTRO MODO Establecer en verdadero dataAreOK Calcular el IMC Establecer el índice de masa corporal en peso * 703/(estatura * estatura) Imprimir mensaje que indica estado El problema no dice exactamente cuál debe ser el mensaje, sólo reportar el estado. Por qué no hacer un poco cordial el resultado imprimiendo un mensaje junto con el estado. Estado Mensaje Debajo del peso normal Tome una malteada. Normal Tome un vaso de leche. Sobrepeso Tome un té helado. Obeso Consulte a su médico. Imprimir “Su índice de masa corporal es”, bodyMassIndex, ‘.’ Imprimir “Interpretación e instrucciones.” SI bodyMassIndex < 20 Imprimir “Debajo del peso normal: tome una malteada.” DE OTRO MODO SI bodyMassIndex <= 25 Imprimir “Normal: tome un vaso de leche.” DE OTRO MODO SI bodyMassIndex <= 30 Imprimir “Sobrepeso: tome un vaso de té helado.” DE OTRO MODO Imprimir “Obeso: consulte a su médico.” Gráfi ca de estructura de módulo Dale005.indd 183Dale005.indd 183 4/12/06 19:00:594/12/06 19:00:59 www.FreeLibros.me 184 | Capítulo 5: Condiciones, expresiones lógicas y estructuras de control de selección Constantes Nombre Valor Función BMI_CONSTANT 703 Constante de fórmula Variables Nombre Tipo de datos Descripción weight fl oat Peso en libras height fl oat Estatura en pulgadas bodyMassIndex fl oat Índice de masa corporal dataAreOK bool Informa si los datos son correctos //**************************************************************** // Programa IMC // Este programa calcula el índice de masa corporal (IMC) dado un peso // en libras y una estatura en pulgadas e imprime un mensaje de salud // con base en el IMC. Introduzca los datos en medidas inglesas. //***************************************************************** #include <iostream> using namespace std; int main() { const int BMI_CONSTANT = 703; // Constante en la fórmula no métrica fl oat weight; // Peso en peso fl oat height; // Estatura en estatura fl oat bodyMassIndex; // IMC apropiado bool dataAreOK; // Verdadero si los datos no son negativos // Prompt for and input weight and height cout << "Introduzca su peso en libras. " << endl; cin >> weight; cout << "Introduzca su estatura en pulgadas. " << endl; cin >> height; // Datos de prueba if (weight < 0 || height < 0) dataAreOK = false; else dataAreOK = true; if ( dataAreOK) { // Calcular el índice de masa corporal bodyMassIndex = weight * BMI_CONSTANT / (height * height); Dale005.indd 184Dale005.indd 184 4/12/06 19:01:004/12/06 19:01:00 www.FreeLibros.me // Imprimir el mensaje que indica el estado cout << "Su índice de masa corporal es " << bodyMassIndex << ". " << endl; cout << "Interpretación e instrucciones. " << endl; if (bodyMassIndex < 20) cout << "Peso debajo del normal: tome una malteada. " << endl; else if (bodyMassIndex <= 25) cout << "Normal: tome un vaso de leche. " << endl; else if (bodyMassIndex <= 30) cout << "Sobrepeso: tome un vaso de té helado. " << endl; else cout << "Obeso: consulte a su médico. " << endl; } else cout << "Datos no válidos; el peso y la estatura deben ser positivos." << endl; return 0; } Aquí se presentan las pantallas con datos buenos y malos Caso práctico de resolución de problemas | 185 En este programa, se usa una estructura If anidada que es fácil entender aunque es un poco inefi ciente. Se asig- na un valor a dataAreOK en una sentencia antes de probarla en el texto. Se podría reducir el código al escribir dataAreOK = !(weight < 0 || height < 0); Si se emplea la ley de DeMorgan, esta sentencia se podría escribir también como: dataAreOK = (weight >= 0 && height >= 0); De hecho, se podría reducir el código aún más al eliminar la variable dataAreOK y usar: if (weight => 0 && height >= 0) : Las imágenes mostradas corresponden a la salida producida por el programa original, escrito en idioma inglés. Dale005.indd 185Dale005.indd 185 4/12/06 19:01:034/12/06 19:01:03 www.FreeLibros.me