Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л.р. ТР.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
414.72 Кб
Скачать

 5. Работа с файлами в Pascal

Основной формой хранения текстов программ вне среды ТР является память.

Рисунок 14. Сохранение созданного файла

Записать файл на диск можно различными способами:

  1. Если файл имеет имя по умолчанию, т.е. Noname 00.pas, то в главном меню нужно выбрать пункт FileSave as... Появляется диалоговое окно.

    1. Имя файла можно набрать с клавиатуры, оно появляется в поле Save file as (расширение писать не обязательно, среда присвоит его сама).

    2. Из списка поля files можно выбрать имя файла. Информационная панель содержит путь, имя файла, дату и время создания и размер.

  2. Если файл вызван в редактор для изменения и уже имеет имя, то для его записи нужно выбрать Save в пункте File или нажать клавишу F2.

  3. Для записи на диск всех файлов в открытых окнах используется режим FileSave all

Для вызова существующего файла в окно редактора нужно выбрать FileOpen или нажать F3. Появляется диалоговое окно. Входное поле Name служит для ввода имени файла с клавиатуры. Нужный файл можно выбрать из списка поля files.

Изменение каталога

Изменить каталог можно с помощью команды Chang dir, который находится в меню File. При этом открывается диалоговое окно, содержащее поля ввода: Directory name, Directory tree и 4 кнопки.

Рисунок 15. Окно смены каталога

 6. Компиляция программы

Компиляция программы – это преобразование файла, содержащего текст программы на языке TP в командный файл на машинном языке. При этом к исходному файлу присоединяются файлы библиотеки, содержащие стандартные процедуры и функции. Скомпилированный файл получает расширение exe. Такие файлы могут использоваться вне среды ТР. Для компиляции программы, находящейся в активном окне редактора необходимо выполнить следующие действия:

  1. Compile Compile или

  2. Alt+F9 .

Во время компиляции на экране появляется окно с информацией. Если среда не обнаруживает ошибок, то выдается сообщение:

Compilation successful: pass any key (компиляция прошла успешно: нажмите любую клавишу).

Рисунок 16. Информационное окно компиляции

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

Созданный .exe файл остается в оперативной памяти. При выходе из программы он стирается. Чтобы сохранить .exe файл на диске, необходимо в пункте CompileDestination memory, 3

Режим сменяется на Destination disk и меню сразу исчезнет с экрана. После этого нужно нажать F9 или CompileMake. Функция с тем же именем, что и в окне редактора, но с расширением exe появляется в том же каталоге, что и исходный pas файл.

 7. Выполнение программы

Для запуска программы на исполнение необходимо:

  1. Выбрать меню RunRun или

  2. Нажать сочетание клавиш Ctrl+F9.

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

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

При выполнении программы это окно появляется на экране и тут же исчезает. Чтобы установить его на экране необходимо выполнить одно из действий:

  1. Alt+F5 или

  2. DebugUser screen или

  3. DebugOutput (при этом на экране одновременно находится и окно редактора и окно результата).

Отладка программы.

Устранение ошибок в программе называется отладкой.

Ошибки бывают разных типов:

  1. Синтаксические.

Определяется во время компиляции. Их место указывается курсором и сообщается номер ошибки.

  1. Ошибки времени исполнения.

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

  1. Логические.

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

  1. F8 или

  2. RunStep over.

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

Аналогичные действия вызывает:

  1. F7 или

  2. Run→Trace into

Но эти действия называются трассировкой программы.

При трассировке и при пошаговом выполнении программы можно проследить значения переменных в окне отслеживания. Иногда нужно проследить только часть программы. Это можно сделать различными способами:

  1. Установить курсор на строку, до которой программа должна выполниться. Затем

    1. F4 или

    2. RunGo to cursor

Эта строка называется строкой остановки. Программа выполниться до этой строки и остановится. Теперь пользователь может просмотреть часть программы с помощью пошагового исполнения.

  1. Можно установить в некоторой строке (или нескольких) точку остановки. Тогда выполнение программы будет остановлено в этой строке. Это можно сделать:

    1. Ctrl+F8 или

    2. Alt+F10, Toggle break point

Строка, в которой установлена точка остановки, выделяется красным цветом.

Точки остановки можно просмотреть в специальном режиме

DebugBreakpoints

При этом открывается диалоговое окно, в котором для каждой точки остановки выводится информация:

  • Имя файла (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 [ ] обозначает необязательный параметр.