Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
АлеКо   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.023 c
1-1124284424
zorik
2005-08-17 17:13
2005.09.11
Аналог кнопки "Выполнить" в Windows (как организовать)


14-1124103208
root
2005-08-15 14:53
2005.09.11
Проблемма с часам


14-1124164322
Jonikeidg
2005-08-16 07:52
2005.09.11
Дваичный код


4-1121850926
KSK
2005-07-20 13:15
2005.09.11
CreateProcess


3-1122909888
ArchValentin
2005-08-01 19:24
2005.09.11
Сохранение информации из DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский