Nickolay.info. Обучение. Учебник по Паскалю. Глава 2

2. Данные в языке Паскаль

 

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

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

·       имя состоит из одного слова; если требуется пробел в имени, он заменяется на подчеркивание: так, My_1 будет правильным идентификатором, а My 1 -- нет;

·       имя всегда начинается с буквы: возможен объект с именем A1, но не 1A; прописные и строчные буквы в именах не различаются Паскалем: x1 и X1 -- это одна и та же величина;

·       имена не могут совпадать с зарезервированными в языке служебными словами, обозначающими разрешенные в языке операции над данными: например, нельзя назвать Begin или BEGIN ни одну величину в программе, так как begin --зарезервированное служебное слово, а прописные и строчные буквы в служебных словах также не различаются. Познакомиться с большинством служебных слов мы сможем в процессе изучения языка.

 

2.1. Константы

 

Константой называют величину, значение которой не меняется в процессе выполнения программы.

Числовые константы служат для записи чисел. Различают следующие их виды:

Целочисленные (целые) константы: записываются со знаком + или -, или без знака, по обычным арифметическим правилам:

-10          +5        5

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

обычная запись: 2.5        -3.14     2.       -- обратите внимание, что целая часть отделяется от дробной символом точки;

экспоненциальная ("научная") форма: в этой записи вещественное число представляется в виде m*10p, где m -- мантисса или основание числа, 0.1≤|m|≤1, p -- порядок числа, заданный целочисленной константой. Действительно, любое вещественное число можно представить в экспоненциальной форме:

-153.5       -0.1535*103

99.005       0.99005*102

Во всех IBM-совместимых компьютерах вещественные числа хранятся как совокупность мантиссы и порядка, что позволяет упростить операции над ними, используя специальную арифметику, отдельно обрабатывающую мантиссу и порядок. Для программной записи числа в экспоненциальной форме в качестве обозначения "умножить на 10 в степени" используется символ E или e (латинские):

-153.5    -0.1535*103    -0.1535E3 или -1.535E02

99.005    0.99005*102    0.99005E+2 или 9.9005e+01

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

1030         1e30

-1020        -1E20

10-30         1E-30

Поскольку размер памяти, отводимой под мантиссу и порядок, ограничен, то вещественные числа всегда представляются в памяти компьютера с некоторой погрешностью. Например, простейшая вещественная дробь 2/3 дает в десятичном представлении 0,666666... и, независимо от размера памяти, выделяемой для хранения числа, невозможно хранить все его знаки в дробной части. Одной из типичных проблем программирования является учет возможных погрешностей при работе с вещественными числами.

Кроме числовых констант существуют и другие их виды:

логические константы служат для проверки истинности или ложности некоторых условий в программе и могут принимать только одно из двух значений: служебное слово true обозначает истину, а false -- ложь;

символьные константы могут принимать значение любого печатаемого символа и записываются как символ, заключенный в апострофы ('одинарные кавычки'):

'Y'   'я'      ' '

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

К символьным также относятся константы вида #X, где X -- числовое значение от 0 до 255 включительно, представляющее собой десятичный ASCII-код символа. Таблицы ASCII-кодов, используемых операционными системами DOS и Windows, приведены в Приложении 1. Например, значение #65 будет соответствовать коду буквы 'A' латинской. Обработка нажатий клавиш и расширенные коды клавиатуры описаны в гл. 24 и Приложении 5.

Строковые константы -- это любые последовательности символов, заключенных в апострофы. Как правило, строковые константы служат для записи приглашений к вводу данных, выдаваемых программой, вывода диагностических сообщений и т. п.:

'Введите значение X:'

'Ответ='

Если в строковой константе необходимо записать сам символ апострофа, это делается так же, как для символьных констант.

Именованные константы перечисляются в разделе описаний программы оператором следующего вида:

const Имя1=Значение1;

 Имя2=Значение2;

 ...

 ИмяN=ЗначениеN;

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

const e=2.7182818285;

  lang='Turbo Pascal 7.1';

Здесь описана числовая константа e со значением основания натурального логарифма и строковая константа с именем lang, содержащая строку 'Turbo Pascal 7.1'.

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

 

2.2. Переменные и типы переменных

 

Переменными называют величины, значения которых могут изменяться в процессе выполнения программы. Каждая переменная задается своим уникальным именем, построенным по правилам, указанным в начале главы. Максимально возможная длина имени зависит от реализации Паскаля, теоретически можно давать переменным имена вплоть до 63 символов длиной, что едва ли актуально -- обычно имена не длиннее 5-10 символов.

Поскольку любые данные в памяти компьютера хранятся в числовой форме и двоичной системе счисления, кроме имени, переменной обязательно следует присвоить и тип, определяющий диапазон значений, принимаемых переменной, и способ ее обработки машиной. Поясним сказанное на примере. Как видно из Приложения 1, большая латинская буква 'A' имеет десятичный код 65, или 01000001 в двоичном представлении. Без дополнительной информации о типе данных, хранящихся в некоторой ячейке памяти, компьютеру было бы невозможно решить, что именно представляют из себя эти данные -- число 65, код символа 'A' или что-то еще. В любом языке программирования, в том числе и в Паскале, существует стандартный набор типов, к которым может быть отнесена та или иная совокупность ячеек памяти. Информацию о типах данных Паскаля удобно свести в таблицу. Строки этой таблицы будут упорядочены по старшинству типов, от самого "младшего", требующего наименьшее число байт для представления, и, соответственно, представляющего наименьший диапазон возможных значений, до самого "старшего", представляющего наибольший диапазон значений. В табл. 2.1 представлены не все возможные, а лишь основные типы данных Паскаля.

 

Табл. 2.1. Основные типы данных Паскаля

Ключевое слово Паскаля

Название и описание типа

Объем памяти, байт

Диапазон возможных значений

boolean

Логический: хранит одну логическую переменную

1

true и false

char

Символьный: хранит код одного  символа из набора ASCII-кодов

1

от 0 до 255 включительно (28=256)

integer

Целочисленный

2

+215

word

Целочисленный без знака

2

+216 - диапазон вдвое больше, так как 16-й бит не занят под знак числа

longint

Длинное целое: для представления больших целочисленных значений

4

+231

real

Вещественное число с точностью представления до 11-12 знака в дробной части

6

~ 2.9*10-39 - 1.7*1038

double

Вещественное число с точностью представления до 15-16 знака в дробной части

8

~ 5*10-324 - 1.7*10308

string

Последовательность символов типа char длиной от 1 до 255

2-256 (данные строки + 1 байт для хранения ее длины)

Любые строки текста, состоящие из печатаемых символов

 

Теоретически для записи переменной типа boolean было бы достаточно 1 бита, но минимальная адресуемая единица памяти -- 1 байт (см. Приложение 1). В этом же Приложении уточните, как именно объем памяти в байтах, выделяемой под переменную, влияет на диапазон представляемых ей значений.

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

Задача правильного выбора типов данных целиком ложится на программиста. Например, если некоторый счетчик в вашей программе может принимать целочисленные значения от 1 до 100 000, неправильно было бы описывать его как переменную типа integer - ведь 215=32768 и при достижении счетчиком этой величины произойдет сброс его значения, которое станет равно -32768. Разумным в данном случае было бы описание счетчика как переменной типа longint.

Переменные описываются в программе оператором следующего вида:

var    Список1:Тип1;

   Список2:Тип2;

   ...

   СписокN:ТипN;

Здесь список -- набор имен переменных, разделенных запятыми (или одна переменная), а тип -- любой из рассмотренных выше типов данных. Например, конструкция

var t,r:real;

 i:integer;

описывает 2 вещественных переменных с именами t и r, а также целочисленную переменную с именем i. Ключевое слово var можно продублировать, но обычно такой необходимости нет. Сокращение var образовано от английского "variable" (переменная).

Рейтинг@Mail.ru
вверх гостевая; E-mail