Практикум на ЭВМ (171 группа, второй семестр)
Задания
ДЗ 1. Реализовать на языке F# следующие функции:
- sum - сумма элементов списка
- append - конкатенация двух списков
- addToEnd - добавление элемента в конец списка
- filter - функция принимает условие и список и возвращает список элементов удовлетворяющих условию
- genSqr - по целому числу n вернуть список k2 не превосходящих n
ДЗ 2. (класс)
- Найти наибольший простой делитель числа 600851475143.
- Посчитать сумму чётных чисел Фибоначчи не превосходящих 4000000
- Сумма цифр числа 100!
- Посчитать количество путей на целочисленной решетке из точки (0,0) в (20,20) при допустимых ходы вправо и вниз на 1 шаг.
- Пусть дано значение типа:
- type Expr = Const of int // целое число
- | Var of string // идентификатор (переменная
- | Add of Expr * Expr
- | Sub of Expr * Expr
- | Mul of Expr * Expr
- | Div of Expr * Expr
- Задание: упростить арифметическое выражения, записанное в виде значения типа Expr, проведя следующие преобразования:
- посчитать все операции над двумя числами
- <выражение> + 0 = 0 + <выражение> = <выражение>
- <выражение> * 0 = 0 * <выражение> = 0
- <выражение> * 1 = 1 * <выражение> = <выражение>
- <выражение> / 1 = <выражение>
- <переменная> - <переменная> = 0
Например: (Mul (Add (Var "x") (Const 0)) (Const 1)) => Var "x"
Множества точек.
Пусть множество точек задано типом:
type Geom = NoPoint // пустое множество
| Point of float * float // точка
| Line of float * float // уравнение прямой y = a*x+b
| VerticalLine of float // вертикальная прямая проходящая через x
| LineSegment of (float * float) * (float * float) // отрезок
| Intersect of Geom * Geom // пересечение двух множеств
Написать функцию, считающую все пересечения в выражении.
ДЗ 3.
- реализовать функцию map в CPS (continuation passing style) виде
- map : ('a -> 'b) -> 'a list -> 'b list
- map'cps : ('a -> ('b-> 'c) -> 'c) -> 'a list -> ('b list -> 'd) -> 'd
- Пример печати дерева в CPS виде http://pastebin.com/AcdEx6vC
- Пример использования: map'cps printTree'cps [Empty, Node (Empty, 1, Empty), Node (Empty, 2, Empty) ] (printfn "%A")
ДЗ 4
WebCrawler'cps
Написать функцию, которая делает следующее:
По списку URL'ов, по указанным страницам выбрать те, на которых более 5 картинок (Определяется по HTML тэгу '<img src="...">'), и "вернуть" список всех уникальных URL'ов картинок из оставшихся страниц.
При реализации для скачивания страниц воспользоваться функцией getUrl из модуля WebR.fs
Чат с ботом
Реализовать чат с роботом в виде WinForms приложения.
Робот должен уметь поддерживать сколько-то осмысленную беседу с пользователем.
ДЗ 5 ООП Мир
Описать в ОО парадигме на языке F# какой-либо "мир": взамодействующие типы (объекты, классы) со смысловой нагрузкой.
Использовать объектное наследование: минимум три своих класса "в глубину" и минимум три - "в ширину"
(Например, в глубину: Эукариоты -> Животные -> Хордовые )
ДЗ 6 Dictionary
Реализовать словарь со следующим интерфейсом: http://pastebin.com/jsR7xzH3