Помогите пожалуйста решить задачу:
В задданой матрице удалить методом сдвига столбцы, не содержащие нулей.
К сожалению не имею представления о методе сдвига =(
Заранее благодарен.
#include <stdio.h>
#include <conio.h>
#define MAX 10
void findrow (int aN, int aM,int *aH,int a[][MAX],int b[MAX]);
void delrow (int aN, int aM,int a[][MAX]);
void main()
{
//int i, j, k, u, N, M, H;
int i, j, N, M, H, *h; //*h-ukazatel' na H
int A[10][10], B[10];
clrscr();
//Uslovie zadachi
printf ( "\n Uslovie postavlennoi zadachi:" );
printf ( "\n Udalit'iz matricy A metodom sdviga");
printf ( "\n stroki, sodergastchie tol'ko nechetnye elementy." );
/*Zapolnenie massiva*/
printf ( "\n \n Vvedite kolichestvo strok i kolonok matricy A," );
printf ( "\n pri uslovii chto kolichesnvo dolgno byt' bol'shie 0 i men'shie 10..." );
do
{
printf ( "\n \n Kolichestvo strok matricy A = " );
scanf ("%d", &N);
if (N<1)
printf ( "\n Nevernoe znachenie! \n Poprobuite snova, uchityvaya chto kolichestvo strok >0." );
else
if (N>10)
printf ( "\n Nevernoe znachenie! \n Poprobuite snova, uchityvaya chto kolichestvo strok <10." );
}
while (N<1 || N>10);
do
{
printf ( "\n Kolichestvo kolonok massiva A = " );
scanf ("%d", &M);
if (M<1)
printf ( "\n Nevernoe znachenie! \n Poprobuite snova, uchityvaya chto kolichestvo kolonok >0." );
else
if (M>10)
printf ( "\n Nevernoe znachenie! \n Poprobuite snova, uchityvaya chto kolichestvo kolonok <10." );
}
while (M<1 || M>10);
printf ("\n Vvod elementov matricy A:\n" );
for (i=0;i<N;i++)
{
printf (" %d stroka:\n",i+1);
for (j=0;j<M;j++)
scanf ("%d", &A[i][j]);
}
clrscr();
//Uslovie zadachi
printf ( "\n Uslovie postavlennoi zadachi:");
printf ( "\n Udalit'iz matricy A metodom sdviga stroki,");
printf ( "\n sodergastchie tol'ko nechetnye elementy.\n");
//Ishodnaya matrica
printf ("\n Ishodnaya matrica: \n");
for (i=0;i<N;i++)
for (j=0;j<M;j++)
{
printf ("%3d",A[i][j]);
if (j==M-1)
printf ("\n");
}
/*Raschetnaya chast*/
H=-1;
h=&H;
// sub (N, M, &H, A, B,1);
// sub (N, M, &H, A, B,2);
findrow (N, M, h, A, B);
delrow (N, M, A);
if (H==-1)
printf ( "\n Iz Matricy A ne udalili ni odnoi stroki.\n" );
else
{
printf ( "\n Iz Matricy A udaliny stroki:\n" );
for (i=0;i<H+1;i++)
printf ("%3d",B[i]);
printf ("\n V rezul'tate imeem Matricy vida: \n");
for (i=0;i<N;i++)
for (j=0;j<M;j++)
{
printf ("%3d",A[i][j]);
if (j==M-1)
printf ("\n");
}
}
printf ("\n Konec resheniya zadachi.");
printf ("\n Dlya vyhoda nazhmite lubuyu klavishu.");
getch();
}
void findrow (int aN, int aM,int *aH,int a[][MAX],int b[MAX])
{
int i, j, k, u;
for (i=0;i<aN;i++)
{
k=0;
for (j=0;j<aM;j++)
if ((a[i][j]%2)==0)
{
break;
}
else
k++;
if (k==aM)
{
*aH++;
b[*aH]=i+1;
}
}
}
void delrow (int aN, int aM,int a[][MAX])
{
int i, j, k, u;
i=0;
do
{
k=0;
for (j=0;j<aM;j++)
if ((a[i][j]%2)==0)
{
i++;
break;
}
else
k++;
if (k==aM)
{
aN=aN-1;
for (u=i;u<aN;u++)
for (j=0;j<aM;j++)
a[u][j]= a[u+1][j];
}
}
while (i<aN);
}
if ((a[i][j]%2)==0) ...в функциях findrow и delrow - это и есть проверка элемента на четность...