Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Delphi_Ч1.doc
Скачиваний:
7
Добавлен:
02.11.2018
Размер:
2.38 Mб
Скачать

Ограниченный тип данных.

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

Диапазон значений ограниченного типа задается выражением вида: <минимальное значение>..<максимальное значение>.

Например:

type TCaps = ‘A’..‘Z’;

var bigLetter : TCaps; month : 1..12;

В этих примерах переменная bigLetter может принимать только символы латинских букв в верхнем регистре, а переменная month значения от 1 до 12.

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

В компиляторе Object Pascal имеется опция, позволяющая включить проверку диапазона при присваивании значения переменной ограниченного типа – {$R+}. Её можно включить в том месте вашей программы, где нужно начать проверку диапазона, и выключить в любом месте опцией {$R-}. При попытке присвоить переменной ограниченного типа значение, выходящее за пределы заданного поддиапазона, сгенерируется исключение с сообщением “Range check error”.

Интервальный тип можно использовать для задания множества данных этого типа путем заключения интервала в квадратные скобки. Например, множество сточных русских букв можно задать таким образом ['а'..'я']. Для определения принадлежности некоторого символа к определенному таким образом множеству можно использовать операцию in, которая возвращает true, если символ принадлежит множеству и false – если не принадлежит. Например, результатом вычисления выражения ‘5’ in [‘0’..’9’], будет true.

      1. Применение инструкции цикла for

Инструкция for…to…do позволяет последовательно перебирать значения некоторой переменной порядкового типа в заданном диапазоне, либо от начального значения до конечного значения, либо наоборот. С помощью этой инструкции легко организовать цикл. Особенность таких циклов в том, что число повторений заранее известно.

В общем виде инструкция for…to…do записывается так.

Рисунок 6.1– Синтаксис инструкции for…todo

На этом рисунке <параметр цикла> - переменная порядкового типа; <начальное значение> - выражение, определяющее начальное значение <параметра цикла>; <конечное значение> - выражение, определяющее конечное значение <параметра цикла>.

Следует отметить, что если между словами begin и end находится только одна инструкция, то операторные скобки: begin и end можно не писать.

Инструкция цикла for…to…do выполняется следующим образом:

  1. Вычисляются <начальное значение> и <конечное значение >.

  2. Переменной <параметр цикла> присваивается <начальное значение>.

  3. Если значение <параметра цикла> превышает <конечное значение>, то цикл заканчивается.

  4. Выполняется тело цикла.

  5. Переменной <параметр цикла> присваивается следующее значение.

  6. Выполнение продолжается с пункта 3.

Количество повторений тела цикла можно вычислить по формуле:

Ord(<конечное значение>) – ord(<начальное значение>)+1;

Если <начальное значение> больше чем <конечное значение>, то тело цикла не будет выполнено ни разу.

Если <начальное значение> и <конечное значение> одинаковы, то тело цикла выполняется один раз.

Переменную <параметр цикла> можно использовать внутри цикла (но не изменять).

Если в инструкции for…to…do вместо слова to записать downto, то после очередного выполнения инструкций тела цикла, значение <параметра цикла> будет не увеличиваться, а уменьшаться. Начальное значение в этом случае должно быть больше чем <конечное значение>.

В рассмотренном ниже примере цикл for…to..do используется для того, чтобы добавить 10 символов ‘*’ к тексту в компоненте Label1.

for i:=1 to 10 do

begin

label1.caption:=label1.caption + ‘*’;

end;

В следующем примере все прописные буквы текстового компонента Edit1 заменяются соответствующими строчными буквами. Для определения длины строки здесь используется функция length().

const rus=['А'..'Я']; lat=['A'..'Z'] ;

var ch: char; i:integer; s:string;

begin

s:= Edit1.Text; // Запоминаем текст компонента в переменной типа String

for i:=1 to length(s) do // Цикл по символам строки

begin

ch:= s[i]; // Очередной символ

if (ch in rus) or (ch in lat) then s[i]:= chr(ord(ch) +32);

Edit1.Text := s; // Вывод результата

end;

end;