Файл: Основные структуры алгоритмов: сравнительный анализ и примеры их использования (способы записи алгоритма).pdf
Добавлен: 24.04.2023
Просмотров: 215
Скачиваний: 1
СОДЕРЖАНИЕ
1.1. Понятие алгоритма, его свойства и способы записи
1.2. Основные структуры алгоритмов, их сравнительный анализ
2.1. Использование линейной структуры на алгоритмическом языке Pascal
2.2. Использование разветвляющейся структуры алгоритма на языке Pascal
Прежде чем проводить сравнительный анализ, требуется определиться, по каким критериям сравнить основные структуры алгоритмов.
Первым критерием будет вопрос о том, в каких случаях будет использоваться та или ирная структура алгоритма. Вторым критерием послужит простота использования структуры алгоритма.
В каких случаях будет использоваться та или иная структура алгоритма? Ветвление в алгоритме используется тогда, когда требуется очередную команду в зависимости от условия. Цикл в алгоритме задействуется тогда, когда есть действия, которые требуется выполнить несколько раз. Следование в алгоритме применяется тогда, когда требуется выполнить простое действие без условий и без повторений.
Теперь про простоту использования. Линейная структура не требует никаких условий, только ввод, действие, вывод. Разветвляющаяся структура требует постановку условия, в ходе которого происходит выбор дальнейшего действия. Циклическая структура тоже требует постановку условия, но в отличие от разветвляющегося алгоритма может повторятся множество раз.
Подводя итог, можно выделить следующее моменты:
- Выделяют три вида структур: линейная (следование), разветвляющаяся и циклическая.
- Линейные алгоритмы описывают линейный вычислительный процесс, этапы которого выполняются однократно и последовательно один за другим.
- Разветвляющийся алгоритм описывает вычислительный процесс, реализация которого происходит по одному из нескольких заранее предусмотренных направлений.
- Алгоритм циклической структуры – алгоритм, содержащий многократно выполняемые участки вычислительного процесса, называемые циклами.
- Все перечисленные структуры имеют один вход и один выход. Их всех также можно соединить друг с другом в любых последовательностях. Любая структура может содержать в качестве одного из блоков любую структуру другого вида.
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]. Ветвление в алгоритме используется тогда, когда требуется очередную команду в зависимости от условия. Цикл в алгоритме задействуется тогда, когда есть действия, которые требуется выполнить несколько раз. Следование в алгоритме применяется тогда, когда требуется выполнить простое действие без условий и без повторений.