![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите пожалуйсто!
Нужно сделать программку для вычисления пропорции (с исходниками, чтобы понять как). Если кто не знает, что такое пропорция, то вот, допустим, A/B=C/D, значит по пропорцие будет: B*C=A*D. Так вот, нужно чтобы ввел, допустим, A,B,C числа и посчиталось D число, и так, чтобы можно было все числа так расчитать, зная 3 числа. Вроде легко, но у меня не получается. Нуб наверно Заранее спасибо Вот, попробовал. Но ошибки...: Код:
var a,b,c,d,t:real; procedure TForm1.Button1Click(Sender: TObject); begin a:=strtofloat(edit1.Text); b:=strtofloat(edit2.Text); c:=strtofloat(edit3.Text); d:=strtofloat(edit4.Text); if a='empty' then t:=t+1; if b='empty' then t:=t+1; if c='empty' then t:=t+1; if d='empty' then t:=t+1; if t>1 then label2.caption:='Ошибка!'; if t=1 then begin if a='empty' then a:=(b*c)/d; edit1.Text:=floattostr(a); label2.caption:='Готово!'; if b='empty' then a:=(a*d)/c; edit1.Text:=floattostr(b); label2.caption:='Готово!''; if c='empty' then a:=(a*d)/b; edit1.Text:=floattostr(c); label2.caption:='Готово!''; if d='empty' then a:=(b*c)/a; edit1.Text:=floattostr(d); label2.caption:='Готово!''; end; end; end. |
|
#2
|
|||
|
|||
|
if a='empty' then t:=t+1;
Такое сравнение даст ошибку, т.к. "а" - тип Real, а сравнивается со строкой. Надо: if edit1.Text='empty' then t:=t+1; В строке label2.caption:='Готово!''; убрать в конец строки лишнюю кавычку. |
|
#3
|
|||
|
|||
|
Если по простому, то так:
Код:
type
TCalcType = (ctNone, ctA, ctB, ctC, ctD);
procedure TForm1.Button1Click(Sender: TObject);
function Convert(AStrData : String; var ARealdata : Double) : Boolean;
begin
Result := False;
If AStrData = ''
Then
Begin
Result := True;
ARealData := 0;
End
Else
ARealData := StrToFloat(AStrData);
end;
function CalcA(A,B,C,D : Double) : Double;
begin
Result := B * C / D;
end;
function CalcB(A,B,C,D : Double) : Double;
begin
Result := A * D / C;
end;
function CalcC(A,B,C,D : Double) : Double;
begin
Result := A * D / B;
end;
function CalcD(A,B,C,D : Double) : Double;
begin
Result := B * C / A;
end;
var
sA, sB, sC, sD : String;
rA, rB, rC, rD : Double;
ACalcType : TCalcType;
begin
// Инициализация
ACalcType := ctNone;
sA := Edit1.Text;
sB := Edit2.Text;
sC := Edit3.Text;
sD := Edit4.Text;
// Вычисляем расчетную переменную
If Convert(sA, rA) Then ACalcType := ctA;
If Convert(sB, rB) Then ACalcType := ctB;
If Convert(sC, rC) Then ACalcType := ctC;
If Convert(sD, rD) Then ACalcType := ctD;
Case ACalcType Of
ctNone : ShowMessage('Все переменные указаны!');
ctA :
Begin
rA := CalcA(rA,rB,rC,rD);
Edit1.Text := FloatToStr(rA);
End;
ctB :
Begin
rB := CalcB(rA,rB,rC,rD);
Edit2.Text := FloatToStr(rB);
End;
ctC :
Begin
rC := CalcC(rA,rB,rC,rD);
Edit3.Text := FloatToStr(rC);
End;
ctD :
Begin
rD := CalcD(rA,rB,rC,rD);
Edit4.Text := FloatToStr(rD);
End;
End;
end;Здесь нет проверки данных и обработки исключений. |