Введение в программирование на Delphi
Главная / Программирование / Введение в программирование на Delphi / Тест 15
Упражнение 1:
Номер 1
Какие типы данных может преобразовывать в строку функция IntToStr()
?
Ответ:
 (1) любые целые типы 
 (2) только беззнаковые целые числа 
 (3) любые числа – и целые, и вещественные 
Номер 2
В какие типы данных может преобразовываться строка функцией StrToInt()
?
Ответ:
 (1) только в Integer
 
 
 (3) в любые целые типы 
 (4) в любые числа – и целые, и вещественные 
Номер 3
Какой функцией можно преобразовать целое число в строку?
Ответ:
 (1) StrToInt()
 
 (2) IntToStr()
 
 (3) Integer()
 
 (4) String()
 
Номер 4
Какой функцией можно преобразовать строку в целое число?
Ответ:
 (1) StrToInt()
 
 (2) IntToStr()
 
 (3) String()
 
Упражнение 2:
Номер 1
Какие типы данных может преобразовывать в строку функция FloatToStr()
?
Ответ:
 (1) любые вещественные типы 
 (2) только Float
 
 (3) любые числа – и целые, и вещественные 
 (4) только целые числа 
Номер 2
В какие типы данных может преобразовываться строка функцией StrToFloat()
?
Ответ:
 (1) только в Float 
 (2) только в целые числа 
 (3) в любые вещественные типы 
 (4) в любые числа – и целые, и вещественные 
Номер 3
Какой функцией можно преобразовать вещественное число в строку?
Ответ:
 (1)StrToFloat()
   (2) FloatToStr()
 
 (3) Float()
 
 (4) String()
 
Номер 4
Какой функцией можно преобразовать строку в вещественное число?
Ответ:
 (1) StrToFloat()
 
 FloatToStr()
 
 (3) Float()
 
 (4) String()
 
Упражнение 3:
Номер 1
Какую строку выведет из числа 3,14 функция FormatFloat()
, если в качестве строки формата указать '#. #'?
Ответ:
 (1) ‘3,14’ 
 (2) ‘3,1’ 
 (3) ‘3,0’ 
 (4) ‘3,10’ 
Номер 2
Какую строку выведет из числа 3,14 функция FormatFloat()
, если в качестве строки формата указать '0.000'?
Ответ:
 (1) ‘3,140’ 
 (2) ‘3,14’ 
 (3) ‘03,14’ 
 (4) ‘3,1’ 
Номер 3
Какую строку выведет из числа 3,14 функция FormatFloat()
, если в качестве строки формата указать '#.###'?
Ответ:
 (1) ‘3,140’ 
 (2) ‘3,14’ 
 (3) ‘03,14’ 
 (4) ‘3,1’ 
Упражнение 4:
Номер 1
Что делает функция PChar()
?
Ответ:
 (1) явное преобразование в массив символов типа Char
 
 (2) явное преобразование в строку типа PChar
 
 (3) явное преобразование массива символов типа Char
в другой тип данных 
 (4) явное преобразование строки типа PChar
в другой тип данных 
Номер 3
Что произойдет в случае выполнения приведенного ниже кода? Var f : Real; d : Integer; begin d := 1234; f := d;
Ответ:
 (1) ошибка программы из-за несовместимости типов 
 (2) в переменной d
будет число 1234, а в переменной f
1234,0 
 (3) в переменных d
и f
будет число 1234 
 (4) переменная f
преобразуется в переменную целого типа, и будет содержать число 1234 
Упражнение 5:
Номер 1
Что такоеDecimalSeparator
?
Ответ:
 (1) свойство компонента 
 (2) локальная переменная, предназначенная для символа разделителя дат 
 (3) глобальная переменная, предназначенная для символа разделителя дат 
 (4) локальная переменная, предназначенная для символа разделителя целой части вещественного числа от десятичной части 
 (5) глобальная переменная, предназначенная для символа разделителя целой части вещественного числа от десятичной части, соответствующего настройкам операционной системы 
Номер 2
Что произойдет в результате приведенного ниже кода? var c : Char; begin c := DecimalSeparator;
Ответ:
 (1) ошибка в программе – переменнаяDecimalSeparator
не была объявлена   (2) ошибка в программе – переменная DecimalSeparator
содержит целое число 
 (3) переменной c будет присвоен символ-разделитель десятичной части вещественного числа от целой, соответствующий настройкам операционной системы 
 (4) переменной c будет присвоен символ «. « 
 (5) переменной c будет присвоен символ «,» 
Упражнение 6:
Номер 1
Дайте комментарий приведенному ниже коду, если Index
– символьная переменная:
case Index of
'0'..'9': ;
'a'..'d' : ;
Ответ:
 (1) все значения указаны правильно 
 (2) в операторе выбора case так указывать возможные значения переменной Index
нельзя 
 (3) значение '0'..'9'
указано правильно, а значение 'a'..'d'
указано ошибочно 
 (4) значение 'a'. .'d'
указано правильно, а значение '0'..'9'
указано ошибочно 
Номер 2
Дайте комментарий приведенному ниже коду, если Index
– символьная переменная:
case Index of
'0'..'9': ;
'a', 'd' : ;
Ответ:
 (1) в операторе выбора case так указывать возможные значения переменной Index
нельзя 
 (2) значение '0'..'9'
указано правильно, а значение 'a', 'd'
указано ошибочно 
 (3) значение 'a', 'd'
указано правильно, а значение '0'. .'9'
указано ошибочно 
 (4) все значения указаны правильно 
Номер 3
Дайте комментарий приведенному ниже коду, если Index
– символьная переменная:
case Index of
'0'..'9': ;
#12 : ;
Ответ:
 (1) в операторе выбора case так указывать возможные значения переменной Index
нельзя 
 (2) значение '0'..'9'
указано правильно, а значение #12
указано ошибочно 
 (3) значение #12
указано правильно, а значение '0'. .'9'
указано ошибочно 
 (4) все значения указаны правильно 
Главная / Программирование / Введение в программирование на Delphi / Тест 15
Обработка исключительных ситуаций в Delphi. Восприятие ввода от пользователя
ЛАБОРАТОРНАЯ РАБОТА № 1
1. Цель работы
Ознакомление с классом исключительных ситуаций Delphi и создание приложений, генерирующих исключения и обрабатывающие различные фокусы ввода.
2. Домашнее задание
Изучить разделы 5 и 6 конспекта лекций, ознакомиться с описанием
- заданием на лабораторную работу.
- Основные понятия и приемы
3.1. Обработка исключений
На этапе выполнения Delphi порождает исключения, когда какой-либо процесс идет неправильно. Если код вашей подпрограммы написан соответствующим образом, он может распознать возникшую проблему и попытаться ее решить; в противном случае исключение передается в код, который вызвал вашу подпрограмму и т.д. В конечном счете, если никто не обработал исключение, его обрабатывает Delphi, выводя на экран стандартное сообщение об ошибке и пытаясь продолжить выполнение програм-мы.
Весь механизм строится на четырех ключевых словах:
try – определяет начало защищенного блока кода;
except – определяет конец защищенного блока кода и вводит операторы обработки исключений в следующем виде:
on (тип исключения) do (оператор)
finally – указывает необязательный блок, который используется для освобождения ресурсов, распределенных в блоке try перед обработкой исключения; этот блок завершается ключевым словом end.
raise – оператор, используемый для порождения исключений. Большинство исключений, которые вы встретите при программировании на Del-phi, будут порождаться системой, но вы также можете создать их в собственном коде, когда во время выполнения обнаружатся недопустимые или несогласованные данные. Кроме того, ключевое слово raise можно использовать внутри обработчика для повторного порождения исключе
ния, т.е. для передачи его следующему обработчику.
Если вы хотите, чтобы при правильной обработке исключений программа продолжала выполняться, отключите опцию отладки Break on Exception в
окне Environment Options.
3.2. Предопределенные обработчики исключительных ситуаций
Ниже Вы найдете справочную информацию по предопределенным исключениям, необходимую для профессионального программирования в
Delphi.
- Exception — базовый класс-предок всех обработчиков исключительных ситуаций.
- EAbort — “скрытое” исключение. Используйте его тогда, когда хотите прервать тот или иной процесс с условием, что пользователь про-граммы не должен видеть сообщения об ошибке. Для повышения удобства использования в модуле SysUtils предусмотрена процедура
Abort, определенная как: procedure Abort; begin
raise EAbort. CreateRes(
- EComponentError — вызывается в двух ситуациях:
- при попытке регистрации компоненты за пределами процедуры Register;
- когда имя компоненты не уникально или не допустимо.
- EConvertError — происходит в случае возникновения ошибки при выполнении функций StrToInt и StrToFloat, когда конвертация строки в соответствующий числовой тип невозможна.
- EInOutError — происходит при ошибках ввода/вывода при включенной директиве {$I+}.
- EIntError — предок исключений, случающихся при выполнении целочисленных операций.
- EDivByZero — вызывается в случае деления на ноль, как результат
RunTime Error 200.
- EIntOverflow — вызывается при попытке выполнения операций, при-водящих к переполнению целых переменных, как результат RunTime Error 215 при включенной директиве {$Q+}.
- ERangeError — вызывается при попытке обращения к элементам массива по индексу, выходящему за пределы массива, как результат RunTime Error 201 при включенной директиве {$R+}.
- EInvalidCast — происходит при попытке приведения переменных одного класса к другому классу, не совместимому с первым (например, приведение переменной типа TListBox к TMemo).
- EInvalidGraphic — вызывается при попытке передачи в LoadFromFile файла, несовместимого графического формата.
- EInvalidGraphicOperation — вызывается при попытке выполнения операций, неприменимых для данного графического формата (например, Resize для TIcon).
- EListError — вызывается при обращении к элементу наследника TList по индексу, выходящему за пределы допустимых значений (например, объект TStringList содержит только 10 строк, а происходит обращение к одиннадцатому).
- EMathError — предок исключений, случающихся при выполнении операций с плавающей точкой.
- EOverflow — происходит как результат переполнения операций с плавающей точкой при слишком больших величинах. Соответствует
RunTime Error 205.
- Underflow — происходит как результат переполнения операций с плавающей точкой при слишком малых величинах. Соответствует
RunTime Error 206.
- EZeroDivide — вызывается в результате деления на ноль.
- EMenuError — вызывается в случае любых ошибок при работе с пунктами меню для компонент TMenu, TMenuItem, TPopupMenu и их наследников.
- EOutlineError — вызывается в случае любых ошибок при работе с TOutLine и любыми его наследниками.
- EOutOfMemory — происходит в случае вызовов New(), GetMem() или конструкторов классов при невозможности распределения памяти.
Соответствует RunTime Error 203.
- EPrinter — вызывается в случае любых ошибок при работе с принтером.
- EProcessorException — предок исключений, вызываемых в случае прерывания процессора- hardware breakpoint. Никогда не включается в DLL, может обрабатываться только в “цельном” приложении.
- EBreakpoint — вызывается в случае останова на точке прерывания при отладке в IDE Delphi. Среда Delphi обрабатывает это исключение самостоятельно.
- EFault — предок исключений, вызываемых в случае невозможности обработки процессором тех или иных операций.
- EInvalidOpCode — вызывается, когда процессор пытается выполнить недопустимые инструкции.
- ESingleStep — аналогично EBreakpoint, это исключение происходит
18при пошаговом выполнении приложения в IDE Delphi.
- EPropertyError — вызывается в случае ошибок в редакторах свойств, встраиваемых в IDE Delphi. Имеет большое значение для написания надежных property editors. Определен в модуле DsgnIntf.pas.
- EResNotFound — происходит в случае тех или иных проблем, имеющих место при попытке загрузки ресурсов форм — файлов .DFM в режиме дизайнера. Часто причиной таких исключений бывает нарушение соответствия между определением класса формы и ее описанием на уровне ресурса (например, вследствие изменения порядка следования полей-ссылок на компоненты, вставленные в форму в режиме дизайнера).
- EStreamError — предок исключений, вызываемых при работе с потоками.
- EFCreateError — происходит в случае ошибок создания потока (например, при некорректном задании файла потока).
- EFilerError — вызывается при попытке вторичной регистрации уже зарегистрированного класса (компоненты). Является, также, предком специализированных обработчиков исключений, возникающих при работе с классами компонент.
3.3. Восприятие ввода от пользователя
Обратим особое внимание на одно качество, характерное для многих управляющих элементов – фокус. Как определить какое окно или поле имеет фокус ввода? В каждый конкретный момент фокус имеет только одно поле. Вы можете перемещать фокус, используя клавишу Tab или щелкая мы-шью по другому компоненту. Каждый раз когда компонент получает или теряет фокус, к нему приходит соответствующее событие, которое указывает, что пользователь достиг (OnEnter) или покинул (OnExit) компонент.
При использовании компонента Edit для ввода чисел пользователь вместо цифры может набрать букву. Функции преобразования вернут код ошибки, что поможет определить действительно ли введено число. Когда можно выполнить такую проверку? Возможно, когда изменится значение блока редактирования, когда компонент потеряет фокус или когда пользователь щелкнет по некоторой кнопке в диалоговой панели. Можно просматривать входной поток в блоке редактирования и останавливать любой нечисловой код.
4. Порядок выполнения работы
- В среде программирования Delphi cоздайте новый проект, выбрав пункт меню File/New Application.
19Сохраните этот проект в папке»С:\Ваша_группа\Ваша_фами
- Разработайте приложение, обрабатывающее исключительную ситуацию, согласно вашему варианту индивидуального задания.
- Открыть новое приложение.
- Создать форму с пятью полями редактирования и пятью соответствующими надписями, которые поясняют, какой вид проверки осуществляет
соответствующий компонент Edit. Форма также содержит кнопку для проверки содержимого первого поля редактирования.
Событие OnClick кнопки должно проверять целочисленность введенного в первое поле значения, например:
var
Number, Code : Integer ; begin
if Edit1.Text <> ‘ ’ then begin
val ( Edit1. Text, Number, Code) ; if Code <> 0 then
begin
Edit1. SetFocus ;
MessageDlg (‘ Not a number in the first edit ‘ , mtError, [ mbOK ] , 0 ) ;
end ; end ;
end ;
♦ При выходе из компонента Edit2 (событие OnExit) осуществляется аналогичная проверка.
var
Number, Code : Integer ; begin
if (Sender as TEdit ). Text <> ‘ ’ then begin
val ((Sender as TEdit ). Text, Number, Code) ; if Code <> 0 then
begin
(Sender as TEdit ). SetFocus ; MessageDlg (‘ The edit field number ‘ +
IntToStr ((Sender as TEdit ). Tag) +
‘ does not have a valid number’ , mtError, [ mbOK ] , 0 ) ;
end ; end ;
end ;
Текст сообщения об ошибке может варьироваться.
♦ Третий компонент Edit выполняет аналогичную проверку при каждом изменении его содержимого (используя событие OnChange}.
♦ Записать код для события события OnKeyPress компонента Edit4 и про-верить, не является ли введенный символ числом или клавишей Back-space (которая имеет числовое значение 8).
begin
if not ( key in [ ‘0’ . . ‘9’ , # 8] } then begin
Key := # 0 ;
MessageBeep ($ FFFFFFFF) ; end;
end;
♦ Для события OnEnter компонента Edit5 записать код, в котором необходимо преобразовать введенные символы в число с помощью функции StrToInt. Использовать исключение для обработки ошибки EConvertError.
- Варианты индивидуальных заданий
- Создать программу, позволяющую пользователю ввести два числа, которые программа разделит. Необходимо поместить на форму три объекта класса TEdit — два для операндов, один – для результата и кнопку (объект класса TButton), нажимая на которую пользователь выполняет деление. Исключить попытку деления на ноль а так же введения символов вместо цифр. Выдать сообщение о типе возник-шей ошибке.
- Создать программу, вычисляющую корни квадратного уравнения (ax2+bx+c=0). Необходимо поместить на форму четыре объекта класса TEdit — три для коэффициентов квадратного уравнения, один – для результата и кнопку (объект класса TButton), нажимая на кото-рую пользователь выполняет нахождение корней. Исключить ввод символов вместо цифр, получение отрицательного дискриминанта и ввод а = 0.