| Код | m:= StrToFloat(RxCalcEdit1.Text); k:= StrToFloat(RxCalcEdit2.Text); i:= StrToFloat(RxCalcEdit3.Text); // предварительные преобразования c:= Trunc(m); d:= Trunc(m/2) mod 10000; // вычисление v:=sin(((k+i/60)*pi)/180)*4.0425/m; for aa:=20 to 100 do for bb:=20 to 100 do for cc:=20 to 100 do for dd:=20 to 100 do if FormatFloat('0.000',(aa*bb)/(cc*dd)) = FormatFloat('0.000',v) then if (aa<>bb) and (cc<>dd) then Memo1.Lines.Add(Format(' %d x %d / %d x %d',[aa,bb,cc,dd]));
|
Или так:
| Код | m:= StrToFloat(RxCalcEdit1.Text); k:= StrToFloat(RxCalcEdit2.Text); i:= StrToFloat(RxCalcEdit3.Text); // предварительные преобразования c:= Trunc(m); d:= Trunc(m/2) mod 10000; // вычисление v:=sin(((k+i/60)*pi)/180)*4.0425/m; v:=StrToFloat(FormatFloat('0.000',v)); for aa:=20 to 100 do for bb:=20 to 100 do for cc:=20 to 100 do for dd:=20 to 100 do if ((aa*bb)/(cc*dd)) = v then if (aa<>bb) and (cc<>dd) then Memo1.Lines.Add(Format(' %d x %d / %d x %d',[aa,bb,cc,dd]));
| Добавлено @ 15:17 Первый вариант лучше, т.к. округляются и левая и правая часть. Добавлено @ 15:21 Еще вариант 
| Код | v:=Round(sin(((k+i/60)*pi)/180)*4.0425/m*1000)/1000;
| |