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


 

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

41762. ИОННООБМЕННАЯ АДСОРБЦИЯ 63.35 KB
  В каждой порции определите кислотность для этого пипеткой отберите 10 мл элюата перенесите в стакан и титруйте 02 М NOH в присутствии фенолфталеина. Постройте кривую зависимости концентрации кислоты от объема вышедшего элюата.1 Результаты зависимости концентрации кислоты от объема элюата прошедшего через колонку № опыта Объем 02 М NOH V мл Концентрация элюата с г мл 1 n Часть 2.2 Результаты зависимости рН от объема элюата прошедшего через колонку № опыта Объем элюата V мл рН 1 n 5.
41763. Программирование на языках Техno ST и Техno FBD 1.37 MB
  Добавьте каналы хранящие значение стоимости продукта расхода продукта периода генерации рисунок 3. Рисунок 3. Для этого задайте противоположные углы кнопок щелчком левой кнопки мыши рисунок 3. Выделите строку mousePressed и вызовите контекстное меню рисунок 3.
41764. Изучение и анализ конструкций систем охлаждения транспортных двигателей 77.95 KB
  Ознакомиться с устройством систем охлаждения различных двигателей, уметь анализировать их конструктивные особенности.
41765. Работа с таблицами в MS ACCESS 52.72 KB
  Работа с таблицами в MS ACCESS. Цель работы: изучение принципов создания запросов в СУБД MS Acces. Создание запроса на выборку товара не позднее определённой даты.
41766. Использования вспомогательных средств трансформирования простых объектов в Corel Drаw 2.11 MB
  Цели занятия: Сформировать умения использовать средства привязки выравнивания и распределения объектов инструментов изменения формы объектов. Учащиеся должны научиться: Осуществляет привязку объектов к сетке направляющим; выполняет выравнивание и распределение объектов. Применять инструменты изменения формы объектов.
41767. Настройка фрезерного станка и делительной головки на нарезание зубчатого колеса с винтовым зубом 946.84 KB
  Задание: Изучить устройство станка и делительной головки. Рассчитать настройку делительной головки и настроить её на работу. Поэтому необходимо усвоить следующее: Устройство механизмов отсчёта делительной головки и методику их наладки.
41768. Создании простейших программ с использованием регулярных выражений 492.02 KB
  Контрольные вопросы: Для чего используются регулярные выражения Для чего используются конструкции группирования и обратных ссылок Для чего используется класс Regex Пояснения и примеры: Регулярные выражения предназначены для обработки текстовой информации и обеспечивают: эффективный поиск в тексте по заданному шаблону; редактирование замену и удаление подстрок; формирование итоговых отчетов по результатам работы с текстом.NET для работы с регулярными выражениями объединены в пространство имен System. Для описания регулярного...