5 января 2013 г.

Напишем банальный калькулятор

    Обычный калькулятор на Паскале.

Калькулятор как калькулятор,правда не смейтесь с кода я писал его довольно давно на заре начинания в азах программирования сейчас бы я уж точно так не написал бы )))

Для начинающих думаю сгодится хотя бы даже как пример как не стоит писать калькулятор.
Код ниже а не понятные места возможно я разберу в следующей статье






unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton10: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton12: TSpeedButton;
SpeedButton13: TSpeedButton;
SpeedButton14: TSpeedButton;
SpeedButton15: TSpeedButton;
SpeedButton16: TSpeedButton;
SpeedButton17: TSpeedButton;
SpeedButton18: TSpeedButton;
SpeedButton19: TSpeedButton;
SpeedButton20: TSpeedButton;
SpeedButton21: TSpeedButton;
SpeedButton22: TSpeedButton;
SpeedButton23: TSpeedButton;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
procedure SpeedButton8Click(Sender: TObject);
procedure SpeedButton16Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton7Click(Sender: TObject);
procedure SpeedButton10Click(Sender: TObject);
procedure SpeedButton14Click(Sender: TObject);
procedure SpeedButton15Click(Sender: TObject);
procedure SpeedButton12Click(Sender: TObject);
procedure SpeedButton9Click(Sender: TObject);
procedure SpeedButton13Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton11Click(Sender: TObject);
procedure SpeedButton17Click(Sender: TObject);
procedure SpeedButton18Click(Sender: TObject);
procedure SpeedButton19Click(Sender: TObject);
procedure SpeedButton20Click(Sender: TObject);
procedure SpeedButton21Click(Sender: TObject);
procedure SpeedButton22Click(Sender: TObject);
procedure SpeedButton23Click(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
var
plus,minus,del,umnoj:boolean;
a,b:real;
st:string;
r:real; //result operation
kn:tspeedbutton;
memory:string;//закинем в память

Procedure GetOp;
var str:string;
i:integer;
pos_op:integer;
a_,b_:string;
begin
With Form1 do
begin
str:=edit1.Text;
For i:=0 to Length(str) do
begin
if str[i]='+' then
plus:=true;
if str[i]='-' then
minus:=true;
if str[i]='*' then
umnoj:=true;
if str[i]='/' then
del:=true;
end;

if plus then
pos_op:=pos('+',str);
if minus then
pos_op:=pos('-',str);
if del then
pos_op:=pos('/',str);
if umnoj then
pos_op:=pos('*',str);

a_:=copy(str,1,pos_op-1);
b_:=copy(str,pos_op+1,length(str));

a:=strtofloat(a_);
b:=strtofloat(b_);



end;
end;

Procedure Calc;
begin

if plus then
r:=a+b;
if minus then
r:=a-b;
if del then
begin
if b=0 then
form1.Edit1.Text:='del na zero!'
else
r:=a / b;
end;
if umnoj then
r:=a * b;

end;

Procedure FormatEnter;
var buffer,buffer2:string;
i:integer;
d:string;
begin
d:=form1.Edit1.Text;
if length(d)=3 then
buffer:=d;
if length(d)=6 then
buffer2:=d;
if buffer2='' then
r:=strtofloat(buffer)
else r:=strtofloat(buffer+''+buffer2);



end;


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

procedure TForm1.SpeedButton16Click(Sender: TObject);
var c:integer;
buffer,buffer2 :string;
i,j:integer;
dec:array of real;
res,s:string;
begin
getop;
calc;
edit1.Clear;
setlength(dec,20);
s:=floattostr(r);




//res:=(buffer+''+buffer2);
edit1.Text:=buffer+''+buffer2;

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'+';


end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'-';
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'*';
end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'/';
end;

procedure TForm1.SpeedButton6Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'0';
end;

procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'1';


end;

procedure TForm1.SpeedButton10Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'2';
end;

procedure TForm1.SpeedButton14Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'3';
end;

procedure TForm1.SpeedButton15Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'4';
end;

procedure TForm1.SpeedButton12Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'5';
end;

procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'6';
end;

procedure TForm1.SpeedButton13Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'7';
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'8';
end;

procedure TForm1.SpeedButton11Click(Sender: TObject);
begin
if edit1.Text <> '' then
st:=edit1.Text;
edit1.Text:=st+'9';
end;

procedure TForm1.SpeedButton17Click(Sender: TObject);
begin
edit1.Clear;
st:='';
end;

procedure TForm1.SpeedButton18Click(Sender: TObject);
var q:real;
begin
q:=strtofloat(edit1.Text);
if q=0 then exit
else
q:= sqr(q);
edit1.Clear;
edit1.Text:=floattostr(q);
end;

procedure TForm1.SpeedButton19Click(Sender: TObject);
var q:real;
begin
q:=strtofloat(edit1.Text);
if q=0 then exit
else
q:= sqrt(q);
edit1.Clear;
edit1.Text:=floattostr(q);
end;

procedure TForm1.SpeedButton20Click(Sender: TObject);
begin
memory:=edit1.text;
speedbutton20.Flat:=false;
end;

procedure TForm1.SpeedButton21Click(Sender: TObject);
begin
edit1.Text:=memory;
speedbutton20.Flat:=true;
end;

procedure TForm1.SpeedButton22Click(Sender: TObject);
begin
memory:='';
speedbutton20.Flat:=false;
end;

procedure TForm1.SpeedButton23Click(Sender: TObject);
begin
edit1.Text:='3,1415926535897932384626433832795';
end;

procedure TForm1.N1Click(Sender: TObject);
begin
edit1.SelectAll;
edit1.CopyToClipboard;

end;

end.

2 комментария:

  1. Олег, здравствуйте. Я попала сюда по запросу о программировании в фотошопе, мне интересно возможно ли такое на подобии макросов в ворде. Ликбес читать не надо, в курсе.
    Уточняю: в ворде я записываю макрос, т.е. какую-то последовательность действий, которую могу потом воспроизвести. Аналогично, могу в фотошопе записать Экшен. В ворде я могу зайти в редактор с программным кодом и подправить на свое усмотрение. Могу ли я тоже самое сделать в фотошопе?... реально что-то мне нигде инфы в инете не найти, либо нет ничего, либо статьи удалены.

    ОтветитьУдалить
  2. Да насколько мне известно были только экшены макросов вроде бы не было, хотя за последними версиями не следил может что-то и появилось, когда необходимо было обработать несколько десятков фото то пробывал экшен делать но так и не получилось

    ОтветитьУдалить