Розроблення програмного забезпечення для розв’язання математичної задачі

Інформація про навчальний заклад

ВУЗ:
Львівський державний університет безпеки життєдіяльності
Інститут:
О
Факультет:
УІ
Кафедра:
Управління інформаційною безпекою

Інформація про роботу

Рік:
2015
Тип роботи:
Курсова робота
Предмет:
Безпека життєдіяльності
Група:
ІБ

Частина тексту файла (без зображень, графіків і формул):

Львівський державний університет безпеки життєдіяльності Кафедра управління інформаційною безпекою / КУРСОВА РОБОТА на тему: "Розроблення програмного забезпечення для розв’язання математичної задачі" з дисципліни: "Інформатика" Зміст: Вступ Основним завданням перед написанням курсової роботи стояло розроблення програмного забезпечення для розв’язання математичної задачі. Щоб розробити таке програмне забезпечення мною використовувалися знання з таких предметів як “Технології програмування” та “ Мережеві операційні системи”. Мовою написання стала С++ Мово С++ є з однією з найдосконаліших серед мов програмування. Вона може використовуватися як для програмування математичних виразів, так і для написання складних логічних функцій. C++ Builder — середовище швидкої розробки (RAD), що випускається компанією Codegear, дочірньою фірмою компанії Embarcadero (раніше Borland). Призначена для написання програм на мові програмування C++. C++ Builder об'єднує Бібліотеку візуальних компонентів і середовище програмування (IDE), написане на Delphi з компілятором C++. Цикл розробки аналогічний Delphi, але з істотними поліпшеннями, доданими в C++ Builder . Більшість компонентів, розроблених в Delphi, можна використовувати і в C++ Builder без модифікації, але, на жаль, зворотне твердження не вірне. C++ Builder містить інструменти, які дозволяють здійснювати справжню візуальну розробку Windows-програм методом drag-and-drop, спрощуючи програмування завдяки WYSIWYG редакторові інтерфейсу, вбудованому в його середовище розробки . C++ Builder спочатку створювалася тільки для платформи Microsoft Windows. Пізні версії, що містять, компонентну бібліотеку Borland, засновану на Qt, підтримують і Windows і Linux. В даній курсовій роботі представлено, як за допомогою елементарних знань з програмування можна розробити універсальні функції та обчислити складне математичне завдання. 3. Опис функцій, що використовуються: 3.1.Функція, яка повертає значення від факторіалу Код функції: int fact (int i) { int z; for ( z=i-1; z>0; z--) i*=z; return i; } Опис: Як бачимо, дана функція приймає одне ціле число і після кількох операцій повертає його. У функції використовувався один цикл for та в циклі відбувалося накопичення добутку (обчислювався сам факторіал). 3.2. Вивід двовимірного масиву Код функції void vuvid(char *name, doubleA[sizeM][sizeM], int M, int N) { cout<<name<<endl; for (int i=0; i<M; i++) { for (int j=0; j<N; j++) cout<<setw(15)<<A[i][j]<<" "; cout<<endl; } } Опис: Дана функція слугує для виводу двохвимірного масиву і його імені. Функція - універсальна, тому що ми передаємо їй ще й розмір матриці яку потрібно вивести. Тобто ми можемо передати великий масив, а вивести лише частину з нього. Імя масиву ми передаємо через вказівник *name. Спочатку ми виводимо назву масиву. Далі задаємо два цикли, в яких і виводимо масив по елементно. 3.3. Добуток матриці на число Код функції: void dobutok (doubleD[sizeM][sizeM], doublek, int M, int N) { for (int i=0; i<M; i++) for(int j=0; j<N;j++) V[i][j]=D[i][j]*k; } Опис: Дана функція слугує для обчислення добутку матриці на число. Ця функція ми передаємо розмір матриці. В коді функції ми бачимо, що у глобальному масиву V присвоюється значення добутку масиву на число. Виклик функції: dobutok (D, (double) sizeM/n, M, N) 3.4. Добуток матриці на матрицю Код функції void dobutok (doubleA[sizeM][sizeM],doubleB [sizeM][sizeM], int M, int N) { for (int i=0; i<=M; i++) for (int j=0; j<=N; j++) { float k=0; for(int s=0; s<M; s++) { k+=A[i][s]*B[s][j]; Q[i][j]=k; } } } Опис: Дана функція слугує для обчислення добутку двох матриць. Є універсальною. Спочатку ми задаємо два цикли, змінні з яких використовуємо для виклику елементів масиву. Далі створюємо нову змінну, яка буде елементом матриці Q і накопичуватиме суму добутку елементів рядка на стовпець. І створюємо ще один цикл, змінна якого служитиме саме для забезпечення в першій матриці постійного рядка, в другій постійного стовпця. Виклик функції: dobutok(A, A, M, N) 3.5. Перезапис значень однієї матриці в іншу Код функції void perez (doubleA[sizeM][sizeM],doubleB[sizeM][sizeM], int M, int N) { for (int i=0; i<=M; i++) for(int j=0; j<=N; j++) A[i][j]=B[i][j]; } Опис: Функція доволі проста. Вона перезаписує елементи з одного масиву в інший. Але, я її застосував для того, щоб усунути найбільший недолік – локальні змінні. Щоб використати наприклад функцію добутку матриці на матрицю кулька раз, без цієї функції не обійтися. Це все тому, що функція добутку постійно записує в один і той самий масив. Виклик функції: perez (S,Q,M,N); 3.6. Добуток стовпця на рядок Код функції void R_S (doubleA[sizeM],doubleB[sizeM], int M, int N) { for (int i=0; i<=M; i++) for( int j=0; j<=N; j++) P[i][j]=A[i]*B[j]; } Опис: Дана функція використовується для знаходження добутку стовпця на рядок. Їх добутком буде матриця. Функція проста, універсальна. Використовується два оператори циклу і потім елементу матриці присвоюється значення добутку елемента стовпця на елемент рядка. Виклик функції: R_S (C,C,M,N) 3.7. Сума трьох матриць Код функції void suma (doubleA[sizeM][sizeM],doubleB[sizeM][sizeM], doubleC[sizeM][sizeM], int M, int N) { for(int j=0; j<M; j++) for (int i=0; i<N; i++) X[j][i]=A[j][i]+B[j][i]+C[j][i]; } Опис: Дана функція використовується для знаходження елементів матриці X. В функцію ми передаємо три матриці рівних за розміром. Далі за допомогою двох циклів по елементно їх додаємо. Суму записуємо в глобальну матрицю Х. Виклик функції: suma (Q, V, S, M, N) 4. Функції, що задані в завданні 4.1. Функція Q Код функції: doubleQq (doublex, doubley, doublez) { Qq=log(pow(fabs((y-sqrt(fabs(x*x-z)))*(y-x*x/z+4*y*y)),2./3)); return Qq; } Опис: Дана функція виконує різні математичні операції над трьома вхідними величинами і повертає одне дійсне число Qq. 4.2. Функція F Код функції: double Ff(double x, double y, double z) { double Ff=((sqrt(pow(fabs(x*x-z),0.3))-pow(fabs(y-2*x),1./3))/(y+x*x-cos(pow(fabs(y-(z+x)),0.32)))); return Ff; } Опис: В даній функції ми знаходимо суму елементів від i=1 до нескінченості. Сума буде вважатися знайденою, якщо доданок стане меншим від 0.0001. Для написання даної функції я використав оператор умовного циклу do while. Сума буде накопичуватися до тих пір, поки вираз не стане меншим за 0.0001. Коли умова виконалася, повертає значення Ff/ 4.3. Сортування масиву за рядками Код функції: void sort (doubleA[sizeM][sizeM], int M, int N) { for (int q=0; q<M; q++) for (int j=0; j<N; j++) for(int i=0; i<M-1; i++) if(A[q][i]>A[q][q+1]) { doubley=A[q][i]; A[q][i]=A[q]A[i+1]; A[q][q+1]=y; } } Опис: Дана функція використовуєтьcя для сортування елементів масиву за рядками. Функція проста, вона базується виключно на простих операторах циклу, але вона програє в часі функціям які спеціально для цього призначені, наприклад швидке сортування чи бульбашкове сортування. Суть функції – за допомогою циклу ми N*M-1 разів перевіряємо рядок на відповідність посортованому. А для того щоб посортувати двохвимірний, я просто добавив ще один цикл який змінює рядок на наступниц, після того як вони посортуються. Виклик функції: sort (B, M, N); 5. Знаходження матриць 5.1. Знаходження матриці d Код функції: doubleD[sizeM][sizeM]; for (int i=1;i<=M; i++) for (int j=1; j<=N; j++) D[i-1][j-1]=(c[j]+3.6*c[i]/c[i]-1.2)*fabs(cos(pow(c[j]),2)); vuvid("\nmatrica D", D, M, N); Опис: Знаходження матриці D не дуже важке. Так як це простий двохвимірний масив, в якому кожен елемент задається одним і тим самим математичним виразом. Спочатку я оголосив масив, а потім присвоїв йому певні значення. 5.2. Знаходження матриці С Код функції: doubleC[sizeM]; for (int i=1; i<=M; i++) for(int j=0; j<=i+1;j++) C[i-1]=((pow(j,0.23)/pow(s,2.3))+pow(pow(sin(s+pow(i,0.3)/s+i),2),1./i)); cout<<”\nmatrica C”<<endl; for (int i=0; i<M; i++) cout<<setw(13)<<C[i]<<” “; cout<<endl; Опис: Щоб знайти вектор стовпець С, потрібно використати два цикли for, а потім просто розв’язати математичний вираз. 5.3. Знаходження матриці A Код функції: for (int i=1; i<=M; i++) for(int j=1; j<=N; j++) { if (i=j) A[i-1][j-1]=(log(fabs(i-j*j/i-4*j*j))-tan(pow(j,2))); else if (i>j) A[i-1][j-1]=((i*i)-pow(pow(i-sin(pow(j,2)),j),1./i)); else A[i-1][j-1]=(pow(i,0.2)-(j*j/4)+pow(log(j*j*j),2)); } Опис: Для знаходження елементів масиву А, потрібно перевірити на дійсність задані умови. Для кожної умови свій математичний вираз. Якщо ні одна з умов не використовується, то інший математичний вираз. Для здійснення поставленої задачі, я використав два оператори циклу і два умови. 5.4. Знаходження матриці B Код функції: for (int i=1; i<=M; i++) for(int j=1; j<=N; j++) { doubleq=0; for (int h=1; h<=j+2; h++) { doublew=0; for(int k=1; k<=i+1; k++) w+=((k/s+j/fact(i))/(h+s)); q+=f*(w/(fact(h)+pow(pow(fabs(i*i+2*j-s),j),1./i))); f=-f; } B[i-1][j-1]=q; } Опис: Для знаходження елементів матриці В, потрібно було знайти суму від 1 до і+1 в чисельнику виразу (в коді програми це змінна w) і в загальному суму від 1 до і+1 від усього виразу (в коді це змінна q). Для виконання цієї задачі я користувався виключно оператором for. 6. Знаходження матриці Х Код функції: sort (A,M,M); vuvid("\nposort matrica A", A,M,M); sort(B,M,M); vuvid("\nposort matrica B", B, M,M); transp(D,Tr,M,M); //vuvid("\nMatrica transp",Tr,M,M); dobutok(A,kof,M,M); //vuvid("\nMatrica V", V,M,M); suma(V,Tr,M,M); //vuvid("\nMatrica suma", X,M,M); perez(Tr,X,M,M); //vuvid ("\nMatrica Tr", Tr,M,M); R_S(C,C,M,M); perez(Rt,X,M,M); MOBR(Rt,M); //vuvid ("\nMatrica RT",Rt,M,M); dobutok(Rt,Tr,M,M); //vuvid("\nMatrica Q", Q,M,M); perez(X,Q,M,M); vuvid("\nMatrica",X,M,M); Опис: Для знаходження матриці Х, використано всі функції, які згадувалися до цього. 7. Знаходження елемента t Код функції: //Знаходження t doublet,s,u[sizeM], maxX=X[0][0]; int kl; for(int j=0;j<sizeM;j++) { s=0;kl=0; for(int i=0;i<sizeM;i++) { if(maxX<X[i][j]) { maxX=X[i][j]; } if(X[i][j]<0) { s+=X[i][j]; kl++; } } if (kl==0) u[j]=0; else u[j]=s/kl; } s=u[0]; for(int i=0;i<sizeM;i++) { if(s<u[i]) s=u[i]; } t=s/maxX; cout<<"\nt="<<setw(15)<<t<<endl; Опис: В умові сказано, що ві……………………….. 8. обчислення значення одновимірного масиву H Код функції doubleH[n] for (int i=1; i<=M; i++) { for (int j=1;j<=N;j++) { H[i-1][j-1]=(pow(fabs(Ff(pow(s,2),j,t*i)),i./3)+ (min(Qq(s*s,s*t,i*j),Qq(j,t*t,s/i))/(max(pow(Ff(s,t*t,j),2),sqrt(fabs(Ff(j*t,s*s,s*i))))))); } cout<<endl; } Опис: Для знаходження елементів вектор стовпця Н використано стандартні функції С++ для знаходження максимального і мінімального елемента серед кількох заданих. Висновок: В даній курсовій роботі було розроблено програмне забезпечення для розв’язання математичної задачі. Це все було виконано на базових знаннях отриманих з різних предметах. У курсовій роботі, я навчився застосовувати теоретичні знання з програмування, розрахунку функцій, їх табулювання, накопичення значень, а також здійснювати правильний вивід отриманих значень. Навчився виконувати розрахунок математичних та логічних функцій, створювати масиви. Список використаної літератури: 9. Код всієї програми:
Антиботан аватар за замовчуванням

08.12.2016 01:12-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!