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

Узнай цену своей работы

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

Дано число в виде строки S. Требуется каждый элемент этой строки заменить на 1. Если элемент четная цифра, то заменить на большую рядом стоящую цифру 2. Если элемент нечетная цифра, то заменить на меньшую рядом стоящую цифру. примечание Дано число 12345. Числа 1 и 5 считаются рядом стоящими. Данная программа решила задачу, создав новую строку... Как сделать замену? Есть мысль ввести пару переменных? Как?
Листинг программы
  1. DECLARE FUNCTION M$ (n!)
  2. DECLARE FUNCTION STO$ (u!)
  3. CLS
  4. DIM SHARED s AS STRING
  5. DIM t AS STRING
  6. s = "4915440847"
  7. PRINT s
  8. PRINT
  9. s = M(10) + s + M(1)
  10. FOR i = 2 TO 11
  11. n1 = VAL(M(i - 1))
  12. ni = VAL(M(i))
  13. n2 = VAL(M(i + 1))
  14. IF ni MOD 2 THEN
  15. IF n1 > n2 THEN
  16. t = t + STO(n2)
  17. ELSE
  18. t = t + STO(n1)
  19. END IF
  20. ELSE
  21. IF n1 > n2 THEN
  22. t = t + STO(n1)
  23. ELSE
  24. t = t + STO(n2)
  25. END IF
  26. END IF
  27. NEXT
  28. PRINT t
  29. END
  30. FUNCTION M$ (n)
  31. M = MID$(s, n, 1)
  32. END FUNCTION
  33. FUNCTION STO$ (u)
  34. STO = LTRIM$(STR$(u))
  35. END FUNCTION

Решение задачи: «Преобразовать числовую строку по правилу»

textual
Листинг программы
  1. DECLARE FUNCTION max! (a!, b!)
  2. DECLARE FUNCTION min! (a!, b!)
  3. DECLARE FUNCTION M$ (n!)
  4. DECLARE FUNCTION STO$ (u!)
  5. DECLARE SUB STRO (i!)
  6.  
  7. CLS
  8. DIM SHARED s AS STRING
  9.  
  10. s = "4915440847"
  11. PRINT s
  12. PRINT
  13.  
  14. CALL STRO(1)
  15.  
  16. PRINT s
  17. END
  18.  
  19. FUNCTION M$ (n)
  20.    M = MID$(s, n, 1)
  21. END FUNCTION
  22.  
  23. FUNCTION max (a, b)
  24.    IF a > b THEN max = a ELSE max = b
  25. END FUNCTION
  26.  
  27. FUNCTION min (a, b)
  28.    IF a < b THEN min = a ELSE min = b
  29. END FUNCTION
  30.  
  31. FUNCTION STO$ (u)
  32.    STO = LTRIM$(STR$(u))
  33. END FUNCTION
  34.  
  35. SUB STRO (i)
  36.    IF i > LEN(s) THEN EXIT SUB
  37.    
  38.    SELECT CASE i
  39.    CASE 1
  40.       j = LEN(s) : k = 2
  41.    CASE LEN(s)
  42.       j = i - 1 : k = 1
  43.    CASE ELSE
  44.       j = i - 1 : k = i + 1
  45.    END SELECT
  46.  
  47.    n1 = VAL(M(j))
  48.    ni = VAL(M(i))
  49.    n2 = VAL(M(k))
  50.  
  51.    CALL STRO(i + 1)
  52.  
  53.    IF ni MOD 2 THEN
  54.       MID$(s, i, 1) = STO(min(n1, n2))
  55.    ELSE
  56.       MID$(s, i, 1) = STO(max(n1, n2))
  57.    END IF
  58. END SUB

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы