Logo Studenta

programacion c ejercicios resueltos-71

¡Estudia con miles de materiales!

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