Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БрошюраОкончательный.doc
Скачиваний:
20
Добавлен:
28.10.2018
Размер:
3.14 Mб
Скачать

Задания для выполнения

Наберите следующие тексты (каждый текст – в отдельном файле) с соблюдением всех отступов (это нужно для лучшего восприятия набранного). Откомпилируйте программы и посмотрите, что они выполняют. Там, где возможно, используйте копирование и вставку – ускоряйте свою работу! Если при компиляции получаются сообщения об ошибках – сверьте ваш текст с оригиналом и попробуйте исправить ошибки.

1.1. uses crt,dos;

var i,j,k:byte;

begin

clrscr;

randomize;

while not keypressed do

begin

textcolor(green);

insline;

delay(10000);

for i:=1 to 80 do

if i<>80

then write(chr(150+random(106)))

else

begin

write(chr(random(256)));

gotoxy(1,1);

end;

end;

end.

1.2. uses dos,crt;

type ts=array[1..80] of char;

var t:char;

h,m,s,c: word;

i,j:byte;

z:ts;

begin

clrscr;

for i:=1 to 80 do

if i<=13 then z[i]:=chr(176) else

if i<=27 then z[i]:=chr(177) else

if i<=40 then z[i]:=chr(178) else

if i<=53 then z[i]:=chr(219) else

if i<=67 then z[i]:=chr(178) else

if i<=80 then z[i]:=chr(177);

j:=0;

repeat

j:=(j+1) mod 80;

textcolor(white);

gotoxy(23,10);

write('+---------------------------------+');

gotoxy(23,11);

gettime(h,m,s,c);

write('| Системное время: ',

h:2,'ч',m:3,'м',s:3,':',c:2,'с |');

gotoxy(23,12);

write('+---------------------------------+');

textcolor(lightblue);

for i:=1 to 79 do

begin

gotoxy(80-i,25);

write(z[81-(((i+j) mod 80)+1)])

end;

delay(1500);

until keypressed;

end.

1.3. uses crt;

type tscr=array[1..80,1..25] of char;

var scr:tscr;

i,j:byte;

function randseg(a,b:longint):longint;

begin

randseg:=trunc(round(random*(b-a)+a));

end;

begin

randomize;

clrscr;

while true do

for i:=1 to 80 do

for j:=1 to 25 do

begin

if random<=0.52

then textcolor(black)

else textcolor(lightgreen);

gotoxy(randseg(1,80),randseg(1,25));

if (wherex<80)or(wherey<25)

then write(chr(randseg(0,255)));

delay(108);

if keypressed

then halt;

end;

readln;

end.

1.4. uses crt;

var i,j:byte;

begin

clrscr;

for i:=0 to 15 do

for j:=0 to 15 do

if j=15 then

begin

textcolor(red);

write(16*i+j:3);

textcolor(white);

writeln(chr(16*i+j))

end

else

begin

textcolor(red);

write(16*i+j:4);

textcolor(white);

write(chr(16*i+j));

end;

readln;

end.

Линейные алгоритмы

  1. Что такое линейный алгоритм? В линейном алгоритме команды выполняются одна за другой так, как они записаны в тексте программы, не возвращаясь к уже выполненной команде.

  2. Что такое блок-схема? Алгоритмы нужно как-либо записывать. Одной из форм записи алгоритмов являются блок-схемы, строящиеся с помощью условных рисунков, как из кирпичиков. Эти условные рисунки следующие:

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

  • Внутри параллелограммов записываются команды ввода-вывода данных.

  • Ромб обозначает, что нужно произвести выбор из нескольких вариантов (см. Часть 3).

  • Шестигранник используется для обозначения заголовка цикла с параметром (см. Часть 4).

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

  • Начало и конец программы обозначаются овалами .

В приведенных выше обозначениях линейный алгоритм будет иметь вид:

Рис. 4. Блок-схема линейного алгоритма

  1. Какова структура программы? Классическая структура такова:

Program ИмяПрограммы; {задание названия программы,

блок не обязателен}

Uses Модуль1,

Модуль2,

… {задание используемых модулей,

блок не обязателен}

Label Метка1,

Метка2,

… {задание используемых меток,

блок не обязателен, считается,

что любая программа может быть

написана без меток, поэтому их

использование не рекомендуется}

Type ИмяТипа1 = Выражение1;

ИмяТипа2 = Выражение2;

… {задание используемых типов,

блок не обязателен, но часто

встречается}

Const ИмяКонстанты1 = Выражение1;

ИмяКонстанты2 = Выражение2;

… {задание используемых

констант, блок не

обязателен, но часто

встречается}

Var ИмяПеременной11,ИмяПеременной12,…: Тип1;

ИмяПеременной21,ИмяПеременной22,…: Тип2;

… {задание используемых переменных,

блок не обязателен, но часто

встречается}

Begin {начало тела программы}

Предложение1;

Предложение2;

… {тело программы, обязательная часть}

End. {конец тела программы}

Та часть программы, которая располагается до операторных скобок Begin … End, называется преамбулой программы или разделом описаний.

Выполняемые команды пишутся между Begin … End. Текст программы завершается точкой. Язык Pascal обладает особенностью – чтобы что-то использовать в основной части программы (метки, типы, переменные и пр.), это нужно описать в разделе описаний.

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

Кроме того, в Turbo Pascal 7.1 имеется так называемый тип объект и определяются объектные свойства и методы. Отдельно в структуре программы это не указано, так как входит в блок описания типов. Заметим, что рассмотрение объектного типа выходит за рамки данного издания.

  1. Какие бывают команды? В Turbo Pascal имеется великое множество встроенных команд. Все команды подразделяются на виды: операторы, операции, процедуры, функции. Из команд строятся предложения языка. Законченные предложения отделяются друг от друга точкой с запятой.

Операторы соответствуют алгоритмическим конструкциям (см. Части 3 и 4). К ним относятся операторы присваивания, безусловного перехода, пустой оператор, составной оператор, операторы цикла, условные операторы. Скажем здесь, что пустой оператор – это оператор, не содержащий ни одной команды, а составной оператор – это несколько предложений, разделенных точкой с запятой, которые заключены в операторные скобки begin .. end. Составной оператор позволяет обращаться с группой предложений как с одним предложением.

Операции позволяют произвести элементарные преобразования данных. К ним относятся арифметические операции, логические операции, операции с битами информации, со строками, операции отношения и адресная операция @.

Процедуры и функции относятся к так называемым подпрограммам. Порой часто используемые блоки программы логично выделять в отдельные программы в составе основной. Это и есть подпрограммы. Чтобы задать, а затем использовать подпрограмму, нужно ее поименовать. В Turbo Pascal имеется великое множество поименованных стандартных подпрограмм.

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

  1. Как вызвать (использовать) стандартную процедуру или функцию? Необходимо записать ее имя и в круглых скобках указать ее аргументы (если нужно и если они есть). Если аргументов несколько, их нужно разделять запятыми. К примеру (смотри задачи выше, из Части 1): textcolor(red), gotoxy(80-i,25) – вызовы процедур, round(random*(b-a)+a), chr(16*i+j) – вызовы функций. Аргументы процедур и функций – это те данные, с которыми подпрограммы выполнят некоторые операции или в зависимости от этих данных смогут сделать необходимые действия для достижения общей цели программы.

  2. Что такое модули? Порой стандартные процедуры или функции собираются разработчиками в отдельные файлы, называемыми модулями. Модули можно подгружать в основную программу, вызывая их по имени, вместе с оператором uses. Тогда ко всем объектам, определенным в этих модулях, можно обращаться по имени в основной программе и таким образом использовать их. Замечание: подгрузку модулей можно выполнить только один раз, в самом начале программы. К примеру, это можно сделать так (смотри задачи из Части 1):

uses dos,crt;

  1. Какие символы можно использовать в программах Turbo Pascal? Как уже видно выше, в Turbo Pascal, в основном, используются буквы латинского алфавита и цифры. Все имена элементов программы (названия модулей, процедур, функций и их аргументов, переменных, констант и пр.) могут записываться только латинскими буквами, цифрами и знаком подчеркивания _, причем начинаться цифрой имя элемента программы не может. Кроме того, в названиях элементов программы не важно, в каком регистре оно записано. Так, имя процедуры считывания с клавиатуры или из файла может быть записано как ReadLn, readln, READLN и это будет одно и то же.

