Показать сообщение отдельно

  #9  
Старый 17.11.2009, 23:51
Mozy
Познающий
Регистрация: 15.03.2009
Сообщений: 77
С нами: 9030397

Репутация: 73
По умолчанию

Вот ещё один вариант написал
(самописный, без испоьзования stl)
Код:
template <typename T>
void Reverse(T **Massive,int size, int StartElem, int FinishElem,int direction)
{ 	
int i,j;
T t;

	switch(direction){

		/*Горизонтально*/
		case 1:
		case -1:
		for(j=0;j<size;j++){
			for (i=0;i<=(FinishElem-StartElem)/2;i++) 
			{
                  t=Massive[j][StartElem+i]; 	 
                  Massive[j][StartElem+i]=Massive[j][FinishElem-i]; 		       
                  Massive[j][FinishElem-i]=t; 	
			} 
		}
		break;

		/*Вертикально*/
		case 2:
		case -2:
		for(j=0;j<size;j++){
			for (i=0;i<=(FinishElem-StartElem)/2;i++) 
			{
                  t=Massive[StartElem+i][j]; 	 
                  Massive[StartElem+i][j]=Massive[FinishElem-i][j]; 		       
                  Massive[FinishElem-i][j]=t; 	
			} 
		}
		break;
	}
}

template <typename T>
void cyclicShift(T **Massive, int size, int k,int direction)
{ 	
	switch(direction){

		case 1:
		case 2:
        Reverse(Massive,size,0,	size-1,	direction); //разворачиваем массив   
        Reverse(Massive,size,0,	k-1,	direction); //разворачиваем первые к элементов
		Reverse(Massive,size,k,	size-1,	direction); //разворачиваем последние n-k эллементов
		break;

		case -1:
		case -2:
        Reverse(Massive,size,0,	k-1,	direction); //разворачиваем первые к элементов
		Reverse(Massive,size,k,	size-1,	direction); //разворачиваем последние n-k эллементов
		Reverse(Massive,size,0,	size-1,	direction); //разворачиваем массив  
		break;
	}
}
Всем спасибо за проявленное внимание
 
Ответить с цитированием