Стековый калькулятор

Автор работы: Пользователь скрыл имя, 14 Марта 2012 в 19:55, курсовая работа

Краткое описание

Цель курсовой работы – систематизация, углубление и активное применение знаний по системному программированию, закрепление знаний, полученных в лекционном курсе, а также на практических и лабораторных занятиях.
Метод исследования – изучение литературы, составление и отладка программ на компьютере.

Содержание работы

1.Введение
2.Разработка программы
3.Руководство программиста
4.Руководство пользователя
5.Заключение
6. Список использованной литературы
7. Листинг программы

Содержимое работы - 1 файл

отчет по си курсач(готовый).doc

— 1.07 Мб (Скачать файл)
e="text-align:justify">                            s--;}

              s++;}

  return pop(&val);}

Файл "MOUSE.CPP".

В этом файле происходит описание класса mouse, обеспечивающее работу мыши в графическом интерфейсе программы.

 

class Mouse

{

  public:

       int but;

       int x,y;

 

       Mouse();

       ~Mouse();

       int IsIn(int x1,int y1,int x2,int y2);

       void show();

       void hide();

       void getstate();

       void setVrange(int MYMax,int MYMin);

};

 

Файл "CALCULAT.CPP".

В этом файле происходит подключение всех вышеперечисленных файлов, выполняется инициализация графического режима, мыши. Также осуществляется описание интерфейса программы: выполняется прорисовка кнопок, окон ввода\вывода. 

 

 

4.Руководство пользователя

В данной курсовой работе представлена реализация стекового калькулятора. В нем используются те же вычисления, что и в обычном калькуляторе: сложение, вычитание, умножение, деление и др. Кроме арифметических операций, пользователь может ввести название одной из стандартных функций: sin, cos, exp, tan. В программе используется метод обратной польской записи, поэтому можно рассчитывать сложные выражения с использованием скобок. Такая программа весьма полезна, поскольку позволяет проводить вычисления, не прибегая к записи промежуточных результатов на бумаге.

Для запуска программы необходимо запустить файл “Calc.exe”. После этого на экране появиться основной экран:

На нем можно увидеть те же клавиши, что и на обычном калькуляторе. Для ввода значений необходимо нажать на цифровые клавиши и произвести вычисления при помощи клавиш с арифметическими вычислениями(справа от цифрового набора) или функциональными вычислениями(слева от цифрового набора). Результат выводится в окно, которое находится чуть выше цифровых клавиш. Чтобы очистить окно с произведенными вычислениями необходимо нажать клавишу “CLEAR”. Или использовать функцию посимвольного стирания, которое осуществляется при нажатии клавиши “<<”. Эта функция необходима для того, чтобы заменить цифру, если произошла ошибка при вводе данных.

Выход из программы происходит при нажатии клавиши “X”, расположенной в правом верхнем углу.

Список функций использованных в данной программе:

Sqrt – возвращает значение квадратного корня.

Abs – возвращает абсолютное значение.

Exp – возвращает экспоненциальное значение.

Sin – возвращает синус.

Cos – возвращает косинус.

Tan – возвращает тангенс.

 

 

 

 

 

 

 

 

 

 

 

5.Заключение

В ходе выполнения данного курсового проекта была разработана программа на языке Borland C. А также изучены возможности данного языка.

Систематизированы и закреплены практические навыки использования ЭВМ, программного обеспечения, существующих средств обслуживания системных программистов, а также теоретические знания по основным разделам курса "Язык программирования Си".

При выполнении курсового проекта произведено знакомство с реферативными журналами и другими информационными источниками по объектно-ориентированному и системному программированию с целью анализа состояния решаемой задачи. Получены практические навыки работы в среде Borland C.

 

6. Список использованной литературы

1. Язык программирования Си.\Пер. с англ., 3-е изд., испр. - СПб.: "Невский Диалект", 2001. - 352 с.: ил.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7. Листинг программы

Файл "CALCULAT.CPP"



#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#include <graphics.h>

#include <ctype.h>

#include <dos.h>

#include <bios.h>

 

#include "mouse.h"

#include "calc.h"

 

#define LB 16

#define UB 35

 

#define RB 616

#define DB 105

 

Mouse *mouse=new Mouse();

 

struct  TButton

{

   int x,y,w,h;

   int state;

 

   char caption[20];

   void Show();

   int Pressed();

};

 

void TButton::Show()

{

   int c1,c2;

 

   c1=state?15:0;

   c2=state?0:15;

 

   settextjustify(1,1);

   setcolor(WHITE);

 

   outtextxy(x+w/2,y+h/2,caption);

 

   setcolor(c1);

   line(x,y,x+w,y);

   line(x,y,x,y+h);

 

   setcolor(c2);

   line(x,y+h,x+w,y+h);

   line(x+w,y,x+w,y+h);

}

 

int TButton::Pressed()

{

   mouse->getstate();

   if(x)

   if((mouse->but==1)&&mouse->IsIn(x,y,x+w,y+h)&&(state))

   {

      state=0;

      Show();

      return 1;

   }

   else if(!mouse->but)

   {

      state=1;

      Show();

   }

   return 0;

}

 

TButton digits[10];

TButton fbuts[12];

TButton obuts[6];

