Основные типы данных в Паскале

Данные – это общее понятие для всего того, с чем оперирует ЭВМ.

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

Например, для хранения небольших чисел требуется меньше памяти, чем для хранения больших. Целые числа из диапазона 0-255 занимают лишь 1 байт памяти, тогда как бльшие числа требуют бльшего количества байт. Если по логике работы программы известно, что результат не превысит 255, то для его хранения достаточно использовать однобайтовую переменную.

С другой стороны, современные процессоры обычно по-разному обрабатывают целые и вещественные числа. Например, команды целочисленной арифметики в процессорах i80x86 выполняются непосредственно в основном АЛУ и требуют относительно немного процессорного времени. Тогда как операции с вещественными числами выполняются математическим сопроцессором, который, хотя и обладает большими возможностями по обработке, но требует гораздо больше времени для получения результата.

Поэтому, если по логике работы алгоритма не требуется использование вещественных чисел, нет смысла задействовать громоздкую «плавающую» арифметику. Указав в программе, что данная переменная является целочисленной, программист фактически даёт инструкцию компилятору обрабатывать её быстрым АЛУ основного процессора, не задействуя без необходимости сопроцессор.

Кроме того, для разных типов данных могут быть определены различные операции. Например, бессмысленно выполнять операцию деления для строк символов или делать сложение вещественной переменной с логической. Если при декларации переменной указывается её тип, компилятор получает возможность следить за правильностью выражений, в которых эта переменная будет использоваться. Это позволяет немного сократить число ошибок в программе.

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

К простым типам относятся:

– логический

– целые типы

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

– символьный

1. Логический тип (тип boolean)

Логическое значение - это одно из двух значений истинности, которые обозначаются зарезервированными именами false и true.

Логический тип определен так, что false < true. Операции отношения всегда дают логический результат. Например, отношение

x + 1 < y

при x = 0, y = 0 дает false; при x = 0, y = 10 – значение true.

2. Целые типы данных

Значениями переменных целого типа являются элементы ограниченного подмножества целых чисел; это подмножество определяется конкретной реализацией.

В стандартном Паскале определен только один целый тип данных – тип integer. Число типа integer занимает два байта памяти; при этом нулевой бит определяет знак числа.

В той реализации Паскаля, с которой мы будем работать, в переменных типа integer можно хранить целые числа в диапазоне от –32768 до +32767.

Кроме того, в Турбо-Паскале имеются дополнительные целые типы данных:

1) тип shortint – короткое целое длиной один байт со знаком (знак занимает нулевой бит), пределы изменения -128 .. 127;

2) тип byte – короткое целое длиной один байт без знака (все восемь бит - двоичные цифры), пределы изменения 0 .. 255;

3) тип word – целое длиной два байта (слово) без знака, пределы изменения 0 .. 65535;

4) тип longint – длинное целое длиной 4 байта со знаком, пределы изменения - 2 147 483 648 .. 2 147 483 647.

Для целых значений допустимы следующие арифметические операции:

+ сложение;

– вычитание;

* умножение;

div деление нацело (обратите внимание, что традиционный знак деления «/» возвращает в Паскале дробное число, поэтому результат такой операции не может быть присвоен целочисленной переменной).

mod остаток от деления.

Примеры:

19 div 5 = 3

19 mod 5 = 4

В арифметическом выражении не могут стоять рядом два знака операции. Например, нельзя писать a * -b. Здесь нужно писать a * (-b).

Старшинство операций:

1) выражения в скобках;

2) *, div, mod (мультипликативные операции);

3) +, – (аддитивные операции).

Операции одинакового старшинства выполняются слева направо.

Операции возведения в степень в Паскале нет. Для целых показателей степени эта операция может быть заменена многократным умножением.

Целый результат дают следующие предописанные функции:

1) abs(i) – абсолютное значение целого аргумента i;

2) sqr(i) – квадрат значения целого аргумента i;

3) trunc(R) – целое, получающееся в результате отбрасывания дробной части числа R;

4) round(R) – целое, получающееся путем округления R.

Примеры.

trunc(3.3) = 3; round(3.3) = 3;

trunc(3.5) = 3; round(3.5) = 4;

trunc(3.8) = 3; round(3.8) = 4;

trunc(-3.3) = -3; round(-3.3) = -3;

trunc(-3.8) = -3; round(-3.8) = -4.

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

Вещественные числа – это числа с плавающей запятой. Широкое их использование характерно для инженерно-технических задач.

При отсутствии сопроцессора реализуется только один вещественный тип – тип real; при наличии сопроцессора реализуются также типы single, double, extended, comp. Вещественные типы отличаются друг от друга количеством разрядов, отводимых для представления мантиссы и порядка.

Для типа real определены четыре арифметических операции:

+ сложение - вычитание

* умножение / деление

Результатом операций «+», «–», «*» является вещественное значение, если хотя бы один из операндов имеет тип real. Операция «/» дает вещественное значение и в том случае, когда оба ее операнда имеют целочисленный тип.

Стандартные функции abs(x) и sqr(x) дают вещественный результат, если их аргумент x имеет тип real. Вне зависимости от типа аргумента следующие стандартные функции всегда дают вещественный результат: sin(x), cos(x), ln(x), exp(x), arctan(x), sqrt(x) (корень квадратный).

Вещественный результат при вещественном аргументе дают также функции

Int(x) - целая часть вещественного значения x;

Frac(x) - дробная часть вещественного значения x.

4. Символьный тип данных (тип char)

Значениями переменных символьного типа являются элементы конечного и упорядоченного множества символов. Этот набор может быть неодинаков на различных ЭВМ.

Значение переменной символьного типа обозначается одним символом, заключенным в апострофы.

Пример.

'A' 'a' '8' '''' (апостроф пишется дважды)

Вне зависимости от реализации для символьного типа справедливы следующие допущения.

1) Десятичные цифры от '0' до '9' упорядочены в соответствии с их значениями и записаны одна за другой.

2) Имеются все большие буквы латинского алфавита от 'A' до 'Z'. Это множество упорядочено по алфавиту, но не обязательно связно. Следовательно, в любой реализации должно выполняться 'I' < 'J'.

3) Могут быть малые буквы латинского алфавита от 'a' до 'z'. Если это так, то это множество букв упорядочено по алфавиту, но не обязательно связно.

Для символьного типа определены две взаимно обратные функции преобразования ord и chr:

k = ord(ch) – порядковый номер символа ch;

ch = chr(k) – символ с порядковым номером k.

Для символьного типа определены все операции отношения.

Считается, что ch1 < ch2, если ord(ch1) < ord(ch2).

Структура Паскаль-программы

Паскаль-программа состоит из заголовка программы и некоторого блока:

Заголовок программы;

Блок.

Заголовок состоит из ключевого слова program и имени программы:

Program Example;

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

1. Раздел описания меток.

2. Раздел описания констант

3. Раздел описания типов

4. Раздел описания переменных.

5. Раздел описания процедур и функций.

6. Раздел операторов.

В блоке может отсутствовать любой из разделов кроме раздела операторов.

1. Раздел описания меток

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

Пример.

Label 10, 20, Met15;

2. Раздел описания констант

Этот раздел определяет некоторые идентификаторы как синонимы констант.

Пример.

Const g = 9.81;

Nmax = 1000;

TextString = 'Нажмите клавишу Enter';

Константа pi является предописанной и равна

pi = 3.1415926536 .

Использование идентификаторов констант улучшает читаемость программы и облегчает ее модификацию.

3. Раздел описания типов

Типы данных real, integer, boolean, char являются предопределенными и используются в разделе описания переменных. Если программисту требуется ввести новый тип данных, то его нужно описать в разделе описания типов.

Подробнее об описании новых типов мы поговорим позднее.

4. Раздел описания переменных

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

Пример.

Var i, j, k : integer;

a, b : real;

5. Раздел описания процедур и функций

Назначение и структура раздела будут изложены при рассмотрении процедур и функций.

6. Раздел операторов

Раздел содержит в себе операторы, реализующие обработку информации в программе. Раздел операторов - это частный случай составного оператора, который включает в себя один или несколько операторов, заключенных в «операторные скобки» begin … end. Разделителем между операторами является точка с запятой. На последующих лекциях мы будем изучать основные операторы языка Паскаль.

Раздел №9 (2 часа)

Оператор присваивания. Ввод-вывод
в программах на Паскале

План:

• Оператор присваивания. Запись арифметических выражений

• Процедуры ввода данных с клавиатуры

• Процедуры вывода данных на экран

Наши рекомендации