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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2012, 17:54   #1
rigiy
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 12
Вопрос [Delphi] Калькулятор. Не могу понять, в чем ошибка.

Код может выглядеть костыльно, я новичок. Могут быть пустые места, и не использованные элементы - еще не дописано.
Не работает кнопка '=', она же 'Buteq'.
В edit2.text отображается содержимое 'op', отображается правильно.
Но при нажатии на '=' получаю ноль.
Вот код:
Код:
unit Unit1;

interface

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

type
  TForm3 = class(TForm)
    But7: TButton;
    But4: TButton;
    But1: TButton;
    But0: TButton;
    But8: TButton;
    But5: TButton;
    But2: TButton;
    Butdot: TButton;
    But9: TButton;
    But6: TButton;
    But3: TButton;
    Buteq: TButton;
    Butmult: TButton;
    Butdiv: TButton;
    Butplus: TButton;
    Butminus: TButton;
    Butsqrt: TButton;
    Button1: TButton;
    Butdel: TButton;
    Edit1: TEdit;
    Butdivx: TButton;
    Butsquare: TButton;
    Button4: TButton;
    Butxy: TButton;
    Edit2: TEdit;
    procedure But1Click(Sender: TObject);
    procedure But2Click(Sender: TObject);
    procedure But3Click(Sender: TObject);
    procedure But0Click(Sender: TObject);
    procedure But4Click(Sender: TObject);
    procedure But5Click(Sender: TObject);
    procedure But6Click(Sender: TObject);
    procedure But7Click(Sender: TObject);
    procedure But8Click(Sender: TObject);
    procedure But9Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ButplusClick(Sender: TObject);
    procedure ButminusClick(Sender: TObject);
    procedure ButdivClick(Sender: TObject);
    procedure ButmultClick(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure ButsquareClick(Sender: TObject);
    procedure ButdivxClick(Sender: TObject);
    procedure ButsqrtClick(Sender: TObject);
    procedure ButeqClick(Sender: TObject);
    procedure operation(op:char);
    procedure dig(dig:integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
  op:char;
  i:integer;
  dig1,dig2,dig3:real;

implementation

{$R *.dfm}

procedure TForm3.But0Click(Sender: TObject);
begin
dig(0);
end;

procedure TForm3.But1Click(Sender: TObject);
begin
dig(1);
end;

procedure TForm3.But2Click(Sender: TObject);
begin
dig(2);
end;

procedure TForm3.But3Click(Sender: TObject);
begin
dig(3);
end;

procedure TForm3.But4Click(Sender: TObject);
begin
dig(4);
end;

procedure TForm3.But5Click(Sender: TObject);
begin
dig(5);
end;

procedure TForm3.But6Click(Sender: TObject);
begin
dig(6);
end;

procedure TForm3.But7Click(Sender: TObject);
begin
dig(7);
end;

procedure TForm3.But8Click(Sender: TObject);
begin
dig(8);
end;

procedure TForm3.But9Click(Sender: TObject);
begin
dig(9);
end;

procedure TForm3.ButdivClick(Sender: TObject);
begin
operation('/');
end;

procedure TForm3.ButdivxClick(Sender: TObject);
begin
operation('\');
end;

procedure TForm3.ButeqClick(Sender: TObject);
begin
 if edit1.Text<>'' then  dig2:=strtofloat(edit1.text);
 if op='+' then dig3 := dig1 + dig2;
 if op='-' then dig3:=dig1 - dig2;
 if op='*' then dig3:=dig1 * dig2;
 if op='/' then dig3:=dig1 / dig2;

{*    case op of
    '+':dig3 := dig1 + dig2;
    '-':dig3:=dig1-dig2;
    '*':dig3:=dig1*dig2;
    '/':dig3:=dig1/dig2;
    end ;
*}
Edit1.Text:=FloatToStr(dig3);
end;

procedure TForm3.ButminusClick(Sender: TObject);
begin
operation('-');
end;

procedure TForm3.ButmultClick(Sender: TObject);
begin
operation('*');
end;

procedure TForm3.ButplusClick(Sender: TObject);
begin
operation('+');
end;

procedure TForm3.ButsqrtClick(Sender: TObject);
begin
operation('s');
end;

procedure TForm3.ButsquareClick(Sender: TObject);
begin
operation('^');
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
Edit1.Clear;
end;

procedure TForm3.Button4Click(Sender: TObject);
begin
operation('_');
end;

procedure TForm3.dig(dig: integer);
begin
    edit1.Text:=edit1.Text+IntToStr(dig);
end;

procedure TForm3.operation(op: char);
begin
if Edit1.Text<>'' then
dig1:=StrToFloat(Edit1.Text);
op := op;
edit1.Clear;
edit2.Text:=op;
end;
end.
Надеюсь на вашу помощь.
rigiy вне форума Ответить с цитированием
Старый 29.05.2012, 17:56   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

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

Последний раз редактировалось Mad_Cat; 29.05.2012 в 18:01. Причина: в этом причина) нашел))))
Mad_Cat вне форума Ответить с цитированием
Старый 29.05.2012, 18:00   #3
rigiy
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
а где что то присваивается dig2 ?
строка 136, тут: if edit1.Text<>'' then dig2:=strtofloat(edit1.text);

Цитата:
и код обалденный) его весь можно свести в 3 процедуры
Я был бы премного благодарен, если бы вы объяснили, как?
rigiy вне форума Ответить с цитированием
Старый 29.05.2012, 18:03   #4
rigiy
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 12
По умолчанию

Как же тогда передать переменную из одной процедуры в другую?
rigiy вне форума Ответить с цитированием
Старый 29.05.2012, 18:03   #5
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Я был бы премного благодарен, если бы вы объяснили, как?
например
Код:
procedure TForm3.ButminusClick(Sender: TObject);
var buf:string;
begin
buf:=(sender as Tbutton).caption;
operation(buf[1]);
end;
назначьте ее всем кнопкам с действиями

Цитата:
Как же тогда передать переменную из одной процедуры в другую?
Код:
 procedure operation(с_op:char);
и далее
Код:
procedure TForm3.operation(С_op: char);
begin
if Edit1.Text<>'' then
dig1:=StrToFloat(Edit1.Text);
op := С_op;
edit1.Clear;
edit2.Text:=op;
end;
еще замена 10 процедур 1
Код:
procedure TForm3.But4Click(Sender: TObject);
var buf:string;
begin
buf:=(sender as Tbutton).caption;
dig(strtoint(buf));
end;
назначить кнопкам с цифрами от 0..9
и процедур стало 5)
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 29.05.2012 в 18:07.
Mad_Cat вне форума Ответить с цитированием
Старый 29.05.2012, 18:17   #6
rigiy
Пользователь
 
Регистрация: 09.12.2011
Сообщений: 12
По умолчанию

Спасибо за помощь!
rigiy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу понять в чем ошибка 6002theJuicy Visual C++ 4 23.05.2012 15:19
в чем ошибка? не могу понять... lexflax C++ Builder 1 28.01.2012 15:35
Си. Не могу понять в чем ошибка Gerbera Помощь студентам 2 12.07.2011 19:11
Не могу понять в чем ошибка.... Blonde Помощь студентам 0 21.05.2011 14:19
Не могу понять, в чем ошибка FlashProStar Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 01.12.2010 12:20