Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2019, 11:53   #11
archerix
Форумчанин
 
Регистрация: 13.09.2019
Сообщений: 119
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
archerix, вектора достаточно. Для неквадратной матрицы - вектор и длина строки

std::vector<int> m_matrix;

если не разберёшься - скинь скайп в ЛС, объясню
Спасибо, читаю про векторы, очень интересно, и пока вроде все понятно. В принципе с точки зрения моего применения это не особо отличается от обычного одномерного массива, все равно индексы туда-сюда пересчитывать. Я предполагаю, что размер матрицы я знаю заранее.


А в чем все же недостаток использования шаблона? Сначала подумал было, что там подключаются какие-то лишние модули и размер экзешника вырастет, но вроде не заметил ничего особого.

Последний раз редактировалось archerix; 28.10.2019 в 12:45.
archerix вне форума Ответить с цитированием
Старый 07.11.2019, 08:33   #12
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от archerix Посмотреть сообщение
А в чем все же недостаток использования шаблона?
не знаю таких недостатков. Разве что в момент отладки собственных шаблонов, и то иногда.
Шаблон сам по себе не увеличивает код, он унифицирует алгоритм работы с неизвестным заранее классом. Для каждого использованного при инстанцировании класса компилятор создаёт код. Использовал в шаблоне 10 классов - появились 10 новых классов

Сорри за долгую реакцию, с уведомлениями не разобрался тогда, сейчас подправил )

Последний раз редактировалось Алексей1153; 07.11.2019 в 08:36.
Алексей1153 вне форума Ответить с цитированием
Старый 07.11.2019, 09:26   #13
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Шаблон сам по себе не увеличивает код
Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Для каждого использованного при инстанцировании класса компилятор создаёт код. Использовал в шаблоне 10 классов - появились 10 новых классов
Так увеличивает или нет? Создаст приведенный ТС шаблон 1 функцию или несколько?
p51x вне форума Ответить с цитированием
Старый 07.11.2019, 10:03   #14
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Так увеличивает или нет
новый код - обязательная прибавка к размеру экзешника. Плата за унификацию алгоритмов. Но кто на эти копеечные приросты размера сейчас смотрит?


Цитата:
Сообщение от p51x Посмотреть сообщение
Создаст приведенный ТС шаблон 1 функцию или несколько?
все использованные из шаблона функции компилятор превратит в машинные инструкции. Неиспользованные - даже компилить не будет (и ошибок не заметит).
Алексей1153 вне форума Ответить с цитированием
Старый 07.11.2019, 10:44   #15
archerix
Форумчанин
 
Регистрация: 13.09.2019
Сообщений: 119
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
Но кто на эти копеечные приросты размера сейчас смотрит?
Помнится, мой первый компьютер имел аж 512 килобайт памяти и пользовал дискетки емкостью 720 кб
archerix вне форума Ответить с цитированием
Старый 07.11.2019, 10:50   #16
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 960
По умолчанию

Цитата:
Сообщение от archerix Посмотреть сообщение
Помнится, мой первый компьютер имел аж 512 килобайт памяти и пользовал дискетки емкостью 720 кб
дискеты мягкие флопики такие же были, а озу на моём первом компе было 64к (минус место под оболочку). Что удивительно - хватало, кроме случая, когда я попытался написать интерпретатор/компилятор для какого-то небольшого и не сложного МП. Затею бросил, так как исходник уже не влазил в озу :D
Алексей1153 вне форума Ответить с цитированием
Старый 07.11.2019, 11:16   #17
archerix
Форумчанин
 
Регистрация: 13.09.2019
Сообщений: 119
По умолчанию

Родной тоже было 64, но к нему можно было докупить "расширители памяти" - этакая планка памяти размером с два винчестера
archerix вне форума Ответить с цитированием
Старый 09.11.2019, 11:47   #18
archerix
Форумчанин
 
Регистрация: 13.09.2019
Сообщений: 119
По умолчанию

Чтобы не плодить темы, спрошу снова тут

Ковырял дальше эти вопросы с детерминантами, искал примеры рекурсивного вычисления вычисления напрямую через миноры. Нашел тырнете работающую функцию, вроде все коротко и красиво написано - но есть момент, который мне не совсем понятен.

В основной функции создается двумерный динамический массив, это я понимаю. Потом мы его как-то там заполняем, скажем, случайными цифирами.

Код:
int**Arr;
Arr=new int*[size];               
for(int i=0;i<size;++i)
Arr[i]=new int[size];
В функции, вычисляющей детерминант, должен появиться другой массив для минора. Но этот момент я пока не осиливаю.

Код:
matr=new int*[size-1];                        
                for(i=0;i<size;++i)
                {
                        for(j=0;j<size-1;++j)
                        {
                                if(j<i)
                                        matr[j]=Arr[j];        
                                else
                                        matr[j]=Arr[j+1];
                        }
                        det+=pow((double)-1, (i+j))*determ(matr, size-1)*Arr[i][size-1];
                }
Чего-то у меня размерность не сходится в мозгах. То ли эти два массива присваиваются друг другу целыми строками

Последний раз редактировалось archerix; 09.11.2019 в 13:08.
archerix вне форума Ответить с цитированием
Старый 09.11.2019, 12:21   #19
archerix
Форумчанин
 
Регистрация: 13.09.2019
Сообщений: 119
По умолчанию

Попробовал. Действительно, двумерные динамические массивы можно присваивать целыми строками

Кажется, идея такая. Автор функции присвоил новому массиву (для миноров) значения из старого целыми строками, пропустив нужную строку. А во внешнем цикле по столбцам он всегда на единицу не добегает.

Правда, меня смущает, что присваиваемые строки по идее имеют разный размер, но вроде работает.

Последний раз редактировалось archerix; 09.11.2019 в 13:07.
archerix вне форума Ответить с цитированием
Старый 10.11.2019, 12:02   #20
archerix
Форумчанин
 
Регистрация: 13.09.2019
Сообщений: 119
По умолчанию

Еще неясно - основной массив убивается в конце программы построчно.

Код:
for(int i=0;i<size;++i)
delete[] Arr[i];   
delete[] Arr;
Тогда как массив для минора только вот так вот.
Код:
delete[] matr;
Попробовал сам дописать по аналогии, так программа рухнула.
Код:
for(int k=0;k<size-1;++k)
delete[] matr[k];
delete[] matr;
Непонятно, почитал про динамические массивы, ответа не нашел
archerix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, которая создает динамическую матрицу размерности A[nxn] Ivanrik Общие вопросы C/C++ 0 25.11.2018 09:03
сгенерировать матрицу размерности М х К из случайных вещественных чисел из интервала [-25,40] AVIM Общие вопросы C/C++ 1 12.02.2016 23:00
Как передать параметр функции в const? Mik92 Общие вопросы Delphi 8 01.12.2014 16:56
Заполнить матрицу Р размерности m x n значениями элементов вектора Q размерности k = m x n Olevander Помощь студентам 0 23.11.2014 10:09
функция, способная сгенерировать массив любой размерности. papapapokerface Общие вопросы C/C++ 2 03.06.2010 14:33