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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2012, 22:31   #1
ritty18
Новичок
Джуниор
 
Регистрация: 30.03.2012
Сообщений: 4
По умолчанию setlength

Есть трехмерный массив: yp: array of array of array of double

Необходимо установить разную длину, делаю
intx, inty - некоторые целые числа
setlength(yp[intx, inty], length[intx, inty]+1);
Выдает ошибку, что левая часть не определена. Помогите правильно определять длину!

Спасибо заранее за помощь
ritty18 вне форума Ответить с цитированием
Старый 30.03.2012, 22:36   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

SetLength(yp,intx,inty,intz)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.03.2012, 22:38   #3
ritty18
Новичок
Джуниор
 
Регистрация: 30.03.2012
Сообщений: 4
По умолчанию

мне нужно, чтобы 3 индекс был разным, увеличивался на 1 при необходимости
ritty18 вне форума Ответить с цитированием
Старый 30.03.2012, 22:39   #4
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
setlength(yp[intx, inty], length(yp[intx, inty])+1);
попробуйте
хотя, скажу я вам, эти многомерные массивы страшнее алкоголя и сигарет... приводят к падению всего))
GreenWizard вне форума Ответить с цитированием
Старый 30.03.2012, 22:41   #5
ritty18
Новичок
Джуниор
 
Регистрация: 30.03.2012
Сообщений: 4
По умолчанию

так тоже пробовала, все равно пишет левая часть не определена
ritty18 вне форума Ответить с цитированием
Старый 30.03.2012, 23:01   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Так ок вопрос на засыпку
Причём тут Выделение памяти
и
Простите вот это
Цитата:
мне нужно, чтобы 3 индекс был разным, увеличивался на 1 при необходимости
?? Где же тут связь между индексами и количеством памяти?
Индексация в дин массивах всегда с 0, только так и не как иначе!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 30.03.2012, 23:08   #7
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

вообще, тут проблема в обращение к элементам массива... самый простой вариант это типа:
Код:
procedure SetLen_(var Arr: array of Double; const L: integer);
begin
  SetLength(Arr, L);
end;
...........
SetLen_(yp[x, y], some_value);
Вообще, стоит переработать обьявление массива, разбить на более простые типы:
Код:
type
  ADouble = array of double;
  AADouble = array of ADouble;
  AAADouble = array of AADouble;
  PADouble = ^ADouble;
  PAADouble = ^AADouble;
  PAADouble = ^AAADouble;
а потом:
Код:
var
  Tmp: PADouble;
............
  Tmp := @yp[x, y];
  SetLength(Tmp^, Length(Tmp^) + 1);
так мы упрощаем компилятору работу и явно указываем что менять
GreenWizard вне форума Ответить с цитированием
Старый 30.03.2012, 23:50   #8
ritty18
Новичок
Джуниор
 
Регистрация: 30.03.2012
Сообщений: 4
По умолчанию

спасибо, мальчики! уже сама разобралась. Wizard поспособствовал этому, спасибо )
ritty18 вне форума Ответить с цитированием
Старый 30.03.2012, 23:57   #9
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

ritty18, а покажи код, что вышел мы тут чуть поспорили на счёт моего подхода, а писать тест лень
GreenWizard вне форума Ответить с цитированием
Старый 31.03.2012, 00:45   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

GreenWizard зачем такие сложности? Имея в переменных intx,inty,intz размерность массива создаем его с помощью SetLength(yp,intx,inty,intz), при необходимости увеличиваем intz на 1 и тот же SetLength(yp,intx,inty,intz) решает все проблемы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SetLength _-Re@l-_ Общие вопросы Delphi 0 31.08.2010 15:11
Ошибка в setlength(m,x); vedro-compota Общие вопросы Delphi 3 28.06.2010 20:12
SetLength 16*16 Alex Cones Общие вопросы Delphi 13 23.03.2010 15:57
setlength Smerch66 Общие вопросы Delphi 8 22.03.2010 19:32
Несколько параметров в SetLength Alex Cones Общие вопросы Delphi 9 21.03.2010 14:00