TButton BackSpace;

TButton ClearAll;

 

 

char opr[6][2]={"/","*","-","+","=","."};

char funs[13][5]={ ")","(",

                                                           "sqrt","abs","exp",

                                                           "sin","cos","tan"

                                                        };

 

int getbutstr(char *ch)

{

   for(int i=0;i<12;i++)

   {

                if(fbuts[i].Pressed())

                {

                              strcpy(ch,fbuts[i].caption);

                              return 1;

                }

                if(i<11)

                 if(digits[i].Pressed())

                 {

                              strcpy(ch,digits[i].caption);

                              return 1;

                 }

                if((i<6)&&(i!=4))

                 if(obuts[i].Pressed())

                 {

                              strcpy(ch,obuts[i].caption);

                              return 1;

                 }

   }

   return 0;

}

 

 

void igraph()

{

   int gdriver = DETECT, gmode, errorcode;

   initgraph(&gdriver, &gmode,"");

   errorcode = graphresult();

   if (errorcode != grOk)  /* an error occurred */

   {

                printf("Graphics error: %s\n",grapherrormsg(errorcode));

                printf("Press any key to halt:");

                getch();

                exit(1);             /* return with error code */

   }

}

 

void ButInit()

{

   int x,y,dx=75,dy=60;

   char c[20];

   int i;

 

   BackSpace.x=470;

   BackSpace.y=170;

   BackSpace.w=120;

   BackSpace.h=30;

   BackSpace.state=1;

   strcpy(BackSpace.caption,"<<");

   BackSpace.Show();

 

   ClearAll.x=340;

   ClearAll.y=170;

   ClearAll.w=120;

   ClearAll.h=30;

   ClearAll.state=1;

   strcpy(ClearAll.caption,"CLEAR");

   ClearAll.Show();

 

   for(x=170,y=220,i=0;i<9;i++)

   {

      fbuts[i].x=0;

      fbuts[i].w=70;

      fbuts[i].h=40;

 

      fbuts[i].x=x;

      fbuts[i].y=y;

 

      fbuts[i].state=1;

 

      if(i)

          strcpy(fbuts[i].caption,funs[i-1]);

 

      x-=dx;

 

                if(x==-55)

      {

         y+=dy;

         x=170;

      }

   }

 

   //   жЁдал

 

   for(x=430,y=220,i=10;i>0;i--)

   {

 

      if(i==1)

                                            x-=2*dx;

 

      digits[i].w=70;

      digits[i].h=40;

      digits[i].x=x;

      digits[i].y=y;

      digits[i].state=1;

 

      sprintf(c,"%d",i-1);

      strcpy(digits[i].caption,c);

      x-=dx;

      if(!((i-2)%3))

      {

         y+=dy;

         x=430;

      }

   }

 

   // +,-,*,/

 

   dx+=5;

   for(x=520,y=220,i=0;i<6;i++)

   {

      obuts[i].w=70;

      obuts[i].h=40;

      obuts[i].x=x;

      obuts[i].y=y;

      obuts[i].state=1;

      if(i>2)

         x-=dx;

      else

         y+=dy;

      strcpy(obuts[i].caption,opr[i]);

   }

}

 

TButton CloseBut;

 

void ClearExpField()

{

   setcolor(WHITE);

   line(LB,DB+1,RB+1,DB+1);

   line(RB+2,UB,RB+2,DB);

 

   setfillstyle(1,BLACK);

   bar(LB-1,UB,RB+1,DB);

}

 

void iface()

{

   setfillstyle(1,7);

   bar(0,0,640,480);

 

   setfillstyle(1,BLUE);

   bar(5,5,getmaxx()-5,20);

 

   CloseBut.x=getmaxx()-20;

   CloseBut.y=7;

   CloseBut.w=10;

   CloseBut.h=11;

   CloseBut.state=1;

   strcpy(CloseBut.caption,"x");

 

   setfillstyle(1,DARKGRAY);

   bar(CloseBut.x,CloseBut.y,CloseBut.x+CloseBut.w,CloseBut.y+CloseBut.h);

   CloseBut.Show();

 

   ClearExpField();

 

   line(LB,DB+39,RB,DB+39);

   line(RB+1,DB+20,RB+1,DB+38);

 

   setfillstyle(1,BLACK);

   bar(LB,DB+20,RB,DB+38);

 

   for(int i=0;i<12;i++)

   {

              fbuts[i].Show();

              digits[i].Show();

              obuts[i].Show();

   }

}

 

void carriage(int x,int y,int color)

{

   setcolor(color);

   setlinestyle(0,1,2);

 

   line(x+4,y+9,x+12,y+9);

   setlinestyle(0,1,1);

}

 

int getstring(char *str)

{

   const int freq=450,deltime=40;

   const int dx=8,dy=12;

 

   int x=LB,y=UB;

   int len=0;

   char *p=str,let[10];

   ClearExpField();

   carriage(x,y,WHITE);

 

   while(1)

   {

                if(getbutstr(let))

                {

                            if(x>RB-2*(dx*len))

                            {

                               if(y<DB-2*dx)

                               {

                                          carriage(x,y,BLACK);

                                          x=LB;

                                          y+=dy;

Информация о работе Стековый калькулятор