Где же используются буквы кириллицы? Их можно использовать в строках-константах. Например, строка-константа может выглядеть так:

'Так выглядит строка'.

Строки заключаются в апострофы. Если внутри строки нужно поставить апостроф, то он удваивается. Например: 'Эта ''строка'' содержит апострофы!'. Строки могут содержать нулевое количество символов. Пустая строка выглядит так: ''.

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

Квадратные скобки [ и ] нужны для указания индексов элементов массивов (Часть 5), определения множеств.

Фигурные скобки { и } ограничивают комментарии, описывающие что делают те или иные команды. При компиляции текст, находящийся в комментариях, игнорируется. Комментарии нужны для того, чтобы программист, вернувшись к написанному спустя большое время, мог быстро понять, как была написана программа.

Запятые служат для разделения имен элементов программы при их перечислении.

Точка с запятой завершает законченное предложение языка. Если точка с запятой где-либо забывается или ставится излишне, система при компиляции возвращает сообщение об ошибке.

Точка завершает программу. Любая команда, записанная после точки, не обрабатывается компилятором. Если точка забыта, возникает сообщение об ошибке.

Кроме того, имеются так называемые зарезервированные слова, которые имеют вполне определенный смысл, переопределять их нельзя. К ним относятся (в Turbo Pascal 7.1):

asm end inline procedure type

and exports interface program unit

array file object record until

begin for label repeat uses

case library mod set var

const function nil shl while

div goto not shr with

do if of string implementation

downto or xor then constructor

else in packed to destructor

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

  1. Что такое типы данных? Любая программа оперирует некоторыми данными. Это могут быть числа, символы, строки символов и пр. Естественно, разные данные требуют разного подхода к себе, разных способов обработки. К примеру, нельзя строку символов возвести в квадрат, а число – можно. Отсюда выведем определение типа данных: тип данных – это некоторое множество значений с определенными на нем допустимыми операциями.

  2. Какие бывают типы данных? Классификация типов такова: простые типы, структурированные, указатели, процедурные типы, объекты. Объем данного издания ограничен, поэтому мы полностью рассмотрим только простые и частично – структурированные типы.

  3. Что относится к простым, а что – к структурированным типам данных? К простым типам данных относятся: целые, логические, символьный, перечисленный, вещественный типы и тип-диапазон. К структурированным относятся: массив, запись, множество, файл. Кроме того, целые, логические, символьный, перечисленный и тип-диапазон относятся к так называемым порядковым типам: значения их упорядочены и относительно какого-либо значения элемента программы, имеющего порядковый тип, можно найти предыдущий к нему и последующий с помощью функций Pred(x) и Succ(x) соответственно (здесь x – имя элемента программы, имеющий порядковый тип).

  4. Как определяются числовые типы данных? Имеются два вида типов данных, которые соответствуют числам: это целочисленные типы и вещественные типы. Названия говорят сами за себя: целочисленный тип соответствует элементам программы, которые могут принимать только целые значения из некоторого диапазона, вещественные же типы соответствуют и целым, и дробным числам. Названия типов и диапазоны значений, определяемые ими, таковы:

Названия целых типов Диапазоны значений

  • ShortInt (короткое целое) -128..127

  • Integer (целое) -32768..32767

  • LongInt (длинное целое) -2147483648..2147483647

  • Byte (байт) 0..255

  • Word (слово или два байта) 0..65535

Названия вещественных типов Диапазоны значений

(min модуля … max модуля)

  • Real (вещественный) 2.9∙10-39 .. 1.7∙1038

  • Single (простой) 1.5∙10-45 .. 3.4∙1038

  • Double (двойной) 5.0∙10-324 .. 1.7∙10308

  • Extended (расширенный) 3.4∙10-4932 .. 1.1∙104932

  • Comp -263+1 .. 263-1

Замечания: Для отделения целой части от дробной служит десятичная точка (не запятая!). Тип Comp может содержать только целые значения, однако не является целым. Все вещественные типы, кроме Real, можно использовать в программе, только если в самом начале программы записаны директивы {$N+} или {$E+} (именно так, в фигурных скобках).

