Янв
7th

Урок 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.

 

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

 

Поделиться с друзьями


Оставить комментарий или два