Програма "Калькулятор"
Розробка програми "Калькулятор" для Windows за допомогою ітераційної моделі, при використанні якої не вимагається одразу повністю писати готову закінчену програму. Аналіз вимог. Опис системної архітектури. Етапи реалізації та тестування готової програми.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | украинский |
Дата добавления | 24.02.2012 |
Размер файла | 19,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Мiнiстерство освіти і науки, молоді та спорту України
Тернопільський національний технічний університет імені Івана Пулюя
Факультет комп'ютерно-інформаційних систем і програмної інженерії
Кафедра програмної інженерії
ЗВІТ
з проекту Програма «Калькулятор»
з дисципліни «Програмна інженерія»
Підготував:
студент групи СП-11
Гой Андрій Андрійович
Тернопіль 2011
В розробці цього проекту використовували ітераційну модель. Основна ідея ітераційної моделі розробки ПЗ є те що при її використані не вимагається одразу повністю писати готову закінчену програму. ЇЇ реалізацію можна виконувати поступову(ітераційно) отримуючи на кожній ітерації готовий робото здатний продукт,який все ближче наближається до кінцевого продукту, що задовольняє замовника.
Размещено на http://www.allbest.ru/
Постановка задачі
Розробити калькулятор для WINDOWS
І ітерація
Аналіз вимог
1)Виконувати операції -,+,*,\
2)Для заданих операндів
3)Ввід знаку оперіції
4)Вивід результату
Системна архітектура
Algorithm Calc
a=some value
b=some value
do
input sign
switch sign
case `+': result=a+b
case `-`: resukt=a-b
case `*': result=a*b
case `/': result=a/b
case `e': return
default p=1
if p==1 then
output error
p=0
else
output result
while(1)
Реалізація
#include"iostream"
using namespace std;
void main(){
double a=10,b=3,result=0,p=0;
char q='z';
do{
cout<<"\ninput sign for operation -,/,+,*,e-for exit\n";
cin>>q;
switch (q){
case '+': result=a+b; break;
case '-': result=a-b; break;
case '*': result=a*b; break;
case '/': result=a/b; break;
case 'e': return;
default: p=1;}
if(p==1){
cout<<"error";
p=0;}
else
cout<<result;}
while (1);}
Тестування
a |
b |
Знак |
eталон |
отримане |
тест |
|
10 |
3 |
+ |
13 |
13 |
+ |
|
10 |
3 |
- |
7 |
7 |
+ |
|
10 |
3 |
* |
30 |
30 |
+ |
|
10 |
3 |
/ |
3,3333 |
3,3333 |
+ |
|
10 |
3 |
Е |
exit |
exit |
+ |
|
10 |
3 |
= |
error |
error |
+ |
Атестація системи
Система пройшла всі тести успішно. Продукт робото здатний .
ІІ ітерація
Аналіз вимог
1)Можливість вводу цілого виразу
2)Можливість відображення виразу
Системна архітектура
Algorithm Calc
a=some value
b=some value
do
input a sign b
switch sign
case `+': result=a+b
case `-`: resukt=a-b
case `*': result=a*b
case `/': result=a/b
default p=1
if p==1 then
output error
p=0
else
output a sign b=result
while(1)
Реалізація
#include<iostream>
#include<locale>
using namespace std;
void main(){
float a=0,b=0,result=0,p=0;
char q;
setlocale(LC_ALL,"Russian");
do {
system("cls");
cout<<"введiть значення цифр i дiю мiж ними(2+1)\n";
cin>>a>>q>>b;
system("cls");
cout<<"введiть значення цифр i дiю мiж ними(2+1)\n";
switch (q){
case '+': result=a+b; break;
case '-': result=a-b; break;
case '*': result=a*b; break;
case '/': result=a/b; break;
default: p=1;}
if(p==1){
cout<<"error";
p=0;}
else
cout<<a<<q<<b<<"="<<result<<endl;
system("pause");}
while (1);}
Тестування
a |
b |
знак |
eталон |
отримане |
тест |
|
52,3 |
6,3 |
+ |
58,6 |
58,6 |
+ |
|
42 |
15,74 |
- |
26,26 |
26,26 |
+ |
|
32,3 |
2,4 |
* |
77,52 |
77,52 |
+ |
|
37 |
4,2 |
/ |
8,80952 |
8,80952 |
+ |
|
32 |
12 |
= |
error |
error |
+ |
Атестація системи
Система пройшла всі тести успішно. Продукт робото здатний .
III ітерація
Аналіз вимог
1)Остача від ділення двох виразів
2)Можливість обчислення довгих виразів
3)Можливість розділення операцій і операндів
4)Можливість запам'ятовування результату вводу чисел
Системна архітектура
Algorithm Calc
result=0
operation=empty
do
input string
if (string not number)
operation=string
else
if(operation==empty)
result=string
else
switch operation
case `+': result=result+string
case `-`: resukt=result-string
case `*': result=result*string
case `/': result=result/string
case `%' result=result mod string
default p=1
if p==1 then
output error
p=0
else
operation=empty
output result
while(1)
Реалізація
#include"iostream"
#include"math.h"
#include"locale"
using namespace std;
void main(){
double result=0,p,k;
char q='z',sing[15];
setlocale(LC_ALL,"Russian");
cout<<"operation +,-,/,* %-for the remainder\n";
do{
gets_s(sing);
k=atof(sing);
if(k==0)
q=sing[0];
else
if(q=='z')
result=atof(sing);
else{
switch (q){
case '+': result+=k; break;
case '-': result-=k; break;
case '*': result*=k; break;
case '/': result/=k; break;
case '%': result=fmod(result,k); break;
default: p=1;}
q='z';
if(p==1) {cout<<"error";
p=0;}
else
cout<<result<<endl;}}
while (1);
}
Тестування
Вираз |
Еталон |
отримане |
тест |
|
(3+5)/3,4*2 |
4,7058 |
4,7058 |
+ |
|
(5*2+3-15)mod(3)*2,4 |
4,8 |
4,8 |
+ |
|
23,4+3 і 28*2 |
26,4 i 56 |
26,4 i 56 |
+ |
|
54,4*23/32$33 |
Error |
error |
+ |
|
(32,2+3)*34,23/23 |
52,3868 |
52,3868 |
+ |
Атестація системи
калькулятор програма системний тестування
Система пройшла всі тести успішно. Продукт робото здатний .
IV ітерація
Аналіз вимог
1)Додати степінь
2)Вихід з програми
3)Вивід виразу який обчислюється, реалізація деяких математичних функцій
4)Запам'ятовування введеної операцій і операндів
Системна архітектура
Algorithm Calc
result=0
operation=empty
do
input string
if string=exit
exit
if sting=`=`
output history
history=string
if (string not number and langht=1)
operation=string
else
if(operation==empty)
result=string
else
if string is function
result=function(string)
else
history=delete wrong
else
switch operation
case `+': result=result+string
case `-`: resukt=result-string
case `*': result=result*string
case `/': result=result/string
case `%' result=result mod string
case `^`: result=result^string
else
operation=empty
output result
while(1)
Реалізація
#include"iostream"
#include"math.h"
using namespace std;
void main(){
double result=0,p,k;
char q='z',sing[15],history[255];
history[0]='\0';
cout<<"operation +,-,/,*,^ %-for the remainder exit ,sin,cos,tg,ctg,ln =--for history\n";
do{
gets_s(sing);
k=atof(sing);
if(sing[0]=='='){
cout<<history<<"="<<result<<endl;
history[0]='\0';
q='z';
gets_s(sing);
result=atof(sing);
strcat_s(history,sing);}
strcat_s(history,sing);
if(strcmp("exit",sing)==0)
break;
if(k==0)
if(strlen(sing)==1)
q=sing[0];
else
if(strcmp("sin",sing)==0)
result=sin(result);
else
if(strcmp("cos",sing)==0)
result=cos(result);
else
if(strcmp("tg",sing)==0)
result=tan(result);
else
if(strcmp("ctg",sing)==0)
result=1/(tan(result));
else
if(strcmp("ln",sing)==0)
result=log(result);
else{
history[strlen(history)-strlen(sing)]='\0';
if(q!='z'){
history[strlen(history)-1]='\0';
q='z';}}
else
if(q=='z')
result=atof(sing);
else{
switch (q){
case '+': result+=k; break;
case '-': result-=k; break;
case '*': result*=k; break;
case '/': result/=k; break;
case '^': result=pow(result,k);break;
case '%': result=fmod(result,k); break;
default: p=1;}
q='z';}}
while (1);}
Тестування
введений вираз |
вивід на екран |
Eталон |
результат |
тест |
|
(123sin*234)cos |
123sin*234cos |
0,69436 |
0,69436 |
+ |
|
(12tg*23)ctg |
12tg*23ctg |
0,530324 |
0,69436 |
+ |
|
12ln*32.34 |
12ln*32,34 |
80,369 |
80,369 |
+ |
|
12/sd*3/234 |
12*3/234 |
0,153846 |
0,153846 |
+ |
|
(12-3)*2/23+3,3 |
12-3*2/23+3,3 |
4,08261 |
4,08261 |
+ |
Атестація системи
Система пройшла всі тести успішно. Продукт робото здатний.
V ітерація
Аналіз вимог
1)Можливість задання пріоритетів операцій за допомогою дужок
Системна архітектура
Algorithm Calc
double function calc(reason)
result=0
operation=empty
do
input string
if string=reason
return result
if string=`(`
string=calc(`)`)
history=string
if (string not number and lеnght=1)
operation=string
else
if(operation==empty)
result=string
else
if string is function
result=function(string)
else
history=delete wrong
else
switch operation
case `+': result=result+string
case `-`: resukt=result-string
case `*': result=result*string
case `/': result=result/string
case `%' result=result mod string
case `^`: result=result^string
else
operation=empty
while(1)
do
history=empty
reselt=calc(`=`)
output history=result
while(1)
Реалізація
#include"iostream"
#include"math.h"
char history[255];
using namespace std;
double calc(char reason){
double result=0,k;
char q='z',sing[15];
do{
gets_s(sing);
k=atof(sing);
strcat_s(history,sing);
if(sing[0]==reason)
return result;
if(sing[0]=='(')
k=calc(')');
if(k==0)
if(strlen(sing)==1)
q=sing[0];
else
if(strcmp("sin",sing)==0)
result=sin(result);
else
if(strcmp("cos",sing)==0)
result=cos(result);
else
if(strcmp("tg",sing)==0)
result=tan(result);
else
if(strcmp("ctg",sing)==0)
result=1/(tan(result));
else
if(strcmp("ln",sing)==0)
result=log(result);
else{
history[strlen(history)-strlen(sing)]='\0';
if(q!='z'){
history[strlen(history)-1]='\0';
q='z';}}
else
if(q=='z')
result=atof(sing);
else{
switch (q){
case '+': result+=k; break;
case '-': result-=k; break;
case '*': result*=k; break;
case '/': result/=k; break;
case '^': result=pow(result,k);break;
case '%': result=fmod(result,k); break;}
q='z';}}
while (1);}
void main(){
double result;
cout<<"if want extit pres X"<<endl;
cout<<"operation +,-,/,*,^ %-for the remainder sin,cos,tg,ctg,ln =--for history\n"<<endl;
do{
history[0]='\0';
result=calc('=');
cout<<history<<result<<endl;
while(1);}
Тестування
вираз |
Вивід |
еталон |
отримане |
тест |
|
12+32,3/(32,5+3/(15*3)+5)+32 |
12+32,3/(32,5+3/(15*3)+5)+32 |
39,6526 |
39,6526 |
+ |
|
32,3+32,01*(43+(15,2/(12,2sin)+23,2)+12)/3 |
32,3+32,01*(43+(15,2/(12,2sin)+23,2)+12)/3 |
766.77 |
766.77 |
+ |
|
13^2+3/(12,2+3^(31,2-15,2)/13) |
13^2+3/(12,2+3^(31,2-15,2)/13) |
2,754e-16 |
2,754e-16 |
+ |
|
1+(12*(32,2/13+(13-22,2+(23-13)+3)/21)*12,34)+6 |
1+(12*(32,2/13+(13-22,2+(23-13)+3)/21)*12,34)+6 |
51,2613 |
51,2613 |
+ |
|
15,3+32/(1,2sin+1,2ctg) |
15,3+32/(1,2sin+1,2ctg) |
-75,2367 |
-75,2367 |
+ |
Атестація системи
Система пройшла всі тести успішно. Продукт робото здатний.
Специфікація системи
Може застосувавится як інженерний калькулятор для обчислень довгих виразів.
Опис зміних
double result--зміна в якій запусується результат
double k--зміна в якій записується значення стрічки
char q--зміна в якій зберігаються значення поточної операції
char sing[15]--стрічка в яку записується вираз
char history[255]--стрічка в якій запусується історія введених дій
char reason--зміна яка визначає `причину' виклику функції
Опис функцій
double calc(char reason){
double result=0,k;
char q='z',sing[15];
do{
gets_s(sing);
k=atof(sing);
strcat_s(history,sing);
if(sing[0]==reason)
return result;
if(sing[0]=='(')
k=calc(')');
if(k==0)
if(strlen(sing)==1)
q=sing[0];
else
if(strcmp("sin",sing)==0)
result=sin(result);
else
if(strcmp("cos",sing)==0)
result=cos(result);
else
if(strcmp("tg",sing)==0)
result=tan(result);
else
if(strcmp("ctg",sing)==0)
result=1/(tan(result));
else
if(strcmp("ln",sing)==0)
result=log(result);
else{
history[strlen(history)-strlen(sing)]='\0';
if(q!='z'){
history[strlen(history)-1]='\0';
q='z';}}
else
if(q=='z')
result=atof(sing);
else{
switch (q){
case '+': result+=k; break;
case '-': result-=k; break;
case '*': result*=k; break;
case '/': result/=k; break;
case '^': result=pow(result,k);break;
case '%': result=fmod(result,k); break;}
q='z';}}
while (1);}
Функція яка обчислю значення виразів які вводиться. Функція повертає значення кінцевого обчисленого виразу приймає `причину' свого виклику(`)' чи'=')відповідно до цьго завершується після вводу цьго оператор.Функція рекурсивна.
Висновок
Має можливість обчислення довгих виразів викунує всі операції (-,+,/,*,^,остача) доступні математичні функції sin cos tg ctg ln. Вивід історії вводу операторів і операндів, очищення історії ввдому після кожного вводу `='. Обмеження для вводу даних, нема оскільки після кожного вводу не коректних даних не буде виконуватися нічого, виводить не багато знаків після коми. Недоліки функція atof() повертає значення яке було до будь-яких символів крім чисел, добавити графічний інтерфейс, написати свою функцію для переводу стрічки в число, історія вводу не сприйме більше 255 символів, добавити інші математичні функції, добавити вивід даних в файл.
Размещено на Allbest.ru
Подобные документы
Розробка програми калькулятора, що може виконувати найголовніші арифметичні операції над двома числами. Вимоги до апаратного і програмного забезпечення. Опис форм та компонентів програми. Розробка алгоритмів програмного забезпечення. Опис коду програми.
курсовая работа [57,1 K], добавлен 31.05.2013Автоматизація виконання операцій на робочих місцях. Розробка програми "Арифметичний калькулятор", що буде дозволяти обраховувати різноманітні арифметичні операцій (додавання, віднімання, ділення, множення). Тестування програми і результати її виконання.
курсовая работа [226,1 K], добавлен 05.05.2014Демонстрування можливостей використання калькулятора для матриць. Розробка програми, яка може бути використана для виконання основних арифметичних операцій над матрицями та для перевірки обчислень у розрахункових роботах. Алгоритм створення програми.
курсовая работа [43,2 K], добавлен 12.12.2009Характеристика предметної області: FTP-server для ОС Windows. Шляхи встановлення FTP-серверу в ОС Windows. Опис мови та середовища програмування, компонентів та функцій програми. Аналіз реалізованої програми FTP-клієнта. Тестовий запуск та опис програми.
курсовая работа [1,7 M], добавлен 22.06.2017Правило перекладу цілих чисел з різних систем числення в будь-яку іншу. Правило переходу правильних десяткових дробів. Розробка інтерфейсу користувача. Алгоритмізація і програмування рішення задачі. Налагодження і тестування програми "Калькулятор".
курсовая работа [1022,7 K], добавлен 26.01.2013Розробка логічної гри "Тетріс" у складі набору об’єктно-орієнтованих моделей, програмного коду з використанням об’єктно-орієнтованної мови Java. Проектування архітектури гри, аналіз вимог до неї, опис реалізації, кодування та тестування програми.
курсовая работа [2,2 M], добавлен 24.10.2010Проектування архітектури гри "Тетріс". Аналіз вимог до неї. Вивчення особливостей реалізації, кодування та тестування програми. Алгоритм побудови робочого поля. Вибір мови програмування. Розробка і налагодження тексту програми. Інструкції з експлуатації.
курсовая работа [460,9 K], добавлен 04.03.2014Загальна характеристика алгоритму та опис програми. Керівництво системного програміста. Особливості запуску програми в Linux, FreeBSD, Windows. Аналіз результатів тестування програми, що проектується, вивчення та оцінка її практичної ефективності.
курсовая работа [91,4 K], добавлен 13.06.2014Формалізація моделі виробничої діяльності підприємства. Рішення за допомогою Excel. Алгоритм розрахунку моделі. Побудова моделі рішення за допомогою "С++". Знаходження оптимальної програми функціонування підприємства. Розробка коду програми.
контрольная работа [720,1 K], добавлен 12.06.2015Діаграма діяльності програми. Алгоритм програми "калькулятор". Побудова діаграм UML. Статична діаграма класів. Основні операції при обчисленні десяткового логарифму. Приклад калькулятора, що перемножує числа. Структури та типи діаграм, їх значення.
дипломная работа [241,4 K], добавлен 21.09.2010