alimento_alu0101050218 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.20
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="Array.html" title="Array (class)">Array</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 Dec 17 22:28:19 2019 by
106
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
107
+ 0.9.20 (ruby-2.5.1).
108
+ </div>
109
+
110
+ </div>
111
+ </body>
112
+ </html>
@@ -0,0 +1,14 @@
1
+ require "alimento/version"
2
+ require "alimento/alimento"
3
+ require "alimento/list"
4
+ require "alimento/plato"
5
+ require "alimento/platoambiental"
6
+ require "alimento/Array"
7
+ require "alimento/menuDSL"
8
+ require "alimento/platoDSL"
9
+
10
+
11
+ module Alimento
12
+ class Error < StandardError; end
13
+ # Your code goes here...
14
+ end
@@ -0,0 +1,31 @@
1
+ # @author Hernan Daniel Gonzalez Guanipa
2
+ class Array
3
+
4
+
5
+ # @note Calculo del elemento maximo del array
6
+ # @return [Object] Objeto del mayor dato entre los comparados
7
+ def Max
8
+ self.max{|a, b| a.huella_nutricional <=> b.huella_nutricional}
9
+ end
10
+
11
+ # @note Aumento de los precios segun el indice
12
+ # @param precios Array con valores flotantes
13
+ # @return [Array] Vector con los valores aumentados
14
+ def high_prices(precios)
15
+ huella_maxima = self.Max.huella_nutricional
16
+ i = 0
17
+ nuevos_precios = []
18
+ self.each { |iter|
19
+ if huella_maxima = 1
20
+ nuevos_precios.push((precios[i] * 1.10).round(2))
21
+ elsif huella_maxima = 2
22
+ nuevos_precios.push((precios[i] * 1.25).round(2))
23
+ else
24
+ nuevos_precios.push((precios[i] * 1.50).round(2))
25
+ end
26
+ i += 1
27
+ }
28
+ return nuevos_precios
29
+ end
30
+
31
+ end
@@ -0,0 +1,135 @@
1
+ # @author Hernan Daniel Gonzalez Guanipa
2
+
3
+ module Alimento
4
+
5
+ class Alimento
6
+
7
+ include Comparable
8
+
9
+ attr_reader :nombre, :proteinas, :carbohidratos, :lipidos, :gei, :terreno
10
+
11
+ # @note Constructor de la clase
12
+ # @param nombre Identificador del alimento
13
+ # @param proteinas Cantidad de proteinas en gramos
14
+ # @param carbohidratos Cantida de carbohidratos en gramos
15
+ # @param lipidos Cantidad e lipidos en gramos
16
+ # @param gei Cantidad de emisiones de gases
17
+ # @param terreno Terreno ocupado por la frabricacaion de cada alimento
18
+ def initialize (nombre, proteinas, carbohidratos, lipidos, gei, terreno)
19
+ @nombre, @proteinas, @carbohidratos, @lipidos, @gei, @terreno = nombre, proteinas, carbohidratos, lipidos, gei, terreno
20
+ end
21
+
22
+ # @note Comparador de alimentos
23
+ # @param other Alimento con el que comparar
24
+ # @return [Alimento] Objeto que sea mayor
25
+ def <=>(other)
26
+ valor_energetico(valor_glucidos(carbohidratos), valor_proteinas(proteinas), valor_lipidos(lipidos)) <=> other.valor_energetico(other.valor_glucidos(other.carbohidratos), other.valor_proteinas(other.proteinas), other.valor_lipidos(other.lipidos))
27
+ end
28
+
29
+ # @note Conversion de los carbohidratos a kcal
30
+ # @param carbohidrato Cantidad de carbohidratos en gramos
31
+ # @return [Float] El cambio a kcal
32
+ def valor_glucidos (carbohidrato)
33
+ return (carbohidrato*4).round(1)
34
+ end
35
+
36
+
37
+ # @note Conversion de las proteinnas en kcal
38
+ # @param proteinas Cantidad de proteinas en gramos
39
+ # @return [Float] El cambio a kcal
40
+ def valor_proteinas (proteinas)
41
+ return (proteinas*4).round(1)
42
+ end
43
+
44
+
45
+ # @note Conversion de los lipidos en kcal
46
+ # @param lipidos Cantida dde proteinas en gramos
47
+ # @return [Float] El cambio a kcal
48
+ def valor_lipidos (lipidos)
49
+ return (lipidos*9).round(1)
50
+ end
51
+
52
+
53
+ # @note Calculo de la energia del alimento
54
+ # @param valor_glucidos Kcal de los carbohidratos
55
+ # @param valor_proteinas Kcal de las proteinas
56
+ # @param valor_lipidos Kcal de los lipidos
57
+ # @return [Float] Valor energetico del alimento
58
+ def valor_energetico (valor_glucidos, valor_proteinas, valor_lipidos)
59
+ return (valor_glucidos + valor_proteinas + valor_lipidos).round(1)
60
+ end
61
+
62
+
63
+ # @note Calculo de emisiones de gases de un conjunto de alimentos
64
+ # @param persona Vector de conjunto de alimentos
65
+ # @param cuantos_persona Vector de cantidad de cada alimento
66
+ # @return [Float] Emisiones del conjunto de alimntos y sus respectivas cantidades
67
+ def impacto_ambiental(persona, cuantos_persona)
68
+ i = 0
69
+ impacto_amb = 0
70
+ while i < persona.length do
71
+ impacto_amb += persona[i].gei * cuantos_persona[i]
72
+ i += 1
73
+ end
74
+ return (impacto_amb).round(1)
75
+ end
76
+
77
+
78
+ # @note Calculo del terreno ocupado por un conjunto de alimentos
79
+ # @param persona Vector de conjunto de alimentos
80
+ # @param cuantos_persona Vector de cantidad de cada alimento
81
+ # @return [Float] Terreno ocupado por todos los alimentos y sus cantidades
82
+ def uso_terreno(persona, cuantos_persona)
83
+ i = 0
84
+ uso_ter = 0
85
+ while i < persona.length do
86
+ uso_ter += persona[i].terreno * cuantos_persona[i]
87
+ i += 1
88
+ end
89
+ return (uso_ter).round(1)
90
+ end
91
+
92
+
93
+ # @note Calculo de emisiones en un dia con una lista de alimentos
94
+ # @param list Lista de alimentos doblemente enlazada
95
+ # @return [Float] Suma de las emisiones (gei) de todos los alimentos de la lista
96
+ def emision_lista_dia(list)
97
+ actual = list.tail
98
+ sum_emision = 0
99
+ while actual.next != nil do
100
+ sum_emision += actual.value.gei
101
+ actual = actual.next
102
+ end
103
+ if actual = list.head
104
+ sum_emision += list.head.value.gei
105
+ end
106
+ return sum_emision.round(2)
107
+ end
108
+
109
+ # @note Calculo de las emisiones en un año con una lista de alimentos
110
+ # @param list Lista de alimentos doblemente enlazada
111
+ # @return [Float] Suma de las emisiones por un año
112
+ def emision_lista_anual(list)
113
+ return (emision_lista_dia(list) * 365).round(2)
114
+ end
115
+
116
+ # @note Calculo del terreno ocupado por una lista de alimentos
117
+ # @param list Lista de alimetos doblemente enlazada
118
+ # @return [Float] Terreno total ocupado por la lista de alimentos
119
+ def uso_lista_terreno(list)
120
+ actual = list.tail
121
+ sum_emision = 0
122
+ while actual.next != nil do
123
+ sum_emision += actual.value.terreno
124
+ actual = actual.next
125
+ end
126
+ if actual = list.head
127
+ sum_emision += list.head.value.terreno
128
+ end
129
+ return sum_emision.round(2)
130
+ end
131
+
132
+
133
+ end
134
+
135
+ end
@@ -0,0 +1,87 @@
1
+ # @author Hernan Daniel Gonzalez Guanipa
2
+ module Alimento
3
+
4
+ # @note Estructura de datos correspondiente a un nodo
5
+ Node = Struct.new(:value, :next, :prev)
6
+
7
+ class List
8
+
9
+ include Enumerable
10
+
11
+ attr_reader :head, :tail
12
+
13
+ # @note Constructor de la clase
14
+ # @param value Contenido de un nodo
15
+ def initialize (value)
16
+ @head = Node.new(value, nil, nil)
17
+ @tail = @head
18
+ end
19
+
20
+
21
+ # @note Recorrer la lista
22
+ def each
23
+ return nil unless block_given?
24
+ actual = self.tail
25
+ while actual
26
+ yield actual
27
+ actual = actual.next
28
+ end
29
+ end
30
+
31
+
32
+ # @note Insertar elemento en la cabeza de la lista
33
+ # @param value Contenido del nodo a insertar
34
+ def insert_head(value)
35
+ actual_head = @head
36
+ new_head = Node.new(value, nil,actual_head)
37
+ actual_head.next = new_head
38
+ @head = new_head
39
+ end
40
+
41
+
42
+ # @note Insertar elemento por la cola de la lista
43
+ # @param value Contenido del nodo a insertar
44
+ def insert_tail(value)
45
+ actual_tail = @tail
46
+ new_tail = Node.new(value, actual_tail, nil)
47
+ actual_tail.prev = new_tail
48
+ @tail = new_tail
49
+ end
50
+
51
+
52
+ # @note Insertar varios elementos en la lista
53
+ # @param value_array Vector de elementos a insertar en la lista
54
+ def insert_sundry(value_array)
55
+ i = 0
56
+ while i < value_array.length do
57
+ insert_head(value_array[i])
58
+ i += 1
59
+ end
60
+ end
61
+
62
+
63
+
64
+ # @note Extraer el elemento en la cabeza de la lista
65
+ # @return [Node] Nodo de la lista extraido
66
+ def extract_head
67
+ actual_head = @head
68
+ new_head = actual_head.prev
69
+ actual_head.prev = nil
70
+ new_head.next = nil
71
+ return new_head
72
+ end
73
+
74
+
75
+ # @note Extraer elemento en la cabeza de la lista
76
+ # @return [Node] Nodo de la lista extraido
77
+ def extract_tail
78
+ actual_tail = @tail
79
+ new_tail = actual_tail.next
80
+ actual_tail.next = nil
81
+ new_tail.prev = nil
82
+ return new_tail
83
+ end
84
+
85
+ end
86
+
87
+ end
@@ -0,0 +1,59 @@
1
+ module Alimento
2
+
3
+ class MenuDSL
4
+
5
+ attr_reader :nombre, :descripcion_menu, :componentes_menu, :precios, :precio_total
6
+
7
+ def initialize(nombre, &block)
8
+ @nombre = nombre
9
+ @componentes_menu = []
10
+ @precios = []
11
+ @descripcion_menu = ""
12
+ @precio_total
13
+
14
+ if block_given?
15
+ if block.arity == 1
16
+ yield self
17
+ else
18
+ instance_eval(&block)
19
+ end
20
+ end
21
+ end
22
+
23
+
24
+ def descripcion(descr)
25
+ @descripcion_menu = descr
26
+ end
27
+
28
+
29
+ def componente(options = {})
30
+ @componentes_menu << options[:platito] if options[:platito]
31
+ @precios << options[:precio] if options[:precio]
32
+ end
33
+
34
+
35
+ def precio(coste)
36
+ @precio_total = coste
37
+ end
38
+
39
+
40
+ def to_s
41
+
42
+ output = "Nombre de menu: #{@nombre}"
43
+ output += "\nPlatos:"
44
+ @componentes_menu.each {|iter|
45
+ if iter.platito == nil
46
+ iter.platillo()
47
+ end
48
+
49
+ output += "\n\n\tTipo: #{iter.platito.nombre}"
50
+ output += "\n\tValor Nutricional: #{iter.platito.VCT()}"
51
+ output += "\n\tValor Ambiental: #{iter.platito.emisiones_total()}"
52
+ }
53
+ output += "\n\nPrecio menú: #{@precio_total}"
54
+ output
55
+ end
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,93 @@
1
+ # @author Hernan Daniel Gonzalez Guanipa
2
+ module Alimento
3
+
4
+ class Plato
5
+
6
+ include Enumerable
7
+ include Comparable
8
+
9
+ attr_reader :nombre, :lista, :cantidades
10
+
11
+
12
+ # @note Constructor de la clase
13
+ # @param nombre Identificador del plato
14
+ # @param lista Lista de alimentos
15
+ # @param cantidades Vector de las cantidades de cada alimento
16
+ def initialize(nombre, lista, cantidades)
17
+ @nombre, @lista, @cantidades = nombre, lista, cantidades
18
+ end
19
+
20
+ # @note Comparador de platos
21
+ # @param otro Objeto de tipo plato con el que comparar
22
+ # @return Plato con mayor contenido en kcal
23
+ def <=>(otro)
24
+ VCT() <=> otro.VCT
25
+ end
26
+
27
+
28
+ # @note Calculo de las kcal totales de cada plato con sus cantidades
29
+ # @return [Float] Valor total de kcal
30
+ def VCT
31
+ total_kcal = 0
32
+ i = 0
33
+ @lista.each{ |iter|
34
+ total_kcal += (iter.value.valor_energetico(iter.value.valor_glucidos(iter.value.carbohidratos), iter.value.valor_proteinas(iter.value.proteinas), iter.value.valor_lipidos(iter.value.lipidos)) * @cantidades[i]/100)
35
+ i += 1
36
+ }
37
+ return total_kcal.round(1)
38
+ end
39
+
40
+
41
+ # @note Calculo del procentaje de proteinas del plato
42
+ # @return [Float] Porcentaje de proteinas
43
+ def porcentaje_proteinas
44
+ total = VCT()
45
+ proteinas =
46
+ i = 0
47
+ lista.each{|iter|
48
+ proteinas += iter.value.valor_proteinas(iter.value.proteinas * @cantidades[i]/100)
49
+ i += 1}
50
+ return ((proteinas * 100) / total).round(1)
51
+ end
52
+
53
+
54
+ # @note Calculo del procentaje de carbohidratos del plato
55
+ # @return [Float] Porcentaje de carbohidratos
56
+ def porcentaje_carbohidratos
57
+ total = VCT()
58
+ carbohidratos =
59
+ i = 0
60
+ lista.each{|iter|
61
+ carbohidratos += iter.value.valor_glucidos(iter.value.carbohidratos * @cantidades[i]/100)
62
+ i += 1}
63
+ return ((carbohidratos * 100) / total).round(1)
64
+ end
65
+
66
+
67
+ # @note Calculo del procentaje de lipidos del plato
68
+ # @return [Float] Porcentaje de lipidos
69
+ def porcentaje_lipidos
70
+ total = VCT()
71
+ lipidos =
72
+ i = 0
73
+ lista.each{|iter|
74
+ lipidos += iter.value.valor_lipidos(iter.value.lipidos * @cantidades[i]/100)
75
+ i += 1}
76
+ return ((lipidos * 100) / total).round(1)
77
+ end
78
+
79
+
80
+ # @note Formateo del plato
81
+ # @return [String] El nombre del plato y los alimentos que lo componen
82
+ def to_s
83
+ string = "Plato: #{nombre}, Componentes: "
84
+ i = 0
85
+ lista.collect{|iter|
86
+ string += "'#{iter.value.nombre} (#{cantidades[i]}g)' "
87
+ i += 1 }
88
+
89
+ return string
90
+ end
91
+
92
+ end
93
+ end