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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



4.1.3.1 Условный оператор if…then…else

Инструкция if…then…else позволяет выбрать один из двух возможных вариантов выполнения программы. Синтаксис записи этого оператора представлен на рисунке 4.3.

Рисунок 4.3– Синтаксис записи оператора if

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

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

– Если результат принимает значение “истинно”, то выполняется <оператор 1>, следующий за словом then.

– Если результат принимает значение “ложно”, то выполняется <оператор 2>, следующий за словом else.

Обратите внимание! В инструкции if перед словом else точка с запятой не ставится!

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

Procedure

Var a, b, c: real;

Begin

getKoef (a,b,c); // Процедура считывает значения переменных a, b, c

// из текстовых полей формы

If a<>0

Then kvUr(a,b,c); // Вызов процедуры решения квадратного уравнения

Else linUr(b, c) // Вызов процедуры решения линейного уравнения

End;

Если после слов then или else следует выполнить несколько операторов, то их следует объединить в один составной оператор, используя операторные скобки begin … end.

В некоторых задачах, при невыполнении проверяемого условия, делать ничего не надо, то есть <оператор 2> не нужен. В этом случае оператор if можно применять в сокращенной форме. Тогда синтаксис его записи будет иметь вид представленный на рисунке 4.4.

Рисунок 4.4– Запись сокращенного оператора if

Оператор If можно так же использовать и как вложенный, то есть в качестве операторов, записываемых после слов then или else снова можно использовать оператор If, как в полной так и сокращенной форме.

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

Рисунок 4.5– Пример записи вложенных операторов if

Более удобными и наглядными являются цепочки полных операторов if,вкоторых после каждого слова else (за исключением последнего) снова идет полный оператор if. Их удобно использовать при решении многовариантных задач. Такие цепочки достаточно легко анализируются, по структуре подобны рассматриваемому ниже оператору case, и применимы, в отличие от него для проверки любых условий.

Рисунок 4.6– Запись цепочки операторов if

4.1.3.2 Оператор варианта case

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

Синтаксис оператора case представлен на рисунке 4.7.

Рисунок 4.7 – Синтаксис оператора case

В этом описании <селектор> - это выражение, значение которого определяет дальнейшее выполнение инструкции. В частном случае <селектор> может быть просто переменной. В языке Object Pascal селектор может быть только порядкового типа, например, целое число или символ.

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

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

Порядок выполнения инструкции case описан ниже.

– Сначала вычисляется значение выражения-селектора.

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

– Если значение селектора совпадает с одной из констант списка, то выполняется оператор, идущий после этого списка.

– Если значение селектора не найдено ни в одном из списков, то выполняется оператор после слова else.

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

Анализируемый символ, который относится к типу char, передается в процедуру как параметр. Этот параметр, названый symbol, передается по наименованию, следовательно, его можно не только анализировать, но и изменять. Процедура использует эту возможность.

Если вводимый символ является цифрой, то процедура ничего не делает и символ не меняется. Пропускается без изменений символ «Забой» с кодом #8. Это позволяет удалять введенные символы с помощью клавиши «BackSpace». Пропускается и символ «Возврат каретки» с кодом #13.

Символы запятая и точка преобразуются в символ DecimalSeparator, который может быть точкой или запятой, в зависимости от настройки Windows.

procedure testRealKey(var symbol:char; text:String);

Begin

case symbol of

'0'..'9', #8, #13:; // Эти символы пропускаются, никаких действий нет

', ', '. ': // Запятая и точка преобразуются в десятичный разелитель,

begin // но не более одного раза

symbol:=DecimalSeparator;

if pos(DecimalSeparator,text)<>0 then symbol:= #0;

end;

' - ': // Минус допустим только в начале

if length(text)<>0 then symbol:=#0;

else {case symbol}

symbol:=#0;

end {case symbol};

end;

Десятичный разделитель может появиться в любом месте, но только один раз. Для того, чтобы можно было осуществить такую проверку, в процедуру передаются уже набранные символы числа в виде параметра text. Поиск символа DecimalSeparator в набранном тексте производится с помощью стандартной функции pos(), определяющей позицию символа в строке. Функция вернет ноль, если символ не будет найден. Если же функция возвращает не ноль, то вводимый символ заменяется пустым, который имеет код #0.

Символ «минус» может появиться только в начале текста, то есть длина текста при появлении минуса быть рана нулю. Для определения длины строки используется стандартная функция length(). Если длина строки не равна 0, то минус заменяется пустым символом.

Все остальные символы, процедура меняет на пустой символ.

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

4.2 Реализация проекта «Организация разветвлений»

Новый проект мы создадим на основе проекта, созданного для предыдущей лабораторной работы. Откройте новый проект, удалите в нем форму и модуль, и добавьте вместо них разработанную на прошлой лабораторной работе форму и ее модуль. Сохраните модуль формы под именем UnitIfCase, воспользовавшись функцией меню File->SaveAs, а форме присвойте имя frmIfCase. В заголовке формы напишите текст «Программирование разветвлений».



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 218; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.116.118.244 (0.01 с.)