5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438
|
|
1 | |
Хранения матриц в динамически распределяемой области памяти22.02.2018, 23:38. Показов 2015. Ответов 12
Метки нет (Все метки)
Скажите пожалуйста или приведите пример хранения матриц в динамически распределяемой области памяти, для трёх случаев:
а) число строк - константа, а число столбцов - исходное данное; б) число строк - исходное данное, число столбцов - константа; в) число строк и число столбцов - исходные данные.
0
|
22.02.2018, 23:38 | |
Ответы с готовыми решениями:
12
Реализовать мониторинг использования динамически распределяемой памяти. Двумерные массивы. Использование динамически распределяемой памяти Нужно ли удалять указатель на символьный массив созданный в куче(динамически распределяемой памяти) Разработать способ экономного хранения в памяти разреженных матриц |
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
||||||
23.02.2018, 01:00 | 2 | |||||
Сообщение было отмечено ZX Spectrum-128 как решение
Решение
alex-rudenkiy, думаю код Вам все покамжет.
1
|
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438
|
|
23.02.2018, 12:20 [ТС] | 3 |
Constantin Cat, это я как понял для второго случая когда n-константа, а вот как получится когда число строк и число столбцов - исходные данные? И ещё, как в открытом массиве обращаться к элементу с индексом x,y.
0
|
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
|||||||||||
23.02.2018, 13:08 | 4 | ||||||||||
Какай разница одна константа или там всё исходные данные(константа, это такое же число, как и введенное пользователем, только после компиляции оно не меняется), память выделяется в процессе работы. Выделите Вы столько, сколько Вам нужно. Посчитали размер и получили нужную память.
Если массив определен в типе:
0
|
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438
|
|
23.02.2018, 16:46 [ТС] | 5 |
Хорошо, тогда ещё вопрос, вот вы выводите массив, тут цикл, что-то инкрементируется, а вот как вывести именно 1 произвольный элемент?
И ещё вопрос, что делает эта строчка inc(d,(i-1)*c+j-1);?
0
|
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
|
|
23.02.2018, 17:50 | 6 |
Массив хранится в памяти последовательно.
первая строка : первый, второй, . . ., последний элемент; вторая строка :первый, второй, . . ., последний элемент; . . .; последняя строка : первый, второй, . . ., последний элемент; Передавая в П/программу указатель на массив - передается адрес первого элемента первой строки, его смещение относительно указателя будет [0,0](как в С/С++), поэтому в строке inc(d,(i-1)*c+j-1) все переменные уменьшаются на 1.
0
|
Модератор
|
||||||
24.02.2018, 17:38 | 7 | |||||
Ну и еще момент для размышления.
Матрицы ТП хранит построчно, но никто не запретит интерпретировать хранение поколоночно Это к вопросу о том, какую часть вычисления адреса можно переложить на собственно компилятор. Добавлено через 4 минуты Ах да, другие диалекты Паскаля могут позволять естественную арифметику с указателями, и тогда Inc(p,n) и Dec(p,n) будут менять указатель на n*SizeOf(p^) байт (то есть, не потребуется домножение на размер элемента). В ТП 7 указатели масштабируются:
Код
2
0
|
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438
|
|
25.02.2018, 12:35 [ТС] | 8 |
Constantin Cat, а как бы это выглядело через absolute ?
0
|
Модератор
|
|||||||||||||||||||||
25.02.2018, 13:58 | 9 | ||||||||||||||||||||
Когда число столбцов константа, часть адресной арифметики можно легко переложить на компилятор:
Некоторые компиляторы Pascal (но не ТП) позволяют делать так:
ТП не даст с этим работать даже при {$R-}, будет давать ошибку выхода за диапазон еще при компиляции (формально он тут прав, но это очень неудобно). Добавлено через 6 минут Если вместо номеров от 1 использовать смещения от 0, то "(i-1)*c+j-1" превращается в элегантное "i*c+j". Добавлено через 5 минут Когда количество столбцов переменно, удобно использовать такой трюк:
Если матрицу можно хранить не единым куском памяти, можно делать массив указателей на строки (или колонки).
1
|
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438
|
|
25.02.2018, 14:41 [ТС] | 10 |
bormant, Кстати очень хочу спросить что означает TMatrix absolute a ?
Добавлено через 6 минут И как "оформить" например 2 матрицы через absolute?
0
|
Модератор
|
|||||||||||
25.02.2018, 14:44 | 11 | ||||||||||
Добавлено через 2 минуты
0
|
5 / 5 / 0
Регистрация: 02.01.2013
Сообщений: 438
|
|
25.02.2018, 14:53 [ТС] | 12 |
Хорошо а как уместить в одном TMatrix две матрицы например?
Добавлено через 15 секунд ой, уже увидел Добавлено через 2 минуты А как определяется значение(начало расположения матрицы) указателей a и b? Добавлено через 1 минуту а, понял a := a +n*i+j; Добавлено через 4 минуты только вот теперь не понятно а как для b потом сделать, чтобы a и b не пересекались не дай бог
0
|
Модератор
|
||||||
25.02.2018, 19:21 | 13 | |||||
Достаточно не менять их руками. Добавлено через 3 часа 49 минут Не ваша задачка: Дана вещественная матрица. Упорядочить ее строки по неубыванию их наибольших элементов Там пример с кусочной матрицей из строк, адресная арифметика на компиляторе.
0
|
25.02.2018, 19:21 | |
25.02.2018, 19:21 | |
Помогаю со студенческими работами здесь
13
Разработать способ экономического хранения в памяти разреженных матриц Пересылка двух слов из области памяти M1 в область памяти М2 Хранения Графа в памяти Пример использования для хранения описаний объектов предметной области списков Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |