Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/37: Рейтинг темы: голосов - 37, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 02.09.2010
Сообщений: 25
1

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

20.09.2011, 03:41. Показов 7122. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот допустим "Read" можно написать с одним параметром: "Read(a)", -а можно хоть с 5: "Read(a,b,c,d,e)".

Я хочу, чтобы у моей процедуры было тоже самое. Подскажите синтаксис такого насиния и желательно литературу, где написано про такие всякие прикольные фишки с синтаксисом.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2011, 03:41
Ответы с готовыми решениями:

Процедура или функция с нефиксированным количеством параметров
Как написать процедуру типа WriteLn, чтобы ей можно было передать неограниченное число параметров?...

Как реализуется Event с разным количеством параметров?
Возможно как то реализовать Event на который можно подписать функции с разным количеством...

Конструкторы с разным количеством параметров: найти ошибку в программе
найти ошибку в программе Помогите найти ошибку в программе. Компилятор выдает ошибку Could not...

Как создать список (ListView) с динамическим количеством передаваемых View?
Доброго времени суток! Такая проблема: Требуется создать список к примеру через SimpleAdapter...

6
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.09.2011, 10:51 2
Хотеть не вредно, но...
Функции с переменным числом аргументов
Тенденцияк переносу средств ввода-вывода из языка в библиотеки, о которой мы будем говорить позже, привела к необходимости появления процедур спеременным числом аргументов (и функций тоже, но они нужны реже). Одна из первых попыток была предпринята в языке Pascal. Там есть процедуры с переменным числом аргументов, но это были «специальные» процедуры, по существу, операторы языка, лишь внешне напоминавшие обычные. Способа создать свою процедуру спеременным числом аргументов в классическом Pascal нет.
Это есть например в Си, Делфи.. из Паскалей есть вроде а Pascal АBC.net.
1
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
20.09.2011, 11:04 3
Вполне можно передавать массив.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.09.2011, 11:43 4
Цитата Сообщение от Андрей Борисови Посмотреть сообщение
Вполне можно передавать массив.
Массив это одна переменная вроде...
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
20.09.2011, 13:46 5
В Pascal, к сожалению нет типа Variant и нет вариантных массивов. Например, в Delphi с помощью вариантного массива можно передавать разнородные данные в виде параметров таким образом:
Delphi
1
2
3
4
5
6
7
function Func(const aArr : array of const) : String;
...
begin
...
end;
...
S := Func(['Слово', 123.12345, #32])
Здесь [] - это конструктор вариантного массива.
---
В Pascal, если действительно очень нужно передавать в процедуры списки переменной длины с разнородным содержимым, можно, например, реализовать на основе динамических списков. Или с помощью вариантных записей:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
program Project1;
 
const
  cByte     = 0;
  cChar     = 1;
  cInteger  = 2;
  cWord     = 3;
  cLongint  = 4;
  cDouble   = 5;
  cExtended = 6;
  cString   = 7;
 
type
  TVariant = record
    bType : Byte;
    case Byte of
      cByte     : ( dByte : Byte; );
      cChar     : ( dChar : Char; );
      cInteger  : ( dInteger : Integer; );
      cWord     : ( dWord : Word; );
      cLongint  : ( dLongint : Longint; );
      cDouble   : ( dDouble : Double; );
      cExtended : ( dExtended : Extended; );
      cString   : ( dString : String; );
  end;
 
function Func(const aArr : array of TVariant) : String;
var
  i, Num : Longint;
  S, sRes : String;
begin
  sRes := '';
  S := '';
  for i := 0 to High(aArr) do
  with aArr[i] do begin
    case bType of
      cByte     : Str(dByte, S);
      cChar     : S := '"' + dChar + '"';
      cInteger  : Str(dInteger, S);
      cWord     : Str(dWord, S);
      cLongint  : Str(dLongint, S);
      cDouble   : Str(dDouble:6:3, S);
      cExtended : Str(dExtended:8:4, S);
      cString   : S := dString;
      else begin
        S := '<!TYPE_ERROR!>';
      end;
    end;
 
    if sRes <> '' then sRes := sRes + ', ';
    sRes := sRes + S;
  end;
  Func := sRes;
end;
 
var
  Arr : array[1..5] of TVariant;
  S : String;
begin
  Arr[1].bType := cString;
  Arr[1].dString := 'Слово';
  Arr[2].bType := cInteger;
  Arr[2].dInteger := 100;
  Arr[3].bType := cChar;
  Arr[3].dChar := 'Z';
  Arr[4].bType := cDouble;
  Arr[4].dDouble := 12.11111111;
  Arr[5].bType := cExtended;
  Arr[5].dExtended := 123.22222222;
 
  S := Func(Arr);
  Writeln(S);
  Readln;
end.
С помощью классов (тип Object) ещё можно реализовать.
Но в процедуру список будет передаваться в виде одного параметра, конечно.
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.09.2011, 15:09 6
Цитата Сообщение от Mawrat Посмотреть сообщение
Но в процедуру список будет передаваться в виде одного параметра, конечно.
Как раз автору и нужно переменное число параметров, а не переменный тип.
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
20.09.2011, 23:32 7
Цитата Сообщение от лови Посмотреть сообщение
Вот допустим "Read" можно написать с одним параметром: "Read(a)", -а можно хоть с 5: "Read(a,b,c,d,e)".
Я хочу, чтобы у моей процедуры было тоже самое. Подскажите синтаксис такого насиния и желательно литературу, где написано про такие всякие прикольные фишки с синтаксисом.
Причина непоняток здесь в том, что read и т.п. являются процедурами только по названию - на самом деле это операторы языка. Написать пользовательскую процедуру такого типа нельзя.
1
20.09.2011, 23:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.09.2011, 23:32
Помогаю со студенческими работами здесь

Про сброс передаваемых параметров
Можно ли сбросить передаваемый параметр внутри bat-файла. Например мы передали %1, а внутри самого...

const после передаваемых параметров функции
Объясните, зачем здесь пишут const после передаваемых параметров функции Пример класса class...

Разница между захватных и передаваемых параметров (лямбда)
Доброго времени суток. Вопрос такого характера, в чем отличие между захватных параметров и...

HttpClient.PostAsync. Пустые значения передаваемых параметров
Всем доброго времени суток! Есть два связанных приложения: 1) Локальное приложение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru