Class: Lista

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

Overview

Clase Lista que contendra diversos nodos enlazados entre si

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(head) ⇒ Lista

constructor



6
7
8
9
10
11
12
13
14
15
# File 'lib/practica/lista.rb', line 6

def initialize(head)	#constructor
	@size = 1			#inicializamos el size de la lista a 1
	@gei=0.0			#establecemos @terreno y @ gei total a 0
	@terreno=0.0
	@cadena ="#{head.to_s}"	# creamos el objeto lista formateado a string
	@nuevo = Node.new(head,nil,nil)	# creamos el nodo con el objeto que le pasamos por parametro
	@head = @nuevo  		# establecemos que tanto la cabeza como la cola son el mismo, pues la lista solo tiene un nodo
	@tail = @nuevo
	
end

Instance Attribute Details

#headObject (readonly)

Returns the value of attribute head.



3
4
5
# File 'lib/practica/lista.rb', line 3

def head
  @head
end

#sizeObject (readonly)

Returns the value of attribute size.



3
4
5
# File 'lib/practica/lista.rb', line 3

def size
  @size
end

#tailObject (readonly)

Returns the value of attribute tail.



3
4
5
# File 'lib/practica/lista.rb', line 3

def tail
  @tail
end

Instance Method Details

#[](index) ⇒ Object

operador de acceso segun un indice



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/practica/lista.rb', line 24

def [] (index)					#operador de acceso segun un indice
        if index.is_a?Integer		#verificamos que el indice es un entero
            if index== 0			# en caso de que sea 0, retornamos head
                return @head.get_this
            elsif index== (@size -1)	#en caso de que sea el ultimo, retornamos head
                return @tail.get_this
            elsif index< (@size -1) && index> 0		# en otro caso, recorremos la lista hasta encontrar el nodo que corresponda al indice
                iterator= @head
                index.times{iterator= iterator.next}
                return iterator.get_this
            else   				# en cualquier otro caso retornamos nil
                return nil
            end
        end
        return nil
end

#buscar(dato, siguiente, anterior) ⇒ Object

metodo para buscar un Alimento dentro de la lista



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/practica/lista.rb', line 42

def buscar (dato,siguiente,anterior)		#metodo para buscar un Alimento dentro de la lista
	
	
	@actual = @head							 #nodo con el que vamos a comparar
	@encontrado = false						 # condicion de parada
	

	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
		
		if (dato == @actual.get_valor ) then			# si coincide
			
			if((siguiente == nil )&& (@actual.get_siguiente==nil)) then	# en caso de que no haya siguiente 
				
				if(@actual.get_prev.get_valor == anterior) then  	# si el anterior coincide 
					
					@encontrado=true	# lo encontamos
				end


			elsif (anterior==nil && @actual.get_prev== nil) then	# en caso de que no haya anterior
				
				if(@actual.get_siguiente.get_valor == siguiente)then   # comparamos con el siguiente
					@encontrado=true		# lo encontramos
				end



			elsif(@actual.get_prev != nil && @actual.get_siguiente !=nil) #verificamos que tanto siguiente como anterior no son nil
				if(@actual.get_siguiente.get_valor ==siguiente && @actual.get_prev.get_valor == anterior ) then 	#si tanto anterior como siguiente coinciden
					@encontrado=true				# lo encontramos
				else
					@actual=@actual.get_siguiente	# em caso contrario avanzamos
				end


			else	#si no coincide anterior y siguiente 

				@actual=@actual.get_siguiente	# obtenemos el siguiente nodo
			end	


		else 								#si no 
			@actual=@actual.get_siguiente	# obtenemos el siguiente nodo
		end
	end
	
	return @encontrado		#retornamos si lo encontramos o no
end

#eachObject

operador each para Enumerable



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

def each 	#operador each para Enumerable
	@i = head	#indice que empieza en head
	while (@i != nil)	# bucle para recorrer la lista, hasta que el indice sea nil ( el siguiente despues de la cola)
		yield @i.get_valor		# marcamos el valor del nodo en el que se encuentra el indice
		@i=@i.get_siguiente		# hacemos que el indice avance al proximo nodo
	end
end

#get_geiObject

metodo que obtiene el total de GEI de todos los alimentos dentro de la lista



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

def get_gei 		#metodo que obtiene el total de GEI de todos los alimentos dentro de la lista
	@actual = @head


	while (@actual != nil ) do  #  bucle que recorre todos los nodos hasta que o bien encuentra una coincidencia o hasta que no hayan mas nodos
		@gei= @gei +@actual.get_valor.get_GEI
		@actual = @actual.get_siguiente
	end
	
	return @gei.round(2)

end

#get_gei_yObject

metodo que obtioene el GEI por año



136
137
138
139
# File 'lib/practica/lista.rb', line 136

def get_gei_y 			#metodo que obtioene el GEI por año

	return (self.get_gei * 365).round(2)
end

#get_terrenoObject

metodo que obtiene el terreno total de todos los Alimentos de la lista



141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/practica/lista.rb', line 141

def get_terreno		#metodo que obtiene el terreno total de todos los Alimentos de la lista
	@actual = @head


	while (@actual != nil ) do  #  bucle que recorre todos los nodos hasta que o bien encuentra una coincidencia o hasta que no hayan mas nodos
		@terreno= @terreno +@actual.get_valor.get_terreno
		@actual = @actual.get_siguiente
	end
	
	return @terreno.round(2)

end

#insertar(nuevo) ⇒ Object

metodo para insertar un Alimento por la cabeza



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

def insertar(nuevo)		#metodo para insertar un Alimento por la cabeza
	@size = @size +1
	@nodo_nuevo = Node.new(nuevo,nil,nil)

	@head.set_prev(@nodo_nuevo.get_this)
	@aux = @head.get_this
	@head = @nodo_nuevo.get_this
	@head.set_next(@aux.get_this)

	return @head.get_valor
end

#insertar_back(nuevo) ⇒ Object

metodo para insertar un Alimento por el final de la lista



91
92
93
94
95
96
97
98
99
100
101
# File 'lib/practica/lista.rb', line 91

def insertar_back(nuevo)	#metodo para insertar un Alimento por el final de la lista
	@size = @size +1
	@nodo_nuevo = Node.new(nuevo,nil,nil)

	@tail.set_next(@nodo_nuevo.get_this)
	@aux=@tail.get_this
	@tail = @nodo_nuevo.get_this
	@tail.set_prev(@aux.get_this)

	return @tail.get_valor
end

#insertar_list(lista) ⇒ Object

metodo que se encarga de enlazar dos listas



115
116
117
118
119
120
121
# File 'lib/practica/lista.rb', line 115

def insertar_list(lista) # metodo que se encarga de enlazar dos listas
	@size = @size+lista.size
	@tail.set_next(lista.head.get_this)
	lista.head.set_prev(@tail.get_this)
	@tail=lista.tail.get_this
	return @tail
end

#popObject

metodo que saca un alimento desde la cabeza



154
155
156
157
158
159
160
161
# File 'lib/practica/lista.rb', line 154

def pop 			# metodo que saca un alimento desde la cabeza
	@size = @size -1
	@aux = @head
	@head =@head.get_siguiente
	@head.set_prev(nil)
	@aux.set_next(nil)
	return @aux.get_valor
end

#pop_backObject

metodo que saca un alimento desde la cola



163
164
165
166
167
168
169
170
171
# File 'lib/practica/lista.rb', line 163

def pop_back  	# metodo que saca un alimento desde la cola
	@size = @size-1
	@aux =@tail
	@tail = @tail.get_prev
	@tail.set_next(nil)
	@aux.set_prev(nil)

	return @aux.get_valor
end

#to_sObject

metodo que formatea la lista en un string



173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/practica/lista.rb', line 173

def to_s		#metodo que formatea la lista en un string
	@actual = @head.get_siguiente
	if(@actual != nil) then 

		while (@actual!=nil) do

			@cadena= @cadena + ",#{@actual.get_valor.to_s}"
			@actual = @actual.get_siguiente
		end

	end


return @cadena
end