alimento_odmc 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|