W Cat - Описание языка PascalABC.NET
- Название:Описание языка PascalABC.NET
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
W Cat - Описание языка PascalABC.NET краткое содержание
PascalABC.NET — это язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений. Он реализован на платформе Microsoft.NET и содержит все современные языковые средства: классы, перегрузку операций, интерфейсы, обработку исключений, обобщенные классы и подпрограммы, сборку мусора, лямбда-выражения, средства параллельного программирования.
PascalABC.NET является мультипарадигменным языком: на нем можно программировать в структурном, объектно-ориентированном и функциональном стилях.
PascalABC.NET — это также простая и мощная интегрированная среда разработки, поддерживающая технологию IntelliSense, содержащая средства автоформатирования, встроенный отладчик и встроенный дизайнер форм.
Описание языка PascalABC.NET - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Изменим программу, заменив в заголовке цикла число 3 на 4, и вновь запустим программу. Теперь все данные, необходимые для выполнения задания, введены в программу (это видно по индикатору ввода). Однако задание не выполнено, поскольку результирующий файл не создан. Поэтому решение опять признано ошибочным с диагностикой Результирующий файл не найде н ":

Добавим в тело цикла после процедуры Assign вызов процедуры Reset, обеспечивающий открытие существующего файла:
usesPT4;
var
i: integer;
s: string;
f: array[1..4] of file ofinteger;
begin
Task('File48');
fori := 1 to4 do
begin
read(s);
Assign(f[i], s);
Reset(f[i]);
end;
end.
Теперь запуск программы приведет к сообщению об ошибке Error System.IO.FileNotFoundExceptio n ":

Сообщение, начинающееся со слова Error , означает, что при работе программы произошла ошибка времени выполнения (Runtime Error). После слова Error указывается имя этой ошибки (в данном случае System.IO.FileNotFoundException , то есть ошибка ввода-вывода, связанная с тем, что файл не найден) и краткое ее описание на английском языке.
Сообщение об ошибке времени выполнения появится и в разделе Список ошибок" окна PascalABC.NET:

Для того чтобы избежать ошибки времени выполнения, отсутствующий файл результатов следует открыть не процедурой Reset, а процедурой Rewrite, которая и обеспечит создание этого файла. Далее, после завершения работы с файлами, открытыми в программе, их необходимо закрыть процедурой Close. Добавим в программу соответствующие операторы:
usesPT4;
var
i: integer;
s: string;
f: array[1..4] of file ofinteger;
begin
Task('File48');
fori := 1 to4 do
begin
read(s);
Assign(f[i], s);
ifi < 4 thenReset(f[i])
elseRewrite(f[i]);
end;
{ * }
fori := 1 to4 do
Close(f[i]);
end.
Комментарий { * } расположен в том месте программы, в котором можно выполнять операции ввода-вывода для всех четырех файлов: они уже открыты процедурами Reset или Rewrite и еще не закрыты процедурой Close.
Запуск этого варианта программы не приведет к ошибке времени выполнения; более того, результирующий файл будет создан. Однако созданный файл останется пустым, то есть не содержащим ни одного элемента. Поэтому при запуске программы на информационной панели появится сообщение Ошибочное решени е ", а в строке, которая должна содержать элементы результирующего файла, появится текст EOF: (особое значение EOF для указателя текущей файловой позиции означает, что данный файл существует, но не содержит ни одного элемента):

Во всех ранее рассмотренных вариантах программы мы не использовали операции ввода-вывода для файлов. Поэтому тип файлов не играл никакой роли: вместо типа file ofinteger мы могли использовать любой другой файловый тип, например, file ofreal, и результат выполнения программы был бы тем же самым.
Тип файловых элементов становится принципиально важным, если в программе используются операции ввода-вывода для данного файла. Чтобы продемонстрировать это на примере нашей программы, внесем в нее следующие изменения: в описании массива f файловых переменных тип integer заменим на real, в раздел описаний добавим описание переменной a типа real, в раздел операторов (в позицию, помеченную комментарием { * }) добавим следующий фрагмент:
fori := 1 to3 do
begin
read(f[i], a);
write(f[4], a);
end;
Данный фрагмент обеспечивает считывание одного элемента для каждого из трех исходных файлов и запись этих элементов в результирующий файл (в требуемом порядке). Подчеркнем, что мы неправильно указали типы файлов; тем не менее, компиляция программы пройдет успешно, а после ее запуска не произойдет ошибок времени выполнения.
Результат работы программы будет неожиданным:

Судя по экранной строке с содержимым результирующего файла, в него будут записаны не три, а шесть элементов , по два начальных элемента из каждого исходного файла. Объясняется это тем, что после связывания файлов с файловыми переменными типа file ofreal элементами файлов стали считаться вещественные числа (занимающие в памяти по 8 байтов), тогда как на самом деле", то есть по условию задания, элементами файлов являются целые числа (занимающие в памяти по 4 байта). Поэтому считывание из файла и последующая запись в файл одного "вещественного элемента" фактически приводит к считыванию и записи блока данных размером 8 байтов, содержащего два последовательных целочисленных элемента исходного файла.
Итак, мы выяснили, что ошибки, связанные с несоответствием типов файлов, не выявляются при компиляции и не всегда приводят к ошибкам времени выполнения. Это следует иметь в виду, и при появлении странных" результирующих данных начинать поиск ошибки с проверки типов файловых переменных.
Заменим в нашей программе все описания real на integer:
usesPT4;
var
i: integer;
s: string;
f: array[1..4] of file ofinteger;
a: integer;
begin
Task('File48');
fori := 1 to4 do
begin
read(s);
Assign(f[i], s);
ifi < 4 thenReset(f[i])
elseRewrite(f[i]);
end;
Интервал:
Закладка: