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

Тема 9: Умовний оператор. Вкладений умовний оператор

Оператори Pascal. Поняття оператора Pascal.

Розглянемо приклад з математики:

Дану задачу можна записати так:

  • якщо х<0, то обчислити 2х+1;

  • якщо х>=0, то обчислити 2х-1;

чи ще коротше:

Якщо х<0, то обчислити 2х+1, інакше обчислити 2х-1.

Для програмування таких задач у Pascal-і передбачений умовний оператор, що виконує ту чи іншу дію в залежності від виконання деякої умови. Дамо визначення оператора: це речення мови, що виконує перетворення даних і задає порядок виконання інших операторів.

У Pascal-і 12 операторів. Три оператори називаються простими, оскільки не містять інших операторів, інші – структурними, тому що в їхній склад входять інші оператори; структурні оператори задають правила виконання вхідних у їхній склад операторів.

Оператори, що включаються в структурні, також можуть бути структурними і глибина такої вкладеності не обмежена.

У залежності від способу передачі керування оператори поділяються на лінійні і нелінійні.

Лінійні оператори виконуються в порядку їхнього розташування в програмі.

Таких операторів 5: порожній, складений, присвоєння, процедури/функції, приєднання.

Нелінійні оператори змінюють порядок виконання інших операторів у залежності від деякої умови. Таких операторів 6: переходу, умовний, варіанта, циклу з предумовою, циклу з постумовою, циклу з параметром.

Загальна структура оператора Pascal має вигляд:

