Тема 1.1. Введение в теорию алгоритмов 1.1.webp
Понятие алгоритма

111_01111_02

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

Алгоритмизация – это описание очередности выполнения различных операций, необходимых для решения какой-либо задачи, в форме алгоритма. То есть, алгоритмизация – это разработка алгоритма.

Термин “алгоритм” происходит от имени узбекского ученого IX века аль-Хорезми́, который изложил правила арифметических действий над числами в десятичной системе счисления. Эти правила и называли алгоритмами.

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

Пример (линейного) алгоритма:

111_03111_04

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

  1. Последовательная декомпозиция задачи, выделение автономных этапов вычислительного процесса и разделение каждого этапа на отдельные шаги.
  2. Формализация задачи, перевод задачи на язык математических формул, уравнений, отношений.
  3. Построение алгоритма, определение общего порядка выполнения этапов и/или шагов.
  4. Проверка правильности алгоритма.

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

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

Свойства алгоритма:

  1. Дискретность (прерывность, раздельность) – алгоритм должен состоять из последовательности законченных действий – шагов. Переход к следующему шагу возможен лишь после завершения предыдущего.
  2. Определенность – каждое правило алгоритма должно быть четким, однозначным.
  3. Массовость – возможность решения по одному алгоритму множества однотипных задач.
  4. Результативность – алгоритм должен обеспечивать возможность получения результата после конечного числа шагов.

Способы описания алгоритмов

1. Словесный – это последовательное описание основных этапов обработки данных в произвольном изложении на естественном языке.

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

  1. Если числа равны, то взять любое из них в качестве ответа, в противном случае – продолжить выполнение алгоритма;
  2. Определить большее из чисел;
  3. Заменить большее число разностью большего и меньшего чисел;
  4. Повторить алгоритм сначала.

2. Графический – это метод блок-схем.

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

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


БлокОписание
111_05Начало и конец алгоритма (для функций "Вход", "Выход")
111_06Блок обработки. Внутри блока записываются формулы, обозначения и функции
111_07Блок условия. Внутри блока записываются условия выбора направления действия алгоритма
111_08Блок предопределённого процесса (функция / подпрограмма)
111_09Блок ввода информации
111_10Блок цикла с известным количеством повторений
111_11Блок вывода информации на печатающее устройство
111_12Соединительный блок


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

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

Пример:

алг Сумма квадратов (арг цел n, рез цел S)

дано | n > 0

надо | S = 1*1 + 2*2 + 3*3 + ... + n*n

нач

цел i

ввод n;

S:=0

нц для i от 1 до n

S:=S+i*i

кц

вывод "S = ", S

кон

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

Пример:

#include 

using namespace std;

int NOD(int x, int y)

{

if (x != 0)

return NOD(y%x,x);

else

return y;

}

int NOK(int x, int y)

{

return (x / NOD(x, y)) * y;

}

int main ()

{

setlocale (LC_ALL, "rus");

int x, y;

cin >> x >> y;

cout << "НОД этих чисел = " << NOD(x, y) << endl;

cout << "НОК этих чисел = " << NOK(x, y) << endl;

return 0;

}

Данные и величины

Величины делятся на константы и переменные.

У каждой переменной или константы есть три основных свойства:

  • Имя (например, константа может иметь имя X – икс);
  • Значение (например, константа X может иметь значение 1);
  • Тип (например, константа X, равная единице, имеет целочисленный тип данных).

Каждая величина занимает определенное место в памяти – ячейку, а значение этой величины определяется двоичным кодом в этой ячейке.

111_13

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

111_14

Например, при решении квадратного уравнения 𝑎𝑥2 + 𝑏𝑥 + 𝑐 = 0

  • исходными данными являются коэффициенты a, b, c
  • промежуточными данными является дискриминант D
  • результатами являются корни x1 и x2.
Тренажёр