Stian Søiland, IT 111, øvingsgruppe 15 (stud.ass. Kari Alvheim)
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) Button1: TButton; StringGrid1: TStringGrid; Label1: TLabel; StringGrid2: TStringGrid; StringGrid3: TStringGrid; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); const AntTermer = 6; AntDokument = 5; AntTermpar = 15; type Doktermmatrisetype = array[1..AntTermer,1..AntDokument] of integer; Similaritetsmatrisetype = array[1..AntTermer,1..AntTermer] of real; Termparmatrisetype = array[1..AntTermpar,1..2] of integer; Matchmatrisetype = array[1..AntTermpar] of real; var Doktermmatrise: Doktermmatrisetype; Similaritetsmatrise: Similaritetsmatrisetype; Termparmatrise: Termparmatrisetype; Matchmatrise: Matchmatrisetype; i,j,k: integer; function sim(ord1,ord2:integer; matrise:Doktermmatrisetype):real; var i,kvadrat1,kvadrat2,produkt:integer; begin // initiering kvadrat1 := 0; kvadrat2 := 0; produkt := 0; // summerer for i:=1 to AntDokument do begin kvadrat1 := kvadrat1 + (matrise[ord1,i] * matrise[ord1,i]); kvadrat2 := kvadrat2 + (matrise[ord2,i] * matrise[ord2,i]); produkt := produkt + (matrise[ord1,i] * matrise[ord2,i]); end; // formel sim := produkt (kvadrat1+kvadrat2-produkt); end; procedure initiering(var Doktermmatrise:Doktermmatrisetype); begin // initering og innstilling av dingser Doktermmatrise[1,1]:=1; Doktermmatrise[1,2]:=1; Doktermmatrise[1,3]:=1; Doktermmatrise[1,4]:=0; Doktermmatrise[1,5]:=1; Doktermmatrise[2,1]:=1; Doktermmatrise[2,2]:=1; Doktermmatrise[2,3]:=1; Doktermmatrise[2,4]:=1; Doktermmatrise[2,5]:=1; Doktermmatrise[3,1]:=1; Doktermmatrise[3,2]:=0; Doktermmatrise[3,3]:=1; Doktermmatrise[3,4]:=1; Doktermmatrise[3,5]:=0; Doktermmatrise[4,1]:=1; Doktermmatrise[4,2]:=1; Doktermmatrise[4,3]:=1; Doktermmatrise[4,4]:=0; Doktermmatrise[4,5]:=1; Doktermmatrise[5,1]:=1; Doktermmatrise[5,2]:=1; Doktermmatrise[5,3]:=1; Doktermmatrise[5,4]:=0; Doktermmatrise[5,5]:=1; Doktermmatrise[6,1]:=0; Doktermmatrise[6,2]:=1; Doktermmatrise[6,3]:=0; Doktermmatrise[6,4]:=0; Doktermmatrise[6,5]:=1; end; procedure sortering(var matrise1:Matchmatrisetype; var matrise2:Termparmatrisetype); var i,j,pos:integer; funnet:boolean; temp1:real; temp2,temp3:integer; begin matrise2[1,1] := matrise2[2,1]; matrise2[2,1] := matrise2[3,1]; matrise2[1,2] := matrise2[7,2]; for i:=low(matrise1) to high(matrise1) do begin funnet := false; j := low(matrise1)-1; while not funnet do begin j := j+1; if matrise1[i] >= matrise1[j] then begin funnet := true; pos := j; end; end; // flytt elementer nedover temp1 := matrise1[i]; temp2 := matrise2[i,1]; temp3 := matrise2[i,2]; for j:=i downto pos do begin matrise1[j] := matrise1[j-1]; matrise2[j,1] := matrise2[j-1,1]; matrise2[j,2] := matrise2[j-1,2]; end; matrise1[pos] := temp1; matrise2[pos,1] := temp2; matrise2[pos,2] := temp3; end; end; begin initiering(Doktermmatrise); for i:= 1 to AntTermer do begin StringGrid1.Cells[0,i] := 't' + IntToStr(i); StringGrid1.Cells[i,0] := 't' + IntToStr(i); end; for i:=1 to AntTermer do for j:=1 to AntTermer do begin Similaritetsmatrise[i,j] := sim(i,j,Doktermmatrise); StringGrid1.Cells[i,j] := FloatToStr(sim(i,j,Doktermmatrise)); end; k := 0; for i:=1 to AntTermer-1 do begin for j:=i+1 to AntTermer do begin k := k+1; Termparmatrise[k,1] := i; Termparmatrise[k,2] := j; Matchmatrise[k] := Similaritetsmatrise[i,j]; end; end; for i:=1 to AntTermpar do begin // utskrift usortert StringGrid2.Cells[0,i] := 't' + IntToStr(Termparmatrise[i,1]); StringGrid2.Cells[1,i] := 't' + IntToStr(Termparmatrise[i,2]); StringGrid2.Cells[2,i] := Formatfloat('0.00',Matchmatrise[i]); end; sortering(Matchmatrise,Termparmatrise); for i:=1 to AntTermpar do begin // utskrift sortert StringGrid3.Cells[0,i] := 't' + IntToStr(Termparmatrise[i,1]); StringGrid3.Cells[1,i] := 't' + IntToStr(Termparmatrise[i,2]); StringGrid3.Cells[2,i] := Formatfloat('0.00',Matchmatrise[i]); end; end; end.