2D масиви
Тема : Двумерни масиви. Попълване на двумерен масив по зададено правило.
Цели: да развиете умения за работа с елементи на двумерен масив, да научите как да попълвате двумерни масиви по зададено правило, да научите как да извеждате връзка между номер на ред и номер на колона; развитие на логическото мислене на учениците.
1. Актуализация на знанията
Масивите, позицията на елементите в които се описват с два индекса, се наричат двумерни. Структурата на такъв масив може да бъде представена с правоъгълна матрица. Всеки елемент от матрицата е уникално идентифициран чрез посочване на номерата на реда и колоната, номерът на реда е i, номерът на колоната е j. Разгледайте матрица A с размер n*m:
а11 | а12 | а13 | a14 |
а21 | a22 | а23 | a24 |
а31 | а32 | a33 | a34 |
Матрица с 3 реда и 4 колони, брой редове n=3, брой колони m=4. Всеки елемент има свой собствен номер, който се състои от две числа - номера на реда, в който се намира елементът, и номера на колоната. Например a23 е елементът във втория ред и в третата колона. Двуизмерен масив в Turbo Pascal може да бъде описан по различни начини. За да се опише двумерен масив, е необходимо да се определи какъв тип са неговите елементи и как са номерирани (какъв тип е неговият индекс). Има няколко начина за описание на двуизмерен масив.
Еднопосочен
Тип Mas = масив [1..maxN] от ; Тип TMas = масив [1..maxM] от Mas;
2 начина
Тип TMas = масив [1..maxN] от масив [1..maxM] от ;
3 начина
Тип = масив [1..maxN, 1..maxM] от ;
Предпочитание се дава на третия начин за описание на двумерен масив.
ConstN=3; М=4; Тип TMas= масив [1..N, 1..M] от цяло число;
Формирането на двумерен масив може да стане по четири начина: чрез въвеждане от клавиатурата, чрез генератор на произволни числа, по зададено правило или с помощта на файл.
1) Формиране на двумерен масив чрез въвеждане от клавиатурата и алгоритъма за поредно извеждане на матрични елементи.
Const N=10;M=10; Тип Tmas= масив [1..N,1..M] от цяло число; Вария A:Tmas; i,j:цяло число; Започнете За i:=1 до N направете За j:=1 до M направете Прочетете(A[i,j]); За i:=1 до N направете начало За j:=1 до M направете Write(A[i,j]:4); Writeln end; Край.
2) Фрагмент от програмата за генериране на двумерен масив чрез генератор на случайни числа.
2. Учене на нов материал. Попълване на масив по правилото
Нека разгледаме няколко фрагмента от програми за попълване на двуизмерен масив по определен закон. За да направите това, трябва да изведете правило за пълнене.
1. Попълнете масив A с размер n*m например, както следва
1 2 3 4 5 6 7 8 16 15 14 13 12 11 10 9 17 18 19 20 21 22 23 24 32 31 30 29 28 27 26 25 33 34 35 36 37 38 39 40 48, 47, 46, 45, 44, 43, 42, 41
Масивът се попълва на принципа "змия". Правило за попълване: ако номерът на реда е нечетно число, тогава A[i,j]=(i-1)*m+j, в противен случай A[i,j]=i*m-j+1.
програма M1A; променлива A:масив[1..100,1..100] от цяло число; n,m,i,j: цяло число; започнете readln(n,m); for i:=1 to n do begin for j:=1 to m do begin if i mod 2 = 1 then A[i,j]=(i-1)*m+j else A[i,j]=i*m-j+1; запиши(A[i,j]:3); край; writen; край; readln; край.
Ето примерна програма за друг начин на попълване по дадено правило:
програма M1B; променлива A:масив[1..100,1..100] от цяло число; n,m,i,j: цяло число; c: цяло число; започнете readln(n,m); c:=1; for i:=1 to n do begin for j:=1 to m do begin A[i,j]:=c; if (i mod 2 = 0) и (j<>m) then dec(c) else inc(c); запиши(A[i,j]:3); край; c:=c+m-1; writen; край; readln; край.
2. Попълнете масив A по следния принцип:
1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0
програма М2; променлива A:масив[1..100,1..100] от цяло число; n,m,i,j: цяло число; c: цяло число; започнете readln(n,m); c:=0; for i:=1 to n do begin for j:=1 to m do begin if (i-1+j) mod 2 = 0 then A[i,j]:=0 else begin inc(c); A[i,j]:=c; край; запис(A[i,j]:5); край; writen; край; readln; край.
3. Попълнете масив А по следния принцип:
1 12 13 24 25 36 2 11 14 23 26 35 3 10 15 22 27 34 4 9 16 21 28 33 5 8 17 20 29 32 6 7 18 19 30 31
var A:масив[1..100,1..100] от цяло число; n,m,i,j: цяло число; c: цяло число; започнете readln(n,m); c:=1; for j:=1 to m do begin for i:=1 to n do begin A[i,j]:=c; if (j mod 2 = 0) и (i<>n) then dec(c) else inc(c); край; c:=c+n-1; край; for i:=1 to n do begin for j:=1 to m do write(A[i,j]:5); writen; край; readln; край.
4. Попълнете масив А по следния принцип:
1 2 3 4 5 2 3 4 5 1 3 4 5 1 2 4 5 1 2 3 5 1 2 3 4
var i,j,m,c,d: цяло число; A: масив [1..100,1..100] от цяло число; започнете c:=1; readln(m); за j:=1 до m направете започнете i:=c; d:=1; повтаряне A[i,j]:=d; inc(i); ако аз>m тогава i:=1; inc(d); до i=c; dec(c); ако c