Lab 3 #3

Open
opened 4 months ago by darius-atlas · 4 comments
Owner
There is no content yet.
darius-atlas added the enhancement label 4 months ago
darius-atlas self-assigned this 4 months ago
darius-atlas added this to the Ruby course project 4 months ago
darius-atlas changed reference from main to lab3 4 months ago
Poster
Owner

Задание 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
# Задание 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`
Poster
Owner

Задание 1 выполнено @darius-atlas

Задание 1 выполнено @darius-atlas
Poster
Owner

Задание 2 выполнено

Задание 2 выполнено
Poster
Owner
Изучить следующие документации: https://docs.ruby-lang.org/en/master/syntax/methods_rdoc.html https://dev.to/ridhwana/destructuring-in-ruby-53j0?ysclid=m582ykgrc120145492
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date

No due date set.

Dependencies

No dependencies set.

Reference: darius-atlas/kubsu-sm5-ruby#3
Loading…
There is no content yet.