випадковим чином із проміжку [K,L]:
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.
Далі рекомендується розглянути
методи розв'язку деяких типових задач по обробці двовимірних
таблиць.
Задача №343(2).
Умова: Дано натуральні числа n, m
та випадкові дійсні числа, що утворюють таблицю A[i,j], де i = 1,2,…, n; j
= 1, 2, …, m. Роздрукувати у рядок елементи, що розташовані в першому
стовпчику.
В даній задачі, хоча таблиця задана двовимірна, другий індекс у
всіх елементів, що будуть друкуватися, дорівнює 1, тому достатньо одного циклу
по рядках для виконання задачі. Зверніть увагу, що для заповнення масиву
повністю необхідні два цикли по рядках та стовпчиках.
Program Example_343_2;
Uses crt;
Const
n = 10;
m = 8;
Var A: array[1..n,1..m] of real;
i,j: integer; {і,j - змінні циклу}
Begin
Randomize; {Ця процедура запускається з метою
зробити числа генератора
випадкових чисел ще більш
"випадковими"}
Clrscr;
For i:=1 to n do
Begin
For j:=1 to m do
begin
A[i,j]:=random*50-random*30;
{Заповнення масиву
випадковими числами}
Write(A[i,j]:8:2); {Виведення масиву на
екран для контролю
правильності роботи програми}
end;
writeln;
End;
Writeln ('Перший стовпчик масиву:');
For i:=1 to n do
begin
Write (A[i,1]:8:2);
end;
Readkey; {Затримка зображення на екрані}
End.
Задача №343(5).
Умова: Дано
натуральні числа n, m та випадкові дійсні числа, що утворюють таблицю
A[i,j], де i = 1,2,…, n; j = 1, 2, …, m. Роздрукувати у рядок елементи,
що розташовані на бічній діагоналі.
Нагадуємо, що на бічній діагоналі
елементи мають таку властивість: сума номера рядка та номера стовпчика
дорівнюють розмірності масиву +1, тобто номер стовпчика обчислюється за
наступною формулою: j = n-1+i.
Тоді програма для розв'язання даної
задачі має наступний вигляд:
Program Example_343_5;
Uses crt;
Const
n = 10;
Var A: array[1..n,1..n] of real;
i,j: integer; {і,j - змінні циклу}
Begin
Randomize;
Clrscr;
{Заповнення масиву випадковими числами та виведення
його на екран}
For i:=1 to n do
Begin
For j:=1 to m do
begin
A[i,j]:=random(500)/11-random*30;
Write (A[i,j]:8:2);
end;
writeln;
End;
Readln; {Затримка зображення на екрані}
Writeln ('Бічна діагональ масиву:');
For i:=1 to n do
begin
Write (A[i,n-i+1]:8:2);
end;
Readkey; {Затримка зображення на екрані}
End.
Задача №344(2).
Умова: Дано натуральні числа n,
m та матриці цілих чисел Aij, Bij, де i = 1, 2, …, n, j = 1, 2,
…,m. Обчислити значення елементів матриці Cij, якщо Cij = Aij
(I+j) - Bij(i2+j2).
Program Example_344_2;
Uses crt;
Const
n = 8;
m = 15;
Var A,B,C: array[1..n,1..m] of integer;
i,j:word; {і,j - змінні циклу}
Begin
Randomize;
Clrscr;
Writeln ('Масив А:');
For i:=1 to n do
Begin
For j:=1 to m do
begin
A[i,j]:=random(50)-random(20);
Write (A[i,j]:5);
end;
writeln;
End;
Writeln ('Масив В:');
For i:=1 to n do
Begin
For j:=1 to m do
begin
B[i,j]:=random(120)-random(80);
Write (B[i,j]:5);
end;
writeln;
End;
Writeln ('Результуючий масив С:');
For i:=1 to n do
Begin
For j:=1 to m do
begin
С[i,j]:=A[i,j]*(i+j)-B[i,j]*(i*i+j*j);
Write (С[i,j]:5);
end;
writeln;
End;
Readkey; {Затримка зображення на екрані}
End.
Задача №345(1).
Умова: Дано
натуральні числа n, m. Обчислити значення елементів матриці Cij, (i
= 1,2,…n, j=1,2,…,m), якщо:
Program Example_345_1;
Uses crt;
Const
n = 20;
m = 15;
Var C: array[1..n,1..m] of integer;
i,j:integer; {і,j - змінні циклу}
Begin
Clrscr;
For i:=1 to n do
Begin
For j:=1 to m do
begin
if i < j
then С[i,j]:=i + j
else C[i,j]:=i*i + j*j;
Write (С[i,j]:5);
end;
writeln;
End;
Readkey; {Затримка зображення на екрані}
End.
Задача №347(2).
Умова: Дано натуральні числа
n, m та матриці дійсних чисел Aij, Bij, де i = 1, 2, …, n, j
= 1, 2, …,m. Обчислити значення елементів матриці Cij, якщо:
Program Example_347_2;
Uses crt;
Const
n = 6;
m = 8;
Var A,B,C: array[1..n,1..m] of real;
i,j:integer; {і,j - змінні циклу}
Begin
Randomize;
Clrscr;
Writeln ('Масив А:');
For i:=1 to n do
Begin
For j:=1 to m do
begin
A[i,j]:=random*5-random(10)/3;
Write (A[i,j]:8:3);
end;
writeln;
End;
Writeln ('Масив В:');
For i:=1 to n do
Begin
For j:=1 to m do
begin
B[i,j]:=random(10)-random*8;
Write (B[i,j]:8:3);
end;
writeln;
End;
Writeln ('Результуючий масив С:');
For i:=1 to n do
Begin
For j:=1 to m do
begin
if i < j
then С[i,j]:=i*i + j*j + 2
else
if i = j
then C[i,j]:=1/(sqr(i+j)*(i+j))
else C[i,j]:=sqr(sin(A[i,j]))+sqr(sin(B[i,j]));
Write(С[i,j]:8:3);
end;
writeln;
End;
Readkey; {Затримка зображення на екрані}
End.
Задача №360.
Умова: Дано квадратну матрицю
розмірності n. Надрукувати суму елементів бічної діагоналі.
Розв'язок
задачі являється тривіальним, якщо згадати, яку залежність мають індекси
бічної діагоналі (i+j=n+1). Перевіривши цю залежність в середині
циклів, що організовують прохід по масиву, ми знайдемо бажану суму.
Program Example_360;
Uses crt;
Const
n = 10;
Var A: array[1..n,1..n] of real;
i,j:integer; {і,j - змінні циклу}
Sum:real; {Sum - сума елементів бічної діагоналі}
Begin
Randomize;
Clrscr;
{Заповнення масиву та виведення його на екран}
For i:=1 to n do
Begin
For j:=1 to n do
begin
A[i,j]:=random*50-random(80)/3;
Write(A[i,j]:8:3);
end;
writeln;
End;
Sum:=0; {Початкове значення суми}
For i:=1 to n do
Begin
For j:=1 to n do
begin
if i + j = n+1
then Sum:=Sum+A[i,j];
end;
End;
Writeln ('Сума елементів бічної діагоналі =',Sum:8:2);
Readkey; {Затримка зображення на екрані}
End.
Зверніть увагу на те, що для цієї задачі можна значно спростити цикл
знаходження суми, адже фактично ми розглядаємо тільки лінійний масив (елементи
на діагоналі дійсно складають одновимірний масив). Тому цикл знаходження суми
можна зробити таким чином (наведений фрагмент програми):
Sum:=0; {Початкове значення суми}
For i:=1 to n do
Begin
Sum:=Sum+A[i,n+1-i];
End;