русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Умовний оператор


Дата додавання: 2014-11-27; переглядів: 1022.


 

Мета роботи: Вивчити конструкції розгалуження у мові програмування C#. Розглянути можливості захисту програм при виникненні виняткових ситуацій. Отримати практичні навики використання компонентів CheckBox і RadioButton.

 

За допомогою умовного оператора if програма може перевірити виконання певної умови, а на основі результатів перевірки прийняти рішення про виконання відповідного фрагменту коду.

Одним із найпростіших варіантів застосування є така форма:

if(умова)

{

//Інструкція_1;

}

else

{

//Інструкція_2;

}

Тут під елементом інструкція розуміється одна інструкція мови С#. Частина else необов'язкова:

if(умова)

{

//Інструкція;

}

Якщо елемент «умова», який являє собою логічний вираз, при обчисленні повертає значення true, то буде виконуватись if-інструкція, в іншому випадку – else-інструкція (якщо така існує). Обидві інструкції одночасно ніколи не виконуються. Логічний вираз, що керує виконанням if-інструкції, повинен мати тип bool. Оператори відношень та логічні операториОператори відношень оцінюють за «двобальною шкалою» (True/False) відношення між двома значеннями, а логічні визначають різні способи поєднання правильних і помилкових значень. Оскільки оператори відношень генерують True/False,то вони часто використовуються з логічними операторами. Таблиця 3.1. Оператори відношень
Оператор Значення
== Дорівнює
!= Не дорівнює
> Більше
< Менше
>= Більше або дорівнює
<= Менше або дорівнює
Таблиця 3.2. Список логічних операторів
& І
| АБО
^ Виключаюче АБО
&& Скорочене І
|| Скорочене АБО
! НЕ
Результат виконання операторів відношень і логічних операторів повертає значення типу bool. У C# на рівність і нерівність можна перевіряти (відповідно за допомогою операторів == та !=) усі об’єкти. Проте такі оператори як <, >, <= або >=, можна застосовувати лише до тих типів, які підтримують відношення впорядкування. Це означає, що всі оператори відношень можна застосовувати тільки до числових типів. Однак значення типу bool можна порівнювати тільки на рівність та нерівність. Нижче наведена таблиця істинності:Таблиця 3.3. Таблиця істинності логічних функцій
A B A&B A|B A^B !A
false false false false false true
true false false true true false
false true false true true true
true true true true false false
Зауважимо, що виключаюче АБО згенерує результат true лише в тому випадку, коли тільки один з її операндів буде мати значення true.Іноді виникає необхідність порівнювати одну змінну з різними значеннями. Наприклад, є певна змінна type, яка позначає розмір підприємства, і може набувати декількох значень: 1 – малі, 2- середні, 3 – великі. Для визначення типу підприємства можна використати набір операторів if:

if (type == 1)

{

\\ дії, що виконуються для малих

\\за розміром підприємств

}

else

{

if ( type == 2)

{

\\ дії, що виконуються для середніх

\\за розміром підприємств

}

else

{

\\ дії, що виконуються для великих

\\за розміром підприємств

}

}

Але дана конструкція не завжди зручна, тому в C# існує спеціальна конструкція для вибору із множини взаємовиключних умов – switch. Цей оператор дозволяє робити вибір одної альтернативи із множини альтернатив. Розглянемо роботу даного оператора. Значення виразу послідовно порівнюється з константами із заданого списку. При виявленні збігу для однієї з умов порівняння, виконується послідовність дій, що пов’язані з даною умовою. Загальний формат інструкції switch такий:

 


switch (вираз)

{

case константа1:

\\послідовність інструкцій;

break;

case константа2:

\\послідовність інструкцій;

break;

default:

\\послідовність інструкцій;

break;

}

 

Елемент вираз інструкції switch повинен мати цілочисельний тип або тип string. Вирази з плаваючою крапкою не дозволені. Досить часто в якості керуючого switch-виразу може використовуватись змінна. Зауважимо, що будь-які case-константи в одній switch-інструкції не можуть мати однакових значень. Кожна case-гілка повинна закінчуватись явним оператором переходу, а саме оператором break, goto або return. Послідовність інструкцій default-гілки, виконується в тому випадку, якщо жодна з указаних case-констант не збігається з результатом обчислення switch-виразу. Дана гілка необов’язкова. Наприклад, задачу з попереднього прикладу можна реалізувати так:

 

switch(type)

{

case 1:

\\ дії, що виконуються для малих

\\за розміром підприємств

break;

case 2:

\\ дії, що виконуються для середніх

\\за розміром підприємств

break;

case 3:

\\ дії, що виконуються для великих

\\за розміром підприємств

break;

}

 


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

Конструкція try-catch.

Конструкція try-catch складається з оператора, за яким установлено один або кілька операторів catch. Блоки операторів catch містять код, виконання якого може призвести до виникнення помилки або винятку. Існує тільки два варіанти результату виконання операторів блоку try: або код буде успішно виконаний, або буде викликаний виняток. При викликанні винятку блок try передає управління блоку catch, що спеціально призначений для обробки даного конкретного винятку.

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

Наприклад:

catch

{

// код, необхідний для обробки винятку

}

 

сatch (OverflowException o)

{

// код, необхідний для обробки

//винятку типу OverflowException

}

 

Наприклад, необхідно з поля для вводу textBox1 зчитати числове значення і зберегти його у змінній s типу int. Проте, користувач, при введені значення може випадково ввести інші символи крім цифр. У такому разі користувачу буде видано повідомлення.

 

try

{

int s = Convert.ToInt32(textBox1.Text);

}

catch

{

MessageBox.Show("Введені некоректні дані!");

}

 

Найбільш розповсюджені винятки причини їх виклику:

System.OutOfMeoryException

Виняток викликається при неможливості виділення пам’яті при використанні ключового слова new

System.StackOverflowException

Виняток викликається при переповненні стеку, стек містить занадто велику кількість взаємопов’язаних викликів методів

System.NullReferenceException

Виняток викликається тоді, коли посиланню не було присвоєне значення

System.ArgumentNullException

Виняток викликається при передачі аргументу null методам, якщо це значення недопустиме для методу

System.ArgumentOutOfRangeException

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

System.NotFiniteNumberException

Виняток викликається, коли для числа з плаваючою точкою встановлюється значення

System.TypeInitializationException

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

System.ArrayTypeMismatchException

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

System.IndexOutOfRangeException

Виняток викликається при спробі звернення до елемента масиву по індексу, значення якого менше нуля або виходить за межі верхньої межі масиву

System.InvalidCastException

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

System.MulticastNotSupportedException

Виняток викликається при спробі об’єднання двох делегатів, для котрих встановлений тип значення, що повертається, відмінний від void

System.AccessException

Виняток викликається при неможливості доступу до елемента типу

System.ArithmaticException

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

System.DivideByZeroException

Виняток викликається при спробі здійснити ділення цілочисельної величини на нуль

System.OverflowException

Виняток викликається, якщо в результаті виконання арифметичних операцій у блоці оператора checked виникає переповнення

System.NotSupportedException

Виняток викликається при спробі отримати доступ до метода, який не реалізований в даному класі

System.MissingMemberException

Виняток викликається при спробі динамічного доступу до неіснуючої бібліотеки DLL

System.FormatException

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

System.BadImageFormatException

Виняток викликається при неправильному форматі файлу виконуваної програми або бібліотеки DLL

 

Компонент

CheckBox розміщується на формі так само, як і інші компоненти: подвійним кліком на його значку на панелі Toolbox.

 

Таблиця 3.4. Властивості класу CheckBox

Властивість Призначення
Appearance Налаштовує вид прапорця. Для цієї властивості використовуються значення з перерахування Appearance
AutoCheck Дозволяє отримати або встановити значення, що визначає, чи будуть значення Checked і CheckState, а також зовнішній вигляд прапорця, автоматично змінюватися при кліканні на ньому
CheckAlign Дозволяє встановити горизонтальне і вертикальне вирівнювання власного прапорця (квадратика) в елементі управління CheckBox. Використовуються значення з перерахування ContentAlignment
Checked Повертає значення типу bool, що представляє поточний стан прапорця (вибраний або невибраний). Якщо для властивості ThreeState встановлено значення true, то властивість Checked повертатиме true як для явно вибраного прапорця, так і для того прапорця, для якого встановлено значення “Не визначено” (indeterminate)
CheckState Дозволяє отримати або встановити значення прапорця (встановлений – не встановлений – не визначено), використовуючи не true і false, як в Checked, а три значення з перерахування CheckState. Зазвичай використовується, якщо властивість ThreeState для прапорця має значення true
ThreeState Визначає, чи для прапорця використовуватимуться три значення (з перерахування CheckState), чи тільки два

Компонент

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

Таблиця 3.5. Властивості класу RadioButton

Властивість Призначення
Checked Отримує або ставить значення, що показує, чи обраний цей елемент керування
Text Отримує або ставить текст, співставлений з цим елементом управління
TabIndex Повертає або задає послідовність переходу елемента керування всередині контейнера
Focused Отримує значення, що показує, чи є в елементі управління фокус введення
isDefault Отримує або ставить значення, що показує, чи є цей елемент управління кнопкою за замовчуванням

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

Відомо, що підприємство займається оптовою торгівлею. Ціна виробника товару становить Х грн. Якщо доставка товару здійснюється постачальником, то вартість доставки входить у ціну товару, інакше - додатково оплачується в розмірі 500 грн за партію товару. Також відомо, що підприємство, веде закупівлю 3 груп товарів: харчові, лікеро-горілчані вироби, мінеральні води. Відповідно для кожної з груп товарів існує власна націнка – 5%, 24%, 10 %. Розрахувати кінцеву вартість товару за 1 од., якщо підприємство закупило K одиниць продукції однією партією.

Як бачимо, в даній задачі є дві умови, які впливають на формування кінцевої ціни:

1) Хто здійснює доставку товару?

2) До якої групи належить товар?

Отже, компоненти CheckBox і RadioButton мають схожі функції, але їх доцільно використовувати в різних випадках.

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

Компонент RadioButton використовувати тоді, коли умова може набувати одне значення із списку запропонованих. У даному випадку це умова про вибір групи товару із 3 можливих. Але є одна особливість використання RadioButton, таких критеріїв, де нам потрібно обрати одне значення з набору, може бути декілька. Тому для згрупування RadioButton доцільно використовувати компонент GroupBox. Щоб це зробити, необхідно на формі розмістити GroupBox, установити його розміри і прямо на нього перенести необхідну кількість RadioButton (рис. 3.1).

Рис. 3.1. Розміщення елементів RadioButton на формі

 

Розглянемо тепер, як можна реалізувати дану задачу, використовуючи компоненти CheckBox, RadioButton, TextBox, Label, Button. Форму можна зобразити так (рис. 3.2):

Рис. 3.2. Зовнішній вигляд форми

 

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

 

Кін.Ціна = Поч.Ціна + Поч.Ціна * К(1) + К(2)

 

Оскільки, залежносто від вибору користувача, змінюється значення відсоткової ставки, на яку буде зростати ціна, то можна ввести змінну (коефіцієнт), який буде набувати одне з 3 значень - К(1). Так само можна ввести змінну і для умови, пов’язаної з вибором постачальника – К(2), яка буде набувати 2 значень – нуль, або дорівнювати вартості доставки партії (500 грн), поділеної на кількість товару.


Завдання для самостійної роботи.

Розробити форму, яка б виконувала функції згідно з указаним варіантом.

1. Норма витрат палива автомобіля на 100 км становить Х. Якщо температура навколишнього середовища становить від 0 до -5 Сº, то норма витрат пального підвищується на 5%, від -10 до -20 Сº - на 10%, від -20 до -30 Сº - на 15%. Відомо, що якщо автомобіль експлуатувався за межами міської зони, то норма зменшується на 13 %. Також при використанні кондиціонера норма витрат пального збільшується на 7 %. Розрахувати витрати пального автомобіля, якщо відомо, що його пробіг становить Z.

2. 1 година перебування в аквапарку з 07.00 по 10.00 коштує 30 грн, з 10.00 по 16.00 коштує 20 грн і з 16.00 по 22.00 – 40 грн. Відомо, що власникам silver-карток надається знижка у розмірі 15%, gold-карток – 20%, і vip-карток – 40 %. Також відвідувачі аквапарку можуть користуватися послугами сауни - оплата здійснюється одноразово у розмірі 50 грн. За втрату браслета, що надається при вході, – штраф 500 грн. Розрахувати вартість відвідування аквапарку на Х годин.

3. Вартість посилки обраховується за наступною формулою В = Тариф 1 + Тариф 2 + Тариф 3. Тариф 1 – вартість перевезення вантажу за 1 кг в залежності від відстані. До 300 км – 0,86 грн, від 300 до 600 км – 1,20 грн, більше – 2 грн. Тариф 2 – вартість забору посилки за 1 кг. Ящко клієнт знаходиться у межах 10 км – 15 грн, 20 км – 20 грн, 50 км – 60 грн. Тариф 3 – вартість доставки 1 кг до клієнта. Якщо доставка здійснюється «до дверей» - 25 грн за 1 кг, «до складу» – 4 грн за 1 кг. Розрахувати вартість доставки посилки вагою Х.

4. Існує 2 тарифи для підключення до мережі Інтернет: «необмежений» і «погодинний». Вартість 1 години в тарифі «погодинний» становить: удень (08:00 до 21:00) – 1 грн, вночі (21:00 до 08:00) – 0,45 грн. Вартість тарифу «необмежений» 40 грн у місяць. Існують також додаткові послуги: статична IP-адреса (20 грн). Поштова скринька (10 грн). Обчислити вартість доступу до мережі Інтернет за місяць, за Х годин.

5. Розрахувати розмір прибутку від Х грн., покладених на депозит, на T років. При договорі до 1 року - відсоткова ставка становить 8 %, до 5 років – 13 %, більше 8 років – 16 %. Якщо протягом періоду договору % нарахування не будуть зніматись з рахунку, то до остаточної суми нараховується бонус розміром 2 % від початкової суми. Якщо термін до 1 року використовується проста відсоткова ставка, інакше – складна.

6. Підприємство «Rent Car» надає послуги з оренди авто. Пропонується 2 види авто: класу B та класу D. Розцінки для авто B классу: від 1-3 днів – 65 у.о., 4-14 днів – 55 у.о., 15-29 – 35 у.о., більше 30 – 30 у.о. за 1 день. Розцінки для авто D классу: від 1-3 днів – 129 у.о., 4-14 днів – 115 у.о., 15-29 – 89 у.о., більше 30 – 79 у.о. за 1 день. Також пропонується послуги водія + 20 % вартості одного дня. Обчислити вартість оренди авто за X днів.

7. Авіакомпанія пропонує послуги авіаперевезення. Надаються 3 класи – економ вартістю 135 у.о., бізнес – 150 у.о., перший – 200 у.о. Також пасажир має право перевозити вантаж, якщо його вага більше за 10 кг, то це оплачується додатково у розмірі 4 у.о. за 1 кг.

8. Існує 2 інвестиційних проекти, проект А і проект Б. Якщо обрати проект А, то його норма прибутковості буде становити 5 % з кожної вкладеної 1 грн, і для проекту Б – 7 %. Також існує можливість виникнення інфляції, тоді від усього прибутку знімається місячна ставка інфляції.

9. Провайдер мережі Інтернет надає такі можливості під’єднання: через локальну мережу, через Wi-Fi, через ADSL-модем. Відповідно вартість під’єднання для кожного з видів – 150 грн, - 100 грн, - 80 грн. І є декілька тарифних планів: Комфорт 20 – 20 грн/міс, Комфорт 40 – 40 грн/міс, Комфорт 60 – 60 грн/міс. Розрахувати вартість користування мережею Інтернет за N місяців.

10. Компанія продає Програмне забезпечення. Існує три редакції програми: DAO, MSDE, SQL. Вартість відповідно однієї копії – 1500 грн, 2250 грн, 2760 грн. Якщо замовник придбає більше 5 копій програми – йому надається знижка в розмірі 25 %, якщо більше 10 копій – 30 %, більше 50 копій – 40 %. Розрахувати вартість покупки N копій програми відповідної редакції.



<== попередня лекція | наступна лекція ==>
Лінійні програми | Одновимірні масиви


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн