Sei sulla pagina 1di 22

Captulo 6

Funciones en programacion y la estructura


condicional
En programaci on, as como en matematicas, para las funciones denidas como f A
B, al conjunto A se le denomina dominio y al conjunto B como rango. A partir de estos
objetos se construye el encabezado de las funciones de programaci on.
Sobre esta funci on se tiene que f corresponde al nombre de la funcion, el conjunto A
corresponde al tipo de los argumentos de dicha funcion y el conjunto B que es el rango
corresponder a al valor de retorno de dicha funci on.
Ejemplo. Cuadrado de un n umero
Se denira una funci on que eleve un n umero al cuadrado. Para expresar una funci on
que calcule esta operaci on, en primera instancia se construye la expresi on f R R que
dene la funcion tiene como entrada (dominio) un n umero real y como salida (rango) un
n umero real. La declaracion de la funcion junto con su cuerpo quedara de la siguiente
forma
f R R
(x) x
2
Esta funcion tambien podra notarse como
f = (x, x
2
) (x R).
Dicha funci on se traduce en lenguaje C++ paso a paso de la siguiente forma:
Primero se escribe el tipo de retorno (rango). Como es real, el tipo de dato es double.
double
Posteriormente se escribe el nombre de la funci on f.
85
86 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
double f
Entre parentesis se coloca el tipo y la variable de las variables del dominio. En este
caso solamente se tiene la variable x quedando double x y se coloca una llave abierta
{.
double f(double x){
En las siguientes lneas se escribe la denici on de la funci on entre las llaves termi-
nando con punto y coma ; cada linea de la funcion. Dicha denicion de funcion
corresponde al algoritmo o computo, para generar la imagen calculada de la funcion
se utiliza la palabra clave return, de la siguiente manera
double f(double x){
return x * x;
Despues de escribir la funci on se cierra la llave } seguida de un punto y coma ;.
double f(double x){
return x * x;
};
Otra posible denici on de la funci on podra escribirse almacenando el valor del producto
x * x en una variable de tipo double y retornandolo as:
double f(double x){
double y;
y = x * x;
return y;
};
Esto es similar al caso cuando se utiliza la notaci on
f(x) = y
donde x es una variable independiente y y es la variable dependiente.
Ejemplo.

Area de un crculo
Para el desarrollo de esta funcion lo primero es determinar el nombre. La funci on se
llamar a area circulo cuyo dominio es el conjunto de los n umeros reales (para el radio) y
cuyo rango pertenece al conjunto de los n umeros reales (el valor de retorno que corresponde
al area del crculo).
Teniendo en cuenta que el algoritmo para el calculo del area de un crculo depende del
valor de su radio, entonces, el area del crculo esta dada por la expresion A
c
= r
2
, donde
las variables estan denidas as:
87
r = Radio del crculo
A
c
=

Area del crculo de radio r
entonces, el planteamiento matem atico de la funcion solicitada sera el siguiente
area circulo R R
(r) 3.14159265 r r
N otese que para denir el valor se tom o como aproximaci on el valor 3.14159265.
En vez de elevar el valor del radio al cuadrado se tom o la multiplicaci on de r r ya
que la potencia no es una operacion matematica basica. En la secci on de recursividad se
denir a potencia como una funci on.
Esta funcion se traduce al lenguaje C++ paso a paso de la siguiente forma:
Primero se escribe el tipo de retorno en este caso el conjunto que corresponde al tipo
de dato del area del crculo, como es real el tipo de dato es double.
double
Posteriormente se escribe el nombre de la funci on area_circulo.
double area_circulo
observese que la palabra circulo en el nombre de la funci on se escribe sin tilde, ya
que unicamente se pueden utilizar caracteres del alfabeto ingles
Entre parentesis se coloca el tipo y la variable de las variables del dominio. En este
caso solamente se tiene la variable r de tipo double r y se coloca una llave abierta
{.
double area_circulo(double r){
En las siguientes lneas se escribe el c alculo del area del crculo y se retorna el valor
calculado.
double area_circulo(double r){
return 3.14159265 * r * r;
Despues de escribir la funci on se cierra la llave } seguida de un punto y coma ;.
double area_circulo(double r){
return 3.14159265 * r * r;
};
88 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
Otra posible denicion de la funcion podra escribirse almacenando el valor del area del
crculo en una variable de tipo double y retornandolo as:
double area_circulo(double r){
double area;
area = 3.14159265 * r * r;
return area;
};
Esto es similar al caso cuando se utiliza la notaci on
area circulo(r) = area
para expresar la funci on, la variable independiente y la dependiente.
6.1. Compilaci on y ejecuci on de funciones
Para el desarrollo de programas en este libro se utilizar a como lenguaje de programacion
el lenguaje C++. En esta primera parte del libro se denir an las funciones en el mismo
archivo fuente. Los archivos de C++ corresponden a la extensi on *.cpp.
Para la generaci on de archivos ejecutables se utilizara la salida y entrada est andar de
la consola denida en la librera iostream, y para el manejo de las funciones del sistema
se utilizara la librera cstdlib.
Todo programa ejecutable elaborado en C++ tiene una funcion principal que realiza los
llamados a las distintas funciones tanto del lenguaje como las denidas por el programador.
Se utilizara el siguiente esqueleto para denir dichas funciones en C++
6.1. COMPILACI

ON Y EJECUCI

ON DE FUNCIONES 89
#include<iostream>
#include<cstdlib>
using namespace std;
/*
En esta parte se definen las funciones
*/
int main(){
/*
En esta parte se realiza la lectura de datos,
y los llamados a las funciones
*/
cout << endl;
system("pause"); //windows
return EXIT_SUCCESS;
};
Para el caso del area del crculo, el archivo fuente en C++ sera el siguiente, en el cual
se han separado el encabezado del archivo, la funcion del calculo del area y la funci on
principal
#include<iostream>
#include<cstdlib>
using namespace std;
double area_circulo(double r){
return 3.1415962 * r * r;
};
int main(){
double radio;
cout << "radio del circulo? = ";
cin >> radio;
cout << "El area del circulo es: ";
cout << area_circulo(radio);
cout << endl;
system("pause"); //windows
return EXIT_SUCCESS;
};
90 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
Como se aprecia en el programa anterior, se utilizan las funciones cin y cout que perte-
necen a la librera de entrada y salida de ujos de datos iostream. Las dos primeras lneas
de codigo permiten al compilador incluir las deniciones de estas funciones en el programa
principal. La funci on cout lo que hace es mostrar una cadena de caracteres (texto) en la
consola. La instrucci on cout << endl, hace que se oblige a generar una nueva lnea en la
consola. La funcion cin lo que hace es asignar el valor que sea digitado en la consola a la
variable de la parte de la izquierda del operador <<. En la instrucci on cin >> radio; se
asigna a la variable radio el valor digitado por el usuario. system("pause") lo que hace
es ejecutar el comando pause de Windows que permite pedirle al usuario que presione una
tecla para continuar la ejecucion del programa o en este caso por estar antes del retorno
o n de la funci on principal para salir de el devolviendo al sistema operativo un valor de
EXIT_SUCCESS para indicar que ejecuci on del programa fue satisfactoria, es decir, que en
este caso el programa se ejecut o correctamente.
El programa anterior pide al usuario digitar el radio del crculo y almacena el valor de
la lectura en la variable radio. Posteriormente despliega un mensaje y se realiza el llamado
a la funci on area_circulo. N otese que los nombres de variables (en este caso radio) en
el programa principal no necesariamente deben coincidir con los de la declaracion de la
funci on (en este caso la funci on recibe un valor de tipo double llamado r), sin embargo
se debe notar que su tipo de dato s debe ser el mismo.
6.2. Funciones con mas de un parametro de entrada
Las funciones est an denidas de la forma f A B, siendo A y B conjuntos. Esta
denici on nos permite utilizar productos cartesianos generalizados como dominio en la
declaraci on de las funciones.
Ejemplo.

Area de un rectangulo
La funcion que calcula el area de un rect angulo es una funci on que tiene como parame-
tros de entrada el ancho y el largo del rectangulo que son valores de tipo real y retorna
como salida el area del rect angulo. Lo que puede escribirse como
area rectangulo R R R.
Para el calculo del area de un rect angulo es necesario conocer el largo y el ancho del
rect angulo, a partir de los cuales el area del rect angulo est a dada por la expresi on A
r
= la,
donde las variables estan denidas as:
l = Largo del rect angulo
a = Ancho del rectangulo
A
r
=

Area del rect angulo de largo l y ancho a
entonces, la funcion matem atica queda denida de la siguiente forma
6.2. FUNCIONES CON M

AS DE UN PAR

AMETRO DE ENTRADA 91
area rectangulo R R R
(l, a) l a
Para traducir a lenguaje C++ se toman las mismas reglas de traducci on:
Primero se escribe el tipo de retorno en este caso el conjunto que corresponde al tipo
de dato del area del rect angulo, como es real el tipo de dato es double.
double
Posteriormente se escribe el nombre de la funci on area_rectangulo.
double area_rectangulo
Entre parentesis se colocan el conjunto de cada variable del dominio y el nombre de
la variable separados por comas. En este se tienen las variables l y a correspondientes
al largo y al ancho del rect angulo y se coloca una llave abierta.
double area_rectangulo(double l, double a){
En las siguientes lneas se escribe el calculo del area del rect angulo, se retorna el
valor calculado y se cierra la denicion de la funci on.
double area_rectangulo(double l, double a){
return l * a;
};
Otra posible escritura de la funci on puede ser
double area_rectangulo(double l, double a){
double area;
area = l * a;
return area;
};
Esto es similar al caso cuando se utiliza la notaci on
area rectangulo(l, a) = area
para expresar la funci on, las variables independientes y la dependiente.
Para el llamado de la funcion se podra tener el siguiente programa principal:
92 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
#include<iostream>
#include<cstdlib>
using namespace std;
double area_rectangulo(double l, double a){
return l * a;
};
int main(){
double largo;
double ancho;
cout << "largo? = ";
cin >> largo;
cout << "ancho? = ";
cin >> ancho;
cout << "El area del rectangulo es: ";
cout << area_rectangulo(largo, ancho);
cout << endl;
system("pause");
return EXIT_SUCCESS;
};
Problema. Para el vag on que se presenta a continuacion,
r
r
b
a
1. Establecer el modelo matematico (funcion matem atica) que permita calcular el area
lateral del vagon.
2. Escribir una funci on en C++ que implemente la funci on anteriormente modelada.
Problema. Para el carro que se presenta a continuacion,
6.3. LA ESTRUCTURA DE CONTROL DE CONDICIONAL S

I (IF) 93
r
1
r
2
b
1
a
1
b
2
a
2
1. Establecer el modelo matematico (funcion matem atica) que permita calcular el area
lateral del carro.
2. Escribir una funci on en C++ que implemente la funci on anteriormente modelada.
3. Escribir una funcion en C++ que implemente la funci on matem atica previamente
modelada, en la cual se utilice la composicion de las funciones de suma de n umeros
reales, area circulo y area rectangulo.
6.3. La estructura de control de condicional s (if)
6.3.1. El condicional if
Es posible tener programas en los que se deban cubrir diferentes casos, para los cuales
se deberan retornar diferentes valores dadas unas condiciones.
La estructura de control condicional o de selecci on permite ejecutar, o un grupo de
instrucciones u otro grupo si una condici on se cumple o no, un condicional en C++ se
especica mediante el siguiente fragmento de codigo
if(<cond>){
<body_1>
}else{
<body_2>
};
donde se ejecutara <body_1> si <cond> se eval ua verdadero, en caso de que <cond> se
eval ue falso de ejecutara <body_2>, despues de ejecutar <body_1> o <body_2> se continua
con la ejecuci on del resto del programa, despues de la estructura if.
Ejemplo. Valor absoluto de un n umero
La funci on que permite calcular el valor absoluto de un n umero real es una funcion que
recibe como par ametro de entrada un n umero real y retorna la distancia de ese valor al
origen. La funci on valor absoluto en notaci on matematica se dene como
94 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
valor absoluto R R
(x)

x, si x 0;
x, en otro caso.
La codicacion en C++ de esta funci on junto con su programa principal es
#include<iostream>
#include<cstdlib>
using namespace std;
double valor_absoluto(double x){
double valor;
if(x >= 0){
valor = x;
}else{
valor = -x;
};
return valor;
};
int main(){
double x;
cout << "x? = ";
cin >> x;
cout << "El valor absoluto es: ";
cout << valor_absoluto(x);
cout << endl;
system("pause");
return EXIT_SUCCESS;
};
Ejemplo. El maximo entre dos n umeros
Una funcion que permite determinar el maximo de dos n umeros reales, se puede denir
como
maximo dos numeros R R R
aqu se tienen dos casos, si el n umero a es mayor que b el valor maximo es a; en otro caso
se debe retornar b. En notaci on matematica esto puede ser escrito de la siguiente forma
maximo dos numeros R R R
(a, b)

a, si a > b;
b, en otro caso.
6.3. LA ESTRUCTURA DE CONTROL DE CONDICIONAL S

I (IF) 95
La regla de traducci on a funci on es similar a la anterior, solo hay que tener en cuenta
la instrucci on condicional, y que si no se cumple la condicion especicada en el if, se
ejecutar a el ujo de instrucciones especicado bajo el alcance del else
double maximo_dos_numeros(double a, double b){
if(a > b){
return a;
}else{
return b;
};
};
6.3.2. El operador condicional ?:
En C++ y particularmente en las ultimas decadas en muchos lenguajes de programa-
ci on se dispone de un operador ternario que act ua como un condicional if compacto,
este operador condicional ?: es utilizado en los casos en los cuales se tienen que evaluar
expresiones muy simples, de forma r apida y que usualmente retornan alg un resultado, el
cual depende se si la condici on se eval ua falso o verdadero.
A partir de la sintaxis general de un condicional if
if(<cond>){
<body_1>
}else{
<body_2>
};
se tiene que la sintaxis general de un operador condicional ?: que es equivalente al condi-
cional if es la siguiente
<cond> ? <body_1> : <body_2>;
es importante tener en cuenta que el operador condicional siempre retorna el resultado de
la evaluaci on de la expresion seleccionada.
Ejemplo. La siguiente funci on permite calcular el valor absoluto de un n umero real, pero
utilizando el operador condicional ?: en vez del condicional if presentado en un ejemplo
previo
double valor_absoluto(double x){
double valor;
valor = x >= 0 ? x : -x;
return valor;
};
96 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
Ejemplo. Una funcion equivalente a la anterior, que es mas compacta y que tambien
permite calcular el valor absoluto, es la siguiente
double valor_absoluto(double x){
return x >= 0 ? x : -x;
};
6.3.3. El condicional if sin la sentencia else
En una estructura if la parte else es opcional, es decir, para el fragmento de codigo
if(<cond>){
<body>
};
se ejecutar a un grupo de instrucciones <body> si <cond> se eval ua verdadero, en otro
caso salta al nal de la estructura if y continua con el resto del programa, despues de la
estructura if.
Este tipo de estructura se suele utilizar cuando se desea agregar una evaluaci on inter-
media de una expresi on cuando la condicion <cond> se eval ua verdadero, pero que no tiene
impacto sobre la ejecuci on del resto del programa que le sigue al condicional.
Ejemplo. Impresion de n umeros con signo
Cuando se realiza la impresi on de un n umero en la consola o cualquier otro dispositivo
de salida, es usual que se desee que si el n umero es positivo, este sea impreso con el signo
+, es decir, que para el caso del n umero 3.14159265 su impresi on seria +3.14159265 en
vez de su tradicional representaci on 3.14159265. Para el caso del cero (0) y los n umeros
negativos la impresion es la usual. Una funci on que permite imprimir los n umeros con
signos es la siguiente
double imprimir_numero(double x){
if(x > 0.0){
cout << "+";
};
cout << x;
return x;
};
observese como la ejecucion del cuerpo del condicional no afecta las instrucciones que
siguen despues del condicional.
Ejemplo. El operador logico condicional
6.3. LA ESTRUCTURA DE CONTROL DE CONDICIONAL S

I (IF) 97
En los lenguajes de programacion tpicamente est an denidos los operadores logicos de
la negaci on (), la conjunci on () y la disyunci on (), pero el condicional y el bicondicional
no lo est an, 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 denido en el captulo de logica
(p) (q) (p q)
V V V
V F F
F V V
F F V
se puede denir una funcion que permite calcular la operaci on condicional de un par de va-
riables booleanas y que retorna el resultado de operar los valores mediante un condicional,
de la siguiente manera
condicional B B B
aqu se tienen dos casos, primero, si el antecedente es verdadero y el consecuente es fal-
so, entonces el resultado de aplicar el condicional el falso, para cualquier otro caso el
condicional es verdadero. En notaci on matematica esto puede ser escrito de la siguiente
manera
condicional B B B
(p, q)

F, si (p) = V (q) = F;
V, en cualquier otro caso.
Una posible codicaci on en C++ de esta funci on seria
bool condicional(bool p, bool q){
if(p == true && q == false){
return false;
}else{
return true;
};
};
observese que es posible construir una funci on que utilice solo una estructura if sin la
sentencia else que es mucho m as sencilla que la funcion presentada anteriormente,
bool condicional(bool p, bool q){
if(p){
return q;
};
return true;
};
98 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
en esta funci on se tiene en cuenta que si la premisa p tiene valor true, entonces el resultado
est a dado por el valor de la conclusion q, y si el valor de p es false, entonces el condicional
tendr a como valor true.
6.3.4. Estructuras if enlazadas
Otra de las opciones para utilizar una estructura if es la de enlazar varias estructuras
if, de tal manera que solamente se pueda ejecutar un grupo de instrucciones dependiendo
de cual de las opciones se eval ua verdadero. De la misma manera que en el caso anterior
la parte else nal es opcional. La codicaci on en C++ de las estructuras if enlazadas es
la siguiente
if(<cond_1>){
<body_1>
}else if(<cond_2>){
<body_2>
}
...
}else if(<cond_i>){
<body_i>
}
...
}else if(<cond_n-1>){
<body_n-1>
}else{
<body_n>
};
donde se ejecutara <body_1> si <cond_1> se eval ua verdadero, en caso de que <cond_1> se
eval ue falso de ejecutar a <body_2> si <cond_2> se eval ua verdadero, y as se continuar a re-
visando cada una de las condiciones si la anterior se eval ua falso. Si alg un <cond_i> se
eval ua verdadero se ejecuta su respectivo <body_i> y despues de ejecutar todas las ins-
trucciones del <body_i> se continua con el resto del programa, despues de la estructuras
if enlazadas.
Ejemplo. El descuento del da
Una tienda tiene las siguientes promociones
Si un cliente lleva mas de 5 productos del mismo tipo le realizan un des-
cuento del 5%. Si lleva m as de 10 productos del mismo tipo le realizan un
descuento del 10%. Si lleva m as de 20 productos del mismo tipo le realizan un
descuento del 20%. Realizar un programa que dado el n umero de productos y
el precio del producto determine el valor a pagar por el cliente.
La siguiente funcion permitir a calcular el valor deseado
6.3. LA ESTRUCTURA DE CONTROL DE CONDICIONAL S

I (IF) 99
pago final(precio, n) = valor
Si se establecen las variables:
precio = Valor de cada producto
n = N umero de productos
valor = Valor total a pagar despues de aplicar el descuento
entonces
pago final Z R R
(n, precio)

n precio, n 5;
n precio 0.95, 5 < n 10;
n precio 0.90, 10 < n 20;
n precio 0.80, en otro caso.
La codicacion en C++ de esta funci on es
double pago_final(int n, double precio){
double valor;
if(n <= 5){
valor = n * precio;
}else if(5 < n && n <= 10){
valor = n * precio * 0.95;
}else if(10 < n && n <= 20){
valor = n * precio * 0.90;
}else{
valor = n * precio * 0.80;
};
return valor;
};
Otra posible escritura de la funci on puede ser
100 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
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;
};
};
6.3.5. La estructura de conmutacion (switch)
Cuando se tiene una instrucci on if enlazada en la cual las condiciones consisten en com-
parar una misma variable con un grupos de valores enteros constantes de forma repetida,
como la que se presenta a continuacion
if(<var_entera> == <num_1>){
<body_1>
}else if(<var_entera> == <num_2>){
<body_2>
}
...
}else if(<var_entera> == <num_i>){
<body_i>
}
...
}else if(<var_entera> == <num_n-1>){
<body_n-1>
}else{
<body_n>
};
en este caso se utiliza una instruccion switch, la cual sirve para abreviar una instrucci on
if enlazada como la anterior. El aspecto general de una instrucci on switch es la siguiente:
La variable aparece unicamente como par ametro de la instruccion switch.
Cada uno de los valores enteros constantes se trata como un caso, especicando la
palabra case seguido de la constante y terminando con : (dos puntos).
A continuaci on se escribe el cuerpo de instrucciones a realizar en cada caso.
6.3. LA ESTRUCTURA DE CONTROL DE CONDICIONAL S

I (IF) 101
Se termina con una instrucci on break que obliga a que se deje de ejecutar la ins-
trucci on switch.
Como en el caso de la instruccion if enlazada el ultimo else es opcional y se ejecuta
cuando ning un otro caso es ejecutado, en el caso del switch existe la instruccion
default que realiza las mismas funciones.
La codicacion en C++ de una estructura switch es la siguiente
switch(<var_entera>){
case <num_1>:
<body_1>
break;
case <num_2>:
<body_2>
break;
...
case <num_i>:
<body_i>
break;
...
case <num_n-1>:
<body_n-1>
break;
default:
<body_n>
break;
};
Ejemplo. Deteccion de vocales min usculas I
La siguiente funcion permite determinar si dada una letra, esta es una vocal min uscula,
en caso de no ser as, entonces por defecto se retorna falso. Hay que tener presente que todo
car acter es representado por un n umero entero, por eso es posible utilizar una variable de
tipo caracter dentro de una instrucci on switch.
102 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
bool es_vocal_minuscula(char ch){
bool value;
switch(ch){
case a:
value = true;
break;
case e:
value = true;
break;
case i:
value = true;
break;
case o:
value = true;
break;
case u:
value = true;
break;
default:
value = false;
break;
};
return value;
};
Cuando en una instrucci on switch varios casos se tratan de la misma forma, entonces
estos se pueden agrupar en uno o varios casos, como se muestra en el siguiente ejemplo.
Ejemplo. Deteccion de vocales min usculas II
En este ejemplo se agruparon todos lo casos de las vocales en uno solo.
6.4. VALIDACI

