
- •Передмова
- •Тема 1: Правила техніки безпеки при роботі з комп’ютером
- •Тема 2: Алфавіт. Ідентифікатори. Константи. Вирази
- •Тема 3: Загальна структура і розділи Pascal-програми
- •Тема 4: Введення і виведення у Pascal-і. Форматоване виведення
- •Тема 5: Прості (скалярні) типи данних
- •Тема 6: Завантаження середовища Турбо Паскаль. Функціональні клавіші
- •Тема 7: Меню опції
- •Тема 8: Вираження і пріоритет операцій. Стандартні математичні функції та процедури
- •Тема 9: Умовний оператор. Вкладений умовний оператор
- •Тема 10: Оператор вибору
- •Тема 11: Оператори циклу. Оператор циклу з параметром
- •Тема 12: Оператор циклу з перед- і з постумовою
- •Тема 13: Складні типи. Масиви
- •Тема 14: Багатомірні масиви
- •Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування
- •Тема 16: Динамічна пам'ять. Адреси і покажчики
- •Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті
- •Тема 18: Процедури та функції для роботи з динамічною пам’яттю
- •Тема 19: Символьний тип даних. Упаковані масиви
- •Тема 20: Процедури та функції для обробки рядків
- •Тема 21: Структурований тип даних - безліч
- •Тема 22: Структурований тип даних – записи
- •Тема 23: Опис файлових змінних. Обробка типізованих файлів
- •Тема 24: Послідовний та прямий доступ до файлів
- •Тема 25: Обробка не типізованих файлів
- •Тема 26: Робота з текстовими файлами
- •Тема 27: Типізовані константи
- •Тема 28: Поняття та робота з процедурами та функціями
- •Тема 29: Використання модуля crt. Програмування клавіатури
- •Тема 30: Використання модуля crt. Текстове виведення на екран. Програмування звукового генератора
- •Тема 31: Графічні можливості tp 7.0. Використання бібліотеки Graph
- •Тема 32: Бібліотечні модулі користувача
- •Тема 33: Основні принципи ооп. Створення об’єктів. Використання об’єктів
- •Список літератури
- •Додаток а (довідковий) Основні алгоритми обробки масивів
- •Додаток б (довідковий) Питання перевірки знань з теорії
- •Додаток в (довідковий) Поширені коди клавіш
- •Додаток д (довідковий) Коди сканування клавіатури
Тема 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.
Питання для контролю.
-
Що таке оператор?
-
Які оператори називаються простими?
-
Які оператори називаються структурними?
-
В залежності від чого і на які групи поділяються оператори?
-
Які оператори називаються лінійними? Перелічте їх.
-
Які оператори називаються нелінійними? Перелічте їх.
-
Загальна структура Pascal-оператора.
-
Порожній оператор. Позначення і застосування.
-
Складений оператор. Загальна схема.
-
Оператор присвоювання. Загальна форма і правила виконання.
-
Для якого типу даних не допустим оператор присвоювання?
-
Оператор процедури/функції. Структура. Чим відрізняється виклик функції від виклику процедури?
-
Безумовний оператор і правила його застосування.
-
Перелічите безумовні функції.
-
Умовний оператор і його застосування.
-
Який тип умови в умовному операторі?
-
Робота умовного оператора.
-
4.Вкладений умовний оператор і його робота (до якого “if” відноситься “else”?).
-
Використання складених операторів в умовному операторі.
-
Чому перед “else” не ставиться “;”?
-
Чому не бажаний рівень вкладеності “if” більш 2?