Подоспела очередная порция задач по информатике для школьников. На этот раз рассмотрим работу с двухмерными массивами на C++. Эти задачи достаточно интересные. И большая часть из них мне понравилась.
Задача №1
Найдите индексы первого вхождения максимального элемента.
Формат входных данных
Программа получает на вход размеры массива n и m, затем n строк по m чисел в каждой. n и m не превышают 100.
Формат выходных данных
Выведите два числа: номер строки и номер столбца, в которых стоит наибольший элемент в двумерном массиве. Если таких элементов несколько, то выводится тот, у которого меньше номер строки, а если номера строк равны то тот, у которого меньше номер столбца.
#include
Задача №2
Дано нечетное число n, не превосходящее 15. Создайте двумерный массив из n×n элементов, заполнив его символами "." (каждый элемент массива является строкой из одного символа). Затем заполните символами "*" среднюю строку массива, средний столбец массива, главную диагональ и побочную диагональ. В результате "*" в массиве должны образовывать изображение звездочки. Выведите полученный массив на экран, разделяя элементы массива пробелами.
Sample Input: 5 Sample Output: * . * . * . * * * . * * * * * . * * * . * . * . * #include
Задача №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
Задача №4
Дан двумерный массив и два числа: i и j. Поменяйте в массиве столбцы с номерами i и j.
Формат входных данных
Программа получает на вход размеры массива n и m, не превосходящие 100, затем элементы массива, затем числа i и j.
Формат выходных данных
Выведите результат.
#include
Задача №5
Дано число n, не превосходящее 10, и массив размером n × n. Проверьте, является ли этот массив симметричным относительно главной диагонали. Выведите слово “YES”, если массив симметричный, и слово “NO” в противном случае.
Sample Input: 3 0 1 2 1 2 3 2 3 4 Sample Output: YES #include
Задача №6
Дан квадратный двумерный массив размером n × n и число k. Выведите элементы k-й по счету диагонали ниже главной диагонали (т.е. если k = 1, то нужно вывести элементы первой диагонали, лежащей ниже главной, если k = 2, то второй диагонали и т.д.).
Значение k может быть отрицательным, например, если k = −1, то нужно вывести значение первой диагонали лежащей выше главной. Если k = 0, то нужно вывести элементы главной диагонали.
Программа получает на вход число n, не превосходящие 10, затем массив размером n × n, затем число k.
#include
Задача №7
Дан двумерный массив размером n×m (n и m не превосходят 1000). Симметричный ему относительно главной диагонали массив называется транспонированным к данному. Он имеет размеры m×n: строки исходного массива становятся столбцами транспонированного, столбцы исходного массива становятся строками транспонированного.
Для данного массива постройте транспонированный массив и выведите его на экран.
#include
Задача №8
В кинотеатре n рядов по m мест в каждом (n и m не превосходят 20). В двумерном массиве хранится информация о проданных билетах, число 1 означает, что билет на данное место уже продан, число 0 означает, что место свободно. Поступил запрос на продажу k билетов на соседние места в одном ряду. Определите, можно ли выполнить такой запрос.
Формат входных данных
Программа получает на вход числа n и m. Далее идет n строк, содержащих m чисел (0 или 1), разделенных пробелами. Затем дано число k.
Формат выходных данных
Программа должна вывести номер ряда, в котором есть k подряд идущих свободных мест. Если таких рядов несколько, то выведите номер наименьшего подходящего ряда. Если подходящего ряда нет, выведите число 0.
#include
Задача №9
Дан прямоугольный массив размером n×m. Поверните его на 90 градусов по часовой стрелке, записав результат в новый массив размером m×n.
Формат входных данных
Вводятся два числа n и m, не превосходящие 100, затем массив размером n×m.
Формат выходных данных
Выведите получившийся массив. Числа при выводе разделяйте одним пробелом.
#include
Задача №10
По данным числам n и m заполните двумерный массив размером n×m числами от 1 до n×m “змейкой”, как показано в примере.
Формат входных данных
Вводятся два числа n и m, каждое из которых не превышает 20.
Формат выходных данных
#include
Задача №11
По данным числам n и m заполните двумерный массив размером n×m числами от 1 до n×m “диагоналями”, как показано в примере.
Формат входных данных
Формат выходных данных
Выведите полученный массив, отводя на вывод каждого элемента ровно 4 символа.
#include
Задача №12
Даны числа n и m. Заполните массив размером n × m в шахматном порядке: клетки одного цвета заполнены нулями, а другого цвета - заполнены числами натурального ряда сверху вниз, слева направо. В левом верхнем углу записано число 1.
Формат входных данных
Вводятся два числа n и m, не превышающие 100.
Формат выходных данных
Выведите полученный массив, отводя на вывод каждого элемента ровно 4 символа.
#include
Задача №13
По данным числам n и m заполните двумерный массив размером n×m числами от 1 до n×m по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке, как показано в примере.
Формат входных данных
Вводятся два числа n и m, не превышающие 100.
Формат выходных данных
Выведите полученный массив, отводя на вывод каждого элемента ровно 4 символа.
#include
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. Целеполагание, постановка задач:
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), которая называется транспонированной матрицей.
Основные действия, которые можно выполнять над матрицами
- суммировать;
- находить разность;
- произведение матрицы на некоторое число;
- произведение двух матриц.
Типовые алгоритмы обработки матриц на языке Паскаль
- Вывод матрицы в виде таблицы:
- Использование генератора случайных чисел:
- 2-ой способ вывода матрицы в виде таблицы:
- Суммирование матриц:
- Транспонирование матрицы – зеркальное отражение ее элементов относительно главной диагонали. Сделать это можно, введя новый массив:
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 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.
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 . Сложить соответствующие элементы.
Лабораторная работа для школ и вузов по решению задач по обработке двумерных массивов на языке C (Си). Перечень задач лабораторной работы (клик по ссылке направляет на решение задачи, если таковое имеется):
Дополнительные задачи:Работоспособность всех программ проверена в CodeBlocks 16.01 (MinGW, Windows 10). Свои решения нерешённых программ и пожелания по улучшению существующих можете давать в комментариях внизу страницы.
Скачать файл лабораторной и все исходные коды программ в архиве:
Также вы можете заказать решение своих лабораторных работ на языке C++ и многих других: