Елементи, що стоять на головній діагоналі, мають індекси (1, 1), (2, 2), (З, 3), ... (і, і). ..., (п, n ), тобто номер рядка дорівнює номеру стовпчика. Елементи, що стоять на бічній діагоналі, мають такі індекси (1, n ), (2, п -1), (З, п - 2),..., (і, п + 1 - 0, (п, 1), тобто індекси елементів взаємозалежні за формулою j - п +1 - і.
Далі рекомендується розглянути методи розв’язання деяких типових задач з обробки двовимірних таблиць.
ЗАДАЧА №345(1)
Умова : Дано натуральні числа п, т. Обчислити значення елементів матриці С ij , (і = 1, 2, ... п, j -1, 2, .... т), якщо:
Розв ‘язання:
Program Example_345_l;
Uses crt;
Const n = 20; m = 15;
Var C:array[1..n,1..m] of integer;
i,j:integer; {i,j - змінні циклу}
Begin
Clrscr;
For i:=1 to n do
Begin
For j:=1 to m do
begin
if і < j then C[i,j]:=i + j
else C[i,j]:=i*i + j*j;
Write(C[i,j]:5);
end;
writeln;
End;
Readkey; {Затримка зображення на екрані)
End.
ЗАДАЧА № 360
Умова : Дано квадратну матрицю розмірності п. Надрукувати суму елементів бічної діагоналі.
Розв ‘язання : Розв’язок задачі є тривіальним, якщо згадати, яку залежність мають індекси бічної діагоналі (і + j = п + 1). Перевіривши цю залежність у середині циклів, що організовують проходження по масиву, ми знайдемо бажану суму.
Program Example_360;
Uses crt;
Const n = 10;
Var A:array[1..n,1..n] of real;
і,j:integer; (і,j - змінні циклу}
Sum:real; {Sum - сума елементів бічної діагоналі}
Begin
Randomize;
Clrscr; {Заповнення масиву та виведення його на екран}
For і:=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;
writeIn;
End;
Sum:=0; {Початкове значення суми}
For і:=1 to n do
Begin
For j:=1 to n do
if і + j = n+1 then Sum:=Sum+A[і,j];
End;
Writeln(‘Сума елементів бічної діагоналі =’,Sum:8:2);
Readkey;
End.
Зверніть увагу на те, що для цієї задачі можна значно спростити цикл знаходження суми, адже фактично ми розглядаємо тільки лінійний масив (елементи на діагоналі насправді складають одновимірний масив). Тому цикл знаходження суми можна зобразити таким чином (наведений фрагмент програми):
Sum:=0; {Початкове значення суми}
For i:=l to n do Sum:=Sum+A[i,n+1-i];
Домашнє завдання
• Задачі № 343(3,4), № 344(3), № 345(2), №347(3), №361.
УРОК 25. Пошук елементів у таблицях
Мета уроку.* Навчити розробляти алгоритми пошуку в таблицях елементів із заданими властивостями.
Для організації пошуку в таблиці елементів із заданими властивостями слід організувати циклічний перегляд всіх елементів, кожний з яких командою розгалуження порівняти із заданим еталоном або перевірити на деяку властивість. Якщо масив одновимірний, цикл для організації перегляду всіх елементів буде один, якщо ж масив двовимірний—циклів буде два.
ЗАДАЧА № 302
Умова: Середню групу дитячого садочка вивели на прогулянку. Скільки дівчаток і скільки хлопчиків видно з-за паркану, якщо зріст хлопчиків задається у сантиметрах від’ємними числами, а дівчаток — додатними у вигляді цілих значень а 1 а 2 .... а n ? Крім того, у всіх дівчаток на голівках зав’язані бантики заввишки 10см, а висота паркану Н см.
Розв’язання: При розв’язанні цієї задачі, заповнюючи масив, необхідно генерувати як додатні, так від’ємні числа. Для пошуку в масиві елементів із заданою властивістю (в даному випадку чисел, що за модулем більші, ніж задане) використовується вже відома команда розгалуження.
Таким чином програма буде мати наступний вигляд:
Program Example_302;
Uses crt;
Var N,H:word;
{N — кількість дітей в дитсадочку, Н — висота паркану}
А:аггау[1..100] of longint;
{А — зарезервований масив для зберігання зросту дітей}
і,Count_girl,Count_boy:longint;
{і — змінна циклу, Count_girl — кількість дівчаток,
Countjboy — кількість хлопців}
Begin
Randomize;
Clrscr;
Count_girl:=0; Count_boy:=0;
Write(‘Введіть висоту паркану: ‘);
Readln(H);
Write(‘Введіть кількість дітей в дитсадочку: ‘);
Читать дальше