Тип данных Real.
Тип REAL (вещественный). Число типа REAL занимает три слова (шесть байтов). При работе с вещественными числами нужно помнить, что на любом отрезке вещественной оси существует бесчисленное множество чисел. Поскольку для кодирования вещественного числа отведено всего шесть байтов памяти, то расчеты выполняются всегда с конечной точностью, которая зависит от формата числа.
Вещественное число записывается и хранится в памяти компьютера в виде X=m*Bn, где m – мантисса, В – основание представления числа с плавающей точкой, n – порядок (целое число). Имеют место ограничения –M1<m<+М2; -E1<n<+Е2. В этих выражениях B, Е и М — константы, характеризующие представление числа. В таблице 3 приведены значения этих констант для вещественных типов данных, используемых в Pascal.
Так, для типа REAL основание В равно 10. Размер мантиссы 11—12 десятичных чисел. Диапазон десятичного порядка равен [-39, +38]. Таким образом, на отрезке оси вещественных чисел в заданном диапазоне можно закодировать только конечное число значений, а поскольку на оси таких чисел бессчетное множество, то выбирается интервал, «дискрет», на который этот диапазон (отрезок) делится.
Существует две формы отображения вещественных чисел (таблица 4): полулогарифмическая (с плавающей точкой) и естественная (с фиксированной точкой).

Над вещественными числами определены операции сложения (+), вычитания (-), умножения (*) и деления (/). Операция возведения в степень не предусмотрена.
Использование типа REAL у начинающего программиста часто вызывает ряд ошибок, приводящих к искажению результата по следующим причинам:
- ошибки ввода — недостаточная точность исходных данных при сборе, подготовке и их вводе в ЭВМ;
- ошибки представления обуславливаются ограниченной точностью внутреннего представления данных в конкретной ЭВМ, используемой для расчетов;
- ошибки вычислений возникают за счет несовершенства математических методов, выбранных для решения задачи. Необходимо оценивать погрешность и держать ее в заданных пределах.
Предыдущая статья: Тип данных Integer.
Оглавление: Лекции по Pascal.
Следующая статья: Тип данных Boolean.
Добавить комментарий
Pascal. Урок 2. Типы переменных | Учи Урок информатики
- Уроки Информатики
- Информатика в старших классах
- Основы программирования
- Pascal
Основано на справочной системе pascalABC.
net
Перед прочтением рекормедуется ознакомиться со статьей АЛГОРИТМ. Урок 3. Величины, переменные, константы.
а так же предыдущим уроком серии Pascal
Объявление переменных в Pascal
Переменные могут быть объявлены (описаны) в разделе описаний, а также непосредственно внутри любого блока begin/end.
Раздел описания переменных начинается со служебного слова var, после которого следуют элементы описания вида
список имен: тип;
или
имя: тип := выражение;
или
имя := выражение;
Имена в списке перечисляются через запятую. Например:
1 2 3 4 5 6 |
var a,b,c: integer; d: real := 3.7; s := 'Pascal forever'; al := new ArrayList; p1 := 1; |
В последних трех случаях тип переменной определяется по типу правой части.
Переменные могут описываться непосредственно внутри блока. Внутриблочные описания переменных имеют тот же вид, что и в разделе описаний, с тем исключением, что в каждой секции varможет быть лишь один элемент описания:
1 2 3 4 5 |
begin var a1,a2,a3: integer; var s := ''; ... end. |
Типы в Pascal подразделяются на простые, строковые, структурированные, типы указателей, процедурные и классовые типы. К простым относятся целые и вещественные типы, логический, символьный, перечислимый и диапазонный тип. Структурированные типы образованы массивами, записями, множествами и файлами.
Основные типы данных в Pascal
- integer — целочисленный тип данных.
- real — тип данных с плавающей запятой.
- double — тип данных с плавающей запятой.
- string — символьный тип данных.

- char — символьный тип данных.
- boolean — логический тип данных.
| Тип | байт | Диапазон принимаемых значений |
| целочисленный (логический) тип данных | ||
| boolean | 1 | 0 / 255 |
| целочисленный (символьный) тип данных | ||
| char | 2 | 0 / 255 |
| string | последовательность переменных типа char | |
| целочисленные типы данных | ||
| shortint | -128 / 127 | |
| smalint | 2 | -32 768 / 32 767 |
| word | 2 | 0 / 65 535 |
| integer, longint | 4 | -2 147 483 648 / 2 147 483 647 |
| longword, cardinal | 4 | 0 / 4 294 967 295 |
| int64 | 4 | -9223372036854775808 / 9223372036854775807 |
| uint64 | 4 | 0 / 18446744073709551615 |
| типы данных с плавающей точкой | ||
| single | 4 | -2 147 483 648. 0 / 2 147 483 647.0 |
| real | 8 | -9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775 807.0 |
| double | 8 | -9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775 807.0 |
Тэги: pascal, переменные
Все статьи раздела
Pascal. Урок 1. Структура программы: обзорPascal. Урок 2. Типы переменных
- Коменты VK
- Анонимные коменты, G+ или Facebook
Please enable JavaScript to view the comments powered by Disqus.comments powered by Disqus
Рациональные числа в Delphi Pascal об упражнениях
Рациональное число определяется как частное двух целых чисел a и b , называемых числителем и знаменателем соответственно, где b != 0 .
Абсолютное значение |r| рационального числа r = a/b равно |a|/|b|

Сумма двух рациональных чисел r₁ = a₁/b₁ и r₂ = a₂/b₂ равна r₁ + r₂ = a₁/b₁ + a₂/b₂ = (a₁ * b₂ + a₂ * b₂) * ) .
Разность двух рациональных чисел r₁ = a₁/b₁ и r₂ = a₂/b₂ равна r₁ - r₂ = a₁/b₁ - a₂/b₂ = (a₁ * b₂ - a₂ /b₂) * ) .
Произведение (умножение) двух рациональных чисел r₁ = a₁/b₁ и r₂ = a₂/b₂ равно r₁ * r₂ = (a₁ * a₂) / (b₁ * b₂) .
Деление рационального числа r₁ = a₁/b₁ на другое r₂ = a₂/b₂ равно r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁) 9a, b) , где root(p, q) есть корень q из p .
Реализовать следующие операции:
- сложение, вычитание, умножение и деление двух рациональных чисел,
- абсолютное значение, возведение заданного рационального числа в степень целой степени, возведение заданного рационального числа в степень действительного (с плавающей запятой), возведение действительного числа в степень рационального числа.

Ваша реализация рациональных чисел всегда должна сводиться к наименьшим терминам. Например, 4/4 следует уменьшить до 1/1 , 30/60 следует уменьшить до 1/2 , 12/8 следует уменьшить до 3/2 и т. д. Чтобы уменьшить рациональное число r = a/b , разделить a и b на наибольший общий делитель (gcd) a и b . Так, например, gcd(12, 8) = 4 , поэтому r = 12/8 можно сократить до (12/4)/(8/4) = 3/2 .
Предположим, что используемый вами язык программирования не имеет реализации рациональных чисел.
- В этом упражнении представлена перегрузка операторов. Документация Embarcadero по этому вопросу будет очень полезна для понимания того, как возможно переопределение операторов класса наряду с неявным и явным приведением типов.
Источник
Википедия
типов
типовДалее: Композитные типы Up: CS2111: Дизайн и реализация Предыдущий: Объем и степень Содержание
Подразделы
- Значения и типы
- Строгая печать
- Эквивалентность типов
- Приведение типов
- Расширение
- Сужение
- Примитивные типы
- целое число
- реальный
- символов
- логическое значение
- перечислений
- подтипов
- новые типы
- Независимые от языка типы данных
- С
- СМЛ
- Разработка и реализация языка
- Показания
-3, -2, -1, 0, 1, 2, 3 — все значения целочисленного типа.У заданного значения может быть много экземпляров (внутри компьютера или на кусочки бумаги) напр. 3, 3, 3 — разные экземпляры одного значения 3. Экземпляр часто используется немного по-другому, когда мы говорим, что каждый идентификатор типа является другим экземпляром этого типа.
Каждый тип должен иметь значения и операции, которые воздействуют на эти значения, и каждое значение или операция должны иметь тип.
(Хотя представления значений и операций могут быть перегружены, их значения должны быть однозначно определяемыми.)
Тип может быть либо примитивным ( простым , скалярным ) или составной ( совокупный ), т.е. составленный из других типов.
Для каждого типа язык программирования должен обеспечивать операторы , конструкторы для создания значений и (для составных типов) селекторы для разбивки значений.
Строгая типизация Строгая типизация — это механизм, предотвращающий вставление квадратных штифтов в круглые отверстия.
В строго типизированном языке каждое значение и каждое выражение
имеет тип, который можно определить,
и тип, принятый в каждом контексте, где выражение может встречаться в
язык (например, в заданиях, в параметрах и т. д.)
определяемый. Большинство строго типизированных языков являются статически типизированными, т.е. все вышеперечисленное выполняется.
во время компиляции. (например, Паскаль, Ада, Алгол68, SML.)
Некоторые языки (например, Awk) имеют динамическую (т.е. во время выполнения) проверку типов.
Некоторые языки не имеют проверки типов — каждое значение представляет собой просто битовый шаблон
интерпретировать можно по-разному, в зависимости от типа
предполагается в любой момент.
Многие языки слабо типизированы — т.е. где-то посередине — так что
некоторые части языка строго типизированы, а другие нет.
(например, неразборчивые объединения или тип битового шаблона), или язык
строго типизированы, за исключением случаев, когда вы явно просите не проверять (например, тип
отливает в С).
Строгая типизация — это хорошо, потому что она повышает безопасность, предотвращая множество форм случайного неправильного использования данных. Опытным путем было замечено что строгая типизация является очень эффективным средством достижения надежности программы.
Чем больше в программе различных типов, тем выше вероятность обнаружение ошибок во время компиляции. В идеале, даже различные варианты использования числовых типы должны различаться, например. Ада:
тип масса новый реальный;
длина типа новая действительная;
тогда присвоение значения типа mass переменной типа length является недопустимым.Эквивалентность типов
Когда два типа совпадают во время проверки типов? Существует два основных вида соответствие: эквивалентность имени (два значения имеют один и тот же тип, только если они явно объявлены как принадлежащие к одному типу) и структура эквивалентность (два значения относятся к одному типу, только если их типы имеют та же форма).
Первые могут быть более требовательны к пользователю, чем вторые, т.к.
каждый параметр функции должен быть именованного типа, но последнее намного
сложнее реализовать. Поскольку типы масса и длина в приведенном выше примере
структурно эквивалентны, язык, который различает их, должен использовать
эквивалентность имен. Однако этого недостаточно: Паскаль использует эквивалентность имен
но вполне разумно допускает смешанную арифметику над целочисленными поддиапазонами и полными
целые числа — необходимы дополнительные механизмы, чтобы разрешить это, но исключить добавление
массы и длины (например, новое ключевое слово в примере).
Есть связанный с этим вопрос, связанный с массивами; при условии, что у нас есть правильный
количество измерений, если длина массива является частью типа (который
сторонники строгой типизации говорят, что так и должно быть) невозможно написать
единственная функция, которая может работать с массивами любого размера.
Таким образом, общий
функции сортировки по назначению или манипулирования строками, или библиотека матричных
операции невыполнимы.
Паскаль, у которого была эта проблема, частично преодолел ее, добавив тип массива переменной длины, который можно было использовать только в объявлениях параметров.
C частично обходит эту проблему, не включая первое измерение массива. как часть типа; тем не менее, чтобы быть в состоянии гарантировать достаточно эффективную скомпилированный код, все остальные измерения многомерного массива должны быть зафиксированный.
Приведение типа Приведение — это неявное автоматическое преобразование типа выражения к типу, требуемому его контекстом. Большинство языков программирования, которые проверка типов также имеет некоторые приведения, такие как целое число к вещественному в смешанном выражения. (Разыменование — это принуждение, связанное с указателями 16.) Принуждения могут быть опасны, потому что они не являются явными, а зависят от объявления, которые могут находиться далеко в тексте программы, и легко чтобы пользователь ошибался.

Расширение
Расширение — наименее опасное принуждение, но все же имеет некоторые проблемы. Это происходит, когда значение автоматически преобразуется из типа подмножества в тип суперсета. Типичным примером является смешанная арифметика с использованием целых и действительных чисел, где
целые числа автоматически преобразуются в вещественные. Есть два момента, на которые следует обратить внимание
здесь; во-первых, время преобразования. Большинство языков делают это в
последний момент, т.е. целое + целое + действительное будет означать целочисленное сложение, за которым следует преобразование, за которым следует вещественное
дополнение, но некоторые языки могут преобразовывать целые числа в действительные перед
добавление их.
Второй момент заключается в том, что нет никакой гарантии, что реальные ценности удерживаются на уровне
по крайней мере так же точно, как целые значения, поэтому мы вполне можем получить разные ответы
из ожидаемых. Этот последний пункт представляет собой еще большую проблему, если мы не
даже уверен, когда преобразования происходят.
Другим примером является смешанная арифметика для целочисленных поддиапазонов и полных целых чисел.
или вещественные числа низкой и высокой точности: это обычно полезно, но может вызвать
проблемы, если мы хотим сохранить, например. масса и длина отдельно.
Другая проблема заключается в определении и запоминании того, что происходит, когда, например. два
добавляются целые числа размером в байт; добавлены ли они как слова, как было бы
подходит, если мы хотим сохранить результат обратно в полное целое число, или
они добавились как байты, что может быть уместно, если мы хотим сохранить результат
к байту (но, возможно, мы хотим обнаружить переполнение и предпочли бы слово
добавление и проверка во время выполнения).
Сужение
Сужение гораздо опаснее расширения.Это происходит, когда значение автоматически преобразуется из типа надмножества в тип тип подмножества. Например, должны ли мы сузить реальное значение 3,7 до целого числа значение 3 или 4? Что бы ни случилось, что, если бы вы хотели другого, или что, если бы это зависела ли реализация?
Поскольку это очень опасно, большинство современных языков не допускают автоматического
сужение, но вместо этого содержат различные явные преобразования, например.
от реального
в целое, используя усечение или округление.
целое число
подмножество целых чисел например -maxint в +maxintКонструкторы :
1 2 123 и т.д. Операции :
+ - * / < = > и т. д. Реализация : машинное слово, поэтому операции могут переполняться
настоящий
подмножество действительных чисел с ограниченной дискриминацией, т. е. насколько близко два машинные реалии могут быть и все же быть разными. Некоторые языки имеют, например. предопределенный константа = наименьшее действительное число, такое что (1,0 + константа) != 1,0 9&*()-+=`[]{};’: @,./<>?#~| и т.д. Конструкторы :
'A' 'B' или "A" "B" и т.д. Операции :
< = > и т. д., преобразование в целое число и из него, предшествует и т.
д. Реализация : машинный байт — но остерегайтесь неромантических наборов символов например Юникод
логический
{false true}Конструкторы :
истина ложь Операции :
и или нет eor == != подразумевает ( <= => ?) и т. д. Реализация : машинный бит
перечисления
например перечисление логическое значение { ложь, истина }
enum escapes { bell = '\a', backspace = '\b', tab = '\t', новая строка = '\n',
vtab = '\v', возврат = '\r' }
Конструкторы : ложные, колокол и т.д. Операции : если не упорядочены только
= ,
при заказе < = > выполнить пред и т.д. Реализация : машинное слово
подтипы
Изменяет некоторые базовые типы (например, целочисленные, символьные, перечисления) определяется некоторым ограничением на диапазон, размер или точность:напр.
тип натуральный = 0 .. maxint например цифра типа = '0'..'9' например C: float — это поддиапазон double, за исключением long (мы можем выбрать или исключить или добавить значения, или другими способами указать, как значения строятся из значений базового типа)
используется для экономии места, предотвращения ошибок программирования, как границы массива, как дискриминанты союзов
Конструкторы : как для базового типа
Операции : как для базового типа
Реализация : как для базового типа, но, возможно, с меньшей длиной слова
новые типы
например метра = новое целое число , дюйма = новое целое число нельзя смешивать напр.
год = новое целое нельзя + - * / и т.д. — нельзя
поставить год !
Проект международного стандарта OSI/IEC 11404. Примитивные типы как указано выше: целое число, вещественное число, символ, логическое значение, перечисления, подтипы, новые типы
также: состояние, порядковый, Дата и время, масштабированный, рациональный, сложный, пустота
производных типа: бит, по модулю, time_interval и т.
д. сгенерированных (из компонента/базы) типов: указатель, процедура, выбор C полон зависящих от реализации расширяющих и сужающих приведений, и имеет разыменование указателей на массивы и функции. Все эти принуждение может быть вызвано явным приведением типов или операциями.
C строго типизирован, за исключением того, что:
большинство скалярных типов на самом деле являются целыми числами.
приведения, особенно указателей, подавляют большинство проверок типов.
напр. массивы и функции могут стать указателями и наоборот
функции, объявленные с пустыми параметрами, не проверяются на тип
функции, объявленные с varargs, не могут быть полностью проверены на тип
профсоюза не подвергаются дискриминации
первое измерение массива не является частью типа
но любые другие размеры (возможно)
т.е. он вообще не сильно типизирован!
