Примеры решения задач с двумерными массивами, задачи для самостоятельного решения. Дан двумерный массив вещественных чисел Дан двумерный

Подоспела очередная порция задач по информатике для школьников. На этот раз рассмотрим работу с двухмерными массивами на C++. Эти задачи достаточно интересные. И большая часть из них мне понравилась.

Задача №1

Найдите индексы первого вхождения максимального элемента.
Формат входных данных
Программа получает на вход размеры массива n и m, затем n строк по m чисел в каждой. n и m не превышают 100.
Формат выходных данных
Выведите два числа: номер строки и номер столбца, в которых стоит наибольший элемент в двумерном массиве. Если таких элементов несколько, то выводится тот, у которого меньше номер строки, а если номера строк равны то тот, у которого меньше номер столбца.

Sample Input: 3 4 0 3 2 4 2 3 5 5 5 1 2 3 Sample Output: 1 2

#include using namespace std; int main() { int n, m; cin >> n >> m; int a; // чтение for (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; for (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 элементов, заполнив его символами "." (каждый элемент массива является строкой из одного символа). Затем заполните символами "*" среднюю строку массива, средний столбец массива, главную диагональ и побочную диагональ. В результате "*" в массиве должны образовывать изображение звездочки. Выведите полученный массив на экран, разделяя элементы массива пробелами.

Sample Input: 5 Sample Output: * . * . * . * * * . * * * * * . * * * . * . * . *

#include using namespace 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, и т.д.

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 < 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.
Формат выходных данных
Выведите результат.

Sample Input: 0 1 Sample Output: 12 11 13 14 22 21 23 24 32 31 33 34

#include #include using namespace 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; // обработка for (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” в противном случае.

Sample Input: 3 0 1 2 1 2 3 2 3 4 Sample Output: YES

#include #include using namespace std; int main() { int n; bool symmetric; cin >> n; int a; // заполнение for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; } } // обработка symmetric = true; for (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.

Sample Input 1: 4 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 1 Sample Output 1: 5 1 6 Sample Input 2: 4 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 -2 Sample Output 2: 3 8

#include using namespace std; int main() { int n, k; cin >> n; int a[n][n]; // заполнение for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; } } cin >> k; // обработка и вывод for (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: строки исходного массива становятся столбцами транспонированного, столбцы исходного массива становятся строками транспонированного.
Для данного массива постройте транспонированный массив и выведите его на экран.

Sample Input: 3 4 11 12 13 14 21 22 23 24 31 32 33 34 Sample Output: 11 21 31 12 22 32 13 23 33 14 24 34

#include using namespace 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.

Sample Input: 3 4 0 1 0 1 1 0 0 1 1 1 1 1 2 Sample Output: 2

#include using namespace std; int main() { int n, m, k, r = 0; cin >> n >> m; int a[n][m]; // заполнение for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; } } cin >> k; // обработка for (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.
Формат выходных данных
Выведите получившийся массив. Числа при выводе разделяйте одним пробелом.

Sample Input: 3 4 11 12 13 14 21 22 23 24 31 32 33 34 Sample Output: 31 21 11 32 22 12 33 23 13 34 24 14

#include using namespace std; int main() { int n, m; cin >> n >> m; int a[n][m]; int b[m][n]; // заполнение for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; } } // обработка for (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.
Формат выходных данных

Sample Input: 3 5 Sample Output: 1 2 3 4 5 10 9 8 7 6 11 12 13 14 15

#include using namespace std; int main() { int n, m, c = 0; cin >> n >> m; int a[n][m]; // обработка for (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 символа.

Sample Input: 3 5 Sample Output: 1 2 4 7 10 3 5 8 11 13 6 9 12 14 15

#include using namespace 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 min_row = 0; min_row < n; min_row++) { if (min_row > 0) start_row = pos - 1; else start_row = 0; for (pos = start_row; pos < m; pos++) { row = min_row; for (int col = pos; col >= 0; col--) { if (row < 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 символа.

Sample Input: 3 5 Sample Output: 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8

#include using namespace 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 символа.

Sample Input: 4 5 Sample Output: 1 2 3 4 5 14 15 16 17 6 13 20 19 18 7 12 11 10 9 8

#include using namespace 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

Please enable JavaScript to view the

Задачи по двумерным массивам

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

а) вывода на экран элемента, расположенного в правом верхнем углу массива;

б) вывода на экран элемента, расположенного в левом нижнем углу массива;

в) вывода на экран любого элемента второй строки массива;

г) вывода на экран любого элемента третьего столбца массива;

д) вывода на экран любого элемента массива.

2) Дан двухмерный целочисленный массив. Поменять местами:

а) элементы, расположенные в верхнем правом и нижнем левом углах;

б) элементы, расположенные в нижнем правом и верхнем левом углах;

3) Известен номер строки, на которой расположен элемент главной диагонали двумерного массива целых чисел. Вывести на экран значение этого элемента.

4) Вывести на экран (в одну строку) :

а) все элементы главной диагонали массива

б) все элементы главной диагонали массива, начиная с элемента, расположенного в правом нижнем углу.

5) Заменить значения всех элементов главной диагонали целочисленного массива на нулевые.

6) Заменить значения всех элементов побочной диагонали целочисленного массива на значения, равные 100.

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

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

б) сумму элементов побочной диагонали массива;

в) среднее арифметическое элементов главной диагонали массива;

г) среднее арифметическое элементов побочной диагонали массива;

д) минимальный (максимальный) элемент главной диагонали массива;

е) максимальный (минимальный) элемент побочной диагонали вещественного массива;

ж) координаты первого максимального элемента главной диагонали;

з) координаты первого минимального элемента главной диагонали.

а) вывести на экран все элементы пятой строки массива;

б) вывести на экран все элементы третьей строки массива, начиная с последнего элемента этой строки;

в) вывести на экран все элементы s-го столбца массива;

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

д) заменить значения всех элементов пятого столбца на число 10.

е) определить максимальный (минимальный) элемент третьего столбца;

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

а) расчета произведения двух любых элементов любой строки массива

б) сумму всех элементов любой строки массива;

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

а) а) в каком столбце массива сумма элементов меньше, в первом или в последнем;

б) б) в какой строке произведение элементов больше, во второй или в третьей.

11) Дан двухмерный целочисленный массив размером 10 х 10. Вывести на экран часть массива:

а) расположенную выше главной диагонали;



б) расположенную ниже главной диагонали;

в) расположенную выше побочной диагонали;

г) расположенную ниже побочной диагонали;

12) Дан двумерный массив целых чисел:

а) в каждом его столбце найти максимальный (минимальный) элемент;

б) координаты максимального (минимального) элемента;

в) сумму нечетных элементов в каждом столбце (строке);

г) количество элементов кратных А или В.

д) найти строку с максимальной суммой элементов;

е) найти столбец с минимальной суммой элементов.

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

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

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

Формы организации: фронтальная работа, индивидуальная работа.

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

Ход урока:

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

Приветствие.
Сообщается тема.
Ставиться цель урока и задачи.

2. Актуализация полученных знаний

Устно проговариваются основные моменты предыдущей темы: “Одномерные массивы”. Фронтальный мини опрос по основным определениям.

3. Целеполагание, постановка задач:

  • дать определение понятию двумерный массив;
  • рассмотреть форму записи двумерного массива
  • рассмотреть основные свойства квадратных матриц;
  • рассмотреть действия, которые можно выполнить над матрицами;
  • познакомиться с типовыми алгоритмами обработки матриц на языке Pascal;
  • создать условия для формирования умения решать алгоритмы с двумерными массивами;
  • 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 – элементы расположены на главной диагонали и ниже;
    i+j= n+1– элементы расположены на побочной диагонали;
    i+j< n+1– элементы расположены над побочной диагональю;
    i+j> n+1– элементы расположены под побочной диагональю;

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

    3. Диагональная матрица, у которой все элементы, стоящие на главной диагонали, равны 1 , называется единичной матрицей

    4. Если в матрице A (m,n) поменять местами строки и столбцы, то получится матрица A t (m,n), которая называется транспонированной матрицей.

    Основные действия, которые можно выполнять над матрицами

    • суммировать;
    • находить разность;
    • произведение матрицы на некоторое число;
    • произведение двух матриц.

    Типовые алгоритмы обработки матриц на языке Паскаль

    1. Вывод матрицы в виде таблицы:
    2. for i:= 1 to n do
      begin
      for j:= 1 to m do
      write (a:4);
      writeln
      end;

    3. Использование генератора случайных чисел:
    4. 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;

    5. 2-ой способ вывода матрицы в виде таблицы:
    6. for i:= 1 to n do
      for j:= 1 to m do
      if j>m then write (a:4)
      else writeln (a:4);

    7. Суммирование матриц:
    8. for i:= 1 to n do
      begin
      for j:= 1 to m do
      c:=a+ b
      end;

    9. Транспонирование матрицы – зеркальное отражение ее элементов относительно главной диагонали. Сделать это можно, введя новый массив:

    for i:= 1 to n do
    for j:= 1 to n do
    b= a;

    5. Первичный контроль

    “Контурная карта” 2 варианта

    1 вариант

    1. Исправьте неточности в описании двумерного массива:
    2. Var
      A= array of integer;

      … … двумерных массивов каждая строка заключается в дополнительную пару круглых скобок:

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

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

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

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

    for i:= 1 to n do
    begin
    for j:= 1 to m do
    c:=a+ a
    end;

    2 вариант

    1. Исправьте неточности в описании массива:

    const
    n=4; m=3;
    type
    mas:array of integer;

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

    3. Вставьте пропущенные определения:
    4. Диагональная матрица, у которой все элементы, стоящие на главной диагонали, равны … , называется единичной матрицей

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

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

    randomize;
    for i:=1 to m do
    begin
    for j:=1 to n do
    begin
    a:=random(100)-10;
    end;
    end;

    Какую типовую задачу выполняет алгоритм?

    Алгоритмы на языке Паскаль

    1. Написать программу, которая для целочисленной матрицы 3х4 определяет среднее арифметическое ее элементов и количество положительных элементов в каждой строке. Приложение 2
    2. 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 to n do read(a);
      sred:=0;
      for i:=1 to m do begin
      n_pos_el:=0;
      for j:=1 to n do begin
      sred:=sred+a;
      if a>0 then inc(n_pos_el);
      end;
      writeln("V",i,"-oi stroke",n_pos_el,"polozitelnix elementov");
      end;
      sred:=sred/m/n;
      writeln("Srednee arifmeticheskoe:",sred:6:2);
      end.

    3. Написать программу, которая для прямоугольной целочисленной матрицы 3х4 определяет номер самого левого столбца, содержащего только положительные элементы. Если такого столбца нет, выводится сообщение. Приложение 3

    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.

    Ученики загружают файлы в Паскале, анализируют данный алгоритмы, просматривают результаты выполнения программ, отвечают на дополнительные вопросы:

    1. Как организуется двумерный массив?
    2. Что означает процедура inc?
    3. Что означает процедура break?
    4. Как используется генератор случайных чисел?

    6. Формирование навыков решения задач.

    Решение задач по индивидуальным карточкам самостоятельно, в алгоритмической среде.

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

    1. Дана матрица А 5х5 , содержащая случайные элементы. Найти сумму всех элементов матрицы.
    2. Вывести на экран таблицу Пифагора.
    3. Найти сумму положительных элементов указанного столбца матрицы А 5х5 целых чисел.

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

    Подведение итогов. Оценка уровня усвоения.

    Д/З конспект, задачи:

    Для всех:

    1. Дан двумерный квадратный массив. Найти номера строк, все элементы которых равны нулю.
    2. Дан двумерный квадратный массив. Найти номера строк, элементы в каждой из которых одинаковы между собой.
    3. Определить минимальный элемент двумерного массива. Напечатать номер строки, содержащей максимальное число минимальных элементов, если такие имеются.
    4. Дан двумерный массив. Найдите строку с наибольшей суммой элементов и наименьшей. Вывести на экран найденные строки и суммы их элементов.

    Для учащихся, имеющих представление о двумерных массивах и способах их решения:

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

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

    1. Дан двумерный массив. Преобразовать его по следующему правилу: строку с номером N сделать столбцом с номером N, а столбец – строкой.
    2. В двумерном массиве Х все числа различны. В каждой строке выбирается минимальный элемент, затем среди этих чисел выбирается максимальное. Напечатать номер строки массива Х, в которой расположено выбранное число.
    3. Дан двумерный массив. Найти наибольшее из значений элементов первой и последней строки.
    4. Написать программу, которая выводит по строкам с клавиатуры двумерный массив и вычисляет сумму его элементов по столбцам.
    5. Написать программу, которая вычисляет сумму диагональных элементов квадратной матрицы.

    Пример 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.

    Задачи

    1. . Найти сумму и произведение всех элементов массива.
    2. Дан целочисленный двумерный массив, размерности n х m . Найти сумму и произведение четных элементов.
    3. Дан целочисленный двумерный массив, размерности n х m . Найти сумму и произведение элементов, кратных 3 и 5.
    4. Дан целочисленный двумерный массив, размерности n х m . Найти количество отрицательных элементов, больше -9.
    5. Дан целочисленный двумерный массив, размерности n х m .
    6. Дан целочисленный двумерный массив, размерности n х m
    7. Дан целочисленный двумерный массив, размерности n х m
    8. Дан целочисленный двумерный массив, размерности n х m . Найти среднее арифметическое всех элементов массива.
    9. Дан целочисленный двумерный массив, размерности n х m . Выяснить, какое число встречается в какой строке раньше - положительное или отрицательное.
    10. Дан целочисленный двумерный массив, размерности n х m . Выяснить, в какой строке последовательность является возрастающей или убывающей.
    11. Дан целочисленный двумерный массив, размерности n х m . Вывести его элементы, индексы которых являются степенями двойки (1, 2, 4, 8, 16, ...).
    12. Дан целочисленный двумерный массив, размерности n х m . Найти количество элементов кратных 7.
    13. Дан целочисленный двумерный массив, размерности n х m . Вывести на экран элементы, которые являются квадратами какого-либо числа.
    14. Дан целочисленный двумерный массив, размерности n х m . Найти номера нечетных элементов, стоящих на четных местах.
    15. Дан целочисленный двумерный массив, размерности n х m . Найти максимум и минимум. Поменять их местами.
    16. Дан целочисленный двумерный массив, размерности n х m . Заменить все элементы на их квадраты.
    17. Дан целочисленный двумерный массив, размерности n х m . Заменить все элементы на их противоположные значения.
    18. Дан целочисленный двумерный массив, размерности n х m . Поменять местами первый и последний элементы.
    19. Дан целочисленный двумерный массив, размерности n х m . Сформировать новый массив, состоящий из противоположных соответствующих элементов.
    20. Дан целочисленный двумерный массив, размерности n х m . Вывести на экран те элементы, у которых остаток от деления на m равен k.
    21. Вводятся результаты контрольной работы 10 учащихся. Определите число не удовлетворительных, удовлетворительных, хороших, отличных оценок. Вывести среднюю оценку, полученную учащимися за контрольную работу.
    22. Ввести оценки N учеников по K предметам. Определить и вывести на экран количество учеников, не получивших ни одной "5".
    23. В группе учится N студентов, студенты получили по четыре отметки за экзамен. Определить количество неуспевающих студентов и средний балл группы.
    24. Дан целочисленный двумерный массив, размерности n х m . Вычислить сумму чисел, порядковые номера которых являются числами фибоначчи.
    25. Дан целочисленный двумерный массив, размерности n х m . Сложить соответствующие элементы.

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

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

    Работоспособность всех программ проверена в CodeBlocks 16.01 (MinGW, Windows 10). Свои решения нерешённых программ и пожелания по улучшению существующих можете давать в комментариях внизу страницы.

    Скачать файл лабораторной и все исходные коды программ в архиве:


    Также вы можете заказать решение своих лабораторных работ на языке C++ и многих других:

    №1: Дан двумерный массив. Найти минимальную сумму элементов строки. Задачу решить без использования дополнительного одномерного массива.

    #include #include #include 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("Array %d x %d: \n", x, y); for (i = 0; i

    №2: Определить координаты элемента, наиболее близкого к среднему значению всех элементов массива.

    #include #include #include #include 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("Array %d x %d: \n", x, y); for (i = 0; i

    №9: Дан двумерный массив из четного числа столбцов. Столбцы левой половины массива поменять ме-стами со столбцами правой половины.

    #include #include #include 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("Array %d x %d: \n", x, y); for (i = 0; i

    №14: Для каждой строки двумерного массива выяснить количество элементов, последняя цифра которых равна а.

    #include #include #include int main() { int *arr; int x, y, i, j, a, count; srand(time(NULL)); printf("Enter a: "); scanf("%d", &a); x = 1 + rand() % 10; y = 1 + rand() % 7; arr = (int*)malloc(x*y*sizeof(int)); printf("Massiv %d x %d: \n", x, y); for (i = 0; i

    №21: Дан двумерный массив b. Рассматривая его как матрицу, транспонировать b.

    #include #include #include 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("Matrix %d x %d: \n", x, y); for (i = 0; i

    №1 (Доп): Дан двумерный массив. Упорядочить его строки по неубыванию их первых элементов.

    #include #include #include 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("Array %d x %d: \n", x, y); for (i = 0; i *(arr + max*y)) max = j; for (k = 0; k

    №2 (Доп): Определить, является ли заданная квадратная матрица ортонормированной, т.е. такой, в которой скалярное произведение каждой пары различных строк равно 0, а скалярное произведение каждой строки на себя равно 1.

    #include #include int main() { int *arr; int x, i, j, k, sum = 0; printf("Enter the size of the square matrix: "); scanf("%d", &x); arr = (int*)malloc(x*x*sizeof(int)); printf("Enter the elements of the matrix %d x %d: \n", x, x); for (i = 0; i

    №3 (Доп): Дан квадратный двумерный массив. Найти сумму элементов каждой его диагонали, параллельной побочной.

    #include #include #include 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("Array %d x %d: \n", x, x); for (i = 0; i