Сайт на учителя НИС Уралск Зеленов Борис Александрович

№ Фамилии Оценки 1 Иванов 5 2 Петров 4 3 Сидоров 5 4 Титов 5 . . . 30 Якупов 4

Описание на масивите: Променлива A : масив[1..30] от байт; S : масив [1..30] от низ; SO: масив [1..30] от низ [12];

Присвояване на стойности на елементи от масива: "A" - A[1]:= 5; A[2]:= 4; и т.н. "S " - S[1]:= 'Иванов'; S[2]:= 'Петров'; и т.н.

Ето таблица с нотация и съответствие на елементите на масива, техните стойности и индекси:

Индекс номер на елемент 1 2 3 4 1 30 Елементи на масива "S" S[ 1 ] S[ 2 ] S[ 3 ] S[ 4 ] S[ i ] S[ 30 ] Стойности на елемента Иванов Петров Сидоров Титов . Якупов Елементи на масива "A" A[ 1 ] A[ 2 ] A[ 3 ] A[ 4 ] A[ i ] A[ 30 ] Стойности на елемента 5 4 5 5 . 4

Ако е известна зависимостта, чрез която се променят стойностите на елементите на масива, тогава е удобно да се присвояват стойности в оператори на цикъл с параметър или с условие. Например, нека присвоим стойности на елементите на масива "y" според зависимостта: y=sin(x), където x= Pi * i/180, 0 a_max след това започнете a_max:= a[i]; j:=i; край; j := 0; k := 0; за i:=1 до 100 направете =0, c[k] = 0 след това започнете j := j+1; b[j] := a[i]; край иначе започнете k := k+1; c[k] := a[i] край; j := 0; k := 8; за i:= 1 до 100 направете [k]> ако a[i] > a[k] след това започнете j := j+1; M[j] := i; край;

Двумерни масиви Масивите, разгледани по-горе, имат елементи, подредени по един и същи индекс и се наричат ​​едномерни масиви или вектори. Един масив може да бъде двуизмерен, триизмерен и т. н. Двумерните масиви имат елементи, подредени по два индекса и често се наричат ​​матрици. В Turbo Pascal, когато се описва многоизмерен масив, диапазоните на промените на индекса са изброени разделени със запетаи, например: Var A: array[1..30, 1..7] от байт;

Помислете за пример за работа с двумерни масиви. Означете с масив оценките на учениците от класа по няколко предмета. Всяка оценка е стойността на елемент от оценъчния масив "А" и има пореден номер (два индекса). Нека свържем първия индекс с номера на фамилията в списъка на студентите, а втория с номера на предмета, по който е получена оценката. Тогава двумерният масив от оценки може да бъде представен като таблица: всеки елемент a[i, j] се намира в пресечната точка на I-тия ред и J-тата колона. Изходните данни могат да бъдат представени под формата на таблица с оценки: Годишни оценки по предмети: 1 2 3 4 5 6 № Фамилия Физика Химия Алгебра Геометрия История Биология 1 Иванов 4 5 3 4 5 5 2 Петров 4 5 4 3 4 4 3 Сидоров 5 5 3 4 5 4 . . . . . . . . 30 Якупов 4 3 4 5 4 5

Можете да създавате едномерни масиви от фамилиите "S" на учениците в класа и имената на предметите "P" . Стойността на елемента на масива "P" ще бъде името на предмета, а индексът ще бъде поредният номер на предмета, например: 1 - физика, 2 - химия, 3 - алгебра, 4 - геометрия, 5 - история, 6 - биология. Горната таблица може да бъде представена като набор от елементи (брой редове = N, брой колони = M):

Номер на ред "I" Номер на колона "J" 1 2 3 4 . Дж. M Масив "S" Масив "P" P[1] P[2] P[3] P[4] . P[J] . P[M] 1 S[1] Масив "A" a[1, 1] a[1, 2] a[1, 3] a[1, 4] . a[1, j] . a[n, m] 2 S[2] a[2, 1] a[2, 2] a[2, 3] a[2, 4] . a[2, j] . a[2, m] 3 S[3] a[3, 1] a[3, 2] a[3, 3] a[3, 4] . a[3, j] . a[3, m] 4 S[4] a[4, 1] a[4, 2] a[4, 3] a[4, 4] . a[4, j] . a[4, m] . . . . . . . . . . I S[I] a[i, 1] a[i, 2] a [i, 3] a [i, 4] . a[i, j] . a[i, m] . . . . . . . . . . N S[N] a[n, 1] a[n, 2] a[n, 3] a[n, 4] . a[n, j] . a[n, m]

Масив от оценки може да бъде определен с помощта на функцията Random,например: за i:= 1 до N направете за j:= 1 до M направете A[i, j]:= random(4) + 2;

За да изведете имената на обектите ("заглавката" на таблицата), можете да използвате следните оператори: Writeln; Write('Фамилно име\\Елементи:'); За i:= 1 до M направете write(P[i]:9,' ');

За показване на елементите от масива "A" на екрана е удобно да се използва вложен цикъл: for i:= 1 to N do begin writeln; write(S[i]:19, ' '; за j:= 1 до M do write(A[i,j]:7, ' ') end;

За да изчислите масива "SS" - сумите от "M" елементи във всеки от "N" редовете на масива "A" (NxM), можете да приложите следните оператори: for i:= 1 to N do begin SS[i]:= 0; за j:= 1 до M направете SS[i]:= SS[i] + A[i,j]; край;

Тук за всеки индекс "i" от 1 до N елементите A[i, j] се сумират върху индекса "j" от 1 до M. При модифициране на масива "A" местоположението на данните в оригиналния масив се променя, например, в случай на вмъкване на данни от линейния масив "B" в колоната с номер "M1", е необходимо да се изместят данните в колоните J >= M1 с помощта на операторите: за i:= 1 до N направете започнете за j:=M+1 надолу до M1+1 направете A[i,j]:=A[i,j-1]; A[i,M1]:=B[i]; край;

Ако поредният номер на предмета се промени, тогава е необходимо да се промени местоположението на оценките в масива "А", например пренареждането на колоните с оценки по физика и химия може да стане с операторите: for j:= 1 to N do begin a1:=A[1,j]; A[1,j]:=A[2,j]; A[2,j]:=a1; край;

Забележка: когато модифицирате масива "A", не забравяйте да промените съответно местоположението на данните в придружаващите масиви, например "P" или "S". При създаване на нови масиви, според някои условия, данните се избират от елементите на оригиналния масив. Например, за да създадете масив „B“ от четните колони на масива „A“, можете да използвате следните оператори: for j:= 1 to M do If (j Mod2) = 0 тогава за i:= 1 до N направете B[i,j Div 2]:= A[i,j];

За да създадете масив "B", състоящ се от редовете на масива "A", които отговарят на условието A[i, 1] > C, където C е дадено число, можете да използвате следните оператори: k:= 0; за i:= 1 до N направи Ако A[i,1] > C след това започнете k:= k + 1; за j:= 1 до M направете B[k,j]:= A[i,j]; край;

За да сравните стойностите на елементите на масива, е удобно да изградите лентови графики (хистограми). Например, за да покажете "N" стойности на положителни елементи от масива "SS" като хоризонтална хистограма, можете да използвате следните оператори: k:= 30/S_max; < k - нормализиращ коефициент на мащабиране > < S_max - най-големият елемент от масива "SS" > for i:=1 to N do begin writeln; < преминаване към нова колона > yg := round(k*SS[i]); < yg - дължина на лентата на хистограмата > за j:=1 до yg do write(#220); < изходен знак '_' с код 220 > край;