ON DE DATOS USANDO CONDICIONALES 103


bool es_vocal_minuscula(char ch){
bool value;
switch(ch){
case a:
case e:
case i:
case o:
case u:
value = true;
break;
default:
value = false;
break;
};
return value;
};
Es usual que las instructiones que se ejecutan dentro de los casos de una instrucci on
switch se retornen directamente cuando se calculen dentro de una funcion, 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 on return. Si se elije esta opci on no se debe
utilizar la instruccion break. A continuacion se muestra esta variacion de la instruccion
switch.
Ejemplo. Deteccion de vocales min usculas III
En este ejemplo se agruparon todos lo casos de las vocales en uno solo y se retorno di-
rectamente el resultado de la evaluaci on de cada caso.
bool es_vocal_minuscula(char ch){
switch(ch){
case a:
case e:
case i:
case o:
case u:
return true;
default:
return false;
};
};
6.4. Validacion de datos usando condicionales
Teniendo en cuenta que el algoritmo para el c alculo del area de un rectangulo dada la
denici on del tipo de dato podran estarse leyendo largos o anchos negativos. La notacion
104 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
matem atica tambien permite restringir el dominio y el rango de los conjuntos quedando
la funcion de la siguiente forma
area rectangulo R
0,+
R
0,+
R
0,+
(l, a) l a
Dicha validaci on es suciente a nivel de notacion matematica, pero en programaci on
dichas validaciones sobre los par ametros de entrada corresponder an al programa principal.
Para realizar estas validaciones se tienen dos opciones, el uso de un condicional o el uso
de un ciclo (este ultimo se explicara en el capitulo de ciclos).
En este caso si el usuario ingresa un largo o un ancho negativo, se suspender a la eje-
cuci on del programa mostrando un mensaje de error retornando EXIT_FAILURE al sistema
operativo.
La codicaci on en C++ de la funci on para calcular el area de un rect angulo haciendo
la validaci on tanto del ancho como de la altura es la siguiente
#include<iostream>
#include<cstdlib>
using namespace std;
double area_rectangulo(double l, double a){
return l * a;
};
6.4. VALIDACI

ON DE DATOS USANDO CONDICIONALES 105


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;
};
cout << "ancho? = ";
cin >> ancho;
if(ancho < 0){
cout << "El ancho no es valido";
cout << endl;
system("pause");
return EXIT_FAILURE;
};
cout << "El area del rectangulo es: ";
cout << area_rectangulo(largo, ancho);
cout << endl;
system("pause");
return EXIT_SUCCESS;
};
106 CAP

ITULO 6. FUNCIONES EN PROGRAMACI

ON Y LA ESTRUCTURA CONDICIONAL
6.5. Ejercicios
1. Hacer un programa que dado el area del corral de unas gallinas y el n umero de
gallinas en el corral determine el area que le corresponde a cada gallina.
2. Construir una funci on que dados tres n umeros reales calcule el maximo de los tres.
3. Dadas las longitudes de los dos brazos de una palanca y el peso puesto en el brazo
m as largo de la palanca, calcular el peso que se puede poner en el brazo mas corto
para que la palanca quede en equilibrio.
4. Dadas las longitudes de los dos brazos de una palanca y el peso puesto en el brazo
m as corto de la palanca, calcular el peso que se puede poner en el brazo mas largo
para que la palanca quede en equilibrio.
5. Dados los pesos que se pueden poner en cada uno de los lados de la palanca y la
longitud total de la palanca determinar la longitud del brazo mas largo para que la
palanca quede en equilibrio.
6. Dados los pesos que se pueden poner en cada uno de los lados de la palanca y la
longitud total de la palanca determinar la longitud del brazo mas corto para que la
palanca quede en equilibrio.
7. Para crear un litro del compuesto D, se requiere que su composici on por partes
este conformada de la siguiente manera, 5 partes deben ser del producto A, 8 partes
deben ser del producto B y 7 partes deben ser del producto C. Si se requiere crear
10 litros del compuesto D. Cuantos litros del producto A se requieren?, Cuantos
litros del producto B se requieren?, Cuantos litros del producto C se requieren?.
8. Si se tienen x litros de A, y litros de B y z litros de C. Cu antos litros del compuesto
D se pueden obtener?.
9. En la convenci on republicana, se re unen 100 personas de las cuales x son mujeres
e y son hombres. Si en la convenci on se dispone de z mesas y se dispone que la
diferencia entre n umero de hombres y mujeres en cada mesa no debe superar 2.
Cuantas sillas para mujeres se deben poner por mesa?, Cuantas sillas por hombre
se deben poner?. Si los votos de las mujeres valen 1.5 veces los votos del hombre.
Cu antas mujeres deberan estar en la convenci on para que el candidato sea elegido
por votos de solo mujeres? Si los votos de los hombres valen 1.5 veces los votos de
las mujeres. Cu antas mujeres deberan estar en la convenci on para que el candidato
sea elegido por votos de solo mujeres?
10. Dado el centro y el radio de un crculo, determinar si un punto pertenece o no al
crculo.
11. Dadas tres longitudes positivas, determinar si con esas longitudes se puede construir
un triangulo.
12. Dado un caracter, utilizar una instrucci on switch para determinar si el car acter es
un dgito o no.

Potrebbero piacerti anche