Программирование Часть 1 - ТурбоПаскаль
.pdf31-
Write(<имя файловой переменной>,<значение>);
..........
Close(<имя файловой переменной>);
Прямой доступ к элементам файла. Несмотря на то, что в стандартном Паскале имеются лишь файлы последовательного доступа, Турбо Паскаль содержит процедуры и функции для более эффек-
тивной работы с файлами. В частности, имеется возможность осуществлять прямой доступ к элементам файла.
Установка указателя. Процедура Seek(<имя файловой переменной>,N) устанавливает файловый
указатель на N-й элемент.
Определение номера элемента. Функция FilePos(<имя файловой переменной>) возвращает но-
мер элемента, на который «смотрит» файловый указатель.
Определение количества элементов в файле. Функция FileSize(<имя файловой переменной>)
возвращает количество элементов в файле.
Удаление и переименование файлов. Erase(<имя файловой переменной>) процедура удаления файла. Rename(<имя файловой переменной>,’<новое имя на диске>’) переименование файла.
Пример: В файле DAT1.DAT записаны целые числа. Вычислить сумму элементов файла и резуль-
тат вместе с исходными данными записать в файл DAN2.DAT
Program WW;
Var f1,f2 : file of integer; s, n : integer;
begin
Assign(f1,’DAT1.DAT’);
Reset(F1);
Assign(f2,’DAT2.DAT’);
Rewrite(f2);
s:=0;
While Not Eof(f1) do { проверка на конец файла} begin
read(f1,n); {чтение элемента из файла F1} write(f2,n); { запись элемента в файл F2} s:=s+n;
end;
write(f2,s); {запись суммы элементов в конец файла F2}
32-
write(‘Результат находится в файле DAT2.DAT’);
Close(f1);
Close(f2);
end.
Текстовые файлы. Текстовые файлы состоят из символьных строк. Строки могут иметь различ-
ную длину, и в конце каждой строки стоит признак конца строки. Для описания текстовых файлов ис-
пользуется служебное слово Text:
Var A: Text;
Для обработки текстовых файлов используются те же процедуры и функции, что и для обработки обычных типизированных файлов. Для связывания файловой переменной с файлом на диске употребля-
ется процедура Assign. Текстовые файлы могут быть открыть для чтения процедурой Reset или для за-
писи процедурой Rewrite.
Для чтения данных применяется процедура Read. Если необходимо после чтения данных перейти на следующую строку, то используется процедура Readln. Если необходимо просто перейти к следую-
щей строке, то можно использовать процедуру Readln(<имя файловой переменной текстового фай-
ла>); которая устанавливает файловый указатель на первый элемент следующей строки.
Процедура Write записывает данные в текущую строку. Если надо записать данные и перейти к следующей строке, то можно использовать процедуру Writeln. Если требуется только перейти для запи-
си на новую строку, то применяется процедура Writeln(<имя файловой переменной текстового фай-
ла>); которая записывает в файл признак конца строки и устанавливает файловый указатель на начало следующей строки.
Так как в строках может быть разное количество символов, имеется логическая функция
Eoln(<имя файловой переменной текстового файла>), которая принимает значение True, если до-
стигнут конец строки.
Процедура Append(<имя файловой переменной текстового файла>). Она открывает файл для
«дозаписи», помещая файловый указатель в конец файла.
2.8. Модули
Модуль - это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и, возможно, не-
которые исполняемые операторы инициирующей части.
33-
Наличие модулей в Turbo Pascal позволяет программировать и отлаживать программу по частям,
создавать библиотеки подпрограмм и данных, воспользоваться возможностями стандартных модулей,
практически неограниченно увеличивать кодовую (содержащую коды команд) часть программы.
Модуль содержит описания типов данных, переменных и других объектов, а также подпрограм-
мы, которые используются в различных программах. Модули представляют собой прекрасный инстру-
мент для разработки библиотек прикладных программ и мощное средство модульного программирова-
ния. Важная особенность модулей заключается в том, что компилятор Турбо Паскаля размещает их программный код в отдельном сегменте памяти. Максимальная длина сегмента не может превышать 64
Кбайта, однако количество одновременно используемых модулей ограничивается лишь доступной па-
мятью, что дает возможность создавать весьма крупные программы.
Доступ к описаниям, функциям и процедурам модуля обеспечивает оператор использова-
ния Uses, в котором указывается имя модуля. Этот оператор размещается в разделе описаний програм-
мы, сразу после заголовка. Если в программе используется не один модуль, а несколько, необходимо указать имена всех модулей, перечислив их через запятую. Исключением является модуль System,
ссылка на который необязательна. Этот модуль содержит, в частности, процедуры файлового вво-
да/вывода, процедуры и функции для работы со строками и некоторые другие.
Структура модулей. Модуль имеет следующую структуру:
Unit <имя>;
Interface
<интерфейсная часть> Implementation
<исполняемая часть>
Begin
<инициирующая часть> End.
Здесь Unit - зарезервированное слово (единица), начинает заголовок модуля;
<имя> - имя модуля (правильный идентификатор);
Interface– интерфейсная секция, содержит описания типов, переменных и других объектов, кото-
рые можно использовать в других программах или модулях;
Implementation – зарезервированное слово, начинает исполняемую часть;
<исполняемая часть> - содержит полные описания функций и процедур модуля.
34-
<инициирующая часть> – секция инициализации. Она может быть пустой и содержать только зарезервированное слово end или включать в себя исполняемые операторы, выполняющие необходимые действия по инициализации (например, по присваиванию начальных значений переменным) модуля.
Заголовок модуля и связь модулей друг с другом. Заголовок модуля состоит из зарезервиро-
ванного слова Unit - следующего за ним имени модуля. Для работы среды Турбо Паскаля и возможно-
сти подключения средств, облегчающих разработку крупных программ, это имя должно совпадать с именем дискового файла, в который помещается исходный текст модуля. Если, например, имеем заго-
ловок
Unit Global;
то исходный текст соответствующего модуля должен размещаться в дисковом файле GLOBAL.PAS.
Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавлива-
ется специальным предложением
Uses <сп. модулей>
Здесь Uses - зарезервированное слово (использует);
<сп.модулей> - список модулей, с которыми устанавливается связь;
Элементами списка являются имена модулей, отделяемые друг от друга запятыми, например: Uses CRT,
Graph, Global.
Если объявление Uses... используется, оно должно открывать раздел описаний основной програм-
мы.
Интерфейсная часть. Через интерфейс осуществляется взаимодействие основной программы с модулем (модуля с модулем). В интерфейсе указываются константы, типы, переменные, процедуры и функции, которые могут быть использованы основной программой (модулем) при вызове этого модуля.
Интерфейсная часть открывается зарезервированным словом Interface. В этой части содержатся объяв-
ления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые будут доступными основной программе и/или другим модулям. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок.
35-
Пример:
Unit Cmplx;
Interface
type
complex = record re, Im : real
end;
Procedure AddC (x, у : complex; var z : complex);
Procedure MulC (x, у : complex; var z : complex);
Отметим, что объявление подпрограмм в интерфейсной части автоматически сопровождается их компиляцией. Таким образом, обеспечивается доступ к подпрограммам из основной программы и дру-
гих модулей.
Следует учесть, что все константы и переменные, объявленные интерфейсной части модуля, рав-
но как и глобальные константы и переменные основной программы, помещаются компилятором Турбо Паскаля в общий сегмент данных (максимальная длина сегмента 65536 байт). Порядок появления раз-
личных разделов объявлений и их количество может быть произвольным. Если в интерфейсной части объявляются внешние подпрограммы или подпрограммы в машинных кодах, их тела (т.е. зарезервиро-
ванное слово External, в первом случае, и машинные коды вместе со словом Inline - во втором) должны следовать сразу за их заголовками в исполняемой части модуля (не в интерфейсной). В интерфейсной части модулей нельзя использовать опережающее описание.
В интерфейсах различных модулей недопустимо циклическое обращение друг к другу, т.к. ком-
пилятор в этом случае не может установить связей.
Исполняемая часть. Исполняемая часть включает все подпрограммы модуля. Она может также включать локальные метки, константы, типы и переменные. Исполняемая часть начинается зарезерви-
рованным словом Implementation и содержит описания подпрограмм, объявленных в интерфейсной ча-
сти. В ней могут объявляться локальные для модуля объекты - вспомогательные типы, константы, пе-
ременные и блоки, а также - метки, если они используются в инициирующей части.
Описанию подпрограммы, объявленной в интерфейсной части модуля, в исполняемой части дол-
жен предшествовать заголовок, в котором можно опускать список формальных переменных (и тип ре-
зультата для функции), так как они уже описаны в интерфейсной части. Но если заголовок подпрограм-
мы приводится в полном виде, т.е. со списком формальных параметров и объявлением результата, он должен совпадать с заголовком, объявленным в интерфейсной части, например:
36-
Unit Cmplx;
Interface
type
complex = record; re, im: Real;
end;
Локальные переменные и константы, а также все программные коды, порожденные при компиля-
ции модуля, помещаются в общий сегмент памяти. В отличие от интерфейсов модулей в исполнитель-
ных частях модулей допустимо циклическое обращение друг к другу, т.к. все равно взаимодействие осуществляется через интерфейсы, и здесь не возникает проблемы с установлением необходимых свя-
зей.
Инициирующая часть. В некоторых случаях перед обращением к модулю следует провести его инициализацию (например, установить связь с теми или иными файлами с помощью процедуры Assign,
инициализировать какие-то переменные и т.д.). Необходимые действия можно выполнить в секции инициализации модуля. Эта часть начинается словом begin, после которого идут исполняемые операто-
ры, а затем помещается слово end. В инициирующей части размещаются исполняемые операторы, со-
держащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления ос-
новной программе и обычно используются для подготовки ее работы.
Не рекомендуется делать инициирующую часть пустой, лучше её опустить: пустая часть содер-
жит пустой оператор, которому будет передано управление при запуске программы.
37-
СПИСОК ЛИТЕРАТУРЫ
1. Немнюгин С. А. Turbo Pascal: практикум : [учеб. пособие для вузов по направлению подгот. ди-
пломир. специалистов "Информатика и вычисл.техника"] - 2-е изд. - СПб.; М.; Нижний Новгород: Пи-
тер, 2007. - 267 с. (гриф Минобразования России, 1 экз.)
2. Павловская Т. А. Паскаль. Программирование на языке высокого уровня: практикум : [учеб.
пособие для вузов по направлению "Информатика и вычисл. техника"] - СПб.; М.; Нижний Новгород:
Питер, 2006. - 316 с. (гриф Минобразования России, 1 экз.)
3. Архангельский А. Я. Язык Pascal и основы программирования в Delphi: [учеб. пособие для вузов по направлению 654600 "Информатика и вычисл. техника"] - М.: Бином: Бином-пресс, 2004. - 495 с. (5
экз.)
4. Культин Н. Б. Программирование в Turbo Pascal 7.0 и Delphi: самоучитель - 2-е изд. - СПб.:
БХВ-Петербург, 2004. - 407 с. (5 экз.)
5. Культин Н. Б. Turbo Pascal в задачах и примерах: [более 200 задач] - СПб.: БХВ-Петербург,
2006. - 256 с. (1 экз.)
6. Епанешников А. М., Епанешников В. А. Программирование в среде Turbo Pascal 7.0 - 4-е изд.,
испр. и доп.. - М.: Диалог-Мифи, 1998. - 367 с. (1 экз.)
38-
ОГЛАВЛЕНИЕ
1. ЗНАКОМСТВО СО СРЕДОЙ ТУРБО ПАСКАЛЬ ………………………………... |
3 |
|
|
1.1. Общие данные ……………………………………………………………………… |
3 |
|
|
1.2. Функциональные клавиши Турбо Паскаль ……………………………………. |
4 |
|
|
2. ЗНАКОМСТВО С ЯЗЫКОМ ТУРБО ПАСКАЛЬ ………………………………… |
4 |
|
|
2.1. Алфавит языка Turbo Pascal ……………………………………………………... |
4 |
|
|
2.2. Структура программы на языке Turbo Pascal ………………………………… |
5 |
|
|
2.3. Типы данных ……………………………………………………………………….. |
6 |
|
|
2.4 Операции над переменными ……………………………………………………… |
8 |
|
|
2.5. Операторы языка ………………………………………………………………….. |
10 |
|
2.5.1.Составной оператор ……………………………………………………………. 10
2.5.2.Условный оператор ……………………………………………………………. 11
2.5.3.Операторы повторений ……………………………………………………….. 11
2.5.3.1. Счётный оператор цикла For …………………………………………….. |
11 |
|
|
2.5.3.2. Оператор цикла while с предпроверкой условия ………………………. |
13 |
|
|
2.5.3.3. Оператор цикла repeat с постпроверкой условия ……………………... |
13 |
|
|
2.5.3.4. Оператор выбора …………………………………………………………... |
15 |
|
|
2.5.3.5. Метки и операторы перехода …………………………………………….. |
16 |
|
2.5.4.Массивы …………………………………………………………………………. 18
2.5.5.Записи ……………………………………………………………………………. 20
2.5.6.Множества ………………………………………………………………………. 22
2.6.Подпрограммы ……………………………………………………………………... 23
2.6.1.Процедуры ………………………………………………………………………. 23
2.6.2.Функции …………………………………………………………………………. 26
2.6.3. Процедура вывода информации …………………………………………….. |
27 |
|
|
2.6.4. Процедура ввода информации ……………………………………………….. |
28 |
|
|
2.7. Работа с файлами ………………………………………………………………….. |
29 |
|
|
2.8. Модули ………………………………………………………………………………. |
33 |
|
|
Список литературы ………………………………………………………………………. |
37 |
|