Реферат по предмету "Информатика, программирование"


Розробка програми мовою програмування С++ по пошуку коренів нелінійних рівнянь

ЗМІСТ
Вступ
1. Аналіз завдання та розробка методувирішення задачі
1.1 Розробка методу виконанняосновного завдання
1.2 Структура даних і функцій
2. Опис структури програмного проекту
3. Опис алгоритмів розв’язання задачі
4. Розробка та виконання тестовогоприкладу
5. Інструкція користувача
Висновки
Додатки

ВСТУП
Середінформаційних технологій, які лежать в основі всіх напрямів підготовкиспеціалістів з комп’ютерних технологій, особливе місце займає математичнемоделювання. При цьому під математичною моделлю фізичної системи, об’єкта абопроцесу звичайно розуміють сукупність математичних співвідношень (формул,рівнянь, логічних виразів), які визначають характеристики стану і властивостісистеми, об’єкта і процесу та їх функціонування залежно від параметрів їхкомпонентів, початкових умов, вхідних збуджень і часу. Загалом математичнамодель описує функціональну залежність між вихідними залежними змінними, черезякі відображається функціонування системи, незалежними (такими, як час) ізмінюваними змінними (такими, як параметри компонентів, геометричні розміри таін.), а також вхідними збудженнями, прикладеними до системи.
Для кожноїматематичної моделі звичайно формулюється математична задача. У загальномувипадку, коли функціональна залежності для множини вхідних даних (значеннянезалежних та змінюваних змінних і вхідних збуджень), що виступають як множинааргументів, задана неявно, за допомогою математичної моделі необхідно визначитимножину вихідних залеж­них змінних, що виступають як множина значень функцій.При цьому відповідно до виду математичної моделі розрізняють такі базові типиматематичних задач:
¨ розв’язаннясистеми лінійних (в загальному випадку лінеаризованих) рівнянь;
¨ розв’язаннянелінійних алгебраїчних рівнянь;
¨ апроксимаціямасиву даних або складної функції набором стандартних, більш простих функцій;
¨ чисельнеінтегрування і диференціювання;
¨ розв’язаннясистем звичайних диференціальних рівнянь;

¨ розв’язаннядиференціальних рівнянь в частинних похідних;
¨ розв’язанняінтегральних рівнянь.
Одному з такихтипів, а саме розв’язанню нелінійних алгебраїчних рівнянь, і присвячена данакурсова робота. Методом розв’язування обрано метод дихотомії.

