Підійшла чергова порція завдань з інформатики для школярів. Цього разу розглянемо роботу з двовимірними масивами C++. Ці завдання досить цікаві. І більшість їх мені сподобалася.
Завдання №1
Знайдіть індекси першого входження максимального елемента.
Формат вхідних даних
Програма отримує на вхід розміри масиву n і m, потім рядків n рядків по m чисел в кожній. n та m не перевищують 100.
Формат вихідних даних
Виведіть два числа: номер рядка та номер стовпця, в яких стоїть найбільший елемент двовимірному масиві. Якщо таких елементів кілька, то виводиться той, у якого менший номер рядка, а якщо номери рядків рівні, той, у якого менший номер стовпця.
#include
for (int i = 0; i
max) ( max = a [i] [j]; max_i = i; max_j = j; ) ) ) cout
Sample Input: 5 Sample Output: * . * . * . * * * . * * * * * . * * * . * . * . *#include
Дано непарне число n, що не перевищує 15. Створіть двовимірний масив із n×n елементів, заповнивши його символами "." (Кожен елемент масиву є рядком з одного символу). Потім заповніть символами "*" середній рядок масиву, середній стовпець масиву, головну діагональ та побічну діагональ. В результаті "*" у масиві повинні утворювати зображення зірочки. Виведіть отриманий масив на екран, розділяючи елементи масиву пробілами.
using namespace std; int main() ( int n; cin >>
Sample Input: 5 Sample Output: 0 1 2 3 4 1 0 1 2 3 2 1 0 1 2 3 2 1 0 1 4 3 2 1 0#include
#include
using namespace std; int main() ( int n; cin >> n; int a; // обробка for (int i = 0; i
Формат вхідних даних
Завдання №4
Формат вихідних даних
Даний двовимірний масив та два числа: i та j. Поміняйте у масиві стовпці з номерами i та j.
#include
using namespace std; int main() ( int n, m, x, y, temp; cin >> n >>
Дано число n, що не перевищує 10, і масив розміром n × n. Перевірте, чи цей масив є симетричним щодо головної діагоналі. Виведіть слово "YES", якщо масив симетричний, і слово "NO" в іншому випадку.
Sample Input: 3 0 1 2 1 2 3 2 3 4 Sample Output: YES#include
) ) // обробка symmetric = true;
for (int i = 0; i
Завдання №6
Дано квадратний двовимірний масив розміром n × n та число k. Виведіть елементи k-ї за рахунком діагоналі нижче головної діагоналі (тобто якщо k = 1, то потрібно вивести елементи першої діагоналі, що лежить нижче за головну, якщо k = 2, то другий діагоналі і т.д.).
#include
using namespace std; int main() ( int n, k; cin >> n; int a[n][n]; // заповнення for (int i = 0; i
> a[i][j];
) ) cin >> k;
#include
// обробка та виведення for (int i = 0; i
Завдання №7
Формат вхідних даних
Даний двовимірний масив розміром n×m (n та m не перевищують 1000). Симетричний йому щодо головної діагоналі масив називається транспонованим до цього. Він має розміри m×n: рядки вихідного масиву стають стовпцями транспонованого, стовпці вихідного масиву стають рядками транспонованого.
Формат вихідних даних
Для цього масиву побудуйте транспонований масив та виведіть його на екран.
#include
Програма отримує вхід числа n і m. Далі йде n рядків, що містять m чисел (0 або 1), розділених пробілами. Потім надано число k.
Дано прямокутний масив розміром n×m. Поверніть його на 90 градусів за годинниковою стрілкою, записавши результат у новий масив розміром m×n.
Формат вхідних даних
Вводяться два числа n і m, що не перевищують 100, потім масив розміром n×m.
Формат вихідних даних
Виведіть масив, що вийшов. Числа під час виведення розділяйте одним пропуском.
#include
) ) // обробка for (int i = 0; i
Завдання №10
Формат вхідних даних
За даними числами n і m заповніть двовимірний масив розміром n×m числами від 1 до n×m “змійкою”, як показано у прикладі.
Формат вихідних даних
#include
using namespace std; int main() ( int n, m, c = 0; cin >> n >> m; int a [n] [m]; // обробка for (int i = 0; i
Завдання №11
Формат вхідних даних
Формат вихідних даних
За даними числами n і m заповніть двовимірний масив розміром n×m числами від 1 до n×m “діагоналями”, як показано у прикладі.
#include
else start_row = 0;
for (pos = start_row; pos
Формат вхідних даних
= 0; col--) ( if (row
Формат вихідних даних
За даними числами n і m заповніть двовимірний масив розміром n×m числами від 1 до n×m “діагоналями”, як показано у прикладі.
#include
Дано числа n і m. Заповніть масив розміром n × m у шаховому порядку: клітини одного кольору заповнені нулями, а іншого кольору – заповнені числами натурального ряду зверху донизу, зліва направо. У верхньому лівому кутку записано число 1.
Вводяться два числа n і m, що не перевищують 100.
Формат вхідних даних
= 0; col--) ( if (row
Формат вихідних даних
За даними числами n і m заповніть двовимірний масив розміром n×m числами від 1 до n×m “діагоналями”, як показано у прикладі.
#include
0 0 |
Завдання №13
- За даними числами n і m заповніть двовимірний масив розміром n×m числами від 1 до n×m по спіралі, що виходить із лівого верхнього кута і закрученої за годинниковою стрілкою, як показано в прикладі.
- using namespace std; int main() ( int n, m; cin >> n >> m; int a; for (int i = 0; i Please enable JavaScript to view the
- виховні: сприяти створенню під час уроку психологічного комфорту до роботи, вихованню зібраності, відповідального ставлення до праці, підвищення мотивації до навчальної діяльності.
Тип уроку: комбінований.
Методи навчання: лекція, самостійна робота.
Форми організації: фронтальна робота, індивідуальна робота.
Обладнання: завдання для роботи у класі (індивідуальні картки, завдання на комп'ютері), записи на дошці.
Хід уроку:
1. Організаційний момент.
Вітання.
Повідомляється тема.
Ставитися мета уроку та завдання.
2. Актуалізація здобутих знань
Усно промовляються основні моменти попередньої теми: "Одномірні масиви". Фронтальне міні-опитування за основними визначеннями.
3. Цілепокладання, постановка завдань:
4. Лекція
Визначення.
Двовимірним масивом називається сукупність даних, кожне значення залежить від двох чисел, які можна як індекс стовпця в матриці.
Формат запису
<имя>: array[н_індекс_1..в_індекс_1, н_індекс_2..в_індекс_2] of <тип>
A: array of integer;
Щоб використовувати елемент масиву, треба вказати ім'я масиву та індекс елемента. Перший індекс відповідає номеру рядка, другий – номеру стовпця. Наприклад:
for i:=1 to n do
for j:=1 to n do
a:= random (100);
При ініціалізації двовимірних масивів кожен рядок полягає в додаткову пару круглих дужок:
const a: mas = ((2,3,1,0),
(1,9,1,3),
(3,5,7,0));
Аналогом масивів мови Паскаль у математиці є матриці. Матриця, у якої число рядків дорівнює числу стовпців, називається квадратною. A(n,n) – квадратна матриця
Основні властивості квадратних матриць:
1. Квадратні матриці мають головну та побічні діагоналі. Наприклад, для матриці А на головній діагоналі лежать елементи 1,5 та 9, а на побічній – 3, 5 та 7.
i = j - елементи розташовані на головній діагоналі;
i> j – елементи розташовані нижче за головну діагональ;
i
i + j = n + 1 - елементи розташовані на побічній діагоналі;
i+j< n+1– элементы расположены над побочной
диагональю;
i+j> n+1- елементи розташовані під побічною діагоналлю;
2. Квадратна матриця, у якої всі елементи, виключаючи елементи головної діагоналі, дорівнюють нулю, називається діагональною матрицею
3. Діагональна матриця, у якої всі елементи, що стоять на головній діагоналі, рівні 1 називається одиничною матрицею
4. Якщо в матриці A (m,n) поміняти місцями рядки та стовпці, то вийде матриця A t (m,n), яка називається транспонованою матрицею.
Основні дії, які можна виконувати над матрицями
- підсумовувати;
- знаходити різницю;
- добуток матриці на деяке число;
- твір двох матриць.
Типові алгоритми обробки матриць мовою Паскаль
- Виведення матриці у вигляді таблиці:
- Використання генератора випадкових чисел:
- Другий метод виведення матриці у вигляді таблиці:
- Підсумовування матриць:
- Транспонування матриці – дзеркальне відображення її елементів щодо головної діагоналі. Зробити це можна, ввівши новий масив:
for i:= 1 to n do
begin
for j:= 1 to m do
write (a:4);
writeln
end;
randomize;
for i:=1 to m do
begin
for j:=1 to n do
begin
a:=random(100)-10;
write(a:4);
end;
writeln;
end;
for i:= 1 to n do
for j:= 1 to m do
if j>m then write (a:4)
else writeln (a:4);
for i:= 1 to n do
begin
for j:= 1 to m do
c:=a+ b
end;
for i:= 1 to n do
for j:= 1 to n do
b = a;
5. Первинний контроль
"Контурна карта" 2 варіанти
1 варіант
- Виправте неточності в описі двовимірного масиву:
- Вставте пропущені визначення:
- Вставте пропущені визначення:
- Знайдіть помилки в алгоритмі:
Var
A = array of integer;
… … двомірних масивів кожен рядок полягає у додаткову пару круглих дужок:
const a: mas = ((2,3,1,0),
(1,9,1,3),
(3,5,7,0));
Основні дії, які можна виконувати над матрицями: підсумовування, добуток двох матриць,….,….
Матриця, у якої число рядків дорівнює кількості стовпців, називається …. ….. .
for i:= 1 to n do
begin
for j:= 1 to m do
c:=a+ a
end;
2 варіант
- Виправте неточності в описі масиву:
const
n=4; m=3;
type
mas:array of integer;
- Вставте пропущені визначення:
- Вставте пропущені визначення:
- Вставте пропущені визначення:
- Знайдіть помилки в алгоритмі:
... називається сукупність даних, кожне значення яких залежить від двох чисел, які можна розглядати як індекс стовпця в матриці.
Діагональна матриця, у якої всі елементи, що стоять на головній діагоналі, рівні … , називається одиничною матрицею
Квадратна матриця, у якої всі елементи, крім елементів головної діагоналі, дорівнюють нулю, називається … … .
randomize;
for i:=1 to m do
begin
for j:=1 to n do
begin
a:=random(100)-10;
end;
end;
Яке типове завдання виконує алгоритм?
Алгоритми мовою Паскаль
- Написати програму, яка для цілочисленної матриці 3х4 визначає середнє арифметичне її елементів та кількість позитивних елементів у кожному рядку. Додаток 2
- Написати програму, яка для прямокутної цілої матриці 3х4 визначає номер самого лівого стовпця, що містить тільки позитивні елементи. Якщо такого шпальти немає, виводиться повідомлення. Додаток 3
program sred_n;
const m=3;
n = 4;
var
i,j,n_pos_el:integer;
sred:real;
begin
for i:=1 to m do
for j:=1 n до read(a);
sred:=0;
for i:=1 до мене
n_pos_el: = 0;
for j:=1 to n do begin
sred:=sred+a;
якщо a>0 then inc(n_pos_el);
end;
writeln("V",i,"-oi stroke",n_pos_el,"polizitelnix elementov");
end;
sred:=sred/m/n;
writeln("Srednee arifmeticheskoe:",sred:6:2);
end.
program num_posit;
const m=3;
n=4;
var
a: array of integer;
i,j,num:integer;
all_posit:boolean;
begin
randomize;
for i:=1 to m do
begin
for j:=1 to n do
begin
a:=random(100)-10;
write(a:4);
end;
writeln;
end;
num:=0;
for j:=1 to n do begin
all_posit:=true;
for i:=1 to m do
if a< 0 then
begin
all_posit:=false;
break; end;
if all_posit then begin
num: = j; break; end;
end;
if num = 0 then
writeln("Takix stolbcov net")
else
writeln("Nomer stolbca:",num);
end.
Учні завантажують файли в Паскалі, аналізують цей алгоритм, переглядають результати виконання програм, відповідають на додаткові питання:
- Як організується двовимірний масив?
- Що означає процедура inc?
- Що таке процедура break?
- Як використовується генератор випадкових чисел?
6. Формування навичок розв'язання задач.
Розв'язання задач за індивідуальними картками самостійно, в алгоритмічному середовищі.
Приклади завдань:
- Дана матриця А 5х5 містить випадкові елементи. Знайти суму всіх елементів матриці.
- Вивести на екран таблицю Піфагора.
- Знайти суму позитивних елементів зазначеного стовпця матриці А 5х5 цілих чисел.
7. Підсумки уроку, постановка домашнього завдання.
Підбиття підсумків. Оцінка рівня засвоєння.
Д/З конспект, завдання:
Для всіх:
- Даний двовимірний квадратний масив. Знайти номери рядків, усі елементи яких дорівнюють нулю.
- Даний двовимірний квадратний масив. Знайти номери рядків, елементи кожної з яких однакові між собою.
- Визначити мінімальний елемент двовимірного масиву. Надрукувати номер рядка, який містить максимальну кількість мінімальних елементів, якщо такі є.
- Даний двовимірний масив. Знайдіть рядок із найбільшою сумою елементів та найменшою.
Вивести на екран знайдені рядки та суми їх елементів.
Для учнів, які мають уявлення про двовимірні масиви та способи їх вирішення:
Приклади завдань:
- Замість лекції – вирішення завдань підвищеної складності.
- Даний двовимірний масив. Перетворити його за таким правилом: рядок з номером N зробити стовпцем з номером N, а стовпець – рядком.
- У двовимірному масиві Х усі числа різні. У кожному рядку вибирається мінімальний елемент, потім серед цих чисел вибирається максимальне.
- Надрукувати номер рядка масиву Х, у якому розташоване вибране число.
- Написати програму, яка обчислює суму діагональних елементів квадратної матриці.
Приклад 3
Даний цілий двовимірний масив, розмірності n х m,знайти найменший елемент масиву та номер рядка, в якому він знаходиться.
Блок-схема: | Програмний код: Var a: array of integer; i, j, m, n, min, k: integer; Begin Write(' скільки рядків ?'); Readln(n); Write(' скільки стовпців ?'); Readln(m); For i:=1 to n do For j:=1 to m do begin write('a[',i,',',j,']='); readln (a); (Введення двовимірного масиву) end; min:=a; (Мінімальний елемент) k:=1; (номер рядка) For i:=1 to n do For j:=1 to m do If a< min then begin min:=a; k:=i; (Пошук мінімального та "запам'ятовування" номера рядка) end; Writeln('найменше число ',min,' знаходиться в ', k, 'рядку'); End. |
Завдання
- . Знайти суму та добуток всіх елементів масиву.
- Дано цілісний двовимірний масив, розмірності n х m. Знайти суму та добуток парних елементів.
- Дано цілісний двовимірний масив, розмірності n х m. Знайти суму та добуток елементів, кратних 3 та 5.
- Дано цілісний двовимірний масив, розмірності n х m. Знайти кількість негативних елементів більше -9.
- Дано цілісний двовимірний масив, розмірності n х m.
- Дано цілісний двовимірний масив, розмірності n х m
- Дано цілісний двовимірний масив, розмірності n х m
- Дано цілісний двовимірний масив, розмірності n х m. Знайти середнє арифметичне всіх елементів масиву.
- Дано цілісний двовимірний масив, розмірності n х m. З'ясувати, скільки зустрічається у якому рядку раніше - позитивне чи негативне.
- Дано цілісний двовимірний масив, розмірності n х m. З'ясувати, у якому рядку послідовність є зростаючою чи спадною.
- Дано цілісний двовимірний масив, розмірності n х m. Вивестийого елементи, індекси яких є ступенями двійки (1, 2, 4, 8, 16, ...).
- Дано цілісний двовимірний масив, розмірності n х m. Знайти кількість кратних елементів 7.
- Дано цілісний двовимірний масив, розмірності n х m. Вивести на екран елементи, які є квадратами якогось числа.
- Дано цілісний двовимірний масив, розмірності n х m. Знайти номери непарних елементів, що стоять на парних місцях.
- Дано цілісний двовимірний масив, розмірності n х m. Знайти максимум та мінімум. Поміняти їх місцями.
- Дано цілісний двовимірний масив, розмірності n х m. Замінити всі елементи на свої квадрати.
- Дано цілісний двовимірний масив, розмірності n х m. Замінити всі елементи на протилежні значення.
- Дано цілісний двовимірний масив, розмірності n х m. Поміняти місцями перший та останній елементи.
- Дано цілісний двовимірний масив, розмірності n х m. Сформувати новий масив, що з протилежних відповідних елементів.
- Дано цілісний двовимірний масив, розмірності n х m. Вивести на екран ті елементи, у яких залишок від поділу на m дорівнює k.
- Запроваджуються результати контрольної роботи 10 учнів. Визначте число не задовільних, задовільних, добрих, відмінних оцінок. Вивести середню оцінку, одержану учнями за контрольну роботу.
- Ввести оцінки N учнів з K предметів. Визначити та вивести на екран кількість учнів, які не отримали жодної "5".
- У групі навчається N студентів, студенти отримали по чотири позначки за іспит. Визначити кількість неуспішних студентів та середній бал групи.
- Дано цілісний двовимірний масив, розмірності n х m. Обчислити суму чисел, порядкові номери яких є числами фібоначчі.
- Дано цілісний двовимірний масив, розмірності n х m. Скласти відповідні елементи.