Skocz do zawartości
Forum komputerowe PC Centre
kamil274

[Turbo Pascal] Listy

Rekomendowane odpowiedzi

Witam,

mam program który tworzy liste w TP ale gdy chce napisać procedure która dodaje element na końcu tej listy to podczas działania programu oczywiście się wysypuje :) Czy ktoś mógłby spróbować mi pomóc?

Oto kod tego programu : (Chodzi mi dokładniej o sama procedurę "DodajZa")

program CerateList;
uses crt;
TYPE  PElem = ^TElem;
     TElem = RECORD
               dane : integer;
               wsk :PElem;
             END;
VAR q,poczatek,glowa,temp:PElem; licz,k:integer;

procedure ListCreate(var pocz:PElem; var k:integer);
{tworzenie listy}
var q:PElem;
   n:integer;
begin
    write('Podaj dlugosc listy (0<n<100) n='); readln(n);
    k:=n;
    pocz:=nil;
    WHILE n>0 DO
       BEGIN
             new(q);
             q^.wsk:=pocz;
             pocz:=q;
             pocz^.dane:=n;
             n:=n-1;
       END;
end;

procedure ListAdd(var pocz:PElem;var n:integer);
var k:integer;
   q:PElem;
begin
        write('Podaj wartosc dadawanego elementu na poczatek listy k='); readln(k);
        new(q);
        q^.wsk:=pocz;
        pocz:=q;
        pocz^.dane:=k;
        n:=n+1;
end;

Procedure DodajZa(var n:integer; var koniec:PElem); {To ta zla procedura}
Var q:PElem;
   k:integer;
Begin
 write('Podaj wartosc dodawanego elementu na koncu listy '); readln(k);
    new(q);                       {tworzenie nowego elementu}
    q^.wsk:=nil;                  {wsk na NIL}
    while koniec<>NIL do          {przeszukuje dopoki nie znajdzie konca listy}
    koniec:= koniec^.wsk;
    q:=koniec;                    {koniec powinien wskazywac na q-ktory staje sie teraz nowym koncem}
    koniec^.dane:=k;
    n:=n+1;
 End;

procedure ListWrite(pocz:PElem);
{wypisywanie listy}
begin
    writeln;
    WHILE pocz<>NIL DO
      BEGIN
        q:=pocz;
        write('   ',q^.dane);
        pocz:=q^.wsk;
      END;
end;

function ListSearch(head:PElem;k:integer):PElem;
{funkcja sekwencyjnie przeglada Liste zlozona z elementow typu TElem}
{w poszukiwaniu wartosci pola dane = k, wynikiem funkcji jest: }
{ wskaznik do elementu, w ktorym przechowywane jest k}
{lub wskaznik pusty, gdy taki element nie istnieje}
begin
 while (head <> nil) and (k <> head^.dane) do
   head := head^.wsk;
 ListSearch := head;
end;

Begin
     clrscr;

     ListCreate(poczatek,licz);
     writeln('!!!! uwaga !!!',licz);
     {dopisywanie elementu na poczatek listy}
     {ListAdd(poczatek,licz);}
     glowa:=poczatek;
     DodajZa(licz,poczatek);
    {wypisywanie listy}
     ListWrite(poczatek);

    {wyszukiwanie elementu z listy}
     writeln;
     write('Poszukiwany element dane=' );readln(k);
     temp:=ListSearch(glowa,k);
     IF temp<>NIL THEN writeln('Znaleziona dana = ',temp^.dane)
                  ELSE writeln('Nie znaleziono wartosci ',k);

     readln;
End.

Edytowane przez kamil274

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A jaki masz błąd (kod błędu)? W której linii program się wywala?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Exited with
Exitcode = 216 

To mi wywala.I Bóg jeden wie co mam źle :) wiem że wina leży po mojej stronie ale nie mam pojęcia jak to wykminić.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No teraz wiem jaki to błąd ale nie mam pojęcia jak to zrobić .

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

×
×
  • Dodaj nową pozycję...