Примери за решаване на задачи с двумерни масиви, задачи за самостоятелно решаване. Даден е двумерен масив от реални числа Даден е двумерен масив

Даден е двуизмерен масив 5x5. Организирайте въвеждането на елементи, изхода на резултата под формата на прозорци. След пауза сменете цвета на прозорците, в които се съхраняват зададените според условието елементи.

Варианти на задачите:

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11. Намерете произведението на елементи, които са над главния диагонал. Заменете всички нечетни елементи с намереното число.

12. Намерете сумата от елементи, които са на нечетни позиции (сумата от индексите (i + j) за Х ij е нечетно число). Заменете всички отрицателни елементи с намереното число.

13. Намерете произведението на всички елементи, които са на главния диагонал. Заменете всички елементи от петия ред и втората колона с намереното число.

14. Намерете средноаритметичната стойност на елементите на главния диагонал и средната аритметична стойност на страничния диагонал. Разменете елементите по диагоналите.

15. Намерете средноаритметичното на положителните елементи, които са над главния диагонал. Заменете всички отрицателни елементи с намереното число.

16. Намерете сбора на нечетните елементи. Заменете с намереното число всички елементи, които са над второстепенния диагонал.

17. Намерете произведението на елементите на i-ред и j-колона (i, j- предварително въвеждане от клавиатурата). Заменете с намереното число всички елементи под второстепенния диагонал.

18. Намерете произведението на елементи, които са на четни позиции (сумата от индексите (i + j) за Х ij е нечетно число). Заменете всички елементи по главния диагонал с намереното число.

19. Намерете средноаритметичното на нечетните елементи. Заменете всички елементи на страничния диагонал с намереното число.

20. Намерете сумата от всички четни елементи, които са над второстепенния диагонал. Заменете всички елементи на четвъртия ред с намереното число.

21. Намерете произведението на елементи, които са над главния диагонал. Заменете всички нечетни елементи с намереното число.

22. Намерете сумата от елементи, които са на нечетни позиции (сумата от индексите (i + j) за Х ij е нечетно число). Заменете всички отрицателни елементи с намереното число.

23. Намерете произведението на всички елементи, които са на главния диагонал. Заменете всички елементи от петия ред и втората колона с намереното число.

24. Намерете средноаритметичната стойност на елементите на главния диагонал и средната аритметична стойност на страничния диагонал. Разменете елементите по диагоналите.

25. Намерете средноаритметичното на положителните елементи, които са над главния диагонал. Заменете всички отрицателни елементи с намереното число.

Например: Намерете средноаритметичното на елементите на главния диагонал

След пауза:

тестови въпроси

1. Какво е текстов режим и как се различава от обикновения режим?

2. Какво е прозорец?

3. Как да преместя курсора до зададените координати на прозореца?

4. Как да променя цвета на шрифта/фона?

Въведение

Модерен технически средства, предназначени за контрол и автоматизация, широко използват двоични схеми и двоична системаразчитане. Теорията на логическата алгебра се използва за анализ и синтез на комбинационни и последователни превключващи вериги.

Лекционният материал е представен в три глави. В първата глава са дадени основните понятия на теорията на алгебрата на логиката, разгледани са различни форми на представяне на булеви функции. Втората глава е посветена на въпросите за минимизиране на представянето на булеви функции, което е в основата на абстрактния синтез на дискретни устройства. Третата глава съдържа информация за това как да се реализират булеви функции, базирани на превключващи вериги, което е основата за структурния синтез на дискретни устройства.

При написването на лекционните записки е използвана следната литература: за раздел 1.1 -; за раздел 1.2 - ; за раздел 1.3 - ; за раздел 2.1 - ; за раздел 2.2 - ; за раздели 3.1, 3.2 - .

Поредната порция задачи по информатика за ученици пристигна навреме. Този път нека разгледаме работата с двумерни масиви в C++. Тези задачи са доста интересни. И повечето ми харесаха.

Задача №1

Намерете индексите на първото появяване на максималния елемент.
Формат на входните данни
Програмата получава масиви с размери n и m като вход, след това n реда с m числа всеки. n и m не надвишават 100.
Изходен формат
Отпечатайте две числа: номера на реда и номера на колоната, съдържаща най-големия елемент двумерен масив. Ако има няколко такива елемента, тогава се показва този с по-малък номер на ред, а ако номерата на редовете са еднакви, тогава този с по-малък номер на колона.

