Функции и пакеты

Функции и пакеты #

Функции #

Презентацию по теме можно посмотреть по ссылке

Видео-запись: Rutube

Пакеты и модификаторы доступа #

Презентацию по теме можно посмотреть по ссылке

Видео-запись: Rutube

Документация по теме #

Задание № 1: фильтрация коллекции #

Входные данные: список целых чисел. Список задайте прямо в исходном коде, без считывания из внешних источников.

val numbers = listOf(1, 55, 25, 32, 2, 67, 31, 33, 11, 25, 66, 81, 97, 43, 46, 81)
  1. Найти нечётные числа данной последовательности.
  2. Найти числа, которые не делятся без остатка на 3.
  3. Найти числа, которые без остатка делятся на свой порядковый номер (нумерация начинается с 1; при нумерации с нуля первый элемент нужно пропустить, чтобы не делить на 0).

Поставленные задачи необходимо решить следующими способами:

  1. С использованием цикла for.
  2. С использованием функции forEach с ручным счётчиком номера элемента.
  3. С использованием функции filter.
  4. С использованием функции forEachIndexed.
  5. С использованием функции filterIndexed.

Задание № 2: преобразование коллекции #

Входные данные: последовательности ширин и высот прямоугольника.

val widths = listOf(
    12,
    4,
    5,
    7,
    45,
    10,
    3,
)
val heights = listOf(
    1,
    6,
    15,
    32,
    32,
    12,
    9,
    10,
)

Для данных последовательностей ширин и высот вычислите:

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

Поставленные задачи необходимо решить следующими способами:

  1. С использованием цикла for.
  2. С использованием функции forEach.
  3. С использованием функции forEachIndexed.
  4. С использованием функции map.
  5. С использованием функции mapIndexed.
  6. С использованием итератора iterator.
  7. С использованием функции zip

Задание № 3: вычисление статистических данных о коллекции #

Входные данные: список строк.

val strings = listOf(
    "Apple",
    "Orange",
    "Peach",
    "Banana",
    "Tangerine",
    "Grapefruit",
    "Kiwi",
)

Для данной последовательности строк вычислите:

  1. Начинаются ли все строки с заглавной буквы?
  2. Есть ли среди строк строка длины 5?
  3. Во всех ли строках ровно две гласные буквы?
  4. Отсутствуют ли в строках русские буквы?

Поставленные задачи необходимо решить следующими способами:

  1. С использованием цикла for.
  2. С использованием функции forEach.
  3. С использованием функции all.
  4. С использованием функции any.
  5. С использованием функции none.

Задание № 4: разные задачи на коллекции #

Решите следующие задачи. Входные данные для данных задач можно формировать прямо в исходном коде, без получения от пользователя.

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

Задание № 5: Использование значений аргументов по умолчанию #

Реализуйте функцию для вычисления периметра прямоугольника в метрах. Функция принимает ширину, высоту и коэффициент k пересчёта размеров в метры. Результат равен 2 * (ширина + высота) * k. По умолчанию k = 1 (размеры уже заданы в метрах).

Вызовите функцию для следующих прямоугольников, указав как можно меньше аргументов.

  • Ширина 1.5 м, высота 2 м.
  • Ширина 60 дм, высота 5 дм (k = 0.1).
  • Ширина 7 дюймов, высота 15 дюймов (k = 0.0254).

Расположите аргумент коэффициента первым. Как изменились вызовы данной функции?

Задание № 6: Видимость функций и переменных #

Создайте в приложении следующие файлы:

  • Файл ru/yarsu/Base.kt:
    • Входит в пакет ru.yarsu.
    • Содержит изменяемую целочисленную переменную counter.
    • Содержит неизменяемую строку greetings.
    • Содержит стартовую функцию main().
  • Файл ru/yarsu/Work.kt
    • Входит в пакет ru.yarsu.
    • Содержит приватную изменяемую целочисленную переменную acres
    • Содержит приватное неизменяемое вещественное число PI
    • Содержит приватную функцию reset(), сбрасывающую значение acres в изначальное, 0.0
    • Содержит функцию actionWork().
  • Файл ru/yarsu/internal/One.kt
    • Входит в пакет ru.yarsu.internal.
    • Для вызова объявлений из этого пакета в Base.kt добавьте import ru.yarsu.internal.*.
    • Содержит неизменяемую строку hiddenInfo
    • Содержит изменяемое вещественное число some.
    • Содержит функцию actionOne().
  • Файл ru/yarsu/internal/Two.kt
    • Входит в пакет ru.yarsu.internal.
    • Содержит приватную изменяемую строку log.
    • Содержит приватную неизменяемую целочисленную переменную FINGERS_NUMBER.
    • Содержит приватную функцию clear(), записывающую пустую строку в переменную log.
    • Содержит функцию actionTwo().

Функция main() поочерёдно вызывает функции actionWork(), actionOne() и actionTwo(). В каждой из последних функций попытайтесь:

  • Вызвать не-action функции.
  • Прочитать значения из неизменяемых переменных во всех файлах.
  • Записать значения в изменяемые переменные во всех файлах.

Часть обращений к приватным объявлениям не скомпилируется — это ожидаемый результат. Каждую такую строку закомментируйте, добавив рядом комментарий с текстом ошибки компилятора, чтобы проект продолжал собираться.

Для каждого объявления зафиксируйте вывод: доступно ли оно из того же файла, из другого файла того же пакета и из другого пакета того же модуля. Дополнительно проверьте доступность объявлений, помеченных internal, из второго Gradle-модуля (создайте его командой gradle init или средствами IDEA). Оформите выводы в виде таблицы в файле conclusions.md в корне проекта.

© A. M. Васильев, 2026, CC BY-SA 4.0, andrey@crafted.su