lpp_t_04_matrix 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -104,3 +104,5 @@ Or install it yourself as:
104
104
  3. Commit your changes (`git commit -am 'Add some feature'`)
105
105
  4. Push to the branch (`git push origin my-new-feature`)
106
106
  5. Create new Pull Request
107
+
108
+ [![Build Status](https://travis-ci.org/LPP-T-04/prct09.png?branch=master)](https://travis-ci.org/LPP-T-04/prct09)
@@ -1,29 +1,67 @@
1
+ # == Fichero que contiene la gema para el trabajo con matrices.
2
+ #
3
+ # Operacion con matrices densas y dispersas.
4
+ #
5
+ # Authors: Eliezer Cruz Suarez, Carlos Barreda Falciano
6
+ #
7
+ # Email: alu0100611298@ull.edu.es, alu0100596113@ull.edu.es
8
+ #
1
9
  require "lpp_t_04_matrix/version"
2
10
 
3
- module LppT04Matrix # Clase Abstracta Matriz
4
- class Matriz
5
- attr_accessor :filas, :columnas # Contructor de la clase Matriz
6
- def initialize (filas, columnas)
11
+ # == Modulo que contiene la gema para el trabajo con matrices.
12
+ #
13
+ # Operacion con matrices densas y dispersas.
14
+ #
15
+ # Authors: Eliezer Cruz Suarez, Carlos Barreda Falciano
16
+ #
17
+ # Email: alu0100611298@ull.edu.es, alu0100596113@ull.edu.es
18
+ #
19
+ # Para realizacion de esta practica se ha creado una jerarquia de clases.
20
+ # Teniendo en cuenta que tenemos una clase abstracta de nombre Matriz, y de la cual han heredado las otras dos clases que definen el tipo de objetos que tenemos, MatrizDensa y MatrizDispersa, se han implementado los metodos para operar con ambos tipos de matrices, sin importar que objeto sea.
21
+ # Además se ha incluido el tratamiento de fracciones desarrollado en la practica anterior con la idea de que la matriz sea capaz de operar con elementos del tipo Franction. Los metodos implemnetados son:
22
+ #
23
+ # * Suma.
24
+ # * Resta.
25
+ # * Multiplicacion.
26
+ # * Traspuesta.
27
+ #
28
+ module LppT04Matrix
29
+
30
+ # Clase Abstracta Matriz
31
+ class Matriz # Clase Abstracta Matriz
32
+ # Variable que guarda el numero de filas y columnas de la matriz.
33
+ attr_accessor :filas, :columnas
34
+ # Contructor de la clase Matriz
35
+ def initialize (filas, columnas) # Contructor de la clase Matriz
36
+ # Variable que guarda el numero de filas de la matriz.
7
37
  @filas = filas
38
+ # Variable que guarda el numero de columnas de la matriz.
8
39
  @columnas = columnas
9
40
  end
10
41
  end
11
42
 
43
+ # Clase Matriz Densa hereda de Matriz
12
44
  class MatrizDensa < Matriz # Clase Matriz Densa hereda de Matriz
45
+ # Vector en el que se almacena el valor de los elementos de la matriz.
13
46
  attr_accessor :elemento
14
- def initialize (filas, columnas, elemento) # Contructor de la clase Matriz
47
+ # Contructor de la clase MatrizDensa
48
+ def initialize (filas, columnas, elemento) # Contructor de la clase MatrizDensa
15
49
  super(filas, columnas)
50
+ # Vector en el que se almacena el valor de los elementos de la matriz.
16
51
  @elemento = elemento
17
52
  end
18
53
 
54
+ # Metodo de acceso a la matriz
19
55
  def [](i) # Metodo de acceso a la matriz
20
56
  @elemento[i]
21
57
  end
22
58
 
23
- def indice(i,j) #Devuelve el valor del indice i j
59
+ # Devuelve el valor del indice i j
60
+ def indice(i,j) # Devuelve el valor del indice i j
24
61
  @elemento[i][j]
25
62
  end
26
63
 
64
+ # Convierte la fraccion a una cadena
27
65
  def to_s # Convierte la fraccion a una cadena
28
66
  imprimir = ""
29
67
  @filas.times do |i|
@@ -35,7 +73,8 @@ module LppT04Matrix # Clase Abstracta Matriz
35
73
  imprimir
36
74
  end
37
75
 
38
- def +(other) #Suma dos Fracciones se le pasa un tipo fraccion.
76
+ # Suma dos Fracciones se le pasa un tipo fraccion.
77
+ def +(other) # Suma dos Fracciones se le pasa un tipo fraccion.
39
78
  raise ArgumentError, "La longitud de las matrices no coincide." unless @filas == other.filas && @columnas == other.columnas
40
79
  elemento = Array.new
41
80
  @filas.times do |i|
@@ -48,7 +87,8 @@ module LppT04Matrix # Clase Abstracta Matriz
48
87
  MatrizDensa.new(@filas, @columnas,elemento)
49
88
  end
50
89
 
51
- def -(other)# Resta dos Fracciones se le pasa un tipo fraccion.
90
+ # Resta dos Fracciones se le pasa un tipo fraccion.
91
+ def -(other) # Resta dos Fracciones se le pasa un tipo fraccion.
52
92
  raise ArgumentError, "La longitud de las matrices no coincide." unless @filas == other.filas && @columnas == other.columnas
53
93
  elemento = Array.new
54
94
  @filas.times do |i|
@@ -61,6 +101,7 @@ module LppT04Matrix # Clase Abstracta Matriz
61
101
  MatrizDensa.new(@filas, @columnas,elemento)
62
102
  end
63
103
 
104
+ # Multiplica dos Fracciones se le pasa un tipo fraccion.
64
105
  def *(other) # Multiplica dos Fracciones se le pasa un tipo fraccion.
65
106
  raise ArgumentError, "La longitud de las matrices no coincide." unless @columnas == other.filas
66
107
  elemento = Array.new
@@ -80,17 +121,20 @@ module LppT04Matrix # Clase Abstracta Matriz
80
121
  MatrizDensa.new(@filas, other.columnas, elemento)
81
122
  end
82
123
 
124
+ # Devuelve la trasuesta de una Matriz
83
125
  def traspuesta # Devuelve la trasuesta de una Matriz
84
126
  elemento = Array.new
85
- @columnas.times do |i|
127
+ 0.upto(@columnas - 1) do |i|
86
128
  elemento_fila = Array.new
87
- @filas.times do |j|
129
+ 0.upto(@filas - 1) do |j|
88
130
  elemento_fila << @elemento[j][i]
89
131
  end
90
132
  elemento << elemento_fila
91
133
  end
92
134
  MatrizDensa.new(@columnas, @filas, elemento)
93
135
  end
136
+
137
+ # Devuelve el valor maximo
94
138
  def maximo # Devuelve el valor maximo
95
139
  aux = @elemento[0][0]
96
140
  @columnas.times do |i|
@@ -100,6 +144,8 @@ module LppT04Matrix # Clase Abstracta Matriz
100
144
  end
101
145
  aux
102
146
  end
147
+
148
+ # Devuelve el valor minimo.
103
149
  def minimo # Devuelve el valor minimo.
104
150
  aux = @elemento[0][0]
105
151
  @columnas.times do |i|
@@ -111,18 +157,24 @@ module LppT04Matrix # Clase Abstracta Matriz
111
157
  end
112
158
  end
113
159
 
114
-
115
- class MatrizDispersa < Matriz # Clase Matriz Dispersa hereda de Matriz
160
+ # Clase Matriz Dispersa hereda de Matriz
161
+ class MatrizDispersa < Matriz # Clase Matriz Dispersa hereda de Matriz.
162
+ # Hash de hashes que guarda los elementos de la matriz por filas y columnas.
116
163
  attr_accessor :elemento
117
- def initialize (filas, columnas, elemento)
164
+ # Contructor de la clase MatrizDispersa
165
+ def initialize (filas, columnas, elemento) # Contructor de la clase Matriz.
118
166
  super(filas, columnas)
167
+ # Hash de hashes que guarda los elementos de la matriz por filas y columnas.
119
168
  @elemento = elemento
120
169
  end
121
170
 
122
- def [](i) # Metodo de acceso a la matriz
171
+ # Metodo de acceso a la matriz.
172
+ def [](i) # Metodo de acceso a la matriz.
123
173
  @elemento[i]
124
174
  end
125
- def indice(i,j) #Devuelve el valor del indice i j
175
+
176
+ # Devuelve el valor del indice i j
177
+ def indice(i,j) # Devuelve el valor del indice i j
126
178
  elemento = @elemento.fetch(i,0)
127
179
  if elemento!= 0
128
180
  elemento.fetch(j,0)
@@ -131,11 +183,13 @@ module LppT04Matrix # Clase Abstracta Matriz
131
183
  end
132
184
  end
133
185
 
186
+ # Convierte la fraccion a una cadena
134
187
  def to_s # Convierte la fraccion a una cadena
135
188
  @elemento
136
189
  end
137
190
 
138
- def +(other) #Suma dos Fracciones se le pasa un tipo fraccion.
191
+ # Suma dos Fracciones se le pasa un tipo fraccion.
192
+ def +(other) # Suma dos Fracciones se le pasa un tipo fraccion.
139
193
  raise ArgumentError, "La longitud de las matrices no coincide." unless @filas == other.filas && @columnas == other.columnas
140
194
  case other
141
195
  when MatrizDensa
@@ -148,6 +202,7 @@ module LppT04Matrix # Clase Abstracta Matriz
148
202
  end
149
203
  end
150
204
 
205
+ # Resta dos Fracciones se le pasa un tipo fraccion.
151
206
  def -(other) # Resta dos Fracciones se le pasa un tipo fraccion.
152
207
  raise ArgumentError, "La longitud de las matrices no coincide." unless @filas == other.filas && @columnas == other.columnas
153
208
  case other
@@ -161,6 +216,7 @@ module LppT04Matrix # Clase Abstracta Matriz
161
216
  end
162
217
  end
163
218
 
219
+ # Multiplica dos Fracciones se le pasa un tipo fraccion.
164
220
  def *(other) # Multiplica dos Fracciones se le pasa un tipo fraccion.
165
221
  raise ArgumentError, "La longitud de las matrices no coincide." unless @columnas == other.filas
166
222
  case other
@@ -194,6 +250,7 @@ module LppT04Matrix # Clase Abstracta Matriz
194
250
  end
195
251
  end
196
252
 
253
+ # Devuelve la trasuesta de una Matriz
197
254
  def traspuesta # Devuelve la trasuesta de una Matriz
198
255
  elemento = Hash.new(Hash.new())
199
256
  @elemento.each {
@@ -206,6 +263,8 @@ module LppT04Matrix # Clase Abstracta Matriz
206
263
  elemento
207
264
  MatrizDispersa.new(@filas, @columnas, elemento)
208
265
  end
266
+
267
+ # Devuelve el valor maximo
209
268
  def maximo # Devuelve el valor maximo
210
269
  aux = @elemento.keys
211
270
  aux1 = aux[0]
@@ -219,6 +278,8 @@ module LppT04Matrix # Clase Abstracta Matriz
219
278
  }
220
279
  mayor
221
280
  end
281
+
282
+ # Devuelve el valor minimo.
222
283
  def minimo # Devuelve el valor minimo.
223
284
  aux = @elemento.keys
224
285
  aux1 = aux[0]
@@ -235,25 +296,32 @@ module LppT04Matrix # Clase Abstracta Matriz
235
296
  end
236
297
  end
237
298
 
299
+ # Clase para el trabajo con fracciones.
238
300
  class Frac
301
+ # Se definen set y get para acceder a las variables de la clase.
239
302
  attr_reader :numerador, :denominador # Se definen set y get para acceder a las variables de la clase.
303
+ # Se incluye el modulo de nombre "comparable" utilizado para el operador <=>.
240
304
  include Comparable # Se incluye el modulo de nombre "comparable" utilizado para el operador <=>.
241
305
 
306
+ # Se define el constructor.
242
307
  def initialize(numerador, denominador) # Se define el constructor.
243
308
  mcd = gcd(numerador,denominador)
244
309
  @numerador , @denominador = numerador/mcd, denominador/mcd
245
310
  end
246
311
 
312
+ # Devuelve el numerador.
247
313
  def num() # Devuelve el numerador.
248
314
  @numerador
249
315
  end
250
316
 
317
+ # Devuelve el denominador.
251
318
  def denom() # Devuelve el denominador.
252
319
  @denominador
253
320
  end
254
321
 
322
+ # Si el denominador es 1, solo se imprimer el numerador
255
323
  def to_s
256
- if @denominador == 1 #Si el denominador es 1, solo se imprimer el numerador
324
+ if @denominador == 1 # Si el denominador es 1, solo se imprimer el numerador
257
325
  "#{@numerador}"
258
326
  elsif @denominador == -1 #En el caso de que b=-1 y a>0 ó a=-1
259
327
  if @numerador>0 || @numerador==-1
@@ -272,14 +340,17 @@ class Frac
272
340
  end
273
341
  end
274
342
 
343
+ # Imprime el resultado de la fraccion como un float.
275
344
  def to_f() # Imprime el resultado de la fraccion como un float.
276
345
  @numerador.to_f/@denominador
277
346
  end
278
347
 
348
+ # Se define el operador <=> para el modulo comparable.
279
349
  def <=>(other) # Se define el operador <=> para el modulo comparable.
280
350
  @numerador.to_f/@denominador <=> other.numerador.to_f/other.denominador
281
351
  end
282
352
 
353
+ # Se calcula el valor absoluto de una fraccion.
283
354
  def abs() # Se calcula el valor absoluto de una fraccion.
284
355
  if (@numerador > 0 && @denominador > 0)
285
356
  Frac.new(@numerador, @denominador).to_s
@@ -292,10 +363,12 @@ class Frac
292
363
  end
293
364
  end
294
365
 
366
+ # Calcula el reciproco de una fraccion.
295
367
  def reciprocal() # Calcula el reciproco de una fraccion.
296
368
  Frac.new(@denominador, @numerador)
297
369
  end
298
370
 
371
+ # Calcula la suma de dos fracciones.
299
372
  def +(other) # Calcula la suma de dos fracciones.
300
373
  if other.class == Frac
301
374
  Frac.new(@numerador*other.denominador + other.numerador*@denominador , @denominador*other.denominador)
@@ -305,6 +378,7 @@ class Frac
305
378
 
306
379
  end
307
380
 
381
+ # Calcula la resta de dos fracciones.
308
382
  def -(other) # Calcula la resta de dos fracciones.
309
383
  if (other.class == Frac)
310
384
  Frac.new(@numerador*other.denominador - other.numerador*@denominador , @denominador*other.denominador)
@@ -313,6 +387,7 @@ class Frac
313
387
  end
314
388
  end
315
389
 
390
+ # Calcula la multiplicacion de dos fracciones.
316
391
  def *(other) # Calcula la multiplicacion de dos fracciones.
317
392
  if other.class == Frac
318
393
  Frac.new(@numerador * other.numerador, @denominador * other.denominador)
@@ -321,55 +396,28 @@ class Frac
321
396
  end
322
397
  end
323
398
 
399
+ # Calcula la division de dos fracciones.
324
400
  def /(other) # Calcula la division de dos fracciones.
325
401
  Frac.new(@numerador * other.denominador, @denominador * other.numerador)
326
402
  end
327
403
 
404
+ # Calcula el resto al dividir dos fracciones (modulo)
328
405
  def %(other) # Calcula el resto al dividir dos fracciones (modulo)
329
406
  result = self./(other)
330
407
  result = (result.numerador%result.denominador).to_i
331
408
  end
332
409
 
333
- def coerce(other)
410
+ # Se define el metodo coerce para operar enteros con fracciones.
411
+ def coerce(other) # Se define el metodo coerce para operar enteros con fracciones.
334
412
  [self,other]
335
413
  end
336
- end
337
414
 
338
- def gcd(u, v)
339
- u, v = u.abs, v.abs
340
- while v != 0
341
- u, v = v, u % v
342
- end
343
- u
415
+ # Metodo que calculo el maximo comun divisor de dos numeros.
416
+ def gcd(u, v) # Metedo que calculo el maximo comun divisor de dos numeros.
417
+ u, v = u.abs, v.abs
418
+ while v != 0
419
+ u, v = v, u % v
420
+ end
421
+ u
422
+ end
344
423
  end
345
-
346
- if __FILE__ == $0
347
- # Trabajo con la clase:
348
- include LppT04Matrix
349
-
350
- m1 = MatrizDensa.new(2,2,[[1,2],[3,4]])
351
- m2 = MatrizDispersa.new(2, 2, {0 => {0 => 1, 1 => 2}, 1 => {0 => 3, 1 => 4}})
352
- m3 = MatrizDensa.new(2,2,[[7,10],[15,22]])
353
- m4 = MatrizDispersa.new(2, 2, {0 => {0 => Frac.new(1,2), 1 => Frac.new(1,2)}, 1 => {0 => Frac.new(1,2), 1 => Frac.new(1,2)}})
354
- a = Frac.new(1,2)
355
- b = Frac.new(2,2)
356
- c = Frac.new(3,2)
357
- d = Frac.new(4,2)
358
- e = Frac.new(3,2)
359
- f = Frac.new(9,2)
360
- g = Frac.new(3,1)
361
- h = Frac.new(6,1)
362
- m9 = MatrizDensa.new(2,2,[[a,b],[c,d]])
363
- m10 = MatrizDensa.new(2,2,[[e,3],[f,6]])
364
- puts m9-(m1)
365
- puts
366
- puts m1-(m9)
367
- puts
368
- puts m4.to_s
369
- puts m4*m1
370
- puts m1*m4
371
- puts m1*m1
372
- puts (m2*m4).to_s
373
- puts (m4*m2).to_s
374
- puts m1
375
- end
@@ -1,3 +1,3 @@
1
1
  module LppT04Matrix
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -6,8 +6,8 @@ require 'lpp_t_04_matrix/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "lpp_t_04_matrix"
8
8
  spec.version = LppT04Matrix::VERSION
9
- spec.authors = ["EliezerCruzSuarez"]
10
- spec.email = ["alu0100611298@ull.edu.es"]
9
+ spec.authors = ["Eliezer Cruz Suarez, Carlos Barreda Falciano"]
10
+ spec.email = ["alu0100611298@ull.edu.es, alu0100596113"]
11
11
  spec.description = %q{Para realizacion de esta practica se ha creado una jerarquia de clases.
12
12
  Teniendo en cuenta que tenemos una clase abstracta de nombre Matriz, y de la cual han heredado las
13
13
  otras dos clases que definen el tipo de objetos que tenemos, MatrizDensa y MatrizDispersa, se han
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lpp_t_04_matrix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - EliezerCruzSuarez
8
+ - Eliezer Cruz Suarez, Carlos Barreda Falciano
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-20 00:00:00.000000000 Z
12
+ date: 2013-11-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -68,7 +68,7 @@ description: ! "Para realizacion de esta practica se ha creado una jerarquia de
68
68
  la idea\n de que la matriz sea capaz de operar con elementos del tipo Franction.
69
69
  Los metodos implemnetados son: \n suma, resta, multiplicacion y traspuesta."
70
70
  email:
71
- - alu0100611298@ull.edu.es
71
+ - alu0100611298@ull.edu.es, alu0100596113
72
72
  executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []