Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.03.2010, 12:08
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию Правильно передать многомерный массив в процедуру.

Ситуация следующая.

Необходимо в процедуру передать многомерный массив. Самой процедуре требуется параметр с одномерным массивом.

Процедура например -

procedure xzxz (array of real);

а передать в процедуру требуется первую размерность например следующего массива -
k:array [1..50,1..100,1..150] of real;

Если написать так -
xzxz(k[1,1]);
то в процедуру попадут элементы 3-ей размерности массива 'к'. Т.е. те которые от 1 до 150.
А необходимо что бы в процедуру попали элементы 1-ой размерности, т.е. те что от 1 до 50...

Помогите пожалуйста!
Ответить с цитированием
  #2  
Старый 09.03.2010, 14:51
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Нет никакой ниобходимости комплексовать по поводу передачи параметра. Все равно параметр в этом случае представлен указателем на массив.
А одномерный он или многомерный никакого значения не имеет: указатель он и есть указатель.
Поэтому смело можно передавать в процедуру трехмерный массив в параметре, а в реализации процедуры работать уже с нужным подмассивом.
Ответить с цитированием
  #3  
Старый 09.03.2010, 15:11
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию

Впринципе можно и так, только как при описании процедуры сказать ей что надо принять 3-ёх мерный массив?

procedure xzxz (array of real); - так кампилятор не ругается

а если так
procedure xzxz(array of array of array of real); - кампилятор говорит - "indetefier expected but aaray found"
Ответить с цитированием
  #4  
Старый 09.03.2010, 15:18
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Именно так:
Код:
procedure xzxz (array of real);
Максимальный индекс массива (подмассива) возвращает функция High.
Ответить с цитированием
  #5  
Старый 09.03.2010, 15:29
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию

Я тогда не очень понимаю как передать в процедуру xzxz(array of real); массив
k:array [1..10,1..20,1..30] of real;

при подстановке

xzxz(k);

кампилятор говорит - "Incompatible types".
Ответить с цитированием
  #6  
Старый 09.03.2010, 16:02
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Необходимо обявить тип массива:
Код:
type
   Tk = array[1..50, 1..100, 1..150] of Double;
Этот тип использовать в объявлении параметров процедуры, обрабатывающей массив, а так же при объявлении переменной, содержащей значения массива.
Код:
var
  k : Tk;
или
const
  k : Tk = (...);
...
procedure zzz(kk : Tk);
begin
end;
...

  zzz(k); //вызов
P.S. Тип Real применять не рекомендуется. Вместо него использовать тип Double
Ответить с цитированием
  #7  
Старый 09.03.2010, 16:39
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию

Спасибо большое, сам бы не догадался
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter