Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Матрица с использованием динамической памяти!
Форум программистов > Системное программирование > C, С++ и С Builder > MS Visual C++
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[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
shisik
Очевидно при n <= m всё работает smile.gif А ошибка вот она:
for(i=0; i<[b]n[/b]; i++)
for(j=0; j<[b]n[/b]; j++)

два раза повторяется n, а второй раз должно быть m. Хотя я так понял это только начало, т.е. только ввод данных и заполнение матрицы случайными числами.
Maksi
Да, действительно, это только начало...ещё нужно упорядочить строки по возрастанию количества одинаковых элементов в каждой строке и найти номер первого из столбцов, не содержащих ни одного отрицательного элемента...буду думать как...кому не составит труда, напишите пожалуйста...
shisik
Про сортировку можешь почтитать здесь ]]>http://ru.wikipedia.org/wiki/Алгоритм_сортировки]]> Как мне кажется, самый простой и самый очевидный способ - ]]>http://ru.wikipedia.org/wiki/Сортировка_пузырьком]]> По крайней мере, до такого алгоритма я когда-то додумался без подсказок smile.gif
Maksi
у меня вообще не получается вывести матрицу! Помогите пожалуйста!
shisik
Вывести матрицу на экран?
for(i = 0; i < n; i++) {
   for(j = 0; j < m; j++)
      cout << matr[i][j] << "\t";
   cout << endl;
}
Maksi
shisik, слушай, а как отсортировать матрицу? Я только с массивами сталкивался, а с матрицами чё делать?
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;
}
Maksi
сделал матрицу меньше 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
оно не отсортировало по возрастанию одинаковых элементов в строке...
shisik
Сорри, я сортировал по первому элементу, не досмотрел задачу. В таком случае я б ввёл ещё один массив, содержащий кол-ва одинаковых элементов в строках. Потом вместо if (**(matrix + j) > **(matrix + j + 1)) поставил бы сравнение элементов этого массива. Только местами менять наужно будет ещё и элементы этого массива.
Ну или можно вычислять количество одинаковых элементов непосредственно в цикле сортировки...
Maksi
блин, чё-то вообще башка не варит, если не составит труда, напиши в коде это плиз!

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