Калькулятор різних систем числення

Розробка програми калькулятора, що може виконувати найголовніші арифметичні операції над двома числами. Вимоги до апаратного і програмного забезпечення. Опис форм та компонентів програми. Розробка алгоритмів програмного забезпечення. Опис коду програми.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 31.05.2013
Размер файла 57,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ЗМІСТ

ТЕХНІЧНЕ ЗАВДАННЯ

ВТСУП

1. АНАЛІЗ ІСНУЮЧИХ ПРОГРАМНИХ РІШЕНЬ

2. ВІДОМОСТІ ПРО ПРОГРАМУ

2.1 Вимоги до апаратного і програмного забезпечення

2.2 Опис форм та компонентів програми

2.3 Розробка алгоритмів програмного забезпечення

2.4 Опис коду програми

3. ТЕСТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ

4. ІНСТРУКЦІЯ З ЕКСПЛУАТАЦІЇ

ВИСНОВКИ

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

ДОДАТКИ

Технічне завдання

Основним завданням роботи є розробка програми, калькулятора, що може виконувати найголовніші арифметичні операції (множення, ділення, віднімання та додавання) над двома числами. Головною умовою задачі є можливість вибирати систему числення для чисел, над якими будуть виконуватись математичні операції. Повинна бути реалізована можливість роботи з числами: двійкової, вісімкової, десяткової та шіснадцяткової системи числення.

Для написання даної програми використовувалось середовище візуального програмування - C ++ Builder 6 .

ВСТУП

У повсякденному житті кожна людина стикається з різними числами і різні числа мають свою систему числення. Саме системою числення називають сукупність прийомів запису чисел.

У повсякденному житті ми, як правило, користуємося десятковою системою числення. Але це лише одна з багатьох систем, яка отримала своє поширення, ймовірно, з тієї причини, що в людини на руках 10 пальців. Однак ця система не завжди зручна. Так, в обчислювальній техніці застосовується двійкова система числення.

Існують також дуже багато різних систем числення, які актуальні у повсякденні. У різні історичні періоди розвитку людства для підрахунків і обчислень використовувалися ті або інші системи числення. Наприклад, досить широко була поширена дванадцяткова система, яка збереглася і до нині в англійській системі мір (наприклад, 1 фут = 12 дюймам) і в грошовій системі (1 шилінг = 12 пенсам).

У стародавньому Вавілоні існувала дуже складна шістдесяткова система. Вона, як і двенадцятирічня система, в якійсь мірі збереглася і до наших днів (наприклад, в системі виміру часу: 1 година = 60 хвилин, 1 хвилина = 60 секундам, аналогічно в системі виміру кутів: 1 градус = 60 хвилинам, 1 хвилина = 60 секундам). Також вона широко використовується в сучасних комп'ютерах, наприклад за допомогою неївказується колір: #FFFFFF -- білий колір

Системи числення можнарозділити на позиційні та непозиційні.

Непозиційна - це найстародавніша система, в ній кожна цифра числа має величину, не залежну від її позиції (розряду). Прикладом непозиційної системи числення є так звані римські цифри. У цій системі смисл кожного символу незалежить від місця, на якому він стоїть. Так запис LXXX позначає число 80. Символ X має значення 10 незалежно від його місця у запису.

Позиційна система - система числення, в якій значення кожної цифри залежить від її позиції (розряду) в числі.

В рамках даної курсової роботи поставлено завдання написати програму, яка б могла виконувати найголовніші арифметичні операції над двома числами, з різними позиційними системами числення. Програма повинна забезпечувати можливість вибору введення 4 систем числення: двійкової, вісімкової, десяткової та шіснадцяткової, та можливість вибору системи числення результату. Розробка програми буде вестись в середовищі програмування C++.

Програма може використовуватись в різних галузях. Її можуть використовувати як студентами так і викладачами, так і звичайні люди для вирішення особистих, конкретних задач.

1. АНАЛІЗ ІСНУЮЧИХ ПРОГРАМНИХ РІШЕНЬ

