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. Операторний блок


 

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

17595. Индексы. Использование индексного метода при анализе среднего курса акций 258.5 KB
  ТЕМА 7 Индексы ПЛАН ЛЕКЦИИ 1. Понятие индексов. Индивидуальные и сводныеобщие индексы. 2. Агрегатные индексы. 3. Среднеарифметический и среднегармонический индексы. 4. Система взаимосвязанных индексов факторный анализ. 5. Индексы средних величин. 6. Использовани...
17600. Облік та аналіз зовнішньоекономічної діяльності 554.5 KB
  Облік та аналіз зовнішньоекономічної діяльності Лекція 1. ПРЕДМЕТ ЗАВДАННЯ ЗАГАЛЬНОТЕОРЕТИЧНІ І СПЕЦИФІЧНІ ОСНОВИ ДИСЦИПЛІНИ План Предмет курсу. Основні завдання та задачі. Нормативноправове забезпечення бухгалтерського обліку зовнішньоекономічної
17601. Экономика и организация малого бизнеса 3.95 MB
  Экономика и организация малого бизнеса: курс лекций Лекция 1. Предпринимательство: сущность функции принципы деловые качества 1.1.Сущность и функции предпринимательства его отличие от других видов деятельности. 1.2. Исторические предпосылки и основы предпринимате...
17602. ЕКОНОМІЧНІ ТЕОРІЇ ТА БАЗИСНІ ІНСТИТУТИ НАЦІОНАЛЬНОЇ ЕКОНОМІКИ 124 KB
  ТЕМА 2 ЕКОНОМІЧНІ ТЕОРІЇ ТА БАЗИСНІ ІНСТИТУТИ НАЦІОНАЛЬНОЇ ЕКОНОМІКИ План 1.Економічні теорії та базисні інститути національної економіки 2. Теорія дії триєдиних економічних законів 3. Базисні відносини та Інститути національної економіки Формування нац...
17603. ПРОГРАМУВАННЯ ТА ПРОГНОЗУВАННЯ НАЦІОНАЛЬНОЇ ЕКОНОМІКИ 301.5 KB
  PAGE 31 ТЕМА: ПРОГРАМУВАННЯ ТА ПРОГНОЗУВАННЯ НАЦІОНАЛЬНОЇ ЕКОНОМІКИ ПЛАН 1. Суть державного програмування види програм. Цільові комплексні програми розвитку національної економіки 2. Програми економічного й соціального розвитку. Міжнародні програ...