Witam, stworzyłem kolejkę, która ma przechowywać pewne słowa, niestety nie działa tak jak powinno. Pobierane jest tylko jedno słowa i na tym kończy się program, nie mam pojęcia co jest z tym nie tak. Mógłby ktoś zerknąć na kod.
Pliki z kodem znajdują się tutaj:
PACKAGE Kolejki IS
type kolejka is limited private;
PROCEDURE Dodaj(K: IN OUT Kolejka;V:IN string);
function wypisz (k: in kolejka) return string;
pusta,pelna:exception;
PRIVATE
TYPE A_String IS ACCESS String;
TYPE Typ_Tab IS ARRAY (1..80) OF A_String;
TYPE Node;
TYPE Node_Pointer IS ACCESS Node;
TYPE Node IS RECORD
Value:a_string;
Next:Node_Pointer;
END RECORD;
TYPE Kolejka IS RECORD
Licznik:Integer:=0;
Head:Node_Pointer:=NULL;
tail:node_pointer:=null;
end record;
end kolejki;
WITH Ada.Text_IO,ada.Integer_Text_IO,unchecked_deallocation;
use ada.Text_IO,ada.Integer_Text_IO;
PACKAGE BODY Kolejki IS
procedure free is new unchecked_deallocation(node,node_pointer);
PROCEDURE Dodaj(K: IN OUT Kolejka;V:IN string) IS
P:Node_Pointer:=NULL;
-- Succ:Node_Pointer:=K.Head;
slowo:a_string:=new string'(v);
BEGIN
-- k.head:=new node'(v,k.head);
p:=NEW Node'(slowo,null);
IF K.Tail/=NULL THEN
K.Tail.Next:=P;
ELSE
k.head:=P;
END IF;
K.Tail:=P;
k.licznik:=k.licznik+1;
END Dodaj;
FUNCTION Wypisz (k: in kolejka) RETURN String is
Temp:A_String;
p:node_pointer:=k.head;
BEGIN
IF P/=NULL THEN
Temp:=P.Value;
P:=P.Next;
RETURN Temp.All;
ELSE
return "";
END IF;
end wypisz;
end Kolejki;
WITH Ada.Text_IO,Kolejki,ada.Strings.Fixed;
USE Ada.Text_IO,kolejki,ada.Strings.Fixed;
PROCEDURE Test IS
Odp:Character;
A:String(1..10);
B:String(1..10);
c:string(1..10);
K:Kolejka;
n:integer;
BEGIN
a:=(others=>' ');
b:=(others=>' ');
LOOP
Put("Podaj litere: ");
Get_Line(A,N);
Dodaj(K,A);
New_Line;
New_Line;
Put("Kontynuowac? t/n ");Get(Odp);
skip_line;
EXIT WHEN Odp='n';
END LOOP;New_Line;
put(Wypisz(k));
end test;