Вот полная прога. По идее даже работает.
#include <stdio.h>
#include <conio.h>
int Counter;
int Dim;
int* Matrix;
int i=0,j=0;
void GoRight();
void GoLeftAndDown();
void GoDown();
void GoRightAndUp();
int main()
{
printf("Введите размерность матрицы:> ");
scanf("%i",&Dim);
Matrix=new int[Dim*Dim];
Counter=1;
Matrix[i*Dim +j]=Counter;
Counter++;
while(!((i==Dim-1)&&(j==Dim-1)))
{
GoRight();
GoLeftAndDown();
GoDown();
GoRightAndUp();
}
Matrix[Dim*Dim-1]=Counter;
for(int i=0;i<Dim;i++)
{
for(int j=0;j<Dim;j++)
printf("%4i",Matrix[i*Dim+j]);
printf("\n");
}
getch();
return 0;
}
void GoRight()
{
if((i==Dim-1)&&(j==Dim-1))
return;
if(j==Dim-1)
GoDown();
else
j++;
}
void GoDown()
{
if((i==Dim-1)&&(j==Dim-1))
return;
if(i==Dim-1)
GoRight();
else
i++;
}
void GoLeftAndDown()
{
if((i==Dim-1)&&(j==Dim-1))
return;
while((i<Dim)&&(j>=0))
{
Matrix[i*Dim+j]=Counter;
Counter++;
i++;
j--;
}
j++;
i--;
}
void GoRightAndUp()
{
if((i==Dim-1)&&(j==Dim-1))
return;
while((j<Dim)&&(i>=0))
{
Matrix[i*Dim+j]=Counter;
Counter++;
j++;
i--;
}
i++;
j--;
}