Logo Studenta

programacion c ejercicios resueltos-67

¡Estudia con miles de materiales!

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

Continuar navegando