Esto es lo que me piden en el ejercicio:
Citar:
En la siguiente pagina web viene la solucion para Java
https://docs.google.com/document/pu...OaO4ZZEAk&pli=1
Aqui podeis ver el diagrama de clases de UML
Bien lo he implementado a gambas, (gambas2: en vez de Objeto lo he implementado a Variant).
Clase ApiLista:
Clase colaFifo:
' gambas class file
INHERITS ApiLista
PRIVATE primero AS Nodo
PRIVATE ultimo AS Nodo
PRIVATE longitud AS Integer
PUBLIC SUB anadir(obj AS Variant)
DIM aux AS NEW Nodo
aux.objeto = obj
IF longitud = 0 THEN
primero = aux
ELSE
ultimo.siguiente = aux
ENDIF
ultimo = aux
longitud += 1
END
PUBLIC FUNCTION extraer() AS Variant
DIM obj AS Variant
IF longitud = 0 THEN
RETURN -111 'cola vacia
ELSE
obj = primero.objeto
primero = primero.siguiente
longitud -= 1
RETURN obj
ENDIF
END
PUBLIC FUNCTION getlongitud() AS Integer
RETURN longitud
END
INHERITS ApiLista
PRIVATE primero AS Nodo
PRIVATE ultimo AS Nodo
PRIVATE longitud AS Integer
PUBLIC SUB anadir(obj AS Variant)
DIM aux AS NEW Nodo
aux.objeto = obj
IF longitud = 0 THEN
primero = aux
ELSE
ultimo.siguiente = aux
ENDIF
ultimo = aux
longitud += 1
END
PUBLIC FUNCTION extraer() AS Variant
DIM obj AS Variant
IF longitud = 0 THEN
RETURN -111 'cola vacia
ELSE
obj = primero.objeto
primero = primero.siguiente
longitud -= 1
RETURN obj
ENDIF
END
PUBLIC FUNCTION getlongitud() AS Integer
RETURN longitud
END
Clase pilaLiFo:
' gambas class file
INHERITS ApiLista
PRIVATE top AS Nodo
PRIVATE longitud AS Integer
PUBLIC SUB anadir(obj AS Variant)
DIM aux AS NEW Nodo
aux.objeto = obj
aux.siguiente = top
top = aux
longitud += 1
END
PUBLIC FUNCTION extraer() AS Variant
DIM obj AS Variant
IF top = NULL THEN
RETURN NULL ' lista vacia
ENDIF
obj = top.objeto
top = top.siguiente
longitud -= 1
RETURN obj
END
PUBLIC FUNCTION getlongitud() AS Integer
RETURN longitud
END
INHERITS ApiLista
PRIVATE top AS Nodo
PRIVATE longitud AS Integer
PUBLIC SUB anadir(obj AS Variant)
DIM aux AS NEW Nodo
aux.objeto = obj
aux.siguiente = top
top = aux
longitud += 1
END
PUBLIC FUNCTION extraer() AS Variant
DIM obj AS Variant
IF top = NULL THEN
RETURN NULL ' lista vacia
ENDIF
obj = top.objeto
top = top.siguiente
longitud -= 1
RETURN obj
END
PUBLIC FUNCTION getlongitud() AS Integer
RETURN longitud
END
Clase Nodo:
En el Formulario FMain: (añadimos un textarea, para ver el resultado)
PUBLIC SUB Form_Open()
' obtenido de:
'https://docs.google.com/document/pub?id=1TdCH71pyhdKELmwVo4IwQnqUtVErn85KMfOaO4ZZEAk&pli=1
'java-FIFO-LIFO
DIM i AS Integer
DIM elementos AS Integer
DIM pila AS NEW pilaLiFO[]
DIM cola AS NEW colaFifo[]
' Añadimos los mismos elementos a la pila y la cola.
FOR i = 0 TO 9
pila.anadir("AB" & Str$(I))
cola.anadir("AC" & Str$(I))
NEXT
' Extraer Pila
TextArea1.text = "Orden de Extraccion de la pila LIFO:\n"
elementos = pila.getlongitud()
FOR i = 0 TO elementos - 1
TextArea1.text &= " [" & pila.extraer() & "] "
NEXT
TextArea1.text &= "\n-------\n"
'Extraer en Cola
TextArea1.text &= "Orden de Extraccion de la cola FIFO:\n"
elementos = cola.getlongitud()
FOR i = 0 TO elementos - 1
TextArea1.text &= " [" & cola.extraer() & "] "
NEXT
END
' obtenido de:
'https://docs.google.com/document/pub?id=1TdCH71pyhdKELmwVo4IwQnqUtVErn85KMfOaO4ZZEAk&pli=1
'java-FIFO-LIFO
DIM i AS Integer
DIM elementos AS Integer
DIM pila AS NEW pilaLiFO[]
DIM cola AS NEW colaFifo[]
' Añadimos los mismos elementos a la pila y la cola.
FOR i = 0 TO 9
pila.anadir("AB" & Str$(I))
cola.anadir("AC" & Str$(I))
NEXT
' Extraer Pila
TextArea1.text = "Orden de Extraccion de la pila LIFO:\n"
elementos = pila.getlongitud()
FOR i = 0 TO elementos - 1
TextArea1.text &= " [" & pila.extraer() & "] "
NEXT
TextArea1.text &= "\n-------\n"
'Extraer en Cola
TextArea1.text &= "Orden de Extraccion de la cola FIFO:\n"
elementos = cola.getlongitud()
FOR i = 0 TO elementos - 1
TextArea1.text &= " [" & cola.extraer() & "] "
NEXT
END
Creo que la conversion es correcta (de Java a Gambas2, pasando que no manejamos Objetos sino Variant, y en vez de usar Interfaces, usamos Herencia).
¿se podria mejorar? ¿existen la interfaces en gambas2?