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

С) операции над файлами

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

· Удаление файла и освобождение занимаемого им дискового пространства.

· Открытие файла. Перед использованием файла процесс должен его открыть. Цель данного системного вызова - разрешить системе проанализировать атрибуты файла и проверить права доступа к нему, а также считать в оперативную память список адресов блоков файла для быстрого доступа к его данным. Открытие файла является процедурой создания дескриптора или управляющего блока файла. Дескриптор (описатель) файла хранит всю информацию о нем. Иногда, в соответствии с парадигмой, принятой в языках программирования, под дескриптором понимается альтернативное имя файла или указатель на описание файла в таблице открытых файлов, используемый при последующей работе с файлом . Например, на языке Cи операция открытия файла fd=open(pathname,flags,modes); возвращает дескриптор fd, который может быть задействован при выполнении операций чтения или записи.

· Закрытие файла. Если работа с файлом завершена, его атрибуты и адреса блоков на диске больше не нужны. В этом случаефайл нужно закрыть, чтобы освободить место во внутренних таблицах файловой системы.

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

· Чтение данных из файла. Обычно это делается с текущей позиции. Пользователь должен задать объем считываемых данных и предоставить для них буфер в оперативной памяти.

· Запись данных в файл с текущей позиции. Если текущая позиция находится в конце файла, его размер увеличивается, в противном случае запись осуществляется на место имеющихся данных, которые, таким образом, теряются.

 

Вопрос 16

Синтаксис обращения к процедурам

Текст включающий в себя области описаний (констант, типов, процедур и функций) и составной оператор, наз

 

 

Имена → значения

Procedure → имя (список формальных параметров).

Блок → тело процедуры (запись, алгоритм вычислений).

 

Любая функция (процедура) определяется некоторым выражением, но выражение определяет несколько функций. Список формальных параметров состоит из выражений вида: v:t или var v:t, где t – имя типа, v – идентификатор.

V – это не имя переменной (в программистском смысле), она не именует никакую область памяти. С другой стороны, это переменная в математическом смысле, поскольку определена область значений.

 

Область описаний ← Блок → Составные операторы

Объекты, определённые в соответствие определения процедуры в блоке, называются локальными; определённые вне этого блока – глобальными.

Блоки могут быть вложены друг в друга.

(Рисунок)

Фрагмент блока, начинающийся с описания объекта до конца блока, называется областью действия этого объекта. Именно в этом фрагменте соответствующее определению имя имеет заданные этим определением значения. Вне области действия имя либо имеет другой смысл, либо не имеет никакого смысла.

Здесь встречаемся с проблемой конфликта (коллизии) имён – несколько разных объектов могут носить одно и то же имя. Всегда имеется в виду наиболее локальное описание.

Описание функции

Function – пользовательское имя функции (список формальных параметров) (как в случае процедур).

Тип значений функций (имя типа) (в стандартном Паскале скалярный)

Блок.

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

Чистая ошибка – применение имени функции справа. Справа имя функции может появиться только в специальном случае. В Delphi то же самое может выглядеть так:

Result:= выражение, где result – стандартная переменная соответствующего типа.

Function max(var a: tVector; n: tIndex): tComponent;

Begin

M:=a[1];

For I:=2 to n do

If m<a[i] then m:=a[i]; max:=m;

End.

 

Обращение к функции

Синтаксис: имя функции: список фактических параметров.

Семантика: выражение соответствующего типа. Может использоваться выражение этого типа.

Формальная семантика: достаточно ограничения случаем

V:= обращение к функции, где V – переменная, подставляемая вместо имени функции.

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

 

Синтаксис использования или обращения к процедурам.

Имя программы (список фактических параметров).

Список фактических параметров, разделённых запятыми, список выражений вида е1,…,еn.

Список фактических параметров, согласованных со списком формальных параметров, согласованных по количеству и типу. Вместо параметров переменных могут стоять переменные, вместо параметров значений можно поставить произвольное выражение того же типа.

 

Правила построения модифицированного тела:

1) Избавление от коллизии имён. При наличии коллизии заменить имена локальных переменных или других объектов с дублированными именами на новые, ещё не использованные в программе.

M:=a[i];

For i:=1 to n do

If m>a[i] then m:=a[i];

2) Параметры переменные заменяются на имена фактических параметров

3) Параметры значения вычисляются и копируются.

 

Вопрос 17

Семантика процедур и функций.

Одна из трактовок понятия функции – функция с несколькими входами (аргументами) и несколькими результатами (выходами). Когда число результатов равно 1 получаем понятие многоместной функции. В этом случае Паскаль позволяет вернуться к обычной функциональной нотации .

 

Семантика обращений - правила построения модифицированного тела процедуры: коллизия имен, семантика параметров.

 

Семантика

Прямая подразумеваемая математическая семантика почти тривиальна.

Для нас привычно вход и выход процедуры.

Имена переменных входа называются входными, выхода – выходными.

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

X:=x+y;

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

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

Мы не обязаны это делать, что чаще всего мотивируется соображениями эффективности.

Пример. Процедура вычисления максимального среди первых элементов массива.

Type tIndex=1..100;

tVector=array [tIndex] of real;

procedure max;

a: tVector;

n: tIndex;

Var m:real;

Begin

M:=a[i];

For i:=2 to n do

If m>a[i] then m:=a[i] ;

End.

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

Как описывать «нестандартную» семантику обращения?

Max(b,10,x);

Понять семантику обращения (то, как оно работает), уметь написать вместо обращения (пользовательского имени) соответствующее ему значение.

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

 

Правила построения модифицированного тела:

1. Избавление от коллизии имён. При наличии коллизии заменить имена локальных переменных или других объектов с дублированными именами на новые, ещё не использованные в программе.

M:=a[i];

For i:=1 to n do

If m>a[i] then m:=a[i];

2) Параметры переменные заменяются на имена фактических параметров

3) Параметры значения вычисляются и копируются.

 

 

Правила локализации. Побочные эффекты.

 

Глобальные значения можно понимать как мат. параметр, именованную константу.

Правило полной локализации: не использовать глобальных объектов (подразумевалось в предыдущей лекции).

Правило частичной локализации: при использовании глобальных объектов документировать и не изменять.

Изменение значений глобальных объектов в поле процедуры называется побочным эффектом.