1 Востаннє редагувалося Torbins (18.02.2014 07:22:37)

Тема: Пишу калькулятор у Delphi

Вітаю!
Пишу калькулятор. В Delphi.
Ось скрін:
http://f6.s.сайт-злодій/18qb6yzT.png
Кнопки 0..9, -(знак, а не дію) , "," прописав.
Тепер взявсь прописувати "+".
Ідея в мене така: є дві зміні - rez, act_chislo. Коли "+" натискається знов і знов то вони відповідно змінюються -  в rez додається нове число і act_chislo присвоюється поточне значення Edit1.Text.
Але результат виводиться в Edit1.Text, при натисненні "=".
Питання як зробити, щоб змінну rez можна було використовувати в декількох процедурах-обробниках подій?
Ось шматки коду:
кнопка "+"-

procedure TForm1.Button15Click(Sender: TObject; var rez:real); // кнопка "+"
var
  p: boolean;
   act_chislo: real;
begin
  if length(Edit1.Text)=0 then
    begin
      p:= false;
      rez:= 0;
      act_chislo:= 0;
    end
  else
    p:= true;
  if p=false then
    ShowMessage('Нічого не введено!')
  else
    act_chislo:= StrToFloat(Edit1.Text);
    rez:= rez+act_chislo;
    Edit1.Text:= '';
end;

кнопка "="-

procedure TForm1.Button18Click(Sender: TObject; var rez: real);  // кнопка "="
begin
  Edit1.Text:= FloatToStr(rez);
end;

була версія така -

procedure TForm1.FormCreate(Sender: TObject; var rez: real );
var
  rez: real;
begin
  rez:= 0;
end;

Підскажіть, будь ласка.
Що зробити, про що почитати...

2

Re: Пишу калькулятор у Delphi

Оголосити змінну не в процедурі, а вище.

Подякували: A.N.Onim1

3

Re: Пишу калькулятор у Delphi

Всі обробники належать до однієї форми - от у формі і треба проголошувати спільні змінні, десь так:

type
  TForm1 = class(TForm)
  ...
    rez:real;
  private
    { Private declarations }
    rez:real;{або тут}
  public
    { Public declarations }
    rez:real;{або тут}
  end;

Де саме - для такого калькулятора несуттєво.

Подякували: Torbins, A.N.Onim2

4

Re: Пишу калькулятор у Delphi

Не могли б Ви пояснити, яка різниця в тому, що я напишу після

  • type

  • private

  • public

І чи можливо прописати цю змінну (rez) після:

var
  Form1: TForm1;
  Ось тут;

?

5 Востаннє редагувалося koala (08.01.2014 22:54:08)

Re: Пишу калькулятор у Delphi

A.N.Onim написав:

Не могли б Ви пояснити, яка різниця в тому, що я напишу після

  • type

Тоді це буде визначення типу, а не змінної. Причому некоректне

A.N.Onim написав:
  • private

  • public

Ще раз, для вас в цій ситуації - різниці жодної. Це визначає, чи можуть інші класи звертатися до цього члена класу (public - так, private - ні). А оскільки клас у вас один (ваша форма), то й немає значення.

A.N.Onim написав:

І чи можливо прописати цю змінну (rez) після:

var
  Form1: TForm1;
  Ось тут;

?

Так, але це вважається дурним смаком.

Подякували: A.N.Onim1

6

Re: Пишу калькулятор у Delphi

Дякую.

7

Re: Пишу калькулятор у Delphi

koala написав:
A.N.Onim написав:

І чи можливо прописати цю змінну (rez) після:

var
  Form1: TForm1;
  Ось тут;

?

Так, але це вважається дурним смаком.

Це не просто дурний смак, це буде помилка, якщо створити два екземпляри цієї форми одночасно. Спробуйте зробити формі Visible = True, а потім додайте у файл проекту другий "Application.CreateForm(TForm1, Form1);"

A.N.Onim
Якщо вже у вас виникли такі запитання, то можете спробувати оце почитати:
Объектно-ориентированное программирование (ООП). Часть I
Объектно-ориентированное программирование (ООП). Часть II

Подякували: A.N.Onim, ADR2

8

Re: Пишу калькулятор у Delphi

Дякую.

9 Востаннє редагувалося dmyutro (17.02.2014 21:02:03)

Re: Пишу калькулятор у Delphi

Щойно почав вивчати Pascal.  І на основі вивчених початкових знань хочу попробувати написати Програму для розвязування найпростіших виразів: a+b=x, a-b=x. Після багатьох невдалих спроб ось що вийшло

program Calculator;
var a,b,x:real;
begin
writeln('ця програма розв''язує вирази а+b=х а-b=х');
write('a=');
readln(a);
writeln('Виберіть знак додавання чи віднімання ');
write('');
readln();

Як мені зробити так, щоб якось вставити знак плюс чи мінус?

10

Re: Пишу калькулятор у Delphi

