06 FreeBASIC условный оператор

в прошлом месяце

В прошлых примерах программы у нас исполнялись линейно, строка за строкой. Но так бывает не всегда. Очень часто программа выполняет или не выполняет определённые действия в зависимости от условий. И даже больше - в программах тысячи и даже миллионы таких условий.

Например в прошлом уроке в задачах было бы хорошо проанализировать вводимые человеком данные, соответствуют ли они условиям задачи, корректы ли они.

В программировании это называется "защита от дурака" т.е. программа не должна обрабатывать заведомо некорректные данные, даже если их человек вводит сознательно. А сколько радости доставит двоечнику или юному хакеру "взломать" программу введя в неё недопустимые данные - это нужно предусмотреть и исключить.

Чтобы выполнять или не выполнять действие в зависимости от условия есть условный оператор. Записывается он так:

if условие then действие1 else действие2,

если условие выполняется(справедливо, истинно), то выполняется действие1, в противном случае, если условие не выполняется(ложно) - выполняется действие2.

Условный оператор может иметь краткую форму

if условие then действие1

здесь если условие ложно, то прогамма ничего не делает, а исполняется дальше.

Действия могут вмещать в себя много команд, которые не поместятся в строке с условным оператором, тогда условный оператор записывается в несколько строк:

if условие then
    действие1
    действие2
    действие3
...
else
    действ1
    действ2
...
end if

Условный оператор может быть вложенным, это если в одном условном операторе есть ещё несколько условных операторов с другим условиями.
if условие then
    действие1
    действие2
    if условие2 then
            действие3
            действие4
            действие5
    end if
...
else
    действ1
    действ2
...
end if
Условие в условном операторе может быть сложным -составленным из нескольких условий объединённых логическими операциями AND, OR, NOT

Например в первой задаче прошлого урока радиус должен быть больше нуля.

#lang "qb"
R=17
l=2*3.1415*R
S=3.1415*R*R
print "R="; R; " S=";s;" l=";l

щаминим вторую строку на input "Введите значение радиуса";R
и если он больше нуля выполним вычисления и выведем результат на экран

#lang "qb"
input "Введите значение радиуса";R
if R>0 then
l=2*3.1415*R
S=3.1415*R*R
print "R="; R; " S=";s;" l=";l
else
print "Вы ввели неверное значение радиуса"
end if
sleep

Вот так этот пример у меня выглядит в среде FBIDE

Я выбрал тему borland, вы можете выбрать другую, оставить как есть, или настроить цвета как вам понравится.
в мею View-Settings и переходите на вкладку Themes

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

условие запишется так
if a<b+c AND b<a+c AND c<a+b then ... тогда треугольник существует и мы можем, вернее программа может выполнятся дальше.


Обратили внимание на отступы в строках 7-10, 12, 13
Это своего рода стандарт, стиль программирования. Конечно использовать его или нет дело хозяйское, но работая в команде следует всё таки придерживаться общего стиля в программировании. В данном случае я так выделил строки зависящие от выполнения условия. Так оформленную программу легче читать. Есть и другие правила(стиль, стандарт) например в назначении имён переменным, расстановке скобок, пробелов, комментариев...

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

input "введите трехзначное число"; a
a1=int(a/100)
a2=int(a-a1*100)/10
a3= a mod 10

Это предотвратить поможет такое условие

if a>99 AND a<1000 then ...

Задачи для самостоятельного решения

  • из двух чисел a и b определить большее(вывести на экран)
  • из трёх чисел a, b и c определить меньшее(вывести на экран)
  • даны два числа a и b определить что больше - их сумма или произведение. Думаете сумма всегда меньше? Или не всегда?

05 FreeBASIC - первые простые задачки
04 FreeBasic - графика
03 FreeBASIC. Текстовые переменные и операции с ними
02 FreeBASIC Переменные в Бейсике
01 Начинаем изучать FreeBasic
00 FreeBASIC лучший из диалектов бейсика

@sergiy

Авторы получают вознаграждение, когда пользователи голосуют за их посты.
Голосующие читатели также получают вознаграждение за свой голос.
Порядок сортировки:  Популярное

16/06/18 23:20

Сюда приплывал Моби Дик