Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/58: Рейтинг темы: голосов - 58, средняя оценка - 4.67
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
1

Рандом выводит всегда одно и тоже число

17.09.2014, 14:21. Показов 11528. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C
1
mass[i]=rand();
всегда выводит число ниже, что делать?
-842150451
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2014, 14:21
Ответы с готовыми решениями:

Программа всегда выводит одно и тоже значение при разных вводимых данных
Не думаю, что дело в коде, но значение всегда выводилось n = 2 и pos = 2. #include "stdafx.h"...

Функция рандом. Как заставить чтоб одно и тоже число не сгенерировал больше 4 раза
Привет всем. Я пишу карточную игру(ну пытаюсь написать :pardon: ) белот. В игре 4 игроков. Я решил...

Орел-решка, всегда одно и тоже значение
При компиляции каждый раз получаю ответ "Решка" #include <iostream> #include <cstdlib> using...

Как написать код, чтобы рандом повторно не выводил одно и тоже число?
Как написать код, чтобы рандом повторно не выводил одно и тоже число. Например: Рандом от 1 до 5....

31
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
17.09.2014, 17:09  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Тамика Посмотреть сообщение
Покажите-ка мне, где у Вас переменная maxi объявлена. Я не нашла.
C++
1
 int a,j,k,i,*mass,max,maxi,maxsumm;
13-я строчка
какая разница между объявлена и инициализирована?
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
17.09.2014, 17:09 22
Цитата Сообщение от ecofreeon Посмотреть сообщение
13-я строчка
А где инициализирована?
0
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
17.09.2014, 17:11  [ТС] 23
Цитата Сообщение от Тамика Посмотреть сообщение
А где инициализирована?
что это значит?
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
17.09.2014, 17:13 24
Цитата Сообщение от ecofreeon Посмотреть сообщение
какая разница между объявлена и инициализирована?
Объявлена - это
C++
1
int a;
Инициализирована - это присвоено значение переменной.
C++
1
int a = 10;
В первом варианте в переменной а будет значение(мусор) вида -83523854395 и так далее. А во втором 10.

Добавлено через 1 минуту
Цитата Сообщение от ecofreeon Посмотреть сообщение
что это значит?
Ладно. Думала достучаться. Но скажу в лоб.
C++
1
2
3
4
5
if (mass[i]>mass[maxi]);
            {
                max=mass[i];
                maxi=i;
            }
Во-первых - точка с запятой после проверки условия не нужна. Во-вторых - mass[maxi] - чему здесь будет равно maxi?
0
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
17.09.2014, 17:15  [ТС] 25
Цитата Сообщение от Тамика Посмотреть сообщение
чему здесь будет равно maxi?
даже не знаю. я понял о чем Вы, я не задал начального значения переменной, так что "мусору"? блин, в который раз ставлю точку с запятой после условия...
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
17.09.2014, 17:16 26
Цитата Сообщение от ecofreeon Посмотреть сообщение
даже не знаю. я понял о чем Вы, я не задал начального значения переменной, так что "мусору"?
Так что там будет мусор. Да. Потому дайте значение переменной.
1
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
17.09.2014, 17:18  [ТС] 27
Цитата Сообщение от Тамика Посмотреть сообщение
Потому дайте значение переменной.
обнулил, заработало, спасибо, но рандом так и не рандомит
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
17.09.2014, 17:23 28
Лучший ответ Сообщение было отмечено ecofreeon как решение

Решение

Я не хочу углубляться в код(боюсь, что не вернусь потом из этой пещеры Сатаны), но отладчик показал, что если выбрать тройку в меню, то программа даже не заходит в зону
C++
1
2
3
4
5
6
7
 if (j==3)
        {
            for (i = 0; i < a; i++)
            {
                mass[i] = rand() % 100;
            }
        }
Проверьте структуру.

Добавлено через 1 минуту
C++
1
if(j==5) break;
Это зачем?
C++
1
if(j==5) break;
Еще раз встречается в программе. Аналогичный вопрос.
C++
1
 if(j==5) break;
Третий раз.
C++
1
if(j==5) k=1;
Внезпано.о_О
0
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
17.09.2014, 17:29  [ТС] 29
Цитата Сообщение от Тамика Посмотреть сообщение
Проверьте структуру.
да, действительно, поставил код после того, как запрещаю считывать "3", спасибо огромное!

Добавлено через 54 секунды
Цитата Сообщение от Тамика Посмотреть сообщение
Это зачем?
чтобы почти в любой момент времени закончить программу
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
17.09.2014, 17:30 30
Цитата Сообщение от ecofreeon Посмотреть сообщение
чтобы почти в любой момент времени закончить программу
Это очень странно. И глуповато.
Советую заменить всё это на аккуратный и миниатюрный код с использованием switch.
0
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
18.09.2014, 11:19  [ТС] 31
Цитата Сообщение от Тамика Посмотреть сообщение
switch.
вы уже не первая) на досуге почитаю про switch и постараюсь сделать все красиво! Еще раз спасибо

Добавлено через 17 часов 7 минут
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
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#include "stdafx.h"
#include <clocale>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
 
 void main()
 {
     setlocale(LC_ALL, "Russian"); 
     setlocale(LC_ALL, "rus");
 
     int a,j,k,i,*mass,max,maxi,maxsumm;
     bool flag;
 
     k=0;
     while(k==0)
     {
        fflush(stdin);
        printf("Вы можете выбрать несколько возможностей, для выбора нажмите соответсвующую клавишу\n");
        printf("1.Ввести кол-во элементов массива\n");
        printf("2.Ввести элементы вручную\n");
        printf("3.Рандомно заполнить массив\n");
        printf("4.Вывести массив на экран\n");
        printf("5.Выход из программы.\n");
        printf("6.Повторить еще раз\n");
        flag=false;  
        while(!flag)
        {
             fflush(stdin);
             flag=scanf_s("%d", &j);
             if (!flag) printf("введите число\n");
             if((j<1) || (j>5))
             {
                 flag=false;
                 printf("введите число от 1 до 5\n");
             }
        }
        if(j==5) break;
        while(j!=1)
        {
        printf("Вы не ввели кол-во элементов массива, мы не можем работать, выберите пункт 1\n");
        flag=false;  
        while(!flag)
        {
             fflush(stdin);
             flag=scanf_s("%d", &j);
             if (!flag) printf("введите число\n");
             if(j!=1)
             {
                 flag=false;
                 printf("введите число 1\n");
             }
        }
        }
        if (j==1)
             {
                flag=false;  
                printf("Введите количество элементов\n");
                while(!flag)
                {
                    fflush(stdin);
                    flag=scanf_s("%d", &a);
                    if (!flag) printf("введите число\n");
                    if((a < 1) || (a > 100))
                        {
                            flag=false;
                            printf("введите число от 1 до 100\n");
                        }
                }
                mass = new int[a];           
              }
               printf("Введите следующее число\n");
               flag=false;  
               while(!flag)
               {
                    fflush(stdin);
                    flag=scanf_s("%d", &j);
                    if (!flag) printf("введите число\n");
                    if((j < 2) || j>5 || j==4)
                    {
                        flag=false;
                        printf("введите число 2,3 или 5\n");
                    }
               }
               if(j==5) break;
               if (j==2)
               {
                    printf("ведите элементы массива через пробел\n");
                    for (i = 0; i < a; i++)
                    {
                        scanf_s("%d", &mass[i]);
                    }
               }
               if (j==3)
               srand(time(NULL));
               {
                    for (i = 0; i < a; i++)
                    {
                        mass[i]=rand() % 100;
                    }
               }
               printf("Введите следующее число\n");
               flag=false;  
               while(!flag)
               {
                    fflush(stdin);
                    flag=scanf_s("%d", &j);
                    if (!flag) printf("введите число\n");
                    if(j<4 || j>5)
                    {
                        flag=false;
                        printf("введите число 4 или 5\n");
                    }
               }
        if(j==5) break;
        if(j==5) k=1;
        if (j==4)
        {
            for (i = 0; i < a; i++)
               {
                 printf("%d ",mass[i]); 
               }
        }
        printf("\n");
        if(j==5) break;
        printf("Теперь будет выведен номер максимального элемента и сумма элементов после максимального\n");
        max=0;
        maxi=0;
        for (i = 0; i < a; i++)
        {
            if (mass[i]>mass[maxi])
            {
                max=mass[i];
                maxi=i;
            }
        }
        for (i = maxi+1; i < a; i++)
        {
            maxsumm=maxsumm+mass[i];
        }
        printf("номер максимального элемента=");
        printf("%d\n", maxi+1);
        printf("Сумма элементов после максимального=");
        printf("%d\n", maxsumm);
        printf("Выберите пункт 5 или 6\n");
               flag=false;  
               while(!flag)
               {
                    fflush(stdin);
                    flag=scanf_s("%d", &j);
                    if (!flag) printf("введите число\n");
                    if(j<5 || j>6)
                    {
                        flag=false;
                        printf("введите число 5 или 6\n");
                    }
               }
        if(j==5) k++;
        if(j==6) k=0;
        delete [] mass;
     }
 }
Добавлено через 39 минут
хмммммммм... когда ввожу вручную выводит не то, что надо
0
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
19.09.2014, 12:17  [ТС] 32
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
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include "stdafx.h"
#include <clocale>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int getmass(int minm, int maxm)
{
    int num;
    bool flagm;
 
    flagm=false;
    while(!flagm)
    {
        fflush(stdin);
        flagm=scanf_s("%d", &num);
        if (!flagm) printf("Введите число\n");
        if(num < minm || num > maxm)
        {
            flagm=false;
            printf("Введите число в диапазне от %d до %d\n", minm,maxm);
        }
    }
    return num;
}
 void main()
 {
     setlocale(LC_ALL, "Russian"); 
     setlocale(LC_ALL, "rus");
 
     int a,j,k,i,*mass,max,maxi,maxsumm;
     bool flag;
 
     k=0;
     srand(time(NULL));
     while(k==0)
     {
        fflush(stdin);
        printf("Вы можете выбрать несколько возможностей, для выбора нажмите соответсвующую клавишу\n");
        printf("1.Ввести кол-во элементов массива\n");
        printf("2.Ввести элементы вручную\n");
        printf("3.Рандомно заполнить массив\n");
        printf("4.Вывести массив на экран\n");
        printf("5.Выход из программы.\n");
        printf("6.Повторить еще раз\n");
        flag=false;  
        while(!flag)
        {
             fflush(stdin);
             flag=scanf_s("%d", &j);
             if (!flag) printf("введите число\n");
             if((j<1) || (j>5))
             {
                 flag=false;
                 printf("введите число от 1 до 5\n");
             }
        }
        if(j==5) break;
        while(j!=1)
        {
        printf("Вы не ввели кол-во элементов массива, мы не можем работать,выберите пункт 1\n");
        flag=false;  
        while(!flag)
        {
             fflush(stdin);
             flag=scanf_s("%d", &j);
             if (!flag) printf("введите число\n");
             if(j!=1)
             {
                 flag=false;
                 printf("введите число 1\n");
             }
        }
        }
        if (j==1)
             {
                flag=false;  
                printf("Введите количество элементов\n");
                while(!flag)
                {
                    fflush(stdin);
                    flag=scanf_s("%d", &a);
                    if (!flag) printf("введите число\n");
                    if((a < 1) || (a > 100))
                        {
                            flag=false;
                            printf("введите число от 1 до 100\n");
                        }
                }
                mass = new int[a]; 
                for (i = 0; i < a; i++)
                {
                    mass[i]=0;
                }
              }
               printf("Введите следующее число\n");
               flag=false;  
               while(!flag)
               {
                    fflush(stdin);
                    flag=scanf_s("%d", &j);
                    if (!flag) printf("введите число\n");
                    if((j < 2) || j>5 || j==4)
                    {
                        flag=false;
                        printf("введите число 2,3 или 5\n");
                    }
               }
               if(j==5) break;
               if (j==2)
               {
                    printf("ведите элементы массива через enter\n");
                    for (i = 0; i < a; i++)
                    {
                        printf("a[%d]=",i+1);
                        mass[i]=getmass(-10000,10000);
                    }
               }
               if (j==3)
               {
                    for (i = 0; i < a; i++)
                    {
                        mass[i]=rand() % 100;
                    }
               }
               printf("Введите следующее число\n");
               flag=false;  
               while(!flag)
               {
                    fflush(stdin);
                    flag=scanf_s("%d", &j);
                    if (!flag) printf("введите число\n");
                    if(j<4 || j>5)
                    {
                        flag=false;
                        printf("введите число 4 или 5\n");
                    }
               }
        if(j==5) break;
        if (j==4)
        {
            for (i = 0; i < a; i++)
               {
                 printf("%d ",mass[i]); 
               }
        }
        printf("\n");
        if(j==5) break;
        printf("Теперь будет выведен номер максимального элемента и сумма элементов после максимального\n");
        max=0;
        maxi=0;
        for (i = 0; i < a; i++)
        {
            if (mass[i]>mass[maxi])
            {
                max=mass[i];
                maxi=i;
            }
        }
        for (i = maxi+1; i < a; i++)
        {
            maxsumm=maxsumm+mass[i];
        }
        printf("номер максимального элемента=%d\n", maxi+1);
        printf("Сумма элементов после максимального=%d\n",maxsumm);
        printf("Выберите пункт 5 или 6\n");
               flag=false;  
               while(!flag)
               {
                    fflush(stdin);
                    flag=scanf_s("%d", &j);
                    if (!flag) printf("введите число\n");
                    if(j<5 || j>6)
                    {
                        flag=false;
                        printf("введите число 5 или 6\n");
                    }
               }
        if(j==5) k++;
        if(j==6) k=0;
        delete [] mass;
     }
     delete [] mass;
 }
0
19.09.2014, 12:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2014, 12:17
Помогаю со студенческими работами здесь

Переменная $clientSession всегда содержит одно и тоже число
Есть файл header.php &lt;?php session_start(); #даем посетителям номер $clientSession=$_SESSION;...

Random всегда выводит одно и то же число
Всем пт! У меня следующая проблема: Данный код выводит всегда одно и то же число, хотя, по...

Рандом в каждом потоке генерирует одно и тоже значение
Снова я, нуб :( Создается рандом в каждом потоке, и генерирует одно и то же значение во всех...

NotifyIcon.ShowBalloonTip всегда отображается одно и тоже время
Почему когда я задаю разные значения времени для ShowBalloonTip, они всегда отображаются одно и...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru