Рішення лінійних задач засобом побудови матриць методом Якобі

Загальне поняття про метод Якобі. Мова програмування C++ Builder, її призначення. Оператор do-while, його використання. Динамічний розподіл пам’яті. Загальний вигляд інтерфейсу програми, інформація про метод. Реалізація програми, модуль мain.cpp та dfm.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 17.06.2012
Размер файла 320,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Зміст

ВСТУП

РОЗДІЛ 1. ТЕОРЕТИЧНІ ВІДОМОСТІ

1.1 Постановка задач

1.2 Опис методу

1.3 Умова збіжності

1.4 Призначення мови

1.5 Основні елементи мови

РОЗДІЛ 2. ПРАКТИЧНА РЕАЛІЗАЦІЯ

2.1 Інтерфейс програми

2.2 Загальний опис реалізації

2.3 Реалізація синтаксичного аналізатора

ВИСНОВКИ

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

ДОДАТКИ

Вступ

Завданням даної курсової роботи є створення програмного засобу для розв'язування лінійних задач засобом побудови матриць методом Якобі.

Мета роботи полягає у забезпеченні цільової аудиторії інструментарієм, що дозволяє впровадити елементи інтерактивності у навчальний процес при вивченні властивостей елементарних функцій на заняттях з математики, вищої математики та інших дисциплін засобами створення програмного забезпечення - С++Builder.

Актуальність виконаної розробки забезпечена активізацією впровадження комп'ютерних технологій в освіті, розвитком інтерактивних засобів навчання, популяризацією обчислювальної техніки серед широких кругів користувачів. Не дивлячись на те, що в даний час існують потужні пакети, призначені для виконання складних математичних та інженерних розрахунків (Mathcad, Mathlab, Mathematica та ін.), розробка невеликих за обсягом і недорогих програмних засобів є цілком виправданою і доцільною. Відсутність необхідності глибокого вивчення принципів роботи з програмою, простота і наочність інтерфейсу користувача, спрямованість на конкретний спектр задач є головними перевагами даної розробки.

Розділ 1. Теоретичні відомості

Метод Якобі - метод простої ітерації для розв'язання системи лінійних алгебраїчних рівнянь.

1.1 Постановка задачі

Маємо систему лінійну систему рівнянь:

де

Можна представити і в іншій формі:

1.2 Опис методу

Проведемо попереднє перетворення системи рівнянь
до ітераційного вигляду . Вказане перетворення може бути здійснено по одному з наступних правил:

де D означає матрицю, у якій на головній діагоналі стоять відповідні елементи матриці A, а всі інші нулі, тоді як матриці U і L містять верхню і нижню трикутні частини A, на головній діагоналі яких нулі, - одинична матриця.

Тоді процедура знаходження рішення має вигляд:

Чи у вигляді по елементної формули:

1.3 Умова збіжності

Нехай . Тоді при будь-якому виборі початкового наближення :

- метод збігається;

- швидкість збіжності методу дорівнює швидкості збіжності геометричної прогресії зі знаменником ;

- вірна оцінка похибки: .

1.4 Призначення мови

Мова програмування C++ Builder призначена для:

- можливості використання бібліотек наявних в Windows, завдяки вже стандартизованим функціям інтерфейсу;

- швидкої і зручної розробки додатків, які забезпечують надійну систему “клієнт - сервер” (розподілений додаток);

- можливості повторного використання коду при розробці власних додатків.

1.5 Основні елементи мови

Програма на С++ складається з об'явлень (змінних, констант, типів, класів, функцій) і описів функцій. Серед функцій завжди є головна - main для консольних додатків або WinMain для додатків Windows. Саме ця головна функція виконується після початку роботи програми.

В C++ Builder всі об'єкти компонентів розміщуються в об'єктах - формах. Для кожної форми, яка проектується в додатку, C++ Builder створює окремий модуль. Саме в модулях і здійснюється програмування задач. В обробниках подій об'єктів - форм і компонентів, розміщуються алгоритми. В основному вони зводяться до обробки інформації, яка міститься у властивостях одних об'єктів, і завданні за результатами обробки властивостей інших об'єктів. При цьому постійно відбувається звертання до методів різних об'єктів.

Згідно принципів приховування інформації звичайно текст модуля розділяють на заголовочний файл інтерфейсу, який містить об'явлення класів, функцій, змінних і т.п., і файл реалізації, в якому міститься опис функцій. Стандартне розширення файлів реалізації - *.cpp. Стандартне розширення заголовочних файлів - *.h.

