Problem ze wskaznikami :(

0

Mam taki kod

program lista;
uses crt;
type
TWskaznik = ^TElement;
TElement = record
Imie,Nazwisko: string[20];
Dlug: integer;
Nastepny:TWskaznik;
end;
var
co,temp:TWskaznik;
Imie,Nazwisko:string;
Dlug,pytanie,ktory:integer;
Glowa:TElement;
poz,i:byte;
label
pocz,dodawanie,wyswietlanie,usuwanie,wszystko,liczba,koniec;

procedure Dodaj(Imie,Nazwisko:string;Dlug:integer);
var temp:TWskaznik;
begin
   new(temp);
   temp^.nastepny:=glowa.nastepny;
   glowa.nastepny:=temp;
   temp^.Imie:=Imie;
   temp^.nazwisko:=Nazwisko;
   temp^.dlug:=dlug;
   poz:=poz+1;
end;

procedure Usun(co:TWskaznik);
var temp:TWskaznik;
begin
   temp:=@glowa;
   while temp^.nastepny<>co do temp:=temp^.nastepny;
   temp^.nastepny:=temp^.nastepny^.nastepny;
end;

procedure Wyswietl;
var temp:TWskaznik;
begin
   temp:=glowa.nastepny;
   while temp<>nil do
   begin
      writeln(temp^.imie+' '+temp^.nazwisko+' winien ',temp^.dlug);
      temp:=temp^.nastepny;
   end;
end;

begin
pocz:
clrscr;
writeln;
writeln('Lista wpisow');
wyswietl;
writeln;
Writeln('0 - dodawanie elementu');
writeln('1 - usuwanie elementu');
writeln('2 - wyswietlanie');
writeln('3 - usun wszystko');
writeln('4 - ilosc wpisow');
writeln('5 - koniec');
readln(pytanie);
if pytanie=0 then goto dodawanie;
if pytanie=1 then goto usuwanie;
if pytanie=2 then goto wyswietlanie;
if pytanie=3 then goto wszystko;
if pytanie=4 then goto liczba;
if pytanie=5 then goto koniec;

dodawanie:
writeln;
writeln('Lista wpisow');
wyswietl;
writeln;
writeln('Podaj imie');
readln(Imie);
writeln('Podaj nazwisko');
readln(Nazwisko);
writeln('Podaj dlug');
readln(Dlug);
dodaj(Imie,Nazwisko,Dlug);
writeln;
writeln('Lista wpisow');
wyswietl;
readln;
goto pocz;

usuwanie:
writeln;
writeln('Lista wpisow');
wyswietl;
writeln('Ktora pozycje usunac?');
readln(ktory);
temp:=Glowa.nastepny;
inc(temp,ktory);
usun(temp);
readln;
goto pocz;

wyswietlanie:
writeln;
writeln('Lista wpisow');
wyswietl;
readln;
goto pocz;

wszystko:
writeln;
for i:=1 to poz do
begin
temp:=Glowa.nastepny;
usun(temp);
end;
poz:=0;
readln;
goto pocz;

liczba:
writeln;
writeln('Liczba wpisow: ',poz);
wyswietl;
readln;
goto pocz;

koniec:
writeln('Koniec programu');
end.

Chodzi mi o zrobienie procedury ktora usuwa dowolny element z listy, oraz procedury ktora dodaje w dowolnym miejscu wpis. Pomozcie
Z gory dzieki.

gg:2656565
[email protected]

0

jak widzę labele, to mnie od razu szlag trafia - pozbądź się ich i użyj zamiast nich procedur.

usuwanie dowolengo elementu listy już masz zrobione - przecież procedura usun tak działa. czyżbyś nie rozumiał własnego kodu?

Dodawanie w dowolnym miejscu:

procedure Dodaj2(const Imie,Nazwisko:string;Dlug:integer;pos : integer);
var temp,t2:TWskaznik;
begin
   if poz >= pos then begin dodaj(Imie,Nazwisko,Dlug); exit; end;

   new(temp);
   temp^.Imie:=Imie;
   temp^.nazwisko:=Nazwisko;
   temp^.dlug:=dlug;

   t2 := glowa;
   while (t2 <> nil) and (pos > 0) do
   begin
      dec(pos);
      t2 := t2^.next;
   end;

   if (pos = 0) then
   begin
     temp.^next := t2^.next;
     t2^.next := temp;
     poz:=poz+1;
    end;
end;

uprzedzam - pisane z palca, mogą być drobne błędy.

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