Треба ввести додаткову змінну, наприклад sign, в яка має містити символ який ввів користувач. Далі, за доп. умовного оператору if, перевіряти чому дорівнює змінна sign, якщо "+", то виконується один код, якщо "-", то інший.
Має бути щось таке:

if sign = "-" then
    begin
        writeln('-')
    end;
else
    if sign = "+" then
        begin
            writeln('-')
         end;
else 
    begin
        writeln('else')
    end;
Подякували: dmyutro1

11

Re: Пишу калькулятор у Delphi

Будь ласка, створіть нову тему з нового питання.

Подякували: Torbins1

12 Востаннє редагувалося A.N.Onim (20.02.2014 18:49:37)

Re: Пишу калькулятор у Delphi

Вітаю!
Є процедура:

procedure Obchislennia(var deistvie:byte; kilk:integer; rez: real; act_chislo:real);
begin
  case deistvie of
    1:
      begin
        if kilk<>0 then
          begin
            rez:= rez+act_chislo;
            act_chislo:= StrToFloat(Edit1.Text);
          end;
      end;
    2:
      begin
        if kilk<>0 then
          begin
            rez:= rez-act_chislo;
            act_chislo:= StrToFloat(Edit1.Text);
          end;
      end;
    3:
      begin
        if kilk<>0 then
          begin
            rez:= rez*act_chislo;
            act_chislo:= StrToFloat(Edit1.Text);
          end;
      end;
    4:
      begin
        if kilk<>0 then
          begin
            rez:= rez/act_chislo;
            act_chislo:= StrToFloat(Edit1.Text);
          end;
      end;
end;

Пише помилку компіляції:

Undeclared identifier: 'Edit1'

Edit1 - поле редагування калькулятора.
Чому вона не бачить поля редагування та як зробити, щоб бачила?

13 Востаннє редагувалося Chemist-i (20.02.2014 20:33:54)

Re: Пишу калькулятор у Delphi

A.N.Onim написав:

Вітаю!
Є процедура:

procedure Obchislennia(var deistvie:byte; kilk:integer; rez: real; act_chislo:real);
begin
  case deistvie of
    1:
      begin
        if kilk<>0 then
          begin
            rez:= rez+act_chislo;
            act_chislo:= StrToFloat(Edit1.Text);
          end;
      end;
    2:
      begin
        if kilk<>0 then
          begin
            rez:= rez-act_chislo;
            act_chislo:= StrToFloat(Edit1.Text);
          end;
      end;
    3:
      begin
        if kilk<>0 then
          begin
            rez:= rez*act_chislo;
            act_chislo:= StrToFloat(Edit1.Text);
          end;
      end;
    4:
      begin
        if kilk<>0 then
          begin
            rez:= rez/act_chislo;
            act_chislo:= StrToFloat(Edit1.Text);
          end;
      end;
end;

Пише помилку компіляції:

Undeclared identifier: 'Edit1'

Edit1 - поле редагування калькулятора.
Чому вона не бачить поля редагування та як зробити, щоб бачила?

Ваша процедура не є членом класу, треба або описати її отак

procedure TForm1.Obchislennia(var deistvie:byte; kilk:integer; rez: real; act_chislo:real);

або додати до кожного Едіта, якого звертаєтесь, до якого класу він належить

...
act_chislo:= StrToFloat(Form1.Edit1.Text);
...

П.С. може в вас не Form1, то так за замовченням, коротше Вашої форми.

Подякували: A.N.Onim1

14

Re: Пишу калькулятор у Delphi

Дякую.

15

Re: Пишу калькулятор у Delphi

Все одно видає помилку:

 Identifier redeclared: 'Form1'

16 Востаннє редагувалося Chemist-i (20.02.2014 19:28:48)

Re: Пишу калькулятор у Delphi

Як та форма називається на якій едіти росташовані? От її і треба писати (із властивості форми .name а не .caption, це важливо)

17

Re: Пишу калькулятор у Delphi

Form1 - вона одна для всього калькулятора.

18 Востаннє редагувалося Chemist-i (20.02.2014 19:36:13)

Re: Пишу калькулятор у Delphi

Можна весь код подивитись?
П.С.

Десь знайшов в інеті

Identifier redeclared <Имя>.<Имя> описано повторно, но в пределах блока имя можно описать лишь раз. Проверьте, не обозначена ли локальная переменная тем же именем, что и формальный параметр блока.

Copied from: http://articles.org.ru/cn/showdetail.php?cid=7279

Іще дещо, де саме, в якому рядку виникає виключна ситуація "Identifier redeclared"

19

Re: Пишу калькулятор у Delphi

Chemist-i написав:

Іще дещо, де саме, в якому рядку виникає виключна ситуація "Identifier redeclared"

procedure Form1.Obchislennia(var deistvie:byte; kilk:integer; rez: real; act_chislo:real);

20 Востаннє редагувалося A.N.Onim (20.02.2014 20:11:23)

Re: Пишу калькулятор у Delphi

Ось код та помилки. Але місцями не вистачає коментарів.

Post's attachments

Code.txt 16.95 kb, 625 downloads since 2014-02-20