48886 (Розробка програми мовою програмування С++ по пошуку коренів нелінійних рівнянь), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Розробка програми мовою програмування С++ по пошуку коренів нелінійних рівнянь", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48886"

Текст 2 страницы из документа "48886"

Перед нами стоїть задача перевірити вірність виконання поставленого перед нами завдання.

Побудуємо графік функцій та використовуючи математичний пакет MathСad (рисунок 4.1):

Рисунок 4.1 – Зображеня вказаних функцій в середовищі MathCad

Запускаємо на виконання виконавчий файл нашого проекту. Спочатку бачимо зображення електронної титульної сторінки (рисунок 4.2).

Рисунок 4.2 - Зображення електронної титульної сторінки

Програма чекає, поки буде натиснута довільна кнопка. Що ми і робимо. З’являється графік функцій (рисунок 4.3). Порівняємо два рисунки: 4.1 та 4.3. Бачимо повне співпадіння.

Нам потрібні проміжки, де дві функції перетинаються. Таких проміжків є три: окіл нуля, проміжок від -2 до -1, проміжок від 1 до 2.

Знову натискаємо довільну кнопку. З’являється вікно із запитом на введення даних (рисунок 4.4). Вводимо послідовно значення межі проміжка та похибки. Отримаємо:

a=1

b=3

eps=0.2

-------------------------------------------------

korin rivnjannja 1.0625

kilkist iteratsij 4

пробуємо всі проміжки:

a=1

b=2

Рисунок 4.3 - Зображення графіка функції

Рисунок 4.4 - Вікно із запитом на введення даних

eps=0.000001

-------------------------------------------------

korin rivnjannja 1.0625

kilkist iteratsij 4

a=-0.5

b=0.6

eps=0.000001

-------------------------------------------------

korin rivnjannja -2.14577e-07

kilkist iteratsij 21

Спробуємо збільшити точність:

a=-2

b=-1

eps=0.0000001

-------------------------------------------------

korin rivnjannja -1.42167

kilkist iteratsij 24

Як бачимо, кількість ітерацій зросла.

Перевіримо, чи записано у файл проміжні результати:

Дані записано нормально.

Після отримання числових результатів натискаємо довільну кнопку і переходимо до наступного вікна (рисунок 4.5), яке демонструє графічно реалізацію метода.

Рисунок 4.5 - Вікно демонстрації реалізації метода дихотомії

Дані для x, a та b завантажуються з текстових файлів KORENI.TXT та MEGI.TXT, точки будуються відповідно до цих даних. Після кожного натиснення будь-якої клавіші зчитуються наступні дані, аж поки не знайдемо значення x із заданою точністю.

Після натискання довільної кнопки переходимо до меню користувача (рисунок 4.6).

При вибору пунктів меню з’являються знайомі нам вже вікна:

1 - Рисунок 4.2;

2 - Рисунок 4.3;

3 або 5 - Рисунок 4.4;

4 - Рисунок 4.5.

Натиснувши 7 – вийдемо з програми, а обравши 6 побачимо вікно з інформацією про автора програми (Рисунок 4.7). На інші кнопки програма не реагує.

Рисунок 4.6 - Вікно меню користувача

Рисунок 4.7 - Вікно з інформацією про автора програми

Натиснувши довільну кнопку знову переходимо до вікна меню користувача.

5. ІНСТРУКЦІЯ КОРИСТУВАЧА

Для запуску програми потрібно зайти в папку Program і запустити на виконання файл kursova.exe. Для вірної роботи програми у тій же папці має бути файл-драйвер EGAVGA.bgi.

Дана програма може працювати під управлінням операційної системи сімейства Windows, починаючи від версії 95 та під управлінням ОС MS-DOS.

Мінімальні системні вимоги для коректної роботи програми:

- операційна система сімейства Windows або MS-DOS;

- процесор – не менше 80386;

- оперативної пам’яті – 1 Мб;

- відеокарта з якістю кольоропередачі – 16 біт;

- вільного місця на жорсткому диску – 135 кб.

