Б С Бусигін - Прикладна інформатика - страница 33

Страницы:
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83 

1, x > О

Алгоритм послідовності обчислень за цією формулою з використанням вкладеного оператору if може виглядати так.

Label 10;

Var

x,  y  : real;

Begin

writeln('Vvedite x'); readln(x); if (x < 0) then

y := -1

else

if (x = 0) then

y  := 0 else    y := 1; writeln('Znachenie Y=', y:8:3); end.

При необхідності конструювання складних логічних умов виникають синтаксичні складності коректного використання оператора if, коли потрібно вкладати один такий оператор if у інший. Якщо його відокремлювати операторними дужками begin ...  end великих проблем не виникає.

Наприклад:

if умова then begin

оператор;

if умова then

оператор else

оператор; оператор end else begin

оператор; if умова then оператор

end;

Однак, якщо вкладений оператор if є єдиним оператором у гілці (рос. -ветви) альтернативи, то може виникнути неоднозначність: якому if відповідає гілка else.

Наприклад:

if умова then if умова then оператор else

оператор;   { Невірне використання оператора if}

24б

У таких випадках повинно виконуватися наступне правило.

Ключове слово else зв'язується з найближчим, що стоїть перед ним ключовим словом if, котре ще не було зв'язане з ключовим словом else.

Якщо у передуючому прикладі більш конкретніше позначати структуру вкладеності і записати else на одному рівні з then, якому воно відповідає, то можемо отримати такий фрагмент програми.

if умова then begin

if умова then оператор

end else

оператор;

Тому треба запам'ятати наступне обмеження. Оператор, що розташовується безпосередньо після службового слова then не може бути умовним, у той час як оператор, що розташовується після else може бути будь-яким, і, зокрема, умовним. Це обмеження виникає, тому що компілятору не зрозуміло до якої з умов відноситься else (перевірте на комп'ютері) (табл.8.35):

Таблиця 8.35 Приклади конструювання вкладених операторів if

НЕВІРНО

ВІРНО (другий оператор if входить до складеного оператора)

ВІРНО (оператор if використо­вується по праву сторону від оператора else)

if a > 0 then if a < 2 then

a  := 1 else

a     := 3;

if a > 0 then begin

if a < 2 then a  := 1 end else      a  := 3;

if not a > 0 then a  := 3

else

if a < 2 then a  := 1;

При використанні умовного оператора if після else ніяких двозначностей не виникає.

Прикладом, коли логічний вираз у операторі if має більш складну структуру, може бути задача визначення, чи можливо побудувати трикутник з довжин відрізків, що задаються у змінних: x, y, z (x>0, y>0, z>0).

Такий умовний оператор має вигляд.

if   (X+Y>Z)  AND   (X+Z>Y)  AND   (Y+Z>X) then

Writeln('TPMKYTHMK ПОБУДУВАТИ МОЖЛИВО') else

Writeln('TPИKУTHИK ПОБУДУВАТИ НЕМОЖЛИВО');

Оператор вибору case служить для переключення на виконання груп операторів у залежності від значення деякого цілочисельного перемикача (рос. - переключателя) або виразу. Синтаксис повної його форми такий:

case <перемикач> of <мітки М1> : <оператори Р1>;

< мітки М2> : <оператори Р2>;

< мітки MN> : <оператори PN>; else < оператори PM> {альтернатива}

end;

Де:

- перемикач - може бути цілочисельною змінною або цілочисельним виразом (i, Iswitch, 2*i, abs(j) та інш.).

- мітки М1 ... MN - можуть відображатися:

О Одним цілочисельним значенням (3). © Діапазоном цілочисельних значень (1..27). © Переліченням цілочисельних констант (2,4,10,75). © Набором   комбінацій   елементів   перших   трьох пунктів (1,3..15,45,54..71).

- оператори P1...PN, PM - це оператори аби якої степені складності, але узяті у операторні дужки begin ... end.

Значення функції, що було обчислене за допомогою умовного оператору if у попередньому розділі за формулою (8.5) можна реалізувати за допомогою оператора case таким чином.

Var

x, y : real;  i  : integer;

Begin

writeln('Vvedite x'); readln(x);

if (x > 0) and (x < 1) then

i  := 1 else

if   (x > 1)   and  (x < 3) then i  := 2; case i of

1 : y := sqr(x);

2 : y := sqrt(x); else

y := 1/sqrt(abs(x)); end;

writeln('Znachenie Y=', y:8:3);

1. Дани два числа. Замінити друге число нулем, якщо воно більше першого, і залишити його колишнім, якщо це не так.

2. Знайти найменше з трьох даних чисел.

3. Знайти найбільше з трьох даних чисел.

4. Дано три числа. Звести в квадрат ті з них, значення яких ненегативні. Негативні числа залишити без зміни.

5. Дано три числа a, b і c. З'ясувати, чи вірно, що a<b<c. Відповідь вивести на екран у текстовій формі: «Вірно» чи «Невірно».

6. Написати програму для обчислення різних значень функції y: sin x,     при    x < О

arctg x, при 0 < x < у4 log2 x,   при   ^4 < x < 32

У

x

у останніх випадках

Протестувати програму при різних значеннях аргументів.

z = <

7. Написати sin x + cos2 x,

x3 + І, x + І x2 + S' [ln x,

програму для обчислення різних значень функції т. при х <-п

при   < X

при п < х < 10 при 10 < х < 100

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

8. Написати   програму   для   обчислення  різних  значень   функції т.

z

arctg

x

У

при y ф О, і xі>і y і arcsm—,   при y ф О, іx(<(yі

x

У

О, у останніх випадках

Протестувати програму при різних значеннях аргументів.

9. Алгоритми програм 6, 7, 8 реалізувати за допомогою оператора вибору.

8.16. Циклічні обчислювальні процеси і оператори циклів. Цикли з параметром. Оператор циклу з параметром for

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

10

Уa   (8.7), то вона включає такі складові (табл. 8.36).

n=1

Таблиця 8.36

_Складові обчислення суми за формулою (8.7)_

Зміни значень ступеню п

Елементи суми

Інший запис елементів суми і їхніх компонентів

1

a1

a

2

a2

a*a

3

a3

a*a*a

4

a4

a*a*a*a

5

a5

a* a* a* a* a

6

a6

a* a* a* a* a* a

7

a7

a* a* a* a* a* a* a

8

as

a*a*a*a* a*a*a*a

9

a9

a*a*a*a* a*a*a*a*a

10

a10

a*a*a*a* a*a*a*a*a*a

Елементи додавання

12       3       4 5

a1 + a2 + a3 + a4 + a5 + a + a + a + a + a

a + a*a + a*a*a + a*a*a*a + a*a*a*a*a +

a*a*a*a*a*a           +           a*a*a*a*a*a*a + a*a*a*a*a*a*a*a   +      +   a*a*a*a*a*a*a*a*a + a*a*a*a*a*a*a*a*a*a

Підсумковий результат додавання

10

n=1

10

n =1

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

Отже, групи операторів, що багаторазово повторюються, звуться циклами, а змінні, що міняють свої значення у циклі - змінними циклу.

Алгоритм циклічної структури у найбільш загальному вигляді повинен містити такі фрагменти дій:

О підготовку  циклу:   ініціалізація   (завдання  початкових значень) змінним циклу;

© тіло циклу: дії, що повторюються у циклі для різних значень змінних

циклу;

© модифікацію (зміни) значень змінних циклу перед кожним новим його повторенням;

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

Одним з прикладів простого циклічного процесу є задача табулювання значень функції однієї змінної у = і(х).

Для її обчислення завдається початкове Х0 і кінцеве Хк значення аргументу Х цієї функції, а також кількість К значень функції, які потрібно обчислити на усьому відрізку поміж Х0 та Хк при додатково обчислених на ділянці решти аргументів Хі . Вищенаведені дані дають змогу обчислити крок її, з яким змінюються значення аргументу Х на обраній ділянці від Х 0 до Хк.

Треба пам'ятати, що кількість К значень аргументів на одиницю більше за кількість відрізків ЇМ, на які, як правило, поділяють ділянку поміж Х0 та Хк Тобто N = К - 1. Наприклад, у таблиці 8.37 задамо наступні вирази і значення для обчислення функції, що обчислює піднесення (рос. - возведения) аргументу Х у ступень 1,2 (тобто одну цілу і дві десятих).

Таблиця 8.37

Складові процесу обчислення значень аргументів і функцій на відрізках _ділянки [X 0к] _

Значення

Величина

Вираз/Значення

Функція

У = / (X)

X1, 2

Початкове значення аргументу

Х0

1

Кінцеве значення аргументу

 

5

Кількість відрізків на ділянці

N

4

Кількість значень функції

К

5

Крок зміни аргументу функції

Ь

к - Х0)Л* =1

У таблиці 8.38 наведені обчислені значення функції У(Х)=Х1, 2 (Х у ступеню 1.2), обчислені на ділянці [1,5], яка поділена на чотири частини з кроком її= (5-1)/4 = 1. У таблиці 8.38 також показано, що кожне наступне значення аргументу Х можна обчислювати двома різними методами. Або додаючи до кожного попереднього значення аргументу Х величину кроку її: Хі+1 = Хі + її, або збільшуючи початкове значення аргументу X0 на кількість кроків, що кратна кількості відрізків, передуючих значенню Хі: Хі = Х0 +

Таблиця 8.38

_Значення аргументів Х і значень функції У=іГХ)=Х1, 2

Значення аргументів X

-1—2-

Значення функції X ,

Х0 = 1

1.0

Х1 = Х0 + Ь = 1 + 1 = 2

2.3

Х2 = Х1 + її = 2 + 1 = 3, або Х2 = Х0 + 2Ь = 1 + 2 = 3

3.7

Х3 = Х2 + Ь = 3 + 1 = 4

5.3

X4 = X3 + h = 4 + І = 5, або X4 = X0 + 4h = l + 4 = 5 6.9

Виходячи з цих значень аргументів можна обчислити практично аби яке значення функції однієї змінної (sin x, cos x, ex, (a+bx), x2, Vx та інш.).

Страницы:
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83 


Похожие статьи

Б С Бусигін - Прикладна інформатика