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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2013, 21:00   #1
dariya.95
Пользователь
 
Регистрация: 19.03.2013
Сообщений: 37
По умолчанию Создание калькулятора в среде Delphi.

Добрый вечер!Помогите,пожалуйста,найти ошибку в программе!Кнопки "+","-" и "=" не работают и запятая работает как-то с перебоями. Все цифры написаны как и цифра 1.
Код:
var accum:real;
    oper:integer;
    f:integer;

procedure TForm1.Button1Click(Sender: TObject);//цифра 1
  var Btn:TButton;
  ch:Char;
  begin
    Btn:=Sender as TButton;
    ch:=chr(48+Btn.Tag);
    case Btn.Tag of
    1..9:
    if f=0 then begin
      Edit1.Text:=ch;
      f:=1;
    end
    else Edit1.Text:=Edit1.Text+ch;
    0:
    if Edit1.Text<>'0' then
    Edit1.Text:=Edit1.Text+'0';
    end;
end;

procedure TForm1.Button8Click(Sender: TObject);//запятая
begin
  if Edit1.Text='0' then
  begin
    Edit1.Text:='0,';
    f:=1;
  end;
  if Pos(',',Edit1.Text)=0 then Edit1.Text:=Edit1.Text+',';
end;

procedure DoOper;
var numb:real;
begin
  numb:=StrToFloat(Form1.Edit1.Text);
  case oper of 0:accum:=numb;
  1:accum:=accum+numb;
  2:accum:=accum-numb;
  end;
  Form1.Edit1.Text:=FloatToStr(accum);
end;

procedure TForm1.Button7Click(Sender: TObject);//плюс
var Btn:TButton;
begin
  Btn:=Sender as TButton;
  if f=0 then oper:=Btn.Tag
  else begin
    DoOper;
    oper:=Btn.Tag;
    f:=0;
  end;
end;

procedure TForm1.Button14Click(Sender: TObject);//минус
var Btn:TButton;
begin
  Btn:=Sender as TButton;
  if f=0 then oper:=Btn.Tag
  else begin
    DoOper;
    oper:=Btn.Tag;
    f:=0;
  end;

end;

procedure TForm1.Button13Click(Sender: TObject);//равно
var Btn:TButton;
begin
  Btn:=Sender as TButton;
  if f=0 then oper:=Btn.Tag
  else begin
    DoOper;
    oper:=Btn.Tag;
    f:=0;
  end;
end;

procedure TForm1.Button12Click(Sender: TObject);//очистка
begin
  Edit1.Text:='0';
  accum:=0;
  oper:=1;
  f:=0;
end;

procedure TForm1.Edit1Change(Sender: TObject);//поле ввода цифр
var Key:char;
begin
  oper:=0;
end;

end.

Последний раз редактировалось Stilet; 23.06.2013 в 22:32.
dariya.95 вне форума Ответить с цитированием
Старый 23.06.2013, 22:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Отладчиком понятное дело не проходила?
Код:
var accum:real;
    oper:integer;
    f:integer;

procedure TForm1.Button1Click(Sender: TObject);//цифровые
  begin
      Edit1.Text:=Edit1.Text+TButton(Sender).Caption;
end;

procedure DoOper;
var numb:real;
begin
  numb:=StrToFloat(StringReplace(Form1.Edit1.Text,',','.',[]));
  case oper of 
  0:begin Form1.Edit1.Text:=FloatToStr(accum); end;
  1:accum:=accum+numb;
  2:accum:=accum-numb;
  end;
  
end;

procedure TForm1.Button7Click(Sender: TObject);//плюс
begin
    DoOper(TButton(sender).tag);
end;

procedure TForm1.Button14Click(Sender: TObject);//минус
begin
    DoOper(TButton(sender).tag);
end;

procedure TForm1.Button13Click(Sender: TObject);//равно
begin
    DoOper(TButton(sender).tag);
end;

procedure TForm1.Button12Click(Sender: TObject);//очистка
begin
  Edit1.Text:='0';
  accum:=0;
  oper:=1;
  f:=0;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject);//поле ввода цифр
begin
  if not (key in ['0'..'9',',','.']) then key:=#0;
end;

end.
Во-первых: Добавь KeyPress для Эдита. Чтоб отсекать нецифры.
Во-вторых: StringReplace на всякий случай позволит заменять для вещественных на точку, чтоб не была путаница с разделителями при использовании в выражении результата.
В-третьих: Цифровые кнопки опиши как у меня, с учетом что в их Caption будут стоять соответствующие цифры.
Ну и мусора у тебя в обработчиках кликов кнопки много.
I'm learning to live...

Последний раз редактировалось Stilet; 23.06.2013 в 22:44.
Stilet вне форума Ответить с цитированием
Старый 24.06.2013, 05:46   #3
dariya.95
Пользователь
 
Регистрация: 19.03.2013
Сообщений: 37
По умолчанию

Спасибо большое!
dariya.95 вне форума Ответить с цитированием
Старый 24.06.2013, 10:55   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
StringReplace на всякий случай позволит заменять для вещественных на точку
я б все-таки на DecimalSeparator менял
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание Activex компонента в среде Delphi mosxe Фриланс 2 26.04.2013 00:19
Delphi 7, создание функционального калькулятора с использованием класса ulala Помощь студентам 16 27.03.2013 23:00
Создание калькулятора exelim Общие вопросы C/C++ 6 18.11.2011 12:33
создание калькулятора SpoteG Помощь студентам 3 17.06.2010 06:03