matrizdispersascp 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 +10 -0
- data/Gemfile +4 -0
- data/Guardfile +8 -0
- data/LICENSE.txt +22 -0
- data/README.md +43 -0
- data/Rakefile +1 -0
- data/bin/matrizdispersa.rb +46 -0
- data/bin/matrizdispersa.rb~ +0 -0
- data/bin/matrizdispersascp +3 -0
- data/lib/fraccion.rb +110 -0
- data/lib/matriz.rb +136 -0
- data/lib/matriz.rb~ +135 -0
- data/lib/matrizdispersa.rb +46 -0
- data/lib/matrizdispersa.rb~ +46 -0
- data/lib/matrizdispersascp/version.rb +3 -0
- data/lib/matrizdispersascp.rb +5 -0
- data/lib/mcd.rb +19 -0
- data/matrizdispersascp.gemspec +23 -0
- metadata +95 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 77f5cd7af5514eb3a69b2611dc48c81b51f0996a
|
|
4
|
+
data.tar.gz: 487d4cd78c7e86d5b3983bae62bc02f6aa289daa
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: e1f4073f0a46a4b36b91a3cdf8da391e414823ffa95b05409216e48894ca6b864bf1f76bb896f60b8222229101c8139c18cb0fefc3a5e947968cfd72c1238d89
|
|
7
|
+
data.tar.gz: 7572aa5dbf9403504ed6dbd4fa9153f7ae37d3c42408ae6a513a2e8ded5617444a8673422ed4519291106eaef99699cd5a87ef76527fe530267b1866ba46fb91
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2013 constanza leon
|
|
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,43 @@
|
|
|
1
|
+
|
|
2
|
+
# Matrizdispersascp
|
|
3
|
+
|
|
4
|
+
TODO: Write a gem description
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
Add this line to your application's Gemfile:
|
|
9
|
+
|
|
10
|
+
gem 'matrizdispersascp'
|
|
11
|
+
|
|
12
|
+
And then execute:
|
|
13
|
+
|
|
14
|
+
$ bundle
|
|
15
|
+
|
|
16
|
+
Or install it yourself as:
|
|
17
|
+
|
|
18
|
+
$ gem install matrizdispersascp
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
TODO: Write usage instructions here
|
|
23
|
+
|
|
24
|
+
## Contributing
|
|
25
|
+
|
|
26
|
+
1. Fork it
|
|
27
|
+
|
|
28
|
+
alu4348@cc430:~/datos/homes.rala/LPP/prct09$ bundle gem -b matrizdispersascp
|
|
29
|
+
create matrizdispersascp/Gemfile
|
|
30
|
+
create matrizdispersascp/Rakefile
|
|
31
|
+
create matrizdispersascp/LICENSE.txt
|
|
32
|
+
create matrizdispersascp/README.md
|
|
33
|
+
create matrizdispersascp/.gitignore
|
|
34
|
+
create matrizdispersascp/matrizdispersascp.gemspec
|
|
35
|
+
create matrizdispersascp/lib/matrizdispersascp.rb
|
|
36
|
+
create matrizdispersascp/lib/matrizdispersascp/version.rb
|
|
37
|
+
create matrizdispersascp/bin/matrizdispersascp
|
|
38
|
+
Initializating git repo in /home/alu4348/datos/homes.rala/LPP/prct09/matrizdispersascp
|
|
39
|
+
|
|
40
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
41
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
42
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
43
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'Matrix'
|
|
2
|
+
|
|
3
|
+
class SparseVector
|
|
4
|
+
attr_reader :vector
|
|
5
|
+
|
|
6
|
+
def initialize(h = {})
|
|
7
|
+
@vector = Hash.new(0)
|
|
8
|
+
@vector = @vector.merge!(h)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def [](i)
|
|
12
|
+
@vector[i]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def to_s
|
|
16
|
+
@vector.to_s
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class SparseMatrix
|
|
21
|
+
|
|
22
|
+
attr_reader :matrix
|
|
23
|
+
|
|
24
|
+
def initialize(h = {})
|
|
25
|
+
@matrix = Hash.new({})
|
|
26
|
+
for k in h.keys do
|
|
27
|
+
@matrix[k] = if h[k].is_a? SparseVector
|
|
28
|
+
h[k]
|
|
29
|
+
else
|
|
30
|
+
@matrix[k] = SparseVector.new(h[k])
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def [](i)
|
|
36
|
+
@matrix[i]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def col(j)
|
|
40
|
+
c = {}
|
|
41
|
+
for r in @matrix.keys do
|
|
42
|
+
c[r] = @matrix[r].vector[j] if @matrix[r].vector.keys.include? j
|
|
43
|
+
end
|
|
44
|
+
SparseVector.new c
|
|
45
|
+
end
|
|
46
|
+
end
|
|
File without changes
|
data/lib/fraccion.rb
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Practica 6 Lenguajes y Paradigmas de la Programación
|
|
2
|
+
# Desarrollo Dirigido por el Comportamiento (Behavior Driven Development - BDD)
|
|
3
|
+
# Autores: Pedro Javier Núñez Rodríguez
|
|
4
|
+
# Constanza León Baritussio
|
|
5
|
+
# Fichero que la implementación de la clase Fraccion
|
|
6
|
+
|
|
7
|
+
require 'mcd'
|
|
8
|
+
|
|
9
|
+
class Fraccion
|
|
10
|
+
|
|
11
|
+
attr_accessor :numerador
|
|
12
|
+
attr_accessor :denominador
|
|
13
|
+
@numerador
|
|
14
|
+
@denominador
|
|
15
|
+
|
|
16
|
+
def initialize(a, b) # Constructor de la clase que inicializa la fracción con los valores que se le pasan por parametros
|
|
17
|
+
@numerador = a;
|
|
18
|
+
@denominador = b;
|
|
19
|
+
self.reduce() # LLamamos a la función que simplifica la fracción al mínimo
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def reduce() # Método encargado de la simplificación del objeto fracción que lo llama
|
|
23
|
+
div = Mcd(@numerador, @denominador)
|
|
24
|
+
@numerador = @numerador / div
|
|
25
|
+
@denominador = @denominador / div
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def num() # Método encargado de devolver el valor del numerador
|
|
29
|
+
return @numerador
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def denom() # Método encargado de devolver el valor del denominador
|
|
33
|
+
return @denominador
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def to_s # Método encargado de mostrar por consola la fraccion de forma a/b , donde a es el numerador y b es el denominador
|
|
37
|
+
"#{@numerador}/#{@denominador}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def to_f # Método encargado de mostrar por la consola la fraccion en formato flotante
|
|
41
|
+
@numerador.to_f / @denominador.to_f
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def ==(frac) # Sobrecarga del metodo == para la comparación de fracciones
|
|
45
|
+
if ((@numerador == frac.numerador) && (@denominador == frac.denominador))
|
|
46
|
+
return true
|
|
47
|
+
end
|
|
48
|
+
return false
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def abs # Metodo que nos devuelve una fracción en valor absoluto
|
|
52
|
+
Fraccion.new(numerador.abs, denominador.abs)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def reciprocal # Metodo que devuelve una fraccion con el numerador y el denominador invertidos
|
|
56
|
+
Fraccion.new(denominador, numerador)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def -@ # Sobrecarga del operador - para calcular el opuesto de una fracción
|
|
60
|
+
Fraccion.new(@numerador *-1,@denominador)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def +(frac) #Método suma dos fracciones con + y dar el resultado de forma reducida
|
|
64
|
+
Fraccion.new(@numerador*frac.denominador + frac.numerador*@denominador, @denominador*frac.denominador)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def -(frac) #Método resta dos fracciones con - y dar el resultado de forma reducida
|
|
68
|
+
Fraccion.new(@numerador*frac.denominador - frac.numerador*denominador, @denominador*frac.denominador)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def *(frac) #Método multiplca dos fracciones con * y dar el resultado de forma reducida
|
|
72
|
+
Fraccion.new(@numerador*frac.numerador,@denominador*frac.denominador)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
#Método divide dos fracciones con / y dar el resultado de forma reducida
|
|
76
|
+
def /(frac)
|
|
77
|
+
Fraccion.new(@numerador*frac.denominador,@denominador*frac.numerador)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def %(frac) # Método que calcula el resto dos fracciones con % y dar el resultado de forma reducida
|
|
81
|
+
Fraccion.new(@numerador % @denominador, frac.numerador % frac.denominador)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
#Método se debe de poder comprobar si una fracion es menor que otra
|
|
85
|
+
|
|
86
|
+
def <(frac)
|
|
87
|
+
|
|
88
|
+
(@numerador.to_f / @denominador) < (frac.numerador.to_f / frac.denominador)
|
|
89
|
+
end
|
|
90
|
+
#se debe de poder comprobar si una fracion es mayor que otra
|
|
91
|
+
def >(frac)
|
|
92
|
+
|
|
93
|
+
(@numerador.to_f / @denominador) > (frac.numerador.to_f / frac.denominador)
|
|
94
|
+
end
|
|
95
|
+
#se debe de poder comprobar si una fracion es menor o igual que otra
|
|
96
|
+
|
|
97
|
+
def <=(frac)
|
|
98
|
+
|
|
99
|
+
(@numerador.to_f / @denominador) <= (frac.numerador.to_f / frac.denominador)
|
|
100
|
+
end
|
|
101
|
+
#se debe de poder comprobar si una fracion es mayor o igual que otra
|
|
102
|
+
def >=(frac)
|
|
103
|
+
|
|
104
|
+
(@numerador.to_f / @denominador) >= (frac.numerador.to_f / frac.denominador)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
end
|
|
110
|
+
|
data/lib/matriz.rb
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Practica 8 Lenguajes y Paradigmas de la programación usando #desarrollo dirigido por pruebas (Test Driven Development - TDD) con
|
|
2
|
+
# la herramienta Rspec.
|
|
3
|
+
# Pedro Javier Núñez Rodríguez
|
|
4
|
+
# Constanza Leon Baritussio
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
class Matriz << class Vectordisperso
|
|
8
|
+
class Matriz << class Matrixdispersa
|
|
9
|
+
|
|
10
|
+
include Comparable #Modulo comparable
|
|
11
|
+
attr_accessor :matrix, :n, :m
|
|
12
|
+
@matrix
|
|
13
|
+
@n # filas
|
|
14
|
+
@m # columnas
|
|
15
|
+
|
|
16
|
+
def initialize(n,m) #Constructor de la clase que inicializa la matriz con los valores que se le pasan por parametros
|
|
17
|
+
raise ArgumentError, 'Tamaño de matriz no valido' unless n.is_a? Integer and m.is_a? Integer and n > 0 and m > 0
|
|
18
|
+
@n = n
|
|
19
|
+
@m = m
|
|
20
|
+
@matrix=[]
|
|
21
|
+
for i in (0...@n)
|
|
22
|
+
@matrix[i]=[]
|
|
23
|
+
for j in (0...@m)
|
|
24
|
+
@matrix[i][j] = 0
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def set(i, j, valor) #Método para aaceder a los valores i , j y valor de la matriz
|
|
30
|
+
raise ArgumentError, 'Indice no valido' unless i.is_a? Integer and i >= 0 and i < @n
|
|
31
|
+
raise ArgumentError, 'Indice no valido' unless j.is_a? Integer and j >= 0 and j < @m
|
|
32
|
+
raise ArgumentError, 'Valor no numerico' unless valor.is_a? Integer
|
|
33
|
+
@matrix[i][j] = valor
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def get(i, j)
|
|
37
|
+
return @matrix[i][j]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def to_s #Método encargado de mostrar por consola la matriz de forma matriz[i][j]
|
|
41
|
+
s = ""
|
|
42
|
+
s += "{"
|
|
43
|
+
for i in (0...n)
|
|
44
|
+
s += "{"
|
|
45
|
+
for j in (0...m)
|
|
46
|
+
if j == 0
|
|
47
|
+
s += "#{matrix[i][j]}"
|
|
48
|
+
else
|
|
49
|
+
s += ","
|
|
50
|
+
s += "#{matrix[i][j]}"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
s += "}"
|
|
54
|
+
end
|
|
55
|
+
s += "}"
|
|
56
|
+
s
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def to_f # Método encargado de mostrar por la consola la matriz en formato flotante
|
|
60
|
+
s = ""
|
|
61
|
+
s = "{"
|
|
62
|
+
for i in (0...n)
|
|
63
|
+
s += "{"
|
|
64
|
+
for j in (0...m)
|
|
65
|
+
if j == 0
|
|
66
|
+
s += "#{matrix[i][j].to_f}"
|
|
67
|
+
else
|
|
68
|
+
s += ","
|
|
69
|
+
s += "#{matrix[i][j].to_f}"
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
s += "}"
|
|
73
|
+
end
|
|
74
|
+
s += "}"
|
|
75
|
+
s
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def -@ # Sobrecarga del operador - para calcular el opuesto de una matriz
|
|
79
|
+
mat = Matriz.new(n,m)
|
|
80
|
+
for i in (0...n)
|
|
81
|
+
for j in (0...m)
|
|
82
|
+
if matrix[i][j] != 0
|
|
83
|
+
mat.matrix[i][j] = (matrix[i][j] * -1)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
mat
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def * num #Método que multiplica un número por una matriz
|
|
91
|
+
mat = Matriz.new(n,m)
|
|
92
|
+
for i in (0...n)
|
|
93
|
+
for j in (0...m)
|
|
94
|
+
mat.set(i,j,matrix[i][j] * num)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
mat
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def + matAux #Método para hacer la suma de de matrices
|
|
101
|
+
mat = Matriz.new(n,m)
|
|
102
|
+
for i in (0...n)
|
|
103
|
+
for j in (0...m)
|
|
104
|
+
mat.set(i,j,matrix[i][j] + matAux.matrix[i][j])
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
mat
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def - matAux #Método para hacer la resta de matrices
|
|
111
|
+
mat = Matriz.new(n,m)
|
|
112
|
+
for i in (0...n)
|
|
113
|
+
for j in (0...m)
|
|
114
|
+
mat.set(i,j,matrix[i][j] - matAux.matrix[i][j])
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
mat
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def * matAux #Método para hacer la multiplicacion de matrices
|
|
121
|
+
mat = Matriz.new(n,m)
|
|
122
|
+
for k in 0...n
|
|
123
|
+
for i in (0...n)
|
|
124
|
+
contador = 0
|
|
125
|
+
for j in (0...m)
|
|
126
|
+
contador = contador +(self.get(i,j) * matAux.get(i,j))
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
mat.set(i,j, contador)
|
|
130
|
+
end
|
|
131
|
+
mat
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
|
data/lib/matriz.rb~
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Practica 8 Lenguajes y Paradigmas de la programación usando #desarrollo dirigido por pruebas (Test Driven Development - TDD) con
|
|
2
|
+
# la herramienta Rspec.
|
|
3
|
+
# Pedro Javier Núñez Rodríguez
|
|
4
|
+
# Constanza Leon Baritussio
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
class Matriz
|
|
8
|
+
|
|
9
|
+
include Comparable #Modulo comparable
|
|
10
|
+
attr_accessor :matrix, :n, :m
|
|
11
|
+
@matrix
|
|
12
|
+
@n # filas
|
|
13
|
+
@m # columnas
|
|
14
|
+
|
|
15
|
+
def initialize(n,m) #Constructor de la clase que inicializa la matriz con los valores que se le pasan por parametros
|
|
16
|
+
raise ArgumentError, 'Tamaño de matriz no valido' unless n.is_a? Integer and m.is_a? Integer and n > 0 and m > 0
|
|
17
|
+
@n = n
|
|
18
|
+
@m = m
|
|
19
|
+
@matrix=[]
|
|
20
|
+
for i in (0...@n)
|
|
21
|
+
@matrix[i]=[]
|
|
22
|
+
for j in (0...@m)
|
|
23
|
+
@matrix[i][j] = 0
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def set(i, j, valor) #Método para aaceder a los valores i , j y valor de la matriz
|
|
29
|
+
raise ArgumentError, 'Indice no valido' unless i.is_a? Integer and i >= 0 and i < @n
|
|
30
|
+
raise ArgumentError, 'Indice no valido' unless j.is_a? Integer and j >= 0 and j < @m
|
|
31
|
+
raise ArgumentError, 'Valor no numerico' unless valor.is_a? Integer
|
|
32
|
+
@matrix[i][j] = valor
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def get(i, j)
|
|
36
|
+
return @matrix[i][j]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def to_s #Método encargado de mostrar por consola la matriz de forma matriz[i][j]
|
|
40
|
+
s = ""
|
|
41
|
+
s += "{"
|
|
42
|
+
for i in (0...n)
|
|
43
|
+
s += "{"
|
|
44
|
+
for j in (0...m)
|
|
45
|
+
if j == 0
|
|
46
|
+
s += "#{matrix[i][j]}"
|
|
47
|
+
else
|
|
48
|
+
s += ","
|
|
49
|
+
s += "#{matrix[i][j]}"
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
s += "}"
|
|
53
|
+
end
|
|
54
|
+
s += "}"
|
|
55
|
+
s
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def to_f # Método encargado de mostrar por la consola la matriz en formato flotante
|
|
59
|
+
s = ""
|
|
60
|
+
s = "{"
|
|
61
|
+
for i in (0...n)
|
|
62
|
+
s += "{"
|
|
63
|
+
for j in (0...m)
|
|
64
|
+
if j == 0
|
|
65
|
+
s += "#{matrix[i][j].to_f}"
|
|
66
|
+
else
|
|
67
|
+
s += ","
|
|
68
|
+
s += "#{matrix[i][j].to_f}"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
s += "}"
|
|
72
|
+
end
|
|
73
|
+
s += "}"
|
|
74
|
+
s
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def -@ # Sobrecarga del operador - para calcular el opuesto de una matriz
|
|
78
|
+
mat = Matriz.new(n,m)
|
|
79
|
+
for i in (0...n)
|
|
80
|
+
for j in (0...m)
|
|
81
|
+
if matrix[i][j] != 0
|
|
82
|
+
mat.matrix[i][j] = (matrix[i][j] * -1)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
mat
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def * num #Método que multiplica un número por una matriz
|
|
90
|
+
mat = Matriz.new(n,m)
|
|
91
|
+
for i in (0...n)
|
|
92
|
+
for j in (0...m)
|
|
93
|
+
mat.set(i,j,matrix[i][j] * num)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
mat
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def + matAux #Método para hacer la suma de de matrices
|
|
100
|
+
mat = Matriz.new(n,m)
|
|
101
|
+
for i in (0...n)
|
|
102
|
+
for j in (0...m)
|
|
103
|
+
mat.set(i,j,matrix[i][j] + matAux.matrix[i][j])
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
mat
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def - matAux #Método para hacer la resta de matrices
|
|
110
|
+
mat = Matriz.new(n,m)
|
|
111
|
+
for i in (0...n)
|
|
112
|
+
for j in (0...m)
|
|
113
|
+
mat.set(i,j,matrix[i][j] - matAux.matrix[i][j])
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
mat
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def * matAux #Método para hacer la multiplicacion de matrices
|
|
120
|
+
mat = Matriz.new(n,m)
|
|
121
|
+
for k in 0...n
|
|
122
|
+
for i in (0...n)
|
|
123
|
+
contador = 0
|
|
124
|
+
for j in (0...m)
|
|
125
|
+
contador = contador +(self.get(i,j) * matAux.get(i,j))
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
mat.set(i,j, contador)
|
|
129
|
+
end
|
|
130
|
+
mat
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require './matriz.rb'
|
|
2
|
+
|
|
3
|
+
class Vectordisperso
|
|
4
|
+
attr_reader :vector
|
|
5
|
+
|
|
6
|
+
def initialize(h = {})
|
|
7
|
+
@vector = Hash.new(0)
|
|
8
|
+
@vector = @vector.merge!(h)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def [](i)
|
|
12
|
+
@vector[i]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def to_s
|
|
16
|
+
@vector.to_s
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Matrixdispersa
|
|
21
|
+
|
|
22
|
+
attr_reader :matrix
|
|
23
|
+
|
|
24
|
+
def initialize(h = {})
|
|
25
|
+
@matrix = Hash.new({})
|
|
26
|
+
for k in h.keys do
|
|
27
|
+
@matrix[k] = if h[k].is_a? Vectordisperso
|
|
28
|
+
h[k]
|
|
29
|
+
else
|
|
30
|
+
@matrix[k] = Vectordisperso.new(h[k])
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def [](i)
|
|
36
|
+
@matrix[i]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def col(j)
|
|
40
|
+
c = {}
|
|
41
|
+
for r in @matrix.keys do
|
|
42
|
+
c[r] = @matrix[r].vector[j] if @matrix[r].vector.keys.include? j
|
|
43
|
+
end
|
|
44
|
+
Vectordisperso.new c
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require './matriz.rb'
|
|
2
|
+
|
|
3
|
+
class Vectordisperso
|
|
4
|
+
attr_reader :vector
|
|
5
|
+
|
|
6
|
+
def initialize(h = {})
|
|
7
|
+
@vector = Hash.new(0)
|
|
8
|
+
@vector = @vector.merge!(h)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def [](i)
|
|
12
|
+
@vector[i]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def to_s
|
|
16
|
+
@vector.to_s
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Matrixdispersa
|
|
21
|
+
|
|
22
|
+
attr_reader :matrix
|
|
23
|
+
|
|
24
|
+
def initialize(h = {})
|
|
25
|
+
@matrix = Hash.new({})
|
|
26
|
+
for k in h.keys do
|
|
27
|
+
@matrix[k] = if h[k].is_a? Vectordisperso
|
|
28
|
+
h[k]
|
|
29
|
+
else
|
|
30
|
+
@matrix[k] = Vectordisperso.new(h[k])
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def [](i)
|
|
36
|
+
@matrix[i]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def col(j)
|
|
40
|
+
c = {}
|
|
41
|
+
for r in @matrix.keys do
|
|
42
|
+
c[r] = @matrix[r].vector[j] if @matrix[r].vector.keys.include? j
|
|
43
|
+
end
|
|
44
|
+
Vectordisperso.new c
|
|
45
|
+
end
|
|
46
|
+
end
|
data/lib/mcd.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Practica 6 Lenguajes y Paradigmas de la Programación
|
|
2
|
+
# Desarrollo Dirigido por el Comportamiento (Behavior Driven Development - BDD)
|
|
3
|
+
# Autores: Pedro Javier Núñez Rodríguez
|
|
4
|
+
# Constanza Leon Baritussio
|
|
5
|
+
# Fichero que contiene la clase mcd (Máximo Comun Divisor) que nos es necesaria para la clase Fracción
|
|
6
|
+
|
|
7
|
+
def Mcd(u,v)
|
|
8
|
+
u = u.abs # Ponemos en valor absoluto ambos valores
|
|
9
|
+
v = v.abs
|
|
10
|
+
k = 1
|
|
11
|
+
max = 1
|
|
12
|
+
while k <= u and k <= v # Iteramos mientras que k no sea mayor que ninguno de los dos números
|
|
13
|
+
if ((u % k) == 0) and ((v % k) == 0)
|
|
14
|
+
max = k # Cuando encontramos un k que es divisor de los dos numeros lo guardamos
|
|
15
|
+
end
|
|
16
|
+
k += 1
|
|
17
|
+
end
|
|
18
|
+
return max # Retornamos el valor encontrado
|
|
19
|
+
end
|
|
@@ -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 'matrizdispersascp/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "matrizdispersascp"
|
|
8
|
+
spec.version = Matrizdispersascp::VERSION
|
|
9
|
+
spec.authors = ["constanza leon"]
|
|
10
|
+
spec.email = ["alu0100673647@ull.edu.es"]
|
|
11
|
+
spec.description = %q{Esqueleto de una gema}
|
|
12
|
+
spec.summary = %q{Esqueleto de una gema}
|
|
13
|
+
spec.homepage = "https://github.com/Alu0100673647/prct09"
|
|
14
|
+
spec.license = "MIT"
|
|
15
|
+
|
|
16
|
+
spec.files = `git ls-files`.split($/)
|
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}).map{ |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
|
metadata
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: matrizdispersascp
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- constanza leon
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2013-11-19 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: Esqueleto de una gema
|
|
42
|
+
email:
|
|
43
|
+
- alu0100673647@ull.edu.es
|
|
44
|
+
executables:
|
|
45
|
+
- matrizdispersa.rb
|
|
46
|
+
- matrizdispersa.rb~
|
|
47
|
+
- matrizdispersascp
|
|
48
|
+
extensions: []
|
|
49
|
+
extra_rdoc_files: []
|
|
50
|
+
files:
|
|
51
|
+
- .gitignore
|
|
52
|
+
- .travis.yml
|
|
53
|
+
- Gemfile
|
|
54
|
+
- Guardfile
|
|
55
|
+
- LICENSE.txt
|
|
56
|
+
- README.md
|
|
57
|
+
- Rakefile
|
|
58
|
+
- bin/matrizdispersa.rb
|
|
59
|
+
- bin/matrizdispersa.rb~
|
|
60
|
+
- bin/matrizdispersascp
|
|
61
|
+
- lib/fraccion.rb
|
|
62
|
+
- lib/matriz.rb
|
|
63
|
+
- lib/matriz.rb~
|
|
64
|
+
- lib/matrizdispersa.rb
|
|
65
|
+
- lib/matrizdispersa.rb~
|
|
66
|
+
- lib/matrizdispersascp.rb
|
|
67
|
+
- lib/matrizdispersascp/version.rb
|
|
68
|
+
- lib/mcd.rb
|
|
69
|
+
- matrizdispersascp.gemspec
|
|
70
|
+
homepage: https://github.com/Alu0100673647/prct09
|
|
71
|
+
licenses:
|
|
72
|
+
- MIT
|
|
73
|
+
metadata: {}
|
|
74
|
+
post_install_message:
|
|
75
|
+
rdoc_options: []
|
|
76
|
+
require_paths:
|
|
77
|
+
- lib
|
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - '>='
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
|
+
requirements:
|
|
85
|
+
- - '>='
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: '0'
|
|
88
|
+
requirements: []
|
|
89
|
+
rubyforge_project:
|
|
90
|
+
rubygems_version: 2.0.3
|
|
91
|
+
signing_key:
|
|
92
|
+
specification_version: 4
|
|
93
|
+
summary: Esqueleto de una gema
|
|
94
|
+
test_files: []
|
|
95
|
+
has_rdoc:
|