W jaki sposób wyświetlić elementy listy jednokierunkowej?

0

Witam, otoz mam pewien problem. Zrobilem liste i gdy dodaje do niej elementy to nie chcą mi się one wyświetlać, oto kod:

  procedure dodaj_do_listy(var head:Plist; typ:string);
var    p:Plist;

begin
new(p);
p^.Ptyp:= typ;
p^.next:=head;
head:=p;

end;
function ilosc(var p:Plist):cardinal;
var
  c:cardinal;
  begin
  c:=0;
  while p<>NIL do
  begin
    inc(c);
    p:=p^.next;
    end;
  ilosc:=c;
  end;

procedure pokaz(p:Plist);
var        i:integer;
begin
     writeLn('liczba elementow: ',ilosc(p));
     i:=1;
     writeln(i);
if p <> NIL then
begin
while p <> NIL do
    begin
    writeln('element #',1, ' dane = ');
    inc(i);
    p:=p^.next;
    end;
end
else
Writeln('pustalista');

end;  

Po czym ustawiam liste na nil

PPlist:Plist;
styp:string;
(....)
 PPlist:=NIL;  

Dodaje i wyswietlam tymi poleceniami. Nie chce mi to śmigać, wypisuje tylko, ze są 4 elementy tej listy, ale jakie nic sie nie wyswietla...

dodaj_do_listy(PPlist,styp);
pokaz(PPlist); 

Byłbym wdzięczny za jakieś rady, bo pewnie tu jest jakiś drobny błąd...

0

A gdzie kazałeś programowi wypisać "jakie" ?

0

aa sorrki tego nie dopisałem wam

styp:='produkt'; 
0

Sprawdź znaczenie słowa wypisać w jakimś słowniku.

0

Jeszcze mam dodatkowo pytanie, jeśli ta lista znajdowalaby sie w rekordzie:

produkt= record
id:integer;
nazwa:string;
Rtyp:Plist;
end;
 

to jak wyglądałoby dodawanie takiego elementu do listy(na moim przykładzie), bo ciągle mi wyskakują błędy...

0

A gdzie kazałeś programowi wypisać "jakie" ?
Procedura pokaz; jest od wypisywania całej zawartości listy? Bo nie rozumiem pytania

0

Jeżeli dany element listy ma przyjmować strukturę, to do pola takiej struktury mając wskaźnik na element listy odwołujesz się za pomocą operatora ^, np.:

type
  TData = record
    AName: AnsiString;
  end;

type
  PFoo = ^TFoo;
  TFoo = record
    Data: TData;
    Next: PFoo;
  end;

{...}

var
  Element: PFoo;

{...}

New(Element);

{...}

Element^.Data.Name := 'Józuś';

Po więcej informacji odsyłam do kursu, w którym dowiesz się jak korzystać ze wskaźników i struktur danych.

0

Podany przez Ciebie przykład nie odnosi się czasem do listy rekordow? Bo tak operować potrafie, mi chodzi o rekord list - to sprawia mi pewne problemy.

0

Jest lista oraz rekord

Plista=^Lista;
Lista = record
nazwa:string;
end;

produkt = record
id:integer;
dana:PLista;
end;

Teraz może będzie to jaśniejsze, jak mam dodać element do listy, która znajduje się w rekordzie(jest jednym z elementow rekordu). Bo dodać rekord w liście to nie problem.

0
pcus napisał(a):

A gdzie kazałeś programowi wypisać "jakie" ?
Procedura pokaz; jest od wypisywania całej zawartości listy? Bo nie rozumiem pytania

Pytam gdzie w procedurze pokaż kazałeś programowi wypisać "jakie" ?
Bo skarżyłeś się że nie wypisuje ci "jakie"

0

Problem polega na tym, ze nie wypisuje nawet tego ciągu liter

  element #',1, ' dane = 

po dane oczywiście miało być odniesienie do stringa w liście, ale tez nie dziala

0

Błąd masz tu:

function ilosc(var p:Plist):cardinal;
0

A ma ktoś pomysł jak dodać nowy element do listy, która jest w rekordzie(2 posty wyzej napisalem definicje)

0

@pcus - a jakie to ma znaczenie gdzie jest lista? Jeśli jest w zmiennej to przeszukujesz ją od razu, a jeśli w rekordzie to pobierasz do zmiennej wskaźnik głowy listy i dodajesz tak, jak do zwykłej listy; Nie wiem z czym masz taki problem - z odwołaniem się do pola rekordu?

0

Dzieki dragon, juz jakis czas temu tez to zauwazylem, teraz sie mecze z problemem recordu i listy.

Plista=^Lista;
Lista = record
nazwa:string;
end;
 
produkt = record
id:integer;
dana:PLista;
end; 

Mam problem, ponieważ tak wyglada schemat dodawania elementu na początek listy:

begin
new(p);
p^.Ptyp:= typ;
p^.next:=head;
head:=p; 

a jak zrobić jeśli ta lista jest w rekordzie (co wpisać new(?))
do tego to ma wygladac tak (schematycznie)

produkt1.dana^.Ptyp

na poczatku chcialem zapisac, produkt1.dana do jakiejs zmiennej i na tym operowac, przydzielic pamiec i dzialac. Ale to nie pomoglo, czy macie jakis pomysl? A czy jesli ten record jest jeszcze skladnikiem drzewa to wystarczy to zapisac tak?

root^.produkt1.dana^.Ptyp := nazwa;

dodanie znaczników <code class="delphi"> i `` + połączenie postów - fp

0

Czy to takie ćwiczenie ułóż sobie sam i znajdź błąd?
Wklej cały kod.

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