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

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

Функции #

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

Видео-запись: 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. С использованием цикла for.
  2. С использованием функции forEach.
  3. С использованием функции filter, 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. Во всех ли строках встречается 2 гласные буквы?
  4. Отсутствуют ли в строках русские буквы?

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

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

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

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

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

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

Реализуйте функцию для вычисления периметра прямоугольника в метрах. Данная функция должна принимать в качестве аргументов значение ширины, высоты и коэффициент по преобразованию первых аргументов в метры. По умолчанию последний аргумент должен быть равен единице.

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

  • Ширина: 1.5м, длина: 2м.
  • Ширина: 60дм, длина: 5дм.
  • Ширина: 7 дюймов, длина: 15 дюймов.

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

Задание № 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.
    • Содержит неизменяемую строку hiddenInfo
    • Содержит изменяемое вещественное число some.
    • Содержит функцию actionOne().
  • Файл ru/yarsu/internal/Two.kt
    • Входит в пакет ru.yarsu.internal.
    • Содержит приватную изменяемую строку log.
    • Содержит приватную неизменяемую целочисленную переменную FINGERS_NUMBER.
    • Содержит приватную функцию clear(), записывающую пустую строку в переменную logs.
    • Содержит функцию actionTwo().

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

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

Сделайте выводы относительно доступности соответствующих модификаторов доступа.

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