crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> как в Qt работает qsrand и qrand
eldar85
  опции профиля:
сообщение 9.4.2010, 0:42
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


не могу понять как написать так чтобы выходила кстрока типа dfkjgi49vjodj55 - ну что то вроде этого))
что нужно вставить в функцию
qsrand(...); ???
в асистенте эта функция нифига не описана... может кто использовал и знает?
хотелось бы чтобы узнать как установить длину рандомного выражения и чтобы можно было и числа и буквы чтобы выдавал))

вот тут вроде числа получаются, но как сделать чтобы и буквы были и длинну можно было регулировать
 qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));


вот нашел как число получить например от 1 до 100
qrand()%100;

но опять же мне нужно чтобы одной длинны был код, к примеру 123456789 из 9 чмсел ну и буквы нужны...

хорошо бы и чисто буквенный рандом найти...

вот придумал как сделать рандом из пяти букв, блин но опять же проблема))) он еще с буквами и символы туда впихивает
QString d;
QString d2;
for(int j=0; j<5; j++)
{
d = qrand()%65^90;
d2.append(ddd);
d="";
}


в итоге такая шняга:
"qXIzd"
"}_T|O"
"JJ{kL"

вроде кодировку ascii поставил от 65 до 90, по идее должны же только большие латинские буквы выдаваться, а тут один хрен такая жопа...

проблема косяков была в том что хоть и пишешь
qrand()%65^90;

а он один хрен то 115 выдаст, то еще что нить))) в общем выходит за границы между 65 и 90...

пришлось сделать проверку на соответствие
int i;
for(int j=0; j<5; j++)
{
i = qrand()%65^90;
if(i<65 || i>90)
{
    j--;
}
else
{
   d.append(i);
}
i=0;
}

в итоге пять нормальных чисел выдает))
"TFPHV"
"MRWJP"
"BSQNE"
"SEWMP"
"PAWYB"
"AWKFJ"

вот так вполне уникальная хреновина получается))
int randInt1;
int randInt2;
QString d;
for(int i=0; i<5; i++)
{
randInt2 = qrand()%48^57;
randInt1 = qrand()%65^90;
if(randInt2>=48 && randInt2<=57)
{



if(randInt1<=65 || randInt1>=90)
{
    i--;
}
else
{
   d.append(randInt1);
   d.append(randInt2);
}
}
else
{
    i--;
}
randInt1=0;
randInt2=0;
}
qDebug() << d;


"O3I1V7M9F8"
"V1K8R5S4R7"
"N5H3B4M8I1"
"E8F1G8W7E0"
"O8F5C2E7R4"
"T8I1W5M3H2"
"G1I8J0B7W2"
"E4S7F1N3C3"
"H1O3G0O3C8"
"B3I7J6G9M2"
"L9K4W9M2R5"

но тут такая махина получилась, может все же есть универсальная рандомная функция с которой не придется так мозг греть, а просто задать в нее параметры типа [a-zA-Z0-9] к примеру и указть сколько символов чтобы выдала...

Сообщение отредактировал eldar85 - 9.4.2010, 0:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
eldar85
  опции профиля:
сообщение 9.4.2010, 20:32
Сообщение #2


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


почему то такой код
randInt2 = qrand()%25 + 65;

при каждом новом запуске программы выдает одинаковое число... если прога работает в цикле то выдаст разных вариантов, но при новом запуске программы все эти варианты тут же начинают повторяться в том же диапазоне...
получается вызвал я в цикле три раза, вышло три разных числа, закрыл прогу, запустил снова и снова теже три числа один в один...
не подскажите как бороться с этим???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 9.4.2010, 20:43
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(eldar85 @ 9.4.2010, 21:32) *
почему то такой код
randInt2 = qrand()%25 + 65;

при каждом новом запуске программы выдает одинаковое число... если прога работает в цикле то выдаст разных вариантов, но при новом запуске программы все эти варианты тут же начинают повторяться в том же диапазоне...
получается вызвал я в цикле три раза, вышло три разных числа, закрыл прогу, запустил снова и снова теже три числа один в один...
не подскажите как бороться с этим???

Посмотри на void qsrand ( uint seed )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 8:53