Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2012 02 26 Основы программирования в Delphi.docx
Скачиваний:
4
Добавлен:
16.08.2019
Размер:
204.56 Кб
Скачать

Оператор goto

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

Употребление в программах на Object Pascal операторов перехода считается делом недостойным и теоретически избыточным. Передачи управления делают программу непонятной и трудно модифицируемой.

Здесь мы рассматриваем правила goto только потому что такой оператор есть в языке. Тот, кто пока что не знает как обойтись в программе без goto, может его использовать. Но следует сводить количество передач управления в программе к минимуму, а в конечном счете – искоренить эту вредную привычку.

Метки операторов перехода должны быть объявлены с помощью ключевого слова label. Сама метка ставится в точке перехода. Вслед за именем метки следует «двоеточие».

Следующий фрагмент кода иллюстрирует применение оператора перехода при решении известной задачи:

procedure TForm1.Button1Click(Sender: TObject);

var

I: Integer;

label

MyLabel;

begin

Memo1.Clear;

I := 0;

MyLabel:

Inc(I);

Memo1.Lines.Add(IntToStr(I));

if I < 5 then goto MyLabel;

end;

Упражнение. Напишите программу, которая при нажатии на кнопку формы заполняет массив из 100 элементов случайными числами (используйте функцию Random), вводит целое число, заданное пользователем (поместите на форму компонент Edit), ищет заданное число в массиве и выводит сообщение о результате поиска. Как образец, используйте фрагмент кода, приведенный выше.

Оператор case

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

Рассмотрим следующий пример оператора case:

{

Вычисляем размер штрафа Fine за превышение скорости. Размер штрафа пропорционален величине превышения, выраженной в км/час (AmountOverSpeedLimit). Если скорость превышена более чем на 30 км/час водитель лишается прав на срок JailTime.

}

case AmountOverSpeedLimit of

0 : Fine := 0;

10 : Fine := 20;

15 : Fine := 50;

20,

25,

30 : Fine := AmountOverSpeedLimit * 10;

else

begin

Fine := GoToCourt;

JailTime := GetSentence;

end;

end; // case

Оператор case состоит из нескольких частей. Вначале определяется выражение–селектор. В нашем примере селектором является переменная AmountOverSpeedLimit.

Затем следуют определения ветвей, каждая из которых соответствует либо конкретному значению селектора, либо серии возможных значений селектора. Так, если значение AmountOverSpeedLimit равно 0, будет выбрана ветвь 0:. Переменная Fine получит значение 0.

Если значение AmountOverSpeedLimit равно 10, переменная Fine получит значение 20, и т.д. Как только нужная ветвь найдена и выполнен связанный с ней оператор, оставшиеся случаи игнорируются.

Ситуации когда переменная AmountOverSpeedLimit может оказаться равной 20, 25, или 30 объединены в один случай, которому соответствует вычисление штрафа по формуле

Fine := AmountOverSpeedLimit * 10;.

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

20..30: Fine := AmountOverSpeedLimit * 10;.

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

ПРАВИЛО. Селектором в операторе case может быть выражение любого упорядоченного типа (Integer, Word, Byte, Char, Cardinal и т.п.).

Ветви оператора case взаимно исключают друг друга – может быть выполнена только одна из них.

Строковый или вещественный типы селекторов недопустимы:

case SomeStringVariable of

'One' : { code }

'Two' : { code }

end;

Синтаксис оператора case имеет вид

case selector of

value_1: statements_1;

value_2: statements_2;

.

.

.

value_n: statements_n;

else

else_statements;

end;

Оператор case выполняет один из блоков кода, выбирая его по значению выражения–селектора (selector). Тип выражения селектора относится к одному из упорядоченных типов Object Pascal.

Блок кода statements_1 выполняется при условии что значение selector равно (соответствует) value_1, блок кода statements_2 выполняется при условии что значение selector равно (соответствует) value_2 и т.д.

Если значение селектора не соответствует ни одной из ветвей value_1...value_n выполняется блок else_statements.

Блок else не обязателен.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]