Після запуску програми спочатку бачимо зображення електронної титульної сторінки (рисунок 4.2). Програма чекає, поки буде натиснута довільна кнопка. Що ми і робимо. З’являється графік функцій (рисунок 4.3). Знову натискаємо довільну кнопку. З’являється вікно із запитом на введення даних (рисунок 4.4). Вводимо послідовно значення межі проміжка та похибки. Отримаємо результати: корінь рівняння та кількість ітерацій.

Після отримання числових результатів натискаємо довільну кнопку і переходимо до наступного вікна (рисунок 4.5), яке демонструє графічно реалізацію метода. Дані для x, a та b завантажуються з текстових файлів KORENI.TXT та MEGI.TXT, точки будуються відповідно до цих даних. Після кожного натиснення будь-якої клавіші зчитуються наступні дані, аж поки не знайдемо значення x із заданою точністю. Після натискання довільної кнопки переходимо до меню користувача (рисунок 4.6).

При вибору пунктів меню з’являються знайомі нам вже вікна:

1 - Рисунок 4.2;

2 - Рисунок 4.3;

3 або 5 - Рисунок 4.4;

4 - Рисунок 4.5.

Натиснувши 7 – вийдемо з програми, а обравши 6 побачимо вікно з інформацією про автора програми (Рисунок 4.7). На інші кнопки програма не реагує. Натиснувши довільну кнопку знову переходимо до вікна меню користувача.

ВИСНОВКИ

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

Серед недоліків програми слід відмітити недостатність у візуальному оформленні, хоча середовище програмування і не дає широких можливостей для цього. Серед переваг помічаємо такі характеристики програми, як швидкодія, легкість у користуванні та невеликі розміри виконавчого файлу..

Створена нами програма проста та інтуїтивно зрозуміла і легка у користуванні.

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

Отже, можемо зробити висновок, що створений нами проект повністю відповідає завданню, а пояснююча записка написана з дотриманням всіх вимог і стандартів.

ПЕРЕЛІК ПОСИЛАНЬ

  1. Глинський Я.М., Анохін В.Є., Ряжська В.А. С++ і С++ Builder. Навч. посібн. 3-тє вид. – Львів: СПД Глинський, 2006. – 192с.

  2. Пахомов Б.И. С/С++ и Borland C++ Builder для студента. – Спб.: БХВ-Петербург, 2006. – 448 с.:ил.

  3. С/С++. Программирование на языке высокого уровня / Т.А. Павловская. СПб.: Питер, 2002. – 464 с

  4. Сборник часто задаваемых вопросов и ответов к ним по компиляторам языков Си и C++ http://soft.munic.msk.su/

  5. Уоррен Г.С. Алгоритмические трюки для программистов. - М.: Изд.дом «Вильямс», 2003

  6. Шилдт Г. Теория и практика С++. — СПб.: BHV, 1996.

Додаток А.

(обов’язковий)

Загальна схема проекту.

Додаток Б.

(обов’язковий)

Текст програми

main.cpp

#include

#include

#include

#include

#include

#include

#include

#include "tytulka.cpp"

#include "grafik.cpp"

#include "dyhotom.cpp"

#include "demon.cpp"

void avtor()

{

clrscr();

setcolor(10);

int xmax=getmaxx(),ymax=getmaxy();

bar(0,0,xmax,ymax);

setcolor(BLUE);

settextstyle(0,0,2);

outtextxy(175,150,"Kursovu robotu");

outtextxy(230,250,"vykonav");

outtextxy(150,350,"Shypuk Oleksandr");

getch();

}

//===============================================================

void main()

{

clrscr();

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode,"");

errorcode = graphresult();

if (errorcode != grOk)

{

cout<< "ERROR" << grapherrormsg(errorcode);

cout<< "\n Press any key...";

getch();

exit(1);

}

tytulka();

grafik();

dyhotom();

demon();

int k=0;

while (k!=7)

{

setcolor(10);

int xmax=getmaxx(),ymax=getmaxy();

bar(0,0,xmax,ymax);

setcolor(BLUE);

settextstyle(0,0,2);

outtextxy(75,50,"1 -> Tytulka");

outtextxy(75,85,"2 -> Grafik");

outtextxy(75,120,"3 -> Metod dyhotomiji");

outtextxy(75,155,"4 -> Demonstratsija roboty metodu");

outtextxy(75,190,"5 -> Utochnyty sche odyn korin");

outtextxy(75,225,"6 -> Pro avtora");

outtextxy(75,260,"7 -> Vyhid");

outtextxy(75,300,"Zrobit svij vybir");

settextstyle(0,0,1);

outtextxy(75,400,"PRYMITKA:");

outtextxy(75,425,"Jaksho rivnjannja maje bilshe odnogo korenja,");

outtextxy(75,450,"perejdit poslidovno do punktiv 2,3,4 abo vyberit punkt 5");

cin>>k;

switch (k)

{

case 1: tytulka(); break;

case 2: grafik(); break;

case 3: dyhotom(); break;

case 4: demon(); break;

case 5: dyhotom(); break;

case 6: avtor(); break;

case 7: exit(1); break;

}

}

closegraph();

}

demon.cpp

#include

#include

#include

#include

#include

#include

#include

void demon()

{

int xmax=getmaxx(),ymax=getmaxy();

FILE *fp1,*fp2;

float x, a, b;

int i = 7;

char *buf;

buf = (char*)malloc(5);

fp1=fopen("koreni.txt","rt");

fp2=fopen("megi.txt","rt");

while (!feof(fp1))

{

clrscr();

fscanf(fp1,"%f\n",&x);

fscanf(fp2,"%f\n",&a);

fscanf(fp2,"%f\n",&b);

setcolor(WHITE);

bar(0,0,xmax,ymax);

setcolor(RED);

settextstyle(0,0,2);

outtextxy(165,25,"x");

outtextxy(315,25,"a");

outtextxy(455,25,"b");

rectangle(125,55,250,100);

rectangle(275,55,400,100);

rectangle(425,55,550,100);

settextstyle(0,0,1);

setcolor(GREEN);

gcvt(x,i,buf);

outtextxy(140,75,buf);

gcvt(a,i,buf);

outtextxy(290,75,buf);

gcvt(b,i,buf);

outtextxy(440,75,buf);

setcolor(RED);

line(10,240,630,240);

line(620,235,630,240);

line(620,245,630,240);

settextstyle(0,0,1);

outtextxy(620,225,"x");

circle(20+(x+2)*150,240,2);

outtextxy(20+(x+2)*150,225,"x");

circle(20+(a+2)*150,240,2);

outtextxy(20+(a+2)*150,245,"a");

circle(20+(b+2)*150,240,2);

outtextxy(20+(b+2)*150,255,"b");

getch();

free(buf);

}

}

dyhotom.cpp

#include

#include

#include

#include

#include

#include

#include

double f(double x)

{

return x*x*x/3-atan(x);

}

//===============================================================

void dyhotom()

{

clrscr();

FILE *fp1,*fp2;

fp1=fopen("koreni.txt","wt");

fp2=fopen("megi.txt","wt");

int k=0;

double a, b, c, epsilon;

cout << "a=";

cin >> a;

cout << "b=";

cin >> b;

cout << "eps=";

cin >> epsilon;

if (f(a)*f(b)>0)

cout << "nemaje koreniv abo bilshe odnogo na tsjomu promizhku" << endl;

else

{

while (b - a > epsilon)

{

c = (a + b) / 2;

fprintf(fp1,"%f\n",c);

fprintf(fp2,"%f\n",a);

fprintf(fp2,"%f\n",b);

if(f(c)==0) break;

if(f(b) * f(c) < 0)

a = c;

else

b = c;

k++;

}

cout << "-------------------------------------------------" << endl;

cout << "korin rivnjannja x=" << (a + b) / 2 << endl;

cout << "kilkist iteratsij n=" << k << endl;

}

fclose(fp1);

fclose(fp2);

getch();

}

grafik.cpp

#include

#include

#include

#include

#include

#include

#include

void grafik()

