Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.64
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
#1

Генератор случайных чисел на С++ (Dev C++) - C (СИ)

11.07.2013, 16:36. Просмотров 3886. Ответов 12
Метки нет (Все метки)

Подскажите пожалуйста, Мне нужно написать генератор случайных чисел, однако всегда генерируется одно и то же число.
Мне нужно, что бы генератор генерировал числа от 1, т.е. что бы была вероятность того, что выпадет 1 и что бы была вероятность того, что выпадет одно и то же число.

Программа каждый раз в результате выводит число 41...

Если что - пишу на Dev C++...

C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int main(void)
{
    srand(1);
    int x=rand();
    printf("Result = %d", x);
    getch();
}
P.S. Вот в Pascal/Delphi была функция Random, а здесь есть ли какой то более простой способ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 16:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Генератор случайных чисел на С++ (Dev C++) (C (СИ)):

Не работает генератор случайных чисел - C (СИ)
Здравствуйте, не работает рандомщик. Скажите, пожалуйста, как подправить код. #include &lt;iostream&gt; #include &lt;time.h&gt; #include...

Генератор случайных чисел в диапазоне от 0 до 1 (не целых) - C (СИ)
Здравствуйте! Помогите пожалуйста. Вроде весь форум просмотрела,но ответа не нашла. Мне нужно сгенерировать случайное число в диапазоне...

Генератор случайных чисел методом Фибоначчи - C (СИ)
Всем доброе время суток...) Я понимаю етот вопрос был выведен на показ уж много раз в подобныж формах, но тем не менее, это уже стало...

Генератор случайных чисел выдаёт некорректный результат - C (СИ)
Необходимо, заполнить массив случайными числами из предела , но вместо этого результат выполнения кода выглядит примерно как: 6422216 ...

Вычислить площадь круга, используя генератор случайных чисел - C (СИ)
Ребят напишите пожалуйсто прогу на Си &quot;Вычислить площадь круга,используя гениратор случайных чисел&quot; Пожалуйсто помогите )))

Заполнить элементы массивов, используя генератор случайных чисел - C (СИ)
Составить одномерный массив. В заданиях необходимо заполнить элементы массивов, используя генератор случайных чисел.

12
ntrx
122 / 122 / 19
Регистрация: 03.01.2013
Сообщений: 241
11.07.2013, 16:52 #2
используйте srand(time(NULL)); для генерации случайного числа
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
11.07.2013, 19:48  [ТС] #3
ntrx, так программа тогда будет генерировать около 31899, а при следующей генерации уже 31901... Т.е. будет увеличиваться тупо на 1-цу...
В Pascal этот код был бы таким:
Pascal
1
2
3
4
5
6
Var i:Integer;
Begin
i:=Random(100);
Writeln(i);
Readln;
End.
И программа генерировала бы к примеру сперва 5, потом 86, потом 1, потом 43... А здесь 38901, 38902...

Добавлено через 12 минут
При этом коде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
 
int main(void)
{
    
    srand(time(NULL));
    int x=rand();
    printf("Result = %d", x);
    getch();
}
Программе генерирует сперва 406, далее 407, 408...
Запускаю программу с интервалом в 1 секунду(именно запускаю, а не пишу условие запуска какой либо функции)...
0
BraunDe
7 / 7 / 1
Регистрация: 09.06.2013
Сообщений: 27
11.07.2013, 21:10 #4
Вот набросал вроде похоже на рандом

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int main()
{
    srand (time (0));
    int x,j=0;
    int mas[128];
    printf("Skolko generirovat chisel?\n");
    scanf ("%d", &x);
    for(int i=1;i<=x;i++)
    {
        int rnum = 1 + rand() % 500;
        printf("%d ", rnum);
        mas[j]=rnum;
        j++;
 
    }
    printf("\nProsmotr massiva\n");
    for(j=0;j<=(x-1);j++)
    printf("%d ", mas[j]);
 
    getch();
    return 0;
}
1
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
11.07.2013, 21:34  [ТС] #5
BraunDe, большое спасибо! Теперь получилось что то более менее, относительно, но похожее на привычный Random!

Вот весь код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
 
int main(void)
{
    setlocale(LC_ALL,"Russian_Russia");
    int x=0;
    srand(time(0));
    int sel;
    while (sel!=1)
    
    ProgBegin:
      {
          printf("Äëÿ ГЈГҐГ*ГҐГ°Г*öèè Г·ГЁГ±Г«Г* - Г*Г*æìèòå 1 \n");
          printf("Г‚ ГЁГ*Г*îì ñëó÷Г*ГҐ - âûõîä ГЁГ§ ïðîãðГ*ììû \n");
          scanf("%d", &sel);
          
            if (sel==1)
              {
                       system("cls");
                       x=1 + rand() %500;
                       printf("Ñëó÷Г*Г©Г*îå ÷èñëî = %d \n", x);
                       printf("Äëÿ ïðîäîëæåГ*ГЁГї, Г*Г*æìèòå ENTER");
                       getch();
                       system("cls");
              }
            if (sel!=1) goto exst;
      }
    goto ProgBegin;
    
    exst: exit;
}
0
BraunDe
7 / 7 / 1
Регистрация: 09.06.2013
Сообщений: 27
11.07.2013, 21:42 #6
500 кстати можешь поменять на другое число, я для примера его написал. Только числа идут там от нуля, поэтому 500 это от 0 до 499. Там стоит 1 + rand() %500; так что генерятся они от 1 до 500. Как то так.
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,099
12.07.2013, 07:19 #7
Цитата Сообщение от Jack Wade Посмотреть сообщение
Запускаю программу с интервалом в 1 секунду
Зачем? Оо

