![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| dark0ut |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 20.2.2003 Репутация: нет Всего: нет |
У меня есть несколько функций, в том числе функция сортировки по возрастанию элементов мат
рицы, располож. до первого минимального элемента. Проблема в том, что функции в качестве св оих параметров не хочет передавать двумерный массив. Я определяю функции: void input (int [][], int &); void sort (int [][], int, int); void output (int [][], int); С одномерным массивом все ОК, а при передаче параметра в виде матрицы компилятор шлет о шибку. Пришлось представлять двумерный массив как одномерный - a[i*n+j]. Но тогда не работ ает сортировка: void sort(int a[], int n, int minstr) { int min=0, minid=0, backup=0; for (int i=0; i<minstr; i++) { for (t=0; t<n; t++) { min=a[i*n+t]; for (int t1=t; t1<n; t1++) { if (a[i*n+t1]<min) { min=a[i*n+t1]; minid=i*n+t1; } } backup=a[i*n+t]; a[i*n+t]=a[minid]; a[minid]=backup; } } } В чем ошибка сортировки и почему матрица не передается в виде параметра функции? |
|||
|
||||
| Anklav |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 9.12.2003 Где: Менск Репутация: нет Всего: 1 |
При объявлении функии с массивом в качестве параметра, нужно задавать все размерности массива в явном виде, кроме первой.
Т.е. например так:
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Хорошим тоном будет передавать указатели в качестве аргументов функций, т.к. вполне возможно, что может понадобиться та же функция, но сортирующая массив N на M, где ни M ни N заранее не известны (их также нужно передавать через аргумент функции). Вот работающий код dark0ut-а:
-------------------- ![]() |
|||
|
||||
| dark0ut |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 20.2.2003 Репутация: нет Всего: нет |
Теперь функция передается в параметрах, но вот при ее вызове - input (a, n); - все равно ошибка. - [C++ Error] lab10.cpp(19): E2034 Cannot convert 'int *' to 'int ( *)[3]' |
||||
|
|||||
| Artiom |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
например это нормально компилится. А лучше делать так как написал сверху mr.DUDA -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
| dark0ut |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 20.2.2003 Репутация: нет Всего: нет |
Ура! Я домучил прогу.
9 6 4 7 8 5 3 0 2 По идее он должен отсортировать первые 2 строчки по возрастанию, а он сортирует первую нор мально, а вторую по-кривому и получается вот что: 4 9 6 5 7 8 3 0 2 Не могу понять почему. Вот полный код проги:
|
|||
|
||||
| Anklav |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 9.12.2003 Где: Менск Репутация: нет Всего: 1 |
Раз ты ищешь минимальный элемент в матрице, то возвращай номер столбца и номер строки, а ты возвращаешь только номер строки.
Это сообщение отредактировал(а) Anklav - 15.5.2004, 15:42 |
|||
|
||||
| dark0ut |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 20.2.2003 Репутация: нет Всего: нет |
А чем это поможет при сортировке? Напиши код, plz
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |