Форум: "Основная";
Текущий архив: 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