practica 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.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +2 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile +6 -0
  5. data/Gemfile.lock +97 -0
  6. data/Guardfile +82 -0
  7. data/README.md +11 -0
  8. data/Rakefile +6 -0
  9. data/bin/.yardoc/checksums +0 -0
  10. data/bin/.yardoc/complete +0 -0
  11. data/bin/.yardoc/object_types +0 -0
  12. data/bin/.yardoc/objects/root.dat +0 -0
  13. data/bin/.yardoc/proxy_types +0 -0
  14. data/bin/console +14 -0
  15. data/bin/doc/_index.html +85 -0
  16. data/bin/doc/class_list.html +51 -0
  17. data/bin/doc/css/common.css +1 -0
  18. data/bin/doc/css/full_list.css +58 -0
  19. data/bin/doc/css/style.css +496 -0
  20. data/bin/doc/file_list.html +51 -0
  21. data/bin/doc/frames.html +17 -0
  22. data/bin/doc/index.html +85 -0
  23. data/bin/doc/js/app.js +303 -0
  24. data/bin/doc/js/full_list.js +216 -0
  25. data/bin/doc/js/jquery.js +4 -0
  26. data/bin/doc/method_list.html +51 -0
  27. data/bin/doc/top-level-namespace.html +100 -0
  28. data/bin/setup +8 -0
  29. data/doc/Alimento.html +1221 -0
  30. data/doc/Lista.html +1496 -0
  31. data/doc/Node.html +817 -0
  32. data/doc/Persona.html +362 -0
  33. data/doc/Plato.html +1651 -0
  34. data/doc/Plato_2.html +1280 -0
  35. data/doc/Practica.html +132 -0
  36. data/doc/_index.html +161 -0
  37. data/doc/class_list.html +51 -0
  38. data/doc/css/common.css +1 -0
  39. data/doc/css/full_list.css +58 -0
  40. data/doc/css/style.css +496 -0
  41. data/doc/file.README.html +81 -0
  42. data/doc/file_list.html +56 -0
  43. data/doc/frames.html +17 -0
  44. data/doc/index.html +81 -0
  45. data/doc/js/app.js +303 -0
  46. data/doc/js/full_list.js +216 -0
  47. data/doc/js/jquery.js +4 -0
  48. data/doc/method_list.html +667 -0
  49. data/doc/top-level-namespace.html +112 -0
  50. data/lib/practica.rb +10 -0
  51. data/lib/practica/lista.rb +189 -0
  52. data/lib/practica/menu.rb +42 -0
  53. data/lib/practica/nodo.rb +24 -0
  54. data/lib/practica/persona.rb +22 -0
  55. data/lib/practica/plato.rb +103 -0
  56. data/lib/practica/plato_herencia.rb +140 -0
  57. data/lib/practica/plato_herencia2.rb +44 -0
  58. data/lib/practica/practica6.rb +53 -0
  59. data/lib/practica/version.rb +4 -0
  60. data/practica.gemspec +46 -0
  61. metadata +215 -0
