Преобразовать строку чисел - QBasic
Формулировка задачи:
Дано 40 натуральных чисел от 1 до 40.
Каждое число возведено в квадрат и все числа записаны в строку
1491625364964811121144169196 ... 1600
1) Из этой строки удалить все цифры, кроме 1; 2 и 3
2) все цифры, которые повторяют впереди идущую цифру
Вывести на экран конечную строку,
А также число цифр в конечной строке.
...
Вопрос
А нельзя ли преобразовывать строку по мере её создания?
Наверняка что-то можно сделать сразу... пусть частично?
Может есть иное решение, более простое, чем моё?
Решение задачи: «Преобразовать строку чисел»
textual
Листинг программы
DIM n AS LONG, n2 AS LONG, a(1 TO 4) AS LONG DIM i AS LONG, i2 AS LONG, k AS LONG, j AS LONG FOR i = 1 TO 40 i2 = i * i k = 0 WHILE i2 n = i2 MOD 10 IF n >= 1 AND n <= 3 THEN k = k + 1 a(k) = n END IF i2 = i2 \ 10 WEND FOR j = k TO 1 STEP -1 IF a(j) <> n2 THEN PRINT LTRIM$(STR$(a(j))); n2 = a(j) END IF NEXT j NEXT i
Объяснение кода листинга программы
- Прежде всего, стоит разобраться с переменными:
n
- длинное число, в котором будет храниться результат проверки текущего числа на соответствие диапазону от 1 до 3.n2
- длинное число, в котором будет храниться текущее число, проверяемое на соответствие диапазону от 1 до 3.a
- массив из 4 длинных чисел, в котором будут храниться числа от 1 до 9, которые были найдены в исходной строке.i
- счётчик, который перебирает все числа от 1 до 40.i2
- длинное число, в котором будет храниться квадрат текущего числа.k
- счётчик, который перебирает все найденные числа от 1 до 9 в обратном порядке.j
- счётчик, который перебирает все числа от k до 1 в обратном порядке.
- Цель основного цикла (FOR i = 1 TO 40) - перебрать все числа от 1 до 40.
- *Внутри основного цикла (i2 = i i)** вычисляется квадрат текущего числа.
- Цель внутреннего цикла (WHILE i2) - последовательно вычислить остаток от деления i2 на 10 и проверить, является ли полученное число от 1 до 3. Если да, то увеличить счётчик k на 1 и сохранить найденное число в массиве a.
- Внутри внутреннего цикла (i2 = i2 \ 10) вычисляется целая часть числа i2, т.е. число, которое было на входе во внутренний цикл.
- Цель внешнего цикла (FOR j = k TO 1 STEP -1) - перебрать все найденные числа от большего к меньшему.
- Внутри внешнего цикла (IF a(j) <> n2 THEN) проверяется, является ли текущее число из массива a равным текущему числу n2. Если нет, то выводится на экран текущее число из массива a. После чего, текущее число n2 заменяется на число из массива a.
- Цель последнего цикла (NEXT i) - перебрать все числа от 1 до 40.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д