lib/matrizdispersascp.rb in matrizdispersascp-0.0.1 vs lib/matrizdispersascp.rb in matrizdispersascp-0.0.2

- old
+ new

@@ -1,5 +1,169 @@ -require "matrizdispersascp/version" +# Etsii ull grado informática +# Lenguajes y Paradigmas de la programacion +# Pedro Javier Núñez Rodríguez +# Constanza Leon Baritussio +# Clases MatrizDispersa y MatrizDensa +require 'matrizdispersascp/version' +require 'matriz' +require 'fraccion' + module Matrizdispersascp - # Your code goes here... + + class MatrizDensa < Matriz + + @matrix + @n #filas + @m #columnas + + def initialize(m) + @filas = m.size + @columnas = m[0].size + @matriz = m; + end + + end + + class MatrizDispersa < Matriz + + attr_reader :matriz, :filas, :columnas + + def initialize(matriz) + @matriz = matriz + @filas = matriz.size + @columnas = matriz.size + + end + + def to_s + fil = 0 + st = "{" + while fil < filas + col = 0 + st += "{" + while col < columnas + if @matriz[fil] != nil # Hay datos en la fila + if @matriz[fil].has_key?(col) + st += "#{@matriz[fil][col].to_s}" + else + st += "0" + end + else + st += "0" + end + if (col + 1) < columnas then + st += ", " + end + col += 1 + end + if (fil + 1) < filas then + st += "}" + end + st += "}" + fil += 1 + end + st += "}" + st + end + + def to_f + flotante = Array.new(matriz.size - 1) + for i in 0...matriz.size + # Hay datos en la fila + if matriz[i] != nil + flotante[i] = Hash.new() + matriz[i].each do |key, value| + flotante[i][key] = matriz[i][key].to_f + end + end + end + MatrizDispersa.new(flotante) + end + + # Suma de matrices + def +(o) + suma = Array.new(matriz.size - 1) + for i in 0...matriz.size + if (matriz[i] != nil or o.matriz[i] != nil) + suma[i] = Hash.new() + case true + when (matriz[i] != nil and o.matriz[i] != nil) + suma[i] = matriz[i] + o.matriz[i].each do |key, value| + if suma[i].has_key?(key) + suma[i][key] = suma[i][key] + o.matriz[i][key] + else + suma[i][key] = o.matriz[i][key] + end + end + when matriz[i] != nil + suma[i] = matriz[i] + when o.matriz[i] != nil + suma[i] = o.matriz[i] + end + end + end + MatrizDispersa.new(suma) + end + + # Resta de matrices + def -(o) + resta = Array.new(matriz.size - 1) + for i in 0...matriz.size + if (matriz[i] != nil or o.matriz[i] != nil) + resta[i] = Hash.new() + case true + when (matriz[i] != nil and o.matriz[i] != nil) + resta[i] = matriz[i] + o.matriz[i].each do |key, value| + if resta[i].has_key?(key) + resta[i][key] = resta[i][key] - o.matriz[i][key] + else + resta[i][key] = o.matriz[i][key] * -1 + end + end + when matriz[i] != nil + resta[i] = matriz[i] + when o.matriz[i] != nil + resta[i] = o.matriz[i] + resta[i].each do |key, value| + resta[i][key] = resta[i][key] * -1 + end + end + end + end + MatrizDispersa.new(resta) + end + + # Meodo que calcula el maximo de una matriz dispersa + def max + maximo = 0.to_f + for i in 0...matriz.size + if matriz[i] != nil + matriz[i].each do |key, value| + if matriz[i][key].to_f > maximo + maximo = matriz[i][key].to_f + end + end + end + end + maximo + end + + # Metodo que calcula el minimo de una mariz dispersa + def min + + minimo = 0.to_f + for i in 0...matriz.size + if matriz[i] != nil + matriz[i].each do |key, value| + if matriz[i][key].to_f < minimo + minimo = matriz[i][key].to_f + end + end + end + end + minimo + end + end end