примерен вход: 3 4 0 3 2 4 2 3 5 5 5 1 2 3 примерен резултат: 1 2

#включи използване на пространство от имена std; int main() ( int n, m; cin >> n >> m; int a; // четене за (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; ) ) int max = a, max_i = 0, max_j = 0; за (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] >max) ( max = a[i][j]; max_i = i; max_j = j; ) ) ) cout<< max_i << " " << max_j; return 0; }

Задача №2

Дадено е нечетно число n, не по-голямо от 15. Създайте двумерен масив от n×n елемента, като го запълните с "." (всеки елемент от масива е низ от един знак). След това попълнете със знаци "*" средния ред на масива, средната колона на масива, главния диагонал и второстепенния диагонал. В резултат на това "*" в масива трябва да образува изображение със звездичка. Изведете получения масив на екрана, като разделяте елементите на масива с интервали.

примерен вход: 5 примерен резултат: * . * . * . * * * . * * * * * . * * * . * . * . *

#включи използване на пространство от имена std; int main() ( int n; cin >>< n; i++) { for (int j = 0; j < n; j++) { if (i == j || i == n - 1 - j || i == n / 2 || j == n / 2) a[i][j] = 1; else a[i][j] = 0; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (a[i][j] == 0) cout << "." << " "; else cout << "*" << " "; } cout << endl; } return 0; }

Задача №3

Дадено е число n, не по-голямо от 100. Създайте масив n×n и го попълнете според следното правило. На главния диагонал трябва да се изпишат цифрите 0. На двата диагонала, съседни на главния, цифрите 1. На следващите два диагонала цифрите 2 и т.н.

примерен вход: 5 примерен резултат: 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

#включи #включи използване на пространство от имена std; int main() ( int n; cin >> n; int a; // обработка за (int i = 0; i< n; i++) { for (int j = 0; j < n; j++) { a[i][j] = (int) abs(i - j); } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << a[i][j] << " "; } cout << endl; } return 0; }

Задача №4

Даден е двумерен масив и две числа: i и j. Разменете колоните с числата i и j в масива.
Формат на входните данни
Програмата получава като вход размерите на масива n и m, не повече от 100, след това елементите на масива, след това числата i и j.
Изходен формат
Изведете резултата.

примерен вход: 0 1 примерен резултат: 12 11 13 14 22 21 23 24 32 31 33 34

#включи #включи използване на пространство от имена std; int main() ( int n, m, x, y, temp; cin >> n >>< n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; ) cin >> x >> y; // обработка за (int i = 0; i< n; i++) { temp = a[i][x]; a[i][x] = a[i][y]; a[i][y] = temp; } // вывод for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << a[i][j] << " "; } cout << endl; } return 0; }

Задача №5

Дадено ви е число n, което не надвишава 10, и масив с размер n × n. Проверете дали този масив е симетричен спрямо главния диагонал. Отпечатайте думата "YES", ако масивът е симетричен, и думата "NO" в противен случай.

примерен вход: 3 0 1 2 1 2 3 2 3 4 примерен резултат:ДА

#включи #включи използване на пространство от имена std; int main() ( int n; bool symmetric; cin >> n; int a; // попълване за (int i = 0; i< n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; ) ) // обработка симетрична = вярно; за (int i = 0; i< n; i++) { for (int j = 0; j < n; j++) { if (a[i][j] != a[j][i]) symmetric = false; } } // вывод if (symmetric) cout << "YES"; else cout << "NO"; return 0; }

Задача №6

Даден е квадратен двумерен масив с размер n × n и число k. Отпечатайте елементите на k-тия диагонал под основния диагонал (т.е. ако k = 1, тогава трябва да отпечатате елементите на първия диагонал под основния, ако k = 2, тогава втория диагонал и т.н.).
Стойността на k може да бъде отрицателна, например, ако k = −1, тогава трябва да отпечатате стойността на първия диагонал, разположен над основния. Ако k = 0, тогава трябва да отпечатате елементите на главния диагонал.
Програмата приема като вход число n, което не надвишава 10, след това масив n × n, след това число k.

Примерен вход 1: 4 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 1 Примерен резултат 1: 5 1 6 Примерен вход 2: 4 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 -2 Примерен резултат 2: 3 8

