загрузка...
загрузка...
На головну

Налагодження програм

  1. II. Региональная программа капитального ремонта
  2. III этап. Составление программного кода
  3. IV этап - Запуск программы 1 страница
  4. IV этап - Запуск программы 2 страница
  5. IV этап - Запуск программы 3 страница
  6. IV этап - Запуск программы 4 страница
  7. IV. ПРОГРАММА ГОСУДАРСТВЕННОГО РЕГУЛИРОВАНИЯ

Пригадайте!

1. Що входить до складу середовища розробки?

2. Яке призначення компіляторів? Які особливості їх роботи?

3. Які помилки у програмному коді виявляються на етапі компіляції? У чому вони полягають? Як вони позначаються виділяються в Turbo Delphi 2006? Де відображається їх опис?

4. Які помилки називаються логічними? Як можна виявити наявні логічні помилки?

5. Як відкрити раніше створений проект?

Тестування програми. Коментарі

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

Логічні помилки в проекті виявити значно важче, ніж синтаксичні. Адже проект виконується, видає результати, але вони не відповідають умові задачі, для розв'язування якої створювався даний проект.

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

Пояснимо цей спосіб на такому прикладі. Нехай потрібно скласти проект для обчислення значень функції у = . Часто учні, записуючи команду присвоювання для обчислення значення відповідного виразу y := (2*x-5)/(x*x+1)забувають узяти знаменник (а то й чисельник) у дужки, тобто вводять, наприклад, команду y := (2*x-5)/x*x+1 або y := 2*x-5/x*x+1. Таку логічну помилку нескладно помітити, застосувавши вдалу добірку тестів. Так при тестуванні для х = 0 стане очевидним, що проект не видає очікуваного правильного результату -5, а перериває своє виконання, відкриваючи вікно з повідомленням division by zero (англ. division by zero - ділення на нуль). Після цього потрібно знайти команду, яка містить дію ділення і може стати причиною такої помилки.

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

Допомагають у пошуку логічних помилок коментарі, які можна включати до тексту програми.

Запам'ятайте!

Коментар - це текст, який ігнорується компілятором і включається до тексту програми з метою полегшення розуміння структури програмного коду.

Щоб компілятор відрізнив команди від коментарів, у Turbo Delphi 2006коментарі потрібно брати у фігурні дужки, наприклад, {Це команда знаходження частки}. Якщо текст коментаря короткий і не займає більше одного рядка, то можна замість дужок поставити перед ним дві похилі риски, наприклад, //Це команда знаходження частки. Інколи коментарі замість фігурних дужок беруть у круглі дужки із зірочками, наприклад, (*Це команда знаходження частки*).

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

На рис 2.38 наведені приклади використання коментарів у тексті програми.

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

Покрокове виконання програм

Ще одним способом виявлення в програмі логічних помилок є її покрокове виконання, або трасування. Крок виконання програми - це рядок програми. У рядку можуть бути записані одна або кілька команд програми. Підпрограму, як окрему частину програми, можна виконати як один крок, а можна виконати по рядках - це залежить він режиму покрокового виконання.

Для виконання одного кроку програми, якщо необхідно і підпрограму виконати по рядках, потрібно натиснути клавішу F7 або виконати Run Þ Trace Into (англ. trace into - трасувати всередину). А для виконання одного кроку програми, якщо можна підпрограму виконати повністю за один крок, потрібно натиснути клавішу F8 або виконати Run Þ Step Over (англ. step over - крок поверх). Ще раз наголосимо, що підпрограму можна виконати як один крок тільки в тому випадку, коли ми впевнені, що вона не містить логічних помилок.

Розглянемо, як відбувається покрокове виконання програми на прикладі програми знаходження суми двох довільних дійсних чисел, розглянутої в попередньому пункті (рис. 2.38).


