Class: Lista

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(head, tail) ⇒ Lista

Se asignan la cabecera de la lista y la cola de la lista. Inicialmente apuntan a nil.



26
27
28
29
# File 'lib/alimentacion/lista.rb', line 26

def initialize(head,tail)
        @head = nil
        @tail = nil
end

Instance Attribute Details

#headObject

Returns the value of attribute head.



23
24
25
# File 'lib/alimentacion/lista.rb', line 23

def head
  @head
end

#tailObject

Returns the value of attribute tail.



23
24
25
# File 'lib/alimentacion/lista.rb', line 23

def tail
  @tail
end

Instance Method Details

#dieta_gases_anuales(gramos) ⇒ Object

Calcula el total de gases anuales que tiene la lista de alimentos



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

def dieta_gases_anuales(gramos)
        aux = @head
        suma_gases = 0
        i = 0
        while (!aux.nil?)
                suma_gases += aux[:value].auxiliar(gramos[i])
                aux = aux[:next]
                i = i+1
        end
        return suma_gases.round(2)

end

#dieta_gases_diarios(gramos) ⇒ Object

Calcula el total de gases diarios que tiene la lista de alimentos



116
117
118
119
# File 'lib/alimentacion/lista.rb', line 116

def dieta_gases_diarios(gramos)
        gases_diarios = dieta_gases_anuales(gramos)/365
        return gases_diarios.round(3)
end

#dieta_terreno(gramos) ⇒ Object

Calcula el total de uso del terreno que tiene la lista de alimentos



122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/alimentacion/lista.rb', line 122

def dieta_terreno(gramos)

        aux = @head
        suma_terreno = 0
        i = 0
        while (!aux.nil?)
                suma_terreno += aux[:value].auxiliar2(gramos[i])
                aux = aux[:next]
                i = i+1
        end
        return suma_terreno.round(2)

end

#eachObject

Se utiliza el módulo Enumerable, para enumerar cualquier lista enlazada.



15
16
17
18
19
20
21
# File 'lib/alimentacion/lista.rb', line 15

def each
        aux = @head
        while !aux.nil?
                yield aux[:value]
                aux = aux[:next]
        end
end

#extract_headObject

Se extrae el nodo situado en la cabeza de la lista



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

def extract_head()
        if @head.nil?
                raise RuntimeError, "La lista está vacía"
        else
                if @head == @tail
                        @head, @tail = nil
                else
                        @head = @head[:next]
                        @head[:prev] = nil
                end

        end
end

#extract_tailObject

Se extrae el nodo situado en la cola de la lista



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

def extract_tail()
        if @head.nil?
                raise RuntimeError, "La lista está vacía"
        else
                if @head == @tail
                        @head, @tail = nil
                else
                        @tail = @tail[:prev]
                        @tail[:next] = nil
                end
        end
end

#imprimirObject

Se visualiza la lista



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

def imprimir
        aux = @head
        lista = []
        while (!aux.nil?)
                lista << aux[:value].to_s
                aux = aux[:next]
        end
return lista

end

#insert(nodos) ⇒ Object

Se insertan por la cola un conjunto de nodos



83
84
85
86
87
# File 'lib/alimentacion/lista.rb', line 83

def insert(nodos)
    for i in (0.. nodos.size-1)
        insert_tail(nodos[i])
    end
end

#insert_head(value) ⇒ Object

Se inserta un nodo por la cabeza de la lista



32
33
34
35
36
37
38
39
40
# File 'lib/alimentacion/lista.rb', line 32

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

#insert_tail(value) ⇒ Object

Se inserta un nodo por la cola de la lista



43
44
45
46
47
48
49
50
51
# File 'lib/alimentacion/lista.rb', line 43

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