Смекни!
smekni.com

Програмування основних алгоритмічних структур (стр. 2 из 2)

end;

“Розширенням” оператора if є оператор варіанта case. Він призначений для вибору однієї з декількох альтернатив в залежності від значення селектора варіанта.

Вид оператора

Case селектор of

мітка1: оператор1;

мітка2: оператор2;

. . .

міткаN: операторN;

end;

Оператор case складається з виразу (селектора) і списку операторів, кожному з який передує мітка. Ці мітки називаються мітками варіанта і вони не повинні оголошуватись у розділі опису міток програми. При цьому мітки варіанта повинні мати той же тип, що і селектор. З визначення оператора case випливає, що в кожному випадку виконується лише один оператор - той, мітка якого дорівнює поточному значенню селектора. Якщо жодна з міток не дорівнює поточному значенню селектора, то ніякі оператори не виконуються.

Оператор варіанта має ще одну форму:

Case селектор of

мітка1: оператор1;

мітка2: оператор2;

. . .

міткаN: операторN;

else оператор(N+1);

end;

Цей оператор варіанта відрізняється від попереднього тим, що, якщо жодна з міток не дорівнює поточному значенню селектора, то виконується оператор, що слідує за зарезервованим словом else. Наявність альтернативи else в операторі case є розширенням стандартної мови ПАСКАЛЬ. Мітка оператора case може складатися з довільної кількості констант або діапазонів, відділених один від одного комами. Слідом за міткою ставиться двокрапка. Діапазон записується у виді двох констант, відділених один від одного роздільником “..”. Тип констант повинний збігатися з типом селектора. Оператор, записаний слідом за міткою оператора case, виконується в тому випадку, якщо значення селектора дорівнює однієї з констант або потрапляє в межі одного з зазначених діапазонів.

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

ПРИКЛАДИ:

1. case i of

1: write(‘понеділок’);

2: write(‘вівторок’);

3: write(‘середа’);

4: write(‘четвер’);

5: write(‘п’ятниця’);

6: write(‘субота’);

7: write(‘неділя’);

end;

2.case i of

1..5: write(‘робочий день’);

6,7: write(‘вихідний’);

end;

Розглянемо приклад запису розгалуженого алгоритму.

Задача 3. Розмір відрахувань на заробітну плату становить 1% з суми, що не перевищує 150 грн, і 2% у противному випадку. Програма має вигляд:

program vidrah;

var s:integer;

x:real;

begin

write(‘введіть значення фонду зарплати s:’);

readln(s);

if s<=150 then x:=s*0.01 else x:=s*0.02;

writeln(‘відрахування становлять x=’,x:7:2, ‘грн’)

end.

3. Оператори циклу; запис циклів.

Для організації циклічних процесів призначені оператори повтору. Вони вказують на те, що певну групу операторів необхідно виконати декілька разів. Ця група операторів називається тілом циклу. Якщо кількість повторень заданої групи операторів відома заздалегідь, то в такій ситуації цілком підходить оператор циклу з параметром for. Якщо ж кількість повторів невідома, то необхідно використовувати оператори while або repeat.

Оператор циклу з параметром for призначений для програмування циклів із заздалегідь відомою кількість повторень тіла циклу.

Вид оператора:

for параметр = поч.зн to кін.зн do оператор,

де for, =, to, do - службові слова;

параметр - змінна, яка рахує кількість повторень тіла циклу;

поч.зн. та кін.зн. – початкове та кінцеве значення параметру циклу (діапазон його значень);

оператор - тіло циклу.

Параметром може бути будь-яка неіндексована змінна довільного скалярного типу (окрім типу real).

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

Існує ще одна форма оператора for

for параметр = поч.зн to кін.зн downto оператор

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

Для програмування циклів із заздалегідь невідомою кількістю повторень або циклів, в яких параметр циклу приймав би значення із діапазону з певним кроком (наприклад 2, 4, 6, ...) використовуються оператор циклу з передумовою та оператор циклу з постумовою.

Оператор циклу з передумовою while має вигляд

while лог. вираз do оператор ,

де while, do -службові слова;

лог. вираз - умова (логічний вираз), яка управляє виконанням тіла циклу;

оператор - задає тіло циклу.

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

Оператор циклу з постумовою repeat має вигляд

repeat оператор until лог. вираз ,

де repeat ,until -службові слова;

логічний вираз - умова (логічний вираз), яка управляє виконанням тіла циклу;

оператор - задає тіло циклу.

Поки логічний вираз не прийме значення true (тобто, приймає значення false), виконується тіло циклу. Зміну істинності умови для цього оператора також необхідно передбачити у тілі циклу .

В усіх операторах циклу (окрім repeat) тіло циклу може складатись лише з одного оператора . Якщо тіло циклу містить групу операторів, їх необхідно об’єднати операторними дужками.

ПРИКЛАД :

обчислити добуток перших n натуральних чисел (тобто n!) кожним із операторів циклу

а) оператор циклу з параметром for-to:

p:=1;

for i:=1 to n do p:=p*i;

б) оператор циклу з параметром for-downto:

p:=1;

for i:=n downto 1 do p:=p*i;

в) оператор циклу з передумовою

p:=1;

i:=1;

while i<=n do

begin

p:=p*i;

i:=i+1

end;

г) оператор циклу з постумовою

p:=1;

i:=1;

repeat

p:=p*i;

i:=i+1

until i>n;

Узагальнення по темі.

Практично кожна програма повинна виконувати такі дії: вводити вихідні дані, проводити опрацювання цих даних (як правило, обчислення) та виводити результати роботи. Для виконання цих дій використовуються оператори вводу, присвоювання та виводу.

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

Оператор виводу інформації призначений для обчислення значень виразів і виводу їх на екран. Є два оператори виводу: write та writeln.

Оператор вводу даних призначений для вводу даних з клавіатури та присвоювання їх змінним. Є також два оператори вводу даних: read та readln .

Можна вводити з клавіатури значення всіх стандартних типів даних, крім boolean. При виконанні оператора очікується введення даних вказаного типу. Значення повинні вводитись у строгій відповідності з синтаксисом мови ПАСКАЛЬ. Дані можна вводити списком, розділяючи їх символом “пробіл”, або по одному. Введення закінчується натискуванням клавіші Enter.

Для покращення наочності тексту програми рекомендується використовувати коментарі. Їх наявність не обов’язковою, але дозволить пояснити особі, що працює з текстом програми, зміст окремих її блоків. Коментар являє собою послідовність будь-яких символів, укладених у фігурні дужки. Коментар є роздільником і може використовуватись для відокремлення складових рядків програми аналогічно символу “пропуск”.

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

Лінійні алгоритми зустрічаються на практиці рідко. В більшості випадків обчислення носять розгалужений або циклічний характер. При цьому оператори об’єднуються в групи, які виконуються як один оператор. Для цього призначений складений оператор. Такий оператор використовується також в тому випадку, якщо необхідно виконати декілька операторів, а синтаксис мови ПАСКАЛЬ припускає наявність лише одного оператора. Складений оператор являє собою деяку сукупність операторів мови ПАСКАЛЬ, об’єднаних операторними дужками begin та end.

Умовний оператор дозволяє виконувати один з декількох операторів, що входять у його склад, у залежності від виконання певної умови. До умовних відносять оператори if та case.

Оператор умовної передачі управління if призначений для вибору однієї з двох альтернатив в залежності від значення логічного виразу.

“Розширенням” оператора if є оператор варіанта case. Він призначений для вибору однієї з декількох альтернатив в залежності від значення селектора варіанта.

Для організації циклічних процесів призначені оператори повтору. Вони вказують на те, що певну групу операторів необхідно виконати декілька разів. Ця група операторів називається тілом циклу. Якщо кількість повторень заданої групи операторів відома заздалегідь, то в такій ситуації цілком підходить оператор циклу з параметром for. Якщо ж кількість повторів невідома, то необхідно використовувати оператори while або repeat.

Оператор циклу з параметром for призначений для програмування циклів із заздалегідь відомою кількість повторень тіла циклу.

Для програмування циклів із заздалегідь невідомою кількістю повторень або циклів, в яких параметр циклу приймав би значення із діапазону з певним кроком (наприклад 2, 4, 6, ...) використовуються оператор циклу з передумовою та оператор циклу з постумовою.