crossplatform.ru

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


  Ответ в как в Qt работает qsrand и qrand
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Гость_Андрей_* Дата 28.3.2013, 12:14
  Вот так описано использование в документации
http://www.developer.nokia.com/Community/W..._integers_in_Qt

#include <QGlobal.h>
#include <QTime>
 
int QMyClass::randInt(int low, int high)
    {
    // Random number between low and high
    return qrand() % ((high + 1) - low) + low;
    }
// Create seed for the random
// That is needed only once on application startup
QTime time = QTime::currentTime();
qsrand((uint)time.msec());
 
// Get random value between 0-100
int randomValue = randInt(0,100);
Гость Дата 12.4.2012, 11:10
  int randInt;
QString myString;
for(int i=0; i<5; i++)
{
randInt = qrand()%('Z'-'A'+1)+'A';
myString.append(randInt);
}
qDebug() << myString;
eldar85 Дата 9.4.2010, 21:36
  да спасибо, подставил уже
qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()));

и отлично все работает)))
BRE Дата 9.4.2010, 20:43
 
Цитата(eldar85 @ 9.4.2010, 21:32) *
почему то такой код
randInt2 = qrand()%25 + 65;

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

Посмотри на void qsrand ( uint seed )
eldar85 Дата 9.4.2010, 20:32
  почему то такой код
randInt2 = qrand()%25 + 65;

при каждом новом запуске программы выдает одинаковое число... если прога работает в цикле то выдаст разных вариантов, но при новом запуске программы все эти варианты тут же начинают повторяться в том же диапазоне...
получается вызвал я в цикле три раза, вышло три разных числа, закрыл прогу, запустил снова и снова теже три числа один в один...
не подскажите как бороться с этим???
ufna Дата 9.4.2010, 12:32
  ну "^" - битовый xor. Причем здесь вообще эта операция? Она не гарантирует, что результат будет обязательно меньше "b" :)

;)
eldar85 Дата 9.4.2010, 10:00
  не правельно? если не сложно подскажите что дает тогда операция "^" и "+"??)

randInt2 = qrand()%25 + 65;

спасибо, понял как работает, это получается будет вызываться любой из 25 символово после 65 в таблище ascii)))
большое спасибо))
ufna Дата 9.4.2010, 0:56
  Вы неправильно используете операцию "^".

К примеру:
randInt2 = qrand()%48^57;

что будет, если qrand() даст вам 5?


Вам нужно что-то вида

randInt2 = qrand()%25 + 65;
eldar85 Дата 9.4.2010, 0:42
  не могу понять как написать так чтобы выходила кстрока типа 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] к примеру и указть сколько символов чтобы выдала...
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 11:56