Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

ОСНОВНЫЕ СТРУКТУРЫ АЛГОРИТМОВ: СРАВНИТЕЛЬНЫЙ АНАЛИЗ И ПРИМЕРЫ ИХ ИСПОЛЬЗОВАНИЯ (АЛГОРИТМЫ)

Содержание:

ВВЕДЕНИЕ

Сегодня термин «информатика» принято употреблять в двух смыслах:

  • отдельное научное направление, изучающее информацию и информационные процессы, реализующее разработку и создание новых средств для работы с информацией;
  • практическая область деятельности людей, непосредственно связанная с использованием компьютеров при обработке информации [17].

Одним из направлений информатики как науки является программирование – наука, которая изучает теорию и методы разработки, производства и эксплуатации программного обеспечения ЭВМ [5].

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

Алгоритмическим мышлением называется умение выстраивать логически безупречную последовательность действий для получения решения поставленной задачи. Многолетний опыт показывает, что для развития алгоритмического мышления в первую очередь требуется тщательно прорабатывать алгоритмы для небольших, но полезных программ, которые формируют базовые приемы программирования. Таких приемов достаточно немного, однако их обобщение, накопление, и умение осознанно применять при решении практических задач дает возможность научиться писать программы практически любому человеку [10].

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

Предметом исследования данной работы являются алгоритмы.

Объект исследования – основные структуры алгоритмов.

Целью работы является описание структур алгоритмов, а также их сравнение.

Для достижения поставленной цели предстоит решить ряд задач:

  • проанализировать литературу по заданной теме;
  • дать определения основным терминам;
  • раскрыть понятие алгоритма;
  • привести примеры различных структур алгоритмов и сравнить их друг с другом.

В качестве опорных источников при написании работы были использованы следующие: И.Г. Попова – «Программирование и алгоритмизация» и Н.М. Третьякова – «Turbo Pascal. Решение инженерных задач».

1. АЛГОРИТМЫ

1.1. История становления теории алгоритмов

Еще в конце XIX в. известный немецкий математик Д. Гильберт заметил, что математика представляет собой искусство называть разные вещи одинаковыми именами. Уже тогда понятие алгоритма было ключевым в этой науке. Алгоритмом всегда назывался некоторый единый общий метод решения бесконечного числа однотипных задач, представляющих собой массовую проблему. Другими словами, алгоритм – это решение конкретной задачи из класса подобных задач «в общем виде». К первым алгоритмам относятся алгоритмы арифметических действий. Затем они получили свое развитие не только в математике, но и в других науках. Однако было целое множество задач, решение которых не подчинялось алгоритмам. Лишь к 1930 г. была создана специальная наука – теория алгоритмов, объектом исследования которой стало понятие и свойства алгоритма. Первое формализованное определение алгоритма было предложено Э. Постом и А. Тьюрингом. Они описали точными математическими терминами некие идеализированные вычислительные машины, получившие впоследствии название «машины Тьюринга».

С развитием вычислительных устройств поднялся вопрос о практической выполнимости алгоритмов на реально существующих вычислительных устройствах в реально допустимое время. Данный факт явился предпосылкой создания теории вычислительной сложности алгоритмов, появившейся в 60-е годы прошлого века. Эта теория была призвана классифицировать алгоритмы в зависимости от их сложности. В дальнейшем теория сложности вычислений стала одной из центральных в теории алгоритмов [7].

1.2. Основные понятия

Термин «алгоритм» происходит от имени автора арабского учебника по математике аль-Хорезми. В своем первоначальном определении алгоритмом назывался способ преобразования представления информации. Другими словами, алгоритм – это некоторое формальное предписание, соблюдая которое, может быть получено решение задачи.

Алгоритмы применяются не только для решения частных задач, но и для целых классов однотипных задач. Подлежащие решению частные задачи, выделяемые по мере надобности из рассматриваемого класса, определяются при помощи отдельных параметров. Параметры при этом исходными данными для алгоритма [6].

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

Исполнителем алгоритма называется тот субъект или объект, для управления которым разрабатывается алгоритм. Другими словами, исполнителем алгоритма является некоторая реальная или абстрактная система (биологическая, техническая или биотехническая), которая способна выполнить действия, предписываемые алгоритмом.

Характерные черты исполнителя алгоритма (см. рисунок 1):

Рисунок 1 – Характерные черты исполнителя алгоритма

  • среда – «место обитания» исполнителя;
  • система команд – конечный набор команд, которые исполнитель может понять (умеет выполнять). Каждая команда обладает своими условиями применимости (условиями среды) и результатами;
  • элементарные действия – действия, совершаемые исполнителем после вызова команды;
  • отказы – ситуация, возникающая в том случае, когда вызывается команда в недопустимых условиях среды.

Важно отметить, что исполнитель не вникает в смысл выполняемых им действий – его действия формальны, отвлечены от содержания поставленной цели и строго соответствуют алгоритму [4].

Любой алгоритм обладает следующими свойствами:

  • дискретность – процесс решения задачи при помощи алгоритма разбивается на ряд этапов (дискретных во времени);
  • определенность – любое правило алгоритма должно быть четким и однозначным не только в исполнении, но и в толковании;
  • массовость – алгоритм должен быть разработан для целого класса однотипных задач, отличающихся друг от друга лишь значениями исходных параметров;
  • результативность – требуемый результат должен быть достигнут за конечное число шагов алгоритма [12].

1.3. Формы представления

В настоящее время существует несколько форм записи алгоритмов (см. рисунок 2):

  • словесное описание;
  • построчная запись;
  • блок-схема;
  • запись на языке программирования.

Рисунок 2 – Формы представления алгоритмов

Словесное описание алгоритма характеризуется минимальным количеством ограничений и представляет собой наименее формализованный вид. Однако, алгоритм, записанный в словесной форме, получается менее строгим и допускает некоторые неопределенности. Кроме того, данная форма записи может оказаться очень объемной и трудной для человеческого восприятия. В качестве примера рассмотрим нахождение наибольшего общего делителя (НОД) двух чисел. Если числа равны, то НОД равняется любому из этих чисел. В противном случае из большего числа требуется вычесть меньшее, запомнить получившуюся разность, подставить ее вместо большего числа и повторить алгоритм.

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

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

Приведем пример записи алгоритма вычисления НОД двух чисел в построчной записи:

  • Ввод A, B
  • Если A = B, переход к шагу 8
  • Если A > B, переход к шагу 6
  • B = B – A
  • Переход к шагу 2
  • A = A – B
  • Переход к шагу 2
  • НОД = А
  • Вывод НОД
  • Конец

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

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

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

На территории нашей страны действует единая система программной документации (ЕСПД), сформировавшаяся в 1981 г. Данная система описывает условные графические изображения, которые применяются в алгоритмах (ГОСТ 19.003-80 «Схемы алгоритмов и программ. Обозначения условные графические»), а также набор правил, которые следуют соблюдать при записи блок-схем (ГОСТ 19.002-80 «Схемы алгоритмов и программ. Правила выполнения»).

На сегодняшний день существует целое множество программных продуктов, облегчающих построение блок-схем. К ним относятся такие программы, как Microsoft Visio, Dia, OpenOffice.org Draw и т.п.

Основные блоки алгоритмов, используемые в блок-схемах приведены на рисунках 3-11.

Рисунок 3 – Блок ввода/вывода

Рисунок 4 – Вычислительный блок (блок обработки данных)

Рисунок 5 – Блок принятия решения (проверки условия)

Рисунок 6 – Блок начала/конца программы

Рисунок 7 – Блок начала цикла

Рисунок 8 – Блок конца цикла

Рисунок 9 – Ссылка

Рисунок 10 – Блок вызова подпрограммы

Рисунок 11 – Блок комментария

Существует ряд правил при работе с блок-схемами:

  • выполнение алгоритма всегда начинается с блока начала и заканчивается при попаданием на блок конца. Порядок вычислений при этом определяется стрелками между блоками;
  • блок обработки данных содержит описание только тех действий, которые должны быть выполнены над объектами при попадании на этот блок по входящей в него стрелке. В данном блоке принято вычислять значения каких-либо выражений и присваивать новые значения переменным;
  • блок принятия решения содержит запись логического условия. Результатом проверки является выбор одной из двух стрелок, которые соответствуют возможным дальнейшим направлениям вычислений;
  • блок ввода содержит переменные, значения которых вводятся в данном месте схемы;
  • блок вывода содержит переменные, значения которых выводятся в данном месте схемы;
  • комментарии применяются с целью пояснений, которые не могут быть помещены внутри блока;
  • очень часто в состав одних алгоритмов входят другие, уже известные алгоритмы. Для этого они помещаются в блок «переопределенный процесс» (блок вызова подпрограммы);
  • в случае больших размеров схем разрешается прерывать стрелки и использовать соединители [14].

1.4. Краткие выводы

В данной главе описана история становления теории алгоритмов, даны основные понятия, приведены свойства алгоритмов, а также формы их записи.

2. АЛГОРИТМИЧЕСКИЕ СТРУКТУРЫ

Алгоритмы могут быть представлены в виде структур отдельных элементов. В зависимости от особенностей построения алгоритмы делятся на следующие группы (см. рисунок 12):

Рисунок 12 – Виды алгоритмов

  • линейные (последовательные);
  • разветвляющиеся;
  • циклические;
  • рекурсивные.

Такое разнообразие алгоритмов объясняется тем фактом, что любой алгоритм состоит из нескольких фрагментов, каждый из которых в отдельности является алгоритмом одного из указанных видов. Поэтому важно знать структуру каждого из алгоритмов и принципы их составления. Для решения какой-либо поставленной задачи могут применяться сразу несколько алгоритмов, которые приведут к получению ее результата. Из всех доступных алгоритмов следует использовать лучший по следующим критериям:

  • точность решения задачи;
  • временные затраты;
  • число этапов;
  • простота этапов и т. д [3].

Рассмотрим последовательно все виды алгоритмов.

2.1. Линейные алгоритмы

Элементарным действием любого вычислительного алгоритма является операция присваивания.

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

  • при помощи операции присваивания;
  • при помощи операции ввода.

В качестве примера рассмотрим правило деления двух дробей. В учебнике математики данный алгоритм выглядит следующим образом:

  • числитель первой дроби умножить на знаменатель второй дроби;
  • знаменатель первой дроби умножить на числитель второй дроби;
  • результатом деления является дробь, числитель которой был получен на шаге 1, а знаменатель – на шаге 2.

Алгебраическая форма записи данного алгоритма приведена на рисунке 13.

Рисунок 13 – Алгебраическая форма записи алгоритма деления дробей

Данный алгоритм представляет собой последовательное выполнение определенных действий. Такие алгоритмы называются линейными. Линейный алгоритм состоит из команд присваивания, ввода/вывода, а также обращений к вспомогательным линейным алгоритмам.

Блок-схема описанного алгоритма приведена на рисунке 14.

В данном алгоритме команда присваивания («:=») реализует следующие действия:

  • вычисление выражения;
  • запись получившегося значения в переменную [18].

Рисунок 14 – Блок-схема алгоритма деления дробей

2.2. Разветвляющиеся алгоритмы

Разветвляющийся алгоритм описывает вычислительный процесс, реализация которого происходит в зависимости от логического условия по одному из нескольких заранее известных направлений. Эти направления, принято называть ветвями алгоритма [2].

Существует два варианта оператора ветвления – полный и укороченный (см. рисунок 15), где:

  • S – логическое выражение;
  • A – набор операторов, которые выполняются в том случае, если значение S – истина;
  • B – набор операторов, которые выполняются в том случае, если значение S – ложь.

Рисунок 15 – Блок-схема разветвляющегося алгоритма

а) – полный; б) – укороченный

Полное ветвление предполагает наличие каких-либо действий по каждой из ветвей алгоритма. Укороченное ветвление реализует действия только по одной ветви [15].

Частным случаем ветвления является оператор с несколькими ветвями (больше, чем 2). В этом случае на блок-схеме отражаются все возможные варианты.

2.3. Циклические алгоритмы

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

Классификация циклических алгоритмов приведена на рисунке 16.

Циклы с известным числом повторений применяются в тех случаях, когда можно вычислить или заранее известно количество повторов операторов в теле цикла. Другое название данных циклов – циклы со счетчиком (параметром) или циклы с заданным шагом. Подобные циклы могут быть реализованы при помощи блока «решение» (см. рисунок 17), где:

  • i – параметр цикла;
  • in – начальное значение параметра цикла;
  • ik – конечное значение параметра цикла;
  • hi – шаг изменения параметра цикла.

Рисунок 16 – Классификация циклических алгоритмов

Рисунок 17 – Организация цикла с известным числом повторений при помощи блока «Решение»

Кроме того, для реализации цикла с заранее известным числом повторений может быть использован специальный блок «модификация» (см. рисунок 18).

Рисунок 18 - Организация цикла с известным числом повторений при помощи блока «Модификация»

Данный блок в разные моменты времени способен выполнять три функции. В случае первого исполнения (при входе в данный блок) выполняется операция i := in. При возврате в блок (вход слева) – i := i+1. Кроме того, данный блок содержит два выхода. В том случае, когда i ≤ ik, процесс попадает в тело цикла, иначе – выходит из него.

Циклы с неизвестным числом повторений по-другому называются итерационными циклами. Число повторений в большинстве случаев определяется необходимой точностью вычислений - чем выше точность, тем больше повторений. Данные циклы могут быть реализованы двумя способами:

  • цикл с предусловием (см. рисунок 19);

Рисунок 19 – Блок-схема цикла с предусловием

  • цикл с постусловием (см. рисунок 20).

Рисунок 20 – Блок-схема цикла с постусловием

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

Внутри одного цикла может быть помещен еще один или даже несколько других циклов. В этом случае охватывающий цикл называется внешним, а вложенные в него – внутренними. Параметры внешнего и внутреннего циклов изменяются не одновременно, т.е. при одном значении параметра внешнего цикла параметр внутреннего цикла последовательно принимает все возможные для него значения. Параметры внешнего и внутреннего цикла являются независимыми переменными [19].

2.4. Рекурсивные алгоритмы

Рекурсивные алгоритмы реализуются в виде отдельных подпрограмм, отличительной чертой которых является вызов самих себя. Рекурсивная функция обязательно должна содержать в себе условие окончания рекурсивности, чтобы избежать зацикливания алгоритма. При каждом рекурсивном вызове создается новое множество локальных переменных. То есть переменные, расположенные вне вызываемой функции, не изменяются [1].

Любая рекурсивная функция может быть описана при помощи циклической конструкции, и наоборот. Однозначного ответа на вопрос какое из этих описаний лучше нет, так как рекурсивное описание в большинстве случаев сокращает объем кода, однако усложняет его читаемость. Кроме того, рекурсивные функции обычно вычисляются дольше циклических, поэтому при выборе алгоритма важно заранее определить, что важнее в данной задаче – объем кода или скорость его выполнения [13].

2.5. Краткие выводы

В данной главе были описаны основные структуры алгоритмов: линейные, разветвляющиеся, циклические и рекурсивные.

3. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ РАЗЛИЧНЫХ СТРУКТУР АЛГОРИТМОВ

В рамках практической части приведем примеры использования описанных ранее алгоритмов, написав несколько программ на языке программирования Паскаль.

3.1. Линейные алгоритмы

В качестве примера использования линейных алгоритмов напишем решение задачи «Рубли и копейки»: дана исходная денежная сумма в копейках. Требуется перевести данную сумму в рубли и копейки [16]. Исходный код данной задачи на языке Паскаль:

uses crt;

var

sum,rub,kop:integer;

begin

write('Исходная сумма: ');

readln(sum);

rub:=sum div 100;

kop:=sum mod 100;

writeln(sum,' коп. = ',rub,' руб. ',kop,' коп.');

readln;

end.

Результат выполнения данного кода приведен на рисунке 21.

Рисунок 21 – Пример реализации линейного алгоритма

При решении данной задачи все действия выполняются последовательно друг за другом. Следовательно, алгоритм решения – линейный.

3.2. Разветвляющиеся алгоритмы

Для примера программы, реализующей алгоритм ветвления, составим программу, которая ищет корни квадратного уравнения [8]:

uses crt;

var

a, b, c, d, x1, x2: real;

begin

write('Коэффициент при х^2 = ');

readln(a);

write('Коэффициент при х = ');

readln(b);

write('Свободный коэффициент = ');

readln(c);

d:=b*b*-4*a*c;

if d<0 then writeln('Корней нет!')

else if d = 0 then writeln('x1 = x2 = ',-b/(2*a))

else

begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

writeln('x1 = ',x1:3:1,'; x2 = ',x2:3:1);

end;

readln;

end.

Результат работы данной программы приведен на рисунке 22. Важно отметить, что написанный код содержит оба вида блока ветвления – полный и сокращенный.

Рисунок 22 – Пример реализации разветвляющегося алгоритма

3.3. Циклические алгоритмы

Для примера циклических алгоритмов составим программу, вычисляющую сумму ряда с заданной точностью e [20].

Код программы, реализующей цикл с предусловием:

uses crt;

var

i,BeginTIme:integer;

a,s,e:real;

begin

write('e = ');

readln(e);

BeginTime := Milliseconds;

s:=0; a:=1; i:=1;

while abs(a)>e do

begin

s:=s+a;

i:=i+1;

a:=1/(i*i);

end;

writeln('s = ',s:1:5);

writeln('Время выполнения = ',Milliseconds - BeginTime);

readln();

end.

Результат выполнения данной программы приведен на рисунке 23.

Рисунок 23 – Пример реализации циклического алгоритма с предусловием

Запишем решение этой же задачи при помощи цикла с постусловием:

uses crt;

var

i,BeginTIme:integer;

a,s,e:real;

begin

write('e = ');

readln(e);

BeginTime := Milliseconds;

s:=0; a:=1; i:=1;

repeat

s:=s+a;

i:=i+1;

a:=1/(i*i);

until abs(a)<e;

writeln('s = ',s:1:5);

writeln('Время выполнения = ',Milliseconds - BeginTime);

readln();

end.

Результат выполнения данной программы приведен на рисунке 24.

Рисунок 24 – Пример реализации циклического алгоритма с постусловием

Как видно из результатов, цикл с предусловием отработал быстрее, чем цикл с постусловием.

Для примера реализации цикла с параметром составим программу, которая будет выводить на экран таблицу температур по Цельсию от -270° С до 200°С с шагом 10°С и соответствующие им температуры по Кельвину [11].

Исходный код данной программы:

uses crt;

var

i,C,K:integer;

begin

writeln(' C K');

for i:=-27 to 20 do

begin

C:=i*10;

K:=C+273;

writeln(C:4,K:4);

end;

readln();

end.

Результат выполнения данной программы приведен на рисунке 25.

Рисунок 25 – Пример реализации циклического алгоритма с параметром

Для примера использования вложенных циклов напишем программу определения среднего арифметического чисел квадратной матрицы:

uses crt;

var

m,i,j:integer;

mas:array[1..5] of array[1..5] of integer;

sred:real;

begin

write('m = ');

readln(m);

writeln('Введите матрицу:');

sred:=0;

for i:=1 to m do

for j:=1 to m do

begin

read(mas[i][j]);

sred:=sred+mas[i][j];

end;

writeln('Среднее арифметическое = ',sred/(m*m));

readln();

end.

Результат выполнения данного кода приведен на рисунке 26. В рамках данной программы реализовано два цикл – один из них отвечает за индексацию строк, другой – за индексацию столбцов. Сумма элементов считается одновременно с их вводом.

Рисунок 26 – Пример реализации вложенных циклов

3.4. Рекурсивные алгоритмы

Наиболее популярным примером реализации рекурсивных алгоритмов является функция вычисления факториала [9]:

uses crt;

function F(N:integer):longint;

begin

if N=0 then

F:=1

else F:=F(N-1)*N;

end;

var

n:integer;

begin

write('n = ');

readln(n);

writeln(n,'! = ',F(n));

readln();

end.

Результат выполнения данной программы приведен на рисунке 26.

Рисунок 26 – Пример реализации рекурсивного алгоритма

3.5. Краткие выводы

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

ЗАКЛЮЧЕНИЕ

В рамках выполнения данной работы была раскрыта тема «Основные структуры алгоритмов: сравнительный анализ и примеры их использования».

Первая глава носит обзорный характер, в ней описана история становления теории алгоритмов от конца XIX в. и до нашего времени. В своем первоначальном определении алгоритмом назывался способ преобразования представления информации. Другими словами, алгоритм – это некоторое формальное предписание, соблюдая которое, может быть получено решение задачи.

Алгоритм не может существовать без исполнителя - субъекта или объекта, для управления которым разрабатывается алгоритм.

Любой алгоритм обладает следующими свойствами:

  • дискретность;
  • определенность;
  • массовость;
  • результативность.

Основные формы записи алгоритмов:

  • словесное описание;
  • построчная запись;
  • блок-схема;
  • запись на языке программирования.

Во второй главе приводятся основные алгоритмические структуры, которые принято делить на четыре группы:

  • линейные (последовательные);
  • разветвляющиеся;
  • циклические;
  • рекурсивные.

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

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

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

Еще один вид алгоритмов – рекурсивные. Такие алгоритмы реализуются в виде отдельных подпрограмм, отличительной чертой которых является вызов самих себя.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  • Андреева И.Ю. Программирование в системе Turbo Pascal: учебно-методическое пособие. – Армавир: изд-во центра детского (юношеского) научно-технического творчества, 2011. – 66 с.
  • Аузяк А.Г. Программирование и основы алгоритмизации: Для инженерных специальностей технических университетов и вузов / А.Г. Аузяк, Ю.А. Богомолов, А.И. Маликов, Б.А. Старостин. – Казань: Изд-во Казанского национального исследовательского технического ун-та – КАИ, 2013. – 153 с.
  • Бочарова Т.А. Основы алгоритмизации: учеб. пособие / Т.А. Бочарова, Н.О. Бегункова. – Хабаровск: Изд-во Тихоокеан. гос. ун-та, 2011. – 64 с.
  • Дронова Е.Н. Основные алгоритмические модели: учебное пособие. – Барнаул: АлтГПУ, 2016. – 158 с.
  • Ефимова Ю.В. Практикум по программированию на языке высокого уровня: Учебное пособие. – Казань: Изд-во Казан. Гос. техн. Ун-та, 2012. – 39 с.
  • Зюзьков В.М. Математическая логика и теория алгоритмов: учебное пособие. – Томск: Эль Контент, 2015. – 236 с.
  • Игошин В.И. Теория алгоритмов: учеб. пособие для студ. учреждений сред. проф. образования. – М.: Издательский центр «Академия», 2013. – 320 с.
  • Кравцов А.В. Проблемно ориентированная информатика химико-технологических процессов: учебное пособие / А.В. Кравцов, Н.В. Чеканцев, Е.С. Шарова, М.С. Гынзова, Ю.А. Смышляева, Э.Д. Иванчина. – Томск: Изд-во Томского политехнического университета, 2014. – 160 с.
  • Лещинер В.Р. Методические рекомендации по некоторым аспектам совершенствования преподавания информатики и ИКТ. – М.: Изд-во ФИПИ, 2014. – 19 с.
  • Ничушкина Т.Н. Разработка алгоритмов простейших программ / Т.Н. Ничушкина, В.В. Гуренко. – М.: МГТУ им. Н.Э. Баумана, 2014. – 47 с.
  • Павлова Т.Ю. Структурное программирование в ИСР «Free Pascal». – Кемерово: Изд-во Кемеровского государственного университета, 2012.- 91 с.
  • Петров В.Ю. Информатика. Алгоритмизация и программирование: учебное пособие. Часть 1. – СПб: Университет ИТМО, 2016. – 91 с.
  • Пильщиков В.Н. Рекурсивные функции и процедуры, зависящие от целочисленных параметров / В.Н. Пильщиков, Е.А. Бордаченкова, И.В. Горячая. – М: Изд-во МГУ, 2011. – 12 с.
  • Попова И.Г. Программирование и алгоритмизация: учебное пособие в 2-х частях. Часть 1. – Северск: СТИ НИЯУ МИФИ, 2015. – 41 с.
  • Попова И.Г. Программирование и алгоритмизация: учебное пособие в 2-х частях. Часть 2. – Северск: СТИ НИЯУ МИФИ, 2015. – 75 с.
  • Пшеничников В.В. Основы программирования: учеб. пособие. – Самара: Изд-во Самар. гос. аэрокосм. ун-та, 2011. – 80 с.
  • Семакин И.Г. Информатика и ИКТ: Учебник для 10-11 класса / И.Г. Семакин, Е.К. Хеннер. – М.: БИНОМ. Лаборатория знаний, 2012. – 249 с.
  • Семакин И.Г. Основы алгоритмизации и программирования: учебник для студ. учреждений сред. проф. образования / И.Г. Семакин, А.П. Шестаков. – М.: Издательский центр «Академия», 2012. – 400 с.
  • Третьякова Н.М. Turbo Pascal. Решение инженерных задач: учебное пособие. – Сыктывкар: СЛИ, 2012. – 136 с.
  • Халитова З.Р. Практикум по разработке консольных приложений в среде Delphi. Учебно-методическое пособие / З.Р. Халитова, Н.А. Хисматуллина. – Казань: Казанский федеральный университет, 2012. – 85 с.