La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación Orientada a Objetos

Presentaciones similares


Presentación del tema: "Programación Orientada a Objetos"— Transcripción de la presentación:

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

2 Ejercicio: clase Colonia
Suponga que se quiere analizar el comportamiento de colonias de bacterias que se desarrollan en alimentos. Básicamente se almacena información de la existencia de la bacteria x en el alimento y. Se define entonces la clase Colonia, representando a colonias de bacterias que se desarrollan o no en una serie de alimentos. EIF200 FUNDAMENTOS DE INFORMÁTICA Imágenes en esta diapositiva son de dominio público

3 Ejercicio: clase Colonia
Se representa con un 1 la existencia de la bacteria i en un alimento j, y con un 0 la no existencia de la misma. 1 [0] [1] [2] [3] [0] [1] [2] [3] bacteria alimento EIF200 FUNDAMENTOS DE INFORMÁTICA Imágenes en esta diapositiva son de dominio público

4 Arreglos multidimensionales
Un arreglo multidimensional es un arreglo donde los elementos se encuentran organizados en varias dimensiones. Para su definición se usa una sintaxis similar a la usada para declarar arreglos unidimensionales, pero separando las diferentes dimensiones. matriz [x] [y] matriz [x] [y] [z] Imágenes en esta diapositiva son de dominio público

5 Arreglos bidimensionales
En lo particular un arreglo bidimensional (matriz) es un arreglo de dos dimensiones. Para crear arreglos bidimensionales en C++, hay que indicar: El tipo de los elementos (ejemplo, int, char, float, bool, string o un tipo definido por el programador) El nombre del arreglo El número de filas y el número de columnas del arreglo (ambas entre [ ]) <tipo de los elementos> <nombre del arreglo> [<filas >] [<columnas >] EIF200 FUNDAMENTOS DE INFORMÁTICA

6 Arreglos bidimensionales
Ejemplo: int valores [3][5]; Para acceder a cada elemento se usa el nombre del arreglo y un índice por cada dimensión. En el caso de las matrices se necesitan dos índices: uno para las filas y otro para las columnas. cout <<valores[2][3]  60 [0] [1] [2] [3] [4] 25 4 14 13 5 2 42 32 18 52 54 23 60 37 15 [0] [1] [2] EIF200 FUNDAMENTOS DE INFORMÁTICA

7 Clase Coleccion básica
Tamaño fijo Clase Coleccion básica const int tam=4; class Coleccion{ private: int matriz[tam][tam]; public: Coleccion(){ for (int i = 0; i<tam; i++) for (int j = 0; j<tam ; j++) matriz[i][j]=0; } Coleccion(int a){ matriz[i][j]= a; } Dos tipos de constructores EIF200 FUNDAMENTOS DE INFORMÁTICA

8 Clase Coleccion básica
void setPos (int i, int j, int val) { matriz[i][j] = val; } int getPos (int i, int j){ return matriz[i][j]; } void llenarColeccion() { int valor; for (int i = 0; i<tam;i++) for (int j = 0; j<tam;j++) { cout<<"valor["<<i<<"]["<<j<<"]: "; cin>>valor; setPos(i,j,valor); } } ~ Coleccion() { // memoria estática } Llena la matriz con valores dados por el usuario EIF200 FUNDAMENTOS DE INFORMÁTICA

9 Clase Coleccion básica
En el main() la creación de objetos puede ser de diversas formas: int main(){ ….   Coleccion mat1; Coleccion mat2(5); cout<<"Llenando la matriz"<<endl; mat1.llenarColeccion(); ……. } 5 1 2 9 3 5 6 7 8 4 EIF200 FUNDAMENTOS DE INFORMÁTICA

10 Clase Coleccion básica: toString()
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: toString() En la clase Coleccion defina un método que permita mostrar la matriz de forma ordenada por filas y columnas. Ejemplo: << 1 2 9 3 5 6 7 8 4 EIF200 FUNDAMENTOS DE INFORMÁTICA Imágenes usadas en esta diapositiva son de dominio público

11 Clase Coleccion básica: toString()
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: toString() string toString() { stringstream s; for (int i = 0; i< tam;i++){ for (int j = 0; j< tam;j++) s<<matriz[i][j]<<" "; s<<endl; } return s.str(); En el main cout<<mat1.toString(); EIF200 FUNDAMENTOS DE INFORMÁTICA

12 Clase Coleccion básica: sumar elementos
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: sumar elementos En la clase Coleccion defina un método que devuelva la suma de todos los elementos de la colección. Por ejemplo, si la matriz es: La suma es 77 1 2 9 3 5 6 7 8 4 EIF200 FUNDAMENTOS DE INFORMÁTICA Imágenes usadas en esta diapositiva son de dominio público

13 Clase Coleccion básica
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica int suma() { int sum = 0; for (int i = 0; i<tam;i++) for (int j = 0; j<tam;j++) sum += matriz[i][j]; return sum; } EIF200 FUNDAMENTOS DE INFORMÁTICA En el main cout<<"La suma de los valores de la matriz es "<<mat1.suma()<<endl;

14 Clase Coleccion básica: promedio
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: promedio En la clase Coleccion defina un método que devuelva el promedio de todos los elementos de la matriz. 1 2 9 3 5 6 7 8 4 EIF200 FUNDAMENTOS DE INFORMÁTICA Imágenes usadas en esta diapositiva son de dominio público

15 Clase Coleccion básica: promedio
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: promedio float promedio() { float suma = 0; for (int i = 0; i<tam;i++) for (int j = 0; j<tam;j++) suma += matriz[i][j]; return (float)suma/(tam*tam); } En el main cout<<"El promedio de los valores de la matriz es "<<mat1.promedio()<<endl; EIF200 FUNDAMENTOS DE INFORMÁTICA

16 Clase Coleccion básica: multiplique por 1 escalar
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: multiplique por 1 escalar En la clase Coleccion defina un método que multiplique todos los elementos de la matriz por un escalar (dado por el usuario) Por ejemplo, si el escalar = 2 1 2 9 3 5 6 7 8 4 2 4 18 6 10 12 14 16 8 EIF200 FUNDAMENTOS DE INFORMÁTICA

17 Clase Coleccion básica: multiplique por 1 escalar
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: multiplique por 1 escalar void multiplicarEscalar (int escalar){ for (int i = 0; i<tam;i++) for (int j = 0; j<tam;j++) matriz[i][j]*= escalar; } En el main cout<<"Digite el valor por el que desea multiplicar la matriz "; cin>>valor; mat1.multiplicarEscalar(valor); cout<<mat1.toString(); EIF200 FUNDAMENTOS DE INFORMÁTICA

18 Clase Coleccion básica: buscar un elemento
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: buscar un elemento En la clase Coleccion defina un método que devuelva true si un elemento determinado se encuentra en la colección y false si no. 1 2 9 3 5 6 7 8 4 EIF200 FUNDAMENTOS DE INFORMÁTICA Imágenes usadas en esta diapositiva son de dominio público

19 Clase Coleccion básica: buscar un elemento
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: buscar un elemento bool encuentraElem(int num) { for(int i = 0;i <tam;i++) for(int j = 0;j <tam;j++) if (matriz[i][j]== num) return true; return false; } EIF200 FUNDAMENTOS DE INFORMÁTICA En el main cout<<"Digite el valor que desea buscar "; cin>>valor; if (mat1.encuentraElem(valor)) cout <<"El valor " <<valor<<" SI se encuentra en la matriz "<<endl; else cout <<"El valor " <<valor<<" NO se encuentra en la matriz "<<endl;

20 Clase Coleccion básica: buscar el mayor
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: buscar el mayor En la clase Coleccion defina un método que retorne el mayor valor de la colección. [i]>max EIF200 FUNDAMENTOS DE INFORMÁTICA Imagen : Peter Murphy. CC-BY-SA Pedro Figueiredo. Tomado de :

21 Clase Coleccion básica: buscar el mayor
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: buscar el mayor int buscaMaximo() { int max=matriz[0][0]; for(int i = 0;i <tam;i++) for(int j = 0;j <tam;j++) if (matriz[i][j] > max) max=matriz[i][j]; return max; } En el main cout<<"El valor maximo de la matriz es "<<mat1.buscaMaximo()<<endl; EIF200 FUNDAMENTOS DE INFORMÁTICA

22 Ejercicio: Clase Colonia (cont..)
Se representa con un 1 la existencia de la bacteria i en un alimento j, y con un 0 la no existencia de la misma. class Colonia { private: int matriz [tam] [tam]; //tam valor constante definido previamente … }; 1 [0] [1] [2] [3] [0] [1] [2] [3] bacteria alimento Imágenes en esta diapositiva son de dominio público

23 Ejercicio: Clase Colonia(cont..)
Método que determine la existencia de la bacteria k en el alimento p. Método que devuelva en cuantos alimentos se encuentra la bacteria i. Método que muestre que bacterias están presentes en el alimento j. EIF200 FUNDAMENTOS DE INFORMÁTICA Imágenes usadas en esta diapositiva son de dominio público

24 Ejercicio: Clase Colonia(cont..)
class Colonia { private: int matriz[tam][tam]; Ejercicio: Clase Colonia(cont..) Método que determine la existencia de la bacteria k en el alimento p. bool existeBacteria(int k, int p) { if (matriz[k][p]== 1) return true; else return false; } Imágenes usadas en esta diapositiva son de dominio público EIF200 FUNDAMENTOS DE INFORMÁTICA

25 Ejercicio: Clase Colonia(cont..)
class Colonia { private: int matriz[tam][tam]; Ejercicio: Clase Colonia(cont..) Método que devuelva en cuantos alimentos se encuentra la bacteria i. int numAlimentos(int i) { int cont = 0; for (int j = 0; j<tam; j++) cont += matriz[i][j]; return cont; } Imágenes usadas en esta diapositiva son de dominio público EIF200 FUNDAMENTOS DE INFORMÁTICA

26 Ejercicio: Clase Colonia(cont..)
class Colonia { private: int matriz[tam][tam]; Ejercicio: Clase Colonia(cont..) Método que muestre qué bacterias están presentes en el alimento j. void bacteriasAlimento(int j) { for (int i = 0; i<tam; i++) if (matriz[i][j]== 1) cout<<"El alimento"<<j<<"tiene la bacteria "<<i; } Imágenes usadas en esta diapositiva son de dominio público EIF200 FUNDAMENTOS DE INFORMÁTICA

27 Clase Coleccion básica: diagonal principal
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: diagonal principal En la clase Coleccion defina un método que calcule la suma de los elementos de la diagonal principal de la matriz. Por ejemplo, si la matriz es: La suma de la diagonal es 15 A la suma de los elementos de la diagonal principal de una matriz cuadrada se le llama traza de la matriz 1 2 9 3 5 6 7 8 4 EIF200 FUNDAMENTOS DE INFORMÁTICA

28 Clase Coleccion básica: diagonal principal
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: diagonal principal int sumaDiagonal(){ int i = 0, suma=0; while (i<tam){ suma = suma + matriz[i][i]; i++; } return suma; En el main cout<<"La suma de la diagonal es "<<mat1.sumaDiagonal()<<endl; EIF200 FUNDAMENTOS DE INFORMÁTICA

29 EIF200 FUNDAMENTOS DE INFORMÁTICA
Ejercicios En la clase Coleccion: Escriba un método que busque un elemento determinado en la colección y devuelva cuantas veces lo encuentra. Escriba un método que devuelva la posición del elemento menor de la coleccion. Defina un método que calcule la suma de los elementos de la diagonal inversa de la matriz. 1 2 9 3 6 7 8 Imágenes usadas en esta diapositiva son de dominio público EIF200 FUNDAMENTOS DE INFORMÁTICA

30 EIF200 FUNDAMENTOS DE INFORMÁTICA
class Coleccion { private: int matriz[tam][tam]; Ejercicio #1 int cuentaElem(int num) { int cont=0; for(int i = 0;i <tam;i++) for(int j = 0;j <tam;j++) if (matriz[i][j]== num) cont++; return cont; } EIF200 FUNDAMENTOS DE INFORMÁTICA En el main cout<<"Digite el valor que desea contar "; cin>>valor; cout<<"El valor "<<valor<<" se encuentra "<<mat1.cuentaElem(valor)<<" veces"<<endl;

31 EIF200 FUNDAMENTOS DE INFORMÁTICA
class Coleccion { private: int matriz[tam][tam]; Ejercicio #2 void buscaPosMinimo(int &fil, int &col) { int min=matriz[0][0]; fil=0; col=0; for(int i = 0;i <tam;i++) for(int j = 0;j <tam;j++) if (matriz[i][j] < min) { min=matriz[i][j]; fil=i; col=j; } } EIF200 FUNDAMENTOS DE INFORMÁTICA En el main int x,y; mat1.buscaPosMinimo(x,y); cout<< "La posicion del valor minimo en la matriz es ["<<x<<"]["<<y<<"]"<<endl;

32 EIF200 FUNDAMENTOS DE INFORMÁTICA
class Coleccion { private: int matriz[tam][tam]; Ejercicio #3 int sumaDiagonalInversa(){ int suma=0; for (int i=0; i<tam; i++) suma = suma + matriz[i][tam-1-i]; return suma; } En el main cout<<"La suma de la diagonal inversa es "<<mat1.sumaDiagonalInversa()<<endl; EIF200 FUNDAMENTOS DE INFORMÁTICA

33 Clase Coleccion básica: matriz identidad
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: matriz identidad Una matriz se dice que es la matriz identidad si tiene todos sus elementos nulos excepto los de la diagonal principal que son iguales a 1 En la clase Coleccion defina un método que retorne true si la matriz es la matriz identidad y false si no 1 Imágenes usadas en esta diapositiva son de dominio público EIF200 FUNDAMENTOS DE INFORMÁTICA

34 Clase Coleccion básica: matriz identidad
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: matriz identidad bool esIdentidad() { for(int i=0;i<tam;i++) for(int j=0;j<tam;j++) if (i == j) { if (matriz[i][j] != 1) return false; } else { if (matriz[i][j] != 0) return true; } EIF200 FUNDAMENTOS DE INFORMÁTICA En el main if (mat1.esIdentidad()) cout <<"La matriz SI es la matriz identidad "<<endl; else cout <<"La matriz NO es la matriz identidad "<<endl;

35 EIF200 FUNDAMENTOS DE INFORMÁTICA
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: matriz simétrica Una matriz A de tamaño mxn se dice que es una matriz simétrica si: m=n y si cumple que Ax,y = Ay,x para 1<= x<= m y 1<= y <= n. Diseñe un método que determine si la matriz es simétrica o no [0] [1] [2] [3] 1 2 9 3 6 7 8 [0] [1] [2] [3] EIF200 FUNDAMENTOS DE INFORMÁTICA

36 EIF200 FUNDAMENTOS DE INFORMÁTICA
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: matriz simétrica bool esSimetrica() { for(int i = 1;i <tam;i++) for(int j = 0;j < i;j++) if (matriz[i][j]!= matriz[j][i]) return false; return true; } EIF200 FUNDAMENTOS DE INFORMÁTICA En el main if (mat1.esSimetrica()) cout <<"La matriz SI es simetrica "<<endl; else cout <<"La matriz NO es simetrica "<<endl;

37 EIF200 FUNDAMENTOS DE INFORMÁTICA
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: matriz transpuesta La transpuesta de una matriz se obtiene cambiando filas por columnas Diseñe un método que cambie la matriz por su transpuesta 1 2 9 3 5 6 7 8 4 [0] [1] [2] [3] 1 5 9 8 2 6 3 4 7 [0] [1] [2] [3] [0] [1] [2] [3] [0] [1] [2] [3] EIF200 FUNDAMENTOS DE INFORMÁTICA

38 EIF200 FUNDAMENTOS DE INFORMÁTICA
class Coleccion { private: int matriz[tam][tam]; Clase Coleccion básica: matriz transpuesta void transponerMatriz(){ //usando set y get int aux; for (int i = 1; i<tam ;i++) for (int j = 0; j< i ;j++) { aux=getPos(i,j); setPos(i,j,getPos(j,i)); setPos(j,i,aux); } En el main cout<<"La matriz transpuesta es"<<endl; mat1.transponerMatriz(); cout<<mat1.toString(); EIF200 FUNDAMENTOS DE INFORMÁTICA

39 EIF200 FUNDAMENTOS DE INFORMÁTICA
const int fil=4; const int col=7; class Coleccion { private: int matriz[fil][col]; Ejercicio Suponga que se tiene creada una instancia objeto de tipo Colección de n filas y 2*n-1 columnas. Escriba un método que calcule la suma de los elementos que forman un triángulo en la matriz. Por ejemplo si n=4, el método debe sumar los elementos contenidos en las casillas marcadas con x 1 2 3 x EIF200 FUNDAMENTOS DE INFORMÁTICA

40 EIF200 FUNDAMENTOS DE INFORMÁTICA
const int fil=4; const int col=7; class Coleccion { private: int matriz[fil][col]; Ejercicio int sumaTrianguloMatriz () { int ini=0; int fin=col-1; int suma=0; for (i=fil-1;i>=0;i--) { for (j=ini;j<=fin;j++) suma=suma+matriz[i][j]; ini++; fin--; } return suma; En el main cout<<"La suma del triangulo de la matriz es "<<mat1.sumaTrianguloMatriz()<<endl; EIF200 FUNDAMENTOS DE INFORMÁTICA

41 EIF200 FUNDAMENTOS DE INFORMÁTICA
TAREA: Clase Colonia Un alimento está imposibilitado para el consumo humano si presenta al menos tam/2 existencias de bacterias. Diseñe un método que devuelva cuántos alimentos están deshabilitados para el consumo humano. Un alimento es enviado a estudios bacteriólogos si se encuentra en él la presencia de cierta cantidad de bacterias continuas (por ejemplo las bacterias 1,2,3, o 2,3,4,5, o 3,4,5,6,7 etc). Diseñe un método que devuelva el máximo número de bacterias que se encuentran de manera consecutiva para el alimento m. EIF200 FUNDAMENTOS DE INFORMÁTICA

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


Descargar ppt "Programación Orientada a Objetos"

Presentaciones similares


Anuncios Google