Nota: 100 UNIVERSIDAD DE COSTA RICA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA ELÉCTRICA PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117 I CICLO 2012 REPORTE LABORATORIO 11 1. Estudiante Curso: Programación bajo Plataformas Abiertas Grupo: 1 Estudiante: Ricardo Abarca Garro Carné: A90010 2. Desarrollo En este laboratorio se introdujo la utilización de clases y el algunas tecnicas para el manejo de errores, el manejo de clases es de gran utilidad pues permiten al usuario desarrollar tipos de datos los cuales se ajusten a las necesidades que estos requieran en el programa, las cuales podrian ser difíciles de resolver con los tipos basicos de variables. En el laboratorio se debian efectuar operaciones con matrices, las cuales no son un tipo de dato incluido en python, con la utilización de clases se crearon objetos del tipos matriz lo cual facilita de gran manera las operaciones con matrices. 2.1. Problema 1 La primera parte del laboratorio consistiá en elaborar un módulo con una clase que creará objetos del tipo matriz del tamaño deseado, y donde se definieran algunas operaciones básicas de estas, el programa encargado de la elaborar estas matrices se puede ver en el archivo adjunto parte1. La primera parte de este módulo es la del método constructor en el cual se crean las matrices del tamaño específicado con todos sus valores iguales a cero, en este método se define el atributo matriz como una lista de listas, este atributo es de gran importancia pues es con el que se define el objeto como una matriz, el metodo constructo se puede ver a continuacion: def _ _ i n i t _ _ ( s e l f , f i l a s , columnas ) : filas = str ( filas ) columnas = s t r ( columnas ) i f f i l a s . i s d i g i t ( ) and columnas . i s d i g i t ( ) : filas = int ( filas ) columnas = i n t ( columnas ) self . filas = filas s e l f . columnas = columnas s e l f . matriz = [ [ ] ] columna = [ ] f o r i i n range ( f i l a s ) : f o r j i n range ( columnas ) : UNIVERSIDAD DE COSTA RICA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA ELÉCTRICA PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117 I CICLO 2012 REPORTE LABORATORIO 11 columna . i n s e r t ( j , 0 ) s e l f . m a t r i z . append ( columna ) columna = [ ] Para mostrar la información del objeto matriz se utiliza un método especial, el cual es llamado de forma inmediata al efectuar comandos como print, el método implementado se muestra a continuación: def _ _ s t r _ _ ( s e l f ) : r e t u r n ’ \ n ’ . j o i n (map( s t r , s e l f . m a t r i z ) ) De forma similar al caso anterior hay otros métodos especiales los cuales se llaman de forma inmediata al realizar operaciones basicas como sumas o restas con instancias del objeto, en este laboratorio se implementaron estos métodos para la suma, la resta y la comparación de dos matrices, todos estos se pueden ver en el archivo adjunto, a continuación se mostrará unicamente el caso de la suma: def __add__ ( s e l f , suma ) : i f suma . f i l a s == s e l f . f i l a s and suma . columnas== s e l f . columnas : s e l f . suma = suma t o t a l = M a t r i z ( s e l f . f i l a s , s e l f . columnas ) f o r f i l a i n range ( s e l f . f i l a s ) : f o r columna i n range ( s e l f . columnas ) : t o t a l . m a t r i z [ f i l a ] [ columna ] = s e l f . m a t r i z [ f i l a ] [ colum return t o t a l else : p r i n t ’ No se pueden sumar m a t r i c e s con d i f e r e n t e s dimensiones ’ sys . e x i t ( 1 ) Tambien se implementaron métodos para ingresar valores a alguna posición de la matrices y otro para obtener el valor de alguna posición de la matriz, solo se mostrará el que introduce valores, ya que el los devuelve es muy similar: def s e t _ v a l o r ( s e l f , pm, pn , v a l o r ) : i f pm<= s e l f . f i l a s and pn<= s e l f . columnas : #se asegura de que l a p o s i c i o n i n d i c a e x i s t a en l a m a t r i z , de l o c o n t s e l f .pm = pm s e l f . pn = pn self . valor = valor s e l f . m a t r i z [ pm− 1 ] [ pn−1] = v a l o r else : p r i n t ’ No e x i s t e esa p o s i c i o n en l a m a t r i z ’ sys . e x i t ( 1 ) En estos métodos se recibe la posción de la matriz(y el valor a introducir en el caso de set), por lo que al llamar a estos métodos desde una instancia del objeto se deben indicar esos valores, estos métodos simplemente determinan la posición indicada en la matriz, e introducen o devuelven el valor asignado a esa posición según le corresponda al método. UNIVERSIDAD DE COSTA RICA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA ELÉCTRICA PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117 I CICLO 2012 REPORTE LABORATORIO 11 2.2. Problema 2 La segunda parte del laboratorio simplemente consistia en un módulo de prueba, donde se crean objetos del tipo matriz, y se efectuan operaciones con estos, el módulo utilizado se puede ver en el archivo prueba.py. Todos los argumentos enviados desde el módulo utilizado son compatibles con el programa, y no generan ningun error, sin embargo es fácil obtener resultados distintos alterando un poco los valores introducidos, al declarar las instancias del tipo matriz, y al efectuar operaciones con estas, se llama a la clase Matrices donde estas estan definidas, y en donde se efectuan las operaciones requeridas por estas operaciones.