Какие вещественные типы данных бывают в pascal
Перейти к содержимому

Какие вещественные типы данных бывают в pascal

  • автор:

3. Типы данных, используемые в языке Паскаль

1. Целочисленный . Обозначается как integer . В данный тип данных входят числовые значение в диапазоне [ − 32768 . 32767 ] . В памяти компьютера для хранения таких данных отводится \(2\) байта со знаком.

2. Вещественный . Обозначается как real . Диапазон данных: 2 . 9 ∗ 10 − 39 . 1 . 7 ∗ 10 + 38 . Занимает \(6\) байтов в памяти компьютера.

3. Символьный . Обозначается как char . Значением переменной этого типа может быть любой символ алфавита. В памяти компьютера такая переменная займёт \(1\) байт.

4. Логический . Обозначается как boolean . Данный тип данных может принимать только два значения: истина или ложь .

Pascal. Урок 2. Типы переменных

Pascal. Урок 2. Типы переменных

Имена в списке перечисляются через запятую. Например:

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

Типы данных в Паскале

Любая программа, написанная на любом языке программирования, по большому счету предназначена для обработки данных. В качестве данных могут выступать числа, тексты, графика, звук и др. Одни данные являются исходными, другие – результатом, который получается путем обработки исходных данных программой.

Данные хранятся в памяти компьютера. Программа обращается к ним с помощью имен переменных, связанных с участками памяти, где хранятся данные.

Переменные описываются до основного кода программы. Здесь указываются имена переменных и тип хранимых в них данных.

В языке программирования Паскаль достаточно много типов данных. Кроме того, сам пользователь может определять свои типы.

Тип переменной определяет, какие данные можно хранить в связанной с ней ячейке памяти.

Переменные типа integer могут быть связаны только с целыми значениями обычно в диапазоне от -32768 до 32767. В Pascal есть другие целочисленные типы ( byte , longint ).

Переменные типа real хранят вещественные (дробные) числа.

Переменная булевского (логического) типа ( boolean ) может принимать только два значения — true (1, правда) или false (0, ложь).

Символьный тип ( char ) может принимать значения из определенной упорядоченной последовательности символов.

Интервальный тип определяется пользователем и формируется только из порядковых типов. Представляет собой подмножество значений в конкретном диапазоне.

Можно создать собственный тип данных простым перечислением значений, которые может принимать переменная данного типа. Это так называемый перечисляемый тип данных.

Все вышеописанное – это простые типы данных. Но бывают и сложные, структурированные, которые базируются на простых типах.

Массив – это структура, занимающая в памяти единую область и состоящая из фиксированного числа компонентов одного типа.

Строки представляет собой последовательность символов. Причем количество этих символов не может быть больше 255 включительно. Такое ограничение является характерной чертой Pascal.

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

Множества представляют собой совокупность любого числа элементов, но одного и того же перечисляемого типа.

Файлы для Pascal представляют собой последовательности однотипных данных, которые хранятся на устройствах внешней памяти (например, жестком диске).

Понятие такого типа данных как указатель связано с динамическим хранением данных в памяти компьютера. Часто использование динамических типов данных является более эффективным в программировании, чем статических.

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

В ряде случаев в Pascal происходит автоматический переход от одного типа данных к другому (от целого к действительному, от символьного к строковому и т.д.). Существует также ряд функций, осуществляющих преобразование типов ( ord , chr , trunc , round ). Наряду с этим в Паскаль возможно явное преобразование типов (ретипизация данных). Для того, чтобы осуществить явное преобразование типа, необходимо использовать имя типа аналогично тому, как используется имя функции. В качестве параметра в этом случае указывается имя преобразуемой переменной.

Преобразовать можно любой тип к любому другому, однако следует выполнять требование: в операторе присваивания переменная слева должна занимать в памяти столько же или больше байт, сколько занимает преобразуемое значение.

Пример задачи, где используется явное преобразование типов

Вычислить значение функции sign(x) = 1 при x > 0; 0 при x = 0; -1 при x < 0.

var x: real; sign: integer; begin readln(x); sign := byte(x > 0) - byte(x < 0); writeln(sign); end.

В программе при положительном значении x выражение x > 0 принимает значение true , а выражение x < 0 — false. В результате получается, что byte(x >0) = 1 , byte(x < 0) = 0 , а sign = 1 . При отрицательном значении x byte(x >0) = 0 , byte(x < 0) = 1 , sign = -1 . При нулевом значении x sign = 0 .

Типы данных

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

Целые числа - это числа, с помощью которых Вы учились считать (1, 5, -21 и 752, например).

Вещественные числа имеют дробные части (3.14159) и экспоненты (2.579x10**24). Они также известны как числа с плавающей точкой.

Символы - это любые буквы алфавита, символы и цифры 0-9. Они могут использоваться отдельно (а, z, !, 3) или объединяться в символьные строки ('Это только проверка').

Булевские выражения имеют только два значения: TRUE или FALSE (истина или ложь). Они используются в условных выражениях.

Указатели - это адреса ячеек памяти, содержащих информацию.

Целые числа.

В стандартном Паскале целочисленный тип определяется в пределах от -MaxInt до MaxInt, где MaxInt - набольшее возможное целое значение, допустимое для процессора.

В Turbo Pascal поддерживается целочисленный тип MaxInt = 32,767, допуская значение -32,768. Переменная целочисленного типа занимает 2 байта.

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

+Таблица 2.1. Целочисленные типы данных. ------------------------------------------------------------ Тип Диапазон Размер в байтах ------------------------------------------------------------ Byte 0..255 1 (целое длиной в байт) Shortint -128..127 1 (короткое целое) Integer -32768..32767 2 (целое) Word 0..65535 2 (длиной в слово) Longint -2147483648..2147483647 4 (длинное целое) -----------------------------------------------------------

Заключение: Turbo Pascal позволяет использовать шестнадцатиричные целые значения (основание 16). При описании шестнадцатиричной константы перед ней указывается знак доллара $, например $27=39.

+Вещественный тип данных.

В стандартном Паскале тип Real представляет значение с плавающей точкой, содержащее мантиссу и экспоненту - степень числа 10.

Количество значащих цифр в мантиссе и диапазон значений экспоненты зависят от компьютера. В Turbo Pascal данные вещественного типа Real имеют размер в 6 байт, с 11 значащими цифрами, мантиссы и экспоненты от 10**-38 до 10**38.

Кроме того Turbo Pascal поддерживает стандарт IEEE 754 для двоичной арифметики с плавающей точкой. В этом случае добавляются типы данных с Single, Double, Extended и Comp:

Single - размер 4 байта, допускается 7 значащих цифр и диапазон экспоненты от 10**-45 до 10**38;

Double - размер 8 байт, допускается 15 значащих цифр и диапазон экспоненты от 10**-324 до 10**308;

Extended - размер 10 байт, допускается 19 значащих цифр и диапазон экспоненты от 10**-4951 до 10**4931.

Если у вас есть процессор 8087, и включена работа с числовым сопроцессором (), Turbo Pascal генерирует инструкции 8087 для поддержки этих типов и выполнения всех операций с плавающей точкой на 8087.

Если у Вас нет 8087, но Вы хотите использовать IEEE типы, Вы можете указать Turbo Pascal эмулировать процессор 8087, разрешая и эмуляцию 8087 и обработку с плавающей точкой (директивы ). Turbo Pascal подключает специальную библиотеку, которая выполняет операции с плавающей точкой, так же как процессор 8087.

Таблица 2.2 Вещественные типы данных. ------------------------------------------------------------------- Тип Диапазон Значение Размер в цифры байтах ------------------------------------------------------------------- Real 2.9х10Е-39..1.7х10Е38 11-12 6 (вещественный) Single(с одинар- 1.5х10Е-45..3.4х10Е38 7-8 4 ной точностью) Double(с двойной 5.0х10Е-324..1.7х10Е308 15-16 8 точностью) Extended(повышен- 1.9х10Е-4951..1.1х10Е4932 19-20 10 ной точности) Comp(сложный) -2Е+63+1..2Е+63-1 19-20 8 *Comp - только целые значения ----------------------------------------------------- Вызовем редактор Turbo Pascal и заведем программу: program DoRatio; var A, B: Integer; Ratio: Real; begin Write('Enter two numbers: '); Readln(A, B); Ratio := A div B; Writeln('The ratio is ', Ratio) end.

Сохраним ее в файле DORATIO.PAS с помощью функции основного меню File/Save As. Нажмите ALT-R для компиляции и запуска программы. Введем два значения, 10 и 3, и получим результат 3.000000.

Ожидая ответа 3.3333333333, мы получили результат 3. Получили такой результат, потому что был использован оператор "div" для деления целых чисел.

Исправим оператор "div" на Ratio := A / B; сохраним код (F2), откомпилируем и выполним. Новый результат 3.3333333333, как и ожидали. Оператор деления "/" обеспечивает более точный результат.

+Символьные и строковые типы данных.

Научившись записывать числовые данные, выучим запись и использование символьных и строковых данных. Паскаль позволяет определять тип Char, имеющий размер в один байт и содержащий один символ. Символьные константы содержат один символ, заключенный в апострофы ('A','e','г','2'). Заметим, что '2' означает символ 2, а 2 означает целое число 2 (и 2.0 - вещественное число) .

program DoRatio; var A, B: Integer; Ratio: Real; Ans: Char; begin repeat Write('Enter two numbers: '); Readln(A, B); Ratio := A / B; Writeln('The ratio is ', Ratio); Write('Do it again? (Y/N) '); Readln(Ans); until UpCase(Ans) = 'N'; end.

После вычисления коэффициента, выдается сообщение:

Do it again? (Y/N). (Повторить? (Да/Нет)).

Программа находится в состоянии ожидания одного из указанных символов и нажатия клавиши "Enter". Если Вы нажмете "n" или заглавную "N", то условие "until" будет выполнено и цикл закончится. В случае, если Вы ответите "Y" ("y"), то выполнение цикла будет продолжено.

"N" и "n" не одно и тоже, потому что они имеют различные значения в коде ASCII. Каждый символ имеет свой код ASCII, представленный 8-битным значением (символ занимает 1 байт). Приложение B в Руководстве программиста содержит список кодов ASCII для всех символов.

В Turbo Pascal существуют два дополнительных способа описания символьных констант: с помощью символа "^" и символа числа "#".

Символы с кодами от 0 до 31 - управляющие символы. Они обозначаются аббревиатурами (CR - возврат каретки, LF - перевод строки, ESC - выход) или с помощью двух клавиш, одна из которых Ctrl + буква. Значение буквы получается прибавлением 64 к управляющему коду.

Например, управляющий символ кода ASCII 7 известен как Bel или CtrlG. Turbo Pascal дает возможность представить символы с помощью "^", за которым следует буква (или символ). Так, "^G" то же самое, что и Ctrl-G. "^G" можно использовать в операторах Turbo Pascal: Writeln (^G). Этот метод применим только к управляющим символам.

Вторая возможность обозначения - использование символа номера "#", за которым следует код ASCII. Так, #7 то же самое, что и "^G", #65 - 'A', a #233 - один из специальных псевдографических символов IBM PC.

В большинстве случаев используются строки символов. В стандартном Паскале не поддерживается тип строк символов. В Turbo Pascal реализована эта возможность. Рассмотрим программу

program Hello; var Name: String(30); begin Write('What is your name? '); Readln(Name); Writeln('Hello, ', Name) end.

Переменная Name объявлена, как string (строка), и под нее резервируется 30 байт (для 30 символов). Кроме того, Turbo Pascal отводит еще один байт, в котором содержится текущая длина строки. В этом случае, независимо от того, какой длины будет введено имя, оператор Writeln распечатает имя указанной длины. Если будет введено имя больше 30 символов, то будут использоваться только первые 30 символов, а остальные будут проигнорированы.

При описании строковой переменной можно указывать ее размер, но не более 255. По умолчанию длина строковой переменной - 255 символов.

Turbo Pascal предлагает несколько процедур и функций, работающих со строковыми переменными. Их описание дано в главе 1 Справочного руководства по библиотеке.

+Булевские данные.

Встроенный тип Boolean данных в Turbo Pascal имеет два возможных значения: True и Falsе (истина и ложь). Можно объявить переменную типа Boolean, и присвоить ей значение True или False, или же, что более важно, присвоить ей значение выражения, которое при вычислении принимает одно из этих значений.

Булевское выражение - это выражение, которое принимает значение True или False.

Оно состоит из выражений отношений, булевских операторов, булевских переменных и/или других булевских выражений. Например:

while содержит булевское выражение. Булевское выражение в этом случае все, что находится между ключевыми словами while и do. Done - это переменная (или функция) булевского типа.

+Указатели.

Все рассмотренные типы данных содержат непосредственно данные. Указатель, содержащий другой тип информации - адрес. Указатель - это переменная, содержащая адрес памяти, где какие либо данные помещаются. Другими словами, он указывает на данные, как адресная книга или оглавление.

Обычно указатель указывает на данные определенного типа. Расмотрим следующий пример:

type Buffer = string[255]; BufPtr = ^Buffer; var Buf1: Buffer; Buf2: BufPtr;

Тип данных Buffer определен, как строковая переменная размером 255 байт, в то же время BufPtr - указатель на Buffer. Переменная Buf1 имеет тип Buffer и занимает (255+1) байт памяти. Переменная Buf2 имеет тип BufPtr, это 32-битовый адрес и занимает 4 байта памяти.

Куда указывает Buf2? В данный момент никуда. Прежде чем использовать BufPtr, необходимо зарезервировать (распределить) память и запомнить ее адрес в Buf2. Вы делаете это, используя процедуру New:

Поскольку Buf2 указывает на тип Buffer, то этот оператор выделит в памяти 256-байтовый буфер и его адрес поместит в Buf2.

Как использовать Buf2 и данные, на которые он указывает? С помощью оператора ^. Например, необходимо поместить строку и в Buf1 и в буфер, на который указывает Buf2:

Buf1 : = 'Эта строка помещается в Buf1'; Buf2^: = 'Эта строка помещается по указателю Buf2';

Отметим различие между Buf2 и Buf2^: Buf2 означает 4-байтовую переменную указателя; Buf2^ - 256-байтовую строковую переменую, адрес которой в Buf2.

Теперь, как освободить память, на которую указывает Buf2? Используя процедуру Dispose. Эта процедура освобождает память. После того, как при помощи Dispose освобождена память, следует присвоить указателю значение nil, т.е. указатель ни на что не указывает:

Dispose(Buf2); Buf2 := nil;

Заметим, что значение nil присваивается указателю Buf2, а не Buf2^.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *