Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
31.03.2015
Размер:
101.89 Кб
Скачать

16. ПРОЦЕДУРЫ И ФУНКЦИИ.

Для решения сложных задач выполняется разделение на отдельные подзадачи.

Структура процедуры:

Procedure имя[(формальные параметры)];

const

type

var

procedure

Begin

End;

Структура функции:

function имя[(…)];тип рез-та

Среди операторов должен быть хотя бы 1,кот. функции значение результата…

ОБЛАСТЬ ДЕЙСТВИЯ ИДЕНТИФИКАТОРОВ назыв. часть проги, где этот идентификатор может использоваться. Если id (переменная) доп. использ. только в рамках 1 проц. или функц., то они наз. локальными. Если их действие распростр. на неск. влож. проц. и функц., то – глобальными.

Область действия id:

–действ. все id, определённые внутри процедуры,

–действ. все внешн. id, если их имена отличаются от имён внутри проц.

–лок. Id во внешн. окружении не действ.

–при совпадении имён лок. и глоб. id действ. будет только лок. id

–лок. созд. при вызове проц. и  во время выполнения.

Классификация способов передачи параметров, механизм работы.

При активизации процедуры и функции её можно передавать параметр. Сфера действия имён параметров – как у локальных данных.

Параметры различаются:

1)по механизму передачи:

–по значению(value)

–по адресу (по ссылке)(addr)

2)по взаимодействию вызывающей и вызываемой проц. функц.:

–только как входной параметр(in)

–только как выходной(out)

–как входной так и выходной(inout)

Теоретически возможно 6 способов передачи информации.

1. value in – параметр значений. При описании заголовков процедур и функций перед id параметров значений доп. ключ слова не ставятся. Procedure MyPr

(p1,p2,p3:тип). Механизм работы: Факт. парам.формальн. параметр. В ячейки памяти форм. параметр передается копия факт. и обратно не возвр.

При вызове:

–вып. выделение памяти под формальные данные

–вып. копирование значений фактических параметров в выделяя память.

Во время работы:

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

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

2. addr inout –параметр значений. При описании ставится ключевое слово var p1,p2:тип1; var p3:тип2. Механизм работы: Факт. парам.  формальный параметр.  – передаётся адрес факт. парам.,  – по адресу изм. содержимое ячеек памяти факт. параметра, т.е. выполняется возврат рез-та.

При вызове:

–вып. выделение памяти только для локальных данных и сохранённых адресов фактического параметра

–вып. копир. адресов факт. парам. в выделяется память..

Во время работы:

–запрещено изменение значений форм. парам.

–исп. значений ф. парам разрешено только в качестве исх. данных.

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

3. in–параметр константы. При описании ставится параметр константа. слово Procedure MyPr (const p1:type1,p2:type2). Механизм работы: Факт. парам.  формальн. параметр. передаётся адрес факт. парам. по имеющему адресу, разрешено только брать, не изменять.

При вызове:

–вып. выделение памяти только для лок. данных и сохранение адресов факт. парам.

–вып. копир. адресов факт. парам. в выделяя память..

Во время работы:

–запрещено изменение значений форм. парам.

–исп. значений ф. парам разрешено только в качестве исх. данных.

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

Бес типовые могут передаваться только по адресу, их нельзя исп. как типизированные.

17 Файлы, классификация , процедуры и функции работы с файлами

Файлы в Pascal

Файлы

Файловые типы данных введены в язык для работы с внешними устройствами - файлами на диске, портами, принтерами и так далее. Передача данных с внешнего устройства в оперативную память называется чтением, или вводом, обратный процесс - записью, или выводом. Файловые типы языка Паскаль бывают стандартные и определяемые программистом. Стандартными являются текстовый файл (text) и бестиповой файл(file). Они описываются в программе, например, так:

var ft : text;

fb : file;

Программист может определить файл, состоящий из элементов определенного типа. Такой файл называется компонентным, или типизированным:

var fc : file of <тип_компонент>

Компоненты могут быть любого типа, кроме файлового. Любой файл, в отличие от массива и записи, может содержать неограниченное количество элементов.

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

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

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

'primer.pas' - имя файла в текущем каталоге

'd:\pascal\input.txt' - полное имя файла

'CON' 'NUL' 'COM1' 'PRN' - имена устройств

Для организации ввода-вывода в программе необходимо выполнить следующие действия:

объявить файловую переменную;

связать ее с физическим файлом;

открыть файл для чтения и/или записи;

выполнить операции ввода-вывода;

закрыть файл.

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

Подпрограммы для работы со всеми типами файлов

Процедуры

assign(var f; filename : string)

Связывает логический файл f с физическим файлом, имя которого задано в строке filename.

close(var f)

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

erase(var f)

Уничтожает физический файл на диске, который был связан с файловой переменной f.

rename(var f; newname : string)

Переименовывает физический файл на диске, связанный с логическим файлом f.

reset(var f)

Открывает логический файл f для последующего чтения данных, то есть открывает входной файл.

rewrite(var f)

Открывает логический файл f для записи данных (открывает выходной файл). Если физический файл, с которым связана переменная f, существовал ранее, он очищается, то есть вся информация из него теряется. Если файл не существовал, он создается.

Функции

eof(var f) : boolean

Возвращает значение true, если при чтении достигнут конец файла.

IOresult : integer

Возвращает целое число, соответствующее коду последней ошибки ввода-вывода. При нормальном завершении операции функция вернет значение 0. Функция IOresult работает только с ключом компиляции {$I-}.

18 СТРОКИ.

Операции над строками

–присваивание имя строковой переменной:=строковое выражение

–сцепление +

–операции соотношения (по кодовой таблице)

Str-string

I,j:integer

Length(str) – выч. длину строки Str. Целочисленный тип.

Copy(Str,i,j)–выделяет из Str подстроку длиной j,начиная с i. Если i>Length(str), то рез – пробел

Delete(Str,i,j)–удаляет из строки Str подстроку длиной j, начиная с позиции i.

Insert(Str1,Str2,i)–вставляет строку Str1 в строку Str2, начиная с позиции i.

Pos(Str1,Str2)–определяет наименьший № эл-та в Str2, начиная с которого Str1 входит в строку Str2 как подстрока. Если подстрока не найдена, то результат =0, Результат типа Byte.

№19 СОРТИРОВКИ: ВНУТРЕННИЕ И ВНЕШНИЕ, ЗАПИСЕЙ И КЛЮЧЕЙ, ЭФФЕКТИВНОСТЬ.

Для ускорения поиска данные должны быть отсортированы по тому признаку, по которому будет проводиться поиск. Файл размером n – некоторая последовательность из n элементов r1,r2,…,rn. Каждый элемент в этом файле – запись. У каждой записи ri есть ключ ki, по которому файл будет отсортирован и по которому поиск.

Файл отсортирован по ключу ki, если для i<j ki предшествует kj при некоторой упорядоченной последовательности по ключам. Внутренняя сортировка – вся сортируемая инфа храниться в операторе памяти, внешняя – часть во внутр, часть во внешн.

Соседние файлы в папке Информатика (1 семестр) (билеты)