Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2010, 22:41   #1
manick
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 17
По умолчанию Калькулятор

Пишу калькулятор,
и не знаю как написать кнопку "у^x"

а именно как дважды считывать с эдита (табло калькулятора)

вот например
кнопка n!
Код:
procedure TForm1.Butt_nClick(Sender: TObject);
begin
x:=StrToFloat(form1.Edit1.Text);
y:=fact(x);
Form1.Edit1.Text:=FloatToStr(y);
end;
где fact функция
Код:
function fact(k:real):real;
begin
  if (k=0) or (k=1) then fact:=1
  else fact:=k*fact(k-1);
end;
или кнопка sin(x)
Код:
procedure TForm1.Butt_sinClick(Sender: TObject);
begin
x:=StrToFloat(form1.Edit1.Text);
y:=sinT(x);
Form1.Edit1.Text:=FloatToStr(y);
end;
а вот как y^x не могу понять(формулу возведения в степень я знаю , не знаю как с одного эдита считать число и степень) ,подскажите плиз

From Stilet: Код Делфи и Си выделяй кнопкой # а не <>

Последний раз редактировалось Stilet; 20.04.2010 в 10:13.
manick вне форума Ответить с цитированием
Старый 19.04.2010, 23:00   #2
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

Код:
procedure TfrmMain.btnResultClick(Sender: TObject);
var
  I, J, K: LongInt;
  Res: LongInt;
begin
  if lbledtValue.Text = '' then
    Exit;
  for I := 0 to Length(lbledtValue.Text) do
  begin
    if lbledtValue.Text[I] = '^' then
    begin
      K := I;
      Break;
    end;
  end;
  Res := 1;
  for J := 0 to StrToInt(Copy(lbledtValue.Text, K + 1,
    Length(lbledtValue.Text) - K)) - 1 do
  begin
    Res := Res * StrToInt(Copy(lbledtValue.Text, 0, K - 1));
  end;
  lbledtValue.Text := IntToStr(Res);
end;
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 20.04.2010, 12:39   #3
CraftR14
Все к лучшему...
Форумчанин
 
Регистрация: 06.04.2010
Сообщений: 112
По умолчанию

Не совсем понятно для чего этот велосипед?? Мэй би качнуть иходник и просто покавырявшись создать более умную машину? ))
CraftR14 вне форума Ответить с цитированием
Старый 21.04.2010, 22:26   #4
manick
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 17
По умолчанию

[QUOTE=Marsel737;504452]
Код:
procedure TfrmMain.btnResultClick(Sender: TObject);
var
  I, J, K: LongInt;
  Res: LongInt;
begin
  if lbledtValue.Text = '' then
    Exit;
  for I := 0 to Length(lbledtValue.Text) do
  begin
    if lbledtValue.Text[I] = '^' then
    begin
      K := I;
      Break;
    end;
  end;
  Res := 1;
  for J := 0 to StrToInt(Copy(lbledtValue.Text, K + 1,
    Length(lbledtValue.Text) - K)) - 1 do
  begin
    Res := Res * StrToInt(Copy(lbledtValue.Text, 0, K - 1));
  end;
  lbledtValue.Text := IntToStr(Res);
end;
[/QUOTE

спасибо, можешь немного коментариев сделать что за что отвечает?
manick вне форума Ответить с цитированием
Старый 21.04.2010, 23:02   #5
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

К примеру такая запись в edit'е 2^3. Сначала ищем положение знака ^ в строке, потом копируем все до этого знака и в цикле от одного до "всё что после знака ^" перемножаем:

Код:
procedure TfrmMain.btnResultClick(Sender: TObject);
var
  I, J, K: LongInt;
  Res: real;
begin
  if lbledtValue.Text = '' then 
    Exit;
  for I := 0 to Length(lbledtValue.Text) do // Считываем по символу, пока не встретится знак ^
  begin
    if lbledtValue.Text[i] = '^' then // Если встретился, то в К записываем номер символа
    begin
      K := I;
      Break; // Выходим из цикла
    end;
  end;
  Res := 1; // Результат
  for J := 0 to StrToInt(Copy(lbledtValue.Text, K + 1,
    Length(lbledtValue.Text) - K)) - 1 do // Начинаем новый цикл, в котором перемножаем число определенно количество раз. Цикл выполняем от 0 до числа, которое берем копированием после знака ^
  begin
    Res := Res * StrToFloat(Copy(lbledtValue.Text, 0, K - 1)); // Это и есть число возводимое в степень, берем его копированием текста до знача ^
  end;
  lbledtValue.Text := FloatToStr(Res); // Выводим резульата
end;
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 21.04.2010, 23:37   #6
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

или можно например 2^3. сначала выписываться 2 потом нажимается кнопка "у^x". 2ка запоминается в переменную и едит отчищаетса. потом вписывается 3 и нажимаеться "=" и считаетса и результат заноситься в едит
пауэрлифтинг вне форума Ответить с цитированием
Старый 22.04.2010, 00:34   #7
manick
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от пауэрлифтинг Посмотреть сообщение
или можно например 2^3. сначала выписываться 2 потом нажимается кнопка "у^x". 2ка запоминается в переменную и едит отчищаетса. потом вписывается 3 и нажимаеться "=" и считаетса и результат заноситься в едит
а как это в коде будеть выглядить? =)
manick вне форума Ответить с цитированием
Старый 22.04.2010, 01:00   #8
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

Код:
var stepx: real; step: boolaen=false;
..
procedure TForm1.ButtClick(Sender: TObject);  //нажатие на кнопку "у^x"
begin
stepx:=StrToFloat(form1.Edit1.Text);
step:=true;
form1.Edit1.Text:='';
end;

function fstep(x: real;y:integer): real; //возведение в степень можеш свою функцию написать
var i: integer;
begin
result:=1;
for i:=1 to y do 
result:=result*x;
end;

procedure TForm1.ButtClick(Sender: TObject);  //кнопка "="
begin
if step then form1.Edit1.Text:=floattostr(fstep(stepx,strtoint(form1.Edit1.Text)));
...
step:=false;
end;
пауэрлифтинг вне форума Ответить с цитированием
Старый 23.04.2010, 20:42   #9
manick
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от пауэрлифтинг Посмотреть сообщение
Код:
var stepx: real; step: boolaen=false;
..
procedure TForm1.ButtClick(Sender: TObject);  //нажатие на кнопку "у^x"
begin
stepx:=StrToFloat(form1.Edit1.Text);
step:=true;
form1.Edit1.Text:='';
end;

function fstep(x: real;y:integer): real; //возведение в степень можеш свою функцию написать
var i: integer;
begin
result:=1;
for i:=1 to y do 
result:=result*x;
end;

procedure TForm1.ButtClick(Sender: TObject);  //кнопка "="
begin
if step then form1.Edit1.Text:=floattostr(fstep(stepx,strtoint(form1.Edit1.Text)));
...
step:=false;
end;
спасибо =)
manick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калькулятор SPQR10000 Помощь студентам 11 25.02.2010 22:01
Калькулятор BaRSyk174 Помощь студентам 4 26.01.2010 20:19
калькулятор vetalij Общие вопросы C/C++ 3 25.01.2010 21:04
Калькулятор на С++ alexxxxZxxxx Общие вопросы C/C++ 3 28.03.2009 22:07
Калькулятор ViNcHeStEr Помощь студентам 5 23.11.2008 15:39