| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Параметр функции |
| Автор: dark0ut 14.5.2004, 23:49 |
| У меня есть несколько функций, в том числе функция сортировки по возрастанию элементов мат рицы, располож. до первого минимального элемента. Проблема в том, что функции в качестве св оих параметров не хочет передавать двумерный массив. Я определяю функции: 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 15.5.2004, 00:03 | ||
| При объявлении функии с массивом в качестве параметра, нужно задавать все размерности массива в явном виде, кроме первой. Т.е. например так:
|
| Автор: mr.DUDA 15.5.2004, 11:35 | ||
Хорошим тоном будет передавать указатели в качестве аргументов функций, т.к. вполне возможно, что может понадобиться та же функция, но сортирующая массив N на M, где ни M ни N заранее не известны (их также нужно передавать через аргумент функции). Вот работающий код dark0ut-а:
|
| Автор: dark0ut 15.5.2004, 13:00 | ||||
Теперь функция передается в параметрах, но вот при ее вызове - input (a, n); - все равно ошибка. - [C++ Error] lab10.cpp(19): E2034 Cannot convert 'int *' to 'int ( *)[3]' |
| Автор: Artiom 15.5.2004, 14:11 | ||
например это нормально компилится. А лучше делать так как написал сверху mr.DUDA |
| Автор: dark0ut 15.5.2004, 15:13 | ||
| Ура! Я домучил прогу. 9 6 4 7 8 5 3 0 2 По идее он должен отсортировать первые 2 строчки по возрастанию, а он сортирует первую нор мально, а вторую по-кривому и получается вот что: 4 9 6 5 7 8 3 0 2 Не могу понять почему. Вот полный код проги:
|
| Автор: Anklav 15.5.2004, 15:40 |
| Раз ты ищешь минимальный элемент в матрице, то возвращай номер столбца и номер строки, а ты возвращаешь только номер строки. |
| Автор: dark0ut 16.5.2004, 01:03 |
| А чем это поможет при сортировке? Напиши код, plz |