Смекни!
smekni.com

Програмування масиви та рядки (стр. 2 из 2)

Задачі

1).Що друкується в результаті виконання програми:

а) program strconc ( input, output );

var a: integer; c: char; s: string;

begin

s :='';

for a := 0 to 2 do

begin

c := chr ( ord ( '0' ) + a ); s := c + s + c; writeln ( s )

end

end.

б) program concstr ( input, output );

var a: integer; c: char; s: string;

begin

s :=''; c:= chr ( 47 );

while length ( s ) < 7 do

begin

c := succ ( c ); s := s + c + s; writeln ( s )

end

end.

3. Матриці та багатовимірні масиви

Розглянемо прямокутну таблицю з m* n однотипиних елементів як послідовність із m рядків, у кожному з яких n елементів. Послідовності певної довжини подаються в мовах програмування масивами. Отже, виникає поняття "масив, елементами якого є масиви", або двовимірний масив. Якщо елементи прямокутної таблиці самі є послідовностями або таблиці утворюють послідовність певної довжини, то виникає поняття тривимірного

масиву тощо.

Означення багатовимірних масивів та зображення їх елементів у мові Паскаль опишемо за допомогою простого прикладу. Позиція в грі "хрестики-нулики на полі 3* 3" подається квадратною таблицею з символів 'x', '0' або ' '(пропуск). Пронумеруємо клітинки поля, як у шахах – літерами 'a', 'b', 'c' по горизонталі та числами 1, 2, 3 по вертикалі. Тоді рядки таблиці можна подати масивами типу

type Row = array [ 'a' .. 'c' ] of char;

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

type Table = array [ 1 .. 3 ] of Row;

Партія, тобто послідовність позицій, має довжину не більше 9, і може подаватися масивом таблиць:

type Game = array [ 1 .. 9 ] of Table;

Масиви типу Table мають два виміри: номер рядка та номер символу в ньому; масиви типу Game – три: номери таблиці, рядка та символу. Вимір 1..9 у типі Game називається зовнішнім, вимір 'a'..'c', що нумерує символи в рядках, – внутрішнім.

Тип Game можна задати еквівалентним виразом, не означаючи імен типів Row і Table, а саме:

type Game = array [ 1 .. 9 ] of

array [ 1 .. 3 ] of

array [ 'a' .. 'c' ] of char;

Нехай A – змінна типу Game. Вираз вигляду A[ i ], де 1? i ? 9, задає змінну типу Table, або типу

array [ 1 .. 3 ] of array [ 'a' .. 'c' ] of char;

вираз вигляду A[i][j], де 1? j? 3, – змінну типу Row, або типу

array[ 'a' .. 'c' ] of char;

вираз вигляду A[i][j][k], де 'a' ? k ? 'c', – змінну типу char.

Мова Паскаль допускає іншу форму задання типів та елементів багатовимірних масивів: виміри та індекси записуються через кому в спільних дужках. Так, означення

type Game1 = array [ 1 .. 9, 1 .. 3, 'a' .. 'c' ] of char

еквівалентне означенню типу Game, а вираз A[i, j, k] – виразові A[i][j][k].

Елементи багатовимірних масивів розташовуються в пам'яті послідовно, найшвидше в них змінюється внутрішній індекс, найповільніше – зовнішній. Зокрема, двовимірні масиви (матриці) розташовуються за рядками. Так, послідовні числа масиву типу

array [ 1 ..2, 'a' ..'b' ] of real

мають набори індексів [1, 'a'], [1, 'b'], [2, 'a'], [2, 'b'], а послідовні символи в масиві типу Game – [1, 1, 'a'], [1, 1, 'b'], [1, 1, 'c'], [1, 2, 'a'], … , [1, 3, 'c'], [2, 1, 'a'], … , [9, 3, 'c'].

Задачі

1).У матриці розмірами M * N обміняти місцями

а) два рядки, б) два стовпці, задані номерами.

2)Транспонувати квадратну матрицю без використання додаткової матриці.

3)Квадратну матрицю повернути за годинниковою стрілкою на

а) 90° ; б) 180° . Додаткову матрицю не використовувати.

4). Елемент матриці називається сідловим, якщо його значення є мінімальним у рядку й максимальним у стовпці, на перетині яких він знаходиться (або навпаки, максимальним у рядку й мінімальним у стовпці). Написати процедуру повернення номерів рядка та стовпця якого-небудь із сідлових елементів (якщо таких немає, то повертається пара номерів зовні індексної множини матриці).

5).Написати процедуру обчислення добутку двох матриць.

6). Елементи N-вимірного масиву розмірів M1 ? … ? MN розміщаються в пам'яті комп'ютера послідовно так, що найшвидше змінюється їх останній індекс, найповільніше – перший. Написати функцію обчислення лінійного індексу елемента (його номера в порядку розташування в пам'яті) за заданими розмірами M1, … , MN та індексами елемента в N-вимірному масиві. Написати процедуру обчислення індексів

елемента в багатовимірному масиві за його лінійним індексом та розмірами M1, … , MN. Значенням N є:

а) 2; б) 3; в) 4.