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.
@@ -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
+ &mdash; 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> &raquo;
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>
@@ -0,0 +1,5 @@
1
+ require "alimento/version"
2
+
3
+ module Alimento
4
+ # Your code goes here...
5
+ end
@@ -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