Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрицы
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
Дмитрий
Помогите пожалуйста решить задачу:
В задданой матрице удалить методом сдвига столбцы, не содержащие нулей.
К сожалению не имею представления о методе сдвига =(
Заранее благодарен.
Дмитрий
Неужели никто не знает метод сдвига? mega_chok.gif
volvo
Что непонятно? Проверяешь столбец i на наличие нулей... Если есть хоть один ноль - ничего не делать, если ни одного - то просто сдвигаешь все столбцы справа от удаляемого на один влево... Не забудь уменьшить количество столбцов после сдвига...
Дмитрий
Вот есть такое:
Задание удалить из матрицы методом сдвига матрицы содержащие только нечетные элементы. Подскажите где в коде проверяется нечетность, буду под свое модифицировать...
#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);
}
volvo
if ((a[i][j]%2)==0) ...
в функциях findrow и delrow - это и есть проверка элемента на четность...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.