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

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

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

Описания информируют транслятор, во-первых, о существовании используемых переменных и других объектов, во-вторых, указывают на свойства этих объектов. Например, описание переменной, значение которой является числом, указывает на свойства чисел. Формально числа могут быть целыми и вещественными (дробными). В Паскале, как и в других языках программирования, числа разделены на два типа: целые (зарезервированное слово 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’;

Простейшим числовым типом данных в Паскале являются целые типы, предназначенные для хранения целых чисел. Целые числа в Паскале принято делить на два типа: со знаком и без знака. Числа со знаком – это целочисленный тип, в который входят как положительные, так и отрицательные числа, без знака – только положительные.

Ниже приведены две таблицы с целочисленными типами. Сначала выпишем типы целых чисел со знаком :


Тип Байт Диапазон значений
shortint 1 -128 ... 127
smallint 2 -32768 ... 32767
integer, longint 4 -2147483648 ... 2147483647
int64 8 -9223372036854775808 ... 9223372036854775807

А это целочисленные типы без знака :


Тип Байт Диапазон значений
byte 1 0 ... 255
word 2 0 ... 65535
longword, cardinal 4 0 ... 4294967295
uint64 8 0 ... 18446744073709551615

Как видно, в первой колонке стоит название типа, во второй – количество байт, занимаемое в памяти числами этого типа, в третьей – соответственно диапазон возможных значений. В числах со знаком есть два типа – integer и longint (буквально «целый» и «длинный целый»), которые являются синонимами. То есть вы можете в разделе описаний использовать как одно название, так и другое.

Аналогично во второй таблице (неотрицательные целые числа в Паскале) есть также два целочисленных типа-синонима размером 4 байта – longword и cardinal , поэтому используйте либо одно, либо другое.

Ещё можно заметить, что если числа первой таблицы условно перенести в правую часть относительно нуля (сдвинуть интервал вправо так, чтобы минимальным числом оказался 0), то мы получим интервалы целых чисел второй таблицы, лежащие в соответствующих строках. Так, если в 1-байтовом типе shortint к левой и правой границам прибавить 128, то получим тип byte (0..255); если в 2-байтовом типе smallint к границам прибавить 32768, то получим соответствующий 2-байтовый тип без знака word (0..65535) и т.д.

Всё это случается потому, что в целочисленных типах без знака числа могут быть разделены ровно надвое: половина чисел – в отрицательную часть, половина – в положительную. А почему тогда в числах со знаком левая граница по абсолютной величине на 1 больше за правую границу? – спросите вы. Например, в типе shortint минимум -128, тогда как максимум всего 127 (по модулю на 1 меньше). А это потому, что в правую часть входит также и 0, и об этом надо знать и помнить.

Так зачем же целые числа в Паскале делить на столько типов? Почему не обойтись, например, наибольшим из целочисленных типов в PascalABC.Net и Free Pascal – int64 – это почти 9 с половиной квинтиллионов (!) как с минусом, так и с плюсом? Да по простой банальной (?) причине – экономия памяти. Если вам надо сложить два небольших однобайтовых положительных числа (0..255), а вы эти числа описали как int64 (8 байт), то на это ушло в 8 раз больше памяти. А если программа большая и переменных много, то экономия памяти встает очень резко. Причем нет смысла использовать целые типы со знаком, если в задаче речь идет о таких величинах, как длина, масса, расстояние, время и т.п.

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

3.2. Простые типы данныхв Turbo Pascal 7

Простой тип определяет упорядоченное множество значений параметра. В Turbo Pascal имеются следующие группы простых типов:

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

Все простые типы, за исключением вещественных, называются порядковыми типами. Для величин порядковых типов определены стандартные процедуры и функции: Dec, Inc, Ord, Pred, Succ (см. п. 13.1).

3.2.1. Целые типы

В отличие от языка Паскаль, где определен единственный целый тип Integer, в Turbo Pascal имеется пять стандартных типов целых чисел: Shortint, Integer, Longint, Byte, Word. Характеристики этих типов приведены в табл. 2.

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

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

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

Стандартный логический тип Boolean (размер - 1 байт) представляет собой тип данных, любой элемент которого может принимать лишь два значения: True и False. При этом справедливы следующие условия:
False Ord (False) = 0
Ord (True) = 1
Succ (False) = True
Pred (True) = False

В Turbo Pascal 7.0 добавлено еще три логических типа ByteBool (размер - 1 байт), WordBool (размер - 2 байта) и LongBool (размер - 4 байта). Они введены для унификации с другими языками программирования и со средой Windows. Отличие их от стандартного типа Boolean заключается в фактической величине параметра этого типа, соответствующей значению True. Для вех логических типов значению False соответствует число 0, записанное в соответствующее количество байтов. Значению же True для типа Boolean соответствует число 1, записанное в его байт, а для других типов значению True соответствует любое число, отличное от нуля (хотя функция Ord в этом случае дает значение 1).

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

Стандартный символьный тип Char определяет полный набор ASCII-символов. Функция Ord от величины типа Char дает код соответствующего символа. Сравниваются величины символьного типа по своим кодам.

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

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

type
= ();)

