На попередній сторінці ми розібралися, що таке оператор присвоювання - він використовується для додання змінним конкретних значень. Наступним за важливістю використання можна назвати умовний оператор. Але в чому його суть?
Пам'ятайте, як у старій добрій казці витязь стояв перед віщим каменем і читав напис не ньому: «Направо підеш - коня втратиш, себе врятуєш; наліво підеш - себе втратиш, коня врятуєш; прямо підеш - і себе і коня втратиш »? Чого він чекав, про що міркував? Природно, про проблему вибору, адже у нього стояла не легке завдання - в будь-якому випадку витязь щось втрачав. Благо, що нам нема чого втрачати, але вибирати доведеться.
Уявімо собі класичну задачу рішення квадратного рівняння: якщо дискримінант позитивний - тоді рівняння має два різних рішення, якщо він дорівнює нулю - то одне, а при негативному дискримінант дійсних розв'язків немає взагалі. Ідея тут одна - рішення квадратного рівняння залежить від дискримінанту, а точніше - від його знака. Або ще завдання: визначити кількість днів в році. Природно, що кількість днів залежить від того, є рік високосним чи ні.
А ось приклад геометричній завдання подібного роду: з'ясувати, чи будуть три числа a, b і c сторонами трикутника. Ми знаємо, що три числа будуть сторонами якогось трикутника тоді і тільки тоді, коли сума будь-яких двох сторін цього трикутника більше третьої сторони. Тут теж, як ми бачимо, рішення задачі залежить від деяких умов (трьох нерівностей).
Ці три завдання об'єднує одне: тут не можна просто так скласти програму на Паскалі, щоб завдання вирішувалася «одним махом» - через наявність певних умов. Тому в таких випадках на допомогу приходить умовний оператор, який розподіляє виконання операторів в залежності від умов. Записується в такий спосіб:
код Pascal
1 2 3 4 5 6 .................. if <умова> then <оператор1> else <оператор2>; ..................Ця конструкція працює за таким принципом. Спочатку перевіряється умова (після if); якщо воно істинне, то виконується оператор1 (після then), в іншому випадку - оператор2 (після else). І ще: if означає «якщо», then - «тоді», else - «інакше». Все це зарезервовані слова в Pascal, завжди виділяються жирним шрифтом. Ще одне важливе зауваження: перед else ніколи не ставиться крапка з комою, оскільки воно становить єдине ціле з if і then. Пояснимо, як використовується умовний оператор на простому прикладі:
код Pascal
1 2 3 4 5 6 7 8 9 10 var t: real; {Температура повітря} begin writeln ( 'Введіть температуру повітря:'); readln (t); if t> 0 then writeln ( 'вода не замерзла') else writeln ( 'вода замерзла'); readln end.Перепишіть цей невеликий код в середу PascalABC.Net і запустіть (кнопка F9 на клавіатурі). Подивіться, як програма працює. Тут йде перевірка температури t повітря - якщо вона більше 0 (умова t> 0 після if), то виконується оператор після then і ми побачимо відповідь: «вода не замерзла»; в іншому випадку (тобто при температурі від 0 і нижче: t ≤ 0 - це умова протилежне по відношенню до попереднього t> 0) виконається оператор після else і відповідь буде іншим: «вода замерзла» (без лапок). Це приклад найпростішої завдання на використання умовного оператора. Інші завдання такого типу ви можете подивитися в матеріалі порівняння чисел .
У цьому завданні, правда, ми не врахували температуру кипіння води (при нормальному атмосферному тиску - 100 ° С). Тому перепишемо попередню програму трохи по-іншому:
код Pascal
1 2 3 4 5 6 7 8 9 10 11 12 var t: real; begin writeln ( 'Введіть температуру повітря:'); readln (t); if t <= 0 then writeln ( 'вода замерзла') else if t <100 then writeln ( 'вода нагрівається') else writeln ( 'вода закипіла'); readln end.Тут треба зробити деякі пояснення. Спочатку ми перевіряємо негативну або нульову температуру (t≤0): якщо це дійсно так, то виконується оператор виведення write ( 'вода замерзла') - це і є оператор1. В іншому випадку (тобто, якщо температура позитивна) повинен бути виконаний оператор2, що стоїть після else. Але ми бачимо, що там знаходиться ще одна конструкція умовного оператора зі своїми if, then і else.
Тоді постає питання: що саме вважати оператором2? А якраз ця вся конструкція і буде оператором2, оскільки програмою вона сприймається як один оператор (умовний оператор - єдиний оператор, що складається з трьох частин: if - then - else). Таким чином, тут ми будемо перевіряти позитивні температури: якщо температура менше 100 (t <100), то виконається оператор виведення write ( 'вода нагрівається'), інакше (від 100 і вище градусів) вступить в дію write ( 'вода закипіла') . Все це буде ставитися до першого else.
Перепишіть програму в PascalABC.Net і запустіть. Вводите різні значення, пам'ятаючи, що при температурі від 0 ° і нижче вода замерзає, від 100 ° і вище - закипає, а у всіх інших випадках не замерзає і не закипає. Якщо результати збігаються, значить програма працює.
Буває так, що при істинності чи хибності умови (після if) замість виконання одного оператора (оператора1 або оператора2) повинна виконуватися ціла група операторів. В цьому випадку використовуються операторні дужки begin - end, в які записуються всі необхідні команди. У загальному випадку запис така:
код Pascal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ................... if <умова> then begin <оператор1. 1>; <Оператор1. 2>; . . . . . . . <Оператор1. N>; end else begin <оператор2. 1>; <Оператор2. 2>; . . . . . . . <Оператор2. M>; end; ..................Як видно, при істинності умови виконується одна група з N операторів, а при хибності - інший набір з M операторів. Умова (між if і then) теж може складатися з декількох частин. Для прикладу вирішимо завдання про існування трикутника по його сторонах:
Завдання. Дано три числа: a, b і c. Визначити, чи існує трикутник зі сторонами, рівними цим числам.
Як згадувалося вище, трикутник буде існувати при виконанні трьох умов: a + b> c, b + c> a, c + a> b. Оскільки всі три нерівності повинні виконуватися одночасно, то ми їх об'єднаємо оператором and (логічне «і»). В результаті отримаємо:
код Pascal
1 2 3 4 5 6 7 8 9 10 11 12 13 program treugolnik; var a, b, c: real; begin writeln ( 'Введіде три позитивні числа:'); readln (a, b, c); write ( 'Трикутник зі сторонами', a, ',', b, 'і', c); {Перевіряємо умову існування трикутника:} if (a + b> c) and (b + c> a) and (c + a> b) then writeln ( 'існує') else writeln ( 'не існує'); readln end.Як видно з програми, після if йде об'єднання відразу трьох логічних виразів, які повинні виконуватися в однієї умови. Зазвичай в таких випадках все три вирази беруть в дужки, але тут цього робити не обов'язково. Для перевірки працездатності написаної нами програми перепишіть її в PascalABC.Net і запустіть (кнопка F9 на клавіатурі). Пам'ятайте, що числа вводяться через пробіл. Подивіться, як працює програма. Завжди намагайтеся саме переписувати, а не копіювати код зі сторінки - в цьому випадку процес осмислення матеріалу йде набагато швидше.
Але в чому його суть?Чого він чекав, про що міркував?