В исходной строке a$ произвести циклическую перестановку слов влево на n слов. Вывести исходную и полученную строки — QBasic(Бейсик)

CLS
Razdelitel$ = " " 'Razdelitel stroki
again:
INPUT "Vvedite stroku:"; a$
olda$ = a$
IF a$ = "" THEN PRINT "Vvedite zanovo"
INPUT "Vvedite kol-vo slov:"; n%
' Proveryaem kol-vo slov v predlozhenii
sl% = 0: stat% = 0: oldstat% = 1
FOR i% = 1 TO LEN(a$)
    IF MID$(a$, i%, 1) = Razdelitel$ THEN stat% = 1
    IF oldstat% = 1 AND stat% = 0 THEN sl% = sl% + 1
    oldstat% = stat%
    stat% = 0
NEXT
' Udalyaem sleva vse razdelitelnie znaki
FOR i% = 1 TO LEN(a$) STEP -1
    IF MID$(a$, i%, 1) = Razdelitel$ THEN a$ = RIGHT$(a$, LEN(a$) - 1) ELSE EXIT FOR
NEXT i%
' Udalyaem sprava vse razdelitelnie znaki
FOR i% = LEN(a$) TO 1 STEP -1
    IF MID$(a$, i%, 1) = Razdelitel$ THEN a$ = LEFT$(a$, LEN(a$) - 1) ELSE EXIT FOR
NEXT i%
' i stavim vmesto nikh 1 razdelitel sprava
a$ = a$ + Razdelitel$
' Tsiklicheski vertim slova
FOR i = 1 TO n%
    stat% = 0: oldstat% = 0
    DO
        LfZn$ = MID$(a$, 1, 1)
        oldstat% = stat%
        stat% = 0
        IF LfZn$ = Razdelitel$ THEN stat% = 1
        IF oldstat% = 1 AND stat% = 0 THEN EXIT DO
        a$ = RIGHT$(a$, LEN(a$) - 1) + LfZn$
    LOOP
NEXT
CLS
PRINT "ishdnaya stroka:"; olda$
PRINT "Novaya stroka:"; a$

Следующий вариант

Rzd$ = " " 'Разделитель
Again: CLS: INPUT "Vvedite stroku      :", a$ ' Ввод строки
IF a$ = "" GOTO Again ' Если строка пуста, вводим заново
'IF MID$(a$, LEN(a$), 1) <> Rzd$ THEN a$ = a$ + Rzd$
INPUT "Skolko slov dvigat' :", n
PRINT "ishodnaya:";: WRITE a$
IF n = 0 GOTO Ok
ReFnd: IF MID$(a$, 1, 1) <> Rzd$ AND rg = 0 THEN s = s + 1
FOR i = 1 TO LEN(a$) - 1 'Считаем слова -> s
    IF MID$(a$, i, 1) = Rzd$ AND MID$(a$, i + 1, 1) <> Rzd$ THEN
        s = s + 1: IF rg = 1 AND s = d THEN r = i
    END IF
NEXT
IF rg = 0 THEN d = n MOD s: rg = 1: s = 0: GOTO ReFnd ' На сколько слов дигать
Ok: PRINT "Resultat :";: WRITE RIGHT$(a$, LEN(a$) - r) + LEFT$(a$, r)

Тестирование выполнено в программе QB64 ( Скачать )

Leave a Comment