Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Лекции по Turbo Pascal [12].pdf
Скачиваний:
71
Добавлен:
02.05.2014
Размер:
1.06 Mб
Скачать

Одесский колледж компьютерных технологий “СЕРВЕР”

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

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

=

равно;

<= меньше или равно;

<> не равно;

>= больше или равно;

<

меньше;

> больше.

Примеры использования операций отношения

(допустим, с=6)

done:=5<0;

{done = false}

 

done:=c<=2;

{done = false}

 

done:=(c<=10) and (c>=0);

{done = true}

Логическая функция ODD(x) определяет чётность целого числа x. Возвращает значение true, если x нечётно и false в противоположном случае.

К логическим переменным могут применяться операции отношения. Упорядочены логические (булевские) переменные следующим образом: FALSE < TRUE.

При использовании нескольких логических выражений каждое из них должно быть заключено в скобки:

(x<5) and (x>0) (x<y) or (not f).

Выбор действий.

Вы уже усвоили команду IF. Вспомните сказку про Илью Муромца. Хорошо, что дорога перед богатырём раздваивалась, но ведь она могла разветвляться и на три, и на четыре дороги. Конечно, можно применить и команду IF, но для таких ситуаций более подходит оператор CASE.

Оператор выбора Case является обобщением оператора if - он даёт возможность выполнить одно из нескольких действий в зависимости от значения переключателя.

В качестве переключателя используется выражение, которое располагается между ключевыми словами case и of. Результатом этого выражения может быть только значение порядкового типа, общее количество элементов которого не превышает 65535.

Схематично оператор выбора можно представить так: Case переключатель of

Список констант 1 : Оператор 1; Список констант 2 : Оператор 2;

...

Список констант N : Оператор N; else Оператор E;

end;

29

Одесский колледж компьютерных технологий “СЕРВЕР”

Вычисленное значение переключателя определяет, какой из операторов должен быть выполнен. Если переключатель принимает значение из Списка констант 1, то выполняется Оператор 1, а остальные операторы пропускаются. Если переключатель принимает значение из Списка констант 2, то выполняется Оператор 2. Оператор Е будет выполняться в том случае, если значение переключателя не совпало ни с одним из значений Списков констант от 1-го до N-го.

В неполной форме оператора Case ветвь else отсутствует. В этом случае, если значение переключателя не совпало ни с одним из значений констант выбора, не выполняется ни один из операторов, описанных в Case, и выполняется оператор, стоящий непосредственно после ключевого слова end, замыкающего оператор Сase.

Пример: VAR

N : INTEGER;

BEGIN

CASE N mod 7 OF 0 : N:=0;

1, 6 : N:=-N;

2 . . 5 : N:=2*N; else N:=3*N;

END;

END.

Циклы со счётчиком.

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

Циклы используются и в программировании. Их очень удобно использовать для повторения команд определёное число раз. Начнем с оператора цикла - Цикл со счетчиком. Этот цикл повторяет некоторый оператор (или составной оператор, имеющий конструкцию begin..<операторы>…end) определенное количество раз. С каждым повторением ( витком цикла) изме-

няется некоторая переменная (управляющая переменная цикла).

Есть две разновидоности этого оператора. Первый из них имеет вид:

30

Одесский колледж компьютерных технологий “СЕРВЕР”

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

Где <начальное значение> меньше, чем <конечное значение> .

Управляющая переменная цикла изменяется от начального значения до конечного с шагом +1.

Второй из этих операторов имеет вид:

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

Здесь <начальное значение> больше, чем <конечное значение> . А

управляющая переменная изменяется от начального значения до конечного с шагом -1.

Заметим, что управляющая переменная цикла может быть объявлена только как целый, символьный или логический тип.

Конструкция For ... Do является одной из простейших форм цикла. Используйте её тогда, когда вы знаете, сколько раз вы хотите выполнить цикл.

Рассмотрим пример программы: var

i: Integer; BEGIN

For i : =1 to 10 do WriteLn (‘Hello’);

ReadLn END.

