Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга_мат_3_new1.doc
Скачиваний:
24
Добавлен:
17.02.2016
Размер:
1.19 Mб
Скачать

Приклади використання двомірних масивів

Приклад 12.Скласти програму для розв’язання системи n лінійних рівнянь з n невідомими.

Розв’язання: Задача цікава тим, що вона досить часто постає при розв’язанні фізичних, технічних, економічних та інших практичних задач. У загальному вигляді система n лінійних рівнянь з n невідомими записується у вигляді:

Двомірний масив, або матриця, утворена з коефіцієнтів біля невідомих, називається матрицею коефіцієнтів даної системи, а одномірний масив, утворений з правих частин рівняння називається порядком системи. Найбільш поширеним алгоритмом розв’язання систем лінійних рівнянь є алгоритм Гауса, або як його інколи називають – алгоритм виключення невідомих. Пояснимо дію алгоритму на конкретному прикладі, а потім напишемо програму для загального випадку.

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

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

Остання система легко розв’язується поступовою підстановкою значень змінних від останнього рівняння до першого: х3 = 4, х2 = –2, х1 = 3.

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

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

Ми приведемо кінцеву програму алгоритму Гауса з відповідними коментарями у потрібних місцях. Надіємось, що ви вже досягли того рівня класності у програмуванні, коли найбільш прості алгоритми, що використовуються у програмі, вам зрозумілі прямо з тексту програми.

program Gaus;

uses dos, crt;

const k = 20;

type urawnenie = array[1..k+1] of real;

matrix = array[1..k] of urawnenie;

bar = array[1..k] of real;

var mas : matrix;

x : bar;

max, f : real;

i, j, n, d, l : integer;

begin

{ Введеннявхiднихданих }

write('Введiтьпорядоксистеми: ');readln(n);

for i := 1 to n do

begin

for j := 1 to n do

begin

write('a[',i,',',j,'] = ');

readln(mas[i][j]);

end;

write('b[',i,'] = ');

readln(mas[i][n+1]);

end;

{ Виведення iх на екран у звичному виглядi }

writeln('Програма розв''язуе методом Гауса систему: ');

for i := 1 to n do

begin

for j := 1 to n+1 do

if j < n+1 then

if j = 1 then write(mas[i][j]:2:1,' x',j)

else if mas[i][j] < 0 then write(' - ',-mas[i][j]:2:1,' x',j)

else write(' + ',mas[i][j]:2:1,' x',j)

else write(' = ',mas[i][j]:2:1);

writeln;

end;

{ АлгоритмГауса - прямийхiд }

for i := 1 to n do

begin

{ вибiр рiвняння з найбiльшим за модулем коеф. при х[i] }

max := abs(mas[i][i]);

d := i;

for l := i+1 to n do

if abs(mas[l][i]) > max then

begin

max := abs(mas[l][i]);

d := l;

end;

{ якщо потрiбно, то переставили мicцями два рiвняння }

if d <> i then

for j := i to n+1 do

begin

f := mas[i][j];

mas[i][j] := mas[d][j];

mas[d][j] := f;

end;

{ дiлимо i-терiвняннянакоеф. при x[i] }

f := mas[i][i];

for j := i+1 to n+1 do mas[i][j] := mas[i][j]/f;

{ виключаемо x[i] з усiх рiвняннь, що стоять нижче }

for l := i+1 to n do

begin

{ виключаемо x[i] з l-горiвняння }

f:= mas[l][i];

for j := i+1 to n+1 do mas[l][j] := mas[l][j] - mas[i][j]*f;

end;

end;

{ кiнецьпрямогоходу i початокзворотнього }

x[n] := mas[n][n+1];

for i := n-1 downto 1 do

begin

x[i] := mas[i][n+1];

for j := i+1 to n do x[i] := x[i] - mas[i][j]*x[j]

end;

{ виведеннярезультатiв }

writeln; writeln('Коренi системирiвнянь:');

for i:=1 to n do write(' x[',i,'] = ',x[i]:2:1);

readln;

end.

Завдання

  1. Дано цілочислову прямокутну таблицю порядку . Усі елементи таблиці, менші за середнє арифметичне її значень, замінити на -1, більші – на 1.

  2. Дано квадратну дійсну таблицю розмірності n. Обчислити кількість входжень заданого елемента x.

  3. Дано квадратну дійсну таблицю розмірності n. Обчислити кількість максимальних елементів.

  4. Дано квадратну дійсну таблицю розмірності n. Обчислити кількість мінімальних елементів.

  5. Дано прямокутну цілочислову таблицю порядку . Визначити середнє арифметичне максимального і мінімального її значень.

  6. Елементи цілочислової прямокутної матриці розміром задано випадковим чином. Надрукувати пари індексів першого максимального елемента.

  7. Елементи цілочислової прямокутної матриці розміром задано випадковим чином. Надрукувати пари індексів останнього мінімального елемента.

  8. Елементи цілочислової прямокутної матриці розміром задано випадковим чином. Надрукувати пари індексів усіх максимальних елекментів.

  9. Дано квадратну дійсну таблицю порядку n. Усі максимальні елементи заданої таблиці замінити нулями.

  10. Дано таблицю , де , . Надрукувати суму елементів кожного стовпчика.

  11. Дано таблицю , де , . Надрукувати середнє арифметичне кожного стовпчика.

  12. Дано натуральне число n. Визначити кількість додатних і кількість від’ємних елементів таблиці , де , якщо .

  13. Дано натуральне число n. Визначити кількість додатних і кількість від’ємних елементів таблиці , де , якщо .

  14. Дано натуральне число n. Визначити кількість додатних і кількість від’ємних елементів таблиці , де , якщо .

  15. Дано натуральне число n. Обчислити елементи квадратної таблиці де , за такою формулою: .