Урок 4. Просто логическо условие. Условен оператор.
В урок 2 създадохме една програма, която пресмята сбора, разликата, произведението и частното на две числа, въведени от потребителя. Замислихме ли се обаче, какво ще стане ако потребителя въведе стойност на делителя 0. От математиката знаем, че тази операция с делител=0 е неопределена. Затова нека помислим как да предпазим потребителя в тази ситуация и ако той въведе такава стойност, да получи съобщение за грешка.
За целта ще използваме простото логическо условие If. След като потребителя въведе второто число, следва проверка за въведената стойност и ако тя е 0, потребителя получава съобщение, че операцията деление е невъзможна.
Кода на програмата би изглеждал така:
Нека сега тестваме програмата. Ето резултатът, в който потребителя е присвоил нула на втората променлива:
Когато е необходимо да бъде изпълнено едно от две възможни действия се използва така наречения условен оператор. Условието се записва с логически израз , който може да приема една от две възможни стойности – истина или лъжа. Простите логически изрази представляват отношения, свързващи два израза със знаците за сравнение <, <=, >,>=, =, <>,><. В Small Basic условния оператор се изразява в кратка и пълна форма.
В нашия пример е използвана пълната форма
IF условие THEN
Действия при истина на условието
ELSE
Действия при лъжа на условието
ENDIF
В примера по-горе ако потребителя присвои стойност 0 на втората променлива, той получава съобщение, че операцията е невъзможна. Ако тя е различна от 0 се извършва действие деление и се извежда стойността на полученото частно.
Направи ли ви впечатление, че в програмния код по-горе за прочитане на въведената стойност от клавиатурата и запомнянето и в съответното име е използвана операцията Read().
От урок 2 вече ни е известно, че тази операция е за текстови променливи.
Защо програмата работи? Опитайте се да въведете текст за второто число ?
Какво получихте? Вероятно отново, че делението е невъзможно.
Това е така, защото текстовите променливи имат стойност 0.
Променете в програмния код редове 2 и 4 като заявите че операцията Read() ще бъде с числа.
TextWindow.Write( "Въведете първото число ")
chislo1=TextWindow.ReadNumber()
TextWindow.Write( "Въведете второто число ")
chislo2=TextWindow.ReadNumber ()
IF chislo2=0 Then
TextWindow. WriteLine("операцията е невъзможна)
else
chastno = chislo1/chislo2
TextWindow.WriteLine("Частното им е ="+ chastno)
Endif
Опитайте се да въведете буква от клавиатурата. Оказа ли се, че не става? Да.
Използването на ReadNumber() вместо Read () не допуска потребителя да въведе друг символ освен цифра. Потребителят трябва да цифрите на числото, за да продължи нататък.
Нека да направим програма която изпълнява популярния алгоритъм за размяна стойностите на две променливи.
Задача
Напишете програма, която въвежда две числа. Ако първото число е по-голямо от второто размени стойностите им. Изведи стойностите на числата.
Резултатът от изпълнението ще бъде следния:
Виждаме, че размяната е станала. Можете да изпълните програмата като въведете първо по-малко число и след това по-голямо. Тогава размяна няма да има.
В случая имаме кратка форма на условния оператор, защото размяната става само ако условието е изпълнено.
Да обърнем внимание и на извеждането на числата. За да не се изведат залепени едно до друго, между имената на променливите е добавена константа / празен интервал/ в стойностите, който трябва да се изведат в текстовия ред на обекта TextWindows.
Нека решим и друга задача. В езика за програмиране има вграден обект – системен часовник. Нека напишем програма, която проверява този часовник и в зависимост от часа, който отчита, извежда различен поздрав.
If (Clock.Hour< 10) Then
TextWindow.WriteLine( "Добро утро")
EndIf
if (Clock.Hour>= 10) Then
TextWindow.WriteLine( "Добър ден")
EndIf
Когато системният часовник показва час пред 10 часа – поздрава ще бъде Добро Утро. В нашия пример часовника показва 17:57 и резултатът е следния:
Първата задача в урока също може да се реши с кратката форма на условния оператор.
Условието обаче е друго. Ако потребителя присвоява 0 на делителя, програмата не извършва делението. Разликата е само в това, че когато потребителя въвежда 0 или текстов символ, той не получава нито резултат нито съобщение.
Задачи за самостоятелна работа:
1. Помислете как може горната програма да се модифицира така, че потребителя да въвежда точното време и в зависимост от него да извежда подходящо съобщение.
2. Цената на билет за автобус по линията Сандански – София е 14 лева. Деца под 12 години пътуват с 50% намаление, а възрастни над 60 години - с 20% намаление. Съставете програма, която да пресмята цената на билета според възрастта на пътника.
3. Напишете програма, с която се намират лице на кръг и дължина на окръжност с радиус R. Пресмятането да се извърши само в случай, че въведената стойност за R е по-голяма от 0.
След този урок вие трябва да можете: