Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Стандартные типы данных




В этом разделе рассмотрены логические, целые, вещественные и символьный типы. Стандартные строки описаны вместе со строками, определяемыми программистом, на с., адресный тип — в разделе “Указатели” на с., а файловые — на с..

Логические типы

Внутреннее представление
Основной логический тип данных Паскаля называется boolean. Величины этого типа занимают в памяти 1 байт и могут принимать всего два значения: true (истина) или false (ложь). Внутреннее представление значения false — 0 (нуль), значения true — 1.
Для совместимости с другими языками в Паскале определены и другие логические типы данных: ByteBool, WordBool и LongBool длиной 1, 2 и 4 байта соответственно. Истинным в них считается любое отличное от нуля значение.
Операции
К величинам логического типа применяются логические операции and, or, xor и not (табл. 1.3). Для наглядности вместо значения false используется 0, а вместо true — 1.
Таблица 1.3. Логические операции

a b a and b a or b a xor b not a
           
           
           
           

В табл. 1.3 приведены все возможные сочетания значений аргументов и соответствующие им значения результата. Такая таблица называется таблицей истинности.
Операция and называется “логическое И”, или логическое умножение. Ее результат имеет значение true, только если оба операнда имеют значение true.
Результат операции or (логическое ИЛИ, логическое сложение) имеет значение true, если хотя бы один из операндов имеет значение true. Например, false or true ® true, true or true ® true. Операция xor — так называемое исключающее ИЛИ, или операция неравнозначности. Ее результат истинный, когда значения операндов не совпадают.
Логическое отрицание not является унарной операцией, то есть имеет один операнд, который и инвертирует. Например, not true даст в результате false.
Кроме того, величины логического типа можно сравнивать между собой с помощью операций отношения, перечисленных в табл. 1.4.
Результат этих операций имеет логический тип. Например, результат проверки false < true — значение true (истина), а проверки false = true — значение false (ложь).
Таблица 1.4. Операции отношения

Операция Знак операции
Больше >
Больше или равно >=
Меньше <
   
Меньше или равно <=
Равно =
Не равно <>

 

Целые типы

Внутреннее представление
Целые числа представляются в компьютере в двоичной системе счисления (отрицательные числа — в дополнительном коде, но для нас это не принципиально). В Паскале определены несколько целых типов данных, отличающиеся длиной и наличием знака: старший двоичный разряд либо воспринимается как знаковый, либо является обычным разрядом числа (табл. 1.5). Внутреннее представление определяет диапазоны допустимых значений величин (от нулей во всех двоичных разрядах до единиц).
Таблица 1.5. Целые типы данных

Тип Название Размер Знак Диапазон значений
integer Целое 2 байта Есть –32 768.. 32 767 (–215.. 215–1)
shortint Короткое целое 1 байт Есть –128.. 127 (–27.. 27–1)
byte Байт 1 байт Нет 0.. 255 (0.. 28–1)
word Слово 2 байта Нет 0.. 65 535 (0.. 216–1)
longint Длинное целое 4 байта Есть –2 147 483 648.. 2 147 483 647 (–231.. 231–1)


Первоначально в Паскале был всего один целый тип — integer, остальные добавлены впоследствии для представления больших величин или для экономии памяти. Например, нет смысла отводить 4 байта под величину, про которую известно, что все ее значения находятся в диапазоне от 0 до 100.
Операции
С целыми величинами можно выполнять арифметические операции (табл. 1.6). Результат их выполнения всегда целый (при делении дробная часть отбрасывается).
Таблица 1.6. Арифметические операции для целых величин

Операция Знак операции
Сложение +
Вычитание
Умножение *
Деление div
Остаток от деления mod


К целым величинам можно также применять операции отношения, перечисленные в разделе “Логические типы” (см. с.). Результат этих операций имеет логический тип, например результатом сравнения 3 < 8 будет значение true.
Кроме того, к целым величинам можно применять поразрядные операции and, or, xor и not. При выполнении этих операций каждая величина представляется как совокупность двоичных разрядов. Действие выполняется над каждой парой соответствующих разрядов операндов: первый разряд с первым, второй — со вторым и т. д. Таблицы истинности операций приведены в разделе “Логические типы” на с.. Например, результатом операции 3 and 2 будет 2, поскольку двоичное представление числа 3 — 11, числа 2 — 10.
Для работы с целыми величинами предназначены также и операции сдвига влево shl и вправо shr. Слева от знака операции указывается, с какой величиной будет выполняться операция, а справа — на какое число двоичных разрядов требуется сдвинуть величину. Например, результатом операции 12 shr 2 будет значение 3, поскольку двоичное представление числа 12 — 1100. Выполнив операцию 12 shl 1, то есть сдвинув это число влево на 1 разряд, получим 24. Освободившиеся при сдвиге влево разряды заполняются нулями, а при сдвиге вправо — знаковым разрядом.
Стандартные функции и процедуры
К целым величинам можно применять стандартные функции и процедуры, перечисленные в табл. 1.7.
Таблица 1.7. Стандартные функции и процедуры для целых величин

Имя Описание Результат Пояснения
       
Функции
abs Модуль Целый |x| записывается abs(x)
arctan Арктангенс угла Вещественный arctg x записывается arctan(x)
cos Косинус угла Вещественный cos x записывается cos(x)
exp Экспонента Вещественный ex записывается exp(x)
ln Натуральный логарифм Вещественный logex записывается ln(x)
odd Проверка на четность Логический odd(3) даст в результате true
pred Предыдущее значение Целый pred(3) даст в результате 2
sin Синус угла Вещественный sin x записывается sin(x)
sqr Квадрат Целый x2 записывается sqr(x)
sqrt Квадратный корень Вещественный Цx записывается sqrt(x)
succ Следующее значение Целый succ(3) даст в результате 4
Процедуры
       
inc Инкремент   inc(x) — увеличить х на 1 inc(x, 3) — увеличить х на 3
dec Декремент   dec(x) — уменьшить х на 1 dec(x, 3) — уменьшить х на 3

ПРИМЕЧАНИЕ

Различие между функцией и процедурой проявляется в способе вызова. Процедура вызывается отдельным оператором, а функция — в составе выражения. На с. был приведен пример вызова процедур readln и writeln.

Вещественные типы

Внутреннее представление
Вещественные типы данных хранятся в памяти компьютера иначе, чем целые. Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка, и каждая часть имеет знак. Например, число 0,087 представляется в виде 0,87ґ10–1, и в памяти хранится мантисса 87 и порядок –1 (для наглядности мы пренебрегли тем, что данные на самом деле представляются в двоичной системе счисления и несколько сложнее).
Существует несколько вещественных типов, различающихся точностью и диапазоном представления данных (табл. 1.8). Точность числа определяется длиной мантиссы, а диапазон — длиной порядка.
Таблица 1.8. Вещественные типы данных

Тип Название Размер, байт Значащих цифр Диапазон значений
real Вещественный   11–12 2.9e–39.. 1.7e+38
single Одинарной точности   7–8 1.5e–45.. 3.4e+38
double Двойной точности   15–16 5.0e–324.. 1.7e+308
extended Расширенный   19–20 3.4e–4932.. 1.1e+4923
comp Большое целое   19–20 –9.22e18.. 9.22e18 (–263.. 263–1)


ПРИМЕЧАНИЕ

Для первых четырех типов в табл. 1.8 приведены абсолютные величины минимальных и максимальных значений. Автор языка Никлаус Вирт определил всего один вещественный тип — real и отвел под него разумное количество памяти. Однако аппаратно этот тип в компьютерах семейства IBM PC не поддерживается, поэтому впоследствии в язык были введены типы single и double, а также тип extended для работы с большими числами и с высокой точностью.
Тип comp на самом деле представляет собой длинные целые числа. Величины этого типа хранятся таким же образом, как целые, но отнести его к целым мешает то, что по области применимости он несколько отличается от остальных. Это объясняется тем, что тип comp не относится к порядковым типам (они рассматриваются далее на с.).
Рассмотрим теперь, что же можно делать с величинами вещественных типов, то есть какие к ним применяются операции и функции.
Операции
С вещественными величинами можно выполнять
арифметические операции, перечисленные в табл. 1.9.
Результат их выполнения — вещественный.
Таблица 1.9. Арифметические операции для вещественных величин

Операция Знак операции
Сложение +
Вычитание
Умножение *
Деление /

В общем случае при выполнении любой операции операнды должны быть одного и того же типа, но целые и вещественные величины смешивать разрешается. Иными словами, один из операндов может быть целого типа.
ПРИМЕЧАНИЕ

Обратите внимание на то, что целочисленное и вещественное деление записываются с помощью разных операций. Если требуется получить вещественный результат деления двух целых величин, нужно использовать операцию /, если целый — операцию div.
К вещественным величинам можно также применять операции отношения, перечисленные в разделе “Логические типы” (см. с.). Результат этих операций имеет логический тип.
Стандартные функции
К вещественным величинам можно применять стандартные функции (табл. 1.10).
Таблица 1.10. Стандартные функции и процедуры для вещественных величин

Имя Описание Результат Пояснения
abs Модуль Вещественный |x| записывается abs(x)
arctan Арктангенс угла Вещественный arctg x записывается arctan(x)
cos Косинус угла Вещественный cos x записывается cos(x)
exp Экспонента Вещественный ex записывается exp(x)
frac Дробная часть аргумента Вещественный frac(3.1) даст в результате 0,1
int Целая часть аргумента Вещественный int(3.1) даст в результате 3,0
ln Натуральный логарифм Вещественный logex записывается ln(x)
pi Значение числа p Вещественный 3,1415926536
round Округление до целого Целый round(3.1) даст в результате 3 round(3.8) даст в результате 4
sin Синус угла Вещественный sin x записывается sin(x)
sqr Квадрат Вещественный x2 записывается sqr(x)
sqrt Квадратный корень Вещественный Цx записывается sqrt(x)
trunc Целая часть аргумента Целый trunc(3.1) даст в результате 3  

 

Символьный тип

Этот тип данных, обозначаемый ключевым словом char, служит для представления любого символа из набора допустимых символов. Под каждый символ отводится 1 байт. К символам можно применять операции отношения (<, <=, >, >=, =, <>), при этом сравниваются коды символов. Меньшим окажется символ, код которого меньше. Других операций с символами нет, да они и не имеют смысла.
Стандартных подпрограмм для работы с символами тоже немного (табл. 1.11).
Таблица 1.11. Стандартные функции для символьных величин

Имя Описание Результат Пояснения
ord Порядковый номер символа Целый ord('b') даст в результате 98 ord('ю') даст в результате 238
chr Преобразование в символ Символьный chr(98) даст в результате 'b' chr(238) даст в результате 'ю'
pred Предыдущий символ Символьный pred('b') даст в результате 'a'
succ Последующий символ Символьный succ('b') даст в результате 'c'
upcase Перевод в верхний регистр Символьный upcase('b') даст в результате 'B'

 

Порядковые типы

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

 

· все возможные значения порядкового типа представляют собой ограниченное упорядоченное множество;

· к любому порядковому типу может быть применена стандартная функция Ord, которая в качестве результата возвращает порядковый номер конкретного значения в данном типе;

· к любому порядковому типу могут быть применены стандартные функции Pred и Succ, которые возвращают предыдущее и последующее значения соответственно;

· к любому порядковому типу могут быть применены стандартные функции Low и High, которые возвращают наименьшее и наибольшее значения величин данного типа.
При изучении операторов Паскаля мы увидим, что в некоторых из них допускается использовать только величины порядковых типов.

Приведение типов

Иногда при программировании требуется явным образом преобразовывать величину одного типа в величины другого. Для этого служит операция приведения типа, которая записывается так:
имя_типа (преобразуемая_величина)
Например:
integer ('A')
byte(500)
Размер преобразуемой величины должен быть равен числу байтов, отводимых под тип, в который она преобразуется. Исключение составляют преобразования более длинных целых типов в более короткие: в этом случае лишние биты просто отбрасываются. Приведение типа изменяет только точку зрения компилятора на содержимое ячеек памяти, никакие преобразования внутреннего представления при этом не выполняются.

Контрольные вопросы: 1

1. Выберите допустимые константы.

1) 259 2) 0,01 3) 'ф' 4) 1.2*e 15) $EEE 6) '\\\' 7) $FFH0 8)0.008E–12.3 9) 7.2e+3 10) '$' 11) * 12) “1” 13) 'ab''ba' 14) ^C 15) 'вася''

2.
Выберите все правильные ответы. Число –300 можно хранить в переменной типа:
1)
byte;
2)
word;
3)
shortint;
4)
integer;
5)
real.
3.
Выберите все правильные ответы. В переменной типа byte можно хранить число:
1)
13;
2)
213;
3)
–13;
4)
–213;
5)
1213.
4.
Выберите все правильные утверждения.
1)
Под величину типа boolean отводится 1 бит.
2)
Величины типа boolean могут принимать только значения 0 и 1.
3)
false < true.
4)
К величинам типа boolean применимы операции not и and.
5)
Величины типа boolean можно складывать друг с другом.
5.
Выберите все правильные утверждения.
1)
Результат операции сложения целых чисел — целый.
2)
Результат операций сравнения целых чисел — целый.
3)
Результат стандартных тригонометрических функций с аргументами целого типа — вещественный.
4)
В одном выражении можно использовать операнды вещественного и целого типов.
5)
Результат всех стандартных функций с аргументом вещественного типа — вещественный.

Линейные программы

Линейной называется программа, все операторы которой выполняются последовательно, в том порядке, в котором они записаны. Это самый простой вид программ.
Переменные
Переменная — это величина, которая во время работы программы может менять свое значение. Все переменные, используемые в программе, должны быть описаны в разделе описания переменных, начинающемся со служебного слова var (от слова variable — переменная).
Для каждой переменной задается ее имя и тип, например:

var   number: integer;
    x, y: real;
    option: char;

Имя переменной определяет место в памяти, по которому находится значение переменной. Имя дает программист. Оно должно отражать смысл хранимой величины и быть легко распознаваемым. Например, если в программе вычисляется количество каких-либо предметов, лучше назвать соответствующую переменную quantity или, на худой конец, kolich, но не, скажем, A, t17_xw или prikol.
СОВЕТ

Желательно, чтобы имя не содержало символов, которые можно перепутать друг с другом, например l (строчная L) или I (прописная i).
Тип переменных выбирается исходя из диапазона и требуемой точности представления данных. Например, нет необходимости заводить переменную вещественного типа для хранения величины, которая может принимать только целые значения, — хотя бы потому, что целочисленные операции выполняются гораздо быстрее.
При объявлении можно присвоить переменной некоторое начальное значение, то есть инициализировать ее. Под инициализацией понимается задание значения, выполняемое до начала работы программы. Инициализированные переменные описываются после ключевого слова const.

const
  number : integer = 100;
  x : real = 0.02;
  option : char = 'ю';

По умолчанию все переменные, описанные в главной программе, обнуляются.
Абсолютные переменные
Обычно при описании переменных решение об их конкретном расположении в памяти возлагается на компилятор. Однако в Паскале есть возможность явным образом задавать адреса, по которым должны находиться переменные. Существует два способа это сделать: либо записать адрес явным образом, либо дать указание компилятору расположить переменную начиная с того же адреса, что и некоторая другая переменная.
var имя: тип absolute адрес;
var имя: тип absolute имя_существующей_переменной;

Например:
var scr: byte absolute $B800:0;

x: integer;

b: word absolute x;
Здесь дается указание расположить переменную scr по адресу $B800:0. Адрес задается в виде сегмента и смещения (см. с.). Этот способ может использоваться, например, для непосредственного доступа к видеопамяти или порту и является нежелательным, так как снижает переносимость программы.
Переменная b размещена “поверх” переменной х. Этот способ применяется для того, чтобы иметь возможность рассматривать один и тот же участок памяти как величины разных типов.

Выражения

Выражение — это правило вычисления значения. В выражении участвуют операнды, объединенные знаками операций. Операндами выражения могут быть константы, переменные и вызовы функций. Операции выполняются в определенном порядке в соответствии с приоритетами, как и в математике. Для изменения порядка выполнения операций используются круглые скобки, уровень их вложенности практически не ограничен.
Результатом выражения всегда является значение определенного типа, который определяется типами операндов. Величины, участвующие в выражении, должны быть совместимых типов (см. с.). Например, допускается использовать в одном выражении величины целых и вещественных типов. Результат такого выражения будет вещественным.
Ниже приведены операции Паскаля, упорядоченные по убыванию приоритетов.
1.
Унарная операция not, унарный минус –, взятие адреса @.
2.
Операции типа умножения: *, /, div, mod, and, shl, shr.
3.
Операции типа сложения: +, –, or, xor.
4.
Операции отношения: =, <, >, <>, <=, >=, in.
Функции, используемые в выражении, вычисляются в первую очередь.
ВНИМАНИЕ

Константа и переменная являются частными случаями выражения.
Примеры выражений:
t + sin(x)/2 * x — результат имеет вещественный тип
a <= b + 2 — результат имеет логический тип
(x > 0) and (y < 0) — результат имеет логический тип
Обратите внимание на первое выражение. Порядок его вычисления такой: сначала выполняется обращение к стандартной функции sin и результат делится на 2, затем получившееся число умножается на x, и только после этого выполняется сложение с переменной t.
Скобки в третьем выражении необходимы по той причине, что приоритет операций отношения ниже, чем логической операции and.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных