GemaMatriz 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: be96d0f8fe867db9ee84ce472b3211f1adbc5c50
4
+ data.tar.gz: 711a49deebe6ff6fdd11f41c32220f0a566fef54
5
+ SHA512:
6
+ metadata.gz: 6f8f1f93777ccfa708711252bcf636f919f9a2e509de653fc109846e93925b1f316740b48bf4742fc5592db0f7fd7060aa6c3b6d1c4234b940b4b6ef51041840
7
+ data.tar.gz: 66c441c6fc929a5c10a5d3e04bb0a53ed67410cb5dd418ac600eeab485e75333cd6cce918ba89db3492e4288afd6c928deb6bffa21d1ce5550717a8f0616994e
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *~
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ rvm:
2
+ - 1.9.3
3
+ - 1.9.2
4
+ - jruby
5
+
6
+ script: "bundle exec rake"
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'GemaMatriz/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "GemaMatriz"
8
+ spec.version = GemaMatriz::VERSION
9
+ spec.authors = ["Rushil Lakhani Lakhani & Waldo Nazco Torres"]
10
+ spec.email = ["alu0100537031@ull.edu.es"]
11
+ spec.description = %q{Construcción de una gema ruby para la creación de matrices dispersas y densas}
12
+ spec.summary = %q{Practica 9 }
13
+ spec.homepage = "https://github.com/alu0100537031/prct09"
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
+ 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"
27
+ end
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in GemaMatriz.gemspec
4
+ gemspec
5
+
data/Guardfile ADDED
@@ -0,0 +1,10 @@
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
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Rushil Lakhani Lakhani
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,72 @@
1
+ Práctica de Laboratorio #9. Creacion De Una Gema
2
+ ================
3
+
4
+ ## Componentes Del Grupo:
5
+
6
+ - RUSHIL LAKHANI LAKHANI
7
+ - WALDO NAZCO TORRES
8
+
9
+
10
+ ## GemaMatriz
11
+
12
+ Construcción de una gema ruby para la creación de matrices dispersas y densas,que heredan de la clase base Matriz
13
+
14
+ ##Descripción de la práctica.
15
+
16
+ La práctica consiste en crear una clase abstracta llamada Matriz, donde pondremos los distintos métodos abstractos de la clase
17
+ Para ello partimos de la clase base Matriz cuya funcion va a ser que sea heredada por las clases hijas ,y creamos dos clases
18
+ hijas que van a ser: clase Matriz Densa ya implementada de la práctica anterior con las operaciones basicas
19
+ correspondientes (+-*/) y clase Matriz Dispersa cuya madre va a ser la clase base Matriz y donde se van a redifinir los metodos de
20
+ la clase madre.
21
+
22
+ class Matriz
23
+
24
+ metodos abstractos
25
+
26
+ end
27
+
28
+ class MatrizDensa < Matriz
29
+
30
+ metodos
31
+
32
+ end
33
+
34
+ class MatrizDispersa < Matriz
35
+
36
+ metodos
37
+
38
+ end
39
+
40
+ En dichas clases hijas se redefiniran los metodos para trabajar con el tipo de matrices indicado.
41
+ ## Installation
42
+
43
+ Add this line to your application's Gemfile:
44
+
45
+ gem 'GemaMatriz'
46
+
47
+ And then execute:
48
+
49
+ $ bundle
50
+
51
+ Or install it yourself as:
52
+
53
+ $ gem install GemaMatriz
54
+
55
+ ## Usage
56
+
57
+ TODO: Write usage instructions here
58
+
59
+ ## Contributing
60
+
61
+ 1. Fork it
62
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
63
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
64
+ 4. Push to the branch (`git push origin my-new-feature`)
65
+ 5. Create new Pull Request
66
+
67
+ ---
68
+
69
+ Universidad de La Laguna
70
+ Escuela Técnica Superior de Ingeniería Informática
71
+ Lenguajes y Paradigmas de la Programación 2013-14
72
+
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+ RSpec::Core::RakeTask.new
4
+ task :default => :spec
@@ -0,0 +1,3 @@
1
+ module GemaMatriz
2
+ VERSION = "0.0.1"
3
+ end
data/lib/GemaMatriz.rb ADDED
@@ -0,0 +1,5 @@
1
+ require "GemaMatriz/version"
2
+
3
+ module GemaMatriz
4
+ require "matriz.rb"
5
+ end
data/lib/gcd.rb ADDED
@@ -0,0 +1,9 @@
1
+ def gcd(u, v) # Calcula el mcd entre dos numeros
2
+ u, v = u.abs, v.abs # Convierte los numeros a valor aboluto
3
+ while v != 0
4
+ u, v = v, u % v
5
+ end
6
+ u #r eturn(u) , el ultimo valor que se indica es el que devuelve
7
+ end
8
+
9
+
data/lib/matriz.rb ADDED
@@ -0,0 +1,293 @@
1
+ # Clase Base Matriz
2
+ class Matriz
3
+ require "./lib/racional.rb"
4
+
5
+ attr_reader :nfil, :ncol, :mat # metodos de acceso (getter)
6
+
7
+ # metodo que inicializa la matriz
8
+
9
+ def initialize(nfil,ncol)
10
+ @nfil = nfil # inicializo numero de filas
11
+ @ncol = ncol # inicializo numero de columnas
12
+ end
13
+ end
14
+
15
+
16
+
17
+ class MatrizDensa < Matriz
18
+
19
+ attr_reader :mat # metodos de acceso (getter)
20
+
21
+ def initialize(nfil,ncol,mat)
22
+ super(nfil, ncol)
23
+ @mat = Array.new(mat) #inicializo la matriz pasando como parametro un objeto de tipo matriz
24
+ end
25
+
26
+ #Funcion que devuelve una posicion i dentro de la matriz
27
+
28
+ def [](i)
29
+ return mat[i]
30
+ end
31
+
32
+
33
+ #Funcion que asigna un valor k a una posicion i,j dentro de la matriz
34
+
35
+ def []=(i, j, k)
36
+ return mat[i][j] = k
37
+ end
38
+
39
+
40
+ def to_s
41
+ cad = " "
42
+ for i in 0...nfil
43
+ cad << " [ "
44
+ for j in 0...ncol
45
+ cad << "#{mat[i][j]} "
46
+ end
47
+ cad << "]"
48
+ cad << "\n "
49
+ end
50
+ return cad
51
+ end
52
+
53
+ # metodo que suma dos matrices (Sobrecarga del operador +)
54
+
55
+ def +(other)
56
+ raise ArgumentError, "Las matrices no son cuadradas." unless @nfil == other.nfil && @ncol == other.ncol
57
+ m = Array.new(@nfil){Array.new(@ncol){0}}
58
+ for i in 0...nfil
59
+ for j in 0...ncol
60
+ m[i][j] = self.mat[i][j]+ other.mat[i][j]
61
+ end
62
+ end
63
+ return MatrizDensa.new(other.nfil,other.ncol,m)
64
+ end
65
+
66
+ # metodo que resta dos matrices (Sobrecarga del operador -)
67
+
68
+ def -(other)
69
+ raise ArgumentError, "Las matrices no son cuadradas." unless @nfil == other.nfil && @ncol == other.ncol
70
+ m = Array.new(@nfil){Array.new(@ncol){0}}
71
+ for i in 0...nfil
72
+ for j in 0...ncol
73
+ m[i][j] = mat[i][j]- other.mat[i][j]
74
+ end
75
+ end
76
+ return MatrizDensa.new(other.nfil,other.ncol,m)
77
+ end
78
+
79
+ # metodo que multiplica dos matrices (Sobrecarga del operador *)
80
+
81
+
82
+ def *(other)
83
+ m = Array.new(@nfil){Array.new(@ncol){0}}
84
+ for i in 0...nfil do
85
+ for j in 0...other.ncol do
86
+ for k in 0...ncol do
87
+ m[i][j] = m[i][j] + self.mat[i][k] * other.mat[k][j]
88
+ end
89
+ end
90
+ end
91
+ return MatrizDensa.new(self.nfil,other.ncol,m)
92
+ end
93
+
94
+ def max
95
+ max=0
96
+ for i in 0...nfil do
97
+ for j in 0...ncol do
98
+ if mat[i][j] > max
99
+ max=mat[i][j]
100
+ end
101
+ end
102
+ end
103
+ return max
104
+ end
105
+
106
+ def min
107
+ min=9999;
108
+ for i in 0...nfil do
109
+ for j in 0...ncol do
110
+ if mat[i][j] < min
111
+ min=mat[i][j]
112
+ end
113
+ end
114
+ end
115
+ return min
116
+ end
117
+ end
118
+
119
+
120
+
121
+
122
+ class MatrizDispersa < Matriz
123
+
124
+ attr_reader:hash , :mat
125
+
126
+ def initialize (nfil, ncol, mat)
127
+ super(nfil, ncol)
128
+ @mat = Array.new(mat)
129
+ nceros = 0 # numero de elementos nulos de la matriz (0)
130
+ nelementos= (nfil * ncol)*0.6 # elementos de la matriz aplicado el 60 %
131
+ psincero = 0 # posiciones de los elementos de la matriz cuyo valor no es nulo (0)
132
+ @hash = Hash.new(0)
133
+ for i in 0...nfil do
134
+ for j in 0...ncol do
135
+ if (mat[i][j]==0)
136
+ nceros=nceros+1
137
+ else
138
+ psincero="[#{i}][#{j}]"
139
+ if (mat[i][j].is_a?Fraccion)
140
+ a = mat[i][j].num
141
+ b = mat[i][j].denom
142
+ @hash[psincero] = Rational(a,b)
143
+ #cad = " "
144
+ #cad << "#{a}"
145
+ #cad << "/"
146
+ #cad << "#{b}"
147
+ #@hash[psincero] = cad
148
+ else
149
+ @hash[psincero] = mat[i][j]
150
+ end
151
+ end
152
+ end
153
+ end
154
+ if nceros >= nelementos # compruebo que la matriz sea dispersa
155
+ #puts "La matriz es dispersa"
156
+ else
157
+ raise ArgumentError, 'La Matriz no es dispersa'
158
+ end
159
+ end
160
+
161
+ def to_s
162
+ if (hash.values != nil)
163
+ cad = ""
164
+ cad << "#{hash}"
165
+ return cad
166
+ else
167
+ return 0
168
+ end
169
+ #return hash
170
+ end
171
+
172
+ def +(other)
173
+
174
+ case other
175
+ when MatrizDensa
176
+ other.+(self)
177
+ when MatrizDispersa
178
+ raise ArgumentError, "Las matrices no son cuadradas." unless @nfil == other.nfil && @ncol == other.ncol
179
+ suma = MatrizDispersa.new(nfil,ncol,0)
180
+ suma = hash.merge(other.hash){|key,oldval,newval| oldval+newval }
181
+ return suma # devuelve un objeto de tipo Matriz Dispersa
182
+ else
183
+ raise TypeError, "La matriz no es dispersa ni densa" unless other.instance_of? MatrizDispersa
184
+ end
185
+
186
+
187
+ end
188
+
189
+ def -(other)
190
+ case other
191
+ when MatrizDensa
192
+ other.-(self)
193
+ when MatrizDispersa
194
+ raise ArgumentError, "Las matrices no son cuadradas." unless @nfil == other.nfil && @ncol == other.ncol
195
+ resta = MatrizDispersa.new(nfil,ncol,0)
196
+ resta = hash.merge(other.hash){|key,oldval,newval| oldval-newval}
197
+ return resta # devuelve un objeto de tipo Matriz Dispersa
198
+ else
199
+ raise TypeError, "La matriz no es dispersa ni densa " unless other.instance_of? MatrizDispersa
200
+ end
201
+
202
+ end
203
+
204
+ def max
205
+ max = 0
206
+ hash.each do |clave,valor|
207
+ if (valor > max)
208
+ max=valor
209
+ end
210
+ end
211
+ return max
212
+ end
213
+
214
+ def min
215
+ min = 9999
216
+ hash.each do |clave,valor|
217
+ if (valor < min)
218
+ min=valor
219
+ end
220
+ end
221
+ return min
222
+ end
223
+ end
224
+
225
+ frac1 = Fraccion.new(5,3)
226
+ frac2 = Fraccion.new(4,9)
227
+ m1 = MatrizDensa.new(3,3,[[1,2,0],[3,4,0],[0,2,3]])
228
+ m2 = MatrizDensa.new(3,3,[[7,10,5],[15,22,3],[2,3,4]])
229
+ m3 = MatrizDensa.new(3,3,[[frac1,frac2,frac1],[frac1,frac2,frac1],[frac2,frac2,frac1]])
230
+ m4 = MatrizDispersa.new(3,3,[[0,0,10],[5,0,0],[0,0,40]])
231
+ m5 = MatrizDispersa.new(3,3,[[0,0,4],[3,0,0],[0,0,2]])
232
+ m6 = MatrizDispersa.new(3,3,[[0,0,frac1],[frac2,0,0],[0,0,frac1]])
233
+ #puts 4-frac2 # Tiene que estar implementado el coerce para que funcione
234
+ #puts frac2-4
235
+ #puts 1+frac2
236
+ #puts m1.to_s
237
+ #puts m3.to_s
238
+ #puts m4.to_s
239
+ #puts m5.to_s
240
+ #puts m6.to_s
241
+ #print
242
+ =begin
243
+ puts " Matrices Densas "
244
+ puts " M1 "
245
+ puts m1.to_s
246
+ puts " M2 "
247
+ puts m2.to_s
248
+ puts " M3 "
249
+ puts m3.to_s
250
+ puts " (M1+M3)"
251
+ puts m1+m3
252
+ puts " (M1-M3)"
253
+ puts m1-m3
254
+ puts " (M1*M3)"
255
+ puts m1*m3
256
+ puts " Matrices Dispersas "
257
+ puts " M4 "
258
+ m4.to_s
259
+ puts " M5 "
260
+ m5.to_s
261
+ puts
262
+ puts " (M4+M5)"
263
+ puts m4+m5 # Matriz Dispersa - Matriz Dispersa = Matriz Dispersa
264
+ puts
265
+ puts " (M4-M5)"
266
+ puts m4-m5 # Matriz Dispersa + Matriz Dispersa = Matriz Dispersa
267
+ puts " El valor maximo de la matriz M2(densa) es #{m2.max}"
268
+ puts " El valor minimo de la matriz M2(densa) es #{m2.min}"
269
+ puts " El valor maximo de la matriz M4(dispersa) es #{m4.max}"
270
+ puts " El valor minimo de la matriz M4(dispersa) es #{m4.min}"
271
+ =end
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
data/lib/racional.rb ADDED
@@ -0,0 +1,116 @@
1
+ require "./lib/gcd.rb"
2
+ class Fraccion
3
+
4
+ include Comparable # Se incluye el modulo de nombre "comparable" utilizado para el operador <=>.
5
+
6
+ attr_reader :num, :denom # metodos de acceso (getter)
7
+
8
+ def initialize(num,denom)
9
+
10
+ # Se encarga de comprobar que los datos sean numericos, si no lo son lanza una excepcion y sale del programa
11
+
12
+ raise ArgumentError, 'El argumento no es numerico' unless num.is_a? Numeric
13
+ raise ArgumentError, 'El argumento no es numerico' unless denom.is_a? Numeric
14
+ if (denom == 0)
15
+ raise ArgumentError, 'El argumento no puede valer 0' unless (denom !=0)
16
+ end
17
+ aux = gcd(num,denom)
18
+ @num = num/aux # numerador en su forma simplificada
19
+ @denom= denom/aux # denominador en su forma simplificada
20
+ end
21
+
22
+
23
+
24
+ # metodo que muestra la fraccion con formato de salida: a/b
25
+
26
+ def to_s
27
+ "#{@num}/#{@denom}"
28
+ end
29
+
30
+
31
+ # metodo que calcula la suma de dos fracciones
32
+
33
+ def +(other)
34
+ if other.is_a? Fraccion
35
+ if (@denom == other.denom) #si los denominadores son iguales
36
+ Fraccion.new(@num + other.num, @denom)
37
+ else #si los denominadores son distintos
38
+ aux3 = ((@denom/gcd(@denom,other.denom)) * other.denom) # Calculo del mcm usando la propiedad (a*b/mcd(a,b))
39
+ aux = ((aux3/@denom) * @num) # calculo del numerador de la primera fraccion
40
+ aux2 = ((aux3/other.denom) * other.num) # calculo del denominador de la segunda fraccion
41
+ Fraccion.new((aux+aux2),aux3)
42
+ end
43
+ else
44
+ tmp = Fraccion.new(other,1)
45
+ if (@denom == tmp.denom) #si los denominadores son iguales
46
+ Fraccion.new(@num + other.num, @denom)
47
+ else #si los denominadores son distintos
48
+ aux3 = ((@denom/gcd(@denom,tmp.denom)) * tmp.denom) # Calculo del mcm usando la propiedad (a*b/mcd(a,b))
49
+ aux = ((aux3/@denom) * @num) # calculo del numerador de la primera fraccion
50
+ aux2 = ((aux3/tmp.denom) * tmp.num) # calculo del denominador de la segunda fraccion
51
+ Fraccion.new((aux+aux2),aux3)
52
+ end
53
+ end
54
+ end
55
+
56
+ # metodo que calcula la resta de dos fracciones
57
+
58
+ def -(other)
59
+ if other.is_a? Fraccion
60
+ if (@denom == other.denom) #si los denominadores son iguales
61
+ Fraccion.new(@num - other.num, @denom)
62
+ else # si los denominadores son distintos
63
+ aux3 = ((@denom/gcd(@denom,other.denom)) * other.denom) # Calculo del mcm usando la propiedad (a*b/mcd(a,b))
64
+ aux = ((aux3/@denom) * @num) # calculo del numerador de la primera fraccion
65
+ aux2 = ((aux3/other.denom) * other.num) # calculo del denominador de la segunda fraccion
66
+ Fraccion.new((aux-aux2),aux3)
67
+ end
68
+ else
69
+ tmp = Fraccion.new(other,1)
70
+ if (@denom == tmp.denom) #si los denominadores son iguales
71
+ Fraccion.new(@num + other.num, @denom)
72
+ else #si los denominadores son distintos
73
+ aux3 = ((@denom/gcd(@denom,tmp.denom)) * tmp.denom) # Calculo del mcm usando la propiedad (a*b/mcd(a,b))
74
+ aux = ((aux3/@denom) * @num) # calculo del numerador de la primera fraccion
75
+ aux2 = ((aux3/tmp.denom) * tmp.num) # calculo del denominador de la segunda fraccion
76
+ Fraccion.new((aux-aux2),aux3)
77
+ end
78
+ end
79
+ end
80
+
81
+ # metodo que calcula el producto de dos fracciones
82
+
83
+ def *(other)
84
+ Fraccion.new(@num*other.num,@denom*other.denom)
85
+ end
86
+
87
+ # metodo que calcula la division de dos fracciones
88
+
89
+ def /(other)
90
+ Fraccion.new(@num*other.denom,@denom*other.num)
91
+ end
92
+
93
+ # método que contempla el uso del modulo comparable <, >, <= y >=
94
+
95
+ def <=>(other)
96
+ return nil unless other.instance_of? Fraccion
97
+ # self.to_f <=> other.to_f
98
+ @num.to_f/@denom <=> other.num.to_f/other.denom
99
+ end
100
+
101
+ def coerce(other)
102
+ [Fraccion.new(other,1),self]
103
+ end
104
+
105
+ end
106
+
107
+ =begin
108
+ def coerce(other)
109
+ return [self,other]
110
+ end
111
+ =end
112
+
113
+
114
+
115
+
116
+
@@ -0,0 +1,160 @@
1
+ require "./lib/matriz.rb"
2
+ #require "matriz.rb"
3
+
4
+ describe Matriz do
5
+ before :each do
6
+ @m1 = Matriz.new(3,3)
7
+ @m1densa = MatrizDensa.new(3,3,[[1,2,0],[3,4,0],[0,2,3]])
8
+ @m2densa = MatrizDensa.new(3,3,[[7,10,5],[15,22,3],[2,3,4]])
9
+ frac1 = Fraccion.new(1,3)
10
+ frac2 = Fraccion.new(1,4)
11
+ @m3densa = MatrizDensa.new(3,3,[[frac1,frac2,frac1],[frac1,frac2,frac1],[frac2,frac2,frac1]])
12
+ @m4dispersa = MatrizDispersa.new(3,3,[[0,0,3],[5,0,0],[0,0,2]])
13
+ @m5dispersa = MatrizDispersa.new(3,3,[[0,0,4],[3,0,0],[0,0,2]])
14
+ @m6dispersa = MatrizDispersa.new(3,3,[[0,0,frac1],[frac2,0,0],[0,0,frac1]])
15
+ end
16
+
17
+ describe "Se comprueba el numero de:" do
18
+ it "filas de la matriz" do
19
+ @m1.nfil.should eq(3)
20
+ end
21
+ it "columnas de la matriz" do
22
+ @m1.ncol.should eq(3)
23
+ end
24
+ end
25
+
26
+
27
+
28
+ describe "se debe comprobar si la " do
29
+ it " matriz es densa" do
30
+ (@m1densa.instance_of? MatrizDensa).should be_true
31
+ end
32
+ it "matriz dispersa" do
33
+ (@m6dispersa.instance_of? MatrizDispersa).should be_true
34
+ end
35
+ end
36
+
37
+
38
+
39
+ describe "se debe comprobar si la matriz ;" do
40
+ it " densa accede al subindice [0,0]" do
41
+ @m1densa.mat[0][0].should eq(1)
42
+ end
43
+ it "densa accede al subindice [0,1]" do
44
+ @m1densa.mat[0][1].should eq(2)
45
+ end
46
+ it "dispersa accede al subindice[1,0]" do
47
+ @m4dispersa.mat[1][0].should eq(5)
48
+ end
49
+ it "dispersa accede al subindice[2,2]" do
50
+ @m4dispersa.mat[2][2].should eq(2)
51
+ end
52
+ end
53
+
54
+ describe "se debe mostrar la " do
55
+
56
+ it " matriz densa con enteros" do
57
+ @m2densa.to_s.should eq(" [ 7 10 5 ]\n [ 15 22 3 ]\n [ 2 3 4 ]\n ")
58
+ end
59
+ it " matriz densa con racionales" do
60
+ @m3densa.to_s.should eq(" [ 1/3 1/4 1/3 ]\n [ 1/3 1/4 1/3 ]\n [ 1/4 1/4 1/3 ]\n ")
61
+ end
62
+ it "matriz dispersa con enteros" do
63
+ @m4dispersa.to_s.should eq ("{\"[0][2]\"=>3, \"[1][0]\"=>5, \"[2][2]\"=>2}")
64
+ end
65
+
66
+ it "matriz dispersa con racionales" do
67
+ @m6dispersa.to_s.should eq ("{\"[0][2]\"=>(1/3), \"[1][0]\"=>(1/4), \"[2][2]\"=>(1/3)}")
68
+ end
69
+
70
+ end
71
+
72
+ describe "se debe " do
73
+
74
+ it " sumar dos matrices densas con enteros" do
75
+ sum = @m1densa+@m2densa
76
+ sum.to_s.should eq(" [ 8 12 5 ]\n [ 18 26 3 ]\n [ 2 5 7 ]\n ")
77
+ end
78
+ it " restar una matriz densa de enteros con otra matriz densa de racionales" do
79
+ res = @m1densa-@m3densa
80
+ res.to_s.should eq(" [ 2/3 7/4 -1/3 ]\n [ 8/3 15/4 -1/3 ]\n [ -1/4 7/4 8/3 ]\n ")
81
+ end
82
+
83
+ it " multiplicar una matriz densa con otra matriz densa" do
84
+ mul = @m1densa*@m2densa
85
+ mul.to_s.should eq(" [ 37 54 11 ]\n [ 81 118 27 ]\n [ 36 53 18 ]\n ")
86
+ end
87
+
88
+ it "calcular el maximo de una matriz Densa " do
89
+ max = @m2densa.max
90
+ max.should eq 22
91
+ end
92
+
93
+ it "calcular el minimo de una matriz Densa" do
94
+ min = @m2densa.min
95
+ min.should eq 2
96
+ end
97
+
98
+
99
+ end
100
+
101
+
102
+
103
+
104
+ describe "se debe " do
105
+
106
+ it " sumar dos matrices dispersas con enteros " do
107
+ sum = @m4dispersa+@m5dispersa
108
+ sum.to_s.should eq("{\"[0][2]\"=>7, \"[1][0]\"=>8, \"[2][2]\"=>4}")
109
+
110
+ end
111
+
112
+ it " restar dos matrices dispersas con enteros " do
113
+ res = @m4dispersa-@m5dispersa
114
+ res.to_s.should eq("{\"[0][2]\"=>-1, \"[1][0]\"=>2, \"[2][2]\"=>0}")
115
+ end
116
+
117
+ it " sumar una matriz dispersa de enteros con otra matriz dispersa de racionales" do
118
+ sum = @m4dispersa+@m6dispersa
119
+ sum.to_s.should eq("{\"[0][2]\"=>(10/3), \"[1][0]\"=>(21/4), \"[2][2]\"=>(7/3)}")
120
+ end
121
+
122
+ it " restar una matriz dispersa de enteros con otra matriz dispersa de racionales" do
123
+ res = @m4dispersa-@m6dispersa
124
+ res.to_s.should eq("{\"[0][2]\"=>(8/3), \"[1][0]\"=>(19/4), \"[2][2]\"=>(5/3)}")
125
+
126
+ end
127
+
128
+ it "calcular el maximo de una matriz Dispersa " do
129
+ max = @m4dispersa.max
130
+ max.should eq 5
131
+ end
132
+
133
+ it "calcular el minimo de una matriz Dispersa" do
134
+ min = @m4dispersa.min
135
+ min.should eq 2
136
+ end
137
+
138
+
139
+
140
+ end
141
+
142
+ describe "se debe " do
143
+
144
+ it " sumar una matriz densa con una dispersa " do
145
+ sum = @m1densa+@m5dispersa
146
+ sum.to_s.should eq(" [ 1 2 4 ]\n [ 6 4 0 ]\n [ 0 2 5 ]\n ")
147
+
148
+
149
+ end
150
+ it " restar una matriz dispersa con una densa" do
151
+ res = @m5dispersa-@m1densa
152
+ res.to_s.should eq(" [ 1 2 -4 ]\n [ 0 4 0 ]\n [ 0 2 1 ]\n ")
153
+ end
154
+
155
+ end
156
+
157
+ end
158
+
159
+
160
+
@@ -0,0 +1,8 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../lib'
2
+ require 'GemaMatriz'
3
+
4
+ RSpec.configure do |config|
5
+ config.treat_symbols_as_metadata_keys_with_true_values = true
6
+ config.run_all_when_everything_filtered = true
7
+ config.filter_run :focus
8
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: GemaMatriz
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Rushil Lakhani Lakhani & Waldo Nazco Torres
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-26 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
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Construcción de una gema ruby para la creación de matrices dispersas
98
+ y densas
99
+ email:
100
+ - alu0100537031@ull.edu.es
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - .gitignore
106
+ - .rspec
107
+ - .travis.yml
108
+ - GemaMatriz.gemspec
109
+ - Gemfile
110
+ - Guardfile
111
+ - LICENSE.txt
112
+ - README.md
113
+ - Rakefile
114
+ - lib/GemaMatriz.rb
115
+ - lib/GemaMatriz/version.rb
116
+ - lib/gcd.rb
117
+ - lib/matriz.rb
118
+ - lib/racional.rb
119
+ - spec/matriz_spec.rb
120
+ - spec/spec_helper.rb
121
+ homepage: https://github.com/alu0100537031/prct09
122
+ licenses:
123
+ - MIT
124
+ metadata: {}
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ requirements: []
140
+ rubyforge_project:
141
+ rubygems_version: 2.0.3
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Practica 9
145
+ test_files:
146
+ - spec/matriz_spec.rb
147
+ - spec/spec_helper.rb