Після того, як програма написана, на її основі повинен бути створений виконавчий файл (модуль). Цей процес здійснюється в декілька етапів.

Спочатку працює препроцесор, який перетворює вихідний текст. Препроцесор здійснює перетворення у відповідності із спеціальними директивами препроцесора, які розміщуються у вихідному тексті. Препроцесор може у відповідності з цими директивами включати тексти одних файлів в тексти інших, розгортати макроси - скорочені позначення різних виразів і виконувати багато інших перетворень.

Після завершення роботи препроцесора починає працювати компілятор. Його задача - перекласти тексти модулів в машинний (об'єктний) код. В результаті з кожного вихідного файлу *.cpp утворюється об'єктний файл, який має розширення *.obj.

Після завершення роботи компілятора працює компонувальник, який об'єднує об'єктні файли в єдиний завантажувальний виконавчий модуль, який має розширення *.exe. Цей модуль можна запускати на виконання.

Директива #include застосовується для включення копії вказаного в директиві файлу в то місце, де знаходиться ця директива. Існують дві основні форми директиви #include:

#include <ім'я файлу>

#include “ім'я файлу”

Відзнака між цими формами полягає в методі пошуку препроцесором файлу, що включається. Якщо ім'я файлу взяте в кутові дужки, то послідовність пошуку файлів препроцесором заданого файлу визначається заданими каталогами включення. Якщо ж ім'я файлу взяте в лапки, препроцесор шукає файл, переглядаючи каталоги в наступній послідовності:

каталог того файлу, який містить директиву #include;

каталоги файлів, які включили в даний файл директивою #include;

поточний каталог.

Директиви #define створюють символічні константи або макроси без параметрів, які позначаються ідентифікаторами, і макроси - операції, що познача-ються символьними рядками. Формат директиви #define при об'явленні символічної константи:

#define ідентифікатор константи текст, що заміщує

Наприклад: #define PI 3.1415926

Константи можуть використовуватися в тексті програми в будь-який операторах та виразах. Є 4 типи констант: цілі, з плаваючою точкою, символьні та перелічені. Наприклад: 25 і - 5 - цілі константи, 4.8, 5е15, 5Е15, - 5.1е - 8 - константи з плаваючою точкою, `A', `\0', `\n', `007' - символьні константи, “Це - рядок” - рядкова константа.

Цілі константи можуть бути десяткові, вісімкові та шістнадцяткові. Вісімкові константи починаються з символа нуля, після якого слідують вісімкові цифри (від 0 до 7). Наприклад: 032. Вісімкові константи не можуть перевищувати значення 037777777777.

Шістнадцяткові константи починаються з символа нуля та X або x, після яких слідують шістнадцяткові цифри (від 0 до F). Наприклад: 0XF5A, 0x15ba. Шістнадцяткові константи не можуть перевищувати значення 0xFFFFFFFF.

Символьні константи повинні братись в одинарні лапки. Ці константи зберігаються як char, signed char або unsigned char.

Рядкові константи беруться в подвійні лапки. Вони зберігаються як послідовність символів, що завершується нульовим символом `\0'. Пустий рядок містить лише нульовий символ.

Константи переліченого типу об'являються наступним чином:

enum назва {перелік значень};

Наприклад, оператор

enum color {red, yellow, green}; об'являє змінну з назвою color яка може приймати константні значення reg, yellow або green. Цим константам присвоюються цілі значення, що визначаються їх місцем в списку об'явлення: red = 0, yellow = 1, green = 2.

Іменована константа - це константа, якій присвоєний ідентифікатор. Об'явлення іменованої константи є вказівкою компілятору замінити у всьому тексті програми цей ідентифікатор значенням константи.

Іменовані константи об'являються як і змінні, але з додаванням модифікатора const:

const тип ім'я константи = значення;

Наприклад:

const float Pi = 3.14159;

Змінна є ідентифікатором, що позначає деяку область у пам'яті, в якій зберігається значення змінної. Це значення може змінюватися під час виконання програми.

Об'явлення змінної має вигляд:

тип список ідентифікаторів;

Наприклад:

int x1, x2;

Водночас з об'явленням деякі або всі змінні можуть бути ініціалізовані. Наприклад:

int x1 = 2, x2 = 5, x3;

Кожна змінна характеризується деяким класом пам'яті, який визначає її час життя - період, на протязі якого ця змінна існує в пам'яті.

В С++ існує чотири специфікатори класу пам'яті: auto, register, extern і static.

Ключові слова auto і register використовуються для об'явлення змінних з локальним часом життя. Ці специфікатори застосовуються лише до локальних змінних. Локальні змінні створюються при вході у блок, в якому вони об'явлені, існують лише під час активності блоку та зникають при виході з блоку.

Специфікатор register може бути розміщений перед об'явленням автоматичної змінної, щоб компілятор розміщував змінну не в пам'яті, а в одному з високошвидкісних апаратних регістрів процесора.

Специфікатори extern і static використовуються, щоб об'явити ідентифікатори змінних як ідентифікатори статичного класу пам'яті з глобальним часом життя.

Локальні змінні, об'явлені із специфікатором static, відомі лише в тому блоці, в якому вони визначені, але на відміну від автоматичних змінних вони зберігають своє значення на протязі всього час виконання програми.

Функції являють собою програмні блоки, які можуть викликатися з різних частин програми. При виклику в них передаються деякі змінні, константи, вирази, що є аргументами, які в самих функціях сприймаються як формальні параметри. При цьому функції повертають значення певного типу, яке заміщує у виразі, що викликав функцію її назву.

Наприклад, оператор:

i = 5 * F (x);

викликає функцію F з аргументом x, множить значення, що вона повертає на 5 і присвоює результат змінній i.

Допускається також виклик функції, що не використовує значення, яке вона повертає. Наприклад:

F (x);

В цьому випадку, значення, яке повертає функція ігнорується.

Функція описується наступним чином:

тип значення, що повертається назва функції (список параметрів)

{

оператори тіла функції

}

Наприклад:

double FSum (double x1, doubl x2, int A)

{

}

Вихід з функції може здійснюватися наступними шляхами. Якщо функція не повинна повертати жодного значення, то вихід з неї відбувається до або при досягненні фігурної дужки, яка закриває її тіло, або при виконанні оператора return. Якщо ж функція повинна повертати деяке значення, то нормальний вихід з неї здійснюється оператором:

return вираз

де вираз повинен формувати значення, що повертається і відповідати типу, об'явленому в заголовку функції.

Наприклад:

double FSum (double x1, double x2, int A)

{

return A * (x1 + x2);

}

Оператор if призначений для виконання тих або інших дій в залежності від істинності або невірності деякої умови. Умова задається виразом, який має результат булева типа.

Оператор має дві форми: if та if - else. Форма if має вигляд:

if (умова) оператор;

Дужки, що охоплюють умову, є обов'язковими.

Умовою може бути вираз, що перетворюється в булев тип. Якщо умова є істиною (повертає true - ненульове значення), то вказаний в конструкції if оператор виконується. В противному випадку управління відразу передається наступному за конструкцією if оператору.

Форма конструкції if - else має вигляд:

if (умова) оператор 1;

else оператор 2;

Ящо умова повертає true, то виконується перший оператор, в противному випадку виконується другий оператор.

Оператор switch дозволяє провести аналіз значення деякого виразу і в залежності від його значення виконати ті або інші дії. В загальному випадку формат оператора switch наступний:

switch (вираз вибору) {

case значення 1:оператор 1; break;

case значення 2:оператор 2; break;

case значення n:оператор n; break;

default:оператор;

}

В цій конструкції вираз вибору повинен мати порядковий тип - цілий, перелічений і т.д. Значення, які вказуються в мітках case, повинні бути константними виразами.

Якщо значення виразу вибору співпало із значенням, вказаним в одній з міток case, то виконується оператор, записаний після цієї мітки, після чого, якщо не прийняти відповідних мір, будуть виконуватися всі наступні оператори інших міток. Оскільки це звичайно небажано, то, як правило, після оператора, який повинен виконатися, записують оператор

break;

Він перериває виконання структури switch і виконання передається наступному за нею оператору.

Якщо значення виразу вибору не відповідає жодному з перелічених у мітках, то виконується оператор, що слідує за міткою default. Мітка default не обов'язково повинна бути включена в структуру switch.

Наприклад:

switch (Day) {

caseMonday : printf (“Bad day\n”);break;

caseSunday : printf (“Good day\n”); break;

default:printf (“Unknown day\n”);

}

Оператор for забезпечує циклічне повторення деякого оператора задану кількість разів. Оператор, що повторюється, називається тілом циклу. Повторення циклу звичайно забезпечується деякою управляючою змінною (лічильником), яка змінюється при кожному виконанні тіла циклу. Повторення завершується, коли управляюча змінна досягає заданого значення.

Формат оператора for:

for (вираз 1; вираз 2; вираз 3) оператор;

де вираз 1 задає початкове значення змінної, яка керує циклом, вираз 2 є умовою продовження циклу, а вираз 3 змінює управляючу змінну.

Наприклад:

int Max, Sum;

Max = Sum = Data[0];

for (int i = 1; i < 10; i++) {

if (Data[i] > Max) Max = Data[i];

Sum += Data[i];

}

Оператор do - while використовується для організації циклічного виконання оператора або сукупності операторів, до тих пір, поки не буде порушеною деяка умова. Формат оператора:

do оператор while (умова);

Структура працює наступним чином. Виконується оператор тіла циклу. Потім обчислюється умова - вираз, яке повинно повертати значення булева типа. Якщо результат - true, то повторюється виконання тіла циклу. В противному випадку цикл завершується.

Наприклад:

i = 0;

do {

Data[i] = 0;

++i;

} while (i < 10);

Оператор while використовується для організації циклічного виконання тіла циклу, поки виконується деяка умова. Формат оператора:

while (умова) оператор;

Структура працює аналогічно описаній в пункті 5.2.7.4, однак умова перевіряється до того, як оператор виконається перший раз.

Для переривання циклу, побудованого на основі будь-якого циклового оператору, використовується оператор break:

for (i = 0; i < n; i++) {

if (x[i] > 0) break;

s += x[i];

}

Для переривання поточної ітерації циклу та примусового переходу до наступної ітерації використовується оператор continue:

for (i = 0; i < n; i++) {

if (x[i] > 0) continue;

s += x[i];

}

Динамічний розподіл пам'яті широко використовується для економії обчислювальних ресурсів. Ті змінні або об'єкти, які стають непотрібними, знищуються, а звільнене місце використовується для нових змінних або об'єктів.

Динамічний розподіл пам'яті виконується за допомогою функцій malloc і free або операторних функцій new і delete:

void* malloc (size_t size) - функція виділяє блок пам'яті розміром size байт та повертає адресу початку цього блоку в ОП у нетипізованому покажчику;

void free (void* point) - функція звільняє блок пам'яті, адреса початку якого зберігається в покажчику point;

:: new тип розмір - функція, яка виділяє блок пам'яті і повертає типізований покажчик на його початок;

:: delete покажчик - функція, яка видаляє блок пам'яті, адреса якого задана в покажчику.

Приклади:

int a;

a = (int*) malloc (sizeof (int) * 20);

free ((void*) a);

float c;

c = new float[200];

delete] c;

Гарно структурований додаток, що забезпечує простоту його модернізації та супроводження, повинен будуватися на основі диспетчеризації дій - головних операцій, передбачених в ньому. Одним з компонентів, які здійснюють диспетчеризацію дій є компонент ActionList. Усі дії, які повинні здійснюватися у відповідь на ті або інші дії користувача (вибір розділів меню, щиглики на кнопках та ін.), можуть бути занесені у список ActionList під деякими назвами. Цим діям можуть бути приписані різні характеристики: написи, піктограми, тексти підказок, швидкі клавіші. Кожній дії відповідає деякий обробник події OnExecute. В C++Builder передбачена така множина стандартних дій, для яких навіть не треба писати обробники подій, оскільки відповідні обробники вже закладені в об'єктах цих дій.

В C++Builder 6 з'явилась група набагато більш потужних компонентів, призначених для управління діями: ActionManager, ActionMainMenuBar, ActionToolBar, CustomizeDlg. Вони не лише забезпечують нові можливості візуального проектування, але й вирішують, наприклад, таку задачу, як налагодження меню та інструментальних панелей користувачем.

Усі керуючі елементи - кнопки, розділи меню посилаються на відповідні дії своєю властивістю Action. При цьому характеристики дії автоматично переносяться в ці компоненти.

Розділ 2. Практична реалізація

2.1 Інтерфейс програми

якобі метод програмування мова

Після запуску програми з'являється форма (див. мал. 2.1.), де потрібно вказати розмір матриці А.

Мал. 2.1 - Введення розміру матриці

Мал. 2.2 - Головна форма

Після цього з'являється головна форма, де потрібно ввести значення матриць А, та B.

Мал. 2.3 - Результат роботи програми

Після введення значень, потрібно натиснути на клавішу «Почати розрахунок». Після чого програма реалізує алгоритм, та знайде корінь рівняння.

Ця програма містить інформацію про метод Якобі, а також про розробника. (див. мал. 2.4, 2.5).

Мал. 2.4 - Інформація про метод Якобі

Мал. 2.5 - Інформація про розробника

2.2 Загальний опис реалізації

Реалізацію програми здійснено в середовищі програмування C++ Builder 2009/2010. Проект має наступну структуру:

- Graf.cpp - головний модуль проекту, що містить точку входу у програму;

- MainUnit.cpp - модуль головного вікна програми, що містить необхідні обробники подій від візуальних компонентів;

- CalcUnit.cpp - модуль обчислювача;

- HelpUnit.cpp - модуль вікна допомоги програми.

Загальний код програми описано окремо (див. Додатки А, Б), блок-схема виконавчої частини програми сформована відповідно до роботи програми (див. Додаток В).

2.3 Реалізація програми

Використані бібліотеки

#include <vcl.h>

#pragma hdrstop

#include "Main.h"

#include "Math.h"

//--------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

Форма у якій задається розмір матриці

void __fastcall TForm1::FormCreate(TObject *Sender)

{

N = StrToInt(InputBox("Увага","Введіть розмір матриці A","4"));

StringGrid1->ColCount = N;

StringGrid1->RowCount = N;

StringGrid2->RowCount = N;

Кнопка “Почати розрахунок”

void __fastcall TForm1::Button1Click(TObject *Sender)

{

StringGrid1->Options = StringGrid1->Options>>goEditing;

StringGrid2->Options = StringGrid2->Options>>goEditing;

//

for (int i = 0; i < N; i++) {

for (int j = 0; j < N; j++) {

A[i][j] = StringGrid1->Cells[j][i].ToDouble();

}

B[i] = StringGrid2->Cells[0][i].ToDouble();

}

//

Memo1->Clear();

float *TX = new float[N];

float Norma;

int Count = 0;

do

{

for (int i = 0; i < N; i++)

{

TX[i] = -B[i];

for (int j = 0; j < N; j++)

{

if (i != j) TX[i] += A[i][j]*X[j];

}

TX[i] /= -A[i][i];

}

Norma = fabs(X[0]-TX[0]);

for (int i = 0; i < N; i++)

{

if (fabs(X[i]-TX[i])>Norma) Norma = fabs(X[i]-TX[i]);

X[i] = TX[i];

}

//

Memo1->Lines->Add("Крок №"+IntToStr(Count));

for (int i = 0; i < N; i++)

{

Memo1->Lines->Add("X["+IntToStr(i)+"] = "+FloatToStr(X[i]));

}

Memo1->Lines->Add(' ');

Count++;

} while ((Norma > 0.001)&(Count<=25));

delete[] TX;

}

Кнопка “Вихід”

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form1->Close();

}

Висновки

При виконанні курсової роботи на тему розв'язування лінійних задач засобом побудови матриць методом Якобі, було створено ряд важливих модулів, призначених для виконання основних етапів обчислення виразів: синтаксичного аналізу виразу, побудови зворотної польської нотації виразу, обчислення виразу, формування циклу виводу значень.

У створеній програмі передбачено систему захисту від помилок. Контроль над помилками здійснюється, зокрема, при аналізі даних, введених користувачем, для запобігання конвертуванню їх з невірного рядка у числовий формат. Завдяки даній програмі став можливий легкий спосіб розв'язання матричних завдань. Іншою перевагою є те, що ця програма потребує мінімальних затрат вашого комп'ютера і буде працювати на ПК зі слабкими характеристиками. Можна сказати, що найважливішою перевагою є те що розв'язуючи матриці в програмі ви значно економите свій час, програма розв'язує матричні завдання лише за даним зразком.

Головним недоліком програми є її нездатність креслити графіки та інтерфейс бажає бути кращим. Ще поганим є те, що розв'язок матриць можливий тільки методом Якобі.

Загалом ця програма демонструє високий рівень стійкості та зручності.

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ

1. М. Эллис, Б. Строуструп. Справочное руководство по языку C++ с комментариями: Пер. с англ. - Москва: Мир, 1992. 445 с.

2. Стенли Б. Липпман. C++ для начинающих: Пер. с англ. 2тт. - Москва: Унитех; Рязань: Гэлион, 1992, 304-345 с.

3. Бруно Бабэ. Просто и ясно о Borland C++: Пер. с англ. - Москва: БИНОМ, 1994. 400 с.

4. В.В. Подбельский. Язык C++: Учебное пособие. - Москва: Финансы и статистика, 1995. 560 с.

5. Ирэ Пол. Объектно-ориентированное программирование с использованием C++: Пер. с англ. - Киев: НИИПФ ДиаСофт Лтд, 1995. 480 с.

6. Т. Фейсон. Объектно-ориентированное программирование на Borland C++ 4.5: Пер. с англ. - Киев: Диалектика, 1996. 544 с.

7. Т. Сван. Освоение Borland C++ 4.5: Пер. с англ. - Киев: Диалектика, 1996. 544 с.

8. Г. Шилдт. Самоучитель C++: Пер. с англ. - Санкт-Петербург: BHV-Санкт-Петербург, 1998. 620 с.

9. У. Сэвитч. C++ в примерах: Пер. с англ. - Москва: ЭКОМ, 1997. 736с.

10. К. Джамса. Учимся программировать на языке C++: Пер. с англ. - Москва: Мир, 1997. 320 с.

11. В.А. Скляров. Язык C++ и объектно-ориентированное программирование: Справочное издание. - Минск: Вышэйшая школа, 1997. 480 с.

12. Х. Дейтел, П. Дейтел. Как программировать на C++: Пер. с англ. - Москва: ЗАО "Издательство БИНОМ", 1998. 1024 с.

Додатки

Модуль Main.cpp

//-------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Main.h"

#include "Math.h"

//--------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//--------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//--------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

N = StrToInt(InputBox("Увага","Введіть розмір матриці A","4"));

StringGrid1->ColCount = N;

StringGrid1->RowCount = N;

StringGrid2->RowCount = N;

}

//--------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

StringGrid1->Options = StringGrid1->Options>>goEditing;

StringGrid2->Options = StringGrid2->Options>>goEditing;

//

for (int i = 0; i < N; i++) {

for (int j = 0; j < N; j++) {

A[i][j] = StringGrid1->Cells[j][i].ToDouble();

}

B[i] = StringGrid2->Cells[0][i].ToDouble();

}

//

Memo1->Clear();

float *TX = new float[N];

float Norma;

int Count = 0;

do

{

for (int i = 0; i < N; i++)

{

TX[i] = -B[i];

for (int j = 0; j < N; j++)

{

if (i != j) TX[i] += A[i][j]*X[j];

}

TX[i] /= -A[i][i];

}

Norma = fabs(X[0]-TX[0]);

for (int i = 0; i < N; i++)

{

if (fabs(X[i]-TX[i])>Norma) Norma = fabs(X[i]-TX[i]);

X[i] = TX[i];

}

//

Memo1->Lines->Add("Крок №"+IntToStr(Count));

for (int i = 0; i < N; i++)

{

Memo1->Lines->Add("X["+IntToStr(i)+"] = "+FloatToStr(X[i]));

}

Memo1->Lines->Add(' ');

Count++;

} while ((Norma > 0.001)&(Count<=25));

delete[] TX;

}

//--------------------------------------------------------------------

Модуль Main.h

//--------------------------------------------------------------------

#ifndef MainH

#define MainH

//--------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Grids.hpp>

//--------------------------------------------------------------------

class TForm1 : public TForm

{

__published:// IDE-managed Components

TStringGrid *StringGrid1;

TMemo *Memo1;

TButton *Button1;

TStringGrid *StringGrid2;

void __fastcall FormCreate(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

private:// User declarations

public:// User declarations

int N;

float A[100][100];

float B[100];

float X[100];

__fastcall TForm1(TComponent* Owner);

};

//--------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//--------------------------------------------------------------------

#endif

Модуль Main.dfm

object Form1: TForm1

Left = 465

Top = 315

BorderIcons = [biSystemMenu, biMinimize]

BorderStyle = bsSingle

Caption = #1052#1077#1090#1086#1076' '#1071#1082#1086#1073'i'

ClientHeight = 330

ClientWidth = 687

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'MS Sans Serif'

Font.Style = []

OldCreateOrder = False

Position = poDesktopCenter

OnCreate = FormCreate

PixelsPerInch = 96

TextHeight = 13

object StringGrid1: TStringGrid

Left = 8

Top = 8

Width = 321

Height = 281

DefaultColWidth = 30

DefaultRowHeight = 30

FixedCols = 0

FixedRows = 0

Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goEditing]

TabOrder = 0

end

object Memo1: TMemo

Left = 400

Top = 8

Width = 281

Height = 281

ReadOnly = True

ScrollBars = ssVertical

TabOrder = 1

end

object Button1: TButton

Left = 8

Top = 296

Width = 673

Height = 25

Caption = #1055#1086#1095#1072#1090#1080' '#1088#1086#1079#1088#1072#1093#1091#1085#1086#1082

TabOrder = 2

OnClick = Button1Click

end

object StringGrid2: TStringGrid

Left = 336

Top = 8

Width = 57

Height = 281

ColCount = 1

DefaultColWidth = 30

DefaultRowHeight = 30

FixedCols = 0

RowCount = 1

FixedRows = 0

Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing]

TabOrder = 3

end

end

Размещено на Allbest.ru


Подобные документы

  • Основні відомості з лінійної алгебри. Власні значення і вектори матриці. Метод обертання Якобі. Засоби формування інтерфейсу користувача. Текст програми алгоритму методу обертання Якобі. Вимоги до програмно-технічного забезпечення. Інструкція користувача.

    курсовая работа [306,0 K], добавлен 18.11.2015

  • Метод Якобі є узагальненням симплекса-методу лінійного програмування. Він використовується для дослідження чутливості оптимального значення функції до змін у правих частинах обмежень. Умови існування екстремумів функцій при відсутності обмежень.

    курсовая работа [326,6 K], добавлен 09.01.2009

  • Принципи технології створення програмних продуктів. Набір файлів, необхідних для створення програми в Delphi, варіанти роботи з ними. Програмування графічного інтерфейсу користувача. Зовнішній вигляд і лістинг програми, використані команди і компоненти.

    курсовая работа [550,5 K], добавлен 03.01.2014

  • Використання мови програмуванння Java при виконанні "задачі лінійного програмування": її лексична структура і типи даних. Методи розв’язання задачі. Особливості логічної структури програми, побудова її зручного інтерфейсу за допомогою симплекс методу.

    курсовая работа [437,9 K], добавлен 24.01.2011

  • Створення програми "Вантажоперевезення" в середовищі програмування Borland C++ Builder. Важливість використання інформаційних систем в сучасних умовах. Інструкції для системного програміста – проектні рішення, архітектура програми, її призначення.

    курсовая работа [8,1 M], добавлен 07.06.2011

  • Поняття мови програмування С++, її сутність та особливості, призначення та використання. Структура програми, її основні елементи та загальні правила роботи. Охорона праці при роботі з обчислювальною технікою. Апаратні вимоги для виконання програми.

    курсовая работа [126,2 K], добавлен 29.03.2009

  • Створення навчальної програми для вирішення системи лінійних рівнянь різними методами. Детальне покрокове рішення та довідкова теоретична інформація. Структура і функціональне призначення модулів програмного продукту, основні елементи його інтерфейсу.

    курсовая работа [1,9 M], добавлен 20.05.2015

  • Поняття та сфери використання тривимірної графіки. Описання та характеристика можливостей бібліотеки OpenGL. Загальний опис інтерфейсу мови програмування Borland C++, лістинг програми, що демонструє її можливості. Розрахунок витрат на виконання проекту.

    дипломная работа [1,6 M], добавлен 24.06.2015

  • Розробка програми в візуальному середовищі С++. Визначення значення функцій в середовищі Builder мовою програмування С++. Обчислення елементів квадратної матриці згідно заданного алгоритму. Бібліотека візуальних компонентів і середовище програмування.

    курсовая работа [451,5 K], добавлен 15.01.2012

  • Гіпертекст як розширений текст з елементами: ілюстрації, посилання, вставні об'єкти. Гіперпосилання та його вигляд. Поняття web-документу та web-сайту. Призначення програми-браузера. Мова розмітки гіпертексту - НТМL. Створення гіпертекстових документів.

    презентация [266,1 K], добавлен 21.11.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.