Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование с нуля - это совсем просто! 22) Логические выражения


Информационный Канал Subscribe.Ru

 
Школа программирования

Программирование с нуля - это совсем просто!

22) Логические выражения

Программа расчета триграмм работоспособна, но один из ее недостатков связан с тем, что требования алгоритма мы учли не до конца. Например если мы присвоим переменной Years значение 82, то на экран будет выведен результат 0. Нам же требуется в этой единичной исключительной ситуации выводить на экран значение 9.

Таким образом мы можем дополнить последний шаг программы следующим условием: если полученное значение остатка в переменной Tria равно нулю, то надо записать в эту переменную значение 9.

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

В Delphi существует всего два логических значения: это True (переводится как Истина, Да, Верно) и False (переводится как Ложь, Нет, Неверно). Чтобы получить такое значение, надо результат вычисления одного выражения сравнить с результатом вычисления другого выражения. Сравнение выполняется с помощью специальных операторов взаимосвязи:

= Равно
<> Не равно
< Меньше
> Больше
<= Меньше или равно
>= Больше или равно

Некоторые из этих операторов записываются с помощью одного символа, другие - с помощью двух. При этом в случаях, когда используется два символа, не разрешается отделять их друг от друга пробелами или другими символами.

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

Tria = 0

Важно отметить, что это не оператор присваивания, а оператор сравнения, хотя выглядят они схоже. Их различие заключается в том, что при сравнении величин это выражение используется не как самостоятельная команда, а только как ее элемент (например как выражение, расположенное в правой части оператора присваивания). Для наглядности данную запись можно взять в скобки:

(Tria = 0)

Она может использоваться так же, как и выражения наподобие (Tria + 0). Только в последнем случае мы вычисляем арифметическое выражение с помощью операции сложения, в предыдущем - логическое значение с помощью операции сравнения.

Результатом такого сравнения будет значение True, если в переменной Tria записан 0, и False - если любое другое число. А результатом сравнения

Tria <> 0

будет True, если в переменной наоборот не записан 0, и False, если ее значение нулевое.

Логическое значение относится к оригинальному логическому типу данных. Называется он Boolean (точно так же, как целые значения имеют тип Integer).

Результат вычисления логического выражения, как и результат вычисления арифметического выражения, можно записывать в переменные. Для этого их необходимо декларировать с соответствующим типом:

Var CompareResult: Boolean;

В следующем операторе присваивания

CompareResult := Tria <> 0;

сначала происходит вычисление выражения Tria <> 0, расположенного в правой части. Его значение будет равно False, если в переменной Tria записан 0, и True, если в переменной Tria хранится ненулевое значение. Это значение и будет записано в переменную CompareResult. А проверку, соответствует ли значение переменной Tria нулю, можно записать так:

CompareResult := Tria = 0;

Правда, такая запись не очень наглядна. Особенно она не наглядна в Бейсике, где и для присваивания, и для сравнения используется один символ = и получается что-то вроде

CompareResult = Tria = 0

Может показаться, что этой команде сосредоточены сразу два оператора присваивания. Но это не так. Просто в правой части размещено логическое выражение Tria = 0, в котором сравнивается значение переменной Tria с числом 0. Крайний правый знак равенства применяется именно для сравнения значений, а вот в начале команды, в левой части после переменной CompareResult он поставлен уже как символ оператора присваивания. Для избежания неоднозначной трактовки программистами такой записи правую часть подобных команд лучше заключать в круглые скобки:

CompareResult := (Tria = 0) ;


В Бейсике все операции сравнения выглядят так же, как и в Паскале, да и тип также называется - Boolean. В Си есть некоторые отличия. Так, сравнение записывается двумя символами == , а не-равно - так: != . Символ ! в Си вообще означает отрицание.

Кроме того, отдельного типа данных для логических значений в Си нету. Считается, что результат логического выражения - это 1 (целый тип int), если выражение истинно, и 0 (тоже целого типа), если ложно. Строго говоря, истинно в Си все, что не равно нулю, а ложно только нулевое значение.

int CompareResult;
CompareResult = (Tria == 0) ;

Задание. Попробуйте вычислить какое-то логическое значение, записать его в переменную и затем вывести на экран - что будет показано?


В следующий раз мы изучим условный оператор, усовершенствуем нашу консольную программу, а потом наконец вернемся к графическим приложениям - кнопочкам, меню, спискам, картинкам, но уже с точки зрения программирования. Мне самому консоль надоела :)


(c) 2004 Сергей Бобровский bobrovsky@russianenterprisesolutions.com

Школа программирования с нуля
http://russianenterprisesolutions.com/sbo/

Все предыдущие выпуски базового курса тут:
http://russianenterprisesolutions.com/sbo/base.htm

А перекачать их одним архивом можно отсюда:
http://russianenterprisesolutions.com/sbo/download/sbo.zip (650 кб)
(вместе с картинками, только они в тексте с абсолютными адресами; вручную просматривать придется).

 

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.prognull
Отписаться

В избранное