Сообщения об ошибках на шаге выполнения

Сообщения об ошибках на шаге выполнения имеют следующий формат:

Run-time error < номер > at < сегмент >:< смещенне >,

где < номер > – номер ошибки,

< сегмент >:< смещение > – адрес, по которому произошла ошибка.

Ошибки шага выполнения делятся на четыре группы:

ошибки операционной системы MS DOS: 1-99,

ошибки ввода-вывода: 100–149,

серьезные ошибки: 150–199,

грубые ошибки: 200–255.

 

Таблица 37. Ошибки операционной системы DOS

Код ошибки Сообщение Причина появления ошибки
Invalid function number «неверный номер функции» — Предпринята попытка вызова несуществующей функции dos.
File not found файл не найден
Path not fond путь не найден
Too many open files «слишком много открытых файлов» — Операционная система MS DOS позволяет открывать не бо­лее 15 файлов
File access denied «запрещен доступ к файлу» — Вероятно, предпринята попытка записи в файл, предназначенный только для считывания.
Invalid file handle «неправильный обработчик файла» — Данное сообщение выдастся в том случае, если при вызове MS DOS передается неправильный спецификатор файла. Вероят­но, искажена файловая переменная
Invalid file access code «неправильный код доступа к файлу» — Задано недопустимое значение переменной FileMode
Invalid drive number неправильный номер диска
Cannot remove current directory нельзя удалять текущую ди­ректорию
Cannot rename across drives при переименовании файла нельзя указывать другое устройство

 

Таблица 38. Ошибки ввода-вывода

Ошибки, относящиеся к данной группе, вызывают заверше­ние программы, если она откомпилирована в режиме {$I+}. В режиме {$I-} программа продолжает выполняться, а код ошибки возвращается функцией IOResult.

 

Код ошибки Сообщение Причина появления ошибки
Disk read error «ошибка чтения с диска» — Предпринята попытка чтения после конца файла
Disk write error «ошибка записи на диск» — Диск целиком заполнен
File not assigned «файл не назначен» — Файловой переменной не назначен файл с помощью проце­дуры Assign
File not open файл не открыт
File not open for input файл не открыт для ввода
File not open for output файл не открыт для вывода
Invalid numeric format «неправильный числовой формат» — Числовое значение, считанное из текстового файла, имеет неправильный формат

 

Таблица 39. Серьезные ошибки

Код ошибки Сообщение Причина появления ошибки
Disk is write-protected диск защищен от записи
Unknown unit неизвестное устройство
Drive not ready дисковод не готов к работе
Unknown command неизвестная команда
CRC error in data ошибка в данных на диске
Disk seek error ошибка поиска на диске
Unknown media type неизвестный тип носителя
Sector not found сектор не найден
Printer out of paper в принтере нет бумаги
Device write fault ошибка при записи на устройство
Device read fault ошибка устройства при чтении
Hardware failure отказ аппаратных средств

 

Таблица 40. Грубые ошибки

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

 

Код ошибки Сообщение Причина появления ошибки
Division by zero деление на нуль
Range check error «выход за допустимые границы» — Вычисленное или присвоенное значение не укладывается в допустимый диапазон
Stack overflow error переполнение стека
Heap overflow error переполнение области динамической памяти
Invalid pointer operation «неправильная операция с указателем» — Используемая ссылочная переменная содержит nil или адрес за пределами динамической памяти.
Floating point overflow переполнение в операции с плавающей точкой
Floating point underflow потеря порядка в операции с пла­вающей точкой
Invalid floating point operation неправильная операция с плавающей точкой
Overlay manager not installed «монитор оверлеев не инициирован» — Вероятно, не была вызвана процедура Ovrlnit или при ее вызове произошла ошибка
Overlay file read error ошибка при чтении оверлейного файла
Object not initialized объект не инициализирован
Сall to abstract method «обращение к абстрактному методу» — Предпринята попытка создания экземпляра объекта абстрак­тного типа, содержащего один или несколько абстрактных мето­дов. Однако абстрактные типы существуют только для того, что­бы можно было наследовать от них и перекрывать абстрактные методы
212–214   Эти сообщения связаны с ошибками, возникающими при работе с пакетом Turbo Vision.

Приложение В.
Описание числовых файлов для лабораторных работ

Текстовые файлы DATF.TXT и DATI.TXT содержат соответственно вещественные и целые числа, набитые по 10 чисел в строке, DATF.BIN и DATI.BIN содержат вещественные и целые числа во внутримашинной кодировке. Файлы SIMBOL.TXT, RUS.TXT и LAT.TXT содержат символьную информацию. Имена, строение и метод доступа к данным файлов приведены ниже.

