Page 1 of 5

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

Posted: Thu Oct 02, 2014 11:58 am
by Mr. Kibernetik
Урок 4 - Логика

Часто бывает нужно выполнить действия только при соблюдении каких-то условий. Для этого существует команда IF THEN ELSE.

Code: Select all

INPUT N
PRINT "Число";N;
IF EVEN (N) = 1 THEN PRINT "четное" ELSE PRINT "нечетное"
Команду IF THEN ELSE также можно записывать в несколько строк:

Code: Select all

INPUT A,B
IF A < B THEN
  PRINT A;"меньше";B
ELSE
  IF A = B THEN
    PRINT A;"равно";B
  ELSE
    PRINT A;"больше";B
  END IF
END IF
Это очень громоздкий пример, но он показывает, что условия могут быть любой степени вложенности.

Работает команда IF THEN ELSE следующим образом: после IF стоит условие. Если условие выполняется, то выполняется та часть программы, которая стоит после THEN. Если условие не выполняется, то выполняется часть программы, стоящая после ELSE. При этом части ELSE может не быть, то есть можно записать так:

Code: Select all

INPUT A,B
IF A < B THEN PRINT A;"меньше";B
IF A > B THEN PRINT A;"больше";B
IF A = B THEN PRINT A;"равно";B
Вместо условия можно использовать число. Если число равно нулю, то считается, что условие не выполнено. Если число отлично от нуля, то условие считается выполненным. То есть первый пример можно было бы записать и так:

Code: Select all

INPUT N
PRINT "Число";N;
IF EVEN (N) THEN PRINT "четное" ELSE PRINT "нечетное"
Условия могут также использовать логические операции AND ("И"), OR ("ИЛИ") и NOT ("НЕ"). Логическая операция NOT инвертирует результат при использовании числа.

Code: Select all

INPUT X,Y
IF X > 0 OR Y > 0 THEN PRINT "Хотя бы одно из чисел больше нуля"
IF X > 0 AND Y > 0 THEN PRINT "Оба числа больше нуля"
ЗАДАЧА 5
Напишите программу, которая будет заполнять экран случайными кругами, если экран расположен горизонтально, и случайными линиями, если экран расположен вертикально.

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

Posted: Thu Oct 02, 2014 2:32 pm
by niks26

Code: Select all

graphics
randomize
GET ORIENTATION P

IF P = 1 or 3 then

maxx = screen_width()
maxy = screen_height()

metka1:
x1 = rnd(maxx)
x2 = rnd(maxx)
y1 = rnd(maxy)
y2 = rnd(maxy)
draw size rnd(3)
draw line x1, y1 to x2, y2
goto metka1
end if

IF P = 2 or 4 then

mx = screen_width()
my = screen_height()

metka2:
draw circle rnd(mx),rnd(my) to rnd(mx),rnd(my)
goto metka2
end if
Не выходит с ориентацией, где лажаю?

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

Posted: Thu Oct 02, 2014 2:35 pm
by Mr. Kibernetik
Правильно писать

Code: Select all

IF P = 1 OR P = 3 THEN

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

Posted: Thu Oct 02, 2014 5:26 pm
by niks26

Code: Select all

graphics
randomize
GET ORIENTATION P

IF P = 1 or P = 3 then

maxx = screen_width()
maxy = screen_height()

metka1:
x1 = rnd(maxx)
x2 = rnd(maxx)
y1 = rnd(maxy)
y2 = rnd(maxy)
draw size rnd(3)
draw line x1, y1 to x2, y2
goto metka1
end if

IF P = 2 or P = 4 then

mx = screen_width()
my = screen_height()

metka2:
x = rnd (mx)
y = rnd (my)
draw circle x,y size rnd(20)
goto metka2
end if
Фуф, спасибо за исправление ошибки )

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

Posted: Thu Oct 02, 2014 5:53 pm
by Mr. Kibernetik
Я бы предложил так модернизировать программу, чтобы:
1) круги и линии были случайного цвета
2) при повороте устройства во время работы программы соответственно переключался бы и вид заполнения

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

Posted: Thu Oct 02, 2014 9:16 pm
by niks26
Mr. Kibernetik wrote:Я бы предложил так модернизировать программу, чтобы:
1) круги и линии были случайного цвета
2) при повороте устройства во время работы программы соответственно переключался бы и вид заполнения

Code: Select all

graphics
randomize
GET ORIENTATION P

IF P = 1 or P = 3 then

metka1:
mxx = screen_width()
mxy = screen_height()

metka2:
x1 = rnd(mxx)
x2 = rnd(mxx)
y1 = rnd(mxy)
y2 = rnd(mxy)
draw size rnd(10)
draw color rnd(1), rnd(1), rnd(1)
draw line x1, y1 to x2, y2
if mxy <> screen_height() then goto metka1
goto metka2
end if

IF P = 2 or P = 4 then

metka3:
mx = screen_width()
my = screen_height()

metka4:
x = rnd (mx)
y = rnd (my)
draw color rnd(1), rnd(1), rnd(1)
draw circle x,y size rnd(100)
if mx <> screen_height() then goto metka3
goto metka4
end if
Пока всё. Для изменений в процессе - мозгов не хватило, подскажите хотя бы направление... Или, что имелось ввиду под "вид заполнения"?

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

Posted: Fri Oct 03, 2014 2:11 am
by Mr. Kibernetik
niks26 wrote:Или, что имелось ввиду под "вид заполнения"?
То есть чтобы держишь устройство вертикально - заполняется линиями, поворачиваешь горизонтально - продолжает заполняться, но уже кругами, поворачиваешь вертикально - опять заполняется линиями.

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

Posted: Fri Oct 03, 2014 5:13 am
by niks26
Mr. Kibernetik wrote:
niks26 wrote:Или, что имелось ввиду под "вид заполнения"?
То есть чтобы держишь устройство вертикально - заполняется линиями, поворачиваешь горизонтально - продолжает заполняться, но уже кругами, поворачиваешь вертикально - опять заполняется линиями.
Вот с этим что-то прям беда...

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

Posted: Fri Oct 03, 2014 4:48 pm
by Dedjto
Ура!!! Получилось.
Код:
graphics
graphics clear
randomize
GET ORIENTATION P
LABEL1:
IF P = 1 or P = 3 then
graphics clear
maxx = screen_width()
maxy = screen_height()

LABEL2:
x1 = rnd(maxx)
y1 = rnd(maxy)
x2 = rnd(maxx)
y2 = rnd(maxy)
draw color rnd(1), rnd(1), rnd(1)
draw size rnd(7)
draw line x1, y1 to x2, y2
rem check if screen was rotated
if maxy > screen_height() then

LABEL3:
graphics clear
maxx = screen_width()
maxy = screen_height()

LABEL4:
x = rnd (maxx)
y = rnd (maxy)
draw color rnd(1), rnd(1), rnd(1)
draw circle x,y size rnd(30)
rem check if screen was rotated
if maxy < screen_height() then GOTO LABEL1
GOTO LABEL4
ELSE
GOTO LABEL2
ELSE
GOTO LABEL3
end if
end if

Только не знаю, как все это сделать на черном экране...

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

Posted: Fri Oct 03, 2014 5:21 pm
by Mr. Kibernetik
Dedjto wrote:Только не знаю, как все это сделать на черном экране...
Команда GRAPHICS CLEAR r,g,b очищает экран заданным цветом.

Code: Select all

GRAPHICS CLEAR 0,0,0
очищает экран черным цветом.

Попробуйте получше протестить свою программу - у меня круги пропадают после второго переворачивания.