![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 22.03.2010
Сообщений: 33
|
![]()
Подскажите пожалуйста решение следующей проблемы:
//задаю массив f : array of Float; ... //задаю его размер setlength(f , N); После этого у нас массив размерности N, а вот элементы массива начинаются с 0, то есть: f[0] , f[1] и т.д. А как сделать чтобы его номера были и в отрицательной области: от f[-(n div 2)] до f[n div 2] Спасибо большое тем кто откликнется! |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]()
либо использовать статический массив
var f: array[-5..10] of float; либо никак Цитата:
программа — запись алгоритма на языке понятном транслятору
|
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 22.03.2010
Сообщений: 33
|
![]()
Спасибо!
Тогда ещё попутный вопрос. Когда я очищаю динамический массив, то пишу f := nil; И почему то во время выполнения программы делфи иногда ругается на эту запись, в том случае, если делфи её выполняет уже повторно. Но перед повторным выполнением массиву задавалась новая длина. В чём может быть причина? И есть ли аналог этого метода очищения массива? |
![]() |
![]() |
![]() |
#4 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Это не очищение, это присваивание неопределенного адреса массиву. Ошибку вызывает скорее попытка задать новую длину для f, к-рый ссылается на nil, чем простая смена адреса, к-рая по сути своей процедура безобидная, хоть и приводит к таким нехорошим результатам.
Если не нужно менять размерность то есть три способа обнулить: 1. ZeroMemory(...) //функция из Win API, обнуление блока памяти, параметры смотри в справке 2. SetLength(f, 0); SetLength(f, OldLength); //обнулили длину и затем опять устанавливаем старую длину, элементы после этого будут равны нулю 3. for i:=0 to Length(f)-1 do f[i]:=0;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 22.03.2010 в 16:39. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 22.03.2010
Сообщений: 33
|
![]()
Спасибо! второй способ самый приемлемый!
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 22.03.2010
Сообщений: 33
|
![]()
Хотя всё равно ошибка вылетает даже по второму способу.
Я вот думаю что дело в библиотеке intel, я этот массив сую в БПФ этой библиотеки. После этого массив отказывается обнуляться. Ошибка пишет что неверная Floating операция |
![]() |
![]() |
![]() |
#7 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
В БПФ массив может начинаться с единицы. Может в этом причина.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
![]()
Есть одно "но", mutabor, по поводу 2 пункта: элементы вовсе не обяхательно будут равны 0, просто новая память под них выделится.
Изобретатель велосипедов
|
![]() |
![]() |
![]() |
#9 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Будут, выделяемая память заполняется нулями.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Несколько параметров в SetLength | Alex Cones | Общие вопросы Delphi | 9 | 21.03.2010 14:00 |
SetLength никогда не стирает старые элементы массива? | TwiX | Общие вопросы Delphi | 6 | 20.03.2010 02:35 |
Вкаких случаях может быть полезной процедура SetLength | Ainur | Помощь студентам | 2 | 22.05.2009 12:01 |
считает что ReOpArr это обычный массив и не может применить к нему процедуру SetLength. | Dunpeal | Общие вопросы Delphi | 2 | 24.12.2007 08:07 |