Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
34
Добавлен:
07.02.2016
Размер:
342.02 Кб
Скачать

Оператор вибору.

За допомогою оператора Ifможнаописати будь-яку структуру з розгалуженням. Але іноді хід виконання програми залежить від конкретного значення однієї величини. Наприклад, користувачеві подають на вибір декілька дій, причому кожна дія нумерується. В такому випадку корисно використовувати оператор вибору. Він має вигляд

CASE < селектор > OF

M1 : оператор 1 >

M2 : < оператор 2 >

...

Mn : < оператор n >

ELSE < оператор n+1 >

END ;

При використанні цього оператора треба вказати різноманітні значення селектора (M), кожному з яких відповідає визначене відгалуження програми. Селектор може мати тільки простий скалярний тип, використовувати тип REAL заборонено. Після обчислення значення селектора управління передається відповідному оператору. Якщо значення селектора не дорівнює жодному з перелічених значень, то виконується оператор, який позначений після слова ELSE.

Приклад 3.8. Розглянемо приклад використання оператора вибору - програма «калькулятор»

Var a:byte;

X, y, c:real;

begin

writeln(‘введіть x, y’);

readln(x, y);

writeln(‘виберіть та натисніть: 1-сума x, y; 2-різниця x, y; 3- добуток x, y; 4- ділення x, y ’);

readln(a);

case a of

1: c:= x+y;

2: c:= x-y;

3: c:= x*y;

4: c:= x/y;

end;

writeln(‘c=’, c);

readln;

end.

Ця програма дозволяє виконувати дії над числами в залежності від бажання користувача. На екрані подається меню і користувач вибирає дію.

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

Оператор безумовного переходу.

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

GOTO < мітка > ;

Мітка, яка використовується в операторі goto, описується в першій половині програми, найчастіше до описання констант. Для цього треба вказати службове слово labelта перелічити мітки, які використовують в програмі. Наприклад:

labeln, 1,g2;

Перед оператором, на який передається управління програмою, ставиться мітка з символом «:». Наприклад:

n : write(‘Передаю управління’).

Приклад 3.9.

program p1;

label 1;

begin

1: Write (‘*’);

goto 1;

end.

В наведеному прикладі утворюється безперервний процес виведення на екран символу *, тому що оператор goto 1 кожного разу повертає до виконання оператора write(‘*’).

Увага! Програмування з використанням оператору безумовного переходу приводить до того, що програму дуже важко читати. За правилами структурованого програмування будь-яку програму можна побудувати без оператора goto.

Програмування циклічних процесів. Алгоритми циклічних процесів.

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

Якщо відомо кількість повторень при виконанні циклу, то він має назву «регулярний цикл», інакше - «ітераційний цикл».

Розглядають три види циклів: цикл “поки”, цикл “до” і цикл “для”.

Приклад 2.8. Побудувати таблицю значень функції w = sin x +a для всіх дійсних x [1;6] з кроком hx=1.

Для розвязку задачі спочатку надаємо величині x значення 1. Знаходемо величину y та записуємо значення аргументу та функції в таблицю. Далі треба збільшити значення величини x на крок (1) та знову повторити дії – знайти значення функції та занести знайдені значення аргументі та функції в таблицю, збільшити значення аргументу на крок і т.д. Ці дії повторюються, до тих пір, поки значення рагументу не стане 6. Таким чином видно, що ця задача відноситься до виконання циклічного обчислювального процесу. У звязку з тим, що існують три види циклів, розглянемо їх на цьому прикладі.

Цикл «поки» організується так. Ставиться умова виконання циклу, далі вказується «тіло циклу» - дії, які виконуються багатократно, поки виконується поставлена умова. В приведеному прикладі тіло циклу - дії w = sin x +a ; виведення х, w та x= x+ 1.Змінна, яка в процесі виконання циклу змінює своє значення має назву параметр циклу. В прикладі це змінна х. Якщо умова виконання циклу не виконується, то цикл закінчується, та керування алгоритмом передається наступній дії. Умова виконання циклу в даному прикладі – x ≤ 6. Коли х приймає значення 7, цикл завершується, та закінчується алгоритм. Якщо параметр циклу не змінюється, то цикл буде нескінченним. Перед циклом найчастіше вказується початкове значення параметру циклу. Якщо при вказаних до початку циклу даних умова виконання циклу не виконується, то цикл ні разу не виконається.

Цикл «до» організується іншим чином. Спочатку описується тіло циклу, а вже потім вказується умова завершення циклу. У відміну від циклу «поки» тіло циклу обов’язково виконується хоча б один раз.

Цикл «для» має спеціальний блок модифікації циклу. В ньому записують параметр циклу з вказівкою початкового його значення, умова закінчення циклу та крок зміни параметру циклу. Деякі мови програмування, які використовуються для формалізації алгоритму, наприклад, FORTRAN та Pascal, для відповідної команди потребують тільки цілі параметри. Інші мови програмування (Basic, C) допускають також його дійсні значення. Цикл «для» виконується аналогічно циклу «поки». В мовах програмування при виконанні цього циклу обчислюється кількість виконання циклу, тому зміна параметра в тілі циклу приводить до помилки у йоговиконанні.

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

Треба зауважити, що у даній задачі розглянуто регулярний цикл. Можна точно обчислити, скільки разів виконається цикл. Для цього використаємо формулу:

, де

xk - кінчене значення аргументу

xp - початкове значення аргументу

hx - крок зміни аргументу.

[x] - математичне зображення операції вибору цілої частини числа х.

Для побудови наступних алгоритмів найкраще використовувати цикл «для». Параметр циклу в даних задачах приймає ціле значення з кроком зміни, що дорівнює 1. Його роль зводиться до підрахунку кількості виконань циклу, тому він прймає назву лічильника.

Приклад 2.9.: обчислити суму натуральних чисел до 100.

Запишемо умову задачі за допомогою математичного виразу:

Для величини суми використовуємо змінну s. Спочатку цій змінній присвоїмо значення 0. Далі до значення змінної додаємо доданок, а результат знову записуємо в комірчину s. Таким чином збільшуємо значення суми.

Складемо алгоритм

Приклад 2.10. Обчислити при заданих значеннях x та m:

Якщо в попередньому прикладі доданком у сумі було значення лічильника i, то в даному прикладі доданок більш складний: x+2i. Аргумент х є сталою величиною по відношенню до циклу і її треба ввести на початку обчислення. Значення, які приймає параметр циклу i, змінюється від n до m (nm). Взагалі ці значення – цілий тип величин.

Побудуємо блок-схему алгоритму:

Алгоритм знаходження добутку відрізняється від алгоритму суми тим, що початкове значення добутку повинно дорівнювати 1, та застосовувати операцію множення, а не додавання:

Приклад 2.11.: Треба визначити кількість різних способів розміщення предметів. Нехай треба розмістити кольорові кульки. Якщо візьмемо тільки дві кульки – червону (позначимо її як Ч) та синю (С), то існують два способи розміщення: ЧС та СЧ. Якщо візмемо ще одну кульку – зелену (З), то будемо мати такі розміщення:

ЧСЗ; ЧЗС; СЧЗ; СЗЧ; ЗСЧ; ЗЧС.

Таким чином, для трьох кульок кількість перестановок дорівнює 6 =1*2*3. Для набору з n кульок будемо мати перестановок 1*2*3*…*n. Це число називають факторіалом натурального числа n.

На відміну від прикладу 2.9 в даному випадку треба виконувати операцію множення величини y на величину i. У зв’язку з цим на початку обчислень y приймає значення 1. Обчислення факторіалу дуже часто використовується при складанні алгоритмів розв’язку багатьох задач. Тому рекомендується запам’ятати цей алгоритм.

Приклад 2.12.: Обчислити y = xn, де x – будь-яке дійсне, а n – натуральне. Використовуючи визначення степені числа з натуральним показником, можна записати: y= xn =x*x*x*...*x. Таким чином алгоритм знаходження степені дійсного числа з натуральним показником приймає вигляд:

Настав час навчитися писати програми для циклічних алгоритмів. Спочатку ознайомимось з операторами , які описують цикли.У мові Pascalдля кожного виду циклів існує спеціальний оператор:

  • Оператор циклу з передумовою “поки”:

WHILE <умова виконання циклу> DO оператор;

  • Оператор циклу з післяумовою “до”:

REPEAT серія операторів UNTIL <умова закінчення циклу>;

  • Оператор циклу з параметром “для” має дві форми:

  1. FOR X:=X1 TO X2 DO оператор; - якщо значення X1 < X2

  1. FOR X:=X1 DOWNTO X2 DO оператор; - якщо значення X1 > X2.

Найпростішими є цикли для. Тому спочатку спробуємо написати програми для цього циклу. Якщо змінна- параметр циклу перебирає підрядзачення з якогось впорядкованного ряду, то можна на законній основі застосовувати оператор FOR. В іншому випадку треба застосовувати оператори WHILE та REPEAT. Якщо ж вихід з циклу зв’язаний з деякою умовою, то це ітераційний цикл і для нього ні в якому разі не можна застосовувати оператор FOR. При виконанні оператора FOR спочатку обчислюється та запам’ятовуютьсязначенняX1 та X2. Величина Х приймає значення X1. Далі значення Х порівнюється з значенням X2. Якщо параметр Х не більше X2, то виконується оператор, що записаний після слова DO. Після цього параметр Х приймає наступне порядкове значення та знову порівнюється з величиною X2, і дії знову повторюються. Якщо значення Х більше, ніж Х2, то дія циклу припиняється. Не рекомендується в серії операторів циклу змінювати значення параметру Х.. В такому випадку можлива ситуація, що цикл буде нескінченний.

Величини X, X1, X2 повинні бути будь-якого простого типу, крім дійсного. Змінна X має назву «лічильник циклу».

Напишемо декілька програм на ті алгоритми, що були розглянуті в другому розділі.

Приклад 3.10. Знайти суму всіх натуральних чисел від 1 до 100 (див. приклад 2.9).

s=;

Змінна і приймає цілі значення, а значить і має скалярний тип. Тому застосовуємо оператор FOR. Програма приймає такий вид:

Соседние файлы в папке конспект лекцій 1 паск