Песни о Паскале - [68]

Шрифт
Интервал

Для обмена данными разумнее использовать параметры процедур и функций, а также имена функций. В табл. 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-подобных системах.

Наконец, для действий с текстовыми файлами можно применять две встроенные в язык файловые переменные: INPUT и OUTPUT. Они не нуждаются ни в объявлении, ни в открытии, ни в закрытии файлов:


> Readln(Input, S); { - то же самое, что Readln(S) }

> Writeln(Output, S); { - то же самое, что Writeln(S) }


Файловые переменные INPUT и OUTPUT можно передавать в качестве фактических параметров внутрь процедур и функций, а также связывать их с дисковыми файлами. Вот пример копирования файла из «MyText.in» в «MyText.out»:


>var S: string;

>begin

> Assign(Input,’MyText.in’); Reset(Input);

> Assign(Output,’MyText.out’); Rewrite(Output);

> While not Eof do begin

> Readln(S);

> Writeln(S);

> end;

> Close(Input); Close(Output);

>end.


Что дальше?

Мы изучили фундамент языка Паскаль, который составляют простые типы данных и управляющие структуры. Впереди интересные и серьезные проекты, в основе которых лежат сложные типы данных. Вы осилите их, если пройденный материал надежно закрепился в вашей голове. Вы чувствуете это? Нет? Тогда без ложного стыда вернитесь к началу книги, ведь повторение – мать учения!

Итоги

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

• Альтернатива организуется условными операторами и оператором выбора.

• Для циклов в Паскале предусмотрено три оператора: 1) цикл с проверкой в начале, 2) цикл с проверкой в конце и 3) цикл со счетчиком.

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


Рекомендуем почитать
Он идет за мной

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


Необычайный Эйдан Ходж 1

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


Мое Черное Сердце

Его мир это ночь. Злой дух. Живой мертвец. Слуга тьмы. Он продал свою душу ради любви. И теперь каждую ночь ровно в полночь он приходит в этот мир чтобы убивать. Тысяча невинных душ это цена одной души… той единственной. Ради любви к которой он покончил с собой и заключил сделку с дьяволом. Но черная испепеляющая страсть не самое возвышенное чувство, за которое он выдавал свою любовь. Но есть ли время, чтобы это понять? Поздно начинать жить, когда ты уже мертв. Будет ли у него шанс почувствовать искреннюю нежность, которая не разольется жгучим ядом по его венам?.


Зеркала

Неожиданно подобранный с улицы кот может оказаться вовсе и не котом, а ещё выясняется, что зеркала способны перенести человека в совершенно иной мир. Благодаря тому самому не-коту, конечно же.


Шептунья

Легко ли быть не такой как все? Безусловно, если твои магические силы вызывают восхищение, страх или любые другие сильные эмоции. Но если это всего лишь непонятная смесь странностей? Что делать? И как быть, если родной отец вдруг «продаёт» пугающему вампиру, совершенно не интересуясь твоим мнением? Быть женой ненавистного существа или же попытаться скрыться, устроив всем незабываемое прощание?


Фарг. Проблему решаю кардинально.

Два года! Два года сохнуть по нему и стесняться признаться... Отдых с подругой решит твою проблему!