W
wanty
Задача заключается в построении площади по трём отрезкам, которые должны рандомно выбираться из рандомно сгенерированного массива. При этом нужно проверить все возможные комбинации вытягивания трёх чисел. Программа написана и работает, но ошибка в том, что перебирает не все комбинации, их количество должно определяться по формуле количества сочетаний (с факториалами), а у меня не получается, подскажите плиизз, что не так ? (Delphi)
вот части кода:
.
вот части кода:
Код:
unit Unit2;
.
.
.
.
function LL.Plo(a, b, c: Double):Double;
var
p:Double;
begin
P:=(a+b+c)/2;
Result:=sqrt(p*(p-a)*(p-b)*(p-c));
end;
procedure LL.Proverka(var a, b, c: Variant; j:iNTEGER; N: Integer; h:array of Double);
begin
if (a=b) or (a=c) then
begin
j:=random(N);
a:=h[j];
end;
if (a=b) or (b=c) then
begin
j:=random(N);
b:=h[j];
end;
end;
end.
unit Unit1;
.
.
.
.
procedure TForm1.Button1Click(Sender: TObject);
var
h: array of Double;
N,i,j:integer;
a,b,c:Variant;
d: Double;
res:double;
begin
Try
if (edit1.text='') then raise EMessErr.Create('Число не введено');
if Edit1.text<>'' then
(Sender as Tbutton).Caption:='Рассчет площади выполнен';
if Edit1.text<Inttostr(3) then raise EMessErr.Create('Введите число >=3');
memo1.Lines.Clear;
memo2.Lines.Clear;
N:=StrToInt(Edit1.Text);
randomize;
setlength(h,N);
d:=1;
memo2.Lines.Add('Массив чисел');
for i:=0 to length(h)-1 do
begin
h[i]:=random*10;
memo2.Lines.Add(floattostr(h[i]));
End;
While D<>(N-1) do
begin
j:=random(N);
a:=h[j];
j:=random(N);
b:=h[j];
j:=random(N);
c:=h[j];
while (A=B) or (B=c) Or(A=c) do
Proverka (a,b,c,j,n,h);
if ( ( (a+b) <=c) or ( (b+c) <=a) or ( (c+a) <=b) ) then
else
begin
memo1.Lines.Add('выбранные числа');
memo1.Lines.Add(floattostr(a));
memo1.Lines.Add(floattostr(b));
memo1.Lines.Add(floattostr(c));
res:=Plo(a,b,c);
memo1.Lines.Add('Площадь треугольника равна'+Floattostr(res));
memo1.Lines.Add('------------------------------');
end;
d:=d+1
end;
.
.
.
.
.