modai_prct10 0.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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +6 -0
- data/Gemfile +9 -0
- data/Guardfile +38 -0
- data/LICENSE.txt +22 -0
- data/README.md +22 -0
- data/Rakefile +6 -0
- data/lib/gcd.rb +7 -0
- data/lib/modai_prct10/version.rb +3 -0
- data/lib/modai_prct10.rb +391 -0
- data/lib/racional.rb +89 -0
- data/modai_prct10.gemspec +23 -0
- data/spec/modai_prct10_spec.rb +218 -0
- data/spec/spec_helper.rb +17 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 05739c7ea7b0173c50241ff8657ac2ada85f4159
|
4
|
+
data.tar.gz: cbbc2e606c2bbac433c21c43cf674719a622fd74
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 35a2dfed99c627420196974c5199b0cf84fafcba3923f9e9ba2f9160098c52bbf0a7ac64909d86442acf97b53da1c2341e0f524a90e9c485a25ac25ba7a5fa0b
|
7
|
+
data.tar.gz: bab5d437aebbe4ae9b747953c6dcbe0e19e98c6038b7b48c3e225a2e966d2c0f21546889afd0f5bfcce2898903a42c5208e7c75a06e06709b98c2a8be0487362
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
guard 'bundler' do
|
2
|
+
watch('Gemfile')
|
3
|
+
watch(/^.+\.gemspec/)
|
4
|
+
end
|
5
|
+
|
6
|
+
guard 'rspec', :version => 2 do
|
7
|
+
watch(%r{^spec/.+_spec\.rb$})
|
8
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
9
|
+
watch('spec/spec_helper.rb') { "spec" }
|
10
|
+
end
|
11
|
+
|
12
|
+
guard :bundler do
|
13
|
+
watch('Gemfile')
|
14
|
+
# Uncomment next line if your Gemfile contains the `gemspec' command.
|
15
|
+
# watch(/^.+\.gemspec/)
|
16
|
+
end
|
17
|
+
|
18
|
+
guard :rspec do
|
19
|
+
watch(%r{^spec/.+_spec\.rb$})
|
20
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
21
|
+
watch('spec/spec_helper.rb') { "spec" }
|
22
|
+
|
23
|
+
# Rails example
|
24
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
25
|
+
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
26
|
+
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
27
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
28
|
+
watch('config/routes.rb') { "spec/routing" }
|
29
|
+
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
30
|
+
|
31
|
+
# Capybara features specs
|
32
|
+
watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
|
33
|
+
|
34
|
+
# Turnip features and steps
|
35
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
36
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
37
|
+
end
|
38
|
+
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Dailos Herrera Bencomo
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Práctica : Práctica de Laboratorio #10 - EQUIPO.
|
2
|
+
======================================================
|
3
|
+
Grupo : LPP-T-45.
|
4
|
+
Alumnos : DAILOS HERRERA BENCOMO.
|
5
|
+
MOHAMMED MAHRACH.
|
6
|
+
Asignatura : LPP.
|
7
|
+
|
8
|
+
-------------------------------------------------
|
9
|
+
|
10
|
+
Considere la Gema para Matrices que empezó a desarrollar en la práctica anterior. El objetivo de esta práctica es terminar su creación.
|
11
|
+
|
12
|
+
1.- Desarrollar métodos para calcular el máximos y el mínimo de los elementos de una matriz.
|
13
|
+
|
14
|
+
2.- Construir la gema
|
15
|
+
|
16
|
+
gem build
|
17
|
+
|
18
|
+
3.- Considerar su publicacion
|
19
|
+
|
20
|
+
gem push
|
21
|
+
|
22
|
+
4. Indique la URL del repositorio que ha desarrollado.
|
data/Rakefile
ADDED
data/lib/gcd.rb
ADDED
data/lib/modai_prct10.rb
ADDED
@@ -0,0 +1,391 @@
|
|
1
|
+
require "modai_prct10/version"
|
2
|
+
require "racional"
|
3
|
+
|
4
|
+
module ModaiPrct10
|
5
|
+
|
6
|
+
$tope = 9999999999.9
|
7
|
+
|
8
|
+
# Clase abstracta para herencia común de matrices densa y dispersa
|
9
|
+
class MatrizAbstracta
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
# Clase de Matriz densa
|
14
|
+
class MatrizDensa < MatrizAbstracta
|
15
|
+
|
16
|
+
# Inicialización
|
17
|
+
def initialize(matriz)
|
18
|
+
|
19
|
+
@matriz = matriz
|
20
|
+
@filas = matriz[0].size
|
21
|
+
@columnas = matriz[0].size
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
attr_reader :matriz, :filas, :columnas
|
26
|
+
|
27
|
+
# Convertimos a string
|
28
|
+
def to_s
|
29
|
+
|
30
|
+
fil = 0
|
31
|
+
print "["
|
32
|
+
while fil < filas
|
33
|
+
|
34
|
+
col = 0
|
35
|
+
while col < columnas
|
36
|
+
|
37
|
+
print "#{matriz[fil][col].to_s}"
|
38
|
+
if (col + 1) < columnas then print ", " end
|
39
|
+
col += 1
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
if (fil + 1) < filas then print ", " end
|
44
|
+
fil += 1
|
45
|
+
|
46
|
+
end
|
47
|
+
print "]"
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
# Matriz en punto flotante
|
52
|
+
def to_f
|
53
|
+
|
54
|
+
flotante = Array.new(matriz.size - 1)
|
55
|
+
for i in 0...matriz.size
|
56
|
+
flotante[i] = Array.new(matriz[i].size - 1)
|
57
|
+
for j in 0...matriz[i].size
|
58
|
+
flotante[i][j] = (matriz[i][j]).to_f
|
59
|
+
end
|
60
|
+
end
|
61
|
+
MatrizDensa.new(flotante)
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
# Suma de matrices
|
66
|
+
def +(o)
|
67
|
+
|
68
|
+
suma = Array.new(matriz.size - 1)
|
69
|
+
for i in 0...matriz.size
|
70
|
+
suma[i] = Array.new(matriz[i].size - 1)
|
71
|
+
for j in 0...matriz[i].size
|
72
|
+
suma[i][j] = matriz[i][j] + o.matriz[i][j]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
MatrizDensa.new(suma)
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
# Resta de matrices
|
80
|
+
def -(o)
|
81
|
+
|
82
|
+
resta = Array.new(matriz.size - 1)
|
83
|
+
for i in 0...matriz.size
|
84
|
+
resta[i] = Array.new(matriz[i].size - 1)
|
85
|
+
for j in 0...matriz[i].size
|
86
|
+
resta[i][j] = matriz[i][j] - o.matriz[i][j]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
MatrizDensa.new(resta)
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
# Multiplicación de matrices
|
94
|
+
def *(o)
|
95
|
+
|
96
|
+
prod = Array.new(matriz.size - 1,0)
|
97
|
+
for i in 0...matriz[0].size
|
98
|
+
prod[i] = Array.new(o.matriz.size,0)
|
99
|
+
for j in 0...o.matriz.size
|
100
|
+
for pos in 0...matriz.size
|
101
|
+
prod[i][j] = prod[i][j] + (matriz[i][pos] * o.matriz[pos][j])
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
MatrizDensa.new(prod)
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
# Máximo de matriz
|
110
|
+
def max
|
111
|
+
|
112
|
+
maximo = 0.to_f
|
113
|
+
for i in 0...matriz.size
|
114
|
+
for j in 0...matriz[i].size
|
115
|
+
if matriz[i][j].to_f > maximo
|
116
|
+
maximo = matriz[i][j].to_f
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
maximo
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
# Minimo de matriz
|
125
|
+
def min
|
126
|
+
|
127
|
+
minimo = $tope
|
128
|
+
for i in 0...matriz.size
|
129
|
+
for j in 0...matriz[i].size
|
130
|
+
if matriz[i][j].to_f < minimo
|
131
|
+
minimo = matriz[i][j].to_f
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
minimo
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
# Clase de Matriz dispersa
|
142
|
+
class MatrizDispersa < MatrizAbstracta
|
143
|
+
|
144
|
+
# Inicialización
|
145
|
+
def initialize(matriz)
|
146
|
+
|
147
|
+
@matriz = matriz
|
148
|
+
@filas = matriz.size
|
149
|
+
@columnas = matriz.size
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
attr_reader :matriz, :filas, :columnas
|
154
|
+
|
155
|
+
# Convertimos a string
|
156
|
+
def to_s
|
157
|
+
|
158
|
+
fil = 0
|
159
|
+
print "["
|
160
|
+
while fil < filas
|
161
|
+
|
162
|
+
col = 0
|
163
|
+
while col < columnas
|
164
|
+
|
165
|
+
# Hay datos en la fila
|
166
|
+
if matriz[fil] != nil
|
167
|
+
|
168
|
+
if matriz[fil].has_key?(col)
|
169
|
+
print "#{matriz[fil][col].to_s}"
|
170
|
+
else
|
171
|
+
print "0"
|
172
|
+
end
|
173
|
+
else
|
174
|
+
print "0"
|
175
|
+
end
|
176
|
+
|
177
|
+
if (col + 1) < columnas then print ", " end
|
178
|
+
col += 1
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
|
183
|
+
if (fil + 1) < filas then print ", " end
|
184
|
+
fil += 1
|
185
|
+
|
186
|
+
end
|
187
|
+
print "]"
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
# Matriz en punto flotante
|
192
|
+
def to_f
|
193
|
+
|
194
|
+
flotante = Array.new(matriz.size - 1)
|
195
|
+
for i in 0...matriz.size
|
196
|
+
# Hay datos en la fila
|
197
|
+
if matriz[i] != nil
|
198
|
+
|
199
|
+
flotante[i] = Hash.new()
|
200
|
+
matriz[i].each do |key, value|
|
201
|
+
flotante[i][key] = matriz[i][key].to_f
|
202
|
+
end
|
203
|
+
|
204
|
+
end
|
205
|
+
|
206
|
+
end
|
207
|
+
MatrizDispersa.new(flotante)
|
208
|
+
|
209
|
+
end
|
210
|
+
|
211
|
+
# Suma de matrices
|
212
|
+
def +(o)
|
213
|
+
|
214
|
+
suma = Array.new(matriz.size - 1)
|
215
|
+
for i in 0...matriz.size
|
216
|
+
|
217
|
+
# creamos el hash
|
218
|
+
if (matriz[i] != nil or o.matriz[i] != nil)
|
219
|
+
|
220
|
+
suma[i] = Hash.new()
|
221
|
+
|
222
|
+
case true
|
223
|
+
|
224
|
+
# Los dos tienen hash
|
225
|
+
when (matriz[i] != nil and o.matriz[i] != nil)
|
226
|
+
|
227
|
+
# cogemos matriz como base para la suma
|
228
|
+
suma[i] = matriz[i]
|
229
|
+
|
230
|
+
o.matriz[i].each do |key, value|
|
231
|
+
|
232
|
+
if suma[i].has_key?(key)
|
233
|
+
suma[i][key] = suma[i][key] + o.matriz[i][key]
|
234
|
+
else
|
235
|
+
suma[i][key] = o.matriz[i][key]
|
236
|
+
end
|
237
|
+
|
238
|
+
end
|
239
|
+
|
240
|
+
# matriz tiene hash
|
241
|
+
when matriz[i] != nil
|
242
|
+
suma[i] = matriz[i]
|
243
|
+
|
244
|
+
# o hash
|
245
|
+
when o.matriz[i] != nil
|
246
|
+
suma[i] = o.matriz[i]
|
247
|
+
|
248
|
+
|
249
|
+
end
|
250
|
+
|
251
|
+
end
|
252
|
+
|
253
|
+
end
|
254
|
+
MatrizDispersa.new(suma)
|
255
|
+
|
256
|
+
end
|
257
|
+
|
258
|
+
# Resta de matrices
|
259
|
+
def -(o)
|
260
|
+
|
261
|
+
resta = Array.new(matriz.size - 1)
|
262
|
+
for i in 0...matriz.size
|
263
|
+
|
264
|
+
# creamos el hash
|
265
|
+
if (matriz[i] != nil or o.matriz[i] != nil)
|
266
|
+
|
267
|
+
resta[i] = Hash.new()
|
268
|
+
|
269
|
+
case true
|
270
|
+
|
271
|
+
# Los dos tienen hash
|
272
|
+
when (matriz[i] != nil and o.matriz[i] != nil)
|
273
|
+
|
274
|
+
# cogemos matriz como base para la resta
|
275
|
+
resta[i] = matriz[i]
|
276
|
+
|
277
|
+
o.matriz[i].each do |key, value|
|
278
|
+
|
279
|
+
if resta[i].has_key?(key)
|
280
|
+
resta[i][key] = resta[i][key] - o.matriz[i][key]
|
281
|
+
else
|
282
|
+
resta[i][key] = o.matriz[i][key] * -1
|
283
|
+
end
|
284
|
+
|
285
|
+
end
|
286
|
+
|
287
|
+
# matriz tiene hash
|
288
|
+
when matriz[i] != nil
|
289
|
+
resta[i] = matriz[i]
|
290
|
+
|
291
|
+
# o hash
|
292
|
+
when o.matriz[i] != nil
|
293
|
+
resta[i] = o.matriz[i]
|
294
|
+
resta[i].each do |key, value|
|
295
|
+
resta[i][key] = resta[i][key] * -1
|
296
|
+
end
|
297
|
+
|
298
|
+
end
|
299
|
+
|
300
|
+
end
|
301
|
+
|
302
|
+
end
|
303
|
+
MatrizDispersa.new(resta)
|
304
|
+
|
305
|
+
end
|
306
|
+
|
307
|
+
=begin
|
308
|
+
# Multiplicación de matrices
|
309
|
+
def *(o)
|
310
|
+
|
311
|
+
prod = Array.new(matriz.size - 1,0)
|
312
|
+
for i in 0...matriz.size
|
313
|
+
|
314
|
+
if (o.matriz[i] != nil)
|
315
|
+
|
316
|
+
aux = 0
|
317
|
+
for j in 0...o.matriz.size
|
318
|
+
|
319
|
+
if (matriz[j] != nil)
|
320
|
+
|
321
|
+
if matriz[j].has_key?(i)
|
322
|
+
|
323
|
+
# No existe hash en la fila
|
324
|
+
if prod[j] != nil
|
325
|
+
prod[j] = Hash.new()
|
326
|
+
end
|
327
|
+
|
328
|
+
aux = aux + (o.matriz[i][j] * matriz[j][i])
|
329
|
+
|
330
|
+
end
|
331
|
+
|
332
|
+
end
|
333
|
+
|
334
|
+
end
|
335
|
+
if aux <> 0
|
336
|
+
prod.merge!({"#{}" => "#{aux}"})
|
337
|
+
end
|
338
|
+
|
339
|
+
end
|
340
|
+
|
341
|
+
# prod[i][j] = prod[i][j] + (matriz[i][pos] * o.matriz[pos][j])
|
342
|
+
|
343
|
+
|
344
|
+
|
345
|
+
end
|
346
|
+
MatrizDispersa.new(prod)
|
347
|
+
|
348
|
+
end
|
349
|
+
|
350
|
+
=end
|
351
|
+
|
352
|
+
# Máximo de matriz
|
353
|
+
def max
|
354
|
+
|
355
|
+
maximo = 0.to_f
|
356
|
+
for i in 0...matriz.size
|
357
|
+
# Hay datos en la fila
|
358
|
+
if matriz[i] != nil
|
359
|
+
matriz[i].each do |key, value|
|
360
|
+
if matriz[i][key].to_f > maximo
|
361
|
+
maximo = matriz[i][key].to_f
|
362
|
+
end
|
363
|
+
end
|
364
|
+
end
|
365
|
+
end
|
366
|
+
maximo
|
367
|
+
|
368
|
+
end
|
369
|
+
|
370
|
+
# Minimo de matriz
|
371
|
+
def min
|
372
|
+
|
373
|
+
minimo = 0.to_f
|
374
|
+
for i in 0...matriz.size
|
375
|
+
# Hay datos en la fila
|
376
|
+
if matriz[i] != nil
|
377
|
+
matriz[i].each do |key, value|
|
378
|
+
if matriz[i][key].to_f < minimo
|
379
|
+
minimo = matriz[i][key].to_f
|
380
|
+
end
|
381
|
+
end
|
382
|
+
end
|
383
|
+
end
|
384
|
+
minimo
|
385
|
+
|
386
|
+
end
|
387
|
+
|
388
|
+
end
|
389
|
+
|
390
|
+
end
|
391
|
+
|
data/lib/racional.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
# racional.rb
|
2
|
+
require "gcd"
|
3
|
+
|
4
|
+
class Racional
|
5
|
+
|
6
|
+
include Comparable
|
7
|
+
|
8
|
+
# Se inicializa la fracción en su forma reducida haciendo uso de gcd
|
9
|
+
def initialize(num, denom)
|
10
|
+
|
11
|
+
raise TypeError, "El denominador debe ser mayor que cero" unless (denom != 0)
|
12
|
+
|
13
|
+
div = gcd(num, denom)
|
14
|
+
@num = num/div
|
15
|
+
@denom = denom/div
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
# Gets y Sets de @num y @denom
|
20
|
+
attr_reader :num, :denom
|
21
|
+
|
22
|
+
#mostar por la consola la fraccion de la forma: a/b
|
23
|
+
def to_s
|
24
|
+
"#{num}/#{denom}"
|
25
|
+
end
|
26
|
+
|
27
|
+
#comparar que dos fracciones son iguales
|
28
|
+
def ==(o)
|
29
|
+
if o.instance_of? Racional
|
30
|
+
@num == o.num && @denom == o.denom
|
31
|
+
else
|
32
|
+
false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Mostar la fraccion en formato flotante
|
37
|
+
def to_f
|
38
|
+
num.to_f/denom
|
39
|
+
end
|
40
|
+
|
41
|
+
# Calcular el valor absoluto de una fraccion con el metodo abs
|
42
|
+
def abs
|
43
|
+
Racional.new(num.abs, denom.abs)
|
44
|
+
end
|
45
|
+
|
46
|
+
# calcular el reciproco de una fraccion con el metodo reciprocal
|
47
|
+
def reciprocal
|
48
|
+
Racional.new(denom, num)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Calcular el opuesto de una fraccion con -
|
52
|
+
def -@
|
53
|
+
Racional.new(-denom, num)
|
54
|
+
end
|
55
|
+
|
56
|
+
# suma dos fracciones con + y dar el resultado de forma reducida
|
57
|
+
def +(o)
|
58
|
+
Racional.new(num*o.denom + o.num*denom, denom*o.denom)
|
59
|
+
end
|
60
|
+
|
61
|
+
# resta dos fracciones con - y dar el resultado de forma reducida
|
62
|
+
def -(o)
|
63
|
+
Racional.new(num*o.denom - o.num*denom, denom*o.denom)
|
64
|
+
end
|
65
|
+
|
66
|
+
#multiplica dos fracciones con * y dar el resultado de forma reducida
|
67
|
+
def *(o)
|
68
|
+
Racional.new(num*o.num,denom*o.denom)
|
69
|
+
end
|
70
|
+
|
71
|
+
# divide dos fracciones con / y dar el resultado de forma reducida
|
72
|
+
def /(o)
|
73
|
+
Racional.new(num*o.denom,denom*o.num)
|
74
|
+
end
|
75
|
+
|
76
|
+
# calcula el resto dos fracciones con % y dar el resultado de forma reducida
|
77
|
+
def %(o)
|
78
|
+
Racional.new(num%denom, o.num%o.denom)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Comparación de mayor, mayor igual, menor, menor igual
|
82
|
+
def <=>(o)
|
83
|
+
return nil unless o.instance_of? Racional
|
84
|
+
(num.to_f / denom) <=> (o.num.to_f / o.denom)
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
|
@@ -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_prct10/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "modai_prct10"
|
8
|
+
spec.version = ModaiPrct10::VERSION
|
9
|
+
spec.authors = ["Dailos Herrera Bencomo y Mohammed Mahrach"]
|
10
|
+
spec.email = ["alu0100036862@etsii.ull.es"]
|
11
|
+
spec.description = %q{Simply generates modai_prct10 ipsum text.}
|
12
|
+
spec.summary = %q{modai_prct10 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,218 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'modai_prct10'
|
3
|
+
include ModaiPrct10
|
4
|
+
|
5
|
+
describe ModaiPrct10 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
|
+
|
26
|
+
matC_R = [nil, {1 => Racional.new(4,1)}] # [[Racional.new(0,1),Racional.new(0,1)],[Racional.new(0,1),Racional.new(4,1)]]
|
27
|
+
matD_R = [{0 => Racional.new(5,1)}, nil] # [[Racional.new(5,1),Racional.new(0,1)],[Racional.new(0,1),Racional.new(0,1)]]
|
28
|
+
|
29
|
+
@matrizC = MatrizDispersa.new(matC)
|
30
|
+
@matrizC = MatrizDispersa.new(matD)
|
31
|
+
|
32
|
+
@matrizC_R = MatrizDispersa.new(matC_R)
|
33
|
+
@matrizC_R = MatrizDispersa.new(matD_R)
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'comprobar los accessors (DENSA)' do
|
38
|
+
|
39
|
+
it "Se debe invocar al metodo matriz() para obtener la matriz (DENSA)" do
|
40
|
+
@matrizA.respond_to?("matriz").should == true
|
41
|
+
end
|
42
|
+
|
43
|
+
it "Se debe invocar al metodo filas() para obtener el numero de filas (DENSA)" do
|
44
|
+
@matrizA.respond_to?("filas").should == true
|
45
|
+
end
|
46
|
+
|
47
|
+
it "Se debe invocar al metodo columnas() para obtener el numero de columnas (DENSA)" do
|
48
|
+
@matrizA.respond_to?("columnas").should == true
|
49
|
+
end
|
50
|
+
|
51
|
+
it "Se debe invocar al metodo matriz() para obtener la matriz de racionales (DENSA)" do
|
52
|
+
@matrizA_R.respond_to?("matriz").should == true
|
53
|
+
end
|
54
|
+
|
55
|
+
it "Se debe invocar al metodo filas() para obtener el numero de filas de matriz de racionales (DENSA)" do
|
56
|
+
@matrizA_R.respond_to?("filas").should == true
|
57
|
+
end
|
58
|
+
|
59
|
+
it "Se debe invocar al metodo columnas() para obtener el numero de columnas de matriz de racionales (DENSA)" do
|
60
|
+
@matrizA_R.respond_to?("columnas").should == true
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'Comprobar metodos de conversion (DENSA)' do
|
66
|
+
|
67
|
+
it "Se debe mostrar la matriz (DENSA)" do
|
68
|
+
@matrizA.to_s.should == MatrizDensa.new([[1,2],[3,4]]).to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
it "Se debe convertir a punto flotantes (DENSA)" do
|
72
|
+
@matrizA.to_f.to_s.should == MatrizDensa.new([[1.0,2.0],[3.0,4.0]]).to_s
|
73
|
+
end
|
74
|
+
|
75
|
+
it "Se debe mostrar la matriz de racionales (DENSA)" do
|
76
|
+
@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
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'Comprobar las operaciones entre matrices (DENSA)' do
|
82
|
+
|
83
|
+
it "Se debe poder sumar dos matrices (DENSA)" do
|
84
|
+
(@matrizA + @matrizB).to_s.should == MatrizDensa.new([[222,4], [6,8]]).to_s
|
85
|
+
end
|
86
|
+
|
87
|
+
it "Se debe poder restar dos matrices (DENSA)" do
|
88
|
+
(@matrizA - @matrizB).to_s.should == MatrizDensa.new([[-220,0], [0,0]]).to_s
|
89
|
+
end
|
90
|
+
|
91
|
+
it "Se debe poder multiplicar dos matrices (DENSA)" do
|
92
|
+
(@matrizA * @matrizB).to_s.should == MatrizDensa.new([[227,10], [675,22]]).to_s
|
93
|
+
end
|
94
|
+
|
95
|
+
it "Se debe poder sumar dos matrices de racionales (DENSA)" do
|
96
|
+
(@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
|
97
|
+
end
|
98
|
+
|
99
|
+
it "Se debe poder restar dos matrices de racionales (DENSA)" do
|
100
|
+
(@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
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
context 'Comprobar las operaciones de la propia matriz (DENSA)' do
|
106
|
+
|
107
|
+
it "Se debe mostrar el max de la matriz (DENSA)" do
|
108
|
+
@matrizA.max == 4.0
|
109
|
+
end
|
110
|
+
|
111
|
+
it "Se debe mostrar el min de la matriz (DENSA)" do
|
112
|
+
@matrizA.min == 1.0
|
113
|
+
end
|
114
|
+
|
115
|
+
it "Se debe mostrar el max de la matriz de racionales (DENSA)" do
|
116
|
+
@matrizA_R.max == Racional.new(1,1)
|
117
|
+
end
|
118
|
+
|
119
|
+
it "Se debe mostrar el min de la matriz de racionales (DENSA)" do
|
120
|
+
@matrizA_R.min == Racional.new(16,4)
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'comprobar los accessors (DISPERSA)' do
|
126
|
+
|
127
|
+
it "Se debe invocar al metodo matriz() para obtener la matriz (DISPERSA)" do
|
128
|
+
@matrizC.respond_to?("matriz").should == true
|
129
|
+
end
|
130
|
+
|
131
|
+
it "Se debe invocar al metodo filas() para obtener el numero de filas (DISPERSA)" do
|
132
|
+
@matrizC.respond_to?("filas").should == true
|
133
|
+
end
|
134
|
+
|
135
|
+
it "Se debe invocar al metodo columnas() para obtener el numero de columnas (DISPERSA)" do
|
136
|
+
@matrizC.respond_to?("columnas").should == true
|
137
|
+
end
|
138
|
+
|
139
|
+
it "Se debe invocar al metodo matriz() para obtener la matriz de racionales (DISPERSA)" do
|
140
|
+
@matrizC_R.respond_to?("matriz").should == true
|
141
|
+
end
|
142
|
+
|
143
|
+
it "Se debe invocar al metodo filas() para obtener el numero de filas de matriz de racionales (DISPERSA)" do
|
144
|
+
@matrizC_R.respond_to?("filas").should == true
|
145
|
+
end
|
146
|
+
|
147
|
+
it "Se debe invocar al metodo columnas() para obtener el numero de columnas de matriz de racionales (DISPERSA)" do
|
148
|
+
@matrizC_R.respond_to?("columnas").should == true
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
context 'Comprobar metodos de conversion (DISPERSA)' do
|
154
|
+
|
155
|
+
it "Se debe mostrar la matriz (DISPERSA)" do
|
156
|
+
@matrizC.to_s.should == MatrizDispersa.new([nil, {1 => 4}]).to_s
|
157
|
+
end
|
158
|
+
|
159
|
+
it "Se debe convertir a punto flotantes (DISPERSA)" do
|
160
|
+
@matrizC.to_f.to_s.should == MatrizDispersa.new([nil, {1 => 4.0}]).to_s
|
161
|
+
end
|
162
|
+
|
163
|
+
it "Se debe mostrar la matriz de racionales (DISPERSA)" do
|
164
|
+
@matrizC_R.to_s.should == MatrizDispersa.new([nil, {1 => Racional.new(4,1)}]).to_s
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
168
|
+
|
169
|
+
context 'Comprobar las operaciones entre matrices (DISPERSA)' do
|
170
|
+
|
171
|
+
|
172
|
+
it "Se debe poder sumar dos matrices (DISPERSA)" do
|
173
|
+
(@matrizC + @matrizC).to_s.should == MatrizDispersa.new([{0 => 5}, {1 => 4}]).to_s
|
174
|
+
end
|
175
|
+
|
176
|
+
it "Se debe poder restar dos matrices (DISPERSA)" do
|
177
|
+
(@matrizC - @matrizC).to_s.should == MatrizDispersa.new([{0 => -5}, {1 => 4}]).to_s
|
178
|
+
end
|
179
|
+
|
180
|
+
=begin
|
181
|
+
it "Se debe poder multiplicar dos matrices (DISPERSA)" do
|
182
|
+
(@matrizC * @matrizC).to_s.should == MatrizDispersa.new([[227,10], [675,22]]).to_s
|
183
|
+
end
|
184
|
+
|
185
|
+
=end
|
186
|
+
it "Se debe poder sumar dos matrices de racionales (DISPERSA)" do
|
187
|
+
(@matrizC_R + @matrizC_R).to_s.should == MatrizDispersa.new([{0 => Racional.new(5,1)}, {1 => Racional.new(4,1)}]).to_s
|
188
|
+
end
|
189
|
+
|
190
|
+
it "Se debe poder restar dos matrices de racionales (DISPERSA)" do
|
191
|
+
(@matrizC_R - @matrizC_R).to_s.should == MatrizDispersa.new([{0 => Racional.new(-5,1)}, {1 => Racional.new(4,1)}]).to_s
|
192
|
+
end
|
193
|
+
|
194
|
+
end
|
195
|
+
|
196
|
+
context 'Comprobar las operaciones de la propia matriz (DISPERSA)' do
|
197
|
+
|
198
|
+
it "Se debe mostrar el max de la matriz (DISPERSA)" do
|
199
|
+
@matrizC.max == 4
|
200
|
+
end
|
201
|
+
|
202
|
+
it "Se debe mostrar el min de la matriz (DISPERSA)" do
|
203
|
+
@matrizC.min == 0
|
204
|
+
end
|
205
|
+
|
206
|
+
it "Se debe mostrar el max de la matriz de racionales (DISPERSA)" do
|
207
|
+
@matrizC_R.max == Racional.new(4,1)
|
208
|
+
end
|
209
|
+
|
210
|
+
it "Se debe mostrar el min de la matriz de racionales (DISPERSA)" do
|
211
|
+
@matrizC_R.min == Racional.new(0,1)
|
212
|
+
end
|
213
|
+
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
|
218
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
4
|
+
# loaded once.
|
5
|
+
#
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
|
+
config.run_all_when_everything_filtered = true
|
10
|
+
config.filter_run :focus
|
11
|
+
|
12
|
+
# Run specs in random order to surface order dependencies. If you find an
|
13
|
+
# order dependency and want to debug it, you can fix the order by providing
|
14
|
+
# the seed, which is printed after each run.
|
15
|
+
# --seed 1234
|
16
|
+
config.order = 'random'
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: modai_prct10
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dailos Herrera Bencomo y Mohammed Mahrach
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-11-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Simply generates modai_prct10 ipsum text.
|
42
|
+
email:
|
43
|
+
- alu0100036862@etsii.ull.es
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- .travis.yml
|
50
|
+
- Gemfile
|
51
|
+
- Guardfile
|
52
|
+
- LICENSE.txt
|
53
|
+
- README.md
|
54
|
+
- Rakefile
|
55
|
+
- lib/gcd.rb
|
56
|
+
- lib/modai_prct10.rb
|
57
|
+
- lib/modai_prct10/version.rb
|
58
|
+
- lib/racional.rb
|
59
|
+
- modai_prct10.gemspec
|
60
|
+
- spec/modai_prct10_spec.rb
|
61
|
+
- spec/spec_helper.rb
|
62
|
+
homepage: ''
|
63
|
+
licenses:
|
64
|
+
- MIT
|
65
|
+
metadata: {}
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 2.0.3
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: modai_prct10 ipsum generator
|
86
|
+
test_files:
|
87
|
+
- spec/modai_prct10_spec.rb
|
88
|
+
- spec/spec_helper.rb
|
89
|
+
has_rdoc:
|