рекурсию не стоит делать, кмк медленнее получится вот в первом примере всё как раз так, как я представлял:) думаю, если включить самую злую оптимизацию в компиляторе, чтобы он и used, и flag и dig разместил в регистрах - будет хорошая производительность
Member
Статус: Не в сети Регистрация: 09.01.2009 Откуда: Москва
Как передать матрицу через параметры, указывая индексы в заголовке функции и в прототипе с помощью переменных? Передает матрицу только, если указать в ручную индексы. А совсем без индексов не хочет передаваться, в отличии от одномерного массива. Работает:
Код:
int vvodX(int,int,int [2][5]); void main(void) { const int m=2,n=5; int X[m][n]; X[m][n]=vvodX(m,n,X); } int vvodX(int m, int n, int X[2][5]) { return X[m][n]; }
Не работает:
Код:
int vvodX(int,int,int [m][n]); void main(void) { const int m=2,n=5; int X[m][n]; X[m][n]=vvodX(m,n,X); }
int vvodX(int m, int n, int X[m][n]) { return X[m][n]; }
Короче говоря, как передать динамическую матрицу в другую функцию?
Member
Статус: Не в сети Регистрация: 20.03.2009 Откуда: Санкт-Петербург
test'~3 У тебя ведь массив статический. Указатель тоже можно,но как-то муторно будет. Кстати поставь во втором варианте в прототип и в описание ф-ии заместо n число, тогда будет работать.
_________________ Задачи бывают простыми и очень простыми...
Member
Статус: Не в сети Регистрация: 09.01.2009 Откуда: Москва
Danmerpro писал(а):
test'~3 У тебя ведь массив статический. Указатель тоже можно,но как-то муторно будет. Кстати поставь во втором варианте в прототип и в описание ф-ии заместо n число, тогда будет работать.
Первая от второй только и отличаются m,n и числом. Просто если делать динамический массив, то я не знал как передать матрицу, ведь ручками уже не написать индексы, т.к. размер матрицы не известно.
второй вариант естественно не работает, т.к. на стадии компиляции m и n неизвестны, а матрицу ты пытаешься передать 1 куском памяти. в случае динамического выделения памяти под матрицу ты выделишь массив под указатели, а затем каждый указатель будет указывать на строку матрицы, и передавать соответственно надо как in ** matrix.
поясню: в случае статического выделения памяти под 2-мерный массив выделяется 1 сплошной кусок памяти, и когда берёшь из него элемент [i][j], фактически берётся элемент [i*LEN+j]. естественно, в этом случае компилятор уже должен знать размер этого массива. твой первый пример заработал бы, если перенести определение const int m=2,n=5; в глобальные переменные. в случае динамического выделения получается примерно такая картинка: #77 и выделять память надо так:
Код:
int ** matrix; matrix = (int **)malloc(n * sizeof(int*)); for (i = 0; i < n; i++) matrix[i] = (int *)malloc(m * sizeof(int));
Member
Статус: Не в сети Регистрация: 09.01.2009 Откуда: Москва
Не знаю еще что это за malloc и cizeof. Не могли бы просто привести пример передачи одномерного массива и матрицы по значению или по ссылке или указателем. Просто написать прототип, заголовок функции, вызов функции и возвращение.
динамический или статический? в случае статического всё просто - надо сразу указывать размер. в случае динамического - по указателю типа int* для одномерного массива и int** для двумерного (матрицы).
а про указатели учи. указатели и работа с памятью - это то, что каждый С программист обязан знать.
malloc - выделение памяти (от MemoryAllocation) нужного размера. размер в данном случае - количество элементов, помноженное на размер типа данных - sizeof.
Вопрос по Visual Studio - можно ли настроить редактор кода так, чтобы он подсвечивал на странице все вхождения выделенного слова (желательно только переменные)? Примерно как это делает notepad++.
Member
Статус: Не в сети Регистрация: 02.02.2007 Откуда: Казахстан
в Visual c++ 2010 в справочнике есть пример использования rvalue reference, однако при копировании выдается ошибка (error C2440:невозможно преобразовать "MemoryBlock" в "MemoryBlock &&")
Код:
// A class that contains a memory resource. class MemoryBlock { // TODO: Add resources for the class here. };
если заменять эту строчку на return std::forward<MemoryBlock>(block) или просто преобразовать в тип && явно, то ошибки нет это просто ошибка в примере или сам компилятор не верно работает (может в сп1 испрввлена эта ошибка) ?
format String that contains the text to be written to stdout. It can optionally contain embedded format tags that are substituted by the values specified in subsequent argument(s) and formatted as requested. The number of arguments following the format parameters should at least be as much as the number of format tags. The format tags follow this prototype:
Member
Статус: Не в сети Регистрация: 20.12.2005 Откуда: Волгоград
ToSHiC, спасибо, завтра буду смотреть. Скажите ещё вот что, насколько тяжело будет сделать простейший интерфейс для программы. 3 кнопки, одно поле для ввода значения и поле для вывода значений матриц. В Borland C++Builder это реализуется путём привязки функций к кнопкам, как это делается в Visual'e?
_________________ Все в этом Мире имеет какой то смысл. В нем нет ничего бесполезного или случайного...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения