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

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

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

Post by Фант »

У тебя значения переменных присваиваются только во второй строке кода а в остальном присвоений нету-все значения а(к) у тебя по умолчанию равны нулю

User avatar
MARK99
Posts: 292
Joined: Tue Feb 03, 2015 2:33 pm
My devices: Ipad 4 , iphone 5
Flag: Russia
Contact:

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

Post by MARK99 »

Фант wrote:У тебя значения переменных присваиваются только во второй строке кода а в остальном присвоений нету-все значения а(к) у тебя по умолчанию равны нулю
ООО, точно спасибо , я понял , исправил , всегда рад вашим советам , большое спасибо :P :P !)

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
Image

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

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

Post by Фант »

ну и замечательно!
код можно написать проще
option base 1
dim a(20)
for i=1 to 20
a(i)=rnd(21)
next i
...

User avatar
MARK99
Posts: 292
Joined: Tue Feb 03, 2015 2:33 pm
My devices: Ipad 4 , iphone 5
Flag: Russia
Contact:

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

Post by MARK99 »

Спасибо ...
Image

dimonnn777
Posts: 17
Joined: Tue Jan 13, 2015 10:44 am

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

Post by dimonnn777 »

Мой вариант лабиринта
К сожалению иногда прокладка основного прохода заходит в такой тупик из которого не может выбраться - повторно запустите программу
Можно настраивать размер лабиринта и количество циклов построения ответвлений, если ввести 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


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. Урок 5

Post by Mr. Kibernetik »

Довольно сложные получаются лабиринты...

User avatar
MARK99
Posts: 292
Joined: Tue Feb 03, 2015 2:33 pm
My devices: Ipad 4 , iphone 5
Flag: Russia
Contact:

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

Post by MARK99 »

Mr. Kibernetik wrote:Довольно сложные получаются лабиринты...
? А поконкретнее можно?)
Image

dimonnn777
Posts: 17
Joined: Tue Jan 13, 2015 10:44 am

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

Post by dimonnn777 »

Усовершенствовал, теперь при заходе в тупик и невозможности проложить основной проход по алгоритму построение перезапускается само, можно проследить за строительством лабиринта.
Можно настраивать:
Размер лабиринта
Количество проходов для построения ответвлений
Задержку отображения построений проходов

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


Alexxl
Posts: 26
Joined: Fri Jan 30, 2015 9:54 am
My devices: iPad 2 iPhone 5

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

Post by Alexxl »

Всем привет) Мой вариант:

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

dimonnn777
Posts: 17
Joined: Tue Jan 13, 2015 10:44 am

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

Post by dimonnn777 »

Всем привет) Мой вариант:
А где вход и выход?

Post Reply