powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перемешать элементы большого, одномерного массива
12 сообщений из 12, страница 1 из 1
Перемешать элементы большого, одномерного массива
    #38368369
Alvisid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня небольшая проблема возникла. Хочу заранее предупредить: я буквально несколько дней с С++ работаю. Только начал осваивать. Да и вообще программированием тоже относительно недавно увлекся. Поэтому прошу сильно не ругать))

В общем у меня возникла такая задача:
Нужно задать одномерный массив, примерно такой:

Код: plaintext
1.
2.
        int size=2400000;
	int mass[size];



Элементы массива соответственно равны от 1 до 2400000.
А после перемешать все элементы и вывести полученный массив.
Я примерно догадываюсь что проблема связана с размером массива... Но надеюсь мне все-таки помогут))
У меня вот такой код программы получился:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
using namespace std;

int main()
{
	int size=2400000;
	int mass[size], i;
	for (i=0; i<size; i++)
	{
		mass[i]=i;
	}
	for (i=0; i<size; i++) 
	{
  		swap(mass[i], mass[rand() % size]);
	}
	for (i=0; i<size; i++)
	{
		cout<<i<<"  --  "<<mass[i];
	}
	return 0;
}



Ошибок в коде нету. Компиляция проходит успешно, но при запуске программа прекращает работу. Может слишком много оперативки требуется для этого? Если да, то как уменьшить требуемую память? :)
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38368377
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alvisid Может слишком много оперативки требуется для этого? Если да, то как уменьшить требуемую память? :)Угадал.
Статический массив такого размера это большое "НЕТ".
Делай динамический. Читай учебник про команду new.
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38368380
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alvisid,
или так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
const int size=2400000;
int mass[size];

int main()
{
	int i;

	...

	return 0;
}


или так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
int main()
{
	int i;
	int size=2400000;
	int *mass= new int [size];

        ...
	
        delete [] mass;

	return 0;
}
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38368661
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переполнение стека. Можно ключиками (при компиляции?) подкрутить стек, как это делается можно нагуглить.
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38368862
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,


White OwlAlvisid Может слишком много оперативки требуется для этого? Если да, то как уменьшить требуемую память? :)Угадал.
Статический массив такого размера это большое "НЕТ".
Делай динамический. Читай учебник про команду new.

Какая разница-то?

Ему только надо размер стека расширить.

Автор, делай лучше статический массив,
добавить static в объявление переменной.
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38368868
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alvisid,

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

function
<cstdlib>
rand
int rand (void);
Generate random number
Returns a pseudo-random integral number in the range between 0 and RAND_MAX.
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38368969
Alvisid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m_Sla,

Спасибо) Попробовал первый предложенный вариант и все заработало)
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38368979
Alvisid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Вы правы. Эту проблему я тоже решил.
Вот как все выглядит сейчас:

Код: plaintext
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>
#include <ctime>
#include <cstdlib>

using namespace std;

const int size=2400000;
int mass[size];

int main()
{
	int i;
	srand(time(0));
	for (i=0; i<size; i++)
	{
		mass[i]=i;
	}
	for (i=0; i<size; i++) 
	{
  		swap(mass[i], mass[rand() % size]);
	}
	for (i=0; i<size; i++)
	{
		out<<i+1<<"  --   "<<mass[i]<<"  \n";
	}
	return 0;
}



Сейчас все работает. И после каждого запуска массив перемешивается по-разному)
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38369206
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlvisidMasterZiv,

Вы правы. Эту проблему я тоже решил.
Вот как все выглядит сейчас:

Код: plaintext
1.
  		swap(mass[i], mass[rand() % size]);




Чёта я не вижу, что ты там решил...

rand() % size будет в диапазоне от 0 до min( RAND_MAX, size ).
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38370150
Alvisid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Вижу( теперь понял.. Только как это исправить?
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38370185
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlvisidMasterZiv,

Вижу( теперь понял.. Только как это исправить?

Для начала подумать...
...
Рейтинг: 0 / 0
Перемешать элементы большого, одномерного массива
    #38372532
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перемешать элементы большого, одномерного массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]