“ема: Ѕагатовим≥рн≥ масиви.
ћета: навчитис¤ вводити та виводити на екран двовим≥рн≥ масиви у вигл¤д≥ таблиц≥, обчислювати суми, добутки вибраних елемент≥в двовим≥рного масиву, переставл¤ти м≥сц¤ми частини масиву.
’≥д роботи:
ѕо¤сненн¤
ƒвовим≥рн≥
масиви.
ƒвовим≥рний масив - це масив, де кожному елементу ставитьс¤ у
в≥дпов≥дн≥сть два ≥ндекси.
ƒл¤ початку роботи з масивом готуЇмо м≥сце в пам'¤т≥ у вигл¤д≥ пр¤мокутника,
що маЇ задану к≥льк≥сть р¤дк≥в ≥ стовпчик≥в. ƒл¤ цього описуЇмо його в розд≥л≥
оголошень, використовуючи зарезервоване слово јrray,
п≥сл¤ ¤кого в квадратних дужках вказуЇмо розм≥рн≥сть масиву, причому
враховуЇмо, що на першому м≥сц≥ вказуютьс¤ ≥ндекси р¤дк≥в, а на другому -
стовпчик≥в, ≥ обов'¤зково тип елемент≥в.
ќпис двовим≥рного масиву
<≤м'¤_масиву> : array[<поч_≥нд_р¤дк≥в>..<к≥н_≥нд_р¤дк≥в>,
<поч_≥нд_стовп>. .<к≥н_≥нд_стовп>]
of <базовий_тип_елемент≥в> ;
ѕриклад опису:
Var A:array[1..8,1..3] of real;
D:array[1..10,1.100] of integer;
«верн≥ть увагу на те, що значень у р¤дках або стовпчиках
масиву не обов'¤зково буде ст≥льки, ск≥льки ми оголосили, але не б≥льше.
«вертанн¤ до елементу двовим≥рного масиву:
≤м'¤_масиву[<≥ндекс_р¤дка>, <≥нд_стовпчика>]
≈лементи двовим≥рного масиву (дан≥ можуть бути подан≥ у вигл¤д≥ таблиц≥) визначаютьс¤ ≥менем масиву та двома ≥ндексами: перший ≥ндекс означаЇ номер р¤дка, а другий Ч номер стовпц¤,†† на перетин≥ ¤ких стоњть елемент, наприклад р[1,2], –озгл¤немо приклади оголошенн¤ масиву-константи bal, що маЇ 2 р¤дки ≥ 4 стовпц≥ елемент≥в, де¤кого масиву doba, ¤кий м≥ститиме 24* 60 елемент≥в ц≥лого типу, двовим≥рного масиву р розм≥ру 9 на 9 (тут буде 9* 9=81 елемент).
const
bal: array [1..2,1..4] of integer=((4,3,5,3),(4,4,5,3));
var doba: array [0..23] of array [0..59] of
integer;
p : array
[l..9, l..9] of integer;
“ут bal[l,l]=4, bal[l,2]=3, .... bal[2,3]=5, bal[2,4]=3. «наченн¤ елементам масив≥в doba ≥ р можна надати командою присвоЇнн¤ двома способами,наприклад, так: doba[16,30]:=5.
«аповненн¤ масиву:
for ≥:=1 to n do†
for j:=1 to m do
begin
write ('введ≥ть ј[',i,',',j,']: ');
readln (ј[i,j]);
end;
for ≥:=1 to n do†
for j:=1 to m do
ј[≥,j]:=i*i-10 {або будь-¤ка формула};
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]:8); {виведенн¤ в р¤док}
writeln; {перех≥д на новий р¤док}
end;
¬иведенн¤ в р¤дку необх≥дно
обов'¤зково форматувати, щоб не трапилось "злипанн¤" елемент≥в
(дивись приклад вище).
як було зазначено вище, дл¤ роботи з масивом потр≥бен будь-¤кий оператор
повторенн¤. ¬очевидь, що у двовим≥рному масив≥ необх≥дно використовувати њх
два: один цикл, внутр≥шн≥й, потр≥бен дл¤ переходу м≥ж елементами р¤дка (тобто,
по стовпчиках), а другий, зовн≥шн≥й, - дл¤ перем≥щенн¤ м≥ж р¤дками.
якщо в матриц≥ к≥льк≥сть р¤дк≥в ≥ стовпчик≥в однакова, то таку матрицю
називають квадратною (на в≥дм≥ну в≥д звичайноњ пр¤мокутноњ
таблиц≥). “≥льки в квадратних матриц¤х ≥снують головна та б≥чна д≥агонал≥.
≈лементи, що сто¤ть на головн≥й д≥агонал≥, мають
≥ндекси (1, 1), (2, 2), (3, 3), ... (≥, ≥). ..., (n, n), тобто номер р¤дка
дор≥внюЇ номеру стовпчика! ≈лементи, що сто¤ть на б≥чн≥й д≥агонал≥, мають
так≥ ≥ндекси (1, n), (2, n-1), (3, n-2), ..., (≥, n+1-≥), (n,1), тобто
≥ндекси елемент≥в взаЇмозалежн≥ за формулою j= n+1 - i.
«адача. —класти програму дл¤ занесенн¤
в двовим≥рний масив р таблиц≥ множенн¤ двох чисел ≥ виведенн¤ масиву на
екран.
program Pifagor;
uses Crt;
var p : array [l..9, l..9] of integer;
i, j : integer;
begin
clrscr;
for ≥ := 1 to 9 do
begin
for j := 1 to 9 do
begin
p[i, j] := ≥ * j;
write(p[i, j] : 6)
end;
writeln {«верн≥ть увагу на
команди виведенн¤ масиву}
end;†††††††††††††††††††† {у вигл¤д≥
таблиц≥}
readln
end.
«адача. ондитерська
фабрика дл¤ виготовленн¤ п'¤ти сорт≥в цукерок використовуЇ п'¤ть вид≥в
сировини. Ќехай норми затрат aij кожного виду сировини ≥ на виробництво 1т цукерок
сорту ≥ задан≥ формулою aij=i*100+j*i. †¬ивести на екран таблицю затрат сировини
(тобто масив а).† ¬изначити дл¤ ¤кого
сорту цукерок (imin) потр≥бно найменше сировини (min) третього
виду.
program Fabryka;
uses Crt;
var a :array [1..5,1..5] of real;
i,j,imin: integer; min: real;
begin
clrscr;
writeln('†††††††††††††††††††††††††††††††† ¬ид
сировини');
writeln('1††††††††††††††††††† 2†††††††††††††††††† 3†††††††††† 4†††††††† 5');
for i:=l to 5 do†††††††††††††† {”творимо
таблицю затрат)
begin
write(i,' сорт'); for j:=l to 5 do
begin
a[i,j]:= i*100+j*i;
write(a[i,j]:7:2);††† {–оздрукуЇмо елементи ≥-го р¤дка)
end;
writeln††††††††††††††††††††††††††† {ѕерейдемо на новий р¤док)
end;
imin:=l; {ѕрипустимо, що найменше сировини третього)
min:=a[l;3]; {виду потр≥бно дл¤ цукерок першого
сорту)
for ≥: =2 to 5 do
if
a[i,3]<min then
begin†††††††††††††† {¬изначимо шуканий сорт цукерок)
min:=a[i,3];
imin:=i
end;
writelnf Ќайменше сировини третього виду
');
writeln('потр≥бно дл¤ цукерок ',imin,' сорту');
readln
end.
≤. ¬≥дпов≥сти на питанн¤:
≤≤. ¬иконати завданн¤:
1. «адана таблиц¤:
2 |
-3 |
0 |
12 |
15 |
10 |
1 |
1 |
6 |
-6 |
3 |
18 |
”вести елементи ц≥Їњ таблиц≥ ≥ роздрукувати њњ на екран≥. ¬веденн¤ елемент≥в виконати такими способами (в р≥зних програмах):
2. «адана матриц¤ 10х10 з випадковими(в≥д 0 до 100) ц≥лими елементами. –оздрукувати цю таблицю. ќбчислити суму елемент≥в заштрихованоњ частини. ≈лементи д≥агоналей також потр≥бно включати в суму. ¬иконати св≥й вар≥ант:
5. «адана матриц¤ 10х10 з випадковими(в≥д 0 до 100) ц≥лими елементами. –оздрукувати цю таблицю. ѕом≥н¤ти м≥сц¤ми частини матриц≥ зг≥дно вар≥анту. «нову роздрукувати таблицю.
6. ” масив≥ розм≥рн≥стю 10 х 12 у кожному р¤дку м≥ститьс¤ зароб≥тна плата прац≥вника за в≥дпов≥дний м≥с¤ць. —клад≥ть програму, ¤ка:
а) п≥драховуЇ сумарний зароб≥ток кожного прац≥вника прот¤гом †року;
б) знаходить найменшу ≥ найб≥льшу м≥с¤чну зароб≥тну плату по м≥с¤ц¤х ≥ прац≥вниках (надрукувати номер прац≥вника ≥ номер м≥с¤ц¤). ћасив заповнити випадковими числами в≥д 7000 до 15000.