Порой вещественные числа отображаются на экране так: 3.48485E-47, с буквой Е. Как читать такую запись? Букву E нужно воспринимать как «…, умноженное на 10 в степени… ». К примеру, записанное здесь число в обычной нотации выглядит как 3.48485∙10-47.

  1. Какой тип данных соответствует строкам? Строковый тип данных именуется string (разберем только его). Если элемент программы имеет данный тип, то в него можно записать строку символов, длиной не более 255 символов. Пусть, к примеру, элемент a имеет тип string. Тогда к 47-му его символу можно обратиться так: a[47], а к его произвольному, i-му элементу, можно обратиться так: a[i]. Порой, при определении строковых элементов программы в блоке описания, указывается их максимальная длина (в символах) и делается это так: вместо типа string пишется string[n], где n – число, равное этой максимальной длине. К примеру, чтобы задать тип данных, который суть строка длины 15 нужно записать предложение: type s15 = string[15]. Здесь слово type говорит о том, что пользователь определяет собственный тип данных.

  2. Какой тип данных соответствует символам? Он называется char. Элемент программы такого типа занимает 1 байт памяти и может содержать в себе некоторый символ кодировки (из 256 возможных).

  3. Что такое логические типы данных? Под логическим обычно подразумевается тип данных, называемый boolean, который имеет всего два значения: истина – True, и ложь – False. Элемент программы такого типа занимает 1 байт памяти. Кроме того, в Turbo Pascal 7.1 определены иные логические типы (занимающие иное количество байт памяти): ByteBool (занимает 1 байт), WordBool (занимает 2 байта), LongBool (занимает 4 байта). Их значения тоже могут быть только True или False.

  4. Что такое перечисленный тип? Значения перечисленного типа (при его задании в блоке описаний) перечисляются в круглых скобках через запятые. Перечисленный тип данных обычно определяется пользователем. К примеру, чтобы задать перечисленный тип «масти» (suit по-английски), можно записать такую конструкцию: type Suit = (Club, Diamond, Heart, Spade). Здесь слово type говорит о том, что пользователь определяет собственный тип данных. В некоторых литературных источниках перечисленный тип данных называется «перечисляемым».

  5. Что такое тип-диапазон? Тип-диапазон определяет некоторый промежуток значений какого-либо базового порядкового типа путем указания начального и конечного значений, разделенных двумя точками (именно двумя, а не тремя или как-либо иначе!). К примеру, тип «цифра» (digit по-английски) можно было бы задать так: type digit = 0..9.

  6. Что такое константы и переменные? Ясно, что программа оперирует данными. У данных имеются различные типы. Данные должны где-то храниться, и эта область памяти, в которой хранятся данные, должна быть поименована. Данные в процессе исполнения программы либо могут меняться (быть переменными), либо не должны изменяться (быть константными). В соответствии с этим поименованная область памяти, содержимое которой может изменяться, называется переменной, а поименованная область памяти, содержимое которой не может изменяться, называется константой.

Чтобы задать переменные, нужно написать такую конструкцию:

var Переменная1, Переменная2, … ПеременнаяN: Тип1;

ПеременнаяN+1, ПеременнаяN+2, … ПеременнаяN+M: Тип2; и т.д. (здесь var – зарезервированное слово, обязательное для блока задания переменных). Тип1, Тип2 и т.д. – это названия типов данных (см. выше), их нужно писать обязательно, чтобы программа «знала», какие значения можно записать в ту или иную переменную.

К примеру:

var

t:char;

h,m,s,c:word;

i,j:byte;

Var r:Real;

s1,s2:String;

c:Integer;

Var

MND,i,j:Integer;

IsS:Boolean;

Заметим еще раз, что не важно, какими буквами – прописными или строчными – записано определение переменных. Так, MND, Mnd, mNd, mnd – одна и та же переменная.

Чтобы задать константы, нужно написать такую конструкцию:

const Константа1=Выражение1;

Константа2=Выражение2;

КонстантаN=ВыражениеN;

здесь const – зарезервированное слово, обязательное для блока задания констант, а выражения состоят из постоянных величин, операций и вызовов функций из ряда: Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred, Ptr, Round, SizeOf, Succ, Swap, Trunc.

К примеру:

Const

DeltaPicture=16;

DeltaCount=0.01;

