Problem z kolejką

0

Witam, mam problem z kolejką w pascalu.
Nie do końca wiem jak wczytywać dane do kolejki, by nie wyświetlało mi błędu o źle podanych parametrach.
Czy mógłby ktoś zajrzeć w kod i wytłumaczyć "z czym to się je" ?

Program kol;

type wskkol = ^elkol;
    elkol = record
                dane : integer;
                nast : wskkol
                end;
    var c:char;
    punkt :wskkol;

Procedure Enqueue(nowedane : integer; var koniec:wskkol);
begin
    punkt := koniec;
    New(koniec);
    koniec^.dane := nowedane;
    koniec^.nast :=nil;
    if punkt <> nil then
        punkt^.nast := koniec;
end;

Procedure Dequeue (var poczatek : wskkol);
begin
   if poczatek<>nil then
            Dequeue := poczatek^.dane;
            punkt := poczatek^.nast;
            Dispose(poczatek);
            poczatek := punkt;
end;

Procedure Wypisz( poczatek: wskkol);
  begin
    while poczatek <> nil do
    begin
      Writeln(poczatek^.dane);
      poczatek := poczatek^.nast;
    end;
  end;

begin
read(c);
while c<>'x' do
begin
if c='d' then
read(punkt);Dequeue(punkt);
if c='e' then
read(punkt);Enqueue(punkt);
else
write('!');Writeln(Wypisz(punkt), '!');
end;
end.

Kod napisałam sama, tylko nie do końca wiem jak w linii wczytywania parametrów pozbyć się błędu.
Chodzi mi o sam blok główny programu.
Nie potrzebuję by ktoś mi pisał to od zera, a nawet tego nie chcę. Potrzebuję tylko wskazówki odnośnie wczytywania punktu należącego później do rekordu.

0

Nie potrzebuję by ktoś mi pisał to od zera, a nawet tego nie chcę. Potrzebuję tylko wskazówki odnośnie wczytywania punktu należącego później do rekordu.

Napisałaś to sama i nie wiesz jak to działa? Bardzo ciekawe.

I proszę bez bezczelności, jeśli łaska. :) Po to jest chyba to forum, by pytać, gdy są problemy...

Ale nie po to żeby wklejać niedziałającego gotowca, a mi wygląda że z czymś takim mamy doczynienia.

Wskazówka: te procedurki co z maina wywołujesz potrzebują jeszcze wskaźnika na listę.

0

Ale tu jest mieszania i tego wszystkiego. Można dużo prościej i czytelniej.

Mój kod uwzględnia przeznaczenie kolejki czyli First In, First Out.

var
  Queue: array of Integer;

procedure AddQueueValue(aValue: Integer);
begin
  SetLength(Queue, Length(Queue) + 1); //Powiększenie tablicy o jeden.
  Queue[High(Queue)] := aValue;        //Dodanie wartosci na koniec kolejki
end;

function GetQueueValue(): Integer;
var I: Integer;
begin
  if Length(Queue) > 0 then            //Jezeli dlugosc kolejki jest wieksza od 0 to...
    begin
      Result := Queue[0];              //..zwroc jej pierwszy element

      for I := 0 to High(Queue) - 1 do //petla od 0 do przedostatniegeo indeksu tablicy
        Queue[I] := Queue[I + 1];      //"przesunięcie" elementow w dół

      SetLength(Queue, Length(Queue) - 1);  //Pomiejszenie tablicy o jeden.
    end;
end;

Używanie:

Writeln('Podaj wartość która ma zostać dodana do kolejki');
Readln(I);
AddQueueValue(I);
I := GetQueueValue();
Writeln('Wartość pobrana z kolejki to: ', I);

1 użytkowników online, w tym zalogowanych: 0, gości: 1