Программирование на smart BASIC. Урок 5
- Фант
- Posts: 1363
- Joined: Sat Nov 30, 2013 10:01 am
- My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
- Location: Россия,Санкт-Петербург
- Flag:
- Contact:
Re: Программирование на smart BASIC. Урок 5
У тебя значения переменных присваиваются только во второй строке кода а в остальном присвоений нету-все значения а(к) у тебя по умолчанию равны нулю
Re: Программирование на smart BASIC. Урок 5
ООО, точно спасибо , я понял , исправил , всегда рад вашим советам , большое спасибо !)Фант wrote:У тебя значения переменных присваиваются только во второй строке кода а в остальном присвоений нету-все значения а(к) у тебя по умолчанию равны нулю
Code: Select all
RANDOMIZE
dim a(21)
k=rnd(21)
a(k)=k
q1=a(k)
k=rnd(21)
a(k)=k
q2=a(k)
k=rnd(21)
a(k)=k
q3=a(k)
k=rnd(21)
a(k)=k
q4=a(k)
k=rnd(21)
a(k)=k
q5=a(k)
k=rnd(21)
a(k)=k
q6=a(k)
k=rnd(21)
a(k)=k
q7=a(k)
k=rnd(21)
a(k)=k
q8=a(k)
k=rnd(21)
a(k)=k
q9=a(k)
k=rnd(21)
a(k)=k
q10=a(k)
print "числа " &q1 & "," & q2 & "," & q3 & "," & q4 & "," & q5 & "," & q6 & "," & q7 & "," & q8 & "," & q9 & "," & q10
print " среднее орефметическое " & (q1+q2+q3+q4+q5+q6+q7+q8+q9+q10)/10
- Фант
- Posts: 1363
- Joined: Sat Nov 30, 2013 10:01 am
- My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
- Location: Россия,Санкт-Петербург
- Flag:
- Contact:
Re: Программирование на smart BASIC. Урок 5
ну и замечательно!
код можно написать проще
option base 1
dim a(20)
for i=1 to 20
a(i)=rnd(21)
next i
...
код можно написать проще
option base 1
dim a(20)
for i=1 to 20
a(i)=rnd(21)
next i
...
-
- Posts: 17
- Joined: Tue Jan 13, 2015 10:44 am
Re: Программирование на smart BASIC. Урок 5
Мой вариант лабиринта
К сожалению иногда прокладка основного прохода заходит в такой тупик из которого не может выбраться - повторно запустите программу
Можно настраивать размер лабиринта и количество циклов построения ответвлений, если ввести 0, то можно увидеть как строился основной проход
К сожалению иногда прокладка основного прохода заходит в такой тупик из которого не может выбраться - повторно запустите программу
Можно настраивать размер лабиринта и количество циклов построения ответвлений, если ввести 0, то можно увидеть как строился основной проход
Code: Select all
x1 = 30 'размер лабиринта
y1 = 30 'размер лабиринта
prohod = 500 'количество циклов поиска проходов (произведение с x1)
OPTION BASE 1
DIM k (x1+3,y1+3)
FOR x = 1 TO x1
FOR y = 1 TO y1
k (x,y) = 0
if x = 1 or x = x1 then k (x,y) = 2
if y = 1 or y = y1 then k (x,y) = 3
NEXT y
NEXT x
k(1,1)=4
k(2,1)=4
k(1,2)=4
k(x1,y1)=4
k(x1,y1-1)=4
k(x1-1,y1)=4
x = 2
y = 2
k(x,y)=1
z=0
predelY=0
LABEL:
z=z+1
if z>3*x1 then
z=0
predelY=predelY+1
FOR x=x1 TO 2 STEP -1
for y = y1 to 2 step -1
if k(x,y) = 1 then break
next y
if k(x,y) = 1 then break
NEXT x
end if
if predelY>2 then
predelY=0
FOR y=y1 TO 2 STEP -1
for x = x1 to 2 step -1
if k(x,y) = 1 then break
next x
if k(x,y) = 1 then break
NEXT y
end if
while k(x1-1,y1-1) <1
if k(x1-1,y1-2)=1 and k(x1-2,y-1)=1 then k(x1-1,y1-1)=1
x2=RND (4)
if x2 = 0 then
if k(x+2,y)=1 or k(x+2,y+1)=1 or k(x+2,y-1)=1 or k(x+1,y+1)=1 or k(x+1,y-1)=1 or k(x+1,y)=2 then goto LABEL
if k(x+3,y)=2 then
k(x+1,y)=1
k(x+2,y)=1
x2=2
y2=1
else
x2 = 1
y2=0
end if
else
if x2 = 1 then
if x-1<3 or k(x-2,y)=1 or k(x-2,y+1)=1 or k(x-2,y-1)=1 or k(x-1,y+1)=1 or k(x-1,y-1)=1 then goto LABEL
x2 = -1
y2= 0
end if
if x2 = 2 then
if k(x,y+2)=1 or k(x+1,y+2)=1 or k(x-1,y+2)=1 or k(x+1,y+1)=1 or k(x-1,y+1)=1 or k(x,y+1)=3 then goto LABEL
if k(x,y+3)=3 then
k(x,y+1)=1
k(x,y+2)=1
x2=1
y2=2
else
x2 = 0
y2=1
end if
end if
if x2 = 3 then
if y-1<3 or k(x,y-2)=1 or k(x+1,y-2)=1 or k(x-1,y-2)=1 or k(x+1,y-1)=1 or k(x-1,y-1)=1 then goto LABEL
x2 = 0
y2= -1
end if
end if
if x+x2 > x1 or y+y2 > y1 then goto LABEL
x = x +x2
y = y + y2
if k (x,y) = 1 then goto LABEL
k (x,y) = 1
if k(x1-1,y1-2)=1 and k(x1-2,y-1)=1 then k(x1-1,y1-1)=1
'if k(x1-1,y1-3)=1 and k(x1-2,y-1)=1 then k(x1-1,y1-1)=1
'if k(x1-1,y1-2)=1 and k(x1-3,y-1)=1 then k(x1-1,y1-1)=1
end while
z=123
zzz = 0
zz=0
LABEL3:
x = rnd (x1-2)+2
y = rnd (y1-2)+2
if k(x,y)=1 then
while zz < x1*prohod
x2=RND (4)
if x2 = 0 then
if k(x+2,y)=1 or k(x+2,y+1)=1 or k(x+2,y-1)=1 or k(x+1,y+1)=1 or k(x+1,y-1)=1 or k(x+1,y)=2 then goto LABEL3
x2 = 1
y2=0
else
if x2 = 1 then
if x-1<3 or k(x-2,y)=1 or k(x-2,y+1)=1 or k(x-2,y-1)=1 or k(x-1,y+1)=1 or k(x-1,y-1)=1 then goto LABEL3
x2 = -1
y2= 0
end if
if x2 = 2 then
if k(x,y+2)=1 or k(x+1,y+2)=1 or k(x-1,y+2)=1 or k(x+1,y+1)=1 or k(x-1,y+1)=1 or k(x,y+1)=3 then goto LABEL3
x2 = 0
y2=1
end if
if x2 = 3 then
if y-1<3 or k(x,y-2)=1 or k(x+1,y-2)=1 or k(x-1,y-2)=1 or k(x+1,y-1)=1 or k(x-1,y-1)=1 then goto LABEL3
x2 = 0
y2= -1
end if
end if
if x+x2 > x1 or y+y2 > y1 then goto LABEL3
x = x +x2
y = y + y2
if k (x,y) = 1 then goto LABEL3
k (x,y) = 1
zz = zz +1
end while
end if
z=321
zzz=zzz+1
if zzz<x1*500 then goto LABEL3
graphics
maxx = screen_width()
maxy = screen_height()
if maxx > maxy then r1 = maxy/x1 else r1 = maxx/x1
r=r1-3*r1/x1
FOR x = 1 TO x1
FOR y = 1 TO y1
h = r*x + r/2
l = r*y + r/2
if k (x,y) = 0 then FILL COLOR 0,0,0.8
if k(x,y) = 1 or k(x,y) =4 then FILL COLOR 0,0,0
if k(x,y) = 2 or k(x,y) = 3 then FILL COLOR 0,0,0.8
FILL RECT h,l SIZE r
draw color 0,0,0.6
DRAW RECT h,l SIZE R
NEXT y
NEXT x
- Mr. Kibernetik
- Site Admin
- Posts: 4786
- Joined: Mon Nov 19, 2012 10:16 pm
- My devices: iPhone, iPad, MacBook
- Location: Russia
- Flag:
Re: Программирование на smart BASIC. Урок 5
Довольно сложные получаются лабиринты...
Re: Программирование на smart BASIC. Урок 5
? А поконкретнее можно?)Mr. Kibernetik wrote:Довольно сложные получаются лабиринты...
-
- Posts: 17
- Joined: Tue Jan 13, 2015 10:44 am
Re: Программирование на smart BASIC. Урок 5
Усовершенствовал, теперь при заходе в тупик и невозможности проложить основной проход по алгоритму построение перезапускается само, можно проследить за строительством лабиринта.
Можно настраивать:
Размер лабиринта
Количество проходов для построения ответвлений
Задержку отображения построений проходов
Можно настраивать:
Размер лабиринта
Количество проходов для построения ответвлений
Задержку отображения построений проходов
Code: Select all
x1 = 30 'размер лабиринта
y1 = 30 'размер лабиринта
prohod = 500 'количество циклов поиска проходов (произведение с x1)
t = 0.02 'скорость построения
graphics
maxx = screen_width()
maxy = screen_height()
label4:
gruz = 0
OPTION BASE 1
DIM k (x1+3,y1+3)
FOR x = 1 TO x1
FOR y = 1 TO y1
k (x,y) = 0
if x = 1 or x = x1 then k (x,y) = 2
if y = 1 or y = y1 then k (x,y) = 3
NEXT y
NEXT x
k(1,1)=4
k(2,1)=4
k(1,2)=4
k(2,2)=4
k(x1,y1)=4
k(x1,y1-1)=4
k(x1-1,y1)=4
if maxx > maxy then r1 = maxy/x1 else r1 = maxx/x1
r=r1-3*r1/x1
FOR x = 1 TO x1
FOR y = 1 TO y1
h = r*x + r/2
l = r*y + r/2
if k (x,y) = 0 then FILL COLOR 0,0,0.8
if k(x,y) = 1 or k(x,y) =4 then FILL COLOR 0,0,0
if k(x,y) = 2 or k(x,y) = 3 then FILL COLOR 0,0,0.8
FILL RECT h,l SIZE r
draw color 0,0,0.6
DRAW RECT h,l SIZE R
NEXT y
NEXT x
FILL COLOR 0,0,0
x = 2
y = 2
k(x,y)=1
z=0
predelY=0
LABEL:
z=z+1
if z>30*x1 then
z=0
predelY=predelY+1
FOR x=x1 TO 2 STEP -1
for y = y1 to 2 step -1
if k(x,y) = 1 then break
next y
if k(x,y) = 1 then break
NEXT x
end if
if predelY>2 then
predelY=0
gruz = gruz +1
FOR y=y1 TO 2 STEP -1
for x = x1 to 2 step -1
if k(x,y) = 1 then break
next x
if k(x,y) = 1 then break
NEXT y
end if
if gruz > x1 then goto label4
while k(x1-1,y1-1) <1
if k(x1-1,y1-2)=1 and k(x1-2,y-1)=1 then k(x1-1,y1-1)=1
x2=RND (4)
if x2 = 0 then
if k(x+2,y)=1 or k(x+2,y+1)=1 or k(x+2,y-1)=1 or k(x+1,y+1)=1 or k(x+1,y-1)=1 or k(x+1,y)=2 then goto LABEL
if k(x+3,y)=2 then
k(x+1,y)=1
h = r*(x+1)
l = r*y
if k(x+1,y) = 1 then FILL RECT h,l SIZE r/2
pause t
k(x+2,y)=1
h = r*(x+2)
l = r*y
if k(x+2,y) = 1 then FILL RECT h,l SIZE r/2
pause t
x2=2
y2=1
else
x2 = 1
y2=0
end if
else
if x2 = 1 then
if x-1<3 or k(x-2,y)=1 or k(x-2,y+1)=1 or k(x-2,y-1)=1 or k(x-1,y+1)=1 or k(x-1,y-1)=1 then goto LABEL
x2 = -1
y2= 0
end if
if x2 = 2 then
if k(x,y+2)=1 or k(x+1,y+2)=1 or k(x-1,y+2)=1 or k(x+1,y+1)=1 or k(x-1,y+1)=1 or k(x,y+1)=3 then goto LABEL
if k(x,y+3)=3 then
k(x,y+1)=1
h = r*x
l = r*(y+1)
if k(x,y+1) = 1 then FILL RECT h,l SIZE r/2
pause t
k(x,y+2)=1
h = r*x
l = r*(y+2)
if k(x,y+2) = 1 then FILL RECT h,l SIZE r/2
pause t
x2=1
y2=2
else
x2 = 0
y2=1
end if
end if
if x2 = 3 then
if y-1<3 or k(x,y-2)=1 or k(x+1,y-2)=1 or k(x-1,y-2)=1 or k(x+1,y-1)=1 or k(x-1,y-1)=1 then goto LABEL
x2 = 0
y2= -1
end if
end if
if x+x2 > x1 or y+y2 > y1 then goto LABEL
x = x +x2
y = y + y2
if k (x,y) = 1 then goto LABEL
k (x,y) = 1
if k(x1-1,y1-2)=1 and k(x1-2,y-1)=1 then
k(x1-1,y1-1)=1
h = r*(x1-1)
l = r*(y1-1)
if k(x1-1,y1-1) = 1 then FILL RECT h,l SIZE r/2
pause t
end if
h = r*x
l = r*y
if k(x,y) = 1 then FILL RECT h,l SIZE r/2
pause t
end while
h = r*(x1-1)
l = r*(y1-1)
if k(x1-1,y1-1) = 1 then FILL RECT h,l SIZE r/2
z=123
z4=0
zzz = 0
zz=0
LABEL2:
zz=0
z4=0
x = rnd (x1-2)+1
y = rnd (y1-2)+1
if k(x,y)=1 then
LABEL3:
z4=z4+1
if z4>x1 then goto LABEL2
while zz < x1*prohod
x2=RND (4)
if x2 = 0 then
if k(x+2,y)=1 or k(x+2,y+1)=1 or k(x+2,y-1)=1 or k(x+1,y+1)=1 or k(x+1,y-1)=1 or k(x+1,y)=2 then goto LABEL3
x2 = 1
y2=0
else
if x2 = 1 then
if x-1<3 or k(x-2,y)=1 or k(x-2,y+1)=1 or k(x-2,y-1)=1 or k(x-1,y+1)=1 or k(x-1,y-1)=1 then goto LABEL3
x2 = -1
y2= 0
end if
if x2 = 2 then
if k(x,y+2)=1 or k(x+1,y+2)=1 or k(x-1,y+2)=1 or k(x+1,y+1)=1 or k(x-1,y+1)=1 or k(x,y+1)=3 then goto LABEL3
x2 = 0
y2=1
end if
if x2 = 3 then
if y-1<3 or k(x,y-2)=1 or k(x+1,y-2)=1 or k(x-1,y-2)=1 or k(x+1,y-1)=1 or k(x-1,y-1)=1 then goto LABEL3
x2 = 0
y2= -1
end if
end if
if x+x2 > x1 or y+y2 > y1 then goto LABEL3
x = x +x2
y = y + y2
if k (x,y) = 1 then goto LABEL3
k (x,y) = 1
h = r*x
l = r*y
if k(x,y) = 1 then FILL RECT h,l SIZE r/2
pause t
zz = zz +1
end while
end if
z=321
zzz=zzz+1
if zzz<x1*500 then goto LABEL2
Re: Программирование на smart BASIC. Урок 5
Всем привет) Мой вариант:
GRAPHICS
OPTION BASE 1
DIM L(10,10)
FOR i = 1 TO 10
FOR j = 1 TO 10
L(i,j) = rnd(2)
NEXT j
NEXT i
DRAW SIZE 25
DRAW LINECAP ROUND
FOR i = 1 TO 10
x += 50
y = 50
FOR j = 1 TO 10
IF L(i,j) = 0 THEN
DRAW LINE x,y TO x,y+50
ELSE
DRAW LINE x,y TO x+50,y
END IF
y +=50
NEXT j
NEXT i
GRAPHICS
OPTION BASE 1
DIM L(10,10)
FOR i = 1 TO 10
FOR j = 1 TO 10
L(i,j) = rnd(2)
NEXT j
NEXT i
DRAW SIZE 25
DRAW LINECAP ROUND
FOR i = 1 TO 10
x += 50
y = 50
FOR j = 1 TO 10
IF L(i,j) = 0 THEN
DRAW LINE x,y TO x,y+50
ELSE
DRAW LINE x,y TO x+50,y
END IF
y +=50
NEXT j
NEXT i
-
- Posts: 17
- Joined: Tue Jan 13, 2015 10:44 am
Re: Программирование на smart BASIC. Урок 5
А где вход и выход?Всем привет) Мой вариант: