Page 1 of 2

Программирование на smart BASIC. Урок 3

Posted: Thu Oct 02, 2014 3:11 am
by Mr. Kibernetik
Урок 3 - Функции пользователя

Одна из важных возможностей smart BASIC - это функции пользователя.
Они отличаются тем, что они могут работать и как команды, и как функции.

В программе:

Code: Select all

DEF F (X,Y) = SQR (X^2 + Y^2)
A = 3 ! B = 4
PRINT "Для катетов";A;"и";B;"гипотенуза равна";F (A,B)
функция пользователя F задается в виде выражения SQR (X^2 + Y^2), где X и Y - это передаваемые в функцию параметры. Таким образом вызывая функцию F с разными параметрами можно получать результат вычисления по этой формуле.

Функция пользователя может состоять из нескольких строк:

Code: Select all

DEF F (X,Y)
X2 = X^2
Y2 = Y^2
F = X2 + Y2
END DEF
А вот пример использования функции пользователя в качестве команды:

Code: Select all

'функция выводит текущее время
DEF MY_TIME
H = CURRENT_HOUR()
M = CURRENT_MINUTE()
S = CURRENT_SECOND()
TEXT CLEAR
PRINT H & ":" & M & ":" & S
END DEF
'бесконечный цикл
LOOP: 'метка
MY_TIME 'вызов функции
PAUSE 1
GOTO LOOP 'переход на метку
Как видите, в этой программе функция пользователя не имеет параметров и не возвращает никаких результатов, а просто совершает необходимые действия, поэтому скобки ни в описании функции, ни при ее вызове можно не ставить - все-равно они были бы пустыми.

ЗАДАЧА 4
Решите одну из предыдущих задач, используя функции пользователя.

Re: Программирование на smart BASIC. Урок 3

Posted: Thu Oct 02, 2014 6:14 am
by niks26
Подскажите, чем отличается label от loop?

Какой командой можно стирать предыдущий результат?

Re: Программирование на smart BASIC. Урок 3

Posted: Thu Oct 02, 2014 7:31 am
by Mr. Kibernetik
niks26 wrote:Подскажите, чем отличается label от loop?

Какой командой можно стирать предыдущий результат?
Имя метки может быть любым - как и имя переменной. Можете написать

Code: Select all

my_super_point: goto my_super_point
В текстовом окне нельзя стирать предыдущий результат, можно только печатать дальше и дальше.
Но можно очистить все текстовое окно командой TEXT CLEAR.

Re: Программирование на smart BASIC. Урок 3

Posted: Thu Oct 02, 2014 7:43 am
by Dedjto
Код:

DEF F (X,Y) = SQR (X^2 + Y^2)
input "Чему равен катет А" : a
input "Чему равен катет B" : b
A = a ! B = b
PRINT "Для катетов";A;"и";B;"гипотенуза равна";F (A,B)

Re: Программирование на smart BASIC. Урок 3

Posted: Thu Oct 02, 2014 8:02 am
by Mr. Kibernetik
Dedjto wrote:Код:

DEF F (X,Y) = SQR (X^2 + Y^2)
input "Чему равен катет А" : a
input "Чему равен катет B" : b
A = a ! B = b
PRINT "Для катетов";A;"и";B;"гипотенуза равна";F (A,B)
А зачем записано

Code: Select all

A = a ! B = b
?

Re: Программирование на smart BASIC. Урок 3

Posted: Thu Oct 02, 2014 8:08 am
by Dedjto
Да, спасибо, это лишнее.

Re: Программирование на smart BASIC. Урок 3

Posted: Thu Oct 02, 2014 8:32 am
by niks26

Code: Select all

def GIP
input "длина первого катета" : X
input "длина второго катета" : Y
print "длина гипотенузы " & sqr (X^2 + Y^2)
end def

loop:
GIP
pause 0.5
goto loop
У меня так

Re: Программирование на smart BASIC. Урок 3

Posted: Thu Oct 02, 2014 8:52 am
by Dedjto
Вариант с меткой:

DEF TR
input "Чему равен катет А" : x
input "Чему равен катет B" : y
C = SQR (X^2 + Y^2)
PRINT "Для катетов";x;"и";y;"гипотенуза равна " &C
pause 1
TEXT CLEAR
END DEF
LABEL:
TR
PAUSE 0.5
GOTO LABEL

Re: Программирование на smart BASIC. Урок 3

Posted: Mon Oct 06, 2014 7:26 pm
by DmitryiS
Скажите, а как можно округлить результат вычислений к ближайшему значению с заданным шагом изменения. Например, вот такая мини программа для определения нужного диаметра эндотрахеальной трубки в детской анестезиологии (упрощенно расчитывается по формуле (16+возраст в годах)/4 = номер трубки):

def F
input "Введите возраст ребенка в годах":X
if X<1 or X>18 then print "Некорректный возраст больного"
if X>=1 and X=<18 then print "Эндотрахеальная трубка ="&(16+X)/4
pause 2
text clear
end def
loop:F
pause 0.5
goto loop

Результат должен быть представлен с шагом изменения 0.5. Например: 6, 6.5, 7, 7.5, 8 и т.д. Какой командой можно задать округление полученного результата вычисления к ближайшему чуть меньшему значению? Например, чтобы вместо 7.25 выводился результат 7. Вместо 7.75 выводился результат 7.5 и т.д.
С командой INT не получилось. Она округляет до ближайшего большего целого числа.

P.S. Меня возможность программирования заинтересовала чисто с практической позиции. Некоторые программы невозможно найти в готовом виде, а на русском языке тем более. Лучше научиться создавать самому. ;)
Но с полным отсутствием опыта, медицинским образованием и далеким от математического мышлением, это сделать непросто. :oops:

Re: Программирование на smart BASIC. Урок 3

Posted: Tue Oct 07, 2014 2:38 am
by Mr. Kibernetik
DmitryiS wrote:С командой INT не получилось. Она округляет до ближайшего большего целого числа.
Если округление до ближайшего целого - это слишком грубо, и вам нужно получить в два раза более детальный результат, то есть не 5, 6, 7, а 5, 5.5, 6, 6.5, 7, то получите в два раза большую величину, округлите ее до ближайшего целого, а потом разделите на два - таким образом нужный вам шаг составит 0.5:

Code: Select all

tt=int((16+x)/2)/2