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

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

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

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

Я хочу, чтобы у моей процедуры было тоже самое. Подскажите синтаксис такого насиния и желательно литературу, где написано про такие всякие прикольные фишки с синтаксисом.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.09.2011, 03:41
Ответы с готовыми решениями:

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

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

Конструкторы с разным количеством параметров: найти ошибку в программе
найти ошибку в программе Помогите найти ошибку в программе. Компилятор выдает ошибку Could not find a match for 'Data :: Data(int)' ...

6
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.09.2011, 10:51
Хотеть не вредно, но...
Функции с переменным числом аргументов
Тенденцияк переносу средств ввода-вывода из языка в библиотеки, о которой мы будем говорить позже, привела к необходимости появления процедур спеременным числом аргументов (и функций тоже, но они нужны реже). Одна из первых попыток была предпринята в языке Pascal. Там есть процедуры с переменным числом аргументов, но это были «специальные» процедуры, по существу, операторы языка, лишь внешне напоминавшие обычные. Способа создать свою процедуру спеременным числом аргументов в классическом Pascal нет.
Это есть например в Си, Делфи.. из Паскалей есть вроде а Pascal АBC.net.
1
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
20.09.2011, 11:04
Вполне можно передавать массив.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.09.2011, 11:43
Цитата Сообщение от Андрей Борисови Посмотреть сообщение
Вполне можно передавать массив.
Массив это одна переменная вроде...
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
20.09.2011, 13:46
В 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
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.09.2011, 15:09
Цитата Сообщение от Mawrat Посмотреть сообщение
Но в процедуру список будет передаваться в виде одного параметра, конечно.
Как раз автору и нужно переменное число параметров, а не переменный тип.
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
20.09.2011, 23:32
Цитата Сообщение от лови Посмотреть сообщение
Вот допустим "Read" можно написать с одним параметром: "Read(a)", -а можно хоть с 5: "Read(a,b,c,d,e)".
Я хочу, чтобы у моей процедуры было тоже самое. Подскажите синтаксис такого насиния и желательно литературу, где написано про такие всякие прикольные фишки с синтаксисом.
Причина непоняток здесь в том, что read и т.п. являются процедурами только по названию - на самом деле это операторы языка. Написать пользовательскую процедуру такого типа нельзя.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2011, 23:32
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru