Задание 1. Использование методов, принимающих блок как аргумент
Решить предложенные задачи по вариантам. Каждую задачу вынести в отдельную программу. Каждая задача должна быть отдельным методом без использования циклов и рекурсии. Реализовать выбор пользователем, какую задачу решать: ввод данных с клавиатуры или из файла. Каждый метод — отдельный коммит. Итоговая задача — отдельный коммит.
Варианты заданий:
Вариант 1: Задачи 1, 13, 25, 37, 49
Вариант 2: Задачи 2, 14, 26, 38, 50
Вариант 3: Задачи 3, 15, 27, 39, 51
Вариант 4: Задачи 4, 16, 28, 40, 52
Вариант 5: Задачи 5, 17, 29, 41, 53
Вариант 6: Задачи 6, 18, 30, 42, 54
Вариант 7: Задачи 7, 19, 31, 43, 55
Вариант 8: Задачи 8, 20, 32, 44, 56
Вариант 9: Задачи 9, 21, 33, 45, 57
Вариант 10: Задачи 10, 22, 34, 46, 58
Вариант 11: Задачи 11, 23, 35, 47, 59
Вариант 12: Задачи 12, 24, 36, 48, 60
Примеры задач:
Дан целочисленный массив. Найти количество элементов, расположенных после последнего максимального.
Дан целочисленный массив. Найти индекс минимального элемента.
Дан целочисленный массив и натуральный индекс. Определить, является ли элемент по указанному индексу глобальным максимумом.
Дан целочисленный массив. Вывести индексы массива в порядке убывания элементов.
Дан целочисленный массив и натуральный индекс. Определить, является ли элемент по указанному индексу глобальным минимумом.
Дан целочисленный массив. Циклический сдвиг элементов влево на три позиции.
Дан целочисленный массив. Циклический сдвиг элементов вправо на две позиции.
Найти индексы двух наименьших элементов массива.
Найти элементы, расположенные перед последним минимальным.
Даны два массива. Найти количество совпадающих элементов.
Дан массив, где один элемент отличается от остальных. Найти этот элемент.
Переставить в обратном порядке элементы между минимальным и максимальным.
Разместить элементы до минимального в конце массива.
Найти количество элементов в заданном интервале.
Определить, является ли элемент локальным минимумом.
Найти элементы между первым и вторым максимальным.
Поменять местами минимальный и максимальный элементы.
Найти элементы перед первым минимальным.
Циклический сдвиг элементов вправо на одну позицию.
Найти все пропущенные числа.
Найти элементы после первого максимального.
Найти количество минимальных элементов в заданном интервале.
Найти два наименьших элемента.
Найти два наибольших элемента.
Найти максимальный элемент в интервале.
Найти количество элементов между первым и последним минимальным.
Циклический сдвиг влево на одну позицию.
Найти элементы между первым и последним максимальным.
Проверить наличие максимального элемента в интервале.
Определить, является ли элемент локальным максимумом.
Найти количество чётных элементов.
Найти количество локальных максимумов.
Проверить, чередуются ли положительные и отрицательные числа.
Найти элементы, принадлежащие заданному отрезку.
Найти элемент массива, который ближе всего к данному числу.
Найти максимальный нечётный элемент.
Вывести индексы элементов, которые меньше своего левого соседа.
Найти количество элементов в заданном отрезке.
Вывести сначала элементы с чётными индексами, затем — с нечётными.
Найти минимальный чётный элемент.
Найти среднее арифметическое модулей элементов.
Найти все элементы, которые меньше среднего арифметического.
Найти количество минимальных элементов.
Проверить, чередуются ли целые и вещественные числа.
Найти сумму элементов, значение которых попадает в заданный интервал.
Вывести сначала положительные элементы, затем — отрицательные.
Построить список всех положительных делителей элементов списка.
Построить список с номерами элемента, который повторяется чаще всего.
Построить список положительных простых делителей элементов списка.
Построить список из элементов, встречающихся только в одном из двух списков.
Построить два списка: уникальные элементы и количество повторений.
Найти все простые делители числа.
Построить новый список из элементов, больших среднего арифметического.
Построить список из элементов, встречающихся более трёх раз.
Построить новый список, упорядочив элементы по частоте их встречаемости.
Найти среднее арифметическое непростых элементов, больших среднего арифметического простых.
Найти количество элементов, больших, чем сумма всех предыдущих.
Найти количество элементов, которые могут быть получены как сумма двух других элементов.
Построить список из квадратов неотрицательных чисел, меньших 100.
Построить массив из элементов, делящихся на свой номер и встречающихся 1 раз.
Вопросы
Описать принцип работы метода, принимающего блок как параметр. Привести примеры.
Описать принцип работы аккумуляторных методов.
Опишите, как связаны методы с функциональным интерфейсом в Ruby и на каком методе построены.
Задание 2. Написание методов, принимающих блок как аргумент
Задачи:
Написать класс обработки массива. Класс должен принимать массив в конструкторе и не изменять его, но иметь возможность получить элементы массива.
Реализовать с помощью цикла свои версии методов, принимающих блок, указанных в варианте.
Написать тесты на класс.
Варианты методов:
Вариант 1: Методы 1, 13, 25, 36, 24, 12
Вариант 2: Методы 2, 14, 26, 35, 23, 11
Вариант 3: Методы 3, 15, 27, 34, 22, 10
Вариант 4: Методы 4, 16, 28, 33, 21, 9
Вариант 5: Методы 5, 17, 29, 32, 20, 8
Вариант 6: Методы 6, 18, 30, 31, 19, 7
Вариант 7: Методы 7, 19, 31, 30, 18, 6
Вариант 8: Методы 8, 20, 32, 29, 17, 5
Вариант 9: Методы 9, 21, 33, 28, 16, 4
Вариант 10: Методы 10, 22, 34, 27, 15, 3
Вариант 11: Методы 11, 23, 35, 26, 14, 2
Вариант 12: Методы 12, 24, 36, 25, 13, 1
Список методов:
any?
all?
count
chunk
cycle
detect
drop_while
each_slice
filter
filter_map
find
find_all
find_index
flat_map
group_by
include?
inject
map
max
max_by
member?
min
min_by
min_max
none?
one?
partition
reduce
reject
# Задание 1. Использование методов, принимающих блок как аргумент
Решить предложенные задачи по вариантам. Каждую задачу вынести в отдельную программу. Каждая задача должна быть отдельным методом **без использования циклов и рекурсии**. Реализовать выбор пользователем, какую задачу решать: ввод данных с клавиатуры или из файла. Каждый метод — отдельный коммит. Итоговая задача — отдельный коммит.
### Варианты заданий:
- **Вариант 1:** Задачи 1, 13, 25, 37, 49
- **Вариант 2:** Задачи 2, 14, 26, 38, 50
- **Вариант 3:** Задачи 3, 15, 27, 39, 51
- **Вариант 4:** Задачи 4, 16, 28, 40, 52
- **Вариант 5:** Задачи 5, 17, 29, 41, 53
- **Вариант 6:** Задачи 6, 18, 30, 42, 54
- **Вариант 7:** Задачи 7, 19, 31, 43, 55
- **Вариант 8:** Задачи 8, 20, 32, 44, 56
- **Вариант 9:** Задачи 9, 21, 33, 45, 57
- **Вариант 10:** Задачи 10, 22, 34, 46, 58
- **Вариант 11:** Задачи 11, 23, 35, 47, 59
- **Вариант 12:** Задачи 12, 24, 36, 48, 60
### Примеры задач:
1. Дан целочисленный массив. Найти количество элементов, расположенных после последнего максимального.
2. Дан целочисленный массив. Найти индекс минимального элемента.
3. Дан целочисленный массив и натуральный индекс. Определить, является ли элемент по указанному индексу глобальным максимумом.
4. Дан целочисленный массив. Вывести индексы массива в порядке убывания элементов.
5. Дан целочисленный массив и натуральный индекс. Определить, является ли элемент по указанному индексу глобальным минимумом.
6. Дан целочисленный массив. Циклический сдвиг элементов влево на три позиции.
7. Дан целочисленный массив. Циклический сдвиг элементов вправо на две позиции.
8. Найти индексы двух наименьших элементов массива.
9. Найти элементы, расположенные перед последним минимальным.
10. Даны два массива. Найти количество совпадающих элементов.
11. Дан массив, где один элемент отличается от остальных. Найти этот элемент.
12. Переставить в обратном порядке элементы между минимальным и максимальным.
13. Разместить элементы до минимального в конце массива.
14. Найти количество элементов в заданном интервале.
15. Определить, является ли элемент локальным минимумом.
16. Найти элементы между первым и вторым максимальным.
17. Поменять местами минимальный и максимальный элементы.
18. Найти элементы перед первым минимальным.
19. Циклический сдвиг элементов вправо на одну позицию.
20. Найти все пропущенные числа.
21. Найти элементы после первого максимального.
22. Найти количество минимальных элементов в заданном интервале.
23. Найти два наименьших элемента.
24. Найти два наибольших элемента.
25. Найти максимальный элемент в интервале.
26. Найти количество элементов между первым и последним минимальным.
27. Циклический сдвиг влево на одну позицию.
28. Найти элементы между первым и последним максимальным.
29. Проверить наличие максимального элемента в интервале.
30. Определить, является ли элемент локальным максимумом.
31. Найти количество чётных элементов.
32. Найти количество локальных максимумов.
33. Проверить, чередуются ли положительные и отрицательные числа.
34. Найти элементы, принадлежащие заданному отрезку.
35. Найти элемент массива, который ближе всего к данному числу.
36. Найти максимальный нечётный элемент.
37. Вывести индексы элементов, которые меньше своего левого соседа.
38. Найти количество элементов в заданном отрезке.
39. Вывести сначала элементы с чётными индексами, затем — с нечётными.
40. Найти минимальный чётный элемент.
41. Найти среднее арифметическое модулей элементов.
42. Найти все элементы, которые меньше среднего арифметического.
43. Найти количество минимальных элементов.
44. Проверить, чередуются ли целые и вещественные числа.
45. Найти сумму элементов, значение которых попадает в заданный интервал.
46. Вывести сначала положительные элементы, затем — отрицательные.
47. Построить список всех положительных делителей элементов списка.
48. Построить список с номерами элемента, который повторяется чаще всего.
49. Построить список положительных простых делителей элементов списка.
50. Построить список из элементов, встречающихся только в одном из двух списков.
51. Построить два списка: уникальные элементы и количество повторений.
52. Найти все простые делители числа.
53. Построить новый список из элементов, больших среднего арифметического.
54. Построить список из элементов, встречающихся более трёх раз.
55. Построить новый список, упорядочив элементы по частоте их встречаемости.
56. Найти среднее арифметическое непростых элементов, больших среднего арифметического простых.
57. Найти количество элементов, больших, чем сумма всех предыдущих.
58. Найти количество элементов, которые могут быть получены как сумма двух других элементов.
59. Построить список из квадратов неотрицательных чисел, меньших 100.
60. Построить массив из элементов, делящихся на свой номер и встречающихся 1 раз.
## Вопросы
1. Описать принцип работы метода, принимающего блок как параметр. Привести примеры.
2. Описать принцип работы аккумуляторных методов.
3. Опишите, как связаны методы с функциональным интерфейсом в Ruby и на каком методе построены.
# Задание 2. Написание методов, принимающих блок как аргумент
### Задачи:
- Написать класс обработки массива. Класс должен принимать массив в конструкторе и не изменять его, но иметь возможность получить элементы массива.
- Реализовать с помощью цикла свои версии методов, принимающих блок, указанных в варианте.
- Написать тесты на класс.
### Варианты методов:
- **Вариант 1:** Методы 1, 13, 25, 36, 24, 12
- **Вариант 2:** Методы 2, 14, 26, 35, 23, 11
- **Вариант 3:** Методы 3, 15, 27, 34, 22, 10
- **Вариант 4:** Методы 4, 16, 28, 33, 21, 9
- **Вариант 5:** Методы 5, 17, 29, 32, 20, 8
- **Вариант 6:** Методы 6, 18, 30, 31, 19, 7
- **Вариант 7:** Методы 7, 19, 31, 30, 18, 6
- **Вариант 8:** Методы 8, 20, 32, 29, 17, 5
- **Вариант 9:** Методы 9, 21, 33, 28, 16, 4
- **Вариант 10:** Методы 10, 22, 34, 27, 15, 3
- **Вариант 11:** Методы 11, 23, 35, 26, 14, 2
- **Вариант 12:** Методы 12, 24, 36, 25, 13, 1
### Список методов:
1. `any?`
2. `all?`
3. `count`
4. `chunk`
5. `cycle`
6. `detect`
7. `drop_while`
8. `each_slice`
9. `filter`
10. `filter_map`
11. `find`
12. `find_all`
13. `find_index`
14. `flat_map`
15. `group_by`
16. `include?`
17. `inject`
18. `map`
19. `max`
20. `max_by`
21. `member?`
22. `min`
23. `min_by`
24. `min_max`
25. `none?`
26. `one?`
27. `partition`
28. `reduce`
29. `reject`
Изучить следующие документации:
https://docs.ruby-lang.org/en/master/syntax/methods_rdoc.html
https://dev.to/ridhwana/destructuring-in-ruby-53j0?ysclid=m582ykgrc120145492
mainto lab3 4 months agoЗадание 1. Использование методов, принимающих блок как аргумент
Решить предложенные задачи по вариантам. Каждую задачу вынести в отдельную программу. Каждая задача должна быть отдельным методом без использования циклов и рекурсии. Реализовать выбор пользователем, какую задачу решать: ввод данных с клавиатуры или из файла. Каждый метод — отдельный коммит. Итоговая задача — отдельный коммит.
Варианты заданий:
Примеры задач:
Вопросы
Задание 2. Написание методов, принимающих блок как аргумент
Задачи:
Варианты методов:
Список методов:
any?
all?
count
chunk
cycle
detect
drop_while
each_slice
filter
filter_map
find
find_all
find_index
flat_map
group_by
include?
inject
map
max
max_by
member?
min
min_by
min_max
none?
one?
partition
reduce
reject
Задание 1 выполнено @darius-atlas
Задание 2 выполнено
Изучить следующие документации:
https://docs.ruby-lang.org/en/master/syntax/methods_rdoc.html
https://dev.to/ridhwana/destructuring-in-ruby-53j0?ysclid=m582ykgrc120145492