• через глобальные переменные;
• через параметры процедур и функций;
• возвратом результата через имя функции.
Передача данных через глобальные переменные кажется самой простой, – ведь эти переменные видны из многих частей программы. Но этот способ оправдан лишь в небольших проектах. С ростом размера и сложности программы все труднее отслеживать взаимные влияния её частей через глобальные переменные. Это запутывает программу и снижает её надежность.
Для обмена данными разумнее использовать параметры процедур и функций, а также имена функций. В табл. 4 показаны три способа передачи данных через параметры.
Табл. 4 – Три способа передачи данных через параметры
Способ передачи данных |
Пример заголовка процедуры |
Пример вызова |
По значению:в процедуру передается значение параметра. |
Procedure ABC (arg:integer); |
ABC(10);ABC(X+3); |
По ссылкеCONST:В процедуру передается ссылка на константу или переменную, содержащую данные. |
Procedure ABC (const arg:integer); |
ABC(10);ABC(X); |
По ссылкеVAR:В процедуру передается ссылка на переменную, содержащую данные. |
Procedure ABC (var arg:integer); |
ABC(X) |
Опытного программиста отличает умение эффективно передавать данные; табл. 5 поможет вам выбрать наиболее удачный способ такой передачи.
Табл. 5 – Рекомендуемые способы передачи данных
Куда передавать данные |
Рекомендуемый способ |
Только в процедуру или функцию |
1) По значению (простые типы) 2) По ссылке CONST (сложные типы) |
Только из процедуры и функции |
1) Через имя функции (одно значение) 2) По ссылке VAR (несколько значений) |
В обоих направлениях |
По ссылке VAR (любые данные) |
В каждом случае предпочтительный способ указан первым. Данные простых типов лучше передавать внутрь подпрограмм по значению. По ссылке CONST передают строки и другие сложные типы данных (скоро мы изучим их). Через имя функции возвращают лишь один результат. А если надо вернуть несколько результатов, или вернуть сложный тип данных, используют ссылки VAR.
Встроенные процедуры и функции
Программа, сработанная профессионалом, состоит почти из одних только процедур и функций, разработка которых отнимает львиную долю времени. Но не всегда программисты пишут их сами. В Паскале запасено немало готовых подпрограмм – это встроенные в язык и в библиотеки процедуры и функции. С ними можно ознакомиться в руководстве по языку и во встроенной справке. Некоторые из них вам известны, и применялись нами.
Текстовые файлы
Напоследок напомню об основных средствах обработки текстовых файлов.
Для чтения из файлов применяют следующие процедуры и функции:
Assign(F, ...) - Связать файловую переменную с файлом
Reset(F) - Открыть файл для чтения
Read(F, ...) - Прочитать часть строки файла
Readln(F, ...) - Прочитать строку файла и перейти к следующей
Eoln(F) - Проверить на конец строки
Eof(F) - Проверить на конец файла
Close(F) - Закрыть файл
Для записи в файл применяют такие процедуры:
Assign(F, ...) - Связать файловую переменную с файлом
Rewrite(F) - Открыть файл для записи
Write(F, ...) - Записать часть строки файла
Writeln(F, ...) - Записать строку файла и перейти к следующей
Close(F) - Закрыть файл
Чтобы связать текстовый файл с клавиатурой (при вводе) или с экраном (при выводе), можно прибегнуть к двум приёмам. Первый состоит в том, чтобы назначить файлу пустое имя.
var F_In, F_Out : Text;
begin
Assign(F_In,’’); Reset(F); { F_In связали с клавиатурой }
Assign(F_Out,’’); Rewrite(F); { F_Out связали с экраном }
. . .
end.
Второй приём заключается в применении специального имени "CON" — от слова Console (оно предусмотрено в MS-DOS и Windows).
Assign(F_In,’Con’); Reset(F); { F_In связали с клавиатурой }
Assign(F_Out,’Con’); Rewrite(F); { F_Out связали с экраном }
В операционных системах MS-DOS и Windows существует несколько специальных имен файлов, вот некоторые из них:
AUX - Первый асинхронный коммуникационный порт
CON - Клавиатура и экран (CONsole)
NUL - Фиктивное устройство (для тестирования)
PRN - Первый параллельный принтер
Аналогичные имена применяют и в UNIX-подобных системах.
Читать дальше