FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Бегущая строка

Участников: 2

Перейти вниз

Бегущая строка Empty Бегущая строка

Сообщение  justar Пн Сен 22, 2008 2:12 pm

Написалась вот такая процедурка:
Код:

SUB EscStr (row AS INTEGER, col AS INTEGER, s AS STRING)
   
    DIM l AS INTEGER
    DIM i AS INTEGER
    DIM j AS INTEGER

    s = STRING$ (LEN (s), 32) + s + STRING$ (2, 32)
    l = LEN (s)
    FOR j = 1 TO l
        FOR i = 1 TO l
            MID$ (s, i, 1) = MID$ (s, i + 1, 1)
        NEXT
        LOCATE row, col: PRINT s
        SLEEP 150
    NEXT
   
END SUB
Но ни как не соображу как сделать что бы убегающая влево подстрока сразу появлялась справа...

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа

Вернуться к началу Перейти вниз

Бегущая строка Empty Re: Бегущая строка

Сообщение  justar Пн Сен 22, 2008 2:26 pm

Немного преобразовал и вроде получилось то, что надо:
Код:

SUB EscStr (row AS INTEGER, col AS INTEGER, s AS STRING)
   
    DIM l AS INTEGER
    DIM i AS INTEGER
    DIM j AS INTEGER

    s = STRING$ (LEN (s), 32) + s + STRING$ (LEN (s), 32)
    l = LEN (s)
    FOR j = 1 TO l
        FOR i = 1 TO l
            MID$ (s, i, 1) = MID$ (s, i + 1, 1)
            MID$ (s, l, 1) = MID$ (s, 1, 1)
        NEXT
        LOCATE row, col: PRINT s
        SLEEP 150
    NEXT
   
END SUB
Зато по ходу отладки появился вопрос по оболочке инсайт: почему во время трассировки в окне "локальные переменные" не меняется значение переменной s? Можно ли как-тонастроить инсайт что бы видеть в он-лайне изменение строковых переменных?

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа

Вернуться к началу Перейти вниз

Бегущая строка Empty Re: Бегущая строка

Сообщение  tux Пн Сен 22, 2008 6:59 pm

вай жуть, непонял вопрса, но мож так делать проще?
Код:
sub sBS(byref pStr as string)
    cls
    print pStr
    sleep 300
    sBS right(pStr, 1) & left(pStr, len(pStr)-1)
end sub

sBS "qwerty"
tux
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 35
Откуда : Сибирь

http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Бегущая строка Empty Re: Бегущая строка

Сообщение  justar Вт Сен 23, 2008 9:12 am

Может я и не прав в корне, но рекурсия входит в те приёмы программирования, использование которых я стараюсь избегать Embarassed

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа

Вернуться к началу Перейти вниз

Бегущая строка Empty Re: Бегущая строка

Сообщение  tux Вт Сен 23, 2008 10:22 am

понял, тада так

Код:
dim as string pStr
dim as integer i
pStr="qwerty"
for i=1 to 30
    cls
    print pStr
    pStr=right(pStr, 1) & left(pStr, len(pStr)-1)
    sleep 300
next i

если чесно, то и я недолюбливаю рекурсии, но иногда они значительно упрощают жизнь
tux
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 35
Откуда : Сибирь

http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Бегущая строка Empty Re: Бегущая строка

Сообщение  justar Вт Сен 23, 2008 4:43 pm

Решил сравнить скорость наших вариантов. Написал такой код:
Код:

SUB EscStr (row AS INTEGER, col AS INTEGER, pStr AS STRING)
   
    DIM l AS INTEGER
    DIM i AS INTEGER
    DIM j AS INTEGER

    pStr = STRING$ (LEN (pStr), 32) + pStr + STRING$ (LEN (pStr), 32)
    l = LEN (pStr)
    FOR j = 1 TO l
        FOR i = 1 TO l
            MID$ (pStr, i, 1) = MID$ (pStr, i + 1, 1)
            MID$ (pStr, l, 1) = MID$ (pStr, 1, 1)
        NEXT
        LOCATE row, col: PRINT pStr
        SLEEP 150
    NEXT
   
END SUB

SUB sBS (row AS INTEGER, col AS INTEGER, BYREF pStr AS STRING)
 
  DIM i AS INTEGER
 
  pStr = STRING$ (LEN (pStr), 32) + pStr + STRING$ (LEN (pStr), 32)
  FOR i = 1 to LEN (pStr)
      LOCATE row, col: PRINT pStr
      pStr = RIGHT$(pStr, 1) & LEFT$(pStr, LEN (pStr)-1)
      SLEEP 150
  NEXT
 
END SUB

DIM AS INTEGER t1, t2
t1 = TIMER
ESCSTR (1, 10, "Hello, world!!!")
t2 = TIMER
PRINT t2 - t1
SLEEP
CLS
t1 = TIMER
SBS (1, 10, "Hello, world!!!")
t2 = TIMER
PRINT t2 - t1
SLEEP
Скорость выполнения получилась... одинаковая. С одним только отличием - текст бежит в разные стороны Wink

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения