Програма "Калькулятор"

Розробка програми "Калькулятор" для 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

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