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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2012, 18:36   #1
serhan
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 19
По умолчанию Калькулятор(очень простой) делфи 5

Задача: Ввести два операнди (цілі або дійсні числа), ввести знак арифметичної дії (+, -, *, /) і отримати результат виконання даної арифметичної операції при натисканні на кнопку із написом “Обчислити”. Передбачити захист від помилкового виконання операції ділення на нуль.Також передбачити захист від помилкового введення знаку арифметичної дії.

Написав програмку, але вона не правельно працює. а саме не правельно перевіряє на правельність знака. Коли "+" працює норм, коли інший правельний знак - рахує, але видає "помилку" теж.

Цитата:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Memo1: TMemo;
Panel1: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Memo2: TMemo;
Button5: TButton;
Edit3: TEdit;
Panel2: TPanel;
Label1: TLabel;
Button1: TButton;


procedure Button5Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
var result:real;
a,b:real;
c:integer;
implementation

{$R *.DFM}



procedure TForm1.Button5Click(Sender: TObject);
begin
panel2.caption:='';
c:=0;
if edit3.text='*' then c:=4 ;
if edit3.text='-' then c:=2 ;
if edit3.text='/' then c:=3 ;
if edit3.text='+' then c:=1 else Panel2.caption:=('Помилка');
a:=strtofloat(edit1.Text);
b:=strtofloat(edit2.Text);
case c of
1: begin
result:=a+b;
memo1.Lines.Add(edit1.Text+' + '+edit2.Text+' = '+floattostr(result));
edit1.Clear;
edit2.Clear;
end;
2: begin
result:=a-b;
memo1.Lines.Add(edit1.Text+' - '+edit2.Text+' = '+floattostr(result));
edit1.Clear;
edit2.Clear;
end;
3: begin
if b=0 then memo1.Lines.Add('Помилка')
else
begin
result:=a/b;
memo1.Lines.Add(edit1.Text+' / '+edit2.Text+' = '+floattostr(result)); end;
edit1.Clear;
edit2.Clear;
end;
4: begin
result:=a*b;
memo1.Lines.Add(edit1.Text+' * '+edit2.Text+' = '+floattostr(result));
edit1.Clear;
edit2.Clear;
end;
end;


end;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit3.Clear;
panel2.caption:='';
end;

end.

Последний раз редактировалось serhan; 06.02.2012 в 19:00.
serhan вне форума Ответить с цитированием
Старый 06.02.2012, 19:26   #2
serhan
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 19
По умолчанию

Переписал по проще) но ошибка та самая...
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Panel1: TPanel;
    Panel2: TPanel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,b,c:extended;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
if edit3.text='+' then   Panel2.caption:=(FloatToStr(a+b)) ;
if edit3.text='-' then   Panel2.caption:=(FloatToStr(a-b)) ;
if edit3.text='*' then   Panel2.caption:=(FloatToStr(a*b)) ;
if edit3.text='/' then   Panel2.caption:=(FloatToStr(a/b)) else Panel2.caption:=('Помилка');

end;

end.
serhan вне форума Ответить с цитированием
Старый 06.02.2012, 20:17   #3
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Panel1: TPanel;
    Panel2: TPanel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,b,c:extended;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
if (edit3.text[1] in ['+','-','/','*'])and(length(edit3.Text)=1) then
  begin
    if edit3.text='+' then   Panel2.caption:=(FloatToStr(a+b)) ;
    if edit3.text='-' then   Panel2.caption:=(FloatToStr(a-b)) ;
    if edit3.text='*' then   Panel2.caption:=(FloatToStr(a*b)) ;
    if edit3.text='/' then   Panel2.caption:=(FloatToStr(a/b)) 
  end
else Panel2.caption:=('Помилка');  //Прям "Печалька" :D Это какой язык, кстати?

end;

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

Последний раз редактировалось whatever; 06.02.2012 в 20:19.
whatever вне форума Ответить с цитированием
Старый 06.02.2012, 20:27   #4
serhan
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 19
По умолчанию

Спасибо, я обманул другим путем.

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Panel1: TPanel;
    Panel2: TPanel;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,b:extended; c:integer;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
c:=0;
if edit3.text='+' then   c:=1;
if edit3.text='-' then   c:=2;
if edit3.text='*' then   c:=3;
if edit3.text='/' then   c:=4;
case c of
1:Panel2.caption:=(FloatToStr(a+b));
2:Panel2.caption:=(FloatToStr(a-b)) ;
3:Panel2.caption:=(FloatToStr(a*b)) ;
4:Panel2.caption:=(FloatToStr(a/b)) ;
else Panel2.caption:=('Помилка') ;
end;
end;
end.
Объясни пожалуйста строку своего когда:
Код:
if (edit3.text[1] in ['+','-','/','*'])and(length(edit3.Text)=1) then
Язык Delphi 5.0
serhan вне форума Ответить с цитированием
Старый 06.02.2012, 20:37   #5
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Тоже вариант.
Код:
if (edit3.text[1] in ['+','-','/','*'])and(length(edit3.Text)=1) then
(edit3.text[1] in ['+','-','/','*'])
edit3.text[1] - первый символ из edit3.text (а если выполняется второе условие, то он и единственный). Далее проверяем, равен ли этот символ +, -, * или /. Если чему-то равен, то возращает true.

(length(edit3.Text)=1)
возвращает true, если в edit3 всего один символ (длинна строки равна 1)
Все тривиальное просто
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
простой калькулятор kostya-boyazhov Общие вопросы C/C++ 2 14.11.2011 10:59
Простой калькулятор Jurek Общие вопросы Delphi 5 12.10.2011 08:12
создать простой калькулятор в Delphi 7 Ruslan007 Помощь студентам 1 11.10.2011 19:00
Простой калькулятор на Prologe konfetka6389 Помощь студентам 0 06.05.2010 13:30
Очень нужна помощь! Нужно найти ошибку в очень простой программе. Lex55555777 Помощь студентам 3 07.12.2008 20:32