@@ -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="Practica.html" title="Practica (module)">Practica</a></span>
86
+
87
+
88
+
89
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="Alimento.html" title="Alimento (class)">Alimento</a></span>, <span class='object_link'><a href="Lista.html" title="Lista (class)">Lista</a></span>, <span class='object_link'><a href="Node.html" title="Node (class)">Node</a></span>, <span class='object_link'><a href="Persona.html" title="Persona (class)">Persona</a></span>, <span class='object_link'><a href="Plato.html" title="Plato (class)">Plato</a></span>, <span class='object_link'><a href="Plato_2.html" title="Plato_2 (class)">Plato_2</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 Thu Dec 19 12:37:22 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.7).
108
+ </div>
109
+
110
+ </div>
111
+ </body>
112
+ </html>
@@ -0,0 +1,10 @@
1
+ # Aqui incluimos los diferentes ficheros que definen las clases que vamos a usar
2
+ require "practica/version"
3
+ require "practica/practica6"
4
+ require "practica/persona"
5
+ require "practica/nodo"
6
+ require "practica/lista"
7
+ require "practica/plato"
8
+ require "practica/plato_herencia"
9
+ require "practica/plato_herencia2"
10
+ require "practica/menu.rb"
@@ -0,0 +1,189 @@
1
+ # Clase Lista que contendra diversos nodos enlazados entre si
2
+ class Lista
3
+ attr_reader :head,:tail,:size
4
+ include Enumerable #incluimos el modulo Enumerable
5
+
6
+ def initialize(head) #constructor
7
+ @size = 1 #inicializamos el size de la lista a 1
8
+ @gei=0.0 #establecemos @terreno y @ gei total a 0
9
+ @terreno=0.0
10
+ @cadena ="#{head.to_s}" # creamos el objeto lista formateado a string
11
+ @nuevo = Node.new(head,nil,nil) # creamos el nodo con el objeto que le pasamos por parametro
12
+ @head = @nuevo # establecemos que tanto la cabeza como la cola son el mismo, pues la lista solo tiene un nodo
13
+ @tail = @nuevo
14
+
15
+ end
16
+ def each #operador each para Enumerable
17
+ @i = head #indice que empieza en head
18
+ while (@i != nil) # bucle para recorrer la lista, hasta que el indice sea nil ( el siguiente despues de la cola)
19
+ yield @i.get_valor # marcamos el valor del nodo en el que se encuentra el indice
20
+ @i=@i.get_siguiente # hacemos que el indice avance al proximo nodo
21
+ end
22
+ end
23
+
24
+ def [] (index) #operador de acceso segun un indice
25
+ if index.is_a?Integer #verificamos que el indice es un entero
26
+ if index== 0 # en caso de que sea 0, retornamos head
27
+ return @head.get_this
28
+ elsif index== (@size -1) #en caso de que sea el ultimo, retornamos head
29
+ return @tail.get_this
30
+ elsif index< (@size -1) && index> 0 # en otro caso, recorremos la lista hasta encontrar el nodo que corresponda al indice
31
+ iterator= @head
32
+ index.times{iterator= iterator.next}
33
+ return iterator.get_this
34
+ else # en cualquier otro caso retornamos nil
35
+ return nil
36
+ end
37
+ end
38
+ return nil
39
+ end
40
+
41
+
42
+ def buscar (dato,siguiente,anterior) #metodo para buscar un Alimento dentro de la lista
43
+
44
+
45
+ @actual = @head #nodo con el que vamos a comparar
46
+ @encontrado = false # condicion de parada
47
+
48
+
49
+ while (@actual != nil && @encontrado ==false) do # bucle que recorre todos los nodos hasta que o bien encuentra una coincidencia o hasta que no hayan mas nodos
50
+
51
+ if (dato == @actual.get_valor ) then # si coincide
52
+
53
+ if((siguiente == nil )&& (@actual.get_siguiente==nil)) then # en caso de que no haya siguiente
54
+
55
+ if(@actual.get_prev.get_valor == anterior) then # si el anterior coincide
56
+
57
+ @encontrado=true # lo encontamos
58
+ end
59
+
60
+
61
+ elsif (anterior==nil && @actual.get_prev== nil) then # en caso de que no haya anterior
62
+
63
+ if(@actual.get_siguiente.get_valor == siguiente)then # comparamos con el siguiente
64
+ @encontrado=true # lo encontramos
65
+ end
66
+
67
+
68
+
69
+ elsif(@actual.get_prev != nil && @actual.get_siguiente !=nil) #verificamos que tanto siguiente como anterior no son nil
70
+ if(@actual.get_siguiente.get_valor ==siguiente && @actual.get_prev.get_valor == anterior ) then #si tanto anterior como siguiente coinciden
71
+ @encontrado=true # lo encontramos
72
+ else
73
+ @actual=@actual.get_siguiente # em caso contrario avanzamos
74
+ end
75
+
76
+
77
+ else #si no coincide anterior y siguiente
78
+
79
+ @actual=@actual.get_siguiente # obtenemos el siguiente nodo
80
+ end
81
+
82
+
83
+ else #si no
84
+ @actual=@actual.get_siguiente # obtenemos el siguiente nodo
85
+ end
86
+ end
87
+
88
+ return @encontrado #retornamos si lo encontramos o no
89
+ end
90
+
91
+ def insertar_back(nuevo) #metodo para insertar un Alimento por el final de la lista
92
+ @size = @size +1
93
+ @nodo_nuevo = Node.new(nuevo,nil,nil)
94
+
95
+ @tail.set_next(@nodo_nuevo.get_this)
96
+ @aux=@tail.get_this
97
+ @tail = @nodo_nuevo.get_this
98
+ @tail.set_prev(@aux.get_this)
99
+
100
+ return @tail.get_valor
101
+ end
102
+
103
+ def insertar(nuevo) #metodo para insertar un Alimento por la cabeza
104
+ @size = @size +1
105
+ @nodo_nuevo = Node.new(nuevo,nil,nil)
106
+
107
+ @head.set_prev(@nodo_nuevo.get_this)
108
+ @aux = @head.get_this
109
+ @head = @nodo_nuevo.get_this
110
+ @head.set_next(@aux.get_this)
111
+
112
+ return @head.get_valor
113
+ end
114
+
115
+ def insertar_list(lista) # metodo que se encarga de enlazar dos listas
116
+ @size = @size+lista.size
117
+ @tail.set_next(lista.head.get_this)
118
+ lista.head.set_prev(@tail.get_this)
119
+ @tail=lista.tail.get_this
120
+ return @tail
121
+ end
122
+
123
+ def get_gei #metodo que obtiene el total de GEI de todos los alimentos dentro de la lista
124
+ @actual = @head
125
+
126
+
127
+ while (@actual != nil ) do # bucle que recorre todos los nodos hasta que o bien encuentra una coincidencia o hasta que no hayan mas nodos
128
+ @gei= @gei +@actual.get_valor.get_GEI
129
+ @actual = @actual.get_siguiente
130
+ end
131
+
132
+ return @gei.round(2)
133
+
134
+ end
135
+
136
+ def get_gei_y #metodo que obtioene el GEI por año
137
+
138
+ return (self.get_gei * 365).round(2)
139
+ end
140
+
141
+ def get_terreno #metodo que obtiene el terreno total de todos los Alimentos de la lista
142
+ @actual = @head
143
+
144
+
145
+ while (@actual != nil ) do # bucle que recorre todos los nodos hasta que o bien encuentra una coincidencia o hasta que no hayan mas nodos
146
+ @terreno= @terreno +@actual.get_valor.get_terreno
147
+ @actual = @actual.get_siguiente
148
+ end
149
+
150
+ return @terreno.round(2)
151
+
152
+ end
153
+
154
+ def pop # metodo que saca un alimento desde la cabeza
155
+ @size = @size -1
156
+ @aux = @head
157
+ @head =@head.get_siguiente
158
+ @head.set_prev(nil)
159
+ @aux.set_next(nil)
160
+ return @aux.get_valor
161
+ end
162
+
163
+ def pop_back # metodo que saca un alimento desde la cola
164
+ @size = @size-1
165
+ @aux =@tail
166
+ @tail = @tail.get_prev
167
+ @tail.set_next(nil)
168
+ @aux.set_prev(nil)
169
+
170
+ return @aux.get_valor
171
+ end
172
+
173
+ def to_s #metodo que formatea la lista en un string
174
+ @actual = @head.get_siguiente
175
+ if(@actual != nil) then
176
+
177
+ while (@actual!=nil) do
178
+
179
+ @cadena= @cadena + ",#{@actual.get_valor.to_s}"
180
+ @actual = @actual.get_siguiente
181
+ end
182
+
183
+ end
184
+
185
+
186
+ return @cadena
187
+ end
188
+
189
+ end
@@ -0,0 +1,42 @@
1
+ class Menu
2
+ attr_reader :name, :desc_menus, :menu, :precios, :total
3
+ def initialize(name, &block)
4
+ @name = name
5
+ @desc_menus = []
6
+ @menu = []
7
+ @precios = []
8
+ @total=0
9
+
10
+ if block_given?
11
+ if block.arity == 1
12
+ yield self
13
+ else
14
+ instance_eval(&block)
15
+ end
16
+ end
17
+ end
18
+
19
+ def componente(bloque = {})
20
+ @desc_menus << bloque[:descripcion]
21
+ @menu << bloque[:platos]
22
+ @precios << bloque[:precio]
23
+ end
24
+ def precio(coste)
25
+ @total=coste[:precio]
26
+
27
+ end
28
+
29
+ def to_s
30
+ text = @name + "\n"
31
+ for i in 0..@desc_menus.length-1 do
32
+ text << "\t- #{@desc_menus[i]}\n"
33
+ text << "\t\t#{@menu[i]}"
34
+ text <<"\n"
35
+ text << "\t\t#{@precios[i]} €\n"
36
+ end
37
+ text<<"\n#{@total}"
38
+ text
39
+ end
40
+
41
+
42
+ end
@@ -0,0 +1,24 @@
1
+ # Estructura Nodo de la listas, contendran un valor, y la direccion al proximo y anterior nodo
2
+ Node = Struct.new(:value,:next,:prev) do
3
+
4
+ def set_next(siguiente) #metodo para establecer el proximo nodo
5
+ self.next=siguiente
6
+ end
7
+
8
+ def set_prev(anterior) #metodo para establecer el nodo anterior
9
+ self.prev = anterior
10
+ end
11
+ def get_valor #metodo para obtener el valor del nodo
12
+ self.value
13
+ end
14
+ def get_siguiente #metodo para obtener el siguiente nodo
15
+ self.next
16
+ end
17
+ def get_prev #metodo para obtener el nodo anterior
18
+ self.prev
19
+ end
20
+ def get_this #metodo para obtener la instancia de este nodo
21
+ self
22
+ end
23
+
24
+ end
@@ -0,0 +1,22 @@
1
+ # Clase Persona que es la que Come el alimento
2
+ class Persona
3
+
4
+ def initialize(genero,edad) #Constructor que contiene el genero y la edad de la persona
5
+ #true = hombre, false = mujer
6
+ @genero=genero
7
+ @edad=edad.to_i
8
+ @GEI=0
9
+ end
10
+
11
+ def come (a1,c1,a2,c2,a3,c3,a4,c4) #metodo que recibe diferentes alimentos y la cantidad de los mismos
12
+ @GEI=a1.get_GEI*c1
13
+ @GEI=@GEI + a2.get_GEI*c2
14
+ @GEI=@GEI + a3.get_GEI*c3
15
+ @GEI=@GEI + a4.get_GEI*c4
16
+ end
17
+
18
+ def get_impacto #metodo que retorna el GEI total de los alimentos consumidos
19
+ return @GEI.round(2)
20
+ end
21
+
22
+ end
@@ -0,0 +1,103 @@
1
+ #Objeto que representa un plato con multiples comidas
2
+
3
+ class Plato
4
+ attr_reader :lista, :cantidad,:nombre, :proteinas, :carbohidratos , :lipidos ,:calorias, :p_proteinas, :p_lipidos, :p_carbohidratos
5
+ include Comparable #incluimos el modulo Comparable
6
+
7
+ def get_this
8
+ return self
9
+ end
10
+ def initialize(lista_plato,lista_cantidad,nombre_plato) # constructor que recibe la lista con alimentos, otra lista con la cantidad del alimento correspondiente y el nombre del plato
11
+ @proteinas=@carbohidratos=@lipidos=@calorias=@p_calorias= @p_lipidos = @p_carbohidratos = @total = 0 #inicializacmos todos los atributos a 0
12
+
13
+ @lista = lista_plato #asignamos los atributos que tenemos
14
+ @nombre = nombre_plato
15
+ @cantidad= lista_cantidad
16
+
17
+ self.calc_proteina #llamamos a los diferentes metedos para dar valor a los diferentes atributos
18
+ self.calc_lipido
19
+ self.calc_carbohidrato
20
+ @total = @proteinas + @lipidos + @carbohidratos
21
+
22
+ self.calc_porcentajes
23
+ self.calc_calorias
24
+ end
25
+
26
+
27
+ def to_s #damos formato del plato, siendo "Nombne, Alimento, Cantidad,......"
28
+ @nombre = "#{@nombre}"
29
+ contador =0
30
+
31
+ while (@lista[contador] != nil && @cantidad[contador] != nil) do
32
+ @nombre = @nombre + ",#{@lista[contador].get_valor.nombre},#{@cantidad[contador].get_valor}"
33
+ contador = contador + 1
34
+ end
35
+ return @nombre
36
+ end
37
+
38
+ def calc_proteina #metodo que calcula la proteinas del plato
39
+ contador=0
40
+ while( @lista[contador] != nil && @cantidad[contador] != nil) do
41
+
42
+ @proteinas=@proteinas + calcular_equivalente(@lista[contador].get_valor.proteinas,@cantidad[contador].get_valor)
43
+ contador = contador +1
44
+ end
45
+ @proteinas
46
+ end
47
+
48
+ def calc_lipido #metodo que calcula los lipidos del plato
49
+ contador=0
50
+ while( @lista[contador] != nil && @cantidad[contador] != nil) do
51
+
52
+ @lipidos=@lipidos + calcular_equivalente( @lista[contador].get_valor.lipidos , @cantidad[contador].get_valor )
53
+ contador = contador +1
54
+ end
55
+ @lipidos
56
+ end
57
+
58
+ def calc_carbohidrato #metodo que calcula los carbohidratos del plato
59
+ contador=0
60
+ while( @lista[contador] != nil && @cantidad[contador] != nil) do
61
+
62
+ @carbohidratos=@carbohidratos + calcular_equivalente( @lista[contador].get_valor.carbohidratos , @cantidad[contador].get_valor )
63
+ contador = contador +1
64
+ end
65
+ @carbohidratos
66
+ end
67
+ def calc_calorias #metodo que calcula las calorias totales del plato (Kcal)
68
+ @calorias = (@proteinas*4 + @carbohidratos*9 + @lipidos*4).round(2)
69
+
70
+ end
71
+
72
+ def calc_porcentajes # metodo que obtiene la proporcion de lipido,proteinas y carbohidratos de cada alimento
73
+ @p_carbohidratos = ((@carbohidratos / @total)*100.0).round(2)
74
+ @p_lipidos = ((@lipidos / @total)*100.0).round(2)
75
+ @p_proteinas = ((@proteinas / @total)*100.0).round(2)
76
+ end
77
+
78
+ def calcular_equivalente(valor,cantidad) # metodo que calcula el porcentaje de un valor cualquiera
79
+ resultado=(valor * (cantidad / 100.0)).round(2)
80
+ return resultado
81
+ end
82
+
83
+ def == (other) # operador de comparacion
84
+ if other.instance_of? Plato # solo compara si tenemos una instancia de Plato
85
+
86
+ self.to_s == other.to_s # compara el formato en string de ambos objetos
87
+ else
88
+ false
89
+ end
90
+ end
91
+
92
+ def <=> (other) #operador <=>
93
+
94
+ if other.is_a? Plato #verificamos que sea una instancia de Plato
95
+ return (self.calorias <=> other.calorias)
96
+ else # en cualquer otro caso retornamos nil
97
+ return nil
98
+ end
99
+
100
+ end
101
+
102
+
103
+ end