13.9. Оператор записи With
В ранних версиях языка оператор использовался для более удобного доступа к полям записи.
Пример:
Var
Student : Record
Fam: String[30];
Name: String[20];
Age: Word;
End;
…
Student.Fam:= 'Колокольников';
Student.Name:= 'Павел';
S:=Student.Fam + ' '+Student.Name;
{предыдущих три оператора эквивалентны следующим}
With Student do
Begin
Fam:= 'Колокольников';
Name:= 'Павел';
S:= Fam + ' '+ Name;
End;
13.10. Оператор Try – Except – End
Это новейшее средство языка. Блок Try – Except – End используется для предотвращения исключительных ситуаций (ИС), которые могут возникнуть при выполнении программы. К их числу относятся сбои в работе аппаратуры, ошибки вычислений (например деление на нуль), попытки присвоить значение, выходящее за пределы типа и т. д.
Синтаксис:
Try
{операторы, способные генерировать ИС}
Except
{операторы, обрабатывающие генерированные ИС}
end;
Блок Try – Except – End работает следующим образом. Выполнение начинается с операторов, расположенных в блоке Try – Except. Если в каком-либо операторе возникает ИС, то она подавляется и затем выполняются все операторы, расположенные в блоке Except – End. В результате предотвращается аварийное прерывание программы. Использование блока Try – Except – End открывает возможность программного контроля за ИС.
Пример.
i:= 0;
n:= 8;
Try
i:= n div i; {Деление на нуль. Оператор генерирует ИС}
n:= i + 9;
Except
ShowMessage('Ошибка. Деление на нуль в операторе i := n / i');
End;
Результатом выполнения блока операторов будет появление на экране формы с сообщением "Ошибка. Деление на нуль в операторе i := n / i", после чего программа продолжит работу с оператора, следующего за словом End, а не с оператора n := i + 9.
Если бы оператор i := n div i не был защищен блоком Try – Except – End, то возникшая при его выполнении ИС привела бы к нежелательному аварийному завершению программы.
13.11. Оператор On – End
При возникновении ИС язык позволяет не только предотвратить прерывание программы, но и определить, какого именно вида была ИС. Для этого в блоке Except – End можно использовать оператор On –Do.
Пример
i:= 0; n:= 8;
Try
i:= n div i; {Деление на нуль. Оператор генерирует ИС}
n:= i + 9;
Except
On Ex: EdivByZero do ShowMessage('Деление на нуль');
End;
В этом примере сообщение о возникновении ИС будет выдано только в случае, когда ИС будет только деление на нуль (EdivByZero). Во всех остальных случаях ИС будет предотвращена, однако никакого сообщения о ее возникновении выдано не будет. Объявленная в блоке Except – End переменная Ex может быть любым именем (здесь Ex используется только для примера).
13.12. Оператор Try – Finally – End
Блок Try – Finally – End также используется для предотвращения ИС, которые могут возникнуть при выполнении программы. В отличие от блока Try – Except – End блок Try – Finally – End используется для освобождения ресурсов памяти, закрытия файлов и пр. в случае возникновения ИС.
Синтаксис:
Try
{операторы, способные генерировать ИС}
Finally
{операторы освобождения ресурсов памяти }
end;
Блок Try – Finally – End работает следующим образом. Выполнение начинается с операторов блока Try – Finally, которые в правильно написанной программе должны содержать операторы выделения ресурсов памяти. Если в каком-либо операторе возникает ИС, то управление сразу передается к операторам блока Finally – End, где производится освобождение памяти, закрытие файлов и пр. В результате, с одной стороны, предотвращается аварийное прерывание программы и, во вторых, корректно освобождается ранее зарезервированная память, выполняется ряд других необходимых операций.
Отметим, что блок Finally – End выполняется всегда вне зависимости от того, была или не была сгенерирована ИС.
Пример.
i:= 0;
n:= 8;
Try
GetMem (p, 8000); {выделение памяти}
i:= n div i; {Деление на нуль. Оператор генерирует ИС}
n:= i + 9;
Finally
FreeMem (p, 8000); {освобождение памяти}
End;
14. Указатели
В языке есть средство, разрешающее запрашивать память динамически, т. е. по необходимости. Это позволяет уменьшить объем кода программы и экономно расходовать оперативную память. Такое средство представляет собой специальный тип, называемый указателем. Имеется два типа ука-зателей: указатель на объект некоторого типа и указатель без типа.
Тип Pointer образует указатель без типа. Указатель на тип имеет синтаксис:
^ Имя типа
Примеры объявления указателей:
Type
tDinArr = Array[1 .. 1000, 100] of String[255]; {обычный тип}
tDinArrPtr = ^tDinArr; {указатель на тип tDinArr}
tRecPtr = ^tRec; {указатель на тип записи, который описан ниже}
tTRec = Record {обычный тип-запись}
A: Integer;
B: Real;
C: String[255];
End;
Var
DinArr: tDinArr; {обычная запись}
DinArrPtr: tDinArrPtr; {указатель на тип}
RecPtr: tRecPtr; {указатель на тип-запись}
Pn1, Pn2: Pointer; {указатели без типа}
Модули System и SysUtils содержат большое количество типов для работы с указателями. Эти типы могут быть использованы для повышения эффективности пользовательских программ, в которых используются указатели. К их числу относятся: PAnsiString, PString, PByteArray, PCurrency, PExtended и ряд других указателей. Впрочем, эти типы могут быть легко заменены стандартными типами. Например PString эквивалентен ^String и т.д.
... в среде Delphi). Задачи использовались как с данного сайта, так и из других источников – книг и семинарских занятиях по информатике в МГОУ. Курс завершается разработкой игры. Программное обеспечение: свободно распространяемая версия объектно-ориентированной среды программирования Delphi. Методы обучения: метод проектов, лекции, проблемный метод, частично-поисковый метод. Контроль знаний и умений ...
... // ... if(condition1) { j = 4; goto label1; } // ... for(j = 0; j < 10; j++) { // ... label1: // ... if(condition2) { i = 6; goto label2; } } // ... label2: // ... } 2.2 Разработка программы В среде программирования Borland Delphi создадим новое приложение (пункт меню File New Application). ...
... так называемые указатели. Указатель - это переменная, которая в качестве своего значения содержит адрес байта памяти. С помощью указателей можно размещать в динамической памяти любой из известных в Object Pascal типов данных. Лишь некоторые из них (Byte, Char, ShortInt, Boolean) занимают во внутреннем представлении один байт, остальные - несколько смежных. Поэтому на самом деле указатель адресует ...
... групп нулей и единиц. Каждая группа отделяется друг от друга одним или несколькими пробелами. Найти и вывести на экран группы с четным количеством символов. Лабораторная работа №6 Программирование АЛГОРИТМОВ с использованием записей Цель лабораторной работы: создать приложение, в котором используются данные типа запись. 6.1.Пример создания приложения Задание: создать Windows-приложение для ...
0 комментариев