Nickolay.info. Алгоритмы

По просьбам трудящихся открыт отдельный раздел, где будут накапливаться короткие программки (алгоритмы) с комментариями к ним. Реализовано всё на Паскале (ниже) и Си/C++.

Тем не менее, вот список разделов сайта, где уже есть множество моих архивов с исходниками или статей по теме: Обучение, Софт, Технические статьи и заметки, PHP, JavaScript.

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

Если ссылка вот такая, значит, материал лежит в блоге.

Пишем на Си/C++

Быстрая навигация: Математика, числа ::: Графы, геометрия ::: Дата и время ::: Типовая обработка массивов, векторы, матрицы ::: Строки, указатели ::: Работа с файлами ::: Графика, форматы данных, интерфейсы ::: Развлечения, игры ::: Особенности языка, системные ::: Статические и динамические структуры данных ::: Стандартная библиотека шаблонов STL ::: Классовый подход ::: Просто алгоритмы

В некоторых кодах с сайта и из блога могут потребоваться незначительные изменения, например, по новым стандартам C++ некоторые файлы заголовков подключаются без расширения .h:

#include <iostream>

вместо

#include <iostream.h>

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

Кроме того, некоторые компиляторы добавляют к коду свои специфические директивы #pragma, требуют, чтобы функция main() обязательно имела тип int и т.д.

Математика, числа:
Конвертируем римские цифры в арабские :::
Как преобразовать систему счисления без переворачивания строки цифр? :::
Наибольший общий делитель (алгоритм Евклида) и Наименьшее общее кратное - НОД и НОК для пары чисел и массива :::
Раскраска карты или матрица смежности :::
Вычисление суммы ряда в C++ :::
Рекурсивная функция для вычисления чисел Фибоначчи :::
Считая без приоритета... (рекурсивный подбор знаков операций в выражении) :::
Round в C++ :::
Степень двойки, ближайшая сверху к заданному числу :::
Работа с отдельными битами на Си :::
Класс-шаблон bitset и пример на него :::
Цикл, выполняемый "туда и обратно" :::
Генерируем равномерное распределение целых чисел из интервала [-n,n] :::
Генерируем случайные числа для основных распределений :::
Гипотеза Гольдбаха :::
Как извлечь любую цифру из числа :::
Ищем максимальную серию чисел, на которой не выполняется признак :::
Самая длинная цепочка элементов, для которой выполняется признак, или "указатель на шаблон функции" :::
Мультипростые числа :::
Циклический сдвиг числа влево/вправо на k бит :::
Кодирование сдвигом полубайтов и инверсией :::
Варианты получения суммы из комбинации заданных слагаемых :::
Алгоритм Дейкстры на C++ :::
Вычисляем сумму больших степеней двойки :::
Умножение больших чисел :::
Умножение Карацубы или самые красивые алгоритмы в мире :) :::
О программном поиске INT_MAX и дополнительном коде числа :::
Короткий рекурсивный QuickSort для целочисленного массива и массива строк :::
Ищем все магические квадраты 3 на 3 и 4 на 4 :::
Пытаемся посчитать коды Хаффмана... :::
Инфиксная, префиксная и постфиксная формы записи выражений :::
Все n-значные числа, сумма цифр которых равна k :::
Расстановка M элементов в кольцо размерности N :::
Злые числа :::
Добрые числа :::
Адамовы числа :::
Задача алкоголика :) :::
Пятничная задача про бутылки и стаканы :::
Является ли натуральное число последовательным? :::
Количество решений диофантова уравнения :::
Задача о сумме подмножеств :::
Набрать сумму наименьшим количеством чисел из заданного набора :::
Все консольные пирамидки на C++ :) :::
Закон Бенфорда или цифры не равны :::
Вероятность того, что натуральное N-значное число является палиндромом и следующий палиндром :::
Представить натуральное число N в виде комбинации K натуральных чисел :::
Следующее чётное и нечётное целые числа :::
Задача о цепочке побитовых операций :::

Графы, геометрия:
Ищем количество циклов в неориентированном графе :::
Сколько рёбер добавить к графу для достижимости любой вершины? :::
Простейший граф на C++ в графическом режиме консоли :::
Поиск кратчайшего пути на графе :::
Раскрашиваем вершины и рёбра графа :::
Разрежь прямоугольник на равные части! :::
Алгоритм Рамера-Дугласа-Пекера :::
Топологическая сортировка вершин графа :::

Дата и время:
Мультидни :::
Неделя с двумя понедельниками :) :::
Ещё один таймер с периодом :::
Задача про количество дней по номеру месяца :::
Сколько "чёрных пятниц" или считаем количество чисел, выпавших на день недели :::

Типовая обработка массивов, векторы, матрицы:
Минимальный модуль разности сумм элементов в правой и левой части массива :::
Количество различных элементов в массиве :::
Массив случайных целых чисел без повторений :::
Генератор векторов по 3 элемента :::
Как удалить из целочисленного массива повторяющиеся элементы :::
Количество монотонных цепочек значений в массиве :::
Симметричный одномерный и двумерный массивы :::
Обработка матриц функциями, работающими с параметром - одномерным массивом :::
Объединение, пересечение и разность множеств, реализация через массивы :::
Считаем определитель матрицы :::
Чередование значений в массиве :::
Заполнение матрицы "змейкой" :::
Поиск седловых точек матрицы :::
СЛАУ методом Гаусса :::
Шнурки Гаусса :::
Максимальная и минимальная цепочка элементов с чередованием признака :::
Выполняем поворот матрицы :::
Проверка матрицы на магический квадрат :::
Ищем в матрице количество повторяющихся элементов :::
Размеры "областей" из одинаковых элементов в матрице :::
Вычисление среднего значения и дисперсии элементов массива :::
Ввод динамической матрицы через cin с проверкой корректности данных :::
Как напечатать размерности многомерного массива на C++ :::
Поиск в матрице подматриц из совпадающих элементов :::
Подматрица с минимальной суммой элементов :::
Ищем сумму элементов всех подматриц для заданной матрицы :::
Найти в массиве целых чисел подмассив максимальной длины с максимальным средним значением :::
Ищем в массиве подмассив нужной длины с максимальным средним значением :::
Ищем k-ый по величине элемент в несортированном массиве за линейное время :::

Строки, указатели:
Выводим только те символы, которые встречаются в каждой из строк s1, s2 :::
Количество вхождений строки в строку :::
Алгоритм Бойера—Мура :::
Простейший "гипертекст" на C++ :::
*s++ или *(s+i) :::
Указатель на константу и константный указатель :::
Функция возвращает указатель на функцию... :::
Как узнать номер символа в строке :::
strcpy и "нарушение прав доступа при записи"; корректные показания часов словами :::
Строка из нулей заданной длины и сложение строк, содержащих двоичные числа :::
Как разобрать строку на слова средствами класса string? :::
getline getlin'у рознь или доля гласных в русском тексте :::
Простейшее введение в "умные указатели" :::
Проверить правильность расстановки скобок в строке :::
Вывести все корректные комбинации пар круглых скобок :::
Нумеруем скобки в строке :::
Анализ текста на основе цепей Маркова :::
Найти наименьшую общую суперстроку для двух строк :::
Самая длинная повторяющаяся без пересечений подстрока в строке :::

Работа с файлами:
Задачи на строки и файлы, C vs C++ :::
Как всё-таки победить fscanf при чтении чисел из текстового файла :::
Может ли ifstream извлечь вещественные числа из произвольного текстового файла... :::
Про fgets и fflush(stdin) в Studio 2015 :::
ASCII-код наиболее часто встречаемого символа в файле :::
Строим частотную таблицу символов на C++ :::
Выделяем динамическую память под файл :::
Читаем текстовый файл в вектор строк :::
     Про вектор из строк string и быструю замену строк методами класса string :::
Читаем файл построчно, если длина строки не ограничена :::

Графика, форматы данных, интерфейсы:
Считаем определенные интегралы и выводим график - методы трапеций, Симпсона, разложения в ряд (метод Гаусса с двумя узлами) :::
Алгоритмы Сазерленда-Ходжмена - отсечение многоугольника прямоугольным окном, объединение двух многоугольников :::
Создаём файлы BMP на Си :::
Чтение и запись формата PCX на Си :::
Конвертируем из Лексикона в HTML :::
Генерация таблицы имен цветов Internet Explorer и Netscape Navigator :::
Пишем в текстовый файл ведомость студентов :::
Многоуровневое консольное меню на классах :::
Простейшее меню и окно вывода для консоли C++ (функции библиотеки conio.h) :::
     C++: простейшее консольное меню с вводом номера пункта из cin :::
Индикатор прогресса для консоли :::

Развлечения, игры:
Расстановка слонов и ладей на шахматной доске :::
Путь коня по шахматной доске :::
Алгоритм Ли или конь в лабиринте :::
Делаем "односвязный" лабиринт и решаем его :::
     Крыса в лабиринте :::
Найди сеты :::
А для этого нужна числопредставлялка... :::

Особенности языка, системные:
C++: шпаргалка по кастам :::
Простые реализации atoi и itoa :::
Пишем собственную функцию atof :::
Используем указатель на функцию :::
     Ещё раз про указатель на функцию... :::
Пример на функции с переменным числом параметров :::
Пишем на Си функции нижнего уровня :::
Упражнения на разбор по словам с функцией token :::
Упражнения на резидентные программы под DOS :::
Массив как параметр функции :::
Вернуть строку string с датой и временем, отформатированными с учётом локали :::
С++: как обработать исключения самостоятельно? :::
Есть ли регулярные выражения в C++? :::
Заполняем динамический массив случайными целыми значениями и реализуем простую сортировку :::
Как в C++ программно узнать тип переменной? :::

Статические и динамические структуры данных:
Работаем с составными типами данных C++ :::
Структура для геометрической фигуры :::
Cортировка односвязного списка перестановкой указателей :::
Динамическая матрица из строк переменной длины :::
Структура со строками string и файловые чтение/запись массива таких структур :::
Делаем динамическую структуру на основе двусвязного списка :::
Произвольное и бинарное деревья :::
     Произвольное дерево из чисел с ограниченным количеством потомков узла :::
     Бинарное дерево и двусвязный список: как удалить узлы? :::
Упражнения на бинарные деревья и списки :::
Точки и прямоугольники... :::
C++: изучаем стандартный контейнер vector :::
Как сделать бинарное дерево средствами STL :::
Делаем простой мультимап в консоли :::

Стандартная библиотека шаблонов STL:
Алгоритм QuickSelect :::
Прочитать файл как вектор из символов char :::
Организуем список из объектов класса с помощью std::vector :::
Двумерная матрица на основе контейнера :::
Переопределяем двойные квадратные скобки на C++ :::
Найти максимум в стеке за время O(1) :::
Двумерные матрицы из pair, vector, map и set :::
Отсортировать вектор и убрать повторы элементов :::
Шаблон для класса очереди фиксированного размера :::
Почему библиотеки не победят "чистый" Си :::

Классовый подход:
Примеры на работу с классами в C++ :::
Класс "паскалевских" массивов на C++ :::
Про конструкторы, стек и кучу... :::
Класс "тетрадки" :) :::
Класс "вектор на плоскости" :::
C++: общее о перегрузке операторов :::
Переопределяем префиксный, постфиксный, унарный и бинарный операторы :::
Что происходит, если вернуть из функции ссылку? :::
Как поддерживать динамическое свойство класса и нужно ли это делать? :::
Пишем маленькие классы :::
Шаблон класса, использующего шаблоны функций :::
Файл с массивом из объектов класса, чтение и запись :::
Делаем вектор из разнотипных объектов класса (родителя и потомков) :::

Просто алгоритмы

О заменяемости циклов :::
Новые задачки на шахматной доске :::
Об остатке от деления и округлении до числа, кратного чему-то... :::
Не больше двух третей положительных... :)
Волк, коза и капуста :::
Устройство с двумя кнопками :::
Выбор случайной строки за 1 проход по файлу :::
Два сомнительных алгоритма из книжки :::
"Универсальная" блок-схема и 3 типовых алгоритма :::
Считаем арифметическое среднее "на лету" :::
Посчитать арифметическое среднее без переполнения? :::
Максимальный по объёму параллелепипед с заданной суммой длины, ширины и высоты :::
Дедукция по клетчатой тетрадке... :::
Задача про лестницу :) :::
Часто встречающиеся "неправильные" алгоритмы :::
Двойной цикл: табулирование f(x,y) и обработка строк или столбцов матрицы :::
Задача про 4 литра, разлитые 3-х и 5-литровой банками :) :::

Разное и несортированное

Ещё 31 алгоритмическая задача на Си и Паскале - архив за дек.2013 :::
Ещё 20 алгоритмических задач на Си и Паскале - архив за июн.2014 :::
Ещё 5 учебных задачек, 26.06.2015 :::
31 не пригодившаяся в октябре задачка (2015) :::
15 не пригодившихся задачек за декабрь-2015 :::
17 не пригодившихся задач за начало 2016 года :::
22 не пригодившихся задачи за начало 2018 года :::
14 не пригодившихся задач за 14 апреля 2018 :::
Ещё 16 не пригодившихся задач за апрель 2018 :::
Ещё 24 не пригодившихся первомайских задачки на C++ :::
Ещё 15 задач про числа за май 2018-го :::

Пишем на Паскале

Паскаль: 6 простых задач с "экономическим содержанием" - простые работы по Паскалю для тех, кто знакомится на нём с основными алгоритмическими конструкциями за несколько учебных часов :::

Математика, сортировки, числа:
Некоторые математические расчёты на Паскале :::
Нахождение всех корней заданного квадратного уравнения :::
Решение СЛАУ методом Гаусса :::
Сверхпростые числа :::
Совершенные числа :::
Самая длинная последовательность нулей :::
Объединение упорядоченных массивов :::
Перестановка значений двух переменных без использования дополнительной переменной :::
Наименьшие числа, не имеющие общих делителей :::
Сумма цифр целого числа :::
Перевод целого числа из десятичной и в десятичную систему счисления :::
Простые алгоритмы сортировки одномерного массива :::
Пример для сортировки на Паскале с визуализацией :::
Нахождение второго по величине максимального (минимального) значения в массиве :::
Нахождение максимального (минимального) значения в массиве без использования дополнительной переменной :::
Строим дерево игры (задача С3 ЕГЭ по информатике) :::
Разбиение массива на положительные и отрицательные элементы :::
Элементы матрицы, все соседи которых больше их :::
Окружность из единичек в нулевой матрице :::
Обход матрицы по раскручивающейся спирали :::
Пример для алгоритма расчёта с заданной точностью (первый замечательный предел) :::
Удаление повторяющихся значений из массива :::
Самый часто встречающийся элемент в массиве :::
Самая длинная повторяющаяся цепочка значений в массиве :::

Задачи с геометрической интерпретацией:
Площадь треугольника по длинам сторон (формула Герона) и координатам вершин :::
3 точки на одной линии :::
Попадание точки в треугольник :::
Площади выпуклого и невыпуклого многоугольников :::
Существование треугольника и четырёхугольника :::
Расстояние от точки до отрезка :::
Минимум расстояния от точки на оси абсцисс до концов отрезка :::
Часовая и минутная стрелки на одной линии :::
Ромб или квадрат? :::
Обход точек ломаной без самопересечений :::

Строки, файлы, множества:
Разбор на слова за 1 проход по строке :::
Самая длинная подстрока, являющаяся записью числа :::

Численные методы, инженерные расчёты:
Метод Ньютона решения нелинейного уравнения :::
Реализация основных методов интерполяции функции одной переменной :::
Интерполяционный полином Лагранжа на Паскале :::
Построение кубического интерполяционного сплайна :::
Метод наименьших квадратов (МНК) :::
Решение задачи Коши методом Эйлера :::
Количество тепла на единичном сопротивлении (метод Рунге-Кутта 2 порядка и метод Симпсона) :::
Краевая задача для дифференциального уравнения 2 порядка :::

Графика, форматы данных, интерфейсы:
Читаем 16-цветный BMP на Паскале :::
Реализация выпадающего меню :::

Дата, время, случайная генерация:
Дата следующего дня по введенной дате :::
Определение дня недели по дате :::
Количество дней от даты рождения до сегодняшней :::
Программно вычисляем время+(-)минуты=новое время :::
Заполнение экрана случайными символами с учётом частоты встречаемости :::
Генерируем вещественные случайные числа из диапазона [-N,N] :::

Развлечения, игры:
"Код матрицы" :::
Дамка и две шашки :::
Игра "Угадай число" :::
Ханойская башня :::

Особенности языка, системные:
Обработка матрицы и вектора одной подпрограммой :::
Открытый массив на Паскале и проверка правильности ввода :::
Контроль правильности ввода целых чисел на Паскале :::
Перегрузка функций на Паскале с помощью type :::
Отключение текстового курсора в окне консоли Паскаля :::
Модуль мыши на Паскале и пример на работу с ним для графики :::

Рейтинг@Mail.ru

вверх гостевая; E-mail