100 Excelente. Universidad de Costa Rica | Facultad de Ingeniería Escuela de Ingeniería Eléctrica | Programación Bajo Plataformas Abiertas Modulo Python | Laboratorio #5 Erick Carvajal Barboza | B01395 Módulos Cree un módulo que implemente una clase que permita representar matrices n × m. La clase debe implementar métodos para establecer y obtener el valor de una posición determinada. Además deben implementarse métodos que permitan sumar, restar y comparar matrices usando los operadores estándar de Python. En otro archivo, escriba un pequeño programa de prueba que use la clase Matriz creada en el punto anterior Para implementar el programa deseado, se utilizaron 2 módulos, el primero, consiste en una librería en la cual se crea un objeto tipo matriz y se definen todas las funciones que se pueden llevar a cabo con esta clase de objetos, el segundo consiste en un programa para probarlo. Estos se muestran a continuación. Libreria de Matrices #!/usr/bin/python # ­*­ coding: latin­1 ­*­ #La línea 'shebang', le indica a la consola donde se encuentra el intérprete de python. La segunda línea declara la codificación del código fuente de python, como esto se podrán utilizar caracteres como tildes, etc. import sys #Importa la librería 'sys' la cual permite utilizar la lista de entradas desde consola class Matriz(object): #Este metodo es el constructor de objetos tipo Matriz, para que se pueda construir debe ser, de mayor tamaño a 1x1, y de un numero entero de filas. Si esto sucede se definen los atributos filas, columnas y Matriz la cual se rellena con ceros inicialmente. De lo contrario se imprime un error def __init__(self, filas, columnas): if filas > 1 and columnas > 1 and filas % 1 == 0 and columnas % 1 == 0: self.columnas = columnas self.filas = filas self.matriz = [[0 for columna in range(columnas)] for fila in range(filas)] else: print "Tamano no valido" sys.exit(1) #Este metodo define las operaciones suma y permite que se llame a las misma mediante el uso de "+", este método devuelve una MatrizSuma la cual contiene la suma término a término de 2 matrices. Si las matrices no tienen el mismo tamaño se genera un error def __add__(self, matriz2): MatrizSuma = Matriz(self.filas, self.columnas) if self.filas == matriz2.filas and self.columnas == matriz2.columnas: for fila in range(self.filas): for columna in range(self.columnas): MatrizSuma.matriz[fila][columna] = self.matriz[fila] [columna] + matriz2.matriz[fila][columna] return MatrizSuma else: print "Matrices de distintos tamanos, no se pueden sumar" sys.exit(1) #Este metodo define las operaciones resta y permite que se llame a las misma mediante el uso de "­", este método devuelve una MatrizResta la cual contiene la resta término a término de 2 matrices. Si las matrices no tienen el mismo tamaño se genera un error def __sub__(self, matriz2): MatrizResta = Matriz(self.filas, self.columnas) if self.filas == matriz2.filas and self.columnas == matriz2.columnas: for fila in range(self.filas): for columna in range(self.columnas): MatrizResta.matriz[fila][columna] = self.matriz[fila] [columna] ­ matriz2.matriz[fila][columna] return MatrizResta else: print "Matrices de distintos tamanos, no se pueden restar" sys.exit(1) #Este metodo devuelve un booleano el cual dice si las matrices son iguales término a término, se puede llamar utilizando "==" def __eq__(self, matriz2): Iguales = True if self.filas == matriz2.filas and self.columnas == matriz2.columnas: for fila in range(self.filas): for columna in range(self.columnas): if not self.matriz[fila][columna] == matriz2.matriz[fila] [columna]: Iguales = False return Iguales else: print "Matrices de distintos tamanos, no se pueden comparar" #Este metodo devuelve un string el cual contiene las filas y columnas de la matriz en forma de matriz, y no como números separados, se puede llamar utilizando "print" def __str__(self): a = '\n' for fila in range(self.filas): for columna in range(self.columnas): a += "%d " %(self.matriz[fila][columna]) a += "\n" return a #Este metodo agrega un valor a una posicion de la matriz determinada por el usuario, se puede llamar utilizando "AgregarDato(fila, columna, valor a ingresar)", si no es una posicion valida o lo que se desea ingresar no es un numero devuelve un error def AgregarDato(self, posfila, poscolumna, valor): if posfila >= 0 and poscolumna >= 0 and posfila < self.filas and poscolumna < self.columnas and (valor ­ valor % 1) % 1 == 0: self.matriz[posfila][poscolumna] = valor else: print "No se puede guardar" Modulo de Prueba #!/usr/bin/python # ­*­ coding: latin­1 ­*­ #La línea 'shebang', le indica a la consola donde se encuentra el intérprete de python. La segunda línea declara la codificación del código fuente de python, como esto se podrán utilizar caracteres como tildes, etc. #Importa la librería 'sys' la cual permite utilizar la lista de entradas desde consola, y se importa la libreria creada "matriz" import sys, matriz #Se crea un objeto Matriz llamado m1 de tamaño 3x3 m1 = matriz.Matriz(3, 3) #Se crea una matriz de la forma: # 1 0 0 # 0 1 0 # 0 0 1 m1.AgregarDato(0, 0, 1) m1.AgregarDato(1, 1, 1) m1.AgregarDato(2, 2, 1) #Se imprime la matriz anterior print m1 #Se crea un objeto Matriz llamado m1 de tamaño 3x3 m2 = matriz.Matriz(3, 3) #Se crea una matriz de la forma: # 2 0 0 # 0 2 0 # 0 0 2 m2.AgregarDato(0, 0, 2) m2.AgregarDato(1, 1, 2) m2.AgregarDato(2, 2, 2) #Se imprime la matriz anterior print m2 #Se crea un objeto Matriz llamado msuma el cual es la suma de m1 y m2 msuma = m1 + m2 print msuma #Se crea un objeto Matriz llamado mresta el cual es la resta de m1 y m2 mresta = m1 ­ m2 print mresta #Se comprueba si las matrices son iguales if m1 == m2: print "Son Iguales" else: print "Son Distintas"