Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TOLEDO MARTÍNEZ
CONTENIDO DE LA LECCIÓN 9
TOMA DE DECISIONES
1. Introducción 2
2. Estructuras de control 2
2.1. El enunciado if (básico) 3
2.2. Formato del enunciado if 4
2.2.1.Ejemplos 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7 5
2.3. Examen breve 19 45
2.4. El enunciado if/else 9
2.5. Formato del enunciado if/else 10
2.5.1. Ejemplos 8.8, 8.9, 8.10 11
2.6. Enunciados compuestos utilizados con if/else 13
2.6.1. Ejemplos 8.11, 8.12 13
2.7. Examen breve 20 45
2.8. Enunciados if anidados 14
2.9. Ejemplos 8.13, 8.14 17
2.10. El enunciado if/else de alternativa múltiple 18
2.10.1. Ejemplos 8.15, 8.16, 8.17 19
2.11. Declaración de variables dentro de un enunciado compuesto 20
2.12. Problemas potenciales con el enunciado if 21
2.13. Examen breve 21 46
2.14. El enunciado switch 22
2.15. Formato del enunciado switch 23
2.16. La opción default 26
2.16.1. Ejemplos 8.18 y 8.19, 8.20, 8.21, 8.22, 8.23 27
2.17. Examen breve 22 46
FUNDAMENTOS – LECCIÓN 8
8-1
MIGUEL Á. TOLEDO MARTÍNEZ
LECCIÓN 9
TOMA DE DECISIONES
INTRODUCCIÓN
Conforme los programas se vuelven más complejos, requerirá que los mismos ejecuten
un conjunto de enunciados cuando se satisfaga cierta condición y posiblemente otro conjunto si
la condición es falsa. En otras palabras, deseará que sus programas tomen decisiones.
Objetivos de esta lección:
• Comparar valores para determinar si son iguales o bien uno es mayor o menor que el otro.
• Utilizar el enunciado if para tomar decisiones dentro de su programa.
• Utilizar enunciados simples y compuestos.
• Utilizar el enunciado if-else para ejecutar un conjunto de enunciados cuando la condición es
verdadera y un segundo conjunto de enunciados si la condición es falsa.
• Combinar varios enunciados if-else para permitirle a su programa que pruebe varias
alternativas.
• Utilizar los operadores AND y OR para verificar condiciones múltiples
• Utilizar el enunciado switch.
Se dice que los programas que toman decisiones ejecutan procesos condicionados.
ESTRUCTURAS DE CONTROL
Figura 8.1. La estructura de control secuencial es una serie de enunciados secuenciales paso a paso.
FUNDAMENTOS – LECCIÓN 8
8-2
MIGUEL Á. TOLEDO MARTÍNEZ
Las otras dos estructuras de control, selección e iteración, permiten modificar el flujo del
programa, dependiendo de una o más condiciones. La estructura de control selección se destina a
la toma de decisiones. Se implementa en C++ con los enunciados if, if/else y switch. Estos son
los temas de esta lección. La estructura de control iteración es una estructura de control de ciclo.
Se implementa en C++ con los enunciados while, do/while y for. Estas operaciones se explicarán
en la lección 9. Ahora, vamos a analizar los enunciados de control de selección disponibles en
C++.
EL ENUNCIADO if (básico)
verdadero (diferente
Expresión de cero) enunciados
if de if
verificación
falso (cero)
siguiente
enunciado
Observe que el flujo del programa se modifica, dependiendo del resultado de una
expresión de verificación. La verificación if puede ser verdadera (diferente de cero) o falsa
(cero) Recuerde que, durante una operación de verificación, C++ iguala un valor distinto de
cero con verdadero y un valor cero con falso. Si la expresión de verificación es verdadera
(diferente de cero), se ejecutan los enunciados if. Sin embargo, si el resultado de la verificación
es falso (cero) se ignoran los enunciados if y el programa continúa el flujo. Esto se conoce como
una operación de selección o toma de decisiones, porque el programa selecciona o decide entre
una o dos posibles alternativas, dependiendo del resultado de las condiciones que se verifican. En
resumen, la operación if se puede establecer en palabras como: si la verificación es verdadera,
ejecuta los enunciados if. Esto implica que si la verificación es falsa, los enunciados if no se
ejecutan.
Antes de ver el formato C++ para el enunciado C++, veamos más de cerca la expresión
de verificación, la cual tiene carácter condicional. Esto significa que se verifica una o más
condiciones para generar un resultado de verdadero o falso. Por ejemplo, una verificación común
es if(x == y) Aquí, la condición simple, x == y, se verifica. Si x es igual a y, el resultado de la
verificación es verdadero, por lo tanto se ejecutan los enunciados if. Si x no es igual a y, los
enunciados if se ignoran y se ejecuta el siguiente enunciado de la secuencia.
FUNDAMENTOS – LECCIÓN 8
8-3
MIGUEL Á. TOLEDO MARTÍNEZ
Para verificar condiciones múltiples, deberá usar los operadores lógicos booleanos de OR
y AND. Por ejemplo, if((x != y) && (a < b)) verifica dos condiciones. Si x no es igual a y y si a
es menor que b, el resultado de la verificación es verdadero, y se ejecutarán los enunciados if.
Por otro lado, si x es igual a y o si a es mayor o igual a b, entonces se ignoran los enunciados if.
if (expresión de verificación)
{
enunciado 1;
enunciado 2;
................... // Enunciado compuesto
enunciado n;
} // Fin de if
Cuando un enunciado compue sto se encuentra dentro de un programa C++, todo el grupo
de enunciados se trata como un enunciado sencillo. Los enunciados compuestos siempre
deberán estar encerrados entre llaves. Sin embargo, es opcional cuando hay solamente un
enunciado sencillo dentro del bloque.
FUNDAMENTOS – LECCIÓN 8
8-4
MIGUEL Á. TOLEDO MARTÍNEZ
Por último, observe la sintaxis de puntuación del enunciado if. Observe que no hay punto
y coma después de la expresión de verificación en la primera línea. Sin embargo, cada
enunciado dentro del bloque de enunciados se termina con dicho signo.
Probablemente sea una buena idea ver en este momento algunos ejemplos para captar el
sentido de la operación if.
Ejemplo 8.1
Determine la salida para cada uno de los siguientes segmentos de programa. Suponga que x y y
tienen las siguientes asignaciones antes de la ejecución de cada operación if.
x = 2;
y = 3;
a. if (x < y)
{
cout << “x = ” << x << endl;
cout << “y = ” << y << endl;
} // Fin del if
b. if (x)
cout << “El valor de x es diferente de cero. ” << endl;
c. if (x < y)
{
temp = y;
y = x;
x = temp;
cout << “x = ” << x << endl;
cout << “y = ” << y << endl;
} // Fin del if
g. if ((x % y) == 10)
cout << “x es divisible entre y.” << endl;
cout << “x no es divisible entre y.” << endl;
FUNDAMENTOS – LECCIÓN 8
8-5
MIGUEL Á. TOLEDO MARTÍNEZ
Solución:
a. El valor de x es menor que el valor de y. De esta manera, la salida es:
x =2
y=3
x =3
y=2
d. El valor de x es menor que y y el valor de y no es igual a 10. Como resultado, los dos valores se
adicionan y la salida es:
x =2
y=3
suma = 5
e. Aquí, el valor de x no es más grande que el valor de y, pero x - y es menor que cero. De esta manera,
el resultado de la verificación es verdadero, por lo tanto se ejecuta el enunciado compuesto, lo que da
como resultado una salida de:
x =3
y=2
f. Esta vez la verificación es falsa. Así, el enunciado compuesto se ignora. En consecuencia, los valores
de x y y permanecen sin cambio y la salida es:
x =2
y=3
g. Este es un truco. Aquí, la verificación es falsa, el residuo es 2 que no es igual a 10. Entonces, ¿qué
pasa? No hay llaves que enmarquen el bloque, así que el compilador tomara sólo el primer enunciado
cout para hacer el if. Como resultado, el primer enunciado cout se ignora, y el segundo se ejecuta
para producir una salida de:
x no es divisible entre y.
Pero esta aparente lógica no tiene sentido. Quiere ejecutar uno de los dos enunciados cout, no ambos.
Para solucionar este dilema, necesitamos una estructura de control de decisión diferente llamada
estructura de control if/else. La estructura de control if/else se explica después.
Ejemplo 8.2
FUNDAMENTOS – LECCIÓN 8
8-6
MIGUEL Á. TOLEDO MARTÍNEZ
void main(void)
{
int calificacion = 95;
Ejemplo 8.3
if (edad == 21)
cout << "La edad del usuario es de 21 años" << endl;
if (edad != 21)
cout << "La edad del usuario no es de 21 años" << endl;
if (altura == 73)
cout << "La altura del usuario es de 73 pulgadas" << endl;
if (altura != 73)
cout << "La altura del usuario no es de 73 pulgadas" << endl;
} // Fin de main()
Ejemplo 8.4
El siguiente programa: IFCIN.CPP, solicita un valor de punto flotante y en caso de ser distinto
de cero, muestra el recíproco de dicho número.
FUNDAMENTOS – LECCIÓN 8
8-7
MIGUEL Á. TOLEDO MARTÍNEZ
void main(void)
{
double x;
Ejemplo 8.5
void main(void)
{
int tienePerro = 1;
int tieneGato = 0;
if(tienePerro)
cout << "Los perros son maravillosos" << endl;
if(tieneGato)
cout << "Los gatos son maravillosos" << endl;
if((tieneGato) || (tienePerro))
cout << "Las mascotas son maravillosas" << endl;
} //Fin de main()
FUNDAMENTOS – LECCIÓN 8
8-8
MIGUEL Á. TOLEDO MARTÍNEZ
Ejemplo 8.6
El siguiente programa: USONOT.CPP, ilustra el uso del operador NOT dentro de un if.
/* El siguiente programa: USONOT.CPP, ilustra el uso del operador NOT como parte
de una condición de un if.
*/
void main(void)
{
int tienePerro = 0;
int tieneGato = 1;
if(!tienePerro)
cout << "Debe comprar un perro" << endl;
if (!tieneGato)
cout << "Debe comprar un gato" << endl;
} // Fin de main()
Ejemplo 8.7
void main(void)
{
int calificacion = 95;
EXAMEN BREVE 19
EL ENUNCIADO if/else
Las operaciones del enunc iado if/else se muestran por medio del diagrama de la figura
8.3. Observe que hay dos series de enunciados que se pueden ejecutar, dependiendo de si la
expresión de verificación es verdadera o falsa. Si el resultado es verdadero, se ejecutarán los
enunciado if. Por el contrario, si el resultado de la verificación es falso, se ejecutarán los
enunciados else. En otras palabras, si la expresión de verificación es verdadera, entonces se
ejecutan los enunciados if; de otra manera, se ejecutan los enunciados else. En C++, un
FUNDAMENTOS – LECCIÓN 8
8-9
MIGUEL Á. TOLEDO MARTÍNEZ
enunciados
if
Verdadero
(diferente de cero)
Expresión
if/else siguiente
de
verificación enunciado
if
enunciados
else
falso (cero)
Como puede observar, la opción else se incluye después de la opción if. Si la expresión
de verificación es verdadera, se ejecutan los enunciados if y se ignoran los enunciados else. Sin
embargo, si la expresión de verificación es falsa, se ignoran los enunciados if y se ejecutan los
enunciados else.
Unas palabras sobre la sintaxis, primero, observe que ambos: los enunciados if y los
enunciados else se encierran entre llaves. Sin embargo, es posible eliminar las llaves en
cualquier sección cuando sólo se requiera un enunciado. Segundo, observe el esquema de
sangría.
FUNDAMENTOS – LECCIÓN 8
8-10
MIGUEL Á. TOLEDO MARTÍNEZ
Ejemplo 8.8
Determine cuando se ejecutarán los enunciados if y cuándo los enunciados else en cada uno de los
siguientes segmentos del programa.
a. if (x < y)
suma = x + y;
else
diferencia = x – y;
b. if (x)
suma = x + y;
else
diferencia = x – y;
c. if (!x)
suma = x + y;
else
diferencia = x – y;
f. if (x > 2 * y)
suma = x + y;
producto = x * y;
else
diferencia = x – y;
Solución:
a. El enunciado if se ejecuta cuando x es menor que y y el enunciado else se ejecuta cuando x es mayor
o igual a y. Recuerde, lo opuesto de, menor que, es mayor que o igual a.
b. El enunciado if se ejecuta cuando x es diferente de cero, porque un valor diferente de cero en C++ se
interpreta como verdadero cuando se verifica en una condición booleana. El enunciado else se ejecuta
cuando el valor de x es cero, porque un valor de cero se interpreta como falso.
c. Este segmento usa la lógica opuesta del segmento en la parte b, debido al operador !(NOT). Como
resultado, el enunciado if se ejecuta cuando x es cero o falso, y el enunciado else se ejecuta cuando x
es diferente de cero o verdadero.
d. Este segmento emplea el operador booleano AND (&&) Aquí, el enunciado if se ejecuta cuando el
valor de x es menor que el valor de y y el valor de 2x – y es igual a cero. El enunciado else se ejecuta
cuando el valor de x es mayor que o igual al valor de y o el valor de 2x – y no es igual a cero.
e. Este segmento emplea el operador booleano OR (||). Aquí el enunciado if se ejecuta cuando el valor de
x es menor que el valor de y o el valor de 2x – y es igual a cero. El enunciado else se ejecuta cuando el
valor de x es mayor o igual al valor de y y el valor de 2x – y no es igual a cero.
FUNDAMENTOS – LECCIÓN 8
8-11
MIGUEL Á. TOLEDO MARTÍNEZ
f. Este segmento de código no se compilará debido a un else fuera de lugar o pendiente. Los enunciados
if deberán estar encerrados entre llaves para que se compile el segmento. Cuando los enunciados if
están encerrados entre llaves, se ejecutarán siempre que el valor de x sea mayor que el valor 2y. El
enunciado else se ejecutará cuando el valor de x sea menor o igual al valor de 2y.
Ejemplo 8.9
void main(void)
{
int calificacion = 95;
Ejemplo 8.10
El siguiente programa: IFDOBLE.CPP, muestra el uso de if /else, para verificar si el carácter que
introdujo el usuario es o no una letra.
void main(void)
{
char c;
// Convierte a mayúscula
c = toupper(c);
FUNDAMENTOS – LECCIÓN 8
8-12
MIGUEL Á. TOLEDO MARTÍNEZ
Ejemplo 8.11
El siguiente programa: IFCMP.CPP, utiliza un enunciado compuesto tanto para if como para else.
void main(void)
{
int calificacion = 65;
Ejemplo 8.12
El siguiente programa: LEERCAL.CPP, utiliza el flujo de entrada cin para leer la calificación
digitada por el usuario. Posteriormente el programa compara la calificación con 90 y despliega el
mensaje correspondiente:
void main(void)
{
int calificacion;
FUNDAMENTOS – LECCIÓN 8
8-13
MIGUEL Á. TOLEDO MARTÍNEZ
EXAMEN BREVE 20
ENUNCIADOS if ANIDADOS
Hasta este punto, ha visto que las decisiones pueden ser de uno y dos caminos mediante
el uso de los enunciados if y if/else, respectivamente. Puede tener opciones de selección
adicional usando enunciados if anidados. Un if anidado es simplemente un enunciado if dentro
de otro if. Para mostrar esta idea, considere el diagrama en la figura 8.4.
falso verdadero
Agua temp Vapor
>= 100
Aquí se verifica una temperatura para ver si está dentro de un rango de 0 a 100 grados
Celsius. Si está dentro de este rango obtendrá agua. Sin embargo, si está fuera del rango
obtendrá vapor o hielo, dependiendo de sí el rango es superior o inferior, respectivame nte.
FUNDAMENTOS – LECCIÓN 8
8-14
MIGUEL Á. TOLEDO MARTÍNEZ
PLANEACIÓN DE LA SOLUCIÓN
INICIO
Escribir(“Mensaje con descripción del problema”)
Escribir(“Favor de introducir la temperatura en grados Celsius”)
Leer(temperatura)
si temperatura > 0
si temperatura >= 100
Escribir (“VAPOR”)
si no
Escribir (“AGUA”)
si no
Escribir (“HIELO”)
FIN.
Este algoritmo se construye por medio del diagrama de la figura 8.4. Observe cómo la segunda
operación si/si no se anida dentro de la primera operación si/si no. Si la temperatura no es mayor
que 0 grados, la operación si anidada no se realiza. Sin embargo, si la temperatura es mayor que
0 grados, la operación si anidada se realiza para ver si la temperatura da como resultado vapor o
agua .
void main(void)
{
//Definición de variable.
float temperatura = 0.0; // Valor de temperatura dado por el usuario
FUNDAMENTOS – LECCIÓN 8
8-15
MIGUEL Á. TOLEDO MARTÍNEZ
Observe cómo el flujo del programa se puede ver por medio del esquema de sangría. Sin
embargo, no verá ningún par de llaves encerrando los bloques if o else. Recuerde que no necesita
encerrar un bloque de código cuando éste consta sólo de un enunciado sencillo. Pero usted puede
creer que el primer bloque if parece tener varios enunciados. Bien, el primer bloque if contiene un
enunciado sencillo if/else. Debido a que el compilador identifica esto como un enunciado
sencillo, no es necesario encerrarlo en llaves. Por supuesto que si tiene duda, puede encerrar el
bloque de la siguiente manera:
if(temperatura > 0)
{
if(temperatura >= 100)
cout << "VAPOR" << endl;
else
cout << "AGUA" << endl;
}
else
cout << "HIELO" << endl;
Hay diferentes formas de construir la lógica if/else anidados. Una variante de seudocodificación
es la siguiente:
si temperatura <= 0
Escribir (“HIELO”).
si no
si temperatura >= 100
Escribir (“VAPOR”).
si no
Escribir (“AGUA”)
Aquí se ve la operación más interna si/si no anidada dentro de la operación externa si no. Esta
lógica también realizará la tarea de decisión requerida. Ambos métodos son correctos y se apegan
a un buen estilo de programación. Nos referiremos a este método como la forma if-else-if-else y
al método anterior como la forma if-if-else-else. Es simplemente un asunto de elección personal y
de cómo ve la lógica del problema. En general, la forma if-else-if-else deberá usarse cuando
ciertas condiciones diferentes necesitan ser satisfechas antes de que ocurra una acción
determinada, y la forma if-if-else-else deberá usarse cuando se verifica la misma variable para
diferentes valores y se toma una acción diferente para cada valor. Esta última es la razón por la
cual se seleccionó el uso de la forma if-if-else-else. Observe también que la sangría es
extremadamente importante para determinar la lógica anidada.
FUNDAMENTOS – LECCIÓN 8
8-16
MIGUEL Á. TOLEDO MARTÍNEZ
Ejemplo 8.13
Determine cuando “Rojo”, “Blanco” y “Azul” se escribirán en cada uno de los siguie ntes
segmentos del programa.
a. if(x < y)
if (x == =0)
cout << “Rojo” << endl;
else
cout << “Blanco” << endl;
else
cout << “Azul” << endl;
b. if(x >= y)
cout << “Azul” << endl;
else
if (x == 0)
cout << “Rojo” << endl;
else
cout << “Blanco” << endl;
Solución:
Se escribirá Rojo cuando el valor de x sea menor que el valor de y y el valor de x sea cero. Se
escribirá Blanco cuando el valor de x sea menor que el valor de y y el valor de x sea diferente de
cero. Se escribirá Azul cuando el valor de x sea mayor o igual que el valor de y sin importar si el
valor de x es o no cero.
Ejemplo 8.14
Convierta la siguiente serie de enunciados if en enunciados if/else anidados usando las formas if-
else-if-else e if-if-else-else.
if(año == 1)
cout << “Estudiante de reciente ingreso” << endl;
if(año == 2)
cout << “Estudiante de segundo año” << endl;
if(año == 3)
cout << “Estudiante de penúltimo año” << endl;
if(año == 4)
cout << “Estudiante de último año” << endl;
if(año > 42)
cout << “Graduado” << endl;
Solución:
a. Para convertir a la forma if-else-if-else, usamos la lógica que indica que si el año es mayor
que 4, entonces escribiremos “Graduado”; si no es así, verificamos si el año es mayor que 3.
Si el año no es mayor que 4 pero es mayor que 3, su valor deberá ser 4, así que escribimos
FUNDAMENTOS – LECCIÓN 8
8-17
MIGUEL Á. TOLEDO MARTÍNEZ
if(año > 4)
cout << “Graduado” << endl;
else
if(año > 3)
cout << “Estudiante de último año” << endl;
else
if(año > 2)
cout << “Estudiante de penúltimo año” << endl;
else
if(año > 1)
cout << “Estudiante de segundo año” << endl;
else
“Estudiante de reciente ingreso” << endl;
c. Para convertir a la forma if-if-else-else, usamos la lógica que indica: si el año es mayor que
1, verificamos si el año es mayor que 2, después que 3, y luego que 4. Si pasa todas estas
verific aciones, sabemos que escribiremos “Graduado”. Sin embargo, si el año no fue mayor
que 1 en la primera verificación, sabemos que escribiremos “Estudiante de reciente
ingreso”, que forma la parte else de la primera verificación if. Después, si el año es mayor
que 1, pero falla la segunda verificación if(>2), sabemos que escribiremos “Estudiante de
segundo año”, que forma la parte else de la segunda verificación if. Esta lógica continúa
para producir “Estudiante de penúltimo año”, y “Estudiante de último año” para los valores
de año de 3 y 4 respectivamente. Este es el resultado del código:
if(año > 1)
if(año > 2)
if(año > 3)
if(año > 4)
cout << “Graduado” << endl;
else
cout << “Estudiante de último año” << endl;
else
cout << “Estudiante de penúltimo año” << endl;
else
cout << “Estudiante de segundo año” << endl;
else
cout << “Estudiante de reciente ingreso” << endl;
C++ le permite anidar enunciados if-else para crear una forma de alternativa múltiple,
que le proporciona gran poder y flexibilidad a sus aplicaciones.
FUNDAMENTOS – LECCIÓN 8
8-18
MIGUEL Á. TOLEDO MARTÍNEZ
..........................................................................................
else if (condicion n)
enunciado n; | {<secuencia n de enunciados>}
[else
enunciado n+1; | {<secuencia #N+1 de enunciados>}]
Ejemplo 8.15
char op;
int opOk = 1;
double x, y, z;
if (op == ‘+’)
z = x + y;
else if (op == ‘-’)
z = x – y;
else if (op == ‘*’)
z = x * y;
else if (op == ‘/’ && y != 0)
z = x / y;
else
opOk = 0;
El enunciado if-else de alternativa múltiple realiza una serie de pruebas en cascada hasta
que suceda algo de lo siguiente:
Ejemplo 8.16
El siguiente programa: MSTRCAL.CPP, utiliza una serie de enunciados if-else para probar
calificaciones mayores o iguales a 90, 80, 70, 60 y menor o igual a 50, enviando los mensajes
correspondientes:
void main(void)
{
int calificacion;
FUNDAMENTOS – LECCIÓN 8
8-19
MIGUEL Á. TOLEDO MARTÍNEZ
Ejemplo 8.17
void main(void)
{
char c;
// Otros enunciados
FUNDAMENTOS – LECCIÓN 8
8-20
MIGUEL Á. TOLEDO MARTÍNEZ
En este caso, el enunciado if declara dos variables al principio del enunciado compuesto,
puede utilizar estas dos variables, como si fueran definidas al principio del programa. No puede,
sin embargo, referirse a estas variables fuera del enunciado compuesto. Una ventaja de declarar
variables dentro de un enunciado compuesto es que otro programador que esté leyendo su
programa, tendrá una mejor comprensión de cómo y cuando las variables son utilizadas. Se llama
alcance de una variable, a la localización dentro de su programa en la cual su variable es
reconocida. Como regla, debe tratar de reducir el conocimiento de una variable a la región de su
programa que usa dicha variable. Al declarar las variables al principio de un enunciado
compuesto, limita el alcance de la variable al enunciado compuesto (principio y fin de las llaves)
Nota: Si define variables dentro de un enunciado compuesto que tengan los mismos nombres que
variables definidas fuera del enunciado compuesto, el compilador C++ utilizará las variables
definidas dentro del enunciado compuesto, cuando se les utilice dentro del mismo, y las variables
fuera del enunciado compuesto se utilizarán al salirse del mismo.
Hay un problema potencial con el enunciado if de doble alternativa. Este sucede cuando
el enunciado if incluye otro enunciado if de una sola alternativa. Por ejemplo:
if (i > 0)
if (i == 0)
cout << “Adivinó el número mágico”;
else
cout << “El número se encuentra fuera de rango”;
Siempre recuerde encerrar sus enunciados if/else entre llaves, { }, cuando tenga más de un
enunciado que ejecutar. Si las llaves se omiten, sólo se ejecutará el primer enunciado. Esto puede
causar un error lógico que es muy difícil de localizar. Por ejemplo, considere lo siguiente:
if (x < y)
--x;
cout << “x es menor que y” << endl;
else
cout << “x es mayor o igual a y” << endl;
FUNDAMENTOS – LECCIÓN 8
8-21
MIGUEL Á. TOLEDO MARTÍNEZ
Otra fuente de error es cuando trabaja con valores en punto flotante dentro de un if, debe
tener cuidado cuando verifique este valor. Por ejemplo, el siguiente enunciado prueba una
variable de punto flotante llamada tasaImpuesto.
if(tasaImpuesto == 0.065)
// enunciado
Para la computadora es imposible representar todos los valores exactamente, por ejemplo,
puede que el número anterior lo represente como 0.649999. Como consecuencia la condición
anterior jamás será verdadera. Para prevenir tales errores dentro de su programa, no pruebe para
valores exactos, sino para un rango de valores, como se muestra a continuación:
if(fabs(tasaImpuesto – 0.065) <= 0.0001)
// enunciado
EXAMEN BREVE 21
EL ENUNCIADO switch
FUNDAMENTOS – LECCIÓN 8
8-22
MIGUEL Á. TOLEDO MARTÍNEZ
falso
verdadero
falso
selector
== enunciados break
caso n caso n
verdadero
falso
enunciados
opcionales
(default)
siguiente
enunciado
FUNDAMENTOS – LECCIÓN 8
8-23
MIGUEL Á. TOLEDO MARTÍNEZ
switch (expresión)
{
case constante1_1:…
[case constante1_2: ...]
<uno o más enunciados>;
break;
case constante2_1:
[case constante2_2: ...]
<uno o más enunciados>;
break;
...............................................................................
case constanteN_1:
[case constanteN_2: ...]
<uno o más enunciados>;
break;
default:
<uno o más enunciados>;
break;
}
La sintaxis de switch necesita el uso de llaves para abrir y cerrar el bloque switch de los
enunciados case, como se muestra. El bloque switch consta de algunos casos que se identifican
usando la palabra reservada case. Deberá suministrarse un valor case de tipo entero con cada
case para propósitos de comparación. El enunciado switch compara el valor de la variable con un
valor case dado. Si son iguales, se ejecutan los enunciados case correspondientes. Observe que el
valor case se separa con dos puntos de los enunciados case. Un bloque de enunciados case
determinado puede ser cualquier cantidad de enunciados y no necesita estar encerrado entre
llaves. Sin embargo, la palabra reservada break a menudo se inserta como el último enunciado en
el bloque de enunciados case dado. Si no se usa break, se ejecutará cualquier case posterior
después de que ocurra una correspondencia case, hasta que se encuentre un break. En ocasiones
esto es deseable, especialmente cua ndo múltiples valores case se encuentran como válidos de
una determinada serie de enunciados case.
case ‘B’:
cout << “Muy bueno” << endl;
break;
case ‘C’:
cout << “Promedio” << endl;
FUNDAMENTOS – LECCIÓN 8
8-24
MIGUEL Á. TOLEDO MARTÍNEZ
break;
case ‘D’:
cout << “Malo” << endl;
break;
case ‘R’:
cout << “Trate de nuevo” << endl;
break;
} // Fin de switch
Aquí, la variable selectora es letraCalif. Los valores case son ‘A’, ‘B’, ‘C’, ‘D’ y ‘R’. El
valor de la variable selectora se compara con la lista de valores case. Si se encue ntra una
correspondencia, se ejecutan los enunciados case correspondientes. Por ejemplo, si el valor de
letraCalif es ‘B’, el código genera una salida.
Muy bueno
Ahora, suponga que deja afuera la palabra reservada break en cada uno de los casos:
switch(letraCalif)
{
case ‘A’:
cout << “Excelente” << endl;
case ‘B’:
cout << “Muy bueno” << endl;
case ‘C’:
cout << “Promedio” << endl;
case ‘D:
cout << “Malo” << endl;
case ‘R’:
cout << “Trate de nuevo” << endl;
} // Fin de switch
Esta vez, suponiendo que letraCalif tiene el valor ‘B’, el código genera la siguiente
salida:
Muy bueno
Promedio
Malo
Trate de nuevo
Con base en la salida, se observa que se igualó case ‘B’ y se ejecutaron sus enunciados
case. Sin embargo, todos los enunciados case posteriores a case ‘B’ también se ejecutaron.
Seguramente puede ver la conveniencia de utilizar break en esta aplicación.
¿Habrá ocasiones en las que quiera eliminar el comando break? ¡Seguro! Considere el
siguiente enunciado switch:
switch(letraCalif)
{
case ‘a’:
case ‘A’:
cout << “Excelente” << endl;
break;
FUNDAMENTOS – LECCIÓN 8
8-25
MIGUEL Á. TOLEDO MARTÍNEZ
case ‘b’:
case ‘B’:
cout << “Muy bueno” << endl;
break;
case ‘c’
case ‘C’:
cout << “Promedio” << endl;
break;
case ‘d’:
case ‘D’:
cout << “Malo” << endl;
break;
case ‘r’
case ‘R’:
cout << “Trate de nuevo” << endl;
break;
} // Fin de switch
En este caso, los múltiples valores case necesitan apuntar hacia el mismo enunciado case.
Así que, si letraCalif tiene el valor ‘b’, entonces se hace una correspondencia con case ‘b’.
Ningún break es parte de este case, así que se ejecuta el siguiente case de la secuencia, el cual
escribirá la palabra Muy Bueno. Debido a que case ‘B’ contiene un break, el enunciado switch
se termina después de que se genera la salida.
¿Qué pasa si no hay correspondencia? Como sospechará, todos los cases son ignorados y
se ejecuta el siguiente enunciado de la secuencia que aparece después de la llave de cierre
switch.
LA OPCIÓN default
switch(letraCalif)
{
case ‘a’:
case ‘A’:
cout << “Excelente” << endl;
break;
case ‘b’:
case ‘B’:
cout << “Muy bueno” << endl;
break;
FUNDAMENTOS – LECCIÓN 8
8-26
MIGUEL Á. TOLEDO MARTÍNEZ
case ‘c’
case ‘C’:
cout << “Promedio” << endl;
break;
case ‘d’:
case ‘D:
cout << “Malo” << endl;
break;
case ‘r’
case ‘R’:
cout << “Trate de nuevo” << endl;
break;
default:
cout << letraCalif << “no corresponde a ninguna ENTRA DA ”
<< endl;
} // Fin de switch
Ejemplo 8.18
Un enunciado switch es simplemente una forma conveniente de codificar una serie de enunciados
if. Convierta las siguientes series de enunciados if a un enunciado sencillo switch que emplee la
opción default.
if(Año == 1 )
cout << “Estudiante de reciente ingreso” << endl;
if(Año == 2 )
cout << “Estudiante de segundo año” << endl;
if(Año == 3 )
cout << “Estudiante de penúltimo año” << endl;
if(Año == 4 )
cout << “Estudiante de último año” << endl;
else
cout << “Graduado” << endl;
Solución:
Lo que necesita hacer para convertir una serie de enunciado if en un enunciado sencillo switch es
usar la variable de verificación del if como la variable selectora y los valores de verificación del
if como casos dentro del switch. Aquí esta el código:
switch(año)
{
case 1:
cout << “Estudiante de reciente ingreso” << endl;
FUNDAMENTOS – LECCIÓN 8
8-27
MIGUEL Á. TOLEDO MARTÍNEZ
break;
case 2:
cout << “Estudiante de segundo año” << endl;
break;
case 3:
cout << “Estudiante de penúltimo año” << endl;
break;
case 4:
cout << “Estudiante de último año” << endl;
break;
default:
cout << “Graduado” << endl;
Observe como la opción default se usa para escribir “Graduado”. Usted sabe que se escribe
“Graduado” si no hay correspondencia con los cuatro casos anteriores, ¿correcto? Así, la parte
else de la última verificación if se convierte en default en el enunciado switch.
Ejemplo 8.19
ok = true;
switch (op)
{
case ‘+’:
z = x + y;
break;
case ‘-’:
z = x - y;
break;
case ‘*’:
z = x * y;
break;
case ‘/’:
if (y != 0)
z = x / y;
break;
default:
ok = false;
break;
}
• El enunciado switch requiere un valor compatible con enteros. Este valor puede ser una
constante, una variable, una llamada de función o una expresión. El enunciado switch no
trabaja con tipos de datos de punto flotante.
• El valor después de cada etiqueta case debe ser una constante.
• C++ no soporta etiquetas case con rangos de valores. En lugar de ello, cada valor debe
aparecer en una etiqueta case aparte.
• El final de un enunciado case está marcado típicamente con un break. Esto causa que la
ejecución continúe en el primer enunciado que se encuentra después de switch. Si no incluye
break, la ejecución continuará con el siguiente enunciado case. Algunas veces esto es
conveniente, pero la mayoría de las ocasiones deseará usar break. En forma alterna, podría
FUNDAMENTOS – LECCIÓN 8
8-28
MIGUEL Á. TOLEDO MARTÍNEZ
usar un enunciado return en lugar de un break. Esto causará que la función actual termine y
si la función actual es main(), entonces el programa terminará.
• La cláusula default es una cláusula atrapa todo, pero no necesaria si usted quiere revisar
solamente un conjunto de circunstancias específicas.
• El conjunto de enunciados en cada etiqueta case o etiquetas case agrupadas no requiere
encerrarse entre llaves.
Ejemplo 8.20
Una posible solución del programa IFMUL.CPP, utilizando switch es el siguiente programa:
SWITCH.CPP.
void main(void)
{
char c;
switch (c)
{
case 'A':
case 'B':
case 'C':
case 'D':
// otras etiquetas case
cout << "Introdujo una letra mayúscula" << endl;
break;
case 'a':
case 'b':
case 'c':
case 'd':
// otras etiquetas case
cout << "Introdujo una letra minúscula" << endl;
break;
case '0':
case '1':
case '2':
case '3':
// otras etiquetas case
cout << "Introduje un dígito" << endl;
break;
default:
cout << "Introdujo un carácter no alfanumérico" << endl;
break;
} //Fin de switch
} //Fin de main()
FUNDAMENTOS – LECCIÓN 8
8-29
MIGUEL Á. TOLEDO MARTÍNEZ
Ejemplo 8.21
void main(void)
{
char letra;
int contadorVocales = 0;
Ejemplo 8.22
void main(void)
{
char letra;
int contadorVocales = 0;
int contadorConsonantes = 0;
FUNDAMENTOS – LECCIÓN 8
8-30
MIGUEL Á. TOLEDO MARTÍNEZ
{
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
contadorVocales++;
break;
default: contadorConsonantes++;
}; // Fin de switch
cout << "El número de vocales es " << contadorVocales << endl;
cout << "El número de consonantes es " << contadorConsonantes << endl;
} // Fin de main()
Ejemplo 8.23
El siguie nte programa: SWTMENU.CPP, ilustra el uso de un menú para realizar un comando del
sistema operativo DOS. El uso de do-while se verá en la siguiente le cción.
void main(void)
{
char letra;
do
{
cout << endl << "[A] comando DOS DIR" << endl;
cout << "[B] comando DOS CHKDSK" << endl;
cout << "[C] comando DOS DATE" << endl;
cout << "[S] Salirse del programa" << endl << endl;
cout << "Digite su elección: ";
switch (letra)
{
case 'A':
system("DIR");
break;
case 'B':
system("CHKDSK ");
break;
FUNDAMENTOS – LECCIÓN 8
8-31
MIGUEL Á. TOLEDO MARTÍNEZ
case 'C':
system("DATE");
break;
}; // Fin de switch
} while (letra != 'S');
} //Fin de main()
EXAMEN BREVE 22
PROBLEMA
El enunciado switch suele utilizarse para crear programas con manejo de menús. Un
menú es aquel que le pide seleccionar diferentes opciones durante la ejecución del
programa. Por ejemplo, suponga que debe escribir un programa que maneje menús
para permitir al usuario calcular el voltaje de corriente, la corriente o la resistencia .
Por la ley de Ohm (voltaje = corriente x resistencia), se sabe que cualquiera de éstas
se encuentra conociendo el valor de las otras dos.
PLANEACIÓN DE LA SOLUCIÓN
FUNDAMENTOS – LECCIÓN 8
8-32
MIGUEL Á. TOLEDO MARTÍNEZ
menu()
Llama a muestraMenu()
Llama a leyDeOhm()
opción
opción
muestraMenu() leyDeOhm()
Muestra el menú y obtiene Realiza el cálculo selec-
la opción del usuario cionado y muestra los
resultados
V C R
Observe que hay tres niveles en la solución del problema. En el primer nivel menu(), llama a una
función para mostrar el menú y obtener la opción del usuario. La función muestraMenu() realiza
esta tarea y devuelve la opción del menú a menu() como se indica en el diagrama. La función
menu() enviará la opción a la función llamada leyDeOhm(), que llamará a una de tres funciones,
dependiendo de la opción, para realizar los cálculos requeridos. Esta es la primera vez que vemos
el paso de datos entre funciones. Este concepto es central para el diseño de la programación
estructurada. En el diagrama de estructura verá que el usuario elige la opcion y se devuelve desde
la función muestraMenu() a la función principal menu(). Después, cuando menu() llama a la
función leyDeOhm(), opcion se pasa de menu() a leyDeOhm(). La función leyDeOhm() usará
entonces la opcion para determinar qué función de cálculo llamar. El algoritmo inicial nos indica
que la función menu() se usa para llamar a las funciones muestraMenu() y leyDeOhm(), como se
muestra a continuación:
ALGORITMO INICIAL
menu()
INICIO
Llamar a la función muestraMenu()
Llamar a la función leyDeOhm()
FIN.
FUNDAMENTOS – LECCIÓN 8
8-33
MIGUEL Á. TOLEDO MARTÍNEZ
muestraMenu()
Inicio
Muestra el menú del programa que pide al usuario seleccionar la opción de
voltaje (V), corriente (C), resistencia (R) o salir (S)
Leer(opcion)
Fin.
leyDeOhm()
Inicio
Según sea opcion hacer
V: Llama a la función calculaVoltaje()
no: Escribir(“E C: Llama a la función calculaCorriente()
R: Llama a la función calculaResistencia()
S: Termina el programa.
Si entrada no válida, seleccionar nuevamente”).
Fin.
Observe que la función muestraMenu() simplemente muestra el menú y obtiene la opción del
usuario. La función leyDeOhm () llama a la función de cálculo necesaria dependiendo de la
opción del usuario. Además, la función leyDeOhm() termina el programa si el usuario selecciona
terminar (S) y escribe un mensaje de entrada no válido si la opción del usuario no es ninguna de
las opciones indicadas.
Ahora, necesitamos un segundo nivel de refinamiento para mostrar el contenido de las funciones
de cálculo:
calculaVoltaje()
Inicio
Escribir(“Favor de introducir un valor para la corriente: ”)
Leer(corriente)
Escribir (“Favor de introducir un valor para la resistencia: ”)
Leer(resistencia)
si resistencia < 0
Escribir (“Entrada no válida, ejecutar el programa nuevamente”)
Si no
Inicio
Calcular voltaje = corriente x resistencia.
Escribir(voltaje)
Fin.
Fin.
calculaCorriente()
Inicio
Escribir (“Favor de introducir un valor para el voltaje: ”)
Leer(voltaje)
Escribir (“Favor de introducir un valor para la resistencia: ”)
Leer(resistencia).
si resistencia <= 0
Escribir (“Entrada no válida, ejecutar el programa nuevamente”)
Si no
Inicio
Calcular corriente = voltaje / resistencia.
Escribir(corriente)
Fin.
Fin.
FUNDAMENTOS – LECCIÓN 8
8-34
MIGUEL Á. TOLEDO MARTÍNEZ
calculaResistencia()
Inicio
Escribir (“Favor de introducir un valor para el voltaje: ”)
Leer(voltaje).
Escribir (“Favor de introducir un valor para la corriente: ”)
Leer(corriente).
si corriente = 0
Escribir(“Entrada no válida, ejecutar el programa nuevamente”)
Sino
Inicio
Calcular resistencia = voltaje / corriente.
Escribir(resistencia)
Fin.
Fin.
Cada función de cálculo obtiene los datos necesarios para los cálculos respectivos de la ley de
Ohm. La función hace los cálculos y muestra el resultado. Observando más de cerca estos
algoritmos, encontrará algunas características de protección. Los enunciados si/si no dentro de
cada función protegen contra entradas de datos no válidos. Un valor de resistencia negativa no es
válido porque no hay tal cosa. Además, no podrá dividir entre 0. Como resultado, las funciones
calculaCorriente() y calc ulaResistencia () cada una verifica las entradas cero para los valores que
se usan como divisor en cálculo de la ley de Ohm.
Salida: Un menú del programa le pide al usuario seleccionar una opción para
calcular el Voltaje, Corriente o Resistencia.
Se debe enviar un mensaje en el caso de hacer una selección inválida.
Mostrar un valor del Voltaje, Corriente o resistencia dependiendo de
la opción que el usuario seleccione.
FUNDAMENTOS – LECCIÓN 8
8-35
MIGUEL Á. TOLEDO MARTÍNEZ
void main(void)
{
//Definición de variables.
char opcion = 'S'; // Entrada del usuario desde el menú.
float voltaje = 0.0; // Voltaje en voltios.
float corriente = 0.0; // Corriente en miliamperes.
float resistencia = 0.0; // Resistencia en KiloOhms.
// Función mustraMenu()
cout << "\n\n\t\t\tEscriba V para encontrar el voltaje." << endl << endl
<< "\t\t\tEscriba C para encontrar la corriente." << endl << endl
<< "\t\t\tEscriba R para encontrar la resistencia." << endl << endl
<< "\t\t\tEscriba S para salir." << endl << endl
<< "\t\t\tPor favor escriba su opción: ";
cin >> opcion;
// Función leyDeOhm()
switch(opcion)
{
case 'v': // Función calculaVoltaje()
case 'V':
cout << "\nEscriba el valor de la corriente en miliamperes\tI = ";
cin >> corriente;
cout << "\nEscriba el valor de la resistencia en KiloOhms\tR = ";
cin >> resistencia;
if(resistencia < 0 )
cout << "\n\nEsta es una entrada no válida. Por favor"
"ejecute el programa de nuevo." << endl;
else
{
voltaje = corriente * resistencia;
cout << "\n\nEl valor del voltaje es " << voltaje
<< " voltios." << endl;
} // Fin del else
break;
if(resistencia <= 0)
cout << "\n\nEsta es una entrada no válida. Por favor"
" ejecute el programa de nuevo." << endl;
FUNDAMENTOS – LECCIÓN 8
8-36
MIGUEL Á. TOLEDO MARTÍNEZ
else
{
corriente = voltaje / resistencia;
cout << "\n\nEl valor de la corriente es "
<< corriente << " miliamperes." << endl;
} // Fin del else
break;
if(corriente == 0)
cout << "\n\nEsta es una entrada no válida. Por favor"
" ejecute el programa de nuevo." << endl;
else
{
resistencia = voltaje / corriente;
cout << "\n\nEl valor de la resistencia es " <<
resistencia<< " KiloOhms." << endl;
} // Fin del else
break;
FUNDAMENTOS – LECCIÓN 8
8-37
MIGUEL Á. TOLEDO MARTÍNEZ
Antes de que continúe con la siguiente lección, asegúrese de haber comprendido los
siguientes conceptos:
q En esta lección aprendió acerca de la estructura selección, la toma de decisiones, entre las cuales están
los enunciados if, if/else y switch. Cada una de estas operaciones modifica el flujo del programa,
dependiendo del resultado de una expresión de verificación o una condición.
q El enunciado if permite que los programas tomen decisiones cuando se cumplen ciertas condiciones. El
formato de la instrucción if simple es:
if(condicion)
Enunciados;
q Si la condición es verdadera, se ejecuta la instrucción del cuerpo de if. Si no se cumple, es decir, la
condición es falsa, se salta la instrucción del cuerpo.
q Las condiciones de las instrucciones if se forman por lo general mediante operadores de igualdad y
operadores relacionales. El resultado de estos operadores siempre es la simple observación de
verdadero o falso.
q El enunciado if de C++ le permite a su programa probar una condición y ejecutar uno o más
enunciados si la condición es verdadera.
q C++ representa un valor verdadero utilizando cualquier valor diferente de cero. El valor falso lo
representa con un valor 0.
q El enunciado if ejecuta su enunciado si su expresión de verificación es verdadera (diferente de cero)
Si la verificación resultante es falsa (cero), el programa continúa con la instrucción siguiente al if.
q El enunciado if puede ser de una sola línea o un enunciado compuesto por una serie de enunciados de
una sola línea. Cuando utilice un enunciado compuesto, deberá encerrar el bloque completo del
enunciado dentro de llaves.
q El enunciado else de C++ le permite a su programa definir uno o más enunciados que se ejecutarán
cuando la prueba de una condición if es falsa.
q El enunciado if/else consiste en dos cláusulas separadas: una cláusula if y una cláusula else. Si la
expresión de verificación asociada es verdadera (diferente de cero) se ejecuta la cláusula if; de otra
manera, se ejecuta la cláusula else cuando el resultado de la verificación es falso (cero) De esta manera
podría decirse que if/else es una operación de selección de dos caminos.
q Se pueden utilizar enunciados compuestos dentro de las cláusulas if o else; en tal caso deben de
encerrarse dentro de llaves. Se pueden utilizar opciones de selección adicional en cuyo caso se dice que
se tienen if o if/else anidados.
q Si su programa requiere ejecutar mas de un enunciado dentro de un if o else, debe colocar los
enunciados dentro de llaves.
q Los operadores lógicos AND (&&) y OR (||) le permiten a sus programas probar más de una
condición.
q El operador lógico NOT (!) le permite a sus programas probar por condiciones que no sean verdaderas.
q Utilice sangrías en sus enunciados para hacer más legible sus programas.
q El enunciado switch lleva a cabo la selección usando el proceso de correspondencia. Aquí, el valor de
una variable selectora de tipo entero se compara con una serie de valores case. Si el valor del selector
corresponde a uno de los valores case, el enunciado case correspondiente se ejecutará hasta encontrar
un enunciado break o hasta que termine el enunciado switch.
q Si no existe ninguna correspondencia, el programa simplemente continúa con el siguiente enunciado
al switch.
q C++ proporciona una opción default con el enunciado switch. Cuando use la opción default, los
enunciados default se ejecutan si no hay una correspondencia. Sin embargo, si ocurre una
correspondencia, se ejecutarán los enunciados case correspondientes y se omitirán los enunciados
default.
q Recuerde, siempre deberá encerrar el cuerpo del enunciado switch entre llaves.
FUNDAMENTOS – LECCIÓN 8
8-38
MIGUEL Á. TOLEDO MARTÍNEZ
PREGUNTAS Y PROBLEMAS
PREGUNTAS
1. ¿Cuándo se escribirá x como resultado del siguiente enunciado if?
if((x <= 0) && (x % 5))
cout << x << endl;
2. Convierta el enunciado sencillo if de la pregunta 1 en dos enunciados if anidados.
3. Considere la siguiente salida de un segmento de programa:
cout << “Escriba un valor para x ”;
cin >> x;
cout << “Escriba un valor para y ”;
cin >> y;
if x > 0
{
if y > 0
--y;
} // Fin de if x > 0
else
++x;
if (x >= 0)
if(x <= 10)
{
y = x * x;
if(x <= 5)
FUNDAMENTOS – LECCIÓN 8
8-39
MIGUEL Á. TOLEDO MARTÍNEZ
x = sqrt(x);
} // Fin de if(x<= 10)
else
y = 10 * x;
else
y = x * x * x;
¿Qué mostrará el programa para cada uno de los siguientes valores iniciales de x?
a. x = 0;
b. x = 4;
c. x = -5;
d. x = 10;
9. Considere el siguiente enunciado switch:
x = 2;
switch(potencia)
{
case 0:
cout << ‘1’ << endl;
break;
case 1:
cout << x << endl;
break;
case 2:
cout << x * x << endl;
break;
case 3:
cout << x * x * x << endl;
break;
case 4:
cout << x * x * x * x << endl;
break;
default:
cout << “No existe correspondencia para esta potencia.” << endl;
} // Fin de switch
¿Qué mostrará el código para cada uno de los siguientes valores de potencia?
a. potencia = 0;
b. potencia = 1;
c. potencia = 2;
d. potencia = 3;
e. potencia = 4;
10. Considere los siguientes enunciados switch anidados:
switch(x)
{
case 2:
case 4:
case 6:
switch(y)
FUNDAMENTOS – LECCIÓN 8
8-40
MIGUEL Á. TOLEDO MARTÍNEZ
{
case 1:
case 2:
case 3:
x = x + y;
break;
case –1:
case –2:
case –3:
x = x – y;
break;
} // Fin de switch(y)
break;
case 1:
case 3:
case 5:
switch(y)
{
case 2:
case 4:
case 6:
x = x * y;
break;
case –1:
case –4:
case –6:
x = y * y;
break;
} // Fin de switch(y)
} // Fin de switch(x)
a. x = 4;
y = -2;
b. x = 3;
y = 6;
c. x = 1;
y = -4;
d. x = 7;
y = -2;
e. x = 2;
y = 5;
11. Escriba una sola instrucción C++ que logre lo siguiente:
a. Declare c, estaEsUnaVariable, q76354 y numero como varibles de la clas int.
b. Solicite al usuario que introduzca un entero. Termine su mensaje de solicitud con dos puntos (:), seguido
por un espacio, y deje el cursor después del espacio.
c. Lea un entero que el usuario introduzca desde el teclado y almacene su valor en la varible entera edad.
d. Si la variable numero no es igual a 7, imprima “La variable número no es igual a 7”.
e. Imprima en una línea el mensaje “Este es un programa en C++”.
FUNDAMENTOS – LECCIÓN 8
8-41
MIGUEL Á. TOLEDO MARTÍNEZ
f. Imprima en dos líneas el mensaje “Este es un programa en C++”, terminando la primera en la parte que
dice programa.
g. Imprima el mensaje “Este es un programa en C++” dejando cada palabra del mensaje en una línea
diferente.
h. Imprima el mensaje “Este es un programa en C++” separando las palabras con tabulaciones.
12. Identifique y corrija los errores de las siguientes instrucciones.
a. if(c < 7);
cout << “c es menor que 7\n”;
b. if(c => 7)
cout << “c es igual a o mayor que 7\n”;
13. Llene los espacios en blanco de las siguientes oraciones.
a. Los ___________ se utilizan para documentar los programas y simplificar su lectura.
b. El objeto empleado para imprimir información en la pantalla se llama ____________.
c. Una instrucción C++ que toma decisiones es ________________.
d. Las instrucciones ______________ son las que normalmente realizan los cálculos.
e. El objeto ___________ introduce valores desde el teclado.
PROBLEMAS
4. Escriba un programa que acepte como entrada el radio de un círculo e imprima su diámetr o, circunferencia
y área. Emplee el valor constante 3.14159 para π. Efectúe los cálculos en instrucciones de salida.
5. Escriba un programa que lea cinco enteros y determine cuál es el más pequeño y cuál el más grande
imprimiéndolos en pantalla.
6. Escriba un programa que lea un entero y determine si es par o non imprimiendo el resultado (Sugerencia:
utilice el operador de módulo. Un número par es un múltiplo de dos. Cualquier múltiplo de dos deja un residuo
de cero al dividirse entre 2)
7. Escriba un programa que lea dos enteros y determine si el primero es un múltiplo del segundo, y que
imprima el resultado (Sugerencia: utilice el operador de módulo)
8. Escriba un programa que acepte como entrada un número de cinco dígitos, lo separe en sus distintos dígitos y
los imprima separándolos cada uno con tres espacios. (Sugerencia: emplee los operadores de división y de
módulo) Por ejemplo, si el usuario tecla 42339, el programa deberá imprimir:
4 2 3 3 9
9. Una dimensión de una parte dibujada indica que la longitud de la parte es 3.00 ± 0.25 pulgadas. Quiere decir
que la longitud mínima aceptable de la parte es 2.75 pulgadas y la longitud máxima aceptable de la parte es 3.25
pulgadas. Escriba un programa para mostrar “ACEPTABLE” si la parte está dentro de la ot lerancia o
“INACEPTABLE” si la parte está fuera de la tolerancia.
10. Codifique un programa que calcule las raíces de una ecuación cuadrática.
FUNDAMENTOS – LECCIÓN 8
8-42
MIGUEL Á. TOLEDO MARTÍNEZ
11. Escriba un programa que clasifique dos valores enteros en orden numérico, sin importar el orden en el cual se
ingresan.
12. Escriba un programa que muestre el nombre correspondiente de un mes para una entrada entero entre 1 y 12.
Protéjalo para entradas no válidas.
13. Escriba un programa que calcule el precio del boleto de ida y vuelta en ferrocarriles, conociendo la distancia
del viaje de ida y el tiempo de estancia. El precio por kilómetro es de $0.17. Se sabe además que si el número de
días de estancia es superior a 7 y la distancia total (ida y vuelta) a recorrer es superior a 800 Km. el boleto tiene
un descuento del 30% .
14. Emplee enunciados if/else anidados para convertir una calificación numérica a una calificación de letra de
acuerdo con la siguiente escala:
90 – 100 A
80 – 89 B
70 – 79 C
60 – 69 D
Menos de 60 R
15. En una tienda efectúan un descuento a los clientes dependiendo del monto de la compra. El descuento se
efectúa con base al siguiente criterio:
compra < $500.00 No hay descuento
$500.00 <= compra <= $1,000.00 5% de descuento
$1,000.00 < compra <= $7,000.00 11% de descuento
$7,000.00 < compra <= $15,000.00 18% de descuento
compra > $15,000.00 25% de descuento
Escriba un programa tal, que dado el importe de la compra de un cliente, determine lo que el mismo debe de
pagar.
16. La energía eléctrica, en watts, de un circuito de corriente directa se define como el producto del voltaje por la
corriente. En símbolos:
E=V xC
En donde:
E es la energía en watts,
V es el voltaje en voltios,
C es la corriente en amperios.
Escriba un programa con manejo de menús que le permita a un técnico encontrar la energía de corriente
directa, el voltaje y la corriente, conociendo los otros dos valores. Protéjalo contra entradas no válidas.
17. Estamos en ACME, S. A. DE C. V. Esta vez se necesita un programa que proyecte la utilidad de su
departamento de artículos deportivos. Los artículos en el departamento se codifican con 1, 2 o 3, dependiendo
de la cantidad de utilidad para el artículo. Un artículo con un código de utilidad 1 produce una utilidad del
10% , un código 2 produce una utilidad del 12% y un código 3 genera una utilidad del 15% . Escriba un
programa que proyecte la utilidad del siguiente inventario:
El programa deberá generar un reporte del artículo, la cantidad, la utilidad esperada en pesos por artículo y la
utilidad total esperada para todos los artículos.
18. Además de obtener un salario regular, Emilio Pérez Sánchez también recibe una comisión por lo que vende en
la tienda ACME S,.S. A. DE C. V. Su comisión se basa en las ventas totales en pesos que realiza en una
semana de acuerdo con la siguiente tabla:
FUNDAMENTOS – LECCIÓN 8
8-43
MIGUEL Á. TOLEDO MARTÍNEZ
Ventas Comisión(%)
Menos de $250.00 0
$250.00 - $499.99 5
$500.00 - $1000.00 7.5
Más de $1000.00 10
Escriba un programa para ACME S. A. DE C. V. que determine la comisión de las ventas de Emilio a
partir de una entrada del usuario para las ventas semanales. El programa mostrará el total de las ventas en
pesos y la comisión de las ventas correspondientes en pesos.
y = x 2 + 2x – 3 sí -3 <= x <= 2
y = 5x + 7 sí 2 < x <= 10
y=0 sí x <= -3 ó x > 10
x
2
si(x mod4) = 0
x/6 si(x mod4) = 1
f(x) =
x si(x mod4) = 2
+5 = 3
3
x si( xmod4)
Cada trabajador puede tener como máximo 30 horas extras, si tiene más sólo se les pagarán 30 horas. A
los trabajadores con categoría mayor a 4 no debemos pagarle horas extras.
23. Escriba un programa tal que dados como datos la matrícula de un alumno, la carrera en la que está inscrito,
su semestre y su promedio; determine si el mismo es apto para pertenecer a alguna de las facultades que tiene
la universidad. Si el alumno es aceptado teniendo en cuenta las especificaciones que se listan abajo, se debe
imprimir su matrícula, carrera y la palabra aceptado.
FUNDAMENTOS – LECCIÓN 8
8-44
MIGUEL Á. TOLEDO MARTÍNEZ
24. En un hospital se ha hecho un estudio sobre los pacientes registrados durante los últimos 10 años, con el objeto
de hacer una aproximación de los costos de internación por paciente. Se obtuvo un costo promedio diario
según el tipo de enfermedad que aqueja al paciente; además se pudo determinar que en promedio todos los
pacientes con edad entre 14 y 22 años implican un costo adicional del 10% . La siguiente tabla expresa los
costos diarios, según el tipo de enfermedad.
TIPO DE
COSTO/PACIENTE/DIA
ENFERMEDAD
1 25
2 16
3 20
4 32
Elabore un programa que calcule e imprima el costo total que representa un paciente dados el tipo de
enfermedad, la edad y los días que estuvo internado.
EXAMEN BREVE 19
1. Verdadero o falso: Una expresión de verificación que evalúa cualquier valor diferente de cero se
considera verdadera.
2. Verdadero o falso: Cuando una expresión de verificación en un enunciado if evalúa cero, los
enunciados relacionados if se ignoran.
3. ¿Dónde está el error en el siguiente enunciado if?
if (x = y)
cout << “Hay un problema aquí” << endl;
4. ¿Qué operador booleano deberá emplearse para verificar que dos condiciones son verdaderas ?
5. ¿Qué operador(es) boole ano(s) deberá(n) emplearse para verificar que una de las dos condiciones es
falsa?
6. ¿Qué operador booleano deberá emplearse para verificar que una de las dos condiciones es
verdadera?
7. ¿Para cuáles valores de x se ejecutará el enunciado cout en la siguiente codificación?
if (!x)
cout << “Hola” << endl;
EXAMEN BREVE 20
1. Verdadero o falso: cuando la expresión de verificación en una operación if/else se evalúa a cero, se
ejecutan los enunciados else.
FUNDAMENTOS – LECCIÓN 8
8-45
MIGUEL Á. TOLEDO MARTÍNEZ
EXAMEN BREVE 21
1. Explique por qué es importante la sangría cuando las operaciones están anidadas.
2. Verdadero o falso: Cualquier else dado siempre está relacionado con el if más cercano.
Considere el siguiente seudocódigo para contestar las preguntas 3-6:
si valor < 50
si valor > -50
Escribir(“Rojo”)
Si no
Escribir(“Blanco”)
Si no
Escribir(“Azul”)
3. ¿Qué rango de valores hará que se escriba “Rojo”?
4. ¿Qué rango de valores hará que se escriba “Blanco”?
5. ¿Qué rango de valores hará que se escriba “Azul”?
6. Convierta la lógica if-if-else-else a la lógica if-else-if-else.
EXAMEN BREVE 22
1. Verdadero: Una expresión de verificación que evalúa cualquier valor diferente de cero se considera
verdadera.
2. Verdadero: Cuando una expresión de verificación en un enunciado if evalúa cero, los enunciados
relacionados if se ignoran.
3. En el símbolo de asignación, la codificación correcta es la siguiente:
if (x == y)
cout << “ Hay un problema aquí” << endl;
4. El operador && (AND) debe emplearse para verificar que las dos condiciones son verdaderas
5. Los operadores !&& (NOT AND) deben emplearse para verificar que una de las dos condiciones es
falsa.
6. El operador || (OR) debe emplearse para verificar que una de las dos condiciones es verdadera.
7. El enunciado cout se ejecutará cuando x es 0, porque !x = !0 = 1 = verdadero.
FUNDAMENTOS – LECCIÓN 8
8-46
MIGUEL Á. TOLEDO MARTÍNEZ
1. Verdadero: cuando la expresión de verificación en una operación if/else se evalúa a cero, se ejecutan
los enunciados else.
2. El siguiente seudocódigo necesita un else porque, sin un else, ambas enunciados, es día de pago y no
es día de pago, se escribirían cuando la verificación if sea verdadera.
Si dia = Viernes
Escribir(“Es día de pago”)
Escribir(“No es día de pago”)
3. Verdadero: se pueden eliminar las llaves cuando una sección del enunciado if o else solamente tienen
un enunciado sencillo.
1. La sangría es importante cuando las operaciones están anidadas para mejorar la legibilidad del
código y para poder echar un vistazo qué enunciados pertenecen a cuáles enunciados if o else.
2. Verdadero: El else anidado en la parte más interna siempre va con el if más cercano.
Considere el siguiente seudocódigo para contestar las preguntas 3-6:
si valor < 50
si valor > -50
Escribir(“Rojo”)
Si no
Escribir(“Blanco”)
Si no
Escribir(“Azul”)
3. “Rojo” se escribirá cuando el valor sea mayor que –50 y menor que 50.
“Blanco” se escribirá cuando el valor sea menor o igual a –50.
4. “Azul” se escribirá cuando el valor sea mayor o igual a 50.
5. El if-else-if-else equivalente es:
si valor >= 50
Escribir(“Azul”)
Si no
si valor <= -50
Escribir(“Blanco”)
Si no
Escribir(“Rojo”)
FUNDAMENTOS – LECCIÓN 8
8-47
MIGUEL Á. TOLEDO MARTÍNEZ
4. Un enunciado que se puede insertar al final del enunciado switch para proteger contra ingresos no
válidos es el enunciado default.
Una aplicación común para el enunciado switch es en los programas que manejan menús.
FUNDAMENTOS – LECCIÓN 8
8-48