Алгоритм подсчёта количества рабочих дней

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

Читать далее

Алгоритм перевода чисел из арабской системы в римскую и обратно

Как известно, в римской системе счисления для обозначения цифр используются комбинации букв латинского алфавита — I, II, III, IV и т.д. В этой статье рассмотрим один из вариантов алгоритма перевода числа из арабской системы в римскую и обратно.

Читать далее

Поиск наибольшей повторяющейся последовательности символов

Последовательность — это некий упорядоченный набор элементов. Строка — это частный случай последовательности. В свою очередь, под термином «наибольшая общая подстрока» мы будем понимать такую подстроку максимальной длины, которая входит в две или больше строки. Представленный ниже алгоритм также подойдет и для поиска наибольшей повторяющейся последовательности не только букв, но и, в принципе, любых символов, например, цифр.

Читать далее

Алгоритм обхода дерева каталогов в C# без рекурсии

Наиболее часто, при решении типовой задачи обхода дерева каталогов в C# используется алгоритм с использованием рекурсии. Однако, это не единственный из возможных вариантов решения. Сегодня мы рассмотрим алгоритм обхода дерева папок без использования рекурсии. Для работы нам понадобится знание работы стека.

Читать далее

Алгоритм нахождения последовательностей чисел в C#

Необходимо найти и вывести на экран все последовательности длины N из чисел 1,2,...,M. Это одна из типовых задач программирования, с которой, думаю, каждый хотя бы раз в том или ином виде сталкивался или столкнется при работе над каким-либо проектом. И в этой статье, посвященной различным алгоритмам, реализованным на языке C# мы и решим эту саму задачу о поиске всех возможных последовательностей.

Читать далее

Сортировка массива C#. Алгоритм «Сортировка вставками»

Сортировка вставками — это алгоритм, в котором элементы массива просматриваются по одному, и каждый элемент элемент размещается в подходящее место среди ранее упорядоченных элементов. С этим алгоритмом сортировки многие из нас сталкиваются в жизни, не подозревая, что используют сортировку вставками — когда сортируют деньги в кошельке. Например, вы получаете в магазине сдачу — 550 рублей. Открываете кошелек — там лежит 200, 1000 и 5000 рублей. Те, кто любит порядок делают так: берут 50 рублей и вставляют их в подходящее место (в самое начало), затем берут 500 рублей и вставляют между 200 и 1000 рублями и в итоге получают упорядоченный «массив» денег 50, 200, 500, 1000 и 5000 рублей. Вот наглядный пример сортировки вставками. Этот алгоритм чем-то напоминает гномью сортировку, но требует вложенного массива.

Читать далее

Сортировка массива C#. Алгоритм «Гномья сортировка»

Название этого алгоритма сортировки происходит от предполагаемого поведения садовых гномов при сортировке садовых горшков. Так Дик Грун описал поведение алгоритма: «Гномья сортировка основана на технике, используемой обычным голландским садовым гномом. Это метод, которым садовый гном сортирует линию цветочных горшков. По существу он смотрит на текущий и предыдущий садовые горшки: если они в правильном порядке, он шагает на один горшок вперёд, иначе он меняет их местами и шагает на один горшок назад. Граничные условия: если нет предыдущего горшка, он шагает вперёд; если нет следующего горшка, он закончил». Собственно, в этом описании и заложен весь алгоритм гномьей сортировки массива в C#.

Читать далее

Сортировка массива C#. Алгоритм «Сортировка перемешиванием»

В литературе можно также встретить такие названия сортировки перемешиванием — шейкерная сортировка и двунаправленная пузырьковая сортировка. Алгоритм представляет собой одну из разновидностей «сортировки пузырьком«. Основное отличие заключается в том, что в классической сортировке пузырьком происходит однонаправленное движение элементов (снизу — вверх), в то время, как сортировке перемешиванием мы сначала проходим снизу-вверху, а затем сверху-вниз.

Читать далее

Сортировка массива C#. Алгоритм «Сортировка пузырьком»

Алгоритм сортировки пузырьком относится к простейшим алгоритмам сортировки и часто применяется в учёбных целях, однако, в практическом плане применяется крайне редко (лишь на небольших массивах). Сложность алгоритма: O(n2). Смысл алгоритма состоит в том, что самые «легкие» (например, меньшие по значению) элементы массива как бы «всплывают» (перемещаются к началу массива) , а самые «тяжелые» — «тонут» (перемещаются в конец массива). Отсюда и название «Сортировка пузырьком»

Читать далее

Сортировка массива C#. Алгоритм «Сортировка выбором»

На данный момент у нас уже хватает знаний, чтобы попробовать написать простейшую программу в C#. Но, простейшая — не значит бесполезная. Наша программа будет сортировать массив C#. При написании различных программ нам часто приходится сталкиваться с таким понятием как сортировка. Например, необходимо отсортировать список людей по алфавиту или произвести сортировку оценок учащихся по возрастанию. И для того, чтобы максимально эффективно решить такую задачу мы должны знать не только сам язык программирования, но и алгоритмы сортировки — их сложность, как они реализуются на практике и так далее. Сегодня мы рассмотрим самый простой алгоритм сортировки массива C# — сортировку выбором.

Читать далее