Программирование

244 группа

Тимофей Брыксин

Студент TODO №1 №2 №3 №4 №5 Тест 1 №6 №7 №8 №9 Тест 2
39 1 2 1 2 3 1 2 1 2 1 2 3 1 1 2 1 2 1 2 1
Дегтярев Иван 9
Дементьев Александр 17
Зайцев Дмитрий 1
Кидянкин Михаил
Кузьмин Юрий
Полетанский Виктор
Савельев Александр
Ходько Андрей 9
Шервашидзе Георгий 3

Задачи

Тест 2. 22.05.18
  1. Зачёт

    Реализовать разреженный вектор с методами сложения, вычитания, скалярного умножения и проверки на нулевой вектор. Разреженным называется вектор, который может быть очень большим, но подавляющее большинство его элементов —- нули (и за счёт этого его можно эффективно хранить в памяти). В классе должен быть реализован метод Clone, создающий глубокую копию объекта.

Домашняя работа 9. 09.05.18
Сети и сетевое программирование
Java NIO
  1. Доработать игру в крестики-нолики из ДЗ №6 так, чтобы в неё можно было играть по сети.

Домашняя работа 8. 28.04.18
Работа с потоками
  1. Реализовать многопоточный вариант быстрой сортировки, для решения использовать пул потоков или Fork/Join. Замерить время выполнения и сравнить с однопоточным вариантом.

  2. Реализовать следующий интерфейс, представляющий ленивое вычисление:

    public interface Lazy<T> {
      T get();
    }
    

    Объект Lazy создаётся на основе вычисления (представляемого объектом библиотечного класса Supplier). Первый вызов get() у объекта Lazy вызывает вычисление и возвращает результат. Повторные вызовы get() возвращают тот же объект, что и первый вызов. Вычисление get() у Supplier'a должно запускаться не более одного раза.

    Создавать объекты надо не вручную, а с помощью класса LazyFactory, который должен иметь два метода с сигнатурами вида public static <T> Lazy<T> create...Lazy(Supplier<T>), возвращающих две разные реализации Lazy<T>:
    - Простая версия с гарантией корректной работы в однопоточном режиме (без синхронизации)
    - Гарантия корректной работы в многопоточном режиме; вычисление не должно производиться более одного раза

    Ограничения на реализацию:
    - Ограничение по памяти на каждый Lazy-объект: не больше двух полей.
    - Supplier.get() вправе вернуть null.
    - Однопоточные тесты, на разные хорошие и плохие случаи
    - Многопоточные тесты, в том числе на наличие гонок