Цитата Сообщение от Jack Wade Посмотреть сообщение
C++
1
2
3
4
5
while (sel!=1)
ProgBegin:
...
goto ProgBegin;
exst: exit;
Это что вообще за ересь?
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
12.07.2013, 12:37  [ТС] #8
0x10, согласен. Можно было просто if (sel>1) exit;
Это для выхода из цикла. Т.е. вот Мне нужно было генерировать число каждый раз, когда пользователь введёт 1, во всех остальных случаях - выход из программы.
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,099
12.07.2013, 12:56 #9
Jack Wade, exit; - это не вызов фукции =_=
0
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
12.07.2013, 16:03  [ТС] #10
0x10, ну, правильно?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
 
int main(void)
{
    setlocale(LC_ALL,"Russian_Russia");
    int x=0;
    srand(time(0));
    int sel;
    while (sel!=1)
    
    ProgBegin:
      {
          printf("Вывод случайного числа: 1 \n");
          printf("В ином случае - выход из программы \n");
          scanf("%d", &sel);
          
            if (sel==1)
              {
                       system("cls");
                       x=1 + rand() %500;
                       printf("Ваше случайное число = %d \n", x);
                       system("pause");
                       getch();
                       system("cls");
                       goto ProgBegin;
              }
 
            if (sel!=1) break;
      }
    
    system("cls");
    printf("Программа завершена");
    getch();
}
В общем - если переменная sel не равна единице, то происходит выход из цикла...
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,099
12.07.2013, 16:11 #11
Прошу пардону, но это жесть.

Добавлено через 55 секунд
1. Выкидываем goto.
2. Выкидываем system().
3. Выкидываем conio со всеми вытекающими.
4. Выкидываем iostream.

Добавлено через 2 минуты
Остается примерно так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    int x = 0;
    srand(time(0));
 
    int sel;
    
    while (1)
    {
        printf("Вывод случайного числа: 1 \n");
        printf("В ином случае - выход из программы \n");
        scanf("%d", &sel);
 
        if (sel != 1)
            break;
        
        x = 1 + rand() % 500;
        printf("Ваше случайное число = %d \n\n", x);
    }
 
    printf("Программа завершена");
 
    return 0;
}
0
BraunDe
7 / 7 / 1
Регистрация: 09.06.2013
Сообщений: 27
12.07.2013, 17:21 #12
Цитата Сообщение от 0x10 Посмотреть сообщение
Прошу пардону, но это жесть.

Добавлено через 55 секунд
1. Выкидываем goto.
2. Выкидываем system().
3. Выкидываем conio со всеми вытекающими.
4. Выкидываем iostream.
Я думаю что он хотел что бы экран всё таки чистился, а не был загроможденным.
0
0x10
12.07.2013, 17:37     Генератор случайных чисел на С++ (Dev C++)
  #13

Не по теме:

BraunDe, верю, сам на первом курсе переболел консольными менюшками, очисткой экрана и прочим. Сейчас же хочется, чтобы такие примитивные задачи не требовали платформозависимых вещей. В частности, у меня не будет работать ни команда "cls", ни компилироваться исходник из-за отсутствия conio.h в моей системе. Мне это кажется элементарной культурой написания подобных программ.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2013, 17:37
Привет! Вот еще темы с ответами:

Генератор случайных цветов - C (СИ)
Добрый вечер проблема с случайным цветом всех возможных комбинациях цвета фона и цвета символов, как можно сделать такой генератор...

Дан массив вещественных случайных чисел. Подсчитать сумму положительных чисел - C (СИ)
Дан массив вещественных случайных чисел (размер массива определяет пользователь, но в диапазоне ). Подсчитать сумму положительных чисел.

Дан массив целых случайных чисел. Указать индексы всех нечетных чисел - C (СИ)
Дан массив целых случайных чисел (размер массива определяет пользователь, но в диапазоне ). Указать индексы всех нечетных чисел.

Генератор чисел из n по m - C (СИ)
привет, мне надо заполнить массив &quot;а&quot; рандомными числами(предположим размерность массива 10) и потом из массива &quot;а&quot; в массив &quot;b&quot; занести 5...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
12.07.2013, 17:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru