Download Proyecto 0151

Document related concepts

Cola (informática) wikipedia , lookup

Transcript
1
UNIVERSIDAD NACIONAL
ESCUELA DE INFORMÁTICA
EIF 200 FUNDAMENTOS DE INFORMÁTICA
Actividad: Solución de problemas
Objetivo:
1. Que los estudiantes empiecen a familiarizarse con el desarrollo de clases en C++ y la
implementación de las mismas. Incluye métodos con estructuras secuenciales,
condicionales e iterativas.
PARTE I
Primera Parte. Identifique y corrija los errores en cada uno de los siguientes fragmentos de
código:
Posible Corrección:
int c = 0;
int c = 0;
int producto = 0;
int producto = 0;
while ( c <= 5 ) {
while ( c <= 5 ) {
a)
producto *= c;
producto *= c;
++c;
++c;
}
Descripción del error identificado:
Falta la llave de cierre del while
int z=0, suma=0;
Posible Corrección:
while ( z >= 0 ){
b)
suma += z;
}
Descripción del error identificado:
Ciclo infinito, pues z no cambia, y siempre será cero la suma
Posible Corrección:
c)
int k=100, resta=100;
while ( k >= 0 );
resta -= k;
k--;
int k=100, resta=100;
while ( k >= 0 ){
resta -= k;
k--;
}
Descripción del error identificado:
Falta de llaves y un punto y coma extra
Proyecto 0151-14 UNA – Mora & Coto, 2015
2
UNIVERSIDAD NACIONAL
ESCUELA DE INFORMÁTICA
EIF 200 FUNDAMENTOS DE INFORMÁTICA
Posible Corrección:
int i=20, multi=1;
for(int i=0; i<=20; i--){
d)
multi*=i;
}
int multi=1;
for(int i=0; i<=20; i++){
multi*=i;
}
Descripción del error identificado:
El ciclo inicializa la variable i, así que no debe inicializarse antes. De nuevo el ciclo se vuelve
infinito pues siempre se cumplirá que i sea menor que 20.
Posible Corrección:
f)
int i=0;
do{
i++;
} while (i>0)
Descripción del error identificado:
Ciclo infinito
PARTE II
En la clase Numero defina los siguientes métodos:
EJERCICIO #1: Un número repunit es todo número natural que está
formado solamente por unos, por ejemplo: 1, 11, 111, 1111. Escriba un
método esRepunit() que retorne true si N es repunit y false si no.
class Numero {
private:
int num;
…..
bool repunit(){
int num=N;
while (num != 0){
if (num%10 != 1)
return false;
num=num/10;
}
Proyecto 0151-14 UNA – Mora & Coto, 2015
3
UNIVERSIDAD NACIONAL
ESCUELA DE INFORMÁTICA
EIF 200 FUNDAMENTOS DE INFORMÁTICA
return true;
}
EJERCICIO #2: Escriba un método que retorne true si el número es primo y false si no. Un
número primo es un número natural que tiene exactamente dos divisores distintos: él
mismo y el 1. El número 1 no se considera número primo. Ejemplos: 2, 3, 17, 29, 31, 43, 59,
67, 71, 73, 83, 97
bool esPrimo ()
{
if(N==1){return false;}
int i= 2;
while (i <= N/2)
{
if (N % i == 0)
return false;
i++;
}
return true; }
EJERCICIO #3: Se denominan números de Armstrong aquellos números que son iguales a la
suma de los cubos de las cifras que lo integran, por ejemplo 153 es un número de Armstrong
ya que 153= 13+53+33 = 1+ 125 + 27. En la clase Numero escriba un método que retorne true
si el número es de Armstrong y false si no. Utilice la función pow(x,y) = xy (incluya la
biblioteca math)
bool amstrong ()
{
int div,val;
int suma=0;
val=N;
while (val!=0) {
div= val % 10;
suma= suma + pow(div,3);
val/=10;
}
if (suma==N)
return(true);
else
return(false);
}
Proyecto 0151-14 UNA – Mora & Coto, 2015
4
UNIVERSIDAD NACIONAL
ESCUELA DE INFORMÁTICA
EIF 200 FUNDAMENTOS DE INFORMÁTICA
EJERCICIO #4: Escriba un método que determine y retorne el máximo común divisor de 2
números enteros: N y M, M se recibe como parámetro, con base en el siguiente método:
primero divida el número mayor entre el número menor, si la división es exacta, es decir si
el residuo es cero entonces el máximo común divisor es el divisor, sino, se deben dividir de
nuevo los números, pero en este caso el dividendo será el antiguo divisor, y el divisor será
el residuo de la división anterior, y este proceso debe repetirse hasta que la división sea
exacta. Veamos un ejemplo:
int calculaMCD(int M){
int divisor,dividendo,residuo,mcd;
if(N > M){
divisor=N;
dividendo=M;
}
else{
divisor=M;
dividendo=N;
}
do{
residuo=divisor%dividendo;
if(residuo==0){
mcd=dividendo;
}
else{
divisor=dividendo;
dividendo=residuo;
}
} while (residuo!=0);
return mcd;
}
EJERCICIO #5: El espejo de un número entero A está formado por sus dígitos en orden
inverso, por ejemplo el espejo de 123 es el número 321, y el espejo de 3456 es el número
6544. Escriba un método Espejo() que devuelva el número entero correspondiente al espejo
de N.
int espejo(){
if(valor<10){
return valor;
}
int espejo=0,ultimo=0;
Proyecto 0151-14 UNA – Mora & Coto, 2015
5
UNIVERSIDAD NACIONAL
ESCUELA DE INFORMÁTICA
EIF 200 FUNDAMENTOS DE INFORMÁTICA
while(valor!=0){
ultimo=valor%10;
espejo=espejo*10+ultimo;
valor=valor/10;
}
return espejo; }
EJERCICIO #6: Escriba un algoritmo equilibrado() que determine el número equilibrado para
N. El “número equilibrado” de N es la suma de N más el número formado por los dígitos
invertidos, por ejemplo si el número N es 583 el número equilibrado es 968, pues 968=
583+385.
int equilibrado(){
int actual=N;
if(N<10){
return N+actual;
}
int inverso=0,ultimoDig=0;
while(actual!=0){
ultimoDig=actual%10;
inverso=inverso*10+ultimoDig;
actual=actual/10;
}
return inverso+N;
}
EJERCICIO #7: Hace miles de años Nicómano descubrió que podía calcular los cubos de los
números naturales, sumando números impares. Por ejemplo, el cubo de 1 es la suma del
primer impar (1), el cubo de 2, es la suma de los dos siguientes impares (3 + 5), el cubo de
3 es la suma de los tres siguientes (7+9 +11) y así sucesivamente. Haga un método que
determine y devuelva el valor del cubo de valor, según el método de Nicómano.
int nicomano(){
int nicomano=0,imparInicio;
imparInicio=N*(N-1);
for(int i=1;i<=N; i++){
nicomano=nicomano+imparInicio;
imparInicio = imparInicio +2;
}
return nicomano;
}
EJERCICIO #8: Leonardo de Pisa, matemático italiano del siglo XIII también conocido como
Fibonacci describió el problema de la cría de conejos: "Cierto hombre tenía una pareja de
conejos juntos en un lugar cerrado y uno desea saber cuántos son creados a partir de este
par en un año cuando es su naturaleza parir otro par en un mes, y en el segundo mes los
nacidos parir también".De esta manera Fibonacci presentó la sucesión con la siguiente
tabla:
Proyecto 0151-14 UNA – Mora & Coto, 2015
6
UNIVERSIDAD NACIONAL
ESCUELA DE INFORMÁTICA
EIF 200 FUNDAMENTOS DE INFORMÁTICA
Mes
Explicación
Parejas de conejos
Inicio 1
Nace una pareja de conejos (pareja A).
1 pareja en total.
Fin 1
La pareja A tiene un mes de edad. Se cruza la pareja A.
2
3
4
5
6
1+0= 1
total.
1+1= 2
La pareja A da a luz a la pareja B. Se vuelve a cruzar la pareja A.
total.
La pareja A da a luz a la pareja C. La pareja B cumple 1 mes. Se 2+1= 3
cruzan las parejas A y B.
total.
Las parejas A y B dan a luz a D y E. La pareja C cumple 1 mes. Se 3+2= 5
cruzan las parejas A, B y C.
total.
A, B y C dan a luz a F, G y H. D y E cumplen un mes. Se cruzan A, 5+3= 8
B, C, D y E.
total.
A, B, C, D y E dan a luz a I, J, K, L y M. F, G y H cumplen un mes. 8+5=13
Se cruzan A, B, C, D, E, F, G y H.
total.
pareja en
parejas en
parejas en
parejas en
parejas en
parejas en
Haga un método Fibonacci que determine para el mes representado por el numero N, que
cantidad de parejas habrá nacido, mediante la sucesión de Fibonacci.
int Fibonacci(){
int parAnterior=0;
int parActual=1;
int parejas=0;
for(int i=0; i<N; i++){
parejas=parActual+parAnterior;
parAnterior=parActual;
parActual=parejas;
}
return parActual;
}
Proyecto 0151-14 UNA – Mora & Coto, 2015