Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
07.02.2016
Размер:
59.39 Кб
Скачать

Лекція №8. Двувимірний масив.

Особливості опису n-мірних масивів. Розв’язання задач на двовимірні масиви.

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

Приклад 4.11. Заданий двовимірний масив. Визначити суму його елементів, кількість від’ємних елементів, максимальний елемент та його індекси.

type dmas = array [1..10,1..10] of real;

procedure vvdmas(kr, kst: integer; var x: dmas);

{ формальні параметри: kr- кількість рядків, kst – кількість стовпчиків, x - масив}

var i, j: integer;

begin

writeln(‘введіть елементи масиву по рядкам’);

for i:=1 to kr do

begin

for j:=1 to ks do

read(x[i,j]);

writeln;

end;

end;

procedure vuvdmas(kr, kst: integer; var x: dmas);

{виведення матриці по рядкам}

var i, j: integer;

begin

writeln(‘масив ’);

for i:=1 to kr do

begin

for j:=1 to kst do

write(x[i,j]:5:2);

writeln;

end;

end;

var a:dmas;

i, j, m, n: integer; k, l, z: integer;

s, max: real;

begin

writeln('m<=4,n<=3'); {введем розмір матриці та елементи матриці }

readln(m,n);

vvdmas(m,n);

vuvdmas(m,n);

s:=0; k:=0; {знаходження суми елементів, кількості відємних елементів }

for i:=1 to m do

for j:=1 to n do

begin

s:=s+a[i,j];

if a[i,j]<0 then k:=k+1;

end;

writeln('s=',s:6:1,'k=',k:4);

max:=a[1,1]; l:=1; z:=1; {знаходження максимального елемента та його індексів}

for i:=1 to m do

for j:=1 to n do

if a[i,j]>max then

begin

max:=a[i,j];

l:=i; z:=1;

end;

writeln('max=',max:4:1, 'z=',z:4, 'l=',l:4);

readln;

end.

Іноді студенти запитують: „Навіщо виводити на екран тількі що введений масив?”. А доцільність цієї дії дуже проста. Адже при введені не завжди витримується форма запису масиву, до якої всі звикли. А для аналізу результатів роботи програми вихідний масив обовязково повинен бути зображений на моніторі.

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

В таких матрицях можна провести дві уявні діагоналі – головну та побічну. Головна проходить від елемента a11 до елемента ann. Побічна проходить від елемента an1 до елемента a1n. Якщо уважно придивитися до індексів елементів такої матриці, то можна записати їх властивості відносно розташування елементів до головної та побічної діагоналі. Надалі можна використовувати ці властивості для розвязку задач з використанням матриць. Особливо це цікаво при розвязання задач лінійного програмування та вищої алгебри. Запамятати ці властивості дуже легко. Головна діагональ це різниця індексів, побічна –сума індексів. Причому під діагоналями і різниця і сума повязані з знаком >, над ними – знак <.

Для всіх елементів, які розташовані на головній діагоналі, виконується властивість i-j=0;

Для всіх елементів, які розташовані під головною діагоналлю, виконується властивість i-j>0;

Для всіх елементів, які розташовані над головною діагоналлю, виконується властивість i-j<0;

Властивості елементів, які розташовані відносно побічної діагоналлю (від a1n до a n1):

Для всіх елементів, які розташовані на побічній діагоналі, виконується властивість i+j=n+1;

Для всіх елементів, які розташовані під побічною діагоналлю, виконується властивість i+j>n+1;

Для всіх елементів, які розташовані над побічною діагоналлю, виконується властивість i+j<n+1;

Приклад 4.13. Знайти суму елементів, які розташовані на головній діагоналі квадратної матриці.

const n=4; {розміри матриці об’являються як стала величина}

var a: array [1..n,1..n] of real;

i,j:integer;

s:real;

begin

for i:=1 to n do {введення матриці по рядкам}

begin

for j:=1 to n do

read(a[i,j]);

end;

s:=0;

for i:=1 to n do

s:=s+a[i,i];

writeln('s=',s:5:0);

end.

Приклад 4.14. Визначити суму елементів, які утворюють верхній трикутник відносно головної діагоналі.

const n=4;

var a: array [1..n,1..n] of real;

i,j:integer;

s:real;

begin

{двовимірний масив можна вводити в оперативну память по рядкам, коли зразу}

{ набираються через пробіл всі елементи рядка і після цього за допомогою клавіші }

{Enter переводиться курсор на початок нового рядка. Таким чином можна не}

{ виводити матрицю знову на екран для подальшого аналізу результату.}

for i:=1 to n do

begin

for j:=1 to n do

read(a[i,j]);

end;

s:=0;

for i:=1 to n do

for j:=1 to n do

if i-j<0 then s:=s+a[i,j];

writeln('s=',s:5:0);

end;

Якщо задача відноситься до кожного рядка чи кожного стовпчика, розв’язок переноситься в середину першого циклу, коли визначено індекс рядка чи стовпчика.

Приклад 4.14. Визначити мінімальний елемент кожного стовпчика та вивести на екран максимальний з них.

const n=4;m=3;

var a: array [1..m,1..n] of real;

i,j:integer;

max,min:real;

begin

for i:=1 to m do

begin

for j:=1 to n do

read(a[i,j]);

end;

max:=-maxint;

for j:=1 to n do {визначення індексу стовпчика}

begin

min:=a[1,j]; {визначення мінімального елементу стовпчика}

for i:=1 to m do

if a[i,j]<min then min:=a[i,j];

writeln('j=',j,' min=',min:5:2);

{визначення максимального з мінімальних елементів стовпчиків}

if min>max then max:=min;

end;

writeln('max=',max:5:0);

end.

Приклад 4.16. Виконати транспонування заданої матриці.

Транспонованою матрицею є така, в якій елементи стовпчиків міняються місцями з елементами рядків.

var a:array [1..4,1..4] of integer;

i,j,x:integer;

begin

for i:=1 to 3 do

for j:=1 to 3 do

a[i,j]:=i;

for i:=1 to 3 do

begin

for j:=1 to 3 do

write(a[i,j]);

writeln;

end;

for i:=1 to 3 div 2+1 do

for j:=i+1 to 3 do

if i<>j then begin

x:=a[i,j];

a[i,j]:=a[j,i];

a[j,i]:=x;

end;

for i:=1 to 3 do

begin

for j:=1 to 3 do

write(a[i,j]);

writeln;

end;

end.

Для двомірних масивів допустима така операція: a[k]:=a[l]; В цьому випадку всі елементи рядка за номером k приймають значення відповідних елементів рядка за номером l.

Тести для підсумкового контролю.

  1. Які з приведених описів двомірних масивів не можна використовувати:

а) var a: array [1..5,1..7] of real;

б) type mas= array [‘A’..’D’,-2..3] of integer;

var a: mas;

в) type mas= array [1..10] of char;

var a: array [2..7] of mas;

г) var a: array [5,7] of integer;

д) type maska=(‘vovk’, ‘lisicja’, ‘vedmid’);

var a: array [maska] of array of char;

е) var mas: array [1..5],[1..7] of real;

  1. Скільки елементів має заданий масив:

type ww=(m1,m2,m3,m4);

var z: array [ww] of array [ww] of boolean;

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

var m: array [‘a’..’c’, 2..5] of real;

а) m[‘b’,3] б) m[‘b’][3] в) m[‘b’, 7] г)m[‘d’, ‘d’]

  1. Які з вказаних операцій можна виконувати з заданими масивами в мові Pascal:

var a,b : array [1..3,0..3] of real;

t: boolean;

а) a:=b;

б) a:=a+b;

в) t:=a<>b;

г) read(a);

д) a[1]:=a[3];

е) a[2,3]:=b[1,4]+b[1,1];

  1. Які з вказаних операцій не можна виконувати з заданими масивами в мові Pascal:

type v=array[1..10] of real;

t1= array [1..8] of v;

t2=array [1..8,1..10] of real;

var x:v; a:t1; b:t2;

а)a:=b;

б)a[1]:=a[8];

в)b[1,3]:=a[3];

г)b[1]:=b[8];

д)x:=a[5];

е)b[8,5]:=x;

  1. Що буде виведено на екран після виконання наступних операторів:

var a:array [1..2,1..3] of integer;

s:integer;

begin

s:=0;

for i:=1 to 2 do

for j:=1 to 3 do

a[i,j]:=i;

s:=s+a[i,j];

writeln(s);

end.

  1. Який фрагмент програми виконує задачу: знайти найбільший елемент масиву.

а)max := a[1];

for i:=1 to 2 do

for j:=1 to 3 do

if a[i,j]> max then max:= a[i,j];

б) for i:=1 to 2 do

for j:=1 to 3 do

if a[i,j]> max then

max:= a[i,j];

в) max := 0;

for i:=1 to 2 do

for j:=1 to 3 do

if a[i,j]> max then max:= a[i,j];

г) max := a[1,1];

for i:=1 to 2 do

for j:=1 to 3 do

if a[i,j]> max then max:= a[i,j];

  1. Який фрагмент програми виконує задачу: знайти найбільший елемент кожного рядка масиву.

а)max := a[1,1];

for i:=1 to 2 do

for j:=1 to 3 do

if a[i,j]> max then

max:= a[i,j];

writeln(max);

б) for i:=1 to 2 do

begin

for j:=1 to 3 do

if a[i,j]> max then

max:= a[i,j];

writeln(max);

end;

в) for i:=1 to 2 do

begin max := 0;

for j:=1 to 3 do

if a[i,j]> max then max:= a[i,j];

end;

writeln(max);

г) for i:=1 to 2 do

begin

max := a[1,1];

for j:=1 to 3 do

if a[i,j]> max then max:= a[i,j];

writeln(max);

end;

  1. Які з перелічених виразів є властивостями елементів квадратних матриць, що належать головній діагоналі:

а) a[i,j]=a[j,i]

б) i=j

в) i-j=0

г) i-j>0

д) i+j>0

е) i-j>m+1

10. Що буде виведено на екран в результаті виконання наступної програми:

const a:array [1..2,1..2] of integer=((1,2),(3,4));

var i,j:integer;

begin

s:=0;

for i:=1 to 2 do

for j:=1 to 2 do

s:=s+a[i,j];

writeln(s,’,’,a[i,j]);

end.

Соседние файлы в папке конспект лекцій 1 паск