PascalABC формы, калькулятор
Добрый день всем.Делаю инженерный калькулятор на Паскаль и проблема в том, что не могу реализовать x^y, для своей кнопки я это сделал так:
procedure Form2.button28_Click(sender: Object; e: EventArgs);
begin
b:=strToFloat(textbox1.Text);
a:=strToFloat(textbox1.Text);
textbox1.Text:=floattostr(Power(a,b));
label1.Text:=label1.Text+textbox1.Text;
end;
Но у меня не работает. Число, которое было введено просто возводиться в степень самого себя. Перепробовал все, не получается. Знатоки, помогите!
Необходимо, чтобы ввод осуществлялся из одного текстбокса.
"b:=strToFloat(textbox1.Text);
a:=strToFloat(textbox1.Text); "
Из одного текстбокса ввод. Во второй строке что-то не так.
b:=strToFloat(textbox1.Text); /*здесь надо textbox2.Text */
a:=strToFloat(textbox1.Text);
ты сделал кнопку x^x, чтобы сделать x^y нужно чтобы кнопка фиксировала где-то первое число (промежуточный результат) и текущую операцию, например, по простому, в полях класса формы - так работает простой калькулятор - он выполняет операции последовательно, т.е. 1 + 2 ^ 2 = 9, инженерный калькулятор считает все выражение целиком, учитывая приоритет операций и скобки, т.е. 1 + 2 ^ 2 = 5
В твоем коде есть ошибка в том, как ты присваиваешь значения переменным a и b. Обрати внимание на следующую строку:
pascal
Copy code
a := strToFloat(textbox1.Text);
b := strToFloat(textbox1.Text);
Вы присваиваете одно и то же значение переменным a и b. В результате переменная b не имеет значения степени для функции Power, и поэтому возводится в степень сама себя.
Исправь это, присваивая разные значения переменным a и b, например:
pascal
Copy code
a := strToFloat(textbox1.Text);
b := strToFloat(textbox2.Text); // Предполагается, что степень введена в другом текстовом поле (textbox2)
Также убедись, что ты правильно используешь Power(a, b). Если твоя цель - возвести a в степень b, то код должен быть корректным, после исправления присваивания переменных. Если проблема сохраняется, уточните, какое именно поведение ты ожидаешь, и я постараюсь помочь.
Для решения данной проблемы можно использовать следующий код:
function Power(a, b: real): real;
begin
result := 1;
while b > 0 do
begin
if b mod 2 = 1 then
result := result * a;
a := a * a;
b := b div 2;
end;
end;
procedure TForm2.Button28Click(Sender: TObject);
var
a, b, res: real;
s: string;
begin
a := StrToFloatDef(Edit1.Text, 0);
b := StrToFloatDef(Edit2.Text, 1);
res := Power(a, b);
s := FloatToStrF(res, ffFixed, 8, 2);
Edit3.Text := s;
end;
При этом, необходимо создать обработчик события для кнопки Button28 с именем Button28Click. Этот код вычисляет значение a^b, где a и b - числа, введенные в Edit1 и Edit2 соответственно. Результат
Вроде бы этот код, но я надеюсь у тебя сработает