[ім'я мітки:][оператор];

Дужки [] означають необов'язкову опцію (частину) оператора. Кожному оператору може передувати мітка, відділена від нього ”:”, і яка служить для позначення місця передачі керування оператором goto. Запис кожного оператора повинен закінчуватися ”;”.

Порожній оператор не містить операційної частини, не виконує дій і позначає просто ”;”.

Застосовується він у випадку, якщо в деякому місці програми повинний стояти оператор, на який треба послатися, але не виконати ніяких дій.

Наприклад, перехід у кінець складеного оператора:

begin

goto label_1;

label_1: ;

end;

Однак, невірне застосування порожнього оператора може вплинути на результати виконання програми.

Складений оператор являє собою пару ключових слів Begin-End, що містять довільну кількість інших операторів і служить для їхнього об'єднання в один оператор, якщо це потрібно за синтаксом Pascal-я.

Загальна схема складеного оператора:

begin

оператор_1;

оператор_2;

end;

Приклад:

begin {обмін значеннями х та у }

z := x;

x := y;

y := x { ; після останнього оператора можна не ставити}

end;

Оператор присвоювання має загальний вид:

ліва частина := права частина;

Ліва частина - змінна чи ідентифікатор функції, права частина -вираження. Символ оператора := повинний писатися разом, без пробілу.

Правила виконання оператора:

1. Обчислюється вираження правої частини

2. Отриманий результат привласнюється лівій частині.

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

Приклад для різних типів лівої частини:

x:=(x+y)/(2+z*10)-0.5;

result:=(1>100) or (a[i]=0);

color:=red;

my_set:=[1,7..10,100];

Оператор процедури/функції викликає процедуру чи функцію за їх іменем і передає їм фактичні параметри. Оператор процедури/функції має структуру:

ім'я процедури/функції(список фактичних параметрів);

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

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

Після завершення процедури керування передається наступному за викликом оператору. Наприклад:

my_procedure(a,b,c,result);

multyply_matrixes(a.b,c);

z:=func_12(x,y);

exit_program;

Безумовний оператор Goto застосовується для зміни порядку виконання операторів програми шляхом передачі керування оператору з зазначеною міткою. Загальна схема оператора:

goto мітка:

Міткою може бути ідентифікатор чи ціле безнаковое число в діапазоні від 0 до 9999.Мітка повинна бути описана в розділі Label.

Приклад.

label

metka 1, 17;

goto metka 1;

metka1:

a :=b; goto 17;

17:

b:=c;

Правила використання оператора переходу:

1.Перехід на мітку можливий кілька разів.

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

3.Перехід усередину структурного оператора може викликати непередбачені результати, хоча компілятор не дає повідомлення про помилку.

Використання goto вважається поганим стилем програмування, оскільки породжує заплутану логіку. Краще уникати його застосування.

У ТР мається чотири безумовних функції: Break, Continue, Exit та Halt.

Призначення їх наступне:

Break - дозволяє достроково закінчити цикл.

Continue - дозволяє почати нову ітерацію циклу, навіть якщо попередня ітерація не була довершена.

Exit - дозволяє завершити роботу програми.

Halt(n)-дозволяє завершити роботу програми з кодом завершення n, де n-ціле число.

Умовний оператор. Вкладений умовний оператор.

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

If умова then оператор_1 [else оператор_2 ];

Якщо умова=True, то виконується оператор_1, якщо False - виконується оператор_2 наступний за “else”(інакше).

Приклад 1.

if x<y then max :=y {; ставити не можна}

else max:=x;

Приклад 2.

if color = red then

begin

end else

begin

end;

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

If умова then if умова then оператор

еlsе оператор

else оператор

де “else” відноситься до того “if”, що йому передує, тому, для зручності сприйняття програми “еlsе” слід писати під тим “if”, до якого воно відноситься.

Приклад. Написати умовний оператор, що визначає, чи попадає X у діапазон чисел від 5 до 10?

if x>5 then if x<10 then writelen(‘попадає’)

еlsе writelen(‘x>10’)

еlsе writelen(‘x<5’);

Приклад. Написати умовний оператор обчислення X:

1, при a=b, c<d if a=b then

X = 2, при a=b, c>=d if c<d then x := 1

3, при a<>b. else x := 2

else x := 3;

Варто уникати рівня вкладеності “if” більше 2-х через ускладнення логіки програми.

В умовному операторі можна використовувати складені оператори чи оператори переходу.

if умова then

begin

оператор_1;

оператор_2;

оператор_n

end else

begin

оператор_1;

оператор_2;

оператор_n

end;

перед словом else “;” не ставлять, тому що else не самостійний оператор, а є складовою частиною оператора if.

Усередині складених операторів можуть бути також умовні оператори. Наприклад:

Обчислити у1=7, y2=A, y3=A+B, якщо A>B; t1=A*B, t2=A-B, якщо A=<B. Фрагмент програми має вид:

if a>b then

begin

y1:=7; y2 :=a; y3 :=a+b

end else

begin

t1:=a*b; t2 :=a-b;

end;

Приклад. З 3-х введених цілих чисел знайти найбільше.

var

a,b,c: integer; {цілі числа}

begin

writeln(‘Введіть три цілих числа’);

read(a,b,c);

if (a>b) and (a>c) then

writeln (‘число’, a, ‘найбільше’)

else

if (b>c) then

writeln (‘число’, b, ‘найбільше’)

else

writeln (‘число’, c, ‘найбільше’)

end.

Приклад. При заданому значенні X обчислити Y=1/X.

При складанні програми, варто передбачити перевірку щоб значення X не виявилося рівним 0, тому що на 0 ділити неможна.

var

x,y : real; {речовинні числа}

begin

writeln(‘Введіть значення x: ’);

read(x);

if x=0 then write(‘На нуль поділяти не можна’)

else

begin

y:=1/x;

writeln (‘y=’, y:1:3);

end;

end.

Приклад. Дан прямокутник і точка з координатами x, y. Визначити, належить вона прямокутнику чи ні? Якщо належить, то повідомити True, якщо ні – False.

var

x1, x2, y1, y2: real;

x,y : real;

a: boolean;

begin

writeln(‘ x1,y1,x2,y2’);

readln(x1,y1,x2,y2);

writeln(' ');

readln(x,y);

if (x>=x1) and (x<=x2) and (y>=y1) and (y<=y2) then

a:=true;

else

a:=false;

writeln(' a=',a)

end.

Питання для контролю.

  1. Що таке оператор?

  2. Які оператори називаються простими?

  3. Які оператори називаються структурними?

  4. В залежності від чого і на які групи поділяються оператори?

  5. Які оператори називаються лінійними? Перелічте їх.

  6. Які оператори називаються нелінійними? Перелічте їх.

  7. Загальна структура Pascal-оператора.

  8. Порожній оператор. Позначення і застосування.

  9. Складений оператор. Загальна схема.

  10. Оператор присвоювання. Загальна форма і правила виконання.

  11. Для якого типу даних не допустим оператор присвоювання?

  12. Оператор процедури/функції. Структура. Чим відрізняється виклик функції від виклику процедури?

  13. Безумовний оператор і правила його застосування.

  14. Перелічите безумовні функції.

  15. Умовний оператор і його застосування.

  16. Який тип умови в умовному операторі?

  17. Робота умовного оператора.

  18. 4.Вкладений умовний оператор і його робота (до якого “if” відноситься “else”?).

  19. Використання складених операторів в умовному операторі.

  20. Чому перед “else” не ставиться “;”?

  21. Чому не бажаний рівень вкладеності “if” більш 2?