1. Файл DATI.TXT – последовательный символьный (текстовый) набор целочисленных данных, содержит 1000 чисел в виде 50 строк (записей) по 20 чисел в каждой строке. Значения чисел не превосходят 999 по абсолютной величине.

Пример открытия файла и чтения из него чисел с 310 по 315:

VAR

mas : array[1..5] of integer;

fin : text;

. . .

BEGIN

. . .

Assign(fin,'D:\LAB1\DATI.TXT');

Reset(fin);

пропуск 300 чисел в виде 15 строк по 20 чисел:

for i:=1 to 15 readln(fin);

пропуск первых 9 чисел (301-309)

и чтение 6 чисел (310-315):

for i:=1 to 9 read(fin);

for i:=1 to 6 read(fin,mas[i]);

close(fin); закрытие файла

. . .

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

for i:= ... do

if not Eoln(fin) then Read(fin, Txt[i])

else Readln(fin);

Если желательно дополнительно также пропускать все пробелы (и символы табуляции), то лучше использовать функцию SeekEoln :

for i:= ... do

if not SeekEoln(fin) then Read(fin, Txt[i])

else Readln(fin);

И, наконец, если при чтении желательно брать только цифры, то можно в программу добавить "шаг назад" при каждом вводе не цифрового значения:

for i:= ... do

begin

Read(fin, Txt[i])

if (Txt[i] < '0') or (Txt[i] > '9') then i:=i-1;

end;

2. Файл DATF.TXT – последовательный символьный (текстовый, форматный) набор вещественных данных, содержит 500 чисел в виде 50 строк (записей) по 10 чисел в каждой строке. Значения чисел не превосходят 1000000 по абсолютной величине. Пример открытия файла и чтения из него чисел с 32 по 35:

VAR

mas : array[1..4] of real;

fin : text;

. . .

BEGIN

. . .

Assign(fin,'D:\LAB1\DATF.TXT');

Reset(fin);

пропуск 31 числа:

for i:=1 to 31 read (fin);

чтение 4 чисел:

for i:=1 to 4 read(fin,mas[i]);

close(fin);

. . .

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

3. Файл DATI.BIN – файл прямого доступа, представляет набор целочисленных данных, содержит 1000 двухбайтовых целых чисел. Должен описываться как файл из данных целого типа или массивов целого типа. Значения чисел не превосходят 999 по абсолютной величине. Пример открытия файла и чтения из него каждого 5-го числа:

VAR

dann,fict : integer;

fin : file of integer;

. . .

BEGIN

Assign(fin,'D:\LAB1\DATI.BIN');

Reset(fin);

While not Eof do

begin

for i:=1 to 4 do read(fin,fict); { пропуск 4 чисел, чтением их в фиктивную переменную}

Read(fin,dann); { чтение числа }

. . .

end;

close(fin); {закрытие файла }

. . .

4. Файл DATF.BIN – бесформатный (двоичный, внутримашинный) файл прямого доступа, представляет набор вещественных данных, содержит 500 шестибайтовых вещественных чисел. Должен подключаться к файловой переменной вещественного типа. Значения чисел не превосходят 99 по абсолютной величине. Пример открытия файла и чтения из него всех чисел после 90-го по 10 штук:

TYPE

MAS10 = array[1..10] of real;

VAR

dann : MAS10;

fin : file of MAS10;

. . .

BEGIN

. . .

Assign(fin,'D:\LAB1\DATI.BIN');

Reset(fin);

пропуск 90 чисел, чтением их в переменную dann длиной 10 чисел 9 раз

for i:=1 to 9 do

read(fin,dann);

While not Eof do {пока не кончится файл}

begin

Read(fin,dann); { чтение очередных 10 чисел: }

. . .

end;

close(fin); { закрытие файла }

. . .

5. Файл SIMBOL.TXT – символьный (текстовый) файл последовательного доступа, представляет набор символьных данных, содержит 410 элементов (без переводов строк). Этот набор данных можно связывать как с текстовой, так и с типизированной (типа char) файловой переменной.

Пример 1. Чтение из файла с 20-го по 50-ый символы в одномерный символьный массив:

VAR

mas : array[0..30] of char;

fin : text;

. . .

BEGIN

. . .

Assign(fin,'D:\LAB1\SIMBOL.TXT');

Reset(fin);

пропуск 19 символов:

for i:=1 to 19 read (fin);

чтение 31 символа, с 20-го по 50-й:

for i:=0 to 30 read(fin,mas[i]);

close(fin); закрытие файла

. . .

Пример 2. Чтение из файла с каждого четвертого символа в одномерный символьный массив длиной 40 байт:

TYPE

SimMas = array[1..40] of char;

VAR

Sim : SimMas;

fin : file of char;

i,j : integer; {i- счетчик элементов массива, j - номер символа в файле }

. . .

BEGIN

. . .

Assign(fin,'D:\LAB1\SIMBOL.TXT');

Reset(fin);

. . .

j:=3; { нумерация в файле начинается с 0! }

for i:=1 to 40 do

begin

Seek(fin,j) { ищем нужный номер символа в файле }

read(fin,Sim[i]); { читаем его в очередной элемент массива }

j:=j+4; { устанавливаем новый номер }

end;

close(fin); { закрытие файла }

. . .

6. Файл RUS.TXT – символьный (текстовый) файл последовательного доступа, представляет набор строк, длиной не более 80 символов кириллицы в строке. Файл может читаться только как текстовый.

Пример 1. Чтение из файла с 5-го по 9-ю строки в одномерный строчный массив:

TYPE Ss = string[80];

VAR mas : array[1..5] of Ss;

fin : text;

. . .

BEGIN

. . .

Assign(fin,'D:\LAB1\RUS.TXT');

Reset(fin);

{ пропуск 4-х строк: }

for i:=1 to 4 do ReadLn (fin);

{ чтение 5-и строк: }

for i:=1 to 5 do ReadLn (fin,mas[i]);

close(fin); { закрытие файла }

. . .

7. Файл LATS.TXT – символьный (текстовый) файл. Может рассматриваться как файл последовательного доступа, если читать в строковые переменные, и как файл последовательного или прямого доступа, при чтении в символьные переменные. В последнем случае содержит он служебные символы возврата каретки и перевода строки. Представляет набор строк, длиной строго по 50 символов ASCII в каждой строке, не считая двух служебных символов.

Пример 1. Чтение из файла ASCII символов в символьный массив [2х55] элементов:

VAR

mas : array[1..2,1..55] of char;

fin : text;

. . .

BEGIN

. . .

Assign(fin,'D:\LAB1\LATS.TXT');

Reset(fin);

for i:=1 to 2 do

for j:=1 to 55 do

if not Eol(Fin) then

Read (fin,mas[i])

else {пропуск конца записи (служебных символов)}

begin

ReadLn(fin);

j:=j-1; { отмена смещения в массиве }

end;

close(fin); { закрытие файла }

. . .

Приложение Г.
Таблица ASCII-кодов (с альтернативной кодировкой)

Первая половина таблицы – стандартный набор кодов символов

№ п/п Код 16-й Символ № п/п Код 16-й Символ № п/п Код 16-й Символ № п/п Код 16-й Символ
(null)   @ `
! A a
" B b
# C c
$ D d
% E e
& F f
' G g
( H h
) I i
0A 2A * 4A J 6A j
0B 2B + 4B K 6B k
0C 2C , 4C L 6C l
0D 2D - 4D M 6D m
0E 2E . 4E N 6E n
0F 2F / 4F O 6F o
P p
Q q
R r
S s
Π T t
§ U u
V v
W w
X x
Y y
1A 3A : 5A Z 7A z
1B 3B ; 5B [ 7B {
1C 3C < 5C \ 7C |
1D 3D = 5D ] 7D }|
1E 3E > 5E ^ 7E ~
1F 3F ? 5F _ 7F D

 


Вторая половина таблицы – альтернативный набор кодов символов

 

№ п/п Код 16-й Символ № п/п Код 16-й Символ № п/п Код 16-й Символ № п/п Код 16-й Символ
А A0 а C0 E0 р
Б A1 б C1 E1 с
В A2 в C2 E2 т
Г A3 г C3 E3 у
Д A4 д C4 E4 ф
Е A5 е C5 E5 х
Ж A6 ж C6 E6 ц
З A7 з C7 E7 ч
И A8 и C8 E8 ш
Й A9 й C9 E9 щ
8A К AA к CA EA ъ
8B Л AB л CB EB ы
8C М AC м CC EC ь
8D Н AD н CD ED э
8E О AE о CE EE ю
8F П AF п CF EF я
Р B0 D0 F0 Ё
С B1 D1 F1 ё
Т B2 D2 F2 Є
У B3 D3 F3 є
Ф B4 D4 F4 Ї
Х B5 D5 F5 ї
Ц B6 D6 F6 Ў
Ч B7 D7 F7 ў
Ш B8 D8 F8 °
Щ B9 D9 F9
9A Ъ BA DA FA ·
9B Ы BB DB FB
9C Ь BC DC FC
9D Э BD DD FD ¤
9E Ю BE DE FE
9F Я BF DF FF