Урок из серии: «Язык программирования Паскаль»
На этом уроке мы заканчиваем знакомиться с простыми (скалярными) типами данных языка программирования Паскаль. Остался вещественный тип данных.
Данные вещественного (действительного) типа используются значительно чаще целого типа. Они необходимы в тех случаях, когда числовые значения могут содержать дробные части.
Описание данных вещественного типа
Идентификатор типа | Допустимые значения | Размер выделяемой памяти |
real | 5.0∙10-324 — 1.7∙10308 | 8 байт |
Например описания величин вещественного типа:
var Summa: real; |
Константа вещественного типа может быть представлена в двух видах: числом с фиксированной и плавающей точкой.
Число с фиксированной точкой изображается десятичным числом с дробной частью (дробная часть может быть нулевой). Дробная часть отделяется от целой с помощью точки, например 127.3, 25.0, -16.003, 200.59, 0.54.
Число с плавающей точкой имеет вид mEp, где m — мантисса, а p — порядок числа. В качестве m могут быть целые числа и действительные числа с фиксированной точкой, в качестве p — только целые числа. Как мантисса, так и порядок могут содержать знаки «+» и «-«.
Математическая запись | Запичь с плавающей точкой |
0,000009 | 9Е-6 |
0,62*104 | 0.62Е+4 |
-10,8*1012 | -10.8Е12 |
20*10-3 | 20Е-3 |
Набор операций
Над данными вещественного типа определены следующие арифметические операции:
» + » — сложение;
» — » — вычитание;
» * » умножение;
» / » — деление.
Результат выполнения этих операций получается также вещественного типа.
Над данными вещественного типа определены следующие операции отношения:
» = » — равно;
» <> » — не равно;
» < » — меньше;
» > » — больше;
» <= » — меньше или равно (не больше);
» >= » — больше или равно (не меньше).
Операции отношения вырабатывают результат логического типа
Стандартные функции
Язык программирования Паскаль имеет набор встроенных процедур и функций, называемых стандартными. Перечислим наиболее часто встречающиеся из них:
Имя и параметры | Действие |
abs(x) | вычисление абсолютного значения Х |
sqr(x) | вычисление квадрата Х |
sqrt(x) | вычисление квадратного корня из Х |
sin(x) | вычисление синуса x |
cos(x) | вычисление косинуса Х |
arctan(x) | вычисление арктангенса Х |
exp(x) | вычисление ех |
ln(x) | вычисление натурального алгоритма x |
trunc(x) | вычисление целой части Х |
round(x) | округление Х в сторону ближайшего целого |
Примечание. Аргумент функции следует за именем функции и заключается в круглые скобки. В тригонометрических функциях синуса и косинуса аргумент задается только в радианной мере угла.
Вывод данных вещественного типа
Вывод данных вещественного типа допускается с форматом и без него. Если при выводе данных вещественного типа отсутствует формат, то число выводится с плавающей точкой — мантисса и порядок. На изображении числа отводится 17 позиций, при этом в целой части мантиссы присутствует только одна значащая цифра.
Изменить стандартную форму вывода можно, используя формат:
Write(x:m:n:),
где х — величина вещественного типа (константа, переменная, выражение);
m — общее поле выводимого числа (включая знак числа, целую часть, точку и дробную часть);
n — поле дробной записи.
При использовании форматов число выводится в форме с фиксированной точкой. Так, использование формата Write(r:10:4) для вывода значения r, равного -35.245367, приводит к выводу значения -35.2454.
Пример 1. Напечатать таблицу значений функции y = sin(x) на отрезке [0,1] с шагом 0.1
Решение.
Постановка задачи наталкивает нас на использование цикла с вещественным параметром, но цикл с параметром предполагает использование переменной порядкового типа, а тип Real таковым не является.
Сравним два решения этой задачи, представленные ниже.
Program Primer1_1; Var i : Real; Begin i:=0; While i<=1 Do Begin Writeln(i:2:1,' ',sin(i):4:3); i:=i+0.1; End; End. |
Program Primer1_2; Var i: Integer; Begin i:=0 While i<=10 Do Begin Writeln(i,' ',sin(i/10):4:3); Inc(i); End; End. |
На первый взгляд, работа этих программ должна быть одинаковой, но, запустив программы, мы обнаружим, что первая программа выдает значения функции sin(x) для всех значений х от 0 до 0.9, а вторая программа — для всех значений х от 0 до 1.
Первая программа работает не так, как нам бы хотелось — это происходит в силу приближённого представления вещественного числа. Поэтому при решении задач следует избегать использования циклов с изменяющейся вещественной переменной.
Пример 2. Дано х, принадлежащее интервалу от -1 до 1. Составить программу вычисления бесконечного ряда
х — х2/2 + х3/3 -…
с заданной точностью Е.
Нужная точность считается полученной, если очередное слагаемое оказалось по модулю меньше, чем данное малое положительное число Е (это и все последующие слагаемые учитывать не надо).
Решение.
Переменные:
y — сумма ряда;
e — заданная точность вычислений
sl — очередное слогаемое;
st — степень;
z — переменная, отвечающая за знак.
Программа должна вычислять очередное слагаемое хn/n и прибавлять его к сумме, полученной на предыдущем этапе.
При нахождении значения степени хn можно воспользоваться циклом с параметром, но, с другой стороны, чтобы вычислить значения хn достаточно значение х n-1 (найдено на предыдущем шаге) умножить на х.
Итак, решение будет выглядеть следующим образом:
Program Primer2; var x, st, sl, y, e: Real; n, z : Integer Begin Write ('Введите х, принадлежащее (-1,1)' ); Readln(x); Write ('Введите погрешность вычисления ' ); Readln( e ); y := 0; n := 1; z:=1; st:=x; sl:=x; Repeat y:=y+z*sl; n:=n+1; z:=-z; st:=st*x; sl:=st/n; Until sl < e; Writeln (y); Readln; End. |
До встречи в следующем уроке!