Вот сама задача:
Дана целочисленная прямоугольная матрица размерности 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[i] = new int[m];
for(i=0; i<n; i++)
for(j=0; j<n; j++)
matr[i][j] = rand()%(10-5);
{
cout << matr[i][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. Хотя я так понял это только начало, т.е. только ввод данных и заполнение матрицы случайными числами.
Да, действительно, это только начало...ещё нужно упорядочить строки по возрастанию количества одинаковых элементов в каждой строке и найти номер первого из столбцов, не содержащих ни одного отрицательного элемента...буду думать как...кому не составит труда, напишите пожалуйста...
Про сортировку можешь почтитать здесь
]]>http://ru.wikipedia.org/wiki/Алгоритм_сортировки]]> Как мне кажется, самый простой и самый очевидный способ -
]]>http://ru.wikipedia.org/wiki/Сортировка_пузырьком]]> По крайней мере, до такого алгоритма я когда-то додумался без подсказок
у меня вообще не получается вывести матрицу! Помогите пожалуйста!
Вывести матрицу на экран?
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...
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.