Смекни!
smekni.com

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

Коротко охарактеризуємо кожен з модулів. Почнемо з основного. Названий він відповідно - main.cpp. Містить дві функції void avtor() та void main(). Перша з них виводить інформацію про автора проекту, є невеликою, має опис двох локальних змінних int xmax, 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; - лічильник циклу;

float x1,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(). Оголошено такі локальні змінні:

int xmax=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| < D виконувати

початок циклу

якщо f(a)×f(с) > 0

то a:=c

інакше b:=c

кінець циклу

вивід значення кореня

Модуль demon.cpp містить одну функцію void demon(), що графічно демонструє роботу функції void dyhotom(), використовуючи проміжні результати виконання, що записані у файли 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 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.