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:

Kopiuj
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;
 
Kopiuj
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;
Kopiuj
 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;