Після першого натиснення клавіші F7 відбувається компіляція проекту, і якщо проект не містить синтаксичних помилок, то починається його виконання. Спочатку відкривається вкладка з текстом програми, який увійшов до файлу з розширенням імені dpr (англ. delphi project - проект Делфі). Для проекту, що розглядається, це файл Project1.dpr. На рис. 2.39 наведено команди цієї частини програми, і її початок підсвічується кольоровою смужкою. При кожному наступному натисненні клавіші F7 будуть виконуватися команди наступного рядка. У результаті виконання наведених на рис. 2.39 трьох команд відкриється вікно проекту з розміщеними на ньому елементами керування (якщо вікно не відкрилося, то потрібно вибрати його кнопку, яка з'явилася на Панелі завдань).

Після цього потрібно увести в поля відповідні числа і вибрати кнопку Додати. У результаті відкривається вкладка з текстом програми, який увійшов до файлу з розширенням імені pas (англ. pascal - Паскаль). Для проекту, що розглядається, це файл Unit1.pas. На рис. 2.40 наведено команди цієї частини програми, і її початок підсвічується кольоровою смужкою. При кожному наступному натисненні клавіші F7 будуть виконуватися команди наступного рядка. У результаті послідовного натискання клавіші F7 виконаються усі наведені команди, у результаті чого в напис і у вікно повідомлень виведеться результат. Зрозуміло, що всі коментарі при виконанні будуть пропущені.

 
 

Для того, щоб перервати режим покрокового виконання, потрібно натиснути сполучення клавіш Ctrl+F2.

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

Щоб під час покрокового виконання програми слідкувати за зміненням значень змінних, потрібно відкрити вікно Watch List (англ. watch list - список перегляду) і помістити в це вікно імена змінних, значення яких ми хочемо спостерігати в ході покрокового виконання програми.

Для того, щоб помістити ім'я змінної до вікна Watch List, потрібно натиснути сполучення клавіш Ctrl+F5 або виконати Run Þ Add Watch (англ. add watch - додати перегляд). У результаті спочатку відкривається вікно Watch Properties (англ. watch properties - властивості перегляду, рис. 2.41). У перше поле цього вікна потрібно ввести ім'я змінної і вибрати кнопку ОК.

Після цього відкривається вікно Watch List (рис. 2.42) із внесеним до нього іменем змінної. Таким чином можна до цього вікна внести імена всіх тих змінних, за значеннями яких доцільно спостерігати під час покрокового виконання програми.

Під час покрокового виконання програми значення цих змінних змінюватиметься і будуть відображатися у вікні Watch List (рис. 2.43). Уважно слідкуючи за цими зміненнями і порівнюючи ці значення з очікуваними, можна помітити, в який момент виконання програми значення певної змінної стає неочікуваним. Саме ця команда й може бути причиною логічної помилки.

Перевірте себе

1. º У чому полягає процес тестування програми?

2. · Поясніть, для чого виконується тестування програми?

3. º Що таке коментар у програмі? Яким чином можна коментар включити до тексту програми?

4. · Поясніть, для чого в програму включають коментарі?

5. º Для чого програми виконують покроково?

6. · Поясніть, у чому полягає процес покрокового виконання програми?

7. · Прокоментуйте хід покрокового виконання програми.

8. · Чим відрізняються покрокове виконання програм з використанням клавіш F7 і F8?

9. · Як переглянути значення змінних під час покрокового виконання програми?

Виконайте завдання

1. · Відкрийте проект, наприклад, з папки Тема 2\Завдання 2.6\Проект 2.6.1. Завданням проекту є знаходження розв'язку задачі: «Два потяги виїхали одночасно назустріч один одному. Потрібно знайти, через який час вони зустрінуться, якщо відома відстань між ними у момент початку руху та швидкість кожного потяга». Виконання обробника події OnClick кнопки повинно привести до виведення шуканого часу, якщо значення відстані та швидкостей вводяться у поля. Для заданих початкових даних обчисліть очікувані результати:

а) відстань - 1000, швидкості - 120 та 130;

б) відстань - 600, швидкості - 80 та 120;

