понеділок, 17 листопада 2014 р.

Алгоритми для двомірних масивів мовою Pascal

https://sites.google.com/site/programuvanny/urok-8-masivi 

Поняття про масиви на мові Pascal

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

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

Масив - це великий простір чогось однорідного за типом. 
(Зі словника іноземних слів, 1954 р.)
Масив у програмуванні - це тип структури даних, що має складені значення. (З Оксфордського словника англійської мови, 1995 р.)
Масив - це впорядкований скінченний набір елементів (даних) одного типу. Зазвичай працюють з масивами, які містять числа.

Масивом називається скінченна послідовність змінних одного типу, які мають однакове ім'я та різняться порядковим номером.

Індексом називається порядковий номер елемента масиву.

Отже, введено новий тип — масив. Усі типи, які досі були вам відомі, називаються простими. Масив є прикладом структурованого типу, тобто він, у свою чергу, складається з елементів іншого типу.

Як звернутися до елементів цього масиву? Для цього необхідно вказати індекс.

Наприклад,

T[2], T[5], T[i], T[i + j].

Але в третьому і четвертому прикладах для визначення необхідного елемента масиву треба знати значення величин і та j. Така загальність визначення індексу масиву є дуже потужним засобом програмування, але разом з цим і провокує можливі помилки: отриманий результат обчислення індексу масиву може виходити за межі інтервалу, виділеного для індексів даного масиву.

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

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

Перетворення  двомірного масиву(таблиці)  
в  лінійний масив(рядок) мовою Pascal.

Приклад розташування елементів та їх індексів у
двовимірного масиву A[4xm]:

a[1;1]
a[1;2]
a[1;3]
a[1;m-2]
a[1;m-1]
a[1;m]
a[2;1]
a[2;2]
a[2;3]
a[2;m-2]
a[2;m-1]
a[2;m]
a[3;1]
a[3;2]
a[3;3
a[3;m-2]
a[3;m-1]
a[3;m]
a[4;1]
a[4;2]
a[4;3]
a[3;m-2]
a[3;m-1]
a[3;m]

1.Властивість індексів елементів головної діагоналі квадратної таблиці  A[mxm]: i=j.
2.Властивість індексів  елементів бічної діагоналі квадратної таблиці A[mxm]:  i+j=m+1,
де  m - кількість рядків(стовпців) матриці.
3.Властивість запису прямокутної матриці A в одномірний масив:  порядковий  k –ий номер у одномірному масиві  В[1..mxn] визначають за формулою:  k = (i-1)n +j,
де  n - кількість стовпців  матриці A. Отже, елементи лінійного масиву
В([ b[1], b[2], b[3],, ...,  b[(i-1)n +j], … ,  b[mxn])
4.Якщо відомо p - порядковий номер елемента в одномірному масиві В[1xq], тоді  індекси  і та j  елемента  a[i;j], який належить двовимірному масиву А[mxn]  визначається за формулами:
           i=(p-1) div n +1;    j=p – (i-1)n,
де n - кількість стовпців  матриці А[mxn].

Задача1.  Вивести  з даного запису  прямокутної матриці A   одномірний масив.

Задача MATRIZAmxn_L;
program  MATRmxn_L;
 const m=4; n=5; q=20;
var
  B: array[1..q] of real;
A: array[1..m,1..n] of real;
 i, j, p, k: integer;
begin
 writeln(' Масив даних має вигляд: ');
 {for i:=1 to m*n do b[1]:=0; }
 for i:=1 to m do
 for j:=1 to n do
    begin
    a[i,j]:= int(random*200-100); { присвоєння випадковим чином цілих чисел масиву від -100 до +100 }
    b[(i-1)*n +j]:=a[i,j];
    writeln('a[',i , '; ',j,']:= ',a[i,j], '= b[',(i-1)*n +j,']=',  b[(i-1)*n +j]);
end;
end.


Zадача 2.  Вивести як таблицю запис  матриці A[nxn]   nа eкраn .

PROGRAM ANXN;
CONST  N=4;
VAR A: ARRAY[1..N,1..N] OF INTEGER;
B: ARRAY[1..N*N] OF INTEGER;
m,K,P,I, L, J: INTEGER;
BEGIN
writeln('   ');
writeln('   ');
   FOR i:=1  TO  n do  BEGIN
   FOR j:=1  TO  n*n do  BEGIN
    case n mod j   of
  0..n-1: write('  b[', j+ n*(i-1) ,   ']');
  end;
    end;  writeln('   ');
end;
 writeln('   ');
writeln('   ');writeln('   ');
END.


{Задача "квадратна спіраль  в одномірному масиві".}

PROGRAM ANXN;
CONST  N=4;
VAR A: ARRAY[1..N,1..N] OF INTEGER;
B: ARRAY[1..N*N] OF INTEGER;
m,K,P,I, L, J: INTEGER;
BEGIN
for i:=1 to n do
 for j:=1 to n do
    begin
  a[i,j]:= (i-1)*n +j;
 b[(i-1)*n +j]:=a[i,j];
    writeln('a[',i , '; ',j,']:= ',a[i,j], '= b[',(i-1)*n +j,']=',  b[(i-1)*n +j]);
end;
 writeln('   ');
 writeln('   ');
K:=1;
M:=(N+1) div 2;
FOR P:=1 TO m do   BEGIN
   FOR J:=P TO N-P+1 do BEGIN
B[K]:=A[P,J];
write('   b[', k, ']=',  b[k]);
K:=K+1;
END;
FOR I:=P+1 TO N-P+1 do BEGIN
B[K]:=A[I,N-P+1];
write('   b[', k, ']=',  b[k]);
K:=K+1;
END;
FOR J:=N-P  downTO  P do  BEGIN
B[K]:=A[N-P+1,J];
write('   b[', k, ']=',  b[k]);
K:=K+1;
END;
FOR I:=N-P  downTO  P+1 do BEGIN
B[K]:=A[I,P];
write('   b[', k, ']=',  b[k]);
K:=K+1;
END;
end;
writeln('   ');
writeln('   ');
   FOR i:=1  TO  n do  BEGIN
   FOR j:=1  TO  n*n do  BEGIN
    case n mod j   of
  0..n-1: write('   b[', j+ n*(i-1) , ']');
  end;
 end;  writeln('   ');
end;
 writeln('   ');
writeln('   ');writeln('   ');
END.


Верхній та нижній трикутник квадратної матриці

a1 1
а12
а13
а14
а15
а1n-1
a1n
а2 1
а2 2
a23
a24
a25
a2n-1
a2n
а31
а3 2
a3 3
а34
а3 4
a3n-1
a3n
аn-2 1
аn-2 2
аn-2 3
аn-2 3
аn-2 3
..
an-2n-1
an-2n
аn-1 1
аn-1 2
аn-1 3
аn-1 3
аn-1 5
an-1n-1
an-1n
аn1
аn2
аn3
аn4
аn5
аnn-1
 ann

Для верхнього трикутника квадратної матриці розміром nxn  
номер рядка і змінюється від 1 до n,
номер стовпця j змінюється від  і до n.

Кількість елементів в черговому рядку верхнього трикутника змінюється від   і  та  визначається за формулою
kvi = n i +1.
Для нижнього трикутника квадратної матриці розміром nxn  номер рядка і змінюється від 2 до n, а номер стовпця j змінюється від  1 до i-1.
Кількість елементів в черговому рядку  нижнього трикутника змінюється від   і  та  визначається за формулою
khi = i -1.

Ці закономірності використовуються для створення алгоритмів на квадратних матрицях.

Немає коментарів:

Дописати коментар