Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

Параметр процедуры   Найти похожие ветки 

 
АлеКо   (2005-08-18 10:49) [0]

Добрый день господа.

Создал константы

BlockMFRF : Array[0..3] of Array[0..4] of string =
BlockPP : Array[0..40] of Array[0..4] of string =

Теперь хочу использовать их в качестве входных параметров  в процедуре.
Как правильно описать процедуру.


 
--=ХР=--   (2005-08-18 10:58) [1]

procedure MyProc(Param1: BlockMFRF; Param2: BlockPP);
procedure MyProc(const Param1: BlockMFRF; const Param2: BlockPP);
procedure MyProc(var Param1: BlockMFRF; var Param2: BlockPP);

И вариации...


 
АлеКо   (2005-08-18 11:02) [2]

Наверно не до конца обьяснил.
Хочется описать один параметр в котором будет передоваться одна из костант.


 
Digitman ©   (2005-08-18 11:05) [3]

array of array of string


 
АлеКо   (2005-08-18 11:19) [4]

Const
BlockMFRF : Array[0..3] of Array[0..4] of string =
BlockPP : Array[0..40] of Array[0..4] of string =

это константы а не тип данных.

Описать константу в параметрах процедуры array of array of string
не получится.


 
Плохиш ©   (2005-08-18 11:25) [5]

type
 TMyType = array of array of string;
procedure MyProc(Param:TMyType);


Учите мат.часть


 
Tonich ©   (2005-08-18 11:25) [6]


> Описать константу в параметрах процедуры array of array
> of string
> не получится.
вот и я думаю как это  у

> --=ХР=--   (18.08.05 10:58) [1]
так хитро получилось )))


 
Плохиш ©   (2005-08-18 11:25) [7]


> Описать константу в параметрах процедуры array of array
> of string не получится.

Вы об чём?


 
АлеКо   (2005-08-18 11:28) [8]

А как проиницилизировать константу

Const
    BlockMFRF : TMyType = (......)


 
Leonid Troyanovsky ©   (2005-08-18 11:28) [9]


> АлеКо   (18.08.05 10:49)  

> Создал константы

> Теперь хочу использовать их в качестве входных параметров
>  в процедуре.


А зачем их передавать, раз они константы?
Достаточно чтобы они были видимы процедуре.

--
Regards, LVT.


 
Digitman ©   (2005-08-18 11:30) [10]

а overload на что тогда существует ?

type

 TBlockMFRF = Array[0..3] of Array[0..4] of string;
 TBlockPP = Array[0..40] of Array[0..4] of string;

 TForm1 = class(TForm)
 ..
   procedure ProcessBlock(const MFRF: TBlockMFRF); overload;
   procedure ProcessBlock(const PP: TBlockPP); overload;
 ..
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

const
BlockMFRF : TBlockMFRF = ...;
BlockPP : TBlockPP = ...;

..

procedure TForm1.ProcessBlock(const MFRF: TBlockMFRF);
begin
..
end;

procedure TForm1.ProcessBlock(const PP: TBlockPP);
begin
..
end;

...

ProcessBlock(BlockMFRF);
ProcessBlock(BlockBB);


 
АлеКо   (2005-08-18 11:31) [11]

Эти константы описывают шаблон файла.
Процедура одна на всех.
В процедуру подставляется шаблон и по нему обрабатывется.

Вот такая идея.


 
Digitman ©   (2005-08-18 11:32) [12]


> АлеКо   (18.08.05 11:28) [8]
> как проиницилизировать константу


это уже из другой оперы.
Паскаль, понимаешь ли ... чистой воды ...


 
Leonid Troyanovsky ©   (2005-08-18 11:33) [13]


> АлеКо   (18.08.05 11:28) [8]
> А как проиницилизировать константу
>
> Const
>     BlockMFRF : TMyType = (......)


Проинициализировать можно лишь TMyType = record,
скажем  = (field1: "abc"; field2: "def";..)

--
Regards, LVT.


 
Плохиш ©   (2005-08-18 11:34) [14]


> АлеКо   (18.08.05 11:28) [8]
> А как проиницилизировать константу

Так как написано в АлеКо   (18.08.05 10:49)


 
АлеКо   (2005-08-18 11:34) [15]

Digitman а не слишком ли это сложно???
Хотя, решение интересное.


 
Digitman ©   (2005-08-18 11:37) [16]


> Процедура одна на всех


ну тогда и не выпендривайся с типами.

объяви одну-единственную проц-ру, принимающую форм.параметром array of array of string

в теле же процедуры анализируй размерности фактически переданного дин.массива-параметра, и по результатам анализа ветви алгоритм нужным образом

вызывающий же код формирует передаваемый факт.параметр соотв.образом - либо иниц-ет дин.массив на основе данных типа Array[0..3] of Array[0..4] of string;
либо на основе тпипа
Array[0..40] of Array[0..4] of string;

