Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум по QBasic.doc
Скачиваний:
4
Добавлен:
29.04.2019
Размер:
5.12 Mб
Скачать

Лабораторна робота № 12

Взаємозв’язок індексів у квадратній матриці.

Мета роботи – оволодіння навичками обробки елементів, які розташовані на діагоналях та паралелях до діагоналей квадратної матриці.

Теоретична частина

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

Умова належності елементів до головної діагоналі: i=j або i–j=0 (нижче головної діагоналі i > j; вище головної діагоналі i < j).

Умова належності елементів бічної діагоналі: i + j = N +1 (нижче бічної діагоналі i+j > N+1; вище бічної діагоналі i+j < N+1).

В квадратній матриці можна умовно провести паралелі до головної діагоналі (рис. 12. 2) і до бічної діагоналі (рис. 12. 3):

Елементи, які розташовані на паралелі до головної діагоналі:

1 паралель - A1,4 ( i – j = -3);

2 паралель - A1,3; A2,4 ( i – j = -2);

3 паралель - A1,2; A2,3; A3,4 ( i – j = -1);

Головна діагональ A1,1; A2,2; A3,3; A4,4 ( i – j = 0);

4 паралель - A2,1; A3,2; A4,3 ( i – j = 1);

5 паралель - A3,1; A4,2 ( i – j = 2);

6 паралель - A4,1 ( i – j = 3);

Розглянемо матрицю А(N, N). Неважко побачити, що елементи головної діагоналі мають незмінну різницю індексів. Таку ж властивість мають елементи, які розташовані на паралелях до головної діагоналі (відрізняється тільки значення константи). Знаючи значення константи i – j = z, де z – це число, яке характеризує паралель, можна вибрати елементи діагоналі або будь-якої паралелі.

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

  • паралелі до головної діагоналі, включаючи саму діагональ: FOR Z = 1 - N TO N – 1;

  • паралелі вище головної діагоналі переглядаються циклом: FOR Z = 1 – N TO - 1;

  • паралелі нижче головної діагоналі переглядаються циклом: FOR Z = 1 TO N – 1.

Аналогічна ситуація має місце з бічною діагоналлю.

Елементи, які розташовані на паралелі до бічної діагоналі:

1 паралель - A1,1 ( i + j = 2);

2 паралель - A2,1; A1,2 ( i + j = 3);

3 паралель - A3,1; A2,2; A1,3 ( i + j = 4);

Бічна діагональ - A4,1; A3,2; A2,3; A1,4 ( i + j = 5);

4 паралель - A4,2 ;A3,3; A2,4 ( i + j = 6);

5 паралель - A4,3; A3,4 ( i + j = 7);

6 паралель - A4,4 ( i + j = 8);

Елементи бічної діагоналі та паралелі до неї мають незмінну суму індексів, тобто i + j = z, де z – це число, яке характеризує паралель. Якщо треба переглянути елементи в квадратній матриці A(N, N) і вибрати ті з них, які знаходяться:

  • на всіх паралелях до бічної діагоналі, то організується цикл: FOR Z = 2 TO 2* N ;

  • на паралелях вище бічної діагоналі, то організується цикл: FOR Z = 2 TO N;

  • паралелях нижче бічної діагоналі, то організується цикл:

FOR Z = N + 2 TO 2* N .

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

Приклад 1. Знайти суму елементів кожної паралелі до головної діагоналі, розташованої нижче головної діагоналі.

'Приклад1

INPUT "Введіть розмірність матриці - N"; N

DIM A(N, N)

PRINT "Введіть масив"

FOR I = 1 TO N

FOR J = 1 TO N

INPUT A(I, J)

NEXT J,I

CLS

PRINT "Початковий масив"

FOR I = 1 TO N

FOR J = 1 TO N

PRINT A(I, J);

NEXT J

PRINT

NEXT I

FOR Z = 1 TO N - 1

S = 0

FOR I = 1 TO N

FOR J = 1 TO N

IF I - J = Z THEN

S = S + A(I, J)

END IF

NEXT J

NEXT I

PRINT "СУМА="; S

NEXT Z

END

Приклад 2. Задана матриця X(Y,Y). Створити нову квадратну матрицю, усунувши з початкової головну діагональ і останній стовпчик. Надрукувати трикутник елементів нової матриці, які розташовані нижче бічної діагоналі, і знайти добуток елементів цього трикутника.

REM Приклад2. Зменшення розміру матриці

INPUT "Введіть розмірність матриці - Y";Y

DIM X(Y,Y), C(Y-1,Y-1)

PRINT "Введіть масив"

FOR I = 1 TO Y

FOR J = 1 TO Y

INPUT X(I, J)

NEXT J,I

CLS

REM C(Y-1,Y-1) – нова матриця

FOR I=1 TO Y-1

FOR J=1 TO Y-1

IF I>=J THEN С(I,J)=X(I+1,J) ELSE C(I,J)=X(I,J)

NEXT J,I

Друк трикутника

Обчислення добутку

P=1

FOR I=2 TO Y-1

PRINT TAB(70-I)

FOR J=Y-I+2 TO Y-1 ‘ Під бічною діагоналлю

PRINT C(I,J);

P=P*C(I,J)

NEXT J

PRINT

NEXT I

PRINT "Добуток= "; P

END

Приклад 3. Дано масив C(M,M). Створити одновимірний масив з добутків тієї частини кожного стовпчика, яка знаходиться нижче головної діагоналі.

Розв’язання. Позначимо Y — створюваний одновимірний масив, L — його індекс.

Шуканий масив буде мати розмір M-1, тому, що в останньому (M-тому) стовпчику під діагоналлю елементів немає. Умова розміщення елементів квадратної матриці нижче головної діагоналі: I>J

П рограма

REM Задача

REM Ввід вхідних даних.

INPUT M : DIM C(M,M),Y(M-1)

FOR I=1 TO M : FOR J=1 TO M

INPUT C(I,J)

NEXT J,I

Формування та друк масива Y

L=0

FOR J=1 TO M-1

P=1

FOR I=1 TO M

IF I>J THEN P=P+C(I,J)

NEXT I

L=L+1 : Y(L)=P : PRINT Y(L)

NEXT J

END

Зразок виконання завдання

Завдання. Дано масив C(N, N). Знайти мінімальний елемент серед елементів, розташованих під бічною діагоналлю. З елементів, розташованих на паралелі, розташованій безпосередньо під головною діагоналлю, створити одновимірний масив D. Програма подана нижче, а відповідна блок-схема зображена на рис. 12.4

CLS

'Лабораторна робота № 12. Робота з двовимірними масивами

INPUT "Введіть розмір масиву -N";N

DIM C(N, N), D(N - 1)

MIN = 1E+20

K = 0

FOR I = 1 TO N:FOR J = 1 TO N: INPUT C(I, J): NEXT J, I

CLS

PRINT "Вхідний масив"

FOR I = 1 TO N:FOR J = 1 TO N: PRINT C(I, J): NEXT J, I

PRINT "Зформований масив"

FOR I = 1 TO N

FOR J = 1 TO N

' Знаходження мінімального елементу серед елементів,

' розташованих під бічною діагоналлю,

IF I+J > N+1 AND C(I,J) < MIN THEN MIN = C(I,J)

' Створення одновимірного масиву D(K) з елементів,

' Розташованих на паралелі під головною діагоналлю

IF I - J = 1 THEN

K = K + 1

D(K) = C(I, J)

PRINT

PRINT D(K);

END IF

NEXT J

NEXT I

PRINT

PRINT "Мінімальний елемент -"; MIN

END