|
|
|
| Здравствуйте, вообщем вопрос прост как сделать выпадение случайных чисел, по гуглил везьде нахожу подобное:
...
srand(time(0));
int y = rand();
...
но выпадает не случайное число а возрастающее число при каждом запуске, помогите | |
|
|
|
|
|
|
|
для: Dazzl
(26.07.2012 в 16:40)
| | rand() генерирует псевдослучайное целое число на интервале от 0 до RAND_MAX, константы, которая варьируется, в зависимости от реализации языка. В большинстве случаев составляет 32767. Чтобы ввести диапазон псевдослучайных чисел, нужно, например, так написать: ..............
srand(time(0));
int y = rand() % 10; // псевдослучайное целое число от 0 до 9.
.................. | или так:..............
srand(time(0));
int y = rand() % 100 + 1; // псевдослучайное целое число от 0 до 100.
.................. |
| |
|
|
|
|
|
|
|
для: alsav22
(30.07.2012 в 04:25)
| | Как реализовать рандомное выпадение символов из заданного диапазона ASCII, по заданному количеству символов?
Интересуют латинские буквы, знаки препинания и опционально некоторые спецсимволы.
Хочу свой кейген реализовать :) | |
|
|
|
|
|
|
|
для: alsav22
(30.07.2012 в 04:25)
| | А лучше пару раз подвергать этому процессу - первый раз время, а второй раз за входной параметр полученное число. Но один фиг число по наблюдениям предсказуемо :(
Еще пару генерированных чисел можно использовать, одно с реверсом можно, разбить пополам и применить перестановку к одной части... и другие извращения применить | |
|
|
|
|
|
|
|
для: KernelPanic
(01.08.2012 в 14:27)
| | Разобрался со своим вопросом. Генерировать буду по диапазону из таблицы символов в ASCII. Буквы от 41h до 5A и +20h прописные. И с символами от 21h до 7Eh.
Запись в массив и выдача результата уже в char.
Возможно есть способ проще? | |
|
|
|
|
|
|
|
для: KernelPanic
(01.08.2012 в 17:57)
| | Собственно, это самое простое - сформировать массив нужных вам символов и выбрать случайный элемент массива. | |
|
|
|
|
|
|
|
для: cheops
(02.08.2012 в 14:07)
| | В некоторых книгах встречаю написание функции не "rand" а "random". И отличие как понял в том, что в последнем случае возможно задать диапазон значений, в каком выдавать случайные числа.
например: a=random(10) -5;
Залез в stdlib.h - там только о srand и rand упоминания есть.
Просто лень было массив создавать и хотел динамически генерировать из определенного диапазона числа.
Как понял отказались от функции random - почему?
Функцию rand невозможно заставить выдавать значения от X до Y, только от нуля? | |
|
|
|
|
|
|
|
для: KernelPanic
(04.08.2012 в 04:52)
| | Пришлось массив в ручную забивать :(
Вот что получилось на скорую руку:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
main()
{
printf("Viberite punkt\n");
printf("**************\n1.Tolko chisla\n2.Tolko Bukvi\n3.Bukvi i chisla\n4.Bukvi, chisla i simvoly\n");
int w;
scanf("%d",&w);
printf("Vvedi chislo simvolov\n");
int a;
scanf("%d", &a);
srand(time(NULL));
switch(w)
{
case 1://chisla
{
int x,b;
for(x=0; x<a; x++)
{
b=rand()%10;
printf("%d",b);
}
return 0;
}
case 2://tolko bukvi
{
int c[]={
65,66,67,68,69,70,71,72,73,74,75,76,77,
78,79,80,81,82,83,84,85,86,87,88,89,90,
97,98,99,100,101,102,103,104,105,106,107,
108,109,110,111,112,113,114,115,116,117,
118,119,120,121,122
};
int x,b;
for(x=0; x<a; x++)
{
b=rand()%52;
printf("%c",c[b]);
}
return 0;
}
case 3:
{
int c[]={
48,49,50,51,52,53,54,55,56,57,
65,66,67,68,69,70,71,72,73,74,
75,76,77,78,79,80,81,82,83,84,
85,86,87,88,89,90,97,98,99,100,
101,102,103,104,105,106,107,108,
109,110,111,112,113,114,115,116,
117,118,119,120,121,122
};
int x,b;
for(x=0; x<a; x++)
{
b=rand()%62;
printf("%c",c[b]);
}
return 0;
}
case 4: //Bukvi, chisla i simvoly
{
int c[]={
33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,
63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,
78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,
93,94,95,96,97,98,99,100,101,102,103,104,105,
106,107,108,109,110,111,112,113,114,115,116,117,
118,119,120,121,122,123,124,125,126
};
int x,b;
for(x=0; x<a; x++)
{
b=rand()%93;
printf("%c",c[b]);
}
return 0;
}
}
}
|
Может что не так написал?
Числа вроде как выдает вразнабой, что от программы и требовалось. | |
|
|
|
|
|
|
|
для: KernelPanic
(04.08.2012 в 04:52)
| | Вообще язык C изначально идет практически без библиотек, библиотеками в том числе стандартными он стал обрастать значительно позже. Стандарт С был утвержден в 1999 году, а чуть позже был стандартизирован и C++. Стандартные библиотеки содержат только rand(), random() скорее всего уже из какой-то сторонней библиотеки (она, кстати, в книге должна быть обязательно указана).
В любом случае rand() выдает результаты от 0 до RAND_MAX. Вы всегда можете нормировать случайные значения на любой интервал (в том числе и отрицательный). | |
|
|
|
|
|
|
|
для: cheops
(06.08.2012 в 10:40)
| | И действительно - книги написаны до 1999 года.
Например одна у меня сейчас в руках - К. Джамса "1001 совет по С/С++" На английском вышла в 1993г., на русском в 1997г. В основном к ней и прибегаю при возникновении вопросов.
Кстати библиотека stdlib.h - там еще и ф-ция randomize рассматривается.
Какую бы книгу по чистому С почитать посвежее, чтобы так же структурировано и понятно было написано? | |
|
|
|
|
|
|
|
для: KernelPanic
(06.08.2012 в 12:33)
| | Собственно методика изучения C/C++ уже отлажена, можно ориентироваться почти на любую книгу, например, того же Шилдта C++: базовый курс.
Дело в том, что с 1993 года довольно много воды утекло и программы на C++ сейчас пишут несколько по-другому, а скоро еще раз сменится стандарт. | |
|
|
|
|