Как сделать

Тип данных boolean в паскале. Логические выражения и логические операции

Тип данных boolean в паскале. Логические выражения и логические операции

Логические выражения (условия) в языке Паскаль используются в операторах if и при организации повторений, а именно в циклах while и repeat–until.

Примеры логических выражений:

1 . a > 2*b

2 . sin(sqr(a)) <= exp(cos(b))–2.3

3 . (a <= 3) and (b > a/2)

Логические выражения строятся на основе операций отношения

(<, >, <= , >=, =, <>)

и логических операций

and (логическое и),

or (логическое или),

not (логическое отрицание),

xor (исключающее или).

Результатом выполнения логического выражения является логическое значение true (истина) или false (ложь). В сложных логических выражениях в первую очередь выполняются арифметические операции, затем – логические операции, а в последнюю очередь – операции отношения.

24 Pascal. Условный оператор if. Формат и принцип действия.

Структура условного оператора if имеет вид:

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

где if, then, else – зарезервированные слова (если, тогда, иначе);

<условие> – логическое выражение;

<оператор1> и <оператор2> – любые операторы языка Паскаль (простые или составные).

Пример : if sin(а)>b then y:= a

Оператор if работает следующим образом:

<условие> (true (истина) или false (ложь)).

Если значение <условие> – true (истина), то выполняется <оператор1>, а <оператор2> игнорируется.

Если значение <условие> – false (ложь), то выполняется <оператор2>, а <оператор1> игнорируется.

Сокращенная конструкция оператора if

if < условие > then < оператор >;

Примеры : if a< 2*b then y: = a/2 ;

if a< 2*b then begin

B примере 1 оператор y:=a/2; является простым оператором языка Паскаль.

В примере 2 оператор begin y:=2*a; writeln(y) end; является составным оператором языка Паскаль.

Составной оператор – это группа операторов, заключенная в операторные скобки begin end:

begin <операторы>;

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

Оператор if сокращенной конструкции выполняется следующим образом.

Вычисляется значение логического выражения <условие>.

Если результатом является значение true, управление передается на <оператор>.

Если результатом условия является значение false, <оператор> игнорируется, и управление выполнением программы передается на следующий оператор в программе.

25 Pascal. Оператор выбора case…of. Формат и принцип действия. Оператор выбора Case

Если условный оператор if позволяет реализовать одно из двух возможных продолжений программы, то оператор case предоставляет возможность выбрать одно из нескольких продолжений программы.

Данный оператор имеет структуру:

case <выражение-селектор> of

<список1>: <оператор1>;

<список2>: <оператор2>;

<список N >: <оператор N >

else <оператор>

Здесь <выражение-селектор> – выражение или, в частном случае, переменная любого скалярного типа, кроме вещественного (обычно это переменная типа byte, integer, boolean или char);

<список1, список2, ... списокN> – списки констант, значения которых может принимать выражение-селектор. Каждый из списков может представлять собой константу, диапазон констант или несколько констант (диапазонов), разделенных запятой.

Конструкция else в операторе case может отсутствовать.

Оператор case выполняется следующим образом.

    Анализируется значение выражения-селектора.

    Если значение выражения-селектора не совпадает ни с одной из констант в списках констант, управление передается оператору, стоящему после слова else, а в случае отсутствия слова else, оператору, следующему за оператором case.

Описание: var n: boolean;

Данные логического типа boolean могут принимать только два значения: true (истина) и false (ложь). Для значений логического типа допустимы операции сравнения , причем true > false .Также применяются 4 логических операции :

and логическое умножение

or логическое сложение

xor исключающее «или»

not отрицание

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

X and Y

X xor Y


Пример 1:

not (5>2) = false

(5>2) and (3<10) = true

(8<>9) or (4>5) = true

not (5=2) xor (3>2) = false

Пример 2:

При сравнении данных типа BOOLEAN учитывается внутреннее соглашение Турбо Паскаля, в соответствии с которым FALSE есть нулевой байт, a TRUE - байт с единицей в младшем разряде. Заметим, что функция ORD преобразует к целому не только символы, но и логические величины, поэтому

2.5 Ограниченные типы

На основе стандартных типов можно строить собственные типы, ограничивая диапазон возможных значений: 1..10, -100..10, ‘a’..’z’ и т.п.

Пример :

b: ‘a’..’z’;

b:=0; {ошибка: несоответствие типов – переменной символьного типа присваивается целое число}

a:=0; {ошибка: выход за границы диапазона 2..5}

2.6 Перечислимые типы

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

var svet: (red, yellow,green);

oper: (plus, minus);

Тип boolean – частный случай перечислимого типа.

2.7 Описание типов

Новые типы данных в Паскаль определяются посредством описаний, начинающихся со слова TYPE. Описание состоит из имени типа и значения типа, между которыми ставится знак «=».

Пример:

abc=’A’..’z’;

2.8 Преобразование типов

Как уже говорилось, тип переменной позволяет не только устанавливать длину ее внутреннего представления, но и контролировать те действия, которые выполняются над ней в программе. Контроль над использованием переменных еще на этапе компиляции программы - важное преимущество Турбо Паскаля перед другими языками программирования, в которых допускается автоматическое преобразование типов. В Турбо Паскале почти невозможны неявные (автоматические) преобразования типов. Исключение сделано только в отношении констант и переменных типа INTEGER (целые), которые разрешается использовать в выражениях типа REAL (вещественные). Если, например, переменные X и Y описаны следующим образом:

var х: integer;

то оператор

будет синтаксически правильным: хотя справа от знака присваивания стоит целочисленное выражение, а слева - вещественная переменная, компилятор сделает необходимые преобразования автоматически. В то же время оператор

будет неверным, так как автоматическое преобразование типа REAL (константа 2.0 содержит десятичную точку и, следовательно, принадлежит к типу REAL) в тип INTEGER в Турбо Паскале запрещено.

Таким образом, переменным можно присваивать значения только своего типа; единственное исключение: переменная вещественного типа, а значение – целого (в этом случае целое число будет преобразовано в вещественное с дробной частью, равной 0).

Разумеется, запрет на автоматическое преобразование типов еще не означает, что в Турбо Паскале нет средств преобразования данных. Они, конечно же, есть, но их нужно использовать явно. Для преобразования данных в языке существуют встроенные функции, которые получают в качестве параметра значение одного типа, а возвращают результат в виде значения другого типа. В частности, для преобразования REAL в INTEGER имеются даже две встроенные функции такого рода: ROUND округляет REAL до ближайшего целого, a TRUNC усекает REAL путем отбрасывания дробной части (см. п.1.5).

Например, ошибочным будет оператор

но правильным

х:= round(у/х);

(объявления переменных см. выше).

Например, для преобразования данных типа CHAR (символ) в целое число предназначена функция ORD, обратное преобразование INTEGER в CHAR осуществляет функция CHR.

Наличие двух операций деления есть еще одно проявление основополагающего принципа Турбо Паскаля: программист должен явно подтверждать компилятору, что он готов к возможным последствиям преобразования типов. Если, например, в языке Фортран используется выражение 1/2 , то результат этого выражения будет зависеть от того, переменной какого типа он будет присвоен: если N есть переменная целого типа, а Х- вещественного, то в программе на Фортране присваивания

дадут значения 0 для N и 0.5 для X. В Турбо Паскале такой двусмысленности нет: выражение 1/2 всегда имеет значение 0.5 и поэтому оператор

просто недопустим. В то же время допустимые в Турбо Паскале операторы:

И, наконец, об операциях отношения и логических операциях.

Над данными типа REAL, INTEGER, CHAR, STRING определены следующие операции отношения (сравнения):

<> - не равно;

< - меньше;

> - больше;

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

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

