Программирование на языке Delphi/§3

Материал из Викиверситета

Логический тип данных[править]

Логический тип данных в Delphi называется boolean, его размер 1 байт, и он может принимать только два значения True или False (целочисленно, False равен нулю, тогда как True равен 1).

Логические операции:

  • Логическое умножение(конъюкция): AND
  • Логическое сложение(дизъюнкция): OR
  • Отрицание: NOT
  • Исключающее ИЛИ: XOR
  • Логическое повторение(сравнение): = (проверка на равенство), <>(проверка на неравенство)

В целях совместимости с другими языками, в Delphi существуют логические типы других размеров - это WordBool(2 байта) и LongBool(4 байта), работа с которыми в целом аналогична работе с boolean.

Пример программы:

{$APPTYPE CONSOLE}

var
  b,c:boolean;
begin
  b:=2=2;//результат - true
  c= 2=3;//результат false
  if (b>c) then  writeln('b>c'); // boolean -- это порядковый(ordinal) тип, таким образом, false<true
end.

Оператор безусловного перехода goto[править]

Оператор безусловного перехода - известный goto. Оператор goto состоит из двух частей:

 goto <метка>.

Метка - это специальный индентификатор, после которого стоит двоеточие; Оператор goto передает управление оператору, который стоит после метки, также есть некоторые ограничения:

  • Нельзя передавать управление в другую процедуру или функцию.
  • Нельзя передавать управление в тело опертора try...except(finally).

Прежде, чем назначить метку перехода, необходимо объявить ее имя в разделе объявлений программы или функциии, в зависимости от контекста, в котором она расположена. Использование безусловных передач управления в программе считается теоретически избыточным и подвергается серьезной критике, так как способствует созданию малопонятных и трудномодифицируемых программ, которые вызывают большие сложности при отладке и сопровождении. Поэтому рекомендуется минимальное использование оператора goto.

{$APPTYPE CONSOLE}

label mylabel; //объявляем метку, в контексте программы
var
  a:integer;
begin
myLabel:
  a:=20;
  goto myLabel;
end.

В примере показано создание бесконечного цикла при помощи оператора goto.

Оператор условного перехода If[править]

Оператор условного перехода позволяет проверить некоторое условие, и в зависимости от результатов проверки выполнить то или иное действие. Простой вид Условного оператора:

 If <Условие> Then <Оператор1> Else <Оператор 2>

Если условие истинно, то выполянется оператор1, в противном случае выполняется оператор2. После оператора 1, не нужно ставить точку с запятой, если за ними следует else. Если требуется выполнение более одного оператора, то необходима конструкция begin...end (составной оператор). В последнем случае, точка с запятой после end также не ставится.

Пример:

{$APPTYPE CONSOLE}

var
  a,b:integer;
begin
  readln(a,b);    //Считываем с клавиатуры 2 числа
  if a>b then    //Сравниваем их
    writeln('a>b')   //Если первое больше, то сообщаем пользователю об этом
  else writeln('a<b');
  if true then begin
    write('Эта составная инструкция выполняется ');
    writeln(' вседа');
  end;//точка с запятой необходима, поскольку за end не следует ни else, ни end более высокого уровня вложенности
  readln;
end.

else не является обязательной частью условного оператора.

var
  a:byte; 
begin
  if (a=2) then a:=10; 
end.

При использовании вложенных условных операторов может возникнуть синтаксическая неоднозначность, иллюстрируемая следующей схемой:

 if условие1 then if условие2 then <оператор1> else <оператор2>

Возникающая двусмысленность, к какому оператору if принадлежит часть else <оператор2>, разрешается тем, что служебное слово else всегда ассоциируется с ближайшим по тексту служебным словом if, которое еще не связано со служебным словом else.

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

if a>b and b>c then... //Неверно! 
if (a>b)and(b>c) then... //Это правильно

Оператор условного перехода Case[править]

Оператор Case называют оператором выбора. Он позволяет выбирать один из возможных вариантов продолжения программы. Расмотрим его структуру:

case <ключ выбора> of
 <константа выбора , перечисление, или диапазон>:<оператор1>
 ...//
 else <оператор2>//необязательная часть
end;

Ключом выбора может быть только выражение, которое относится к порядковому типу данных(целочисленные, булевы типы, а также тип Char и AnsiChar). Сначала идет вычисление ключа выбора, а затем идет сравнение с константой выбора(их число не ограничено). Если существует такая константа выбора, которая равна ключу выбора, то выполяется оператор, следующий за константой, а затем оператор выбора завершает свою работу(т.е. управление передается оператору, следующему за закрывающей оператор case end;).

Пример:

{$APPTYPE CONSOLE}

var
  a:byte;
begin
  readln(a); //Считываем с клавиатуры число а
  case a of
    1..3: writeln('case1_3'); //Если число в диапазоне 1..3 , то выводим строку case1_3
    4,5,7: writeln('case4_5_7');
    8: begin writeln('case8'); end
    9: writeln('case9'); 
    else writeln('CaseElse');// во все остальных случаях, например, если a=6. Эту часть(else) оператора case можно опустить.
  end;
  end;
  readln;
end.

Дополнительный материал[править]

  • [1] GoTo
  • [2] Логические элементы