alimento_odmc 0.1.0
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/.coveralls.yml +1 -0
- data/.gitignore +13 -0
- data/.travis.yml +5 -0
- data/Gemfile +8 -0
- data/Guardfile +82 -0
- data/README.md +35 -0
- data/Rakefile +6 -0
- data/alimento.gemspec +43 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docs/Alimento.html +117 -0
- data/docs/AlimentoC.html +507 -0
- data/docs/Alimentos.html +1114 -0
- data/docs/Lista.html +1583 -0
- data/docs/Nodo.html +416 -0
- data/docs/_index.html +143 -0
- data/docs/class_list.html +51 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +492 -0
- data/docs/file.README.html +119 -0
- data/docs/file_list.html +56 -0
- data/docs/frames.html +17 -0
- data/docs/index.html +119 -0
- data/docs/js/app.js +248 -0
- data/docs/js/full_list.js +216 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +299 -0
- data/docs/top-level-namespace.html +112 -0
- data/lib/alimento.rb +5 -0
- data/lib/alimento/alimento.rb +69 -0
- data/lib/alimento/alimentoC.rb +23 -0
- data/lib/alimento/lista.rb +244 -0
- data/lib/alimento/platoDls.rb +192 -0
- data/lib/alimento/version.rb +3 -0
- metadata +177 -0
@@ -0,0 +1,112 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<title>
|
7
|
+
Top Level Namespace
|
8
|
+
|
9
|
+
— Documentation by YARD 0.9.9
|
10
|
+
|
11
|
+
</title>
|
12
|
+
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
|
14
|
+
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
|
16
|
+
|
17
|
+
<script type="text/javascript" charset="utf-8">
|
18
|
+
pathId = "";
|
19
|
+
relpath = '';
|
20
|
+
</script>
|
21
|
+
|
22
|
+
|
23
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
24
|
+
|
25
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
26
|
+
|
27
|
+
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
<div class="nav_wrap">
|
31
|
+
<iframe id="nav" src="class_list.html?1"></iframe>
|
32
|
+
<div id="resizer"></div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div id="main" tabindex="-1">
|
36
|
+
<div id="header">
|
37
|
+
<div id="menu">
|
38
|
+
|
39
|
+
<a href="_index.html">Index</a> »
|
40
|
+
|
41
|
+
|
42
|
+
<span class="title">Top Level Namespace</span>
|
43
|
+
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<div id="search">
|
47
|
+
|
48
|
+
<a class="full_list_link" id="class_list_link"
|
49
|
+
href="class_list.html">
|
50
|
+
|
51
|
+
<svg width="24" height="24">
|
52
|
+
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
53
|
+
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
54
|
+
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
55
|
+
</svg>
|
56
|
+
</a>
|
57
|
+
|
58
|
+
</div>
|
59
|
+
<div class="clear"></div>
|
60
|
+
</div>
|
61
|
+
|
62
|
+
<div id="content"><h1>Top Level Namespace
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
</h1>
|
67
|
+
<div class="box_info">
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
</div>
|
80
|
+
|
81
|
+
<h2>Defined Under Namespace</h2>
|
82
|
+
<p class="children">
|
83
|
+
|
84
|
+
|
85
|
+
<strong class="modules">Modules:</strong> <span class='object_link'><a href="Alimento.html" title="Alimento (module)">Alimento</a></span>
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
<strong class="classes">Classes:</strong> <span class='object_link'><a href="AlimentoC.html" title="AlimentoC (class)">AlimentoC</a></span>, <span class='object_link'><a href="Alimentos.html" title="Alimentos (class)">Alimentos</a></span>, <span class='object_link'><a href="Lista.html" title="Lista (class)">Lista</a></span>, <span class='object_link'><a href="Nodo.html" title="Nodo (class)">Nodo</a></span>
|
90
|
+
|
91
|
+
|
92
|
+
</p>
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
</div>
|
103
|
+
|
104
|
+
<div id="footer">
|
105
|
+
Generated on Tue Nov 21 23:22:05 2017 by
|
106
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
107
|
+
0.9.9 (ruby-2.4.0).
|
108
|
+
</div>
|
109
|
+
|
110
|
+
</div>
|
111
|
+
</body>
|
112
|
+
</html>
|
data/lib/alimento.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
#Clase padre de alimentos.
|
2
|
+
class Alimentos
|
3
|
+
attr_accessor :proteinas, :glucidos, :lipidos, :datos
|
4
|
+
include Comparable
|
5
|
+
|
6
|
+
#@note Construcctor de la clase alimentos
|
7
|
+
#@param Le pasamos los datos necesarios para construir el alimento, proteinas [Number], glucidos [Number] y lipidos [Number].
|
8
|
+
def initialize(proteinasA, glucidosA, lipidosA)
|
9
|
+
@proteinas = proteinasA
|
10
|
+
@glucidos = glucidosA
|
11
|
+
@lipidos = lipidosA
|
12
|
+
end
|
13
|
+
|
14
|
+
#@note Sobrecargamos el operador distinto para que funcione el Módulo Comparable. Comparación efectuada según el valor energético.
|
15
|
+
#@param Objeto del tipo alimento con el cual se efectuará la comparación.
|
16
|
+
#@return Si los valores de los objetos son iguales, devuelve 0, en caso de que el de este objeto sea menor, devolverá -1 y 1 en otro caso.
|
17
|
+
def <=> otro
|
18
|
+
return nil unless otro.is_a?Alimentos #Si el otro objeto no es de tipo Alimentos devuelve nulo.
|
19
|
+
if v_energetico == otro.v_energetico
|
20
|
+
return 0
|
21
|
+
else
|
22
|
+
if v_energetico < otro.v_energetico
|
23
|
+
return -1
|
24
|
+
else
|
25
|
+
return 1
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
#@note Sobrecargamos el operador igual para que funcione el Módulo Comparable. Comparación efectuada según el valor energético.
|
31
|
+
#@param Objeto del tipo alimento con el cual se efectuará la comparación.
|
32
|
+
#@return Si ambos objetos son iguales en valor energético, devolverá verdadero, en cualquier otro caso, será falso el valor devuelto.
|
33
|
+
def == otro
|
34
|
+
if otro.is_a?Alimentos
|
35
|
+
v_energetico == otro.v_energetico
|
36
|
+
else
|
37
|
+
false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
#@note Método para realizar el cálculo del valor energético.
|
42
|
+
#@return Calcula el valor energético de un alimento.
|
43
|
+
def v_energetico
|
44
|
+
valor = (@proteinas * 4) + (@glucidos * 4) + (@lipidos * 9)
|
45
|
+
valor
|
46
|
+
end
|
47
|
+
|
48
|
+
#@note Método para la correcta visualización del alimento.
|
49
|
+
#@return Devuelve la salida de un Alimento formateado.
|
50
|
+
def to_s
|
51
|
+
s = "#{@proteinas}\t #{@glucidos}\t #{@lipidos}"
|
52
|
+
s
|
53
|
+
end
|
54
|
+
|
55
|
+
#@param Se pasa el indice de del individuo al que acceder.
|
56
|
+
#@return Devuelve el valor de aibc para ese individuo.
|
57
|
+
def aibc indice
|
58
|
+
aux = []
|
59
|
+
datos[indice][1..datos[indice].length - 1].zip(datos[indice][0..datos[indice].length - 2]) do |x,y|
|
60
|
+
if x < datos[indice][0]
|
61
|
+
aux << 0.0
|
62
|
+
else
|
63
|
+
aux << (((x-datos[indice][0])+(y-datos[indice][0]))/2)*5
|
64
|
+
end
|
65
|
+
end
|
66
|
+
aux.reduce(:+)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#Clase hija de alimentos, para la inclusión del grupo.
|
2
|
+
require "alimento.rb"
|
3
|
+
|
4
|
+
class AlimentoC < Alimentos
|
5
|
+
attr_accessor :nombre, :grupo
|
6
|
+
|
7
|
+
#@note Construcctor de la clase alimentos hija.
|
8
|
+
#@param Recibe los datos de la clase padre más nombre [String] y grupo [String]
|
9
|
+
def initialize(nombreA, proteinasA, glucidosA, lipidosA, grupoA)
|
10
|
+
@nombre = nombreA
|
11
|
+
super(proteinasA, glucidosA, lipidosA)
|
12
|
+
@grupo = grupoA
|
13
|
+
end
|
14
|
+
|
15
|
+
#@note Método para la correcta visualización del alimento con nombre y grupo.
|
16
|
+
#@return Devuelve la salida de un Alimento formateado.
|
17
|
+
def to_s
|
18
|
+
s = "#{@nombre}\t "
|
19
|
+
s += super.to_s
|
20
|
+
s += "\t#{@grupo}"
|
21
|
+
s
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,244 @@
|
|
1
|
+
#@note Nodos para la lista que contendrá un valor, el nodo siguiente y el anterior enlazados.
|
2
|
+
Nodo = Struct.new(:valor, :siguiente, :anterior)
|
3
|
+
|
4
|
+
class Lista
|
5
|
+
attr_accessor :cabeza, :cola, :size
|
6
|
+
include Enumerable
|
7
|
+
#include Benchmark
|
8
|
+
|
9
|
+
#@note Constructor de la clase lista
|
10
|
+
def initialize
|
11
|
+
@cabeza = nil
|
12
|
+
@cola = nil
|
13
|
+
@size = 0
|
14
|
+
end
|
15
|
+
|
16
|
+
#@note Método para insertar un elemento por la cabeza de la lista
|
17
|
+
#@param Recibe como parámetro el nodo que queremos insertar.
|
18
|
+
def insertar_cabeza(nodo)
|
19
|
+
if vacia
|
20
|
+
nodo[:siguiente] = nil
|
21
|
+
nodo[:anterior] = nil
|
22
|
+
@cabeza = nodo
|
23
|
+
@cola = nodo
|
24
|
+
else
|
25
|
+
nodo[:siguiente] = @cabeza
|
26
|
+
@cabeza[:anterior] = nodo
|
27
|
+
nodo[:anterior] = nil
|
28
|
+
@cabeza = nodo
|
29
|
+
end
|
30
|
+
@size = @size + 1
|
31
|
+
end
|
32
|
+
|
33
|
+
#@note Método para insertar un elemento por la cola de la lista
|
34
|
+
#@param Recibe como parámetro el nodo que queremos insertar.
|
35
|
+
def insertar_cola(nodo)
|
36
|
+
if vacia
|
37
|
+
nodo[:siguiente] = nil
|
38
|
+
nodo[:anterior] = nil
|
39
|
+
@cabeza = nodo
|
40
|
+
@cola = nodo
|
41
|
+
else
|
42
|
+
nodo[:siguiente] = nil
|
43
|
+
nodo[:anterior] = @cola
|
44
|
+
@cola[:siguiente] = nodo
|
45
|
+
@cola = nodo
|
46
|
+
end
|
47
|
+
@size = @size + 1
|
48
|
+
end
|
49
|
+
|
50
|
+
#@note Método para insertar un elemento en una posición determinada de la lista.
|
51
|
+
#@param Recibe como parámetro el nodo [nodo] que queremos insertar y la posición [Number] que ocupará.
|
52
|
+
def insertar_pos(nodo, indice)
|
53
|
+
pos = 0
|
54
|
+
aux = @cabeza
|
55
|
+
if (indice - 1) == 0
|
56
|
+
insertar_cabeza(nodo) # Si la posición es 0, es lo mismo que insertar por la cabeza.
|
57
|
+
indice = 0
|
58
|
+
|
59
|
+
end
|
60
|
+
if indice - 1 > 0
|
61
|
+
#Mientras no estemos en la posición deseada y tengamos siguiente.
|
62
|
+
while(pos != (indice - 1) && (aux.siguiente != nil))
|
63
|
+
if pos == (indice - 2) # Paramos una posición antes para poder hacer las conexiones anteriores.
|
64
|
+
nodo[:siguiente] = aux.siguiente
|
65
|
+
nodo[:anterior] = aux
|
66
|
+
aux[:siguiente] = nodo
|
67
|
+
pos = pos + 1
|
68
|
+
end
|
69
|
+
if pos == (indice - 1) # Terminamos de realizar las conexiones.
|
70
|
+
aux = nodo.siguiente
|
71
|
+
aux[:anterior] = nodo
|
72
|
+
else
|
73
|
+
pos = pos + 1
|
74
|
+
aux = aux.siguiente
|
75
|
+
end
|
76
|
+
end
|
77
|
+
@size = @size + 1
|
78
|
+
else
|
79
|
+
error = "La posicion se encuentra fuera de rango"
|
80
|
+
error
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
#@note Método para insertar varios elementos a partir de una determinada posición de la lista
|
85
|
+
#@param Recibe como parámetro el array de nodos[nodo[]] que queremos insertar y la posición desde la que se insertarán.
|
86
|
+
def insertar_mul(nodos, indice)
|
87
|
+
for i in 0.. (nodos.length - 1)
|
88
|
+
insertar_pos(nodos[i], indice) # Vamos llamando a la función insertar por posición y le pasamos el nodo y aumentando la pos.
|
89
|
+
indice = indice + 1;
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
#@note Método para la extracción del primer elemento de la lista.
|
94
|
+
#@return Se devuelve y elimina el nodo situado en la primera posición de la lista.
|
95
|
+
def extrae_cabeza
|
96
|
+
if !vacia
|
97
|
+
if @cabeza == @cola
|
98
|
+
aux = @cabeza
|
99
|
+
@cabeza = nil
|
100
|
+
@cola = nil
|
101
|
+
else
|
102
|
+
aux = @cabeza
|
103
|
+
@cabeza = @cabeza.siguiente
|
104
|
+
@cabeza[:anterior] = nil
|
105
|
+
end
|
106
|
+
@size = @size - 1
|
107
|
+
aux
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
#@note Método para la extracción del último elemento de la lista.
|
112
|
+
#@return Se devuelve y extrae el nodo situado en la última posición de la lista.
|
113
|
+
def extrae_cola
|
114
|
+
if !vacia
|
115
|
+
if @cola == @cabeza
|
116
|
+
aux = @cola
|
117
|
+
@cabeza = nil
|
118
|
+
@cola = nil
|
119
|
+
else
|
120
|
+
aux = @cola
|
121
|
+
@cola = @cola.anterior
|
122
|
+
@cola[:siguiente] = nil
|
123
|
+
end
|
124
|
+
@size = @size - 1
|
125
|
+
aux
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
#@note Método para la extracción del nodo situado en la posición determinada.
|
130
|
+
#@param Posición del nodo deseado para la extracción [Number].
|
131
|
+
#@return Se devuelve y extrae el nodo situado en la posición deseada.
|
132
|
+
def extrae_pos(indice)
|
133
|
+
if !vacia
|
134
|
+
pos = 0
|
135
|
+
aux = @cabeza
|
136
|
+
if indice - 1 == 0
|
137
|
+
aux = extrae_cabeza
|
138
|
+
end
|
139
|
+
if indice == size
|
140
|
+
aux = extrae_cola
|
141
|
+
end
|
142
|
+
if indice - 1 > 0 && indice < size
|
143
|
+
while pos != indice - 1
|
144
|
+
pos = pos + 1
|
145
|
+
aux = aux.siguiente
|
146
|
+
end
|
147
|
+
#Cuando encontramos la posición tenemos que hacer los enlaces para que la lista siga funcionando después de la extracción.
|
148
|
+
auxAnt = aux.anterior
|
149
|
+
auxSig = aux.siguiente
|
150
|
+
auxAnt[:siguiente] = auxSig
|
151
|
+
auxSig[:anterior] = auxAnt
|
152
|
+
@size = @size - 1
|
153
|
+
end
|
154
|
+
end
|
155
|
+
aux
|
156
|
+
end
|
157
|
+
|
158
|
+
#@note Función para mostrar el contenido de la lista.
|
159
|
+
#@return Lista formateada en una cadena para su visualización.
|
160
|
+
def to_s
|
161
|
+
aux = @cabeza
|
162
|
+
s = ""
|
163
|
+
while aux.siguiente != nil
|
164
|
+
s += aux.valor.to_s + "\n"
|
165
|
+
aux = aux.siguiente
|
166
|
+
end
|
167
|
+
s += aux.valor.to_s
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
#@note Método para comprobar si la lista se encuentra vacía.
|
172
|
+
#@return Verdadero en el caso de que la lista no contenga ningún elemento, falso en caso contrario.
|
173
|
+
def vacia
|
174
|
+
if size==0
|
175
|
+
true
|
176
|
+
else
|
177
|
+
false
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
#@note Método sobrecargado para el correcto funcionamiento del módulo enumerable
|
182
|
+
def each
|
183
|
+
aux = @cabeza
|
184
|
+
while aux != nil
|
185
|
+
yield aux.valor
|
186
|
+
aux = aux.siguiente
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
#@note Método para convertir una lista a un array.
|
191
|
+
#@param lista[Lista]
|
192
|
+
#@return [Array]
|
193
|
+
def convertArray lista
|
194
|
+
lista.map { |x| x}
|
195
|
+
end
|
196
|
+
|
197
|
+
#@note Método para ordenar un array creado a partir de una lista.
|
198
|
+
#@param lista[Lista]
|
199
|
+
#@return [Array]
|
200
|
+
def ordenarFor lista
|
201
|
+
auxList = lista.convertArray lista
|
202
|
+
for i in 0..(auxList.length) do
|
203
|
+
for j in 0..(auxList.length-2) do
|
204
|
+
if(auxList[j] > auxList[j+1])
|
205
|
+
temporal = auxList[j]
|
206
|
+
auxList[j] = auxList[j+1]
|
207
|
+
auxList[j+1] = temporal
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
auxList
|
212
|
+
end
|
213
|
+
|
214
|
+
#@note Método para ordenar un array creado a partir de una lista.
|
215
|
+
#@param lista[Lista]
|
216
|
+
#@return [Array]
|
217
|
+
def ordenarEach lista
|
218
|
+
auxList = lista.convertArray lista
|
219
|
+
indice = 0
|
220
|
+
auxList.each do |x|
|
221
|
+
auxList.each do |y|
|
222
|
+
if (indice < auxList.length-1)
|
223
|
+
if (auxList[indice] > auxList[indice+1])
|
224
|
+
temporal = auxList[indice]
|
225
|
+
auxList[indice] = auxList[indice+1]
|
226
|
+
auxList[indice+1] = temporal
|
227
|
+
end
|
228
|
+
end
|
229
|
+
indice = indice+1
|
230
|
+
end
|
231
|
+
indice = 0
|
232
|
+
end
|
233
|
+
auxList
|
234
|
+
end
|
235
|
+
|
236
|
+
#@note Método para ordenar un array creado a partir de una lista usando el método sort
|
237
|
+
#@param lista[Lista]
|
238
|
+
#@return [Array]
|
239
|
+
def ordenarSort lista
|
240
|
+
auxList = lista.convertArray lista
|
241
|
+
auxList.sort
|
242
|
+
end
|
243
|
+
|
244
|
+
end
|