Логически изрази.  Тема: Булев тип данни

Логически изрази. Тема: Булев тип данни

. хпринадлежи към сегмента;
х лежи извън сегмента;
х принадлежи към сегмента или [-1,1];
х лежи извън сегмента или [-1,1].
3.
Обяснете структурата и правилата за изпълнение на условни оператори.
4.
Напишете определеното действие като единичен условен оператор:
cos
2
х, при 0x при =
1-грях
2
х, в противен случай.
5.
z
int z=0, x=1, y=

1;

80 Програмиране на линейни алгоритми в системата C++ Builder
ако (x>0) ако (y>0) z=1; иначе z=2;
6.
Каква стойност ще има променливата? zслед изпълнение на операторите:
int z=0, x=

1, y=1;
if (x) ( if (y>0) z=1;) else z=2;
7.
Каква стойност ще има променливата? zслед изпълнение на операторите:
int z=0, x=0, y=1;
if (x) ( if (y>0) z=1;) else z=2;
8.
Каква стойност ще има променливата? zслед изпълнение на операторите:
int z=0, x=3, y=1;
if (x) ( if (y) z=1;) else z=2;
9.
Моля, посочете грешки в следните твърдения:
ако (1
иначе x=0; y+= 1;
10.
int z=0, x=0, y=1;
if (!x) ( if (!(y

1)) z=1;) иначе z=2;
11.
Каква стойност ще има променливата z след изпълнение на операторите:
int z=0, x=1, y=1;
if (!x) ( if (!(y

1)) z=1;) иначе z=2;
12.
Намерете грешки в програмния фрагмент:
(int n,x; switch (k) case + : x:=x-4 break; case

-

,

*

, х=5;
}
Какви правила са били нарушени и как могат да бъдат коригирани грешките?


81
3.4
Индивидуални задачи за раздел 3
Всеки ученик трябва да реши две задачи от първо и второ ниво на сложност.
Задачи от първо ниво на трудност.
1.
Дадено ви е четирицифрено положително цяло число. Напишете програма, която печата вярноили невярнов зависимост от това дали определеното условие е изпълнено или не: сумата от 1 и 4 цифри е равна на произведението от 2 и 3 цифри.
2.
Дадени са реални числа x, y. Ако x и y са отрицателни, тогава заменете всяка стойност с нейния модул; ако само една от тях е отрицателна, увеличете и двете стойности с 5,5; в други случаи намалете и двете стойности с 10 пъти.
3.
Дадени са реални числа x, y. Ако x и y са положителни, тогава намалете всяка стойност 5 пъти; ако и двете стойности са в диапазона [-3, 9], тогава заменете и двете стойности с 0; в други случаи увеличете x и y с 3.
4.
Дадени реални числа x, y (xy). Заменете по-малкото от тези две числа с тяхната полусума, а по-голямото с двойното им произведение.
5.
Ако сумата от три двойки различни реални числа x, y, z е по-малка от 1, тогава заменете най-малкото от тези три числа с полусумата на другите две; в противен случай заменете по-малкото от x и y с полусумата на останалите две стойности.
6.
Дадени са реални числа a, b, c, d. Ако b>c>d, след това оставете числата непроменени; в противен случай заменете всички числа с квадрати.
7.
Определете дали шестцифрено цяло число е щастливо. (Числото се нарича щастливо, ако сборът от първите му три цифри е равен на сбора от последните му три цифри.)
8.
вярноили невярнов зависимост от това дали определеното условие е изпълнено или не: за произволни реални числа a, b, c, определете дали уравнението ax
2
+bx+c=0 поне едно реално решение.

82 Програмиране на линейни алгоритми в системата C++ Builder
9.
За да разрешите следния проблем, напишете програма, която печата вярноили невярнов зависимост от това дали определеното условие е изпълнено или не: определя дали сборът от първите две цифри на дадено четирицифрено число е равен на сбора от последните му две числа.
10.
Някои образователни институции имат следните правила за прием. Кандидатите полагат два изпита, които се оценяват съгл
100 точки всеки. Ако кандидатът набере най-малко 150 точки, това дава право да се запише в редовния отдел, от 100 до 149 - във вечерния отдел; под 100 точки означава отказ за прием в обучение. Напишете програма, която в зависимост от събраните точки информира кандидата за правата му за прием.
11.
Напишете програма, като използвате оператора за избор, за да получите вербално описание на маркировките. (1 – „лошо“, 2 –
„незадоволително“, 3 – „задоволително“, 4 – „добро“, 5 –
"Страхотен".)
12.
За да разрешите следния проблем, напишете програма, която печата вярноили невярнов зависимост от това дали зададеното условие е изпълнено или не: определя дали сред цифрите на дадено трицифрено число има еднакви.
13.
Напишете програма, която печата вярно, ако дата d1, m1предшества (в рамките на една година) датата d2, m2и смисъл невярнов противен случай.
14.
Напишете програма, като използвате оператор за избор, който въз основа на първата буква от името показва пълното име на екрана
(Иван, Петър, Николай, Владимир, Георги).
15.
Напишете програма, като използвате оператора за избор, който на базата на въведената цифра 0≤ k≤ 5 отпечатва името на този номер на руски и английски език.
16.
Дадено е цяло число k (1

к

365). Определете дали k-тият ден от годината ще бъде уикенд или работен ден, ако 1 януари е понеделник.
17.
Дадено е реално число х. Изчисли f, ако:











грях
,
1 0
,
0 5
2 11 2
случаи
остатъка
V
х
х
х
при
х
х
х
при
f

Програмиране с едномерни масиви
83 18.
Дадено е реално число х. Напишете програма за изчисляване f:












34 5
,
12 3
lg ln
,
3 5
1 3
2 4
случаи
остатъка
V
х
х
х
при
х
х
х
при
f
19.
Напишете програма, като използвате оператор за избор, който въз основа на първата буква от името на града показва пълното име на града (Курск, Москва, Тула, Новгород, Воронеж).
20.
Напишете програма, като използвате оператор за избор, който въз основа на първата буква от фамилното име показва пълното фамилно име (Иванов, Петров, Сидоров, Мишкин, Шишкин).
21.
Дадени са координатите на центъра и радиуса на окръжността. Определете дали определена точка с координати (x,y) принадлежи на окръжност.
22.
Напишете програма, като използвате оператор за избор, който въз основа на въведената първа буква от името на животното ще отпечата пълното име на животното (куче, котка, жираф, кон, маймуна).
23.
Дадени са три различни числа a,b,c. Сортирайте тези числа във възходящ ред, така че асъответстваше на най-малкото число b- среден брой, ° С- най-великия.
24.
Напишете програма с помощта на оператор за избор, който извежда името на деня от седмицата по номер (от 1 до 7).
25.
Напишете програма с помощта на оператор за избор, който извежда името на месеца от годината с число (от 1 до 12).
26.
Напишете програма с помощта на оператора за избор, която на базата на въведената първа буква от името на сезона от годината извежда пълното име на сезона от годината.
27.
Дадено ви е петцифрено положително цяло число. Напишете програма, която печата вярноили невярнов зависимост от това дали определеното условие е изпълнено или не: сумата от 1, 3 и 5 цифри е по-голяма от произведението от 2 и 4 цифри.
28.
Дадено ви е четирицифрено положително цяло число. Напишете програма, която печата вярноили невярнов зависимост от

84 Програмиране на линейни алгоритми в системата C++ Builder дали определеното условие е изпълнено или не: средно аритметично 1 и
4 цифри са по-големи от сумата от 2 и 3 цифри.
29.
Дадени са цифра и трицифрено число в десетичната бройна система. Ако цифрата съвпада с най-голямата цифра на числото, изчислете сумата от цифрите на числото. Ако цифрата съвпада със средната цифра на числото, изчислете произведението на цифрите на числото. Ако цифрата съвпада с най-малката цифра на числото, изчислете средноаритметичната стойност на цифрите на числото. Ако нито едно от условията не е изпълнено, изчислете средната геометрична стойност на цифрите на числото.
30.
Дадени са цифра и трицифрено число в десетичната бройна система. Ако цифрата съвпада с най-високата цифра на числото, изчислете средноаритметичната стойност на цифрите на числото. Ако цифрата съвпада със средната цифра на числото, изчислете средната геометрична стойност на цифрите на числото. Ако цифрата съвпада с най-малката цифра на числото, изчислете сумата от цифрите на числото. Ако нито едно от условията не е изпълнено, изчислете произведението на цифрите на числото
Задачи от второ ниво на трудност.
1.
Дадено е двуцифрено положително цяло число в троичната бройна система. Напишете програма, която показва имената на цифрите на число на руски, ако най-голямата цифра на числото е по-голяма от най-малката, в противен случай
- на английски.
2.
Дадено е цяло двуцифрено положително число в петцифрената бройна система. Напишете програма, която показва имената на цифрите на число на английски, ако най-голямата цифра на числото е по-голяма от най-малката, в противен случай
- на руски.
3.
Дадено е цяло двуцифрено положително число в петцифрената бройна система. Напишете програма, която показва имената на цифрите на число на английски, ако най-високата цифра на числото е точно 2 пъти по-голяма от най-малката, в противен случай
- на руски.
4.
Дадено е двуцифрено положително цяло число в троичната бройна система. Напишете програма, която показва имената на цифрите на число на руски, ако най-голямата цифра на числото е по-малка от най-ниската, в противен случай
- на английски.

Програмиране с едномерни масиви
85 5.
Дадено е цяло двуцифрено положително число в петцифрената бройна система. Напишете програма, която извежда имената на цифрите на число на руски език.
6.
Дадено е цяло двуцифрено положително число в осмичната бройна система. Напишете програма, която извежда имената на цифрите на число на руски език.
7.
Дадено е цяло двуцифрено положително число в осмичната бройна система. Напишете програма, която показва, ако голямата цифра е по-малка от половината от малката цифра, имената на цифрите на числото на английски, в противен случай

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

на руски.
9.
В десетичната бройна система са дадени две цифри. Напишете програма, която извежда имената на английски език на цифрите от сбора на тези цифри.
10.
В десетичната бройна система са дадени две цифри. Напишете програма, която извежда имената на руски на числата на произведението на тези числа.
11.
В десетичната бройна система са дадени две цифри. Напишете програма, която показва името на руски език на цифрите на модула на разликата между тези цифри.
12.
В десетичната бройна система са дадени две цифри. Напишете програма, която извежда имената на цифрите на английски за частното и остатъка от целочислено деление на тези числа.
13.
Дадено е двуцифрено положително цяло число в деветцифрената бройна система. Напишете програма, която показва, ако най-голямата цифра е три пъти по-голяма от най-малката цифра, имената на цифрите на числото на английски, в противен случай

на руски.
14.
Дадено е двуцифрено положително цяло число в деветцифрената бройна система. Напишете програма, която показва името на цифрата на число, което има по-голяма стойност на английски, и името на цифрата на число, което има по-малка стойност.

на руски.

86 Програмиране на линейни алгоритми в системата C++ Builder
15.
Дадено е двуцифрено положително цяло число в септалната бройна система. Напишете програма, която показва името на цифрата на число, което има по-голяма стойност на английски, и името на цифрата на число, което има по-малка стойност.

на руски.
16.
Дадено е двуцифрено положително цяло число в шестнадесетичната бройна система. Напишете програма, която извежда имената на цифрите на число на английски език.
17.
Дадени са две цели двуцифрени положителни числа в троичната бройна система. Напишете програма, която извежда имената на цифрите от сбора на тези числа на руски език.
18.
Дадени са две цели двуцифрени положителни числа в двоичната бройна система. Напишете програма, която извежда имената на цифрите от сбора на тези числа на английски език.
19.
Дадено е двуцифрено положително цяло число в петцифрената бройна система. Напишете програма, която показва, ако числата са подредени във възходящ ред, имената на цифрите на числото на английски, а в противен случай

на руски.
20.
Дадено е двуцифрено положително цяло число в шестнадесетичната бройна система. Напишете програма, която показва, ако най-голямата цифра е пет пъти по-голяма от най-малката цифра, имената на цифрите на числото на руски, в противен случай

на английски.
21.
В осмичната бройна система са дадени две цифри. Напишете програма, която показва имената на руски език на цифрите на модула на разликата между тези цифри.
22.
В осмичната бройна система са дадени две цифри. Напишете програма, която извежда имената на руски на цифрите от сбора на тези две цифри.
23.
Дадено е двуцифрено положително цяло число в септалната бройна система. Напишете програма, която показва, ако най-голямата цифра е три пъти по-голяма от най-малката цифра, имената на цифрите на числото на руски, в противен случай

на английски.
24.
Дадено е двуцифрено положително цяло число в осмичната бройна система. Напишете програма, която извежда името на цифрата на число, което има по-голяма стойност на руски и в

Програмиране с едномерни масиви
87 е рангът на цифрата на числото, което има най-ниска стойност,

на английски.
25.
Дадено е двуцифрено положително цяло число в септалната бройна система. Напишете програма, която извежда името на цифрите на число със стойност по-малка от 4 на руски език и името на цифрите на число със стойност по-голяма или равна на 4,

на английски.
26.
Дадено е двуцифрено положително цяло число в шестнадесетичната бройна система. Напишете програма, която показва името на цифрите на число със стойност по-малка от 3 на руски език и името на цифрите на число със стойност по-голяма или равна на 3,

на английски.
27.
Посочват се първите две букви (без разлика на малки и големи букви) от името на месеца от годината. Напишете програма, която показва пълното име на месеца от годината на руски език.
28.
Дават се първите две букви (без разлика на малки и големи букви) от името на деня от седмицата. Напишете програма, която показва пълното име на деня от седмицата на руски език.
29.
Старият японски календар приема 60-годишен цикъл, състоящ се от пет 12-годишни подцикъла. Подциклите бяха обозначени с имена на цветове: зелено, червено, жълто, бяло и черно. В рамките на всеки подцикъл годините бяха кръстени на животни: плъх, крава, тигър, заек, дракон, змия, кон, овца, маймуна, пиле, куче и прасе (1984 г. - годината на зеления плъх - беше началото на следващата цикъл). Напишете програма, която въвежда номера на определена година от н. е. и отпечатва името й според стария японски календар.
30.
Дадено е двуцифрено положително цяло число в деветцифрената бройна система. Напишете програма, която показва името на цифрите на число със стойност по-голяма от 5 на руски език и името на цифрите на число със стойност по-малка или равна на 5,

на английски.

88 Програмиране на линейни алгоритми в системата C++ Builder
4 ЦИКЛИЧНО ПРОГРАМИРАНЕ
АЛГОРИТМИ В СИСТЕМАТА C++BUILDER
Този раздел разглежда операторите на езиков цикъл
C++, придобиване на умения за програмиране на циклични алгоритми, въведение
да, компилиране и отстраняване на грешки в програми.
4.1
Основни понятия
На езика C++ Builder Има три оператора за цикъл:
1.
Цикъл с предварително условие ( докато);
2.
Цикъл с постусловие ( направи);
3.
Цикъл с брояч ( за).
Оператор на цикъл с предусловие докато (Фигура 4.1):
докато(състояние) (тяло на контур)
Фигура 4.1

Диаграма на алгоритъм на оператор на цикъл докато
Ако резултатът от изчисляването на условието е вярно(true), тогава се изпълнява тялото на цикъла и отново се извършва преходът към проверка на условието. Ако резултатът от изчисляването на условието е невярно(false), след това цикълът излиза и се премества към израза след цикличния оператор докато.
Ако преди първото изпълнение на цикъла стойността на израза беше невярно, тялото на цикъла изобщо не се изпълнява и се извършва преходът към следващия оператор.
Състояние
Тяло на примка
да
Не

Програмиране с едномерни масиви
89
Пример:
Изчислете сбора на нечетните числа в диапазона от 1 до 10.
( int k=1, s=0; докато (k ( s+=k; k+=2;
}
}
Оператор на цикъл с постусловие направи (Фигура 4.2):
направи(тяло на цикъл) докато(състояние); да без условие
Тяло на примка
Фигура 4.2

Диаграма на алгоритъм на оператор на цикъл направете...докато
Условието е израз от логически тип, тялото на цикъла е един прост или съставен оператор.
Тяло на цикъла на изявление

С учителя изберете задача за самостоятелна работа от упражненията по-долу.

1. Изчислете стойностите на израза:

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

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

c) odd(trunc(10*p)) при p=0,182;

d) нечетен(n) за n=0;

