Смекни!
smekni.com

Операції над квадратною матрицею

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Національний технічний університет України

«Київський політехнічний інститут»

Курсова робота

з курсу

«Обчислювальна техніка, алгоритмічні мови і програмне забезпечення»

Київ 2009


Зміст

1. Завдання. Математичне розшифрування завдання

2. Лістинг програми

3. Виведення результатів роботи програми

4. Опис роботи програми

Список літератури


1. Математичне розшифрування завдання

На квадратному аркуші картатого паперу розміру 8*8 кліток намальовано декілька прямокутників, кожний прямокутник складається з кліток, прямокутники не накладаються один на одного й не стикаються. Дана цілочисельна квадратна матриця порядку 8, у якій елемент рівняється «0», якщо відповідна клітка належить якому-небудь прямокутнику, і відмінний від «0» в іншому випадку. Визначити кількість прямокутників.

Матриці. Основні означення

Прямокутна таблиця чисел а (I, j), і = 1,2,…, m; (j = 1,2,…, n, складена з m рядків та n стовпців і записана у вигляді:

або

називається матрицею. Поняття матриці вперше ввели англійські математики У. Гамільтон і Д. Келі. Коротко матрицю позначають так:


Де

– елементи матриці, причому індекс i в елементі
означає номер рядка, а j – номер стовпця, на перетині яких стоїть даний елемент.

Добуток числа рядків m на число стовпців n називають розміром матриці і позначають mxn. Якщо хочуть вказати розмір mxn матриці А, то пишуть

.

Матриця, в якої число рядків дорівнює числу стовпців, називається квадратною. Кількість рядків (стовпців) квадратної матриці називається її порядком. Матриця, у якої всього один рядок, називається матрицею-рядком, а матриця, у якої всього один стовпець, – матрицею-стовпцем. Дві матриці

та
називаються рівними, якщо вони однакових розмірів і мають рівні відповідні елементи:
. Нульовою називається матриця, у якої всі елементи дорівнюють нулю. Позначається така матриця буквою О. В квадратних матрицях виділяють головну і побічну діагональ.

Для виконання завдання потрібно знаходити суму елементів матриці стовпця і рядка, на які вказують індекси елемента, і замінити цією сумою сам елемент матриці.

2. Лістинг програми

Private Sub Command1_Click()

Const n = 5

Dim i, j As Byte

Dim a (n, n) As Byte, m(56) As Byte

n1 = 0

n2 = 0

ch = 0

ch1 = 0

For i = 1 To n

For j = 1 To n

Randomize

a (i, j) = Rnd(1)

Next j

Next i

For i = 1 To n

m(i) = a (i, n – 1)

For j = 1 To n

Print a (i, j),

Next j

Print

Next i

Print «–»

For i = 1 To n

For j = 1 To n

If a (i, j) = 0 Then

n1 = n1 + 1

If n1 > 1 Then

a (i, j – 1) = 1

End If

Else

If n1 > 1 Then

a (i, j – 1) = 1

ch = ch + 1

End If

n1 = 0

End If

Next j

If n1 > 1 Then

ch = ch + 1

End If

n1 = 0

Next i

For i = 1 To n

If a (i, n) = 0 And m(i) = 0 Then

a (i, n) = 1

End If

Next i

Print «===============================»

For j = 1 To n

For i = 1 To n

If a (i, j) = 0 Then

n1 = n1 + 1

Else

If n1 > 1 Then

ch = ch + 1

End If

n1 = 0

End If

Next i

If n1 > 1 Then

ch = ch + 1

End If

n1 = 0

Next j

Print «–»

For i = 1 To n

For j = 1 To n

Print a (i, j),

Next j

Print

Next i

Print «*****************************»

Print ch

End Sub

Private Sub Command2_Click()

End

End Sub

3. Виведення результатів роботи програми

Після запуску програми в Visual Basic на моніторі з`являється вікно програми, на якому виведено дві кнопки: « розрахунок» і «кінець».

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


Тобто, у цій матриці склалося три прямокутники. Для завершення програми натискаємо на кнопку «кінець».

4. Опис роботи програми

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

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

Дуже часто значення елементів масиву вводяться з клавіатури. Цей спосіб завдання інформації занадто трудоємок при роботі з масивами великих розмірів. Для налагодження широкого класу алгоритмів такої введення інформації повинен бути замінений формуванням елементів масиву випадковим чином. Для цього використовують вбудовані засоби Турбо Паскаля: процедуру Randomize та функцію Random. Ви вже стикалися з цими коштами. Сьогодні ж наша задача створити процедуру введення елементів в масив і процедуру виведення елементів на екран.

Наведемо приклад заповнення масиву випадковими числами. Ця процедура повинна прийняти в якості вхідних параметрів масив, кількість рядків і стовпців, задані користувачем з клавіатури в основному розділі операторів. Так як наша процедура буде впливати на порожній вихідний масив, то його ми повинні передати по посиланню. Кількість рядків і стовпців достатньо передати копіями за значенням.

Procedure InsertMas1 (Var X: MyArray; n, m: integer);

Var

i, j: integer;

Begin

Randomize;

for i:= 1 to n do {пробегая последовательно строки массива}

for j:= 1 to m do {просмотрим каждую ее ячейку текущего столбца}

X [i, j]:= Random(50); {и запишем туда случайное число, которое сформирует компьютер в диапазоне [0..49]}

End; комп'ютер Procedure InsertMas1 (Var X: MyArray; n, m: integer);

Var

i, j: integer;

Begin

Randomize;

for i:= 1 to n do {пробегая последовательно строки массива}

for j:= 1 to m do {просмотрим каждую ее ячейку текущего столбца}

X [i, j]:= Random(50); {и запишем туда случайное число, которое сформирует компьютер в диапазоне [0..49]} End;

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

Розглянемо процедуру виведення елементів масиву на екран. Для того, щоб вивести наш масив на екран у вигляді таблиці, поставимо при переході до нової рядку оператор writeln і застосуємо формат виводу елементів (: 5).

Procedure PrintMas (X: MyArray; n, m: integer);

Var

i, j: integer;

Begin

for i:= 1 to n do {пробегая последовательно строки и столбцы массива}

begin

for j:= 1 to m do

write (X[i, j]:5); {выведем элемент массива на экран, выделив ему 5 знакомест}

writeln; {переход на новую строку}

end;

End;

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

Розгляньте процедуру, вирішальну наступну задачу.

Задача. Дана таблиця дійсних чисел. Порахуйте суму всіх чисел у таблиці .

Procedure Summa (A: MyArray; n, m: integer; Var S: real);

Var

i, j: integer;

Begin

S:= 0;

for i:= 1 to n do

for j:= 1 to m do

S:= S+A [i, j];

End.

Зверніть увагу, що всередині циклу з лічильником i організовано цикл з лічильником j. В результаті сумуються на початку числа 1‑й рядки (i = 1, при j = 1, 2,…, m), потім сумуються числа 2‑й рядки (i = 2, при j = 1, 2,…, m) і т.д.

У даній програмі в тілі одного циклу міститься інший цикл. Такі цикли, як Ви вже знаєте, називаються вкладеними. Причому цикл з лічильником i є зовнішнім, а цикл з лічильником j – внутрішнім. Не забувайте основне правило при написанні вкладених циклів: останній оператор внутрішнього циклу має або передувати, або збігатися з останнім оператором зовнішнього циклу. Вкладені цикли нагадують матрьошок, вкладених одна в іншу.

Список літератури

1. «Турбо Паскаль 7.1» – Бучко Д.І., Харків: «Харківська політехніка», 2005.

2. «Інформатика, алгоритмічні мови» – Олійник Н.В., Сидоренко Ю.В., Львів: «Замкова гора», 2004.

3. Web, Internet.