(Не)простая последовательность. Найти ошибку в коде - 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 - счётчики призванные контролировать повторение чисел)... подумал: может поставить счётчики на каждое число? нет, глупо, но где-то прокол?
Листинг программы
  1. CLS
  2. RANDOMIZE TIMER
  3. n1 = INT(4 * RND) + 1
  4. PRINT n1;
  5. k = 1
  6. k2 = 1
  7. FOR i = 1 TO 19
  8. DO
  9. n2 = INT(4 * RND) + 1
  10. IF n1 = n2 AND k < 3 AND k2 < 3 THEN
  11. k = k + 1
  12. k2 = k2 + 1
  13. END IF
  14. LOOP UNTIL (ABS(n1 - n2) MOD 2 OR n1 = n2) AND k <= 3
  15. PRINT n2;
  16. k2 = k
  17. k = 1
  18. n1 = n2
  19. NEXT
  20. END

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

textual
Листинг программы
  1. DIM i AS LONG, n AS LONG, n0 AS LONG, k AS LONG
  2. RANDOMIZE TIMER
  3. n = INT(RND * 4 + 1)
  4. PRINT n;
  5. FOR i = 2 TO 20
  6.     n0 = n
  7.     DO
  8.         n = INT(RND * 4 + 1)
  9.     LOOP WHILE ABS(n - n0) = 2 OR (n = n0 AND k >= 2)
  10.     IF n = n0 THEN k = k + 1 ELSE k = 0
  11.     PRINT n;
  12. NEXT i
  13. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут