Програмування інтервалів за допомогою оператора ElseIf
У цьому завданні ми маємо намір зіграти роль як би касира в супермаркеті, і якщо наш черговий покупець купив товарів на суму до 10 умовних грошових одиниць, то йому призначаємо знижку 10%, для суми від 10 до 20 одиниць належить знижка 20%. А при покупці на суму понад 20 одиниць покупцеві надається знижка 30%. Таким чином, в цьому завданні ми повинні програмувати наступні чотири інтервали:
Сума ≤ 0 → вихід;
0 <сума ≤ 10 → знижка = 10%;
10 <сума ≤ 20 → знижка = 20%;
сума> 20 → знижка = 30%.
Як оптимально вирішувати подібні завдання? Можна скористатися традиційною умовою If - Else, але при цьому програма буде виглядати дуже заплутано (такий заплутаний клубок умов називають "спагетті"). Ми витратимо багато зусиль на налагодження цього "спагетті", а коли буде потрібно модернізувати дану ділянку програми (наприклад, додати ще один інтервал), нам знову доведеться вирішувати черговий ребус. Хорошим виходом з цієї ситуації є використання оператора множинного вибору Select Case. Таке рішення цілком забезпечить наочність і зрозумілість програми. Зауважимо, що зрозумілість написаної програми має сьогодні набагато більший пріоритет, ніж швидкість її роботи.
Тим часом, не всі так однозначно, - застосування оператора Select Case вважається вельми банальним, є більш красиве рішення задачі програмування інтервалів. Приблизно з 2002 року, тобто з моменту появи Visual Basic .NET, ми можемо вирішувати цю задачу за допомогою операторів ElseIf, які вбудовують в конструкції If - Else. Оператор ElseIf забезпечує наочність, виразність і ефективність програмування!
Отже, запустимо Visual Studio, створимо новий проект, в пункті Visual Basic виберемо шаблон Console Application, задамо ім'я рішення: Інтервали. На вкладці програмного коду введемо програмний код, представлений в лістингу.
Module Module1
' Програмуємо інтервали
Sub Main()
' Задаємо заголовок консолі:
Console.Title = "Програмування iнтервалiв"
Console.BackgroundColor = ConsoleColor.Cyan ' — колір фону
Console.ForegroundColor = ConsoleColor.Black ' — колір тексту
Console.Clear()
Console.WriteLine("Введiть суму за придбанi товари:")
Dim Сума, Знижка As Single
Do ' або - нескінченний цикл
' Отримуємо значення чергової суми від користувача:
Dim Рядок = Console.ReadLine()
' Перетворюємо рядок в чмсло:
Сума = Single.Parse(Рядок)
If (0 < Сума And Сума <= 10) Then
' Другий інтервал 0 < Сума <= 10
Знижка = 10 ' 10%
ElseIf (10 < Сума And Сума <= 20) Then
' Третій інтервал 10 < Сума <= 20
Знижка = 20 ' 20%
ElseIf (Сума > 20) Then
' Четвертий інтервал Сума > 20
Знижка = 30 ' 30%
Else
' Перший інтервал Сума <= 0
' Цін <= 0 не існує, тому виходимо з циклу:
Console.WriteLine(
"Сума = {0}, тому - вихiд з програми", Сума)
Console.ReadKey()
Exit Do
End If
Console.WriteLine(
"Сума = {0}, тому знижка = {1}%", Сума, Знижка)
Loop ' Кінець тіла безкінечного циклу
End Sub
End Module
І зовсім не для "красного слівця" ми тільки що сказали, що оператори ElseIf забезпечують ефективний програмний код. Справа в тому, що програмування множинного вибору забезпечує найбільшу швидкість виконання написаного програмного коду саме при використанні операторів ElseIf. На рис. 1 наведено приклад роботи обговорюваної програми.
Рис.1. Вибір інтервалу за допомогою ElseIf