Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.89
aletelegov
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
#1

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

13.06.2012, 13:58. Просмотров 3592. Ответов 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[] - глобальные перменные
и как бы я не страрался все время числа повторяются
по логике вроде все правильно
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2012, 13:58     Массив случайных неповторяющихся чисел
Посмотрите здесь:

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

Цитата Сообщение от aletelegov Посмотреть сообщение
if (mase[j] == a) {
И нафиг убрать goto - а то поему у тя получается почти бесконечный цикл
aletelegov
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 14:41  [ТС]     Массив случайных неповторяющихся чисел #5
нет бесконечного цикла нет, ибо условие выхода доситгается после проверки 10 чисел
а переставил и все равно фигня
cactus09
Чайник
69 / 69 / 4
Регистрация: 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;
aletelegov
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 14:53  [ТС]     Массив случайных неповторяющихся чисел #7
нет все равно
cactus09
Чайник
69 / 69 / 4
Регистрация: 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;
}
aletelegov
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 15:17  [ТС]     Массив случайных неповторяющихся чисел #9
во то что надо, спс
cactus09
Чайник
69 / 69 / 4
Регистрация: 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)){}
такой бред
Aesonet
23 / 23 / 1
Регистрация: 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 минут
Хм, интересное задание буду сидеть думать, для своего развития. Напишу скину код
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 15:59     Массив случайных неповторяющихся чисел #12
Цитата Сообщение от Aesonet Посмотреть сообщение
И у Вас нерабоет прога.
Почему не работает??? О_о
Миниатюры
Массив случайных неповторяющихся чисел  
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
13.06.2012, 16:08     Массив случайных неповторяющихся чисел #13
Ну не так выразился. Она работает, но неправильно. Код должен генерить массив неповторяющихся чисел, а не 1 число
cactus09
Чайник
69 / 69 / 4
Регистрация: 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;
}
Aesonet
23 / 23 / 1
Регистрация: 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");  
}
Вот над чем я щас думаю, неполучаеться сделать так чтобы сравнивало в циклах массивы хоть убей. Мб поможешь ?
cactus09
Чайник
69 / 69 / 4
Регистрация: 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;
}
Я молодец
novi4ok
550 / 503 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
13.06.2012, 17:16     Массив случайных неповторяющихся чисел #17
я бы писал сгенеренное параллельно в "рабочий" std::set, и там проверял, есть уже такое число или нет. зачем циклить?
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
13.06.2012, 17:42     Массив случайных неповторяющихся чисел #18
Ну я с класами неоч пока дружу ток изучаю их... Напишите пример кода с std::set.
cactus09
Наверное жара в офисе на меня так плохо действует, не додумался к такому
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 17:45     Массив случайных неповторяющихся чисел #19
novi4ok,
Цитата Сообщение от Aesonet Посмотреть сообщение
Ну я с класами неоч пока дружу ток изучаю их... Напишите пример кода с std::set.
Поддерживаю, тож интересно и тож с классами не дружу
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2012, 18:34     Массив случайных неповторяющихся чисел
Еще ссылки по теме:

C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел
Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел C++
C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел
Сформировать одномерный массив целых чисел, используя датчик случайных чисел C++
C++ Запишите шесть строк, состоящих из двух случайных чисел типа int, которые не больше 10 и трех случайных чисел

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

Или воспользуйтесь поиском по форуму:
novi4ok
550 / 503 / 8
Регистрация: 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;
        }
    }
Yandex
Объявления
13.06.2012, 18:34     Массив случайных неповторяющихся чисел
Ответ Создать тему
Опции темы

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