Важно, в каком порядке перечислены идентификаторы при определении типа, т. к. первому идентификатору присваивается порядковый номер 0, второму - 1 и т. д. Один и тот же идентификатор можно использовать в определении только одного перечисляемого типа. Функция Ord от величины перечисляемого типа дает порядковый номер ее значения.

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

type Operat = (Plus, Minus, Mult, Divide);

Логический тип является частным случаем перечисляемого типа:

type Boolean = (False, True);

3.2.5. Тип-диапазон

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

type = . . ;

Минимальное значение при определении такого типа не должно быть больше максимального.

Пример. Определение типов-диапазонов.

type
Dozen = 1..12; {числа от 1 до 12}
AddSub = Plus..Minus; {операции сложения и вычитания}

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

В отличие от стандарта языка Паскаль, где определен только один вещественный тип Real, в Turbo Pascal имеется пять стандартных вещественных типов: Real, Single, Double, Extended, Соmр. Характеристики этих типов см. в табл. 3. Таблица 3. Вещественные типы данных

Тип Диапазон Число значащих цифр Размер в байтах
Real 2.9*10-39..1.7*1038 11-12 6
Single 1.5*10-45..3.4*1038 7-8 4
Double 5.0*10-324.-1.7*10308 15-16 8
Extended 3.4*10-4932..1.1*104932 19-20 10
Comp -263+1..263-1 19-20 8

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

Типы Single, Double, Extended и Comp можно использовать в программах только при наличии арифметического сопроцессора или при включенном эмуляторе сопроцессора (см. пп. 17.5.8 и 17.7.1).

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

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

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

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

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

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

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

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

– логический

– целые типы

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

– символьный

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

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

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



при 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 остаток от деления.

В арифметическом выражении не могут стоять рядом два знака операции. Например, нельзя писать 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. Раздел описания констант

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

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

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

pi = 3.1415926536 .

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

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

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

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

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

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

Var i, j, k: integer;

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

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

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

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

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

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

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

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

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

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

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

Например:

n:integer;

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

[имя] = [тип]

Система стандартных типов имеет разветвленную, иерархическую структуру.

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

Структурированные типы строятся по определенным правилам из простых типов.

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

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

Объекты являются также нововведением, и они предназначены для использования языка, как объектно-ориентированного языка.

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

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

Можно выделить 5 вещественных типов:

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

2358.8395

0.23588395*10 4

0.23588395*E 4

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

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

Порядковые типы объединяют в себе несколько простых типов. К ним относятся:

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

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

К значениям порядкового типа может быть применена функция ODD(x), которая возвращает порядковый номер аргумента x.

Функция PRED(x) - возвращает предшествующее значение порядкового типа. PRED(A) = 5.

Функция SUCC (x) - возвращает следующее значение порядкового типа. SUCC(A) = 5.

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

Значениям символьного типа является 256 символов из множества допустимых кодовой таблицей используемого компьютера. Начальная область этого множества, то есть диапазон от 0 до 127 соответствует множеству кодов ASCII, куда загружаются символы алфавита, арабских чисел и специальных символов. Символы начальной области всегда присутствуют на клавиатуре ПК. Старшая область называется альтернативной, она содержит символы национальных алфавитов и различные специальные символы, и символы псевдографики, не соответствующие коду ASCII.

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

C:= ’A’

Логический (булевский) тип

Имеются два значения булевского типа: Истина (True) и Ложь (False). Переменные данного типа задаются служебным словом BOOLEAN. Значение булевского типа занимают один байт в оперативной памяти. Значениям Истина и Ложь соответствуют числовые значения 1 и 0.

Тип-диапазон

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

[минимальное-значение]…[максимальное-значение]

Тип-диапазон можно задавать в разделе Type, как определенный тип, а можно непосредственно в разделе Var.

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

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

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

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

Peoples = (men, women);

Первое значение - 0, второе значение - 1 и т.д.

Максимальная мощность 65535 значений.

Строковый тип

Строковый тип относится к группе структурированных типов и состоит из базового типа Char. Строковый тип не относится к порядковым типам. Он определяет множество символьных цепочек произвольной длины до 255 символов.

В программе строковый тип объявляется, словом String. Поскольку String является базовым типом, он описан в языке и объявление переменной типа String осуществляется в Var. При объявлении переменной строкового типа за String в квадратных скобках целесообразно указывать длину строки. Для указания используется целое число от 0 до 255.

Fam: String;

Указание длины строки позволяет компилятору отвести под данную переменную указанное число байтов в ОЗУ. Если длина строки не указана, то в этом случае компилятор отведет под значение этой переменной максимальное возможное число байт (255).