Логічний тип даних. Операція відношення. Логічна операція. Логічний вираз.

Про матеріал
Навчитися описувати умовний оператор на мові програмукваннята розглянути типові задачі.
Перегляд файлу

Тема: Логічний тип даних. Операція відношення. Логічна операція. Логічний вираз.

Мета: навчитися описувати умовний оператор на мові програмукваннята розглянути типові задачі.

 

Структурні оператори

Структурні оператори визначають порядок виконання групи операторів. Є такі структурні оператори:

оператор об’єднання begin …end;

умовні оператори:

  • оператор альтернативи(усталена назва – умовний оператор) if … then … else…;
  • оператор вибору case … of … end;

оператори циклу:

  • оператор циклу з передумовою while … do …;
  • оператор циклу з післяумовою repeat … until …;
  • оператор циклу з лічильником for … to ( downto ) … do …;

оператор приєднання  для записів with … do … .

 

Оператор об’єднання BEGIN …END

Оператор begin …end об’єднує групу операторів в єдине ціле, після чого конструкція begin оператори end вважається єдиним оператором. Оператор об’єднання використовується в таких структурних операторах, в яких синтаксис мови Паскаль дозволяє використовувати один оператор. Наприклад, в операторі повторення while … do …після службового слова do за синтаксисом може бути записано один оператор.

Умовний оператор IF … THEN … ELSE…

Використовується для виконання однієї із двох або декількох можливих послідовностей операторів, в залежності від вказаної умови. Умовний оператор може бути записано в повній та неповній формах:

Неповна форма запису

Повна форма запису

if логічний вираз

then оператор;

if логічний вираз

then оператор1

else оператор2;

 

 

Порядок виконання :

обчислюється логічний вираз;

якщо результат має значення True(так), то виконується оператор1, що слідує за службовим словом then;

якщо результат має значення False(ні), то виконується оператор2, що слідує за службовим словом else.

Приклад.

З’ясувати, чи дійсне число A від’ємне.

var A : Real;

begin

Write(‘ A= ’);

ReadLn(A);

if A < 0

then WriteLn(' число ', A ,' від’ємне ')

else WriteLn(' число ', A ,' невід’ємне ');

end.

 

У випадку, коли умовний оператор записано в неповній формі, і результат логічного виразу приймає значення False, то управління передається оператору, що слідує безпосередньо за умовним оператором.

Приклад. Якщо ціле число A парне, то збільшити його на одиницю, інакше – залишити його без змін.

var A : Integer;

begin

Write (‘ A= ’);

ReadLn ( A );

if A Mod 2 = 0

then A := A + 1;

WriteLn (' A= ', A );

end.

Синтаксичні особливості:

перед службовим словом else символ “;”(крапка з комою) не ставиться;

В мові Паскаль оператори, розділи опису відокремлюються символом “;”(крапка з комою). В наведеному прикладі символ крапка з комою, що знаходиться перед службовим словом else, відокремлює умовний оператор від іншого оператора. А це приводить до синтаксичної помилки, оскільки оператора, що починається службовим словом else в мові програмування Паскаль не має.

if A > B
then C := A  ; ------Помилка!
else C := B.;

якщо після службового слова then або else потрібно виконати одразу декілька операторів, то необхідно скористатися оператором об’єднання begin … end .

Приклад. Якщо два цілих числа мають різні знаки, зменшити їх на одиницю, інакше збільшити їх на одиницю.

Оператори, вміщені в оператор об’єднання, теж повинні розділятися символом крапка з комою.

if A * B < 0

then begin A := A + 1;

B := B + 1;

end

else begin A := A – 1;

B := B – 1;

End;

Узагальнені форми умовного оператора

Кількість операторів

Форма запису

then

else

один

відсутні

if логічний вираз then оператор;

декілька

відсутні

if логічний вираз then begin оператори end;

один

один

if логічний вираз then оператор else оператор;

декілька

один

if логічний вираз then begin оператори end else оператор;

один

декілька

if логічний вираз then оператор else begin оператори end;

декілька

декілька

if логічний вираз then begin оператори end else begin оператори end;

після службових слів then і else може слідувати будь-який оператор, в тому числі і умовний. Якщо умовний оператор розміщено в межах оператора об’єднання, невизначеності не виникає, так як, службові слова begin end чітко обмежують послідовність операторів.

Однак, якщо умовний оператор є єдиним оператором, що слідує за службовим словом then, то може виникнути неоднозначність відповідності if else (правда, тільки для користувача).

В таких випадках слід користуватися правилом: службове слово else пов’язане з найближчим службовим словом if, що знаходиться перед ним.

if логічний вираз

then

if логічний вираз

then оператор

else оператор

else оператор;

Можна дати такі поради:

більш чітко визначати структуру умовного оператора записом;

if логічний вираз

then if логічний вираз

then оператор

else оператор

else оператор;

 

використовувати оператор об’єднання, навіть, якщо умовний оператор – єдиний оператор, який слідує за службовими словами then або else.

if логічний вираз