в) відстань - 1200, швидкості - 115 та 85.

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

2. (ДЗ) · Створіть три тестових набори вхідних даних для тестування проекту, призначеного для розв'язання задачі: ««Два потяги вийшли одночасно з однієї станції у протилежних напрямках. Потрібно знайти відстань, на який вони опиняться один від одного через заданий час, якщо відома швидкість кожного потяга». Обчисліть очікувані результати за складеними тестами. Відкрийте проект, наприклад, з папки Тема 2\Завдання 2.6\Проект 2.6.2. Протестуйте його на ваших тестових даних. Зробіть висновок, чи містить програма логічні помилки. Якщо так, то у чому може бути помилка.

3. * Відкрийте проект, наприклад, з папки Тема 2\Завдання 2.6\Проект 2.6.3. Перегляньте програмний код та на основі аналізу коментарів зробіть припущення, яку задачу розв'язує цей проект. Спираючись на ваше припущення, складіть три тестових набори вхідних даних для тестування проекту. Обчисліть очікувані результати. Протестуйте проект на ваших тестових даних. Зробіть висновок, чи правильним було ваше припущення.

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

5. º Відкрийте проект, наприклад, з папки Тема 2\Завдання 2.6\Проект 2.6.1. Виконайте програму у покроковому режимі. Зверніть увагу на відображення ходу виконання програми.

6. (ДЗ) · Відкрийте проект, наприклад, з папки Тема 2\Завдання 2.6\Проект 2.6.3. У ході покрокового виконання програми прослідкуйте за значеннями змінних S1 та S2.

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

8. - Відкрийте проект, наприклад, з папки Тема 2\Завдання 2.6\Проект 2.6.8. У ході покрокового виконання програми прослідкуйте за значеннями змінних х, а та S. З'ясуйте, як значення, які послідовно набуває змінна а, пов'язані із значенням змінної х? Змініть проект так, щоб у результаті виконання змінна S містила суму х + х2 + х4 для введеного значення х. Додайте до тексту програми коментар, у якому вкажіть, які зміни були внесені у програмний код. Створіть у власній папці папку Проект 2.6.8 і збережіть у ній змінений проект.

9. * Відкрийте проект, наприклад, з папки Тема 2\Завдання 2.6\Проект 2.6.9. Цей проект призначений для знаходження, на скільки більше часу витратив один з потягів на шлях між містами, ніж другий, заданими відстанню між містами і швидкостями кожного з потягів. З'ясуйте, чи містить проект логічні помилки. Якщо так, визначте, які команди є їх причинами, і виправте їх. Запишіть набір тестових наборів даних, на яких ви виявили логічні помилки. Створіть у власній папці папку Проект 2.6.8 і збережіть у ній змінений проект.

Практична робота № 7

«Налагодження програм»

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.

1. Відкрийте Turbo Delphi 2006.

2. Створіть проект для визначення, у скільки разів добуток двох заданих цілих чисел більший за суму цих чисел.

3. Створіть три тестових набори вхідних даних для тестування проекту. Обчисліть очікувані результати. Протестуйте проект на ваших тестових даних.

4. Поставте коментарі для позначення рядків, у яких відбувається обчислення суми та добутку.

5. Виконайте проект у покроковому режимі. У ході покрокового виконання проекту прослідкуйте за значеннями суми та добутку. Запишіть, які повідомлення відображаються у стовпчику Value для вказаних змінних перед початком покрокового виконання проекту, в ході виконання для одного з наборів початкових даних та після завершення виконання.

6. Створіть у власній папці папку Практична 7 і збережіть у ній проект.


2.7. Основні поняття математичної логіки

Пригадайте!

1. Що таке логічний вираз? Яке значення він може набувати?

2. Опишіть загальний вигляд, кількість аргументів та результат функцій AND, OR, NOT табличного процесора.

3. Які властивості змінної ви знаєте?

4. Що визначає тип змінної? Які вам відомі числові типи?

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

Висловлення. Логічні константи. Логічні операції

Логіка (грец. λόγος - слово, смисл, думка, мова) - наука про форми, методи і закони інтелектуальної пізнавальної діяльності, правильного мислення, про способи міркування. Логіка як наука вивчає способи отримання правильних висновків з висновків, отриманих раніше.

Один з розділів логіки - математична логіка -є наукою про закони математичного мислення. До основних понять математичної логіки входить поняття висловлення.Під висловленням розуміютьрозповідне речення, про яке можна однозначно сказати, правильне (істинне) воно чи неправильне (хибне). Висловлення позначають великими літерами англійського алфавіту, наприклад, А = «Київ - столиця України», В = «2 + 2 = 5».

Основною властивістю висловлення є його істинність, інші властивості вважаються несуттєвими. Значення істинності висловлення позначають 1абоtrue, якщо висловлення істинне, 0 абоfalse,якщо висловлення хибне. Наприклад, висловлення А = «Київ - столиця України» є істинним, тобто значення його властивості істинність дорівнює true.Висловлення С = «3 > 5» є хибним, тобто значення його властивості істинність дорівнює false.

Запам'ятайте!

Значення true та false називаються логічними константами.

Із заданих висловлень можна отримати нові - складені - використовуючи логічні операції: заперечення, кон'юнкцію (лат. conjunctio - об'єднання), диз'юнкцію (лат. disjunctio - роз'єднання) та інші.

Запам'ятайте!

Запереченням називається операція утворення з висловлення А такого складеного висловлення'А (читається «не А»), яке істинне тоді, коли А хибне, і хибне тоді, коли А істинне.

Використанню операції заперечення в українській мові відповідає вживання частки «не» перед дієсловом. Наприклад, запереченням висловлення А = «Існує найбільше просте число» є висловлення 'А = «Не існує найбільшого простого числа».

Висловлення та його заперечення не можуть бути одночасно істинними або одночасно хибними.

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

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

А

Запам'ятайте!

Кон'юнкцією двох висловлень А та В називається операція утворення такого складеного висловлення А /\ В(читається «А і В»), яке істинне тоді і тільки тоді, коли обидва висловлення А і В істинні.

Використанню операції кон'юнкція в українській мові відповідає вживання сполучника «і». Наприклад, висловлення В = «Число 27 кратне 3 і число 27 кратне 9» є кон'юнкцією двох висловлень: «Число 27 кратне 3» та «Число 27 кратне 9»,

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

А В А /\ В

Операцію кон'юнкція також називають логічним множенням.

Запам'ятайте!

Диз'юнкцією двох висловлень А та В називається операція утворення такого складеного висловлення А \/ В(читається «А або В»), яке істинне тоді і тільки тоді, коли істинне хоча б одне з висловлень А або В.

Використанню операції диз'юнкція в українській мові відповідає вживання сполучника «або». Наприклад, висловлення С = «21 ≤ 21» є диз'юнкцією двох висловлень: "21=21" та " 21<21".

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

А В А \/ В

Операцію диз'юнкція також називають логічним додаванням.

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

Висловлення x < 0 є простим, а висловлення 3 < x < 5 - складеним. Останнє можна представити як кон'юнкцію двох простих висловлень: (x > 3) /\ (x < 5).

Наприклад, щоб визначити, чи лежить точка з координатами (х, у) у першій координатній чверті, потрібно визначити істинність складеного висловлення (х > 0) і (y > 0). Для точки з координатами (3, -5) матимемо (3 > 0) і (-5 > 0). Оскільки перше твердження істинне, а друге - хибне, то їх кон'юнкція хибна. Тобто ця точка не лежіть у першій чверті.

Логічні змінні. Логічні вирази та їх таблиці істинності. Логічні формули

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

Цікаві факти з історії

Основні положення алгебри логіки були сформульовані англійським математиком та філософом Джорджем Булем(1815-1864) (рис. 2.44). У 1854 році вийшла його основна праця «Дослідження законів думки, на яких засновані математичні теорії логіки й імовірності». Ця книга нині зараховується до математичної класики. У ній досліджується система алгебри, яку сьогодні називають «алгеброю висловлень» або «булевою логікою». Булева логіка стала основним математичним інструментом для створення комп'ютерів.

В алгебрі логіки використовується поняттялогічна змінна.

Запам'ятайте!

Логічна змінна - це змінна, яка може набувати лише значень true або false.

Завданням алгебри логіки є визначення істинності логічних виразів- виразів, що складаються з логічних констант, логічних змінних, логічних операцій, дужок, наприклад,'(A \/ B ) /\ (A \/ В).

Зрозуміло, що значенням логічного виразу може бути лише trueабоfalse.

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

Для обчислення значення істинності логічного виразу можна використати таблиці істинності.

Для складання та заповнення таблиці істинності потрібно:

1. Обчислити кількість можливих наборів значень логічних змінних. Якщо формула містить n різнихлогічних змінних, то можливих наборів значень цих змінних буде 2n . Це число визначає кількість рядків у таблиці істинності.

2. Обчислити кількість логічних операцій у логічному виразі. Ця кількість плюс кількість логічних змінних визначає кількість стовпців таблиці.

3. Заповнити перші n стовпців усіма можливими наборами значень логічних змінних.

4. Заповнити кожний наступний стовпець значеннями, отриманими при виконанні чергової логічної операції. Черговість встановлюється згідно названого пріоритету операцій.

В останньому стовпці таблиці будуть отримані усі можливі значення істинності заданого логічного виразу.

Наприклад, вираз 'A \/ B /\ A містить дві логічні змінні, тобто n=2. Значить, усього існує 4 набори можливих значень цих змінних (2n = 22 =4). Вираз містить 3 логічні операції: заперечення, диз'юнкція і кон'юнкція. Таким чином, таблиця істинності буде складатися з 4 рядків та 5 стовпців. Першою згідно пріоритету буде виконуватись операція заперечення, другою - кон'юнкція, останньою - диз'юнкція, в якій потрібно використовувати результати перших двох операцій.

Отримаємо таку таблицю істинності:

А В
'A B /\ A ('A) (B /\ A)

Аналізуючи останній стовпець таблиці істинності, робимо висновок, що вираз буде мати значення false лише у випадку, коли логічні змінні мають такі значення: А = true, B = false. У всіх інших випадках значенням логічного виразу буде true.

Запам'ятайте!

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

Рівність двох логічних виразів утворюють логічну формулу.

Наведемо кілька цікавих і корисних логічних формул:

1. - формула подвійного заперечення

2. А \/ А = А - формула поглинання

3. = - формула заперечення диз'юнкції (закон де Моргана)

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

Цікаві факти з історії

Аугустус де Морган (1806 - 1871) (рис. 2.45) - шотландський математик і логік, професор математики Лонднського університетського коледжу, перший президент Лондонського математичного товариства. Результати своїх досліджень з логіки одержав незалежно від Джорджа Буля і виклав у 1847 році.

Перевірте себе

1. º Що вивчає наука логіка? Що вивчає математична логіка?

2. º Що таке висловлення? Наведіть приклади істинних і хибних висловлень

3. * Які речення не є висловленнями?

4. º Що називається логічною константою?

5. ·Як утворюються складені висловлення? Наведіть приклади

6. · Що таке заперечення? Наведіть приклади.

7. º Для чого використовують таблиці істинності?

8. · Наведіть таблицю істинності заперечення

9. · Що таке кон'юнкція? Наведіть приклади.

10. · Наведіть таблицю істинності кон'юнкції.

11. · Що таке диз'юнкція? Наведіть приклади.

12. · Наведіть таблицю істинності диз'юнкції.

13. º Яка змінна називається логічною?

14. *Чим логічна змінна відрізняється від логічного висловлення?

15. · З чого складаються логічні вирази? Які значення вони можуть набувати?

