Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
if (hours <= 40.0) pay = rate * hours; else pay = rate * (40.0 + (hours – 40.0) * 1.5); cout << pay; En términos de instrucciones para la computadora, el fragmento de código anterior dice, “Si hours es menor que o igual a 40.0, calcule el pago regular y luego continúe con la ejecución de la sentencia de salida. Pero si hours es mayor que 40, calcule el pago regular y el pago por tiempo extra, y des- pués prosiga con la ejecución de la sentencia de salida”. En la fi gura 5-4 se muestra el fl ujo de control de esta sentencia If. If-Then-Else se emplea con frecuencia para comprobar la validez de la entrada. Por ejemplo, antes de pedir a la computadora que divida entre un valor, se debe estar seguro de que el valor no sea cero. (Incluso las computadoras no pueden dividir entre cero. Si lo intenta, la mayoría de las 5.3 Sentencia If | 171 Figura 5-3 Flujo de control de If-Then-Else Sentencia 1A Sentencia 1B if ( Expresión ) false true else Sentencia 2 pago = tarifa*horas; pago = tarifa*(40.0+(horas-40.0)*1.5); if ( horas <= 40.0 ) falso verdadero else cout << pago; Figura 5-4 Flujo de control para calcular el pago Dale005.indd 171Dale005.indd 171 4/12/06 19:00:404/12/06 19:00:40 www.FreeLibros.me 172 | Capítulo 5: Condiciones, expresiones lógicas y estructuras de control de selección computadoras detienen la ejecución de su programa.) Si el divisor es cero, el programa debe imprimir un mensaje de error. Aquí está el código: if (divisor != 0) result = dividend / divisor; else cout << "No se permite la división entre cero." << endl; Como otro ejemplo de If-Then-Else, suponga que se desea determinar dónde se localiza en una variable string la primera ocurrencia (si la hay) de la letra A. Recuerde, del capítulo 3, que la clase string tiene una función miembro llamada fi nd, que devuelve la posición donde se encontró el ítem (o la constante nombrada string::npos si no se encontró el ítem). El siguiente código produce el resultado de la búsqueda: string myString; string::size_type pos; M pos = myString.fi nd('A'); if (pos == string::npos) cout << "No se encontró 'A'" << endl; else cout << "Se encontró una 'A' en la posición " << pos << endl; Antes de ver algo más en las sentencias If, examine de nuevo la plantilla de sintaxis de If-Then- Else. De acuerdo con la plantilla, no hay punto y coma al fi nal de una sentencia If. En todos los fragmentos de programa anteriores, los ejemplos del pago del trabajador, la división entre cero y la búsqueda de cadena, parece haber un punto y coma al fi nal de cada sentencia If. Sin embargo, los punto y coma pertenecen a las sentencias de las cláusulas else en esos ejemplos; las sentencias de asignación terminan en punto y coma, así como las sentencias de salida. La sentencia If no tiene su propio punto y coma al fi nal. Bloques (sentencias compuestas) En el ejemplo de la división entre cero, suponga que cuando el divisor es igual a cero se desea hacer dos cosas: imprimir el mensaje de error e igualar la variable llamada result a un valor especial como 9999. Serían necesarias dos sentencias en la misma rama, pero al parecer la plantilla de sintaxis limita a una. Lo que se desea es convertir la cláusula else en una secuencia de sentencias. Esto es fácil. Recuerde, del capítulo 2, que el compilador trata el bloque (sentencia compuesta) { M } como una sola sentencia. Si pone un par de llaves { } alrededor de la secuencia de sentencias que desea en una rama de la sentencia If, la secuencia de sentencias se convierte en un solo bloque. Por ejemplo: if (divisor != 0) result = dividend / divisor; else { cout << "No se permite la división entre cero." << endl; result = 9999; } Dale005.indd 172Dale005.indd 172 4/12/06 19:00:404/12/06 19:00:40 www.FreeLibros.me Si el valor del divisor es 0, la computadora imprime el mensaje de error y establece el valor de result en 9999 antes de continuar con cualquier sentencia después de la sentencia If. Los bloques se pueden usar en ambas ramas de If-Then-Else. Por ejemplo: if (divisor != 0) { result = dividend / divisor; cout << "División efectuada." << endl; } else { cout << "No se permite la división entre cero." << endl; result = 9999; } Cuando usa bloques en una sentencia If, hay una regla de sintaxis de C++ por recordar: nunca use punto y coma después de la llave derecha de un bloque. Los punto y coma se emplean sólo para termi- nar sentencias simples como sentencias de asignación, de entrada y salida. Si examina los ejemplos anteriores, no verá un punto y coma después de la llave derecha que señala el fi n de cada bloque. Cuestiones de estilo Llaves y bloques Los programadores de C++ emplean estilos diferentes cuando se trata de localizar la llave izquierda de un bloque. La manera como se usa aquí es poner las llaves izquierda y derecha directamente abajo de las pala- bras if y else, cada llave en su propia línea: if (n >= 2) { alpha = 5; beta = 8; } else { alpha = 23; beta = 12; } Otro estilo popular es colocar las llaves izquierdas al fi nal de la línea if y la línea else; las llaves dere- chas se alinean directamente debajo de las palabras if y else. Esta forma de dar formato a la sentencia If se originó con los programadores que usan el lenguaje C, el predecesor de C++. if (n >= 2) { alpha = 5; beta = 8; } else { alpha = 23; beta = 12; } Para el compilador de C++ no hay diferencia en cuanto al estilo que usted use (y también hay otros estilos). Es una cuestión de preferencia personal. Sin embargo, cualquiera que sea el estilo que use, debe ser el mismo en todo el programa. La inconsistencia puede confundir a la persona que lee su programa y dar la impresión de descuido. 5.3 Sentencia If | 173 Dale005.indd 173Dale005.indd 173 4/12/06 19:00:414/12/06 19:00:41 www.FreeLibros.me
Compartir