Смекни!
smekni.com

Метод Жордана Гаусса (стр. 3 из 4)

Процедура Vvid призначена для вводу елементів системи та її вільних елементів. Процедура виводить на екран вікно з розмірами, які залежать від кількості вводжуваних даних. Коли потрібно розв’язати систему з кількістю невідомих більше 4, виводиться вікно на 20 ввідних елементів (стільки ж скільки містить всіх елементів 4-х мірна система рівнянь). При заповненні вікна здійснюється перехід до наступного ж які попереднє вікно і так доти поки не будуть введені всі елементи. Дана процедура викликається із головного блоку програми при натисканні клавіші F2.

Процедура Obchuslennya обчислює невідомі на основі остатньо введених даних. Обчислення виконуються за методом Жордана-Гауса. Невідомі виводяться у спеціальному вікні, розміри якого розраховуються так, щоб помістились всі невідомі. Всі результати виводяться послідовно в стовпчику зверху вниз з такою ж послідовністю як розміщені невідомі в кожному рядку розвязуючої системи в напрямку зліва на право. У випадку, коли обчислювана система рівнянь не має розв’язків програма виводить вікно “Повідомлення” з повідомленням “Система не має розв’язків”.

Головний блок програми, при входженні в програму, виводить на екран вікно “Меню” із запрошенням натиснути одну з 4-х клавіш: F1, F2, F3, Esc та вікно “Про автора”. Для загального опису даних про створення пргграми. В подальшій роботі крім цих вікон на екран виводяться вікна, які залежать від поточної роботи з програмою.

При натисканні однієї з 4-х даних клавіш активізується відповідна процедура. При натисканні клавіші ESC закінчується роюота програми і здійснюється повернення в середовище системи програмування Turbo Pascal.

2.2 Опис програми

На початку програми міститься вступний коментар до програми. Інші оператори мають наступне призначення:

Заголовок програми

Підключення зовнішнього модуля управління дисплеєм (Crt)

Опис константи (m), якій присвоюється число 21, для обмеження розмірності обчислювальних рівнянь

Надання змінній m_1 типу двомірного масиву дійсних чисел з обмеженням m*m

Надання змінній m_2 типу одномірного масиву дійсних чисел з обмеженням m

Надання змінній m_3типу одномірного масиву цілих чисел з обмеженням m

Опис, використаної у головному блоці програми мітки m1

{008} - {011} Опис використовуваних у програмі масивів та змінних

Заголовок процедури Ramka

Початок процедури

Перехід у позицію з координатами (х1, y1) і вивід у цих позиціях символа “╔”, як верхнього лівого кута рамки

Цикл виводу символів “═”, для обмеження рамки зверху

Вивід символа “╗”, як верхнього правого кута рамки

{017} - {020} Цикл виводу символа “║” для обмеження рамки з боків

Прехід у позицію з координатами (x1,y2) і вивід символа “╚” (нижній лівий кут рамки)

Цикл виводу символа “═”для обмеження рамки знизу

Вивід символа “╝” (правого нижнього кутка рамки)

Вивід у позицію (x1+3,y1) символів “[<]”

Закінчення процедури Ramka

Заголовок процедури Windo та опис вхідних даних

Початок процедури

{028} - {029} Встановлення основного та фонного кольору

Опис вікна з параметрами, які задаються при виклику процедури Windo

Очистка екрану

Виклик процедури Ramka із вхідними для неї розмірами:2,1,x2-x1,y2-y1+1

{033} - {034} Опис виводу на верхній грані рамки аосередині назви вікна

Закінчення процедури

Заголовок процедури Wikno

Початок процедури

Задання кольору фону та основного кольору

{039} - {042} Цикл виводу по всій величині екрану пропусків

{043} - {047} Виклик процедури Windo із заданнням назви вікна “Меню” та вихід у вікні головного меню

{048} – {053} Виклик процедури Windo із заданням інших координат виводячого вікна та задання назви вікна “Про автора” а також вивід у цьому вікні відомостей про автора

Кінець прцедури Vikno

Заголовок процедури Wind та опис вхідних даних

Початок процедури

Виклик процедури Vikno

Виклик процедури Windo

Закінчення процедури Wind

Заголовок процедури Vvidn

Початок процедури

Виклик процедури Wind із заданням назви виводячого вікна “Ввід розмірності квадратної матриці”.

{063} - {064} Ввід розмірності

{065} - {069} Перевірка умови чи часом не введена розмірність більша за 20, якщо так то виводиться на екран повідомлення “Розмірність повинна бути не більшою за 20”

Кінець процедури Vvidn

Заголовок процедури Vid

Опис використаної у процедурі Vvidn мітки (m8)

Початок процедури

Присвоєння змінній k введеної розмірності системи

{075} - {076} Перевірка умови чи k>4 якщо так то змінній k присвоюється 4, що буде використане для обмеження розмірності вікна.

{077} - {079} Присвоєння змінній позиціонування курсора та змінній організації початкових значень циклів початкового значення j

{080} Виклик процедури Window із вхідними параметрами та назвою виводячого вікна “Ввід елементів”

{081} - {082} Початок циклів нумерації ввідних елементів

