
- •Л абораторная работа Изучения графического интерфейса tp
- •Основы работы в Turbo Pascal р екомендуемый библиографический список 1. Краткие сведения о системе Turbo Pascal
- • 2. Назначение функциональных клавиш
- • 3. Меню Turbo Pascal
- • 4. Текстовый редактор программы
- • 5. Работа с файлами в Pascal
- • 6. Компиляция программы
- • 7. Выполнение программы
5. Работа с файлами в Pascal
Основной формой хранения текстов программ вне среды ТР является память.
Рисунок 14. Сохранение созданного файла
Записать файл на диск можно различными способами:
Если файл имеет имя по умолчанию, т.е. Noname 00.pas, то в главном меню нужно выбрать пункт File→Save as... Появляется диалоговое окно.
Имя файла можно набрать с клавиатуры, оно появляется в поле Save file as (расширение писать не обязательно, среда присвоит его сама).
Из списка поля files можно выбрать имя файла. Информационная панель содержит путь, имя файла, дату и время создания и размер.
Если файл вызван в редактор для изменения и уже имеет имя, то для его записи нужно выбрать Save в пункте File или нажать клавишу F2.
Для записи на диск всех файлов в открытых окнах используется режим File→Save all
Для вызова существующего файла в окно редактора нужно выбрать File→Open или нажать F3. Появляется диалоговое окно. Входное поле Name служит для ввода имени файла с клавиатуры. Нужный файл можно выбрать из списка поля files.
Изменение каталога
Изменить каталог можно с помощью команды Chang dir, который находится в меню File. При этом открывается диалоговое окно, содержащее поля ввода: Directory name, Directory tree и 4 кнопки.
Рисунок 15. Окно смены каталога
6. Компиляция программы
Компиляция программы – это преобразование файла, содержащего текст программы на языке TP в командный файл на машинном языке. При этом к исходному файлу присоединяются файлы библиотеки, содержащие стандартные процедуры и функции. Скомпилированный файл получает расширение exe. Такие файлы могут использоваться вне среды ТР. Для компиляции программы, находящейся в активном окне редактора необходимо выполнить следующие действия:
Compile→ Compile или
Alt+F9 .
Во время компиляции на экране появляется окно с информацией. Если среда не обнаруживает ошибок, то выдается сообщение:
Compilation successful: pass any key (компиляция прошла успешно: нажмите любую клавишу).
Рисунок 16. Информационное окно компиляции
Если компилятор обнаруживает ошибку, среда восстанавливает окно редактора, устанавливает курсор на ошибку и выдает сообщение об этой ошибке. Нужно сделать исправление в программе и снова запустить на компиляцию.
Созданный .exe файл остается в оперативной памяти. При выходе из программы он стирается. Чтобы сохранить .exe файл на диске, необходимо в пункте Compile→Destination memory, 3
Режим сменяется на Destination disk и меню сразу исчезнет с экрана. После этого нужно нажать F9 или Compile→Make. Функция с тем же именем, что и в окне редактора, но с расширением exe появляется в том же каталоге, что и исходный pas файл.
7. Выполнение программы
Для запуска программы на исполнение необходимо:
Выбрать меню Run→Run или
Нажать сочетание клавиш Ctrl+F9.
При этом файл из активного окна редактора будет откомпилирован, скомпонован с другими файлами и помещен в оперативную память и запущен на исполнение. Если при компиляции будут ошибки, среда сообщит. При повторном запуске программы, сразу начнется выполнение программы.
Результаты выполнения программы засылаются в окно, которое называется окном выводов результата и имеет черный цвет.
При выполнении программы это окно появляется на экране и тут же исчезает. Чтобы установить его на экране необходимо выполнить одно из действий:
Alt+F5 или
Debug →User screen или
Debug→Output (при этом на экране одновременно находится и окно редактора и окно результата).
Отладка программы.
Устранение ошибок в программе называется отладкой.
Ошибки бывают разных типов:
Синтаксические.
Определяется во время компиляции. Их место указывается курсором и сообщается номер ошибки.
Ошибки времени исполнения.
Возникает во время исполнения программы (деление на ноль, неправильно задан аргумент функции, ошибка ввода и др.). В этом случае программа также останавливается и указывается номер ошибки.
Логические.
При таких ошибках программа работает без сбоев, но делает не то, что требуется. Для отладки программы с такими ошибками требуются дополнительные средства. Для нахождения ошибок часто используют пошаговое исполнение программы. Для этого используется:
F8 или
Run→Step over.
При нахождении ошибки подсвеченная полоса устанавливается на первую выполняемую строку программы. Каждое новое нажатие F8 будет вызывать исполнение всех операторов данной строки, и строка выделения смещается на следующую строку программы.
Аналогичные действия вызывает:
F7 или
Run→Trace into
Но эти действия называются трассировкой программы.
При трассировке и при пошаговом выполнении программы можно проследить значения переменных в окне отслеживания. Иногда нужно проследить только часть программы. Это можно сделать различными способами:
Установить курсор на строку, до которой программа должна выполниться. Затем
F4 или
Run→Go to cursor
Эта строка называется строкой остановки. Программа выполниться до этой строки и остановится. Теперь пользователь может просмотреть часть программы с помощью пошагового исполнения.
Можно установить в некоторой строке (или нескольких) точку остановки. Тогда выполнение программы будет остановлено в этой строке. Это можно сделать:
Ctrl+F8 или
Alt+F10, Toggle break point
Строка, в которой установлена точка остановки, выделяется красным цветом.
Точки остановки можно просмотреть в специальном режиме
Debug→Breakpoints
При этом открывается диалоговое окно, в котором для каждой точки остановки выводится информация:
Имя файла (Break list)
Номер строки (line)
Условия остановки (condition), если оно есть.
Счетчик числа проходов (pass)
В окне Breakpoints редактировать точки можно командой Edit, т.е. установить ее новые параметры (номер строки, условия прохода, число проходов). Команда Del удаляет текущую точку остановки, команда Clear all удаляет все контрольные точки.
В редакторе точки остановки можно убрать с помощью сочетания клавиш Ctrl+F8.
Просмотр и изменение значений переменных при отладке программы.
Рисунок 17. Просмотр значений переменных в окне Watch
Для просмотра и изменения значений переменных при отладке программы существует режим Watch (следить) и Evaluate Modifil в пункте Debug. После выбора режима Watch в нижней части экрана открывается окно (зеленого цвета). В пункте меню Debug есть режим Add watch, в котором есть поле ввода и три кнопки. В поле ввода записывается одна или несколько переменных значения, которые надо отследить. Клавишей Esc окно Add watch убирается. Остается окно Watch, в котором указаны имена переменных и через двоеточие их значения. Используя пошаговое выполнение программы можно видеть, как меняются значения этих переменных.
Например, на рисунке 17, показано окно рабочей программы 1.pas, в которой записана простая программа, и окно Watch, содержащее три переменных и их значения после выполнения программы.
Если нужно добавить еще одну переменную в окно Watch то, не выходя из редактора нужно нажать Ctrl+F7. В появившемся окне Add watch добавляем имя нужной переменной.
Если окно Watch активно из его списка можно удалить имя переменной. Для этого переменная выбирается клавишами управления курсором и нажимается клавиша Del или Ctrl+Y.
Замечание: окно Watch убирается и восстанавливается клавишей F6.
Для изменения значения некоторых переменных выбирается режим Evaluate Modify (Ctrl+F4).
Открывается диалоговое окно (см. рис. 18).
Рисунок 18. Диалоговое окно Evaluate Modify
Во входное поле Expression (выражение) вводится имя переменной, в поле Result (результат) появляется ее значение. Переменной можно присвоить новое значение, введя его с клавиатуры в третье поле. Кнопка Evaluate служит для вычисления выражения в поле ввода, кнопка Modify – для изменения значения. Для закрытия окна – клавиша Esc.
Распечатка программ.
Чтобы распечатать программу из активного окна редактора нужно в пункте меню File выбрать Print.
Представление математических функций на языке ТР
Математическая запись |
Запись TP 7.0. |
x2 |
SQR(X) |
|
SQRT(X) |
|x| |
ABS(X) |
sin x |
SIN(X) |
cos x |
COS(X) |
tg x |
SIN(X)/COS(X) |
ctg x |
COS(X)/SIN(X) |
arcsin x |
ARCTAN(X/SQRT(1-SQR(X))) |
arccos x |
ARCTAN(SQRT(1-SQR(X))/X) |
arctg x |
ARCTAN(X) |
ex |
EXP(X) |
Натуральный логарифм |
LN(X) |
xn |
EXP(N*LN(X)) |
Выдает случайное число из интервала (0,1)4 |
RANDOM[(X)] |
Целая часть x |
INT(X) |
Дробная часть числа x |
FRAC(X) |
Число ПИ |
PI |
Возвращает число равное целой части (округляет по правилам арифметики тип LONGINT) |
ROUND(X) |
Округляет число, отбрасывая дробную часть числа тип LONGINT |
TRUNC(X) |
Увеличивает X на величину Y |
INC(X,Y) |
Уменьшает X на величину Y |
DEC(X,Y) |
Таблица 1 Сообщения об ошибках компиляции
Номер ошибки |
Комментарий |
1 |
Недостаточно оперативной памяти. Следует воспользоваться стандартными средствами расширения оперативной памяти. |
2 |
В данном месте программы должен находиться идентификатор. |
3 |
Неизвестный(не определенный ранее) идентификатор |
4 |
Идентификатор определяется второй раз |
5 |
Синтаксическая ошибка (нарушены правила написания предложения) |
6 |
Ошибка в изображении вещественного числа |
7 |
Ошибка в изображении целого числа |
8 |
Строковая константа превышает допустимый размер(255 символов) Вероятно, пропущена закрывающая кавычка |
10 |
Неожиданное завершение программы. Вероятно, не сбалансированною число зарезервированных слов begin и end, неправильно оформлен файл. |
11 |
Компилируемая строка превышает 127 символов |
12 |
В данном месте программы требуется идентификатор типа |
13 |
Попытка открыть в среде программирования количество файлов больше, чем допускается в операционной системе |
14 |
Неправильно имя или путь файла. |
15 |
Файл не найден нив текущем, ни в заданном каталоге. |
16 |
Диск, куда записывается информация, не имеет свободного места |
17 |
Ошибка в директиве компилятора, или она используется в недопустимом месте |
18 |
Слишком много файлов используется при компиляции. |
19 |
При определении типа-указателя используется тип, нигде не определенный. |
20 |
В данном месте программы должен быть идентификатор переменной. Неправильно определен тип. |
21 |
Неправильно определен тип |
22 |
Размер данных более 65520 байт |
24 |
Тип множества имеет более 256 элементов или содержит элементы с порядковым номером не в пределах 0..255 |
25 |
Компонентами файловой переменной не могут быть файлы или объекты |
26 |
Несовместимые типа( в операциях присвоения, в выражениях, у индекса массива, тип фактического параметра при обращении к подпрограмме неэквивалентен типу формального параметра |
27 |
В типе диапазоне может использоваться только порядковый тип |
28 |
В типе диапазоне нижняя граница больше, чем верхняя |
29 |
Здесь может использоваться только порядковый тип. |
30 |
Здесь можно использовать только константу целого типа |
31 |
Здесь можно использовать только константу. |
32 |
Здесь можно использовать только числовую константу |
33 |
Здесь должен бить тип-указатель |
34 |
Недопустимый тип функции |
35 |
Здесь должен быть идентификатор метки |
36 |
Здесь ожидается зарезервированное слово begin |
37 |
Здесь ожидается зарезервированное слово end |
38 |
Выражение должно быть целого типа |
39 |
Выражение должно быть порядкового типа |
40 |
Выражение должно быть логического типа |
41 |
В операторе не могут быть операнды такого типа |
42 |
Ошибка, в выражении(например, пропущен знак операции между операндами). |
43 |
Неправильно присвоено значение переменной. |
44 |
Требуется значение полу записи |
45 |
Объектный файл больше, чем 64 кбайта. |
46 |
НЕ найдена внешняя подпрограмма. |
47 |
Фай, по-видимому, не является объектным |
48 |
Кодовый сегмент больше 65520 байт. |
49 |
Сегмент данных больше 65520 байт |
50 |
Здесь следует поместить зарезервированное слово do |
51 |
Неправильное использование директивы PUBLIC в подпрограмме, написанной на ассемблере |
52 |
Неправильное использование директивы EXTRN в подпрограмме, написанной на ассемблере |
53 |
В объектном файле больше 256 директив |
54 |
Здесь следует поместить зарезервированное слово of |
55 |
В модуле пропущен интерфейс(нет зарезервированного слова) |
56 |
Неправильная перемещаемая ссылка в подпрограмме, написанной на ассемблере. |
57 |
Здесь следует поместить зарезервированное слово then |
58 |
Здесь следует поместить зарезервированное слово to или downto |
59 |
Заголовок подпрограммы объявлен с директивой , но сама подпрограмма далее не описана. |
61 |
При преобразовании типа величины исходного и результирующего типа имеют различные размер |
62 |
Деление на нуль |
63 |
Эта программа работы с файлом не поддерживает данный типа файла |
64 |
Недопустимый типа параметра у подпрограмм Read, Readln, Write, Writeln |
65 |
Эта переменная должна быть типа-указателя |
66 |
Эта переменная должна быть строкового типа |
67 |
Эта выражение должно быть строкового типа |
68 |
Циклическая ссылка модулей друг на друга |
69 |
Имена модуля и файла, в котором он находится, не совпадают |
70 |
Один или несколько используемых модулей изменены после их компиляции |
71 |
Внутренний стек компилятора переполнен из-за глубокой вложенности операторов |
72 |
Ошибка в формате скомпилированного модуля. Возможно, он был скомпилирован предыдущей версией пакета. |
73 |
Пропущена исполнительная часть модуля |
74 |
Недопустимое значение константы |
75 |
Переменная должна быть типа-записи или типа-объекта |
76 |
Используемая константа имеет недопустимое значение |
77 |
Эта переменная должна быть файлового типа |
78 |
Это выражение должно быть типа указателя |
79 |
Это выражение должно быть числовым |
80 |
Метка не из данного блока |
81 |
Меткой уже помечен один оператор |
82 |
Метка объявлена, но ни один оператор ей не помечен |
83 |
Неправильный аргумент у операции |
84 |
В модуле пропущено зарезервированное слово Unit |
85 |
Здесь пропущена точка с запятой |
86 |
Здесь пропущено двоеточие |
87 |
Здесь пропущена запятая |
88 |
Здесь пропущена открывающая круглая скобка |
89 |
Здесь пропущена закрывающая круглая скобка |
90 |
Здесь пропущен знак равенства |
91 |
Здесь пропущен знак присваивания |
92 |
Здесь пропущена открывающая квадратная скобка или скобка с точкой |
93 |
Здесь пропущена закрывающая квадратная скобка или скобка с точкой |
94 |
Здесь пропущена точка |
95 |
Здесь пропущены две точки |
96 |
Размер глобальных переменных программы или локальных переменных подпрограммы превышает 64Кбайт |
97 |
Неправильно параметр цикла FOR |
98 |
Здесь должна быть переменная целого типа |
99 |
Типизированная константа не может быть файлового или процедурного типа |
100 |
Длина строковой константы не соответствует размеру массива символов |
101 |
Порядок следования полей в типизированных константах типа-записи или типа объект а должен соответствовать порядку их следования при объявлении типа. |
102 |
Здесь должна быть строковая константа |
103 |
Здесь должна быть числовая переменная(целого или вещественной типа. |
104 |
Здесь должна быть переменная порядковый тип |
105 |
В подпрограмме с директивой Inline неправильно использован указатель размера |
106 |
Здесь должно быть выражение символьного тип |
107 |
Основная часть программы слишком велика. Следует часть ее выделить в подпрограммы |
108 |
Переполнение при выполнении арифметической операции с числами целого типа |
109 |
Стандартные процедуры Break или Continue используются вне циклов For While или Repeat |
110 |
Превышены допустимые размеры таблицы отладочной информации(больше 64 кбайт) |
112 |
Целая константа в операторе Case должна быть в пределах от -32768 до 32767 |
113 |
Ошибка в операторе. |
114 |
Нельзя непосредственно вызвать процедуру прерывания. |
116 |
Типы Single, Double, Extended и Comp можно использовать только при наличии арифметического сопроцессора |
117 |
При использовании команды меню Search|Find error нельзя найти оператор для заданного адреса |
118 |
В данном месте нельзя использовать файл, подключаемый директивой($! filename). Оператор должен полностью находиться в одном файле. |
119 |
Зарезервированное слово inherited использовано не внутри метода объекта или внутри метода объекта, у которого нет предков. |
121 |
Неправильный квалификатор(попытка задать индекс у параметра, не являющегося массивом. |
122 |
Неправильная ссылка на переменную(вероятно, взят указатель, в не величина, на которую он указывает) |
123 |
В программе введено символов больше, чем 64Кбайт. Следует попробовать разделить программ на части. |
124 |
Тело программы не может быть более 24Кбайт. Нужно выделить одну или несколько подпрограмм. |
126 |
Файловую переменную можно передавать в подпрограмму только как параметр переменной |
127 |
Слишком много символов у параметра условной компиляции |
128 |
Пропущена директива компилятора |
130 |
Параметры для условной компиляции, заданные строкой ввода |
131 |
Полный заголовок подпрограмм не соответствует заголовку, объявленному с директивой forward, или заготовку в интерфейсной части модуля |
133 |
Неправильно константное выражение или выражение, используемой в окнах отладки |
134 |
Неправильно завершено выражение |
135 |
Неправильный формат |
136 |
Неправильная косвенная ссылка |
137 |
Недопустимая операция над структурированными данными |
138 |
Файл Turbo.tpl не включает модуль System |
139 |
Нельзя получить этот символ |
140 |
Переполнение при операциях с вещественными числами или деление на ноль |
141 |
Программа, использующая оверлеи, должна быть скомпилирована на диск |
142 |
Здесь должен быть указатель или переменная процедурного типа |
143 |
Неправильный вызов процедуры или функции |
144 |
Попытка использовать модуль в оверлейной программе, который не скомпилирован с директивой |
146 |
Неправильное обращение к файлу(например, запись в файл, применяемый только для чтения, используется имя каталога, а не файл. |
147 |
Здесь должна быть переменная типа объект |
148 |
Нельзя определять переменную типа объект в подпрограмме |
149 |
Этот метод быть виртуальным |
150 |
Здесь должен быть идентификатор метода |
151 |
Конструктор не может быть виртуальным |
152 |
Здесь должен быть идентификатор конструктора |
153 |
Здесь должен быть идентификатор деструктора |
154 |
Процедура Fail вызвана не из конструктора, что недопустимо |
155 |
Неправильный набор операндов у команды ассемблера |
156 |
В команде ассемблера должна быть ссылка на память |
157 |
Нельзя складывать или вычитать перемещаемые операнды в ассемблере |
158 |
Неправильная комбинация регистров |
159 |
Нельзя использовать команды для компьютеров 80286/80287 |
160 |
Этот параметр нельзя использовать как операнд в команде ассемблера |
162 |
Здесь должно быть зарезервированное слово asm |
Таблица 2 Сообщения об ошибках времени выполнения
Номер ошибки |
Комментарий |
1 |
Вызов несуществующей функции DOS |
2 |
Файл не найден |
3 |
Не найден каталог |
4 |
Нельзя открыть столько файлов. Число открываемых файлов определяется в config.sys |
5 |
Неправильное обращение к файлу |
6 |
Неправильный описатель файлов |
12 |
Неправильный режим доступа к файлу |
15 |
Неправильный номер накопителя |
16 |
Нельзя удалить текущий каталог |
17 |
Нельзя переименовать файл, изменив номер накопителя |
18 |
Процедура Findfirst илиFindNExt не нашла файл |
100 |
Попытка чтения из файла после достижения его конца |
101 |
Ошибка при записи на диск, если он заполнен |
102 |
Попытка работать с файлом, для которого не выполнена процедура Assign |
103 |
Файл не открыт |
104 |
Файл не открыт для чтения |
105 |
Файл не открыт для записи |
106 |
Недопустимый формат целого числа |
150 |
Попытка записать на диск, защищенный от записи |
151 |
Ошибка, формируемая драйвером |
152 |
Внешнее устройство не готово |
154 |
MS DOS определила ошибку в записанных на внешнее устройство данных |
156 |
Ошибка, формируемая MS DOS при поиске данных на диске |
157 |
MS DOS не может распознать тип диска |
158 |
Ошибка, формируемая MS DOS при поиске данных на диске |
159 |
В принтере отсутствует бумага |
160 |
Ошибка на диске при записи |
161 |
Ошибка на диске при чтении |
162 |
Ошибка устройства ввода-вывода |
200 |
Деление числа на ноль |
201 |
Ошибка при контроле допустимого значения |
202 |
Переполнение стека |
203 |
Переполнения демонической памяти |
204 |
Применение процедуры Dispose или FreeMem к незаданному указателю |
205 |
Переполнение вещественного числа |
206 |
Потеря значимости вещественного числа |
207 |
Неправильная операция с вещественными числами |
208 |
Диспетчер оверлеев не инициализирован |
209 |
Ошибка при чтении оверлейного файла |
210 |
Объект не инициализирован |
211 |
Вызван абстрактный метод |
215 |
Переполнение при арифметической операции |
216 |
Неправильная попытка записать информацию в память |
1 Далее, ТР – сокращение от Turbo Pascal
2 « » - символ обозначает клавишу Enter
3 « » - символ обозначает клавишу Enter
4 [ ] обозначает необязательный параметр.