1 АНАЛІЗ ЗАВДАННЯТА РОЗРОБКА МЕТОДУ ВИРІШЕННЯ ЗАДАЧІ
Розглянеморівняння /> і нехай /> /> — йогодійсний корінь, тобто /> Геометрично рівність /> означає,що графік функції /> проходить через точку /> осі/>. Далі ми будеморозв’язувати задачу про знаходження /> знаперед заданою точністю наближеного значення кореня /> рівняння /> Спочаткурозглянемо питання про відокремлення коренів рівняння.
Корінь/> рівняння/> відокремлений,якщо знайдено відрізок ( позначимо його /> ), в якому, крім />, немає інших коренів цьогорівняння.
Задачавідокремлення коренів рівняння /> розв’язується просто, якщопобудова графіка функції /> не є важкою. Дійсно, маючиграфік функції />, легко виділити відрізки, вкожному із яких знаходиться лише один корінь розглядуваного рівняння, або, щоте саме, виділити відрізки, на кожному із яких є лише одна точка перетинукривої /> звіссю/>.
Відділитикорені рівняння /> при умові, що />-диференційована функція, можна не лише графічно. Нехай на кінцях деякоговідрізка/> функція /> має значеннярізних знаків. Тоді за властивістю неперервних функцій ця функція на інтервалі /> поменшій мірі один раз обертається в нуль, тобто рівняння /> має по меншіймірі один корінь.
Якщопохідна /> зберігає знак на відрізку />, товнаслідок монотонності функції /> рівняння />на інтервалі/> маєєдиний корінь.
Уцьому випадку числа />/> та/> є наближенимизначеннями кореня /> відповідно знестачею і з надлишком. Ці інтервали можна звужувати, тоді границі їх будутьдавати все точніші наближення для коренів рівняння.
Нехайкорінь /> рівняння /> відокремлений,тобто є відрізок />, на якому, крім />, немає інших коренів цьогорівняння.
Відшукаємозначення /> з будь-якою точністю затаких допущень: функція /> має на відрізку /> неперервніпохідні до другого порядку включно і, крім того, похідні /> і /> зберігаютьзнаки на цьому відрізку. Із цих умов випливає, що /> — монотонна функція навідрізку />, яка на кінцях має різнізнаки, а також, що крива /> опукла або вгнута (рис. 1.1).
/>
/>
Рисунок1.1 – Варіанти поведінки функції />
Отже, розглянемозадачу знаходження коренів рівняння
/>,       (1)
де /> - задана функція дійсногозмінного.
Розв’язуванняданої задачі можна розкласти на декілька етапів:
а) дослідженнярозташування коренів (в загальному випадку на комплексній площині) та їхкратність;
б) відділеннякоренів, тобто виділення областей, що містять тільки один корінь;
в) обчисленнякореня з заданою точністю за допомогою одного з ітераційних алгоритмів.
Далірозглядаються ітераційні процеси, що дають можливість побудувати числовупослідовність xn, яка збігається до шуканого кореня /> рівняння (1).Метод ділення проміжку навпіл (метод дихотомії)
Нехай /> і відомо, що рівняння (1)має єдиний корінь />. Покладемо a0=a,b0=b, x0=(a0+b0)/2. Якщо />, то />. Якщо />, то покладемо
/>    (2)
/>    (3)
/>     (4)
і обчислимо />. Якщо />, то ітераційний процесзупинимо і будемо вважати, що />. Якщо />, то повторюємо розрахункиза формулами (2)-(4).
З формул (2), (3)видно, що /> і />. Тому />, а отже шуканий корінь /> знаходиться на проміжку />. При цьому має місцеоцінка збіжності
/>.      (5)
Звідси випливає,що кількість ітерацій. які необхідно провести для знаходження наближеногокореня рівняння (1) з заданою точністю e задовольняє співвідношенню
/>.      (6)
де [c] — ціла частина числа c.
Серед перевагданого методу слід відзначити простоту реалізації та надійність. Послідовність{xn} збігається до кореня /> длядовільних неперервних функцій f(x). До недоліків можна віднести невисокушвидкість збіжності методу та неможливість безпосереднього узагальнення системнелінійних рівнянь.Метод простої ітерації
Метод простоїітерації застосовується до розв’язування нелінійного рівняння виду
/>.       (7)
Перейти відрівняння (1) до рівняння(7) можна багатьма способами, наприклад, вибравши
/>,      (8)
де /> - довільна знакосталанеперервна функція.
Вибравши нульовенаближення x0, наступні наближення знаходяться за формулою
/>.     (9)
Наведемо достатніумови збіжності методу простої ітерації.
Теорема 1. Нехайдля вибраного початкового наближення x0на проміжку
/>      (10)
функція j(x) задовольняє умові Ліпшиця
/>    (11)
де 0
/>.      (12)
Тоді рівняння (7)має на проміжку S єдиний корінь />, доякого збігається послідовність (9), причому швидкість збіжності визначаєтьсянерівністю
/>.     (13)
Зауваження: якщофункція j(x) має на проміжку S неперервну похідну />,яка задовольняє умові
/>,       (14)
то функція j(x) буде задовольняти умові(11) теореми 1.
З (13) можнаотримати оцінку кількості ітерацій. які потрібно провести для знаходженнярозв’язку задачі (7) з наперед заданою точністю e:
/>.      (15)
Наведемо ще однуоцінку. що характеризує збіжність методу простої ітерації:
/>.     (16)Метод релаксації
Для збіжностіітераційного процесу (9) суттєве значення має вибір функції j(x). Зокрема, якщо в (8)вибрати />, то отримаємо методрелаксації.
/>,    (17)
який збігаєтьсяпри
/>.      (18)
Якщо в деякомуоколі кореня виконуються умови
/>,    (19)
то методрелаксації збігаються при />.Збіжність буде найкращою при
/>.      (20)
При такому виборіt для похибки /> буде мати місце оцінка
/>,     (21)
де />.
Кількістьітерацій, які потрібно провести для знаходження розв’язку з точністю e визначається нерівністю
/>.      (22)
Зауваження: якщовиконується умова />, то ітераційнийметод (17) потрібно записати у вигляді
/>.Метод Ньютона
Метод Ньютоназастосовується до розв’язування задачі (1), де f(x) єнеперервно-диференційованою функцією. На початку обчислень вибирається початковенаближення x0. Наступні наближення обчислюються за формулою
/>.   (23)
З геометричноїточки зору xn+1 є значенням абсциси точки перетину дотичної до кривоїy=f(x) в точці (xn, f(xn)) з віссю абсцис. Тому методНьютона називають також методом дотичних.
Теорема 2. Якщо /> не змінює знака на [a,b],то виходячи з початкового наближення />, щозадовольняє умові />, можна обчислитиметодом Ньютона єдиний корінь /> рівняння(1) з будь-якою степінню точності.
Теорема 3. Нехай /> - простий дійсний коріньрівняння (1) і />, де />,
/>,    (24)
причому
/>.      (25)
Тоді для /> метод Ньютона збігається,причому для похибки справедлива оцінка
/>.      (26)
З оцінки (26)видно, що метод Ньютона має квадратичну збіжність, тобто похибка на (n+1)-йітерації пропорційна квадрату похибки на n-й ітерації.
Модифікованийметод Ньютона
/>    (27)
дозволяє необчислювати похідну /> на кожнійітерації, а отже і позбутися можливого ділення на нуль. Однак цей алгоритм маєтільки лінійну збіжність.
Кількістьітерацій, які потрібно провести для знаходження розв’язку задачі (1) з точністюe задовольняє нерівності
/>.     (28)
 
