Преобразовать числовую строку по правилу - QBasic

Формулировка задачи:

Дано число в виде строки S. Требуется каждый элемент этой строки заменить на 1. Если элемент четная цифра, то заменить на большую рядом стоящую цифру 2. Если элемент нечетная цифра, то заменить на меньшую рядом стоящую цифру. примечание Дано число 12345. Числа 1 и 5 считаются рядом стоящими. Данная программа решила задачу, создав новую строку... Как сделать замену? Есть мысль ввести пару переменных? Как?
DECLARE FUNCTION M$ (n!)
DECLARE FUNCTION STO$ (u!)
CLS
DIM SHARED s AS STRING
DIM t AS STRING
 
s = "4915440847"
PRINT s
PRINT
s = M(10) + s + M(1)
 
FOR i = 2 TO 11
   n1 = VAL(M(i - 1))
   ni = VAL(M(i))
   n2 = VAL(M(i + 1))
   IF ni MOD 2 THEN
      IF n1 > n2 THEN
         t = t + STO(n2)
      ELSE
         t = t + STO(n1)
      END IF
   ELSE
      IF n1 > n2 THEN
         t = t + STO(n1)
      ELSE
         t = t + STO(n2)
      END IF
   END IF
NEXT
PRINT t
END
 
FUNCTION M$ (n)
   M = MID$(s, n, 1)
END FUNCTION
 
FUNCTION STO$ (u)
   STO = LTRIM$(STR$(u))
END FUNCTION

Код к задаче: «Преобразовать числовую строку по правилу - QBasic»

textual
DECLARE FUNCTION max! (a!, b!)
DECLARE FUNCTION min! (a!, b!)
DECLARE FUNCTION M$ (n!)
DECLARE FUNCTION STO$ (u!)
DECLARE SUB STRO (i!)
 
CLS
DIM SHARED s AS STRING
 
s = "4915440847"
PRINT s
PRINT
 
CALL STRO(1)
 
PRINT s
END
 
FUNCTION M$ (n)
   M = MID$(s, n, 1)
END FUNCTION
 
FUNCTION max (a, b)
   IF a > b THEN max = a ELSE max = b
END FUNCTION
 
FUNCTION min (a, b)
   IF a < b THEN min = a ELSE min = b
END FUNCTION
 
FUNCTION STO$ (u)
   STO = LTRIM$(STR$(u))
END FUNCTION
 
SUB STRO (i)
   IF i > LEN(s) THEN EXIT SUB
   
   SELECT CASE i
   CASE 1
      j = LEN(s) : k = 2
   CASE LEN(s)
      j = i - 1 : k = 1
   CASE ELSE
      j = i - 1 : k = i + 1
   END SELECT
 
   n1 = VAL(M(j))
   ni = VAL(M(i))
   n2 = VAL(M(k))
 
   CALL STRO(i + 1)
 
   IF ni MOD 2 THEN
      MID$(s, i, 1) = STO(min(n1, n2))
   ELSE
      MID$(s, i, 1) = STO(max(n1, n2))
   END IF
END SUB

12   голосов, оценка 4.000 из 5


СОХРАНИТЬ ССЫЛКУ