Міністерство освіти і науки, молоді та спорту України
Тернопільський національний технічний університет ім. Івана Пулюя
Кафедра інформатики іматематичного моделювання
Курсова робота
з дисципліни“Програмування”
на тему
“Калькулятор”
Тернопіль 2013
Зміст
Вступ 3
Розділ I: Аналіз завдання 8
Розділ IІ: Розробка алгоритму функціонування 9
Розділ IІІ: Створення програми із описом основних ф-цій програми 10
Розділ IV: Опис технології роботи програми 15
Висновок 19
Перелік використаної літератури 20
Додаток І: Лістинг програми мовою С 21
Додаток ІІ: Диск з електронним варіантом програми 25
Вступ
Мова Сі++ багато в чому є надмножиною Сі. Нові можливості Сі++ включають оголошення у вигляді виразів, перетворення типів у вигляді функцій, оператори new і delete, тип bool, посилання, розширене поняття константності та змінності, функції, що підставляються, аргументи за умовчанням, перевизначення, простори імен, класи (включаючи і всі пов'язані з класами можливості, такі як успадкування, функції-члени (методи), віртуальні функції, абстрактні класи і конструктори), перевизначення операторів, шаблони, оператор::, обробку винятків, динамічну ідентифікацію і багато що інше. Сі++ є також мовою строгого типування і накладає більше вимагань щодо дотримання типів, порівняно з Сі.Вже довгий час не припиняються спори, що краще: Delphi або C/C++/Visual C++. Причому в більшості випадків порівнюються дві принципово різні речі. Адже до сьомої версії ім'я Delphi носило лише середовище розробки, а мова її компілятора була Object Pascal (у Delphi7 борландовці вирішили усунути таке упущення, і тепер і мова називається Дельфі). Те ж саме і з Visual C++: ця IDE накручена на Microsoft C/C++ Compiler (cl.exe). Тому коректним було б зіставлення Delphi і Visual Studio або об'єктного паскаля і C++. Чому саме сі-плюс-плюс, а не C? Та тому що C - процедурно-орієнтована мова середнього рівня, а Object Pascal - високорівневий, з підтримкою ООП і абстракцій, тобто це зовсім різні речі.C++ був розвинутий з мови програмування C і за дуже малими виключеннями зберігає C як підмножину. Базова мова, C підмножина C++, спроектована так, що існує дуже близька відповідність між його типами, операціями й операторами і комп'ютерними об'єктами, з якими безпосередньо приходиться мати справу: числами, символами й адресами Microsoft VisualC++ містить безліч інтегрованих засобів візуального програмування. Компілятор VisualC++ містить багато нових інструментальних засобів і поліпшених можливостей, надає величезні можливості в плані оптимізації додатків, внаслідок чого можна отримати виграш як відносно розміру програми, так і відносно швидкості її виконання, незалежно від того, що являє собою ваш додаток.
Система Microsoft VisualC++ дозволяє створювати як маленькі програми і утиліти для персонального використання, так і корпоративні системи, що працюють з базами даних на різних платформах. Laboratories
C++ (Сі-плюс-плюс)— мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англ. Bjarne Stroustrup) в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та названа «Сі з класами». Страуструп перейменував мову у C++ у 1983 р. Базується на мові С. Визначена стандартом ISO/IEC 14882:2003.
Назва «Сі++» була вигадана Ріком Масситті (Rick Mascitti) і вперше було використана в грудні 1983 року. Раніше, на етапі розробки, нова мова називалася «Сі з класами». Ім'я, що вийшло у результаті, походить від оператора Сі «++» (збільшення значення змінної на одиницю) і поширеному способу присвоєння нових імен комп'ютерним програмам, що полягає в додаванні до імені символу «+» для позначення поліпшень. Згідно Страуструпу, «ця назва указує на еволюційну природу змін Cі». Виразом «С+» називали ранішню, не пов'язану з Сі++, мову програмування.
У 1949 році у Філадельфії (США) під керівництвом Джона Мочлі був створений "Стислий код" - перший примітивний інтерпретатор мови програмування. У 1951 році у фірмі Remington Rand американська програмістка Грейс Хоппер розробила першу транслюючи програму, що називалася компілятором (compiler - компоновщик). У 1957 році у штаб-квартирі фірми IBM на Медісон-авеню у Нью-Йорку з'явилася перша повна мова Фортран (FORmula TRANslation - трансляція формул). Групою розробників керував тоді відомий 30-річний математик Джон Бекус. Фортран - це перша із "дійсних" мов високого рівня.
Далі, у 1972 році 31-літній фахівець із системного програмування фірми Bell Labs Денніс Рітчі розробив мову програмування Сі. У 1984 році французький математик та саксофоніст Филип Кан засновує фірму Borland International. Далі з'явився діалект мови Сі фірми Borland.
На початку Сі була розроблена як мова для програмування в операційній системі Unix. Незабаром він став поширюватися для програмістів-практиків. Наприкінці 70-х були розроблені транслятори Сі для мікроЕОМ операційної системи СР/M. Після появи IBM PC стали з'являтися і компілятори мови Сі (для таких комп'ютерів їх зараз декілька десятків). У 1983 р. американський Інститут Стандартів (ANSI) сформував Технічний Комітет X3J11 для створення стандарту мови Сі. На сьогодні мова Сі++, що з'явилася як послідовник Сі, підпорядковується більшості вимог стандарту.
В 1998 році мова Сі++ була стандартизована Міжнародною організацією стандартизації під номером 14882:1998— Мова Програмування Сі++. В даний час робоча група МОС працює над новою версією стандарту під кодовою назвою C++09 (раніше відомий як C++0X), який має вийти в 2009 році.
Стандарт Сі++ на 1998 рік складається з двох основних частин: ядра мови і стандартної бібліотеки. Стандартна бібліотека Сі++ увібрала в себе бібліотеку шаблонів STL, що розроблялася одночасно із стандартом. Зараз назва STL офіційно не вживається, проте в кругах програмістів на Сі++ ця назва використовується для позначення частини стандартної бібліотеки, що містить визначення шаблонів контейнерів, ітераторів, алгоритмів і функторів.
Стандарт Сі++ містить нормативне посилання на стандарт Сі від 1990 року і не визначає самостійно ті функції стандартної бібліотеки, які запозичуються із стандартної бібліотеки Сі.
Поза тим, існує величезна кількість бібліотек Сі++, котрі не входять в стандарт. У програмах на Сі++ можна використовувати багато бібліотек Сі.
Стандартизація визначила мову програмування Сі++, проте за цією назвою можуть ховатися також неповні, обмежені достандартні варіанти мови. Спочатку мова розвивалася поза формальними рамками, спонтанно, у міру завдань, що ставилися перед ним. Розвиток мови супроводив розвиток кросс-компілятора Cfront. Нововведення в мові відбивалися в зміні номера версії кросс-компілятора. Ці номери версій кросс-компілятора розповсюджувалися і на саму мову, але стосовно теперішнього часу мову про версії мови Сі++ не ведуть.
За своїм змістом Сі, перш за все, є мовою функцій. Програмування на Сі здійснюється шляхом опису функцій і звертання до бібліотек (бібліотечних функцій). Більшість функцій повертають деякі значення, що можуть використовуватися в інших операторах.
Сі++ продовжує розвиватися, щоб відповідати сучасним вимогам. Одна з груп, що займаються мовою Сі++ в її сучасному вигляді і що направляють комітету зі стандартизації Сі++ поради з її поліпшення,— це Boost. Наприклад, один з напрямів діяльності цієї групи— вдосконалення можливостей мови шляхом додавання в неї особливостей метапрограмування.
Стандарт Сі++ не описує способи іменування об'єктів, деякі деталі обробки винятків і інші можливості, пов'язані з деталями реалізації, що робить несумісним об'єктний код, створений різними компіляторами. Проте для цього третіми особами створена безліч стандартів для конкретної архітектури і операційних систем.
Мова Сі++ багато в чому є надмножиною Сі. Нові можливості Сі++ включають оголошення у вигляді виразів, перетворення типів у вигляді функцій, оператори new і delete, тип bool, посилання, розширене поняття константності та змінності, функції, що підставляються, аргументи за умовчанням, перевизначення, простори імен, класи (включаючи і всі пов'язані з класами можливості, такі як успадкування, функції-члени (методи), віртуальні функції, абстрактні класи і конструктори), перевизначення операторів, шаблони, оператор::, обробку винятків, динамічну ідентифікацію і багато що інше. Сі++ є також мовою строгого типування і накладає більше вимагань щодо дотримання типів, порівняно з Сі.
Проте серед компіляторів Сі++ все ще продовжується битва за повну реалізацію стандарту Сі++, особливо в області шаблонів— частини мови, зовсім недавно повністю розробленій комітетом стандартизації.
Нововведеннями С++ порівняно з С:
1.Підтримка об'єктно-орієнтованого програмування через класи;
2.Підтримка узагальненого програмування через шаблони;
3.Доповнення до стандартної бібліотеки;
4.Перевантаження імен функцій;
5.Додаткові типи даних;
6.Обробка винятків;
7.Простори імен;
8.Вбудовані функції;
9.Перевантаження операторів;
10.посилання і оператори управління вільно розподіленою пам'яттю.
Переваги мови C++:
1. Швидкодія. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.
2. Масштабованість. На мові C++ розробляють програми для найрізноманітніших платформ і систем.
3. Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні, може легко перетворитися на недолік.)
4. Можливість створення узагальнених алгоритмів для різних типів даних, їхня спеціалізація, і обчислення на етапі компіляції, з використанням шаблонів.
5. Підтримуються різні стилі та технології програмування, включаючи традиційне директивне програмування, ООП, узагальнене програмування, метапрограмування (шаблони, макроси).
Розділ I. Аналіз завдання
Метою курсової роботи є закріплення теоретичних знань та практичних навичок програмування, набутих при вивченні дисциплін „Основи програмування” та „Проблемно орієнтовані мови програмування”.
В ході виконання курсової роботи студенти повинні навчитися самостійно працювати з літературою, розробляти алгоритми, здійснювати їх програмну реалізацію та від лагодження на сучасних комп‘ютерних системах.
За останні роки відбувся різкий стрибок у розвитку комп’ютерної техніки й програмного забезпечення із одночасним розширення сфер застосування персональних комп’ютерів.
Програмування являє собою комплекс по написанню системи програмних кодів, які здійснюватимуть керування тією чи іншою інформаційною системою, взаємодія з якою здійснюється через інформаційні технології.
Тема моєї курсової роботи на сьогоднішній час є актуальною, так як теперішній час – це час цифрових технологій, де важливе місце посідає обчислення числових даних, для простих інженерних обчислень практичним засобом для цього є калькулятор, виконаний в віртуальному вигляді.
Розділ IІ. Розробка алгоритму функціонування
Алгор́итм (латинізов. Algorithmi, від імені перського математика IX ст. аль-Хорезмі) — послідовність,система, набір систематизованих правил виконання обчислювального процесу, що обов'язково приводить до розв'язання певного класу задач після скінченного числа операцій. При написанні комп'ютерних програм алгоритм описує логічну послідовність операцій. Для візуального зображення алгоритмів часто використовують блок-схеми.
Дана програма складається з таких функцій:
double prim (bool get) – функція, яка служить для віднімань і додавань чисел;
double prim(bool get) – функція, яка дозволяє виконувати користувачу дії з дужками;
double expr(bool get) – функція, яка служить для додавання чисел;
int error(const string &s) – функція для помилок;
Token_value get_token() – функція, яка зчитує символи введені користувачем.
Розділ IІІ. Створення програми із описом основних функцій
Дана частина програми є основною і дає можливість працювати усім іншим функціям.
Вона складається з: оголошення бібліотек, структури меню, структури бази товарів, з циклу управління клавішами, а також виведення головного меню.
#include <iostream>
#include <string>
#include <map>
#include <cctype>
#include <sstream>
#include <conio.h>
using namespace std;
istream* input;
int no_of_errors;
map<string,double> table;
double number_value;
string string_value;
int no_of_strings=0;
enum Token_value
{
NAME,NUMBER,END,PLUS='+',MINUS='-',MUL='*',DIV='/',
PRINT=',',ASSIGN='=',LP='(',RP=')'
};
Token_value curr_tok=PRINT;
double term(bool get);
double prim(bool get);
double expr(bool get);
int error(const string &s);
Token_value get_token();
int main(int argc, char* argv[])
{
switch(argc)
{
case 1:
input=&cin;
break;
case 2:
input=new istringstream(argv[1]);
break;
default:
error("To mach parameters!!!");
return 1;
};
table ["pi"]=3.1415926535897932385;
table["e"] =2.7128272824590452354;
while(input)
{
get_token();
if(curr_tok==END)break;
if(curr_tok==PRINT)continue;
cout<<expr(false)<<'\n';
};
if(input!=&cin)delete input;
return no_of_errors;
};
Функція, яка відповідає за додавання віднімання чисел:
double expr(bool get)
{
double left=term(get);
for(;;)
{
switch(curr_tok)
{
case PLUS : left+=term(true);break;
case MINUS : left-=term(true);break;
default : return left;
};
};
};
Функція, яка дозволяє мотижити та ділити числа:
double term(bool get)
{
double left=prim(get);
for(;;)
{
switch(curr_tok)
{
case MUL : left*=prim(true);break;
case DIV : if(double d=prim(true))
{
left/=d;
break;
};
return error("DIVIZION BY ZERO");
default : return left;
};
};
};
Функція, яка користувачу вводити дії з дужками:
double prim(bool get)
{
if(get)get_token();
switch(curr_tok)
{
case NUMBER :
{
double v=number_value;
get_token();
return v;
};
case NAME :
{
double&v=table[string_value];
if(get_token()==ASSIGN)v=expr(true);
return v;
};
case MINUS : return -prim(true);
case LP :
{
double e=expr(true);
if(curr_tok!=RP)return error(") EXPECTED");
get_token();
return e;
};
default : return error("PRIMARY EXPRESSION EXPECTED");
};
};
Функція, яка дозволяє вводити дані з клавіатури:
Token_value get_token()
{
char ch=0;
do{if(!input->get(ch))return curr_tok=END;}
while(ch!='\n'&&isspace(ch));
switch(ch)
{
case 0 : return curr_tok=END;
case ':': case '*': case '/': case '+':
case '-': case '(': case ')':
case '=' :
return curr_tok=Token_value(ch);
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
case '8': case '9':
case '.' :
input->putback(ch);
*input>>number_value;
return curr_tok=NUMBER;
case ';' :
case '\n' :
no_of_strings++;
return curr_tok=PRINT;
default :
if (isalpha(ch))
{
string_value=ch;
while(input->get(ch)&&isalpha(ch))
string_value.push_back(ch);
input->putback(ch);
return curr_tok=NAME;
};
error("INCORECT WORD");
return curr_tok=PRINT;
};
};
Функція виведення повідомлення про помилку:
int error(const string &s)
{
no_of_errors++;
cerr<<no_of_strings<<" :-: ERROR:"<<s<<'\n';
return 1;
};
Розділ IV. Опис технології роботи програми
Після компіляції з’являється вікно в якому ми вводимо числа та арифметичні дії, та після натиснення клавіші “Enter” отримаємо відповідь:
Мал. 1 – головне меню програми
В програмі реалізована можливість обчислень виразів з числом PI та виведення його значення на екран. Для цього потрібно в консольному вікні ввести “pi”:
Мал. 2 – виведення числа PI
Також користувачу доступно вводити великі вирази із дужками і отримувати вірну відповідь:
Мал. 3 – введення виразів з дужками
Висновки
Під час розробки програми мною були засвоєні основні функції мови C++. Створивши програму-калькулятор, я здійснив можливість користувачу виконувати в ній основні дії. В програмі застосовані способи та прийоми роботи з вказівниками та різноманітними функціями. Основна задача полягає у виконанні елементарних арифметичних дій, виведення таких констант як PI та експоненти, виконання дій з ними. Дана програма дозволяє зручно виконувати дії використовуючи дужки. Використовувати її можна у будь яких організаціях.
Також неможна не згадати, що завдяки написанню даної курсової роботи я отримав хороший практичний досвід у використанні функцій програмування.
Перелік використаної літератури
1. Стефенс Д.Р.С++.Сборник рецептов. – КУДИЦ-ПРЕСС, 2007. – 624 с. – ISBN 5-91136-0306
2. К. Джамаса. Учимся програмировать на языке С++: Пер. С англ.. – Москва: Мир, 1997. 320с.
3. Шпак З.Я. Програмування мовою С –Львів: Оріяна-Нова, 2006 р.-432с.
4. С++, Культин Н.Б, СПб:БХВ-Петербург, 2005г. 288с.
5. Герберт Шилдт. Полный справочник по С++=С++:The Complete
6. Reference. – 4-е изд. – М. Вильямс, 2006. – 800с. ISBN 0-07-2226803
Додаток. Лістинг програми мовою С
#include <iostream>
#include <string>
#include <map>
#include <cctype>2
#include <sstream>
#include <conio.h>
using namespace std;
istream* input;
int no_of_errors;
map<string,double> table;
double number_value;
string string_value;
int no_of_strings=0;
enum Token_value
{
NAME,NUMBER,END,PLUS='+',MINUS='-',MUL='*',DIV='/',
PRINT=',',ASSIGN='=',LP='(',RP=')'
};
Token_value curr_tok=PRINT;
double term(bool get);
double prim(bool get);
double expr(bool get);
int error(const string &s);
Token_value get_token();
int main(int argc, char* argv[])
{
switch(argc)
{
case 1:
input=&cin;
break;
case 2:
input=new istringstream(argv[1]);
break;
default:
error("To mach parameters!!!");
return 1;
};
table ["pi"]=3.1415926535897932385;
table["e"] =2.7128272824590452354;
while(input)
{
get_token();
if(curr_tok==END)break;
if(curr_tok==PRINT)continue;
cout<<expr(false)<<'\n';
};
if(input!=&cin)delete input;
return no_of_errors;
};
double expr(bool get)
{
double left=term(get);
for(;;)
{
switch(curr_tok)
{
case PLUS : left+=term(true);break;
case MINUS : left-=term(true);break;
default : return left;
};
};
};
double term(bool get)
{
double left=prim(get);
for(;;)
{
switch(curr_tok)
{
case MUL : left*=prim(true);break;
case DIV : if(double d=prim(true))
{
left/=d;
break;
};
return error("DIVIZION BY ZERO");
default : return left;
};
};
};
double prim(bool get)
{
if(get)get_token();
switch(curr_tok)
{
case NUMBER :
{
double v=number_value;
get_token();
return v;
};
case NAME :
{
double&v=table[string_value];
if(get_token()==ASSIGN)v=expr(true);
return v;
};
case MINUS : return -prim(true);
case LP :
{
double e=expr(true);
if(curr_tok!=RP)return error(") EXPECTED");
get_token();
return e;
};
default : return error("PRIMARY EXPRESSION EXPECTED");
};
};
Token_value get_token()
{
char ch=0;
do{if(!input->get(ch))return curr_tok=END;}
while(ch!='\n'&&isspace(ch));
switch(ch)
{
case 0 : return curr_tok=END;
case ':': case '*': case '/': case '+':
case '-': case '(': case ')':
case '=' :
return curr_tok=Token_value(ch);
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
case '8': case '9':
case '.' :
input->putback(ch);
*input>>number_value;
return curr_tok=NUMBER;
case ';' :
case '\n' :
no_of_strings++;
return curr_tok=PRINT;
default :
if (isalpha(ch))
{
string_value=ch;
while(input->get(ch)&&isalpha(ch))
string_value.push_back(ch);
input->putback(ch);
return curr_tok=NAME;
};
error("INCORECT WORD");
return curr_tok=PRINT;
};
};
int error(const string &s)
{
no_of_errors++;
cerr<<no_of_strings<<" :-: ERROR:"<<s<<'\n';
return 1;
};
Додаток ІІ. Диск з електронним варіантом програми