alu0101028163 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,178 @@
1
+ class List
2
+ include Enumerable
3
+ attr_reader :head, :tail, :size
4
+
5
+ # @return [List] retorna una nueva instancia de Lista.
6
+ def initialize()
7
+ @head = nil
8
+ @tail = nil
9
+ @size = 0
10
+ end
11
+
12
+ # @return [List] método each implementado para el correcto funcionamiento del módulo Enumerable.
13
+ def each()
14
+ head_aux = @head
15
+ while head_aux != nil do
16
+ yield head_aux.value
17
+ head_aux = head_aux.next
18
+ end
19
+ end
20
+
21
+ # @param etiqueta [Etiqueta] Recibe como parámetro una etiqueta que pasará a ser el valor de un nodo construido a posteriori.
22
+ # @return [Number] Retorna el tamaño de la lista tras expandirse esta.
23
+ def push_back(etiqueta)
24
+
25
+ node = Struct.new(:prev, :next, :value).new(nil,nil,etiqueta)
26
+
27
+ if @size == 0
28
+ @tail = node
29
+ @head = node
30
+ else
31
+ aux = @tail
32
+ @tail = node
33
+ @tail.prev = aux
34
+ aux.next = tail
35
+ end
36
+
37
+ @size += 1
38
+
39
+ end
40
+
41
+ # @param etiqueta [Etiqueta] Recibe como parámetro una etiqueta que pasará a ser el valor de un nodo construido a posteriori.
42
+ # @return [Number] Retorna el tamaño de la lista tras expandirse esta.
43
+ def push_front(etiqueta)
44
+
45
+ node = Struct.new(:prev, :next, :value).new(nil,nil,etiqueta)
46
+
47
+ if @size == 0
48
+ @tail = node
49
+ @head = node
50
+ else
51
+ aux = @head
52
+ @head = node
53
+ @head.next = aux
54
+ aux.prev = @head
55
+ end
56
+
57
+ @size += 1
58
+
59
+ end
60
+
61
+ # @return [Number] Retorna el tamaño de la lista tras decrementarse esta.
62
+ def pop_front()
63
+ aux = @head
64
+ @head = @head.next
65
+ @head.prev = nil
66
+ aux.prev = nil
67
+ aux.next = nil
68
+ @size -= 1
69
+ end
70
+
71
+ # @return [Number] Retorna el tamaño de la lista tras decrementarse esta.
72
+ def pop_back()
73
+ aux = @tail
74
+ @tail = @tail.prev
75
+ @tail.next = nil
76
+ aux.next = nil
77
+ aux.prev = nil
78
+ @size -= 1
79
+ end
80
+
81
+ # @param position [Number] recibe como parámetro la posición de la lista a inspeccionar.
82
+ # @return [Struct] retorna un struct que en el que está encapsulado el nodo.
83
+ def [](position)
84
+ aux = @head
85
+ position.times do
86
+ aux = aux.next
87
+ end
88
+ aux
89
+ end
90
+
91
+ # @param a [Struct] nodo a intercambiar.
92
+ # @param b [Struct] nodo a intercambiar.
93
+ # @return [Struct]
94
+ def swap(a,b)
95
+
96
+ if @size == 2
97
+ a.prev = b
98
+ b.next = a
99
+ @tail = a
100
+ @head = b
101
+ elsif a == @head
102
+ a.next = b.next
103
+ b.prev = nil
104
+ b.next.prev = a
105
+ a.prev = b
106
+ b.next = a
107
+ @head = b
108
+ elsif b == @tail
109
+ a.next = nil
110
+ b.prev = a.prev
111
+ a.prev.next = b
112
+ a.prev = b
113
+ b.next = a
114
+ @tail = a
115
+ else
116
+ a.next = b.next
117
+ b.prev = a.prev
118
+ a.prev.next = b
119
+ b.next.prev = a
120
+ a.prev = b
121
+ b.next = a
122
+ end
123
+
124
+
125
+
126
+ end
127
+
128
+ # @return [Struct]
129
+ def clasificar_etiquetas
130
+ ordenado = false
131
+ aux_ = @head
132
+ while ordenado != true do
133
+ ordenado = true
134
+ i = 0
135
+ aux = @head
136
+ (@size - 1).times do
137
+ if aux.value.sal > aux.next.value.sal
138
+ self.swap(aux, aux.next)
139
+ ordenado = false
140
+ aux = aux.prev
141
+ end
142
+ aux = aux.next
143
+ end
144
+ end
145
+
146
+ end
147
+
148
+ # @return [Struct]
149
+ def clasificar_imc
150
+ ordenado = false
151
+ aux_ = @head
152
+ while ordenado != true do
153
+ ordenado = true
154
+ i = 0
155
+ aux = @head
156
+ (@size - 1).times do
157
+ if aux.value.registro.imc > aux.next.value.registro.imc
158
+ self.swap(aux, aux.next)
159
+ ordenado = false
160
+ aux = aux.prev
161
+ end
162
+ aux = aux.next
163
+ end
164
+ end
165
+ end
166
+
167
+ # @return [String] retorna una cadena con la información de todos los nodos de la lista.
168
+ def to_s
169
+ aux_ = @head
170
+ s = ""
171
+ while aux_ != nil do
172
+ s << aux_.value.to_s
173
+ aux_ = aux_.next
174
+ end
175
+ s
176
+ end
177
+
178
+ end
@@ -0,0 +1,246 @@
1
+ class Menu
2
+ attr_reader :name, :titulo, :ingesta, :desayuno, :almuerzo, :cena, :v_energetico_total
3
+ def initialize(name, &block)
4
+
5
+ @name = name
6
+ @titulo = ""
7
+ @ingesta = [30,35]
8
+ @desayuno = []
9
+ @almuerzo = []
10
+ @cena = []
11
+ @v_energetico_total = 0
12
+
13
+
14
+ if block_given?
15
+ if block.arity == 1
16
+ yield self
17
+ else
18
+ instance_eval(&block)
19
+ end
20
+ end
21
+
22
+
23
+ end
24
+
25
+ def to_s
26
+
27
+ output = "#{@name}\t\t\t\t"
28
+ output << "Composición Nutricional"
29
+ output << "\n#{'=' * @name.size * 12}\n"
30
+ output << "#{' ' * 32 }"
31
+ output << "grasas\tcarbohidratos\tproteinas fibra sal azucares valor energetico\n\n"
32
+ output << "Desayuno\n"
33
+ output << "#{@desayuno.join}\n"
34
+ output << "Almuerzo\n"
35
+ output << "#{@almuerzo.join}\n"
36
+ output << "Cena\n"
37
+ output << "#{@cena.join}\n"
38
+ output << "Valor Energetico Total: " << "#{@v_energetico_total}"
39
+
40
+ end
41
+
42
+ def titulo(titulo)
43
+ @titulo = titulo
44
+ end
45
+
46
+ # def ingesta(options={})
47
+ # ingesta << "(#{options[:min]})" if options[:min]
48
+ # ingesta << "(#{options[:max]})" if optionsþ[:max]
49
+ # @ingesta << ingesta
50
+ # end
51
+
52
+ def ingesta(options={})
53
+ @ingesta[0] = options[:min]
54
+ @ingesta[1] = options[:max]
55
+ end
56
+
57
+ def calcular_valor_energetico(ingredientes)
58
+ valor_energetico = 0
59
+ valor_energetico += ingredientes[:grasas] * 9
60
+ valor_energetico += ingredientes[:carbohidratos] * 4
61
+ valor_energetico += ingredientes[:azucares] * 4
62
+ valor_energetico += ingredientes[:fibra] * 2
63
+ valor_energetico += ingredientes[:proteinas] * 4
64
+ valor_energetico += ingredientes[:sal] * 6
65
+ end
66
+
67
+ def desayuno(options={})
68
+ hash = options
69
+ desayuno=""
70
+ desayuno << "\"#{options[:descripcion]}\"" if options[:descripcion]
71
+ desayuno << "#{' ' * ( 32 - options[:descripcion].size ) }"
72
+ # desayuno << "#{options[:porcion]}" if options[:porcion]
73
+ # desayuno << "#{options[:gramos]}" if options[:gramos]
74
+ if options[:grasas]
75
+ desayuno << "#{options[:grasas]}".ljust(6)
76
+ else
77
+ desayuno << "".ljust(6)
78
+ hash[:grasas] = 0
79
+ end
80
+
81
+ if options[:carbohidratos]
82
+ desayuno << "#{options[:carbohidratos]}".ljust(16)
83
+ else
84
+ desayuno << "".ljust(16)
85
+ hash[:carbohidratos] = 0
86
+ end
87
+
88
+ if options[:proteinas]
89
+ desayuno << "#{options[:proteinas]}".ljust(11)
90
+ else
91
+ desayuno << "".ljust(11)
92
+ hash[:proteinas] = 0
93
+ end
94
+
95
+ if options[:fibra]
96
+ desayuno << "#{options[:fibra]}".ljust(7)
97
+ else
98
+ desayuno << "".ljust(7)
99
+ hash[:fibra] = 0
100
+ end
101
+
102
+ if options[:sal]
103
+ desayuno << "#{options[:sal]}".ljust(8)
104
+ else
105
+ desayuno << "".ljust(8)
106
+ hash[:sal] = 0
107
+ end
108
+
109
+ if options[:azucares]
110
+ desayuno << "#{options[:azucares]}".ljust(12)
111
+ else
112
+ desayuno << "".ljust(12)
113
+ hash[:azucares] = 0
114
+ end
115
+
116
+ valor_energetico = calcular_valor_energetico(hash)
117
+ @v_energetico_total += valor_energetico
118
+ desayuno << "#{valor_energetico.round(2)}"
119
+ desayuno << "\n"
120
+
121
+ @desayuno << desayuno
122
+
123
+ end
124
+
125
+ def almuerzo(options={})
126
+ hash = options
127
+ almuerzo=""
128
+ almuerzo << "\"#{options[:descripcion]}\"" if options[:descripcion]
129
+ almuerzo << "#{' ' * ( 32 - options[:descripcion].size ) }"
130
+ # almuerzo << "#{options[:porcion]}" if options[:porcion]
131
+ # almuerzo << "#{options[:gramos]}" if options[:gramos]
132
+ if options[:grasas]
133
+ almuerzo << "#{options[:grasas]}".ljust(6)
134
+ else
135
+ almuerzo << "".ljust(6)
136
+ hash[:grasas] = 0
137
+ end
138
+
139
+ if options[:carbohidratos]
140
+ almuerzo << "#{options[:carbohidratos]}".ljust(16)
141
+ else
142
+ almuerzo << "".ljust(16)
143
+ hash[:carbohidratos] = 0
144
+ end
145
+
146
+ if options[:proteinas]
147
+ almuerzo << "#{options[:proteinas]}".ljust(11)
148
+ else
149
+ almuerzo << "".ljust(11)
150
+ hash[:proteinas] = 0
151
+ end
152
+
153
+ if options[:fibra]
154
+ almuerzo << "#{options[:fibra]}".ljust(7)
155
+ else
156
+ almuerzo << "".ljust(7)
157
+ hash[:fibra] = 0
158
+ end
159
+
160
+ if options[:sal]
161
+ almuerzo << "#{options[:sal]}".ljust(8)
162
+ else
163
+ almuerzo << "".ljust(8)
164
+ hash[:sal] = 0
165
+ end
166
+
167
+ if options[:azucares]
168
+ almuerzo << "#{options[:azucares]}".ljust(12)
169
+ else
170
+ almuerzo << "".ljust(12)
171
+ hash[:azucares] = 0
172
+ end
173
+
174
+ valor_energetico = calcular_valor_energetico(hash)
175
+ @v_energetico_total += valor_energetico
176
+ almuerzo << "#{valor_energetico.round(2)}"
177
+ almuerzo << "\n"
178
+
179
+ @almuerzo << almuerzo
180
+ end
181
+
182
+ def cena(options={})
183
+ hash = options
184
+ cena=""
185
+ cena << "\"#{options[:descripcion]}\"" if options[:descripcion]
186
+ cena << "#{' ' * ( 32 - options[:descripcion].size ) }"
187
+ # cena << "#{options[:porcion]}" if options[:porcion]
188
+ # cena << "#{options[:gramos]}" if options[:gramos]
189
+ if options[:grasas]
190
+ cena << "#{options[:grasas]}".ljust(6)
191
+ else
192
+ cena << "".ljust(6)
193
+ hash[:grasas] = 0
194
+ end
195
+
196
+ if options[:carbohidratos]
197
+ cena << "#{options[:carbohidratos]}".ljust(16)
198
+ else
199
+ cena << "".ljust(16)
200
+ hash[:carbohidratos] = 0
201
+ end
202
+
203
+ if options[:proteinas]
204
+ cena << "#{options[:proteinas]}".ljust(11)
205
+ else
206
+ cena << "".ljust(11)
207
+ hash[:proteinas] = 0
208
+ end
209
+
210
+ if options[:fibra]
211
+ cena << "#{options[:fibra]}".ljust(7)
212
+ else
213
+ cena << "".ljust(7)
214
+ hash[:fibra] = 0
215
+ end
216
+
217
+ if options[:sal]
218
+ cena << "#{options[:sal]}".ljust(8)
219
+ else
220
+ cena << "".ljust(8)
221
+ hash[:sal] = 0
222
+ end
223
+
224
+ if options[:azucares]
225
+ cena << "#{options[:azucares]}".ljust(12)
226
+ else
227
+ cena << "".ljust(12)
228
+ hash[:azucares] = 0
229
+ end
230
+
231
+ valor_energetico = calcular_valor_energetico(hash)
232
+ @v_energetico_total += valor_energetico
233
+ cena << "#{valor_energetico.round(2)}"
234
+ cena << "\n"
235
+
236
+ @cena << cena
237
+ end
238
+
239
+
240
+ end
241
+
242
+
243
+ # menu = Menu.new("Lunes") do
244
+ # titulo "Bajo en calorias"
245
+ # ingesta :min => 30, :max => 35
246
+ # end
@@ -0,0 +1,13 @@
1
+ class Paciente < Persona
2
+
3
+ # @param nombre [number] nombre del paciente.
4
+ # @param peso [number] peso del paciente.
5
+ # @param talla [number] altura del paciente en metros.
6
+ # @param edad [number] edad del paciente.
7
+ # @param sexo [number] sexo del paciente, 0 corresponde a hombre y 1 a mujer.
8
+ # @return [Paciente] retorna una instancia de la clase Paciente.
9
+ def initialize(nombre, peso, talla, edad, sexo)
10
+ super(nombre, peso, talla, edad, sexo)
11
+ end
12
+
13
+ end
@@ -0,0 +1,55 @@
1
+
2
+ class Paciente_obeso < Paciente
3
+
4
+ attr_reader :cir_cintura, :cir_cadera, :cir_brazo, :pl_tricipital, :pl_bicipital, :pl_subescapular, :pl_suprailiaco, :registro
5
+
6
+ # @param nombre [number] nombre del paciente.
7
+ # @param peso [number] peso del paciente.
8
+ # @param talla [number] altura del paciente en metros.
9
+ # @param edad [number] edad del paciente.
10
+ # @param sexo [number] sexo del paciente, 0 corresponde a hombre y 1 a mujer.
11
+ # @param cir_cintura [Number] circunferencia de la cintura del paciente.
12
+ # @param cir_cadera [Number] circunferencia de la cadera del paciente.
13
+ # @param cir_brazo [Number] circunferencia del brazo del paciente.
14
+ # @param pl_tricipital [Number] longitud del pliege tricipital del pariente.
15
+ # @param pl_bicipital [Number] longitud del pliege bicipital del pariente.
16
+ # @param pl_subescapular [Number] longitud del pliege subescapular del pariente.
17
+ # @param pl_suprailiaco [Number] longitud del pliege suprailiaco del pariente.
18
+ # @return [Paciente_Obeso] retorna una instancia del Paciente_Obeso.
19
+ def initialize(nombre, peso, talla, edad, sexo, cir_cintura, cir_cadera, cir_brazo, pl_tricipital, pl_bicipital, pl_subescapular, pl_suprailiaco)
20
+ super(nombre, peso, talla, edad, sexo)
21
+ @cir_cintura = cir_cintura
22
+ @cir_cadera = cir_cadera
23
+ @cir_brazo = cir_brazo
24
+ @pl_tricipital = pl_tricipital
25
+ @pl_bicipital = pl_bicipital
26
+ @pl_subescapular = pl_subescapular
27
+ @pl_suprailiaco = pl_suprailiaco
28
+ @registro = Registro.new(nombre, peso, talla, edad, sexo, cir_cintura, cir_cadera, cir_brazo, pl_tricipital, pl_bicipital, pl_subescapular, pl_suprailiaco)
29
+ end
30
+
31
+ # @return [String] retorna una cadena con la información del paciente obeso.
32
+ def to_s
33
+ s = "Nombre: #{@nombre}
34
+ Peso: #{@peso}
35
+ Altura: #{@talla}
36
+ Edad: #{@edad}
37
+ "
38
+ if @sexo == 0
39
+ s << "Sexo: Hombre"
40
+ else s << "Sexo: Mujer"
41
+ end
42
+
43
+ s << "
44
+ Circunferencia cintura: #{@cir_cintura}
45
+ Circunferencia cadera: #{@cir_cadera}
46
+ Circunferencia brazo: #{@cir_brazo}
47
+ Pliegue tricipital: #{@pl_tricipital}
48
+ Pliegue bicipital: #{@pl_bicipital}
49
+ Pliegue subescapular: #{@pl_subescapular}
50
+ Pliegue suprailiaco: #{@pl_suprailiaco}"
51
+
52
+ s
53
+ end
54
+
55
+ end