Параметры-значения и параметры-переменные

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

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

Раздел №15 (2 часа)

Строковый тип данных

План:

• Общие сведения о работе со строками символов

• Процедуры и функции обработки строк

15. Строковый тип данных

Общие сведения о работе со строками символов

Для работы с текстовыми строками в Паскале предусмотрен специальный тип данных - string.

Объявление строки имеет вид:

Var S : string[v];

где v – атрибут длины, представляющий собой целочисленное выражение. Атрибут длины может принимать значение от 0 до 255. В первом случае имеем строку нулевой длины, т.е. пустую строку. Если атрибут длины не указан в объявлении строки, то по умолчанию он принимается равным 255.

Ввод/вывод строк осуществляется аналогично вводу/выводу переменных других типов. Для ввода строк с клавиатуры используются процедуры read и readln, а для печати содержимого строки на экран – write и writeln.

Процедуры и функции обработки строк

Процедура Delete(S,Pos,n) – удаление n символов строки S, начиная с позиции Pos.

Процедура Insert(S1,S2,Pos) – вставка строки S1 в строку S2, начиная с позиции Pos.

Процедура Str(X,S) – преобразование численного значения арифметического выражения X и размещение результата в строке S. После выражения X можно записывать формат, аналогичный формату вывода в процедурах Write, Writeln.

Процедура Val(S,X,Code) – преобразование строки S в число X. При этом в строке S не должно быть незначащих пробелов. Переменная Code типа integer – это код ошибки. Если преобразование завершилось успешно, то Code = 0. В противном случае значение Code определяет позицию неправильного символа.

Функция Copy(S,Pos,n) – выделение из строки S подcтроки длиной n байт, начиная с позиции Pos.

Функция Concat(S1, S2, ... , Sn) – конкатенация строк S1, S2, ... ,Sn.

Функция Length(S) – определение текущей длины строки S. Действие функции length(S) эквивалентно вычислению выражения ord(S[0]) или byte(S[0]).

Функция Pos(S1,S2) – определение позиции, с которой отмечается первое появление в строке S2 подстроки S1. Если S1 не содержится в S2, то выходное значение равно нулю.

Функция UpCase(ch) – преобразование строчной латинской буквы в прописную букву. Символы ch вне диапазона 'a'...'z' остаются без изменения. Например, для UpCase('a') результатом является 'A'.

Раздел №16 (2 часа)

Работа с файлами

План:

• Понятие файла. Типы файлов в Паскале

• Инициализация файловых переменных

• Процедуры открытия файлов

• Ввод-вывод данных в файл

16. Работа с файлами

Понятие файла. Типы файлов в Паскале

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

Существуют три типа файлов:

– типизированные, компоненты которых имеют жесткую структуру;

– текстовые, состоящие из символов и строк;

– нетипизированные, рассматриваемые как последовательность байтов.

Описание файлового типа или файловой переменной имеет в этом случае следующий вид:

file of <тип> (любое имя типа, кроме типа файла);

text;

file.

Инициализация файловых переменных

Работа с файлами предполагает выполнение ряда стандартных шагов.

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

Assign (имя_файловой_переменной, строка_с_именем_файла);

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

Имя файла должно соответствовать правилам, определяемым операционной системой.

Процедуры открытия файлов

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

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

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

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

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

Append(F) – открытие текстового файла для добавления новых компонент в конец файла. Если файл уже был открыт ранее с помощью процедур Reset или Rewrite, то процедура Append вначале закрывает данный файл, а затем его открывает для добавления новых компонент.

Наши рекомендации