Skip to content

AnzhelikaKravchuk/.NET-Training.-Autumn-2019

Repository files navigation

.NET-Training.-Autumn-2019

Репозиторий внешнего тренинга "ASP.NET MVC Web Applications. Q3 2019"

Продолжительность тренинга 16.09.2019 - 30.11.2019



Место проведения занятий - Купревича 1-5, комната 224.

  • Понедельник 8.30 - 12.30
  • Вторник 8.30 - 12.30
  • Четверг 8.30 - 12.30
  • Пятница (возможен, вебинар) 8.30 - 12.30

Дополнительная информация

EPAM RD Training "DEVELOPING ASP.NET MVC WEB APPLICATIONS" Repository (C# and .NET Framework Basics part) by .NET Lab.

TODO

  • Выслать на электронный адрес anzhelika.kravchuk@gmail.com письмо с указанием своего gmail-acc (названного по шаблону firstname.lastname@gmail.com (в случае существования "адекватного" аккаунта не обязательно)).
  • Установить IDE Visual Studio Community 2019 (англоязычную версию) или другие IDE.
  • Установить StyleCop.
  • Установить LINQPad.

Требования к выполнению заданий.

  • Задания выполняются самостоятельно.
  • Логика решения задачи помещается в проект типа Class Library в рамках Solution-а, который называется по шаблону NET.Autumn.2019.Lastname.N (где N- номер дня выполняемого задания в формате а-ля 01, 02, … 12).
  • Тестирование решенной задачи выполняется в рамках вышеуказанного Solution-а с использованием консольного приложения или тестовых фреймворков Microsoft Unit Testing Framework или NUnit (оговаривается для каждого задания).
  • Выполненные задания выкладываются на github не позднее указанного срока (обратить внимание на файл .gitignore).
  • На github-e соблюдать определенную структуру (пример).
    • следовать правилам именования в репозитории;
    • обновлять файл readme.md корневой папки репозитория согласно статусу выполненных задач.
  • Обязательным требованием для любой выполняемой задачи является ее соответствие Settings.StyleCop.
  • Обязательным требованием для любой выполняемой задачи является наличие XML-комментариев во всех библиотеках классов в коде.


Up

Task Task Status Additional/Comments
Lections Day 1 Scheduled
Lections Day 2 Scheduled
Lections Day 3 Scheduled
Lections Day 4 Scheduled
Lections Day 5 Scheduled
Lections Day 6 Scheduled
Lections Day 7 Scheduled
Lections Day 8 Scheduled
Lections Day 9 Scheduled
Lections Day 10 Scheduled
Проектирование СУБД. Технострим. Модуль 1 Scheduled
Проектирование СУБД. Технострим. Модуль 2 Scheduled
Проектирование СУБД. Технострим. Модуль 3 Scheduled

Up

Day 1. 16.09.2019

Читать

Презентация

version in progress

Задачи (deadline - 18.09.2019, 24.00)

  • Реализовать методы пузырьковой, быстрой и сортировки слиянием для упорядчивания элементов целочисленного массива по нестрогому возрастанию (методы поместить в статический класс ArrayExtension, тип проекта Class Library).

Одномерный массив считать упорядоченным, если отношение порядка выполняется для элементов, индексы которых удовлетворяют некоторому заданному условию (например, диапазон и шаг изменения, удоблетворение условия кратности заданной цифре и т.п.), а само отношение порядка определяется некоторой функцией-ключем (например, определяющей количество заданного символа в p-ичном (2<=p<=16) представлении числа, модуль числа и т.п.). Для получения p-ичного строкового представления числа готовые классы-конверторы не использовать!

  • Протестировать работу методов с использованием тестового фреймворка NUnit. Для тест-кейсов
    в качестве функции-ключа использовать:
    - модуль целочисленного значения элемента массива;
    - количество вхождений заданного символа c в p-ичном представлении элемента массива;
    в качестве условия для индексов использовать:
    - четность;
    - нечетность;
    - кратность заданной цифре d.
  • Рассмотреть вариант тестирования массивов большой размерности, элементы которых сгенерированны случайным образом.

При выполнение задач данного дня и дней до темы "Делегаты" и "LINQ" запрещено использование типа делагат и LINQ-запросов в библиотеках классов.

Task Status

Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here Link to Tests Generator code - cs-file - Optional

Up

Day 2. 17.09.2019

Читать

Полезные ссылки

Дополнительно:

Задачи

1.

(deadline - 20.09.2019, 24.00) Даны два целых знаковых четырехбайтовых числа и две позиции битов i и j (i<=j). Реализовать алгоритм вставки первых (j - i + 1) битов второго числа в первое так, чтобы биты второго числа занимали позиции с бита i по бит j (биты нумеруются справа налево). Решение оформить в виде статического метода InsertNumberIntoAnother статического класса NumbersExtension. Разработать модульные тесты (NUnit и MS Unit Test - (DDT))) для тестирования метода. (Ниже схема-пояснение к алгоритму). Примерные тест-кейсы

    [TestCase(2728, 655, 3, 8, ExpectedResult = 2680)]
    [TestCase(554216104, 15, 0, 31, ExpectedResult = 15)]
    [TestCase(-55465467, 345346, 0, 31, ExpectedResult = 345346)]
    [TestCase(554216104, 4460559, 11, 18, ExpectedResult = 554203816)]
    [TestCase(-1, 0, 31, 31, ExpectedResult = 2147483647)]
    [TestCase(-2147483648, 2147483647, 0, 30, ExpectedResult = -1)]
    [TestCase(-2223, 5440, 18, 23, ExpectedResult = -16517295)]
    [TestCase(2147481425, 5440, 18, 23, ExpectedResult = 2130966353)]
    NumbersExtension.InsertNumberIntoAnother(8, 15, 8, 3) => ArgumentException
    NumbersExtension.InsertNumberIntoAnother(8, 15, -1, 3) => ArgumentOutOfRangeException
    NumbersExtension.InsertNumberIntoAnother(8, 15, 32, 32) => ArgumentOutOfRangeException
    NumbersExtension.InsertNumberIntoAnother(8, 15, 0, 32) => ArgumentOutOfRangeException
    ...

