Программа - калькулятор
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?вол проверяется является ли он выходом, выводом ответа, оператором “+”, “-”, “*”, “/”, “^”, цифрой или буквой, в каждом из этих случаев происходит дальнейший рекурсивный разбор введенного выражения.
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() функция организует меню.
Список используемой литературы
- Л.И. Шолмов. Язык Си. 1988г.
- Г. Шилдт. C для профессиональных программистов. 1989г.
- Б.В. Керниган, Д.М. Ричи. Язык Си. 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