Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2009, 13:02   #1
siriusz
 
Аватар для siriusz
 
Регистрация: 22.12.2008
Сообщений: 9
По умолчанию Как обменять заданные строки/столбцы в матрице

Подскажите как сделать обмен местами двух заданных строк и\или столбцов (сформировать новый массив). Подскажите плизз..))

Код:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>

char vibor;
float A[50][50],B[50][50];
int n,m,i,j,a;

main()
{
clrscr ();
	cout<<"Vvedite poryadok matrici:";
	cin>>m;
	n=m;
	cout<<endl;
	for(i=0;i<n;i++)
		{
		for(j=0;j<n;j++)
			{
			cout<<"Vedite element A["<<i+1<<"]["<<j+1<<"]: ";
			cin>>A[i][j];
			}
		}
	cout<<endl;
	cout<<"Matrica A:"<<endl<<endl;
	for(i=0;i<n;i++)
		{
		for(j=0;j<n;j++)
		cout<<A[i][j];
		cout<<endl;
		}
	cout<<endl;
	getch ();
return 0;
}
Модератор: тег CODE

Последний раз редактировалось MaTBeu; 18.01.2009 в 17:36.
siriusz вне форума Ответить с цитированием
Старый 18.01.2009, 16:07   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

siriusz Тут есть один момент, требующий уточнения:
Дело в том, что если при такой замене номера столбца и строки не совпадают, то теряется один элемент.
Вот код, который меняет местами строку и столбец с одинаковым номером:
Код:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>

char vibor;
float A[50][50],B[50][50];
int n,m,i,j,a;
int numi;

main()
{
cout<<"Vvedite poryadok matrici:";
cin>>m;
cout<<"\nVvedite nomer stroki: ";
cin>>numi;
n=m;
cout<<endl;
for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
	{
	//cout<<"Vedite element A["<<i+1<<"]["<<j+1<<"]: ";
	//cin>>A[i][j];
	cout.width(5);
	A[i][j] = i*10+j;   //для наглядности
	cout<<A[i][j];
	}
	cout<<endl;
 }
cout<<endl;

cout<<"Matrica A:"<<endl<<endl;
for(i=0;i<n;i++)
 {
	for(j=0;j<n;j++)
	 {  cout.width(5);
			cout<<A[i][j]; }
 cout<<endl;
 }
//----------
  for(i=0;i<n;i++)
	 for(j=0;j<n;j++)
	  {
		if(i==numi) B[i][j] = A[j][numj];
		else
		 {
			if(j==numj) B[i][j] = A[numi][i];
			else B[i][j] = A[i][j];
		 }
	  }
 
cout<<"Matrica B:"<<endl<<endl;
for(i=0;i<n;i++)
 {
	for(j=0;j<n;j++)
	 {
		cout.width(5);
		cout<<B[i][j];		 
	 }
	 cout<<endl;
	}
cout<<endl;
getch ();
return 0;
}
Результат работы:
Код:
Vvedite poryadok matrici:5

Vvedite nomer stroki: 3

    0    1    2    3    4
   10   11   12   13   14
   20   21   22   23   24
   30   31   32   33   34
   40   41   42   43   44

Matrica A:

    0    1    2    3    4
   10   11   12   13   14
   20   21   22   23   24
   30   31   32   33   34
   40   41   42   43   44
Matrica B:

    0    1    2   30    4
   10   11   12   31   14
   20   21   22   32   24
    3   13   23   33   43
   40   41   42   34   44
------------------------------
А вот код, меняющий строку и столбец с разными номерами. Но, как я и сказал, один элемент теряется (тот, который находится на пересечении).
Код:
#include <conio.h>
#include <stdio.h>
#include <iostream.h>

char vibor;
float A[50][50],B[50][50];
int n,m,i,j,a;
int numi,numj;

main()
{
cout<<"Vvedite poryadok matrici:";
cin>>m;
cout<<"\nVvedite nomer stroki: ";
cin>>numi;
cout<<"\nVvedite nomer stolbca: ";
cin>>numj;
n=m;
cout<<endl;
for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
	{
	//cout<<"Vedite element A["<<i+1<<"]["<<j+1<<"]: ";
	//cin>>A[i][j];
	cout.width(5);
	A[i][j] = i*10+j;   //для наглядности
	cout<<A[i][j];
	}
	cout<<endl;
 }
cout<<endl;

cout<<"Matrica A:"<<endl<<endl;
for(i=0;i<n;i++)
 {
	for(j=0;j<n;j++)
	 {  cout.width(5);
			cout<<A[i][j]; }
 cout<<endl;
 }
