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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2011, 00:21   #1
alexanna
Новичок
Джуниор
 
Регистрация: 06.11.2010
Сообщений: 1
По умолчанию Квадратная матрица

Помогите пожалуйста определить, что делаю не так: надо отсортировать квадратную матрицу по возрастанию элементов первого столбца.
Код:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
//form matrici
{int  n,m,i=0,j,k=0;
double temp;
cout<<"Vvedi kol-vo strok i stolbcov:"<<endl;
cin>>n>>m;
double *a=new double[n*m];
double *b=new double[n*m];
cout<<"massiv:"<<endl;
for (i=0; i<n;i++)
{
for (j=0; j<m;j++)
{*(a+i*m+j)=(double)(-2+rand()%8)/3;
cout<<setw(5)<<setprecision(1)<<*(a+i*m+j)<<' ';
*(b+k)=*(a+i*m+j);k++;
}
cout<<endl;}
for (i=0; i<n;i++)
for (j=0; j<m;j++)
for (k=j+1; k<m;k++)
if (*(a+i*m+j)>*(a+i*m+k))
{temp=*(a+i*m+j);
*(a+i*m+j)=*(a+i*m+k);
*(a+i*m+k)=temp;
}
cout<<"New massiv:"<<endl; 
k=0;
for (i=0; i<n;i++)
{
for (j=0; j<m;j++)
{
*(a+i*m+j)=*(b+k);k++;
cout<<setw(5)<<setprecision(1)<<*(a+i*m+j)<<' ';
}
cout<<endl;}
delete[]a;
delete[]b;
system ("pause");
return 0;
}

Последний раз редактировалось ACE Valery; 22.01.2011 в 01:40.
alexanna вне форума Ответить с цитированием
Старый 22.01.2011, 01:41   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

А что, собственно, не так? Ошибка при компиляции? Ошибка при выполнении? Просто не правильно сортирует?
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 22.01.2011, 01:45   #3
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Где проблема? Код собирать и тестировать лень.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 22.01.2011, 13:54   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от alexanna Посмотреть сообщение
Помогите пожалуйста определить, что делаю не так
1. Массив b[] - в сад! Только запутал Вас...
2. Сортировку - переписать.
3. m - паразитная переменная (матрица по условию - квадратная).
Vago вне форума Ответить с цитированием
Старый 22.01.2011, 14:29   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

имхо сортировка должна выглядеть так:
Код:
for (i=0; i<(n-1);i++)
 for (j=0; j<(n-1);j++)
   if (a[j][0]>a[j+1][0])
    for(int k=0;k<n;k++)
      temp=a[j][k];a[j][k]=a[j+1][k];a[j+1][k]=temp
... Это если я не перепутал ничего...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.01.2011, 16:22   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

А лучше так:
Код:
#include <iostream>
#include <algorithm>
 
int main() {
  int array[] = { 23, 5, -10, 0, 0, 321, 1, 2, 99, 30 };
  int n = sizeof(array) / sizeof(array[0]); 
  std::sort(array, array + n);
  for (int i = 0; i < n; ++i) {
     std::cout << array[i] << ' ';
  }
}
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 22.01.2011, 16:40   #7
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

[Оставив пока в стороне тот факт, что приведенный фрагмент решает не ту задачу, которая поставлена изначально] для того уровня знаний, на котором сейчас находится ТС, к сожалению, - не лучше.
Vago вне форума Ответить с цитированием
Старый 22.01.2011, 17:47   #8
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Тогда так, пусть будет учебный метод пузырька:
Код:
template <class T >
inline void swap(T array[], size_t pos1, size_t pos2)
{
    T temp;
    temp = array[pos1];
    array[pos1] = array[pos2];
    array[pos2] = temp;
}

template <class T>
inline void bubble_sort(T array[], size_t size)
{
    int i, j;
    for(size_t i = 0; i < size - 1; ++i) {
        for(size_t j = size - 1; j > i; --j) {
            if(array[j - 1] > array[j]) {
                swap(array, j - 1, j);
            }
        }
    }
}
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 22.01.2011, 17:51   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Obey-Kun
Дык это...:
Цитата:
отсортировать квадратную матрицу по возрастанию элементов первого столбца.
Как то я твоем примере не улавливаю сортир по первому столбцу...
Или я не вижу?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.01.2011, 17:58   #10
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Ну нужный код сортировки она-то уж могла выделить.

На самом деле подразумевалось, что она сделает класс «столбец», перегрузит оператор сравнения, потом сделает массив столбцов . Шучу конечно. Просто скопипастил сниппет из своих. Лень было убирать лишнее.

Автор, на каком этапе изучания C++ вы находитесь? Знаете ли что такое:
1) Функкция
2) Структура (Си)
3) Класс
4) Шаблон
5) std::vector
Скажите, и я напишу код с учётом ваших знаний. Заодно поймёте, как лучше именовать переменные и много другого.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 22.01.2011 в 18:11.
Obey-Kun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Квадратная матрица Stellart Паскаль, Turbo Pascal, PascalABC.NET 0 21.12.2010 12:34
квадратная матрица Tata4ka Помощь студентам 2 02.11.2010 13:47
квадратная матрица Ольга123456 Паскаль, Turbo Pascal, PascalABC.NET 3 24.05.2010 16:21