Другие языки программирования и технологии

Код для программы в Делфи

Добрый день, учусь на 1 курсе в университете, Делфи изучаю впервые, подскажите правильно ли написан код для программы.
Необходимо, чтобы при вводе X и Y считалось по формуле и выводилось в edit -ы
Ввожу данные X и Y, считает (ошибка еще в формуле самой, потому что не знаю как возвести в степень, но оставила, чтобы проверить как будет считать), выводит куда нужно, но потом, при замене X и Y он не считает заново, а оставляет получившиеся ранее. В чём может быть проблема?

Исправила код, считает правильно!
Но осталось правильно степень сделать и еще вопрос: Надо вывести в edit5 и edit7 целочисленные значения, а в edit6 edit8 с плавающей запятой, какую функцию использовать? (помню что-то с f ' ' f)

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtnrs;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
OleContainer1: TOleContainer;
OleContainer2: TOleContainer;
OleContainer3: TOleContainer;
OleContainer4: TOleContainer;
OleContainer5: TOleContainer;
OleContainer6: TOleContainer;
Edit8: TEdit;
OleContainer7: TOleContainer;
OleContainer8: TOleContainer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
d=55;
z=32.035;
U=32 div 5+6;
R=27-10 mod 4;
var
Form1: TForm1;
X,Y,A,B: Real;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text:=IntToStr(U);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit4.Text:=IntToStr(R);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
X:=StrToFloat(Edit1.Text);
Y:=StrToFloat(Edit2.Text);
A:=R+(Sqrt(2*d))/abs(z/(U+R)-Y*X);
Edit5.Text:=FloatToStr(A);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
X:=StrToFloat(Edit1.Text);
Y:=StrToFloat(Edit2.Text);
B:=(((R*X+2)/(U+d))/z*Y)*(((R*X+2)/(U+d))/z*Y)*(((R*X+2)/(U+d))/z*Y)-A;
Edit7.Text:=FloatToStr(B);
end;

end.
мб преподы определятся чего хотят - по кнопке или при изменении? и то и другое делать смысла нету.
Есть событие OnChange у каждого Edit, оно происходит при изменении текста в Edit(изменение это не то что вам хочется а любая манипуляция с текстом) но если к нему просто привязать вычисления вы уроните приложение допустим при вводе точки или запятой, а если препод вредный то может и текст а не число ввести (проверить устойчивость к дебилам). К слову вам не обязательно создавать две идентичных процедуры, вы можете создать её для одного Edit и привязать к ней событие у другого, оба будут вызвать её.

на вашем месте (при незнании ни Pow ни выкрутасов с exp) возведение сделал бы иначе
procedure TForm1.Button4Click(Sender: TObject);
var tmp: Integer;
begin
...
tmp := (((R*X+2)/(U+d))/z*Y); tmp := tmp * tmp * tmp;
B:=tmp-A;
...
end;

далее мне кажется или степень применена к числителю дроби а не всей дроби?
ещё один косяк (тут скорее чисто визуальный) в первой формуле, былоб там умножение дроби на число вы бы пролетели, но т. к. сложение ниже по рангу то все ок (оформите дробь в скобки)
Алексей Тебеньков
Алексей Тебеньков
5 038
Лучший ответ
Андрей Коптяев Огромное спасибо за такой подробный ответ, с экспонентой разобралась.
Верно ли определена формула для плавающей запятой?
Ну так после нажатия кнопки у вас только вывод... Расчетов то только по Button1
Андрей Коптяев Поняла вас, благодарю за ответ
А по поводу возведения в степень как?
Возведение в степень - Pow() или Power(), не помню точно. Функция в модуле Math.
То что не считает заново, видимо потому что логика неок: вот зачем эти кнопочки "Вычислить ..."? Делай без них, обрабатывая событие изменения (вроде onChange оно называется в VCL). Чтобы в переменнных всегда были актуальные данные из ввода пользователя.
Joni Joni
Joni Joni
97 694
Андрей Коптяев Преподавателям нужно оформление такое)
Благодарю за ответ!