3 или 40 в 1-й размерности переданного дин.массива как фактического параметра как раз и есть признак для ветвления алгоритма вызванной "Процедуры одной на всех"


 
Digitman ©   (2005-08-18 11:40) [17]


> АлеКо   (18.08.05 11:34) [15]
> не слишком ли это сложно???
> Хотя, решение интересное.


как видишь, ничего сложного нет.
но как правило приемлемо лишь для небольших (ограниченных) по кол-ву вариаций типов передаваемых форм.параметров

если ты впоследствии плпнируешь настрогать еще пару тысяч различных таких вариаций, решение с overload вряд ли оправдано.


 
АлеКо   (2005-08-18 11:44) [18]

Буду передавать в процедуру название константы.
В теле процедуры буду обращаться косвенно через @.


 
Плохиш ©   (2005-08-18 11:47) [19]


> АлеКо   (18.08.05 11:44) [18]
> Буду передавать в процедуру название константы.
> В теле процедуры буду обращаться косвенно через @.

Гланды через одно место.


 
Digitman ©   (2005-08-18 11:47) [20]

для ДАННОЙ КОНКРЕТНОЙ ситуации можно поступить еще проще :

type
PBlockMFRF = ^TBlockMFRF;
TBlockMFRF = Array[0..3] of Array[0..4] of string;
PBlockPP = ^TBlockPP;
TBlockPP = Array[0..40] of Array[0..4] of string;

const
BlockMFRF : TBlockMFRF = ...;
BlockPP : TBlockPP = ...;

procedure ProcessBlock(const Block; BlockSize: Integer);
begin
 case BlockSize of
  SizeOf(TBlockMFRF): PBlockMFRF(@Block)^ ...; //ветвление для TBlockMFRF
  SizeOf(TBlockPP):   PBlockPP(@Block)^ ...;//ветвление для TBlockPP
 end;
end;

..
ProcessBlock(BlockMFRF);
ProcessBlock(BlockPP);


 
Digitman ©   (2005-08-18 11:48) [21]


> Плохиш ©   (18.08.05 11:47) [19]
> Гланды через одно место.


так точно, сэр !


 
Digitman ©   (2005-08-18 11:53) [22]

пардон..

ProcessBlock(BlockMFRF, sizeof(BlockMFRF)); //обработка константы BlockMFRF
ProcessBlock(BlockPP, sizeof(BlockPP));//обработка константы BlockPP


 
АлеКо   (2005-08-18 12:04) [23]

Спасибо за советы.

Пошел думать.


 
Leonid Troyanovsky ©   (2005-08-18 12:07) [24]


> Digitman ©   (18.08.05 11:47) [20]


> для ДАННОЙ КОНКРЕТНОЙ ситуации можно поступить еще проще

> type

 TParamType = (ptBlockMFRF, ptBlockPP);

> PBlockMFRF = ^TBlockMFRF;
> TBlockMFRF = Array[0..3] of Array[0..4] of string;
> PBlockPP = ^TBlockPP;
> TBlockPP = Array[0..40] of Array[0..4] of string;
>
> const
> BlockMFRF : TBlockMFRF = ...;
> BlockPP : TBlockPP = ...;

 procedure ProcessBlock(param: TParamType);

--
Regards, LVT.


 
Digitman ©   (2005-08-18 12:12) [25]


> АлеКо   (18.08.05 12:04) [23]


"шаблонами" здесь, кстати, и не пахнет.

тип упомянутой константы отражает лишь факт некоей "структурированности" некоего файла, т.е. факт того, что некий файл состоит из "записей", каждая из которых м.б. интерпретирована не иначе как 2-хмерный массив строк произвольной длины


 
Digitman ©   (2005-08-18 12:15) [26]


> Leonid Troyanovsky ©   (18.08.05 12:07) [24]


можно и так.

все зависит от ОБДУМАННЫХ фантазий автора.

лишь бы не "гланды через причинное место", как изволил выразиться ув.коллега Плохиш(С)



Страницы: 1 вся ветка

Текущий архив: 2005.09.11;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.035 c
14-1124344994
TButton
2005-08-18 10:03
2005.09.11
теодолитный ход...


1-1124537780
Агент Х-СОМ
2005-08-20 15:36
2005.09.11
Отладка компонентов


4-1122032517
Zak3D[@Tm]
2005-07-22 15:41
2005.09.11
Как запустить другое приложение?


4-1121982988
Atrion
2005-07-22 01:56
2005.09.11
Проблема...перекодить несколько функций из C в Delphi...


14-1123751547
Akisflat
2005-08-11 13:12
2005.09.11
Сдельная работа для Delphi-программиста, в офисе в любое время.