
Patrick B. answered 04/18/21
Math and computer tutor/teacher
/*********************************
splitting 2D array of size M by N
into slices of size A by B
******************************************/
#include <stdio.h>
#define M (25)
#define N (25)
#define A (4)
#define B (3)
GO()
{
int a[M][N];
int slice[A][B];
int _M = M;
int _N = N;
int _A = A;
int _B = B;
for (int iLoop=0; iLoop<M; iLoop++)
{
for (int jLoop=0; jLoop<N; jLoop++)
{
a[iLoop][jLoop] = iLoop*N + jLoop;
//printf("%d ",a[iLoop][jLoop]);
}
//printf("\n");
}
//****************************************************************
int numRowSlices = _M/_A;
int remainderRowSlices = _M % _A;
int numColumnSlices = _N/_B;
int remainderColumnSlices = _N % _B;
int rowMajor=0;
int columnLoop=0;
for (rowMajor=0; rowMajor+_A<_M; rowMajor+= _A)
{
for (columnLoop=0; columnLoop<_N; columnLoop+=_B)
{
printf(" top left corner : %d %d \n",rowMajor,columnLoop);
}
for (int iColumnLoop=columnLoop+1; iColumnLoop<_N; iColumnLoop++)
{
printf(" top left corner : %d %d \n",rowMajor,iColumnLoop+columnLoop);
}
}
printf(" REMAINING ROWS ....\n");
for (int iRowLoop=rowMajor; iRowLoop<_M; iRowLoop++)
{
for (columnLoop=0; columnLoop<_N; columnLoop+=_B)
{
printf(" top left corner : %d %d \n",iRowLoop,columnLoop);
}
for (int iColumnLoop=columnLoop+1; iColumnLoop<_N; iColumnLoop++)
{
printf(" top left corner : %d %d \n",iRowLoop,iColumnLoop+columnLoop);
}
}
}
int main()
{
GO();
}