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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2011, 17:41   #1
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
Вопрос сортировка массива

Доброго вечера. Пожалуйста помогите разобраться с некоторыми нюансами в программе:

1) как сделать более проще кейсы в свитче, без повторений?, никак не получается((
2) почему не работает сортировка шелла?, выводит просто массив так как он был введен(

код:

Код:
#include <iostream.h>
#include <windows.h>

const int color=system("color 3F");

int menu();
int vyborom (int *arr, int n);
int vstavkoi (int *arr,int n);
int obmenom (int *arr,int n);
int shella (int *arr,int n);
void print(int *arr, int n);

//--------------------------------------------------

int main()
{
	int i;
	bool ex=true;
	int posmas[100]; //posle sort
	int domas[100]; //do sort
	int n=0;
	while(ex)
	{
		switch(menu())
		{
		case 1:
			if(n==0)
				cout<<"Massiv ne vveden!";
			else
			{
			cout<<"\nKol-vo perest: \n"<<vyborom(posmas,n)<<"\n";
			print(posmas,n);
			cout<<"\n Ishodniy massiv: \n";
			print(domas,n);
			}
			break;

		case 2:
			if(n==0)
				cout<<"Massiv ne vveden!";
			else
			{
			cout<<"\nKol-vo perest: \n"<<vstavkoi(posmas,n)<<"\n";
			print(posmas,n);
			cout<<"\n Ishodniy massiv: \n";
			print(domas,n);
			}
			break;

		case 3:
			if(n==0)
				cout<<"Massiv ne vveden!";
			else
			{
			cout<<"\nKol-vo perest: \n"<<obmenom(posmas,n)<<"\n";
			print(posmas,n);
			cout<<"\n Ishodniy massiv: \n";
			print(domas,n);
			}
			break;

		case 4:
			if(n==0)
				cout<<"Massiv ne vveden!";
			else
			{
			cout<<"\nKol-vo perest: \n"<<shella(posmas,n)<<"\n";
			print(posmas,n);
			cout<<"\n Ishodniy massiv: \n";
			print(domas,n);
			}
			break;

		case 5:
			if(n==0)
				cout<<"Massiv ne vveden!";
			else
			    print(domas,n);
			break;

		case 6:
			cout<<"Vvedite kolichestvo elementov do 100: \n";
			cin>>n;
			for(i=0;i<n;i++)
			{
				posmas[i]=rand()%89+0;
				domas[i]=posmas[i];
			}
			break;

		case 7:
			cout<<"Vvedite kolichestvo elementov do 100: \n";
			cin>>n;
			cout<<"Vvedite "<<n<<" chisel v massiv: \n";
			for(i=0;i<n;i++)
			{
				cin>>posmas[i];
				domas[i]=posmas[i];
			}
			break;

		case 0:
			ex=false;
			break;
		}
			for(i=0;i<n;i++)
			{
				posmas[i]=domas[i];
			}
	}
	return 0;
}

//--------------------------------------------------

int menu()
{
	int sort;
	cout<<"\n Kakoy sposob sortirovki?: \n";
	cout<<" 1 - Vyborom\n";
	cout<<" 2 - Vstavkoi\n";
	cout<<" 3 - Obmenom\n";
	cout<<" 4 - Shella\n";
	cout<<" 5 - Vyvesti ishodnyi massiv\n";
    cout<<" 6 - Zapolnenie massiva - random\n";
    cout<<" 7 - Zapolnenie massiva - s klaviatury\n";
	cout<<" 0 - Exit\n";
	cin>>sort;
	return sort;
}

//--------------------------------------------------

int vyborom (int *arr,int n)
{   int s;
    int per=0;
    int i,min,imin;
	for (s=0;s<n-1;s++)
	{
		min = arr[s];
		imin =s;
		for(i=s+1;i<n;i++)
		{
			if(arr[i]<min)
			{
				min=arr[i];
				imin =i;
				per++;
			}
		}
			arr[imin]=arr[s];
			arr[s]=min;
	}
	return per;
}

//--------------------------------------------------

int vstavkoi (int *arr,int n)
{
	int per=0;
	int i,j,k,t;
	for(i=0;i<n;i++)
	{
		t=arr[i];
		j=0;
		while(t>arr[j])
			j=j+1;
		for(k=i-1;k>j-1;k--)
		{	
			arr[k+1]=arr[k];
		    per++;
		}
		arr[j]=t;
	}
	return per;
}

//--------------------------------------------------

int obmenom (int *arr,int n)
{
	int per=0;
	int i,k,t;
	for(i=n-1;i>0;i--)
	{
		for(k=0;k<i;k++)
		{
			if(arr[k]>arr[k+1])
			{
				t=arr[k];
				arr[k]=arr[k+1];
				arr[k+1]=t;
				per++;
			}
		}
	}
	return per;
}

//--------------------------------------------------

int shella (int *arr, int n)
{
	int incr,b;
	int per=0;
	incr=n/2;
	do
	{
		for(int i=0;n-incr;n--)
		{
			if(arr[i]>arr[i+incr])
			{
				b=arr[i];
				arr[i]=arr[i+incr];
				arr[i+incr]=b;
			}
		}
			incr=incr/2;
	}
		while (incr>=1);
	return per;
}

//--------------------------------------------------

void print(int *arr, int n)
{
	for (int i=0;i<n;i++)
		cout<<arr[i]<<" ";
}
mego4el вне форума Ответить с цитированием
Старый 27.02.2011, 17:46   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Код:
switch(menu()) {
case 1:
case 2:
case 3:
case 4: 
case 5: 	     if(!n)
				cout<<"Massiv ne vveden!";
			else
			{
			cout<<"\nKol-vo perest: \n"<<shella(posmas,n)<<"\n";
			print(posmas,n);
			cout<<"\n Ishodniy massiv: \n";
			print(domas,n);
			}
			break;
onewho вне форума Ответить с цитированием
Старый 27.02.2011, 17:53   #3
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
По умолчанию

и еще очень интересует как очищать консоль после ввода, или перехода к другому пункту меню?
mego4el вне форума Ответить с цитированием
Старый 27.02.2011, 18:05   #4
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

system("cls");
onewho вне форума Ответить с цитированием
Старый 27.02.2011, 18:07   #5
fizteh
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 46
По умолчанию

Да, просто вставь system("cls"); в нужное место. Например
Код:
int menu()
{
	int sort;
	cout<<"\n Kakoy sposob sortirovki?: \n";
	cout<<" 1 - Vyborom\n";
	cout<<" 2 - Vstavkoi\n";
	cout<<" 3 - Obmenom\n";
	cout<<" 4 - Shella\n";
	cout<<" 5 - Vyvesti ishodnyi massiv\n";
        cout<<" 6 - Zapolnenie massiva - random\n";
        cout<<" 7 - Zapolnenie massiva - s klaviatury\n";
	cout<<" 0 - Exit\n";
	cin>>sort;
        system("cls");
	return sort;
}

Последний раз редактировалось Stilet; 27.02.2011 в 18:55.
fizteh вне форума Ответить с цитированием
Старый 27.02.2011, 18:12   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Но это будет работать только в Windows.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 01.03.2011, 19:48   #7
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
По умолчанию

Цитата:
onewho
немного не понятно, и не работает((, можете пожалуйста обьяснить что за принцип тут для кейса?
mego4el вне форума Ответить с цитированием
Старый 01.03.2011, 21:30   #8
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

ой блин простите, не заметил что у каждого кейса своя сортировка.
тогда даже не знаю.
onewho вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
Сортировка массива natt23 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 22.11.2010 10:49
Сортировка массива Weyner Помощь студентам 2 23.10.2010 08:32
Сортировка массива. n0rma1 Помощь студентам 9 25.04.2010 17:24
Сортировка массива.С++ bpystep Помощь студентам 2 13.10.2009 07:35