Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
краткий справочник по програмированию.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
231.42 Кб
Скачать

Подпрограммы

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

Структурное программирование — "программирование без go to", т. е. не используются операторы перехода без особой необходимости. В связи с этим отдельные фрагменты программы представляют собой некоторые логические (управляющие) структуры, которые определяют порядок выполнения содержащихся в них правил обработки данных. Любая программа получается построенной из стандартных логических структур, число типов которых невелико.

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

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

Подпрограммы в языке Паскаль

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

Процедура — это независимая именованная часть программы, которую можно вызвать по имени для выполнения определенных действий. Структура повторяет структуру программы. Процедура не может выступать как операнд в выражении. Упоминание имени процедуры в тексте программы приводит к активизации процедуры и называется ее вызовом.

Функция аналогична процедуре, но имеются два отличия: функция передает в точку вызова скалярное значение; имя функции может входить в выражение как операнд. Например, функция Sqr(X) — возведет в квадрат значения целого или вещественного X и возвратит в точку вызова вычисленное значение квадрата числа X.

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

Все процедуры и функции языка Турбо Паскаль делятся на две группы: встроенные (стандартные) и определенные пользователем. Первые входят в состав языка я вызываются для выполнения по строго фиксированному имени. Вторые разрабатываются и именуются самим пользователем.

Процедуры и функции пользователя

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

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

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

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

Процедуры

Описание процедуры включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры и необязательного, заключенного в круглые скобки, списка формальных параметров с указанием типа каждого параметра. Имя процедуры — идентификатор, уникальный в пределах программы. Тело процедуры представляет собой локальный блок, по структуре аналогичный программе.

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

procedure <имя>(Формальные параметры);

const …;

type ...;

var …;

begin

<операторы>

end;

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

Функции

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

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

const …;

type …;

var . . . ;

begin

<операторы>

end;

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

Рекурсии

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

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

ФАЙЛЫ

Файл – совокупность данных, записанных во внешней памяти под определенным именем.

В Паскале существует три класса файлов:

  1. Типизированные;

  2. Текстовые;

  3. Нетипизированные.

Любой файл имеет три характерные особенности:

  • Есть имя, что дает возможность работать одновременно с несколькими файлами;

  • Он содержит компоненты одного типа (любой тип Турбо Паскаля, кроме файлового);

  • Он содержит компоненты одного типа (любой тип Турбо Паскаля, кроме файлового);

Описание файловой переменной

type

<имя типа>=<тип компонента>;

var

f: file of <имя типа>;

Пример:

p=real;

var

f: file of p;

var

f: file of <имя типа>;

var

f: file;

Файл можно представить как бесконечный список значений одного и того же (базового) типа. Все элементы файла пронумерованы, начальный элемент имеет нулевой номер.

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

Текстовые файлы.

Текстовый файл можно рассматривать как последовательность символов разбитую на строки длиной от 0 до 256 символов.

Описание:

var

f: text;

Для текстовых файлов существует специальный вид чтения и записи (read, write).

Открытие текстового файла.

rewrite(f); - открыт для записи

reset(f); - открыт для чтения

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

Процедуры и функции обработки текстовых файлов.

read(f,v1,[v2..vn]) – считывает одно или более значений из текстового файла в одну или более переменных, если переменные v1,[v2..vn] – строкового типа, то считывается строка или символы, если v1 – целого типа приведет к считыванию последовательности цифр, которая затем интерпретируется в число, значение которого будет присвоено переменной v1. В случае если вместо последовательности цифр идет любая другая последовательность символов выдается сообщение об ошибке;

readln(f,v1,[v2..vn]) – выполняет те же действия, что и предыдущая процедура, а затем делает пропуск до начала следующей строки файла;

write(f,v1,[v2..vn]) – записывает в текстовый файл одно или более значений;

writeln(f,v1,[v2..vn]) - выполняет те же действия, что и предыдущая процедура, а затем добавляет к файлу метку конца строки.

eoln(f); - логическая процедура, возвращает для файла состояния конца строки;

eof(f); - логическая процедура, возвращает для файла состояния конца файла;

seekeof(f); - логическая процедура, возвращает для файла состояния конца файла;

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

Типизированные файлы.

К типизированным файлам относятся файлы строго определенного типа. Чаще всего это файлы, состоящие из записей. Они применяются для создания различных баз данных.

Описание:

type

fil = record

… { поля записи}

end;

var

f: file of fil;

В типизированных файлах содержимое рассматривается как последовательность записей определенной структуры. Единицей измерения такого набора данных является сама запись. Длина записи определяется как sizeof(fil);

Seek(f, num) процедура устанавливает текущую файловую переменную f на запись с номером num.

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

Средства для работы с типизированными файлами.

truncate(f); - уничтожает все компоненты файла f, начиная с места текущего положения файлового указателя;

filepos(f): longint; - функция возвращает для файла f текущую файловую позицию (номер записи, на которую она установлена) в виде значения типа longint;

filesize(f): longint; - функция нахождения размера файла (количество записей) в виде значения типа longint.

Для того, чтобы очередная запись могла быть записана в конец типизированного файла, необходимо перевести текущую файловую позицию в конец файла. При создании файла это происходит автоматически после формирования каждой новой записи. Если файл уже создан и файловая позиция, установленная по Seek , находится в начале файла (filepos(f) < filesize(f)) , то в конец файла ее позволяет перевести вызов seek(f,filesize(f)) .

Нетипизированные файлы.

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

var

f: file;

С помощью процедур reset, rewrite можно задать длину нетипизированного файла: reset(f,512); rewrite(f, 65535); по умолчанию длина равна 128 байтам.

Средства для работы с нетипизированными файлами.

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

Blockread(f,buf,c); - где buf – имя переменной, которая участвует в обмене данными с дисками, задает число, считываемых блоков;

Blockwrite(f,buf,c); - процедура предназначена для быстрой передачи в файл определенного числа записей из переменной buf.

Эти процедуры выполняют операции ввода – вывода блоками. Объем блока в байтах определяется по формуле: объем=c*recsize(f);, где recsize – размер записи файла, заданный при его открытии.