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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2012, 19:00   #1
Хитман
Пользователь
 
Регистрация: 08.12.2010
Сообщений: 13
По умолчанию Кнопка +/- в калькуляторе

Сделал простой калькулятор, но есть один вопрос. При нажатии на кнопку "+/-" сразу выскакивает ошибка. Как сделать чтобы при нажатии в начале нечего не происходило?
Код:
procedure TForm1.Button18Click(Sender: TObject);
begin
 edit1.Text:=floattostr(-(strtofloat(Edit1.Text)));
end;
Хитман вне форума Ответить с цитированием
Старый 09.10.2012, 20:14   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

ошибка выскакивает если в поле ввода(Edit1) поле нет числа, значит прежде чем вычислять невредно проверить, а есть там число.
Пустая строка '' по мнению Delphi числом не является.
Другой путь не допускать пустого поля ввода. Заполнять его сразу и безоговорочно '0'
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 09.10.2012, 20:24   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
edit1.Text:=floattostr(-(strtofloat(Edit1.Text)));
это что за выкрутасы? Что должны делать "+/-"?

Последний раз редактировалось eval; 09.10.2012 в 20:27.
eval вне форума Ответить с цитированием
Старый 09.10.2012, 20:35   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm1.Button18Click(Sender: TObject);
begin
 with edit1 do begin
  if length(text)>0 then text:='-' else 
   if text[1]<>'-' then text:='-'+text else text:=copy(text,2,length(text));
 end;
end;
Подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2012, 20:37   #5
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Код:
Edit1.Text:=IntToStr(StrToInt(Edit1.Text)-StrToInt(Edit1.Text)-StrToInt(Edit1.Text));
писал прямо здесь. за работоспособность не отвечаю.
hon вне форума Ответить с цитированием
Старый 09.10.2012, 20:47   #6
Хитман
Пользователь
 
Регистрация: 08.12.2010
Сообщений: 13
По умолчанию

Нечего непомагает
Ошибка
Project raised excepton class EConvertError with message" is not valid integer value'. Process stopped.

Все программа:

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Edit1: TEdit;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Button18Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,b,d:extended; 
 c:char;
 i,n: integer;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
 begin 
 n:=pos(',',edit1.text); {ищем первую запятую в поле}
 for i:=n+1 to length(edit1.text) do 
 if edit1.text[i]=',' then edit1.clear; {Если находится ещё одна запятая после первой - очищаем поле}
 end;

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

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

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

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

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

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

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

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

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

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

procedure TForm1.Button11Click(Sender: TObject);
begin
 edit1.Text:=edit1.Text+'0';
 if edit1.Text='00' then edit1.Text:='0'; {позволяет ввод лишь одного нуля вначале}
end;

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

procedure TForm1.Button14Click(Sender: TObject);
begin
  if edit1.Text<>'' then a:=strtofloat(edit1.Text); {Проверка введено ли число}
 c:='+'; {Математическое действие}
 edit1.Clear;
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
 if edit1.Text<>'' then a:=strtofloat(edit1.Text);
 c:='/';
 edit1.Clear;
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
 if edit1.Text<>'' then a:=strtofloat(edit1.Text);
 c:='-';
 edit1.Clear;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
if edit1.Text<>'' then a:=strtofloat(edit1.Text);
 c:='*';
 edit1.Clear;
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
    if edit1.Text<>'' then b:=strtofloat(edit1.Text);
 case c of 
 '+':d:=a+b; 
 '-':d:=a*b; 
 '*':d:=a*b; 
 '/':begin 
 if edit1.Text<>'' then b:=strtofloat(edit1.Text); 
 if b=0 then showmessage('На ноль делить нельзя') else 
 d:=a/b;end;
 end; 
 edit1.Text:=floattostr(d); 
 end;
procedure TForm1.Button18Click(Sender: TObject);
begin
 edit1.Text:=floattostr(-(strtofloat(Edit1.Text)));
end;

end.
Хитман вне форума Ответить с цитированием
Старый 09.10.2012, 21:49   #7
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Не код, а жуть! Кто-нибуть вас учил давать названия кнопкам? Например выберете вашу Button17, которая похоже отвечает за C (сброс) и в свойстве Name кнопки напишите ButtonC, и в коде станет вместо Button17 ButtonC. Без формы ничего не пойму, поэтому улучшите читабельность кода, а потом выложите новый код.
hon вне форума Ответить с цитированием
Старый 09.10.2012, 21:58   #8
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

мдя уж
v.1.
Код:
procedure TForm1.Button18Click(Sender: TObject);
var buf:string;
begin
 buf:=edit1.Text;
if buf[1] = '-' then delete(buf,1,1)
else buf:='-'+buf;
edit1,text:=buf;
end;
v.2.
Код:
procedure TForm1.Button18Click(Sender: TObject);
var k:double;
begin 
If TryStrToFloat(edit1.text,k) then edit1.text:=FloatTostr(-k);
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 09.10.2012, 23:29   #9
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
procedure TForm1.Button18Click(Sender: TObject);
begin
 with edit1 do begin
  if length(text)>0 then text:='-' else 
   if text[1]<>'-' then text:='-'+text else text:=copy(text,2,length(text));
 end;
end;
Подходит?
Извиняюсь, но мне становится жутко глядя на этот код. Обрабатывать числа используя строки....
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 10.10.2012, 01:06   #10
Хитман
Пользователь
 
Регистрация: 08.12.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
мдя уж
v.1.
Код:
procedure TForm1.Button18Click(Sender: TObject);
var buf:string;
begin
 buf:=edit1.Text;
if buf[1] = '-' then delete(buf,1,1)
else buf:='-'+buf;
edit1,text:=buf;
end;
v.2.
Код:
procedure TForm1.Button18Click(Sender: TObject);
var k:double;
begin 
If TryStrToFloat(edit1.text,k) then edit1.text:=FloatTostr(-k);
end;
Большое спасибо, второй вариант подошел.
Хитман вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ввод в калькуляторе katerina17171 Помощь студентам 0 25.10.2011 11:31
ошибки в калькуляторе -=Andriushka=- Помощь студентам 3 05.03.2011 18:37
проверка в калькуляторе 4UDaK Помощь студентам 2 27.04.2010 19:13
mod в калькуляторе pinch000 Общие вопросы C/C++ 1 08.11.2009 02:44
Формат числа в калькуляторе Mint86 Microsoft Office Excel 8 25.07.2008 11:49