У меня есть текст программы на delphi.Очень нужно эту же программу написать на С++ с такими же функциями и процедурами.
Условие задачи: В файле заданы координаты центров и радиусы кругов. В другом файле заданы координаты одной из вершин вписанного квадрата для каждого круга. Вывести на экран круги и вписаны в них квадраты. Центры кругов, в которых вписаны квадраты, имеют площадь в пределах между средней площадью кругов и средней площадью квадратов, соединить ломаной, отрезки которой не пересекаются между собой.
ВСЯ ПРОГРАММА НЕ ВЛЕЗЛА , ЕСЛИ ГОТОВЫ ПОМОЧЬ, ПИШИТЕ В ЛИЧНЫЕ СООБЩЕНИЯ!
Зарание спасибо)
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
MaxIIndex = 100;
type
TIndex = 0..MaxIIndex;
TVector = array [TIndex] of Real;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit1: TEdit;
Edit2: TEdit;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Edit3: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
N: TIndex; // count of circles
GoodN: TIndex; // count of good circles
Rx: TVector; // Rx[i] circle x coord
Ry: TVector; // Ry[i] circle y coord
Rr: TVector; // Rr[i] circle radius
Ax: TVector; // Square Ax[i] x coord
Ay: TVector; // Square Ay[i] y coord
Bx: TVector; // Square Bx[i] x coord
By: TVector; // Square By[i] y coord
Cx: TVector; // Square Cx[i] x coord
Cy: TVector; // Square Cy[i] y coord
Dx: TVector; // Square Dx[i] x coord
Dy: TVector; // Square Dy[i] y coord
SC: TVector; // S circle
SS: TVector; // S square
IsGood: array [TIndex] of Boolean;
SCsum: Real; // sum of circle squares
SSsum: Real; // sum of square squares
AvrSC: Real; // average circle square
AvrSS: Real; // average square square
procedure SwapIJ(Sender: TObject; i: TIndex; j:TIndex);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.SwapIJ;
procedure SwapReal (var x, y: Real);
var
tmpValReal: Real;
begin
tmpValReal := x; x := y; y := tmpValReal; // x<=>y
end;
procedure SwapBool (var x, y: Boolean);
var
tmpValBool: Boolean;
begin
tmpValBool := x; x := y; y := tmpValBool; // x<=>y
end;
begin
SwapReal(Rx[i], Rx[j]); // Rx[i]<=>Rx[j]
SwapReal(Ry[i], Ry[j]); // Ry
SwapReal(Rr[i], Rr[j]); // Rr
SwapReal(Ax[i], Ax[j]); // Ax
SwapReal(Ay[i], Ay[j]); // Ay
SwapReal(Bx[i], Bx[j]); // Bx
SwapReal(By[i], By[j]); // By
SwapReal(Cx[i], Cx[j]); // Cx
SwapReal(Cy[i], Cy[j]); // Cy
SwapReal(Dx[i], Dx[j]); // Dx
SwapReal(Dy[i], Dy[j]); // Dy
SwapReal(SC[i], SC[j]); // SC
SwapReal(SS[i], SS[j]); // SS
SwapBool(IsGood[i], IsGood[j]); // IsGood
end;
procedure TForm1.Button1Click(Sender: TObject);
var
f1: TextFile; // in file 1
f2: TextFile; // in file 2
// n: integer; // circle count
s: String; // temp string
i: integer; // index
xmin: real; // ROx min
xmax: real; // ROx max
ymin: real; // ROy min
ymax: real; // ROy max
rmin: real; // R radius min
rmax: real; // R radius max
fi: real; // 0..2 rad
begin
Edit1.Text := 'file1.dat.txt';
Edit2.Text := 'file2.dat.txt';
//
AssignFile(f1, Edit1.Text);
Rewrite(f1);
AssignFile(f2, Edit2.Text);
Rewrite(f2);
//
n := 0;
while (n=0) do
begin
s := InputBox('Введіть кількість кіл', 'Кількість кіл = ', '7');
try
n := StrToInt(s);
except
n := 0;
end; // try
end; // while
//
xmin:=30; // ROx min
xmax:=300; // ROx max
ymin:=30; // ROy min
ymax:=300; // ROy max
rmin:=20; // R radius min
rmax:=90; // R radius max
//
Randomize;
for i:=1 to n do
begin
Rx[i] := xmin + (xmax-xmin)*Random; // Rx[i] circle x coord
Ry[i] := ymin + (ymax-ymin)*Random; // Ry[i] circle y coord
Rr[i] := rmin + (rmax-rmin)*Random; // Rr[i] circle radius
fi := 2*Random; // random fi
Ax[i] := Rx[i] + Rr[i]*cos(fi); // Square Ax[i] x coord
Ay[i] := Ry[i] + Rr[i]*sin(fi);; // Square Ay[i] y coord
Writeln(f1, Rx[i]:6:12, ' ', Ry[i]:6:12, ' ', Rr[i]:6:12);
Writeln(f2, Ax[i]:6:12, ' ', Ay[i]:6:12);
end;
//
Flush(f1);
CloseFile(f1);
Flush(f2);
CloseFile(f2);
end;
procedure TForm1.Button5Click(Sender: TObject);
var
i: TIndex; // tmp index
Index: TIndex; // tmp index for rearrange
MinXindex: TIndex; // index for sort
Index2: TIndex; // tmp index for rearrange
FreeGoodIndex: TIndex; // index for free cell for rearrange
f3: TextFile; // out file 3
begin
Memo1.Clear;
Canvas.Pen.Width := 1;
Canvas.Rectangle(0,0, 500,500); // clear canvas rectangle
Edit3.Text := 'file3.dat.txt';
AssignFile(f3, Edit3.Text);
Rewrite(f3);
// read data from input files & check validation
// !!! data is actyal after fgenerating procedure
// -- todo
//
//
// calculate B,C,D,SC,SS, SCsum, SSsum, AvrSC, AvrSS
SCsum := 0;
SSsum := 0;
for i:=1 to n do
begin
Bx[i] := Rx[i] + -(Ay[i]-Ry[i]);
By[i] := Ry[i] + (Ax[i]-Rx[i]);
//
Cx[i] := Rx[i] + -(Ax[i]-Rx[i]);
Cy[i] := Ry[i] + -(Ay[i]-Ry[i]);
//
Dx[i] := Rx[i] + (Ay[i]-Ry[i]);
Dy[i] := Ry[i] + -(Ax[i]-Rx[i]);
//
SC[i] := Pi * Rr[i] * Rr[i];
SCsum := SCsum + SC[i];
SS[i] := 2 * Rr[i] * Rr[i];
SSsum := SSsum + SS[i];
end;
AvrSC := SCsum / n;
AvrSS := SSsum / n;
//
Memo1.Lines.Add('Average SC =' + FloatToStr(AvrSC));
Memo1.Lines.Add('Average SS =' + FloatToStr(AvrSS));
// draw all
// calculate GoodN
GoodN := 0;
for i:=1 to n do // loop for circles
begin
// set color: red - bad; green - good
// for good draw centre of cicle
IsGood[i] := false;
if (SS[i]>AvrSS) and (SS[i]<AvrSC) // check for goodnes of cicle
then
begin
GoodN := GoodN + 1; // inc GoodN
IsGood[i] := true; // set good flag to true
Canvas.Pen.Color := clGreen; // set color to green
// circle centre
Canvas.Arc( // draw circle centre
trunc(Rx[i]-2), trunc(Ry[i]-2), // left up corner
trunc(Rx[i]+2), trunc(Ry[i]+2), // right down corner
trunc(Rx[i]-2), trunc(Ry[i]-2), // start paint coord
trunc(Rx[i]-2), trunc(Ry[i]-2) // finish paint coord
);
end
Пожалуйста, оформляйте Ваш код согласно правилам.