1.1 Розробкаметоду виконання основного завдання
Розглянемо один знайпростіших методів уточнення відділеного кореня – метод половинного ділення.
Обчислюємозначення f(x) в середині відрізка [a;b], тобто в точці />. Залежно від значення /> вибираємо ту частинуінтервалу [a;b], де знаки функції f(x) є різними. Отже, інтервал, у якому єкорінь, зменшився удвічі. Продовживши процес, ми звужуємо інтервал до такоївеличини, поки його розмір (який дорівнює абсолютній похибці) не стане меншимвід потрібної нам величини.
Зрозуміло, щодругий етап наближеного відшукання кореня бажано виконувати за допомогоюкомп’ютера.
Алгоритм методуполовинного ділення, з використанням шкільних конструкцій алгоритмічної мови,можна записати так:
 
ввід інтервалу (a;b) та потрібноїточності (D)
поки |a-b| виконувати
пц
/>
 
якщо f(a)×f(b) > 0
то a:=c
інакше b:=c
кц
вивід значення кореня /> 
1.2 Структураданих і функцій
Згідно завданнянаш проект складається з 4додаткових модулів, та основного модуля, в якому міститься головна функція main() нашогопроекту.
Короткоохарактеризуємо кожен з модулів. Почнемо з основного. Названий він відповідно — main.cpp. Містить дві функції void avtor() та void main(). Перша з них виводитьінформацію про автора проекту, є невеликою, має опис двох локальних змінних intxmax, ymax. Друга функція – головна. Вона є фактично монітором нашого проекту,спочатку запускає електронну титульну сторінку курсової роботи, потім будуєграфік функції, корені якої нам потрібно знайти, використовуючи метод дихотоміїзнаходить корінь на вказаному з клавіатури проміжку з вказаною точністю,демонструє метод дихотомії графічно та зрештою виводить головне меню на екран.Всі ці дії, крім виводу головного меню на екран, виконуються лише запускомвідповідних функцій з додаткових модулів. Крім того, функція void main()ініціалізує графічний режим, підключаючи BGI драйвер EGAVGA.BGI.
У головномумодулі оголошено такі локальні змінні:
int k=0 – длязбереження пункту головного меню, яке обирає користувач,
int gdriver =DETECT, gmode, errorcode – додаткові змінні для ініціалізації графічногорежиму.
Тепер перейдемодо додаткових модулів.
Модульtytulka.cpp містить лише одну функцію void tytulka(), що виводить на екранелектронну титульну сторінку розробника курсової роботи. Оголошено такілокальні змінні: int a=5 – значення відступів від краю екрану до рамки,xmax=getmaxx(), ymax=getmaxy() – значення роздільної здатності екрану уграфічному режимі.
Модуль grafik.cppмістить функцію void grafik(), що будує Декартову систему координат та графікфункції на ній. Оголошено такі локальні змінні:
int dec, sign; — допоміжні змінні для виклику функції fcvt – перетворення з дійсного числа устрічку;
int i; — лічильник циклу;
floatx1,x2,y1,y2,xx1,xx2,yy1,yy2; — містять координати точок на площині.
Модульdyhotom.cpp містить дві функції: double f(double x) – обчислення значеннявказаної в завданні функції для певного значення х, void dyhotom() – реалізаціячисельного методу знаходження кореня рівняння на вказаному проміжку з вказаноюточністю. Оголошено такі локальні змінні:
FILE *fp1,*fp2; — вказівники на файли, що містять проміжні результати обчислень;
int k=0; — лічильникітерацій;
double a, b, c,epsilon; — межі проміжку, середина проміжку та точність.
Модуль demon.cppмістить одну функцію void demon(), що графічно демонструє роботу функції void dyhotom().Оголошено такі локальні змінні:
intxmax=getmaxx(),ymax=getmaxy(); — значення роздільної здатності екрану уграфічному режимі
FILE *fp1,*fp2; — вказівники на файли, що містять проміжні результати обчислень;
float x, a, b; — значення кореня рівняння та межі проміжку;
int i = 7; — кількість знаків після коми, які виводить функція gcvt();
char *buf; — допоміжна змінна для роботи функції gcvt().

