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% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5076
Авторов
на СтудИзбе
455
Средний доход
с одного платного файла
Обучение Подробнее