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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2014, 08:12   #1
Rokill
 
Регистрация: 12.08.2014
Сообщений: 3
По умолчанию Помогите найти ошибку: Сортировка строк матрицы по убыванию соответствующего элемента главной диагонали(Cи)

помоги пожалуйста
не могу понять в чём ошибка!

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

int create (int **a,int n,int m)
{
for (int i=0;i<n;i++){
for (int j=0;j<m;j++){
a[i][j]=rand()%5-rand()%5;
printf ("%4d", a[i][j]);
}
printf ("\n");}}

int izm (int **a,int n,int m)
{
int temp;
for (int i=0;i<n-1;i++)
    for (int j=0;j<n-i-1;j++)
        if (a[j][j]<a[i][i])
           for (int k=0; k<n; k++)
                {
                    temp=a[i][k];
                    a[i][k]=a[j][k];
                    a[j][k]=temp;
                }    
printf("\n");
for(int i=0;i<n;i++)
{ for(int j=0;j<m;j++)
{ printf("%4d",a[i][j]);}
printf("\n");}
}


int main() 
{
srand (time(NULL));
system ("chcp 1251");
int n=4,m=4;
int **matr;
matr=new int*[n];
for (int i=0;i<n;i++)
matr[i]=new int[m];

create(matr,n,m);
izm(matr,n,m);
system ("PAUSE");
}
Rokill вне форума Ответить с цитированием
Старый 12.08.2014, 08:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

По-моему так эту задачу не решишь. Ты когда переставляешь строки матрицы, у тебя получается меняются и сами элементы главной диагонали. У тебя диагональ не стабильна. Тут нужен другой метод. Например: Добавь в матрицу еще одну колонку (которую на экран не выводи). По созданию в нее перепиши элементы диагонали, и сортируй уже по этой колонке. Тогда даже двигая строки данные в колонке меняться не будут относительно своих строк.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2014, 08:55   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet
у тебя получается меняются и сами элементы главной диагонали.
согласен.

на мой взгляд, нужно делать так:
найти строку с максимальным элементов в позиции 1-столбца ( max (a[i,0] )
поставить эту строку на первое место (строка с индексом 0).
Потом среди оставшихся строк найти строку с максимальным элементом в позиции 2-го столбца ( max (a[i,1] ) и поставить эту строку на второе место (строка с индексом 1) и т.д.

Примерный код набросать или самостоятельно справитесь?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2014, 08:58   #4
Rokill
 
Регистрация: 12.08.2014
Сообщений: 3
По умолчанию

что-то не совсем понимаю как это реализовать,можете помочь с кодом?
Rokill вне форума Ответить с цитированием
Старый 12.08.2014, 13:58   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

нет, я не додумал.
Предложенный мною выше алгоритм работать не будет!

например, если есть матрица:
Код:
 3  8  15  5
20 15 -1  5
8  23  9  -1
-3  1 22  6
строка с максимальным элементом в первом столбце: 20
но во втором столбце максимальный элемент 23 - уже не получается обеспечить убывание элементов главной диагонали.

Надо ещё подумать над алгоритмом.

добавлено
очевидно, что не для любой матрицы подобная сортировка вообще может быть осуществлена!

Последний раз редактировалось Serge_Bliznykov; 12.08.2014 в 14:03.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2014, 14:25   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Надо ещё подумать над алгоритмом.
Мне кажется я выше предложил вполне работоспособную версию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2014, 14:45   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А мне не кажется. Переставив строки таким образом получим неупорядоченную диагональ. Просто в лоб - перебор всех вариантов расположения строк. И решение может отсутствовать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.08.2014, 15:46   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Переставив строки таким образом получим неупорядоченную диагональ.
Стоп! Тогда получается что код в Топе автора всетки верный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.08.2014, 16:13   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Стоп! Тогда получается что код в Топе автора всетки верный.
с чего Вы это решили?
думаю, что нет.

1-х, нет проверки на то, что задание не имеет решения

2-е. нет перебора всех возможных вариантов.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2014, 17:36   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
с чего Вы это решили?
Дак утром я код тестил - вроде как сортировало верно, может что упустил...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами на С++. Найти сумму элементов, расположенных выше главной диагонали, включая элементы главной диагонали. Анастасия225 Помощь студентам 5 20.01.2014 20:47
от -20 до 20. Требуется:. Найти сумму элементов главной диагонали матрицы luchik098 Паскаль, Turbo Pascal, PascalABC.NET 1 16.06.2013 21:27
Составить программу для обмена местами максимального и минимального элемента главной диагонали квадратной числовой матрицы. сона Паскаль, Turbo Pascal, PascalABC.NET 3 09.07.2012 00:57
Найти сумму элементов главной диагонали матрицы (Паскаль.) r.elen Помощь студентам 10 14.04.2011 13:24
Ф-ия, определяющая сумму строк матрицы, если на главной диагонали матрицы имеется отрицательный эл-т. Volk_xD Помощь студентам 6 05.01.2011 13:39