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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний технічний університет України
«Київський політехнічний інститут»
Курсова робота
з курсу
«Обчислювальна техніка, алгоритмічні мови і програмне забезпечення»
Київ 2009
Зміст
Завдання. Математичне розшифрування завдання
Лістинг програми
Виведення результатів роботи програми
Опис роботи програми
Список літератури
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–PAGE_BREAK–
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     продолжение
–PAGE_BREAK–
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 – внутрішнім. Не забувайте основне правило при написанні вкладених циклів: останній оператор внутрішнього циклу має або передувати, або збігатися з останнім оператором зовнішнього циклу. Вкладені цикли нагадують матрьошок, вкладених одна в іншу.
Список літератури
«Турбо Паскаль 7.1» – Бучко Д.І., Харків: «Харківська політехніка», 2005.
«Інформатика, алгоритмічні мови» – Олійник Н.В., Сидоренко Ю.В., Львів: «Замкова гора», 2004.
Web, Internet.