Class: Comida::Lista

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/comida/lista.rb

Overview

Clase utilizada para almacenar un conjunto de alimetnos que vamos a unir para formar un plato

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeLista

Metodo para inizializar los atributos de la clase, que en este caso son a nil



49
50
51
52
# File 'lib/comida/lista.rb', line 49

def initialize
  @head = nil   # Variable utilizada para trabajar con la lista por delante
  @tail = nil   # Variable utilizada para trabajar con la lista por detras
end

Instance Attribute Details

#headObject (readonly)

Variable utilizada para trabajar con la lista por delante, Variable utilizada para trabajar con la lista por detras



35
36
37
# File 'lib/comida/lista.rb', line 35

def head
  @head
end

#tailObject (readonly)

Variable utilizada para trabajar con la lista por delante, Variable utilizada para trabajar con la lista por detras



35
36
37
# File 'lib/comida/lista.rb', line 35

def tail
  @tail
end

Instance Method Details

#calculo_emisiones_eiObject

Metodo empleado para el calculo de las emisiones de efecto invernadero. Para ello solo tenemos que recorrer cada elemetno de la lista e ir sumando el valor de gei



130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/comida/lista.rb', line 130

def calculo_emisiones_ei
  i = 0
  suma = 0
  nodo = self.head

  while nodo != nil
    suma = suma + nodo.value.gei
    nodo = nodo[:next]
    i += 1
  end

  return suma
end

#calculo_emisiones_ei_anualesObject

Metodo para calcular las emisinoes de efecto invernadero anuales. SOlo tenemos que obtener el valor de las emisione de efecto invernadero en un dia y multiplicarlo por 365



146
147
148
# File 'lib/comida/lista.rb', line 146

def calculo_emisiones_ei_anuales
  return self.calculo_emisiones_ei * 365
end

#calculo_terreno(lista) ⇒ Object

Metodo para calcular el terreno empleado en funcion de los alimetnos de la lista. Para ello solo tenemos que recorrer la lista e ir sumando el valor del terreno de cada alimento



153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/comida/lista.rb', line 153

def calculo_terreno(lista)
  i = 0
  suma = 0
  nodo = lista.head

  while nodo != nil
    suma = suma + nodo.value.terreno
    nodo = nodo[:next]
    i += 1
  end

  suma
end

#eachObject

Metodo del Enumerable para poder moverse por la lista e implementar metodos como collect sort,select min, max,



39
40
41
42
43
44
45
46
# File 'lib/comida/lista.rb', line 39

def each
  inicio = head
  while inicio != nil
    yield inicio.value

    inicio = inicio.next
  end
end

#extract_headObject

Metodo utilizado para extraer elementos de la lista por la cabeza, simplemente tenemos que asignar la cabeza al siguiente elemento del que esta apuntando actualmente



102
103
104
105
106
107
108
109
110
111
112
# File 'lib/comida/lista.rb', line 102

def extract_head()
  if (@head != nil && @tail != nil) then
    if (@head == @tail) then
      @head = nil
      @tail = nil
    else
      @head = @head[:next]
      @head[:prev] = nil
    end
  end
end

#extract_tailObject

Metodo utilizado para extraer elementos de la lista por la cola, simplemente tenemos que asignar la cola al anterior elemento del que esta apuntando actualmente



116
117
118
119
120
121
122
123
124
125
126
# File 'lib/comida/lista.rb', line 116

def extract_tail()
  if (@head != nil && @tail != nil) then
    if (@head == @tail) then
      @head = nil
      @tail = nil
    else
      @tail = @tail[:prev]
      @tail[:next] = nil
    end
  end
end

#insert_head(value) ⇒ Object

Metodo utilizado para insertar datos en la lista por la cabeza por delante



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/comida/lista.rb', line 68

def insert_head(value)
  if (@head == nil && @tail == nil) then
    nodo = Nodo.new(value, nil, nil)
    @head = nodo
    @tail = nodo
  else
    nodo = Nodo.new(value,@head,nil)
    @head[:prev] = nodo
    @head = nodo
  end
end

#insert_muchos_head(value) ⇒ Object

Metodo utilizado para insertar mas de un dato a la vez en la lista por la cabeza



81
82
83
84
85
86
87
88
# File 'lib/comida/lista.rb', line 81

def insert_muchos_head(value)
  i = 0

  while i < value.length
    insert_head(value[i])
    i += 1
  end
end

#insert_muchos_tail(value) ⇒ Object

Metodo utilizado para insertar mas de un dato a la vez en la lista por la cola



91
92
93
94
95
96
97
98
# File 'lib/comida/lista.rb', line 91

def insert_muchos_tail(value)
  i = 0

  while i < value.length
    insert_tail(value[i])
    i += 1
  end
end

#insert_tail(value) ⇒ Object

Metodo utilizado para insertar datos en la lista por la cola



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/comida/lista.rb', line 55

def insert_tail(value)
  if (@head == nil && @tail == nil) then
    nodo = Nodo.new(value, nil, nil)
    @head = nodo
    @tail = nodo
  else
    nodo = Nodo.new(value,nil,@tail)
    @tail[:next] = nodo
    @tail = nodo
  end
end