Oleg_D » 17.11.2016 15:06:53
Пара минут, наверное. Вы и сами скоро этому научитесь, а логика такова.
Имеем исходное число V, значение которого лежит в диапазоне 0..2 (0, 1, 2). Из него случайным образом надо получить другое число в этом же диапазоне. Это можно сделать прибавлением любого числа, не кратного трём (ноль прибавлять не имеет смысла). Стало быть, имеет смысл прибавить либо 1, либо 2 (либо 4, 5, 7, 8 …). Отсюда выражение 1+Random(2).
Разумеется, после сложения результат может оказаться больше 2, поэтому берём остаток от деления на 3.
Добавлено спустя 19 часов 37 минут 1 секунду:
Вот ещё один вариант решения той же проблемы: сформировать случайное число, отличное от текущего значения V:
var V, N : integer;
. . .
repeat N:= Random(3) until N<>V;
V:= N;
-----
Кстати, в нашей Галактике нередко случаются задачи, в которых надо формировать псевдо-случайные числа или их последовательности в соответствии с некоторыми требованиями. Например, сгенерировать случайное число, принадлежащее некоторому множеству S:
repeat N:= Random(100) until N in S;
Или не принадлежащее ему:
repeat N:= Random(100) until not (N in S);
В этой связи предлагаю всем желающим задачу: написать процедуру, выводящую на экран при каждом своём вызове группу из пяти чисел в диапазоне 0..99 так, чтобы числа следовали по возрастанию (или по убыванию). Например:
1) 18 31 40 90 91
2) 6 7 54 70 81
3) 49 77 89 95 97
и т.д.