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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2010, 20:21   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
Вопрос Функции и процедуры в модулях

При написании модулей и динамических библиотек процедуры и функции пишутся в общем виде:
Код:
procedure min(a,b:integer)
Но вот столкнулся с проблемой: как входное данное в процедуру задаётся массив of integer
В модуле процедура описана примерно так:
Код:
Procedure Main(A:array of integer;B:array of integer)
Если вместо этого я пишу
Код:
Procedure Main(A:array[1..10] of integer;B:array[1..10] of integer)
То он ставит курсор перед квадратной скобкой и пишет " "of" expected".
Если убрать [1..10], то всё становится нормально, ошибка исчезает.
При вызове процедуры из модуля или DLL,я пишу:
Код:
Procedure Main(C,D);
Где C и D - целочисленные массивы.Пишет, что это неправильно и вообзе так нельзя.
Пробовал так:
Код:
Procedure Main(3,5,4,3,6,4)
Пишет, что это тоже неправильно.
Тогда как эе вызывать такие процедуры из собственных модулей?
_-Re@l-_ вне форума Ответить с цитированием
Старый 16.06.2010, 20:50   #2
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

По-моему, легче передавать указатель на массив, чем сам массив.
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 17.06.2010, 07:15   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

А как это делается?
_-Re@l-_ вне форума Ответить с цитированием
Старый 17.06.2010, 09:18   #4
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Немного теории.
Например, объявим:
Код:
var  
Numbers: array[1..20] of Integer; 
PI : PInteger;
Тогда для считывания адреса первого элемента массива (указания на первый элемент) можно воспользоваться следующим кодом:
Код:
PI  := ^Numbers;
Для указания на другой элемент массива достаточно увеличить значение указателя с помощью процедуры Inc. Однако перед его передачей процедуре Inс тип указателя потребуется привести к целочисленному:
Код:
Inс(Integer(PI));   { перемещение к следующему элементу }
Процедура Inс увеличивает значение указателя не на 1, а на SizeOf ( ТипЭлемента). В данном случае она увеличивает значение указателя на 4 (SizeOf (Integer) ), тем самым выполняя перемещение на 4 байта вглубь памяти к адресу следующего элемента массива.
Соответственно можно формировать массив в одном месте, а передавать указатель на него как параметр в функции/процедуре.
Идея понятна?
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab

Последний раз редактировалось ex.cluz; 17.06.2010 в 09:20.
ex.cluz вне форума Ответить с цитированием
Старый 17.06.2010, 10:06   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В модуле процедура описана примерно так:
Правильно.
Цитата:
Procedure Main(3,5,4,3,6,4)
неправильно
Procedure Main([3,5,4],[3,6,4])
Параметр-массив ограничивается скобками []
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2010, 11:26   #6
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Точно... Я и позабыл..
_-Re@l-_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедуры и функции Asira Помощь студентам 13 12.01.2010 18:22
Проблема с InputBox в двух модулях. GoreProgrammist Microsoft Office Excel 5 26.07.2009 14:19
Процедуры и функции PSix1_73 Паскаль, Turbo Pascal, PascalABC.NET 3 04.06.2009 20:00
Процедуры и функции J0n1cK Паскаль, Turbo Pascal, PascalABC.NET 5 22.04.2009 16:57