Операции, определенные над логическими переменными 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Операции, определенные над логическими переменными



1. Операция присваивания

t:=false; p:=t; q:=5<x; flag:=succ(t);

 

2. Операция вывода.

Write (t); Writeln(q); Write (5>2)

 

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

3. Логические (булевские) операции

Операция Пояснение
and Логическое умножение (конъюнкция)
or Логическое сложение (дизъюнкция)
not Логическое отрицание (не)
xor Логическое деление

 

Приведем определения логических операций.

Отрицание. Если логическая величина С является отрицанием логического выражения А, то С истинно, если А ложно, и ложно, если А истинно.

Логическое умножение. Если А и В истинны, то С также истинно. Если же хотя бы одно из них ложно, то С также ложно.

Логическое сложение. Если А и В ложны, то С также ложно. Если же хотя бы одно из логических выражений А и В истинно, то С также истинно.

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

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

Таблица. Таблица истинности для всех логических операций

А В not A A and B A or B A xor B
true true false true true false
true false false false true true
false true true false true true
false false true false false false

 

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

(a and b) or (b and not c)

(a xor b) and (a or c) xor (not h)

Логическое выражение — это такое выражение, которое может принимать только два значения: истина (true) и ложь (false). В языке Паскаль логическими выражениями могут быть:

· специальные логические переменные (тип Boolean);

· выражения, содержащие сравнения (например, s<>h);

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

Еще несколько примеров сложных логических выражений:

(a<>b) and (f or (h<5))

f xor (5=6*i)

(s<>6) or (g>8)

Замечания:

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

if (y<7) and (h>5) then h:=y;

Этот же оператор, без применения логических операций, можно записать так:

if (y<7) then if (h>5) then h:=y;

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

Еще одна очень серьезная выгода связана с наличием в языке Паскаль специального типа данных (логического типа). Этот тип данных позволяет создавать и вычислять логические выражения в операторе присваивания аналогично тому, как это делается с арифметическими выражениями. Например выражение:

if t=6 then y:=true else y:=false;

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

y:=t=6;

2. Логические операции, операции отношения и арифметические операции часто встречаются в одном выражении. При этом отношения, стоящие слева и справа от знака логической операции должны быть заключены в скобки, так как логические операции имеют более высокий приоритет.

1. Действия в скобках

2. NOT

3. AND, умножение (*), div, mod, деление (/)

4. OR, XOR, сложение (+), вычитание (-),

5. <, >, =, <>. <=, >=

Например:

A or B and not (A or B)

 

4. Определены следующие функции:

 

Функция Аргумент Результат Назначение
Succ(x) логический логический Succ(false)=true, Succ(true) не определена
Pred(x) логический логический Pred(true)=false, Pred(false) не определена
Odd(x) целый логический Проверяет нечетность значенияx. odd (x) = true, если x нечетно;
Ord(x) Порядковый (логический) целый Возвращает порядковый номер, соответствующий значению x. (Ord(False)=0, Ord(True)=1)

 

Задания:

1. Вычислите значения выражений при a=10, b=20, c=true, d=false:

· (a>5) and (b>5) and (a<20) and (b<30);

· not (a<15) or not (b<30);

· c or d and (b=20);

2. Вычислите значения выражения:

а) sqr(x)+sqr(y)<=4 при x=0.3, y=-1.6;

б) k mod 7 = k div5-1 при k=15;

в) odd(trunc(10*p)) при p=0.182;

г) not odd(n) при n=0;

д) t and (p mod 3=0) при t=true, p=101010;

е) (x*y<>0) and (y>x) при x=2, y=1;

ж) (x*y<>0) or (y>x) при x=2, y=1;

з) a or (not b) при a=False, b=True;

  1. Указать порядок выполнения операций при вычислении выражений:

а) a and b or not c and d;

б) (x>=0) or not c and d.

  1. Вычислить следующие выражения при a=True, b=False:

а) a or b and not a;

б) (a or b) and not a;

в) not a and b;

г) not (a and b)

 

Программа: Определить все простые числа до заданного n. (№ 12)

 

Var n,i,j,x: integer;

Begin writeln(‘input n’);

Readln(n);

For i:=2 to n do

Begin j:=2;

While (i mod j<>0) and (j<=round(sqrt(i))) do j:=j+1;

If j> round(sqrt(i)) then writeln(i)

End;

End.

БИЛЕТ №10

1. Алгоритмизация: основные понятия смотри Билет №6 1 вопрос

2. Операторы условного перехода и варианта. Пример

Оператор условного перехода в Турбо Паскаль имеет вид:

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

условие - это логическое выражение, в зависимости от которого выбирается одна из двух альтернативных ветвей алгоритма. Если значение условия истинно (TRUE), то будет выполняться оператор 1, записанный после ключевого слова then. В противном случае будет выполнен оператор 2, следующий за словом else, при этом оператор 1 пропускается. После выполнения указанных операторов программа переходит к выполеннию команды, стоящей непосредственно после оператора if.

Необходимо помнить, что перед ключевым словом else точка с запятой никогда не ставится!

else - часть в операторе if может отсутствовать:

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

Тогда в случае невыполнения логического условия управление сразу передается оператору, стоящему в программе после конструкции if.

Следует помнить, что синтаксис языка допускает запись только одного оператора после ключевых слов then и else, поэтому группу инструкций обязательно надо объединять в составной оператор (окаймлять операторными скобками begin... end). В противном случае возникает чаще всего логическая ошибка программы, когда компилятор языка ошибок не выдает, но программа тем не менее работает неправильно.

 

Оператор условного Варианта в Турбо Паскаль имеет вид:

Тема: Оператор выбора CASE. Решение задач.

 

Ранее Вы познакомились с условным оператором If, который позволяет программе выполнять переходы на ту или иную ветвь по значению булева условия. Используя несколько операторов If, можно производить ветвление по последовательности условий. В приведенном фрагменте показано, как при помощи ряда операторов If можно преобразовать целое число (в диапазоне 0-9) к его словесному представлению:if Ziphra = 0

then

write (‘Нуль‘);

if Ziphra = 1

then

write (‘Единица‘);

if Ziphra = 2

then

write (‘Два‘);

 

 

и т.д.

 

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

 

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

 

Общая форма записи следующая:case выражение of

значение1: оператор (группа операторов);

значение2: оператор (группа операторов);

......................

значениеN: оператор (группа операторов)

else оператор (группа операторов);

end;

 

 

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

 

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

 

Например,case NUMBER mod 2 of

0: writeln (NUMBER, ‘- число четное‘)

else: writeln (NUMBER, ‘- число нечетное‘);

end;

 

 

Если один оператор выполняется при нескольких значениях, то их можно перечислить через запятую.case MONTH of

1, 2, 3: writeln (‘Первый квартал‘);

4, 5, 6: writeln (‘Второй квартал‘);

7, 8, 9: writeln (‘Третий квартал‘);

10, 11, 12: writeln (‘Четвёртый квартал‘);

end;

 

 

Оператором может являться не только простой оператор, но также составной и пустой операторы.case CODE of

1: for i:= 1 to 5 do

writeln (‘*******‘);

2: begin {составной оператор}

x:=sqr(y-1);

writeln (x);

end;

3: {пустой оператор}

end;

 

 

Любому заданному значению селектора соответствует лишь один вход в списке операторов. Константы должны принадлежать тому же типу, что и селектор. Если селектор принимает значение, которому не соответствует ни один вход, то будет выполняться оператор, следующий за словом else. Если же этого оператора нет, то никакие альтернативы не будут выполняться.

 

Если оператор должен выполняться при нескольких значениях селектора следующих друг за другом, образуя некоторый промежуток, то это можно записать в более сжатой форме. Например,case Chislo of

0..9: write (‘Это число является цифрой‘);

 

 

Посмотрите, в каких вариантах еще можно использовать оператор выбора при решении задачи.

 

Задача. Написать программу преобразования цифр в слова.Program Number1;

Var

a, b, c: integer;

Begin

writeln(‘Введите цифру ‘);

readln(a);

if (a<0) or (a>9)

then

writeln (‘Это число не является цифрой‘)

else

case a of

0: writeln (‘ноль‘);

1: writeln (‘один‘);

2: writeln (‘два‘);

3: writeln (‘три‘);

4: writeln (‘четыре‘);

5: writeln (‘пять‘);

6: writeln (‘шесть‘);

7: writeln (‘семь‘);

8: writeln (‘восемь‘);

9: writeln (‘девять‘);

end;

readln;

End.

БИЛЕТ №11

1. Алгоритмы сложных циклических процессов

2. Битовые операции в TP

Битовые операции

Если необходимо обрабатывать отдельные биты некоторой константы, то целесообразно использовать битовые операции. Для операций с битами используются логические операции (not, and, or и xor) и операции сдвига влево и вправо (shl и shr).

В операции shl вышедшие за пределы поля влево разряды заполняются нулями. В операции shr вышедшие за пределы поля вправо разряды теряются.

При выполнении битовых операций необходимо учитывать внутренне представление данных.

Пример 16.2. Пример на операции shl и shr

Uses crt;

Var

i,n:byte;

ch:char;

Begin

clrscr;

Repeat

Writeln('Введите целое число, для выхода из программы нажмите ESC');

Write('i='); Readln(i);

Writeln('Введите количество разрядов для сдвига n');

Write('n='); Readln(n);

Write(i:3,' shl ',n,'=',i shl n:4);

Writeln(' ':3,i:3,' shr ',n,'=',i shr n:4);

Writeln;

ch:=ReadKey;

Until ch=#27;

End.

Результат работы программы

Введите целое число, для выхода из программы нажмите ESC

i=12

Введите количество разрядов для сдвига n

n=2

12 shl 2= 48 12 shr 2= 3

Введите целое число, для выхода из программы нажмите ESC

i=128

Введите количество разрядов для сдвига n

n=1

128 shl 1= 256 128 shr 1= 64

БИЛЕТ №12

 

№12 1. Строки типа String. Пример действий с ними

2. Операторы: пустой, составной, безусловного перехода, ввода/вывода

Строки типа String. Пример действий с ними

Тип STRING (строка) в Турбо Паскале широко используется для обработки текстов. Он во многом похож на одномерный массив символов ARRAY[O..N] OF CHAR, однако, в отличие от последнего, количество символов в строке-переменной может меняться от 0 до N, где N - максимальное количество символов в строке. Значение N определяется объявлением типа STRING [N] и может быть любой константой порядкового типа, но не больше 255. Турбо Паскаль разрешает не указывать N, в этом случае длина строки принимается максимально возможной, а именно N=255.

Строка в Турбо Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива ARRAY [0..N] OF CHAR, например:

var

st: String;

begin

.....

if st[5] = 'A' then...

end.

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

var

st: String;

i: Byte;

begin

i:= ord(st [0]); {i - текущая длина строки}

while (i <> 0) and (st[i] = ' ') do

begin

dec(i);

st[0]:= chr(i)

end;

.....

end.

Значение ORD(st[0]), т.е. текущую длину строки, можно получить и с помощью функции LENGTH(st), например:

while (Length(st)<>0) and (st[Length(st)]=' ') do

st[0]:= chr(Length(st)-1)

К строкам можно применять операцию «+» - сцепление, например:

st:= 'а1 + 'b';

st:= st + 'с'; {st содержит "abc"}

Если длина сцепленной строки превысит максимально допустимую длину N, то «лишние» символы отбрасываются. Следующая программа, например, напечатает символ 1:

var

st: String [1];

begin

St:='123';

WriteLn(st)

end.

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

CONCAT(S1 [,S2,..., SN]) - функция типа STRING; возвращает строку, представляющую собой сцепление строк-параметров SI, S2,..., SN.

COPY(ST, INDEX, COUNT) - функция типа STRING; копирует из строки ST COUNT символов, начиная с символа с номером INDEX.

DELETE (ST, INDEX, COUNT) - процедура; удаляет СОUNT символов из строки ST, начиная с символа с номером INDEX.

INSERT (SUBST, ST, INDEX) - процедура; вставляет подстроку SUBST в строку ST, начиная с символа с номером INDEX.

LENGTH (ST) - функция типа INTEGER; возвращает длину строки ST.

POS (SUBST, ST) - функция типа INTEGER; отыскивает в строке STпервое вхождение подстроки SUBST и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращается ноль.

STR(X [; WIDTH [: DECIMALS] ], ST) - процедура; преобразует число X любого вещественного или целого типов в строку символов ST так, как это делает процедура WRITELN перед выводом; параметры WIDTH и DECIMALS, если они присутствуют, задают формат преобразования: WIDTH определяет общую ширину поля, выделенного под соответствующее символьное представление вещественного или целого числа X, a DECIMALS - количество символов в дробной части (этот параметр имеет смысл только в том случае, когда Х- вещественное число).

VAL(ST, X, CODE) - процедура; преобразует строку символов ST во внутреннее представление целой или вещественной переменной X, которое определяется типом этой переменной; параметр CODE содержит ноль, если преобразование прошло успешно, и тогда в X помещается результат преобразований, в противном случае он содержит номер позиции в строке ST, где обнаружен ошибочный символ, и в этом случае содержимое Х не меняется; в строке ST могут быть ведущие пробелы, однако ведомые пробелы недопустимы; например, обращение val (' 123',k,i) пройдет успешно: k получит значений 123, в i будет помещен 0, в то время как обращение val (' 123 ', k, i) будет ошибочным: значение k не изменится, a i будет содержать 4.

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

Примеры:

var

х: Real;

у: Integer;

st,st1: String;

begin

st:= concat('12','345'); {строка st содержит 12345}

st1:= copy(st,3,Length(st)-2); {st1 содержит 345}

insert('-',st1,2); {строка st1 содержит 3-45}

delete(st,pos('2',at),3); {строка st содержит 15}

str(pi:6:2,st); {строка st содержит 3.14}

val(''3,1415',x,y); {у содержит 2, х остался без изменения}

end.

Операции отношения =, о, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов (см. табл.4.1 и прил.2). Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением СНR(0).

Следующие операции отношения дадут значение TRUE:

'''' < '. '

'А' > '1'

'Turbo' <' Turbo Pascal'

'Паскаль' >'Turbo Pascal'

В 1642 - 1645 гг. французский ученый Блез Паскаль создал первую модель механической вычислительной машины, выполняющей арифметические операции и ставшую первым серийно выпускаемым механическим калькулятором. В 1670 - 1710 гг. немецкий ученый Г. Лейбниц разработал и построил механи-ческую машину (калькулятор) для выполнения арифметических действий. Он так-же предложил возможность представления любых чисел двоичными цифрами.



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 596; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.105.239 (0.119 с.)