{

clrscr();

setcolor(WHITE);

int xmax=getmaxx(),ymax=getmaxy();

bar(0,0,xmax,ymax);

setcolor(RED);

line(10,240,630,240);

line(620,235,630,240);

line(620,245,630,240);

settextstyle(0,0,1);

outtextxy(620,225,"x");

line(320,10,320,470);

line(320,10,315,20);

line(320,10,325,20);

outtextxy(330,10,"y");

int dec, sign;

int i;

for (i=-2;i<=2;i++)

{

circle(20+((i+2)*150),240,2);

if(i>0)

outtextxy(17+((i+2)*150),250,fcvt(i, 0, &dec, &sign));

else if(i<0)

{

outtextxy(17+((i+2)*150),250,fcvt(i, 0, &dec, &sign));

outtextxy(10+((i+2)*150),250,"-");

}

else outtextxy(25+((i+2)*150),250,fcvt(i, 0, &dec, &sign));

}

for (i=-4;i<=4;i++)

{

circle(320,20+(4+i)*55,2);

if(i<0)

outtextxy(325,20+(4+i)*55,fcvt(-i, 0, &dec, &sign));

else if (i>0)

{

outtextxy(325,20+(4+i)*55,fcvt(-i, 0, &dec, &sign));

outtextxy(310,20+(4+i)*55,"-");

}

}

setcolor(BLUE);

float x1,x2,y1,y2,xx1,xx2,yy1,yy2;

x1=-2;y1=atan(x1);

for (x2=-2;x2<=2;x2+=0.01)

{

y2=atan(x2);

xx1=20+(x1+2)*150;

xx2=20+(x2+2)*150;

yy1=460-(y1+4)*55;

yy2=460-(y2+4)*55;

line(xx1,yy1,xx2,yy2);

x1=x2;y1=y2;

}

outtextxy(520,210,"y(x)=atan(x)");

setcolor(GREEN);

x1=-2;y1=x1*x1*x1/3;

for (x2=-2;x2<=2;x2+=0.01)

{

y2=x2*x2*x2/3;

xx1=20+(x1+2)*150;

xx2=20+(x2+2)*150;

yy1=460-(y1+4)*55;

yy2=460-(y2+4)*55;

line(xx1,yy1,xx2,yy2);

x1=x2;y1=y2;

}

outtextxy(480,120,"y(x)=x*x*x/3");

getch();

}

tytulka.cpp

#include

#include

#include

#include

#include

#include

void tytulka()

{

clrscr();

setcolor(WHITE);

int a=5,xmax=getmaxx(),ymax=getmaxy();

bar(0,0,xmax,ymax-3*a);

setcolor(GREEN);

rectangle(2*a,a,xmax-a,ymax-4*a);

settextstyle(0,0,1);

outtextxy(190,15,"Ministerstvo osvity i nauky Ukrainy");

outtextxy(160,30,"Lutskij natsionalnyj tehnichnyj universytet");

outtextxy(350,65,"Kafedra kompjuternoji inzheneriji");

setcolor(RED);

settextstyle(0,0,2);

outtextxy(200,190,"Kursova robota");

settextstyle(0,0,1);

outtextxy(265,215,"z dyscypliny");

outtextxy(255,235,"PROGRAMUVANNJA");

outtextxy(280,250,"na temu: ");

outtextxy(120,265,"ROZVJAZUVANNJA NELINIJNYH RIVNJAN METODOM DYHOTOMIJI ");

setcolor(GREEN);

outtextxy(350,350,"Vykonav st.gr.KSMS-13");

outtextxy(350,365,"Kostenko Vasyl");

outtextxy(350,380,"Pereviryv asystent");

outtextxy(350,395,"Lavrenchuk S.V.");

outtextxy(275,445,"Lutsk 2010");

setcolor(RED);

outtextxy(260,470,"Press any key... ");

getch();

}

Додаток В

(обов’язковий)

Блок-схеми алгоритмів

void avtor()


void main()

void grafik()

void dyhotom()

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4125
Авторов
на СтудИзбе
667
Средний доход
с одного платного файла
Обучение Подробнее