Błąd podczas tworzenia własnej struktury drzewa XML na podstawie rekordów

0

witam. Mam stworzyc prgoram ktory = drzewa xml. Tj. Nazwa tagu, atrybuty tagu, treść tagu oraz odpowiednie wskaźniki aby zrealizować drzewo o dowolnej liczbie poziomów i dowolnej liczbie węzłów wychodzących z jednego węzła (nie 2 jak w przypadku BST.

program drzewo;
uses CRT;
type 
    wsk = ^element;
    element = record
            nazwa_tagu: string[20];
            atrybut_tagu: string[20];
            tresc_tagu: string[40];
            tablica: array[1..20] of wsk;
    end;
var
   i: integer ;
   korzen: wsk;
   r:integer;
   
procedure korzen_drzewa(var g:wsk); //tworzymy korzen
var
   a: integer;
   tag: string[20];
begin
  writeln('Ilu przewidujesz potomków od korzenia? podaj n = ');
  readln(a);
  new(g);
  writeln;
  writeln('Podaj nazwe tagu ktora bedzie znajdowala sie w korzeniu: ');
  read(tag);
  g^.nazwa_tagu:=tag;
end;

procedure potomkowie(g:wsk);
var
   i,a: integer;
   neew: wsk; 
   tag: string[20];
begin
    writeln('Ilu przewidujesz potomków n = ');
    readln(a);
    new(neew);
    writeln('Podaj nazwe tagu : ');
    read(tag);
    neew^.nazwa_tagu:=tag;
    neew^.tablica[a]:=nil;
    neew^.tablica[1]:=g;
    g^.tablica[1]:=neew;
    
end;


begin
korzen_drzewa(korzen);
writeln(korzen^.nazwa_tagu);
potomkowie(korzen);
writeln(korzen^.tablica[1]); // problem
readln;
readln;
end.

mój kod wyglada tak problem znajduje sie w pogrubionej linijce z komentarzem jak sie odwolać do tej tablicy wskazników w rekordzie?
nie mam pojecia jak to zrobić.

dodanie znacznika <code class="delphi"> - furious programming

0

Jaki problem?

1

korzen^.tablica[1]^.nazwa_tagu oczywiście musisz najpierw ten wskaźnik tam wstawić.

1

dowolnej liczbie węzłów wychodzących z jednego węzła

tablica: array[1..20] of wsk;

Ta dowolna liczba to taka mała u Ciebie :)

0
abrakadaber napisał(a):

dowolnej liczbie węzłów wychodzących z jednego węzła

tablica: array[1..20] of wsk;

Ta dowolna liczba to taka mała u Ciebie :)

czyli ten moj typ ma tak wygladac?

type
    
    wsk = ^element;
    
    dzieci = ^wskaznik;
     wskaznik = record
     Next: dzieci;
     Dane: wsk;
     end;
    
    element = record
            nazwa_tagu: string[20];
            atrybut_tagu: string[20];
            tresc_tagu: string[40];
            lista: dzieci;
    end;

jak sie odwolac do lista w recordzie element ktory ma wskazywac na nastepny?

dodanie znacznika <code class="delphi"> - furious programming

2
  1. naucz się prawidłowo nazywać typy danych wg konwencji - T na początku dla typu, P na początku dla wskaźnika
  2. kod wstawiaj w odpowiednie znaczniki dla danego języka
  3. naucz się formatować kod
type                                                                                                                      
  PXMLItem = ^TXMLItem;
  PListItem = ^TListItem;

  TListItem = record
    Next: PListItem;
    Item: PXMLItem;
  end;
 
  TXMLItem = record
    nazwa_tagu: string[20];
    atrybut_tagu: string[20];
    tresc_tagu: string[40];
    children: PListItem;
  end;

Src.1.
dla szybkiego dodawania nowego dziecka do elementu XML możesz zmienić jego typ na

  TXMLItem = record                                                                                                      
    nazwa_tagu: string[20];
    atrybut_tagu: string[20];
    tresc_tagu: string[40];
    FirstChild: PListItem;
    LastChild: PListItem;
  end;

Src.2.
FirstChild wskazuje na to samo co children czyli na pierwszy element listy dzieci i jako taki się nie zmienia natomiast LastChild wskazuje zawsze na ostatni element na liście dzieci i musi być uaktualniany po każdym dodaniu nowego elementu na koniec oraz przy usunięciu ostatniego elementu. Dla wariantu pierwszego aby dodać coś na koniec listy musisz najpierw przejść przez całą listę. Możesz też oczywiście wstawiać nowe elementy na początek kolejki ale nie wiem jak się to ma do Twojego zadania i kolejności wyświetlania elementów potem. Przy takich typach możesz mieć nieskończenie wiele (ogranicza Cię jedynie dostępna pamięć) poziomów zarówno wzdłuż jak i w szerz

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