{083} - {086} Перехід у позицію з координатами (3,t+1) та вивід на екран “Елемент а[i,j]=” або “вільний елемент [i,j]=” залежно від поточного вводу елемента та очікування вводу цього елемента

{087} Перевірка умови чи вікно вводу повністю заповнене, якщо так то початок складного оператора

{088} – {089} Присвоєння змінній позиціонування курсора та змінній початку циклу по рядках відповідно значень 1 і значення початкового номера рядка

{090} – {094} Перевірка чи остатньовведене число є елементом чи вільним членом. Якщо елементом, то змінній початку циклу по стовпцях присвоюється номер наступного стовпця. Якщо вільний елемент то змінній h стає одиницею, змінна початку циклу по рядкає дорівнює номеру наступного стовпця, якщо вільний елемент то змінна h стає одиницею.

{095} Очистка заповненого елементами вікна.

{096} Передача на мітку M8

{097} Закінчення складного оператора

{098}-{102} Перевірка чи в поточне вікно ще вмітиться наступний елемент: якщо так, то змінна переміщування курсора збільшується на одиницю, а змінній h і z присвоюється початкове значення один.

{103} Закінчення циклу вводу елементів

{104} Закінчення процедури Vvid

{105} Заголовок процедури Obchuslennia

{106} Опис використаних у процедурі міток

{107} Початок процедури

{108} Присвоєння змінній j номера стовпця вільних елементів

{109}-{110} Цикл заміни вільних елементів на протилежні

{111}-{112} Обнуління змінної t, яка буде використовуватись для обчислення в циклі кількості виконуваних стовпців та присвоєння змінній e розмірності розв’язуючої системи

{113}-{114} Цикл обнуління масиву E, який буде використовуватись для запам’ятовування кількості зсувів вліво кожного стовпця після кожного наступного викидування стопця.

{115} Початок циклу обчислення невідомих

{116} Обнуління змінної I

{117}-{118} Перевірка чи I дорівнює кількості рядків системи. Якщо так то перехід на мітку.

{119} Присвоєння нуля змінні j

{120}-{123} Перевірка чи з даного перевіряючогорядка, вже був використаний елемент для основного елемента чи ні. Якщо так, то перехід на мітку m4

{124} Надання змінній j нульового значення

{125} Збільшення змінної j на одиницю

{126} Перевірка умови: чи дійшли до останнього рядка, чи перевіряючий елемент стоїть перед вільним елементом даного рядка і чи даний елемент дорівнює нулю. Якщо все так то перехід на мітку m6

{127} Перевірка умов: чи перевіряючий елемент є передостатнім в рядку I чи наний елемент дорівнює нулю, якщо так то перехід на мітку m2

{128}-{132} Якщо перевіряючий елемент дорівнює нулю то перехід на мітку m5 і запам’ятовування індексів даного перевіряю чого елементу

{133} Присвоєння змінній k остатнього перевіряю чого елементу

{134}-{135} Початок циклів по стовпцю і рядку для обчислення елементів залишившиїся системи після попередніх обчислень.

{136}-{137} Перевірка умови: чи обчислювальний елемент не стоїть в рядку або стовпці до якого належить основний елемент. Якщо умова виконується то поточний елемент обчислюється за правилом обчислення двомірного визначника і результат запам’ятовується в інший масив

{138}-{139} Якщо обчислювальний елемент стоїть в рядку де є останьо обраний основний елемент але не є основним елементом то обчислювальний елемент запам’ятовується в масив В з протилежним знаком

{140} Закінчення циклу обчислення елементів

{141}-{142} Початок циклу по викиданню стовпця з основним елементом

{143}-{144} Якщо індекс стовпця менший за цей же індекс останнього елемента то в масив А буде записане число, яке одержується шляхом ділення елемента з масиву В з цими ж індексами на основний елемент

{145}-{148} якщо індекс стовпця більший або рівний цьому ж індексу основного елемента то в масив А запам’ятовується число отримане шляхом ділення наступного елемента поточного рядка з масиву В на основний елемент

{149} Закінчення циклу викидання стовпця

{150} Збільшення змінної t на одиницю

{151} Запам’ятовування в масив С з яких рядків уже були використані елементи для основного елемента

{152} Запам’ятовування в масив D навпроти кожного рядка остаточний результат якій змінній має відповідати

{153}-{158} Цикл запам’ятовування кількості зсувів вліво після кожного наступного викидування стовпця

{159} Зменшення змінної z на одиницю

{160} закінчення циклу обчислення невідомих

{161} присвоєння змінній z одиниці

{162}-{165} Цикл впорядкування результатів

{166} Присвоєння змінній t нуля

{167} Виклик процедури Wind і надання розмірів та заголовку вікна, яке виводиться цією процедурою

{168}-{171} Цикл виводу результатів

{172} Перехід на мітку m7

{173} Виклик процедури Wind і задання заголовку

{174} Перехід у позицію (10,3) і вивід повідомлення “Система немає розв’язку”

{175} Очікування натискання клавіші на клавіатурі

{176} Закінчення процедури Obchusennja

{177} Початок головного блоку програми

{178} Виклик процедури Vikno

{179} Очікування натискання однієї з ф-них клавіш: F1, F2, F3 або ESC

{180} Заголовок оператора вибору, який аналізує код натиснутої клавіші