Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.64
Jack Wade
64 / 37 / 14
Регистрация: 24.02.2013
Сообщений: 250
#1

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

11.07.2013, 16:36. Просмотров 4571. Ответов 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, а здесь есть ли какой то более простой способ?
http://www.cyberforum.ru/c-beginners/thread1145818.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 16:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Генератор случайных чисел на С++ (Dev C++) (C (СИ)):

Генератор случайных чисел методом Фибоначчи
Всем доброе время суток...) Я понимаю етот вопрос был выведен на показ уж...

Генератор случайных чисел в заданном диапазоне
Дали новое задание доработать свою программу, что-бы массив заполнялся...

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

Генератор случайных чисел выдаёт некорректный результат
Необходимо, заполнить массив случайными числами из предела , но вместо этого...

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

12
ntrx
122 / 122 / 82
Регистрация: 03.01.2013
Сообщений: 241
11.07.2013, 16:52 #2
используйте srand(time(NULL)); для генерации случайного числа
0
Jack Wade
64 / 37 / 14
Регистрация: 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 / 4
Регистрация: 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
64 / 37 / 14
Регистрация: 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 / 4
Регистрация: 09.06.2013
Сообщений: 27
11.07.2013, 21:42 #6
500 кстати можешь поменять на другое число, я для примера его написал. Только числа идут там от нуля, поэтому 500 это от 0 до 499. Там стоит 1 + rand() %500; так что генерятся они от 1 до 500. Как то так.
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
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
64 / 37 / 14
Регистрация: 24.02.2013
Сообщений: 250
12.07.2013, 12:37  [ТС] #8
0x10, согласен. Можно было просто if (sel>1) exit;
Это для выхода из цикла. Т.е. вот Мне нужно было генерировать число каждый раз, когда пользователь введёт 1, во всех остальных случаях - выход из программы.
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
12.07.2013, 12:56 #9
Jack Wade, exit; - это не вызов фукции =_=
0
Jack Wade
64 / 37 / 14
Регистрация: 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
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
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 / 4
Регистрация: 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
12.07.2013, 17:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2013, 17:37
Привет! Вот еще темы с ответами:

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

Генератор случайных цветов
Добрый вечер проблема с случайным цветом всех возможных комбинациях цвета фона...

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

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


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

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

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