(Не)простая последовательность. Найти ошибку в коде - 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
Объяснение кода листинга программы
- Переменные i, n, n0, k инициализируются как LONG (целые числа).
- С помощью функции RANDOMIZE TIMER инициализируется генератор случайных чисел.
- Переменной n присваивается случайное число от 1 до 4.
- Выводится значение переменной n.
- Запускается цикл от i = 2 до i = 20.
- Внутри цикла переменной n0 присваивается текущее значение переменной n.
- Запускается цикл DO-LOOP, который будет выполняться, пока абсолютное значение разности между текущим значением переменной n и предыдущим значением переменной n0 не станет равным 2, или пока текущее значение переменной n не станет равным предыдущему значению переменной n0 и переменная k не станет больше или равной 2.
- Внутри цикла DO-LOOP проверяется, равно ли текущее значение переменной n предыдущему значению переменной n0. Если это так, то переменная k увеличивается на 1. Если нет, то переменная k сбрасывается до 0.
- Выводится текущее значение переменной n.
- Цикл NEXT i прекращает выполнение цикла от i = 2 до i = 20.
- Выводится символ новой строки (PRINT).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д