//----------
 for(i=0;i<n;i++)
	 for(j=0;j<n;j++)
	  {
		if(i==numi) B[i][j] = A[j][numj];
		else
		 {
			if(j==numj) B[i][j] = A[numi][i];
			else B[i][j] = A[i][j];
		 }
	  }

cout<<"Matrica B:"<<endl<<endl;
for(i=0;i<n;i++)
 {
	for(j=0;j<n;j++)
	 {
		cout.width(5);
		cout<<B[i][j];		 
	 }
	 cout<<endl;
	}
cout<<endl;
getch ();
return 0;
}
Результат:
Код:
Vvedite poryadok matrici:5

Vvedite nomer stroki: 2

Vvedite nomer stolbca: 1

    0    1    2    3    4
   10   11   12   13   14
   20   21   22   23   24
   30   31   32   33   34
   40   41   42   43   44

Matrica A:

    0    1    2    3    4
   10   11   12   13   14
   20   21   22   23   24
   30   31   32   33   34
   40   41   42   43   44
Matrica B:

    0   20    2    3    4
   10   21   12   13   14
    1   11   21   31   41
   30   23   32   33   34
   40   24   42   43   44
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.01.2009, 18:14   #3
siriusz
 
Аватар для siriusz
 
Регистрация: 22.12.2008
Сообщений: 9
По умолчанию

Спасибо за код. А можно попросить сделать сделать замену заданных 2 строк (например 2 и 5). и отдельно замену заданных 2 столбцов (например 1 и 3).
siriusz вне форума Ответить с цитированием
Старый 18.01.2009, 18:40   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Для строк:
Код:
#include <iostream>
#include <conio.h>

using namespace std;
const int m=5,n=5;
int main(){
int i,j,tmp,matr[m][n],numi1,numi2;
//---
for(i=0;i<m;i++)
	{
  for(j=0;j<n;j++)
   {
		matr[i][j] = i*10+j;
		cout.width(4);
		cout<<matr[i][j];
		}
		cout<<endl;
	}
//-------
cout<<"\nEnter number 1: ";
cin>>numi1;
cout<<"\nEnter number 2: ";
cin>>numi2;
for(j=0;j<n;j++)
  {
	 tmp = matr[numi1][j];
	 matr[numi1][j] = matr[numi2][j];
	 matr[numi2][j] = tmp;
	}
//---
for(i=0;i<m;i++)
 {
	for(j=0;j<n;j++)
	 {
		cout.width(4);
		cout<<matr[i][j];
		}
	cout<<endl;
	}

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.01.2009, 18:42   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Для столбцов:
Код:
#include <iostream>
#include <conio.h>

using namespace std;
const int m=5,n=5;
int main(){
int i,j,tmp,matr[m][n],numj1,numj2;
//---
for(i=0;i<m;i++)
	{
  for(j=0;j<n;j++)
   {
		matr[i][j] = i*10+j;
		cout.width(4);
		cout<<matr[i][j];
		}
		cout<<endl;
	}
//-------
cout<<"\nEnter number 1: ";
cin>>numj1;
cout<<"\nEnter number 2: ";
cin>>numj2;
for(i=0;i<m;i++)
  {
	 tmp = matr[i][numj1];
	 matr[i][numj1] = matr[i][numj2];
	 matr[i][numj2] = tmp;
	}
//---
for(i=0;i<m;i++)
 {
	for(j=0;j<n;j++)
	 {
		cout.width(4);
		cout<<matr[i][j];
		}
	cout<<endl;
	}

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.01.2009, 19:09   #6
siriusz
 
Аватар для siriusz
 
Регистрация: 22.12.2008
Сообщений: 9
По умолчанию

А что такое
Код:
cout.width(4);
siriusz вне форума Ответить с цитированием
Старый 18.01.2009, 19:13   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Задает ширину поля. Попробуйте удалить это и запустить программу - сразу станет понятно )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти номера(индексы) в матрице хотябы одной строки или хотя бы одного столбца не содержащих еденицы Сергей Попов Паскаль, Turbo Pascal, PascalABC.NET 1 28.11.2008 08:59
В прямоугольной матрице переставить столбцы так, чтобы сумма элементов столбца росла от первого столбца Aleo13 Помощь студентам 5 15.10.2008 18:34
точки плоскости, заданные своими координатами, попадают в круг с радиусом R Jondeer Общие вопросы C/C++ 6 16.06.2008 00:06
как в TreeView обменять местами 2 элемента andrey4623 Компоненты Delphi 3 07.02.2008 20:10
Столбцы озаглавлены цифрами. как исправить? zoom Microsoft Office Excel 2 06.10.2007 18:13