با سلام
این کد رو همین الان نوشتم. با همون راهی که خودم گفتم نوشتمش. تابع spiral اون کار رو انجام می ده. فکر کنم به دردتون بخوره
#include<iostream.h>
#include<iomanip.h>
void spiral ( int **a , int m , int row );
void matprint(int **a , int row);
void shift(int **a , int row , int s);
void main ( ){
int **a , i , j , m , row , x , s;
cout<<"Please Enter The Number Of Row : "<<endl;
cin>>row;
a = new int*[row];
for (int i = 0; i < row; i++)
a[i] = new int[row];
for( i = 0 ; i < row ; i++ ){
for( j = 0 ; j < row ; j++ ){
a[i][j] = 0;
}
}
for ( i = 0 ; i <( row/2 ) ; i++ ){
spiral ( a , i , row);
}
if ( row % 2 == 1 ){
x = (row-1) / 2;
cin>>a[x][x];
}
cout<<"\n\n\n";
matprint(a,row);
cout<<"Please Enter The Number Of Shift :"<<endl;
cin>>s;
shift(a,row,s);
cout<<"\n\n\n";
matprint(a,row);
}
void spiral ( int **a , int m , int row ){
int x , y , i ;
x = m;
y = ( row - 1 ) - m;
for ( i = m ; i <= y ; i++ ){
cin>>a[x][i];
}
for ( i = m+1 ; i < y+1 ; i++ ){
cin>>a[i][y];
}
for ( i = y-1 ; i >= m ; i-- ){
cin>>a[y][i];
}
for ( i = y-1 ; i > m ; i-- ){
cin>>a[i][x];
}
}
void matprint(int **a , int row){
int i , j;
for ( i = 0 ; i < row ; i++ ){
for ( j = 0 ; j < row ; j++ ){
cout<<setiosflags(ios::right)<<a[i][j]<<setw(3);
}
cout<<"\n";
}
}
void shift(int **a , int row , int s){
int i , j , temp2 , **temp;
temp = new int*[row];
for (int i = 0; i < row; i++){
temp[i] = new int[row];
}
for ( i = 0 ; i < row ; i++ ){
for ( j = 0 ; j < row ; j++ ){
temp[i][j] = a[i][j];
}
}
s = s % row;
temp2 = s;
for( i = 0 ; i < row ; i++ ){
temp2 %= row;
for ( j = 0 ; j < row ; j++ ){
a[j][temp2] = temp [j][i];
}
temp2++;
}
}