
- •П. Г. Ратайчук, а. М. Тихоненко
- •Алгоритмічна мова
- •Курс лекцій
- •Черкаси – 2003
- •Основні поняття навчальної алгоритмічної мови
- •Величини в навчальнiй алгоритмiчнiй мовi
- •Вирази в навчальнiй алгоритмiчнiй мовi
- •Загальні правила опису алгоритмів на нам
- •Переклад алгоритмiв на мову Паскаль
- •Лiнiйнi алгоритми
- •Команди побудови розгалужень в нам
- •Наступнi алгоритми вимагають застосування команди розгалуження
- •Наступнi алгоритми вимагають застосування команди вибору
- •Команди повторення нам
- •Приклади алгоритмів, що вимагають застосування iтерацiйного циклу
- •Лiнiйні таблиці
- •Приклади алгоритмів
- •Прямокутні таблиці
- •Приклади алгоритмів прямокутних таблиць
- •Лiтерні величини
- •Приклади алгоритмів літерних величин
- •Список рекомендованої літератури
- •Про авторів
- •Алгоритмічна мова
- •18028, М. Черкаси, вул. Смілянська, 120/1
Наступнi алгоритми вимагають застосування команди розгалуження
Приклад
1.
"Обчислення комбiнованого виразу".
Для заданого значення аргументу
побудувати алгоритм обчислення
значення комбiнованого виразу:
алг y(x: дiйс): дiйс
поч
якщо x<1 то y := Lg(2-x) iнакше y := Sqrt(x+1)
кiн
Даний алгоритм демонструє методику побудови алгоритму обчислення комбiнованого виразу в тому випадку, коли, по-перше, обчислення вимагаються при будь-яких значеннях аргументу, i по-друге, обчислення можливi при будь-яких значеннях аргументу. Iз двох умов достатньо використати одну, запис якої простiший.
Приклад
2.
"Обчислення виразу". Для заданого
значення аргументу побудувати алгоритм
обчислення значення виразу:
.
алг ВИРАЗ(арг x: дiйс; рез y: дiйс, z: лог)
поч
z := (Sin(x) <> 0) i (Cos(x) > 0)
якщо z то y := 1 / Sin(x) + Lg(Cos(x))
кiн
Даний алгоритм демонструє методику побудови алгоритму обчислення виразу в тому випадку, коли його значення може бути одержано не при будь-яких значеннях аргументу. Ситуацiя неможливостi обчислень складається при дiленнi на нуль, при добуваннi кореня iз вiд'ємного числа, при знаходженнi логарифма недодатнього числа, при пiднесеннi недодатнього числа до степеня, вiдмiнного вiд 2.
Саме тому в алгоритмi передбачено два результати. Один iз них, змiнна y, є основним, але його ми одержуємо не при будь-яких значеннях аргумента x. Другий результат - "прапорець" z логiчного типу. Вiн має сигналiзувати про наявнiсть чи вiдсутнiсть першого результату. Основна властивiсть результату z та, що вiн набуває певного значення за будь-яких умов (ТАК або НI).
Приклад 3. "Бiльше з двох". Задано два довiльних числа A i B. Побудувати алгоритм вибору бiльшого з них.
алг БЗД(A,B: <числовий тип>): <числовий тип>
поч
якщо A>B то БЗД := A iнакше БЗД := B
кiн
Для побудови даного алгоритму використано дуже важливу домовленiсть: якщо числа рiвнi, то бiльшим вважається будь-яке з них. Така домовленiсть робить розв'язок задачi можливим у будь-яких випадках.
Приклад 4. "Опiр". Знайти загальний опiр паралельного з'єднання двох резисторiв з опорами R1 i R2.
алг R(R1,R2: дiйс): дiйс
поч
якщо (R1=0) або (R2=0) то R:=0 iнакше R:=1/(1/R1+1/R2)
кiн
Iз шкiльного курсу фiзики вiдомо, що при нульовому значеннi опору хоча б одного iз резисторiв загальний опiр теж дорiвнює нулю. В iнших випадках є справедливим спiввiдношення 1/R=1/R1+1/R2. Методичне значення цього алгоритму полягає у можливостi його використання для обчислення значень опорiв складних електричних кiл iз резисторiв.
Приклад
5.
"Квадратне рiвняння". Задано
довiльнi дiйснi числа a,b,c. Розв'язати
квадратне рiвняння
.
алг КВР(арг a,b,c: дiйс; рез x1,x2: дiйс, z: лог)
поч D: дiйс
D := b^2 - 4*a*c; z := (D>=0) i (a<>0)
якщо не z то вихiд
x1 := (-b + Sqrt(D))/(2*a); x2 := (-b - Sqrt(D))/(2*a)
кiн
Оскiльки коефiцiєнтами задано довiльнi дiйснi числа, то перед знаходженням коренiв слiд перевiряти не тiльки невiд'ємнiсть дискримiнанту, а й взагалi iснування квадратного рiвняння (a<>0). Все це повнiстю узгоджується також з мiркуваннями до задачi 16: значення коренiв x1 та x2 одержуємо не завжди, але завжди маємо значення "прапорця" z.