д) t и (p mod 3=0) с t=вярно, p=101010;

д) (x*y<>0) и (y>x) за x=2, y=1;

g) (x*y<>0) или (y>x) за x=2, y=1;

h) a или (не b), когато a=False, b=True;

2. Напишете релация в Pascal, която е вярна, когато е изпълнено определеното условие и невярна в противен случай:

а) цялото число k се дели на 7;

б) уравнението няма реални корени;

в) точка (x, y) лежи извън окръжността с радиус R с център в точка (1,0);

г) естественото число N е квадрат на естественото число;

f) x=max(x,y,z);

и) (не използвайте операцията не)g

з) поне една от логическите променливи a и b има стойност True;

i) и двете логически променливи a и b имат стойност True.

3. Посочете реда на операциите при изчисляване на изрази:

а) a и b или не c и d;

b) (x>=0) или не c и d.

4. Изчислете следните изрази за a=True, b=False:

а) a или b, а не a;

b) (a или b), а не a;

в) не а и б;

г) не (а и б)

5. Напишете израз на Pascal, който е верен, когато определеното условие е изпълнено, и невярно в противен случай:

а) x принадлежи на отсечката ;

б) x лежи извън отсечката;

c)* x принадлежи на сегмента или [-1, 1];

г)* x лежи извън отсечките и [-1, 1];

