Giter Club home page Giter Club logo

hs2-lab's Introduction

hs2-lab

#Лабораторная работа №2# ##Решение рекурсивных задач в функциональном стиле##

Цель работы: Знакомство с представлением рекурсивных структур данных в функциональных языках на примере списков

Задание: Дан поток студентов. Он представлен в виде списка, состоящего из элементов типа student. Полями этого типа являются:

  • name — имя студента
  • surname — его фамилия
  • sex — пол
  • day, month, year — дата его рождения
  • group — номер группы
  • iq — коэффициент IQ

Также есть другие три списка. Они состоят из фамилий и имён студентов, посещающих занятия по французскому, дискретной математике и программированию соответственно. Фамилия и имя объединены в пару. Т.е. список выглядит так: [("Алексей", "Гронский"), ("Мария", "Иванова")]. Тип и списки оформлены в виде модуля и находится в файле Students.hs. Ваша программа, использующая этот модуль может выглядеть как-то так:

import Students
main = do
putStrLn "Список имён студентов:"
mapM_ putStrLn $ map (\(pos, st) -> show pos ++ "). " ++ name st) $ zip [1..] students

##Варианты заданий:##

  1. Составить список списков из студентов одинакового возраста (можно рассматривать год рождения), отсортированный по количеству людей. Пример: [["Новиков", "Шишкова", "Ширанков"], ["Петров", "Васечкин"], ["Дементьева"], ["Сидоров"]]
    • Распределить студентов по 4 равным группам так, чтобы средний показатель IQ (сумма IQ каждого студента в группе) для групп был примерно одинаковым;
  2. Распределить студентов по 6 равным группам по показателю IQ (в первой группе участники с наименьшим IQ, в последней — с наибольшим);
  3. Составить список студентов, посещающих занятия и по дискретной математике, и по французскому языку;
  4. Узнать, какие студенты посещают все три представленных предмета;
  5. Отсортировать список студентов по фамилии;
  6. В отсортированный по фамилии список добавить нового студента: {name="Василий", surname="Пупкин", sex='м', day=19, month=2, year=1991, group=313, iq=120};
  7. Удалить из списка всех студентов с фамилиями, начинающимися на букву «А»;
  8. Вычислить, какой предмет посещает больше всего студентов;
  9. Узнать, какое имя самое популярное (встречается больше всего раз);
  10. Вычислить средний возраст студентов;
  11. Узнать для каждой группы, кого в ней больше: мальчиков или девочек;
  12. Составить список студентов, посещающих занятия по программированию, но не посещающих занятия по дискретной математике;
  13. Отсортировать список студентов по интеллекту;
  14. Вывести отсортированный по группе список всех девочек, состоящий только из имени, фамилии и номера группы;
  15. «Записать» всех посещающих французский язык на программирование (каждый студент в списке посещающих программирование может быть записан только один раз);
  16. Для всех студентов, посещающих дискретную математику: если он записан на программирование, сделать так, чтобы на программирование он записан не был, и наоборот (если не записан, то записать);
  17. Узнать, есть ли на потоке студенты, празднующие день рождения в один день. И, если таковые имеются, вывести их фамилии;
  18. Увеличить у всех студентов номер группы на единицу в разряде сотен. (Пример: 331 → 431);
  19. Узнать, в каком диапазоне лежит iq студентов, какой коэффициент встречается чаще других, а также найти математическое ожидание этого распределения;
  20. Узнать, на какой месяц выпадает больше всего дней рождений;
  21. Создать для студентов, посещающих только один курс, новый курс «Философия»
  22. Добавить в список, представляющий курс дискретной математики, для каждого студента информацию о его возрасте;
  23. Разделить студентов по 4 спискам согласно номерам их групп;
  24. Узнать, сколько студентов в каждой группе ;
  25. Создать новый тип, в который бы входили поля: имя, фамилия, инициалы, группа; и создать новый список из объектов этого типа на основе существующего списка students;
  26. Найти не посещающих ни один курс студентов;
  27. Найти студентов, посещающих ровно два курса;
  28. Создать новый тип «Курс». Создать три объекта этого типа для курсов французского, дискретной математики и программирования на основе соответствующих списков;
  29. Отсортировать список студентов сначала по фамилии, а затем по группе.

###NB! Задания присылать как pull request'ы поддиректории с вашей программой.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.