then begin if логічний вираз

then оператор

else оператор

end

else оператор;

Приклад. Задано дійсні числа a, b, c. Якщо існує трикутник із довжинами сторін a, b, c, то визначити, чи він рівносторонній.

var a, b, c : Real;

begin Write(‘ a,b,c -’);ReadLn( a, b, c );

if ( a < b + c ) And ( b < a + c ) And ( c < a + b )

then begin if ( a = b ) And ( b = c )

then WriteLn(‘ Трикутник рівносторонній ’)

esle WriteLn(‘ Трикутник не рівносторонній ’)

end;

end.

 

ПРИКЛАДИ РОЗВ'ЯЗУВАННЯ ЗАДАЧ

Знайти найбільше з двох дійсних чисел. Якщо числа рівні, то за найбільше взяти одне з них.

Розв’язання.

Введемо потрібні змінні з визначенням типу даних:

a, b – змінні дійсного типу: задані дійсні числа,

max2 – змінна дійсного типу: шукане найбільше число.

Алгоритм розв’язання задачі схематично запишемо так:

введення даних a, b;

знаходження max2;

виведення на екран результату – max2.

Запишемо алгоритм мовою Паскаль двома способами:

Повна форма умовного оператора

Не повна форма умовного оператора

var a, b, max2 : Real;

begin

Write(‘ Введіть два дійсних числа – ’);

ReadLn( a, b );

if a > b

then max2 := a

else max2 := b;

WriteLn(‘ max –’, max2 )

end.

var a, b, max2 : Real;

begin

Write(‘ Введіть два дійсних числа – ’);

ReadLn( a, b );

max2 := a;

if b > a then max2 := b;

WriteLn(‘ max –’, max2 )

end.

 

Знайти найбільше з трьох дійсних чисел.

Розв’язання.

Введемо потрібні змінні з визначенням типу даних:

a,b,c – змінні дійсного типу: задані дійсні числа,

max3 – змінна дійсного типу: шукане найбільше число.

Алгоритм розв’язання задачі схематично запишемо так:

введення даних a, b, c;

знаходження max3;

виведення на екран результату – max3.

Запишемо алгоритм мовою Паскаль декількома способами:

1-й спосіб.

Логічний вираз, істинність якого вказує на те, що а – більше за числа b і c складається з двох операцій відношення a >= b, a >= c поєднаних логічною операцією And і має вид (a b) And (a >= c). Аналогічно сформуємо логічні вирази, істинність яких вказує на те, що

b – найбільше число

(b >= a) And (b >= c)

c – найбільше число

(c >= a) And (c >= b).

Отже,

var a, b, c, max3: Real;

begin Write(‘ a,b,c -’);ReadLn(a,b,c);

if ( a > = b ) And ( a >= c ) then max3 : = a;

if (b > = a ) And ( b >= c ) then max3 : = b;

if ( c > = b ) And ( c >= a ) then max3 : = c;

WriteLn(‘ max - ’,max3 )

end.

2-й спосіб.

Алгоритм:

змінній max3 надамо значення найбільшого з чисел a, b.

порівняємо число max3 з числом с.

якщо число max3 менше від с, то max3 надамо значення змінної с, інакше max3 і є найбільшим з чисел a, b, c

Отже,

var a, b, c, max3: Real;

begin Write(‘ a,b,c -’);ReadLn(a,b,c);

max3 := a;

if (b>max3) then max3 : = b;

if (c>max3) then max3 : = c;

WriteLn(‘ max - ’,max3)

end.

Розв’язати лінійне рівняння.

Розв’язання.

Лінійне рівняння має вид ax + b = 0, де a, b – будь-які дійсні числа.

Розглянемо можливі випадки:

Якщо a ≠ 0, то x=-.

Якщо a = 0 і b = 0, то розв’язком є будь-яке дійсне число.

Якщо a = 0 і b ≠ 0, то розв’язку не має.

Отже, практично ми описали алгоритм розв’язання задачі. Запишемо два варіанта програми :

var a, b: Real;

begin

Write(‘ a,b – ’); ReadLn(a, b);

if a <> 0 then WriteLn(‘ x= ’, -b/a);

if (a = 0) And (b = 0) then WriteLn(‘ x R ’);

if (a = 0) And (b <> 0) then WriteLn(‘ x ’);

end.

var a, b, max2 : Real;

begin

Write(‘ a,b – ’); ReadLn(a, b);

if a <> 0 then WriteLn(‘ x= ’ ,-b/a)

else if b = 0 then WriteLn(‘ x R ’)

else WriteLn(‘ x ’);

end.

Розв’язати квадратне рівняння.

Розв’язання.

Квадратне рівняння має вид ax2+bx+c=0, a0.

Обчислимо дискримінант d = b2- 4 a c.

Якщо d 0, то , , інакше x.

Введемо позначення:

a, b ,c – змінні дійсного типу для збереження значень коефіцієнтів;

d – змінна дійсного типу для збереження результату обчислення дискримінанту;

x1, x2 – змінні дійсного типу для збереження значень коренів квадратного рівняння.

Як видно з схеми розв’язання, в програмі потрібно використати умовний оператор повної форми, причому, з використанням вкладеного оператора об’єднання. Отже:

var a, b, c, x1,x2: Real;

begin Write(‘ a,b,c -’);ReadLn(a,b,c);

d : = b*b-4*a*c;

if d >= 0

then begin x1 : = (-b+sqrt(d))/2/a;

x2 : = (-b+sqrt(d))/2/a;

WriteLn(‘x1=’,x1,’ x2=’,x2)

end

else WriteLn(‘ x’)

end.

 

Задано дійсне число a. Обчислити f(a), якщо

Розв’язання.

Слідуючи вказаній схемі обчислення значення функції в програмі потрібно використати три умовні оператори не повної форми. Ми використаємо інший підхід, що зменшить кількість умовних операторів. Перепишемо схему так:

Якщо x 0, то f(x)=0,

інакше якщо x > 1, то f(x)=x2-sinx,

інакше f(x)=x2-x.

Введемо позначення:

a – змінна дійсного типу для збереження значення аргументу функції.

var a : Real;

begin Write(‘ a -’);ReadLn(a);

Write(‘ f( ‘,a:5:2,’)=’);

if a <= 0 then WriteLn(0)

else if x > 1 then WriteLn(a*a-sin(Pi*a))

else WriteLn(a*a-a)

end.

 

Обчислити суму, добуток, різницю або частку двох дійсних чисел в залежності від вказаної арифметичної операції.

Розв’язання.

Введемо позначення:

a, b – змінні дійсного типу збереження заданих чисел;

znak – змінна символьного типу: знак арифметичної операції;

result – змінна дійсного типу для збереження результату обчислення арифметичного виразу.

Отже,

var a, b, result : Real;

znak : Char;

begin Write(‘ a, b -’);ReadLn(a, b);

Write(‘ +, –, *, / :’); ReadLn(znak);

if znak = ‘ +’ then result : = a + b;

if znak = ‘–’ then result : = a – b;

if znak = ‘ *’ then result : = a * b;

if znak = ‘/’ then result : = a / b;

WriteLn(a, znak, b, ‘ = ‘, result)

end.

Зауваження. В програмі не передбачено перевірку коректності введених даних: введений символ може не бути символом зазначених арифметичних операцій; не здійснюється перевірка ділення на нуль. Якщо врахувати зауваження, програма матиме вид:

var a, b, result : Real;

znak : Char;

begin Write(‘ a, b -’);ReadLn(a, b);

Write(‘ +, –, *, / :’); ReadLn(znak);

if Not(( znak = ‘ +’) Or (znak = ‘–’) Or (znak = ‘ *’) Or (znak = ‘/’))

then WriteLn(‘ не введено знак арифметичної операції ’)

else begin if znak = ‘ +’ then result : = a + b;

if znak = ‘–’ then result : = a – b;

if znak = ‘ *’ then result : = a * b;

if (znak = ‘/’) And (b=0) then WriteLn(‘ ділення на нуль ’)

else begin if znak = ‘/’ then result : = a / b;

WriteLn(a, znak, b, ‘ = ‘, result)

end

end;

end.

 

Індивідуальні завдання

  1. За довжинами сторін трикутника визначити його вид – рівнобедрений, рівносторонній, довільний.
  2. Вивести на екран три задані цілі числа в порядку зростання.
  3. Дано довжини радіусів та координати центрів двох кіл. Визначити їх взаємне розміщення: дотикаються, перетинаються, не мають спільних точок.
  4. Дано два дроби. Обчислити їх суму, добуток, різницю або частку в залежності від введеного символу арифметичної операції.
  5. Змінним a, b, c цілого типу надано певних значень. Поміняти значення змінних місцями так, щоб a, b, c містили числа впорядковані за зростанням.
  6. Розв’язати систему двох лінійних рівнянь.
  7. Утворити з цифр трьохзначного числа найбільше трьохзначне число.
  8. Скоротити заданий дріб на вказане число, якщо це можливо.
  9. За довжинами сторін трикутника визначити його вид: тупокутний, гострокутний, прямокутний.
  10. Використовуючи ознаку подільності на 11, з’ясувати, чи натуральне п’ятизначне число кратне 11.
  11. З’ясувати, чи належить точка A ( x, y ) трикутнику, у якого відомо координати вершин.
  12. Дано координати кінців відрізка. З’ясувати, до якої чверті координатної площини належать всі точки відрізка.
  13. Дано координати центра та довжину радіуса кола. Визначити, до якої чверті координатної площини належать всі точки кола.
  14. З’ясувати, чи введений символ є символом-цифрою, чи символом латинського алфавіту.
  15. Визначити кількість днів року за його номером.

 

docx
Додано
23 березня 2023
Переглядів
243
Оцінка розробки
Відгуки відсутні
Безкоштовний сертифікат
про публікацію авторської розробки
Щоб отримати, додайте розробку

Додати розробку