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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2011, 13:35   #1
DrPsych
Новичок
Джуниор
 
Регистрация: 30.12.2011
Сообщений: 1
По умолчанию Сортировка столбцов двумерной матрицы

Задание:
Дана целочисленная квадратная матрица.
1. Необходимо поменять местами максимальный элемент главной диагонали и элемент, лежащий на пересечении главной и побочной диагоналей.
2. Характеристикой столбца целочисленной матрицы назовем сумму его отрицательных нечетных элементов. Упорядочить столбцы матрицы в соответствии с ростом их характеристик

Вот то что получилось,
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
const int M=100, N=100;
int a[N][N],n,i,j,temp,k=0,l=0,p=0,q=0,har[M],z;
cout <<"Введите размер матрицы ";
cin >>n;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<"Введите элемент "<<i+1<<" строки "<<j+1<<" столбца ";
cin>>a[i][j];
}
}

cout<<"Введена матрица: "<<endl;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
cout<<a[i][j]<<" "<<'\t';
}cout<<endl;
}
//1
a[k][l]=a[0][0];
for(i=0;i<n;i++){
if (a[k][l]<a[i][i]) { k=i;
l=i;}
}
cout<<"максимальный элемент = "<<a[k][l];
cout<<endl;
p=((n-1)/2);
q=((n-1)/2);
cout<<"центр матрицы = "<<a[p][q]<<endl;
temp=a[k][l];
a[k][l]=a[p][q];
a[p][q]=temp;

cout<<"измененная матрица : "<<endl;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
cout<<a[i][j]<<" "<<'\t';
}
cout<<endl;
}
//2
bool fl;
for ( j=0;j<n;j++){
har[j]=0;
for(i=0;i<n;i++)
if ((a[i][j]<0)&&(!((a[i][j])%2==0)))
har[j]=a[i][j]+har[j];
}
do
{
fl=1;

for(j=0;j<n;j++)

if(har[j]>har[j+1])
{temp=har[j];
har[j]=har[j+1];
har[j+1]=temp;

for(j=0;j<n-1;j++){
for (i=0;i<n;i++){
temp=a[i][j];
a[i][j]=a[i][j+1];
a[i][j+1]=temp;
}
}
fl=0;
}}
while(!fl);
cout <<"Готовая матрица:"<<endl;
for (i=0; i<n; i++)
{
for (j=0; j<n; j++) cout<<a[i][j]<<" "<<'\t';
cout<<endl;
}
cout<<" Характеристики столбцов: "<<endl;
for (j=0;j<n;j++)
cout<<har[j+1]<<" ";
cout<<'\n';
system("pause");
}


Проблема:
во втором задании столбцы сортируются неправильно
DrPsych вне форума Ответить с цитированием
Старый 05.01.2012, 01:05   #2
CaHb4ec
Пользователь
 
Регистрация: 02.01.2012
Сообщений: 25
По умолчанию

Во-первых, код оформлен крайне нечитабельно.
Во-вторых, цикл do_while:
Цитата:
Код:
do 
{ 
fl=1;

for(j=0;j<n;j++)

if(har[j]>har[j+1])
{temp=har[j];
har[j]=har[j+1];
har[j+1]=temp;

for(j=0;j<n-1;j++){
for (i=0;i<n;i++){
temp=a[i][j];
a[i][j]=a[i][j+1];
a[i][j+1]=temp;
}
}
fl=0;
}}
while(!fl);
зачем он вам вообще был нужен, если после первого же прохода вы выходите из него?
В-третьих, внутри цикла вы пытаетесь сортировать характеристики и соответствующие столбцы. Но вы используете не полный алгоритм сортировки, а именно после первого прохода по элементам сортировка у вас оканчивается, пример характеристик до:
Код:
-3 -7 -9
после:
Код:
-7 -9 -3
что как видите не будет являться правильно отсортированным массивом элементов.
И в заключении, косяк при выводе характеристик в самом низу. Почему har[j+1], вывод ведь начинаем с 0 индекса.
В итоге, часть кода по второму заданию:
Код:
//2
bool fl;
for ( j=0;j<n;j++){
har[j]=0;
for(i=0;i<n;i++)
if ((a[i][j]<0)&&(!((a[i][j])%2==0)))
har[j]=a[i][j]+har[j];
}
for(int k=0;k<n-1;k++)//проходим несколько раз при сортировке
{
	for(j=0;j<n-1;j++)
	{
		if(har[j]>har[j+1])
		{
			temp=har[j];
			har[j]=har[j+1];
			har[j+1]=temp;
			for(int i=0;i<n;i++)
			{
				temp=a[i][j];
				a[i][j]=a[i][j+1];
				a[i][j+1]=temp;
			}
		}		
	}
}
cout <<"Готовая матрица:"<<endl; 
for (i=0; i<n; i++)
{ 
for (j=0; j<n; j++) cout<<a[i][j]<<" "<<'\t'; 
cout<<endl; 
}
cout<<" Характеристики столбцов: "<<endl;
for (j=0;j<n;j++)
cout<<har[j]<<" ";
cout<<'\n';
system("pause");
}

Последний раз редактировалось CaHb4ec; 05.01.2012 в 01:07.
CaHb4ec вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает алгоритм создания двумерной матрицы RANLOD C# (си шарп) 6 11.11.2011 23:37
диапозон значений элементов для каждой строки двумерной матрицы gagarin614 Visual C++ 1 09.11.2011 12:37
вывод номеров столбцов матрицы и подсчитать количество этих столбцов Vitalina69 Помощь студентам 2 15.02.2011 21:52
Преобразование двумерной матрицы в одномерную shamrock Помощь студентам 7 18.06.2009 18:09
Удаление элементов из двумерной матрицы Димитрон Помощь студентам 8 28.05.2009 22:38