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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2008, 15:41   #1
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
Печаль Требуется помощь в написании калькулятора на Паскале((

Здравствуйте, мне нужно написать не сложный калькулятор на паскале... я не знаю как совместить графическую оболочку с вычислительной частью работы... Т.е. как мне сделать так чтобы пользователь нажимал на кнопочки мышью и на экране появлялось то что он нажимает и так далее...
После лета чет ничего уже не помню(((
ЕвгениуS вне форума Ответить с цитированием
Старый 29.10.2008, 03:43   #2
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

не знаю...... мне не нравятся паскалевские средства для работы с мышкой....... но это сугубо моё мнение......
вот пример работы с мышью без стандартных функций
Код:
Uses crt,graph;

var CircleX,CircleY,CircleR:integer;
    page:word;

procedure InitMouse;
begin
 asm
  mov ax,0
  int 33h
 end;
end;

procedure ShowCursor;
begin
 asm
  mov ax,1
  int 33h
 end;
end;

procedure HideCursor;
begin
 asm
  mov ax,2
  int 33h
 end;
end;

function GetMouseX:integer;
var x:integer;
begin
 asm
  mov ax,3
  int 33h
  mov x,cx
 end;
 GetMouseX:=x;
end;

function GetMouseY:integer;
var y:integer;
begin
 asm
  mov ax,3
  int 33h
  mov y,dx
 end;
 GetMouseY:=y;
end;

function MouseLeftButton:boolean;
var button:integer;
begin
 asm
  mov ax,3
  int 33h
  and bx,1b
  mov button,bx
 end;
 if(button=1) then MouseLeftButton:=true else MouseLeftButton:=false;
end;

function MouseRightButton:boolean;
var button:integer;
begin
 asm
  mov ax,3
  int 33h
  shr bx,1
  and bx,1b
  mov button,bx
 end;
 if(button=1) then MouseRightButton:=true else MouseRightButton:=false;
end;

function MouseAtCircle:boolean;
var x,y:integer;
begin
 x:=GetMouseX;
 y:=GetMouseY;
 if (x>=CircleX-CircleR) and (x<=CircleX+CircleR) and (y>=CircleY-CircleR) and (y<=CircleY+CircleR) then
  begin
   if sqr(x-CircleX)+sqr(y-CircleY)<=sqr(CircleR) then MouseAtCircle:=true
   else MouseAtCircle:=false;
  end
  else MouseAtCircle:=false;
end;

procedure DrawCircle;
begin
 clearDevice;
 Circle(CircleX,CircleY,CircleR);
end;

var gd,gm:integer;
begin
 initgraph(gd,gm,'..\bgi');
 InitMouse;
 ShowCursor;
 CircleX:=GetMaxX div 2;
 CircleY:=GetMaxY div 2;
 CircleR:=100;
 drawCircle;
 while not MouseRightButton do
  begin
   if (MouseLeftButton) and (MouseAtCircle) then
    begin
     OutTextXY(CircleX-100,CircleY-CircleR-30,'You are at the Circle');
     while (MouseLeftButton) and (MouseAtCircle) do;
     drawCircle;
     HideCursor;
     showCursor;
    end;
  end;
end.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 06.11.2008, 15:28   #3
Ganmaker
Пользователь
 
Аватар для Ganmaker
 
Регистрация: 05.11.2008
Сообщений: 22
По умолчанию

калькулятор на Паскале зачем, не проще в Делфи
Ganmaker вне форума Ответить с цитированием
Старый 28.11.2008, 13:53   #4
PS-World
Новичок
Джуниор
 
Аватар для PS-World
 
Регистрация: 28.11.2008
Сообщений: 2
Лампочка Я для себя делал...мож поможет

Калькулятор графический...
=================================== ======================
Program COOLCALCULATORPSW;
Uses
Graph,CRT;
Var
gr,gm,stepx,stepy,x,y,enter,chisl,x 2,y2,zn,zn2,zna,zna2:Integer;
a,b,c,c2,rez:LONGiNT;
is:Word;
se:Pointer;
Ch:Char;
s:string;
Label ends;
{********************************** ****************************}
PROCEDURE title;
VAR
x:Integer;
tw,th,is:Word;
sm,sa,sl,bu,buy,bur,se:Pointer;
BEGIN
SetColor(15);
SetTextStyle(10,0,1);
SetTextJustify(0,2);
OutTextXY(0,0,'PS-World@inbox.ru');
tw:=TextWidth('PS-World@inbox.ru');
th:=TextHeight('PS-World@inbox.ru');
is:=ImageSize(0,0,tw,th);
GetMem(se,is);
GetImage(0,0,tw,th,se^);
clearviewport;
OutTextXY(0,0,'CALCULATOR v. 2.0');
tw:=TextWidth('CALCULATOR v. 2.0');
th:=TextHeight('CALCULATOR v. 2.0');
is:=ImageSize(0,0,tw,th);
GetMem(sm,is);
GetImage(0,0,tw,th,sm^);
clearviewport;
OutTextXY(0,0,'PS-World 2008');
tw:=TextWidth('PS-World 2008');
th:=TextHeight('PS-World 2008');
is:=ImageSize(0,0,tw,th);
GetMem(sa,is);
GetImage(0,0,tw,th,sa^);
clearviewport;
x:=(getMaxX div 2)-(tw div 2);
Line((getMaxX div 2)-100,10,(getMaxX div 2)+100,10);
Line((getMaxX div 2)-100,25,(getMaxX div 2)+100,25);
Line((getMaxX div 2)-100,8,(getMaxX div 2)-100,12);
Line((getMaxX div 2)-100,23,(getMaxX div 2)-100,27);
Line((getMaxX div 2)+100,8,(getMaxX div 2)+100,12);
Line((getMaxX div 2)+100,23,(getMaxX div 2)+100,27);
is:=ImageSize((getMaxX div 2)-100,8,(getMaxX div 2)+100,27);
GetMem(sl,is);
GetImage((getMaxX div 2)-100,8,(getMaxX div 2)+100,27,sl^);
clearviewport;
SetColor(15);
Line(0,1,0,28);Line(29,1,29,28);Lin e(1,0,28,0);Line(1,29,28,29);
SetFillStyle(1,1);Bar(1,1,28,28);
is:=ImageSize(0,0,29,29);
GetMem(bu,is); GetImage(0,0,29,29,bu^);
clearviewport;
SetColor(15);
Line(0,1,0,28);Line(29,1,29,28);Lin e(1,0,28,0);Line(1,29,28,29);
SetFillStyle(1,2);Bar(1,1,28,28);
is:=ImageSize(0,0,29,29);
GetMem(buy,is); GetImage(0,0,29,29,buy^);
clearviewport;
SetColor(15);
Line(0,1,0,28);Line(29,1,29,28);Lin e(1,0,28,0);Line(1,29,28,29);
SetFillStyle(1,4);Bar(1,1,28,28);
is:=ImageSize(0,0,29,29);
GetMem(bur,is); GetImage(0,0,29,29,bur^);
clearviewport;
SetFillStyle(4,8);
Bar(0,0,639,49);
Bar(0,429,639,479);
PutImage(5,8,sl^,2);
PutImage(10,15,sm^,2);
PutImage(10,GetMaxY-20,sa^,2);
PutImage(5,GetMaxY-27,sl^,2);
PutImage(GetMaxX-220,GetMaxY-27,sl^,2);
PutImage(GetMaxX-160,GetMaxY-20,se^,2);
SetColor(8);
Bar(380,90,600,390);
PutImage(390,100,sl^,2);
Rectangle(380,90,600,390);
SetColor(15);
SetFillStyle(5,8);
Bar(40,90,260,390);
Rectangle(40,90,260,390);
PutImage(50,100,sl^,2);
PutImage(60,350,bur^,2);
PutImage(110,350,bu^,2);
PutImage(160,350,buy^,2);
PutImage(210,350,buy^,2);
PutImage(60,300,bu^,2);
PutImage(110,300,bu^,2);
PutImage(160,300,bu^,2);
PutImage(210,300,buy^,2);
PutImage(60,250,bu^,2);
PutImage(110,250,bu^,2);
PutImage(160,250,bu^,2);
PutImage(210,250,buy^,2);
PutImage(60,200,bu^,2);
PutImage(110,200,bu^,2);
PutImage(160,200,bu^,2);
PutImage(210,200,buy^,2);
SetTextStyle(0,0,2);
OutTextXY(70,210,'1');OutTextXY(120 ,210,'2');OutTextXY(170,210,'3');
OutTextXY(70,260,'4');OutTextXY(120 ,260,'5');OutTextXY(170,260,'6');
OutTextXY(70,310,'7');OutTextXY(120 ,310,'8');OutTextXY(170,310,'9');
OutTextXY(120,360,'0');
SetColor(0);
OutTextXY(170,360,'=');OutTextXY(22 0,360,'+');
OutTextXY(220,310,'-');OutTextXY(220,260,'x');OutTextXY (220,210,#246);
SetTextStyle(0,0,1);OutTextXY(64,36 1,'ESC');
END;
{********************************** ****************************}

{********************************** ****************************}
Procedure monitor(b:Longint);
var s:string;
begin
Bar(51,116,249,103);
Str(b,s);
SetTextJustify(2,2);
SetColor(15);
OutTextXY(240,108,s);
end;
{********************************** ****************************}


-это первая часть(всего более 7000 символов)

Вообще-то рабочий, а если есть какие глюки-у нас информатика только с 10 класса (я в 11-м)
PS-World вне форума Ответить с цитированием
Старый 28.11.2008, 13:54   #5
PS-World
Новичок
Джуниор
 
Аватар для PS-World
 
Регистрация: 28.11.2008
Сообщений: 2
По умолчанию

вот вторая часть...

{********************************** ****************************}
Procedure Help;
begin
SetColor(15);
rectangle(380,90,600,390);
OutTextXY(555,106,'HELP');
SetColor(14);
OutTextXY(400,120,#24);
OutTextXY(400,130,#25);
OutTextXY(390,130,#27);
OutTextXY(410,130,#26);
OutTextXY(420,130,' - SELECT');
OutTextXY(390,150,'<ENTER> - CHANGE');
OutTextXY(390,170,'<ESC> - EXIT');
SetColor(10);
OutTextXY(390,200,'PROGRAMMER:');
OutTextXY(390,240,'ORIGINAL CODE');
SetColor(15);
OutTextXY(390,220,'Pechiorkin Sergey');
OutTextXY(390,260,'Pechiorkin Sergey');
OutTextXY(390,380,'Thank you, enjoy!');
end;
{********************************** ****************************}
{********************************** ****************************}
Procedure endmenu;
begin
CloseGraph;
Halt(1);
end;
{********************************** ****************************}
Begin
gr:=0; gm:=detect; InitGraph(gr,gm,'Graph.tpu');
stepx:=0; stepy:=150;
x:=60+stepx; y:=200+stepy;
SetFillStyle(1,14);
Bar(0,0,29,29);
is:=ImageSize(0,0,29,29);
GetMem(se,is);
GetImage(0,0,29,29,se^);
ClearViewPort;
Title;
Help;
PutImage(x,y,se^,1);
While TRUE do
Begin
Ch:=ReadKey;
Case Ch of
#27:Begin CloseGraph; Halt(1); end;
#75:stepx:=stepx-50;
#72:stepy:=stepy-50;
#80:stepy:=stepy+50;
#77:stepx:=stepx+50;
#13:enter:=1;
end;
if(stepx>150)then stepx:=0;
if(stepx<0)then stepx:=150;
if(stepy>150)then stepy:=0;
if(stepy<0)then stepy:=150;
x2:=stepx; y2:=stepy;
If(enter=1)then
begin
if(x2=0)then
begin
case y2 of
0:chisl:=1;
50:chisl:=4;
100:chisl:=7;
150:begin endmenu; goto ends; end;
end;
a:=a*10+chisl;
b:=a;
monitor(b);
x:=60+stepx; y:=200+stepy;
PutImage(x,y,se^,1);
end;
if(x2=50)then
begin
case y2 of
0:chisl:=2;
50:chisl:=5;
100:chisl:=8;
150:chisl:=0;
end;
a:=a*10+chisl;
b:=a;
monitor(b);
x:=60+stepx; y:=200+stepy;
PutImage(x,y,se^,1);
end;
if(x2=100)then
begin
case y2 of
0:chisl:=3;
50:chisl:=6;
100:chisl:=9;
end;
a:=a*10+chisl;
b:=a;
monitor(b);
x:=60+stepx; y:=200+stepy;
PutImage(x,y,se^,1);
end;
if(x2=150)then
begin
case y2 of
0:zn:=1;
50:zn:=2;
100:zn:=3;
150:zn:=4;
end;
c:=b;
a:=0;
b:=a;
x:=60+stepx; y:=200+stepy;
PutImage(x,y,se^,1);
end;
if(x2=100)and(y2=150)then begin zn2:=5; c2:=(b div 10);end;
{=============================}
zna:=zn; zna2:=zn2;
if(zna2=5)then
begin
case zna of
1:rez:=c div c2;
2:rez:=c*c2;
3:rez:=c-c2;
4:rez:=c+c2;
end;
b:=rez;
monitor(b);
a:=0;
zn2:=0;
zn:=0;
enter:=0;
end;
{=============================}
end;
ends:
x:=60+stepx; y:=200+stepy;
PutImage(x,y,se^,1);
enter:=0;
End;
End.
=================================== ======================
PS-World вне форума Ответить с цитированием
Старый 28.11.2008, 14:30   #6
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Это поразительно! Но всего лишь упражнение для ума.
Написали бы, например, "вычислилитель" транскрипции.
Заодно бы и английский "подтянули"!..
Что же касается калькулятора, то можно добавить факториал, а также раскладыватель на множители: то есть

вводишь control — вычисляется [kən’trəul] (ну не так коряво);

вводишь 5! — вычисляется 120;

вводишь 111 — вычисляется 3·37.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 29.12.2008, 18:46   #7
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
По умолчанию

Цитата:
Сообщение от PS-World Посмотреть сообщение
Спасибо, скорее всего я использую часть вашей программы..
ЕвгениуS вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь в написании программы prog1 Фриланс 5 02.06.2008 19:50
Нужна помощь в написании кода Михаил Юрьевич Общие вопросы Delphi 2 27.12.2007 09:32
Нужна помощь в написании программы. GhosT3Ds Паскаль, Turbo Pascal, PascalABC.NET 1 23.12.2007 07:45
Требуется помощь в написании курсовика по БД Balvenie Фриланс 7 23.05.2007 13:26