Проаналізувавши існуючі програмні рішення, конкретної програми, яка могла б виконувати саме арифметичні операції над числами з різними системами числення та можливістю вибору системи числення результату операції - виявлено не було. Існують калькулятори, які передбачають додаткову можливість використання різних систем числення, однак зазвичай їхній інтерфейс дуже складний у використанні. Також існують різні програми, які лише переводять числа із однієї системи в іншу, однак ніяких операцій над ними виконувати не можна.

Тому було прийнято рішення про створення програми, яка була б призначена саме для конкретної задачі, дотримуючись мінімалізму та інтуїтивної зрозумілості інтерфейсу.

2. ВІДОМОСТІ ПРО ПРОГРАМУ

Розробка програми курсового проекту виконувалась у середовищі візуального програмування С++ Builder 6. Дана програмаотрималаназву - CalcNotation.

2.1 Вимоги до апаратного і програмного забезпечення

програма калькулятор арифметичний код

Програма CalcNotation у робочому стані споживає 3,5 Мб оперативної пам'яті. Програма може працювати в операційних система сім'ї Windowsне нижчеверсіїWindows2000. Робота програми тестувалась в операційних системах WindowsXPтаWindows7 (32-бітна версія). Для коректної роботи програми необхідно:

ОС: Windows 2000 і вище;

Процесор з тактової частотою1.0 ГГц або вище;

Оперативна пам'ять: мінімально 256 Мб;

Відеокарта: мінімально 32 Мб.

Для редагування коду програми на компьютері користувача має буде встановлено середовище візуального програмуванняBorland С++ Builder 6.

2.2 Опис форм та компонентів програми

ПрограмаCalcNotation містить у собі однуформу Form1,головна форма програми на якій виконуються всі дії (рис.1);

Рис. 1 Головна форма програми

Компоненти що використовувалися у розробці даної програми :

- Edit1, Edit2 - використовується для вводу чисел, над якими потрібно виконати дії. А Edit3 використовується для виводу результату.

- ComboBox1, ComboBox2, ComboBox3 - використовується для вибрання системи числення.

- Button1, Button2, Button3, Button4 - за їх допомогою, вибираються операції, які необхідно здійснити. За допомогою компонента Button5, усі поля (Edit1, Edit2, Edit3) очищаються, а Button6 - зачиняє програму.

- Label1, Label2 - позначають число, а Label3 - позначає відповідь.

2.3 Розробка алгоритмів програмного забезпечення

Після обрання систем числення чисел, та введення чисел, програма переверіє, чи коректні введені дані. Далі іде перевірка, чи введені дані відповідають обраній системі числення. Також перевіряється, чи не було введено від'ємне число. У разі введення некоректних даних, на екран з'являється повідомлення, про те що данні введені не коректно. Закривши повідомлення, курсор знаходиться в тому місці, де відредагувати неправильно введені дані. У разі якщо всі дані введено правильно, кнопки для вибору арифметичної операції, яку потрібно здійснити над числами, стають активними.

Після вибору арифметичної операції, програма вираховує і передає результат до вікна відповіді. У випадку якщо під час ділення, виконується ділення на 0, то користувачу випливає характерне вікно, що дану операцію виконати, неможливо. Також на випадок, коли під час віднімання друге число більше, то результат буде показано в десятковій системі числення, а також буде прибрана можливість вибору системи числення відповіді.

Виконавши весь алгоритм і отримавши відповідь, користувач може завершити програму, натиснувши «Закрыть», або ж, почати всю процедуру спочатку натиснувши кнопку «Заново»

Більш детально та наочно зрозуміти, можна подивившись на блок-схему програми, яку наведено в Додатку Б.

2.4 Опис коду програмного забезпечення

//Ініціалізація компонентуComboBox

void TForm1::_initComboBox(TComboBox *_comboBox){

_comboBox->Items->Add("bin");

_comboBox->Items->Add("oct");

_comboBox->Items->Add("dec");

_comboBox->Items->Add("hex");

_comboBox->ItemIndex = 0;

m_curNumeralSystem.insert(std::make_pair(_comboBox,NS_BIN));

}

//Зміна системи числення в ComboBox

void TForm1::_changeComboBoxNumeralSystem(TComboBox *_comboBox ,NumeralSystem ns){

if(ns == m_curNumeralSystem[_comboBox]){

return;

}

AnsiString s = m_association[_comboBox]->Text;

char *editStr = new char[s.Length()];

strcpy(editStr,s.c_str());

if( strlen(editStr) != 0 ){

char temp[256];

int digit = _getDigit(editStr,m_curNumeralSystem[_comboBox]);

_convertIntToStr(digit,ns,temp);

m_association[_comboBox]->Text = temp;

}

_comboBox->ItemIndex = ns;

m_curNumeralSystem[_comboBox] = ns;

delete[] editStr;

}

//ОтриманняComboBoxпривязувань до даногоeditBox

TComboBox* TForm1::_getCurComboBox(TEdit* editBox){

for (std::map<TComboBox*,TEdit*>::iterator it = m_association.begin();

it != m_association.end(); ++it)

{

if(it->second == editBox){

return it->first;

}

}

return NULL;

}

//Отримання значенняeditBox

int TForm1::getDigitFromEditBox(TEdit* edit){

AnsiString s = edit->Text;

char *editStr = new char[s.Length()];

strcpy(editStr,s.c_str());

if( strlen(editStr) != 0 ){

return _getDigit(editStr,m_curNumeralSystem[_getCurComboBox(edit)]);

}

return 0;

}

// Задати значення в editBox , система числення береться та, яка стоїть в

// ComboBox

int TForm1::setDigitToEditBox(int digit,TEdit* editBox){

char temp[256];

TComboBox* _comboBox = _getCurComboBox(editBox);

if(digit < 0){

_changeComboBoxNumeralSystem(_comboBox,NS_DEC);

_comboBox->Enabled = false;

_convertIntToStr(abs(digit),m_curNumeralSystem[_comboBox],temp);

char result[256];

sprintf(result,"-%s",temp);

m_association[_comboBox]->Text = result;

] }

else{

_convertIntToStr(digit,m_curNumeralSystem[_comboBox],temp);

m_association[_comboBox]->Text = temp;

_comboBox->Enabled = true;

}

}

//

void __fastcall TForm1::FormCreate(TObject *Sender)

{

editBox1IsCorrect = true;

editBox2IsCorrect = true;

_initComboBox(ComboBox1);

_initComboBox(ComboBox2);

_initComboBox(ComboBox3);

m_association.insert(std::make_pair(ComboBox1,Edit1));

m_association.insert(std::make_pair(ComboBox2,Edit2));

m_association.insert(std::make_pair(ComboBox3,Edit3));

}

// При будь-яких змінах в компонентах editBox, робиться їх перевірка на

// правильність вводу даних

void __fastcall TForm1::Edit1Change(TObject *Sender)

{

TEdit* editBox = (TEdit*) Sender;

if(editBox == Edit3)

return;

TComboBox* comboBox = (TComboBox*) _getCurComboBox(editBox);

bool allGood = false;

AnsiString s = m_association[comboBox]->Text;

char *editStr = new char[s.Length()];

strcpy(editStr,s.c_str());

if(comboBox->ItemIndex == 0){ //двійкова система числення

allGood = _correctDigitInBinSystem(editStr);

}else if(comboBox->ItemIndex == 1){ //вісімкова система числення

allGood = _correctDigitInOctSystem(editStr);

}else if(comboBox->ItemIndex == 2){ //десяткова система числення

allGood = _correctDigitInDecSystem(editStr);

}else if(comboBox->ItemIndex == 3){ //шіснадцяткова система числення

allGood = _correctDigitInHexSystem(editStr);

}

// Якщо вхідні дані введені не вірно, то фокусуєтьсяeditBox з невірними даними

if(! allGood){

MessageBox(NULL,"Не правильно введено число","Ошибка!",0);

// У разі якщо дані введено не вірно, то на екран з'явиться повідомлення про

// помилку

comboBox->Enabled = false;

}else{

comboBox->Enabled = true;

}

if( editBox == Edit1){

editBox1IsCorrect = allGood;

}else{

editBox2IsCorrect = allGood;

}

// Виконання арифметичних операцій, робиться доступними

// лише якщо в поля, все введено правильно

setEnableMathOperation(editBox1IsCorrect && editBox2IsCorrect);

delete[] editStr;

}

// Задає доступність (фокус) кнопок з арифметичними операціями для

// користувача

void TForm1::setEnableMathOperation(bool enable){

Button1->Enabled = enable;

Button2->Enabled = enable;

Button3->Enabled = enable;

Button4->Enabled = enable;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBox1Change(TObject *Sender)

{ TComboBox* comboBox = (TComboBox*)Sender;

_changeComboBoxNumeralSystem(comboBox,comboBox->ItemIndex);

}

//---------------------------------------------------------------------------

// Дивлячись яку операцію вибрав користувач за допомогою кнопки, така

// операція і буде виконуватися між двома числами

void __fastcall TForm1::Button1Click(TObject *Sender)

{

TButton* button = (TButton*) Sender;

int digit1 = getDigitFromEditBox(Edit1);

int digit2 = getDigitFromEditBox(Edit2);

switch (button->Caption[1]){

case '+' :

_changeComboBoxNumeralSystem(ComboBox3,NS_DEC);

setDigitToEditBox(digit1 + digit2,Edit3);

break;

case '-' :

if( digit1 < digit2 ){

_changeComboBoxNumeralSystem(ComboBox3,NS_DEC);

ComboBox3->Enabled = false;

setDigitToEditBox(digit1 - digit2,Edit3);

}else{

setDigitToEditBox(digit1 - digit2,Edit3);

}

break;

case '*' :

_changeComboBoxNumeralSystem(ComboBox3,NS_DEC);

setDigitToEditBox(digit1 * digit2,Edit3);

break;

case '/' :

// У разі якщо під час ділення, друге число буде дорівнювати нулю,

// то на екран зявиться повідомлення про помилку

if( digit2 == 0 ){

MessageBox(NULL,"Деление на ноль!","Ошибка!",0);

}else{

setDigitToEditBox(digit1 / digit2,Edit3);

}

break;

};

}

3. ТЕСТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ

Розроблена програма, при запусканні на ОС MicrosoftWindowsXP та Windows 7, не видає ніяких помилок і запускається без жодних проблем.Був проведений ретельний процес тестування. Виконувався комплекс вправ для перевірки працездатності програми за будь-яких умов. При виконанні різних арифметичних операцій над числами в різних системах числення, проблем не було виявлено. Однак програма зачинялась з критичною помилкою, при діленні числа на нуль. Але дану проблемо було вирішено, тепер при спробі розділити число на нуль, на екран з'являється повідомлення, що розділити число на нуль, неможливо. Вікно з повідомленням зображено на рис.2. Завдяки цьому, користувач після закриття вікна натиснувши кнопку «ОК», може спокійно продовжувати роботу з програмою. Повторно протестувавши програму, більше ніяких проблем виявлено не було.

Рис. 2Вікно з повідомлення

4. Інструкція з експлуатації

Інтерфейс розробленої програми CalcNotation, зображений в Додатку А,вінмає зрозумілий та мінімалістичний характер.

Для використання програми, необхідно, насамперед, вибрати систему числення, над якими потрібно працювати: двійкову, вісімкову, десяткову чи шіснадцяткову. Для зручності у програмі вони маютьскорочені англійські позначення: “bin” - двійкова система числення, “oct” - вісімкова, “dec” - десяткова система тавідповідно “hex” - шіснадцяткова. Для того щоб їх обрати, необхідно біля поля вводу, куди вводяться числа, натиснути на випадаюче меню (за замовченням одразу обрано двійкову).

Вибравши систему числення, слід ввести числа, над якими потрібно виконати операції. Число 1 - буде знаходитись першим, потім арифметична операція, а далі число 2. Числа потрібно вводити, в залежності від обраної системи числення.У разі введення 10-ї системи числення у поле де вибрано 2-ву, користувач отримає вікно з повідомленням, що не вірно введено число.Також усі числа над якими необхідно виконати операцію, повинні бути додатніми, інакше на екран буде також виведено повідомлення.

Після введення чисел, необхідно вибрати арифметичну операцію, яку необхідно між ними виконати, після чого відповідь одразу буде показана у полі «Ответ». Якщо відповідь від'ємна, то вона буде відображатись особливим виглядом. Наприклад у випадку якщо число 2 більше за число 1 і прицьому вибратиоперацію віднімання, то від'ємний результат який внаслідок отримається, буде відображений в 10-й системі числення і змінити на іншу систему буде неможливим.

Якщо після виконання операції, необхідно повторити процедуру, то необхідно натиснути кнопку «Заново», після чого всі поля очистяться, а системи числення оберуться за замовчуванням. Завдяки чому можна користуватися програмою знову.

Коли всі операції, які необхідно було зробити завершені й програма вже не потрібна, то завдяки натисненню кнопки «Закрыть», програма зачиняється.

ВИСНОВОК

програма калькулятор арифметичний код

ПрограмаCalcNotationдуже проста у використанні і може бути корисною як для школярів чи студентів, так і для викладачів.

В майбутньому в програму можливо додати нові можливості, наприклад: нові арифметичні операції, можливість працювати з більшою кількістю чисел, додати інші системи числення та багато інших нововведень. На даний момент таких рішень в програмі не передбачалось в силу стислих термінів робити і недостатнього досвіду роботи.

Размещено на Allbest.ru


Подобные документы

  • Дослідження та аналіз об’єкту програмування. Основні архітектурні риси JavaScript. Переваги CSS розмітки. Структура HTML-документа. Вимоги до апаратного та програмного забезпечення. Опис програми та її алгоритмів. Оцінка вартості програмного продукту.

    дипломная работа [1,0 M], добавлен 01.09.2016

  • Загальний опис алгоритмів головної програми та процедур запису і зчитування повідомлень на рівні блок-схем, детальний опис розробленої програми на рівні програмного коду. Характеристика процедури відображення стану регістрів. Опис екранних форм програми.

    курсовая работа [552,5 K], добавлен 09.06.2010

  • Аналіз системи збору первинної інформації та розробка структури керуючої ЕОМ АСУ ТП. Розробка апаратного забезпечення інформаційних каналів, структури програмного забезпечення. Алгоритми системного програмного забезпечення. Опис програмних модулів.

    дипломная работа [1,9 M], добавлен 19.08.2012

  • Теоретичні відомості про язик С++. Розробка програми, що виконує основні арифметичні дії над простими та складними числами на язику С++. Опис алгоритму програми та її код. Інструкція по користуванню. Обгрунтовування вибору та складу технічних засобів.

    курсовая работа [852,8 K], добавлен 30.11.2011

  • Аналіз технічного забезпечення, вибір інструментального програмного забезпечення та середовища розробки програм. Створення класів для реалізації необхідних функцій для роботи програмного засобу. Розробка інтерфейсу для користувача та лістинг програми.

    курсовая работа [343,9 K], добавлен 24.08.2012

  • Огляд існуючих методів розробки компіляторів, детальний опис мови. Характеристика та специфіка процесу розробки програми компілятора на рівні блок-схем і тексту програми. Подання тексту компілятора, а також результатів тестування розробленої програми.

    курсовая работа [510,2 K], добавлен 03.06.2011

  • Розв’язання нелінійних алгебраїчних рівнянь методом хорд. Опис структури програмного проекту та алгоритмів розв’язання задачі. Розробка та виконання тестового прикладу. Інші математичні способи знаходження коренів рівнянь, та опис виконаної програми.

    курсовая работа [4,1 M], добавлен 28.09.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.