16. º Назвіть пріоритет логічних операцій.

17. · Наведіть алгоритм складання та заповнення таблиці істинності логічного виразу.

18. ·Які логічні вирази називаються рівними? Що таке логічна формула?

Виконайте завдання

1. · Побудуйте заперечення висловлень та з'ясуйте їх істинність:

а) Число 3 є дільником числа 545.

б) Автомобіль не має права їхати на червоне світло

в) Існують паралелограми з прямими кутами

г) Рівняння 2х2 - 3х + 1 = 0 має цілий корінь

є) Не існує натурального числа, що поділяється на 2

ж) Існує ціле число, яке ділиться на всі цілі числа

2. · Серед наступних складених висловлень знайдіть кон'юнкції та диз'юнкції та визначте їх істинність:

а) "Число 27 кратне 3 та кратне 9"

б) "17 < 42 < 18"

в) "Число 2 просте або парне"

г) "∆ АВС є гострокутним, прямокутним або тупокутним"

д) "Діагоналі будь-якого паралелограму перпендикулярні та точкою перетину поділяються навпіл"

є) "72 = 49 і (-7)2 = 49"

ж) "Якщо трикутник рівнобедрений, то він рівносторонній"

з) "21 ≤ 21"

и) "21 ≤ 18".

Кон'юнкція  
Диз'юнкція  
Ні кон'юнкція, ні диз'юнкція  

3. · Визначте істинність або хибність складених висловлень для наведених значень змінних:

1. «x > 0 і y > 0 або x < 0 і y < 0»

2. «x > 0 і не y < 0 або x < 0 та y > 0»

Значення змінних:

а) х = 5, у = 8

б) х = 5, у = -8

в) х = -5, у = 8

г) х = -5, у = -8.

4. (ДЗ) · Нехай А = "Іванов вивчає англійську мову", В = "Іванов має оцінку 8 з інформатики". Сформулюйте висловлення:

а) А /\'B б)'А \/ B в) A \/ 'A /\ B г) 'A \/ 'B /\ А

5. º Вкажіть порядок виконання операції у логічних виразах:

а) A \/ 'A /\ B

б) 'A \/ 'B /\ А

в) ( A \/'B ) /\ ('A \/ 'B )

г) 'A /\'B \/ C /\ D

6. · Побудуйте таблиці істинності логічних виразів:


а) A \/ A /\ B

б) A \/ 'A /\ B

в) A /\ B \/'B

г) (ДЗ) ( A \/'B ) /\ ('A \/ 'B )

д) (ДЗ) 'A \/ 'B

е) (ДЗ) A /\'B \/'A /\ B


7. Доведіть логічні формули:

a. A /\ A = A

b. =

c. A /\ (B \/ C) = (A /\ B) \/ (A /\ C)

d. (ДЗ) A \/ (B /\ C) = (A \/ B) /\ (A \/ C)

e. (ДЗ) A /\ (A \/ B) º A


2.8. Розгалуження в алгоритмах і програмах

Пригадайте!

1. Що таке алгоритм? Назвіть основні блоки блок-схеми алгоритму і поясніть їх призначення.

2. Які алгоритми (фрагменти алгоритмів) називаються лінійними? У чому полягає їх характерна особливість?

3. Які вирази називаються логічними? Які значення вони можуть набувати?

4. Назвіть логічні операції, наведіть означення кожної з них.

5. Назвіть логічні функції табличного процесора Excel 2007. Чому дорівнюють їхні значення залежно від значень аргументів.

Алгоритми з розгалуженням

У попередніх пунктах було розглянуто кілька лінійних алгоритмів, зокрема, алгоритми для розв'язування задач на обчислення значень арифметичного виразу для виконавця, який вміє виконувати арифметичні операції. Розглянемо приклад задачі, алгоритм розв'язування якої - не є лінійним.

Задача 1. Обчислити значення виразу (a - b) / (c - d), де a, b, c, d - дійсні числа.

