alimento_alu0101050218 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.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