2. Практична частина
2.1 Архітектура програми
Реалізацію обчислення систем лінійних рівнянь з однаковою кількістю стовпців і невідомих методом Жордана-Гауса здійснює програма Kursova.pas.
Запустити дану програму можна наступними способами:
з головного меню середовища Turbo Pascal шляхом вибору опції Run/Run (спочатку програму потрібно завантажити в оперативну пам’ять);
з середовища Turbo Pascal нажиманням комбінації клавіш Ctrl+F9;
з середовища операційної оболонки Norton Commander шляхом запуску прграми Kursova.exe (попередньо програма повинна бути відкомпільована з опцією Destination to memory).
Програма Kursova.pas є продурноорієнтованою. До неї входять 7 наступних процедур:
ramka;
windo;
wikno;
wind;
vvidn;
obchuslennya.
Зробимо опис названих процедур:
Процедура Ramka призначена для виводу рамки в кожному, описаному у наступних процедурах вікні процедура виводить рамку у вигляді двох ліній. Біля верхнього лівого краю на верхній грані процедура виводить на екран 3 символи “[<]”. Процедура виконується для кращого оформлення вікна. Виклик цієї процедури здійснюється із наступних процедур.
Процедура Windo призначена для загального оформлення використовуваних у програмі вікон. Вона викликається із наступних процедур разом із вхідними, для даної процедури даними. Вхідні дані задають розміри виводжуваного вікна, основний та даний кольори, а також назву вікна.
Процедура Wikno. Призначення – виводить на екранвікно меню даної програми, та вікно опису даних про автора програми та дату створення даної програми. У вікні “Меню” процедура виводить на екран запрошення для натискання однієї із чотирьох клавіш F1-F4 та ESC відповідно при натисканні яких програма виводить вікно вводу розмірності матриці, вікно вводу елементів, вікно виводу результатів та здійснює вихід із програми. Процедура Wikno використовується процедурою Wind та із головного блоку програми.
Процедура Wind. Використовується для виводу на екран робочих вікон та вікон опису програми. Параметри виводу робочих вікон задаються при кожному виклику цієї процедури, параметри вікон опису програми є стандартними і описані вони у процедурі Wikno, яка викликається процедурою Wind. Розміри робочих вікон виводяться залежно від кількості вхідних чи вихідних даних. Процедура виконується при вводі розмірності системи, вводу елементів, та виводу результатів.
Процедура Widn викликається при натисканні клавіші F1. Вона виводить вікно вводу розмірності квідратної системи лінійних рівнянь. В разі введення розмірності більше 20-ти програма виведе повідомлення “Розмірність повинна бути не більше 20-ти”. Це означає, що дана програма не розв’яже систему з кількістю невідомих більше 20.
Процедура 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} Заголовок оператора вибору, який аналізує код натиснутої клавіші
{181} Якщо нажато клавішу F1 то здійснюється виклик процедури Widn
{182} Якщо нажато клавішу F2, викликається процедура Vvid
{183} Якщо нажато клавішу F3 виклик процедури Obchuslenja
{184} Кли нажато ESC – вихід з програми
{185} Закінчення оператору вибору
{186} Прехід на мітку m1
{187} Кінець програми
... , ary2s Типы данных для переменных, в которых хранятся значения коэффициентов системы Unit2 Gauss1 Процедура для решения системы линейных уравнений методом Гаусса Unit2 Gaussj Процедура для решения системы линейных уравнений методом Жордана-Гаусса Unit2 i,j,l Счетчики Unit1 prover Промежуточная переменная типа String, используется для проверки наличия букв среди коэффициентов ...
... на місце вектора А3 вводимо вектор А1 та знову робимо перерахунок системи в таблиці 2 за методом Жордана-Гаусса, взявши за провідний елемент а11 = 1,5. Таблиця 3. Третій крок симплекс-методу i Б Сб сk 3 2 0 0 A0 A1 A2 A3 A4 1 A1 3 1 1 0 0,666667 -0,33333 2 A2 2 2 0 1 -0,33333 0,66667 Dk 7 0 0 1,33333 0,33333 Таким чином ...
... вычисляют в следующем порядке: xjn, xjn–1, …, xj1. 3. Метод Зейделя 3.2.1. Приведение системы к виду, удобному для итераций. Для того чтобы применить метод Зейделя к решению системы линейных алгебраических уравнений Ax = b с квадратной невырожденной матрицей A, необходимо предварительно преобразовать эту систему к виду x = Bx + c. Здесь B – квадратная матрица с элементами bij (i, ...
... на t3 часов. Прибыль от реализации единицы готового изделия А составляет a рублей, а изделия В - b рублей. Составить план производства изделий А и В, обеспечивающий максимальную прибыль от их реализации. Решить задачу простым симплекс-методом. Дать геометрическое истолкование задачи, используя для этого её формулировку с ограничениями-неравенствами. а1 = 1 b1 = 5 t1 = 10 a = 2 а2 = 3 b2 = 2 t2 ...
0 комментариев