Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Grupos 13 y 14
Problem 1. Diseñe una función que calcule el precio final de una compra. Esta se compone
de A ı́tems del producto h1 y B ı́tems del producto h2. Se sabe que el producto h1 cuesta
0.4 dólares la unidad y el próducto h2 0.7 dólares la unidad. Adicionalmente, si el número
de productos h1 es más de 20 unidades, tendrá un descuento del 10% por producto. Del
mismo modo, si el número de productos h2 es más de 50 unidades, tendrá un descuento del
10% por producto. Cuál de las siguientes implementaciones es correcta para calcular el total
en dólares?
i f (A>20 | | B>50){
total = total − total ∗0.1;
}
return t o t a l ;
}
1
(d) double p r e c i o F i n a l ( int A, int B){
double t o t a l A = A∗ 0 . 4 ;
double t o t a l B = B∗ 0 . 7 ;
i f (A>20){
totalA = totalA − totalA ∗ 0 . 1 ;
}
i f (B>50){
totalB = totalB − totalB ∗ 0. 1;
}
return t o t a l A+t o t a l B ;
}
Problem 2. Se le pide que diseñe una función que despliegue en la terminal distintas op-
ciones de juegos, lea la opción que elija el usuario y retorne la opción correspondiente. Adi-
cionalmente, la misma función debe imprimir un mensaje en el cual se le confirme al usuario
la opción elegida. En el caso que el usuario ingrese una opción inválida, deberá imprimir en
pantalla -opcion invalida- .De las siguientes implementaciones, cuál es la correcta?
(a) char e l e g i r O p c i o n ( ) {
cout<<” E l i j a una o p c i o n : ”<<e n d l ;
cout<<”a : A j e d r e z ”<<e n d l ;
cout<<”b : Buscaminas ”<<e n d l ;
cout<<” c : Go”<<e n d l ;
char op ;
c i n >>op ;
i f ( op == a ){
cout<<” Usted ha e l e g i d o a j e d r e z ”<<e n d l ;
} e l s e i f ( op == b ){
cout<<” Usted ha e l e g i d o buscaminas ”<<e n d l ;
} e l s e i f ( op == c ){
cout<<” Usted ha e l e g i d o Go”<<e n d l ;
} else {
cout<<” Opcion i n v a l i d a ”<<e n d l ;
}
return op ;
};
(b) char e l e g i r O p c i o n ( ) {
cout<<” E l i j a una o p c i o n : ”<<e n d l ;
cout<<”a : A j e d r e z ”<<e n d l ;
cout<<”b : Buscaminas ”<<e n d l ;
cout<<” c : Go”<<e n d l ;
char op ;
c i n >>op ;
2
i f ( op = ’ a ’ ){
cout<<” Usted ha e l e g i d o a j e d r e z ”<<e n d l ;
} e l s e i f ( op = ’ b ’ ){
cout<<” Usted ha e l e g i d o buscaminas ”<<e n d l ;
} e l s e i f ( op = ’ c ’ ){
cout<<” Usted ha e l e g i d o Go”<<e n d l ;
} else {
cout<<” Opcion i n v a l i d a ”<<e n d l ;
}
return op ;
};
(c) char e l e g i r O p c i o n ( ) {
cout<<” E l i j a una o p c i o n : ”<<e n d l ;
cout<<”a : A j e d r e z ”<<e n d l ;
cout<<”b : Buscaminas ”<<e n d l ;
cout<<” c : Go”<<e n d l ;
char op ;
c i n >>op ;
i f ( op == ’ a ’ ){
cout<<” Usted ha e l e g i d o a j e d r e z ”<<e n d l ;
} e l s e i f ( op == ’ b ’ ){
cout<<” Usted ha e l e g i d o buscaminas ”<<e n d l ;
} e l s e i f ( op == ’ c ’ ){
cout<<” Usted ha e l e g i d o Go”<<e n d l ;
} else {
cout<<” Opcion i n v a l i d a ”<<e n d l ;
}
return op ;
};
(d) char e l e g i r O p c i o n ( ) {
cout<<” E l i j a una o p c i o n : ”<<e n d l ;
cout<<”a : A j e d r e z ”<<e n d l ;
cout<<”b : Buscaminas ”<<e n d l ;
cout<<” c : Go”<<e n d l ;
char op ;
c i n >>op ;
i f ( op == ’ a ’ ){
cout<<” Usted ha e l e g i d o a j e d r e z ”<<e n d l ;
}
i f ( op == ’ b ’ ){
3
cout<<” Usted ha e l e g i d o buscaminas ”<<e n d l ;
}
i f ( op == ’ c ’ ){
cout<<” Usted ha e l e g i d o Go”<<e n d l ;
} else {
cout<<” Opcion i n v a l i d a ”<<e n d l ;
}
return op ;
};
bool f u n c ( int n ){
i f ( f u n c H e l p e r ( n , 3 ) == 0){
return 1 ;
} else {
return 0 ;
}
};
int main ( ) {
i f ( ! func (9)){
cout<<” Caso Negativo ”<<e n d l ;
} else {
cout<<” Caso P o s i t i v o ”<<e n d l ;
}
return 0 ;
}
Si ejecutamos el anterior código:
(a) En pantalla se imprime ”caso negativo”, porque 9 es un número impar, y con cualquier
número impar va a suceder lo mismo.
(b) En pantalla se imprime ”caso positivo”, porque 9 es un número impar, y con cualquier
número impar va a suceder lo mismo.
4
(c) En pantalla se imprime ”caso negativo”, porque 9 es múltiplo de 3.
using namespace s t d ;
i f (m<=1){
return n ;
} else {
return funcRec ( d i v i (m, 2 ) , d i v i ( n , 2 ) ) ;
}
};
int main ( ) {
cout<<funcRec ( m u l t i ( m u l t i ( 5 , 3 ) , m u l t i ( 2 5 , 2 ) ) ,
90∗ d i v i ( m u l t i ( 8 , 3 ) , d i v i (15 ,7))) < < e n d l ;
return 0 ;
}
Si ejecutamos el anterior código:
Problem 5. Cuál es el valor que se imprime en pantalla? si var var tiene un valor inicial
de 8.
5
int h e l p = 7 8 ;
i f ( var >7){
var +=7;
Problem 8. En el punto 4. Qué pasa si quitamos el caso base?. Funcionarı́a igual? el valor
que retorna serı́a distinto? Se queda en un ciclo infinito?
Problem 9. Diseñe una función recursiva que cumpla la misma tarea que el siguiente frag-
mento de código:
int a ;
c i n >>a ;
int i = 0 ;
while ( a >30){
i ++;
cout<<a∗30+ i ;
6
Problem 10. Diseñe dos funciones que determinen si un número natural es palindromo o
no. Una debe utilizar ciclos, y la otra debe ser recursiva
Problem 11. Diseñe una función que determine si un número es múltiplo de 5 o no, esta
no puede utilizar la operación módulo, y solo puede utilizar ciclos.
Problem 12. Diseñe una función que determine el mayor entre dos números naturales.
Solo puede utilizar ++, if-else, ==.
Problem 13. Repasar lo del máximo común divisor, y mı́nimo común múltiplo, con ciclos
y utilizando recursión.
• Funciones recursivas.
• Condicionales.
• Ciclos.