Урок 18. Вещественный тип данных

Урок из серии: «Язык программирования Паскаль»
На этом уроке мы заканчиваем знакомиться с простыми (скалярными) типами данных языка программирования Паскаль. Остался вещественный  тип данных.
Данные вещественного (действительного) типа используются значительно чаще целого типа. Они необходимы в тех случаях, когда числовые значения могут содержать дробные части.

Описание данных вещественного типа

Идентификатор типа Допустимые значения Размер выделяемой памяти
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.

До встречи в следующем уроке!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *