class LppT04Matrix::MatrizDispersa

Clase Matriz Dispersa hereda de Matriz

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