Преобразовать строку чисел - 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

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

  1. Прежде всего, стоит разобраться с переменными:
    • n - длинное число, в котором будет храниться результат проверки текущего числа на соответствие диапазону от 1 до 3.
    • n2 - длинное число, в котором будет храниться текущее число, проверяемое на соответствие диапазону от 1 до 3.
    • a - массив из 4 длинных чисел, в котором будут храниться числа от 1 до 9, которые были найдены в исходной строке.
    • i - счётчик, который перебирает все числа от 1 до 40.
    • i2 - длинное число, в котором будет храниться квадрат текущего числа.
    • k - счётчик, который перебирает все найденные числа от 1 до 9 в обратном порядке.
    • j - счётчик, который перебирает все числа от k до 1 в обратном порядке.
  2. Цель основного цикла (FOR i = 1 TO 40) - перебрать все числа от 1 до 40.
  3. *Внутри основного цикла (i2 = i i)** вычисляется квадрат текущего числа.
  4. Цель внутреннего цикла (WHILE i2) - последовательно вычислить остаток от деления i2 на 10 и проверить, является ли полученное число от 1 до 3. Если да, то увеличить счётчик k на 1 и сохранить найденное число в массиве a.
  5. Внутри внутреннего цикла (i2 = i2 \ 10) вычисляется целая часть числа i2, т.е. число, которое было на входе во внутренний цикл.
  6. Цель внешнего цикла (FOR j = k TO 1 STEP -1) - перебрать все найденные числа от большего к меньшему.
  7. Внутри внешнего цикла (IF a(j) <> n2 THEN) проверяется, является ли текущее число из массива a равным текущему числу n2. Если нет, то выводится на экран текущее число из массива a. После чего, текущее число n2 заменяется на число из массива a.
  8. Цель последнего цикла (NEXT i) - перебрать все числа от 1 до 40.

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


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

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

8   голосов , оценка 4.25 из 5
Похожие ответы