Линейные структуры языка программирования

Линейный алгоритм. Понятие и особенности. Блок-схема

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

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

Алгоритмический язык

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

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

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

Их несколько: — конечность. Любой алгоритм должен быть завершённым, а окончание наступает после выполнения определённого числа шагов; — однозначность, понятность. Не допускается разных толкований, неопределённости и двусмысленности — всё должно быть чётко и ясно, а также понятно исполнителю — и правила выполнения действий линейного алгоритма, и сами действия; — результативность. Итог работы — результат, полученный за конечное число шагов; — универсальность, массовость. Качественный алгоритм способен решать не одну задачу, а целый класс задач, имеющих схожую постановку/структуру.

Читайте также:  Модели данных языков программирования

Линейная структура

Любой алгоритм составляется из ряда базовых структур. Простейшей базовой структурой является следование — структура с линейными характеристиками. Из этого можно сформулировать определение.

Линейный алгоритм — это алгоритм, образуемый командами, которые выполняются однократно и именно в той последовательности, в которой записаны. Линейная структура, по сути, проста. Записать её можно как в текстовой, так и в графической форме.

Представим, что у нас стоит задача пропылесосить ковёр в комнате. В текстовой форме алгоритм будет следующим: — принести пылесос к месту уборки; — включить; — пропылесосить; — выключить; — унести пылесос.

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

Теперь поговорим про графическую форму представления.

Блок-схема

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

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

Screenshot_1-1801-a35d16.png

Блок ввода-вывода данных (отображает список вводимых и выводимых переменных):

Screenshot_2-1801-52cab0.png

Арифметический блок (отображает арифметическую операцию/группу операций):

Screenshot_3-1801-df500e.png

Условный блок (позволяет описать условие). Алгоритмы с таким блоком используются при графической визуализации алгоритмов с ветвлением:

Screenshot_4-1801-3103cc.png

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

Screenshot_5-1801-f1511b.png

А вот, как решается задача по нахождению площади треугольника по формуле Герона. Здесь a, b, c – это длины сторон, S – площадь треугольника, P – периметр.

Screenshot_6-1801-c010e2.png

Следует обратить внимание, что запись «=» — это не математическое равенство, а операция присваивания. В результате этой операции переменная, стоящая слева от оператора, получает значение, которое указано справа. Значение не обязательно должно быть сразу определено (a = 3) — оно может вычисляться посредством выражения (a = b + z), где b = 1, a z = 2.

Примеры линейных алгоритмов

Если рассмотреть примеры решения на языке Pascal (именно этот язык до сих пор используется для изучения основ алгоритмизации и программирования), то можно увидеть следующую картину:

Screenshot_7-1801-f9ba66.png

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

Screenshot_8-1801-8a0c1b.png

Как составить программу линейной структуры?

Порядок следующий: — определите, что именно относится к исходным данными, а также каков типы/класс этих данных, выберите имена переменных; — определите, каков тип данных будет у искомого результата, выберите название переменных (переменной); — определите, какие математические формулы связывают результат и исходные данные; — если требуется наличие промежуточных данных, определите класс/типы этих данных и выберите имена; — опишите все используемые переменные; — запишите окончательный алгоритм. Он должен включать в себя ввод данных, вычисления, вывод результатов.

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

Источник

7.2. Программирование линейных и разветвляющихся структур алгоритмов

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

7.2.1. Оператор перехода Goto

Его еще называют оператором безусловного перехода . Данный оператор служит для безусловной передачи управления помеченному оператору. Формат оператора Goto иллюстрирует рисунок 7.2. <Оператор_Goto>::= Goto Рисунок 7.2 – Синтаксическая диаграмма оператора Goto 142

Оператор Goto указывает, какой оператор должен выполняться следующим. В языке имеется ряд ограничений на использование операторов Goto : 1) с помощью Goto нельзя переходить внутрь производных операторов, не содержащих данный оператор Goto (составного оператора, операторов For, Repeat, While, If, Case, With ); 2) с помощью оператора Goto запрещен переход из одной альтернативы в другую в выбирающих операторах ( If, Case ); 3) с помощью оператора Goto нельзя входить в подпрограмму или выходить из нее. Пример 7.2. Пример некоторой абстрактной программы, использующей оператор Goto . ——————————— Label L1, L2, L3, L4; ———————————

Begin
Goto L3;
Begin оператора>
L3: Goto L4;
Goto L3
End;
L4: If A > B Then
L1: Goto L2
Else
L2: Goto L1

End; ——————————— Наличие оператора Goto делает программу ненаглядной, трудночитаемой, трудноотлаживаемой. Программа с Goto не является структурированной. Желательно использовать операторы Goto минимально, а лучше вообще не использовать. 143

7.2.2. Условный оператор If

Оператор If является производным оператором. Относится к группе выбирающих операторов . Используется в разветвляющихся программах для выбора того или иного участка вычислений в зависимости от выполнения некоторого условия. Поэтому его еще называют оператором условного перехода . Формат оператора If представляет рисунок 7.3. <Оператор_If>::= If Then Else Рисунок 7.3 – Синтаксическая диаграмма оператора If Здесь в переводе с английского: If – если, Then – то, Else – иначе. Смысл оператора: если логическое выражение истинно (принимает значение True ), то выполняется . В противном случае выполняется . После выполнения любого из следующим выполняется оператор, записанный за оператором If . В операторе If после слов Then и Else можно записать только один оператор. Если необходимо записать группу операторов, используют операторные скобки Begin End , т.е. составной оператор. Пример 7.3. Вычислить sin(x), если 0 ≤ x ≤ 1; Z = 5x + 3, иначе. Решение: If (X >= 0) And (X

Z := sin(X) Else Z := 5 * X + 3; Writeln (Z); Независимо от того, выполняется ветвь Then или Else , следующим в примере 7.3 будет выполняться оператор Writeln . Следующий выполняемый оператор может быть указан и в самом операторе If с помощью оператора Goto . Пример 7.4. Указание в операторе If следующего выполняемого оператора. If X * 2 + Y * 2 > sin(Z) Then Goto M1 Else Goto M2; Однако следует напомнить, что использование оператора Goto нежелательно. Конструкция Else <Оператор_2>в операторе If необязательна (см. рисунок 7.3). Это соответствует алгоритму: если выражение истинно, выполняется, в противном случае следующий оператор. Конструкция оператора If без Else называется сокращенной формой оператора If , конструкция с Else – полной формой . Возможно использование вложенного оператора If, т.е. оператор, записанный после Then или Else, также может быть условным. Пример 7.5. Вычислить: 0, если x = 0; Z = 5x, если x > 0; x 2 , если x < 0. Решение: If X = 0 Then Z := 0 Else 145

If X > 0 Then Z := 5 * X Else Z := X * X; В прмере 7.5 используется две полных формы оператора If . Если при записи вложенного оператора If используется его сокращенная форма, то считается, что служебное слово Else относится к последнему оператору If . Пример 7.6. Использование сокращенной формы оператора If во вложенном операторе. If A <> B Then If C <> D Then E := False Else E := True; В данном примере служебное слово Else относится к последнему оператору If . Таким образом, эта конструкция эквивалентна следующей записи: If A <> B Then Begin If C <> D Then E := False Else E := True End; Для того чтобы избежать ошибок использования сокращенной формы во вложенном операторе If , рекомендуется выделять нужную форму оператора If с помощью операторных скобок Begin End . Пример 7.7. Как противоположность примеру 7.6. If A <> B Then Begin If C <> D Then E := False End Else E := True; 146

Источник

Оцените статью