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

User avatar
Mr. Kibernetik
Site Admin
Posts: 4786
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

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

Post 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
Напишите программу, которая будет заполнять экран случайными кругами, если экран расположен горизонтально, и случайными линиями, если экран расположен вертикально.

User avatar
niks26
Posts: 14
Joined: Sun Sep 28, 2014 11:16 pm
My devices: iPadmini2, 64gb, cell
iPhone 5s, 16 gb
MacBook Air 13' 2013
iMac 27' 2013
Location: Фаэтон
Contact:

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

Post 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
Не выходит с ориентацией, где лажаю?
Человек, измученный Нарзаном

User avatar
Mr. Kibernetik
Site Admin
Posts: 4786
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

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

Post by Mr. Kibernetik »

Правильно писать

Code: Select all

IF P = 1 OR P = 3 THEN

User avatar
niks26
Posts: 14
Joined: Sun Sep 28, 2014 11:16 pm
My devices: iPadmini2, 64gb, cell
iPhone 5s, 16 gb
MacBook Air 13' 2013
iMac 27' 2013
Location: Фаэтон
Contact:

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

Post 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
Фуф, спасибо за исправление ошибки )
Человек, измученный Нарзаном

User avatar
Mr. Kibernetik
Site Admin
Posts: 4786
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

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

Post by Mr. Kibernetik »

Я бы предложил так модернизировать программу, чтобы:
1) круги и линии были случайного цвета
2) при повороте устройства во время работы программы соответственно переключался бы и вид заполнения

User avatar
niks26
Posts: 14
Joined: Sun Sep 28, 2014 11:16 pm
My devices: iPadmini2, 64gb, cell
iPhone 5s, 16 gb
MacBook Air 13' 2013
iMac 27' 2013
Location: Фаэтон
Contact:

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

Post 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
Пока всё. Для изменений в процессе - мозгов не хватило, подскажите хотя бы направление... Или, что имелось ввиду под "вид заполнения"?
Человек, измученный Нарзаном

User avatar
Mr. Kibernetik
Site Admin
Posts: 4786
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

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

Post by Mr. Kibernetik »

niks26 wrote:Или, что имелось ввиду под "вид заполнения"?
То есть чтобы держишь устройство вертикально - заполняется линиями, поворачиваешь горизонтально - продолжает заполняться, но уже кругами, поворачиваешь вертикально - опять заполняется линиями.

User avatar
niks26
Posts: 14
Joined: Sun Sep 28, 2014 11:16 pm
My devices: iPadmini2, 64gb, cell
iPhone 5s, 16 gb
MacBook Air 13' 2013
iMac 27' 2013
Location: Фаэтон
Contact:

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

Post by niks26 »

Mr. Kibernetik wrote:
niks26 wrote:Или, что имелось ввиду под "вид заполнения"?
То есть чтобы держишь устройство вертикально - заполняется линиями, поворачиваешь горизонтально - продолжает заполняться, но уже кругами, поворачиваешь вертикально - опять заполняется линиями.
Вот с этим что-то прям беда...
Человек, измученный Нарзаном

Dedjto
Posts: 32
Joined: Wed Oct 01, 2014 5:04 am
My devices: IPad , iPhone, iPod, Mac mini
Location: Россия

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

Post 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

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

User avatar
Mr. Kibernetik
Site Admin
Posts: 4786
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

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

Post by Mr. Kibernetik »

Dedjto wrote:Только не знаю, как все это сделать на черном экране...
Команда GRAPHICS CLEAR r,g,b очищает экран заданным цветом.

Code: Select all

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

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

Post Reply