Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Особенности выполнения арифметических операций над вещественными операндами

Если при выполнении арифметических операций с операндами вещественного типа получается значение, превосходящее максимально допустимое для этого типа, то происходит прерывание программы по переполнению.
Однако при наличии сопроцессора и директивы {$N+} все вычисления с операндами типа real будут выполняться как с типом extended, например, вычисление maxreal*maxreal дает 2.89000000000000Е+0076.

 

Другие операции скалярных типов

Помимо указанных операций для скалярных типов определены следующие операции.
Операции логического типа and, or, not, хоr (исключающее ИЛИ) определены так же, как в математической логике над операндами логического типа; результат всех операций также имеет логический тип и определяется так:

X

Y

not X

Xand Y

X or Y

X xor Y

true

true

false

true

true

false

true

false

false

false

true

true

false

true

true

false

true

true

false

false

true

false

false

false

 

Операции отношения (=, <>, <, >, <=, >=) определены для операндов всех скалярных типов. В случае символьных, логических, перечислимых типов оба операнда должны быть одного и того же типа (или его интервала); результат - логического типа. Для всех операций отношения целые (и их интервалы) и вещественные типы совместимы. Результат любой операции отношения - значение логического типа.

Обратим внимание на то, что рассматривались операции, операнды (аргументы) которых имеют скалярный тип. Такими операндами могут быть языковые конструкции разного вида, такие как:

-           константы (именованные и неименованные;,
-           переменные, в том числе элементы строки или массива (задаваемые именем строки или массива и индексами элемента), поля записи (задаваемые составным именем);
-           переменные этих же видов, но с динамическим способом размещения;
-указатели функций (как стандартных, так и определяемых пользователем);
-           выражения с операндами всех указанных видов и операций.

 

Стандартные подпрограммы - операции с данными скалярных типов

Несмотря на разнообразие операций в языке программирования, всегда для каких-то областей применения их будет недоставать. Эту потребность восполняют подпрограммы, которые можно рассматривать как механизм расширения определяемых языком операций. Ряд важных подпрограмм описан в стандартных (библиотечных) модулях Турбо Паскаля. Кроме того, каждый пользователь может ввести в употребление необходимые ему подпрограммы и разместить их в своей программе или модуле.

Подпрограммы определяются в виде функций и процедур.

Обращение к функции, называемое указателем функции, имеет вид

<имя функции> (<перечень фактических параметров>)

Вид и тип параметров определяется каждой функцией индивидуально, но значение, возвращаемое (вычисляемое) указателем функции, имеет указанный в описании функции скалярный тип.

Обращение к процедуре, называемое оператором процедуры, имеет вид

<имя процедуры> (<перечень фактических параметров>)

В перечне параметров оператора процедуры задаются как аргументы выполняемых процедурой операций, так и переменные, через которые она возвращает результаты вычислений.

Рассмотрим здесь только основные стандартные подпрограммы, которые работают с параметрами скалярных типов. Такие стандартные подпрограммы определены в модуле System (он всегда доступен в любой программе).

1. Математические функции: Abs, Arctan, Cos, Exp, Frac, Int, Ln, Pi, Sin, Sqr, Sqrt, Odd.
Все эти функции имеют по одному параметру. Параметр в общем случае может быть сколь угодно сложным выражением, определяющим значение требуемого типа. Указатель функции возвращает в программу вычисленное значение, тип которого определяется как видом функции, так и типом ее параметра.
           
Функции Abs(X) и Sqr(X) могут иметь параметр как целочисленного, так и вещественного типа. Тип результата совпадает с типом аргумента.

Параметр и результат функций Arctan(X), Cos(X), Ехр(Х), Frac(X), Int(X), Ln(X), Sin(X), Sqrt(X) - вещественный.
Функция Odd(X) определена для целочисленного параметра и возвращает значение true, если значение параметра нёчетно.

 

2.         Функции преобразования типов: Chr, Ord, Round, Trunc, Longint.
Chr(X) - возвращает символ с указанным кодом.
Ord(X) — возвращает число, соответствующее указанному символу в ASCII-таблице.
Round(X) - округляет вещественное число до целого (типа longint).
Trunc(X) - выделяет целую часть (типа longint) вещественного числа.
Longlnt(X) - преобразует целое X к типу longint.

 

3.         Функции порядковых типов: Pred, Succ.
Они могут иметь параметром и результатом любой из порядковых типов.
Pred(X) - возвращает значение, предыдущее к заданному.
Succ(X) - возвращает значение, следующее за заданным.

 

4.         Процедуры приращения параметра: Dec, Inc.
Dec(X, Y) уменьшает значение числа X на величину Y (при отсутствии Y значение X уменьшается на 1).
Inc(X, Y) увеличивает значение числа X на величину Y (при отсутствии Y значение X увеличивается на 1).

 

5.         Подпрограммы для вычисления случайных чисел: Randomize, Random.
Процедура Randomize инициализирует генератор случайных чисел в зависимости от показания системных часов. Ее рекомендуется размещать перед той частью программы, в которой будет происходить запрос на получение случайных чисел.
Функция Random(Range) формирует случайное число целого типа из диапазона [0, Range). Если параметр функции не задан, то генерируется случайное число вещественного типа в диапазоне [0.0, 1.0).

При выполнении подпрограмм Round, Trunc, Pred, Succ, Dec, Inc возникает исключительная (аварийная) ситуация и исполнение программы прерывается, если значение их результата выходит за пределы типа возвращаемого ими значения.

Функции, допускающие аргумент любого из вещественных типов, для аргумента типа real вырабатывают значение типа real, а при выходе за пределы диапазона возникает прерывание по переполнению. При наличии сопроцессора и директивы {$N+} для аргумента типа real такие функции вырабатывают значение типа extended.

 
При рассмотрении операций с целочисленными операндами была отмечена опасность получения неверных результатов при выходе их за границы диапазона типа, определенного этими операндами. Предотвратить получение неверных значений при выполнении арифметических операций с целочисленными операндами можно, описывая операнды-переменные с типом longint или real. Но коль скоро такой "расширенный" тип нужен только для промежуточных данных, то естественно использовать такое расширение только при вычислениях. Для этого нужно перед выполнением операций, выводящих за границы типа, применить к их операндам функцию приведения типов. Например, функция Longint приводит целое значение к типу longint.

 

Следующая программа вычисляет расстояние между двумя точками, координаты которых задаются в пределах графического экрана. Даже для таких небольших значений координат вычисление суммы их квадратов может вывести за диапазоны типов word и integer.

Поэтому вычисления нужно выполнять с типом longint. Функция Longint приводит свой аргумент к типу longint. а затем последующие вычисления выполняются с этим типом.

program d_3_1;
{ЗАДА ЧА: Две точки задаются координатами графического экрана. Найти расстояние между ними, используя целочисленные вычисления
ПРИЕМЫ:
-           программа не выполняет контроль вводимых данных, для визуального контроля печатаются введенные данные,
-           использование стандартных функций Sqrt, Sqr, Longint,
-           вычисление суммы квадратов нужно выполнять в longint-арифметике, для этого используется функция Longint
РЕКОМЕНДА ЦИИ:}
uses Crt:
const МахХ = 640; MaxY = 350; {максимальные значения координат}
var X1, Х2: О..МахХ; Yl, Y2: O..MaxY; {координаты точек}
Begin ClrScr; {очистка экрана}
WriteLn ('_ВЫЧИСЛИТЬ РАССТОЯНИЕ МЕЖДУ ДВУМЯ ТОЧКАМИ_');
WriteLn(' координаты точек задаются в интервалах: ',
' X в [0, ', МахХ, '],', ' Y в [0,', MaxY, ']');
Write(' Задайте координаты 1-й точки: XI ='); Read(Xl);
Write('          Yl ='); ReadLn(Yl);
Write(' Задайте координаты 2-й точки: Х2 ='); Read(X2);
Write('             Y2 ='); ReadLn(Y2);
WriteLn('_      Введено XI =', XI, ' Yl =', Yl);
WriteLn('_      Введено X2 =', X2, ' Y2 =', Y2);
WriteLn('_      Расстояние между точками равно',
Sqrt(Sqr(Longlnt(X2 - X1)) + Sqr(LongInt(Y2 - Y1))): 6: 2);
WriteLn('        Программа завершена');
ReadLn;
end. {Program d 3 1}

           
Применение функции Longint к операндам выражения позволяет компилятору
трактовать арифметические операции выражения как операции типа longint, что
во многих случаях достаточно для проведения правильных целочисленных вычислений.

Если кто-то желает поглубже познакомиться с программированием на разных языках, вам поможет ресурс coding4.net - программирование на С#, на Паскале и ряде других языков изложены на этом сайте доступно и практично. Вы сможете найти на этом сайте для программистов много полезной информации.




 

Комментарии:


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


Введите значение:
 









   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru