Файл: Алгоритмизация как обязательный этап разработки программы(Построение информационной модели разработки программного обеспечения).pdf

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

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

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

Добавлен: 14.03.2024

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

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

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

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

условие

да

нет

Серия команд 1

Серия команд 2

Если <условие>

то <серия команд 1>

иначе <серия команд 2>

конец ветвления

С ветвлением мы встречаемся в самых разнообразных ситуациях. Например, фрагмент инструкции, которую давал своему посланнику принц из сказки о Золушке, мог бы выглядеть так:

Примерить туфельку

Если туфелька девушке впору

то привезти невесту принца во дворец

иначе ехать дальше

конец ветвления

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

⎧ х, при х>=0

Например: y = ⎨

⎩ -x, при х<0

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

x>=0 условие

да

нет

Ввести x

Н

Y:=x

Y:=-x

Вывести Y

КН

Часто команда ветвления используется в алгоритмах при проверке допустимости исходных данных. Например, при вычислении значения функции Y = ‾‾X , если пользователь введет значение Х < 0, необходимо вывести сообщение о неверном вводе и прервать выполнение программы.

Кроме полной формы команды ветвления, рассмотренной выше, используется сокращенная форма.

условие

Серия команд 1

да

нет

Если <условие>

то <серия команд 1>

конец ветвления

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

Пример: Если идет дождь

то взять зонт

конец ветвления

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

Может возникнуть ситуация, когда выбирать приходится не из двух, а из трех и более способов действий. Тогда применяется многократное (многовариантное) ветвление. Примером такого ветвления является фрагмент алгоритма расстановки цветных шариков на соответствующие полки:

  • вынуть шарик из корзины
  • Если шарик белый
  • то поставить шарик на белую полку
  • иначе если шарик черный
  • то поставить шарик на черную полку
  • иначе поставить шарик на красную полку
  • конец ветвления
  • конец ветвления

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

  • вынуть шарик из корзины
  • Выбор
  • при шарик белый то поставить шарик на белую полку
  • при шарик черный то поставить шарик на черную полку
  • при шарик красный то поставить шарик на красную полку
  • конец выбора

Выше отмечалось, что проверка условия должна быть допустимым действием исполнителя. Результатом проверки условия будет некоторое логическое значение: истина или ложь, т.е. в качестве условия может выступать либо логическая переменная, либо выражение, которое может принимать логическое значение. Чаще всего это сравнение. Условия могут быть составными, т.е. состоящими из нескольких простых, соединенных знаками логических операций[7;142].

Условие 1 и Условие 2 – такое составное условие выполняется, если одновременно выполняются оба простых условия;

Условие 1 или Условие 2 – такое составное условие выполняется, если выполняется хотя бы одно из простых условий.

Используется также и отрицание:

не Условие – такое составное условие выполняется тогда, когда входящее в него условие не выполняется.

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

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

В языке Бейсик для этого служит оператор условного перехода:

70

80 IF <условие>

THEN <серия команд 1 >

[ELSE <серия команд 2>]

90

Квадратные скобки указывают, что ветвь «иначе» (ЕLSE) может отсутствовать, т.е. возможно сокращенное ветвление.

Здесь оператор ветвления занимает одну логическую строку программы. Ее окончание и есть указатель окончания ветвления, т.е. строка 90 исполняется обязательно, независимо от выполнения условия.

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

80 IF <условие> THEN <N1 > [ELSE <N2 >],

где N1 и N2 – номера строк, с которых следует продолжать исполнение программы в случае выполнения или невыполнения условия.

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


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

Условный оператор записывается так:

If <условие>

then <оператор 1>

else <оператор 2>;

Здесь «оператор 1» и «оператор 2» – операторы, которые могут быть простыми, но могут быть и составными и иметь достаточно сложную структуру. В простейшем случае это может быть последовательность простых операторов, заключенных в операторные скобки.

If <условие>

then

begin

<простой оператор>

…………………….

<простой оператор >

end

else

begin

<простой оператор >

……………………….

<простой оператор >

end;

Важное правило: перед «else» знак «;» не ставится.

В качестве «оператора 1» или «оператора 2» могут вновь выступать условные операторы, тогда придем к случаю многократного, или вложенного, ветвления. Возможность использовать принцип вложенности операторов – одно из основных достоинств языка Паскаль, позволяющее реализовать структурное программирование.

Однако выбор из более чем двух способов действий позволяет сделать и оператор варианта:

Case <переменная> of

<1-е значение переменной > : <оператор 1>

<2-е значение переменной > :<оператор 2>

……………………………………..

<N-е значение переменной > : <оператор N>

else <оператор N+1>

end;

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

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

2.3. Конструкция цикла

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

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

Различают два основных типа циклов: цикл с параметром и цикл с условием.

Цикл с параметром

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

При этом параметр (переменная цикла) изменяется от своего начального значения до конечного с заданным шагом и определяет количество повторений.


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

  • начальное конечное шаг
  • для <имя параметра> от < значение > до < значение > шаг <изменения>
  • параметра параметра параметра
  • нц
  • <тело цикла>
  • кц

Если шаг изменения не указан, по умолчанию он принимает единичное значение.

Порядок исполнения алгоритма:

  • параметр принимает начальное значение;
  • для этого значения исполняется тело цикла;
  • параметр увеличивается на величину шага;
  • проверяется, осталось ли новое значение параметра меньшим или равным заданного конечного значения:
  • если да – тело цикла исполняется вновь для нового значения параметра;
  • если нет, т.е. значение параметра превысило конечное значение – исполнение цикла останавливается (выход из цикла).

Пример. Пусть требуется наполнить пустую 200-литровую бочку с помощью 10-литрового ведра.

алг Бочка

нач

для номер ведра от 1 до 20

нц

наполнить ведро

вылить его содержимое в бочку

кц

кон

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

Однако количество повторений рассчитать не так просто. К тому же все изменится, если, к примеру, взять 5-литровое ведро. Поэтому лучше взять в качестве параметра количество литров (объем) воды, уже находящейся в бочке.

алг Бочка

нач

для объем воды от 0 до 200 шаг 10

нц

наполнить ведро

вылить его содержимое в бочку

кц

кон

Теперь для 5-литрового ведра изменится только шаг.

Если начальное значение параметра больше конечного – шаг следует принять отрицательным. В нашем примере это ситуация выливания воды из бочки.

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

Бейсик

60 FOR <имя параметра> = <начальное> TO <конечное> STEP <величина>

значение значение шага

70

80 <тело цикла>

120 NEXT [<имя параметра>]

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

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

Паскаль

For <имя параметра>:=<начальное значение> to <конечное значение> do < тело цикла >


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

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

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

Если начальное значение параметра превышает конечное, предусмотрен отрицательный шаг – минус единица. Тогда запись выглядит так:

For <имя параметра>:=<начальное значение> downto <конечное значение> do < тело цикла >

На каждом шаге исполнения цикла параметр изменяется на единицу.

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

Если вдуматься, цикл с параметром есть, по сути, сокращенная запись линейного алгоритма. Мы знаем, что надо записать определенную группу команд заданное число раз, и в принципе такую замену, хотя и нерациональную, можно было бы произвести[5;21]

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

Цикл с условием

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

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

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

Цикл с предусловием (цикл «пока»)

Проверка условия происходит перед очередным исполнением тела цикла.

Запись на алгоритмическом языке:

пока < условие >

нц

< тело цикла >

кц

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