Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка(Паскаль)(А4).doc
Скачиваний:
7
Добавлен:
27.08.2019
Размер:
1.25 Mб
Скачать

Лабораторна робота № 4 Обробка табличних елементів

Мета: навчитися працювати з одновимірними та двовимірними масивами.

Теоретичний матеріал

Масивце структурований тип даних значенням якого є скінченний набір пронумерованих однотипних елементів.

Масив визначається ім'ям (ідентифікатором) і кількістю індексів (номерів), що потрібні для визначення місцезнаходження необхідного елементу масиву. Ім'я масиву є єдиним для всіх його елементів.

Оскільки конфігурація елементів масиву фіксована, то до окремого елементу можна звертатися за допомогою одного або кількох індексів. У якості індексів можуть використовуватися константи та змінні порядкових типів. Елементами можуть бути як прості змінні будь-яких типів, так і змінні складених типів (масивів, рядків і т.і.), тобто мають право на життя масив масивів, масив рядків і т.і.

Перевага масиву ще й у тому, що всі його елементи в пам'яті зберігаються по сусідству, в той час як одиничні елементи простого типу не гарантують такого розташування даних у пам'яті.

Порядок роботи з масивом:

  • оголосити про масив у розділі описів, вказавши його розмір і тип елементів, що в нього входять (тобто приготувати місце в пам'яті, де будуть зберігатися значення елементів);

  • заповнити необхідними значеннями масив для розв'язування задачі;

  • якщо треба, вивести масив на екран для зорової перевірки роботи з ним.

  • робота з даним масивом;

  • виведення отриманих результатів.

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

Одновимірний масив

Кожному елементу ставиться у відповідність один індекс.

Масив А

напрямок зміни індексу

1

2

3

4

5

6

7

І

n

A[6] або A[i], якщо i=6

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

Формат опису:

1 Спосіб

ТУРЕ < назва типу > = array [< розмір >] of < назва базового типу >

VAR ідентифікатор масиву : ім'я типу;

Наприклад

Type mas=array [1..5] of іnteger.

Var a : mas;

2 Спосіб

Var <ім’я масиву> : array [<розмірність>] of <базовий тип елементів>;

Якщо в такій формі опису масиву заданий один індекс, масив називається одновимірним (або лінійним), якщо два індекси – двовимірним (або таблицею), якщо n індексів – n-вимірним. Розмірність обмежена тільки об'ємом пам'яті конкретної ЕОМ. Одновимірні масиви звичайно використовуються для представлення векторів, а двовимірні – для представлення матриць.

Для опису масиву можна використовувати попередньо визначені константи:

Const

G1=4; G2=6;

Var

Mas:array[1..G1,1..G2] of real;

Приклади:

Const n:=100;

Var А: аrrау[1..n] оf real;

В: аrrау[1..1000] of integer;

Першим описан масив, до складу якого входить 100 дійсних чисел, а другим – масив з 1000 цілих чисел.

Зверніть увагу на те, що елементів у масиві не обов'язково буде стільки, скільки ми їх оголосили, але не більше.

Звертання до елементу масиву:

<ІМ'Я_масиву>[<його_індекс>]

Приклад:

M[6]; A[10]; B[i]

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

Паскаль не має засобів введення-виведення усіх елементів масиву водночас, тому введення і виведення значень робиться послідовно окремо кожен елемент.

Методи заповнення одновимірного масиву:

  • за формулою:

for і:=1 to n do М[і]:=i*i-10 {або будь-яка формула};

  • з клавіатури:

for і:=1 to n do

begin

writeln(‘введіть М[‘,i,']:');

readln(М[i]);

end;

  • випадковим чином із проміжку [А, В]:

for і:=1 to n do

М[і]:=random(B-A)+A;

  • Використання типових констант:

Const a:array [1..5] of іnteger=(28,13,0,-14,18);

b:array [1..3,1..2] of іnteger=((28,3),(-2,5),(-3,-4));

Методи виведення елементів масиву на екран

  • for і:=1 to n do

writeln(М[i]); {у стовпчик}

  • for і:=1 to n do

write(М[i]); {у рядок}

Для масиву з дійсними числами бажано зазначити формат виведення, наприклад, writeln(М[і]:10:3).

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

А що можна робити з елементами масиву?

  • знайти найменший, найбільший;

  • знайти відповідний визначеній властивості;

  • знайти суму елементів, їх добуток або різницю;

  • поміняти місцями або замінити;

  • впорядкувати їх за різними ознаками і т.і.

Двовимірний масив

Двовимірний масив — це масив, де кожному елементу ставиться у відповідність два індекси.

Напрямок зміни другого індексу

1

2

3

I

m

Напрямок

1

зміни

2

першого

3

індексу

n

Для початку роботи з масивом готуємо місце в пам'яті у вигляді прямокутника, що має задану кількість рядків і стовпчиків. Для цього повідомляємо про нього в розділі оголошень, використовуючи зарезервоване слово Аrray і, з огляду на те, що на першому місці вказуються індекси рядків, потім стовпчиків і обов'язково тип елементів.

Опис двовимірного масиву

Const n:=100;

m:=100;

Var A:array[1..n,1..m] of real;

D:array[1..10,1.100] of integer;

Зверніть увагу на те, що рядків або стовпчиків у масиві не обов'язково буде стільки, скільки ми їх оголосили, але не більше.

В описі:

Ім'я_масиву[<поч_інд_рядків>..<кін_інд_рядків>,

<поч_інд_стовп>. .<кін_інд_стовп>]

of <тип_елементів> ;

Звертання до елементу двовимірного масиву:

Ім'я_масиву[<індекс_рядку>, <інд_стовпчика>]

Заповнення масиву:

  • з клавіатури:

for і:=1 to n do

for j:=1 to m do

begin

writeln(‘введіть А[‘,i,',',j,']:');

readln(А[i,j]);

end;

  • за формулою:

for і:=1 to n do

for j:=1 to m do

А[і,j]:=i*i-10 {або будь-яка формула};

  • випадковим чином із проміжку [K,L]:

for і:=1 to n do

for j:=1 to m do

А[і,j]:=random(L-K)+K;

Виведення двовимірного масиву на екран

  • for і:=1 to n do begin

for j:=1 to m do

write(A[i,j]); {виведення в рядок}

writeln; {перехід на новий рядок}

end;

Як ви вже помітили, для роботи з масивом необхідний будь-який оператор повторення. Але в нас двовимірний масив, а тому необхідний один цикл для переходу між елементами рядка (тобто, по стовпчиках), а другий, зовнішній, — для переміщення між рядками.

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

Головна Бічна

діагональ діагональ

Елементи, що стоять на головній діагоналі, мають індекси (1, 1), (2, 2), (3, 3), ... (і, і). ..., (n, n). Номер рядка дорівнює номеру стовпчика!

Елементи, що стоять на бічній діагоналі, мають такі індекси (1,n), (2, n–1), (3, n–2), ..., (і, n+1–і), (n,1). Індекси елементів взаємозалежні за формулою N+1 – i.

Для роботи з масивом, як з єдиним цілим, використовується ідентифікатор масиву без вказівки індексу в квадратних дужках. Масив може брати участь тільки в операціях відношення “дорівнює”, “не дорівнює” і в операторі присвоювання. Масиви, що беруть участь у цих діях, повинні бути ідентичні за структурою, тобто мати однакові типи індексів і однакові типи компонентів. Наприклад, якщо масиви А та В описані, як Var A,B:array[1..20] of real; то застосування до них допустимих операцій дасть наступний результат:

ираз

Результат

A=B

True, якщо значення кожного елемента масиву А дорівнює відповідному значенню елемента масиву В.

A<>B

True, якщо хоча б одне значення елемента масиву А не дорівнює значенню відповідного елемента масиву В.

A:=B

Усі значення елементів масиву В присвоюються відповідним елементам масиву А. Значення елементів масиву В залишаються незмінними.

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

Приклади роботи з масивами

Скласти програму знаходження суми всіх елементів одновимірного (двовимірного) масиву.

Нехай a – одновимірний масив

b – двовимірний масив

Для одновимірного масиву програма матиме такий вигляд:

Var A:array[1..8] of integer;

S,I:integer;

Begin

For I:=1 to 8 do Read (a [I]);

S:=0;

For I:=1 to 8 do S:=S+ a[I];

For I:=1 to 8 do Write (a[I]);

Writeln;

Writeln(’сума=’,s);

End.

Для двовимірного масиву:

Const B: array [1..3,1..3] of integer=((1,-1,2),(-2,3,-3),(4,5,0));

Var S, I, j : integer;

Begin

S:=0;

For I:=1 to 3 do

For j:=1 to 3 do

S:= s+ b[I,j];

For I:=1 to 3 do Begin

For j:=1 to 3 do

Write (b[I,j],’ ‘);

Writeln;

End;

Writeln(‘сума =’,s);

End.

Скласти програму знаходження суми (поелементно) двох одновимірних масивів.

Const N=10;

Var C,b,a: array[1..n] of integer;

I: integer;

Begin

{введення елементів масивів А і В}

for I:=1 to n do

c[I]:=a[I] + b[I];

{вивід суми двох масивів А і В – масиву С}

end.

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

Скласти програму знаходження кількості непарних елементів одновимірного масиву.

For I:=1 to n do

If a[I] mod 2<> 0 then k:=k+1;

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

For j:=1 to n do

Begin

S:=0;

For I:=1 to n do

S:=s+a[I,j];

Writeln(‘Сума’,j,’ стовпця = ’,s);

End;

Написання та реалізація програми на комп’ютері.

Скласти програму знаходження кількості від’ємних чисел в кожному рядку двовимірного масиву.

For I:=1 to n do

Begin

K:=0;

For j:= 1 to n do

If a[I,j]<0 then k:=k+1:

Writeln(‘кількість від’ємних чисел в’, I ,’ рядку=’,k);

End;

Типові задачі на опрацювання таблиць.

Перестановка елементів масиву. Переставити 2 і 4 елементи одновимірного масиву.

p:=a[2];

a[2]:=a[4];

a[4]:=p;

Поміняти місцями два рядки (стовпчики) двовимірного масиву.

for j:=1 to n do begіn

b:=a[1,j];

a[1,j]:=a[3,j];

a[3,j]:=b;

end;

Пошук елементів. Знайти мінімальний елемент в одновимірному масиві.

mіn:=b[1];

for і:=1 to n do

іf b[і]< mіn then mіn:=h[і];

Знайти максимальний елемент і його індекс у двовимірному масиві.

max:=m[1,1];

for і:=1 to n do

for j:=1 to n do begіn

іf m[і,j]>max then max:=m[і,j]; k:=і; t:=j;

end;

wrіteln('Максимальний елемент', max, 'стоїть в ',k,'рядку', t ,'стовпчику');

Помножити рядок (стовпчик) матриці на число відмінне від нуля.

readln(c);

for і:=1 to n do

a[і,2]:=a[і,2]*c;