Файл: Основные структуры алгоритмов: сравнительный анализ и примеры их использования (способы записи алгоритма).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 24.04.2023

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

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

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

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

Подводя итог, можно выделить следующее моменты:

  1. Выделяют три вида структур: линейная (следование), разветвляющаяся и циклическая.
  2. Линейные алгоритмы описывают линейный вычислительный процесс, этапы которого выполняются однократно и последовательно один за другим.
  3. Разветвляющийся алгоритм описывает вычислительный процесс, реализация которого происходит по одному из нескольких заранее предусмотренных направлений.
  4. Алгоритм циклической структуры – алгоритм, содержащий многократно выполняемые участки вычислительного процесса, называемые циклами.
  5. Все перечисленные структуры имеют один вход и один выход. Их всех также можно соединить друг с другом в любых последовательностях. Любая структура может содержать в качестве одного из блоков любую структуру другого вида.

2. Практическая часть

2.1. Использование линейной структуры на алгоритмическом языке Pascal

Возьмём для примера простую и наглядную задачу. Требуется сложить два любых простых числа и получить результат. Составим блок схему для данного алгоритма (Рис.5):


Рис.5

Собственно, сам алгоритм в Pascal:

program sum;

var

a,b,s:integer;

begin

writeln('Нахождение суммы чисел ');

write('Введите первое число ');readln(a);

write('Введите второе число ');readln(b);

s:= a+b;

writeln('Сумма чисел = ', s);

end.

Выполнение алгоритма в среде PacalABC.NET (Рис.6):

Рис.6

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

2.2. Использование разветвляющейся структуры алгоритма на языке Pascal

Теперь, для примера, рассмотрим такую задачу. Эта задача является классической в своём роде. Требуется решить квадратное уравнение D = b² - 4ac. Составим блок схему для данного алгоритма (Рис.7):

Рис.7

Собственно, сам алгоритм в Pascal:

program ifthenelse;

var

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

Begin

writeln('Решение квадратных уравнений ');

writeln('Введите коэффициенты квадратного уравнения ');

write('a = '); readln (a);

write('b = '); readln (b);

write('c = '); readln (c);

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

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

else

begin

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

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

writeln(' x1= ',x1);

writeln(' x2= ',x2);

end;

end.

Выполнение алгоритма в среде PacalABC.NET (Рис.8):

Рис.8

2.3. Использование циклической структуры на языке Pascal

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

Собственно, сам алгоритм в Pascal:

program fortodo;

var

a,i,max:integer;

begin

writeln('Нахождение наибольшего числа ');

writeln('Введите 10 целых чисел ');

for i:=1 to 10 do

begin

readln(a);

if i = 1 then max:= a;

if a > max then max := a;

end;

writeln('Наибольшее число = ', max);

end

Выполнение алгоритма в среде PacalABC.NET (Рис.9):

Рис.9

2.4 Использование нескольких разных структур в одном алгоритме на языке C++ в среде разработки Arduino ide

Сформулируем задачу. Требуется, чтобы робот двигался по треку из чёрной линии. Оговорюсь сразу, что блок схему для данной задачи я составлять не буду потому, что она получилась бы чересчур громоздкой и потеряла бы свою наглядность. Для удобства я всё закомментировал. Сам алгоритм при этом является полностью рабочим и готовым к использованию в среде Arduino.


Собственно, сам алгоритм движения робота:

int r = 24; //Вводим переменную для определения состояния массива ir датчиков (датчики, отвечающие за ориентацию относительно линии)

int rm = 2; //Вводим переменную предыдущего состояния предыдущего состояния массива ir датчиков

int v = 140; //Максимальная скорость движения (до 255)

int vl = v; //Скорость левого двигателя

int vr = v; //Скорость правого двигателя

int v0 = 0; //минимальная скорость движения

int v1 = int(v*0.515); //скорость умножается на коэффициент квадратичной зависимости

int v2 = int(v*0.699);

int v3 = int(v*0.821);

int v4 = int(v*0.903);

int v5 = int(v*0.958);

int v6 = int(v*0.989);

int v7 = int(v*1); //Максимальная скорость движения

void detect(){ //Функция формирует значения переменной r (состояния массива ir датчиков)

r=0;

if (analogRead(A7) > 1000) r=r+1; //Датчик находится над чёрной линией

if (analogRead(A6) > 1000) r=r+2; //Датчик находится над чёрной линией

if (analogRead(A5) > 1000) r=r+4; //Датчик находится над чёрной линией

if (analogRead(A4) > 1000) r=r+8; //Датчик находится над чёрной линией

if (analogRead(A3) > 1000) r=r+16; //Датчик находится над чёрной линией

if (analogRead(A2) > 1000) r=r+32; //Датчик находится над чёрной линией

if (analogRead(A1) > 1000) r=r+64; //Датчик находится над чёрной линией

if (analogRead(A0) > 1000) r=r+128; //Датчик находится над чёрной линией

}

void touchon(){

while (digitalRead(2) != HIGH); //Включение сенсорной кнопки (запуск движения робота)

}

void setup() {

pinMode(2, INPUT);//touch Устанавливает режим работы заданного входа (2 pin)

pinMode(5, OUTPUT); //Устанавливает режим работы заданного выхода(5 pin) левый двигатель

pinMode(6, OUTPUT); //Устанавливает режим работы заданного выхода(6 pin) правый двигатель

touchon();

}

void loop() {

detect(); //проверка датчиков массива ir, и включение двигателей в соответствии с значением переменной r

if (r == 0 && rm == 1) {vl = v0; vr = v7;} //Возвращение на линию, если линия находится с левой стороны

if (r == 1) {vl = v0; vr = v7;}

if (r == 3) {vl = v1; vr = v7;}

if (r == 2) {vl = v2; vr = v7;}

if (r == 6) {vl = v3; vr = v7;}

if (r == 4) {vl = v4; vr = v7;}

if (r == 12) {vl = v5; vr = v7;}

if (r == 8) {vl = v6; vr = v7;}

if (r == 24) {vl = v7; vr = v7;}

if (r == 16) {vl = v7; vr = v6;}

if (r == 48) {vl = v7; vr = v5;}

if (r == 32) {vl = v7; vr = v4;}

if (r == 96) {vl = v7; vr = v3;}

if (r == 64) {vl = v7; vr = v2;}

if (r == 192){vl = v7; vr = v1;}

if (r == 128){vl = v7; vr = v0;}

if (r == 0 && rm == 128) {vl = v7; vr = v0;} //Возвращение на линию, если линия находится с правой стороны

analogWrite(5, vl); //Задаётся скорость левого двигателя

analogWrite(6, vr); //Задаётся скорость правого двигателя

if (r != 0) rm = r;

}

Алгоритм движения робота в среде Arduino ide (Рис.10):

Рис.10

Ir датчики (Рис.11):


Рис.11

Движение робота по треку (Рис.12):

Рис.12

Как мы можем наблюдать, в этом алгоритме используются все три основные структуры алгоритмов. Чётко видно, что внутри циклической структуры присутствует такая структура как ветвление. Можно сделать вывод, что в больших и сложных алгоритмах используется всегда несколько структур. Исходя из своего опыта работы с Arduino могу сказать, что в нём практически всегда, за редким исключением, используются циклы.

ЗАКЛЮЧЕНИЕ

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

Во-первых, мы рассмотрели определение алгоритма, его свойства и способы записи. Алгоритмом называется строго определенная последовательность действий, определяющих процесс перехода от исходных данных к искомому результату [3, Стр.8]. Алгоритм обладает определёнными свойствами. К ним относятся дискретность, детерминированность, конечность, массовость и результативность. Существует несколько способов записи алгоритмов. Наибольшее распространение получили следующие способы: графическая (блок-схема), словесная и псевдокоды. Самая простая, понятная, универсальная и наглядная запись алгоритма – это блок-схема.

Во-вторых, перечислили основные структуры алгоритмов, дали им определения и провели сравнительный анализ. В научной и учебной литературе различают три вида структур: линейная, разветвляющаяся и циклическая. Линейные алгоритмы описывают линейный вычислительный процесс, этапы которого выполняются однократно и последовательно один за другим [8, Стр.6]. Линейные алгоритмы принято называть также следованием. Разветвляющийся алгоритм описывает вычислительный процесс, реализация которого происходит по одному из нескольких заранее предусмотренных направлений. Алгоритм циклической структуры – алгоритм, содержащий многократно выполняемые участки вычислительного процесса, называемые циклами. Если алгоритм содержит цикл, внутри которого размещен один или несколько других циклов, то такой алгоритм называется алгоритмом со структурой вложенных циклов [2, Стр.4]. Ветвление в алгоритме используется тогда, когда требуется очередную команду в зависимости от условия. Цикл в алгоритме задействуется тогда, когда есть действия, которые требуется выполнить несколько раз. Следование в алгоритме применяется тогда, когда требуется выполнить простое действие без условий и без повторений.