class LppT04Matrix::MatrizDispersa
Attributes
elemento[RW]
Hash de hashes que guarda los elementos de la matriz por filas y columnas.
Public Class Methods
new(filas, columnas, elemento)
click to toggle source
Contructor de la clase MatrizDispersa
Calls superclass method
LppT04Matrix::Matriz::new
# File lib/lpp_t_04_matrix.rb, line 165 def initialize (filas, columnas, elemento) # Contructor de la clase Matriz. super(filas, columnas) # Hash de hashes que guarda los elementos de la matriz por filas y columnas. @elemento = elemento end
Public Instance Methods
*(other)
click to toggle source
Multiplica dos Fracciones se le pasa un tipo fraccion.
# File lib/lpp_t_04_matrix.rb, line 220 def *(other) # Multiplica dos Fracciones se le pasa un tipo fraccion. raise ArgumentError, "La longitud de las matrices no coincide." unless @columnas == other.filas case other when MatrizDensa other.*(self) when MatrizDispersa other = other.traspuesta elemento = Hash.new(Hash.new()) @elemento.each { |key, value| other.elemento.each { |key1, value1| acumulado = 0 value.each { |key2, value2| if(value1[key2] != nil) acumulado += value2 * value1[key2] end } if(acumulado != 0) hash = { key1 => acumulado} hash2 = {key => hash} elemento.merge!(hash2){|key3, oldval, newval| oldval.merge!(newval)} end } } elemento MatrizDispersa.new(@filas, other.columnas, elemento) else raise TypeError.new("Cannot coerce #{other.inspect} to a Matriz") end end
+(other)
click to toggle source
Suma dos Fracciones se le pasa un tipo fraccion.
# File lib/lpp_t_04_matrix.rb, line 192 def +(other) # Suma dos Fracciones se le pasa un tipo fraccion. raise ArgumentError, "La longitud de las matrices no coincide." unless @filas == other.filas && @columnas == other.columnas case other when MatrizDensa other.+(self) when MatrizDispersa elemento = @elemento.merge(other.elemento){|key, oldval, newval| oldval.merge(newval){|key2, oldval2, newval2|oldval2 + newval2}} MatrizDispersa.new(@filas, other.columnas, elemento) else raise TypeError.new("Cannot coerce #{other.inspect} to a Matriz") end end
-(other)
click to toggle source
Resta dos Fracciones se le pasa un tipo fraccion.
# File lib/lpp_t_04_matrix.rb, line 206 def -(other) # Resta dos Fracciones se le pasa un tipo fraccion. raise ArgumentError, "La longitud de las matrices no coincide." unless @filas == other.filas && @columnas == other.columnas case other when MatrizDensa other.-(self) when MatrizDispersa elemento = @elemento.merge(other.elemento){|key, oldval, newval| oldval.merge(newval){|key2, oldval2, newval2|oldval2 - newval2}} MatrizDispersa.new(@filas, other.columnas, elemento) else raise TypeError.new("Cannot coerce #{other.inspect} to a Matriz") end end
[](i)
click to toggle source
Metodo de acceso a la matriz.
# File lib/lpp_t_04_matrix.rb, line 172 def [](i) # Metodo de acceso a la matriz. @elemento[i] end
indice(i,j)
click to toggle source
Devuelve el valor del indice i j
# File lib/lpp_t_04_matrix.rb, line 177 def indice(i,j) # Devuelve el valor del indice i j elemento = @elemento.fetch(i,0) if elemento!= 0 elemento.fetch(j,0) else 0 end end
maximo()
click to toggle source
Devuelve el valor maximo
# File lib/lpp_t_04_matrix.rb, line 268 def maximo # Devuelve el valor maximo aux = @elemento.keys aux1 = aux[0] aux2 = @elemento[aux1].values mayor = aux2[0] @elemento.each { |key, value| value.each { |key2, value2| mayor = indice(key,key2) if indice(key,key2) > mayor } } mayor end
minimo()
click to toggle source
Devuelve el valor minimo.
# File lib/lpp_t_04_matrix.rb, line 283 def minimo # Devuelve el valor minimo. aux = @elemento.keys aux1 = aux[0] aux2 = @elemento[aux1].values mayor = aux2[0] @elemento.each { |key, value| value.each { |key2, value2| mayor = indice(key,key2) if indice(key,key2) < mayor } } mayor end
to_s()
click to toggle source
Convierte la fraccion a una cadena
# File lib/lpp_t_04_matrix.rb, line 187 def to_s # Convierte la fraccion a una cadena @elemento end
traspuesta()
click to toggle source
Devuelve la trasuesta de una Matriz
# File lib/lpp_t_04_matrix.rb, line 254 def traspuesta # Devuelve la trasuesta de una Matriz elemento = Hash.new(Hash.new()) @elemento.each { |key, value| value.each { |key2, value2| hash = { key => value2} hash2 = {key2 => hash} elemento.merge!(hash2){|key3, oldval, newval| oldval.merge!(newval)} } } elemento MatrizDispersa.new(@filas, @columnas, elemento) end