Тип выражения
Тип выражения определяется типом операндов, входящих в выражение, и зависит от операций, выполняемых над ними. Например, если оба операнда, над которыми выполняется операция сложения, целые, то очевидно, что результат тоже является целым. А если хотя бы один из операндов дробный, то тип результата дробный, даже в том случае, если дробная часть значения выражения равна нулю.
Важно уметь определять тип выражения. При определении типа выражения следует иметь в виду, что тип константы определяется ее видом, а тип переменной задается в инструкции объявления. Например, константы о, 1 и -512 — целого типа (integer), а константы 1.0, 0.0 и 3.2Е-05 — вещественного типа (real).
В табл. 5 приведены правила определения типа выражения в зависимости от типа операндов и вида оператора.
Таблица 5. Правила определения типа выражения
Оператор | Тип операндов | Тип выражения |
*, +, - | Хотя бы один из операндов real | real |
*, +, - | Оба операнда integer | integer |
/ | real или integer | Всегда real |
DIV, MOD | Всегда integer | Всегда integer |
Выполнение инструкции присваивания
Инструкция присваивания выполняется следующим образом:
1. Сначала вычисляется значение выражения, которое находится справа от символа инструкции присваивания.
2. Затем вычисленное значение записывается в переменную, имя которой стоит слева от символа инструкции присваивания.
Например, в результате выполнения инструкций:
· i:=0; — значение переменной i становится равным нулю;
· а:=b+с; — значением переменной а будет число, равное сумме значений переменных ь и с;
· j :=j+1; — значение переменной j увеличивается на единицу.
Инструкция присваивания считается верной, если тип выражения соответствует или может быть приведен к типу переменной, получающей значение. Например, переменной типа real можно присвоить значение выражения, тип которого real или integer, а переменной типа integer можно присвоить значение выражения только типа integer.
Так, например, если переменные i и nимеют тип integer, а переменная d — тип real, то инструкции
i:=n/10; i:=1.0;
неправильные, а инструкция
d:=i+1; правильная.
Во время компиляции выполняется проверка соответствия типа выражения типу переменной. Если тип выражения не соответствует типу переменной, то компилятор выводит сообщение об ошибке:
Incompatible types ... and ...
где вместо многоточий указывается тип выражения и переменной. Например, если переменная п целого типа, то инструкция n: = m/2 неверная, поэтому во время компиляции будет выведено сообщение :
Incompatible types 'Integer' and.'Extended'.
Стандартные функции
Для выполнения часто встречающихся вычислений и преобразований язык Delphi предоставляет программисту ряд стандартных функций.
Значение функции связано с ее именем. Поэтому функцию можно использовать в качестве операнда выражения, например в инструкции присваивания. Так, чтобы вычислить квадратный корень, достаточно записать k:=Sqrt(n), где Sqrt — функция вычисления квадратного корня, п — переменная, которая содержит число, квадратный корень которого надо вычислить.
Функция характеризуется типом значения и типом параметров. Тип переменной, которой присваивается значение функции, должен соответствовать типу функции. Точно так же тип фактического параметра функции, т. е. параметра, который указывается при обращении к функции, должен соответствовать типу формального параметра. Если это не так, компилятор выводит сообщение об ошибке.
Математические функции
Математические функции (табл. 6) позволяют выполнять различные вычисления.
Таблица 6. Математические функции
Функция | Значение |
Аbs (n) | Абсолютное значение n |
Sqrt (n) | Квадратный корень из n |
Sqr (n) | Квадрат n |
Sin (n) | Синус n |
Cos (n) | Косинус n |
Arctan (n) | Арктангенс n |
Ехр(n) | Экспонента n |
Ln(n) | Натуральный логарифм n |
Rardom(n) | Случайное целое число в диапазоне от 0 до n- 1 |
Величина угла тригонометрических функций должна быть выражена в радианах. Для преобразования величины угла из градусов в радианы используется формула (а*з.141525б)/180, где: а— величина угла в градусах; 3.1415926 — число л. Вместо дробной константы 3.1415926 можно использовать стандартную именованную константу PI. В этом случае выражение пересчета угла из градусов в радианы будет выглядеть так: a*Pi/180.
Функции преобразования
Функции преобразования (табл. 7) наиболее часто используются в инструкциях, обеспечивающих ввод и вывод информации. Например, для того чтобы вывести в поле вывода (компонент Label) диалогового окна значение переменной типа real, необходимо преобразовать число в строку символов, изображающую данное число. Это можно сделать при помощи функции FloatToStr, которая возвращает строковое представление значения выражения, указанного в качестве параметра функции.
Например, инструкция Label1.caption := FioatTostr(x) выводит значение переменной х в поле Label1.
Использование функций
Обычно функции используют в качестве операндов выражений. Параметром функции может быть константа, переменная или выражение соответствующего типа. Ниже приведены примеры использования стандартных функций и функций преобразования.
n := Round((x2-x1)/dx);
x1:= (-b + Sqrt(d)) / (2*а);
m := Random(10);
cena := StrToInt(Edit1.Text);
Edit2.Text := IntToStr(100);
mes := 'x1=' + FloatToStr(xl);
Ввод данных
Наиболее просто программа может получить исходные данные из окна ввода или из поля редактирования (компонент Edit).
Ввод из окна ввода
Окно ввода — это стандартное диалоговое окно, которое появляется на экране в результате вызова функции inputBox. Значение функции inputBox — строка, которую ввел пользователь.
В общем виде инструкция ввода данных с использованием функции inputBox выглядит так:
Переменная := InputBox(Заголовок, Подсказка, Значение);
где:
· Переменная — переменная строкового типа, значение которой должно быть получено от пользователя;
· Заголовок — текст заголовка окна ввода; Подсказка — текст поясняющего сообщения;
· Значение — текст, который будет находиться в поле ввода, когда окно ввода появится на экране.
Ниже в качестве примера приведена инструкция, используя которую можно получить исходные данные для программы пересчета веса из фунтов в килограммы. Окно ввода, соответствующее этой инструкции, приведено на рис. 3.
s:=InputBox('Пример', 'Введите что-нибудь', 'Привет');
Рис.3. Пример окна ввода
Если во время работы программы пользователь введет строку и щелкнет на кнопке ОК, то значением функции inputBox будет введенная строка. Если будет сделан щелчок на кнопке Cancel, то значением функции будет строка, переданная функции в качестве параметра значение.
Следует еще раз обратить внимание на то, что значение функции inputBox строкового (string) типа. Поэтому если программе надо получить число, то введенная строка должна быть преобразована в число при помощи соответствующей функции преобразования. Например, фрагмент программы пересчета веса из фунтов в килограммы, обеспечивающий ввод исходных данных из окна ввода, может выглядеть так:
s:=StrToInt(InputBox('Пример', 'Введите что-нибудь','10'));
Ввод из поля редактирования
Поле редактирования — это компонент Edit. Ввод данных из поля редактирования осуществляется обращением к свойству Text.
Рис. 4. Компонент Edit1 используется для ввода данных
На рис. 4 приведен вид диалогового окна программы в которой осуществляем ввод данных с помощью компонента Editl. Компонент Editl используется для ввода исходных данных. Инструкция ввода данных в этом случае будет иметь вид:
s:= Edit1.Text;
Вывод результатов
Наиболее просто программа может вывести результат своей работы в окно сообщения или в поле вывода (компонент Label) диалогового окна.
Вывод в окно сообщения
Окна сообщений используются для привлечения внимания пользователя. При помощи окна сообщения программа может, к примеру, проинформировать об ошибке в исходных данных или запросить подтверждение выполнения необратимой операции, например, удаления файла.
Вывести на экран окно с сообщением можно при помощи процедуры ShowMessage или функции MessageDlg.
Процедура ShowMessage выводит на экран окно с текстом и командной кнопкой ОК.
В общем виде инструкция вызова процедуры ShowMessage выглядит так:
ShowMessage(Сообщение);
где сообщение — текст, который будет выведен в окне.
На рис. 5 приведен вид окна сообщения, полученного в результате выполнения инструкции:
ShowMessage('Пример процедуры.');
Рис. 5. Пример окна сообщения
Следует обратить внимание на то, что в заголовке окна сообщения, выводимого процедурой ShowMessage, указано название приложения, которое задается на вкладке Application окна Project Options. Если название приложения не задано, то в заголовке будет имя исполняемого файла.
Функция MessageDig более универсальная. Она позволяет поместить в окно с сообщением один из стандартных значков, например "Внимание", задать количество и тип командных кнопок и определить, какую из кнопок нажал пользователь. На рис. 6 приведено окно, выведенное в результате выполнения инструкции
r:=MessageDlg('Файл будет удален.', mtWarning, [mbOk,mbCancel] , 0) ;
Рис. 6. Пример окна сообщения
Значение функции MessageDlg — число, проверив значение которого, можно определить, выбором какой командной кнопки был завершен диалог.
В общем виде обращение к функции MessageDig выглядит так: