- #4 Real Вещественный тип данных в Паскаль. Неявное приведение типа. Примеры
- Primary tabs
- Forums:
- Вещественный тип данных
- Переменные типа Real
- Сравнение с Real с Integer
- Выражения, возвращающие Integer
- Выражения, возвращающие Real
- Неявное приведение (преобразование) типа
- Когда неявное приведение имеет место быть
- Что к чему приводится неявно
- Присваивание несовместных типов. Что и чему можно присваивать
- Вывод вещественных чисел на экран
- Примеры экспоненциальной записи чисел
- Разбор задач
- Пример №1
- Пример №2
- Видео-пояснения
- Вопросы & Задачи
- Теоретические вопросы:
- Вещественные типы переменных
#4 Real Вещественный тип данных в Паскаль. Неявное приведение типа. Примеры
Primary tabs
Forums:
Вещественный тип данных
Тип Real служит для описания и хранения данных, являющихся вещественными числами.
Переменные типа Real
Переменные типа real могут быть объявлены стандартным способом (подобно integer):
Таким переменным можно присваивать литералы вещественных чисел:
А также результаты любых арифметических выражений:
Сравнение с Real с Integer
Выражения, возвращающие Integer
Если значение арифметического выражения присваивается переменной типа integer, то в него должны входить только:
- целочисленные литералы
- или целочисленные переменные.
- Над указанными операндами должны выполняться операции (только эти — без операции деления):
- $+$ суммы (сложения)
- $-$ разности (вычитание)
- $*$ произведения (умножение)
Выражения, возвращающие Real
Если результат некоего арифметического выражения присваивается переменной типа real, то в это выражения могут входить любые операнды и целого и вещественного типа и над ними могут выполняться все четыре операции:
- $+$ суммы (сложения)
- $-$ разности (вычитание)
- $*$ произведения (умножение)
- $/$ деление («отношение»)
Можно сказать что тип, который возвращается выражением (тип его результата) определяется двумя моментами:
- типом операций (допустимые перечислены выше)
- типом операндов
Неявное приведение (преобразование) типа
Неявное приведение типа — это процесс преобразования типа без каких-то особо записанных в коде инструкций, которые бы явно указывали на то, что выполняется преобразование.
Когда неявное приведение имеет место быть
Неявное приведение типа возможно в двух случаях:
- В ходе операции присваивания — когда переменной типа real присваивается любое значение типа integer.
Например: - В ходе вычисления значения арифметического выражения, если хотя бы один из операндов (или результатов подвыражения, оказавшимся операндом) имеет тип real.
О втором случае поговорим подробнее.
Если в арифметическом выражении присутствуют целые числа (переменные, литералы или результаты подвыражений типа integer) и эти числа участвуют в одной операции с типом real, то:
- сначала целые числа будут приведены Паскалем к типу real (так как real может хранить любые данные типа integer, а обратное не верно)
- а затем уже будет вычислен результат арифметической операции, который тоже будет иметь тип real
Пусть у нас есть выражение:
— этом случае вычисления будут проходить так («под капотом» языка Паскаль):
— знание этой особенности позволяет правильно определить тип переменной для хранения результата выражения.
Что к чему приводится неявно
Если в арифметических выражениях если неявное приведение типа имеет место быть, то это всегда приведения integer к real как к более широкому и универсальному классу чисел.
Рассмотрим разные выражения и прокомментируем когда происходит неявное приведение типа, а когда нет и почему:
Присваивание несовместных типов. Что и чему можно присваивать
В операции присваивания оба операнда, должны , то есть переменная слева от оператора присваивания должна обладать тем же типом, что и значение справа от оператора присваивания (справа при этом, как мы говорили выше, могут быть данные любого вида — литералы, переменные или целые выражения).
Рассмотрим примеры присваивания переменным значений с комментариями, показывающими в каких строках ошибка:
Вывод вещественных чисел на экран
Переменные, литералы и результаты выражений типа real можно выводить точно также как и целые числа (их переменные, литералы и выражения).
В некоторых реализациях Паскаля, при выводе на экран может использоваться экспоненциальная форма записи числа, то есть дробное число записывается (две особенности):
- в виде некоторого числа (обычно с одной цифрой в целой части), умноженного на $10$ в какой-то степени (вещественное число всегда подразумевается обладающим дробной частью, просто иногда она равна нулю, тогда число называют целым).
- вместо множителя $10$ используют букву $E$.
Примеры экспоненциальной записи чисел
- Так, например число $125.35$:
$$125.35 = 1.2535 * 100 = 1.2535 * 10^<2>$$
в экспоненциальной форме может выглядеть так: - А число, скажем, $0.005567$:
$$0.005567 = 5.567 / 1000 = 5.567 / 10^3 = 5.567 * 10^ <-3>$$
в экспоненциальной форме может быть записано как:
Разбор задач
Пример №1
Пусть есть задача:
Выведите на экран произведение чисел $5$ и $7.3$
Самое простое решение:
Хотя по хорошему выводить данные с пояснениями, например используя в качестве первого аргумента литерал:
Или пример с выводом произведения переменных:
— тут вторым аргументом процедуры writeln() оказывается арифметическое выражение.
Ну и наконец, если требуется дополнительно записать результат арифметического выражения в переменную и уже потом вывести её значение, то:
Пример №2
Пусть есть задача:
Присвойте трем переменных значения $34$, $36.7$ и $7.3$, в четвертую переменную запишите разность между произведением первой и второй переменной и суммой второй и третей и выведете её значение на экран.
Для переменной $d$ нам пришлось использовать тип real, так как выражении:
две переменные были вещественного типа, а значит переменная $a$ тоже была бы неявно приведена к вещественному типу (а её значение 34 к 34.0) и результат выражения имел вещественный тип, а присваивать результат вещественного типа переменной целого типа нельзя (об этому говорилось в этом уроке выше и в предыдущем уроке), как как в этом случае неявное преобразование для присваивания не сработает (см. выше первый случай когда имеет место быть неявное преобразование типов).
Видео-пояснения
Для данного урока есть следующие видео:
Вопросы & Задачи
Теоретические вопросы:
- Что такое операнд? Приведите примеры операндов и операций.
- Для чего нужен тип real?
- Что такое неявное приведение типа и когда оно работает?
- Происходит ли приведение типа в выражениях (по каждому ответьте отдельно):
— поясните почему, также скажите какого типа будет результат каждого из этих выражений
- 0.00045
- 154567.34
- 2.345
Источник
Вещественные типы переменных
Begin
End.
При написании программы на языке Турбо Паскаль будем придерживаться следующей схемы:
1) зарезервированные слова program, procedure, begin, end и т.д. пишутся строчными буквами;
2) имена констант, переменных, процедур, функций начинаются с прописных букв;
3) операторы записываются только строчными буквами;
4) логически подчиненные структуры записываются на одну строку ниже и на 1-2 позиции правее по отношению к более старшим.
Раздел описания состоит в общем случае из шести следующих разделов:
1) список имен подключаемых библиотечных модулей (определяется словом uses);
2) описание меток (label);
3) описание констант (const);
4) определения типов данных (type);
5) описание переменных (var);
6) описание процедур и функций.
Любой из этих разделов может отсутствовать. Вообще разделы описаний (кроме uses) могут встречаться в программе произвольное количество раз и следовать в любом порядке. Мы будем пользоваться выше указанным порядком.
Рассмотрим некоторые разделы более подробно.
1) Раздел uses. Данный раздел состоит из зарезервированного слова uses и списка подключаемых стандартных и пользовательских библиотечных модулей. Структура: uses , ;.
Например, uses crt, graph; где crt – модуль стандартной библиотеки, graph – графический модуль.
2) Раздел описания const. В этом разделе производится присваивание идентификаторам констант постоянных значений. Раздел начинается служебным словом const, за которым следует выражений, присваивающих идентификаторам постоянные числовые или строковые значения.
Структура: const = ;.
Например, const A=50; B=text;
3) Раздел описания переменных. Переменные величины, которые могут менять свои значения в процессе выполнения программы. Тип переменных должен быть задан, перед тем как с переменными будут выполняться какие либо действия. Этим мы объявляем, какие ячейки памяти собираемся использовать для хранения данных в своей программе. Переменные могут быть описаны как: целочисленные, символьные, логические, вещественные. Раздел описания переменных начинается зарезервированным словом var, затем через запятую перечисляются имена переменных и через двоеточие их тип.
Структура: var : ;.
Например, var A1, A2, B, C, D: real;
2.1.2. Типы переменных.
Переменные целочисленного типа представляют собой значения, которые могут использоваться в арифметических выражениях и занимать в памяти от 1 до 4 байт.
Целочисленные типы переменных
Тип | Диапазон | Требуемая память |
byte | 0..255 | |
shorint | -128..127 | |
integer | -32768..32767 | |
word | 0..65535 | |
longint | -2147483648..2147483647 |
Переменные вещественного типа представляют собой вещественные значения, которые используются в арифметических выражениях и занимают от 4 до 6 байт. Паскаль допускает представление вещественных значений и с плавающей точкой, и с фиксированной точкой.
Вещественные типы переменных
Тип | Диапазон | Мантисса | Требуемая память |
real | 2.9*10E-39..1.7*10E38 | 11-12 | |
single | 1.5*10E-45..3.4*10E38 | 7-8 | |
double | 5.0*10E-324..1.7*10E308 | 15-16 |
Вещественные значения могут изображаться в форме с фиксированной точкой, например 7.32, 456.721 или 0.015, а также в форме с плавающей точкой, т.е. парой чисел вида Е : 7.32Е+00, 4.56721Е+02, 1.5Е-02.
Символьный тип char определяется множеством значений кодовой таблицы ПЭВМ. Для размещения в памяти переменной символьного типа требуется 1 байт. в программе значения переменных и констант типа char должны быть заключены в апострофы. например, ‘А’ обозначает букву А, ‘ ‘ – пробел, ‘;’ – точка с запятой.
Переменные логического (булевского) типа могут принимать только два значения: True (истина) и False (ложь).Широко используются в логических выражениях и выражениях отношений. При описании величин этого типа указывают слово Boolean. Для размещения в памяти переменной булевского типа требуется 1 байт.
2.1.3. Математические функции и операции.
В Паскале используются арифметические операции: — сложение, — вычитание, — умножение, — деление. Целая часть вещественного числа отделяется от дробной части «точкой», например, 0.325, -12.34.
Математические функции и операции:
Запись на математическом языке | Запись на языке Паскаль | Примечания |
A+B | A+B | Сумма переменных целого типа есть переменная целого типа; сумма вещественных переменных, или вещественных и целых есть вещественная переменная |
А-В | А-В | Разность переменных целого типа есть переменная целого типа; Разность вещественных переменных, или вещественных и целых есть вещественная переменная |
А*В | А*В | Умножение переменных целого типа есть переменная целого типа; Умножение вещественных переменных, или вещественных и целых есть вещественная переменная. |
А:В | А/В | В результате деления всегда получается вещественное число. |
А 2 | sqr(A) | Возведение во вторую степень целого числа дает целое число, а вещественного – вещественное. |
| sqrt(A) | В результате этой функции всегда получается вещественное число. |
ln(A) | ln(A) | В результате этой функции всегда получается вещественное число. |
Запись на математическом языке | Запись на языке Паскаль | Примечания |
| ln(X)/ln(b) | В результате этой функции всегда получается вещественное число. |
e X | exp(X) | В результате этой функции всегда получается вещественное число. |
A n =e n*ln(A) | exp(n*ln(A)) | В результате этой функции всегда получается вещественное число. |
sin(X) | sin(X) | В результате этой функции всегда получается вещественное число. |
cos(X) | cos(X) | В результате этой функции всегда получается вещественное число. |
arctg(X) | arctan(X) | В результате этой функции всегда получается вещественное число. |
arcsin(X) | arctan(X/sqrt(1-sqr(X))) | В результате этой функции всегда получается вещественное число. |
arcos(X) | arctan(sqrt(1-sqr(X))/X) | В результате этой функции всегда получается вещественное число. |
tg(X) | sin(X)/cos(X) | В результате этой функции всегда получается вещественное число. |
ctg(X) | cos(X)/sin(X) | В результате этой функции всегда получается вещественное число. |
arcctg(X) | 1/arctan(X) | В результате этой функции всегда получается вещественное число. |
Вычисление остатка при делении нацело | А mod B | В результате получается всегда целое число. 5 mod 2=1 6 mod 2=0 |
Целочисленное деление | A div B | В результате получается всегда целое число. 5 div 2=2 6 div 2=3 |
Округление до ближайшего целого | round(x) | В результате получается всегда целое число. round(5.6)=6 round(5.3)=5 |
Выделение целой части числа | trunc(x) | В результате получается всегда целое число. trunc(5.6)=5 trunc(5.3)=5 |
|A| | abs(A) |
2.1.4. Оператор вывода.
Для вывода на экран текста или результатов каких-либо вычислений используются операторы вывода. Графически оператор изображается в виде параллелограмма:
|
Оператор вывода производит вывод числовых данных, символов, строк и булевских значений.
Структура оператора вывода:
write (список переменных или текст);
writeln (список переменных или текст);
Оператор writeln (список переменных или текст);после вывода автоматически переводит курсор на следующую строку.
При выводе какого-либо текста или сообщения его нужно располагать в одинарных апострофах. Например,
writeln (‘информатика’);
write (‘a=’);
Оператор writeln, записанная без параметров, вызывает перевод строки (вставка пустой строки).
В операторах вывода writeln();и write(); имеется возможность записи выражения, определяющего ширину поля вывода:
Источник