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

Просмотров: 116750

Стандартные задачи на циклы

Ссылка на Wiki-страничку с алгоритмами на циклы

Простейшие алгоритмы

  1. Сумма целых чисел
  2. Произведение целых чисел
  3. Двойной факториал n!!=n*(n-2)*(n-4)*...*2 (или 1)
  4. Количество нечетных среди n введенных
  5. Защита от неверного ввода
  6. Табулирование функции f(x) на отрезке в [a,b] (цикл for)
  7. Табулирование функции f(x) на отрезке в [a,b] (цикл while)

Рекуррентные соотношения

  1. Вывод 10 первых степеней двойки
  2. Вывод всех двухзначных чисел, кратных 5
  3. Вывод n первых чисел Фибоначчи
  4. НОД(A,B) (алгоритм Евклида)
  5. Сумма цифр целого положительного числа

Максимумы и минимумы

  1. max из введенных чисел
  2. min из введенных чисел, удовлетворяющий условию

Суммирование рядов (конечных и бесконечных)

  1. Вычисление суммы конечного ряда ?(i=1..n) a^i/i!
  2. Вычисление суммы бесконечного ряда ?(i=1..?) (-1)^i * a^i/i!

Поиск значения

  1. Есть ли среди введенных число k?
  2. Есть ли среди введенных число k? (то же с использованием while)
  3. Является ли число N простым?

Другие алгоритмы

  1. Разложение числа на простые множители
  2. Вычисление значения многочлена в точке x (схема Горнера)
  3. Корень непрерывной функции на отрезке (метод половинного деления)

Стандартные задачи на одномерные массивы

Простейшие алгоритмы

  1. Вывод массива
  2. Заполнение массива случайными числами
  3. Инвертирование массива
  4. Поиск элемента по заданному значению
  5. Поиск с барьером
  6. Минимальный элемент и его индекс

Сдвиги, вставка, удаление

  1. Сдвиг влево
  2. Сдвиг вправо
  3. Циклический сдвиг вправо
  4. Удаление k-того элемента
  5. Вставка на k-тое место

Слияние упорядоченных и бинарный поиск в упорядоченном массиве

  1. Слияние двух упорядоченных в один упорядоченный
  2. Поиск в упорядоченном массиве

Сортировка массивов

  1. Сортировка выбором
  2. Пузырьковая сортировка
  3. Сортировка вставками

Использование процедурных типов в задачах на массивы

  1. Поиск по условию
  2. Количество по условию
  3. Условный минимум
  4. Удаление по условию

Файлы

  1. Создание текстового файла целых и подсчет суммы чисел в файле
  2. Создание текстового файла и преобразование каждой строки - все буквы к верхнему регистру
  3. Создание типизированного файла целых и вывод данных из него
  4. Возведение в типизированном файле всех элементов в квадрат
  5. Сортировка типизированного файла

Списки

Односвязные линейные списки

  1. Вставка в начало списка
  2. Удаление из начала списка
  3. Вставка после текущего узла
  4. Удаление после текущего узла
  5. Проход по списку

Двусвязные линейные списки

  1. Вставка в начало/конец списка
  2. Удаление из начала/конца списка
  3. Вставка перед/после узла
  4. Удаление текущего узла
  5. Проход по списку
  6. Слияние двух отсортированных списков
  7. Объединение двух списков

Рекурсия

  1. Рекурсивное вычисление факториала
  2. Рекурсивное вычисление минимума в массиве
  3. Рекурсивное вычисление чисел Фибоначчи с использованием вспомогательного массива
  4. Ханойские башни
  5. Быстрая сортировка

Деревья

Основные операции

  1. Создание бинарного дерева и его вывод
  2. Обходы бинарного дерева
  3. Поиск элемента в бинарном дереве

Поиск минимальной суммы от корня к листу

  1. Очевидный рекурсивный алгоритм
  2. Алгоритм перебора с возвратом
  3. Алгоритм перебора с возвратом + метод ветвей и границ

Бинарные деревья поиска

  1. Добавление элемента
  2. Вывод
  3. Поиск элемента
  4. Удаление элемента

Абстрактные типы данных. Контейнеры

Стек

  1. Реализация стека. Алгоритм вычисления выражения в ПОЛИЗ (польскую инверсную запись)

Очередь

  1. Реализация очереди. Вывод четных в прямом и нечетных в обратном порядке

Динамический массив

  1. Реализация динамического массива с примером использования

Множество

  1. Реализация множества с примером использования

Ассоциативный массив

  1. Реализация ассоциативного массива с примером использования

Контейнеры .NET

  1. Цикл по LinkedList с помощью LinkedListNode
  2. Цикл foreach по контейнерам List, LinkedList
  3. Цикл foreach по Dictionary

Объектно-ориентированное программирование

  1. Демонстрация наследования
  2. Демонстрация включения
  3. Демонстрация перехвата нескольких исключений
  4. Демонстрация полиморфизма
  5. Демонстрация реализации интерфейса
  6. Демонстрация ограничений на переметры шаблона
  7. Демонстрация использования интерфейса IComparable для сортировки контейнера.

Методы расширения

  1. Фильтрация с помощью Where

Новости

29.08.16. Вышла версия 3.2. Реализован оператор yield.

12.02.16. Вышла версия 3.1. Добавлены кортежи в стиле (a,b) и кортежное присваивание (a,b) := (b,a)

31.12.15. Версия 3.0.0.1128. Реализованы обобщенные методы расширения для операций

22.12.15. Версия 3.0.0.1116. Реализован новый синтаксис extension-методов

Случайная программа

// Линейный поиск в массиве
// Уровень сложности: 1
function IndexOf(a: array of integer;
  k: integer): integer;
begin
  Result := -1;
  for var i:=0 to a.Length-1 do
    if a[i] = K then
    begin
      Result := i;
      exit
    end;
end;

const N = 10;

var a: array of integer;

begin
  a := ArrRandom(N,0,19);
  Writeln('Исходный массив: ');
  a.Println;
  
  var k := Random(20);
  Writeln('Ищем элемент = ',k);
  
  var ind := IndexOf(a,k);
  if ind >=0 then
    Writeln(K,' найден; индекс первого вхождения = ',ind)
  else Writeln(K,' не найден');
  
  ind := a.IndexOf(k);
  Writeln('Результат работы стандартной IndexOf: ',ind);
end.