д) всяко от числата x, y, z е положително;

ж) нито едно от числата x, y, z не е положително;

з) само едно от числата x, y, z е положително;

i) логическата променлива a има стойност True, логическата променлива b има стойност False;

j)* година с пореден номер y е високосна година (високосна година, ако числото й е кратно на 4, но от кратните на 100 само кратните на 400 са високосни години, например 1700, 1800 и 1900 са невисокосни години, 2000 е високосна година).

6. Начертайте върху равнината (x, y) областта, в която и само в която посоченият израз е верен:

а)* (y>=x) и (y+x>=0) и (y<=1);

б) (sqr(x)+sqr(y)<1) or (y>0) и (abs(x)<=1);

c) (trunc(y)=0 и (round(x)=0);

d)* (abs(x)<=1)>(abs(y)>=1);

d) (sqr(x)+sqr(y)<=4)=(y<=x).

7) Има условен оператор:

writeln („ура!“)

writeln ('лошо...')

Възможно ли е да го замените със следните твърдения:

а) ако d=10 б) ако не (d=10)

writeln („ура!“) writeln („ура!“)

writeln('лошо...'); writeln('лошо...');

в) ако не (d=10) г) ако не (d<>10)

writeln ('лошо...') writeln ('лошо...')

writeln('ура!'); writeln('ура!');

8) Какви ще бъдат стойностите на променливите j, k след изпълнение на условния оператор:

ако началните стойности на променливите са равни:

Забележка. В резултат на изпълнението на оператора dec (k,2) стойността на променливата k се намалява с 2.

Променливите от булев тип се описват с помощта на идентификатор Булева стойност . Те могат да имат само две значения - Невярно (лъжа)И Вярно (вярно). Те също са описани в раздела за описание на променливи. вар<имя>:Boolean;

Логическите изрази могат да включват:

n логически стойности,

n релационни операции (<- меньше, >- Повече ▼,<=- меньше или равно, >=- по-голямо или равно на,<>- не е равно, =- равно).

n логически операции And, Or, Not

n дек. действия и функции


Turbo Pascal има логически операции, които се прилагат към променливи от логически тип. Това са операциите not, and, or и xor.

Операция не(не) има един операнд и формира неговото логическо отрицание. Резултатът от операцията not е False, ако операндът е true, и True, ако операндът е false. И така, не вярно лъжа (неистината е лъжа) не лъжа вярно (не лъжата е истина).

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

Резултат от операцията или(или) е вярно, ако някой от неговите операнди е вярно, и невярно само ако и двата операнда са неверни (логическо събиране).

Логическите операции, релационните операции и аритметичните операции често се появяват в един и същи израз. В този случай отношенията отляво и отдясно на знака за логическа операция трябва да бъдат оградени в скоби, тъй като логическите операции имат по-висок приоритет. Като цяло се приема следният приоритет на операциите:

2. и, *, /, div, mod

3. или, +, -

4. релационни операции (<- меньше, >- Повече ▼,<=- меньше или равно, >=- по-голямо или равно на,<>- не е равно, =- равно).

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

AorBandnot(AorB)


Операцията или, затворена в скоби, се изпълнява първо, последвана от операциите не и, или. Ако заместим стойностите True и False вместо променливи A и B, тогава, използвайки вече обсъдената процедура, получаваме стойността на целия израз, равна на True.

Упражнение 5: . Запишете в тетрадката си и изчислете значенията на изразите

с a=10, b=20, c=true, d=false: а)(a>5) и (b>5) и (a<20) and (b<30);

б)не (а<15) or not (b<30);

° С) c или d и (b=20).

внимание ! В Pascal няма начин за въвеждане на булеви данни с помощта на оператора read. Въпреки това е възможно да се изведат стойностите на променливи от булев тип, като се използва операторът за запис. Например, след изпълнение на оператора write (5>2), на екрана ще се покаже True.

Въпроси и задачи за домашна работа:

1. Как се описва логическа променлива и какви стойности може да приема?

2. Какво може да бъде включено в логическите изрази. Дайте примери за прости логически изрази.

3. Разкажете ни за логическите операции в Pascal. Дайте примери за съставни логически изрази.

4. Какъв е приоритетът на различните операции в Pascal. Дай пример.


Задачи:

№19.

А. цялото число k се дели на 7;

B. Поне едно от целите числа x, y е четно;

G. x=max(x,y,z), т.е. x е най-голямото от трите числа x,y,z;

Д. (не използвайте операцията not)

E. поне една от логическите променливи a и b има стойност True;

G. и двете логически променливи a и b имат стойност True.

№20. Посочете реда на операциите при изчисляване на изрази:

а) a и b или не c и d; b) (x>=0) или не c и d.

№21. Изчислете следните изрази, когато a=True, b=False:

а) a или b, а не a; б)(a или b), а не a; V)не а и б; G)не (а и б)

№22. Създайте програма: На приемните изпити кандидатът взе физика, информатика и есе. Кандидат ще бъде допуснат, ако получи 5 по информатика и поне 13 точки за три изпита Вярно ли е, че е допуснат (изход Вярно/Невярно)?

§ 8. Решаване на задачи по темата „Линейни програми. Логически стойности."

Пр. 7 . Изчислете стойностите на израза:

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

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

c) odd(trunc(10*p)) при p=0,182;

d) нечетен(n) за n=0;

д) t и (p mod 3=0) с t=вярно, p=101010;

д) (x*y<>0) и (y>x) за x=2, y=1;

g) (x*y<>0) или (y>x) за x=2, y=1;

h) a или (не b), когато a=False, b=True;

Пр. 8. Напишете израз в Pascal, който е верен, ако определеното условие е изпълнено, и невярно в противен случай:

а) x принадлежи на отсечката ;

б) x лежи извън отсечката;

c)* x принадлежи на сегмента или [-1, 1];

г)* x лежи извън отсечките и [-1, 1];

д) всяко от числата x, y, z е положително;

ж) нито едно от числата x, y, z не е положително;

з) само едно от числата x, y, z е положително;

i) логическата променлива a има стойност True, логическата променлива b има стойност False;


j)* година с пореден номер y е високосна година (високосна година, ако числото й е кратно на 4, но от кратните на 100 само кратните на 400 са високосни години, например 1700, 1800 и 1900 са невисокосни години, 2000 е високосна година).

Пр. 9 . Начертайте върху равнината (x, y) област, в която и само в която посоченият израз е верен:

а)* (y>=x) и (y+x>=0) и (y<=1);

б) (sqr(x)+sqr(y)<1) or (y>0) и (abs(x)<=1);

c) (trunc(y)=0 и (round(x)=0);

d)* (abs(x)<=1)>(abs(y)>=1);

d) (sqr(x)+sqr(y)<=4)=(y<=x).

Пр. 10 ..Книгата струва X рубли. Купувачът има банкноти в купюри от 50, 10, 5, 1 рубли. Колко и какви сметки трябва да вземете, за да платите книга с минимален брой сметки?

Булевите променливи обикновено получават стойностите си чрез извършване на сравнения и математически операции (обсъдени в предишния урок), както и чрез използване на специфични булеви операции.

Turbo Pascal има логически операции, които се прилагат към променливи от логически тип. Това са операциите not, and, or и xor. В тази тема ще разгледате три логически операции. Обозначенията и резултатите от тези операции са дадени в таблицата. Помисли за това.

Операция не(не) има един операнд и формира неговото логическо отрицание. Резултатът от операцията not е False, ако операндът е true, и True, ако операндът е false. Така,

не е вярно невярно (неистината е лъжа)

не е невярно вярно (нито една лъжа не е истина)

Резултат от операцията и(и) е истина само ако и двата му операнда са истина и невярно във всички останали случаи.

Резултат от операцията или(или) е вярно, ако някой от неговите операнди е вярно, и невярно само ако и двата операнда са неверни.

Упражнение . Опитайте се да определите значението на булевите операции за изрази:

  1. Ученик остава вкъщи през зимните ваканции или отива някъде на почивка.
  2. Филип Киркоров е певец и комбайнер.
  3. Учениците са момчета и момичета..

Логическите операции, релационните операции и аритметичните операции често се появяват в един и същи израз. В този случай отношенията отляво и отдясно на знака за логическа операция трябва да бъдат оградени в скоби, тъй като логическите операции имат по-висок приоритет. Като цяло се приема следният приоритет на операциите:

  • и, *, /, div, mod
  • или, +, -
  • операции на отношенията..

. Логическата операция и се нарича още логическо умножение, а логическата операция или също се нарича логическо събиране.

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

А или Б, а не (А или Б)

Операцията или, затворена в скоби, се изпълнява първо, последвана от операциите не и, или. Ако заместим стойностите True и False вместо променливи A и B, тогава, използвайки вече обсъдената процедура, получаваме стойността на целия израз, равна на True.

Упражнение . Запишете в тетрадката си и изчислете стойностите на изразите за a=10, b=20, c=true, d=false:

  • (a>5) и (b>5) и (a<20) and (b<30);
  • не (а<15) or not (b<30);
  • c или d и (b=20);

внимание! В Pascal няма начин за въвеждане на булеви данни с помощта на оператора read. Въпреки това е възможно да се изведат стойностите на променливи от булев тип, като се използва операторът за запис.

Например, след изпълнение на оператора write (5>2), на екрана ще се покаже True.

Самостоятелна работа

С учителя изберете задача за самостоятелна работа от упражненията по-долу.

  1. Изчислете стойностите на израза:

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

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

    c) odd(trunc(10*p)) при p=0,182;

    d) нечетен(n) за n=0;

    д) t и (p mod 3=0) с t=вярно, p=101010;

    д) (x*y<>0) и (y>x) за x=2, y=1;

    g) (x*y<>0) или (y>x) за x=2, y=1;

    h) a или (не b), когато a=False, b=True;

  2. Напишете релация в Pascal, която е истина, ако определеното условие е изпълнено, и невярно в противен случай:

    а) цялото число k се дели на 7;

    б) точка (x, y) лежи извън окръжността с радиус R с център в точка (1,0);

    в) естественото число N е квадрат на естественото число;

    г) 0

    д) x=max(x,y,z);

    д) поне една от логическите променливи a и b има стойност True;

    g) и двете логически променливи a и b имат стойност True.

  3. Посочете реда на операциите при изчисляване на изрази:

    а) a и b или не c и d;

    b) (x>=0) или не c и d.

  4. Изчислете следните изрази, когато a=True, b=False:

    а) a или b, а не a;

    b) (a или b), а не a;

    в) не а и б;

    г) не (а и б)

  5. Напишете израз в Pascal, който е верен, ако определеното условие е изпълнено, и невярно в противен случай:

    а) x принадлежи на отсечката ;

    б) x лежи извън отсечката;

    c)* x принадлежи на сегмента или [-1, 1];

    г)* x лежи извън отсечките и [-1, 1];

    д) всяко от числата x, y, z е положително;

    ж) нито едно от числата x, y, z не е положително;

    з) само едно от числата x, y, z е положително;

    i) логическата променлива a има стойност True, логическата променлива b има стойност False;

    j)* година с пореден номер y е високосна (високосна година, ако числото й е кратно на 4, но от кратните на 100 само кратните на 400 са високосна година, например 1700, 1800 и 1900 са невисокосни години, 2000 е високосна година).

  6. Начертайте върху равнината (x, y) област, в която и само в която посоченият израз е верен:

    а)* (y>=x) и (y+x>=0) и (y<=1);

    б) (sqr(x)+sqr(y)<1) or (y>0) и (abs(x)<=1);

    c) (trunc(y)=0 и (round(x)=0);

    d)* (abs(x)<=1)>(abs(y)>=1);

    d) (sqr(x)+sqr(y)<=4)=(y<=x).

  7. Има условен оператор:
    ако d<>10
    тогава
    writeln („ура!“)
    друго
    writeln('лошо...');

    Възможно ли е да го замените със следните твърдения:

  8. Какви ще бъдат стойностите на променливите j, k след изпълнение на условния оператор:
    ако j>k
    тогава
    j:=k-2
    друго
    dec(k,2);
    ако началните стойности на променливите са равни:
    а) j=3, k=5;
    б) j=3, k=3;
    в) j=3, k=2.

Забележка . В резултат на изпълнението на оператора dec (k,2) стойността на променливата k се намалява с 2.