Const phi=0.6180339890;

pqd=0.3819660116;

const

s: string = 'А!!!';

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

const ИмяКонстанты: Тип = Выражение.

Заметим еще раз, что не важно, какими буквами – прописными или строчными – записано определение констант. Единственно, стоит различать высоту букв в символьных или строчных константах. Так, определения Const a = ’Вася’ и cOnsT A = ’Вася’ эквиваленты, а определения const a = ’Вася’ и const a = ’ВАСЯ’ не эквиваленты.

  1. Как вводят и выводят данные? Основа диалога с пользователем – ввод-вывод данных. Осуществляется он с помощью четырех процедур:

  • Read(Переменная1, … ПеременнаяN); - считывает с клавиатуры данные (введенные через пробел) и помещает их в переменные Переменная1, … ПеременнаяN.

  • ReadLn(Переменная1, … ПеременнаяN); - считывает с клавиатуры данные (введенные через пробел или через Enter), помещает их в переменные Переменная1, … ПеременнаяN и осуществляет переход на новую строку при отображении данных на экране.

  • Write(Выражение1, … ВыражениеN); - выводит на экран значения выражений Выражение1, … ВыражениеN.

  • WriteLn(Выражение1, … ВыражениеN); - выводит на. экран значения выражений Выражение1, … ВыражениеN и осуществляет переход на новую строку при отображении данных на экране.

К примеру, процедура

readln(s1);

считает с клавиатуры значение переменной s1, а процедура

write('|Системное время:',h:2,'ч',m:3,'м',s:3,':',c:2,'с |'); выведет на экран строку примерно такого вида (см. задачи из Части 1):

| Системное время: 12ч 54м 45:89с |

Здесь в переменной h хранится количество часов, в переменной m – количество минут, s – количество секунд, а c – количество сотых долей секунды. Целые числа после двоеточий (например, h:2) указывают на количество позиций, отводимое на экране под вывод той или иной переменной. Это так называемый форматный вывод. Уясните на этом примере, как можно выводить смесь строк и переменных, перечисляя сроки и переменные через запятые.

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

WriteLn('Нажмите Enter…');

ReadLn;

  1. Что такое присваивание? Иным способом изменения значения переменных является присваивание. Это конструкция вида:

Переменная := Выражение;

и она означает, что в переменную Переменная помещается результат вычисления Выражения.

  1. Какие есть арифметические операторы? К арифметическим операторам относят следующие.

Таблица 2. Арифметические операторы

Название

Вид

выражения

Тип

аргументов

Тип

результата

Описание

Сложение

a + b

Целый или вещественный

Целый, если оба аргумента целые, иначе - вещественный

Сложение двух чисел

Вычитание

a - b

Целый или вещественный

Целый, если оба аргумента целые, иначе - вещественный

Вычитание двух чисел

Умножение

a * b

Целый или вещественный

Целый, если оба аргумента целые, иначе - вещественный

Умножение двух чисел

Деление

a / b

Целый или вещественный

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

Деление двух чисел

Таблица 2. Арифметические операторы (продолжение)

Название

Вид

выражения

Тип

аргументов

Тип

результата

Описание

Частное при целочисленном делении

a div b

Целый

Целый

Получение частного от деления двух целых чисел. Например, 26 div 4 дает в результате 6.

Остаток от целочисленного деления

a mod b

Целый

Целый

Получение остатка при делении двух целых чисел. Например, 26 mod 4 дает в результате 2.

Стоит особо подчеркнуть значение последних двух операторов при решении задач на делимость двух чисел. Запомните правило: если число a делится на число b, то остаток от деления a на b равен 0. Записывается этот факт так: a mod b = 0.

  1. Какие имеются математические функции в Turbo Pascal? Эти функции следующие.

Таблица 3. Математические функции

Название

Вид

выражения

Тип

аргументов

Тип

результата

Описание

Абсолютная величина (модуль)

abs(x)

Целый или вещественный

Совпадает с типом аргумента

Абсолютная величина (модуль) числа x: |x|.

Арктангенс

arctan(x)

Целый или вещественный

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

Арктангенс числа x: arctg x.

Косинус

cos(x)

Целый или вещественный

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

Косинус числа x: cos x.

Экспонента

exp(x)

Целый или вещественный

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

Экспонента числа x: ex, где e = 2.718… – основание натурального логарифма

Дробная часть

frac(x)

Целый или вещественный

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

Дробная часть числа x: .

Целая часть

int(x)

Целый или вещественный

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

Целая часть числа x с учетом знака: .

Таблица 3. Математические функции (продолжение)

Название

Вид

выражения

Тип

аргументов

Тип

результата

Описание

Натуральный логарифм

ln(x)

Целый или вещественный

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

Натуральный логарифм числа x: ln x.

Число π

pi

Целый или вещественный

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

Число π = 3.1415926…

Синус

sin(x)

Целый или вещественный

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

Синус числа x: sin x.

Квадрат

sqr(x)

Целый или вещественный

Совпадает с типом аргумента

Квадрат числа x: x2.

Корень квадратный

sqrt(x)

Целый или вещественный

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

Квадратный корень числа x: .

Заметим, что в Turbo Pascal нет функций тангенса и возведения положительного числа в произвольную степень – их приходится реализовывать программно (см. примеры к данной части).

  1. Некоторые полезные функции. Дополнительно приведем несколько функций, обычно используемых в начальном курсе программирования.

Таблица 4. Некоторые полезные функции

Название

Вид

выражения

Тип

аргументов

Тип

результата

Описание

Вывод символа

chr(x)

Byte

Char

Вывод символа по его коду

Порядковый номер

ord(x)

Любой порядковый тип

LongInt

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

Отсечение дробной части

trunc(x)

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

LongInt

Отсечение дробной части у вещественного числа. Отличается от int(x) тем, что результат является целым.

Таблица 4. Некоторые полезные функции (продолжение)

Название

Вид

выражения

Тип

аргументов

Тип

результата

Описание

Округление

round(x)

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

LongInt

Округление вещественного числа до ближайшего целого

Нечетность

odd(x)

LongInt

Boolean

Результат равен True, если аргумент нечетный и False, если четный.

  1. Как сравниваются результаты вычислений? Имеются следующие знаки отношений: = (равно), > (больше), < (меньше), >= (больше или равно), <= (меньше или равно), <> (не равно). С помощью этих знаков, а также функций, возвращающих логический результат (как, например, odd(x)) составляются простые логические выражения. Так, x > 0, x + z <= y, x <> x, odd(x), x mod y <> 0 – это простые логические выражения.

  2. Как можно построить составное логическое выражение? Для этого пользуются логическими связками (операторами) and (“и”), or (“или”) и not (“не”). Смысл их следующий. Пусть даны два простых логических выражения A и B. Это могут быть либо равенства, либо неравенства, либо условия вхождения некоторого элемента во множество, записанные с помощью оператора in, либо вызов функции, возвращающей логический результат. Тогда:

  • логическое выражение A and B (читается “A и B”) является истинным только в том случае, когда оба входящих в него выражения истинны (выполняются одновременно), во всех остальных случаях оно ложно. Данная связка применяется в том случае, когда мы хотим обозначить условие, выполняющееся только в том случае, когда все его составные части выполняются. Так, к примеру, условие должно быть записано так: (24<=x)and(x<=89). Обратите внимание: части выражения заключены в скобки!

  • логическое выражение A or B (читается “A или B”) является ложным только в том случае, когда оба входящих в него выражения ложны (не выполняются одновременно), во всех остальных случаях оно истинно. Данная связка применяется в том случае, когда мы хотим обозначить условие, выполняющееся в тех случаях, когда хотя бы одно из входящих в нее условий выполняется. Так, к примеру, если x и y обозначают возраст двух людей в годах, то условие «Хотя бы один человек совершеннолетний» запишется так: (18<=x)or(18<=y).

  • логическое выражение not A (читается “не A”) истинно тогда, когда A ложно, и ложно тогда, когда A истинно. Эта связка называется «отрицание». Смысл ее весьма прозрачен. К примеру, если x и y обозначают возраст двух людей, то условие «Ни один человек не является совершеннолетним» запишется так: not((18<=x)or(18<=y)), то есть, данное утверждение эквивалентно следующему: «Неправда, что хотя бы один из двух людей достиг совершеннолетия».