matrizHM 0.0.1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -0
- data/Gemfile +0 -0
- data/Guardfile +10 -0
- data/LICENSE.txt +0 -0
- data/README.md +0 -0
- data/Rakefile +9 -0
- data/lib/gcd.rb +8 -0
- data/lib/matriz.rb +273 -0
- data/lib/matrizHM/version.rb +1 -1
- data/lib/matrizHM.rb +1 -1
- data/lib/racional.rb +102 -0
- data/matrizHM.gemspec +4 -1
- data/spec/matrizHM_spec.rb +0 -0
- data/spec/matriz_spec.rb +163 -0
- metadata +59 -10
- data/lib/matrizHM/version.rb~ +0 -3
- data/lib/matrizHM.rb~ +0 -5
- data/matrizHM.gemspec~ +0 -24
data/.gitignore
CHANGED
data/Gemfile
CHANGED
File without changes
|
data/Guardfile
ADDED
data/LICENSE.txt
CHANGED
File without changes
|
data/README.md
CHANGED
File without changes
|
data/Rakefile
CHANGED
data/lib/gcd.rb
ADDED
data/lib/matriz.rb
ADDED
@@ -0,0 +1,273 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Operatoria
|
4
|
+
|
5
|
+
#Funcion que asigna un valor k a una posicion i,j dentro de la matriz
|
6
|
+
def []=(i, j, k)
|
7
|
+
matriz[i][j] = k
|
8
|
+
end
|
9
|
+
|
10
|
+
#Sobrecargado el + para poder sumar 2 matrices
|
11
|
+
def +(other)
|
12
|
+
raise ArgumentError, "La longitud de las matrices no coincide." unless @filas == other.filas && @columnas == other.columnas
|
13
|
+
sum = Matriz.new(matriz) #inicializas el vector sum con el primer con el primer
|
14
|
+
self.filas.times do |i|
|
15
|
+
self.columnas.times do |j|
|
16
|
+
sum.matriz[i][j] = self.matriz[i][j] + other.matriz[i][j]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
return sum #devuelve un tipo array modificando el objeto m1 si se hace m3=m1+m2 -> Se necesita q sea tipo Matriz
|
20
|
+
end
|
21
|
+
|
22
|
+
#Sobrecargado el - para poder restar 2 matrices
|
23
|
+
def -(other)
|
24
|
+
raise ArgumentError, "La longitud de las matrices no coincide." unless @filas == other.filas && @columnas == other.columnas
|
25
|
+
resta = Matriz.new(matriz)
|
26
|
+
self.filas.times do |i|
|
27
|
+
self.columnas.times do |j|
|
28
|
+
resta.matriz[i][j] = self.matriz[i][j] - other.matriz[i][j]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
return resta #devuelve un tipo matriz modificando el objeto m1 si se hace m3=m1+m2
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
def Producto_escalar (other)
|
36
|
+
mul = Matriz.new(matriz)
|
37
|
+
self.filas.times do |i|
|
38
|
+
self.columnas.times do |j|
|
39
|
+
mul.matriz[i][j] = self.matriz[i][j] * other
|
40
|
+
end
|
41
|
+
end
|
42
|
+
return mul
|
43
|
+
end
|
44
|
+
|
45
|
+
#Para comprobar que dos matrices son equivalentes,primero se comprueba sus dimensiones. Si tienen las mismas dimensiones se comprueba que el valor de ambas matrices sean iguales en las mismas posiciones,si esto es así se devuelve true,false en otro caso.
|
46
|
+
def ==(other)
|
47
|
+
dev=true
|
48
|
+
if ((self.filas.size==other.filas.size) && (self.columnas.size==other.columnas.size))
|
49
|
+
self.filas.times do |i|
|
50
|
+
self.columnas.times do |j|
|
51
|
+
if (self.matriz[i][j] != other.matriz[i][j])
|
52
|
+
dev=false
|
53
|
+
else
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
else
|
58
|
+
dev=false
|
59
|
+
end
|
60
|
+
return dev
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
#Realiza el opuesto de una matriz
|
65
|
+
def -@
|
66
|
+
op = Matriz.new(matriz)
|
67
|
+
self.filas.times do |i|
|
68
|
+
self.columnas.times do |j|
|
69
|
+
op.matriz[i][j] = -self.matriz[i][j]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
return op
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
#Dos matrices son multiplicables si el numero de columnas de A coincide con el numero de filas de B
|
77
|
+
def * (other)
|
78
|
+
raise ArgumentError, "La longitud de las matrices no coincide." unless @columnas == other.filas
|
79
|
+
elemento = Array.new
|
80
|
+
acumulado = 0
|
81
|
+
self.filas.times do |i|
|
82
|
+
elemento_fila = Array.new
|
83
|
+
other.columnas.times do |j|
|
84
|
+
acumulado = 0
|
85
|
+
self.columnas.times do |k|
|
86
|
+
suma = @matriz[i][k] * other.matriz[k][j]
|
87
|
+
acumulado = suma + acumulado
|
88
|
+
end
|
89
|
+
elemento_fila << acumulado
|
90
|
+
end
|
91
|
+
elemento << elemento_fila
|
92
|
+
end
|
93
|
+
Matriz.new(elemento)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
#Clase Base que contiene el metodo initilize y los getters. Además contiene el to_s y el método []
|
98
|
+
class Matriz
|
99
|
+
require "racional.rb" #definicion de la clase racional
|
100
|
+
|
101
|
+
include Operatoria
|
102
|
+
attr_accessor :matriz, :filas, :columnas
|
103
|
+
|
104
|
+
def initialize(matriz)
|
105
|
+
@matriz = Array.new(matriz)
|
106
|
+
@filas = matriz.size
|
107
|
+
@columnas = matriz[0].size
|
108
|
+
@n_elementos= (matriz.size * matriz[0].size)*0.6
|
109
|
+
n_ceros=0
|
110
|
+
filas.times do |i|
|
111
|
+
columnas.times do |j|
|
112
|
+
if (matriz[i][j]==0)
|
113
|
+
n_ceros=n_ceros+1
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
if n_ceros > @n_elementos
|
118
|
+
raise RuntimeError, 'La Matriz no es densa'
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
def comprobar (matriz)
|
124
|
+
|
125
|
+
n_ceros=0
|
126
|
+
filas.times do |i|
|
127
|
+
columnas.times do |j|
|
128
|
+
if (matriz[i][j]==0)
|
129
|
+
n_ceros=n_ceros+1
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
if n_ceros > @n_elementos
|
134
|
+
raise RuntimeError, 'La Matriz no es densa'
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
#Imprime la matrices
|
139
|
+
def to_s
|
140
|
+
filas.times do |i|
|
141
|
+
columnas.times do |j|
|
142
|
+
print "#{matriz[i][j]} "
|
143
|
+
end
|
144
|
+
puts
|
145
|
+
end
|
146
|
+
puts
|
147
|
+
end
|
148
|
+
|
149
|
+
|
150
|
+
def [](i,j)
|
151
|
+
matriz[i][j]
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
#matriz normal
|
157
|
+
class MatrizDensa < Matriz
|
158
|
+
|
159
|
+
def +(other)
|
160
|
+
suma=MatrizDensa.new(Array.new(@filas,1){Array.new(@columnas,1)})
|
161
|
+
filas.times do |i|
|
162
|
+
columnas.times do |j|
|
163
|
+
if (other.hash_no_ceros.key?("#{i}#{j}"))
|
164
|
+
suma.matriz[i][j] = other.hash_no_ceros["#{i}#{j}"] + matriz[i][j]
|
165
|
+
else
|
166
|
+
suma.matriz[i][j] = matriz[i][j]
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
return suma
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|
174
|
+
|
175
|
+
class MatrizDispersa < Matriz
|
176
|
+
#modificar el initialize,pues no necesito almacenar los '0' guardar los indices donde se encuentran dichos ceros
|
177
|
+
#metodo que dado una fila y columna y un porcentaje de ceros prc,construye una matriz aleatoria
|
178
|
+
attr_accessor :hash_no_ceros, :filas, :columnas
|
179
|
+
|
180
|
+
def initialize(matriz)
|
181
|
+
@filas = matriz.size
|
182
|
+
@columnas = matriz[0].size
|
183
|
+
@hash_no_ceros={}
|
184
|
+
|
185
|
+
#comprobamos que la matriz es dispersa o no
|
186
|
+
@n_elementos= (matriz.size * matriz[0].size)*0.6
|
187
|
+
n_ceros=0
|
188
|
+
filas.times do |i|
|
189
|
+
columnas.times do |j|
|
190
|
+
if (matriz[i][j]==0)
|
191
|
+
n_ceros=n_ceros+1
|
192
|
+
else
|
193
|
+
pos_no_cero="#{i}#{j}"
|
194
|
+
@hash_no_ceros[pos_no_cero]=matriz[i][j]
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
if n_ceros < @n_elementos
|
200
|
+
raise RuntimeError, 'La Matriz no es dispersa'
|
201
|
+
else
|
202
|
+
end
|
203
|
+
|
204
|
+
end
|
205
|
+
|
206
|
+
|
207
|
+
def comprobar (hash)
|
208
|
+
if hash.length > ((@filas * @columnas)*0.4)
|
209
|
+
false
|
210
|
+
else
|
211
|
+
true
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
def to_s
|
216
|
+
filas.times do |i|
|
217
|
+
columnas.times do |j|
|
218
|
+
if (hash_no_ceros.key?("#{i}#{j}"))
|
219
|
+
print hash_no_ceros["#{i}#{j}"]
|
220
|
+
print " "
|
221
|
+
else
|
222
|
+
print "0 "
|
223
|
+
end
|
224
|
+
end
|
225
|
+
puts
|
226
|
+
end
|
227
|
+
end #def to_s
|
228
|
+
|
229
|
+
|
230
|
+
def +(other)
|
231
|
+
raise TypeError, "La matriz other no es dispersa" unless other.instance_of? MatrizDispersa
|
232
|
+
raise ArgumentError, "La longitud de las matrices no coincide." unless @filas == other.filas && @columnas == other.columnas
|
233
|
+
suma=MatrizDispersa.new(Array.new(@filas,0){Array.new(@columnas,0)})
|
234
|
+
suma.hash_no_ceros = (hash_no_ceros.merge(other.hash_no_ceros){|key,oldval,newval| oldval+newval}).clone
|
235
|
+
if comprobar(suma.hash_no_ceros)
|
236
|
+
return suma
|
237
|
+
else
|
238
|
+
m = Array.new(@filas,0){Array.new(@columnas,0)}
|
239
|
+
suma.hash_no_ceros.each {|key, value| m[(key[0]).to_i][(key[1]).to_i] = value }
|
240
|
+
sum = MatrizDensa.new(m)
|
241
|
+
return sum
|
242
|
+
end
|
243
|
+
|
244
|
+
|
245
|
+
end
|
246
|
+
|
247
|
+
def -(other)
|
248
|
+
raise TypeError, "La matriz other no es dispersa" unless other.instance_of? MatrizDispersa
|
249
|
+
raise ArgumentError, "La longitud de las matrices no coincide." unless @filas == other.filas && @columnas == other.columnas
|
250
|
+
resta=MatrizDispersa.new(Array.new(@filas,0){Array.new(@columnas,0)})
|
251
|
+
resta.hash_no_ceros = (self.hash_no_ceros.merge(other.hash_no_ceros){|key,oldval,newval| oldval-0-newval}).clone
|
252
|
+
if comprobar(resta.hash_no_ceros)
|
253
|
+
return resta
|
254
|
+
else
|
255
|
+
puts resta.hash_no_ceros
|
256
|
+
m = Array.new(@filas,0){Array.new(@columnas,0)}
|
257
|
+
resta.hash_no_ceros.each {|key, value| m[(key[0]).to_i][(key[1]).to_i] = value }
|
258
|
+
res = MatrizDensa.new(m)
|
259
|
+
return res
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
def ==(other)
|
264
|
+
hash_no_ceros == other.hash_no_ceros
|
265
|
+
end
|
266
|
+
|
267
|
+
|
268
|
+
end
|
269
|
+
|
270
|
+
# m1=Matriz.new([[2,0,1],[3,0,0],[5,1,1]])
|
271
|
+
# m2=Matriz.new([[1,0,1],[1,2,1],[1,1,0]])
|
272
|
+
|
273
|
+
|
data/lib/matrizHM/version.rb
CHANGED
data/lib/matrizHM.rb
CHANGED
data/lib/racional.rb
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
require "gcd.rb" #definicion del mcd
|
2
|
+
# Definicion de la clase Fraccion
|
3
|
+
class Fraccion
|
4
|
+
attr_reader :numerador, :denominador # Se definen set y get para acceder a las variables de la clase.
|
5
|
+
include Comparable # Se incluye el modulo de nombre "comparable" utilizado para el operador <=>.
|
6
|
+
|
7
|
+
def initialize(numerador, denominador) # Se define el constructor.
|
8
|
+
mcd = gcd(numerador,denominador)
|
9
|
+
@numerador , @denominador = numerador/mcd, denominador/mcd
|
10
|
+
end
|
11
|
+
|
12
|
+
def num() # Devuelve el numerador.
|
13
|
+
@numerador
|
14
|
+
end
|
15
|
+
|
16
|
+
def denom() # Devuelve el denominador.
|
17
|
+
@denominador
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
if @denominador == 1 #Si el denominador es 1, solo se imprimer el numerador
|
22
|
+
"#{@numerador}"
|
23
|
+
elsif @denominador == -1 #En el caso de que b=-1 y a>0 ó a=-1
|
24
|
+
if @numerador>0 || @numerador==-1
|
25
|
+
"#{-@numerador}"
|
26
|
+
else #Si b=-1 y a es menor que cero, imprime el valor de a
|
27
|
+
"#{@numerador}"
|
28
|
+
end
|
29
|
+
elsif (@numerador>0 && @denominador>0 && @denominador!=1) #Caso nomal, a y b son mayores que cero, imprime a/b
|
30
|
+
"#{@numerador}/#{@denominador}"
|
31
|
+
elsif (@numerador>0 && @denominador<0 && @denominador!=-1) # b es menor que cero, se le cambia el signo a todo para que se imprima: -a/b
|
32
|
+
"#{-@numerador}/#{-@denominador}"
|
33
|
+
elsif (@numerador<0 && @denominador<0 && @denominador!=-1) # a y b son menor que cero, se le cambia el signo a todo para que imprima a/b
|
34
|
+
"#{-@numerador}/#{-@denominador}"
|
35
|
+
elsif (@numerador<0 && @denominador>0 && @denominador!=1) # a es menor que cero, se imprime igual: -a/b
|
36
|
+
"#{@numerador}/#{@denominador}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_f() # Imprime el resultado de la Fraccioncioncion como un float.
|
41
|
+
@numerador.to_f/@denominador
|
42
|
+
end
|
43
|
+
|
44
|
+
def <=>(other) # Se define el operador <=> para el modulo comparable.
|
45
|
+
@numerador.to_f/@denominador <=> other.numerador.to_f/other.denominador
|
46
|
+
end
|
47
|
+
|
48
|
+
def abs() # Se calcula el valor absoluto de una Fraccioncioncion.
|
49
|
+
if (@numerador > 0 && @denominador > 0)
|
50
|
+
Fraccioncion.new(@numerador, @denominador).to_s
|
51
|
+
elsif (@numerador > 0 && @denominador < 0)
|
52
|
+
Fraccion.new(@numerador, -1 * @denominador).to_s
|
53
|
+
elsif (@numerador < 0 && @denominador > 0)
|
54
|
+
Fraccion.new(-1 * @numerador, @denominador).to_s
|
55
|
+
else (@numerador < 0 && @denominador < 0)
|
56
|
+
Fraccion.new(-1 * @numerador,-1 * @denominador).to_s
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def reciprocal() # Calcula el reciproco de una Fraccioncion.
|
61
|
+
Fraccion.new(@denominador, @numerador)
|
62
|
+
end
|
63
|
+
|
64
|
+
def +(other) # Calcula la suma de dos Fraccionciones.
|
65
|
+
if other.class == Fraccion
|
66
|
+
Fraccion.new(@numerador*other.denominador + other.numerador*@denominador , @denominador*other.denominador)
|
67
|
+
elsif other.class == Fixnum
|
68
|
+
Fraccion.new(@numerador + other*@denominador , @denominador)
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
def -(*other) # Calcula la resta de dos Fraccionciones.
|
74
|
+
if (other[0].class == Fraccion)
|
75
|
+
Fraccion.new(@numerador*other[0].denominador - other[0].numerador*@denominador , @denominador*other[0].denominador)
|
76
|
+
else
|
77
|
+
if (@numerador > 0 && @denominador > 0)
|
78
|
+
Fraccion.new(-1 * @numerador, @denominador)
|
79
|
+
elsif (@numerador > 0 && @denominador < 0)
|
80
|
+
Fraccion.new(@numerador, -1 * @denominador)
|
81
|
+
elsif (@numerador < 0 && @denominador > 0)
|
82
|
+
Fraccion.new(-1 * @numerador, @denominador)
|
83
|
+
else (@numerador < 0 && @denominador < 0)
|
84
|
+
Fraccion.new(@numerador, -1 * @denominador)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def *(other) # Calcula la multiplicacion de dos Fraccionciones.
|
90
|
+
Fraccion.new(@numerador * other.numerador, @denominador * other.denominador)
|
91
|
+
end
|
92
|
+
|
93
|
+
def /(other) # Calcula la division de dos Fraccionciones.
|
94
|
+
Fraccion.new(@numerador * other.denominador, @denominador * other.numerador)
|
95
|
+
end
|
96
|
+
|
97
|
+
def %(other) # Calcula el resto al dividir dos Fraccionciones (modulo)
|
98
|
+
result = self./(other)
|
99
|
+
result = (result.numerador%result.denominador).to_i
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
data/matrizHM.gemspec
CHANGED
@@ -20,5 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
|
-
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "guard"
|
25
|
+
spec.add_development_dependency "guard-rspec"
|
26
|
+
spec.add_development_dependency "guard-bundler"
|
24
27
|
end
|
File without changes
|
data/spec/matriz_spec.rb
ADDED
@@ -0,0 +1,163 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require "./lib/matriz.rb"
|
4
|
+
|
5
|
+
describe Matriz do
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
cuarto = Fraccion.new(1,4)
|
9
|
+
quinto = Fraccion.new(1,5)
|
10
|
+
|
11
|
+
medio = Fraccion.new(1, 2)
|
12
|
+
quinto2 = Fraccion.new(2, 5)
|
13
|
+
|
14
|
+
cero = Fraccion.new(0, 1)
|
15
|
+
siete = Fraccion.new(7,40)
|
16
|
+
nueve = Fraccion.new(9,100)
|
17
|
+
|
18
|
+
@MatrizA_frac = Matriz.new([[cuarto,cuarto],[quinto,quinto]])
|
19
|
+
@MatrizB_frac = Matriz.new([[cuarto,cuarto],[quinto,quinto]])
|
20
|
+
@Matriz_Resultado_frac = Matriz.new([[medio,medio],[quinto2,quinto2]])
|
21
|
+
@Matriz_Resultado_frac_rest = Matriz.new([[cero,cero],[cero,cero]])
|
22
|
+
@Matriz_Resultado_frac_mul = Matriz.new([[siete,nueve],[siete,nueve]])
|
23
|
+
|
24
|
+
@MatrizA = Matriz.new([[1,1],[2,2]])
|
25
|
+
@Matrizop = Matriz.new([[-1,-1],[-2,-2]])
|
26
|
+
@MatrizB = Matriz.new([[1,1],[2,2]])
|
27
|
+
@MatrizC = Matriz.new([[1,1],[2,2]])
|
28
|
+
@Matriz_Resultado = Matriz.new([[2,2],[4,4]])
|
29
|
+
@MatrizAmul = Matriz.new([[2,0,1],[3,0,0],[5,1,1]])
|
30
|
+
@MatrizBmul = Matriz.new([[1,0,1],[1,2,1],[1,1,0]])
|
31
|
+
@Matriz_Resultado_mul = Matriz.new([[3,1,2],[3,0,3],[7,3,6]])
|
32
|
+
|
33
|
+
|
34
|
+
#matrices dispersas
|
35
|
+
@MaDis = MatrizDispersa.new([[0,0,0],[1,2,3],[0,0,0]])
|
36
|
+
@MaDis2 = MatrizDispersa.new([[0,0,0],[1,2,3],[0,0,0]])
|
37
|
+
@MaDis3 = MatrizDispersa.new([[0,0,0],[2,4,6],[0,0,0]])
|
38
|
+
@MaDis4 = MatrizDispersa.new([[0,0,0],[1,2,3],[0,0,0]])
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "Debe existir " do
|
42
|
+
it "filas " do
|
43
|
+
(defined?(@MatrizA.filas)).should be_true
|
44
|
+
end
|
45
|
+
|
46
|
+
it "columnas " do
|
47
|
+
(defined?(@MatrizA.columnas)).should be_true
|
48
|
+
end
|
49
|
+
|
50
|
+
it "Tamano de filas " do
|
51
|
+
@MatrizA.filas.should eq 2
|
52
|
+
end
|
53
|
+
|
54
|
+
it "Tamano de columnas " do
|
55
|
+
@MatrizA.columnas.should eq 2
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "Se puede " do
|
60
|
+
it "accerdera un subindice" do
|
61
|
+
@MatrizA.matriz[0][0].should eq 1
|
62
|
+
end
|
63
|
+
|
64
|
+
it "modificar un subindice" do
|
65
|
+
@MatrizC.matriz[0][0] = 2
|
66
|
+
@MatrizA.matriz[0][0].should eq 1
|
67
|
+
end
|
68
|
+
|
69
|
+
it "sumar dos matrices de enteros" do
|
70
|
+
( @MatrizA + @MatrizB ).should eq @Matriz_Resultado
|
71
|
+
end
|
72
|
+
|
73
|
+
it "restar dos matrices de enteros" do
|
74
|
+
(@MatrizA - @MatrizB ).matriz.should eq [[0,0],[0,0]]
|
75
|
+
end
|
76
|
+
|
77
|
+
it "multiplicar por un numero" do
|
78
|
+
(@MatrizA.Producto_escalar (2) ).should eq @Matriz_Resultado
|
79
|
+
end
|
80
|
+
|
81
|
+
it "multiplicar 2 matrices de enteros" do
|
82
|
+
(@MatrizAmul * @MatrizBmul ).should eq @Matriz_Resultado_mul
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
describe "de debe " do
|
88
|
+
it "poder compara 2 matrices" do
|
89
|
+
(@MatrizA == @MatrizB).should eq true
|
90
|
+
end
|
91
|
+
|
92
|
+
it "poder hacer el opuesto" do
|
93
|
+
(-@MatrizA).should eq @Matrizop
|
94
|
+
end
|
95
|
+
|
96
|
+
it "poder sumar dos matrices de racionales" do
|
97
|
+
(@MatrizA_frac + @MatrizB_frac).should eq @Matriz_Resultado_frac
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
it "poder restar dos matrices de racionales" do
|
102
|
+
(@MatrizA_frac - @MatrizB_frac).should eq @Matriz_Resultado_frac_rest
|
103
|
+
end
|
104
|
+
|
105
|
+
it "poder multiplicar dos matrices de racionales" do
|
106
|
+
(@MatrizA_frac * @MatrizB_frac).to_s.should eq (@Matriz_Resultado_frac_mul.to_s)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "se poder comprobar si la " do
|
111
|
+
it " matriz es dispersa" do
|
112
|
+
MatrizDispersa.new([[0,0,0],[1,2,3],[0,0,0]])
|
113
|
+
end
|
114
|
+
it "matriz densa" do
|
115
|
+
MatrizDensa.new([[0,0,0],[1,2,3],[1,1,0]])
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "Se puede " do
|
121
|
+
it "sumar 2 matrices dispersas" do
|
122
|
+
|
123
|
+
(@MaDis + @MaDis2).should eq @MaDis3
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
it "restar 2 matrices dispersas"do
|
128
|
+
(@MaDis3 - @MaDis2).should eq @MaDis4
|
129
|
+
end
|
130
|
+
|
131
|
+
it "sumar 2 matrices dispersas y den resultado una densa" do
|
132
|
+
@MaDis11 = MatrizDispersa.new([[0,0,0],[1,2,3],[0,0,0]])
|
133
|
+
@MaDis22 = MatrizDispersa.new([[1,2,3],[0,0,0],[0,0,0]])
|
134
|
+
@MaDenResul = MatrizDensa.new([[1,2,3],[1,2,3],[0,0,0]])
|
135
|
+
|
136
|
+
(@MaDis11 + @MaDis22).should eq @MaDenResul
|
137
|
+
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe "Se puede sumar una matriz densa" do
|
142
|
+
it " con una dispersa y den resultado una densa" do
|
143
|
+
@MaDispersa1 = MatrizDispersa.new([[0,0,0],[1,2,3],[0,0,0]])
|
144
|
+
@MaDensa1 = MatrizDensa.new([[1,2,3],[1,2,3],[0,0,0]])
|
145
|
+
@MaDensaResul1 = MatrizDensa.new([[1,2,3],[2,4,6],[0,0,0]])
|
146
|
+
|
147
|
+
(@MaDensa1 + @MaDispersa1).should eq @MaDensaResul1
|
148
|
+
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
it "Se puede restar una matriz dipersa con una dispersa y dar una densa " do
|
154
|
+
@MaDis11 = MatrizDispersa.new([[0,0,0],[1,2,3],[0,0,0]])
|
155
|
+
@MaDis22 = MatrizDispersa.new([[1,2,3],[0,0,0],[0,0,0]])
|
156
|
+
@MaDenResul = MatrizDensa.new([[-1,-2,-3],[1,2,3],[0,0,0]])
|
157
|
+
#(@MaDis11 - @MaDis22).should eq @MaDenResul
|
158
|
+
end
|
159
|
+
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: matrizHM
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-11-
|
12
|
+
date: 2013-11-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &79770600 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.3'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *79770600
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &79770380 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,51 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *79770380
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &79770110 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *79770110
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: guard
|
49
|
+
requirement: &79769850 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *79769850
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: guard-rspec
|
60
|
+
requirement: &79769620 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *79769620
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-bundler
|
71
|
+
requirement: &79769390 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *79769390
|
36
80
|
description: Construcción de una gema ruby para la creación de matrices dispersas
|
37
81
|
y densas,que heredan de la clase base Matriz hecha en prácticas anteriores
|
38
82
|
email:
|
@@ -43,15 +87,18 @@ extra_rdoc_files: []
|
|
43
87
|
files:
|
44
88
|
- .gitignore
|
45
89
|
- Gemfile
|
90
|
+
- Guardfile
|
46
91
|
- LICENSE.txt
|
47
92
|
- README.md
|
48
93
|
- Rakefile
|
94
|
+
- lib/gcd.rb
|
95
|
+
- lib/matriz.rb
|
49
96
|
- lib/matrizHM.rb
|
50
|
-
- lib/matrizHM.rb~
|
51
97
|
- lib/matrizHM/version.rb
|
52
|
-
- lib/
|
98
|
+
- lib/racional.rb
|
53
99
|
- matrizHM.gemspec
|
54
|
-
-
|
100
|
+
- spec/matrizHM_spec.rb
|
101
|
+
- spec/matriz_spec.rb
|
55
102
|
homepage: https://github.com/alu0100545630/gemaHM.git
|
56
103
|
licenses:
|
57
104
|
- MIT
|
@@ -78,4 +125,6 @@ signing_key:
|
|
78
125
|
specification_version: 3
|
79
126
|
summary: Se trata de contruir otra estructura para las matrices dispersas y realizar
|
80
127
|
la operatoria necesaria para realizar los mismos algoritmos que las matrices densas
|
81
|
-
test_files:
|
128
|
+
test_files:
|
129
|
+
- spec/matrizHM_spec.rb
|
130
|
+
- spec/matriz_spec.rb
|
data/lib/matrizHM/version.rb~
DELETED
data/lib/matrizHM.rb~
DELETED
data/matrizHM.gemspec~
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'matrizHM/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = "matrizHM"
|
8
|
-
spec.version = MatrizHM::VERSION
|
9
|
-
spec.authors = ["Hamilton Steven Cubillos & Marcos Díaz García"]
|
10
|
-
spec.email = ["hamiltonetsii@gmail.com"]
|
11
|
-
spec.description = %q{Construcción de una gema ruby para la creación de matrices dispersas y densas,que heredan de la clase base Matriz hecha en prácticas anteriores}
|
12
|
-
spec.summary = %q{Se trata de contruir otra estructura para las matrices dispersas y realizar la operatoria necesaria para realizar los mismos algoritmos que las matrices densas}
|
13
|
-
spec.homepage = "https://github.com/alu0100545630/gemaHM.git"
|
14
|
-
spec.license = "MIT"
|
15
|
-
|
16
|
-
spec.files = `git ls-files`.split($/)
|
17
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = ["lib"]
|
20
|
-
|
21
|
-
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
-
spec.add_development_dependency "rake"
|
23
|
-
# s.add_development_dependency "rspec"
|
24
|
-
end
|