Программа - калькулятор

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?вол проверяется является ли он выходом, выводом ответа, оператором “+”, “-”, “*”, “/”, “^”, цифрой или буквой, в каждом из этих случаев происходит дальнейший рекурсивный разбор введенного выражения.

 

token_value get_token()

{

char ch;

do

{

if ((ch = getch()) = = ESC) return curr_tok = END;

} while (ch = = );

 

switch(ch)

{

case ;:

putch(ch);

ps = \x0;

return curr_tok = PRINT;

case \r:

ps = \x0;

gotoxy(1,wherey()+1);

return curr_tok = NEXT;

case *: case /: case +: case -:

case (: case ): case =: case ^:

dupl_oper_verify(ps, ch);

return curr_tok = ch;

case 0: case 1: case 2: case 3: case 4:

case 5: case 6: case 7: case 8: case 9: case .:

ps = \x0;

ungetch(ch);

get_number();

return curr_tok = NUMBER;

default:

ps = \x0;

if (isalpha(ch))

{

ungetch(ch);

get_name();

return curr_tok = NAME;

}

error("Invalid symbol");

return curr_tok = PRINT;

}

}

Эта функция является определяющей при распознавании введенного выражения, то есть основополагающей при вычислении ответа.

 

Технические данные для использования

 

Для запуска данной программы необходимо наличие персонального компьютера IBM PC/XT с операционной системой MS-DOS. Русификатор для ознакомления с Помощью. Объем оперативной памяти 640 Кбайт. Для запуска программы необходимо сделать текущим каталог с программой Cal_kur.exe и вызвать её на выполнение.

 

Описание основных функций

 

Функция get_token() функция синтаксического разбора введенного выражения.

Функция get_number() функция ввода числа.

Функция get_name() функция ввода имени постоянной или функции.

Функция expr() функция вычисление полного выражения.

Функция term() функция вычисление слагаемого.

Функция prim() функция вычисление первичной части выражения.

Функция function_value() функция вычисление значения функции.

Вывод сообщения об ошибке

Функция error() функция вывод сообщения об ошибке.

Функция term_sym() функция проверка на терминальный символ.

Функция void back_space() функция исправление ошибки ввода клавишей BACKSPACE.

Функция dupl_oper_verify() функция проверка дублирования знака операции.

Функция menu() функция организует меню.

 

 

 

Список используемой литературы

 

  1. Л.И. Шолмов. Язык Си. 1988г.
  2. Г. Шилдт. C для профессиональных программистов. 1989г.
  3. Б.В. Керниган, Д.М. Ричи. Язык Си. 1995г.

Приложение

#include

#include

#include

#include

#include

#include

#include

#define PI 3.14159265359

#define E 2.718281828459

#define ENTER 13

#define ESC 27

#define BACKSPACE \b

// Массив, соответствующий терминальным символам

enum token_value

NAME, NUMBER, END,

PRINT=;, NEXT=\r,

PLUS=+, MINUS=-, MUL=*, DIV=/, POWER=^,

ASSIGN==, LP=(, RP=);

token_value curr_tok;

// Численная величина

double number_value;

// Строка для хранения введенного имени функции

char *func_name;

// Номер функции в словаре функций

int function_number;

// Словарь функций

char funcs[43] = "sin cos ln asin acos epi ";

//

int sch_ch = 0;

// Предыдущая операция

char ps = \x0;

// Проверка нехватки памяти

void *Malloc(size_t size);

// Функция синтаксического разбора выражения

token_value get_token(void);

// Ввод числа

void get_number(void);

// Ввод имени функции

void get_name(void);

// Вычисление полного выражения

double expr(void);

// Вычисление слагаемого

double term(void);

// Вычисление первичной части выражения

double prim(void);

// Вычисление значения функции

double function_value(void);

// Вывод сообщения об ошибке

double error(char *);

// Проверка на терминальный символ

int term_sym(char);

// Исправление ошибки клавишей BACKSPACE

void back_space(int *);

// Проверка дублирования знака операции

void dupl_oper_verify(char, char);

// Окно вывода сообщения

void message();

// Рамка окна

void ramka();

// Окно ввода выражения

void screen_input();

// Окно ввода ответа

void screen_output();

// Информация

void info();

// Организация меню

void menu(int n);

// Музыка при выходе

void sound_exit();

//Два на два

void dva_x_dva();

/*===============================Основная часть============================*/ void main()

 

FILE *help, *about; int m=1,loop=1,i,pr;

double x;

char s[255],key = -1,*put,*empty_str;

clrscr();

textbackground(0);

textcolor(15);

while(loop)

 

clrscr();

menu(m);

do

key = getch();

if (key==72 && m>1)

 

m--;

menu(m);

sound(220);

delay(50);

nosound();

;

if (key==80 && m<4)

 

m++;

menu(m);

sound(220);

delay(50);

nosound();

;

while (key!=13);

switch(m)

 

case 1:

clrscr(); if((help=fopen(put="d:\\univer\\langs\\bc\\work\\Help.txt","r"))==NULL)

 

printf("Imposible open file %s!\n",put);

getch();

break;

return;

 

i=0;

while(!feof(help))

 

putchar(getc(help));

i++;

 

_setcursortype(_NOCURSOR);

getch();

break;

case 2:

clrscr();

ramka();

screen_input();

screen_output();

message();

info();

dva_x_dva();

_setcursortype(_NORMALCURSOR);

textcolor(15);

gotoxy(6,4);

func_name = (char*) Malloc(5);

while (1)

 

get_token();

if (curr_tok == END) break;

if (curr_tok != PRINT && curr_tok != NEXT)

 

pr=printf("%f\n",expr());

 

if(pr!=0)

 

gotoxy(6,4);

printf(""

" ");

gotoxy(6,4);

 

 

free(func_name);

break;

case 3:

clrscr(); if((about=fopen(put="d:\\univer\\langs\\bc\\work\\Credits.txt","r"))==NULL)

 

printf("Imposible open file %s!\n",put);

getch();

break;

return;

 

i=0;

while(!feof(about))

 

putchar(getc(about));

i++;

 

_setcursortype(_NOCURSOR);

getch();

break;

case 4:

sound_exit();

loop = 0;break;

default