Stian Søiland, IT 112, øvingsgruppe 15 (stud.ass. Helle Haugenes)
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public hode: figurlistepeker; end; var Form1: TForm1; implementation {$R *.DFM} // Prosedyre for registrering procedure TForm1.Button1Click(Sender: TObject); // Prosedyre for å slette eventuell eksisterende liste procedure slettliste(var hode:figurlistepeker); var temp:figurlistepeker; begin // Gjennomløper hele den lenkede listen. Er listen tom, gjøres ingenting. // Til slutt vil hodet være NIL while hode <> nil do begin temp := hode; hode := hode^.neste; dispose(temp); end; hode := nil; end; // Prosedyre for å registrere figurer procedure registrer; begin Form1.Enabled := False; Form2.Visible := True; end; begin slettliste(hode); listbox1.clear; registrer; end; // Prosedyre for å skrive ut listen procedure TForm1.Button2Click(Sender: TObject); procedure skrivut(hode:figurlistepeker); var neste : figurlistepeker; begin neste := hode; // Gjennomløper hele den lenkede listen listbox1.clear; while neste <> nil do begin with neste^ do begin case figurtype of linje: begin listbox1.items.add('Linje med lengde ' + FloatToStr(lengde)); end; trekant: begin listbox1.items.add('Trekant med høyde ' + FloatToStr(hoyde) + ' og bredde ' + FloatToStr(bredde)); end; firkant: begin listbox1.items.add('Firkant med høyde ' + FloatToStr(hoyde) + ' og bredde ' + FloatToStr(bredde)); end; sirkel: begin listbox1.items.add('Sirkel med radius ' + FloatToStr(radius)); end; end; // end case end; // end with neste := neste^.neste; end; // end whilesløyfe end; // end skrivutprosedyre begin skrivut(hode); end; // Kjøres ved oppstart for å nullstille den globale variabelen hode procedure TForm1.FormCreate(Sender: TObject); begin hode := nil; end; end.
unit Unit2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type figurer = (linje,trekant,firkant,sirkel); figurlistepeker = ^figurlistetype; figurlistetype = record neste:figurlistepeker; case figurtype:figurer of linje: (lengde:real); trekant,firkant: (hoyde,bredde:real); sirkel: (radius:real); end; TForm2 = class(TForm) RadioGroup1: TRadioGroup; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Button1: TButton; Button2: TButton; procedure Reset; procedure Button1Click(Sender: TObject); procedure RadioGroup1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; neste: figurlistepeker; implementation uses Unit1; {$R *.DFM} procedure Tform2.Reset; begin RadioGroup1.Itemindex := -1; Edit1.Visible := False; Edit2.Visible := False; Edit1.Text := ''; Edit2.Text := ''; Label1.Visible := False; Label2.Visible := False; end; procedure TForm2.Button1Click(Sender: TObject); procedure nynode(var hode,neste:figurlistepeker); begin if hode = nil then begin new(hode); neste := hode; end else begin new(neste^.neste); neste := neste^.neste; end; neste^.neste := nil; end; begin if RadioGroup1.ItemIndex > -1 then begin nynode(form1.hode,neste); with neste^ do begin case RadioGroup1.ItemIndex of 0: begin figurtype := linje; lengde := StrToFloat(Edit1.text); end; 1: begin figurtype := trekant; hoyde := StrToFloat(Edit1.text); bredde := StrToFloat(Edit2.text); end; 2: begin figurtype := firkant; hoyde := StrToFloat(Edit1.text); bredde := StrToFloat(Edit2.text); end; 3: begin figurtype := sirkel; radius := StrToFloat(Edit1.text); end; end; // slutt case of end; // slutt with reset; end; end; procedure TForm2.RadioGroup1Click(Sender: TObject); begin case RadioGroup1.ItemIndex of 0: begin Edit2.Visible := False; Label2.Visible := False; Label1.Caption := 'Lengde:'; Edit1.Visible := True; end; 1,2: begin Label1.Caption := 'Lengde:'; Label2.Visible := True; Edit2.Visible := True; end; 3: begin Edit2.Visible := False; Label2.Visible := False; Label1.Caption := 'Radius:'; end; end; Edit1.Visible := True; Label1.Visible := True; end; procedure TForm2.Button2Click(Sender: TObject); begin Form2.Visible := False; Form1.Enabled := True; reset; end; end.