WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаІнформатика, Компютерні науки → Паскаль: типи дійсних, оператори розгалуження, функції та їх виклики, процедури, під задачі - Реферат

Паскаль: типи дійсних, оператори розгалуження, функції та їх виклики, процедури, під задачі - Реферат

стрілки знаками відповідних операцій. Назвіть поліморфні й неполіморфні операції.
2. Комп'ютер сам вирішить,
що робити і чого не робити
2.1. Оператори розгалуження та складений
Майже кожний, хто провчився в школі років вісім, пам'ятає, як обчислювати дійсні корені квадратного рівняння ax2+bx+c=0 (природно, за умови a 0):
(1) прочитати коефіцієнти a, b, c;
(2) обчислити d=b2-4ac;
(3) якщо d>0, то обчислити x1=(-b- )/(2a), x2=(-b+ )/(2a);
у противному випадку
якщо d=0, то обчислити x1=-b/(2a),
інакше нічого не робити.
Майже кожний розуміє, що вінзадає три різні послідовності дій. Яка саме виконується, залежить від конкретних значень a, b, c. Пункт (3) алгоритму задає перевірку, яка з умов d>0, d=0 або d>0 справджується, і залежно від цього ті або інші дії.
Умову будемо розуміти як фразу, що може бути або істинною, або хибною. У мові Паскаль умову можна відтворити бульовим виразом, як правило, із змінними. Його значеннями можуть бути true або false - це залежить від значень змінних. Звичайно, умови можуть бути тотожно істинними або тотожно хибними - вони відтворюються виразами, швидше за все, без змінних. Втім, вирази z or not z і z and not z мають значення відповідно true і false незалежно від значення z.
Перевірка умови при виконанні програми - це обчислення відповідного бульового виразу.
Перевірка умов і виконання залежно від цього різних дій задається в мові Паскаль операторами розгалуження. Вони мають дві форми - повну та скорочену. Оператор розгалуження в повній формі має вигляд:
if умова then оператор else оператор
Ключові слова if, then, else - це англійські "якщо", "то", "інакше". Для полегшення читаності програми оператор розгалуження часто записують "східцями":
if умова
then
оператор
else
оператор
або
if умова then
оператор
else оператор
Виконання його полягає в тім, що спочатку обчислюється значення умови, записаної після слова if. Далі, якщо цим значенням є true, виконується оператор, записаний після слова then, і на цьому виконання закінчується. Але якщо це значення хибне, те виконується не перший, а другий оператор, записаний після else. Наприклад, при виконанні послідовності операторів
readln(x);
if x>=0 then z := 1 else z := -1
змінна z одержить значення 1, якщо прочитано невід'ємне значення x. Якщо ж прочитано значення від'ємне, то z одержить значення -1.
Оператор розгалуження в скороченій формі має вигляд:
if умова then оператор
Він відрізняється лише тим, що якщо обчислення умови дає значення false, то на цьому його виконання закінчується.
Як бачимо, оператори розгалуження містять умови, з обчислення яких і починається їх виконання. Тому ці оператори ще називаються умовними.
Застосуємо оператори розгалуження для перекладу алгоритму обчислення коренів на мову Паскаль. Пункт (3) можна, здавалося б, перекласти так:
if d>0 then x1:=(-b- sqrt(d))/(2*a); x2:=(-b+sqrt(d))/(2*a)
else
if d=0 then x1:=-b/(2*a);
{інакше нічого не робити}
Але це неправильно! Оператор розгалуження закінчується оператором присвоювання змінній x1. Оператор x2 := (-b+sqrt(d))/(2*a) записано уже за роздільником ";", тобто після оператора розгалуження. Те, що написано далі, взагалі не є оператором.
Як же записати послідовність із двох або більше операторів там, де має бути один? Напрошується відповідь, що їх треба взяти в дужки. І такі дужки, що перетворюють послідовність операторів у один оператор, у мові Паскаль є. Це так звані відкриваюча та закриваюча операторні дужки: ключові слова begin і end (початок і кінець).
Запис вигляду
begin послідовність операторів end
називається складеним оператором.
Отже, опишемо обчислення одного або двох коренів таким оператором розгалуження в повній формі:
if d>0 then
begin x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a) end
else
if d=0 then x1:=-b/(2*a)
Як бачимо, після слова then записано складений, а після слова else - оператор розгалуження в скороченій формі.
Оформимо алгоритм обчислення коренів у вигляді програми:
program roots(input, output);
var a, b, c: real; x1, x2: real;
begin
{1} readln(a,b,c); {припускаємо, що a0! }
{2} d:=b*b-4*a*c;
{3} if d>0 then
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a)
end
else
if d=0 then x1:=-b/(2*a)
end.
Якщо при виконанні цієї програми задати значення змінних a, b, c, наприклад, відповідно 1, 3, 2, то справджується d>0, і обчислюються x1 і x2. Якщо задати значення 1, 2, 3, то умова d>0 хибна, обчислюється умова d=0, її значенням є false, і на цьому все закінчується. При значеннях 1, 2, 1 умова d=0 істинна, і обчислюється лише x1.
До програми слід додати оператори виведення, щоб вона не була занадто "мовчазною". Це залишається як вправа.
І останнє зауваження щодо структури операторів розгалуження. Розглянемо такий оператор:
if z>0 then if z>5 then k:=2 else k:=1
Хибності якої умови, z>0 чи z>5, відповідає else-гілка? Тобто чи є оператор
if z>5 then k:=2
оператором розгалуження в скороченій формі, чи він має повну форму
if z>5 then k:=2 else k:=1 ?
Відповідь на це питання дає наступне неформальне правило.
Будемо рухатися по тексту програми від слова else назад до найближчого слова if, пропускаючи при цьому складені оператори. Цьому слову if та хибності умови, записаної за ним, і відповідає else-гілка. Але якщо на шляху ми зустріли слово else, то за цим самим правилом спочатку відшукаємо відповідне йому if, і лише після цього продовжимо наши пошуки.
За цим правилом у останньому прикладі else-гілка k:=1 відповідає хибності умови z>5, а не z>0. В операторі
if z>0 then
begin readln(x); if x=0 then k:=1 end
else k:=5
else-гілка k:=5 відповідає хибності умови z>0, а не умови x=0, пропущеної у складеному операторі. За цим самим правилом у операторі
if x>0 then {квадранти перший або четвертий}
if y>0 then k:=1 else k:=4
else {квадранти другий або третій}
if y>0 then k:=2 else k:=3
гілка з початком "else if y>0" відповідає хибності умови x>0, а хибності першої умови y>0 відповідає гілка " else k:=4".
2.2. Масовість задач і програм
При виконанні оператора розгалуження, булів вираз у якому не тотожно істинний або хибний, можливі
Loading...

 
 

Цікаве