Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
все ответы.docx
Скачиваний:
8
Добавлен:
26.09.2019
Размер:
2.71 Mб
Скачать

11. Структурированные типы данных. Записи. Вариантная часть записей.

Структурные, типы данных, в отличие от простых, задают множества сложных значений с одним общим именем.

Структурные типы данных предоставляют возможность создавать новые типы, расширяя определения уже существующих таким образом, чтобы данные новых типов могли содержать более одного значения. Элементами данных структурных типов можно манипулировать как поодиночке, так и вместе, и эти элементы сами могут быть структурными. Никаких ограничений на подобное вложение одной структуры в другую не существует.

Они определяются самим разработчиком программы.

Ниже перечислены структурные типы, определенные в Delphi.

  • Записи

  • Массивы

  • Множества

  • Файлы

  • Классы

//Тут мне было лень перепечатывать это всё, поэтому вот скан на эту тему вместе с примером.

  1. Описание и использование подпрограмм в языке Паскаль. Формальные и фактические параметры. Параметры-значения и параметры-переменные.

В языке Паскаль, как и в большинстве языков программирования, предусмотрены средства, позволяющие оформлять вспомогательный алгоритм как подпрограмму.

Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подпрограммы в вызывающий блок (результаты работы подпрограммы).

Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове - фактическими.

Разница между процедурами и функциями в том, что имени функции можно присвоить изнутри функции значение и использовать это имя как обычную переменную с параметрами в скобках, а процедуру нужно вызывать отдельным оператором.

Описание и вызов процедур и функций

Структура описания процедур и функций до некоторой степени похожа на структуру программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, переменных. Исполняемая часть содержит собственно операторы процедур.

Формат описания процедуры имеет вид:

procedure <имя процедуры> (формальные параметры);

<раздел описаний процедуры>

begin

< исполняемая часть процедуры>

end;

Формат описания функции:

function <имя функции> (формальные параметры):тип результата;

<раздел описаний функции>

begin

<исполняемая часть функции>

end;

Формальные параметры в заголовке процедур и функций записываются в виде:

var <имя параметра>: <имя типа>;

И отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type. Список формальных параметров может отсутствовать.

Вызов процедуры производится оператором, имеющим следующий формат:

<имя процедуры> (список фактических параметров);

Параметры подпрограмм разделяются на параметры-значения, параметры-переменные и параметры-константы.

а) Параметры-значения (или передача параметров по значению) - это локальные переменные подпрограмм, стартовые значения которых задаются при вызове подпрограмм из внешних блоков (им присваиваются значения соответствующих фактических параметров). Параметры-значения, описанные в заголовке, могут изменять свои значения наряду с прочими переменными, но эти изменения будут строго локальными и никак не отразятся на значениях фактических параметров.

//То есть если у нас есть procedure BlaBla (a:integer); и мы что-то делаем с переменной а, то она меняется только в рамках подпрограммы, а в самой программе значение переменной, из которой в а были считаны данные, не меняется.

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

//Если есть procedure BlaBla (var a:integer); и мы с ней чего-то делаем, то меняется не только она в самой подпрограмме, но и после выполнения подпрограммы меняется значение той переменной, в которую мы считали данные из а. Ну понятно же, да?

в) Параметры-константы - аналогичны параметрам-значениям с той лишь разницей, что они не могут изменять свои значения в теле подпрограммы. Попытка изменить значение параметра-константы будет немедленно замечена компилятором.

Синтаксис описания параметров-констант:

ИмяПодпрограммы ( CONST P1, P2, ..., PN : Тип );

или

ИмяПодпрограммы ( CONST P1 : Тип1; CONST P2 : Тип2; ... )