Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2011, 02:37   #1
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию Перемешивание массива

Доброго времени суток форумчане.
нужна помощь.
задача такова.
Дан массив на 20 значений.
заполненный числами от 20 до 39
нужно перемешать эти числа чтоб они были не подряд...
я сделал так.
Код:
#include<iostream>
#include<time.h>
#include<windows.h>
#include<iomanip>
#include<conio.h>

using namespace std;
int main()
{
setlocale(LC_ALL,"Russian");
const int size=20;
int arr[size]={20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39};
/*for(int i=0;i<size;i++)
{
cout<<arr[i]<<endl;

}*/
	//Перемешивание и проверка на уникальные случайные числа
	
	for(int i=0;i<size;i++)
	{
		int tmp=rand()%20+20;
		bool match=false;
		do
			{
				for(int k=i;k>=0;k--)
				{
					if(tmp==arr[k])
						match=true;
				}
			}
			while(match);
			arr[i]=tmp;
			cout<<i<<" "<<arr[i]<<endl;
	}
	

		


cin.get();
return 0;
}
но он чего то выдает только 4 ячейки массива.Подскажите где ошибся?

Последний раз редактировалось revaldo666; 19.01.2011 в 02:39.
revaldo666 вне форума Ответить с цитированием
Старый 19.01.2011, 05:35   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

rand надо инициализировать с помощью srand (обычно используют srand(time(0))).

В твоём коде не разбирался.

Не надо выдумывать велосипед, всё уже есть в STL.
Код:
#include <vector>
#include <iostream>
#include <algorithm>

template< typename T > 
void printVector(std::vector<T> arr) {
    for (int i = 0; i < arr.size(); ++i) {
        std::cout << arr.at(i) << std::endl;
    }
}

int main()
{
    std::vector<int> arr;
    arr.push_back(1);
    arr.push_back(2);
    arr.push_back(3);
    arr.push_back(4);
    arr.push_back(5);
    
    printVector(arr);
    std::cout << std::endl;
    
    srand(time(0));
    std::random_shuffle( arr.begin(), arr.end() );
    
    printVector(arr);
}
Но если тебе по какой-то причине нужно не STL (зачем вот только?), можно воспользоваться вот этим: http://www.daniweb.com/code/showthread.php?t=217346
Ну и ещё решение: http://www.daniweb.com/code/showthread.php?t=217346
В гугле их уйма. Но лучше используй STL.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 19.01.2011 в 06:00.
Obey-Kun вне форума Ответить с цитированием
Старый 19.01.2011, 06:02   #3
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

И ещё. Функция main в C++ сама вернёт нолик, так что тебе это делать не надо. То же самое касается C по стандарту 99 года.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 19.01.2011, 11:34   #4
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

Цитата:
Сообщение от Obey-Kun Посмотреть сообщение
И ещё. Функция main в C++ сама вернёт нолик, так что тебе это делать не надо. То же самое касается C по стандарту 99 года.
Спасибо.
Но все же хотелось бы чтоб мой велосипед все таки работал))
revaldo666 вне форума Ответить с цитированием
Старый 19.01.2011, 12:57   #5
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

Код:
void swap(int *a,int i,int j){
    int c=a[i];
    a[i]=a[j];
    a[j]=c;
}

int main(){
int a[20]={20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39};
srand (time(0));

for (int i=0;i<20;i++) swap(a,i,rand()%20);//перемешиваем

for (int i=0;i<20;i++) cout<<a[i]<<" ";//выводим

cout<<endl;
system("pause");
}
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 19.01.2011, 14:25   #6
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

Цитата:
Сообщение от kaljan775 Посмотреть сообщение
Код:
void swap(int *a,int i,int j){
    int c=a[i];
    a[i]=a[j];
    a[j]=c;
}

int main(){
int a[20]={20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39};
srand (time(0));

for (int i=0;i<20;i++) swap(a,i,rand()%20);//перемешиваем

for (int i=0;i<20;i++) cout<<a[i]<<" ";//выводим

cout<<endl;
system("pause");
}
спасибо большое
revaldo666 вне форума Ответить с цитированием
Старый 19.01.2011, 15:04   #7
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

жалко что я пока что из stl только векторами учусь пользоваться )
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal: Составить программу генерирования массива B, состящего из отрицательных элементов массива a mrRastom Помощь студентам 2 15.01.2011 14:33
Перемешивание позиций битов в числе explored Общие вопросы C/C++ 6 27.10.2010 23:14
Перемешивание строк gamer123 Общие вопросы Delphi 17 25.08.2010 20:10
Перемешивание строк Черничный БД в Delphi 3 15.07.2008 14:11
Перемешивание с внутренними цепочками igrok85_85 Помощь студентам 1 02.05.2008 18:20