|
|
Регистрация | << Правила форума >> | 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; Здесь нет проверки данных и обработки исключений. |