alimento_odmc 0.1.0

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