#включи използване на пространство от имена std; int main() ( int n, k; cin >> n; int a[n][n]; // попълване за (int i = 0; i< n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; ) cin >> k; // обработка и изход за (int i = 0; i< n; i++) { for (int j = 0; j < n; j++) { if (i - j - k == 0) cout << a[i][j] << " "; } } return 0; }

Задача №7

Даден е двуизмерен масив с размер n×m (n и m не надвишават 1000). Масив, който му е симетричен спрямо главния диагонал, се нарича транспониран спрямо дадения. Той има размери m×n: редовете на оригиналния масив стават колони на транспонирания, колоните на оригиналния масив стават редове на транспонирания.
За дадения масив конструирайте транспонирания масив и го покажете на екрана.

примерен вход: 3 4 11 12 13 14 21 22 23 24 31 32 33 34 примерен резултат: 11 21 31 12 22 32 13 23 33 14 24 34

#включи използване на пространство от имена std; int main() ( int n, m, x, y, temp; cin >> n >>< n; i++) { for (int j = 0; j < m; j++) { cin >> < n; i++) { for (int j = 0; j < m; j++) { b[j][i] = a[i][j]; } } // вывод for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << b[i][j] << " "; } cout << endl; } return 0; }

Задача №8

Киното разполага с n реда от по m места (n и m не надвишават 20). Двумерният масив съхранява информация за продадените билети, като числото 1 означава, че билетът за това място вече е продаден, числото 0 означава, че мястото е свободно. Получена е заявка за продажба на k билета за съседни места на същия ред. Определете дали такава заявка може да бъде изпълнена.
Формат на входните данни
Програмата получава като вход числата n и m. След това има n реда, съдържащи m числа (0 или 1), разделени с интервали. Тогава е дадено числото k.
Изходен формат
Програмата трябва да изведе номера на ред, който има k последователни празни места. Ако има няколко такива реда, отпечатайте номера на най-малкия подходящ ред. Ако няма подходящ ред, отпечатайте числото 0.

примерен вход: 3 4 0 1 0 1 1 0 0 1 1 1 1 1 2 примерен резултат: 2

#включи използване на пространство от имена std; int main() ( int n, m, k, r = 0; cin >> n >> m; int a[n][m]; // попълване за (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; ) cin >> k; // обработка за (int i = 0; i< n; i++) { int near_free = 0; for (int j = 0; j < m; j++) { if (a[i][j] == 0) { near_free++; if (near_free == k) { r = i + 1; break; } } else near_free = 0; } if (near_free == k) break; } // вывод cout << r; return 0; }

Задача №9

Даден е правоъгълен масив с размер n×m. Завъртете го на 90 градуса по часовниковата стрелка, записвайки резултата в нов масив m×n.
Формат на входните данни
Въвеждат се две числа n и m, не по-големи от 100, след което масив с размер n×m.
Изходен формат
Изведете получения масив. Разделете числата с един интервал.

примерен вход: 3 4 11 12 13 14 21 22 23 24 31 32 33 34 примерен резултат: 31 21 11 32 22 12 33 23 13 34 24 14

#включи използване на пространство от имена std; int main() ( int n, m; cin >> n >> m; int a[n][m]; int b[m][n]; // попълване за (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; ) ) // обработка за (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { b[j] = a[i][j]; } } // вывод for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << b[i][j] << " "; } cout << endl; } return 0; }

Задача №10

Дадени са числата n и m, попълнете двумерен масив с размер n×m с числа от 1 до n×m със „змия“, както е показано в примера.
Формат на входните данни
Въведени са две числа n и m, всяко от които не надвишава 20.
Изходен формат

примерен вход: 3 5 примерен резултат: 1 2 3 4 5 10 9 8 7 6 11 12 13 14 15

#включи използване на пространство от имена std; int main() ( int n, m, c = 0; cin >> n >> m; int a[n][m]; // обработка за (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { c++; if (i%2 == 0) a[i][j] = c; else a[i] = c; } } // вывод for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] % 10 == a[i][j]) cout << " "; else if (a[i][j] % 100 == a[i][j]) cout << " "; else if (a[i][j] % 1000 == a[i][j]) cout << " "; cout << a[i][j]; } cout << endl; } return 0; }

Задача №11

Дадени са числата n и m, попълнете n×m двуизмерен масив с числа от 1 до n×m „диагонали“, както е показано в примера.
Формат на входните данни

Изходен формат
Изведете получения масив, оставяйки точно 4 знака за всеки елемент.

примерен вход: 3 5 примерен резултат: 1 2 4 7 10 3 5 8 11 13 6 9 12 14 15

#включи използване на пространство от имена std; int main() ( int n, m, pos = 0, row = 0; cin >> n >> m; int a[n][m]; // обработка int start_row = 0; int number = 1; for ( int мин. ред = 0; мин. ред< n; min_row++) { if (min_row >0) начален_ред = поз - 1; иначе начален_ред = 0; за (поз = начален_ред; поз< m; pos++) { row = min_row; for (int col = pos; col >= 0; col--) ( if (ред< n) { a = number; number++; row++; } else break; } } } // вывод for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] % 10 == a[i][j]) cout << " "; else if (a[i][j] % 100 == a[i][j]) cout << " "; else if (a[i][j] % 1000 == a[i][j]) cout << " "; cout << a[i][j]; } cout << endl; } return 0; }

Задача №12

Дадени са числата n и m. Попълнете n × m масив в шахматен ред: клетките от един цвят се запълват с нули, а клетките от другия цвят се запълват с естествени числа отгоре надолу, отляво надясно. Цифрата 1 е изписана в горния ляв ъгъл.
Формат на входните данни
Въвеждат се две числа n и m, не по-големи от 100.
Изходен формат
Изведете получения масив, оставяйки точно 4 знака за всеки елемент.

примерен вход: 3 5 примерен резултат: 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8

#включи използване на пространство от имена std; int main() ( int n, m, sm; cin >> n >> m; int a[n][m]; // обработка на int number = 1; for (int i = 0; i< n; i++) { for (int j = 0; j < m; j++) { a[i][j] = 0; } } for (int i = 0; i < n; i++) { if (i % 2 == 1) sm = 1; else sm = 0; for (int j = sm; j < m; j++) { a[i][j] = number; number++; j++; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] % 10 == a[i][j]) cout << " "; else if (a[i][j] % 100 == a[i][j]) cout << " "; else if (a[i][j] % 1000 == a[i][j]) cout << " "; cout << a[i][j]; } cout << endl; } return 0; }

Задача №13

Дадени са числата n и m, попълнете двуизмерен масив с размер n×m с числа от 1 до n×m в спирала, започваща от горния ляв ъгъл и завъртена по посока на часовниковата стрелка, както е показано в примера.
Формат на входните данни
Въвеждат се две числа n и m, не по-големи от 100.
Изходен формат
Изведете получения масив, оставяйки точно 4 знака за всеки елемент.

примерен вход: 4 5 примерен резултат: 1 2 3 4 5 14 15 16 17 6 13 20 19 18 7 12 11 10 9 8

#включи използване на пространство от имена std; int main() ( int n, m; cin >> n >> m; int a; for (int i = 0; i<= n + 1; i++) { for (int j = 0; j <= m + 1; j++) { a[i][j] = -1; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { a[i][j] = 0; } } int num = 0, row = 1, col = 0; while (num < n * m) { while (a == 0) { col++; num++; a = num; } while (a == 0) { row++; num++; a = num; } while (a == 0) { col--; num++; a = num; } while (a == 0) { row--; num++; a = num; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (a[i][j] % 10 == a[i][j]) cout << " "; else if (a[i][j] % 100 == a[i][j]) cout << " "; else if (a[i][j] % 1000 == a[i][j]) cout << " "; cout << a[i][j]; } cout << endl; } return 0; }

0 0

Моля, активирайте JavaScript, за да видите

Лабораторна работа за училища и университети по решаване на задачи за обработка на двумерни масиви в C (C). Списък на задачите от лабораторната работа (щракнете върху връзката, която води до решението на задачата, ако има такава):

Допълнителни задачи:

Всички програми са тествани в CodeBlocks 16.01 (MinGW, Windows 10). Можете да дадете своите решения за неразрешени програми и предложения за подобряване на съществуващите в коментарите в долната част на страницата.

Изтеглете лабораторния файл и всички изходни кодове на програмите в архива:


Можете също да поръчате решения за вашите лаборатории на C++ и много други:

#1: Даден е двуизмерен масив. Намерете минималната сума на елементите на низ. Решете задачата без да използвате допълнителен едномерен масив.

#включи #включи #включи int main() ( int *arr; int x, y, i, j, sum = 0, min = 0, minstr = 0; srand(time(NULL)); x = 2 + rand() % 10; y = 2 + rand() % 6; arr = (int*)malloc(x*y*sizeof(int)); printf("Масив %d x %d: \n", x, y); for (i = 0; аз

#2: Определете координатите на елемента, който е най-близо до средната стойност на всички елементи на масива.

#включи #включи #включи #включи int main() ( int *arr; int x, y, i, j, minx = 0, miny = 0; float ssum = 0; srand(time(NULL)); x = 1 + rand() % 10; y = 1 + rand() % 7; arr = (int*)malloc(x*y*sizeof(int)); printf("Масив %d x %d: \n", x, y); за (i = 0 аз

#9: Даден е двуизмерен масив с четен брой колони. Разменете колоните от лявата половина на масива с колоните от дясната половина.

#включи #включи #включи int main() ( int *arr; int x, y, i, j, d; srand(time(NULL)); x = 1 + rand() % 10; y = 2 * (1 + rand() % 3 ); arr = (int*)malloc(x*y*sizeof(int)); printf("Масив %d x %d: \n", x, y); for (i = 0; i

#14: За всеки ред от двуизмерен масив открийте броя на елементите, чиято последна цифра е равна на a.

#включи #включи #включи int main() ( int *arr; int x, y, i, j, a, count; srand(time(NULL)); printf("Въведете a: "); scanf("%d", &a); x = 1 + rand() % 10; y = 1 + rand() % 7; arr = (int*)malloc(x*y*sizeof(int)); printf("Масив %d x %d: \n", x, y); за (i = 0; i

#21: Даден е двуизмерен масив b. Разглеждайки го като матрица, транспонирайте b.

#включи #включи #включи int main() ( int *arr, *arrT, x, y, i, j; srand(time(NULL)); x = 1 + rand() % 7; y = 1 + rand() % 7; arr = (int*)malloc(x*y*sizeof(int)); printf("Матрица %d x %d: \n", x, y); for (i = 0; i

№ 1 (Допълнително): Даден е двумерен масив. Сортирайте неговите низове в ненамаляващ ред на първите им елементи.

#включи #включи #включи int main() ( int *arr, x, y, i, j, k, d, max = 0; srand(time(NULL)); x = 1 + rand() % 10; y = 1 + rand() % 7; arr = (int*)malloc(x*y*sizeof(int)); printf("Масив %d x %d: \n", x, y); for (i = 0; i *(arr + max*y)) max = j; за (k = 0; k

#2 (Допълнително): Определете дали дадената квадратна матрица е ортонормална, т.е. такъв, в който скаларното произведение на всяка двойка отделни низове е 0, а скаларното произведение на всеки низ със себе си е 1.

#включи #включи int main() ( int *arr; int x, i, j, k, sum = 0; printf("Въведете размера на квадратната матрица: "); scanf("%d", &x); arr = (int *)malloc(x*x*sizeof(int)); printf("Въведете елементите на матрицата %d x %d: \n", x, x); for (i = 0; i

№ 3 (Допълнително): Даден е квадратен двуизмерен масив. Намерете сумата от елементите на всеки от неговите диагонали, успоредни на второстепенния.

#включи #включи #включи int main() ( int *arr; int x, y, i, j, sum; srand(time(NULL)); x = 2 + rand() % 6; arr = (int*)malloc(x*y* sizeof(int)); printf("Масив %d x %d: \n", x, x); for (i = 0; i

Задачи върху двумерни масиви

1) Даден е двумерен масив от цели числа. Съставете програма:

а) показване на елемента, разположен в горния десен ъгъл на масива;

б) показване на елемента, разположен в долния ляв ъгъл на масива;

в) показване на всеки елемент от втория ред на масива на екрана;

г) показване на всеки елемент от третата колона на масива;

д) показване на произволен елемент от масива на екрана.

2) Даден е двумерен масив от цели числа. Размяна:

а) елементи, разположени в горния десен и долния ляв ъгъл;

б) елементи, разположени в долния десен и горния ляв ъгъл;

3) Известен е номерът на реда, на който е разположен елементът от главния диагонал на двумерен масив от цели числа. Показване на стойността на този елемент.

4) Дисплей (в един ред):