Схема к алгоритму

2.

(deadline - 19.09.2019, 24.00) Реализовать рекурсивный алгоритм поиска максимального элемента в неотсортированном целочисленом массиве. Решение оформить в виде статического метода FindMximumItem статического класса ArrayExtension. Разработать модульные тесты NUnit для тестирования метода. Рассмотреть вариант тестирования массивов большой размерности, элементы которых сгенерированны случайным образом.

3.

(deadline - 21.09.2019, 24.00)) Реализовать алгоритм поиска в целочисленном массиве индекса элемента, для которого сумма элементов слева и сумма элементов справа равны. Решение оформить в виде статического метода FindBalanceIndex статического класса ArrayExtension (п. 2). Если такого элемента не существует вернуть null.

4.

(deadline - 22.09.2019, 24.00)) Реализовать метод, который принимает массив целых чисел и фильтрует его таким образом, чтобы на выходе был получен новый массив, состоящий только из элементов, которые содержат заданную цифру. (LINQ-запросы не использовать!) В случае, если таких элементов нет, вернуть пустой массив. Решение оформить в виде статического метода FilterArrayByKey статического класса ArrayExtension (п. 2). Например, для цифры 7, метод FilterArrayByKey для набора {7,1,2,3,4,5,6,7,68,69,70,15,17} возвращает набор {7,7,70,17}. Разработать модульные тесты NUnit и MS Unit Test для тестирования метода. Примерные тест-кейсы

    [TestCase(new[] { 2212332, 1405644, -1236674 }, 0, ExpectedResult = new[] { 1405644 })]
    [TestCase(new[] { 53, 71, -24, 1001, 32, 1005 }, 2, ExpectedResult = new[] { -24, 32 })]
    [TestCase(new[] { -27, 173, 371132, 7556, 7243, 10017 }, 7, ExpectedResult = new[] { -27, 173, 371132, 7556, 7243, 10017 })]
    [TestCase(new[] { 7, 2, 5, 5, -1, -1, 2 }, 9, ExpectedResult = new int[0])]
    ArrayExtension.FilterArrayByKey(new int[0], 0)) => ArgumentException
    ArrayExtension.FilterArrayByKey(new int[] { 1, 2 }, -1) => ArgumentOutOfRangeException
    ArrayExtension.FilterArrayByKey(null, 0) => ArgumentNullException
    ...

Task Status

Task Solution Status Solution Link MS Test Status MS Test Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Link to .cs-file here Scheduled Link to MS Tests - cs-file here Scheduled Link to NUnit Tests - cs-file here
2 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here
3 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here
4 Scheduled Link to .cs-file here Scheduled Link to MS Tests - cs-file here Scheduled Link to NUnit Tests - cs-file here

Up

Day 3. 19.09.2019

Читать

Материалы

Задачи

  1. (deadline - 24.09.2019, 24.00) Реализовать алгоритм, позволяющий вычислять корень n-ой степени ( n ∈ N ) из вещественного числа а методом Ньютона с заданной точностью. Решение оформить в виде статического метода FindNthRoot статического класса MathExtension.
    • Разработать модульные тесты. Примерные тест кейсы:
      • [TestCase(1, 5, 0.0001,ExpectedResult = 1)]
      • [TestCase(8, 3, 0.0001,ExpectedResult = 2)]
      • [TestCase(0.001, 3, 0.0001,ExpectedResult = 0.1)]
      • [TestCase(0.04100625,4 , 0.0001, ExpectedResult = 0.45)]
      • [TestCase(8, 3, 0.0001, ExpectedResult = 2)]
      • [TestCase(0.0279936, 7, 0.0001, ExpectedResult = 0.6)]
      • [TestCase(0.0081, 4, 0.1, ExpectedResult = 0.3)]
      • [TestCase(-0.008, 3, 0.1, ExpectedResult = -0.2)]
      • [TestCase(0.004241979, 9, 0.00000001, ExpectedResult = 0.545)]
      • [a = -0.01, n = 2, accurancy = 0.0001] <- ArgumentException
      • [a = 0.001, n = -2, accurancy = 0.0001] <- ArgumentException
      • [a = 0.01, n = 2, accurancy = -1] <- ArgumentException
      • ...
  2. (deadline - 25.09.2019, 24.00) Реализовать метод, который для данного положительное целого число находит ближайшее меньшее целое, состоящее из цифр исходного числа, если такое число существует. Решение оформить в виде статического метода FindPreviousLessThan статического класса NumbersExtension Task 1. Разработать модульные тесты для тестирования метода.

Task Status

Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here
2 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here

Up

Day 4. 23.09.2019

Читать

Материалы

Задачи

  1. (deadline - 28.09.2019, 24.00)

    • Проанализировать код, полученный при решении задачи Task 4, на предмет возможности его использования для получения (из исходного) массива, состоящего только из тех элементов исходного, запись которых является полиндромом (симметричным)(например 121, 1345431, 122221 и т.д.). Функцию, определяющую является ли число полиндромом, реализовать как рекурсивную.
    • Добавить, если требуется, недостающую функциональность.
    • Проанализировать полученный код на возможность его использования для получения (из исходного) массива, состоящего только из четных элементов исходного. Добавить, если требуется, недостающую функциональность.
    • Предложить вариант общей формулировки решенных задач.
    • Полученный методы (методы) оформить как метод (методы) расширения для целочисленных массивов.
  2. (deadline - 27.09.2019, 15.00)

    • В статический класс MathExtension (п. 1) добавть FindGcdByEuclidean - методы которого позволяют выполнять вычисления НОД по алгоритму Евклида для двух, трех и т.д. целых чисел (http://en.wikipedia.org/wiki/Euclidean_algorithm , https://habrahabr.ru/post/205106/, https://habrahabr.ru/post/205106/). Добавить методы, которые помимо вычисления НОД, предоставляют дополнительную возможность определения значение времени, необходимое для выполнения расчета. К разработанному классу добавить FindGcdByStein-методы, реализующие алгоритм Стейна (бинарный алгоритм Евклида) для расчета НОД двух, трех и т.д. целых чисел (http://en.wikipedia.org/wiki/Binary_GCD_algorithm, https://habrahabr.ru/post/205106/ ), а также методы, предоставляющие дополнительную возможность определения значение времени, необходимое для выполнения расчета. Рассмотреть различные возможности реализации методов, возвращающих время вычисления НОД. Разработать модульные тесты.

Task Status

Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here
2 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here

Up

Day 5. 24.09.2019

Читать

Материалы

  • Methods in details
    - методы расширения
    - паттерн проектирования Singleton
    - класс Lazy
    - перегрузка операций

Задачи

  1. (deadline - 04.09.2019, 18.09.2019 (version 1.0))
    Разработать систему типов для описания работы с банковским счетом. Состояние счета определяется его номером, данными о владельце счета (имя, фамилия, e-mail), суммой на счете, его текущим состоянием (активен, закрыт, заморожен ...) и некоторыми бонусными баллами, которые увеличиваются каждый раз при пополнении счета/списании со счета на величины различные для пополнения и списания и рассчитываемые в зависимости от некоторых значений величин «стоимости» баланса и «стоимости» пополнения. Величины «стоимости» баланса и «стоимости» пополнения являются целочисленными значениями и зависят от типа счета, который может быть, Base, Silver, Gold. Для работы со счетом реализовать следующие возможности:

    • пополнение на счет;
    • списание со счета (для счетов выше Base, возможен списание в кредит, размер кредита зависит от статуса счета);
    • перевод суммы с одного счета на другой счет;
    • создание нового счета;
    • закрытие счета.

    Работу типов продемонстрировать на примере консольного приложения.

Task Status

Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here

Up

Day 6. 26.09.2019

Читать

Материалы

Полезные ссылки

Задачи

  1. (deadline - 28.09.2019, 24.00) Реализовать экземплярный класс Transformer, экземплярный метод TransformToWords которого выполняет преобразование любого вешественного (System.Double) числа в его "словестный формат". Разработать модульные тесты. Примерные тест-кейсы

    • [TestCase(double.NaN, ExpectedResult = "Not a number")]
    • [TestCase(double.NegativeInfinity, ExpectedResult = "Negative infinity")]
    • [TestCase(double.PositiveInfinity, ExpectedResult = "Positive infinity")]
    • [TestCase(-0.0d, ExpectedResult = "zero")]
    • [TestCase(0.0d, ExpectedResult = "zero")]
    • [TestCase(0.1d, ExpectedResult = "zero point one")]
    • [TestCase(-23.809d, ExpectedResult = "minus two three point eight zero nine")]
    • [TestCase(-0.123456789d, ExpectedResult = "minus zero point one two three four five six seven eight nine")]
    • [TestCase(1.23333e308d, ExpectedResult = "one point two three three three three E plus three zero eight")]
    • [TestCase(double.Epsilon, ExpectedResult = "four point nine four zero six five six four five eight four one two four seven E minus three two four")]
      и т.д. для double.MaxValue, double.MaxValue.

    Проанализировать полученное решение на предмет возможности его использования для получения "словестного формата" на другом (русском, немецком и т.д.) языке

  2. (deadline - 28.09.2019, 24.00) Расширить функциональную возможность типа System.Double, реализовав возможность получения строкового представления вещественного числа в формате IEEE 754. Готовые классы-конверторы не использовать. Разработать модульные тесты. Примерные тест-кейсы (для тестирования специальных значений вещественных чисел возможны варианты).

    • [TestCase(-255.255, ExpectedResult = "1100000001101111111010000010100011110101110000101000111101011100")]
    • [TestCase(255.255, ExpectedResult = "0100000001101111111010000010100011110101110000101000111101011100")]
    • [TestCase(4294967295.0, ExpectedResult = "0100000111101111111111111111111111111111111000000000000000000000")]
    • [TestCase(double.MinValue, ExpectedResult = "1111111111101111111111111111111111111111111111111111111111111111")]
    • [TestCase(double.MaxValue, ExpectedResult = "0111111111101111111111111111111111111111111111111111111111111111")]
    • [TestCase(double.Epsilon, ExpectedResult = "0000000000000000000000000000000000000000000000000000000000000001")]
    • [TestCase(double.NaN, ExpectedResult = "1111111111111000000000000000000000000000000000000000000000000000")]
    • [TestCase(double.NegativeInfinity, ExpectedResult = "1111111111110000000000000000000000000000000000000000000000000000")]
    • [TestCase(double.PositiveInfinity, ExpectedResult = "0111111111110000000000000000000000000000000000000000000000000000")]
    • [TestCase(-0.0, ExpectedResult = "1000000000000000000000000000000000000000000000000000000000000000")]
    • [TestCase(0.0, ExpectedResult = "0000000000000000000000000000000000000000000000000000000000000000")]
      и т.д.
  3. (deadline - 30.09.2019, 24.00) Разработать неизменяемый класс Polynomial (полином) для работы с многочленами n-ой степени от одной переменной вещественного типа (в качестве внутренней структуры для хранения коэффициентов использовать sz-массив). Для разработанного класса реализовать протокол эквивалентности по значению, перегрузить операции (включая "==" и "!="), допустимые для работы с многочленами (исключая деление многочлена на многочлен). Разработать модульные тесты для тестирования методов класса.

Task Status

Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here
2 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here
3 Scheduled Link to .cs-file here Scheduled Link to NUnit Tests - cs-file here

Up

Day 7. 30.09.2019 (Workshop, deadline - 02.10.2019, 24.00)

  1. Некто L начал разработку библиотеки (проект Algorithms.V1) для алгебраических вычислений. Согласно требованию библиотека должна быть реализована как статический класс с удобными для использования для различного рода расчетов статическими методами, в частности, методами, реализующими подсчет НОД-а для двух, трех, четырех и т.д. целых чисел алгоритмом Евклида (Стайна), включая возможность подсчета времени вычислений.

    Завершите разработку библиотеки, начатой L, добавив недостающий функционал, не изменяя сигнутуры существующих в типах методов.

    Какие класс (классы) необходимо будет изменить в случае, если появиться необходимость добавить реализацию еще одного алгоритма Евклида? обоснуйте целесообразность использования подхода, предложенного L, с точки зрения трудозатрат при добавлении такой функциональности.

    Подумайте, является ли необходимость подсчета времени ответственностью класса алгоритма.

  2. Некто M начал разработку библиотеки (проект Algorithms.V2) для алгебраических вычислений. Согласно требованию библиотека должна предоставлять набор типов с удобными для использования различного рода расчетов методами, в частности, методами, реализующими подсчет НОД-а для двух, трех, четырех и т.д. целых чисел классическим алгоритмом Евклида (Стайна), включая возможность подсчета времени вычислений.

    Завершите разработку библиотеки, начатой M, добавив недостающий функционал, не изменяя сигнутуры обозначенных в типах методов и наборы публичных членов предложенных типов. При реализации для обозначенных алгоритмов возможности подсчета НОД-а для трех, четырех и т.д. целых чисел использовать методы расширения. При реализации возможности подсчета времени для обозначенных алгоритмов использовать методы расширения.

    Какие класс (классы) необходимо будет изменить в случае, если появиться необходимость добавить реализацию еще одного алгоритма? обоснуйте целесообразность использования подхода, предложенного M, с точки зрения трудозатрат при добавлении такой функциональности.

  3. Некто N начал разработку библиотеки (проект Algorithms.V3) для алгебраических вычислений. Согласно требованию библиотека должна предоставлять набор типов с удобными для использования различного рода расчетов методами, в частности, методами, реализующими подсчет НОД-а двух, трех, четырех и т.д. целых чисел классическим алгоритмом Евклида (Стайна), включая возможность подсчета времени вычислений.

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

    Какие класс (классы) необходимо будет изменить в случае, если появиться необходимость добавить реализацию еще одного алгоритма? обоснуйте целесообразность использования подхода, предложенного N, с точки зрения трудозатрат при добавлении такой функциональности.

  4. Некто K начал разработку библиотеки (проект Algorithms.V4) для алгебраических вычислений. Согласно требованию библиотека должна предоставлять набор типов с удобными для использования различного рода расчетов методами, в частности, методами, реализующими подсчет НОД-а двух, трех, четырех и т.д. целых чисел классическим алгоритмом Евклида (Стайна), включая возможность подсчета времени вычислений.

    Завершите разработку библиотеки, начатой K, добавив недостающий функционал, не изменяя сигнутуры обозначенных в типах методов и наборы публичных членов предложенных типов. Для реализации для обозначенных алгоритмов возможности подсчета НОД-а для трех, четырех и т.д. целых чисел разработать новый класс, который расширяет функциональность исходных, не используя классического наследования. При реализации данного класса учесть возможность замены класса Stopwatch для подсчета времени работы алгоритмов классом обладающим аналогичной функциональностью. Добавить в полученный класс (или к системе типов) возможность логирования исключений, которые могут возникнуть при работе методов, предусмотрев возможность использования различных фреймворков для логирования. Какие класс (классы) необходимо будет изменить в случае, если появиться необходимость добавить реализацию еще одного алгоритма? обоснуйте целесообразность использования подхода, предложенного K, с точки зрения трудозатрат при добавлении такой функциональности.

Task Status

Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Algorithms.V1 Scheduled NUnit Tests
2 Scheduled Algorithms.V2 Scheduled NUnit Tests
3 Scheduled Algorithms.V3 Scheduled NUnit Tests
4 Scheduled Algorithms.V4 Console Client Code

Up

Additional Task (deadline - 18.10.2019, 24.00)

Полезные ссылки

Task Status

Step Task Solution Status Solution Link Additional/Comments
1 Создание консольного приложения FileCabinetApp Scheduled Solution
2 Создание сервиса FileCabinetService Scheduled Solution
3 Редактирование и валидация данных Scheduled Solution
4 Поиск Scheduled Solution
5 Рефакторинг Scheduled Solution
6 Экспорт в CSV и XML Scheduled Solution
7 Хранилище на файловой системе Scheduled Solution
8 Расширение команды Scheduled Solution
9 Импорт из CSV и XML Scheduled Solution
10 Удаление записей Scheduled Solution

Up

Day 8. 01.10.2019

Материалы

Задачи

  1. (deadline - 03.10.2019, 24.00) Создать новый статический класс ArrayExtension, в который поместить код метода FilterArrayByKey Task 4, переименовав метод в Filter и сделав его методом расширения соответствующего массива. Метод должен уметь возвращать только те элемнты исходного массива, которые удовлетворяют определенному условию (предикату). И добавить метод FindMaximumItem Task 2, как метод расширения, переименовать в Max .
  2. (deadline - 03.10.2019, 24.00) Добавить в статический класс ArrayExtension (п.1) метод расширения Transform который трансформирует элементы массива вещественных чисел в строку согласно переданному правилу. Проверить работу разработанного метода. В качестве тест-кейсов использовать следующие правила
  • получение для вещественного числа его строкового "словесно-цифрового" описания на английском языке;
  • получение для вещественного числа его строкового "словесно-цифрового" описания на русском языке;
  • получение для вещественного числа его битового строкового предстваления в формате IEEE 754.
    Как, не изменяя код класса Transformer Task 1, его можно использовать в качестве правила для трансформации элементов массива в этом методе. Как, не изменяя код класса с методом расширения Task 2, его можно использовать в качестве правила для трансформации элементов массива в этом методе.
  1. (deadline - 04.10.2019, 24.00) Добавить в статический класс ArrayExtension метод расширения для массива строк OrderAccordingTo, который возвращает элементы исходного массива в порядке, определенном переданным правилом сравнения. (С индексированием не мудрить! Это будет обычная сортировка с той лишь разницей, что упорядоченный массив будет в качестве возвращаемого значения, а исходный не изменится.)

Task Status

Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Solution Scheduled NUnit Tests
2 Scheduled Solution Scheduled NUnit Tests
3 Scheduled Solution Scheduled NUnit Tests


Up

Day 9. 03.10.2019

Материалы

Задачи

  1. (deadline - 05.10.2019, 24.00) Переобразовать методы расширения класса ArrayExtension Day 8 в обобщенно-типизированные. Убедиться, что все написанные ранее тесты проходят.
  2. (deadline - 05.10.2019, 24.00) Добавить в класс с методами рассширения новый обобщенный метод расширения, который получает из массива объектов новый массив, все элементы которого имеют один тип.
  3. (deadline - 06.10.2019, 24.00) Реализовать метод-генератор последовательности чисел Фибоначчи. Разработать unit-тесты.
  4. (deadline - 05.10.2019, 24.00) Разработать обобщенный типизированный класс-коллекцию Queue<T>, реализующий основные операции для работы с очередью, и предоставляющий возможность итерирования по ней. Протестировать методы разработанного класса.
  5. (deadline - 10.10.2019, 24.00) Заполните таблицу
Collection Indexed lookup Keyed lookup Value lookup Addition Removal Memory
Списки
T[]
List<T>
LinkedList<T>
Collection<T>
BindingList<T>
ObservableCollection<T>
KeyCollection<TKey, TItem>
ReadOnlyCollection<T>
ReadOnlyObservableCollection<T>
Словари
Dictionary<TKey, TValue>
SortedList<TKey, TValue>
SortedDictionary<TKey, TValue>
SortedDictionary<TKey,TValue>.
ReadOnlyDictionary<TKey, TValue>
Множества
HashSet<T>
SortedSet<T>
Очередь, стек
Queue<T>
Stack<T>
  • * If ... .
  • **If ... .
Collection Underlying structure Lookup strategy Ordering Contiguous storage Data access Exposes Key & Value collection
Списки
T[]
List<T>
LinkedList<T>
Collection<T>
BindingList<T>
ObservableCollection<T>
KeyCollection<TKey, TItem>
ReadOnlyCollection<T>
ReadOnlyObservableCollection<T>
Словари
Dictionary<TKey, TValue>
SortedList<TKey, TValue>
SortedDictionary<TKey, TValue>
ReadOnlyDictionary<TKey, TValue>
Множества
HashSet<T>
SortedSet<T>
Очередь, стек
Queue<T>
Stack<T>
  • * ... .
  • ** ... .
Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Solution Scheduled NUnit Tests
2 Scheduled Solution Scheduled NUnit Tests
3 Scheduled Solution Scheduled NUnit Tests
4 Scheduled Solution Scheduled NUnit Tests
5 Scheduled

Up

Day 10. 07.10.2019

Материалы

Задачи

  1. (deadline - 09.10.2019, 24.00) Реализовать метод-генератор последовательности простых чисел. Разработать unit-тесты.
  2. (deadline - 09.10.2019, 24.00) Для заданной строки проверить правильность расстановки скобок '(', ')', '[', ']', '{', '}'. Разработать unit-тесты.
  3. (deadline - 10.10.2019, 24.00) Для заданной строки выделить все различные слова. Слова, отличающиеся только регистром букв, считать одинаковыми. Разработать unit-тесты.
  4. (deadline - 11.10.2019, 24.00) В кругу стоят N человек, пронумерованных от 1 до N. При ведении счета по кругу вычеркивается каждый k-ый человек, пока не останется один. Cмоделировать данный процесс. Разработать unit-тесты.
Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Solution Scheduled NUnit Tests
2 Scheduled Solution Scheduled NUnit Tests
3 Scheduled Solution Scheduled NUnit Tests
4 Scheduled Solution Scheduled NUnit Tests

Использование Moq

  • Создание mock-объекта

      Mock<IDependency> mock = new Mock<IDependency>();
    
  • Добавление метод в mock-объект

      mock.Setup(m => m.Calculate(It.IsAny<int>())).Returns<int>(value => value);
    
Метод Описание
Is(predicate) Указывает значения типа T, для которых предикат (predicate) возвратит значение true
IsAny() Указывает любое значение типа T
IsInRange(min, max, kind) Срабатывает, если параметр находится между определенными значениями типа T. Последний параметр - это значение перечисления Range, которым может быть Inclusive или Exclusive
IsRegex(regex) Срабатывает, если строковый параметр дает соответствие с указанным регулярным выражением
  • Определение результата, который Moq будет возвращать при вызове метода mock-объекта, тип результата задается с помощью параметра типа, а сам результат - посредством лямбда-выражения

      .Returns<int>(value => value);
    
  • Использование имитированного mock-объекта

      var comeObject = new SomeClass(mock.Object);
    
  • Имитация для специфичных значений (и генерация исключения)

      mock.Setup(m => m.Calculate(It.Is<int>(v => v == 0))).Throws<System.ArgumentOutOfRangeException>();
      mock.Setup(m => m.Calculate(It.Is<int>(v => v > 100))).Returns<int>(value => -value);		
    

Up

Day 11. 08.10.2019

Материалы


Up

Day 12. 14.10.2019 (Workshop)

Материалы

Задачи

  1. (deadline - 16.10.2019, 24.00) Workshop
  2. (deadline - 16.10.2019, 24.00) Некто L начал разработку библиотеки Algorithms.V5 для алгебраических вычислений. Согласно требованию библиотека должна быть реализована как статический класс с удобными для использования для различного рода расчетов статическими методами, в частности, методами, реализующими подсчет НОД-а для двух, трех, четырех и т.д. целых чисел алгоритмом Евклида (Стайна), включая возможность подсчета времени вычислений. Завершите разработку библиотеки, начатой L, добавив недостающий функционал, не изменяя сигнутуры существующих в типах методов.
    Какие класс (классы) необходимо будет изменить в случае, если появиться необходимость добавить реализацию еще одного алгоритма Евклида? Обоснуйте целесообразность использования подхода, предложенного L, с точки зрения трудозатрат при добавлении такой функциональности.
Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Solution Scheduled NUnit Tests
2 Scheduled Solution Scheduled NUnit Tests

Up

Day 13. 15.10.2019 (Workshop)

Материалы

Задачи

  1. (deadline - 17.10.2019, 24.00) Как альтернативу классу EnumerableExtension создать класс Enumerable, в который добавить следующие методы расширения интерфеса IEnumerable<T>:
  • методы для фильтрации Filter и трансформации Transform последовательности, использующие в качестве параметров соответсвующие версии типа делегат Func<T>;
  • метод SortBy, использующий стратегию сортировки по ключу (сортировка по возрастанию) (не стратегию сравнения двух элементов!);
  • метод SortBy, использующий стратегию сравнения двух ключей (сортировка по возрастанию);
  • метод CastTo, получающий на основе последовательности нетипизированных элементов типизированную последовательность, при этом в случае невозможности приведения хотя бы одного элемента в последовательности, выбрасывается исключение InvalidCastException;
  • метод ForAll, определяющий соответствие всех элементов последовательности заданному предикату;
  • метод SortByDescending, использующий стратегию сортировки по ключу (сортировка по убыванию);
  • метод SortByDescending, использующий стратегию сравнения двух ключей (сортировка по убыванию);
  • метод-генератор Range последовательности count целых чисел, начиная с некоторого целочисленного значения start;
  • метод Reverse для получения обратного порядка исходной последовательности;
  • метод Count для получения количества элементов последовательности, удовлеворяющих хаданному предикату;
  • метод Count для получения количества элементов последовательности.

Проверить работу разработанных методов, используя различные типы данных.

  1. (deadline - 20.10.2019, 24.00) Скачать архив LINQ - Sample Queries.zip демонстрационного приложения для изучения LINQ.
  • Запустить приложение (папка C#, SampleQueries.sln), изучить основные запросы LINQ to Object - 101 LINQ Query Samples (код находится в классе LinqSamples).

  • Добавить в приложение класс CustomSamples производный от класса SampleHarness, класс декорировать атрибутами

    [Title("LINQ Query Samples")]
    [Prefix("Linq")]

  • Добавить в класс CustomSamples методы, каждый из которых является решением соответствующего пункта задания, методы именовать по шаблону LinqQueryN где N номер задания по порядку (01,02...). Методы декорировать атрибутами

    [Category("Category method here...")]`(опционально)
    [Title("Title method here...")]
    [Description("Description method here...")]

  • Проверить результ, запуская приложение и просматривая полученный результат.

# Task Solution Status Solution Link
1 Получить список всех клиентов, сумма всех заказов которых превосходит некоторую заданную величину. Scheduled Solution
2 Для каждого клиента получить список поставщиков, находящихся в той же стране и том же городе. Задание выполнить, как используя операцию группировки, так и без нее. Scheduled Solution
3 Получить список тех клиентов, заказы которых превосходят по сумме заданную величину. Scheduled Solution
4 Получить список всех клиентов в отсортированном виде по году, месяцу певого заказа клиента, оборотам клиента (от максимального к минимальному) и имени клиента. Scheduled Solution
5 Получить список тех клиентов, у которых указан нецифровой почтовый код или не заполнен регион или в телефоне не указан код оператора (что равнозначно «нет круглых скобок в начале»). Scheduled Solution
6 Сгруппировать все продукты по категориям, внутри – по наличию на складе, внутри последней группы - по стоимости. Scheduled Solution
7 Сгруппировать все товары по группам «дешевые», «средняя цена», «дорогие», определив границы каждой группы произвольным образом. Scheduled Solution
8 Рассчитать среднюю сумму заказа по всем клиентам из данного города и среднее количество заказов, приходящееся на клиента из каждого города. Scheduled Solution
9 Cоставить свои запросы (не менее 5) к наборам данных, описанных классами Product, Customer, Supplier, Order. Scheduled Solution

Up

Day 14. 17.10.2019

Задачи

  1. (**deadline - **) Разработать обобщенный класс-коллекцию BinarySearchTree (бинарное дерево поиска). Предусмотреть возможности использования подключаемого интерфейса для реализации отношения порядка. Реализовать три способа обхода дерева: прямой (preorder), поперечный (inorder), обратный (postorder): для реализации обходов использовать блок-итератор (yield). Протестировать разработанный класс, используя следующие типы:
  • System.Int32 (использовать сравнение по умолчанию и подключаемый компаратор);
  • System.String (использовать сравнение по умолчанию и подключаемый компаратор);
  • пользовательский класс Book, для объектов которого реализовано отношения порядка (использовать сравнение по умолчанию и подключаемый компаратор);
  • пользовательскую структуру Point, для объектов которого не реализовано отношения порядка (использовать подключаемый компаратор).
Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Solution Scheduled NUnit Tests

Up

Day 15. 21.10.2019 (Workshop)

Материалы

Задачи

  1. (deadline - 24.10.2019, 24.00) Workshop.
  2. (deadline - 24.10.2019, 24.00) Метеостанция WeatherStation работает на базе запатентовнного объекта WeatherData, отслеживающего текущие погодные условия (температура (Temperature), влажность (Humidity), атмосферное давление (Pressure)).
  • Разработать систему классов для создания текущей сводки (CurrentConditionsReport) и статистики (StatisticReport). Все данные должны обновляться в режиме реального времени, по мере того, как объект WeatherData получает данные последних изменений.
  • Предложить два варианта решения (интерфейсы + event).
  • Смоделировать работу метеостанции в консольном приложении.
  1. (deadline - 24.10.2019, 24.00) Разработать класс для имитации часов с обратным отсчетом (только через event), реализующий возможность по истечении назначенного времени (время ожидания предоставляется классу пользователем) передавать сообщение и дополнительную информацию о событии любому подписавшемуся на событие типу. Продемонстрировать работу класса в консольном приложении.
Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Solution Scheduled Console
2 Scheduled Solution Scheduled Console
3 Scheduled Solution Scheduled Console

Up

Day 16. 22.10.2019

Материалы

Encoding

String

StringBuilder

Задачи

  1. (**deadline - 31.10.2019, 24.00) Реализовать метод, который принимает на вход строку source и количество итераций count (проект StringExtension).

      public string Convert(string source, int count)
    

На каждой итерации метода объединяются нечетные символы строки и переносятся в ее начало, и четные символы, которые переносяться в конец.

Пример (строка «Привет Эпам!»):

1 итерация: «Пие пмрвтЭа!»
2 итерация: «Пепртаи мвЭ!»
...

Результат работы метода – результат склеек символов через count итераций.

При реализации алгоритма учесть, что входная строка может содержать очень большое количество символов, а количество итераций может быть огромным. Оптимизировать код с точки зрения быстродействия и потребления ресурсов.

Проверить аргументы на валидность:

  • Запрещается передавать пустые строки, строки из пробелов, null.
  • Количество итераций должно быть больше 0.

При нарушении этих условий метод генерирует исключение.

Проверить работу метода с помощью модульных тестов (проект StringExtension.Tests), к предложенным тест кейсам добавить дополнительные.

Проверить возможность работы разработанного метода с большими строками и большим количеством итераций (проект StringExtensionWithFiles), замерить время счета.

  1. (deadline - 26.10.2019, 24.00) Для объектов класса Book, у которого есть свойства Title, Author, Year, PublishingHous, Edition, Pages и Price (за основу можно взять класс, разработанный ранее) реализовать возможность строкового представления различного вида. Например, для объекта со значениями Title = "C# in Depth", Author = "Jon Skeet", Year = 2019, PublishingHous = "Manning", Edition = 4, Pages = 900, Price = 40$. могут быть следующие варианты:
  • Book record: Jon Skeet, C# in Depth, 2019, "Manning",
  • Book record: Jon Skeet, C# in Depth, 2019
  • Book record: Jon Skeet, C# in Depth
  • Book record: C# in Depth, 2019, "Manning"
  • Book record: C# in Depth и т.д.

Разработать модульные тесты.

  1. (deadline - 26.10.2019, 24.00) Не изменяя класс Book, добавить для объектов данного класса дополнительную (любую не существующую у класса изначально) возможность форматирования, не предусмотренную классом. Разработать модульные тесты.

  2. (deadline - 26.10.2019, 24.00) Реализовать решение задачи Day 6. 26.09.2019. Task 2 в виде дополнительной возможности форматного вывода вещественного числа. Разработать модульные тесты.

Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Solution Scheduled NUnit Tests
2 Scheduled Solution Scheduled NUnit Tests
3 Scheduled Solution Scheduled NUnit Tests
4 Scheduled Solution Scheduled NUnit Tests

Up

Day 17. 24.10.2019

Материалы


Up

Day 18. 28.10.2019 (Workshop)

Материалы

Задачи

  1. (**deadline - 31.10.2019, 24.00) Разработать класс, предоставляющий следующие функциональные возможности:

    • функцию побайтового копирования содержимого одного тествового файла в другой с использованием класса FileStream в качестве потока с резервным хранилищем; функция должна возвращать количество записанных байт;
    • функцию побайтового копирования содержимого одного тествового файла в другой с использованием класса MemoryStream в качестве потока с резервным хранилищем; функция должна возвращать количество записанных байт; содержимое потока MemoryStream наполняется массивом байт, полученных на основе текстовой информации из файла-источника с помощью класса StreamReader;
    • функцию копирования содержимого одного тествового файла в другой, используя возможности буферизации класса FileStream, функция должна возвращать количество записанных байт;
    • функцию копирования содержимого одного тествового файла в другой, используя возможности класса-декоратора потоков BufferedStream, функция должна возвращать количество записанных байт;
    • функцию копирования содержимого одного тествового файла в другой с использованием класса MemoryStream в качестве потока с резервным хранилищем; функция должна возвращать количество записанных байт;
    • функцию построчного копирования содержимого одного тествового файла в другой, функция должна возвращать количество записанных строк;
    • функцию сравнения содержимого исходного и полученного файлов.

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

    Проанализировать основные возможности потоков (CanRead, CanSeek, CanTimeout, CanWrite...).

    Для выполнения задания использовать следующий проект Streams.zip.

  2. (**deadline - 31.10.2019, 24.00) Реализовать функциональность, обозначенную в методах класса StreamTask проекта Streams.2.zip. Проверить работу реализованной функциональности для предлагаемых в проекте тестов.

Task Solution Status Solution Link NUnit Tests Status NUnit Tests Link Additional/Comments
1 Scheduled Solution Scheduled Console
2 Scheduled Solution Scheduled Console

Up

Day 19. 31.10.2019

Day 20. 04.11.2019

Day 21. 05.11.2019

Day 22. 11.11.2019

Day 23. 12.11.2019

Day 24. 14.11.2019

About

External EPAM RD .NET training.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published