Dobrý den,
jedná se o školní práci, kvůli které mám windows s Delphi a pořeboval bych, aby v proceduře NejblizsiBody došlo na konci k převodu proměnné typu real na string a dostat to do MemoPole. Nějak na to nemůžu přijít. Zjistil sem že programování asi nebude moje silná stránka a prosím o pomoc.
procedure NejblizsiBody (Mat: TMatice; n: Integer; var MemoBox: TMemo; var Xi,Xj,Yi,Yj,Min_find: Real);
var
i,j: Integer;
Vzdal: real;
begin
Min_find:= maxint;
for i := 1 to n-1 do begin
for j := i+1 to n do begin
Vzdal:= sqrt((sqr(mat[1,i]-mat[1,j]))+(sqr(mat[2,i]-mat[2,j])));
if Vzdal < Min_find then begin
Min_find:= Vzdal;
Xi:=mat[1,i];
Xj:=mat[1,j];
Yi:=mat[2,i];
Yj:=mat[2,j];
end;
floatTostr(Nejblizsibody(vzdal));
MemoBox.Lines.Add ('Nejbližší body jsou:');
MemoBox.Lines.Add (vzdal)
end;
end;
end;
Celý program:
- zadání:
Náhodným způsobem vygenerujte n dvojic reálných čísel v rozsahu A až B. Tyto dvojice považujte za kartézské souřadnice bodů v rovině. Nalezněte dva body s nejbližší vzdáleností a souřadnice obou bodů vytiskněte. Všechny dvojice a nejbližší dvojici vytiskněte do memo pole a do souboru.
Vstup: n – počet bodů – dvojic souřadnic, dolní a horní mez
Výstup: Souřadnice dvou bodů, které leží nejblíže.
unit Vzdalenost_Bodu;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const MAX = 100;
type
Tmatice = array[1..MAX] of array [1..2] of integer;
TForm1 = class(TForm)
btnKonec: TButton;
Button2: TButton;
btnBudiz: TButton;
edtB: TEdit;
edtA: TEdit;
edtN: TEdit;
tmemo: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
btnUlozit: TButton;
procedure edtNEnter(Sender: TObject);
procedure edtAEnter(Sender: TObject);
procedure edtBEnter(Sender: TObject);
procedure btnKonecClick(Sender: TObject);
procedure btnBudizClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure btnUlozitClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
n,A,B,i,j:integer;
X1,X2,Y1,Y2:real;
Mat: TMatice;
implementation
{$R *.dfm}
procedure NahodMat (var Mat: TMatice; Min,Max: Integer);
var
i,j: Integer;
begin
Randomize;
for i := 1 to 2 do
for j := 1 to n do begin
Mat [i,j]:= Min+Random (Max-Min+1);
end;
end;
procedure MatDoTmem (var Mat: TMatice; MemoBox: TMemo; n: Integer);
var
i,j: Integer;
s: String;
begin
for j := 1 to n do begin
s:= '[' + IntToStr(j) + '] = ';
for i := 1 to 2 do begin
s:= s+ IntToStr (Mat [i,j]) + ' ';
end;
MemoBox.Lines.Add (s);
end;
end;
procedure NejblizsiBody (Mat: TMatice; n: Integer; var MemoBox: TMemo; var Xi,Xj,Yi,Yj,Min_find: Real);
var
i,j: Integer;
Vzdal: real;
begin
Min_find:= maxint;
for i := 1 to n-1 do begin
for j := i+1 to n do begin
Vzdal:= sqrt((sqr(mat[1,i]-mat[1,j]))+(sqr(mat[2,i]-mat[2,j])));
if Vzdal < Min_find then begin
Min_find:= Vzdal;
Xi:=mat[1,i];
Xj:=mat[1,j];
Yi:=mat[2,i];
Yj:=mat[2,j];
end;
floatTostr(Nejblizsibody(vzdal));
MemoBox.Lines.Add ('Nejbližší body jsou:');
MemoBox.Lines.Add (vzdal)
end;
end;
end;
procedure TForm1.btnBudizClick(Sender: TObject);
var
Xi,Xj,Yi,Yj,Min_find:real;
begin
Tmemo.Text:= '';
n:= StrToInt (edtN.Text);
A:= StrToInt (edtA.Text);
B:= StrToInt (edtB.Text);
NahodMat (Mat, A, B);
MatDoTmem (Mat, tmemo, n);
NejblizsiBody (Mat,n,tmemo,Xi,Xj,Yi,Yj,Min_find);
end;
procedure TForm1.btnKonecClick(Sender: TObject);
begin
close;
end;
procedure TForm1.btnUlozitClick(Sender: TObject);
var
F: TextFile;
i,j: Integer;
begin
AssignFile (F, 'data.txt');
ReWrite (F);
for j := 1 to n do
for i := 1 to 2 do
WriteLn (F, '[' + IntToStr(j) + '] = ' + IntToStr(Mat[i,j]));
CloseFile (F);
ShowMessage ('Soubor data.txt byl vytvoren');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edtN.Text:= '';
edtA.Text:= '';
edtB.Text:= '';
self.tmemo.Text:= '';
end;
procedure TForm1.edtAEnter(Sender: TObject);
begin
self.edtA.Text:='';
end;
procedure TForm1.edtBEnter(Sender: TObject);
begin
self.edtB.Text:='';
end;
procedure TForm1.edtNEnter(Sender: TObject);
begin
self.edtN.Text:='';
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
Randomize;
self.tmemo.Text:='';
end;
end.
Za jakoukoliv pomoc předem děkuji.