Калькулятор на Delphi

 

Здравствуйте! Как я и обещал сегодня я с вами создам простейший калькулятор. Для этого нам понадобиться среда в программирования Borland Delphi, которую вы можете найти в интернете.

 

Создадим универсальный калькулятор на Delphi, который будет считать множество функций. Приступим.

 

Для начала нам нужен 1 Edit. Сразу же очищаем его Text, на событие OnKeyPress пишем следующий код:

 case key of
 '0'..'9',',':; {Запрещаем в поле Edit ввод любых символов, кроме цифр и запятых}
 else key:=#0;end;

 

Дабы обезопаситься от ввода типа:"0,1,2,33" на событие OnChange пишем следующий код

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


Дабы полностью обезопаситься от некорректного ввода, ставим

DragMode: dmAutomatic ; {запрещаем клики мышкой}


После того как у нас получилось неуязвимое поле, пришло время для создания кнопок калькулятора, сначала создадим 16 кнопок (Button): числа от 0 до 9-ти, кнопку для запятой, знака равно, знаков плюс, минус, умножить и поделить.
Сперва стоит обеспечить ввод чисел, для этого на событие OnClick чисел от 0..9 и запятой пишем следующее:

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

 

Повторим процедуру для всех остальных чисел и знака запятой. На событие OnClick числа "0" стоит дописать ещё одну строку:

if edit1.Text='00' then edit1.Text:='0';      {позволяет ввод лишь одного нуля вначале}


Дальше нам нужно запоминать числа которые подаются на ввод и выводить их, создадим три глобальные переменные и одну переменную типа char для запоминания математических действий:

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

 

Сначала нам нужно считать первое число, на знаки "+","-","*","/" пишем следующий код:

 if edit1.Text<>'' then a:=strtofloat(edit1.Text); {Проверяем введено ли число в поле}
 c:='+'; {Сохраняем математическое действие}
 edit1.Clear;

 

Стоить повторить и для остальных действий.
Далее нам нужно считать вторую переменную, по этому на событие OnClick знака равно, пишем:

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;
 '/':d:=a/b;end;
 edit1.Text:=floattostr(d);
 end;

 

Вуаля, у нас получился простейший калькулятор, но я ведь обещал вам совсем другой, по-этому создадим дополнительно 24 кнопки (Button) для разных функций;
Одну из этих кнопок называем:"Pi", на событие OnClick этой кнопки пишем:

 procedure TForm1.Button17Click(Sender: TObject);
 begin
 edit1.Text:=floattostr(pi); {Вписываем в поле число Пи}
 end;

 

Далее переименовываем Button`ы на "cos","sin","arctg", на событие OnClick пишем:

 procedure TForm1.Button18Click(Sender: TObject);
 begin
 edit1.Text:=floattostr(cos(strtofloat(Edit1.Text))); {В поле выводим косинус введенного числа}
 end;

 

Проделать тоже самое с остальными функциями.
Дальше переименовываем две кнопки для вычисления sqr и sqrt пишем:

procedure TForm1.Button21Click(Sender: TObject);
 begin
 edit1.Text:=floattostr(sqrt(strtofloat(Edit1.Text)));
 end;

 

Повторить и для "sqr".
Вы наверное спросите, а как-же насчёт ввода отрицательных чисел? Для этого переименовываем ещё одну кнопку в "+/-" на событие OnClick пишем:

 procedure TForm1.Button23Click(Sender: TObject);
 begin
 edit1.Text:=floattostr(-(strtofloat(Edit1.Text)));
 end;

 

Далее вернемся немного назад и напишем ещё пару функций для действий с двумя числами в событии OnClick знака равно, введем две локальные переменные, например: q и w;

Теперь переименуем 6 кнопок в "mod","div","or","xor","and","x^y";
Что написать на событие OnClick этих кнопок можно прочесть выше.
Теперь пришло считать второе число и вывести результат. О том как это сделать, написано выше.
В итоге текст на событии OnClick знака равно будет иметь такой вид:

 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;
 'm':d:=round(a) mod round(b);
 'd':d:=round(a) div round(b);
 'o':d:=round(a) or round(b);
 'x':d:=round(a) xor round(b);
 'a':d:=round(a) and round(b);
 '^':d:=exp(b*ln(a));
 end;
 edit1.Text:=floattostr(d);
 end;

 

Далее переименуем кнопку в "х!", на событие OnClick пишем:

 procedure TForm1.Button32Click(Sender: TObject);
 var
 x:extended;
 i:integer;
 begin
 if edit1.Text<>'' then begin x:=strtofloat(edit1.Text);
 for i:=1 to round(x)-1 do
 x:=x*i;
 edit1.Text:=floattostr(x);end;
 end;

 

Переименуем ещё две кнопки в "x^2" и "x^3" на событие OnClick кнопки "x^2" пишем:

 procedure TForm1.Button35Click(Sender: TObject);
 begin
 if edit1.Text<>'' then
 edit1.Text:=
 floattostr(strtofloat(edit1.Text)*strtofloat(edit1.Text));
 end;

 

Для кнопки "x^3" - аналогично.
Переименуем ещё одну кнопку в exp (Експонента), на OnClick Этой кнопки пишем:

 procedure TForm1.Button40Click(Sender: TObject);
 begin
 if edit1.Text<>'' then
 edit1.Text:=floattostr(exp(strtofloat(edit1.Text)));
 end;

 

Переименуем следующую кнопку в "Int" (Возвращение целой части), пишем:

 procedure TForm1.Button30Click(Sender: TObject);
 begin
 if edit1.Text<>'' then
 edit1.Text:=floattostr(trunc(strtofloat(edit1.Text)));
 end;

 

Следующая кнопка "not" (Возвращение противоположного числа + (-1) ). Пишем:

 procedure TForm1.Button29Click(Sender: TObject);
 begin
 if edit1.Text<>'' then
 edit1.Text:=floattostr(-(trunc(strtofloat(edit1.Text))+1));
 end;

 

Следующей будет кнопка "ln". Пишем:

 procedure TForm1.Button31Click(Sender: TObject);
 begin
 if edit1.Text<>'' then
 if strtofloat(edit1.Text)>0 then
 edit1.Text:=floattostr(ln(strtofloat(edit1.Text)));
 end;

 

Следующая кнопка "1/х". Пишем аналогично предыдущему.
Следующая - кнопка Backspace. Пишем:

 procedure TForm1.Button36Click(Sender: TObject);
 var
 s:string;
 begin
 s:=edit1.Text;
 delete(s,length(s),1);
 edit1.Text:=s;
 end;

 

Осталось две кнопки, переименуем в "С" и "Close"
В первой пишем:

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

 

А во второй:

 procedure TForm1.Button37Click(Sender: TObject);
 begin
 close();
 end;

 

На этом все. Желаю успехов.

« Вернуться назад

Просмотров: 19890 | Дата: 23.10.2012



Яндекс.Метрика

наверх