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

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

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

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

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

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

Львівський державний університет безпеки життєдіяльності Кафедра управління інформаційною безпекою / КУРСОВА РОБОТА на тему: "Розроблення програмного забезпечення для розв’язання математичної задачі" з дисципліни: "Інформатика" Зміст: Вступ Основним завданням перед написанням курсової роботи стояло розроблення програмного забезпечення для розв’язання математичної задачі. Щоб розробити таке програмне забезпечення мною використовувалися знання з таких предметів як “Технології програмування” та “ Мережеві операційні системи”. Мовою написання стала С++ Мово С++ є з однією з найдосконаліших серед мов програмування. Вона може використовуватися як для програмування математичних виразів, так і для написання складних логічних функцій. 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:21

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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