Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
aletelegov
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
1

Массив случайных неповторяющихся чисел

13.06.2012, 13:58. Просмотров 4670. Ответов 34
Метки нет (Все метки)

Ребят работал всю ночь и сейчас голова не пашет! объясните в чем проблема
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
{
                                  n: int a = rand()%20+1;
   {
            for (int j=1; j<10; j++)
            {
                if (mase[j] == a)
                {
                    goto n;
                }
            }
            mase[post]=a;
            cout <<mase[post]<< endl;
                                  post++;
}
post и mase[] - глобальные перменные
и как бы я не страрался все время числа повторяются
по логике вроде все правильно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2012, 13:58
Ответы с готовыми решениями:

Генератор случайных неповторяющихся чисел
Народ помогите! Проблема следующая. Я создал массив и заполнил его числами с...

Матрица из случайных неповторяющихся чисел
Здравствуйте! В C++ я новичок (что по-моему и так понятно, иначе этого вопроса...

Составить функцию, которая возвращает N случайных неповторяющихся целых чисел из диапазона
Помогите плизз Составить функцию, которая возвращает N случайных ...

Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел
Преобразовать одномерный массив вещественных случайных чисел в массив целых...

Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает
Задание: Нужно вывести массив из случайных чисел. Размер массива 8. Случайные...

34
cactus09
Чайник
69 / 69 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 14:28 2
А ты написал строчку
C++ (Qt)
1
srand(time(0));
(требует #include <time.h>) - эта штука задает какой параметр для rand (для его корректной работы), точно не скажу
0
aletelegov
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 14:32  [ТС] 3
нет, но это все равно не помогает. Ошибка в логике, где-то надо break поставить или что-то такое, но я хз где, поэтому и прошу помощи
0
cactus09
Чайник
69 / 69 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 14:37 4
А ты просто не можеш поставить
Цитата Сообщение от aletelegov Посмотреть сообщение
int a = rand()%20+1;
в

Цитата Сообщение от aletelegov Посмотреть сообщение
if (mase[j] == a) {
И нафиг убрать goto - а то поему у тя получается почти бесконечный цикл
0
aletelegov
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 14:41  [ТС] 5
нет бесконечного цикла нет, ибо условие выхода доситгается после проверки 10 чисел
а переставил и все равно фигня
0
cactus09
Чайник
69 / 69 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 14:46 6
Цитата Сообщение от aletelegov Посмотреть сообщение
ибо условие выхода доситгается после проверки 10 чисел
Да только после каждого goto у тя начинается for сначала
Попробуй переставить
Цитата Сообщение от aletelegov Посмотреть сообщение
int j=1
перед

Цитата Сообщение от aletelegov Посмотреть сообщение
n: int a = rand()%20+1;
0
aletelegov
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 14:53  [ТС] 7
нет все равно
0
cactus09
Чайник
69 / 69 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 15:06 8
Если я все правильно понял, то вот - все работает норм
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main()
{
 
  int mase[10],post=0,a;
  
   srand(time(0));
            for (int j=0; j<10; j++)
            {
                if (mase[j] == (a = rand()%20+1)){}
 
            }
            mase[post]=a;
            cout <<mase[post]<< endl;
   post++;
  
  system("PAUSE");  
  return 0;
}
1
aletelegov
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 15:17  [ТС] 9
во то что надо, спс
0
cactus09
Чайник
69 / 69 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 15:23 10
Ой, сори, я чото ступил, вот
C++ (Qt)
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
 
  int mase[10],post=0,a;
  srand(time(0));
  a = rand()%20+1;
   
            for (int j=0; j<10; j++)
            {
                if (mase[j] == a)
                {
                    int a = rand()%20+1;
                }
            }
            mase[post]=a;
            cout <<mase[post]<< endl;
                                  post++;
  
  system("PAUSE");  
  return 0;
}
А то вообще
Цитата Сообщение от cactus09 Посмотреть сообщение
if (mase[j] == (a = rand()%20+1)){}
такой бред
0
Aesonet
23 / 23 / 10
Регистрация: 04.04.2012
Сообщений: 119
13.06.2012, 15:46 11
Цитата Сообщение от cactus09 Посмотреть сообщение
C++
1
2
3
4
if (mase[j] == a)
{
 int a = rand()%20+1;
}
По моему лучше заменить на:
C++
1
2
3
4
while (mase[j] == a)
{
int a = rand()%20+1;
}
А то могут быть случаи когда 2 раза сгенериться одинаковое число.

И у Вас нерабоет прога.

Добавлено через 15 минут
Хм, интересное задание буду сидеть думать, для своего развития. Напишу скину код
1
cactus09
Чайник
69 / 69 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 15:59 12
Цитата Сообщение от Aesonet Посмотреть сообщение
И у Вас нерабоет прога.
Почему не работает??? О_о
0
Миниатюры
Массив случайных неповторяющихся чисел  
Aesonet
23 / 23 / 10
Регистрация: 04.04.2012
Сообщений: 119
13.06.2012, 16:08 13
Ну не так выразился. Она работает, но неправильно. Код должен генерить массив неповторяющихся чисел, а не 1 число
0
cactus09
Чайник
69 / 69 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 16:33 14
Aesonet, Ну тогда можно так, правда это не спортивно
C++ (Qt)
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
 
  int mase[10],post=0,a;
  srand(time(0));
  a = rand()%20+1;
   
            for (int j=0; j<10;)
            {
             if( mase[j]!=(a = rand()%20+1) &&
             mase[0]!=a && mase[1]!=a &&
             mase[2]!=a  && mase[3]!=a  && 
             mase[4]!=a && mase[5]!=a  && 
             mase[6]!=a  && mase[7]!=a &&  
             mase[8]!=a  && mase[9]!=a){    
              mase[j]=a;
              j++;}
            }
            
            
            for (int post=0; post<10; post++)
            {
            cout <<mase[post]<< endl;
            }
  
  system("PAUSE");  
  return 0;
}
0
Aesonet
23 / 23 / 10
Регистрация: 04.04.2012
Сообщений: 119
13.06.2012, 16:47 15
Да неспортивно, при том, а если массив из 1000 ячеек?
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 <iostream>
using namespace std;
int main()
{  int mase[10],a,j,x,y=0;
srand(time(NULL));
for (j=0; j<10; j++)
{
mase[j]=rand()%10+1;
}
for (j=0; j<10; j++) cout <<mase[j]<<"   ";
cout<< endl;
for (j=0;j<10;j++)
{x=1;
while (x==1)
{x=0;
for (int i=j;i<10;i++) {if (mase[j]==mase[i])mase[j]=rand()%10+1; x++;}
for (int i=j;i>=0;i--) {if (mase[j]==mase[i])mase[j]=rand()%10+1; x++;}
if (x==2) break;
}}
 
 
cout<< endl;
for (j=0; j<10; j++) cout <<mase[j]<<"   ";  
 
cout<< endl;
system("PAUSE");  
}
Вот над чем я щас думаю, неполучаеться сделать так чтобы сравнивало в циклах массивы хоть убей. Мб поможешь ?
0
cactus09
Чайник
69 / 69 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 17:01 16
Aesonet, Придумал как зделать, вот
C++ (Qt)
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main()
{
  int mass[10];
  bool flag=false;
  srand(time(0));
  
  for(int i=0;i<10;i++){mass[i]=rand()%11;}
  
  while(true){
  flag =true;
   for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){
     if(mass[i]==mass[j] && i!=j){
      mass[i] = rand()%11;
      flag = false;
      }
    }
   }
   if(flag){break;}
  }
  
  for(int i=0;i<10;i++){cout<<mass[i]<<" ";}
  cout<<endl;
  system("PAUSE");  
  return 0;
}
Я молодец
1
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
13.06.2012, 17:16 17
я бы писал сгенеренное параллельно в "рабочий" std::set, и там проверял, есть уже такое число или нет. зачем циклить?
0
Aesonet
23 / 23 / 10
Регистрация: 04.04.2012
Сообщений: 119
13.06.2012, 17:42 18
Ну я с класами неоч пока дружу ток изучаю их... Напишите пример кода с std::set.
cactus09
Наверное жара в офисе на меня так плохо действует, не додумался к такому
0
cactus09
Чайник
69 / 69 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 17:45 19
novi4ok,
Цитата Сообщение от Aesonet Посмотреть сообщение
Ну я с класами неоч пока дружу ток изучаю их... Напишите пример кода с std::set.
Поддерживаю, тож интересно и тож с классами не дружу
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
13.06.2012, 18:34 20
Цитата Сообщение от cactus09 Посмотреть сообщение
novi4ok,

Поддерживаю, тож интересно и тож с классами не дружу
а зачем пишешь using namespace std;, если не используешь ничего из этого namespace?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
#include <set>
 
#define ARRAY_SIZE 10
#define RANDOM_RANGE 20 // генерируем числа до 20. должно быть больше, чем длина массива.
                                     // желательно в коде где-нибудь проверить, если задается как параметр
 
...
    int mass[ARRAY_SIZE];
    srand(time(0));
    std::set<int> set;
    int index = 0;
    ::memset (mass, 0, sizeof (mass));
    while (set.size() < ARRAY_SIZE){
        int r = rand()%RANDOM_RANGE+1;
        if (set.find(r) == set.end()){
            set.insert (r);
            *(mass+index++) = r;
        }
    }
1
13.06.2012, 18:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2012, 18:34

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

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

Сформировать одномерный массив целых чисел, используя датчик случайных чисел
1) Сформировать одномерный массив целых чисел, используя датчик случайных...


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

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

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