Целочисленные типы данных. Типы данных языка паскаль

На занятии рассматриваются основные стандартные типы данных в Паскаль, понятие переменной и константы; объясняется, как работать с арифметическими операциями

Паскаль — это типизированный язык программирования. Это означает, что переменные, в которых хранятся данные, имеют определенный тип данных. Т.е. программе напрямую надо указать, какие данные могут храниться в той или иной переменной: текстовые данные, числовые данные, если числовые — то целочисленные или дробные, и т.п. Это необходимо в первую очередь для того чтобы компьютер «знал», какие операции можно выполнять с этими переменными и как правильно их выполнять.

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

Рассмотрим наиболее распространенные в Pascal типы данных.

Целочисленные типы данных в Паскаль

Тип Диапазон Требуемая память (байт)
byte 0..255 1
shortint -128..127 1
integer -32768.. 32767 2
word 0..65535 2
longint -2147483648..2147483647 4

Нужно иметь в виду, что при написании программ в паскале integer (в переводе с англ. целое) является наиболее часто используемым, так как диапазон значений наиболее востребуем. Если необходим более широкий диапазон, используется longint (long integer, в переводе с англ. длинное целое). Тип byte в Паскале используется, когда нет необходимости работать с отрицательными значениями, то же самое касается и типа word (только диапазон значений здесь значительно больше).

Примеры того, как описываются (объявляются) переменные в Паскале:

program a1; var x,y:integer; {целочисленный тип} myname:string; {строковый тип} begin x:=1; y:=x+16; myname:="Петр"; writeln ("имя: ",myname, ", возраст: ", y) end.

Результат:
имя: Петр, возраст: 17

Комментарии в Паскале

Обратите внимание на то, как используются комментарии в Паскале . В примере комментарии, т.е. служебный текст, который «не видим» для компилятора, заключаются в фигурные скобки. Обычно комментарии делаются программистами с целью пояснения фрагментов кода.

Задача 3. Население Москвы равняется а=9000000 жителей. Население Нью-Васюков равняется b=1000 жителей. Напишите программу, которая определяет разницу в числе жителей между двумя городами. Используйте переменные величины

Вещественные типы данных в Паскаль

Вещественные числа в Паскале и вообще в программировании — это название дробных чисел.

Тип Диапазон Требуемая память (байт)
real 2.9 * 10E-39 .. 1.7 * 10E38 6
single 1.5 * 10 E-45 .. 3.4 * 10E38 4
double 5 * 10E-324 .. 1.7 * 10E308 8
extended 1.9 * 10E-4951 .. 1.1 * 10E4932 10

Тип real в Паскале — наиболее часто используемый из вещественных типов.

Выше были представлены простые типы данных в Паскаль, к которым относятся:

  • Порядковые
  • Целые
  • Логические
  • Символьные
  • Перечисляемые
  • Интервальные
  • Вещественные

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

  • в формате используется либо одно число, означающее число позиций, отводимых на это число в экспоненциальной форме;
  • p:=1234.6789; Writeln(p:6:2); {1234.68}

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

    Константы в Паскале

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

    Объявление константы в Паскале происходит до объявления переменных (до служебного слова var) и выглядит следующим образом:

    Пример описания константы в Паскале:

    1 2 3 4 5 6 const x= 17 ; var myname: string ; begin myname: = "Петр" ; writeln ("имя: " , myname, ", возраст: " , х) end .

    const x=17; var myname:string; begin myname:="Петр"; writeln ("имя: ",myname, ", возраст: ", х) end.

    «Красивый» вывод целых и вещественных чисел

    Для того чтобы после вывода значений переменных оставались отступы, чтобы значения не «сливались» друг с другом, принято через двоеточие указывать какое количество символов нужно предусмотреть для вывода значения:


    Арифметические операции в Паскале

    Порядок выполнения операций

    1. вычисление выражений в скобках;
    2. умножение, деление, div, mod слева направо;
    3. сложение и вычитание слева направо.

    Стандартные арифметические процедуры и функции Pascal

    Здесь стоит более подробно остановиться на некоторых арифметических операциях.

    • Операция inc в Паскале, произносимая как инкремент, это стандартная процедура pascal, которая обозначает увеличение на единицу.
    • Пример операции inc:

      x:=1; inc(x); {Увеличивает x на 1, т.е. x=2} writeln (х)

      Более сложное использование процедуры inc:
      Inc(x,n) где x — порядкового типа, n — целого типа; процедура inc увеличивает x на n.

    • Аналогично работает процедура Dec в Паскале: Dec(x) — уменьшает x на 1 (декремент) или Dec(x,n) — уменьшает x на n.
    • Оператор abs представляет собой модуль числа. Работает следующим образом:
    • a: =- 9 ; b: = abs (a) ; { b = 9}

      a:=-9; b:=abs(a); { b = 9}

    • Оператор div в паскале является часто используемым, так как целый ряд задач связан с действием деление нацело.
    • Остаток от деления или оператор mod в pascal тоже незаменим при решении ряда задач.
    • Заслуживающей внимания является стандартная функция odd Паскаля, которая определяет, является ли целое число нечетным. Т. е. возвращает true (истина) для нечетных чисел, false (ложь) для четных чисел.
    • Пример использования функции odd:

      var x:integer; begin x:=3; writeln(sqr(x)); {ответ 9} end.

    • Операция возведение в степень в Паскале отсутствует как таковая. Но для того чтобы возвести в степень число можно использовать функцию exp .
    • Формула такая: exp(ln(a)*n) , где а — число, n — степень (а>0).

      Однако в компиляторе pascal abc возведение в степень осуществляется значительно проще:

      var x:integer; begin x:=9; writeln(sqrt(x)); {ответ 3} end.

    Задача 4. Известны размеры спичечной коробки: высота — 12.41 см., ширина — 8 см., толщина — 5 см. Вычислить площадь основания коробки и ее объем
    (S=ширина * толщина, V=площадь*высота)

    Задача 5. В зоопарке три слона и довольно много кроликов, причем количество кроликов часто меняется. Слону положено съедать в сутки сто морковок, а кролику — две. Каждое утро служитель зоопарка сообщает компьютеру количество кроликов. Компьютер в ответ на это должен сообщить служителю общее количество морковок, которые сегодня нужно скормить кроликам и слонам.

    Задача 6. Известно, что x кг конфет стоит a рублей. Определите, сколько стоит y кг этих конфет, а также, сколько килограмм конфет можно купить на k рублей. Все значения вводит пользователь.

    Знание и понимание типов данных является неотъемлемой частью в программировании.

    В этом уроке мы познакомимся с типами данных в языке программирования Turbo Pascal.

    В языке Паскаль любые объекты, т.е. константы, переменные, значения функций или выражения, характеризуются своими типами. Тип определяет множество допустимых значений того или иного объекта, а также множество операций, которые к нему применимы. Кроме того, тип определяет формат внутреннего представления данных в памяти ЭВМ. В отношении типов объектов Паскаль является статическим языком. Это означает, что тип объекта, например, переменной, определяется при ее описании и не может быть изменен в дальнейшем.

    Структура типов данных в языке Паскаль:

    Простые типы языка
    К простым типам относятся порядковые, вещественный, строковый и адресный (указатели) типы. Все они определяют тип только одного отдельного значения.

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

    Целочисленные типы - обозначают множества целых чисел в различных диапазонах. Имеется пять целочисленных типов, различающихся диапазоном допустимых значений и размером занимаемой оперативной памяти. Целочисленные типы обозначаются идентификаторами: Byte, ShortInt, Word, Integer, LongInt; их характеристики приведены в следующей таблице.

    Значения целых типов записываются в программе привычным способом:
    123 4 -3 +345 -699
    Наличие десятичной точки в записи целого числа недопустимо. Будет ошибкой записать целое число следующим образом:
    123.0
    Кроме привычной десятичной формы записи допускается запись целых чисел в шестнадцатеричном формате, используя префикс $, например:
    $01AF $FF $1A $F0A1B
    Регистр букв A,B, ..., F значения не имеет.

    Допустимые операции:

    • - присваивание;
    • - все арифметические: +, - ,*, /, div, mod (при обычном делении [/] результат вещественный!);
    • - сравнение <, >, >=, <=, <>, =.
    Логический тип (Boolean) - состоит всего из двух значений: False (ложно) и True (истинно). Слова False и True определены в языке и являются, по сути, логическими константами. Регистр букв в их написании несущественен: FALSE = false. Значения этого типа являются результатом вычислений условных и логических выражений и участвуют во всевозможных условных операторах языка.
    Допустимые операции:
    • - присваивание;
    • - сравнение: <, >, >=, <=, <>, =;
    • - логические операции: NOT, OR, AND, XOR
    Символьный тип (Char) - это тип данных, состоящих из одного символа (знака, буквы, кода). Значением типа Char может быть любой символ из набора ASCII. Если символ имеет графическое представление, то в программе он записывается заключенным в одиночные кавычки (апострофы), например:
    "ж" "s" "." "*" " "-(пробел)
    Для представления самого апострофа его изображение удваивается: """".
    Если же символ не имеет графического представления, например, символ табуляции или символ возрата каретки, то можно воспользоваться эквивалентной формой записи символьного значения, состоящего из префикса # и ASCII-кода символа:
    #9 #32 #13
    Допустимые операции:
    • - присваивание;
    • - сравнение: <, >, >=, <=, <>, =. Большим считается тот символ, который имеет больший ASCII-номер.
    Строковый тип (String, String[n]) - этот тип данных определяет последовательности символов - строки. Параметр n определяет максимальное количество символов в строке. Если он не задан, подразумевается n=255. Значение типа «строка» в программе запиывается как последовательность символов, заключенных в одиночные кавычки (апострофы), например
    "Это текстовая строка" "This is a string"
    "1234" - это тоже строка, не число
    "" - пустая строка

    Допустимые операции:
    • - присваивание;
    • - сложение (конкатенация, слияние); например, S:= "Зима"+" "+"пришла!";
    • - сравнение: <, >, >=, <=, <>, =. Строки считаются равными, если имеют одинаковую длину и посимвольно эквивалентны.
    Вещественные типы - обозначают множества вещественных чисел в различных диапазонах. Имеется пять вещественных типов, различающихся диапазоном допустимых значений и размером занимаемой оперативной памяти. Вещественные типы обозначаются идентификаторами: Real, Single, Double, Extended, Comp; их характеристики приведены в следующей таблице.

    Тип Comp хотя и относится к вещественным типам, на самом деле является целочисленным с очень огромным диапазоном значений.
    Значения вещественных типов могут записываться в программе несколькими способами:
    1.456 0.000134 -120.0 65432
    +345 0 -45 127E+12
    -1.5E-5 -1.6E+12 5E4 0.002E-6

    Будет ошибкой записать вещественное число следующим образом:
    .5 (правильно 0.5)
    12. (правильно 12.0 или 12)

    Вещественное число в форме с плавающей точкой (экспоненциальная форма) записывается как пара
    <мантисса> Е <порядок>
    Такое обозначение понимается как «мантисса, умноженная на десять в степени, равном порядку». Например,
    -1.6E+12 сответствует -1.6·1012

    Допустимые операции:
    - присваивание;
    - все арифметические: +, - ,*, /;
    - сравнение: <, >, >=, <=, <>, =.

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

    Диапазон или (ограниченный тип) не является предопределенным типом языка (таким как, например, Integer или Char) и поэтому ему не соответствует никакой идентификатор. Этот тип является вводимм пользователем. Используя его мы можем определить новый тип, который будет содержать значения только из ограниченного поддиапазона некоего базового типа. Базовым типом может быть только целочисленный тип, тип Char (символьный) и любой из введенных программистом перечислимых типов.

    Для введения нового типа - диапазона - нужно в блоке описания типов TYPE указать имя вводимого типа и границы диапазона через специальный символ диапазона ".." (две точки подряд):
    TYPE
    Century = 1..21; { поддиапазон цилочисленного типа }
    CapsLetters = "А".."Я"; { поддиапазон из типа Char }

    Структурированные типы языка

    К структурированным типам относятся: массив, запись, множество, файл и др. Все они определяют тип (или типы) некоторой структуры данных.

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

    Тип массив определяется конструкцией:
    Array [диапазон] of ТипЭлементов;

    Диапазон в квадратных скобках указывает значения индексов первого и последнего элемента в стурктуре. Примеры объявления типов и переменных:

    TYPE Vector = array of Real; VAR V1: Vector; V2: array of Byte;
    Здесь переменная V1 определяется с использованием описанного выше типа Vector; тип переменной V2 конструируется непостредственно на этапе ее описания.

    В качетве типа элементов массива можно также указаывать массив, образуя тем самым многомерные структуры. Например, описание двумерной структуры (матрицы) будет выгдядеть следующим образом:
    VAR M1: array of array of Byte; Это же самое можно записать гораздо компактнее: VAR M2: array of Byte;
    Зжесь массивы M1 и M2 имеют совершенно одинаковую структуру - квадратной матрицы размером 3x3.

    Доступ к элемента массива осуществляется путем указания его индекса, например:

    Writeln(V1); {вывод на экран первого элемента массива V1} readln(M2);{ввод третьего элемента второй строки матрицы М2}
    На этом урок по типам данных закончен, текст был почти полностью скопипастен (ссылочка будет ниже), т.к. я не вижу смысла этот материал рассказывать своими словами. Если хоть немного понятна разница между типами данных, то это уже хорошо.

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

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

    Описания информируют транслятор, во-первых, о существовании используемых переменных и других объектов, во-вторых, указывают на свойства этих объектов. Например, описание переменной, значение которой является числом, указывает на свойства чисел. Формально числа могут быть целыми и вещественными (дробными). В Паскале, как и в других языках программирования, числа разделены на два типа: целые (зарезервированное слово integer) и вещественные (зарезервированное слово real).

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

    Например, пусть переменная x имеет тип real и ее значение равно единице: x=1 . Соответствующее значение в памяти компьютера может быть и 0.999999999 , и 1.000000001 , и 1.000000000 . Но если переменная x будет объявлена как переменная целого типа, то единица в компьютере будет представлена абсолютно точно и переменная x не сможет принимать вещественные (дробные) значения – ведь она была описана как переменная целого типа.

    Таким образом, тип данных определяет:

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

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

    Множество типов данных языка Турбо Паскаль можно разделить на две группы:

    • стандартные (предопределенные) типы ;
    • типы, определяемые пользователем (пользовательские типы) .

    К стандартным типам Турбо Паскаль относят:

    • целый тип – integer ;
    • вещественный тип – real ;
    • символьный тип – char ;
    • логический тип – boolean ;
    • строковый тип – string ;
    • указательный тип – pointer ;
    • текстовый тип – text .

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

    К пользовательским типам относят:

    • перечисляемый тип;
    • интервальный тип;
    • указательный тип;
    • структурированные типы;
    • процедурный тип.

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

    К простым типам относят: целый тип, вещественный тип, символьный тип, логический тип, перечислимый тип и интервальный тип.

    Сложный тип представляет собой различные комбинации простых типов (массивы, записи, множества, файлы и т.д.)

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

    Стандартный тип данных определен самим языком Паскаль. При использовании в программе стандартных типов достаточно указать подразделы необходимых типов (const , var) и далее описать используемые в программе константы и переменные. Необходимость использования подраздела Type отсутствует.

    Например, если в программе используются только переменные:

    i,j – integer (целые);

    x,y - real (вещественные);

    t,s - char (символьные);

    a,b – boolean (логические),

    то необходим только подраздел переменных – Var . Поэтому в описательной части программы объявления переменных записываются следующим образом:

    Целые типы

    Данные этого типа могут принимать только значения целых чисел. В компьютере значения целого типа представляются абсолютно точно. Если переменная отрицательная, то перед ней должен стоять знак «–», если переменная положительная, то знак «+» можно опустить. Данный тип необходим в том случае, когда какую-то величину нельзя представить приближенно – вещественным числом. Например, число людей, животных и т.д.

    Примеры записи значений целых чисел: 17, 0, 44789, -4, -127.

    Диапазон изменения данных целого типа, определяется пятью стандартными типами целых чисел и представлен в таблице:

    Тип Диапазон Размер в байтах
    Shortint -128...+128 1
    Integer -32768...32767 2
    Longint -2147483648...2147483647 4
    Byte 0...255 1
    Word 0...65535 2

    Последние два типа служат для представления только положительных чисел, а первые три как положительных, так и отрицательных чисел.

    В тексте программы или при вводе данных целого типа значения записываются без десятичной точки . Фактические значения переменной не должны превышать допустимых значений того типа (Shortint , Integer , Longint , Byte , Word), который был использован при описании переменной. Возможные превышения при вычислениях ни как не контролируются, что приведет к неверной работе программы.

    Пример использования переменной целого типа

    Var a:integer; b:word; c:byte; Begin a:=300; {a присвоено значение 300} b:=300; {b присвоено значение300} c:=200; {c присвоено значение200} a:=b+c; {a присвоено значение500} c:=b; {Ошибка! Переменная c может принимать значения не более 255. Здесь переменной c присваивается значение 500,что вызовет переполнение результата.} End.

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

    Значения вещественных типов в компьютере представляются приближенно. Диапазон изменения данных вещественного типа определяется пятью стандартными типами: вещественный (Real), с одинарной точностью (Single), двойной точностью (Double), с повышенной точностью (Extended), сложный (Comp) и представлен в таблице:

    Тип Диапазон Число значащих цифр Размер в байтах
    Real 2.9E-39...1.7E+38 11-12 6
    Single 1.5E-45...3.4E+38 >7-8 4
    Double 5E-324...1.7E+308 15-16 8
    Extended 3.4E-4951...1.1E+4932 19-20 10
    Comp -2E+63+1...+2E+63-1 19-20 8

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

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

    34.5, -4.0, 77.001, 100.56

    Формат записи с плавающей точкой применяется при записи очень больших или очень малых чисел. В этом формате число, стоящее перед символом «E», умножается на число 10 в степени, указанной после символа «E».

    1E-4 1*10-4
    3.4574E+3 3.4574*10+3
    4.51E+1 4.51*10+1

    Примеры чисел с плавающей точкой:

    Число Запись на Паскале
    0,0001 1E-4
    3457,4 34574E-1
    45,1 451E-1
    40000 4E+4
    124 0.124E+3
    124 1.24E+2
    124 12.4E+1
    124 1240E-1
    124 12400E-2

    В таблице с 5 по 9 строку показана запись одного и того же числа 124. Изменяя положение десятичной точки в мантиссе (точка «плывет», отсюда следует название «запись числа с плавающей точкой») и одновременно изменяя величину порядка, можно выбрать наиболее подходящую запись числа.

    Пример описания переменных вещественного типа.

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

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

    Символьный тип обозначается зарезервированным словом Char и предназначен для хранения одного символа. Данные символьного типа в памяти занимают один байт.

    Формат объявления символьной переменной:

    <имя переменной>: Char;

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

    Пример использования переменных символьного типа:

    Var c:char; {c – переменная символьного типа} Begin c:=’A’; {переменной c присваивается символ ’A’} c:=#65; {переменной c также присваивается символ A. Его ASCII код равен 65} c:=’5’; {переменной c присваивается символ 5, End. здесь 5 это уже не число}

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

    Логический тип данных называют булевским по имени английского математика Джорджа Буля, создателя области математики – математической логики.

    Формат объявления переменной логического типа:

    <имя переменной>: boolean;

    Данные этого типа могут принимать только два значения:

    • True – истина;
    • False – ложь.

    Логические данные широко используются при проверке правильности некоторых условий и при сравнении величин. Результат может оказаться истинным или ложным.

    Для сравнения данных предусмотрены следующие операции отношений:

    Пример использования операций отношения:

    отношение 5>3 , результат true (истина);

    отношение 5=3 , результат false (ложь).

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

    Var a,b:boolean; {a,b – переменные логического типа} Begin a:=Тrue; {переменной a присваивается значение «истина»} b:=false; {переменной b присваивается значение «ложь»} End.

    Константы

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

    Константу необходимо объявить в описательной части с помощью зарезервированного слова const.

    Формат объявления константы

    Const <имя константы>= <значение>;

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

    Const {объявление раздела констант} year=2003; {константа целого типа, т.к. нет в записи десятичной точки} time=14.05; {константа вещественного типа} N=24; {константа целого типа, т.к. нет в записи десятичной точки} P=3.14; {константа вещественного типа} A=true; {константа логического типа} str1=’7’; {константа символьного типа} str2=’A’; {константа символьного типа} str3=’Turbo’; {константа строкового типа} Var {объявление раздела переменных} X,y:integer; {переменные целого типа}

    Пользовательские типы

    Из совокупности пользовательских типов рассмотрим только

    • перечисляемый тип;
    • интервальный тип.

    Эти два типа нам будут необходимы при изучении массивов.

    Перечисляемый тип

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

    Формат перечисляемого типа:

    <имя типа>= (константа1, константа2,..., константаN);

    где
    константа1 , константа2 ,..., константаN – упорядоченный набор значений идентификаторов, рассматриваемых как константы.

    Пример описания перечисляемого типа:

    Type ball=(one, two, three, four, five); var t:ball;

    Здесь ball – имя перечисляемого типа; one , two , three , four , five – константы; t – переменная, которая может принимать любое значение констант.

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

    • константами числового типа: 1, 2, 3, 4 и т. д;
    • константами символьного типа: "a", "s", "1", "3" и т. д.;
    • константами строкового типа: "first", "second" и т.д.

    Кроме того, к значениям этого типа не применимы арифметические операции и стандартные процедуры ввода и вывода Read , Write .

    Пример использования переменных перечисляемого типа:

    Type days = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); Var day: days; begin if day = Sunday then writeln(‘Сегодня Воскресенье!’); End.

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

    Для программного определения порядкового номера используется функция Ord() .

    В нашем примере порядковые номера равны:

    Ord(Monday) = 0;

    Ord(Saturday) = 5;

    Ord(Sunday) = 6.

    Интервальный тип

    Если какая-то переменная принимает не все значения своего типа, а только значения, содержащиеся в некотором диапазоне, то такой тип данных называется интервальным типом. Часто интервальный тип называют ограниченным типом и типом-диапазоном. Интервальный тип задается границами своих значений:

    <минимальное значение>..<максимальное значение>

    • два символа «..» рассматриваются как один символ, поэтому между ними недопустимы пробелы;
    • левая граница диапазона не должна превышать его правую границу.

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

    Пример описания интервального типа:

    Type digit = 1..10; month = 1..31; lat = ’A’..’Z’;

    Типы данных языка Паскаль

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

    Существуют следующие типы данных в Турбо-Паскале.

    1) Простые типы:

    – вещественные;

    – символьные;

    – булевские (логические);

    – перечисляемые;

    – ограниченные (диапазонные).

    2) Составные (структурированные) типы:

    – регулярные (массивы);

    – комбинированные (записи);

    – файловые;

    – множественные;

    – строковые;

    – объекты.

    3) Ссылочные типы (типизированные и нетипизированные указатели).

    4) Процедурные типы.

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

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

    Таблица 6

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

    Целые переменные описываются с использованием указанных выше зарезервированных слов:

    i, j, k: integer;

    Данные целого типа хранятся в памяти точно. Например, переменные типа integer занимают в памяти 2 байта (16 бит), которые распределяются следующим образом: 1 бит отводится для хранения знака числа (0, если число положительное, и 1, если число отрицательное) и 15 бит для хранения числа в двоичной системе счисления. Максимальное десятичное число, которое можно записать как двоичное в 15 бит – это 32767.

    При использовании процедур и функций с целочисленными параметрами следует руководствоваться «вложенностью» типов, т.е. везде где используется word, допускается использование byte (но не наоборот), в longint «входит» integer, который, в свою очередь, включает в себя shortint.

    Для целого типа определены пять основных операций, результатом которых также является целое число: +, -,*, div, mod (сложение, вычитание, умножение, целочисленное деление и остаток от целочисленного деления). В арифметических выражениях операции *, div, mod имеют более высокий приоритет по сравнению с операциями +, -. Примеры записи выражений:

    Перечень процедур и функций, применимых к целочисленным типам, приведен в табл. 7. Буквами b, s, w, i, l обозначены выражения соответственно типа byte, shortint, word, integer, и longint; x – выражение любого из этих типов; идентификаторы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках указывается необязательный параметр.

    Таблица 7

    Стандартные процедуры и функции, применимые к целым типам

    Обращение Тип результата Действие
    Abs (x) x Возвращает модуль x
    Chr (b) Char Возвращает символ по его коду
    Dec (vx [, i]) - Уменьшает значение vx на i, а при отсутствии i – на 1
    Inc (vx [, i]) - Увеличивает значение vx на i, а при отсутствии i – на 1
    Hi (i) Byte Возвращает старший байт аргумента
    Hi (i) Byte То же
    Lo (i) Byte Возвращает младший байт аргумента
    Lo (w) Byte То же
    Odd (l) Byte Возвращает true, если аргумент – нечетное число
    Random (w) Как у параметра Возвращает псевдослучайное число, равномерно распределенное в диапазоне 0…(w-1)
    Sqr (x) x Возвращает квадрат аргумента
    Swap (i) Integer
    Swap (w) Word Меняет местами байты в слове
    Succ(x) Как у параметра Возвращает следующее целое значение, т.е. x+1
    Pred(x) Как у параметра Возвращает предшествующее целое значение, т.е. x-1

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

    Вещественный тип. Значения вещественных типов определяют произвольное число с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа. В Турбо-Паскале существуют пять вещественных типов (табл. 8).

    Таблица 8

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

    Вещественные переменные описываются с использованием указанных выше зарезервированных слов:

    Вещественное число в памяти компьютера состоит из 3-х частей:

    Знаковый разряд числа;

    Экспоненциальная часть;

    Мантисса числа.

    Мантисса имеет длину от 23 (Single) до 63 (Extended) двоичных разрядов, что и обеспечивает точность 7-8 для Single и 19-20 для Extended десятичных цифр. Десятичная точка (запятая) подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положение сдвигается влево или вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называют арифметикой с плавающей точкой (запятой).

    Доступ к типам Single, Double и Extended осуществляется только при особых режимах компиляции. Для включения данных режимов следует выбрать пункт меню Options , Compiler… и включить опцию 8087/80287 в группе Numeric processing .

    Особое положение в Турбо Паскаль занимает тип Comp, который трактуется как вещественное число без экспоненциальной и дробной частей. Фактически, Comp – Это большое целое число со знаком, сохраняющее 19…20 значащих десятичных цифр. В то же время в выражениях Comp полностью совместим с любыми другими вещественными типами: над ним определены все вещественные операции, он может использоваться как аргумент математических операций и т.д.



    Вещественные числа задаются в десятичной системе счисления в одной из двух форм .

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

    0.087 4.0 23.5 0.6

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

    7Е3 6.9Е-8 0.98Е-02 45Е+04

    Над объектами вещественного типа определены следующие операции: +, -, *, /.

    Операции «*» и «/» имеют более высокий приоритет по сравнению с операциями «+» и «-».

    Если хотя бы один операнд вещественный, то операции +, -, *, / приводят к вещественному результату. Операция деления / приводит к вещественному результату и в случае двух целых операндов, например: 9/3 = 3.0.

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

    Таблица 9

    Математические функции, работающие с вещественными данными

    Переменные и константы типа REAL запрещается использовать:

    – в функциях pred(x), succ(x), ord(x);

    – в качестве индексов массивов;

    – в качестве меток в операторах передачи управления;

    – в качестве управляющих переменных (параметров цикла).

    Для перевода вещественного числа в целое можно воспользоваться функциями:

    trunc(x) – целая часть х (х – вещественное);

    round(x) – округление до ближайшего целого (х- вещественное).

    Символьный тип. Символьные переменные описываются с помощью зарезервированного слова char:

    Значения этого типа выбираются из упорядоченного множества символов (из множества ASCII), состоящего из 256 символов. Каждому символу приписывается целое число из диапазона 0..255. Например, прописные буквы латинского алфавита A..Z имеют коды 65..90, а строчные буквы – коды 97..122.

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

    ‘F’ ‘8’ ‘*’

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

    Существуют функции, которые устанавливают соответствие между символом и его кодом:

    ord(с) – выдает номер символа с;

    chr(i) – выдает символ с номером i.

    Эти функции являются обратными по отношению друг к другу.

    Логический тип . Логические переменные описываются с помощью зарезервированного слова boolean:

    p1, p2: boolean;

    Переменные логического типа принимают два значения: true (истина), false (ложь).

    Эти величины упорядочены следующим образом: false < true. false имеет порядковый номер 0, true имеет порядковый номер 1.

    Переменным логического типа можно либо присвоить значение непосредственно, либо использовать логическое выражение. Например,

    a, d, g, b: boolean;

    Операции отношения (<, <=, >, >=, =, <>), применяемые к целым, вещественным и символьным переменным, дают логический результат.

    Логические операции над операндами логического типа также дают логический результат (операции приведены в порядке убывания приоритета) (подробнее см. табл. 3 и 5):

    not – отрицание (операция НЕ);

    and – логическое умножение (операция И);

    or – логическое сложение (операция ИЛИ);

    xor – исключающее ИЛИ.

    Выражение (not a) имеет значение, противоположное значению а.

    Выражение (a and b) дает значение true, если только и а и b имеют значение true, в остальных случаях значение этого выражения есть false.

    Выражение (a or b) дает значение false, если только и а и b имеют значение false, во всех остальных случаях результат true.

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

    x = (w1, w2, …, wn);

    где х – имя типа, w1, w2,…, wn – значения, которые может принимать переменная типа х.

    Эти значения являются упорядоченными w1

    К аргументу w перечисляемого типа применимы следующие стандартные функции:

    succ(w), pred(w), ord(w).

    color=(red, black, yellow, green)

    ww=(left, up, right, down);

    f: array of ww;

    succ(d) = yellow;

    Переменные а и в имеют тип w. они могут принимать одно из трех значений, причем on

    К величинам перечисляемого типа применимы операции отношения: =, <>, <=, >=, <, >.

    Допускается указывать константы перечисляемого типа непосредственно в разделе var без использования раздела type , например

    c,d: (red, black, yellow, green);

    Диапазонный (ограниченный) тип . При определении ограниченного типа указывают начальное и конечное значения, которые может принимать переменная диапазонного типа. Значения разделяют двумя точками.

    Описание ограниченного типа имеет вид

    Здесь а – имя типа, min, max – константы.

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

    – обе граничные константы min и max должны быть одинакового типа;

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

    col = red.. yellow;

    letter = ‘a’..’f’;

    – переменные ограниченного типа можно описать в разделе var, не обращаясь к разделу type:

    – ограниченный тип наследует все свойства базового типа, из которого он создается;

    – граница min всегда должна быть меньше границы max.

    Массивы . Массив – это сложный тип, представляющий собой структуру, состоящую из фиксированного числа компонент одного типа. Тип компонента называется базовым типом. Все компоненты массива можно легко упорядочить и обеспечить доступ к любому из них простым указанием его порядкового номера. Описание массива в разделе var имеет вид:

    a: array of t2;

    где а – имя массива, array , of – служебные слова (означают «массив из…»), t1 – тип индексов; t2 – тип компонент (базовый тип).

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

    Пример 1. Рассмотрим одномерный массив С, значениями которого являются пять вещественных чисел:

    4.6 6.23 12 -4.8 0.7

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

    c: array of real;

    По конкретному значению индекса можно выбрать определенную компоненту массива (например, C означает третий элемент массива С, т.е. число 12).

    Пример 2. Рассмотрим двумерный массив В (матрицу В), значением которого является таблица из целых чисел:

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

    b of integer;

    Здесь b – имя массива, первый индекс является номером строки и принимает значения от 1 до 2, второй – номер столбца и принимает значения от 1 до 4. По конкретным значениям индексов можно выбрать определенную компоненту массива (например, b означает элемент таблицы, стоящий в первой строке и третьем столбце, т.е. число -4).

    Индексы могут быть произвольными выражениями, соответствующими типу индексов из описания массива:

    a: array of real;

    a[(i+1)*2] := 24;

    Набор операций над элементами массива полностью определяется типом этих элементов.

    Строковый тип . Строковый тип – множество символьных цепочек произвольной длины (от нуля до заданного числа). Переменные строкового типа описываются с помощью служебного слова string :

    b: string ;

    Особенности:

    – значение строковой переменной может быть введено с помощью клавиатуры, присвоено в операторе присваивания, прочитано из файла. При этом длина введенной строки может быть любой (меньше указанного размера, равна размеру или больше, в последнем случае, лишние символы отбрасываются); a:= ‘Результаты’;

    – допускается использовать операцию конкатенации в операторе присваивания, так как строки могут динамически изменять свою длину: а:= a + ‘ вычислений’;

    – максимальная длина строковой переменной 255 символов, это указание длины может быть опущено:

    a: string ;

    a1: string ;

    Переменные а и а1 – одинаковы (эквивалентное описание).

    – память под переменные строкового типа отводится по максимуму, но используется лишь часть памяти, реально занятая символами строки в данный момент. Для описания строковой переменной длины n используется n+1 байт памяти: n байтов - для хранения символов строки, n+1 –й байт – для хранения текущей длины.

    – над значениями строковых типов определены операции сравнения: < <= > >= = <>. Короткая строка всегда меньше длинной. Если строки имеют одинаковую длину, то сравниваются коды символов.

    – возможен доступ к отдельным элементам строки аналогично доступу к элементам массива: а, a. В квадратных скобках указывается номер элемента строки.

    Процедуры и функции, ориентированные на работу со строками.

    concat (s1, s2,…) – функция слияния строк, s1, s2, …- строки, число строк может быть произвольным. Результатом работы функции является строка. Если длина результирующей строки больше 255 символов, то строка усекается до 255 символов.

    copy (s, index, count) – функция выделения строки из исходной строки s длиной count символов, начиная с символа под номером index .

    delete (s, index, count) – процедура удаления из строки s подстроки длиной count символов, начиная с символа с номером index .

    insert (s1, s2, index) – процедура вставки строки s1 в строку s2 , начиная с символа с номером index .

    length(s) – функция определения текущей длины строки, возвращает число равное текущей длине строки.

    pos(s1, s2) – функция поиска в строке s2 подстроки s1 . выдает номер позиции первого символа подстроки s1 в строке s2 (или 0, если этой строки нет).

    val (st, x, code) – процедура преобразования строки s в целую или вещественную переменную x . Параметр code содержит 0, если преобразование прошло успешно (и в x помещается результат преобразования), или номер позиции строки, где обнаружен ошибочный символ (в таком случае значение x не меняется).

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

    Два типа считаются совместимыми, если:

    – оба они есть один и тот же тип;

    – оба вещественные;

    – оба целые;

    – один тип есть тип-диапазон второго типа;

    – оба являются типами диапазонами одного и того же базового типа;

    – оба являются множествами, составленными из элементов одного и того же базового типа;

    – оба являются упакованными строками (определены с предшествующим словом packed) одинаковой максимальной длины;

    – один есть тип-строка, а другой – тип-строка или символ;

    – один тип есть любой указатель, а другой – указатель на родственный ему объект;

    – оба есть процедурные типы с одинаковым типом результата (для типа-функции), количеством параметров и типом взаимно соответствующих параметров.

    Совместимость типов приобретает особое значение в операторах присваивания. Пусть t1 – тип переменной, а t2 – тип выражения, то есть выполняется присваивание t1:=t2. Это присваивание возможно в следующих случаях:

    – t1 и t2 есть один и тот же тип, и этот тип не относится к файлам, массивам файлов, записям, содержащим поля-файлы, или массивам таких записей;

    – t1 и t2 являются совместимыми порядковыми типами, и значение t2 лежит в диапазоне возможных значений t1;

    – t1 и t2 являются вещественными типами, и значение t2 лежит в диапазоне возможных значений t1;

    – t1 – вещественный тип и t2 – целый тип;

    – t1 – строка и t2 – символ;

    – t1 – строка и t2 – упакованная строка;

    – t1 и t2 – совместимые упакованные строки;

    – t1 и t2 – совместимые множества и все члены t2 принадлежат множеству возможных значений t1;

    – t1 и t2 – совместимые указатели;

    – t1 и t2 – совместимые процедурные типы;

    – t1 – объект и t2 – его потомок.

    В программе данные одного типа могут преобразовываться в данные другого типа. Такое преобразование может быть явным или неявным.

    При явном преобразовании типов вызываются специальные функции преобразования, аргументы которых принадлежат одному типу, а значения – другому. Пример – уже рассмотренные функции ord, trunc, round, chr.

    Неявное преобразование возможно только в двух случаях:

    – в выражениях, составленных из вещественных и целочисленных переменных, последние автоматически преобразуются к вещественному типу, и все выражение в целом приобретает вещественный тип;

    – одна и та же область памяти попеременно трактуется как содержащая данные то одного, то другого типа (совмещение в памяти данных разного типа).

    Для того чтобы машина смогла обработать какие бы то ни было входные данные, она должна «понимать», к какому типу принадлежат переменные, в которые занесены значения. При отсутствии информации о формате данных компьютер не сможет определить, допустима ли в конкретном случае та или иная операция: например, интуитивно понятно, что нельзя возвести букву в степень или взять интеграл от строки. Таким образом, пользователь должен определить, какие действия позволительно осуществлять с каждой переменной.

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

    Подразделение типов переменных

    Типы переменных в Паскале делятся на простые и структурированные. Простые включают в себя вещественные и порядковые типы. К структурированным относятся массивы, записи, множества и файлы. Отдельно выделяются указатели, объекты и процедурные типы.

    Рассмотрим порядковые и вещественные типы. К порядковым относятся 5 целых типов, перечисляемый и тип-диапазон.

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

    Существует 5 целых типов, различающихся длиной в байтах и диапазоном значений.

    Длина Byte и ShortInt - 1 байт. Различие между ними состоит в том, что Byte хранит только неотрицательные значения, а ShortInt позволяет хранить и отрицательные (от -128 до +127). Аналогично соотносятся друг с другом типы Word и Integer, с тем лишь различием, что их размер - 2 байта.

    Наконец, LongInt позволяет хранить и отрицательные, и положительные значения, используя 4 байта - в числовом измерении 16-й степени в обе стороны от нуля. Различные виды переменных в Паскале способствуют эффективному решению пользовательских задач, поскольку в каждом конкретном случае может требоваться как малый, так и большой диапазон значений, а также не исключено наличие ограничений по объему выделяемой памяти.

    Важно понимать, что нуль занимает столько же места в памяти, сколько и любое другое число. Таким образом, при формировании диапазона значений минимальное отрицательное число по модулю будет на единицу больше, чем положительное: например, от -128 до +127.

    Переменные, принадлежащие к могут принимать значение TRUE (истина) или FALSE (ложь) и требуют 1 байт памяти.

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

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

    Среди типов переменных в Паскале выделяется несколько числовых с возможностью записи дробной части. Различие между типами Single, Real, Double и Extended сводится к диапазону принимаемых значений, количеству значащих цифр после запятой и размеру в байтах.

    В соответствии с порядком, представленным выше, переменная каждого типа будет занимать 4, 6, 8 или 10 байт.

    Массивы

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

    String=array of char;

    Таким образом, мы получили тип под названием String, позволяющий задавать переменные длиной в 100 символов. В последней строке задан непосредственно одномерный массив Y, имеющий тип String. Описание переменных в Паскале осуществляется путём размещения с левой стороны идентификатора, а справа, после знака равенства, значения переменной.

    Диапазон индексов, записанный в позволяет обращаться к каждому конкретному элементу массива:

    В данном случае мы произвели чтение второго элемента созданного ранее массива Y.

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

    Записи

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

    type NTel = Record

    В первой строке слева указывается имя типа, а справа - служебное слово record. Во второй строке задано поле с именем, в третьей - номер телефона. Слово «end» говорит о том, что мы ввели все поля, которые хотели, и на этом процесс создания записи завершается.

    Наконец в последней строке мы задаём переменную One, имеющую тип NTel.

    Обращаться можно как к записи в целом, так и к отдельным её компонентам, например: one.NAME (т. е. имя_переменной.имя_поля_записи).

    Файлы

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

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

    ‘C:\Folder\File2.txt’

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

    Задать переменную файлового типа можно следующим образом:

    f1: file of integer;

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

    В заключение

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