Структурированные типы данных. Массивы в среде «КуМир»
Понятие массива
Массив — это структурированный тип данных, представляющий собой упорядоченную последовательность элементов одного типа, объединённых общим именем. Каждый элемент массива имеет индекс (номер), по которому к нему можно обратиться.
В «КуМире» массивы бывают:
- одномерные (линейные);
- двумерные (матрицы).
Описание массивов в «КуМире»
Массив нужно объявить перед использованием, указав:
- тип элементов;
- имя массива;
- размерность (диапазон индексов).
Синтаксис объявления:
- Одномерный массив:
цел таб A[1:10] // массив из 10 целых чисел с индексами от 1 до 10 вещ таб B[1:5] // массив из 5 вещественных чисел с индексами от 1 до 5 - Двумерный массив (матрица):
цел таб M[1:3, 1:4] // матрица 3×4 целых чисел
Важные нюансы:
- по умолчанию индексация начинается с 1;
- можно задать любой диапазон индексов, например
A[0:9]илиA[-5:5]; - все элементы массива должны быть одного типа.
Основные операции с массивами
- Заполнение массива:
- вручную (ввод с клавиатуры);
- по формуле;
- случайными значениями.
- Обработка элементов:
- перебор всех элементов;
- поиск по условию;
- изменение значений.
- Вывод массива:
- на экран;
- в файл.
Примеры работы с массивами
Пример 1. Одномерный массив: заполнение и вывод
Задача: создать массив из 5 целых чисел, заполнить его с клавиатуры и вывести на экран.
алг РаботаСМассивом
нач
цел таб A[1:5]
цел i
вывод "Введите 5 чисел:", нс
нц для i от 1 до 5
ввод A[i]
кц
вывод "Массив:", нс
нц для i от 1 до 5
вывод A[i], " "
кц
кон
Пример 2. Вычисление суммы элементов массива
Задача: найти сумму элементов массива из 10 целых чисел.
алг СуммаЭлементов
нач
цел таб A[1:10]
цел i, сумма
сумма := 0
вывод "Заполните массив:", нс
нц для i от 1 до 10
ввод A[i]
сумма := сумма + A[i]
кц
вывод "Сумма элементов: ", сумма, нс
кон
Пример 3. Поиск максимального элемента
Задача: найти максимальный элемент в массиве из 7 чисел.
алг ПоискМаксимального
нач
цел таб A[1:7]
цел i, max
вывод "Заполните массив:", нс
нц для i от 1 до 7
ввод A[i]
кц
max := A[1] // предполагаем, что первый элемент — максимальный
нц для i от 2 до 7
если A[i] > max
то max := A[i]
все
кц
вывод "Максимальный элемент: ", max, нс
кон
Пример 4. Двумерный массив (матрица): заполнение и вывод
Задача: создать матрицу 3×3, заполнить её случайными числами от 1 до 10 и вывести на экран в виде таблицы.
алг РаботаСМатрицей
нач
цел таб M[1:3, 1:3]
цел i, j
нц для i от 1 до 3
нц для j от 1 до 3
M[i, j] := int(rnd(10)) + 1 // случайное число от 1 до 10
кц
кц
вывод "Матрица:", нс
нц для i от 1 до 3
нц для j от 1 до 3
вывод M[i, j], " "
кц
вывод нс // переход на новую строку
кц
кон
Пример 5. Обработка матрицы: сумма элементов главной диагонали
Задача: вычислить сумму элементов главной диагонали квадратной матрицы 4×4.
алг СуммаДиагонали
нач
цел таб M[1:4, 1:4]
цел i, сумма
сумма := 0
вывод "Заполните матрицу 4x4:", нс
нц для i от 1 до 4
нц для j от 1 до 4
ввод M[i, j]
кц
кц
нц для i от 1 до 4
сумма := сумма + M[i, i] // элементы главной диагонали: M[1,1], M[2,2] и т. д.
кц
вывод "Сумма элементов главной диагонали: ", сумма, нс
кон
Особенности работы с массивами в «КуМире»
- Индексация: по умолчанию начинается с 1, но можно задать любой диапазон.
- Типы данных: поддерживаются
цел,вещ,лог(логические массивы). - Ограничения: размер массива задаётся при объявлении и не может быть изменён в процессе выполнения программы.
- Инициализация: элементы массива не инициализируются автоматически, их нужно заполнять явно.
- Границы: выход за границы массива приведёт к ошибке выполнения.
Полезные советы
- Всегда проверяйте границы массива при обращении к элементам.
- Используйте циклы для обработки всех элементов массива.
- Для двумерных массивов удобно использовать вложенные циклы.
- При работе с большими массивами разбивайте задачу на подзадачи (вспомогательные алгоритмы).
- Комментарии помогут понять логику работы с массивом.
Краткий справочник по синтаксису
| Действие | Синтаксис |
|---|---|
| Объявление одномерного массива | цел таб A[1:N] |
| Объявление двумерного массива | цел таб M[1:N, 1:M] |
| Обращение к элементу | A[i], M[i, j] |
| Цикл по всем элементам | нц для i от 1 до N |
| Вложенный цикл для матрицы | нц для i от 1 до N; нц для j от 1 до M |
Практическая работа
Задание
Дан одномерный массив из 8 целых чисел. Необходимо:
- Заполнить массив случайными числами от −10 до 10.
- Найти сумму всех положительных элементов массива.
- Вывести на экран сам массив и найденную сумму.
Пошаговое решение
Шаг 1. Объявление переменных и массива
Сначала нужно объявить массив и переменные, которые понадобятся для работы:
- массив
Aиз 8 целых чисел; - переменную
iдля цикла; - переменную
суммадля хранения суммы положительных элементов.
алг СуммаПоложительных
нач
цел таб A[1:8]
цел i, сумма
Шаг 2. Инициализация суммы
Перед началом подсчёта сумму нужно обнулить:
сумма := 0
Шаг 3. Заполнение массива случайными числами
Используем цикл для заполнения массива случайными числами в диапазоне от −10 до 10. Для этого применяем функцию rnd():
rnd(21)даёт случайное число от 0 до 20;- вычитаем 10, чтобы получить диапазон от −10 до 10.
вывод "Массив:", нс
нц для i от 1 до 8
A[i] := int(rnd(21)) - 10 // случайное число от -10 до 10
вывод A[i], " " // выводим элемент сразу после заполнения
кц
вывод нс // переход на новую строку
Шаг 4. Поиск суммы положительных элементов
Снова используем цикл для перебора всех элементов массива. Если элемент положительный (больше нуля), добавляем его к сумме.
нц для i от 1 до 8
если A[i] > 0
то сумма := сумма + A[i]
все
кц
Шаг 5. Вывод результата
Выводим найденную сумму на экран:
вывод "Сумма положительных элементов: ", сумма, нс
кон
Полный код программы
алг СуммаПоложительных
нач
цел таб A[1:8]
цел i, сумма
сумма := 0
вывод "Массив:", нс
нц для i от 1 до 8
A[i] := int(rnd(21)) - 10
вывод A[i], " "
кц
вывод нс
нц для i от 1 до 8
если A[i] > 0
то сумма := сумма + A[i]
все
кц
вывод "Сумма положительных элементов: ", сумма, нс
кон
Пример работы программы
При запуске программа может выдать такой результат (значения будут меняться из‑за случайности заполнения):
Массив:
-3 5 0 -7 8 2 -1 4
Сумма положительных элементов: 19
Разбор примера:
- Положительные элементы: 5, 8, 2, 4.
- Их сумма: .
Пояснения к ключевым моментам
- Заполнение случайными числами (
int(rnd(21)) − 10):rnd(21)генерирует число от 0 до 20 (не включая 21);int()округляет до целого (в «КуМире» это необходимо для целочисленных массивов);- вычитание 10 сдвигает диапазон: 0 → −10, 20 → 10.
- Цикл с условием (
если A[i] > 0):- проверяет каждый элемент на положительность;
- только положительные элементы добавляются к сумме.
- Вывод (
вывод ... нс):нсозначает «новая строка» — используется для форматирования вывода.
Задание 2. Найдите сумму отрицательный значений.