Download Proyecto 0151
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