2. ОПИС СТРУКТУРИПРОГРАМНОГО ПРОЕКТУ
Як зазначалосявище, наш проект складається з 4 додаткових модулів, та основного модуля, в якому міститься головна функціяmain() нашого проекту. Додаткові модулі не зв’язані один з одним, а лише зголовним модулем.
Єдиним зв’язком(неявним) між модулями dyhotom.cpp та demon.cpp є спільне використання файлівKORENI.TXT та MEGI.TXT.
Загальна схемапроекту із способами взаємодії між модулями наведена на рисунку 2.1.
/>
Рисунок 2.1 — Загальна схема проекту
Розбиття програмина різні файли визначається логічною структурою програми. Використаннядодаткових модулів дозволило спростити реалізацію нашого проекту та більшнаочно показати взаємодію одних частин проекту з іншими та значно зменшити часна від лагодження та компіляцію цілого проекту.

3. ОПИС АЛГОРИТМІВРОЗВ’ЯЗАННЯ ЗАДАЧІ
Опишемо алгоритмроботи усіх функцій усіх модулів нашого проекту. Почнемо з основного main.cpp.Містить дві функції void avtor() та void main(). Перша з них виводитьінформацію про автора проекту. Алгоритм роботи дуже простий: очистка екрану-> задання кольору -> отримання розмірів екрану -> замальовуванняекрану вибраним кольором -> задання кольору та стилю тексту -> вивідтексту на екран.
Друга функція –головна. Вона є фактично монітором нашого проекту, спочатку ініціалізує графічнийрежим, підключаючи BGIдрайвер EGAVGA.BGI, потім запускає електроннутитульну сторінку курсової роботи, потім будує графік функції, корені якої нампотрібно знайти, використовуючи метод дихотомії знаходить корінь на вказаному зклавіатури проміжку з вказаною точністю, демонструє метод дихотомії графічно тазрештою виводить головне меню на екран. Після цього програма очікує виборукористувача.
Тепер перейдемодо додаткових модулів.
Модульtytulka.cpp містить лише одну функцію void tytulka(), що виводить на екранелектронну титульну сторінку розробника курсової роботи. Алгоритм роботи дужепростий і подібний до алгоритму функції void avtor().
Модуль grafik.cppмістить функцію void grafik(), що будує Декартову систему координат та графікфункції на ній. Алгоритм роботи теж подібний до алгоритму функції void avtor(),але є додатково цикл обчислення значення функції для точок з проміжку [-2;2] зкроком 0,01 та побудова кривої, що з’єднує ці точки.
Модульdyhotom.cpp містить дві функції: double f(double x) – обчислення значеннявказаної в завданні функції для певного значення х, void dyhotom() – реалізаціячисельного методу знаходження кореня рівняння на вказаному проміжку з вказаноюточністю. Проміжні результати виконання записуються у файли KORENI.TXT та MEGI.TXT.
Алгоритмнаступний:
ввід інтервалу (a;b) та потрібноїточності (D)
поки |a-b| виконувати
 початок циклу
  />
  якщо f(a)×f(с) > 0
   то a:=c
  інакшеb:=c
  кінець циклу
вивід значення кореня /> 
Модуль demon.cppмістить одну функцію void demon(), що графічно демонструє роботу функції voiddyhotom(), використовуючи проміжні результати виконання, що записані у файлиKORENI.TXT та MEGI.TXT. Алгоритм роботи дуже простий і подібний до алгоритмуфункцій void avtor() та void tytulka().
Алгоритми всіхфункцій у вигляді блок-схем подані в додатку.

4. РОЗРОБКА ТАВИКОНАННЯ ТЕСТОВОГО ПРИКЛАДУ
Перед нами стоїтьзадача перевірити вірність виконання поставленого перед нами завдання.
Побудуємо графікфункцій /> та /> використовуючиматематичний пакет 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 iteratsij4
пробуємо всіпроміжки:
a=1
b=2
/> 
Рисунок 4.3 — Зображення графіка функції
/>
Рисунок 4.4 — Вікно із запитом на введення даних

eps=0.000001
-------------------------------------------------
korin rivnjannja1.0625
kilkist iteratsij4
a=-0.5
b=0.6
eps=0.000001
-------------------------------------------------
korin rivnjannja-2.14577e-07
kilkist iteratsij21
Спробуємозбільшити точність:
a=-2
b=-1
eps=0.0000001
-------------------------------------------------
korin rivnjannja-1.42167
kilkist iteratsij24
Як бачимо,кількість ітерацій зросла.
Перевіримо, чизаписано у файл проміжні результати:



/>
/>
Дані записанонормально.
Після отриманнячислових результатів натискаємо довільну кнопку і переходимо до наступноговікна (рисунок 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++ 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);
intxmax=getmaxx(),ymax=getmaxy();
bar(0,0,xmax,ymax);
setcolor(BLUE);
settextstyle(0,0,2);
outtextxy(175,150,«Kursovurobotu»);
outtextxy(230,250,«vykonav»);
outtextxy(150,350,«ShypukOleksandr»);
getch();
}
//===============================================================
void main()
{
clrscr();
int gdriver =DETECT, gmode, errorcode;
initgraph(&gdriver,&gmode,"");
errorcode =graphresult();
if (errorcode !=grOk)
{
cout
cout
getch();
exit(1);
}
tytulka();
grafik();
dyhotom();
demon();
int k=0;
while (k!=7)
{
setcolor(10);
intxmax=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,«Zrobitsvij vybir»);
settextstyle(0,0,1);
outtextxy(75,400,«PRYMITKA:»);
outtextxy(75,425,«Jakshorivnjannja maje bilshe odnogo korenja,»);
outtextxy(75,450,«perejditposlidovno 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()
{
intxmax=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(doublex)
{
 returnx*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
 cin >> a;
 cout
 cin >> b;
 cout
 cin >>epsilon;
 if(f(a)*f(b)>0)
 cout
 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)
  a = c;
 else
  b = c;
 k++;
 }
 cout
 cout
 cout
 }
 fclose(fp1);
 fclose(fp2);
 getch();
}
grafik.cpp
#include
#include
#include
#include
#include
#include
#include
void grafik()
{
clrscr();
setcolor(WHITE);
intxmax=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
{
circle(20+((i+2)*150),240,2);
if(i>0)
outtextxy(17+((i+2)*150),250,fcvt(i,0, &dec, &sign));
else if(i
{
 outtextxy(17+((i+2)*150),250,fcvt(i,0, &dec, &sign));
 outtextxy(10+((i+2)*150),250,"-");
}
elseouttextxy(25+((i+2)*150),250,fcvt(i, 0, &dec, &sign));
}
for(i=-4;i
{
circle(320,20+(4+i)*55,2);
if(i
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);
floatx1,x2,y1,y2,xx1,xx2,yy1,yy2;
x1=-2;y1=atan(x1);
for(x2=-2;x2
{
 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
{
 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);
inta=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,«Ministerstvoosvity i nauky Ukrainy»);
outtextxy(160,30,«Lutskijnatsionalnyj tehnichnyj universytet»);
outtextxy(350,65,«Kafedrakompjuternoji inzheneriji»);
setcolor(RED);
settextstyle(0,0,2);
outtextxy(200,190,«Kursovarobota»);
settextstyle(0,0,1);
outtextxy(265,215,«zdyscypliny»);
outtextxy(255,235,«PROGRAMUVANNJA»);
outtextxy(280,250,«natemu: „);
outtextxy(120,265,“ROZVJAZUVANNJANELINIJNYH RIVNJAN METODOM DYHOTOMIJI „);
setcolor(GREEN);
outtextxy(350,350,“Vykonavst.gr.KSMS-13»);
outtextxy(350,365,«Kostenko Vasyl»);
outtextxy(350,380,«Pereviryvasystent»);
outtextxy(350,395,«LavrenchukS.V.»);
outtextxy(275,445,«Lutsk2010»);
setcolor(RED);
outtextxy(260,470,«Pressany key… „);
getch();
}

Додаток В
(обов’язковий)
Блок-схемиалгоритмів
void avtor()
/>
/>

void main()
void grafik()
/>

void dyhotom()
/>


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.