В операциях сравнения должны участвовать однотипные операнды. Исключение сделано опять-таки в отношении REAL и INTEGER, которые могут сравниваться друг с другом. Результат применения операции отношения к любым операндам имеет тип BOOLEAN.

Понятие типа данных в Турбо Паскаль

Для обработки ЭВМ данные представляются в виде величин и их совокупностей. С понятием величины связана такая важная характеристика, как ее тип.

Тип определяет:

· возможные значения переменных, констант, функций, выражений, принадлежащих к данному типу;

· внутреннюю форму представления данных в ЭВМ;

· операции и функции, которые могут выполняться над величинами, принадлежащими к данному типу.

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

Иерархия типов в языке Паскаль такая:

· Простые

o Порядковые

§ Логические

§ Символьные

§ Перечисляемые

§ Интервальные

o Вещественные

· Структуированные

o Массивы

o Множества

· Указатели

Логические типы данных

Прямое отношение к программированию имеет дисциплина, которая называется математической логикой. Основу математической логики составляет алгебра логики, или исчисление высказываний. Под высказыванием понимается любое утверждение, в отношении которого можно однозначно сказать, истинно оно или ложно. Например, «Луна - спутник Земли» - истинно; «5>3» - истинно; «Москва- столица Китая» - ложно; «1=0» - ложно. Истина или ложь являются логическими величинами. Логические значения приведенных выше высказываний однозначно определены; другими словами, их значения являются логическими константами. Логическое значение неравенства x < 0, где x – переменная, является переменной величиной. В зависимости от значения x оно может быть либо истиной, либо ложью. В связи с этим возникает понятие логической переменной.

Основы формального аппарата математической логики создал в середине XIX в. английский математик Джордж Буль. В его честь исчисление высказываний называют булевой алгеброй, а логические величины – булевскими.

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

Имеются три основные логические операции: отрицание, конъюнкция (логическое умножение) и дизъюнкция (логическое сложение).

Операция отрицания обозначается в математической логике значком и читается как НЕ. Это одноместная операция.

Например, (x = y) читается «не (x равно y)». В результате получится истина если x не равно y, и ложь, если x равно y. Отрицание изменяет значение логической величины на противоположное.

Операция конъюнкции обозначается значком & и читается как И. Это двухместная операция. Например, (x > 0) & (x < 1) читается «x больше 0 и x меньше 1». Данная логическая формула примет значение истина, если x Є (0,1), и ложь – в противном случае. Следовательно, результат конъюнкции – истина, если истинны оба операнда. Знак операции дизъюнкции V читается как ИЛИ. Например, (x = 0) V (x = 1) читается «x равно 0 или x равно 1». Формула дает истину, если x – двоичная цифра (0 или 1). Следовательно, дизъюнкция дает в результате истину, если хотя бы один операнд - истина.

В Турбо Паскале логические значения обозначаются служебными словами True (истина) и False (ложь), а логический тип данных носит название BOOLEAN.

Все реализации языка Pascal, в том числе и Turbo Pascal, вплоть до версии 6.0 содержали только один логический тип данных Boolean, элементы которого могут принимать лишь два вышеуказанных логических значения. В Turbo Pascal версии 7.0 добавлены еще три логических типа данных: ByteBool, WordBool и LongBool.

По аналогии с целыми и символьными типами, подразделяющимися на физические и логические, естественно предположить, что ByteBool, WordBool и LongBool - физические типы, Boolean - логический. Но в данном случае это не совсем так. Все четыре типа различны. Для Turbo Pascal логический тип Boolean более предпочтителен, так как он использует меньшее количество памяти, остальные типы были введены для обеспечения совместимости разрабатываемых программ с Windows, в которой значению False соответствует 0, а значению True – любое, отличное от 0, число.

Данные логического типа занимают один байт памяти. При этом значению false соответствует нулевое значение байта, а значению true соответствует любое ненулевое значение байта. Например: false всегда в машинном представлении: 00000000; true может выглядеть таким образом: 00000001 или 00010001 или 10000000.

Однако следует иметь в виду, что при выполнении операции присваивания переменной логического типа значения true, в соответствующее поле памяти всегда записывается код 00000001. В этих операциях операнды логического типа рассматриваются как единое целое - вне зависимости от битового состава их внутреннего представления. Кроме того, следует помнить, что результаты логического типа получаются при сравнении данных любых типов. Логические константы языка Turbo Pascal TRUE (истина) и FALSE (ложь) можно использовать в явном виде или обозначать именем в разделе CONST, например:

Логическая переменная тоже может принимать два значения TRUE и FALSE. Логические переменные должны быть описаны предложением:

Var <имя_переменной>: boolean; (Variableпеременная).

Например: var L,A,C:boolean;

Следует обратить внимание на то, что в разделе описания переменных необходимо определить тип переменных, используемых в программе. Например,

Var P,Q,R: Integer;

В разделе операторов логическому типу переменной можно присвоить значение логической константы, например:

L1:=true; L2:=false; L3:=L1;

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

Пример переменных с булевым значением

Для того, чтобы программа была не линейной (т.е. в зависимости от ситуации выполнялись разные инструкции) в языках программирования используются логические выражения, результат которых может быть либо правдой (true), либо ложью (false). Результат логических выражений обычно используют для определения пути выполнения программы.

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

В Паскале предусмотрены следующие операторы отношений:

  • меньше: x < y
  • больше: x > y
  • равно: x = y
  • не равно: x <> y
  • меньше или равно: x <= y
  • больше или равно: x >= y

Булевы типы

Результатом логического выражения всегда является булево (логическое) значение. Булев тип данных (boolean) может принимать только два значения (true или false). Эти величины упорядочены следующим образом: false < true. Это значит, что данные булевого типа являются не только результатом операций отношения, но и могут выступать в роли операндов операции отношения. Также к ним можно применять функции ord, succ, pred, процедуры inc и dec.

Значение типа boolean занимает в памяти 1 байт.

В примере шести булевым переменным присваиваются значения простых логических выражений. Значения, хранимые в таких переменных, затем выводятся на экран.

Кроме типа boolean в Pascal введены еще три булевых типа - bytebool (занимает 1 байт), wordbool (занимает 2 байта) и longbool (занимает 4 байта).
Для всех булевых типов значению false соответствует 0, а значению true - любое ненулевое значение. Логические переменные, принадлежащие разным булевым типам, ведут себя по-разному при выполнении над ними операций. Ниже приводится пример, реализованный на языке FreePascal (в комментариях отображается результат).

var b: boolean ; wb: wordbool; begin b: = false ; b: = pred (b) ; writeln (b, " " , ord (b) ) ; // TRUE 255 writeln (b= true ) ; // TRUE wb: = false ; wb: = pred (wb) ; writeln (wb, " " , ord (wb) ) ; // TRUE -1 b: = true ; b: = succ (b) ; writeln (b, " " , ord (b) ) ; // TRUE 2 wb: = true ; wb: = succ (wb) ; writeln (wb, " " , ord (wb) ) ; // FALSE 0 end .

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

С помощью логических операторов можно формировать сложные логические выражения. Логические операторы часто применяются по отношению к простым логическим выражениям.

В языке программирования Pascal предусмотрены следующие логические операции:

true xor true = false
true xor false = true
false xor true = true
false xor false = false

  • Конъюнкция (логическое умножение, пересечение) - and. Выражение a and b дает значение true только в том случае, если a и b имеют значение true. Во всех остальных случаях значения выражения a and b дает false.

    true and true = true true and false = false false and true = false false and false = false

  • Дизъюнкция (логическое сложение, объединение) – or. Выражение a or b дает значение false только в том случае, если a и b имеют значение false. Во всех остальных случаях результат – true.

    true or true = true true or false = true false or true = true false or false = false

  • Отрицание (инверсия) – not. Выражение not a имеет значение, противоположное значению a.

    not true = false not false = true

  • Исключающее ИЛИ – xor. Выражение a xor b дает значение true только в том случае, когда только один из операндов имеет значение true.

Последовательность выполнения логических операторов: not, and, or.

В языке Паскаль сначала выполняются логические операторы (and, or, xor, not), а уже потом операторы отношений (>, >=, <, <=, <>, =), поэтому не нужно забывать расставлять скобки в сложных логических выражениях.

Сложные булевы выражения могут не обрабатываться до конца, если продолжение вычислений не изменит результат. Если булево выражение в обязательном порядке нужно обрабатывать до конца, то это обеспечивается включением директивы компиляции {B+}.

Стандартные булевские функции

  • odd(x) = true, если x нечетный (x целый тип);
  • eoln(x) = true, если встретился конец строки текстового файла x;
  • eof(x) = true, если встретился конец файла x.

В остальных случаях эти функции принимают значение false.

Программное обеспечение - Паскаль Операции языка Паскаль

Операции языка Паскаль

Операции задают действия над операндами. В языке паскаль бывают операции бинарные и унарные. Унарные операции содержат 1 операнд, перед которым стоит знак операции. Бинарные операции имеют 2 операнда, между которыми ставится знак или символ операции. По характеру выполнения действий операции языка паскаль можно разделить на 7 групп :

  • арифметические;
  • отношения;
  • логические;
  • строковые;
  • разрядные, сдвиговые;
  • операции над множествами;
  • операции взятия адреса.

Арифметические операции. В языке паскаль имеется одна унарная операция называемая присвоением знака минус и вторая присвоение знака плюс. Бинарными являются:

  • сложение (+);
  • вычитание (-);
  • умножение (*);
  • вещественное деление (/);
  • целочисленное деление (div);
  • остаток от целочисленного деления (mod).

В языке паскаль имеются три операции деления, результатом операции деления (/) будет число с дробной частью, результатом операции div - только целое число, а результатом операции mod - остаток от целочисленного деления. Примеры:

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

Операции отношения. К ним относятся все бинарные операции:

  • больше;
  • меньше;
  • больше или равно;
  • меньше или равно
  • равно
  • неравно.

Результат операций отношений может быть только переменная логического типа, она может принимать либо значение истина (True), либо значение ложь (False). Операндами в операции отношения могут быть числовые типы или типы, сводимые к числовым. Числовые типы:

  • символьный - в операциях отношения сравниваются коды символов в соответствии с кодовой таблицей;
  • логический - используются значения True и False, принимающие значения 1 - истина и 0 - ложь соответственно;
  • строковый - составной тип, состоящий из символьного типа. Поэтому при использовании строк осуществляется сравнение последовательных символов в двух строках.

Например:

5.6 > 7 — False;

‘П’ < ‘Б’ — False;

‘Петров’ > ‘Иванов’ — True;

‘Иванов’ < ‘Иван’ — False.

Результатом логических операций будут логические значения True или False.

Унарные: NOT - отрицание.

Бинарные: AND - умножение (и); OR - сложение (или); XOR - сложение на модуль 2 (исключающее ИЛИ).

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

Строковые операции. Конкатенация (сцепление) - бинарная операция. Операндами могут быть только переменные строкового типа. Результат строковый, а действие операции заключается в сцеплении двух строк в одну:

A:=‘Иванов’

B:= ‘Александр’

Результат: Иванов Александр.

Последовательность выполнения операций на языке паскаль определяется 3 факторами:

  • приоритет операций;
  • порядок расположения операций;
  • использование скобок.

Уровни приоритетов выполняемых операций:

  • операции первой приоритетности, выполняются в первую очередь;
  • операции низшей приоритетности, выполняются последнюю очередь;
  • операции с равными приоритетами, выполняются слева направо в порядке их записи.

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