Практикум на ЭВМ (171 группа, второй семестр)

Новости

Успеваемость

2013-2014.SE.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