69131

Алгоритмічний вибір альтернатив. Вкладеність конструкцій вибору

Лекция

Информатика, кибернетика и программирование

Під час програмування деяких розгалужень виникає потреба у використанні операторних блоків що розглядатимуться у розділі 3. У цьому ж розділі буде пояснено як орієнтуватися в коді великих програм що містять численну кількість конструкцій вибору та операторних блоків.

Украинкский

2014-09-30

48 KB

1 чел.

Лекція 8.Тема:Алгоритмічний вибір альтернатив. Вкладеність конструкцій вибору.

                        Операторний блок.Поліваріантний вибір.

План:

1. Алгоритмічний вибір альтернатив

2. Вибір із двох альтернатив

3. Вкладеність конструкцій вибору

4. Операторний блок

1. Алгоритмічний вибір альтернатив

 Алгоритмічна конструкція, що дозволяє виконавцеві алгоритму вибрати ту чи іншу послідовність дій залежно від певних умов, називається розгалуженням або конструкцією вибору альтернатив. У даному розділі розглянуто механізми використання цієї алгоритмічної конструкції у програмуванні. Є такі різновиди конструкції вибору, як вибір з двох альтернатив і поліваріантний вибір. Вибір із двох альтернатив розглядатиметься у розділах 1 та 2, а поліваріантний вибір -у розділі 3. Під час програмування деяких розгалужень виникає потреба у використанні операторних блоків, що розглядатимуться у розділі 3. У цьому ж розділі буде пояснено, як орієнтуватися в коді великих програм, що містять численну кількість конструкцій вибору та операторних блоків.

2. Вибір із двох альтернатив

Алгоритмічна конструкція альтернативного розгалуження, або конструкція вибору з двох альтернатив, дозволяє виконавцеві алгоритму вибрати один із двох варіантів дій залежно від істинності деякої умови. У мові Pascal альтернативні розгалуження реалізуються умовним оператором (оператором розгалуження). Синтаксис умовного оператора є таким: if <умова> then <оператор1> [else <оператор2>];

Тут if, then, else - зарезервовані слова, що перекладаються як «якщо», «то», «інакше»; <умова> — довільний логічний вираз; <оператор1> і <оператор2> — довільні оператори.

Виконання умовного оператора починається з обчислення значення булевого виразу <умова>. Якщо цей вираз є істинним, то виконується <оператор1> і керування передається наступному за умовним оператору (<оператор2> пропускається). Якщо вираз <умова> є хибним, то <оператор1> пропускається, а виконується лише <оператор2> і на цьому дія умовного оператора вважається завершеною.

Зауважимо, що в синтаксисі умовного оператора фразу el se <оператор2> записано у квадратних дужках, а отже, ця фраза є необов'язковою. Скорочена форма умовного оператора (без фрази else) реалізує одно альтернативне розгалуження. Якщо вираз <умовам в одно альтернативному розгалуженні є істинним, то <опе-ратор1> виконується, якщо хибним — не виконується і на цьому дія умовного оператора вважається завершеною.

Нарешті, розглянемо детальніше умову, що записується після слова і f і являє собою певний логічний вираз. Нагадаємо, що логічний вираз може бути як окремим порівнянням або окремою булевою змінною, так і поєднанням порівнянь або булевих змінних за допомогою логічних операцій and, or та not. Наприклад, умова x<= x>= 5  мовою Pascal записується так: (х>« 0) and (х<= 5), а умова x<=0 або x>= 5 — так: (х <= 0) ог (х >= 5). Умови, записані за допомогою логічних операцій and та or, називаються складеними, а умови, записані без таких операцій, — простими.

Наведемо найпростіший приклад застосування оператора вибору. Припустимо, потрібно визначити, чи належить значення дійсної змінної х проміжку [0;1], і вивести відповідне повідомлення. Ці дії виконує такий фрагмент програми:

1f (х>=0) and (х<=1) then

write(x belongs to [0:1]')

else

write(x does not belong to [0:1]'):

3. Вкладеність конструкцій вибору

Гілки деякого розгалуження можуть містити інші розгалуження. У даному розділі для простоти розглянемо лише той випадок, коли одне розгалуження вкладене до гілки el se іншого. Зобразимо таку алгоритмічну конструкцію у вигляді блок-схе-ми (рис. 3.1) та наведемо синтаксис відповідного фрагменту Pascal-програми.

1f <умова1> then <оператор1>

else 1f <унова2> then <оператор2>

                             else <операторЗ>:

4. Операторний блок

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

Операторний блок, або складений оператор, — це послідовність операторів, що розпочинається ключовим словом begin та завершується ключовим словом end (слова begin та end інколи називають операторкими дужками). Операторний блок може перебувати в будь-якому місці програми, де синтаксисом мови припускається наявність оператора. Синтаксис операторного блоку має такий вигляд:   

begin

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

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

end;          

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

Приклад

Необхідно знайти розв'язки квадратного рівняння ах2 + Ьх + с = 0, коефіцієнти якого є дійсними числами, що їх вводить користувач. Залежно від значень коефіцієнтів а, Ь, с та дискримінанта d=b2 - 4ас можливі такі результати: всі дійсні числа є коренями (а = 0, b = 0, с = 0), коренів немає (а = 0, b = 0, с  0), є один корінь (а = 0, b 0), є два різних дійсних корені (а 0, d > 0), два дійсних корені збігаються (а Ф 0, d = 0) або існує два комплексно-спряжених корені (а  0, d < 0). Отже, для коректного розв'язання даної задачі слід виконати декілька порівнянь із нулем коефіцієнтів рівняння та його дискримінанта. Ці порівняння можна виконувати у різній послідовності, і відповідно до цього можна складати різні алгоритми. Алгоритми розв'язання однієї задачі можуть відрізнятися за своєю ефективністю. Припустимо, що для даної задачі найефективнішим є той алгоритм, який мінімізує середню кількість порівнянь для довільного набору вхідних даних. Спробуємо побудувати такий алгоритм. Зауваживши, що перевірка умови а = 0? відбувається в усіх варіантах розв'язання, робимо висновок, що розгалуження за цією умовою слід виконувати найпершим, а перевірку всіх інших умов здійснювати на його гілках. У тому разі, коли а = 0, перевірка умови с = 0? є доцільною, лише коли b = 0, тому умову b = 0? слід перевіряти раніше, ніж умову с = 0?. Врахувавши ці міркування, запишемо алгоритм і програму розв'язання квадратного рівняння.

Алгоритм обчислення коренів квадратного рівняння

Увести коефіцієнти квадратного рівняння а, b,  с.

Якщо а <> 0, то виконати дії 2.1-2.4.

Обчислити дискримінант за формулою d = b2 - 4ас.

Якщо d > 0, то обчислити корені Х\ та х2 за наведеною нижче формулою
та вивести їх.

        Якщо d < 0, то вивести повідомлення «Корені комплексні».

Якщо d = 0, то вивести повідомлення про рівність двох коренів та обчис
лити їх значення за формулою х^2 = -Ь/2а.

3. Якщо а = 0, то виконати дії 3.1-3.3.

Якщо b  0, то обчислити й вивести значення -с/b.

Якщо b = 0 і с  0, то вивести повідомлення «Коренів немає».

Якщо b = 0 і с = 0, то вивести повідомлення «Усі дійсні числа є коренями».

Наведемо програмне розв’язання задачі обчислення коренів квадратного рівняння.

рrogram ехЗ_2:

var a.b.c.d:real;

xl.x2:real;

begin

writeln('solution of quadratic equation'); writeln('enter koefficients: a.b.c'):

readln(a.b.c); {ввести значення коефіцієнтів}

1fa<>0
then
begin
d:=sqr(b)-4*a*c: {обчислити дискримінант}

1f d>0

then

begin

xl:-(-b+sqrt(d))/(2*a):

x2:-(-b-sqrt(d))/(2*a):

writelnt ('xl=1.xl:6:2.' x2=',x2:6:2):

end

else

if d=0

then

writeln ('roots are equal: x=’, b/(2*a):6:2)

else

writeln ('complex roots') end

else

1f b<>0

then writeln (‘x=’, -c/b:6:2)

else

if c<>0

then writeln (' no roots’)

else writeln (‘all real numbers are the roots’);

end

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

Контрольні питання

1. Алгоритмічний вибір альтернатив

2. Вибір із двох альтернатив

3. Вкладеність конструкцій вибору

4. Операторний блок


 

А также другие работы, которые могут Вас заинтересовать

61795. Символіка. Що це таке? 28.92 KB
  Мета: поглибити знання про символи; познайомити із різноманітністю символіки у нашому житті; поширити і збагатити знання учнів про народні символи України; виховувати повагу до символіки Батьківщини...
61796. Вік. Цифри. День народження 25.98 KB
  Мета: засвоєння нової лексики; формування вміння ставити запитання типу How old re you How old is she та відповідати на них; розширення кругозору учнів; розвиток мовної здогадки та мовленнєвої реакції учнів...
61797. Твоя країна — Україна. Символи держави 35.33 KB
  Мета: формувати уявлення про країну; ознайомити з найбільшими містами і річкам України; Розширити знання учнів про державні символи України; викохувати патріотичні почуття любов і гордість за державу.
61799. Гроші. Види та функції грошей 25.28 KB
  Мета: Узагальнити й систематизувати знання з теми, закріпити розуміння основних понять і термінів, навчити застосовувати вивчене на практиці. Розвивати абстрактно-логічне та образне мислення, інтерес до науки, проведення економічного аналізу.
61800. Школа м’яча 27.57 KB
  Руки в сторони пальці в кулак. Руки в сторони пальці в кулак. ноги разом руки до плечей. На 1 крок лівою ногою вперед руки в стороні 2 приставити ногу руки до плечей 3 нахил 4 в.
61801. Форма «рондо» 22.25 KB
  Мета: Познайомити з поняттям форма рондо з творчістю О.Бородін романс Спляча красуння Для виконання: Класне рондо В русі: В. Тип уроку: комбінований Наочно дидактичні засоби: компютер; презентація; Учень повинен знати: поняття форма рондо...