Домашняя работа 7. 07.04.18
Презентация про Reflection
  1. По заданному классу, используя механизм рефлексии Java, вывести в консоль текстовое описание этого класса, максимально приближенное к его исходному коду. Класс в программу должен загружаться в бинарном виде с помощью ClassLoader'а.

  2. Реализовать бор (http://neerc.ifmo.ru/wiki/index.php?title=%D0%91%D0%BE%D1%80)
    Должны быть поддержаны следующие методы:

    • boolean add(String element); (возвращает true, если такой строки ещё не было, работает за O(|element|))
    • boolean contains(String element); (работает за O(|element|))
    • boolean remove(String element); (возвращает true, если элемент реально был в дереве, работает за O(|element|))
    • int size(); (работает за O(1))
    • int howManyStartWithPrefix(String prefix); (работает за O(|prefix|))

    Также бор должен реализовывать интерфейс с методами:

    • void serialize(OutputStream out) throws IOException;
    • void deserialize(InputStream in) throws IOException; (заменяет старое дерево данными из стрима)
Домашняя работа 6. 27.03.18
Stream API (1)
Stream API (2)
Java 8
  1. Реализовать с помощью Java Stream API:
    - Методы в FirstPartTasks и SecondPartTasks
    - Тесты в SecondPartTasksTest
    Тесты в FirstPartTasksTest и SecondPartTasksTest должны успешно завершаться

  2. Разработать приложение, позволяющие пользователю играть с самим собой в крестики-нолики. На экранной форме должно быть 9 кнопок, расположенных в три столбца и три строки. При первоначальном нажатии на любую из кнопок на ней появляется знак «Х». При дальнейшем нажатии на другую кнопку, на ней появляется знак «O». Повторное нажатие на кнопку не должно менять ее знака.

Тест 1. 20.03.18
  1. Реализовать алгоритм сжатия/разжатия, работающий по следующему принципу: есть массив байт, при сжатии последовательность повторяющихся байтов заменяется на два байта - число повторений, повторяющийся байт. При разжатии - наоборот.

Домашняя работа 5. 13.03.18
Отладка (презентация)
Отладка (конспект)
JavaFX
  1. Создать графическое приложение с двумя виджетами — слайдером и прогрессбаром. Сделать так, чтобы при передвижении слайдера значение прогрессбара изменялось соответствующе.

  2. Релизовать программу-калькулятор со следующим графическим интерфейсом:

    картинка.

    При изменении значения аргумента или операции результат пересчитывается автоматически.

  3. Реализовать продвинутый кнопочный калькулятор по аналогии со стандартными калькулятором Windows или KCalc. Как минимум должны присутствовать 10 кнопок цифр и 4 кнопки операции.

Домашняя работа 4. 06.03.18
Контейнеры и генерики (презентация)
Контейнеры и генерики (конспект)
  1. Переделать один из реализованных в прошлой домашней работе список в виде generic'а. На основе него реализовать класс UniqueList, который не содержит повторяющихся значений. Реализовать классы исключений, которые генерируются при попытке добавления в такой список уже существующего или при попытке удаления несуществующего элемента.

  2. Реализовать AVL дерево, реализующее интерфейс Collection.

Домашняя работа 3. 27.02.18
SOLID (презентация)
SOLID (конспект)
Исключения и обработка ошибок (презентация)
Исключения и обработка ошибок (конспект)
  1. Реализовать класс для работы с хеш-таблицей (на списках). Общение с пользователем должно происходит в интерактивном режиме: добавить значение в хеш-таблицу, удалить значение из хеш-таблицы, поиск значения в хеш-таблице, показать статистику по хеш-таблице (общее число ячеек, load factor, число конфликтов, максимальная длина списка в конфликтных ячейках и т.п.), заполнить хеш-таблицу содержимым файла, выбрать хеш-функцию для подсчета хеша (из заранее заданных в коде). Смена хэш-функции должна происходить во время работы программы, в класс используемая хеш-функция должна передаваться из клиентского кода.

  2. Разработать и реализовать иерархию классов, описывающих дерево разбора арифметического выражения. Используя их, реализовать класс, вычисляющий значение выражения по дереву. Классы, представляющие операнды и операторы, должны сами уметь себя вычислять и печатать. Дерево разбора хранится в файле в виде (<операция> <операнд1> <операнд2>), где <операнд1> и <операнд2> сами могут быть деревьями, либо числами. Например, выражение (1 + 1) * 2 представляется в виде (* (+ 1 1) 2). Должны поддерживаться операции {+, -, *, /} и целые числа в качестве аргументов. Требуется построить дерево в явном виде, распечатать его (не обязательно так же, как во входном файле) и посчитать значение выражения обходом дерева. Можно считать, что входной файл корректен. Пример — по входному файлу (* (+ 1 1) 2) может печататься ( * ( + 1 1 ) 2 ) и выводиться 4.

Домашняя работа 2. 20.02.18
Наследование и полиморфизм, презентация
Наследование и полиморфизм, конспект
Юнит-тестирование и системы сборки, презентация
Юнит-тестирование и системы сборки, конспект
  1. Создать интерфейс сортировщика, принимающего массив элементов и выполняющего над ним сортировку. На его основе создать несколько классов, реализующих произвольные (разные) алгоритмы сортировки.

  2. Дан массив размерностью N x N, N - нечетное число. Вывести элементы массива при обходе его по спирали, начиная с центра. Для решения задачи разработать интерфейс Выводилка с методом вывести(), реализовать на его основе два класса, осуществляющих либо вывод на консоль либо в файл. Написать программу, которая по желанию пользователя выбирает реализацию Выводилки и выводит массив.

  3. Разработать интерфейс, представляющий структуру данных "стек". На его основе реализовать стек двумя разными способами. С его помощью реализовать стековый калькулятор для подсчета арифметических выражений.

Домашняя работа 1. 14.02.18
Основы ООП и Java
http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html
  1. Создать класс, реализующий функциональность стека.

  2. Создать класс, реализующий функциональность односвязного линейного списка.

© 2014-2018 HwProj