Использование функции Exclude - Turbo Pascal
Формулировка задачи:
Вывести два столбика рандомных чисел от 1 до 8 без повторяющихся чисел.
Чтобы числа не повторялись, нужно использовать процедуру Exclude.
Вроде простенькая программа, могу написать ее без процедуры. Но с этой процедурой никогда не работала и даже не представляю, как она функционирует и как ее применить к данной задаче..
Решение задачи: «Использование функции Exclude»
textual
Листинг программы
type
TSet = Set Of 1..8; //объявляем свой тип множества, используется для обозначения, что какое-то там число ещё необходимо вывести. к примеру, (TSet)t = [1, 5, 7, 8] - это означает, что уже были выведены числа 2, 3, 4 и 6, но ещё необходимо вырандомить 1, 5, 7 и 8
procedure Gen(var st: TSet); //процедура, которая рандомит необходимное число
var
temp: Byte;
begin
repeat
temp := Random(8) + 1; //рандомим число
until (temp in st); //пока не получим
Write(temp); //выводим оное
Exclude(st, temp); //исключаем его из множества
end;
var
left, right: TSet;
i: Byte;
begin
left := [1..8]; right := left; //пока ни одно число не выведено
i := 0;
Randomize();
while (i < 8) do //рандомим 8 чисел
begin
Gen(left); Write(' '); //левый столбец
Gen(right); WriteLn; //правый столбец
Inc(i);
end;
end.
Объяснение кода листинга программы
- В типе
TSetобъявляется тип множества, который будет использоваться для обозначения чисел, которые уже были выведены, а также для обозначения чисел, которые еще необходимо вывести. - В процедуре
Genрандомируется число в диапазоне от 1 до 8 и проверяется, содержится ли оно уже в переменнойst. Если число уже было выведено, то генерируется новое число, пока не будет найдено уникальное. Затем сгенерированное число выводится на экран и исключается из множестваst. - В переменной
leftинициализируется начальное множество, которое содержит все числа от 1 до 8. В переменнойrightинициализируется копию множестваleft, чтобы можно было работать с обоими столбцами таблицы. - Цикл
whileвыполняется 8 раз, пока не будут рандомированы все 8 чисел. - Внутри цикла вызывается процедура
Genдля каждого из двух столбцов таблицы. Выводится число из левого столбца и пробел, затем число из правого столбца. - После завершения цикла переменная
iувеличивается на единицу. - Перед началом цикла
whileвызывается функцияRandomize, чтобы инициализировать генератор случайных чисел. - После завершения цикла
whileвыводится символ новой строки (WriteLn).