Error 26: Type mismatch. ( Тип не определен)
Почему это произошло? Дело в том, что при делении одного числа на другое, даже если они целые числа, результат может быть числом нецелым. Например: разделите единицу на число три. Какой результат Вы получите? Поэтому отладчик и сообщил нам о том, что тип переменной с именем Resultat, описанный нами, не соответствует значениям, которые мы хотим хранить в нем. Для описания переменных имеющих нецелочисленное значение (имеющих вещественный тип) в Free Pascal введены другие типы описания переменных.
В таблице приведены виды арифметических операций и типы результатов получаемых при различных типах операторов.
Операции
|
Действие
|
Тип операндов
|
Тип результата
|
Унарная
|
+
|
Сохранение знака
|
Целый
Вещественный
|
Целый
Вещественный
|
-
|
Отрицание знака
|
Целый
Вещественный
|
Целый
Вещественный
|
Бинарная
|
+
|
Сложение
|
Целый
Вещественный
|
Целый
Вещественный
|
-
|
Вычитание
|
Целый
Вещественный
|
Целый
Вещественный
|
*
|
Умножение
|
Целый
Вещественный
|
Целый
Вещественный
|
/
|
Деление
|
Целый
Вещественный
|
Вещественный Вещественный
|
Div
|
Целочисленное деление
|
Целый
|
Целый
|
Mod
|
Остаток от деления
|
Целый
|
Целый
|
Как видно из таблицы тип результата операции деления “ / “ всегда будет вещественным.
В языке Free Pascal для обозначения вещественных (нецелочисленных) чисел используются следующие описания типов.
Идентификатор
|
Диапазон представления
Чисел
|
Размер памяти
|
Название типа
|
Количество цифр
|
Single
|
от 1,5*10-45 до 3,4*1038
|
4 байта
|
Вещественное одинарной точности
|
7..8
|
Real
|
от 2,9*10-39 до 1,7*1038
|
6 байта
|
Вещественное
|
11..12
|
Double
|
от 5,0*10-324 до 1,7*10308
|
8 байта
|
Вещественное двойной точности
|
15..16
|
Extended
|
от 3,4*10-4932 до 1,1*104932
|
10 байта
|
Вещественное повышенной точности
|
19..20
|
Если в блоке описания переменных мы опишем переменную с именем resultat как переменную типа Real, то при подстановки знака деления:
resultat:=chislo1/chislo2;
и запуска программы на выполнение сообщений об ошибке не последует. Однако результат будет выглядеть не совсем обычным образом. Если в качестве исходных данных были введены числа 1 и 2, то на экране появится следующий результат:
5.0000000000Е-0001
Это так называемая экспоненциальная запись числа. В левой части записи показано дробное десятичное число, общее количество знаков в котором зависит от выбранного нами типа вещественной переменной. После буквы Е показано целое число со знаком, которое указывает, насколько позиций в право, если число положительное, или влево, если после буквы Е стоит знак «-», следует сдвигать десятичную точку для получения конечного результата.
Конечно, представление числа в экспоненциальном виде несовсем привычно. Можно ли изменить представления вещественных чисел на экране компьютера? Да можно, для этого в процедурах write() и writln() используются дополнительные параметры. Покажем это на примере процедуры Exit, нашей программы:
procedure Exit;
begin
writeln(resultat:3:1);
writeln(resultat:4:2);
writeln(resultat:5:1);
end;
Как вы видите, после имени переменной значение которой выводится на экранстоият два целых числа разделенных знаком ":" (двоеточие). Запустите программу на выполнение. Если в качестве исходных данных были введены числа 1 и 2, то после выполнения программы на экране результат будет выглядеть следующим образом:
0.5
0.50
0.5
Первое число, стоящее после имени переменной, сообщает программе сколько знакомест выделяется на написание значения переменной. При этом учитывается и десятичная точка. В первом случае было выделено - 3 знакоместа, во втором - 4, в третьем - 5. Второе число показывает сколько позиций (знакомест) выделяется для написания дробной части числа. При этом, если количество знако мест, выделенной для дробной части, меньше чем число знаков дробной части числа, произойдет округление.
В этом разделе вы познакомились с двумя стандартными типа представления переменных и написали программу, которая может выполнять одно из арифметических действий. Для выполнения другого действия нам приходилось вносить изменения в программу. Другой путь это иметь отдельную программу для каждого из этих действий. Но не кажется ли это вам несколько расточительным? Может быть лучше иметь программу, которая сам по введенному знаку определяла, что делать и выдавала бы соответствующий результат.
Достарыңызбен бөлісу: |