Матрица с использованием динамической памяти!

  • Автор темы Автор темы Maksi
  • Дата начала Дата начала
M

Maksi

Вот сама задача:
Дана целочисленная прямоугольная матрица размерности n на m. Упорядочить её строки по возрастанию количества одинаковых элементов в каждой строке, а также найти номер первого из столбцов, не содержащих ни одного отрицательного элемента.
Вот часть кода:
#include "stdafx.h"
#include <iostream>
using namespace std;


void main()
{
int n, m;
int i,j;
cout << "Vvedite n:" << endl;
cin >> n;
cout << "Vvedite m:" << endl;
cin >> m;
int ** matr = new int*[n];
for(i=0; i<n; i++)
matr = new int[m];
for(i=0; i<n; i++)
for(j=0; j<n; j++)
matr[j] = rand()%(10-5);
{
cout << matr[j] << "\t";
cout << endl;
}

}
Она не работает, выдаёт ошибку! Помогите её найти, пожалуйста! Ответ лучше на мыло: maxim_nokia@mail.ru
 
Очевидно при n <= m всё работает :) А ошибка вот она:
Код:
for(i=0; i<[b]n[/b]; i++)
for(j=0; j<[b]n[/b]; j++)
два раза повторяется n, а второй раз должно быть m. Хотя я так понял это только начало, т.е. только ввод данных и заполнение матрицы случайными числами.
 
Да, действительно, это только начало...ещё нужно упорядочить строки по возрастанию количества одинаковых элементов в каждой строке и найти номер первого из столбцов, не содержащих ни одного отрицательного элемента...буду думать как...кому не составит труда, напишите пожалуйста...
 
Про сортировку можешь почтитать здесь Как мне кажется, самый простой и самый очевидный способ - По крайней мере, до такого алгоритма я когда-то додумался без подсказок :unsure:
 
у меня вообще не получается вывести матрицу! Помогите пожалуйста!
 
Вывести матрицу на экран?
Код:
for(i = 0; i < n; i++) {
for(j = 0; j < m; j++)
cout << matr[i][j] << "\t";
cout << endl;
}
 
shisik, слушай, а как отсортировать матрицу? Я только с массивами сталкивался, а с матрицами чё делать?
 
Так а что в этом сложного? Сравниваешь первые элементы (тебе ж вроде так надо), а потом меняешь местами (см. алгоритм) указатели на строки. Т.е. что-то вроде такого:
Код:
#include <iostream>

using namespace std;

int main(void)
{
int i, j, n = 8, m = 15;

int **matrix = new int*[n];
for (i = 0; i < n; i++)
*(matrix + i) = new int[m];

for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
*(*(matrix + i) + j) = random()%10;

int *tmp_ptr;

for (i = 0; i < n; i++)
for (j = 0; j < n - 1; j++)
if (**(matrix + j) > **(matrix + j + 1)) {
tmp_ptr = *(matrix + j);
*(matrix + j) = *(matrix + j + 1);
*(matrix + j + 1) = tmp_ptr;
}


for (i = 0; i < n; i++) {
for (j = 0; j < m; j++)
cout << *(*(matrix + i) + j) << ' ';
cout << endl;
}

for (i = 0; i < n; i++) 
delete [] *(matrix + i);

delete [] matrix;

return 0;
}
 
сделал матрицу меньше 5 на 4, и добавил rand()%10-5, чтоб отрицательные тож выводил, первоначальная матрица вот такая:
-4 2 -5 1
4 -1 3 3
-3 -1 0 0
-4 2 -4 -4
0 -3 2 1
а после сортировки:
-4 2 -1 5
-4 2 -4 -4
-3 -1 0 0
0 -3 2 1
4 -1 3 3
оно не отсортировало по возрастанию одинаковых элементов в строке...
 
Сорри, я сортировал по первому элементу, не досмотрел задачу. В таком случае я б ввёл ещё один массив, содержащий кол-ва одинаковых элементов в строках. Потом вместо if (**(matrix + j) > **(matrix + j + 1)) поставил бы сравнение элементов этого массива. Только местами менять наужно будет ещё и элементы этого массива.
Ну или можно вычислять количество одинаковых элементов непосредственно в цикле сортировки...
 
блин, чё-то вообще башка не варит, если не составит труда, напиши в коде это плиз!

это РГР, завтра сдаваться, а у меня кода нету на 2е задание, 1е то я сделал...
 
А что означает "количество одинаковых элементов"? Это количество всех элементов, которые повторяются хотя бы 2 раза? Или другой признак? Вот сколько будет одинаковых элементов в массиве:
1 1 3 4 4 4 5 6 7 8 8 9
Получается 7? Или другое число, скажем 3?
 
над таким примером я не задумывался, можно взять чё-нить короче, да ещё и с отрицательными элементами, такого явно не будет...
максимум 5-6 элементов задать и всё...пускай такое значение выдаст допустим: 1 5 5 3 3...я думаю, что тут кол-во одинаковых элементов равно 2м...или 4ре...блин, вот фиг его знает слушай, может сделать так, пускай считает сколько одинаковых, и потом их складывает и выдаёт число, так проще будет навена, т.е. в твоём случаее - будет 7, а в моём 4...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!