Не принимайте меня уж совсем за ламера
В дельфи это просто, здесь возникают вопросы, например почему random возвращает extended, как ограничить диапазон random+некоторые несовместимости типов. Можно конечно поизвращаться, получать ПСП из даты/времени, но зачем раз есть функция.
Просто с FS раньше не работал, потому спросил.
Блин, Ну как реализуется простейший генератор паролей(ПСП)
написал:
function GetRandomString(NumChar: cardinal): string;
const CharMap='qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM1234567890';
var
i: integer;
MaxChar: cardinal;
begin
randomize;
MaxChar := length(CharMap) - 1;
for i := 1 to NumChar do
Result := result + CharMap[Random(maxChar) + 1];
end;
1. Мы должны иметь функцию, возвращающее случайное значение из определенного диапазона.
2. Функция должна возвращать целое значение.
Вы пожалуйста давайте ответ в комплексе. Я уже говорил, что МОЖНО извратиться и эмулировать работу функции random. Однако был задан четкий вопрос, как реализовать функцию генерации ПСП (случайной строки, пароля).
ИМХО в таком виде функция random для прикладных целей не нужна.
Никто не даст гарантию, что она попадет в нужный диапазон.
Random returns a random number within the range 0 <= X < Range. If Range is not specified, the result is a real-type random number within the range
0 <= X < 1.
В FastScript'е реализован второй вариант. Т.е. вызов без параметров.
Надеюсь теперь понятно что Round(Random * maxChar + 1) всегда вернет случайное число в нужном диапазоне (от 0 до maxChar)
написал:
Однако был задан четкий вопрос, как реализовать функцию генерации ПСП (случайной строки, пароля).
Ваш пример с моей поправкой будет делать то что вам надо.
Комментарии
В дельфи это просто, здесь возникают вопросы, например почему random возвращает extended, как ограничить диапазон random+некоторые несовместимости типов. Можно конечно поизвращаться, получать ПСП из даты/времени, но зачем раз есть функция.
Просто с FS раньше не работал, потому спросил.
Не очень то я вас понимаю. Приведите конкретные примеры.
2. Функция должна возвращать целое значение.
CharMap[Round(Random * maxChar + 1)];
ИМХО в таком виде функция random для прикладных целей не нужна.
Никто не даст гарантию, что она попадет в нужный диапазон.
Надеюсь теперь понятно что Round(Random * maxChar + 1) всегда вернет случайное число в нужном диапазоне (от 0 до maxChar)
Ваш пример с моей поправкой будет делать то что вам надо.
ЗЫ. оффтоп