Está en la página 1de 7

Taller preparación segundo parcial

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?

(a) double p r e c i o F i n a l ( int A, int B){


double t o t a l = A∗ 0 . 4 + B∗ 0 . 7 ;

i f (A>20 | | B>50){
total = total − total ∗0.1;
}
return t o t a l ;
}

(b) double p r e c i o F i n a l ( int A, int B){


double t o t a l = A∗ 0 . 4 + B∗ 0 . 7 ;

i f (A>20 && B>50){


total = total − total ∗0.1;
}
return t o t a l ;
}

(c) 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 ;
} e l s e i f (B>50){
totalB = totalB − totalB ∗ 0. 1;
}
return t o t a l A+t o t a l B ;
}

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 ;
};

Problem 3. Tiene el siguiente código:


int f u n c H e l p e r ( int m, int n ){
i f (m < n ){
return m;
} else {
return f u n c H e l p e r (m − n , n ) ;
}
};

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.

(d) En pantalla se imprime ”caso positivo”, porque 9 es múltiplo de 3.

Problem 4. Dadas las siguientes funciones:


#include<i o s t r e a m >

using namespace s t d ;

int m u l t i ( int m, int n ){


return m∗n ;
};

int d i v i ( int m, int n ){


return m/n ;
};

int funcRec ( int m, int n ){

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:

(a) Se imprime en pantalla un 7.

(b) Se imprime en pantalla un 2.

(c) Se imprime en pantalla un 13.

(d) Se imprime en pantalla un 1.

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;

i f ( ( help >1 && var >100) | | var >11){


h e l p /=4;
var /=3;
i f ( var>h e l p ){
var++;
} else {
var −−;
}
}
} else {
var −−;
i f ( var >2){
var ∗=9;
}
}
cout<<var<<e n d l ;

(a) Se imprime en pantalla un 6.

(b) Se imprime en pantalla un 4.

(c) Se imprime en pantalla un 54.

(d) Se imprime en pantalla un 15.

Problem 6. En el punto 4, cuantas veces es llamada la función funcRec.

Problem 7. Haga las definiciones matemáticas de las funciones del punto 4.

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.

Problem 13. Recuerden que los temas a evaluar son:

• Funciones recursivas.
• Condicionales.
• Ciclos.

También deben recordar la parte de dominio y codominio.


Otras cosas que deben tener en cuenta:
Tengan en cuenta el alcance de las variables, si se declaran globales, es decir por fuera
de las funciones y el main, esas variables van a afectar a todo el programa. Si se modifican
en alguna función, quedarán modificadas para todas las funciones.
Lo mismo si las variables son declaradas dentro de un ciclo, estas variables son afectadas
dentro de un ciclo.
Por ejemplo, imaginen este código:
int main ( ) {
int i = 5 ;
int a = 2 ;
for ( int i = 0 ; i <10; i ++){
a+=i ;
}
cout<<i <<e n d l ;
return 0 ;
}
Se imprime el valor de i como 5. A pesar de que se modificó dicho valor en el ciclo.
Por favor revisen el máximo común divisor, en el capı́tulo de funciones recursivas está la
implementación, cómo lo harı́an con ciclos?
En C++ para expresar mayor o igual, cuál es la forma correcta? >= ó =>
Qué valor tiene j al final después de ejecutar el siguiente código?
int j =0;
while ( j ++<5){}
cout<<j ;

También podría gustarte