(Не)простая последовательность. Найти ошибку в коде - QBasic

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

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

Задача Написать программу, которая распечатывает 20 членов случайной последовательности, обладающей следующими свойствами 1. последовательность состоит из чисел 1, 2, 3, 4 2. числа 1 и 3 не могут стоять рядом 3. числа 2 и 4 тоже не могут стоять рядом 4. каждое число может стоять в последовательности не более трёх раз подряд пример 1, 1, 1, 2, 3, 4, 4, 3, 3, 2, 1, 1, 4, 4, 4, 1, 4, 1, 2, 2 программа работает не совсем верно: она может выдать и 4 числа подряд. Проблему не решает даже второй счётчик (k, k2 - счётчики призванные контролировать повторение чисел)... подумал: может поставить счётчики на каждое число? нет, глупо, но где-то прокол?

Решение задачи: «(Не)простая последовательность. Найти ошибку в коде»

textual
Листинг программы
DIM i AS LONG, n AS LONG, n0 AS LONG, k AS LONG
RANDOMIZE TIMER
n = INT(RND * 4 + 1)
PRINT n;
FOR i = 2 TO 20
    n0 = n
    DO
        n = INT(RND * 4 + 1)
    LOOP WHILE ABS(n - n0) = 2 OR (n = n0 AND k >= 2)
    IF n = n0 THEN k = k + 1 ELSE k = 0
    PRINT n;
NEXT i
PRINT

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

  1. Переменные i, n, n0, k инициализируются как LONG (целые числа).
  2. С помощью функции RANDOMIZE TIMER инициализируется генератор случайных чисел.
  3. Переменной n присваивается случайное число от 1 до 4.
  4. Выводится значение переменной n.
  5. Запускается цикл от i = 2 до i = 20.
  6. Внутри цикла переменной n0 присваивается текущее значение переменной n.
  7. Запускается цикл DO-LOOP, который будет выполняться, пока абсолютное значение разности между текущим значением переменной n и предыдущим значением переменной n0 не станет равным 2, или пока текущее значение переменной n не станет равным предыдущему значению переменной n0 и переменная k не станет больше или равной 2.
  8. Внутри цикла DO-LOOP проверяется, равно ли текущее значение переменной n предыдущему значению переменной n0. Если это так, то переменная k увеличивается на 1. Если нет, то переменная k сбрасывается до 0.
  9. Выводится текущее значение переменной n.
  10. Цикл NEXT i прекращает выполнение цикла от i = 2 до i = 20.
  11. Выводится символ новой строки (PRINT).

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


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

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

14   голосов , оценка 3.714 из 5