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

2016-07-30СтудИзба

Описание файла

Документ из архива "Программа - калькулятор", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48225"

Текст из документа "48225"

МИНИСТЕРСТВО ОБРАЗОВАНИЯ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Брянский Государственный Технический

Университет

Кафедра “Информатика и программное

обеспечение”

Курсовая работа

по программированию

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

Всего листов

Студент группы 00-ПО2

Гольдин Е.Г.

Преподаватель

Израилев В.Я.

Брянск

Содержание

Содержание 2

Введение 3

Постановка задачи 4

Метод решения задачи 4

Алгоритм работы программы 5

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

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

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

Язык формирует наш способ мышления

и определяет, о чем мы можем мыслить.

Б.Л. Ворф

Введение

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

Си - это язык программирования общего назначения, хорошо известный своей эффективностью, экономичностью, и переносимостью. Указанные преимущества Си обеспечивают хорошее качество разработки почти любого вида программного продукта. Использование Си в качестве инструментального языка позволяет получать быстрые и компактные программы. Во многих случаях программы, написанные на Си, сравнимы по скорости с программами, написанными на языке ассемблера. При этом они имеют лучшую наглядность и их более просто сопровождать.

Си сочетает эффективность и мощность в относительно малом по размеру языке. Хотя Си не содержит встроенных компонент языка, выполняющих ввод-вывод, распределение памяти, манипуляций с экраном или управление процессами, тем не менее, системное окружение Си располагает библиотекой объектных модулей, в которой реализованы подобные функции. Библиотека поддерживает многие из функций, которые требуются.

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

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

Постановка задачи

Задача курсовой работы состоит в разработке программы - калькулятора, которая позволяет считать выражения, состоящие из чисел, содержащих до 29 цифр от 0 до 9, постоянные числа pi=3,14159265359 и e=2.718281828459, функции синус (sin), косинус (cos), арксинус (asin), арккосинус (acos) и натуральный логарифм (ln).

Необходимо разработать удобный пользовательский интерфейс для работы с программой, а так же пункт “Помощь” для ознакомления с программой.

Программу разработать на языке C в среде Borland C++ V. 3.1

Метод решения задачи

Проанализировав поставленную задачу, я пришел к выводу, что необходимо разработать синтаксический анализатор выражений, для реализации которого я использовал алгоритм множественного выбора. При разборе выражение разбивается на составные части – термы, который в свою очередь состоит из факторов. Факторами могут являться числа или подвыражения, состоящего из других факторов. Терм является произведением или отношением факторов. Поочередно, анализируя каждый введенный символ, программа объединяет их в факторы, а готовые факторы в термы, после подсчета которых выдается окончательный ответ. Это правило очень важно, так как должен соблюдаться строгий приоритет выполнения операций, то есть вложенные элементы должны иметь операторы с более высоким приоритетом. Сначала, если есть функции, вычисляется их значение. У арифметических операций приоритет следующий: сначала выполняется возведение в степень, затем умножение, деление, сложение и вычитание. Если выражение содержит скобки, то в первую очередь вычисляется подвыражение во вложенных скобках самого нижнего уровня, а затем по возрастанию уровня.

Алгоритм работы программы

Данная программа позволяет вычислять выражения, содержащие численные значения и некоторые функции. Следовательно, в алгоритме нужно осуществлять проверку на неверно введенные символы и ошибочно нажатые клавиши. Так же необходимо учесть количество открытых и закрытых скобок. Алгоритм программы следующий: включается функция get_token(), в которой каждый вводимый символ проверяется является ли он выходом, выводом ответа, оператором “+”, “-”, “*”, “/”, “^”, цифрой или буквой, в каждом из этих случаев происходит дальнейший рекурсивный разбор введенного выражения.

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 e pi ";

//

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:

continue;

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

void *Malloc(size_t size)

void *p;

if((p=malloc(size))==NULL)

printf(" No memory\n");

exit(1);

return p;

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

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();

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5140
Авторов
на СтудИзбе
441
Средний доход
с одного платного файла
Обучение Подробнее