
17.11.2009, 23:51
|
|
Познающий
Регистрация: 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;
}
}
Всем спасибо за проявленное внимание
|
|
|