Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Необязательные параметры процедуры

4.4K
31 марта 2006 года
frosty
53 / / 24.09.2004
Вопрос такой: есть процедура (любая), как в ней создать необязательный параметр, как, например в стандартной процедуре INC со следующим синтексом:

procedure Inc(X: Integer[; N: Word]);
,где N как раз и есть необязательный параметр.

Вроде можно создать тип записи и там наверное использовать указатель на память Pointer.
Это теория, а как делается на практике?

Аа чуть не забыла, программу пишу на Delphi.
5
31 марта 2006 года
hardcase
4.5K / / 09.08.2005
Это называется изпользование "параметров по умолчанию" - компилятор сам подставляет эти значения. RTFM
Код:
procedure MyProc(A: integer; B: integer = 10);
begin
  WriteLn(B);
  WriteLn(B);
end;


begin
  MyProc(10,15);
  MyProc(10);
end;
4.4K
31 марта 2006 года
frosty
53 / / 24.09.2004
а если значение будет другое, то и при компиляции оно изменится, да?
5
31 марта 2006 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by frosty
а если значение будет другое, то и при компиляции оно изменится, да?


Компилятор подставит значение по умолчанию в случае, если фактические параметры были пропущены при вызове этой функции.
На параметры по умолчанию есть некоторые ограничения: нельзя указывать дефолтное значение для var или out-параметра (там требуется переменная).

4.4K
06 апреля 2006 года
frosty
53 / / 24.09.2004
Ясно, спасибо!
6.9K
14 апреля 2006 года
Britney
69 / / 20.03.2006
Кто старое помянет - тому глаз на ж*пу натянут, примерно так гласит старинная русская поговорка или пословица. Но я не побоюсь и обновлю давно забытую тему.
А вопрос у меня такой: нельзя ли сделать процедуру, которая бы в качестве фактических параметров принимала изначально неизвестное количество однотипных параметров,ну т.е. примерно так:
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);
и др. - достало это переписывание уже!!!)
339
14 апреля 2006 года
verybadbug
619 / / 12.09.2005
Цитата:
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);
и др. - достало это переписывание уже!!!)



Код:
...
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;
...
6.9K
14 апреля 2006 года
Britney
69 / / 20.03.2006
НЕт, я знаю, что с помощь массивов и всяких там записей это сделать можно, меня интерисует именно случай, когда все параметры - простые переменные
5
14 апреля 2006 года
hardcase
4.5K / / 09.08.2005
Цитата:
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]);

В делфи есть функция Format - форматирует строку, она тоже получает как аргумент array of const
339
14 апреля 2006 года
verybadbug
619 / / 12.09.2005
Цитата:
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]);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог