t50_matriz_dispersa_densa 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/Documentacion/Fraccion.html +816 -0
  2. data/Documentacion/Gemfile.html +109 -0
  3. data/Documentacion/LICENSE_txt.html +126 -0
  4. data/Documentacion/Matriz.html +405 -0
  5. data/Documentacion/Matriz_Dispersa.html +159 -0
  6. data/Documentacion/Matriz_densa.html +479 -0
  7. data/Documentacion/Object.html +212 -0
  8. data/Documentacion/Rakefile.html +114 -0
  9. data/Documentacion/SparseMatrix.html +775 -0
  10. data/Documentacion/SparseVector.html +307 -0
  11. data/Documentacion/T50MatrizDispersaDensa.html +167 -0
  12. data/Documentacion/TestMatrix.html +467 -0
  13. data/Documentacion/bin/t50_matriz_dispersa_densa.html +54 -0
  14. data/Documentacion/created.rid +13 -0
  15. data/Documentacion/images/brick.png +0 -0
  16. data/Documentacion/images/brick_link.png +0 -0
  17. data/Documentacion/images/bug.png +0 -0
  18. data/Documentacion/images/bullet_black.png +0 -0
  19. data/Documentacion/images/bullet_toggle_minus.png +0 -0
  20. data/Documentacion/images/bullet_toggle_plus.png +0 -0
  21. data/Documentacion/images/date.png +0 -0
  22. data/Documentacion/images/find.png +0 -0
  23. data/Documentacion/images/loadingAnimation.gif +0 -0
  24. data/Documentacion/images/macFFBgHack.png +0 -0
  25. data/Documentacion/images/package.png +0 -0
  26. data/Documentacion/images/page_green.png +0 -0
  27. data/Documentacion/images/page_white_text.png +0 -0
  28. data/Documentacion/images/page_white_width.png +0 -0
  29. data/Documentacion/images/plugin.png +0 -0
  30. data/Documentacion/images/ruby.png +0 -0
  31. data/Documentacion/images/tag_green.png +0 -0
  32. data/Documentacion/images/wrench.png +0 -0
  33. data/Documentacion/images/wrench_orange.png +0 -0
  34. data/Documentacion/images/zoom.png +0 -0
  35. data/Documentacion/index.html +172 -0
  36. data/Documentacion/js/darkfish.js +118 -0
  37. data/Documentacion/js/jquery.js +32 -0
  38. data/Documentacion/js/quicksearch.js +114 -0
  39. data/Documentacion/js/thickbox-compressed.js +10 -0
  40. data/Documentacion/lib/Fraccion_rb.html +54 -0
  41. data/Documentacion/lib/gcd_rb.html +52 -0
  42. data/Documentacion/lib/matriz_densa_rb.html +54 -0
  43. data/Documentacion/lib/matriz_dispersa_rb.html +58 -0
  44. data/Documentacion/lib/matriz_rb.html +58 -0
  45. data/Documentacion/lib/t50_matriz_dispersa_densa/version_rb.html +52 -0
  46. data/Documentacion/lib/t50_matriz_dispersa_densa_rb.html +72 -0
  47. data/Documentacion/rdoc.css +763 -0
  48. data/Documentacion/test/tc_matrix_rb.html +62 -0
  49. data/Gemfile +4 -0
  50. data/LICENSE.txt +22 -0
  51. data/README.md +67 -0
  52. data/Rakefile +10 -0
  53. data/bin/t50_matriz_dispersa_densa +3 -0
  54. data/lib/Fraccion.rb +128 -0
  55. data/lib/gcd.rb +7 -0
  56. data/lib/matriz.rb +71 -0
  57. data/lib/matriz.rb~ +136 -0
  58. data/lib/matriz_densa.rb +128 -0
  59. data/lib/matriz_densa.rb~ +148 -0
  60. data/lib/matriz_dispersa.rb +276 -0
  61. data/lib/matriz_dispersa.rb~ +275 -0
  62. data/lib/t50_matriz_dispersa_densa.rb +27 -0
  63. data/lib/t50_matriz_dispersa_densa.rb~ +7 -0
  64. data/lib/t50_matriz_dispersa_densa/version.rb +3 -0
  65. data/t50_matriz_dispersa_densa.gemspec +19 -0
  66. data/test/tc_matrix.rb +57 -0
  67. data/test/tc_matrix.rb~ +57 -0
  68. metadata +115 -0
@@ -0,0 +1,275 @@
1
+ require 'Fraccion.rb'
2
+ require 'matriz.rb'
3
+ require "matrix"
4
+
5
+ class SparseVector
6
+ attr_reader :vector
7
+
8
+ def initialize(h = {})
9
+ @vector = Hash.new(0)
10
+ @vector = @vector.merge!(h)
11
+ end
12
+
13
+ def [](i)
14
+ @vector[i]
15
+ end
16
+
17
+ def to_s
18
+ @vector.to_s
19
+ end
20
+ end
21
+
22
+ #Clase que se encarga de crear el hash
23
+
24
+ class SparseMatrix < Matriz
25
+
26
+ attr_reader :matrix
27
+
28
+ # Inicializador propio de la clase
29
+ def initialize(h = {})
30
+ @matrix = Hash.new({})
31
+ for k in h.keys do
32
+ @matrix[k] = if h[k].is_a? SparseVector
33
+ h[k]
34
+ else
35
+ @matrix[k] = SparseVector.new(h[k])
36
+ end
37
+ end
38
+ end
39
+
40
+ # Obtener un valor de la matriz dada una posicion
41
+ def [](i)
42
+ @matrix[i]
43
+ end
44
+
45
+ def col(j)
46
+ c = {}
47
+ for r in @matrix.keys do
48
+ c[r] = @matrix[r].vector[j] if @matrix[r].vector.keys.include? j
49
+ end
50
+ SparseVector.new c
51
+ end
52
+
53
+ def comprobar
54
+ contar = 0
55
+ contartotal = 0
56
+ result = 0
57
+ for r in @matrix.keys do
58
+ for j in @matrix[r].vector.keys do
59
+ contartotal = contartotal + 1
60
+ if @matrix[r].vector[j] == 0
61
+ contar = contar + 1
62
+ end
63
+ end
64
+ end
65
+ result = (contar * 100) / contartotal
66
+ if result < 60
67
+ "La matriz no es dispersa"
68
+ end
69
+ end
70
+
71
+ def mostrar
72
+ for r in @matrix.keys do
73
+ for j in @matrix[r].vector.keys do
74
+ print "#{@matrix[r].vector[j]} "
75
+ end
76
+ puts
77
+ end
78
+ end
79
+
80
+ # Operacion de la suma en la matriz dispersa. Realiza la operacion entre dos matrices dispersa y una dispersa con una densa
81
+
82
+ def +(other)
83
+ case other
84
+ when Matriz_Dispersa
85
+ raise ArgumentError, "Las matrices no son iguales en longitud." unless @matrix.size == other.matrix.size && @matrix[1].vector.size == other.matrix[1].vector.size
86
+ resul = Array.new
87
+ @matrix.keys.times do |r|
88
+ r = r + 1
89
+ #for r in @matrix.keys do
90
+ resul_f = Array.new
91
+ 1.upto(@matrix[r].vector.keys) do |j|
92
+ #for j in @matrix[r].vector.keys do
93
+ #print " #{@matrix[r].vector[j] + other.matrix[r].vector[j]} "
94
+ resul_f << @matrix[r].vector[j] + other.matrix[r].vector[j]
95
+ end
96
+ #puts
97
+ resul << resul_f
98
+ end
99
+ return resul
100
+ when Matriz_densa
101
+ raise ArgumentError, "Las matrices no son iguales en longitud." unless @matrix.size == other.f && @matrix[1].vector.size == other.c
102
+ resul = Array.new
103
+ 1.upto(other.f) do |r|
104
+ #for r in 1..other.f do
105
+ resul_f = Array.new
106
+ 1.upto(other.c) do |j|
107
+ #for j in 1..other.c do
108
+ #print " #{@matrix[r].vector[j] + other.m[r - 1][j - 1]}"
109
+ resul_f << @matrix[r].vector[j] + other.m[r - 1][j - 1]
110
+ end
111
+ #puts
112
+ resul << resul_f
113
+ end
114
+ return resul
115
+ else
116
+ raise TypeError.new("No se puede pasar #{other.inspect} a Matriz")
117
+ end
118
+ end
119
+
120
+ # Operacion de la resta en la matriz dispersa. Realiza la operacion entre dos matrices dispersa y una dispersa con una densa
121
+ def -(other)
122
+ case other
123
+ when Matriz_Dispersa
124
+ raise ArgumentError, "Las matrices no son iguales en longitud." unless @matrix.size == other.matrix.size && @matrix[1].vector.size == other.matrix[1].vector.size
125
+ resul = Array.new
126
+ #for r in @matrix.keys do
127
+ 1.upto(@matrix.keys) do |r|
128
+ resul_f = Array.new
129
+ #for j in @matrix[r].vector.keys do
130
+ 1.upto(@matrix[r].vector.keys) do |j|
131
+ #print " #{@matrix[r].vector[j] - other.matrix[r].vector[j]} "
132
+ resul_f << @matrix[r].vector[j] - other.matrix[r].vector[j]
133
+ end
134
+ #puts
135
+ resul << resul_f
136
+ end
137
+ return resul
138
+ when Matriz_densa
139
+ raise ArgumentError, "Las matrices no son iguales en longitud." unless @matrix.size == other.f && @matrix[1].vector.size == other.c
140
+ resul = Array.new
141
+ #for r in 1..other.f do
142
+ 1.upto(other.f) do |r|
143
+ resul_f = Array.new
144
+ #for j in 1..other.c do
145
+ 1.upto(other.c) do |j|
146
+ #print " #{@matrix[r].vector[j] - other.m[r - 1][j - 1]}"
147
+ resul_f << @matrix[r].vector[j] - other.m[r - 1][j - 1]
148
+ end
149
+ #puts
150
+ resul << resul_f
151
+ end
152
+ return resul
153
+ else
154
+ raise TypeError.new("No se puede pasar #{other.inspect} a Matriz")
155
+ end
156
+
157
+ end
158
+
159
+ # Operacion de la multiplicacion en la matriz dispersa. Realiza la operacion entre dos matrices dispersa y una dispersa con una densa
160
+ def *(other)
161
+
162
+ case other
163
+ when Matriz_Dispersa
164
+ raise ArgumentError, "Las columnas de una matriz no coinciden con las filas de la otra." unless @matrix[1].vector.size == other.matrix.size
165
+ sumatotal = 0
166
+ mul = Array.new
167
+
168
+ #for i in @matrix.keys do
169
+ 1.upto(@matrix.keys) do |i|
170
+ mul_f = Array.new
171
+ #for j in @matrix[i].vector.keys do
172
+ 1.upto(@matrix[i].vector.keys) do |j|
173
+ #for k in @matrix[i].vector.keys do
174
+ 1.upto(@matrix[i].vector.keys) do |k|
175
+ suma = @matrix[i].vector[k] * other.matrix[k].vector[j]
176
+ sumatotal = sumatotal + suma;
177
+ end
178
+ mul_f << sumatotal
179
+ sumatotal = 0
180
+ end
181
+ mul << mul_f
182
+ end
183
+ =begin
184
+ for r in @matrix.keys do
185
+ for j in @matrix[r].vector.keys do
186
+ print " #{mul[r][j]} "
187
+ end
188
+ puts
189
+ end
190
+ =end
191
+ return mul
192
+ when Matriz_densa
193
+ raise ArgumentError, "Las columnas de una matriz no coinciden con las filas de la otra." unless @matrix[1].vector.size == other.f
194
+ sumatotal = 0
195
+ mul = Array.new
196
+
197
+ #for i in @matrix.keys do
198
+ 1.upto(@matrix.size) do |i|
199
+ mul_f = Array.new
200
+ #for j in @matrix[i].vector.keys do
201
+ 1.upto(@matrix[i].vector.size) do |j|
202
+ #for k in @matrix[i].vector.keys do
203
+ 1.upto(@matrix[i].vector.size) do |k|
204
+ suma = @matrix[i].vector[k] * other.m[k - 1][j - 1]
205
+ sumatotal = sumatotal + suma;
206
+ end
207
+ mul_f << sumatotal
208
+ sumatotal = 0
209
+ end
210
+ mul << mul_f
211
+ end
212
+ =begin
213
+ for r in @matrix.keys do
214
+ for j in @matrix[r].vector.keys do
215
+ print " #{mul[r][j]} "
216
+ end
217
+ puts
218
+ end
219
+ =end
220
+ return mul
221
+ else
222
+ raise TypeError.new("No se puede pasar #{other.inspect} a Matriz")
223
+ end
224
+ end
225
+
226
+ def max
227
+
228
+ maximo = @matrix[1].vector[1]
229
+
230
+ #for i in @matrix.keys do
231
+ @matrix.size.times do |i|
232
+ i = i + 1
233
+ #for j in @matrix[i].vector.keys do
234
+ #@matrix[i].vector.keys do |j|
235
+ 1.upto(@matrix[i].vector.size) do |j|
236
+ if @matrix[i].vector[j] > maximo
237
+ maximo = @matrix[i].vector[j]
238
+ end
239
+ end
240
+ end
241
+ return maximo
242
+ end
243
+
244
+ def [](i,j)
245
+
246
+ return @matrix[i].vector[j]
247
+
248
+ end
249
+
250
+ def min
251
+
252
+ minimo = @matrix[1].vector[1]
253
+
254
+ #for i in @matrix.keys do
255
+ 1.upto(@matrix.size) do |i|
256
+ #for j in @matrix[i].vector.keys do
257
+ @matrix[i].vector.size.times do |j|
258
+ j = j + 1
259
+ if @matrix[i].vector[j] < minimo
260
+ minimo = @matrix[i].vector[j]
261
+ end
262
+ end
263
+ end
264
+ return minimo
265
+
266
+ end
267
+
268
+ def coerce(other)
269
+ [other,self]
270
+ end
271
+ end
272
+
273
+ class Matriz_Dispersa < SparseMatrix
274
+
275
+ end
@@ -0,0 +1,27 @@
1
+ =begin rdoc
2
+ :main: t50_matriz_dispersa_densa.rb
3
+
4
+
5
+ = T50MatrizDispersaDensa
6
+
7
+ Autor:: Javier Clemente Rodriguez Gomez & Juan Lucas Gonzalez Hidalgo
8
+ Asignatura:: Lenguajes y paradigmas de la programacion.
9
+ Universidad de la Laguna
10
+
11
+ == Diseño
12
+
13
+ Se ha creado una clase matriz que solo tendra el inicializador y algunos métodos para operaciones con matrices básticas.
14
+ Se ha creado una clase Fraccion para poder representar estos en una matriz.
15
+ Se creo la clase Matriz_Dispersa y Matriz_densa que heredan de matriz y sirven para poder realizar operaciones con ese tipo concreto de matrices.
16
+
17
+ =end
18
+
19
+ require "t50_matriz_dispersa_densa/version"
20
+ require "matriz.rb"
21
+ require "matriz_dispersa.rb"
22
+ require "matriz_densa.rb"
23
+
24
+
25
+ module T50MatrizDispersaDensa
26
+
27
+ end
@@ -0,0 +1,7 @@
1
+ require "t50_matriz_dispersa_densa/version"
2
+ require "matriz.rb"
3
+ require "matriz_dispersa.rb"
4
+ require "matriz_densa.rb"
5
+
6
+ module T50MatrizDispersaDensa
7
+ end
@@ -0,0 +1,3 @@
1
+ module T50MatrizDispersaDensa
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 't50_matriz_dispersa_densa/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "t50_matriz_dispersa_densa"
8
+ gem.version = T50MatrizDispersaDensa::VERSION
9
+ gem.authors = ["Javier C"]
10
+ gem.email = ["alu0100505023@ull.edu.es"]
11
+ gem.description = %q{"Operaciones con matrices"}
12
+ gem.summary = %q{"Operaciones con matrices densas y dispersas"}
13
+ gem.homepage = ""
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+ end
@@ -0,0 +1,57 @@
1
+ require "Fraccion.rb"
2
+ require 'gcd.rb'
3
+ require 'matriz_dispersa.rb'
4
+ require 'matriz_densa.rb'
5
+ require "test/unit"
6
+
7
+ class TestMatrix < Test::Unit::TestCase
8
+
9
+ def setup
10
+ #Se especifican los hash a usar en las pruebas
11
+ @h = Matriz_Dispersa.new 1 => {1 => 33, 2 => 44}, 2 => {1 => 66, 2 => 77}
12
+ @h2 = Matriz_Dispersa.new 1 => {1 => 1, 2 => 2}, 2 => {1 => 1, 2 => 2}
13
+
14
+ #Se especifican los hash a usar en las pruebas con fracciones
15
+ @h3 = Matriz_Dispersa.new 1 => {1 => Fraccion.new(33,2), 2 => Fraccion.new(44,3)}, 2 => {1 => Fraccion.new(66,5), 2 => Fraccion.new(77,12)}
16
+ @h4 = Matriz_Dispersa.new 1 => {1 => 1, 2 => 2}, 2 => {1 => 1, 2 => 2}
17
+ @h5 = Matriz_Dispersa.new 1 => {1 => Fraccion.new(1,1), 2 => Fraccion.new(2,1)}, 2 => {1 => Fraccion.new(1,1), 2 => Fraccion.new(2,1)}
18
+ @h6 = Matriz_densa.new(2,2,[[4,3],[5,8]])
19
+
20
+ @h9 = Matriz_densa.new(2,2,[[4,5],[2,3]])
21
+ @h10 = Matriz_Dispersa.new 1 => {1 => 0, 2 => 0}, 2 => {1 => 0, 2 => Fraccion.new(1,2)}
22
+ @h11 = Matriz_densa.new(2,2,[[4,5],[2,Fraccion.new(7,2)]])
23
+ @h12 = Matriz_densa.new(2,2,[[-4,-5],[-2,Fraccion.new(-5,2)]])
24
+ @h13 = Matriz_densa.new(2,2,[[0,0],[Fraccion.new(1,1),Fraccion.new(3,2)]])
25
+ end
26
+
27
+ def test_suma_densa_dispersa
28
+ assert_equal(@h11.m, @h9+@h10, "Resultado Incorrecto" )
29
+ end
30
+
31
+ def test_resta_densa_dispersa
32
+ assert_equal(@h12.m, @h9-@h10, "Resultado Incorrecto" )
33
+ end
34
+
35
+ def test_multi_densa_dispersa
36
+ assert_equal(@h13.m, @h9*@h10, "Resultado Incorrecto" )
37
+ end
38
+
39
+ def test_max_dispersa
40
+ assert_equal(Fraccion.new(77,12), @h3.max, "Resultado Incorrecto" )
41
+ end
42
+
43
+ def test_min_dispersa #mirar
44
+ assert_equal(Fraccion.new(66,5), @h3.min, "Resultado Incorrecto" )
45
+ end
46
+
47
+ def test_max_densa
48
+ assert_equal(8, @h6.max, "Resultado Incorrecto" )
49
+ end
50
+
51
+ def test_min_densa
52
+ assert_equal(3, @h6.min, "Resultado Incorrecto" )
53
+ end
54
+
55
+ end
56
+
57
+
@@ -0,0 +1,57 @@
1
+ require "../lib/Fraccion.rb"
2
+ require 'lib/gcd.rb'
3
+ require 'lib/matriz_dispersa.rb'
4
+ require 'lib/matriz_densa.rb'
5
+ require "test/unit"
6
+
7
+ class TestMatrix < Test::Unit::TestCase
8
+
9
+ def setup
10
+ #Se especifican los hash a usar en las pruebas
11
+ @h = Matriz_Dispersa.new 1 => {1 => 33, 2 => 44}, 2 => {1 => 66, 2 => 77}
12
+ @h2 = Matriz_Dispersa.new 1 => {1 => 1, 2 => 2}, 2 => {1 => 1, 2 => 2}
13
+
14
+ #Se especifican los hash a usar en las pruebas con fracciones
15
+ @h3 = Matriz_Dispersa.new 1 => {1 => Fraccion.new(33,2), 2 => Fraccion.new(44,3)}, 2 => {1 => Fraccion.new(66,5), 2 => Fraccion.new(77,12)}
16
+ @h4 = Matriz_Dispersa.new 1 => {1 => 1, 2 => 2}, 2 => {1 => 1, 2 => 2}
17
+ @h5 = Matriz_Dispersa.new 1 => {1 => Fraccion.new(1,1), 2 => Fraccion.new(2,1)}, 2 => {1 => Fraccion.new(1,1), 2 => Fraccion.new(2,1)}
18
+ @h6 = Matriz_densa.new(2,2,[[4,3],[5,8]])
19
+
20
+ @h9 = Matriz_densa.new(2,2,[[4,5],[2,3]])
21
+ @h10 = Matriz_Dispersa.new 1 => {1 => 0, 2 => 0}, 2 => {1 => 0, 2 => Fraccion.new(1,2)}
22
+ @h11 = Matriz_densa.new(2,2,[[4,5],[2,Fraccion.new(7,2)]])
23
+ @h12 = Matriz_densa.new(2,2,[[-4,-5],[-2,Fraccion.new(-5,2)]])
24
+ @h13 = Matriz_densa.new(2,2,[[0,0],[Fraccion.new(1,1),Fraccion.new(3,2)]])
25
+ end
26
+
27
+ def test_suma_densa_dispersa
28
+ assert_equal(@h11.m, @h9+@h10, "Resultado Incorrecto" )
29
+ end
30
+
31
+ def test_resta_densa_dispersa
32
+ assert_equal(@h12.m, @h9-@h10, "Resultado Incorrecto" )
33
+ end
34
+
35
+ def test_multi_densa_dispersa
36
+ assert_equal(@h13.m, @h9*@h10, "Resultado Incorrecto" )
37
+ end
38
+
39
+ def test_max_dispersa
40
+ assert_equal(Fraccion.new(77,12), @h3.max, "Resultado Incorrecto" )
41
+ end
42
+
43
+ def test_min_dispersa #mirar
44
+ assert_equal(Fraccion.new(66,5), @h3.min, "Resultado Incorrecto" )
45
+ end
46
+
47
+ def test_max_densa
48
+ assert_equal(8, @h6.max, "Resultado Incorrecto" )
49
+ end
50
+
51
+ def test_min_densa
52
+ assert_equal(3, @h6.min, "Resultado Incorrecto" )
53
+ end
54
+
55
+ end
56
+
57
+