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

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

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

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

Добавлен: 29.03.2023

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

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

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

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

Рассмотрим третий тип циклического алгоритма - цикл с постусловием (Рис. 4) [15, c. 245].

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

Серия команд

Условие

Да

Нет

Рис. 4. Цикл с постусловием типа до

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

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

Для организации любого цикла необходимо следующее [13, c. 22]:

1. Задать перед началом цикла начальные значения параметров цикла.

2. Изменять параметры цикла перед каждым новым повторением цикла.

3. Проверять условие повторения или окончания цикла.

4. Переходить к началу цикла, если он не закончен, или выходить из цикла.

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

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

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

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

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


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

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

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

Линейными называются программы, состоящие из простых команд (операторов) ввода, математических расчетов (формул) и команд вывода результатов.

В программировании под оператором понимается некоторая операция, которая совершается над какими-то данными (операндами). Существует несколько видов операторов:

- унарные - операции с одним аргументом (инверсия, отрицание, смена знака и т.п.);

- бинарные - операции, которые производятся с двумя аргументами (сложение, вычитание, деление и т.п.);

- тернарные - операции, которые производятся с тремя аргументами.

Под командами в программировании понимают несколько другие действия. Например, к командам могут быть отнесены такие, как создать файл, изменить текущую директорию (каталог, папку), удалить, переименовать файл, включить «эхо», изменить атрибуты файлов и т.д.

В линейной программе на языке программирования Паскаль присутствуют три базовых блока [10, c. 12]:

1. Команды ввода данных

2. Математические расчеты

3. Вывод результатов.

Простыми командами (простыми указаниями алгоритма) называются команды, которые не используют условия в своем исполнении. К числу простых операторов принадлежат команды (операторы) присваивания, ввода и вывода данных, вызова вспомогательного алгоритма — подпрограммы.

Оператор/команда присваивания задает или изменяет значение определенной переменной. При этом изменяется содержание ячейки памяти, которая отведена для этой переменной.

Оператор присваивания: переменная := выражение;

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

При выполнении этого оператора сначала вычисляется значение выражения, а затем это значение присваивается переменной.


Пример 1:

a:=1;

b:=a+2;

c:=’пример’

Слева от знака «:=» расположено имя переменной, справа — значение или имя другой переменной или выражение.

Операторы ввода данных: Read (список_переменныx);

где список_переменныx – перечень вводимых переменных, разделенных запятыми (объявленных заранее в разделе описания переменных).

При выполнении данного оператора пользователь с клавиатуры должен ввести значения указанных переменных. Значения должны соответствовать типам переменных, разделять их при вводе нужно пробелом или клавишей Enter. После выполнения курсор остается на той же строке [8, c. 32].

Пример 2:

Read(a);

Read(a,b);

Readln (список_переменныx);

где список_переменныx – список вводимых переменных, разделенных запятыми (объявленных заранее в разделе описания переменных).

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

Операторы вывода данных: Write ('комментарий',список_переменныx);

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

Пример 3:

Write('a=',a);

Write('сумма чисел ',a, ' и ',b, ' равна', c);

Writeln ('комментарий',список_переменныx);

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

Рассмотрим линейную программу [10, c. 223].

Руководитель проекта дал задание написать программу для расчета площади прямоугольного земельного участка со сторонами А = 25 единиц и В = 19,5 единиц.

Решение.

1. Математический решение задачи S = ab

2. Объявление переменных.Имена переменных программист вибирает сам, исходя из их смысла.

S-Area,

a-side_a,

b-side_b;

3. Типы переменных.

На данном этапе мы видим, что А — целое число (Integer); b- действительное число (Real). При умножении целого числа на действительное получим действительное. Итак Area — действительное число (Real);

1 Var side_a : Integer;

2 side_b, Area : Real;

3 BEGIN

4 side_a:=25;

5 side_b:=19.5;

6 Area := side_a * side_b;

7 Writeln('Area is =', Area:2:2);

8 Writeln('Press Enter to Exit');

9 readln;

10 END.

Для проверки наличия в программе синтаксических ошибок нажимаем F9. Для запуска программы на выполнение нажимаем Ctrl + F9.


Недостатком программы является то, что при изменении значений сторон земельного участка нужно каждый раз модифицировать программу. Так что нужно добавить команды на запрос данных от пользователя. А это выполняют команды ввода / вывода данных [10, c. 227].

1 Var side_a : Integer;

2 side_b, Area : Real;

3 BEGIN

4 Write('Side A='); Readln (side_a);

5 Write('Side B='); Readln (side_b);

6 Area := side_a * side_b;

7 Writeln('Area is =', Area:2:2);

8 Writeln('Press Enter to Exit');

9 readln;

10 END.

Объявление переменных начало программы.

Запрос значения стороны А. После введения числа нажимаем Enter. Число A переменной side_a.

Запрос значения стороны B. После введения числа нажимаем Enter. Число B переменной side_b.

Рассчитать площадь.

Вывести на экран сообщение Area is = и ее значение с двумя знаками после запятой (форматирование результата).

Сообщение, что нужно нажать Enter для выхода.

Завершение программы.

Для проверки наличия в программе синтаксических ошибок нажимаем F9. Для запуска программы на выполнение нажимаем Ctrl + F9.

Тут необходимо отметить, что не всегда длина стороны А будет выражаться целым числом. Поэтому, чтобы обеспечить корректное выполнение программы для произвольных чисел нужно объявить переменную А как действительную [10, c. 230].

1 Var side_a : Real;

2 side_b: Real;

3 Area : Real;

4 BEGIN

5 Write('Side A=');

6 Readln (side_a);

7 Write('Side B=');

8 Readln (side_b);

9 Area := side_a * side_b;

10 Writeln('Area is =', Area:2:2);

11 Writeln('Press Enter to Exit');

12 readln;

13 END.

Рассмотрим еще один пример задачи.

Дан земельный участок прямоугольной формы со сторонами А и В. Цена 1 метра ограждения С рублей. Написать программу, которая будет рассчитать цену материала для ограждения [3].

Решение.

1. Чтобы рассчитать цену ограждения нужно найти периметр. P = 2 * (a + b);

2. Чтобы рассчитать цену материалов - нужно периметр умножить на цену за 1 метр ограждения. Сумма = периметр * цену или Сумма = (2 * (a + b)) * c.

Теперь рассмотрим переменные и их типы:

- стороны участка: А - side_a, B - side_b;

- цена – Cina;

- периметр - Perimetr.

Типы переменных: side_a. side_b действительные числа (Real), их длина выражаться не обязательно только в метрах (метр и сантиметр).

Cina - действительное число (Real), цена идет в рублях и копейках, даже если количество копеек равна нулю.

Perimetr - действительное число (Real), потому что складываем и умножаем действительные числа.

Summa – действительное число (Real).

Для расчета компьютер должен знать определенные данные. А именно: длины сторон, цену за 1 метр материала для ограждения. Итак, «входящими» данным для программы будут side_a, side_b, Cina.


Промежуточным результатом будет значение Perimetr.

Результатом будет Summa.

1 Var side_a : Real;

2 side_b: Real;

3 Perimetr : Real;

4 Cena : Real;

5 Summa : Real;

6 BEGIN

7 Write('Side A='); Readln (side_a);

8 Write('Side B='); Readln (side_b);

9 Write('Cina ='); Readln (Cena);

10 Perimetr :=2 * (side_a + side_b);

11 Summa := Cena * Perimetr;

12 Writeln('Money =', Summa:2:2);

13 Writeln('Press Enter to Exit');

14 readln;

15 END.

3.2. Программы с использованием ветвлений

В языке Паскаль имеется оператор ветвления. Другое его название — условный оператор. Формат полного оператора ветвления следующий:

if <логическое выражение> then <оператор1> else <оператор2>

Здесь if — «если», then — «то», else — «иначе».

Условие - это логическое выражение, от которого зависит выбор одной из двух альтернативных ветвей алгоритма. Если условие принимает значение true (истина), выполняется оператор1, помещенный за ключевым словом then. Иначе выполняется оператор2, записанный за ключевым словом else (в этом случае оператор1 опускается) [8, c. 23].

Когда указанные операторы выполнены, то программа переходит к выполнению команды, стоящей после оператора if.

Ключевое слово else может как присутствовать, так и отсутствовать в операторе if, например:

if <логическое выражение> then <оператор1>

Но тогда в случае, когда не выполнено логическое условие, то управление передается оператору, которые стоит в программе после конструкции if.

Отметим, что синтаксис языка Паскаль позволяет записать только один оператор после ключевых слов then и else, вследствие этого группа инструкций должна быть объединена в составной оператор (заключить между служебными слова begin и end). Иначе происходит логическая ошибка программы, и компилятор ошибок не выдает, однако программа все-таки работает неправильно [8, c. 24].

В процессе создания программы часто приходится производить выбор одного из нескольких альтернативных путей выполнения программы. Подобный выбор организуется при помощи оператора if. Однако для большего удобство используют другой специальный оператор выбора case либо с ключевым словом else.

Рассмотрим примеры сокращенного варианта ветвления [8, c. 24].

Пример 1. Пусть дано два числа А и В, которые не равны между собой. Найти максимальное число.

Решение.

If (a>b) then max:=a;

If (b>a) then max:=b;

1 var a, b:real;

2 max:real;

3 BEGIN

4 write('Nomber A=');readln(a);

5 write('Nomber B=');readln(b);

6 If (a>b) then max:=a;

7 If (b>a) then max:=b;

8 Writeln('Max nomber is', max);

9 write('Press Enter to Exit');

10 readln;

11 END.

Пример 2. Дано два числа А, В неравных между собой. Найти разницу между большим и меньшим числом.