русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Преобразование типов


Дата добавления: 2014-11-27; просмотров: 1576; Нарушение авторских прав


Пример 2.7.
Одновременное использование вещественных и целых типов

Program Mix;
var
N,K: integer;
А,В: real;
begin
N: =4;
A:=3.6;
B:=N; {В переменную типа real можно
записать целое число}
writeln("В=".В);
{В переменную типа integer нельзя записать вещественное число! Чтобы все-таки поместить число типа real в переменную типа integer, нужно явно указать, что делать с дробной частью числа. Есть два варианта; }
N:=Trunc(A);
{Функция Trunc(X) возвращает целую часть числа X, то есть отбрасывает дробную часть} writeln(‘Trunc (3.6)=’,N);
K:=Round(A); { Функция Round(X) округляет до ближайшего целого }
writeln (‘Round(3.6)=' ,К) ;
end.

 

При запуске программа выведет на экран следующее:

В:= 4.0000000000Е+00
Trunc(3.б)=3
Round(3.6)=4

 

Еще раз уточним правила преобразования типов: для хранения данных типа integer используется 2 байт, а для real необходимо 6 байт. Это значит, что число типа integer можно поместить в ячейку типа real (целая часть будет равна этому числу, а дробная будет равна нулю). А вот число типа real в ячейку типа integer никак не поместится. Чтобы все-таки поместить его туда, нужно явно указать, что делать с дробной частью числа. Для этого прёдусмотрены функции trunc и round. Обе они возвращают результат типа integer.

 

Что делать, если в программе нужно записать сложное математическое выражение? В каком порядке будут выполняться действия?

Правила приоритета в выполняемых действиях
1. Действия над переменными, стоящими в скобках, выполняются в первую очередь.
2. После вычисления значений всех скобок вычисляются все функции.
3. После функций выполняются умножение и деление. Они имеют одинаковый приоритет.
4. Следующие по приоритету — сложение и вычитание.
5. Операции одинакового приоритета выполняются слева направо.



 

Действия над данными разных типов

Сведем воедино операции и функции по работе с вещественными и целыми величинами (табл. 2.3).

Поясним написанное в таблице. Мы разделили все функции/операции на 6 категорий:

1. Результат операций +, - и * зависит от типа аргументов. Если хоть один из них имеет тип Real, то и результат будет иметь тип Real. Это объясняется тем, что у данных типа Real есть дробная часть, а у Integer — нет. Даже если в вещественной переменной хранится целое число, оно все равно имеет дробную часть, только она равна нулю. То есть если хотя бы у одного из аргументов есть дробная часть, то в результате выполнения операции она никуда не исчезает. Поэтому результат тоже имеет дробную часть (Real).

Таблица 2.3.Операции и функции для типов integer и real

Операция/функция Тип данных 1 -го аргумента Тип данных 2 -го аргумента Тип данных результата
+,-,* Integer Integer Real Real Integer Real Integer Real Integer Real
/ He важен He важен Real
Div, mod Только Integer Только Integer Integer
Abs, Sqr Integer Integer
  Real Real
Sqrt, Sin, Cos, Arctan, Ln, Exp, Pi He важен Real
Trunc, Round He важен Integer

2. Результат операции вещественного деления по определению всегда имеет дробную часть.
3. Операции целочисленного деления определены только для целых чисел. Поэтому результат тоже всегда целое число.
4. Функции Abs и Sqr определены для обоих типов данных. Поэтому тип их результата зависит от типа аргумента. Для целого аргумента результат имеет целый тип, для вещественного — вещественный.
5. Функции Sqrt, Sfn, Cos, Arctan, Ln, Exp, Pi по определению являются вещественными. (На самом деле это связано с особенностями вычисления Паскалем этих функций. Он вычисляет их приближенно путем разложения в ряд. Такой метод не предполагает целого результата в виде целого числа. Более того, значения этих функций всегда вычисляются приближенно.)
6. Функции Trunc и Round предназначены для преобразования типов. Они явно указывают на то, что сделать с дробной частью числа. Поэтому это единственный способ получить на Паскале из дробного числа целое. Изложенные выше сведения позволяют нам понимать, что за выражение написано в чужой программе, какое оно будет иметь значение и какого типа будет результат.

Задание 2.10.
Вычислите выражение и укажите тип результата:

Abs(12 mod 7*4/2-350 div 15)+2

 

Сначала расставим операции в соответствии с их приоритетами (табл. 2.4).

Таблица 2.4. Расстановка операций в примере 2.8

Операция Пояснение
12 mod 7 Сначала выполняются действия в скобках. Скобки в данном случае ограничивают аргумент функции Abs. В скобках сначала выполняются операции типа «умножение-деление», а потом — «сложение-вычитание». Операции mod, и div осуществляют целочисленное деление. Их приоритет такой же, как у операций «*» и </». В первой группе таких операций три. Выполняем их слева направо. Поэтому сначала выполняем mod, затем — «*», а потом — «/»
(12 mod 7)* 4  
(12 mod 7*4) /2  
350 div 15. Теперь выполняем вторую группу операций типа «умножение-деление». В данном случае это одинокая операция div
(12 mod 7*4/2) - (350 div 15) Теперь пришла пора объединить результаты первых двух групп операцией «-». Она выполняется последней в скобках, так как имеет наименьший приоритет
Abs(...) Теперь пора посчитать результат функции
Abs(...) + 2 Последний оператор — сложение

 

Нам представляется удобным расставлять приоритеты, обводя операции (рис. 2.8). Так оказывается легче понять, что уже вычислено и что еще предстоит вычислить.

Рис. 2.8. Порядок выполнения операций в задании 2.10.

Теперь определим тип и результаты каждого действия (табл. 2.5).

Таблица 2.5.Вычисление результатов каждого, действия из задания 2.10.

Операция Результат и его тип Пояснение
12 mod 7 5 Integer Остаток отделения 12 на 7 равен 5. Результат операции mod всегда целый
5*4 20 Integer Результат умножения двух целых — целое число
20/2 10.0 Real Результат вещественного деления всегда вещественный. Хотя 20 делится нацело на 2, мы специально приписали «.0» к результату, чтобы подчеркнуть и не забыть, что результат вещественный и имеет дробную часть
350 div 15 23 Integer При целочисленном делении нас интересует только целая часть частного. Результат операции div всегда целый
10.0-23 -13.0 Real При вычитании одно из чисел имеет дробную часть. Команды от нее избавиться не было, поэтому результат тоже имеет дробную часть. Значит, результат имеет тип Real
Abs(-13.0) 13.0 Real Abs меняет отрицательный знак аргумента на положительный. Так как аргумент имеет, дробную часть, а команды от нее избавиться не было, результат тоже содержит дробную часть
13.0 + 2 15.0 Real Те же соображения, что и в 5-м пункте. Результат имеет дробную часть

Ответ: 15.0. Real

Задание 2.11.
Дано действительное число X. Напишите программу для вычисления:
+ целой части числа Х,
+ числа X, округленного до ближайшего целого;
+ числа X бездробных цифр.

Задание 2.10.1
Вычислите выражение:
при a =2 и b = 3



<== предыдущая лекция | следующая лекция ==>
Как представляются переменные вещественного типа в памяти компьютера | Красивый вывод на экран


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.