Witam serdecznie.
Mam problem, na zaliczenie mam stworzyń następujący program:
- wczytać z pliku dane;
- stworzyć drzewo BST;
- wypisać inorder i preorder to drzewo;
i mam problem :/
Całkiem dobrze mi szło, aż się zaciołem, i nie wiem w czym problem :/ Pomocy.
Poniżej kod:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
OpenDialog1: TOpenDialog;
Button2: TButton;
Button3: TButton;
Memo2: TMemo;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
end;
Type
Tinfo = string[25];
Link = ^ Node;
Node = record
Info : Tinfo;
Left ,Right: Link;
end;
var
Form1: TForm1;
s, p, prev: Link;
plik : TextFile;
tablica: Array[1..100] of String;
i, j, k, l : integer;
temp, x : string;
root : Link;
implementation
{$R *.dfm}
procedure insert_r (var p: Link; x: Tinfo);
begin
if p = NIL then
begin
new(p); //new node
p^.info:= x;
p^.left:= NIL;
p^.right:= NIL;
end
else
if x < p^.info then
insert_r (p^.left, x)
else
insert_r (p^.right, x)
end;
procedure preorder (p : link);
begin
if p <> NIL then
begin
Memo2.Lines.Add(p^.info+ ' '); // tu się sypie, wyskakuje: Undeclared identifier: 'Memo2'
preorder(p^.left);
preorder(p^.right);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute
then
begin
Memo1.Clear;
AssignFile(plik,OpenDialog1.FileName);
Reset(plik);
for i:=0 to 99 do
begin
Readln(plik, temp);
tablica[i]:=temp;
end;
end;
for j:=0 to 99 do
if tablica[j]<>'' then Memo1.Lines.Add(tablica[j]);
Button4.Enabled := True;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
for k:=0 to 99 do
begin
if tablica[k]<>'' then
begin
tablica[k]:=x;
insert_r (root, x);
Memo2.Lines.Add(x);
end;
end;
Memo1.Lines.Add('');
Memo1.Lines.Add('');
Memo1.Lines.Add('-----------------------------');
Memo1.Lines.Add('Utworzono drzewo BST');
Memo1.Lines.Add('-----------------------------');
Button2.Enabled := True;
Button3.Enabled := True;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Memo2.Clear;
for l:=0 to 99 do
if tablica[l]<>'' then preorder(tablica[l]); // tu też wyskakuje blad, procedura chce zmienna link, a ja jej daje string, ale jak zmienic string na link? :/
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo2.Clear;
end;
end.