alu0101028163 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,31 @@
1
+ class Persona
2
+
3
+ attr_reader :nombre, :peso, :talla, :edad, :sexo
4
+ # @param nombre [number] nombre del paciente.
5
+ # @param peso [number] peso del paciente.
6
+ # @param talla [number] altura del paciente en metros.
7
+ # @param edad [number] edad del paciente.
8
+ # @param sexo [number] sexo del paciente, 0 corresponde a hombre y 1 a mujer.
9
+ # @return [Paciente] retorna una instancia de la clase Persona.
10
+ def initialize(nombre, peso, talla, edad, sexo)
11
+ @nombre = nombre
12
+ @peso = peso
13
+ @talla = talla
14
+ @edad = edad
15
+ @sexo = sexo
16
+ end
17
+
18
+ # @return [String] retorna una cadena con la información de la Persona.
19
+ def to_s
20
+ s = "Nombre: #{@nombre}
21
+ Peso: #{@peso}
22
+ Altura: #{@talla}
23
+ Edad: #{@edad}
24
+ "
25
+ if @sexo == 0
26
+ s << "Sexo: Hombre"
27
+ else s << "Sexo: Mujer"
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,208 @@
1
+ #require "./list.rb"
2
+ #require "./etiqueta.rb"
3
+ #require "./registro.rb"
4
+ require "benchmark"
5
+
6
+ def peso_teorico(talla)
7
+ peso_teorico_ideal = (talla - 150) * 0.75 + 50
8
+ end
9
+
10
+ # Este es el método que tenía inicialmente
11
+ def gasto_basal(peso,talla,edad,sexo)
12
+ gasto_energetico_basal = 0
13
+ if sexo == 0 #Es un hombre
14
+ gasto_energetico_basal = (10*peso) + (6.25*talla) - (5*edad) + 5
15
+ else
16
+ gasto_energetico_basal = (10*peso) + (6.25*talla) - (5*edad) - 161
17
+ end
18
+ gasto_energetico_basal
19
+ end
20
+
21
+ def efecto_termogeno(peso,talla,edad,sexo)
22
+ efecto_termogeno = gasto_basal(peso,talla,edad,sexo) * 0.10
23
+ end
24
+
25
+ def gasto_actividad_fisica(peso,talla,edad,sexo,factor)
26
+ gasto_actividad = gasto_basal(peso,talla,edad,sexo) * factor
27
+ end
28
+
29
+ def gasto_energetico_total(peso,talla,edad,sexo,factor)
30
+ gasto_total = gasto_actividad_fisica(peso,talla,edad,sexo,factor) + gasto_basal(peso,talla,edad,sexo) + efecto_termogeno(peso,talla,edad,sexo)
31
+ end
32
+
33
+
34
+ def verificar_cantidad(menu, peso,talla,edad,sexo,factor)
35
+ val_ener_menu = menu.collect{ |menu| menu.valor_energetico[0]}
36
+ total_val = val_ener_menu.reduce(:+)
37
+ gasto_total = gasto_energetico_total(peso,talla,edad,sexo,factor)
38
+ margen_error = (total_val * 10) / 100
39
+
40
+ return true if gasto_total <= (total_val + margen_error) && gasto_total >= (total_val - margen_error)
41
+ false
42
+ end
43
+
44
+ # FUNCIONES PRÁCTICA 11 --------------------------------------------
45
+
46
+ # VALOR ENERGÉTICO DEL MENU
47
+ def valor_energetico_menu(menu)
48
+ sum = 0
49
+ for etiqueta in menu do
50
+ sum += etiqueta.valor_energetico[0]
51
+ end
52
+ sum = (sum*100).round() / 100.0
53
+
54
+ end
55
+
56
+ # VALOR ENERGÉTICO DE UNA VALORACIÓN NUTRICIONAL DE UN INDIVIDUO
57
+ def gasto_energetico_total_(persona)
58
+ gasto_total = gasto_actividad_fisica(persona.peso, persona.talla, persona.edad, persona.sexo, persona.factor) + gasto_basal(persona.peso, persona.talla, persona.edad, persona.sexo) + efecto_termogeno(persona.peso, persona.talla, persona.edad, persona.sexo)
59
+ gasto_total = (gasto_total*100).round() / 100.0
60
+ end
61
+
62
+ def swap(arr, a,b)
63
+ temp = arr[a]
64
+ arr[a] = arr[b]
65
+ arr[b] = temp
66
+ end
67
+
68
+ def obtener_array_sort(arr_menu, list_val)
69
+ Benchmark.bm do |x|
70
+ x.report{
71
+ arr_total = []
72
+ arr_menu.each {|menu| arr_total.push(valor_energetico_menu(menu))}
73
+ list_val.each {|nodo| arr_total.push(gasto_energetico_total_(nodo))}
74
+
75
+ arr_total.sort
76
+ } end
77
+
78
+ end
79
+
80
+ def obtener_array_each(arr_menu, list_val)
81
+ Benchmark.bm do |x|
82
+ x.report{
83
+ arr_total = []
84
+
85
+ arr_menu.each {|menu| arr_total.push(valor_energetico_menu(menu))}
86
+ list_val.each {|nodo| arr_total.push(gasto_energetico_total_(nodo))}
87
+
88
+ i = 0
89
+ arr_total.each do
90
+ j = i
91
+ min = arr_total[j]
92
+ min_pos = i
93
+ actual = arr_total[j]
94
+
95
+ while (j < arr_total.length) do
96
+ if (arr_total[j] < min)
97
+ min = arr_total[j]
98
+ min_pos = j
99
+ end
100
+ j += 1
101
+ end
102
+
103
+ if (min != actual)
104
+ swap(arr_total, min_pos, i)
105
+ end
106
+
107
+ i += 1
108
+ end
109
+ arr_total
110
+ }end
111
+ end
112
+
113
+
114
+ def obtener_array_for(arr_menu, list_val)
115
+ Benchmark.bm do |x|
116
+ x.report{
117
+ arr_total = []
118
+
119
+ # Insertamos en el array el contenido del valor energético de cada menú.
120
+ for i in arr_menu do
121
+ val_energetico = valor_energetico_menu(i)
122
+ arr_total.push(val_energetico)
123
+ end
124
+
125
+ # Insertamos en el array el contenido del gasto energético total de cada individuo.
126
+ for i in list_val do
127
+ arr_total.push(gasto_energetico_total_(i))
128
+ end
129
+
130
+ i = 0
131
+ for element in arr_total do
132
+
133
+ j = i
134
+ min = arr_total[j]
135
+ min_pos = i
136
+ actual = arr_total[j]
137
+
138
+ while (j < arr_total.length) do
139
+ if (arr_total[j] < min)
140
+ min = arr_total[j]
141
+ min_pos = j
142
+ end
143
+ j += 1
144
+ end
145
+
146
+ if (min != actual)
147
+ swap(arr_total, min_pos, i)
148
+ end
149
+
150
+ i += 1
151
+ end
152
+
153
+ arr_total
154
+ }end
155
+ end
156
+
157
+
158
+ # Código para poder visualizar los valores del benchmark
159
+ =begin
160
+ registro1 = Registro.new("Adrian", 80, 168, 20, 0, 132.3 , 122.3, 140.3 , 12.3 , 15.2, 11.4, 10.5,0.12)
161
+ registro2 = Registro.new("Gamma", 120, 190, 32, 0, 132.3 , 122.3, 140.3 , 12.3 , 15.2, 11.4, 10.5, 0.0)
162
+ registro3 = Registro.new("Beta", 60, 156, 45, 1, 132.3 , 122.3, 140.3 , 12.3 , 15.2, 11.4, 10.5, 0.12)
163
+ registro4 = Registro.new("Alpha", 76, 175, 18, 0, 132.3 , 122.3, 140.3 , 12.3 , 15.2, 11.4, 10.5, 0.27)
164
+ registro5 = Registro.new("Umma", 245, 180, 56, 1, 132.3 , 122.3, 140.3 , 12.3 , 15.2, 11.4, 10.5, 0.27)
165
+ registro6 = Registro.new("Pepe", 120, 198, 45, 0, 132.3 , 122.3, 140.3 , 12.3 , 15.2, 11.4, 10.5, 0.54)
166
+ registro7 = Registro.new("Jose", 80, 170, 56, 0, 132.3 , 122.3, 140.3 , 12.3 , 15.2, 11.4, 10.5, 0.0)
167
+ registro8 = Registro.new("Juan", 60, 170, 25, 0, 132.3 , 122.3, 140.3 , 12.3 , 15.2, 11.4, 10.5, 0.12)
168
+ registro9 = Registro.new("Francisco", 76, 175, 60, 0, 132.3 , 122.3, 140.3 , 12.3 , 15.2, 11.4, 10.5, 0.12)
169
+ registro10 = Registro.new("Mac", 100, 180, 28, 0, 132.3 , 122.3, 140.3 , 12.3 , 15.2, 11.4, 10.5, 0.27)
170
+
171
+
172
+ etiqueta1 = Etiqueta.new([120.24, 572.76], [17.3,10,12], [41.2,4.15,5.12], 3.3 , 2.4, 1.2, 0, false, 0, 0)
173
+ etiqueta2 = Etiqueta.new([1000, 572.76], [17.3,10,12], [41.2,4.15,5.12], 3.3 , 2.4, 1.2, 0, false, 0, 0)
174
+ etiqueta3 = Etiqueta.new([1023.24, 572.76], [17.3,10,12], [41.2,4.15,5.12], 3.3 , 2.4, 1.2, 0, false, 0, 0)
175
+ etiqueta4 = Etiqueta.new([224.4, 572.76], [17.3,10,12], [41.2,4.15,5.12], 3.3 , 2.4, 1.2, 0, false, 0, 0)
176
+ etiqueta5 = Etiqueta.new([523.2, 572.76], [17.3,10,12], [41.2,4.15,5.12], 3.3 , 2.4, 1.2, 0, false, 0, 0)
177
+ etiqueta6 = Etiqueta.new([670.53, 572.76], [17.3,10,12], [41.2,4.15,5.12], 3.3 , 2.4, 1.2, 0, false, 0, 0)
178
+
179
+ menu1 = [etiqueta1,etiqueta2,etiqueta3] # 2143.48 kcal
180
+ menu2 = [etiqueta1,etiqueta2,etiqueta5] # 1643.44 kcal
181
+ menu3 = [etiqueta2,etiqueta3,etiqueta4,etiqueta6] # 2918.17
182
+ menu4 = [etiqueta1,etiqueta3,etiqueta6]
183
+ menu5 = [etiqueta4,etiqueta2,etiqueta5,etiqueta1]
184
+ menu6 = [etiqueta4,etiqueta3,etiqueta6]
185
+ menu7 = [etiqueta2,etiqueta1,etiqueta5,etiqueta3]
186
+ menu8 = [etiqueta4,etiqueta2,etiqueta5,etiqueta1,etiqueta3]
187
+ menu9 = [etiqueta2,etiqueta1]
188
+ menu10 = [etiqueta4,etiqueta6,etiqueta5,etiqueta3]
189
+
190
+ arr_menu = [menu1,menu2,menu3,menu4,menu5,menu6,menu7,menu8,menu9,menu10]
191
+ lista_val = List.new()
192
+ lista_val.push_back(registro1)
193
+ lista_val.push_back(registro2)
194
+ lista_val.push_back(registro3)
195
+ lista_val.push_back(registro4)
196
+ lista_val.push_back(registro5)
197
+ lista_val.push_back(registro6)
198
+ lista_val.push_back(registro7)
199
+ lista_val.push_back(registro8)
200
+ lista_val.push_back(registro9)
201
+ lista_val.push_back(registro10)
202
+
203
+
204
+ total_arr = obtener_array_sort(arr_menu, lista_val)
205
+ total_arr = obtener_array_each(arr_menu, lista_val)
206
+ total_arr = obtener_array_for(arr_menu, lista_val)
207
+
208
+ =end
@@ -0,0 +1,167 @@
1
+
2
+ class Registro
3
+ include Comparable
4
+ attr_reader :nombre, :peso, :talla, :edad, :sexo, :cir_cintura, :cir_cadera, :cir_brazo, :pl_tricipital, :pl_bicipital, :pl_subescapular, :pl_suprailiaco, :imc, :factor
5
+
6
+ # @param [Registro] recibe como parámetro otra instancia de la clase Registro con la que va a compararse
7
+ # @return [Number] retorna -1,0 o 1.
8
+ def <=>(anOther)
9
+ @imc <=> anOther.imc
10
+ end
11
+
12
+ # @param nombre [number] nombre del paciente.
13
+ # @param peso [number] peso del paciente.
14
+ # @param talla [number] altura del paciente en metros.
15
+ # @param edad [number] edad del paciente.
16
+ # @param sexo [number] sexo del paciente, 0 corresponde a hombre y 1 a mujer.
17
+ # @param cir_cintura [Number] circunferencia de la cintura del paciente.
18
+ # @param cir_cadera [Number] circunferencia de la cadera del paciente.
19
+ # @param cir_brazo [Number] circunferencia del brazo del paciente.
20
+ # @param pl_tricipital [Number] longitud del pliege tricipital del pariente.
21
+ # @param pl_bicipital [Number] longitud del pliege bicipital del pariente.
22
+ # @param pl_subescapular [Number] longitud del pliege subescapular del pariente.
23
+ # @param pl_suprailiaco [Number] longitud del pliege suprailiaco del pariente.
24
+ # @return [Paciente_Obeso] retorna una instancia de la clase Registro.
25
+ def initialize(nombre, peso, talla, edad, sexo, cir_cintura = nil, cir_cadera = nil, cir_brazo = nil, pl_tricipital = nil, pl_bicipital = nil, pl_subescapular = nil, pl_suprailiaco = nil, factor= nil)
26
+ @nombre = nombre
27
+ @peso = peso
28
+ @talla = talla
29
+ @edad = edad
30
+ @sexo = sexo
31
+ @cir_cintura = cir_cintura
32
+ @cir_cadera = cir_cadera
33
+ @cir_brazo = cir_brazo
34
+ @pl_tricipital = pl_tricipital
35
+ @pl_bicipital = pl_bicipital
36
+ @pl_subescapular = pl_subescapular
37
+ @pl_suprailiaco = pl_suprailiaco
38
+ @factor = factor
39
+ @imc = self.calcular_imc
40
+ end
41
+
42
+ # @return [Number] retorna el índice de masa corporal.
43
+ def calcular_imc
44
+ imc = @peso / (@talla * @talla)
45
+ imc = (imc * 100).round() / 100.0
46
+ end
47
+
48
+ # @return [Number] retorna el porcentaje de grasas.
49
+ def calcular_pctj_grasa
50
+ pctj_grasa = (1.2 * self.calcular_imc()) + (0.23 * @edad) - (10.9 * @sexo) - 5.4
51
+ pctj_grasa = (pctj_grasa*100).round() / 100.0
52
+ end
53
+
54
+ # @return [Number] retorna el rcc.
55
+ def calcular_rcc
56
+ cir_cintura = calcular_media(@cir_cintura)
57
+ cir_cadera = calcular_media(@cir_cadera)
58
+ rcc = cir_cintura / cir_cadera
59
+ rcc = (rcc * 100).round() / 100.0
60
+ end
61
+
62
+ # @return [String] retorna una cadena donde se evalúa el índice de masa corporal.
63
+ def evaluar_imc
64
+
65
+ imc = calcular_imc()
66
+
67
+ if (imc < 18.5)
68
+ puts "IMG menor que 18.5, según la OMS bajo peso, popularmente asociamos a las personas con este índice como Aceptables."
69
+ elsif (18.5 < imc && imc < 24.9)
70
+ puts "IMC entre 18.5 y 24.5, según la OMS un índice adecuado, popularmente asociamos a las personas con este índice como Aceptables."
71
+ elsif (25.0 < imc && imc < 29.9)
72
+ puts "IMC entre 25.0 y 29.9, según la OMS un índice de sobrepeso, popularmente asociamos a las personas con este índice como con sobrepeso."
73
+ elsif (30.0 < imc && imc < 34.9)
74
+ puts "IMC entre 30.0 y 34.9, según la OMS un índice de Obesidad grado 1, popularmente asociamos a las personas con este índice como obesas."
75
+ elsif (35.0 < imc && imc < 39.9)
76
+ puts "IMC entre 35.0 y 39.9, según la OMS un índice de Obesidad grado 2, popularmente asociamos a las personas con este índice como obesas."
77
+ elsif (imc > 40)
78
+ puts "IMC mayor de 40, según la OMS un índice de Obesidad grado 2, popularmente asociamos a las personas con este índice como obesas."
79
+ end
80
+
81
+ end
82
+
83
+ # @return [String] retorna una cadena donde se evalúa el rcc.
84
+ def evaluar_rcc
85
+
86
+ rcc = calcular_rcc()
87
+
88
+ case @sexo
89
+ when 0
90
+ if (0.72 < rcc && rcc < 0.75)
91
+ puts "RCC entre 0.72 y 0.75 conlleva un riesgo bajo para una mujer"
92
+ elsif (0.78 < rcc && rcc < 0.82)
93
+ puts "RCC entre 0.78 y 0.82 conlleva un riesgo moderado para una mujer"
94
+ elsif (rcc > 0.82)
95
+ puts "RCC mayor que 0.82, conlleva un riesgo alto para una mujer"
96
+ end
97
+ when 1
98
+ if (0.83 < rcc && rcc < 0.88)
99
+ puts "RCC entre 0.83 y 0.88 conlleva un riesgo bajo para un hombre"
100
+ elsif (0.88 < rcc && rcc < 0.95)
101
+ puts "RCC entre 0.88 y 0.95 conlleva un riesgo moderado para un hombre"
102
+ elsif (0.95 < rcc && rcc < 1.01)
103
+ puts "RCC entre 0.95 y 1.01 conlleva un riesgo alto para un hombre"
104
+ elsif (rcc > 1.01)
105
+ puts "RCC mayor de 1.01 conlleva un riesgo muy alto para un hombre"
106
+ end
107
+ end
108
+ end
109
+
110
+ # @return [Number] calcula la media de los datos.
111
+ def calcular_media(datos_)
112
+
113
+ mean = 0.0
114
+ datos_.each{ |x| mean = mean + x }
115
+ mean /= datos_.length
116
+ mean = ( mean * 100).round() / 100.0
117
+
118
+ end
119
+
120
+ # @return [String] muestra la información del registro.
121
+ def mostrar_info()
122
+
123
+ print("Nombre: ", @nombre)
124
+ puts " "
125
+ print("Peso: ", @peso)
126
+ puts " "
127
+ print("Talla: ", @talla)
128
+ puts " "
129
+ print("Edad: ", @edad)
130
+ puts " "
131
+ print("Sexo: ", @nombre)
132
+ puts " "
133
+
134
+ print("Circunferencia de la cintura: ", @cir_cintura)
135
+ puts " "
136
+ puts "Media: %0.2f" %[calcular_media(@cir_cintura)]
137
+
138
+ print("Circunferencia de la cadera: ", @cir_cadera)
139
+ puts " "
140
+ puts "Media: %0.2f" %[calcular_media(@cir_cadera)]
141
+
142
+ print("Circunferencia del brazo: ", @cir_brazo)
143
+ puts " "
144
+ puts "Media: %0.2f" %[calcular_media(@cir_brazo)]
145
+
146
+ print("Pliegue tricipital ", @pl_tricipital)
147
+ puts " "
148
+ puts "Media: %0.2f" %[calcular_media(@pl_tricipital)]
149
+
150
+ print("Pliegue bicicipital ", @pl_bicipital)
151
+ puts " "
152
+ puts "Media: %0.2f" %[calcular_media(@pl_bicipital)]
153
+
154
+ print("Pliegue subescapular ", @pl_subescapular)
155
+ puts " "
156
+ puts "Media: %0.2f" %[calcular_media(@pl_subescapular)]
157
+
158
+ print("Pliegue suprailiaco ", @pl_suprailiaco)
159
+ puts " "
160
+ puts "Media: %0.2f" %[calcular_media(@pl_suprailiaco)]
161
+
162
+ evaluar_imc()
163
+ evaluar_rcc()
164
+
165
+ end
166
+
167
+ end
@@ -0,0 +1,3 @@
1
+ module Practica6
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,46 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "practica6/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "alu0101028163"
8
+ spec.version = Practica6::VERSION
9
+ spec.authors = ["alu0101028163"]
10
+ spec.email = ["alu0101028163@ull.edu.es"]
11
+
12
+ spec.summary = %q{Práctica 6 de Lenguajes y paradigmas de programación}
13
+ spec.description = %q{Práctica 6 de Lenguajes y paradigmas de programación utilizando TDD}
14
+ spec.homepage = 'http://rubygems.org/gems/alu0101028163'
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
21
+
22
+ spec.metadata["homepage_uri"] = spec.homepage
23
+ spec.metadata["source_code_uri"] = " "
24
+ spec.metadata["changelog_uri"] = " "
25
+ else
26
+ raise "RubyGems 2.0 or newer is required to protect against " \
27
+ "public gem pushes."
28
+ end
29
+
30
+ # Specify which files should be added to the gem when it is released.
31
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
33
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
+ end
35
+ spec.bindir = "exe"
36
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
+ spec.require_paths = ["lib"]
38
+
39
+ spec.add_development_dependency "bundler", "~> 1.17"
40
+ spec.add_development_dependency "rake", "~> 10.0"
41
+ spec.add_development_dependency "rspec", "~> 3.0"
42
+ spec.add_development_dependency "guard"
43
+ spec.add_development_dependency "guard-rspec"
44
+ spec.add_development_dependency "guard-bundler"
45
+ spec.add_development_dependency "coveralls"
46
+ end