procedure MyProc(A: integer; B: integer = 10);
begin
WriteLn(B);
WriteLn(B);
end;
begin
MyProc(10,15);
MyProc(10);
end;
Необязательные параметры процедуры
procedure Inc(X: Integer[; N: Word]);
,где N как раз и есть необязательный параметр.
Вроде можно создать тип записи и там наверное использовать указатель на память Pointer.
Это теория, а как делается на практике?
Аа чуть не забыла, программу пишу на Delphi.
Это называется изпользование "параметров по умолчанию" - компилятор сам подставляет эти значения. RTFM
а если значение будет другое, то и при компиляции оно изменится, да?
Цитата:
Originally posted by frosty
а если значение будет другое, то и при компиляции оно изменится, да?
а если значение будет другое, то и при компиляции оно изменится, да?
Компилятор подставит значение по умолчанию в случае, если фактические параметры были пропущены при вызове этой функции.
На параметры по умолчанию есть некоторые ограничения: нельзя указывать дефолтное значение для var или out-параметра (там требуется переменная).
Ясно, спасибо!
А вопрос у меня такой: нельзя ли сделать процедуру, которая бы в качестве фактических параметров принимала изначально неизвестное количество однотипных параметров,ну т.е. примерно так:
proc(a1,a2,a3,a4);
proc(a1,a2);
proc(a10,a11,a12,a13,a14,a15,a16,a17)
и со всеми ними делала бы однотипные действия.
(вопрос у меня этот возник из-за того что частенько приходится в код блоками толкать команды типа:
New(a1);
New(a2);
New(a3);
New(a4);
и др. - достало это переписывание уже!!!)
Цитата:
Originally posted by Britney
Кто старое помянет - тому глаз на ж*пу натянут, примерно так гласит старинная русская поговорка или пословица. Но я не побоюсь и обновлю давно забытую тему.
А вопрос у меня такой: нельзя ли сделать процедуру, которая бы в качестве фактических параметров принимала изначально неизвестное количество однотипных параметров,ну т.е. примерно так:
proc(a1,a2,a3,a4);
proc(a1,a2);
proc(a10,a11,a12,a13,a14,a15,a16,a17)
и со всеми ними делала бы однотипные действия.
(вопрос у меня этот возник из-за того что частенько приходится в код блоками толкать команды типа:
New(a1);
New(a2);
New(a3);
New(a4);
и др. - достало это переписывание уже!!!)
Кто старое помянет - тому глаз на ж*пу натянут, примерно так гласит старинная русская поговорка или пословица. Но я не побоюсь и обновлю давно забытую тему.
А вопрос у меня такой: нельзя ли сделать процедуру, которая бы в качестве фактических параметров принимала изначально неизвестное количество однотипных параметров,ну т.е. примерно так:
proc(a1,a2,a3,a4);
proc(a1,a2);
proc(a10,a11,a12,a13,a14,a15,a16,a17)
и со всеми ними делала бы однотипные действия.
(вопрос у меня этот возник из-за того что частенько приходится в код блоками толкать команды типа:
New(a1);
New(a2);
New(a3);
New(a4);
и др. - достало это переписывание уже!!!)
Код:
...
type
TMyType = record
MyProp: Integer;
end;
TMyArrType = Array of TMyType;
...
procedure MyProc(var MyArr: TMyArrType);
var
I, Imax: Integer;
begin
Imax := Length(MyArr);
I := 0;
while I < Imax do begin
MyArr.MyProp := I;
Inc(I);
end;
end;
...
type
TMyType = record
MyProp: Integer;
end;
TMyArrType = Array of TMyType;
...
procedure MyProc(var MyArr: TMyArrType);
var
I, Imax: Integer;
begin
Imax := Length(MyArr);
I := 0;
while I < Imax do begin
MyArr.MyProp := I;
Inc(I);
end;
end;
...
НЕт, я знаю, что с помощь массивов и всяких там записей это сделать можно, меня интерисует именно случай, когда все параметры - простые переменные
Цитата:
Originally posted by Britney
НЕт, я знаю, что с помощь массивов и всяких там записей это сделать можно, меня интерисует именно случай, когда все параметры - простые переменные
НЕт, я знаю, что с помощь массивов и всяких там записей это сделать можно, меня интерисует именно случай, когда все параметры - простые переменные
Вот пример функции, которая может получать сколько угодное количество простых значений.
Код:
procedure Polymorphic(Arr: array of const);
begin
...
end;
var a: integer;
b: string;
Polymorphic([10, 10.4, 'Hello world!', true, #47, a, b]);
begin
...
end;
var a: integer;
b: string;
Polymorphic([10, 10.4, 'Hello world!', true, #47, a, b]);
В делфи есть функция Format - форматирует строку, она тоже получает как аргумент array of const
Цитата:
Originally posted by Britney
НЕт, я знаю, что с помощь массивов и всяких там записей это сделать можно, меня интерисует именно случай, когда все параметры - простые переменные
НЕт, я знаю, что с помощь массивов и всяких там записей это сделать можно, меня интерисует именно случай, когда все параметры - простые переменные
А что мешает тебе использовать эту функцию так...
Код:
...
type
TMyType = record
MyProp: Integer;
end;
PMyType = ^TMyType;
...
procedure MyProc(MyTypes: Array of TMyType);
var
I, Imax: Integer;
begin
Imax := Length(MyTypes);
I := 0;
while I < Imax do begin
MyTypes^.MyProp := I;
Inc(I);
end;
end;
...
var
P1, P2: PMyType;
...
//гдето в программе
MyProc([P1, P2]);
type
TMyType = record
MyProp: Integer;
end;
PMyType = ^TMyType;
...
procedure MyProc(MyTypes: Array of TMyType);
var
I, Imax: Integer;
begin
Imax := Length(MyTypes);
I := 0;
while I < Imax do begin
MyTypes^.MyProp := I;
Inc(I);
end;
end;
...
var
P1, P2: PMyType;
...
//гдето в программе
MyProc([P1, P2]);