Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Gómez, Rodrı́guez & Cubides (UN) Programación de computadores, Cap. 6.2 1/1
La estructura de control condicional sı́ (if)
Agenda
Gómez, Rodrı́guez & Cubides (UN) Programación de computadores, Cap. 6.2 2/1
La estructura de control condicional sı́ (if)
El condicional if I
Gómez, Rodrı́guez & Cubides (UN) Programación de computadores, Cap. 6.2 3/1
La estructura de control condicional sı́ (if)
<bloque_prev>
V F
<cond>
<bloque_V> <bloque_F>
<bloque_sigui>
Gómez, Rodrı́guez & Cubides (UN) Programación de computadores, Cap. 6.2 4/1
La estructura de control condicional sı́ (if)
Gómez, Rodrı́guez & Cubides (UN) Programación de computadores, Cap. 6.2 5/1
La estructura de control condicional sı́ (if) Valor absoluto de un número
Agenda
Gómez, Rodrı́guez & Cubides (UN) Programación de computadores, Cap. 6.2 6/1
La estructura de control condicional sı́ (if) Valor absoluto de un número
Ejemplo
La función que permite calcular el valor absoluto de un número real es una
función que recibe como parámetro de entrada un número real y retorna la
distancia de ese valor al origen. La función valor absoluto en notación
matemática se define como
valor absoluto : R → R
(
x, si x ≥ 0;
(x) 7→
−x, en otro caso.
Gómez, Rodrı́guez & Cubides (UN) Programación de computadores, Cap. 6.2 7/1
La estructura de control condicional sı́ (if) Valor absoluto de un número
Ejemplo (continuación)
Un diagrama de flujo que representa el condicional que está implı́cito en la
función valor absoluto es el siguiente
double valor;
V F
x >= 0
return valor;
Gómez, Rodrı́guez & Cubides (UN) Programación de computadores, Cap. 6.2 8/1
La estructura de control condicional sı́ (if) Valor absoluto de un número
Ejemplo (continuación)
La codificación en C++ de esta función junto con su programa principal es
#include<iostream>
#include<cstdlib>
Gómez, Rodrı́guez & Cubides (UN) Programación de computadores, Cap. 6.2 9/1
La estructura de control condicional sı́ (if) Valor absoluto de un número
Ejemplo (continuación)
Ejemplo (continuación)
int main(){
double x;
cout << "x? = ";
cin >> x;
cout << "El valor absoluto es: ";
cout << valor_absoluto(x);
cout << endl;
system("pause");
return EXIT_SUCCESS;
};
Agenda
Ejemplo
Una función que permite determinar el máximo de dos números reales, se
puede definir como
Ejemplo (continuación)
Un diagrama de flujo que representa el condicional que está implı́cito en la
función máximo entre dos números es el siguiente
V F
a > b
return a; return b;
Ejemplo (continuación)
La regla de traducción de la función es similar a la anterior, sólo hay que
tener en cuenta la instrucción condicional, y que si no se cumple la
condición especificada en el if, se ejecutará el flujo de instrucciones
especificado bajo el alcance de la instrucción else
Agenda
El operador condicional ?: I
if(<cond>){
<bloque_1>
}else{
<bloque_2>
};
Ejemplo
Una función equivalente a la anterior, que es más compacta y que también
permite calcular el valor absoluto, es la siguiente
Agenda
<bloque_prev>
V
<cond>
<bloque>
<bloque_sigui>
<bloque_prev>
if(<cond>){
<bloque>
};
<bloque_sigui>
Agenda
Ejemplo
Cuando se realiza la impresión de un número en la consola o cualquier otro
dispositivo de salida, es a veces se desea que si un número es positivo, este
sea impreso con el signo +, es decir, que para el caso del número
3.14159265 su impresión seria +3.14159265 en vez de su tradicional
representación 3.14159265. Para el caso del cero (0) y los números
negativos la impresión es la usual.
Ejemplo (continuación)
Un diagrama de flujo que describe las instrucciones para imprimir un
número con signo es el siguiente
V
x > 0.0
cout << x;
return x;
Ejemplo (continuación)
Una función en C++ que permite imprimir los números con signos es la
siguiente
Agenda
Ejemplo
En los lenguajes de programación tı́picamente están definidos los
operadores lógicos de la negación (¬), la conjunción (∧) y la disyunción
(∨), pero el condicional y el bicondicional no lo están, por lo tanto si se
quiere utilizar estos operadores es necesario construir las funciones que
permitan utilizar estos operadores. Para el caso del condicional y a partir
de la tabla de verdad para el operador condicional definido en el capı́tulo
de lógica
Ejemplo (continuación)
se puede definir una función que permite calcular la operación condicional
de un par de variables booleanas y que retorna el resultado de operar los
valores mediante un condicional, de la siguiente manera
condicional : B × B −→ B
condicional : B × B → B
(
F, si ξ(p) = V ∧ ξ(q) = F ;
(p, q) 7→
V, en cualquier otro caso.
Ejemplo (continuación)
Una posible codificación en C++ de esta función seria
Ejemplo (continuación)
obsérvese que es posible construir una función que utilice sólo una
estructura if sin la sentencia else que es mucho más sencilla que la
función presentada anteriormente,
Agenda
V F
<cond_1>
V F
<bloque_1> <cond_2>
<bloque_2> ···
V F
<cond_i>
<bloque_i> ···
V F
<cond_n-1>
<bloque_n-1> <bloque_n>
<bloque_sigui>
Agenda
Ejemplo
Una tienda tiene las siguientes promociones
Si un cliente lleva más de 5 productos del mismo tipo le
realizan un descuento del 5%. Si lleva más de 10 productos del
mismo tipo le realizan un descuento del 10%. Si lleva más de 20
productos del mismo tipo le realizan un descuento del 20%.
Realizar un programa que dado el número de productos y el
precio del producto determine el valor a pagar por el cliente.
Ejemplo (continuación)
La siguiente función permitirá calcular el valor deseado
entonces
Ejemplo (continuación)
pago final : N × R → R
n ∗ precio,
n ≤ 5;
n ∗ precio ∗ 0.95, 5 < n ≤ 10;
(n, precio) 7→
n ∗ precio ∗ 0.90, 10 < n ≤ 20;
n ∗ precio ∗ 0.80, en otro caso.
Ejemplo (continuación)
Otra posible escritura de la función puede ser
double pago_final(int n, double precio){
if(n <= 5){
return n * precio;
}else if(5 < n && n <= 10){
return n * precio * 0.95;
}else if(10 < n && n <= 20){
return n * precio * 0.90;
}else{
return n * precio * 0.80;
};
};
Agenda
if(<var_entera> == <num_1>){
<bloque_1>
}else if(<var_entera> == <num_2>){
<bloque_2>
}
...
}else if(<var_entera> == <num_i>){
<bloque_i>
}
...
}else if(<var_entera> == <num_n-1>){
<bloque_n-1>
}else{
<bloque_n>
};
en este caso se utiliza una instrucción switch, la cual sirve para abreviar
una instrucción if enlazada como la anterior. El aspecto general de una
instrucción switch es la siguiente:
La variable aparece únicamente como parámetro de la instrucción
switch.
Cada uno de los valores enteros constantes se trata como un caso,
especificando la palabra case seguido de la constante y terminando
con : (dos puntos).
switch(<var_entera>){
case <num_1>:
<bloque_1>
break;
case <num_2>:
<bloque_2>
break;
...
case <num_i>:
<bloque_i>
break;
...
case <num_i>:
<bloque_i>
break;
...
case <num_n-1>:
<bloque_n-1>
break;
default:
<bloque_n>
break;
};
Agenda
Ejemplo
La siguiente función permite determinar si dada una letra, ésta es una
vocal minúscula, en caso de no ser ası́, entonces por defecto se retorna
falso.
Ejemplo (continuación)
Hay que tener presente que todo carácter es representado por un número
entero, por eso es posible utilizar una variable de tipo carácter dentro de
una instrucción switch. La codificación de la anterior función matemática
en C++ puede ser la siguiente.
Ejemplo (continuación)
Ejemplo (continuación)
case ’o’:
value = true;
break;
case ’u’:
value = true;
break;
default:
value = false;
break;
};
return value;
};
Ejemplo
En este ejemplo se agruparon todos lo casos de las vocales en uno solo.
switch(ch){
case ’a’:
case ’e’:
case ’i’:
case ’o’:
case ’u’:
value = true;
break;
default:
value = false;
break;
};
return value;
};
Gómez, Rodrı́guez & Cubides (UN) Programación de computadores, Cap. 6.2 58 / 1
La estructura de conmutación (switch) Detección de vocales minúsculas
Es usual que las instructiones que se ejecutan dentro de los casos de una
instrucción switch se retornen directamente cuando se calculen dentro de
una función, para estos casos, en vez de dejar de ejecutar el switch con un
break, se puede retornar el valor directamente mediante el uso de la
instrucción return. Si se elije esta opción no se debe utilizar la instrucción
break. A continuación se muestra esta variación de la instrucción switch.
Agenda
Ejemplo
La codificación en C++ de la función para calcular el área de un
rectángulo haciendo la validación de la positividad tanto del ancho como
de la altura es la siguiente
#include<iostream>
#include<cstdlib>
Ejemplo (continuación)
int main(){
double largo;
double ancho;
cout << "largo? = ";
cin >> largo;
if(largo < 0){
cout << "El largo no es valido";
cout << endl;
system("pause");
return EXIT_FAILURE;
};