Замена цифр в числе - QBasic
Формулировка задачи:
Задача
Дано десятизначное число (вообще говоря произвольное)
в виде стоковой переменной. Требуется заменить в этом
числе две цифры. Одну цифру на знак плюс (+), а другую
цифру на знак минус (-). Эти знаки разобьют данное число
на три числа соединенные двумя арифметическими операциями.
Если произвести эти операции, то получится некоторое число.
Так вот.
Задача состоит в том, чтобы так разместить эти две операции, чтобы
в результате их выполнения получилось минимальное положительное
число.
На экран надо вынести
1. Начальное число
2. Строку из чисел и операций
3. Результат этих операций (min)
(Программа проверена)
Удачи Вам!
Листинг программы
- REM Заменить две цифры знаками + и -
- REM произвести арифметические действия
- REM найти минимум больший нуля
- CLS
- DIM s AS STRING
- DIM s0 AS LONG
- DIM s1 AS LONG
- DIM s2 AS LONG
- DIM s3 AS LONG
- DIM k AS LONG
- s = "9876543210"
- PRINT s
- min = 10000
- FOR i = 2 TO 7
- FOR j = i + 2 TO 9
- s1 = VAL(MID$(s, 1, i - 1))
- s2 = VAL(MID$(s, i + 1, j - i - 1))
- s3 = VAL(MID$(s, j + 1, 10 - j))
- k = s1 + s2 - s3
- IF k > 0 AND min > k THEN
- min = k
- k1 = 0
- k2 = i
- k3 = j
- END IF
- k = s1 - s2 + s3
- IF k > 0 AND min > k THEN
- min = k
- k1 = 1
- k2 = i
- k3 = j
- END IF
- NEXT j, i
- IF k1 THEN
- MID$(s, k2, 1) = "-"
- MID$(s, k3, 1) = "+"
- ELSE
- MID$(s, k2, 1) = "+"
- MID$(s, k3, 1) = "-"
- END IF
- PRINT s
- PRINT min
- END
Решение задачи: «Замена цифр в числе»
textual
Листинг программы
- Sub main()
- S$ = "8371219727"
- For i% = 2 To 9
- For j% = 2 To 9
- If Abs(i% - j%) > 1 Then
- Z$ = S$
- Mid$(Z$, i%, 1) = "+"
- Mid$(Z$, j%, 1) = "-"
- Debug.Print Z$; "="; Calc(Z$)
- End If
- Next j%
- Next i%
- End Sub
- Function Calc(Stri As String) As Double
- Dim r(1 To 3) As Double
- Z# = 1
- k% = 1
- For i% = 1 To Len(Stri)
- S$ = Mid(Stri, i%, 1)
- Select Case S$
- Case "+"
- Z# = 1
- k% = k% + 1
- Case "-"
- Z# = -1
- k% = k% + 1
- Case Else
- r(k%) = r(k%) * 10 + Z# * Val(S$)
- End Select
- Next i%
- Calc = r(1) + r(2) + r(3)
- End Function
Объяснение кода листинга программы
- Задача программы - замена цифр в числе 8371219727 на плюс и минус в соответствующих позициях.
- Код начинается с двух вложенных циклов от 2 до 9, которые выполняются поочередно.
- Внутри циклов проверяется абсолютное значение разности текущих позиций циклов, если оно больше 1, то выполняется замена символа на соответствующую позицию в строке S$.
- Значение переменной Z$ используется для временного хранения исходной строки S$.
- Значение переменной M$ используется для хранения результата вычисления функции Calc.
- Функция Calc вычисляет сумму цифр в строке Stri, используя вложенный цикл для прохода по каждому символу строки.
- В зависимости от текущего символа S$ выбирается соответствующее действие для переменной Z# и переменной k%.
- Если S$ равно
+
, то Z# становится равным 1 и k% увеличивается на 1. - Если S$ равно
-
, то Z# становится равным -1 и k% увеличивается на 1. - Если S$ не равно
+
,-
или цифре, то значение переменной r(k%) становится равным сумме умножения r(k%) на 10 и Z# на значение S$. - Функция Calc возвращает сумму цифр в строке Stri.
- Значение переменной M$ становится равным результату функции Calc.
- Значение переменной M$ выводится в консоль с помощью функции Debug.Print.
- Значение переменной M$ вычисляется как равенство исходной строки S$.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д