Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторки 1-6 по Delphi.pdf
Скачиваний:
39
Добавлен:
08.04.2015
Размер:
1.09 Mб
Скачать

Языки программирования

Примечание

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

Операторы множеств

В составе Delphi предусмотрен ряд операторов, позволяющих осуществлять операции над однотипными множествами (табл. 1.4).

 

 

Таблица 1.4. Операторы множеств

 

 

 

Оператор

Операция

Результат

 

 

 

+

Объединение

Новое множество

-

Разность

 

*

Пересечение

 

<=

Подмножество

Логическое значение

>=

Надмножество

 

=

Равенство

 

<>

Неравенство

 

in

Членство

 

Порядок осуществления операций с множествами демонстрирует листинг 1.5.

Листинг 1.5. Демонстрация операций с множествами

type TWeekDay = set of (Mo, Tu, We, Th, Fr, St, Su);

var WD1,WD2,WD3: TWeekDay; begin

WD1:=[Mo];

//

присваивание,

результат WD1=[Mo]

WD2:=WD1+[Tu,We]; //

объединение,

результат WD2=[Mo, Tu, We]

WD3:=WD2-WD1-[Tu];//

вычитание,

результат WD3=[We]

WD3:=[];

// пустое множество, результат WD3=[]

WD1:=[Mo,Su];

 

 

 

// пересечение

WD3:=WD1*[Mo, Tu, We, Th, Fr, St, Su]; // результат WD3=[Mo, Su] if WD1<>WD2 then begin//проверка неравенства

//...

end;

if Mo in WD1 then begin//проверка членства

//...

end;

end.

Составной оператор begin..end

Вне зависимости от назначения разрабатываемого приложения программисту не обойтись без составного оператора begin..end. Задача оператора — указание начала и конца программного блока. Характерным примером подобного блока является создаваемый по умолчанию каркас кода консольного приложения, здесь весь исполняемый код заносится вовнутрь begin..end.

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

5

СКФУ Кафедра компьютерной безопасности

Языки программирования

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

Условные операторы позволяют осуществлять выбор операции во время выполнения программы. В простейшем случае синтаксис команды выглядит следующим образом:

if <логическое выражение = true> then <выражение>;

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

if <логическое выражение = true> then <выражение1> else <выражение2>;

В последнем случае мы осуществляем выбор между двумя выражениями. При соблюдении условия выполняется первая операция, в противном случае управление передается второй операции. Оба варианта применения условного оператора if представлены на рис. 1.1 в виде фрагментов блок-схем.

if .. then

 

if .. then .. else

 

 

 

 

 

 

 

 

 

 

 

false

Логическое

 

Логическое

условие

 

условие

 

 

 

 

true

 

 

true

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выражение

 

Выражение1

 

Выражение2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 1.1. Фрагмент блок-схемы if..then и if..then..else

Простейший пример работы с условным оператором представлен в листинге 1.6. Если A превышает 15, то в переменную B передается произведение переменной A на 15, в противном случае результатом окажется значение A-3.

Листинг 1.6. Демонстрация оператора if..then..else

If A>15 then B:=A*15 else B:=A-2;

В листинге 1.7 предложен более сложный фрагмент кода, демонстрирующий порядок работы с условным оператором. В нашем примере мы осуществляем расчет площади квадрата или круга.

Листинг 1.7. Совместная работа if..then..else с оператором begin..end

var S:Char;

X,Y:Double; begin

WriteLn('Calculation area: "S" - square, "C" - circle');

ReadLn(S); //пользователь вводит символ "S" или "C" if S='S' then

begin

WriteLn('The side of square=?'); ReadLn(X);

Y:=X*X;

WriteLn('Area=',Y); end else

if s='C' then begin

6

СКФУ Кафедра компьютерной безопасности

Языки программирования

WriteLn('Radius=?');

ReadLn(X);

Y:=pi*X*X;

WriteLn('Area=',Y);

end else WriteLn('Wrong symbol!');

ReadLn; end.

Выбор фигуры осуществляется пользователем нажатием определенной символьной клавиши, расчет площади квадрата инициирует символ "S", а круга — "C". Если пользователь ввел любой другой символ, то программа уведомляет его об этом надписью "Wrong symbol!" (неверный символ).

Замечание

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

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

Листинг 1.8. Составное логическое условие в операторе if..then

if (A>15) and ((B=0) or (B=1)) then ...

Условный оператор даст разрешение на выполнение только в случае, когда в A хранится значение, превышающее 15, и в переменной B находится число равное 0 или 1.

Оператор-селектор case

Логическим развитием условного оператора if..then стал оператор-селектор case. Основное преимущество case над своим "коллегой" в том, что он обладает большей наглядностью, чем группа операторов if..then.

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

case <селектор> of <константа1> : <Выражение1>; <константа2> : <Выражение2>;

<константа3> : <Выражение3>; else <Выражение4>;

end;

Оператор case осуществляет проверку на равенство значений селектора и констант оператора. В случае если значение селектора совпадает со значением константы, то выполняется соответствующее константе выражение (листинг 1.9).

Листинг 1.9. Пример обращения к оператору case

type String866 = type AnsiString(866); var X,Y,Z:real;

op:char; begin

WriteLn('X=');

ReadLn(X);

WriteLn(String866('Выбери операцию [+ или - или / или *]'));

7

СКФУ Кафедра компьютерной безопасности

Языки программирования

ReadLn(op);

WriteLn('Y=');

ReadLn(Y);

Case op of

'+': Z:=X+Y;

'-': Z:=X-Y;

'/': if Y<>0 then Z:=X/Y else WriteLn(String866('Ошибка!'));

'*': Z:=X*Y;

else WriteLn(op,String866(' - недопустимая операция!')); end;

WriteLn(X,op,Y,'=',Z);

ReadLn; end.

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

Функционал секции else внутри селектора case аналогичен задачам оператора else в if..then..else. Если селектору не соответствует ни одна из констант, то будет выполнен оператор, следующий за словом else. Если же в конструкции отсутствует ключевое слово else, то выполнению подлежит следующая за оператором строка кода.

Оператор перехода goto

В 1970-е годы, во времена становления языка Pascal достаточно распространенным приемом программирования был стиль, основанный на применении оператора перехода goto. Оператор перехода позволял осуществить быстрый переход от одного участка кода к другому, отмеченному специальной меткой участку (листинг 1.10).

Листинг 1.10. Использование оператора перехода goto

label DemoLabel; //объявление метки

var i:integer=0; begin

DemoLabel: {участок кода отмечен меткой DemoLabel} begin

WriteLn(i);

inc(i);

if i<10 then goto DemoLabel; {переход к метке DemoLabel} end;

ReadLn; end.

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

Внимание!

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

8

СКФУ Кафедра компьютерной безопасности