Замена цифр в числе - QBasic

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

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

Задача Дано десятизначное число (вообще говоря произвольное) в виде стоковой переменной. Требуется заменить в этом числе две цифры. Одну цифру на знак плюс (+), а другую цифру на знак минус (-). Эти знаки разобьют данное число на три числа соединенные двумя арифметическими операциями. Если произвести эти операции, то получится некоторое число. Так вот. Задача состоит в том, чтобы так разместить эти две операции, чтобы в результате их выполнения получилось минимальное положительное число. На экран надо вынести 1. Начальное число 2. Строку из чисел и операций 3. Результат этих операций (min) (Программа проверена) Удачи Вам!
Листинг программы
  1. REM Заменить две цифры знаками + и -
  2. REM произвести арифметические действия
  3. REM найти минимум больший нуля
  4. CLS
  5. DIM s AS STRING
  6. DIM s0 AS LONG
  7. DIM s1 AS LONG
  8. DIM s2 AS LONG
  9. DIM s3 AS LONG
  10. DIM k AS LONG
  11. s = "9876543210"
  12. PRINT s
  13. min = 10000
  14. FOR i = 2 TO 7
  15. FOR j = i + 2 TO 9
  16. s1 = VAL(MID$(s, 1, i - 1))
  17. s2 = VAL(MID$(s, i + 1, j - i - 1))
  18. s3 = VAL(MID$(s, j + 1, 10 - j))
  19. k = s1 + s2 - s3
  20. IF k > 0 AND min > k THEN
  21. min = k
  22. k1 = 0
  23. k2 = i
  24. k3 = j
  25. END IF
  26. k = s1 - s2 + s3
  27. IF k > 0 AND min > k THEN
  28. min = k
  29. k1 = 1
  30. k2 = i
  31. k3 = j
  32. END IF
  33. NEXT j, i
  34. IF k1 THEN
  35. MID$(s, k2, 1) = "-"
  36. MID$(s, k3, 1) = "+"
  37. ELSE
  38. MID$(s, k2, 1) = "+"
  39. MID$(s, k3, 1) = "-"
  40. END IF
  41. PRINT s
  42. PRINT min
  43. END

Решение задачи: «Замена цифр в числе»

textual
Листинг программы
  1. Sub main()
  2.     S$ = "8371219727"
  3.     For i% = 2 To 9
  4.         For j% = 2 To 9
  5.             If Abs(i% - j%) > 1 Then
  6.                Z$ = S$
  7.                Mid$(Z$, i%, 1) = "+"
  8.                Mid$(Z$, j%, 1) = "-"
  9.                Debug.Print Z$; "="; Calc(Z$)
  10.             End If
  11.          Next j%
  12.     Next i%
  13. End Sub
  14.  
  15. Function Calc(Stri As String) As Double
  16. Dim r(1 To 3) As Double
  17.     Z# = 1
  18.     k% = 1
  19.     For i% = 1 To Len(Stri)
  20.         S$ = Mid(Stri, i%, 1)
  21.         Select Case S$
  22.                Case "+"
  23.                    Z# = 1
  24.                    k% = k% + 1
  25.                Case "-"
  26.                    Z# = -1
  27.                    k% = k% + 1
  28.                Case Else
  29.                    r(k%) = r(k%) * 10 + Z# * Val(S$)
  30.         End Select
  31.     Next i%
  32.     Calc = r(1) + r(2) + r(3)
  33. End Function

Объяснение кода листинга программы

  1. Задача программы - замена цифр в числе 8371219727 на плюс и минус в соответствующих позициях.
  2. Код начинается с двух вложенных циклов от 2 до 9, которые выполняются поочередно.
  3. Внутри циклов проверяется абсолютное значение разности текущих позиций циклов, если оно больше 1, то выполняется замена символа на соответствующую позицию в строке S$.
  4. Значение переменной Z$ используется для временного хранения исходной строки S$.
  5. Значение переменной M$ используется для хранения результата вычисления функции Calc.
  6. Функция Calc вычисляет сумму цифр в строке Stri, используя вложенный цикл для прохода по каждому символу строки.
  7. В зависимости от текущего символа S$ выбирается соответствующее действие для переменной Z# и переменной k%.
  8. Если S$ равно +, то Z# становится равным 1 и k% увеличивается на 1.
  9. Если S$ равно -, то Z# становится равным -1 и k% увеличивается на 1.
  10. Если S$ не равно +, - или цифре, то значение переменной r(k%) становится равным сумме умножения r(k%) на 10 и Z# на значение S$.
  11. Функция Calc возвращает сумму цифр в строке Stri.
  12. Значение переменной M$ становится равным результату функции Calc.
  13. Значение переменной M$ выводится в консоль с помощью функции Debug.Print.
  14. Значение переменной M$ вычисляется как равенство исходной строки S$.

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


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

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

13   голосов , оценка 3.769 из 5

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

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

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