La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación Orientada a Objetos EIF200 FUNDAMENTOS DE INFORMÁTICA Proyecto UNA – Mora & Coto, 2015 Compilado por: Mag. Sonia Mora. Dra. Mayela.

Presentaciones similares


Presentación del tema: "Programación Orientada a Objetos EIF200 FUNDAMENTOS DE INFORMÁTICA Proyecto UNA – Mora & Coto, 2015 Compilado por: Mag. Sonia Mora. Dra. Mayela."— Transcripción de la presentación:

1 Programación Orientada a Objetos EIF200 FUNDAMENTOS DE INFORMÁTICA Proyecto 0151-14 UNA – Mora & Coto, 2015 Compilado por: Mag. Sonia Mora. Dra. Mayela Coto.

2 Recordemos la clase número #include using namespace std; class Numero { private: int valor; public: Numero () { valor = 0; } Numero (int valor) { valor = valor; } // metodos set void setValor (int valor) { valor = valor; } // metodos get int getValor ( ) { return(valor); } // metodos cálculo }; EIF200 FUNDAMENTOS DE INFORMÁTICA

3 Problema class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

4 Estructuras de control iterativas Permiten ejecutar una o más acciones un número determinado de veces. Son denominadas también bucles, lazos, o ciclos.Constan de tres partes Cuerpo del ciclo: conjunto de acciones que deben ser realizadas. Iteración: hecho de repetir la ejecución del cuerpo del ciclo. Condición de salida o término del ciclo: condición que debe ser evaluada. Por lo general se indica al final o al inicio del mismo. Tres tipos de estructuras repetitivas: while -- do while -- for EIF200 FUNDAMENTOS DE INFORMÁTICA

5 Ejemplos Comer palomitas en el cine Contar ¿cuántos números pares hay entre 102 y 510

6 Instrucción while while (condición) ; 1. Evalúa la expresión o condición 2. Si el resultado de esta evaluación es verdadero se ejecuta el cuerpo de la estructura (las instrucciones). 3. Se vuelve a evaluar la expresión 4. Si el resultado de esta evaluación es falso no se ejecutan las instrucciones y sale del ciclo while 5. Es decir, la estructura while repite una serie de acciones mientras se cumpla una condición while (condición) instrucciones Cambia el valor de la condición F V int sumatoriaN() { int i=1, sum=0; while (i< valor){ sum = sum +i; i++; } return sum; } EIF200 FUNDAMENTOS DE INFORMÁTICA

7 Instrucción do-while do ; while (condición);  Siempre ejecuta por lo menos una vez el cuerpo de la estructura.  La expresión se valida después de ejecutar, y en función a este resultado vuelve a iterar o no. mientras (condición) instrucciones cambio de la variable de condición F V EIF200 FUNDAMENTOS DE INFORMÁTICA int sumatoriaN() { int i=1, sum; do sum = sum +i; i++; while (i< valor); return sum; }

8 Instrucción for for ( condición de inicio ; expresión ; acción después de cada iteración ) { instrucciones (s); } condición de inicio se ejecuta una sola vez al inicio del ciclo, generalmente se realizan inicializaciones y declaraciones de variables. expresión es evaluada en cada ciclo y dependiendo del valor que devuelva, el bucle continúa ejecutándose (valor de la evaluación true o false). acción después de cada iteración es ejecutada siempre en cada ciclo al terminar de ejecutar todas las instrucciones que pertenecen al bucle for. Por lo general puede contener alguna actualización para las variables de control. instrucciones grupo de instrucciones que se ejecutan repetidamente EIF200 FUNDAMENTOS DE INFORMÁTICA

9 Instrucción for int sumatoriaN() { int sum=0; for (int i=1; i < = valor; i++) sum = sum + i; return sum; } En el main Numero num1; ……. cout<<"La sumatoria hasta: “<<num1.getValor()<<“ es: “<<endl; num1.sumatoriaN(); class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

10 Ejercicio  En la clase Numero, escriba un método que muestre todos los números pares menores que valor.  Ejemplo: si valor =13, el método muestra 2,4,6,8,10,12 class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

11 Ejercicio void numPares() { for (int i=1; i <valor; i++) if (i%2 ==0) cout<<i<<" "; } class Numero { private: int valor; ….. En el main() cout<<"Los siguientes son los numeros pares menores que " <<num1.getValor()<<endl; num1.numPares(); Versión #1 void numPares() { for (int i=2; i <valor; i+=2) cout<<i<<" "; } Versión #2 EIF200 FUNDAMENTOS DE INFORMÁTICA

12 Ejemplo: porristas  Un equipo de porristas está formado por n personas. El entrenador quiere colocarlos en filas de tal forma que todas sean iguales y no sobre ningún porrista.  ¿Qué opciones tiene el entrenador, filas de cuántas personas puede hacer?  Ejemplo: si valor = 24 class Numero { private: int valor; ….. **** ****** ******** ************ etc DIVISORES DE UN NÚMERO EIF200 FUNDAMENTOS DE INFORMÁTICA

13 Ejemplo: porristas (divisores) void divisores() { int i; for(i=1;i <= valor ; i++) if (valor % i ==0) cout<<i<<endl; } class Numero { private: int valor; ….. En el main cout<<"El entrenador puede hacer filas de "<<endl; num1.divisores(); EIF200 FUNDAMENTOS DE INFORMÁTICA

14 Ejemplo: número perfecto  Un número se dice perfecto si la suma de sus divisores propios es igual al número  Ejemplos: Número=8 divisores propios = 1,2,4 suma divisores= 7, 7 NO es igual a 8  NO es perfecto Número=6 divisores= 1,2,3 suma divisores= 6, 6 SI es igual a 6  SI es perfecto Número=28 divisores= 1,2,4,7,14 suma divisores= 28, 28 SI es igual a 28  SI es perfecto EIF200 FUNDAMENTOS DE INFORMÁTICA

15 Ejemplo: número perfecto  Escriba primero un método que sume todos los divisores propios de un número.  En la clase Numero agregue un método que retorne true si el número es perfecto y false si no. class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

16 Ejemplo: suma de divisores int sumDivisoresPropios() { int suma=0; for(int i=1;i < valor; i++) if (valor % i ==0) suma=suma+i; return suma; } class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

17 Ejercicio: número perfecto Una opción más eficiente: int sumDivisoresPropios() { int suma; for(int i=1;i <= valor/2 ; i++) if (valor % i ==0) suma=suma+i; return suma; } EIF200 FUNDAMENTOS DE INFORMÁTICA

18 Ejemplo: número perfecto bool perfecto () { if (sumaDivisoresPropios()== valor) return(true); else return(false); } class Numero { private: int valor; ….. En el main if (num1.perfecto()) cout<<"El numero "<<num1.getValor()<<" es perfecto "<<endl; else cout<<"El numero "<<num1.getValor()<<" NO es perfecto "<<endl; EIF200 FUNDAMENTOS DE INFORMÁTICA

19 Ejemplo: número perfecto Una opción más eficiente: bool perfecto () { return (sumaDivisoresPropios()== valor); } class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

20 Ejercicio: números amigos  Dos números amigos son dos enteros positivos a y b tales que a es la suma de los divisores propios de b, y b es la suma de los divisores propios de a. (la unidad se considera divisor propio, pero no el mismo número).   divisores de 220= 1+2+4+5+10+11+20+22+44+55+110 = 284   divisores de 284= 1+2+4+71+142 = 220  Otras parejas de números amigos son: 1184 y 1210; 17,296 y 18,416 EIF200 FUNDAMENTOS DE INFORMÁTICA

21 Ejemplo: números amigos bool amigos ( Numeros obj) { if (sumaDivisoresPropios()== obj.getValor() && valor == obj. sumaDivisoresPropios()) return(true); else return(false); } bool amigos ( Numeros obj) { return(sumaDivisoresPropios()== obj.getValor()&& valor == obj. sumaDivisoresPropios()); } class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

22 Ejercicio: números amigos  Ya se definió un método que suma los divisores propios de un número.  En el main () Cree un objeto num1 con un valor dado por el usuario Cree un objeto num2 con un valor dado por el usuario Determine si los números son amigos mediante un mensaje. class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

23 Ejercicio: números amigos int main() {int a,b; cout<<"Valor del numero: "<<endl<<endl; cin>>a; Numero num1(a) ; cout<<"Valor del segundo numero: "<<endl<<endl; cin>>b; Numero num2(b); if ((num1.getValor()==num2.sumaDivPropios())&& (num2.getValor()==num1.sumaDivPropios())) cout<<"Los numeros "<<num1.getValor()<<" y "<<num2.getValor()<<" son amigos; else cout<<"Los numeros "<<num1.getValor()<<" y "<<num2.getValor()<<" NO son amigos"; return 0 ; } class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

24 Ejercicio: número primo  En la clase Numero 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 class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

25 Ejercicio: número primo bool esPrimo () { int i= 2; while (i <= valor/2) { if (valor % i == 0) return false; i++; } return true; } class Numero { private: int valor; ….. En el main if (num1.esPrimo ()) cout<<"El numero "<<num1.getValor()<<" es primo "<<endl; else cout<<"El numero "<<num1.getValor()<<" NO es primo "<<endl; EIF200 FUNDAMENTOS DE INFORMÁTICA

26 Ejemplo: La conjetura de Ulam  La conjetura de ULAM en honor al matemático S. ULam, define una serie de números, de la siguiente forma: Comience con cualquier número entero positivo N. Para obtener el siguiente número haga: Si N es par, divídalo entre 2, pero si N es impar, multiplíquelo por 3 y súmele un 1, esto nos dará un nuevo número N. Obtenga enteros sucesivos repitiendo el paso 2 hasta que el entero obtenido sea igual a uno.  En la clase Numero diseñe un método que imprima la sucesión de números de la conjetura de ULAM para un valor determinado. EIF200 FUNDAMENTOS DE INFORMÁTICA

27 Ejemplo:Conjetura ULAM void Ulam(){ int n = valor; while(n!=1) { cout <<n<<" " ; if ((n%2)==0) n= n/2; else n=3*n+1; } cout <<n<<" " ; } class Numero { private: int valor; ….. En el main num1.Ulam(); EIF200 FUNDAMENTOS DE INFORMÁTICA

28 Ejercicio: número de Armstrong  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= 1 3 +5 3 +3 3 = 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. EIF200 FUNDAMENTOS DE INFORMÁTICA

29 Ejercicio: número de Armstrong bool amstrong () { int div,val; int suma=0; val=valor; while (val!=0) { div= val % 10; suma= suma + pow(div,3); val= val / 10; } if (suma==valor) return(true); else return(false); } class Numero { private: int valor; ….. pow(x,y) = x y requiere #include EIF200 FUNDAMENTOS DE INFORMÁTICA

30 Ejercicio: número de Armstrong class Numero { private: int valor; ….. En el main if (num1.armstrong ()) cout<<"El numero "<<num1.getValor()<<" es de armstrong "<<endl; else cout<<"El numero "<<num1.getValor()<<" NO es de armstrong "<<endl; EIF200 FUNDAMENTOS DE INFORMÁTICA

31 Ejercicio  Se dice que un número de n dígitos es n-narcisista (también llamado invariante digital perfecto), si puede ser obtenido de la suma de las n-ésimas potencias de sus n dígitos. Por ejemplo: 8 es 1-narcisista, 371 es 3-narcisista y 8208 es 4- narcisista, pues: 8 = 8 1 371 = 3 3 +7 3 +1 3 8208=8 4 +2 4 +0 4 +8 4  Escriba un método que devuelva el numero de dígitos (n) de valor.  Escriba un método para la clase Numero que devuelva verdadero si valor es n-narcisista y falso en caso contrario. Debe hacer uso del método anterior. Puede además utilizar la función pow(x,y) = x y class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

32 Número narcisista  Escriba un método que devuelva el numero de dígitos (n) de valor. int cuentaDigitos () { int cant=0; int aux = valor; while (aux>0) { cant++; aux= aux/10; } return cant; } class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

33 Número narcisista bool narcisista () { int div,val, i, n; int suma=0; val=valor; n = cuentaDigitos(); for(i=1; i <= n; i++) { div= val % 10; suma= suma + pow(div,n); val/=10; } if (suma==valor) return(true); else return(false); } class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

34 Ejemplo: Una comida gratis  Diez jóvenes decidieron celebrar su graduación con un almuerzo en un restaurante. Una vez reunidos, se entabló entre ellos una discusión sobre el orden en que habían de sentarse a la mesa. Unos propusieron que la colocación fuera por orden alfabético; otros, por edad; otros, por el promedio de graduación; otros, por la estatura, etc. La discusión se prolongaba, la sopa se enfrió y nadie se sentaba a la mesa.  El camarero cansado de la situación, les dijo que se sentaran en cualquier orden y que él les tenía una propuesta. Todos se sentaron sin seguir un orden determinado.  El camarero entonces les dijo:  Que uno cualquiera anote el orden en que están sentados ahora. Mañana vienen a comer y se sientan en otro orden. Pasado mañana vienen de nuevo a comer y se sientan en orden distinto, y así sucesivamente hasta que hayan probado todas las combinaciones posibles. Cuando llegue el día en que ustedes tengan que sentarse de nuevo en la misma forma que ahora, les prometo solemnemente, que en lo sucesivo les invitaré a comer gratis diariamente, sirviéndoles los platos que ustedes deseen.  La proposición agradó a todos y fue aceptada. EIF200 FUNDAMENTOS DE INFORMÁTICA

35 Ejemplo: Una comida gratis  Calcule cuántos días necesitan los estudiantes ir a comer al restaurante antes de que empiecen a disfrutar de comida gratis.  Recuerde que los estudiantes deben probar todos los modos distintos, posibles, de colocación alrededor de la mesa. 10*9*8*7*6*5*4*3*2*1= 10! (factorial de un número) Imágenes son de dominio público EIF200 FUNDAMENTOS DE INFORMÁTICA

36 Factorial de un número  El factorial de un número entero positivo se define como el producto de todos los números naturales anteriores o iguales a él.  Se escribe n!, y se lee "n factorial".  Por definición el factorial de 0 es 1 0!=1  Por ejemplo, 3! = 1*2*3 = 6 5! = 1*2*3*4*5 = 120  Su utilidad estriba en que se utiliza en la mayoría de las fórmulas de la combinatoria EIF200 FUNDAMENTOS DE INFORMÁTICA

37 Factorial de un número long unsigned int factorial () { int i; long unsigned int fact=1; if (valor == 0) return 1; else for (i=1;i<=valor; i++) fact= fact* i; return (fact); } class Numero { private: int valor; ….. En el main cout<<"El número de días que los estudiantes deben ir a comer al restaurante antes de disfrutar de comidas gratis es "<< num1.factorial()<<endl;

38 Factorial de un número long unsigned int factorial () { int i; long unsigned int fact=1; if (valor != 0){ for (i=1;i<=valor; i++) fact= fact* i; } return (fact); } class Numero { private: int valor; ….. En el main cout<<"El número de días que los estudiantes deben ir a comer al restaurante antes de disfrutar de comidas gratis es "<< num1.factorial()<<endl; Menos código EIF200 FUNDAMENTOS DE INFORMÁTICA

39 Ejemplo: Una comida gratis  En este caso los muchachos tendrían que ir a comer al restaurante 3.628.800 días lo que equivale a ¡¡¡más de 9.000 años!!!!  El camarero nunca tuvo que darles comida gratis. Imágenes son de dominio público EIF200 FUNDAMENTOS DE INFORMÁTICA

40 Ejemplo: reproducción de los conejos  Tenemos una pareja de conejos, si, en cada parto obtenemos una nueva pareja y cada nueva pareja tarda un mes en madurar sexualmente y el embarazo dura un mes, ¿Cuantas parejas tendremos en 12 meses? EIF200 FUNDAMENTOS DE INFORMÁTICA

41 Parejas:1sexto 21 primer mes2séptimo34 segundo 3octavo55 tercero 5noveno89 cuarto 8décimo144 quinto 13undécimo233 Ejemplo: reproducción de los conejos EIF200 FUNDAMENTOS DE INFORMÁTICA

42 Ejemplo: Fibonacci En matemática, la sucesión de Fibonacci es la siguiente sucesión infinita de números naturales: fo = 0 f1 = 1 fn = fn-1 + f n-2 para n =2,3,4,5 La sucesión inicia con 0 y 1, y a partir de ahí cada elemento es la suma de los dos anteriores: 0,1,1,2,3,5,8,13,21,34,55,89,144,….. A cada elemento de esta sucesión se le llama número de Fibonacci. Esta sucesión fue descrita en Europa por Leonardo de Pisa, matemático italiano del siglo XIII. La sucesión fue descrita como la solución a un problema de la cría de conejos Tiene numerosas aplicaciones en ciencias de la computación, matemáticas y teoría de juegos. También aparece en configuraciones biológicas, como por ejemplo en las ramas de los árboles, en la disposición de las hojas en el tallo, en la flora de la alcachofa y en el arreglo de un cono. EIF200 FUNDAMENTOS DE INFORMÁTICA

43 Ejemplo: Fibonacci  En la clase Numero escriba un método que muestre los primeros n números de la serie de Fibonacci  Ejemplo: Si n= 7el método desplegará en pantalla 0,1,1,2,3,5,8 class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

44 Ejemplo: números de Fibonacci void fibonacci() { int f1,f2, fn; f1=0; f2=1; for (int i=1; i<=valor; i++) { cout<<f1<<", "; fn=f1+f2; f1= f2; f2=fn; } En el main cout<<endl<<"Los primeros "<<num1.getValor()<< " numeros de la serie de Fibonacci son "<<endl; num1.fibonacci(); class Numero { private: int valor; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

45 Ejercicio: ¿queHace? float queHace() { int i=1, s=0, n=0; while ( i <= valor) { if (( i % 2 == 0) && (valor% i ==0)){ n= n + 1; s = s + i; } i++; } return s/n; } Retorna el promedio de los divisores pares del número Tiene un grave problema, ¿cuál es? División por cero, cuando los números son impares o primos (n nunca cambia) EIF200 FUNDAMENTOS DE INFORMÁTICA

46 Ejercicio  Un estudiante de Fundamentos tiene como tarea escribir un método que calcule la siguiente sumatoria: N-1 ∑ (i+1) 3 /(i 2 +1) * (i-1) i=2  El estudiante empezó a hacer la tarea a las 11 de la noche y logró escribir el siguiente código antes de caer dormido sobre la computadora. Ayude al estudiante a terminar el código para que pueda entregar la tarea al día siguiente. class Numero { private: int N; ….. Por ejemplo si N = 5, el método debe retornar el valor resultante de sumar: (2+1) 3 /(2 2 +1) * (2-1) + (3+1) 3 /(3 2 +1) * (3-1) + (4+1) 3 /(4 2 +1) * (4-1) EIF200 FUNDAMENTOS DE INFORMÁTICA

47 Ejercicio _____ Sumatoria() { int i, suma=____; for (i=2; i < _____; ____) suma = suma + pow(i+1,3) / ( ____+1) * ( ___ ); return ( _____ ); } class Numero { private: int N; ….. N-1 ∑ (i+1) 3 /(i 2 +1) * (i-1) i=2 EIF200 FUNDAMENTOS DE INFORMÁTICA

48 Ejercicio aux m de rd void queHace (int x) { int aux, m, de, rd; de = N; rd = 0; aux = 0; m = 1; while (de!= 0) { rd = de % 10; de = de / 10; if (rd!= x) { aux = aux+(rd * m); m = m*10; } } N= aux ; } } class Numero { private: int N; ….. EIF200 FUNDAMENTOS DE INFORMÁTICA

49 Ejercicio

50 Uso didáctico curso EIF 200 Escuela de Informática Universidad Nacional Costa Rica EIF200 FUNDAMENTOS DE INFORMÁTICA Proyecto 0151-14 UNA – Mora & Coto, 2015


Descargar ppt "Programación Orientada a Objetos EIF200 FUNDAMENTOS DE INFORMÁTICA Proyecto UNA – Mora & Coto, 2015 Compilado por: Mag. Sonia Mora. Dra. Mayela."

Presentaciones similares


Anuncios Google