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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2012, 00:40   #1
megostudent
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 320
По умолчанию Калькулятор

Код:
var
  Form1: TForm1;
  kod: char;
  x, y, z: real;

implementation

{$R *.dfm}

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'1';
end;

procedure TForm1.BitBtn17Click(Sender: TObject);
begin
edit1.clear;
end;

procedure TForm1.BitBtn7Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'2';
end;

procedure TForm1.BitBtn10Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'3';
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'4';
end;

procedure TForm1.BitBtn6Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'5';
end;

procedure TForm1.BitBtn9Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'6';
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'7';
end;

procedure TForm1.BitBtn5Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'8';
end;

procedure TForm1.BitBtn8Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'9';
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'0';
end;

procedure TForm1.BitBtn11Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+',';
end;

procedure TForm1.BitBtn13Click(Sender: TObject);
begin
x:=strtofloat(edit1.Text);
kod:='+';
edit1.Clear;
end;

procedure TForm1.BitBtn14Click(Sender: TObject);
begin
x:=strtofloat(edit1.text);
kod:='-';
edit1.clear;
end;

procedure TForm1.BitBtn15Click(Sender: TObject);
begin
x:=strtofloat(edit1.Text);
kod:='*';
edit1.Clear;
end;

procedure TForm1.BitBtn16Click(Sender: TObject);
begin
x:=strtofloat(edit1.Text);
kod:='/';
edit1.clear;
end;

procedure TForm1.BitBtn12Click(Sender: TObject);
begin
if edit1.text<>'' then y:=strtofloat(edit1.Text);
case kod of
'+': z:=x+y;
'-': z:=x-y;
'*': z:=x*y;
'/': z:=x/y;
end;
edit1.text:=floattostr(z);
end;

end.
такой вот калькулятор Но когда в результате выходит большое чисто то он выдает ответ типа: 1111111111Е11. Как сделать чтобы он писал все число???
megostudent вне форума Ответить с цитированием
Старый 03.05.2012, 01:08   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Выложите проект целиком (можно подсократить код).
Воспользуйтесь FloatToStrF (http://delphibasics.ru/FloatToStrF.php).
Весь ваш код превращается в:
Код:
var
  Form1: TForm1;
  kod: char;
  x, y, z: extended;

implementation

{$R *.dfm}

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  if edit1.text <> '' then y := strtofloat(edit1.Text);
  case kod of
    '+': z := x + y;
    '-': z := x - y;
    '*': z := x * y;
    '/': if y <> 0 then z := x / y else z := 0;
  end;
  edit1.text := floattostrf(z, ffgeneral, 30, 0);
  edit2.Clear;
end;

procedure TForm1.BitBtn17Click(Sender: TObject);
begin
  edit1.Clear;
  edit2.Clear;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  edit2.text := (Sender as TBitBtn).caption;
  kod := (Sender as TBitBtn).caption[1];
  if edit1.Text <> '' then
    x := strtofloat(edit1.Text)
  else
    x := 0;
  edit1.clear;
end;

procedure TForm1.BitBtnClick(Sender: TObject);
begin
  edit1.text := edit1.text + (Sender as TBitBtn).caption;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  bitbtn12.Caption := decimalseparator;
  edit1.Clear;
  edit2.Clear;
end;
Пример приложен.
Есть кое-какие недоработки в плане логики работы, но это уже на ваш откуп.
Вложения
Тип файла: zip Project1.zip (225.7 Кб, 14 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 03.05.2012 в 01:27.
BDA на форуме Ответить с цитированием
Старый 03.05.2012, 12:21   #3
megostudent
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 320
По умолчанию

добавил я эту функцию, потом 5 555 555 555 * 5 555 555 555 и он мне в конце пишет 3,0864197524691358E0019, может что еще можно сделать чтобы он без "Е" писал?
megostudent вне форума Ответить с цитированием
Старый 03.05.2012, 12:47   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Все равно он неправильно посчитает это произведение. Простыми путями, имхо, не добиться точных вычислений больших чисел. При умножении 5 555 555 555 * 5 555 555 555 он уже потерял последние 4 цифры.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 03.05.2012, 14:39   #5
megostudent
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 320
По умолчанию

знач выходит что делфи какшка так как не может нормально считать. стандартный вивовс калькулятор такую операцию проводит как и калькулятор написаный на С++, и результат он выдает 30864197524691358025. Может и делфи не дурак и сможет показать такое число?)
megostudent вне форума Ответить с цитированием
Старый 03.05.2012, 14:46   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Может и делфи не дурак и сможет показать такое число
Сможет еще как, только арифметику длинных чисел самому реализовать прийдется. По поводу последней на форуме полно информации
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калькулятор exelim Win Api 4 11.02.2012 23:05
Калькулятор yaxx Общие вопросы Delphi 3 16.10.2011 02:28
калькулятор -=Andriushka=- Общие вопросы Delphi 1 19.04.2011 08:36
калькулятор -=Andriushka=- Помощь студентам 1 18.04.2011 22:31
Калькулятор Иринка26 Помощь студентам 11 19.02.2010 17:05