а) всички елементи от главния диагонал на масива

б) всички елементи от главния диагонал на масива, като се започне от елемента, разположен в долния десен ъгъл.

5) Заменете стойностите на всички елементи на главния диагонал на целочислен масив с нула.

6) Заменете стойностите на всички елементи на вторичния диагонал на целочислен масив със стойности, равни на 100.

7) Определете:

а) сумата от елементите на главния диагонал на масива;

б) сумата от елементите на вторичния диагонал на масива;

в) средноаритметичното на елементите на главния диагонал на масива;

г) средноаритметичното на елементите на вторичния диагонал на масива;

д) минималният (максималния) елемент на главния диагонал на масива;

е) максималният (минималният) елемент от вторичния диагонал на реален масив;

ж) координати на първия максимален елемент на главния диагонал;

з) координати на първия минимален елемент от главния диагонал.

а) показване на всички елементи от петия ред на масива;

б) показване на всички елементи от третия ред на масива, като се започне от последния елемент на този ред;

в) изведе всички елементи от s-тата колона на масива;

г) заменете стойностите на всички елементи от втория ред на масива с числото 5;

д) заменете стойностите на всички елементи от петата колона с числото 10.

е) определя максималния (минималния) елемент на третата колона;

9) Даден е двумерен масив от цели числа. Съставете програма:

а) изчисляване на произведението на всеки два елемента от всеки низ от масив

б) сумата от всички елементи на всеки низ от масив;

10) Даден е двумерен масив от цели числа. Определете:

а) а) в коя колона от масива сумата от елементите е по-малка, в първата или в последната;

б) б) в кой ред произведението на елементите е по-голямо, във втория или в третия.

11) Даден е двумерен масив с цели числа с размер 10 x 10. Покажете част от масива на екрана:

а) разположен над главния диагонал;



б) разположени под главния диагонал;

в) разположен над второстепенния диагонал;

г) разположен под второстепенния диагонал;

12) Даден е двумерен масив от цели числа:

а) във всяка от колоните му намерете максималния (минималния) елемент;

б) координати на максималния (минималния) елемент;

в) сумата на нечетните елементи във всяка колона (ред);

г) броя на елементите, кратни на A или B.

д) намиране на реда с максимален сбор от елементи;

е) намерете колоната с минимална сума от елементи.

  • образователни: да допринесат за формирането на идея за двуизмерен масив и основните свойства на квадратните матрици; обмислете действия, които могат да бъдат извършени върху матрици; въведе типични алгоритми за обработка на матрици в Pascal; създават условия за формиране на способност за решаване на алгоритми с двумерни масиви;
  • развитие:
  • създаване на условия за развитие на умения за работа за ограничен период от време, развитие на умения за самостоятелна работа, развитие на умения за работа с бележки.
  • образователен:
  • да насърчава създаването на психологически комфорт за работа в урока, възпитанието на спокойствие, отговорно отношение към работата и повишаване на мотивацията за образователни дейности.

Тип урок: комбиниран.

Методи на обучение: лекция, самостоятелна работа.

Форми на организация: фронтална работа, самостоятелна работа.

Оборудване: задачи за работа в клас (индивидуални карти, задача на компютър), бележки на дъската.

По време на часовете:

1. Организационен момент.

Поздравления.
Темата е докладвана.
Поставете целта на урока и задачите.

2. Актуализиране на усвоените знания

Устно се изказват основните моменти от предходната тема: „Едномерни масиви”. Фронтална мини анкета за основните определения.

3. Поставяне на цели, поставяне на задачи:

  • дефинират концепцията за двумерен масив;
  • разгледайте нотацията на двумерен масив
  • разгледайте основните свойства на квадратните матрици;
  • обмислете действия, които могат да бъдат извършени върху матрици;
  • запознават се с типични алгоритми за обработка на матрици в Pascal;
  • създават условия за формиране на способност за решаване на алгоритми с двумерни масиви;
  • 4. Лекция

    Определение.

    Двумерният масив е колекция от данни, всяка стойност на които зависи от две числа, които могат да се разглеждат като индекс на колона в матрица.

    Формат на запис

    <имя>: масив[n_index_1..to_index_1, n_index_2 ..to_index_2] на <тип>

    A: масив от цели числа;

    За да използвате елемент от масив, трябва да посочите името на масива и индекса на елемента. Първият индекс съответства на номера на реда, вторият на номера на колоната. Например:

    за i:=1 до n направи
    за j:=1 до n направи
    a:=произволен(100);

    При инициализиране на двумерни масиви, всеки ред се затваря в допълнителна двойка скоби:

    const a:mas= ((2,3,1,0),
    (1,9,1,3),
    (3,5,7,0));

    Аналог на масивите на Pascal в математиката са матриците. Матрица, в която броят на редовете е равен на броя на колоните, се нарича квадратна матрица. A(n,n) – квадратна матрица

    Основни свойства на квадратните матрици:

    1. Квадратните матрици имат главни и странични диагонали. Например за матрица А елементи 1.5 и 9 лежат на главния диагонал, а 3, 5 и 7 лежат на страничния диагонал.

    i=j – елементите са разположени на главния диагонал;
    i> j - елементите са разположени под главния диагонал;
    аз i?j - елементите са разположени на главния диагонал и отдолу;
    i+j= n+1– елементите са разположени на вторичния диагонал;
    i+j< n+1– элементы расположены над побочной диагональю;
    i+j> n+1 – елементите са разположени под второстепенния диагонал;

    2. Квадратна матрица, в която всички елементи, с изключение на елементите на главния диагонал, са равни на нула, се нарича диагонална матрица

    3. Диагонална матрица, в която всички елементи на главния диагонал са равни на 1, се нарича матрица на идентичността

    4. Ако в матрицата A (m, n) редовете и колоните се разменят, то ще се получи матрицата A t (m, n), която се нарича транспонирана матрица.

    Основни действия, които могат да се извършват върху матрици

    • обобщавам;
    • намери разликата
    • произведение на матрица по някакво число;
    • произведение на две матрици.

    Типични алгоритми за обработка на матрици в Pascal

    1. Изходът на матрицата под формата на таблица:
    2. за i:= 1 до n направи
      започвам
      за j:= 1 до m направи
      запис (a:4);
      writeln
      край;

    3. Използване на генератор на произволни числа:
    4. рандомизирам;
      за i:=1 до m направи
      започвам
      за j:=1 до n направи
      започвам
      a:=random(100)-10;
      запис (a:4);
      край;
      writeln;
      край;

    5. 2-ри начин за показване на матрицата под формата на таблица:
    6. за i:= 1 до n направи
      за j:= 1 до m направи
      ако j>m тогава напишете (a:4)
      else writeln(a:4);

    7. Сумиране на матрицата:
    8. за i:= 1 до n направи
      започвам
      за j:= 1 до m направи
      c:=a+b
      край;

    9. Транспонирането на матрица е огледален образ на нейните елементи по отношение на главния диагонал. Можете да направите това, като въведете нов масив:

    за i:= 1 до n направи
    за j:= 1 до n направи
    b=a;

    5. Първичен контрол

    „Контурна карта“ 2 опции

    1 вариант

    1. Коригирайте неточностите в описанието на двумерен масив:
    2. вар
      A= масив от цели числа;

      ... ... двумерни масиви, всеки ред е ограден в допълнителна двойка скоби:

      const a:mas= ((2,3,1,0),
      (1,9,1,3),
      (3,5,7,0));

    3. Въведете липсващи определения:
    4. Основни операции, които могат да се извършват върху матрици: сумиране, произведение на две матрици,….,….

    5. Въведете липсващи определения:
    6. Матрица, в която броят на редовете е равен на броя на колоните, се нарича .... ….. .

    7. Намерете грешки в алгоритъма:

    за i:= 1 до n направи
    започвам
    за j:= 1 до m направи
    c:=a+a
    край;

    Вариант 2

    1. Коригирайте неточностите в описанието на масива:

    конст
    n=4; m=3;
    Тип
    mas:масив от цяло число;

    1. Въведете липсващи определения:
    2. …… е набор от данни, всяка стойност на които зависи от две числа, които могат да се разглеждат като индекс на колона в матрица.

    3. Въведете липсващи определения:
    4. Диагонална матрица, в която всички елементи на главния диагонал са равни на ... се нарича матрица на идентичността

    5. Въведете липсващи определения:
    6. Квадратна матрица, в която всички елементи, с изключение на елементите на главния диагонал, са равни на нула, се нарича … … .

    7. Намерете грешки в алгоритъма:

    рандомизирам;
    за i:=1 до m направи
    започвам
    за j:=1 до n направи
    започвам
    a:=random(100)-10;
    край;
    край;

    Каква е типичната задача на алгоритъма?

    Алгоритми в Паскал

    1. Напишете програма, която за целочислена матрица 3x4 определя средноаритметичното на нейните елементи и броя на положителните елементи във всеки ред. Приложение 2
    2. програма среда_n;
      const m=3;
      n=4;
      вар

      i,j,n_pos_el:цяло число;
      средна: реална;
      започвам
      за i:=1 до m направи
      за j:=1 до n направи read(a);
      среден:=0;
      за i:=1 до m започвам
      n_pos_el:=0;
      за j:=1 до n направете начало
      среден:=среден+a;
      ако a>0 тогава inc(n_pos_el);
      край;
      writeln("V",i,"-oi stroke",n_pos_el,"полозителни елементи");
      край;
      sred:=сред/m/n;
      writeln("Srednee arithmeticheskoe:",sred:6:2);
      край.

    3. Напишете програма, която при дадена правоъгълна целочислена матрица 3x4 определя номера на най-лявата колона, съдържаща само положителни елементи. Ако няма такава колона, се показва съобщение. Приложение 3

    програма num_posit;
    const m=3;
    n=4;
    вар
    a: масив от цели числа;
    i,j,num:цяло число;
    all_posit:boolean;
    започвам
    рандомизирам;
    за i:=1 до m направи
    започвам
    за j:=1 до n направи
    започвам
    a:=random(100)-10;
    запис (a:4);
    край;
    writeln;
    край;
    брой:=0;
    за j:=1 до n направете начало
    all_posit:=вярно;
    за i:=1 до m направи
    ако< 0 then
    започвам
    all_posit:=false;
    прекъсване; край;
    ако all_posit тогава започнете
    брой:=j; прекъсване; край;
    край;
    ако num = 0 тогава
    writeln("Takix stolbcov net")
    друго
    writeln("Колона номер:",num);
    край.

    Учениците качват файлове в Pascal, анализират този алгоритъм, преглеждат резултатите от изпълнението на програмата, отговарят на допълнителни въпроси:

    1. Как е организиран двумерен масив?
    2. Какво означава inc процедура?
    3. Какво означава процедурата за прекъсване?
    4. Как се използва генераторът на произволни числа?

    6. Формиране на умения за решаване на проблеми.

    Самостоятелно решаване на задачи върху индивидуални карти, в алгоритмична среда.

    Примерни задачи:

    1. Дадена е 5x5 матрица A, съдържаща произволни елементи. Намерете сумата от всички елементи на матрицата.
    2. Покажете таблицата на Питагор.
    3. Намерете сумата от положителните елементи на посочената колона на матрицата A 5x5 цели числа.

    7. Резултатите от урока, поставяне на домашна работа.

    Обобщаване. Оценка на нивото на асимилация.

    D / Z резюме, задачи:

    За всички:

    1. Даден е двуизмерен квадратен масив. Намерете номерата на редовете, всички елементи на които са равни на нула.
    2. Даден е двуизмерен квадратен масив. Намерете номерата на редовете, елементите на всеки от които са еднакви.
    3. Определете минималния елемент на двумерен масив. Отпечатайте номера на реда, съдържащ максималния брой минимални елементи, ако има такива.
    4. Даден е двумерен масив. Намерете линията с най-голям сбор от елементи и най-малък. Покажете намерените низове и сумите на техните елементи.

    За студенти, които имат представа за двумерни масиви и как да ги решават:

    Вместо лекция - решаване на задачи с повишена сложност.

    Примерни задачи:

    1. Даден е двумерен масив. Трансформирайте го според следното правило: направете реда с номер N колона с номер N, а колоната ред.
    2. В двумерен масив X всички числа са различни. Във всеки ред се избира минималният елемент, след което сред тези числа се избира максималният. Отпечатайте номера на реда от масива X, съдържащ избраното число.
    3. Даден е двумерен масив. Намерете най-голямата от стойностите на елементите на първия и последния ред.
    4. Напишете програма, която отпечатва от клавиатурата двуизмерен масив ред по ред и изчислява сбора на елементите му по колони.
    5. Напишете програма, която изчислява сумата от диагоналните елементи на квадратна матрица.