Звернемо увагу на те, що значення цього виразу можна обчислити не для будь-якого набору значень змінних a, b, c, d. Адже цей вираз містить дію ділення на вираз зі змінними, значення якого може дорівнювати нулю. Тобто якщо значення різниці c - d дорівнює нулю, то значення виразу (a - b) / (c - d) обчислити не можна, а якщо не дорівнює - то можна.

Це означає, що система команд виконавця повинна містити команду порівняння двох чисел, наприклад таку: «s=t?», де s і t - або числа, або змінні чи вирази, які мають певні числові значення. Така команда є прикладом команди перевірки умови. Результатом виконання команди перевірки умови може бути або істина (умова виконується), або хиба (умова не виконується).

З іншого боку, ви вже знаєте, що порівняння «s=t?» можна розглядати як висловлення або як простий логічний вираз, який набуватиме значення true або false залежно від конкретних значень змінних s і t. І тоді команду перевірки умови можна інтерпретувати як команду обчислення значення логічного виразу.

Алгоритм розв'язування задачі 1 виглядатиме так:

1. Увести значення змінних a, b, c, d.

2. х := c - d.

3. Обчислити значення логічного виразу х = 0.

4. Якщо обчислене значення логічного виразуtrue, то повідомити «Вираз значення не має: ділення на нуль», після чого виконати команду 8, якщо false - то виконати команду 5.

5. у := a - b.

6. z := у/х.

7. Повідомити значення змінної z.

8. Закінчити виконання алгоритму.

Команди 1-3 наведеного алгоритму виконуватимуться про будь-якому наборі значень змінних a, b, c, d. Подальше виконання цього алгоритму залежатиме від значення логічного виразу, обчисленого в команді 3. Якщо це значення true, то виконуватимуться команди 5-8, а якщо false, то виконуватимуться команда виведення повідомлення «Вираз значення не має: ділення на нуль» і команда 8.

У блок-схемі алгоритму команди перевірки умови або обчислення значення логічного виразу позначаються блокомРішення . Оскільки результатом виконання цих команд може бути або trueабо false, то з цього блоку є два виходи. Вихід Такозначає, що результатом перевірки умови є true, а вихід Ні - що результатом перевірки умови є false.

Наведемо блок-схему наведеного вище алгоритму розв'язування задачі 1 (рис. 2.46).

Рис. 2.46. Блок-схема алгоритму обчислення значення виразу (a - b) / (c - d)

Розглянемо фрагмент алгоритму на рис. 2.46 від блоку Рішення до блоку Термінатор (не включаючи цей блок).

Характерною рисою цього фрагменту алгоритму є те, що при кожному його виконанні деякі команди будуть виконуватися, причому кожна по одному разу, а деякі - виконуватися не будуть. Це залежить від результату виконання команди перевірки умови (команди обчислення значення логічного виразу).

Такий фрагмент алгоритму називається розгалуженням.

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

Команда Результат виконання
Виконання для першого набору даних
Увести значення змінних a, b, c, d a = 5; b = 6; c = -3; d = 5
х := c - d х = -3 - 5 = -8
Обчислити значення логічного виразу х = 0 (-8 = 0) =false
у := a - b у = 5 - 6 = -1
z := у/х z = -1/(-8) = 0,125
Повідомити значення змінної z z = 0,125
Виконання для другого набору даних
Увести значення змінних a, b, c, d a = 12,3; b = -1; c = 8,2; d = 8,2
х := c - d х = 8,2 - 8,2 = 0
Обчислити значення логічного виразу х = 0 (0 = 0) = true
Повідомити: «Вираз значення не має: ділення на нуль» Повідомлення: «Вираз значення не має: ділення на нуль»

Звертаємо вашу увагу:

  • наведений алгоритм містить як розгалуження, так і лінійні фрагменти;
  • у розгалуженнях можна використовувати як прості логічні вирази, так і складені.

В алгоритмах використовують розгалуження двох видів: повне розгалуження (рис. 2.47) і неповне розгалуження (рис. 2.48)

Рис. 1.7. Повне розгалуження

До верстальника: на рис 2.47 і 2.48 у ромбах вставити такі тексти: Перевірка умови (обчислення значення логічного виразу)

Виконання повного розгалуження відбувається так: виконавець виконує команду перевірки умови (команду обчислення значення логічного виразу); якщо результат виконання цієї команди true, то виконавець виконує послідовність команд 1, після чого переходить до виконання першої команди наступного фрагмента алгоритму; якщо ж результат виконання цієї команди false, то виконавець виконує послідовність команд 2, після чого також переходить до виконання першої команди наступного фрагмента алгоритму.

Виконання неповного розгалуження відрізняється від виконання повного розгалуження тим, що при результаті виконання команди перевірки умови false, виконавець одразу переходить до виконання першої команди наступного фрагмента алгоритму.

Усередині розгалуження можуть знаходитися як лінійні фрагменти алгоритму, так і інші розгалуження. Наведемо приклад алгоритму із розгалуженням у розгалуженні.

Задача 2. Дано два числа. Визначити, чи рівні вони. Якщо ні, то яке з них більше.

Блок-схема алгоритму розв'язування цієї задачі виглядатиме так (рис. 2.49):

Наведемо приклад ще однієї задачі, алгоритм розв'язування якої містить розгалуження.

Задача 3. Є дев'ять однакових на вигляд монет, одна з яких фальшива і легша від інших. Двома зважуваннями на терезах без гир визначити фальшиву монету.

Складемо алгоритм для виконавця з такою системою команд:

1. Узяти вказану купку монет.

2. Розділити вказану купку монет на три рівні купки.

3. Покласти на терези вказані купки монет.

4. Перевірити умову «Терези в рівновазі?».

5. Визначити при зважуванні, яка з купок монет легша.

6. Повідомити результат.

Для виконавця із такою системою команд алгоритм розв'язування задачі 3 такий:

1. Узяти дану купку з 9 монет.

2. Розділити взяту купку монет на три рівні купки.

3. Покласти на терези першу і другу купки монет.

4. Перевірити умову «Терези в рівновазі?».

5. Якщо істина, то взяти третю купку монет, якщо хиба, то взяти легшу купку.

6. Розділити взяту купку монет на три рівні купки.

7. Покласти на терези першу і другу купки монет.

8. Перевірити умову «Терези в рівновазі?».

9. Якщо істина, то повідомити: "Фальшивою є монета, що залишилася не покладеною на терези", якщо хиба - повідомити: "Фальшивою є легша монета".

Блок-схема цього алгоритму виглядатиме так (рис. 2.50):



Рис. 2.50. Блок-схема алгоритму розв'язування задачі 3

Верстальнику: замінити після Початок блок-ромб на блок-прямокутник

Звертаємо вашу увагу: в алгоритмі розв'язування задачі 2 виконання або невиконання тих чи інших команд алгоритму залежить від того, в яку купку попаде фальшива монета. Наприклад, якщо при першому зважуванні терези будуть не в рівновазі, то команда «Узяти третю купку монет» не буде виконана. Але якщо монети розподілити на купки по-іншому, то може статися так, що при першому зважуванні терези будуть у рівновазі, і тоді не буде виконана команда «Узяти легшу купку монет».

Розгалуження в Delphi

Команда повного розгалуження в Delphiмає такий загальний вигляд:

If <логічний вираз>



  1   2   3   4   5   6   7   8   9   10   11   12   13   14   Наступна

Мова програмування Delphi та середовище розробки Turbo Delphi 2006 1 страница | Мова програмування Delphi та середовище розробки Turbo Delphi 2006 2 страница | Мова програмування Delphi та середовище розробки Turbo Delphi 2006 3 страница | Else begin | If RadioButton1.Checked | If RadioButton1.Checked | If CheckBox.Checked | Then begin | Then begin | Then begin |

загрузка...
© um.co.ua - учбові матеріали та реферати