Данная программа распечатывает на экране десять слов “Hello”

В этой программе вы определили переменную i типа Integer. Цикл For работает следующим образом:

Переменная i хранит текущее состояние счётчика цикла. Начальное значение i задаётся равным 1. Затем выполняется оператор (или составной оператор) после do и i увеличивается на 1 до тех пор, пока значение i не превысит конечное значение. Для каждого значения i снова выполняется оператор после do (или составной оператор).

Обратите внимание на несколько правил.

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

2.В теле цикла, то есть в повторяющихся в цикле операторах, нельзя изменять значение управляющей переменной i.

3.После окончания выполнения цикла управляющая переменная i не определена и её текущее значение нельзя использовать вне цикла.

31

Одесский колледж компьютерных технологий “СЕРВЕР”

Как двигать рисунок на экране?

Пример. Сначала попробуем двигать знак «*» по середине экрана слева направо. Эффект движения символа достигается за счёт стирания символа (печать пробела) и печати его в следующей позиции. Обратите внимание на то, каким должен быть шаг цикла! Движение «*» будет происходить достаточно быстро и незаметно для глаза, поэтому необходимо организовать в цикле задержку. В Pascal задержку можно организовать двумя способами:

1)с помощью команды Delay(Ms) где Ms – количество миллисекунд;

2) с помощью «пустого цикла», то есть цикла, внутри которого не выполняется ни одна команда. Подумайте, после какой команды нужно вставить задержку! Затем попробуйте организовать движение справа налево.

Циклы по условию.

Вы читали в детстве сказки?! Представьте себе такую ситуацию. Едут богатыри на битву по дороге, а навстречу им мужик на телеге на ярмарку спешит, но волшебник когда-то сказал ему: если встретишь на дороге богатырей, не едь дальше, а дождись, когда проедет 30 богатырей и тогда езжай дальше. Съехал мужик на обочину и стал богатырей считать. И когда проехало 30 богатырей продолжил он свой путь.

Можно привести множество примеров таких ситуаций: 1) пользователь набирает пароль, пока не наберёт верно; 2) игрок играет, пока не попадёт в цель.

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

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

Первым таким оператором является оператор:

While < условие выполнения тела цикла> Do < тело цикла >

Оператор, следующий за do, (это может быть составной оператор) повторяется, если выполнено условие, указанное после While. Это условие проверяется до выполнения тела цикла, так что если условие изначально не выполнено, то цикл не выполнится ни разу. Рассмотрим пример:

var

i : Char; BEGIN

i : = ‘ ‘;

While (i<>’q’) and (i<>’d’) Do

32

Одесский колледж компьютерных технологий “СЕРВЕР”

begin

Write (‘Enter a value:’); Read (i);

end;

END.

Данная программа просит ввести символ (тип переменная i - символ) столько раз пока не будет введен символ ’q’ или ’d’.

В данной программе необходимо было задать начальное значение переменной i, так как в этом месте памяти может храниться «мусор», оставшийся от последней программы, использовавшей это место в памяти. Программа выдаёт сообщение Enter a value и требует ввода пользователем символа до тех пор, пока введённый символ - не q и не d. Как только будет введено q или d, цикл закончит свою работу.

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

Repeat

< тело цикла >

Until < условие прекращения цикла >

С помощью этого оператора предыдущую программу можно записать

так:

var

i : Char; BEGIN

Repeat

Write (‘Enter a value:’); Read (i)

Until (i =’q’) or (i =’d); END.

Программа продолжает просить пользователя вводить символы, пока он не введёт ‘q’ или ‘d’. Ключевые слова repeat ... until служат метками, показывающими, какие операторы должны выполняться в цикле. Таким образом, отличие цикла Repeat ... Until от While ... Do заключаются в следующем:

1.Условие проверяется после первого выполнения тела цикла.

2.Если условие выполнено, цикл перестаёт выполняться. Важно правило: перед until не должно быть точки с запятой.

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

Конструк-

Когда лучше использовать?

ция цикла

 

For

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

33