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

Тема в разделе "MS Visual C++", создана пользователем Maksi, 22 май 2008.

  1. Maksi

    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
     
  2. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    Очевидно при n <= m всё работает :) А ошибка вот она:
    Код (Text):
    for(i=0; i<[b]n[/b]; i++)
    for(j=0; j<[b]n[/b]; j++)
    два раза повторяется n, а второй раз должно быть m. Хотя я так понял это только начало, т.е. только ввод данных и заполнение матрицы случайными числами.
     
  3. Maksi

    Maksi Гость

    Да, действительно, это только начало...ещё нужно упорядочить строки по возрастанию количества одинаковых элементов в каждой строке и найти номер первого из столбцов, не содержащих ни одного отрицательного элемента...буду думать как...кому не составит труда, напишите пожалуйста...
     
  4. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
  5. Maksi

    Maksi Гость

    у меня вообще не получается вывести матрицу! Помогите пожалуйста!
     
  6. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    Вывести матрицу на экран?
    Код (Text):
    for(i = 0; i < n; i++) {
    for(j = 0; j < m; j++)
    cout << matr[i][j] << "\t";
    cout << endl;
    }
     
  7. Maksi

    Maksi Гость

    shisik, слушай, а как отсортировать матрицу? Я только с массивами сталкивался, а с матрицами чё делать?
     
  8. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    Так а что в этом сложного? Сравниваешь первые элементы (тебе ж вроде так надо), а потом меняешь местами (см. алгоритм) указатели на строки. Т.е. что-то вроде такого:
    Код (Text):
    #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;
    }
     
  9. Maksi

    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
    оно не отсортировало по возрастанию одинаковых элементов в строке...
     
  10. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    Сорри, я сортировал по первому элементу, не досмотрел задачу. В таком случае я б ввёл ещё один массив, содержащий кол-ва одинаковых элементов в строках. Потом вместо if (**(matrix + j) > **(matrix + j + 1)) поставил бы сравнение элементов этого массива. Только местами менять наужно будет ещё и элементы этого массива.
    Ну или можно вычислять количество одинаковых элементов непосредственно в цикле сортировки...
     
  11. Maksi

    Maksi Гость

    блин, чё-то вообще башка не варит, если не составит труда, напиши в коде это плиз!

    это РГР, завтра сдаваться, а у меня кода нету на 2е задание, 1е то я сделал...
     
  12. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    А что означает "количество одинаковых элементов"? Это количество всех элементов, которые повторяются хотя бы 2 раза? Или другой признак? Вот сколько будет одинаковых элементов в массиве:
    1 1 3 4 4 4 5 6 7 8 8 9
    Получается 7? Или другое число, скажем 3?
     
  13. Maksi

    Maksi Гость

    над таким примером я не задумывался, можно взять чё-нить короче, да ещё и с отрицательными элементами, такого явно не будет...
    максимум 5-6 элементов задать и всё...пускай такое значение выдаст допустим: 1 5 5 3 3...я думаю, что тут кол-во одинаковых элементов равно 2м...или 4ре...блин, вот фиг его знает слушай, может сделать так, пускай считает сколько одинаковых, и потом их складывает и выдаёт число, так проще будет навена, т.е. в твоём случаее - будет 7, а в моём 4...
     
Загрузка...
Похожие Темы - Матрица использованием динамической
  1. fatpunk
    Ответов:
    0
    Просмотров:
    1.136
  2. нини
    Ответов:
    3
    Просмотров:
    1.744
  3. phobiaxx
    Ответов:
    1
    Просмотров:
    1.277
  4. vladis222
    Ответов:
    1
    Просмотров:
    1.285
  5. LudmilaUt
    Ответов:
    0
    Просмотров:
    1.383

Поделиться этой страницей