Массивы
Одномерные и многомерные массивы, индексы, поиск и преобразование элементов.
Цель и порядок работы
Освоить основные алгоритмы работы с одномерными и многомерными массивами и методы тестирования.
Исследуйте расположение элементов, границы диапазонов и преобразование массивов по условию варианта. В задачах с минимумами, максимумами и особыми элементами важно заранее определить, что считать результатом при повторениях или отсутствии подходящего элемента.
- Получите вариант, подготовьте оглавление, словесный ход решения и блок-схему.
- Сохраните указанные в варианте размеры, способ формирования массивов и ограничения на рабочие массивы.
- Напишите программу, скомпилируйте и отладьте её.
- Проведите тесты для обычных, граничных и некорректных данных; проверьте решения и условия.
- Выведите исходные данные и результат преобразования, оформите отчёт.
Требования к коду, заготовка отчёта, тестирование и блок-схемы →
Скачать текущие задания и варианты+ в PDF
Исходные материалы: Методичка №6 · PDF
Перед началом: Лекция 6 · массивы · Лекция 6 · многомерные массивы · Лекция 4 · vector · Лекция 5 · неопределённое поведение
В исходных примерах встречаются массивы с размером, введённым во время выполнения. VLA не входят в стандартный C++; переносимые варианты хранения разобраны в лекции 6. Ограничения своего задания при этом нужно сохранить.
Задания по вариантам
Выполните все задания назначенного варианта.
Общие требования к вариантам
Используйте одномерные и двумерные массивы стандартного C++ с фиксированной вместимостью; допустимо использовать vector из лекции 4, если он не нарушает ограничения варианта. VLA не используйте. Размеры и вместимость задавайте именованными константами вне main.
Для проверки задавайте элементы вручную; случайное заполнение необязательно. Размер вектора от 1 до 20, сторон матрицы от 1 до 10, значения по модулю до 1000. Выводите исходные данные и итог. Рабочие массивы, кроме явно требуемого выходного, запрещены.
Индексы в программе и выводе начинаются с 0; слой с номером 0 — внешний. При нескольких экстремумах выбирайте первое в порядке строк. Второй по значению экстремум — второе различное значение. Участок между позициями не включает сами границы.
Если нужных различных значений или позиций нет, сообщите об этом и оставьте данные без изменений. Когда минимум равен максимуму, это не отсутствие минимума: отсутствует участок между разными экстремумами. Для отсутствующих целых положительного и отрицательного значений в варианте 6 ответ всегда существует.
Вариант 1
Задание 1
В целочисленном векторе values найти минимальный и максимальный элементы. Если минимум равен максимуму, участок между их первыми позициями пуст; преобразование не выполняется. Если требуются вторые различные экстремумы, отдельно проверяйте их наличие. Элементы вектора, расположенные между ними, отсортировать по возрастанию.
Задание 2
Вывести на экран построчно элементы всех слоев целочисленного прямоугольного массива matrix , начиная с внешнего слоя. Вывод начинать с левого верхнего элемента слоя.
Вариант 2
Задание 1
В целочисленном векторе values найти минимальный и максимальный элементы. Если минимум равен максимуму, участок между их первыми позициями пуст; преобразование не выполняется. Если требуются вторые различные экстремумы, отдельно проверяйте их наличие. Перевернуть элементы вектора, расположенные между ними (выполнить “поплавок”).
v_min=-5 v_max=10 Исходный вектор: 7 -5 1 3 -2 5 2 0 10 1
Задание 2
В целочисленном массиве matrix поменять местами (отразить зеркально) соответствующие элементы, расположенные выше главной и побочной диагоналей и ниже их. Элементы диагоналей не трогать.
В задании с диагоналями или поворотом используйте квадратную матрицу n×n, 1≤n≤10. Операция не должна обращаться за границы; для n=1 проверьте отсутствие изменяемых пар.
Вариант 3
Задание 1
В целочисленном векторе values найти его вторые по значению минимальный и максимальный элементы и поменять их местами. Предусмотреть случай, когда таких элементов нет.
Задание 2
В целочисленном массиве matrix поменять местами (отразить зеркально) соответствующие элементы, расположенные левее главной и побочной диагоналей и правее них. Элементы диагоналей не трогать.
В задании с диагоналями или поворотом используйте квадратную матрицу n×n, 1≤n≤10. Операция не должна обращаться за границы; для n=1 проверьте отсутствие изменяемых пар.
Вариант 4
Задание 1
В целочисленном векторе values найти его вторые по значению минимальный и максимальный элементы. Предусмотреть случай, когда таких элементов нет. Элементы вектора, расположенные между ними, отсортировать по возрастанию.
Задание 2
Целочисленный массив matrix повернуть на 90 градусов по часовой стрелке.
Выходной массив: -1 0 -5 5 7 -17 -10 9 2 -2 2 9 -12 0 -11 4 -13 8 10 3 -19 4 -18 1 -5
В задании с диагоналями или поворотом используйте квадратную матрицу n×n, 1≤n≤10. Операция не должна обращаться за границы; для n=1 проверьте отсутствие изменяемых пар.
Вариант 5
Задание 1
В целочисленном векторе values найти его вторые по значению минимальный и максимальный элементы. Предусмотреть случай, когда таких элементов нет. Перевернуть элементы вектора, расположенные между ними (выполнить “поплавок”).
Задание 2
Заданный k-ый слой элементов целочисленного массива matrix повернуть на 90 градусов по часовой стрелке. Номер слоя k задать с консоли.
В задании с диагоналями или поворотом используйте квадратную матрицу n×n, 1≤n≤10. Операция не должна обращаться за границы; для n=1 проверьте отсутствие изменяемых пар.
Вариант 6
Задание 1
В целочисленном векторе values найти минимальное положительное и максимальное отрицательное числа, не входящие в этот вектор. Предусмотреть случай, когда таких элементов нет.
n=10 v_min=-5 v_max=10 Исходный вектор: 7 3 1 -5 -2 5 2 0 8 1
Задание 2
В заданном k-ом слое элементов целочисленного прямоугольного массива matrix сдвинуть все элементы на один шаг вправо. Номер слоя k задать с консоли.
В первом задании отсутствующее положительное и отрицательное целое всегда существует: при значениях по модулю до 1000 достаточно проверить кандидаты 1…1001 и −1…−1001. Случай «ответа нет» здесь невозможен.
Вариант 7
Задание 1
В целочисленном векторе values найти первый по порядку отрицательный и последний положительный элементы и поменять их местами. Предусмотреть случай, когда все элементы вектора одного знака.
Задание 2
В заданном k-ом слое элементов целочисленного прямоугольного массива matrix сдвинуть все элементы на p шагов по часовой стрелке. Номер слоя k и количество шагов p задать с консоли.
Вариант 8
Задание 1
В целочисленном векторе values найти второй по порядку отрицательный и предпоследний положительный элементы и поменять их местами. Предусмотреть случай, когда таких элементов в векторе нет.
Задание 2
В целочисленном массиве matrix найти максимальный элемент выше главной диагонали и минимальный – ниже ее. Поменять их местами.
Выходной массив: 7 -2 -11 3 -5 5 2 0 -17 1 -15 9 -12 8 -18 0 -10 9 -13 4 -1 10 2 4 -19
В задании с диагоналями или поворотом используйте квадратную матрицу n×n, 1≤n≤10. Операция не должна обращаться за границы; для n=1 проверьте отсутствие изменяемых пар.
Вариант 9
Задание 1
В целочисленном векторе values переместить в начало все положительные элементы в порядке их следования, за ними – все отрицательные элементы в порядке их следования, а затем - нули.
Задание 2
В целочисленном массиве matrix найти максимальный элемент выше побочной диагонали и минимальный – ниже ее. Поменять их местами.
В задании с диагоналями или поворотом используйте квадратную матрицу n×n, 1≤n≤10. Операция не должна обращаться за границы; для n=1 проверьте отсутствие изменяемых пар.
Вариант 10
Задание 1
В целочисленном векторе values переместить в начало все нулевые элементы, за ними – все отрицательные элементы в порядке их следования, а за ними – все положительные элементы в порядке их следования.
Задание 2
Целочисленный массив matrix сначала транспонировать, а затем его элементы отразить зеркально относительно побочной диагонали. Вывести на экран исходный массив, транспонированный и выходной.
В задании с диагоналями или поворотом используйте квадратную матрицу n×n, 1≤n≤10. Операция не должна обращаться за границы; для n=1 проверьте отсутствие изменяемых пар.
Вариант 11
Задание 1
В целочисленном векторе values вычислить сумму нечетных элементов с четными индексами и сумму четных элементов с нечетными индексами. Предусмотреть случай, когда таких элементов нет.
Задание 2
В целочисленном прямоугольном массиве matrix найти все элементы, соприкасающиеся углами с его максимальным элементом.
Вариант 12
Задание 1
В целочисленном векторе values определить среднее арифметическое положительных и отдельно среднее арифметическое отрицательных элементов вектора, расположенных между минимальным и максимальным его элементами. Если минимум равен максимуму, участок между их первыми позициями пуст; преобразование не выполняется. Если требуются вторые различные экстремумы, отдельно проверяйте их наличие.
Задание 2
В целочисленном прямоугольном массиве matrix найти наименьший элемент, встречающийся более одного раза. Предусмотреть случай, когда такого элемента нет.
v_min=-20 v_max=10 Исходный массив: 7 -2 -18 3 -5 8 5 2 0 10 1 -2 -15 9 -12 8 -18 9 0 -10 9 -13 4 -16 -1 -17 10 4 -18 -9
Вариант 13
Задание 1
В целочисленном векторе values определить среднее арифметическое положительных и отдельно среднее арифметическое отрицательных элементов вектора, расположенных между вторыми по значению минимальным и максимальным его элементами. Предусмотреть случай, когда таких элементов нет.
Задание 2
В целочисленном прямоугольном массиве matrix найти наибольший элемент, встречающийся более одного раза. Предусмотреть случай, когда такого элемента нет.
Вариант 14
Задание 1
В целочисленном векторе values определить количество положительных, отрицательных и нулевых элементов, расположенных между минимальным и максимальным его элементами. Если минимум равен максимуму, участок между их первыми позициями пуст; преобразование не выполняется. Если требуются вторые различные экстремумы, отдельно проверяйте их наличие.
Задание 2
В целочисленном прямоугольном массиве matrix найти все элементы, соприкасающиеся углами с его минимальным элементом.
Вариант 15
Задание 1
В целочисленном векторе values определить количество положительных, отрицательных и нулевых элементов, расположенных между вторыми по значению минимальным и максимальным его элементами. Если минимум равен максимуму, участок между их первыми позициями пуст; преобразование не выполняется. Если требуются вторые различные экстремумы, отдельно проверяйте их наличие.
Задание 2
Переставить строки и столбцы целочисленного прямоугольного массива matrix таким образом, чтобы его максимальный элемент находился в левом верхнем углу, а минимальный – в правом нижнем. Предусмотреть вариант, когда максимальный и минимальный элементы находятся в одной строке или в одном столбце. В этом случае выдать сообщение “Перестановка невозможна”. Перестановки строк и столбцов вывести по шагам.
Вариант 16+ · Экстремумы и поворот матрицы
Вектор
Найдите вторые различные минимум и максимум. При наличии обоих разверните элементы строго между их первыми вхождениями; порядок расположения границ может быть любым.
Матрица+
Поверните квадратную матрицу на введённое количество четвертей оборота по часовой стрелке. Сократите количество по модулю 4, работайте на месте. Выведите результат после каждого фактически выполненного поворота.
Вариант 17+ · Устойчивая группировка и периметр
Вектор
Расположите положительные элементы, затем нули, затем отрицательные. Внутри положительной и отрицательной групп сохраните исходный порядок без рабочего массива.
Матрица+
Для прямоугольной матрицы найдите сумму и минимум каждого концентрического слоя. Одну строку, столбец и центральный элемент обходите без повторного учёта.
Вариант 18+ · Соседние разности и диагонали
Вектор
В исходном массиве замените каждый элемент, кроме первого, разностью с предыдущим исходным значением. Выполняйте обход справа налево, чтобы не потерять данные.
Матрица+
Найдите суммы всех диагоналей, параллельных главной. В выходной массив запишите суммы в порядке начала диагонали: сначала по левому столбцу снизу вверх, затем по верхней строке слева направо, не повторяя главную.
Вариант 19+ · Поиск повторов и седловых точек
Вектор
Найдите наименьшее значение, которое встречается ровно два раза, и обе позиции. Если его нет, сообщите об этом. Рабочий массив не создавайте.
Матрица+
Выведите координаты всех седловых точек: минимум в своей строке и максимум в своём столбце. Равенства допускаются; каждую координату выводите один раз. Проверьте полностью одинаковую матрицу.
Вариант 20+ · Поворот слоя и устойчивые строки
Вектор
Циклически сдвиньте массив вправо на k позиций без дополнительного массива. k неотрицательно, пустой массив обрабатывается до деления на размер.
Матрица+
Упорядочьте строки по неубыванию их сумм, сохраняя исходный порядок строк с одинаковой суммой. Разрешён обмен строк поэлементно, рабочая матрица запрещена. Покажите суммы до и после.
В первом задании этого варианта размер может быть от 0 до 20: это исключение из общего минимального размера. При n=0 выведите пустой результат до операции k%n. Введите целое k от 0 до 10^9.
Возможные вопросы к защите
Попробуйте ответить своими словами и показать соответствующее место в своей программе. Под вопросом можно открыть ориентир для ответа и перейти к нужной теме лекции.
Какие индексы допустимы для массива из N элементов?
Объясните границу N − 1 и отличие указателя за концом от доступного элемента.
Повторить: Лекция 6 · массивы · Лекция 6 · массив и указатель
Как найти минимум, максимум и их индексы?
Обоснуйте начальное значение и поведение при нескольких равных экстремумах.
Повторить: Лекция 6 · массивы
Как записать условие главной и побочной диагоналей?
Используйте индексы с нуля и отдельно рассмотрите центральный элемент нечётной матрицы.
Повторить: Лекция 6 · матрицы
Чем размер vector отличается от capacity?
Объясните, почему reserve не создаёт элементы и не разрешает доступ к ним.
Повторить: Лекция 4 · динамические массивы
Почему выход за границу может не привести к немедленному падению?
Объясните UB и почему удачный запуск не подтверждает корректность.
Повторить: Лекция 5 · неопределённое поведение
Когда нужен дополнительный массив, а когда преобразование возможно на месте?
Сопоставьте порядок чтения и записи и ограничения вашего варианта.
Повторить: Лекция 6 · массивы · Лекция 2 · циклы