- Газета «Вісник Переяславщини»
- 10 клас
- 11 клас
- Pascal
« Квітень 2024 » | ||||||
Пн | Вт | Ср | Чт | Пт | Сб | Нд |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 2016 Вересень
- 2016 Жовтень
- 2016 Листопад
- 2017 Лютий
- 2017 Березень
- 2017 Червень
- 2017 Вересень
- 2017 Жовтень
- 2017 Листопад
- 2017 Грудень
- 2018 Лютий
- 2018 Червень
- 2018 Листопад
- 2018 Грудень
- 2019 Червень
- 2019 Вересень
- 2019 Листопад
- 2019 Грудень
- 2020 Січень
- 2020 Лютий
- 2020 Березень
- 2020 Вересень
- 2022 Жовтень
- 2023 Березень
- 2024 Березень
« попередня |
наступна » |
Урок 33
Тема уроку: "Алгоритми і
програми роботи з двовимірними таблицями"
Мета уроку: Дати поняття двовимірних таблиць.
Навчити розв'язувати типові задачі по обробці двовимірних таблиць..
Тип уроку: Лекційний з практичними прикладами.
Двовимірний масив - це масив, де кожному елементу ставиться у
відповідність два індекси.
Для початку роботи з масивом готуємо місце в пам'яті у вигляді прямокутника,
що має задану кількість рядків і стовпчиків. Для цього описуємо його в розділі
оголошень, використовуючи зарезервоване слово Аrray, після якого в квадратних
дужках вказуємо розмірність масиву, причому враховуємо, що на першому місці
вказуються індекси рядків, а на другому - стовпчиків, і обов'язково тип елементів.
Опис двовимірного масиву
<Ім'я_масиву> : array[<поч_інд_рядків>..<кін_інд_рядків>,
<поч_інд_стовп>. .<кін_інд_стовп>]
of <базовий_тип_елементів> ;
Приклад опису:
Const n = 100; m = 100; Var A: array[1..n,1..m] of real; D: array[1..10,1.100] of integer;Зверніть увагу на те, що значень у рядках або стовпчиках масиву не обов'язково буде стільки, скільки ми оголосили, але не більше.
Звертання до елементу двовимірного масиву:
Ім'я_масиву[<індекс_рядка>, <інд_стовпчика>]
Заповнення масиву:
- з клавіатури:
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.
Далі рекомендується розглянути методи розв'язку деяких типових задач по обробці
двовимірних таблиць.
Задача №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;
- Задачі №343(3,4), №344(3), №345(2), №347(3), №361.
Домашнє завдання:
« попередня |
наступна » |