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

Случайные значения для разных объектов - C++

Восстановить пароль Регистрация
 
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
12.09.2010, 17:00     Случайные значения для разных объектов #1
Здравствуйте. Я тут взялся за консольный морской бой, нарыл на форуме пару способов генерации
случайных чисел, только есть проблема..... Допустим есть 3 корабля ship1, ship2 и ship3. Я бы хотел
чтобы функция SetCoords() генерировала для каждого разные случайные координаты, а она для
всех одинаковые генерирует.
Подскажите пожалуйста как с этим разобраться?
Спасибо.

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
#include <iostream>
#include <time.h>
using namespace std;
 
class Battleship
{
    int X; int Y;
 
public:
    void SetCoords();
    int GetCoordX();
};
 
void Battleship::SetCoords()
{
srand(time(NULL));
int min = 3; int max = 13;
X = min + rand() % (max - min);
Y = min + rand() % (max - min);
}
 
int Battleship::GetCoordX()
{
    return X;
}
 
int main()
{
    Battleship ship1;
    Battleship ship2;
    Battleship ship3;
 
    ship1.SetCoords();
    ship2.SetCoords();
    ship3.SetCoords();
 
    cout << ship1.GetCoordX() << endl;
    cout << ship2.GetCoordX() << endl;
    cout << ship3.GetCoordX() << endl;
 
 
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2010, 17:00     Случайные значения для разных объектов
Посмотрите здесь:

C++ Взаимодействие объектов разных классов
C++ Массив разных объектов
C++ Создание коллекции объектов разных классов
C++ случайные значения в с++
Сложение массивов из разных объектов класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.09.2010, 17:07     Случайные значения для разных объектов #2
NikolaWhite, srand(time(NULL)) лучше в main я думаю поставить.
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
12.09.2010, 17:53  [ТС]     Случайные значения для разных объектов #3
Может тогда подскажете как сделать чтоб они н повторялись?
Я просмотрел пост "Случайные числа" , только там пример громоздкий и многое мне в нем
еще не понятно.
Буду оч признателен.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.09.2010, 18:07     Случайные значения для разных объектов #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
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
void gen_random_uniq2( int arr_size, int *parr, int range_min, int range_max );
 
/* ================================================================ */
int main() 
{ 
int arr_size;
int*arr;
int range_min, range_max;
 
 
srand( time( NULL ) );
 
std::cout<<"Enter arr_size: ";
std::cin>>arr_size;
arr=new int[arr_size];
std::cout<<"Enter range_min: ";
std::cin>>range_min;
std::cout<<"Enter range_max: ";
std::cin>>range_max;
 
if(arr_size<=0)
{
    std::cerr<<"Can`t be 0 or less then 0!\n";
    return 1;
}
 
gen_random_uniq2(arr_size, arr, range_min, range_max );
 
std::cout<<"random unique array: array size is "<< arr_size <<" range is ["<<range_min<<';'<< range_max <<']'<<std::endl;
 
for (int i= 0; i<arr_size; i++ ) {
        std::cout<<arr[i]<<' ';
}
std::cout<<std::endl;
delete[] arr;
return 0;
 
} 
 
/* ================================================================ */
void gen_random_uniq2( int arr_size, int *parr, int range_min, int range_max ) {
 
int i, arr2_size, index, range_width;
int *parr2= NULL;
 
range_width= range_max-range_min+1;
 
parr2= new int[range_width];
 
for ( i= 0; i<range_width; i++ ) {
        parr2[i]= range_min+i;
}
 
arr2_size= range_width;
for ( i= 0; i<arr_size; i++ ) {
        index= rand()%arr2_size;
        parr[i]= parr2[index];
        arr2_size--;
        parr2[index]= parr2[arr2_size];
}
 
delete[]parr2;
 
}
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
13.09.2010, 20:38  [ТС]     Случайные значения для разных объектов #5
Привет всем. Я тут помучался и написал таки функцию которая генерирует неповторяющиеся
координаты для поля 10х10 морского боя. Я совсем недавно начал изучать С++ , так что это было
нелегко для меня .
Кому не лень можете раскритиковать в пух и прах.

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
#include <iostream>
#include <ctime>
using namespace std;
 
class Battleship
{
int X; int Y;
public:
    void SetCoords(int *Arr, int *XYarr);
    int GetCoordX();
    int GetCoordY();
};
 
int Battleship::GetCoordX() {return X;}
int Battleship::GetCoordY() {return Y;}
 
void Battleship::SetCoords(int *Arr, int *XYarr)
{ 
    int cols = 10; // кол-во колонок в Arr[100]
int Index = rand() % 10;
X = XYarr[Index];
Index = rand() % 10;
Y = XYarr[Index];
 
int plus = 1;
    while(*(Arr + X*cols + Y + plus) == 0)
    {
    if(X == 10 && Y == 10) // если последний элемент массива и равен 0 ,двигай назад.
        plus -= 1;
    else
        plus += 1;         // если равен 0 значит координаты использовались,
    }                        // перейди к следующему элементу.
 
      *(Arr + X*cols + Y + plus) = 0; // адрес в массиве ,совпадающий с этими координатами
                                   // содержит 0 - значит больше не использовать.
 
}
 
int main()
{
    srand(time(NULL));
Battleship ship1;
Battleship ship2;
Battleship ship3;
Battleship ship4;
//*********************************************************
    int* Arr;
    Arr = new int[100]; // вместо двумерного массива 10x10
    for(int i = 0;i < 100;i++)
        Arr[i] = i + 1;
    int* XYarr;
    XYarr = new int[10]; // 10 неповторяющихся чисел от  до 10.
    for(int i = 0;i < 10;i++) 
        XYarr[i] = i + 1;
    //*******************************************************
    ship1.SetCoords(Arr, XYarr);
    ship2.SetCoords(Arr, XYarr);
    ship3.SetCoords(Arr, XYarr);
    ship4.SetCoords(Arr, XYarr);
          cout << "X =  " << ship1.GetCoordX() << "  Y =  " << ship1.GetCoordY() << endl;
          cout << "X =  " << ship2.GetCoordX() << "  Y =  " << ship2.GetCoordY() << endl;
          cout << "X =  " << ship3.GetCoordX() << "  Y =  " << ship3.GetCoordY() << endl;
          cout << "X =  " << ship4.GetCoordX() << "  Y =  " << ship4.GetCoordY() << endl;
 
        system("pause");
}
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
13.09.2010, 22:27     Случайные значения для разных объектов #6
Сразу бросилось в глаза
1) int main() ничего не возвращает (делай тогда void main()).
2) динамические объекты не уничтожаются.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.09.2010, 22:41     Случайные значения для разных объектов #7
Цитата Сообщение от bobromet Посмотреть сообщение
1) int main() ничего не возвращает (делай тогда void main()).
По стандарту main должна возвращать целочисленное значение.
Если код возврата не возвращается явно, его принимают за 0.
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
13.09.2010, 22:59  [ТС]     Случайные значения для разных объектов #8
динамические объекты не уничтожаются.
Я нарочно не стал ничего уничтожать. Еще хотел спросить а обязательно ли это в данном случае.

int main() ничего не возвращает (делай тогда void main()).
Это избитая тема. Я предпочитаю не заморачиваться насчет return 0, т.к.
Если код возврата не возвращается явно, его принимают за 0.
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
13.09.2010, 23:06     Случайные значения для разных объектов #9
CyBOSSeR, то есть, если не возвращать открыто ноль это не будет считатся за ошибку? Тысячу раз читал на этом форуме что компилер покарает меня за это, может не сейчас но позже .)

NikolaWhite, а я void пишу и не жужу , знаю что не хорошо, и что не все компилеры это любят . А объекты уничтожать точно надо, ты ведь мусор выносишь когда корзина полная. Почитай про memory leak - утечка памяти, меня одно название уже пугает .)
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.09.2010, 23:12     Случайные значения для разных объектов #10

Не по теме:

Цитата Сообщение от bobromet Посмотреть сообщение
CyBOSSeR, то есть, если не возвращать открыто ноль это не будет считатся за ошибку?
Не волнуйся, если компилятор сочтет это за ошибку, то ты об этом узнаешь.


bobromet, вот выжимки из стандарта C++03:
<...> It shall have a return type of type int <...>
<...> If control reaches the end
of main without encountering a return statement, the effect is that of executing
C++
1
return 0;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2010, 23:24     Случайные значения для разных объектов
Еще ссылки по теме:

Массив разных объектов внутри класса C++
Случайные значения в массиве int C++
C++ Почему случайные значения всегда одни и те же?

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

Или воспользуйтесь поиском по форуму:
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
13.09.2010, 23:24  [ТС]     Случайные значения для разных объектов #11
<...> If control reaches the end
of main without encountering a return statement, the effect is that of executing
Если кто не силен в английском:
"Если программа доходит до конца функции main() и не встречает return - это означает что
программа выполнена успешно.
Yandex
Объявления
13.09.2010, 23:24     Случайные значения для разных объектов
Ответ Создать тему
Опции темы

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