Не работает генерация рандомного числа - PascalABC.NET
Формулировка задачи:
Каждый раз программа дает 7, счетчик К работает правильно, а вот строка r:=random(1,k); дает всегда один и тот же результат. r:=random(k)+1; (что идентично по действию) дает такой же результат.
Что не так?
Решение задачи: «Не работает генерация рандомного числа»
textual
Листинг программы
Program test; function randomset(s: set of integer): integer; var num, k, i, r: integer; res: array[1..5] of integer; begin k := 0; foreach num in s do begin inc(k); res[k] := num; end; r:=random(1,k); result := res[r]; end; var s: set of integer; begin randomize; s+=[1,3,7,9,5]; write(randomset(s)); end.
Объяснение кода листинга программы
- Объявлены функции
randomsetиmain, а также переменныеnum,k,i,r,res. - В функции
randomsetперебираются все числа из множестваsс помощью циклаforeach. - Каждое число из множества
sдобавляется в массивresс индексомk. - Переменная
kинициализируется нулем. - В функции
mainвызывается функцияrandomizeдля инициализации генератора случайных чисел. - Множество
sзаполняется числами[1,3,7,9,5]. - Функция
randomsetвызывается с аргументомs, результат выводится на экран. - В функции
randomsetпеременнаяrинициализируется случайным числом в диапазоне от 1 доk. - Результатом работы функции
randomsetявляется элемент массиваresс индексомr. - Цикл
foreachзавершается, когда все элементы множестваsбудут добавлены в массивres. - Значение переменной
kне используется в коде. - Множество
sне изменяется внутри функцииrandomset. - Функция
randomsetне возвращает случайное число, а возвращает одно из чисел, добавленных в массивres. - Функция
randomizeиспользуется для инициализации генератора случайных чисел. - Значение переменной
rне используется в функцииmain. - Переменная
iне используется в функцииrandomset. - Переменная
numне используется в функцииrandomset. - Переменная
kне используется в функцииmain. - Переменная
iне используется в функцииmain. - Переменная
numне используется в функцииmain.