Элементы каждого столбца прямоугольной матрицы упорядочить в порядке убывания.

Селявкина Мария

Добрый вечер.У меня задача на 2-х мерные массивы. Вот текст задачи: Элементы каждого столбца прямоугольной матрицы упорядочить в порядке убывания.
10 ответов

Селявкина Мария

#include <iostream>
using namespace std;
int main()
{
  //задаем массив
  //размеры массива будут NxM
  int n,m=1;
  cout << "Ввод размеров массива:\n";
  cin >> n >> m;
  float mass[n][m];
  float tmp=0;
  cout << "Ввод массива:\n";
  for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin >> mass[i][j];
  //сортировка
  for(int j=0;j<n;j++) 
    for(int i=0;i<m;i++)  
      for(int k=i;k<m;k++) 
      if (mass[i][j]<mass[k][j]) 
        {
          tmp=mass[i][j];
          mass[i][j]=mass[k][j];
          mass[k][j]=tmp;
        }
  cout << "\n Выводим сортированный:\n";
  for (int i = 0;i<n;i++) 
    {
      for (int j = 0;j<m;j++) cout << mass[i][j] << "\t"; 
      cout << "\n";
    }
}
это с++, на си алгоритм такой же, но вывод будет через printf.


Селявкина Мария

Программа не работает,выдает куча ошибок


Селявкина Мария

ты чем компилируешь? у меня все отлично собирается и работает: g++ myfile.cpp -o filename ./filename


Селявкина Мария

Microsoft Visuo Studio 2008


Селявкина Мария

код рабочий, ты что-то не так делаешь. покажи хоть, что за ошибки выдает


Селявкина Мария

Я просто скопировала ваш текст и еще ничего не исправляла. error C2057: требуется константное выражение error C2466: невозможно выделить память для массива постоянного нулевого размера error C2057: требуется константное выражение error C2466: невозможно выделить память для массива постоянного нулевого размера error C2087: mass: отсутствует индекс error C2133: mass: неизвестный размер error C2059: синтаксическая ошибка: return error C2059: синтаксическая ошибка: } error C2143: синтаксическая ошибка: отсутствие ";" перед "}" error C2059: синтаксическая ошибка: }


Селявкина Мария

попробуй так:
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
{
  //задаем массив
  //размеры массива будут NxM
  int n,m=1;
  cout << "Ввод размеров массива:\n";
  cin >> n >> m;
  float mass[n][m];
  float tmp=0;
  cout << "Ввод массива:\n";
  for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin >> mass[i][j];
  //сортировка
  for(int j=0;j<n;j++) 
    for(int i=0;i<m;i++)  
      for(int k=i;k<m;k++) 
      if (mass[i][j]<mass[k][j]) 
        {
          tmp=mass[i][j];
          mass[i][j]=mass[k][j];
          mass[k][j]=tmp;
        }
  cout << "\n Выводим сортированный:\n";
  for (int i = 0;i<n;i++) 
    {
      for (int j = 0;j<m;j++) cout << mass[i][j] << "\t"; 
      cout << "\n";
    }
return 0;
}


Селявкина Мария

Селявкина Мария, используйте динамическое выделение памяти:
float** mass = new float*[n];
for(i = 0; i < n; i++)
{
    mass[i] = new float[m];
}
 
......
// после работы - освободить память
for (i = 0; i < n; i++)
{
    delete [] mass[i];
}
delete [] mass;
Или объявите размеры массива как константы, например:
const int n = 5;
const int m = 5;


Селявкина Мария

А что for(int k=i;k


Селявкина Мария

k - это счетчик цикла, перебирает элементы столбца. Программа работает так пока j не вышло за пределы массива перебираем столбцы с 0 до n { пока i не вышло за пределы массива перебираем строки с 0 до m { пока k не вышло за пределы массива, перебираем элементы с i до m и, находя максимальный элемент, меняем его с i местами. // т.е в первой итерации находим самый большой элемент и ставим его на позицию i=0, затем находим второй по величине элемент и ставим на позицию i=1 и тд } }