Parent

Methods

Included Modules

Class/Module Index [+]

Quicksearch

Matriz

Clase abstracta de la que heredan matriz densa y dispersa. No se puede crear un objeto de esta clase.

Attributes

col[RW]

Numero de columnas

fil[RW]

Numero de filas

Public Class Methods

new(f, c) click to toggle source

Se almacena el valor de las filas y las columnas segun se le pasen por parametros.

# File lib/matrices_p9.rb, line 16
def initialize(f, c)
       @fil=f.to_i;                  
       @col=c.to_i; 
end

Public Instance Methods

+(other) click to toggle source

Sobrecarga del operador de suma, recibe como parametros dos matrices y devuelve una matriz con el resultado de la suma de forma A+B= (Aij+Bij)

# File lib/matrices_p9.rb, line 23
def +(other)                
        if(self.fil == other.fil and self.col == other.col)
                # SELF Matrices densas
                if self.instance_of?MatrizDensa
                        temp = MatrizDensa.new(self.fil, self.col, nil)
                        if other.instance_of?MatrizDensa
                                
                                #for i in (0...@fil.to_i)
                                @fil.to_i.times do |i| 
                                
                                        #for j in (0...@col.to_i)
                                        @col.to_i.times do |j|
                                                temp.mat[i][j] = (@mat[i][j]) + (other.mat[i][j])
                                                
                                        end
                                end
                        end

                        if other.instance_of?MatrizDispersa
                                #for i in (0...@fil.to_i)
                                @fil.to_i.times do |i| 
                                
                                        #for j in (0...@col.to_i)
                                        @col.to_i.times do |j| 
                                
                                                encontrado = 0
                                                #for k in (0...other.posx.size)
                                                other.posx.size.times do |k| 
                                                        if (i==other.posx[k] and j==other.posy[k] and encontrado==0)
                                                                temp.mat[i][j] = (self.mat[i][j]) + (other.valor[k])
                                                                encontrado = 1 
                                                        end
                                                end
                                                if (encontrado == 0)
                                                        temp.mat[i][j] = self.mat[i][j]
                                                end
                                        end
                                end
                        end
                end

                # SELF Matriz Dispersa
                if self.instance_of?MatrizDispersa
                        if other.instance_of?MatrizDensa
                                temp = MatrizDensa.new(self.fil, self.col, nil)
                                #for i in (0...@fil.to_i)
                                        @fil.to_i.times do |i| 
                                
                                        for j in (0...@col.to_i)
                                                encontrado = 0
                                                #for k in (0...self.posx.size.to_i)
                                                self.posx.size.times do |k| 
                                                
                                                        if (i==self.posx[k] and j==self.posy[k] and encontrado==0)
                                                                temp.mat[i][j] = (other.mat[i][j]) + (self.valor[k])
                                                                encontrado = 1 
                                                        end
                                                end
                                                if (encontrado == 0)
                                                        temp.mat[i][j] = other.mat[i][j]
                                                end
                                        end
                                end
                        end
        

                        if other.instance_of?MatrizDispersa
                                temp = MatrizDispersa.new(self.fil,self.col,[],[],[])
                                temp.valor = self.valor
                                temp.posx = self.posx
                                temp.posy = self.posy

                                #for j in (0...other.posx.size.to_i)
                                other.posx.size.to_i.times do |j| 
                                
                                        encontrado = false
                                        #for k in (0...self.posx.size.to_i)
                                        self.posx.size.times do |k| 
                                                
                                                if(other.posx[j] == temp.posx[k] and other.posy[j] == temp.posy[k])
                                                        temp.valor[k] = temp.valor[k] + other.valor[j]
                                                        encontrado = true
                                                end
                                                
                                        end
                                        if (encontrado == false)
                                                temp.posx << other.posx[j]
                                                temp.posy << other.posy[j]
                                                temp.valor << other.valor[j]
                                        end
                                end
                        end
                end
        
                return temp
        else 
                return nil
        end
end
-(other) click to toggle source

Sobrecarga del operador de resta, recibe como parametros dos matrices y devuelve una matriz con el resultado de la suma de forma A-B= (Aij+Bij)

# File lib/matrices_p9.rb, line 124
def -(other)                
        if(self.fil == other.fil and self.col == other.col)
                # SELF Matrices densas
                if self.instance_of?MatrizDensa
                        temp = MatrizDensa.new(self.fil, self.col, nil)
                        if other.instance_of?MatrizDensa            
                                #for i in (0...@fil.to_i)
                                @fil.to_i.times do |i| 
                                
                                        #for j in (0...@col.to_i)
                                        @col.to_i.times do |j| 
                                                
                                                temp.mat[i][j] = (self.mat[i][j]) - (other.mat[i][j])
                                        end
                                end
                        end

                        if other.instance_of?MatrizDispersa
                                #for i in (0...@fil.to_i)
                                @fil.to_i.times do |i| 
                                
                                        #for j in (0...@col.to_i)
                                        @col.to_i.times do |j| 
                                
                                                encontrado = 0
                                                #for k in (0...other.posx.size)
                                                other.posx.size.times do |k| 
                                                
                                                        if (i==other.posx[k] and j==other.posy[k] and encontrado==0)
                                                                temp.mat[i][j] = (self.mat[i][j]) - (other.valor[k])
                                                                encontrado = 1 
                                                        end
                                                end
                                                if (encontrado == 0)
                                                        temp.mat[i][j] = self.mat[i][j]
                                                end
                                        end
                                end
                        end
                end

                # SELF Matriz Dispersa
                if self.instance_of?MatrizDispersa
                        if other.instance_of?MatrizDensa
                                temp = MatrizDensa.new(self.fil, self.col, nil)
                                #for i in (0...@fil.to_i)
                                @fil.to_i.times do |i| 
                                
                                        #for j in (0...@col.to_i)
                                        @col.to_i.times do |j| 
                                                
                                                encontrado = 0
                                                #for k in (0...self.posx.size.to_i)
                                                self.posx.size.times do |k| 
                                                
                                                        if (i==self.posx[k] and j==self.posy[k] and encontrado==0)
                                                                temp.mat[i][j] = (other.mat[i][j]) - (self.valor[k])
                                                                encontrado = 1 
                                                        end
                                                end
                                                if (encontrado == 0)
                                                        temp.mat[i][j] = other.mat[i][j]
                                                end
                                        end
                                end
                        end
        

                        if other.instance_of?MatrizDispersa
                                temp = MatrizDispersa.new(self.fil,self.col,[],[],[])
                                temp.valor = self.valor
                                temp.posx = self.posx
                                temp.posy = self.posy

                                #for j in (0...other.posx.size.to_i)
                                other.posx.size.times do |j| 
                                                
                                        encontrado = false
                                        #for k in (0...self.posx.size.to_i)
                                        self.posx.size.times do |k| 
                                                
                                                if(other.posx[j] == temp.posx[k] and other.posy[j] == temp.posy[k])
                                                        temp.valor[k] = temp.valor[k] - other.valor[j]
                                                        encontrado = true
                                                end
                                                
                                        end
                                        if (encontrado == false)
                                                temp.posx << other.posx[j]
                                                temp.posy << other.posy[j]
                                                temp.valor << other.valor[j]
                                        end
                                end
                        end
                end
        
                return temp
        else 
                return nil
        end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.