Паскаль не помню, надеюсь C знаешь.
Код:
#include
#include
void main()
{
int * mat;
int rows, cols;
int row, col;
int value;
int dir;//0 - rigt; 1 - down; 2 - left; 3 - up
printf("Input matrix dimensions: ");
scanf("%d%d",&rows, &cols);
mat = (int*)malloc(sizeof(int) * cols * rows);
for(row = 0; row < rows; row++)
for(col = 0; col < cols; col++)
mat[row*cols + col] = 0;
value = 1;
dir = 0;
row = 0;
col = 0;
while(value <= rows*cols)
{
mat[row*cols + col] = value;
switch(dir){
case 0:
col++;
if(mat[row*cols + col] != 0 || col >= cols)
{
col--;
row++;
dir = 1;
}break;
case 1:
row++;
if(mat[row*cols + col] != 0 || row >= rows)
{
row--;
col--;
dir = 2;
}break;
case 2:
col--;
if(mat[row*cols + col] != 0 || col < 0)
{
col++;
row--;
dir = 3;
}break;
case 3:
row--;
if(mat[row*cols + col] != 0 || row < 0)
{
row++;
col++;
dir = 0;
}break;
}
value++;
}
for(row = 0; row < rows; row++)
{
for(col = 0; col < cols; col++)
printf("%d ", mat[row*cols + col]);
printf("\n");
}
}