Галуження в Паскалі

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Однією з основних алгоритмічних структур є галуження (альтернатива).
Якщо умова виконується, то буде виконана інструкція "1", якщо ні, то - інструкція "2". Незважаючи на те, що в схемі присутні дві дії, виконано буде тільки одне, так як умова або помилково, або істинно. Третього не дано. Така схема дозволяє вирішувати завдання, в яких у залежності від обставин, що склалися потрібно зробити ту чи іншу дію. Немає ніякого сумніву, що кількість завдань такого роду величезне. Більш того, дуже складно придумати реально значуще завдання, алгоритм виконання якого містив би в собі просте пряме проходження команд. Навіть примітивний приклад, взятий з курсу математики, як ви побачите, не може бути вирішене без використання розгалуження. Отже, необхідно обчислити значення виразу y = 1 / x. Вам відомо, що дана функція не завжди має значення, тобто не для всіх значень аргументу існує значення результату. Наше завдання так скласти алгоритм, щоб виконавець ні в якому разі не став у глухий кут, навіть при отриманні нуля в якості аргументу. Сформулювати це природною мовою не важко:
1. Отримати значення x.
2. Якщо x = 0, то повідомити, що вираз значення не має, інакше - обчислити y як 1 / x.
Таким чином використовується наведена вище алгоритмічна структура. Вона може бути виражена простими словами:
Якщо <ум.> {Якщо виконується умова}
то <дію 1> {то виконати дію № 1}
інакше <дію 2> {інакше - виконати дію № 2}
всі
Як це записати на Паскалі? Та точно так само, тільки по-англійськи.
Формат умовного оператора на мові Паскаль:

If <умова>
Then <оператор 1>
Else <оператор 2>;
Зверніть увагу на те, що в Then-і Else-частини стоїть тільки один оператор. Але що робити, щоб вирішити завдання, в якій за виконання чи невиконання умови потрібно зробити не одне, а кілька дій? Тут приходить на допомогу вже відомий вам складений оператор. У операторні дужки можна укласти будь-яку кількість операторів.
Варіант умовного оператора в цьому випадку:
If <умова>
Then Begin <група операторів 1> end
Else Begin <група операторів 2> end;
Знак "крапка з комою" не ставиться перед службовим словом Else, але оператори в групах, природно, відокремлюються один від одного цим знаком.
Тепер поговоримо про умови. У програмах на мові Паскаль умови являють собою вирази, значенням яких є величина логічного (Boolean) типу. Це може бути як просто мінлива зазначеного типу, так і складна послідовність висловлювань, пов'язаних логічними операціями.
У простих умовах можуть застосовуватися знаки операцій порівняння:> (більше), <(менше), = (дорівнює), <> (не дорівнює),> = (більше або дорівнює), <= (менше або дорівнює).
Приклади простих умов:
A = 5 {Значення змінної А дорівнює 5}
(C + D3)> = (D1 * (45-2)) {Значення виразу в лівій частині більше або дорівнює значенню виразу з правої частини}
S <> 'ABC' {Значення змінної S не одно строковою константі 'ABC'}
Наведемо приклад розв'язання ще однієї задачі: "З двох чисел вибрати найбільше".
На перший погляд рішення є очевидним, але воно не настільки тривіально, як здається.
Program Example;
Var A, B, C: Real; {A, B - для зберігання аргументів, C - результат}
Begin
Writeln ('Введіть два числа');
Readln (A, B); {Вводимо аргументи з клавіатури}
If A> B Then C: = A Else C: = B; {Якщо A> B, то результат - A, інакше результат - B}
Writeln (C); {Виводимо результат на екран}
End.
Ще один класичний приклад: "За заданими коефіцієнтами вирішити квадратне рівняння". Це завдання складніше, тому перед тим як писати програму складемо алгоритм, записавши його у вигляді блок-схеми.Сначала вводимо коефіцієнти, потім обчислюємо дискримінант. Тепер виникає дві можливості: або відсутність дійсних коренів у випадку негативного дискриминанта, або ці корені можна все-таки обчислити і вивести на екран у випадку неотрицательного дискриминанта (випадок рівності дискриминанта нулю входить сюди ж, коренів - два, тільки вони однакові J).
При записі алгоритму мовою програмування слід врахувати, що в гілці "ні" не одну дію, а три, тому слід застосувати складений оператор. Арифметичні вирази не забувайте записувати у відповідності з правилами мови Паскаль. В іншому, ця програма не складніше попередньої.
Program Sq1;
Var A, B, C, D, X1, X2: Real;
Begin
Writeln ('Введіть коефіцієнти квадратного рівняння');
Readln (A, B, C);
D: = B * B-4 * A * C;
If D <0 Then Writeln ('Корній немає!)
Else
Begin
X1: = (-B + SQRT (D)) / 2 / A;
X2: = (-B-SQRT (D)) / 2 / A;
Writeln ('X1 =', X1: 8:3, 'X2 =', X2: 8:3)
End
End.
Цікаво, що в якості оператора, який виконується за виконання чи невиконання умови, може виступати умовний ж оператор. У цьому випадку говорять про вкладеності умовних операторів. Я настійно рекомендую при вирішенні такого роду завдань складати блок-схему алгоритму в зошиті. Тільки потім, при складанні програми, вам залишається лише акуратно прописувати спочатку всю Then-частину, а потім переходити до Else-частини. Зазвичай при записі умовних операторів на мові Паскаль (особливо при множинних розгалуження) команди записують уступом вправо і вниз. Це підвищує наочність, і, повірте, знижує втрати часу на налагодження.
Для ілюстрації вирішимо ще одне завдання: "вирішити рівняння виду A * x ^ 2 + B * x + C = 0". Прошу не плутати з квадратним рівнянням, для якого нам було відомо, що коефіцієнт А не дорівнює нулю. Тут же коефіцієнти можуть бути будь-якими числами. Виходячи з елементарних математичних міркувань, отримуємо наступний алгоритм:
Program Sq2;
Var A, B, C, D, X, X1, X2: Real;
Begin
Writeln ('Введіть коефіцієнти рівняння (A, B, C)');
If A = 0 Then
If B = 0 Then
If C = 0 Then Writeln ('X - будь-яке число')
Else Writeln ('Корній немає!)
Else Begin X: =- C / B; Writeln ('X =', X: 8:3) End
Else
Begin
D: = B * B-4 * A * C;
If D <0 Then Writeln ('Корній немає!)
Else
Begin
X1: = (-B + SQRT (D)) / 2 / A;
X2: = (-B-SQRT (D)) / 2 / A;
Writeln ('X1 =', X1: 8:3, 'X2 =', X2: 8:3)
End
End
End.
Вибір варіантів
Існують умови, які мають багато варіантів, в залежності від яких необхідно виконати ту чи іншу дію, наприклад: при введенні місяця необхідно вивести сезон, якому відповідає даний місяць. У паскалі є спеціальний оператор вибору case, який оформляється в такий спосіб:
case mesiac of
'Грудня', 'січня', 'лютий': writeln ('Зима');
'Березня', 'Квітень', 'травня': writeln ('Весна');
'Червня', 'липні', 'серпня': writeln ('Літо');
'Вересня', 'Жовтень', 'листопада': writeln ('Осінь');
else wrteln ('Такого місяці не існує!');
end;
Де в операторі перераховуються всі варіанти для яких виконуються ті чи інші дії, оператор else виконує дії якщо операнд має значення, яке не перераховано до case.
Складні умови (зв'язки)
Оповідної пропозицію, про яку можна сказати вірно воно чи ні називають висловлюванням. Наприклад:
Сьогодні вівторок.
Йде дощ.
Небо може бути блакитним чи сірим.
Число може бути парним.
Завтра буде не середовище.
Висловлювання можуть об'єднуватися з допомогою слів (операцій) І, Або, НЕ. Ці операції називають логічними операціями. Об'єднані висловлювання називають зв'язками. Наприклад:
Сьогодні вівторок і йде дощ.
Число може бути парним або непарним.
Завтра буде не вівторок.
Логічну операцію І (AND) позначають ^, операцію АБО (OR) V, заперечення НЕ (NOT) ---.
Вірність чи невірність зв'язки двох висловлювань (істинність) визначають за правилами істинності.
Таблиця істинності для логічного ІТаблиця істинності для логічного АБО
Таблиця істинності для логічного заперечення
Наприклад: Визначити істинно або хибно таке висловлювання:
not ((4> 8) and (5 <7))
4> 8
брехливо
5 <7
істинно
(4> 8) and (5 <7)
брехливо
not ((4> 8) and (5 <7))
істинно
Отже висловлення істинно.

ОРГАНІЗАЦІЯ розгалужень у програмі на Паскалі. ОПЕРАТОР IF THEN ... ELSE
Формат оператора:
IF умова THEN оператор 1 ELSE оператор 2;
Правило роботи:
1. Перевіряється умова.
2. Якщо умова істинна, то виконується оператор1
3. Якщо умова помилкова, то виконується оператор2.
Припустимо скорочений формат запису оператора:
IF умова THEN оператор 1;
Правило роботи:
1. Перевіряється умова.
2. Якщо умова істинна, то виконується оператор1.
3. Якщо умова помилкова, то виконується оператор наступний після IF.
Під умовою розуміється логічне (булеве) вираз.
ЛОГІЧНІ ВИРАЗ - це вираз, який приймає значення TRUE (істина) або FALSE (неправда), і включає в себе арифметичні вирази, пов'язані операціями відносини і логічними операціями.
ОПЕРАЦІЇ ВІДНОСИНИ:
> Більше
> = Більше або дорівнює
<Менше
<= Менше або дорівнює
= Одно
<> Нерівно
Мають один і той же пріоритет і з'єднують два висловлення одного й того ж типу. Результатом будь-якої операції порівняння є значення TRUE або FALSE.

ЛОГІЧНІ ОПЕРАЦІЇ:: NOT - НЕ; AND - І; OR - АБО
ПОРЯДОК ВИКОНАННЯ ОПЕРАЦІЙ:
1. - (Унарний мінус, тобто заперечення числа) NOT
2. * / DIV MOD AND
3. + - OR
4. <<=>> = = <>
Оператор розгалуження (умовний оператор)
Формат оператора:
If умова THEN
оператор1
ELSE оператор2;
де умова - логічне вираження (тобто в нього обов'язково входить знак відносини, і можна визначити, істинно вираз чи помилково)
оператор1 - будь-який оператор Паскаля; цей оператор виконується, коли умова істинна;
оператор2 - будь-який оператор Паскаля, в тому числі і умовний; цей оператор виконується, коли умова помилкова.
Виконання оператора:
При виконанні цього оператора спочатку обчислюється значення умови.
Якщо умова істинна (true), то виконується оператор після слова THEN, а оператор2 пропускається;
якщо умова помилкова (false), то оператор1 пропускається, а виконується оператор після слова ELSE.
Приклади:

if x> 0 then
y: = sqrt (x
else write ('Рішень немає');
Оператори 1 і 2 можуть бути будь-якими, у тому числі й умовними. У цьому випадку їх називають вкладеними.
Приклади:
if x> 0 then
y: = sqrt (x
else
if x <= -3 then
y: = sqr (x)
else write ('Рішень немає');
Коротка форма умовного оператора
Частини ELSE оператор2 може і не бути, тоді формат оператора:
If умова THEN оператор1;
Виконання оператора:
Якщо умова істинна, то виконується оператор після слова THEN, а інакше він пропускається.
Приклади:
if abs (x)> = 5 then
y: = exp (3 * ln (x))

Складовою оператор
В умовному операторі після слів THEN і ELSE можна поміщати по кілька операторів. У цьому випадку їх треба об'єднати в складений оператор, який починається словом BEGIN і закінчується словом END; (на кінці не крапка, а крапка з коми!)
Приклади
Скласти програму, яка перерозподілить задані значення x, y так, що в х виявиться більше значення, а в y - менше.
program PRMAX;
var x, y, z: real;
begin
write ('Введіть два числа:');
read (x, y);
if x <y then
begin z: = x;
x: = y;
y: = z
end;
writeln ('x =', x, 'y =', y);
end.
Складну умову
Після слова IF допускається:
кон'юнкція умов (умови зв'язуються за допомогою логічної операції and),
диз'юнкція умов (умови зв'язуються за допомогою логічної операції or);
інверсія умов (заперечення умови not)
Приклади:
З'ясувати, чи належить точка з координатами (x, y) кільцю з центром у точці (0, 0), зовнішнім радіусом r1 і внутрішнім радіусом r2
program PRcir;
var x, y, r1, r2: real;
begin
write ('Введіть координати точки:');
read (x, y);
writeln ('Введіть радіуси r1, r2::');
read (r1, r2);
if (sqrt (sqr (x) + sqr (y)) <r1) and (sqrt(sqr(x)+sqr(y))> r2) then
writeln ('Точка належить кільцю');
else writeln ('Точка не належить кільцю');
end.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
24.3кб. | скачати


Схожі роботи:
Типи галуження пагонів
Програмування на Паскалі
Цикли в Паскалі
Арканоід на Паскалі
Типи даних в Паскалі
10 завдань з рішеннями програмуванням на Паскалі
Робота з редакторами Word і Excel Програмування в Паскалі
© Усі права захищені
написати до нас