modai_prct12 0.0.22
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +6 -0
- data/Gemfile +9 -0
- data/Guardfile +346 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +6 -0
- data/documentacion/classes/MatrizAbstracta.html +144 -0
- data/documentacion/classes/MatrizAbstracta.src/M000032.html +21 -0
- data/documentacion/classes/MatrizDSL.html +212 -0
- data/documentacion/classes/MatrizDSL.src/M000028.html +36 -0
- data/documentacion/classes/MatrizDSL.src/M000029.html +20 -0
- data/documentacion/classes/MatrizDSL.src/M000030.html +27 -0
- data/documentacion/classes/MatrizDSL.src/M000031.html +40 -0
- data/documentacion/classes/MatrizDensa.html +345 -0
- data/documentacion/classes/MatrizDensa.src/M000016.html +18 -0
- data/documentacion/classes/MatrizDensa.src/M000017.html +37 -0
- data/documentacion/classes/MatrizDensa.src/M000018.html +27 -0
- data/documentacion/classes/MatrizDensa.src/M000019.html +44 -0
- data/documentacion/classes/MatrizDensa.src/M000020.html +41 -0
- data/documentacion/classes/MatrizDensa.src/M000021.html +29 -0
- data/documentacion/classes/MatrizDensa.src/M000022.html +37 -0
- data/documentacion/classes/MatrizDensa.src/M000023.html +28 -0
- data/documentacion/classes/MatrizDensa.src/M000024.html +28 -0
- data/documentacion/classes/MatrizDensa.src/M000025.html +35 -0
- data/documentacion/classes/MatrizDensa.src/M000026.html +18 -0
- data/documentacion/classes/MatrizDensa.src/M000027.html +37 -0
- data/documentacion/classes/MatrizDispersa.html +314 -0
- data/documentacion/classes/MatrizDispersa.src/M000033.html +22 -0
- data/documentacion/classes/MatrizDispersa.src/M000034.html +49 -0
- data/documentacion/classes/MatrizDispersa.src/M000035.html +33 -0
- data/documentacion/classes/MatrizDispersa.src/M000036.html +64 -0
- data/documentacion/classes/MatrizDispersa.src/M000037.html +66 -0
- data/documentacion/classes/MatrizDispersa.src/M000038.html +53 -0
- data/documentacion/classes/MatrizDispersa.src/M000039.html +31 -0
- data/documentacion/classes/MatrizDispersa.src/M000040.html +31 -0
- data/documentacion/classes/MatrizDispersa.src/M000041.html +35 -0
- data/documentacion/classes/MatrizDispersa.src/M000042.html +18 -0
- data/documentacion/classes/ModaiPrct12.html +147 -0
- data/documentacion/classes/Racional.html +380 -0
- data/documentacion/classes/Racional.src/M000002.html +24 -0
- data/documentacion/classes/Racional.src/M000003.html +18 -0
- data/documentacion/classes/Racional.src/M000004.html +22 -0
- data/documentacion/classes/Racional.src/M000005.html +18 -0
- data/documentacion/classes/Racional.src/M000006.html +18 -0
- data/documentacion/classes/Racional.src/M000007.html +18 -0
- data/documentacion/classes/Racional.src/M000008.html +18 -0
- data/documentacion/classes/Racional.src/M000009.html +23 -0
- data/documentacion/classes/Racional.src/M000010.html +23 -0
- data/documentacion/classes/Racional.src/M000011.html +23 -0
- data/documentacion/classes/Racional.src/M000012.html +23 -0
- data/documentacion/classes/Racional.src/M000013.html +23 -0
- data/documentacion/classes/Racional.src/M000014.html +19 -0
- data/documentacion/classes/Racional.src/M000015.html +18 -0
- data/documentacion/created.rid +1 -0
- data/documentacion/files/lib/modai_prct12/gcd_rb.html +132 -0
- data/documentacion/files/lib/modai_prct12/gcd_rb.src/M000001.html +22 -0
- data/documentacion/files/lib/modai_prct12/matrizAbstracta_rb.html +108 -0
- data/documentacion/files/lib/modai_prct12/matrizDSL_rb.html +105 -0
- data/documentacion/files/lib/modai_prct12/matrizDensa_rb.html +105 -0
- data/documentacion/files/lib/modai_prct12/matrizDispersa_rb.html +106 -0
- data/documentacion/files/lib/modai_prct12/racional_rb.html +114 -0
- data/documentacion/files/lib/modai_prct12/version_rb.html +101 -0
- data/documentacion/files/lib/modai_prct12_rb.html +112 -0
- data/documentacion/files/spec/modai_prct12_spec_rb.html +116 -0
- data/documentacion/files/spec/spec_helper_rb.html +114 -0
- data/documentacion/fr_class_index.html +32 -0
- data/documentacion/fr_file_index.html +36 -0
- data/documentacion/fr_method_index.html +68 -0
- data/documentacion/index.html +24 -0
- data/documentacion/rdoc-style.css +208 -0
- data/lib/modai_prct12.rb +26 -0
- data/lib/modai_prct12/gcd.rb +9 -0
- data/lib/modai_prct12/matrizAbstracta.rb +30 -0
- data/lib/modai_prct12/matrizDSL.rb +120 -0
- data/lib/modai_prct12/matrizDensa.rb +232 -0
- data/lib/modai_prct12/matrizDispersa.rb +280 -0
- data/lib/modai_prct12/racional.rb +121 -0
- data/lib/modai_prct12/version.rb +3 -0
- data/modai_prct12.gemspec +23 -0
- data/spec/modai_prct12_spec.rb +251 -0
- data/spec/spec_helper.rb +17 -0
- metadata +157 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
#= La clase de Matriz dispersa,
|
|
2
|
+
#== Una matriz se considerará dispersa si tiene más de un 60% de ceros.
|
|
3
|
+
class MatrizDispersa < MatrizAbstracta
|
|
4
|
+
|
|
5
|
+
#== Inicialización
|
|
6
|
+
def initialize(matriz)
|
|
7
|
+
|
|
8
|
+
@matriz = matriz
|
|
9
|
+
@filas = matriz.size
|
|
10
|
+
@columnas = matriz.size
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
attr_reader :matriz, :filas, :columnas
|
|
15
|
+
|
|
16
|
+
#== Convertimos a string
|
|
17
|
+
def to_s
|
|
18
|
+
|
|
19
|
+
fil = 0
|
|
20
|
+
print "["
|
|
21
|
+
while fil < filas
|
|
22
|
+
|
|
23
|
+
col = 0
|
|
24
|
+
while col < columnas
|
|
25
|
+
|
|
26
|
+
# Hay datos en la fila
|
|
27
|
+
if matriz[fil] != nil
|
|
28
|
+
|
|
29
|
+
if matriz[fil].has_key?(col)
|
|
30
|
+
print "#{matriz[fil][col].to_s}"
|
|
31
|
+
else
|
|
32
|
+
print "0"
|
|
33
|
+
end
|
|
34
|
+
else
|
|
35
|
+
print "0"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
if (col + 1) < columnas then print ", " end
|
|
39
|
+
col += 1
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
if (fil + 1) < filas then print ", " end
|
|
45
|
+
fil += 1
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
print "]"
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
#== Matriz en punto flotante
|
|
53
|
+
def to_f
|
|
54
|
+
|
|
55
|
+
flotante = Array.new(matriz.size - 1)
|
|
56
|
+
for i in 0...matriz.size
|
|
57
|
+
#=== Hay datos en la fila
|
|
58
|
+
if matriz[i] != nil
|
|
59
|
+
|
|
60
|
+
flotante[i] = Hash.new()
|
|
61
|
+
matriz[i].each do |key, value|
|
|
62
|
+
flotante[i][key] = matriz[i][key].to_f
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
MatrizDispersa.new(flotante)
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
#== Suma de matrices
|
|
73
|
+
def +(o)
|
|
74
|
+
|
|
75
|
+
suma = Array.new(matriz.size - 1)
|
|
76
|
+
|
|
77
|
+
i = 0
|
|
78
|
+
(matriz.size - 1).times do
|
|
79
|
+
|
|
80
|
+
#=== creamos el hash
|
|
81
|
+
if (matriz[i] != nil or o.matriz[i] != nil)
|
|
82
|
+
|
|
83
|
+
suma[i] = Hash.new()
|
|
84
|
+
|
|
85
|
+
case true
|
|
86
|
+
|
|
87
|
+
#=== Los dos tienen hash
|
|
88
|
+
when (matriz[i] != nil and o.matriz[i] != nil)
|
|
89
|
+
|
|
90
|
+
#=== cogemos matriz como base para la suma
|
|
91
|
+
suma[i] = matriz[i]
|
|
92
|
+
|
|
93
|
+
o.matriz[i].each do |key, value|
|
|
94
|
+
|
|
95
|
+
if suma[i].has_key?(key)
|
|
96
|
+
suma[i][key] = suma[i][key] + o.matriz[i][key]
|
|
97
|
+
else
|
|
98
|
+
suma[i][key] = o.matriz[i][key]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
#=== matriz tiene hash
|
|
104
|
+
when matriz[i] != nil
|
|
105
|
+
suma[i] = matriz[i]
|
|
106
|
+
|
|
107
|
+
#=== .. o hash
|
|
108
|
+
when o.matriz[i] != nil
|
|
109
|
+
suma[i] = o.matriz[i]
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
i += 1
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
MatrizDispersa.new(suma)
|
|
120
|
+
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
#== Resta de matrices
|
|
124
|
+
def -(o)
|
|
125
|
+
|
|
126
|
+
resta = Array.new(matriz.size - 1)
|
|
127
|
+
|
|
128
|
+
i = 0
|
|
129
|
+
(matriz.size - 1).times do
|
|
130
|
+
|
|
131
|
+
#=== creamos el hash
|
|
132
|
+
if (matriz[i] != nil or o.matriz[i] != nil)
|
|
133
|
+
|
|
134
|
+
resta[i] = Hash.new()
|
|
135
|
+
|
|
136
|
+
case true
|
|
137
|
+
|
|
138
|
+
#=== Los dos tienen hash
|
|
139
|
+
when (matriz[i] != nil and o.matriz[i] != nil)
|
|
140
|
+
|
|
141
|
+
#=== cogemos matriz como base para la resta
|
|
142
|
+
resta[i] = matriz[i]
|
|
143
|
+
|
|
144
|
+
o.matriz[i].each do |key, value|
|
|
145
|
+
|
|
146
|
+
if resta[i].has_key?(key)
|
|
147
|
+
resta[i][key] = resta[i][key] - o.matriz[i][key]
|
|
148
|
+
else
|
|
149
|
+
resta[i][key] = o.matriz[i][key] * -1
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
#=== matriz tiene hash
|
|
155
|
+
when matriz[i] != nil
|
|
156
|
+
resta[i] = matriz[i]
|
|
157
|
+
|
|
158
|
+
#===... o hash
|
|
159
|
+
when o.matriz[i] != nil
|
|
160
|
+
resta[i] = o.matriz[i]
|
|
161
|
+
resta[i].each do |key, value|
|
|
162
|
+
resta[i][key] = resta[i][key] * -1
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
i += 1
|
|
170
|
+
|
|
171
|
+
end
|
|
172
|
+
MatrizDispersa.new(resta)
|
|
173
|
+
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
#== Producto de matrices
|
|
178
|
+
def *(o)
|
|
179
|
+
|
|
180
|
+
prod = Array.new(matriz.size - 1)
|
|
181
|
+
|
|
182
|
+
i = 0
|
|
183
|
+
(0...(matriz.size)).inject {
|
|
184
|
+
|
|
185
|
+
#=== creamos el hash si hay filas en el multiplicador
|
|
186
|
+
if (o.matriz[i] != nil)
|
|
187
|
+
|
|
188
|
+
prod[i] = Hash.new()
|
|
189
|
+
#=== cogemos o como base para el producto
|
|
190
|
+
prod[i] = o.matriz[i]
|
|
191
|
+
|
|
192
|
+
for j in 0...matriz.size
|
|
193
|
+
|
|
194
|
+
if o.matriz[i].has_key?(j)
|
|
195
|
+
|
|
196
|
+
if matriz[j].has_key?(i)
|
|
197
|
+
prod[i][j] = prod[i][j] + (prod[i][j] * matriz[j][i])
|
|
198
|
+
else
|
|
199
|
+
prod[i].delete(j)
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
else
|
|
203
|
+
prod[i].delete(j)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
i += 1
|
|
211
|
+
|
|
212
|
+
}
|
|
213
|
+
MatrizDispersa.new(prod)
|
|
214
|
+
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
#== Máximo de matriz
|
|
218
|
+
def max
|
|
219
|
+
|
|
220
|
+
maximo = 0.to_f
|
|
221
|
+
for i in 0...matriz.size
|
|
222
|
+
#=== Hay datos en la fila
|
|
223
|
+
if matriz[i] != nil
|
|
224
|
+
matriz[i].each do |key, value|
|
|
225
|
+
if matriz[i][key].to_f > maximo
|
|
226
|
+
maximo = matriz[i][key].to_f
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
maximo
|
|
232
|
+
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
#== Minimo de matriz
|
|
236
|
+
def min
|
|
237
|
+
|
|
238
|
+
minimo = 0.to_f
|
|
239
|
+
for i in 0...matriz.size
|
|
240
|
+
#=== Hay datos en la fila
|
|
241
|
+
if matriz[i] != nil
|
|
242
|
+
matriz[i].each do |key, value|
|
|
243
|
+
if matriz[i][key].to_f < minimo
|
|
244
|
+
minimo = matriz[i][key].to_f
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
minimo
|
|
250
|
+
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
#== Pasamos de Dispersa a Densa
|
|
254
|
+
def to_densa
|
|
255
|
+
|
|
256
|
+
densa = Array.new(matriz.size - 1)
|
|
257
|
+
for i in 0...matriz.size
|
|
258
|
+
densa[i] = Array.new(matriz[i].size - 1)
|
|
259
|
+
for j in 0...matriz[i].size
|
|
260
|
+
densa[i][j] = 0.to_f
|
|
261
|
+
if matriz[i] != nil
|
|
262
|
+
matriz[i].each do |key, value|
|
|
263
|
+
if key = j
|
|
264
|
+
densa[i][j] = matriz[i][key].to_f
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
MatrizDensa.new(densa)
|
|
272
|
+
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
#== El metodo coerce para onvierte el valor especificado en el tipo especificado.
|
|
276
|
+
def coerce(other)
|
|
277
|
+
return self, other.to_densa
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# racional.rb
|
|
2
|
+
require "./lib/modai_prct12/gcd.rb"
|
|
3
|
+
|
|
4
|
+
#=Implemente una clase Ruby para representar los números racionales.
|
|
5
|
+
#===Un número racional es un número con un numerador y un denominador de la forma. a/b
|
|
6
|
+
class Racional
|
|
7
|
+
|
|
8
|
+
include Comparable
|
|
9
|
+
|
|
10
|
+
#== Se inicializa la fracción en su forma reducida haciendo uso de gcd
|
|
11
|
+
def initialize(num, denom)
|
|
12
|
+
|
|
13
|
+
raise TypeError, "El denominador debe ser mayor que cero" unless (denom != 0)
|
|
14
|
+
|
|
15
|
+
div = gcd(num, denom)
|
|
16
|
+
@num = num/div
|
|
17
|
+
@denom = denom/div
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
#== Gets y Sets de @num y @denom
|
|
22
|
+
attr_reader :num, :denom
|
|
23
|
+
|
|
24
|
+
#== mostar por la consola la fraccion de la forma: a/b
|
|
25
|
+
def to_s
|
|
26
|
+
"#{num}/#{denom}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
#== comparar que dos fracciones son iguales
|
|
30
|
+
def ==(o)
|
|
31
|
+
if o.instance_of? Racional
|
|
32
|
+
@num == o.num && @denom == o.denom
|
|
33
|
+
else
|
|
34
|
+
false
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
#== Mostar la fraccion en formato flotante
|
|
39
|
+
def to_f
|
|
40
|
+
num.to_f/denom
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
#== Calcular el valor absoluto de una fraccion con el metodo abs
|
|
44
|
+
def abs
|
|
45
|
+
Racional.new(num.abs, denom.abs)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#== calcular el reciproco de una fraccion con el metodo reciprocal
|
|
49
|
+
def reciprocal
|
|
50
|
+
Racional.new(denom, num)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
#== Calcular el opuesto de una fraccion con -
|
|
54
|
+
def -@
|
|
55
|
+
Racional.new(-denom, num)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
#== suma dos fracciones con + y dar el resultado de forma reducida
|
|
59
|
+
def +(o)
|
|
60
|
+
|
|
61
|
+
if o.is_a? Integer
|
|
62
|
+
o = Racional.new(o,1)
|
|
63
|
+
end
|
|
64
|
+
Racional.new(num*o.denom + o.num*denom, denom*o.denom)
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#== resta dos fracciones con - y dar el resultado de forma reducida
|
|
69
|
+
def -(o)
|
|
70
|
+
|
|
71
|
+
if o.is_a? Integer
|
|
72
|
+
o = Racional.new(o,1)
|
|
73
|
+
end
|
|
74
|
+
Racional.new(num*o.denom - o.num*denom, denom*o.denom)
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
#== multiplica dos fracciones con * y dar el resultado de forma reducida
|
|
79
|
+
def *(o)
|
|
80
|
+
|
|
81
|
+
if o.is_a? Integer
|
|
82
|
+
o = Racional.new(o,1)
|
|
83
|
+
end
|
|
84
|
+
Racional.new(num*o.num,denom*o.denom)
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
#== Divide dos fracciones con / y dar el resultado de forma reducida
|
|
89
|
+
def /(o)
|
|
90
|
+
|
|
91
|
+
if o.is_a? Integer
|
|
92
|
+
o = Racional.new(o,1)
|
|
93
|
+
end
|
|
94
|
+
Racional.new(num*o.denom,denom*o.num)
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
#== Calcula el resto dos fracciones con % y dar el resultado de forma reducida
|
|
99
|
+
def %(o)
|
|
100
|
+
|
|
101
|
+
if o.is_a? Integer
|
|
102
|
+
o = Racional.new(o,1)
|
|
103
|
+
end
|
|
104
|
+
Racional.new(num%denom, o.num%o.denom)
|
|
105
|
+
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
#== GERRA DE LAS GALAXIAS : un metodo que proporciona la comparación de mayor, mayor igual, menor, menor igual
|
|
109
|
+
def <=>(o)
|
|
110
|
+
return nil unless o.instance_of? Racional
|
|
111
|
+
(num.to_f / denom) <=> (o.num.to_f / o.denom)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
#== El metodo coerce para onvierte el valor especificado en el tipo especificado.
|
|
115
|
+
def coerce(other)
|
|
116
|
+
return Racional.new(other,1), self
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'modai_prct12/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "modai_prct12"
|
|
8
|
+
spec.version = ModaiPrct12::VERSION
|
|
9
|
+
spec.authors = ["Dailos Herrera Bencomo y Mohammed Mahrach"]
|
|
10
|
+
spec.email = ["alu0100036862@etsii.ull.es"]
|
|
11
|
+
spec.description = %q{Simply generates modai_prct12 ipsum text.}
|
|
12
|
+
spec.summary = %q{modai_prct12 ipsum generator}
|
|
13
|
+
spec.homepage = ""
|
|
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
|
+
end
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'modai_prct12'
|
|
3
|
+
include ModaiPrct12
|
|
4
|
+
|
|
5
|
+
describe ModaiPrct12 do
|
|
6
|
+
|
|
7
|
+
before :each do
|
|
8
|
+
|
|
9
|
+
#== Matrices DENSAS
|
|
10
|
+
matA = [[1,2],[3,4]]
|
|
11
|
+
matB = [[221,2],[3,4]]
|
|
12
|
+
|
|
13
|
+
matA_R = [[Racional.new(1,1),Racional.new(4,2)],[Racional.new(9,3),Racional.new(16,4)]]
|
|
14
|
+
matB_R = [[Racional.new(442,2),Racional.new(4,2)],[Racional.new(9,3),Racional.new(16,4)]]
|
|
15
|
+
|
|
16
|
+
@matrizA = MatrizDensa.new(matA)
|
|
17
|
+
@matrizB = MatrizDensa.new(matB)
|
|
18
|
+
|
|
19
|
+
@matrizA_R = MatrizDensa.new(matA_R)
|
|
20
|
+
@matrizB_R = MatrizDensa.new(matB_R)
|
|
21
|
+
|
|
22
|
+
#== Matrices DISPERSAS
|
|
23
|
+
matC = [nil, {1 => 4}] # [[0,0],[0,4]]
|
|
24
|
+
matD = [{0 => 5}, nil] # [[5,0],[0,0]]
|
|
25
|
+
matE = [{0 => 1}, {1 => 2}, {2 => 3}, {3 => 4}] # [[1,0,0,0],[0,2,0,0],[0,0,3,0],[0,0,0,4]]
|
|
26
|
+
matF = [{1 => 5, 3 => 4}, {1 => 2}, {0 => 3}, {2 => 1}] # [[0,5,0,4],[0,2,0,0],[3,0,0,0],[0,0,1,0]]
|
|
27
|
+
|
|
28
|
+
matC_R = [nil, {1 => Racional.new(4,1)}] # [[Racional.new(0,1),Racional.new(0,1)],[Racional.new(0,1),Racional.new(4,1)]]
|
|
29
|
+
matD_R = [{0 => Racional.new(5,1)}, nil] # [[Racional.new(5,1),Racional.new(0,1)],[Racional.new(0,1),Racional.new(0,1)]]
|
|
30
|
+
|
|
31
|
+
@matrizC = MatrizDispersa.new(matC)
|
|
32
|
+
@matrizD = MatrizDispersa.new(matD)
|
|
33
|
+
@matrizE = MatrizDispersa.new(matE)
|
|
34
|
+
@matrizF = MatrizDispersa.new(matF)
|
|
35
|
+
|
|
36
|
+
@matrizC_R = MatrizDispersa.new(matC_R)
|
|
37
|
+
@matrizD_R = MatrizDispersa.new(matD_R)
|
|
38
|
+
|
|
39
|
+
#== Matrices creadas en horas de practicas
|
|
40
|
+
matA_P_DEN = [[3.4],[5.6]]
|
|
41
|
+
matB_P_DIS = [nil,{1 => 1}]
|
|
42
|
+
matB_R_DIS = [nil,{1 => Racional.new(1,2)}]
|
|
43
|
+
|
|
44
|
+
@matrizA_P_DEN = MatrizDensa.new(matA_P_DEN)
|
|
45
|
+
@matrizB_P_DIS = MatrizDispersa.new(matB_P_DIS)
|
|
46
|
+
@matrizB_R_DIS = MatrizDispersa.new(matB_R_DIS)
|
|
47
|
+
|
|
48
|
+
#== Matriz creada en hora de practica PRACT11
|
|
49
|
+
matPRACT = [[1,2,9],[7,8,4]]
|
|
50
|
+
@matrizPRACT = MatrizDensa.new(matPRACT)
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
context 'comprobar los accessors (DENSA)' do
|
|
55
|
+
|
|
56
|
+
it "Se debe invocar al metodo matriz() para obtener la matriz (DENSA)" do
|
|
57
|
+
@matrizA.respond_to?("matriz").should == true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "Se debe invocar al metodo filas() para obtener el numero de filas (DENSA)" do
|
|
61
|
+
@matrizA.respond_to?("filas").should == true
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "Se debe invocar al metodo columnas() para obtener el numero de columnas (DENSA)" do
|
|
65
|
+
@matrizA.respond_to?("columnas").should == true
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "Se debe invocar al metodo matriz() para obtener la matriz de racionales (DENSA)" do
|
|
69
|
+
@matrizA_R.respond_to?("matriz").should == true
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "Se debe invocar al metodo filas() para obtener el numero de filas de matriz de racionales (DENSA)" do
|
|
73
|
+
@matrizA_R.respond_to?("filas").should == true
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "Se debe invocar al metodo columnas() para obtener el numero de columnas de matriz de racionales (DENSA)" do
|
|
77
|
+
@matrizA_R.respond_to?("columnas").should == true
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context 'Comprobar metodos de conversion (DENSA)' do
|
|
83
|
+
|
|
84
|
+
it "Se debe mostrar la matriz (DENSA)" do
|
|
85
|
+
@matrizA.to_s.should == MatrizDensa.new([[1,2],[3,4]]).to_s
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "Se debe convertir a punto flotantes (DENSA)" do
|
|
89
|
+
@matrizA.to_f.to_s.should == MatrizDensa.new([[1.0,2.0],[3.0,4.0]]).to_s
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "Se debe mostrar la matriz de racionales (DENSA)" do
|
|
93
|
+
@matrizA_R.to_s.should == MatrizDensa.new([[Racional.new(1,1),Racional.new(4,2)],[Racional.new(9,3),Racional.new(16,4)]]).to_s
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
context 'Comprobar las operaciones entre matrices (DENSA)' do
|
|
99
|
+
|
|
100
|
+
it "Se debe poder sumar dos matrices (DENSA)" do
|
|
101
|
+
(@matrizA + @matrizB).to_s.should == MatrizDensa.new([[222,4], [6,8]]).to_s
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "Se debe poder restar dos matrices (DENSA)" do
|
|
105
|
+
(@matrizA - @matrizB).to_s.should == MatrizDensa.new([[-220,0], [0,0]]).to_s
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "Se debe poder multiplicar dos matrices (DENSA)" do
|
|
109
|
+
(@matrizA * @matrizB).to_s.should == MatrizDensa.new([[227,10], [675,22]]).to_s
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "Se debe poder sumar dos matrices de racionales (DENSA)" do
|
|
113
|
+
(@matrizA_R + @matrizB_R).to_s.should == MatrizDensa.new([[Racional.new(222,1),Racional.new(4,1)],[Racional.new(6,1),Racional.new(8,1)]]).to_s
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "Se debe poder restar dos matrices de racionales (DENSA)" do
|
|
117
|
+
(@matrizA_R - @matrizB_R).to_s.should == MatrizDensa.new([[Racional.new(-220,1),Racional.new(0,1)],[Racional.new(0,1),Racional.new(0,1)]]).to_s
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
context 'Comprobar las operaciones de la propia matriz (DENSA)' do
|
|
123
|
+
|
|
124
|
+
it "Se debe mostrar el max de la matriz (DENSA)" do
|
|
125
|
+
@matrizA.max == 4.0
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "Se debe mostrar el min de la matriz (DENSA)" do
|
|
129
|
+
@matrizA.min == 1.0
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "Se debe mostrar el max de la matriz de racionales (DENSA)" do
|
|
133
|
+
@matrizA_R.max == Racional.new(1,1)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "Se debe mostrar el min de la matriz de racionales (DENSA)" do
|
|
137
|
+
@matrizA_R.min == Racional.new(16,4)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
context 'comprobar los accessors (DISPERSA)' do
|
|
143
|
+
|
|
144
|
+
it "Se debe invocar al metodo matriz() para obtener la matriz (DISPERSA)" do
|
|
145
|
+
@matrizC.respond_to?("matriz").should == true
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "Se debe invocar al metodo filas() para obtener el numero de filas (DISPERSA)" do
|
|
149
|
+
@matrizC.respond_to?("filas").should == true
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it "Se debe invocar al metodo columnas() para obtener el numero de columnas (DISPERSA)" do
|
|
153
|
+
@matrizC.respond_to?("columnas").should == true
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it "Se debe invocar al metodo matriz() para obtener la matriz de racionales (DISPERSA)" do
|
|
157
|
+
@matrizC_R.respond_to?("matriz").should == true
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it "Se debe invocar al metodo filas() para obtener el numero de filas de matriz de racionales (DISPERSA)" do
|
|
161
|
+
@matrizC_R.respond_to?("filas").should == true
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "Se debe invocar al metodo columnas() para obtener el numero de columnas de matriz de racionales (DISPERSA)" do
|
|
165
|
+
@matrizC_R.respond_to?("columnas").should == true
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
context 'Comprobar metodos de conversion (DISPERSA)' do
|
|
171
|
+
|
|
172
|
+
it "Se debe mostrar la matriz (DISPERSA)" do
|
|
173
|
+
@matrizC.to_s.should == MatrizDispersa.new([nil, {1 => 4}]).to_s
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
it "Se debe convertir a punto flotantes (DISPERSA)" do
|
|
177
|
+
@matrizC.to_f.to_s.should == MatrizDispersa.new([nil, {1 => 4.0}]).to_s
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
it "Se debe mostrar la matriz de racionales (DISPERSA)" do
|
|
181
|
+
@matrizC_R.to_s.should == MatrizDispersa.new([nil, {1 => Racional.new(4,1)}]).to_s
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
context 'Comprobar las operaciones entre matrices (DISPERSA)' do
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
it "Se debe poder sumar dos matrices (DISPERSA)" do
|
|
190
|
+
(@matrizC + @matrizC).to_s.should == MatrizDispersa.new([{0 => 5}, {1 => 4}]).to_s
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
it "Se debe poder restar dos matrices (DISPERSA)" do
|
|
194
|
+
(@matrizC - @matrizC).to_s.should == MatrizDispersa.new([{0 => -5}, {1 => 4}]).to_s
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it "Se debe poder multiplicar dos matrices (DISPERSA)" do
|
|
198
|
+
(@matrizE * @matrizF).to_s.should == MatrizDispersa.new([{1 => 5, 3 => 4}, {1 => 4}, {0 => 9}, {2 => 4}]).to_s
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
it "Se debe poder sumar dos matrices de racionales (DISPERSA)" do
|
|
202
|
+
(@matrizC_R + @matrizC_R).to_s.should == MatrizDispersa.new([{0 => Racional.new(5,1)}, {1 => Racional.new(4,1)}]).to_s
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it "Se debe poder restar dos matrices de racionales (DISPERSA)" do
|
|
206
|
+
(@matrizC_R - @matrizC_R).to_s.should == MatrizDispersa.new([{0 => Racional.new(-5,1)}, {1 => Racional.new(4,1)}]).to_s
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
context 'Comprobar las operaciones de la propia matriz (DISPERSA)' do
|
|
212
|
+
|
|
213
|
+
it "Se debe mostrar el max de la matriz (DISPERSA)" do
|
|
214
|
+
@matrizC.max == 4
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it "Se debe mostrar el min de la matriz (DISPERSA)" do
|
|
218
|
+
@matrizC.min == 0
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
it "Se debe mostrar el max de la matriz de racionales (DISPERSA)" do
|
|
222
|
+
@matrizC_R.max == Racional.new(4,1)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
it "Se debe mostrar el min de la matriz de racionales (DISPERSA)" do
|
|
226
|
+
@matrizC_R.min == Racional.new(0,1)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
context 'Comprobar modificacion en la hora de practica' do
|
|
232
|
+
|
|
233
|
+
it "Se debe sumar matriz DENSA con DISPERSA" do
|
|
234
|
+
(@matrizA_P_DEN + @matrizB_P_DIS).to_s.should == MatrizDensa.new([[3,4], [5,7]]).to_s
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
it "Se debe sumar matriz DENSA con DISPERSA con racionales" do
|
|
238
|
+
(@matrizA_P_DEN / @matrizB_R_DIS).to_s.should == MatrizDensa.new([[3,4], [5,Racional.new(13,2)]]).to_s
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
context 'Comprobar modificacion en la hora de practica PRACT11' do
|
|
244
|
+
|
|
245
|
+
it "Se debe devolver la posicion i,j del primer elemento que sea su cuadrado > 6" do
|
|
246
|
+
(@matrizPRACT).encontrar{ |e| ( e * e) > 6 }.should == "[[0,2][1,0][1,1][1,2]]"
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
end
|