Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

Преимущества перед другими языками:

1. Наиболее близок к современной методике и технологии программирования.

2. Успешно используется для записи программ на разных уровнях детализации, не прибегая к помощи блок-схем или специального языка проектирования программ.

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

 

АЛФАВИТ - это набор основных символов, с помощью которых составляется программа, а именно:

1. Латинские буквы: A до Z. Язык не различает большие и маленькие буквы.

2. Русские буквы: А до Я. Они используются в программах только для написания комментария - для наглядности программ.

3. Цифры: 0 до 9

4. Специальные символы:

а) <Знаки арифметических операций>: +; -; *; /

б) <Знаки отношений>: >; <; >=; <=; <>; =

в) <Разделители>:;,. () [ ] ' { }:= ^

г) Группа служебных слов: and, array, begin, const, do, downto, else, end, for, function, goto, if, in, label, mod, nil, not, of, or, packet, procedure, program, record, repeat, set, then, to, tуpe, until, var, while, with.

ОПЕРАТОР - это слово из латинских букв, определяющий вид обработки данных.

В Паскале имеется 8 типов операторов, каждый из которых имеет определенное назначение.

Операторы можно разбить на 3 группы.

I. Простые операторы (они в своем составе не содержат других операторов)

1. оператор присваивания;

2. оператор процедуры;

3. оператор перехода;

4. пустой оператор;

II. Производные операторы

1.оператор выбора,

2.оператор цикла (варианта),

3.оператор присоединения,

4.составной оператор.

III. Операторы ввода-вывода.

Операторы друг от друга в программе отделяются “;”. В программе они выполняются в порядке следования. Этот порядок может быть нарушен с помощью операторов перехода, которые сами определяют своих преемников.

 

ИМЕНА И ИДЕНТИФИКАТОРЫ. При обработке данных ЭВМ оперирует различными программными объектами: переменными величинами, функциями и т.д. При записи программ приходится ссылаться на используемые объекты. Для этой цели программным объектам даются индивидуальные имена - идентификаторы.

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

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

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

Правила написания идентификаторов:

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

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

· между двумя идентификаторами должен быть хотя бы один пробел,

· максимальная длина идентификатора 127 символов, все они значимы.

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

 

Пример: jk,ljra - верно

ghj gas - ошибка (содержится пробел)

1gas - ошибка(начинается с цифры)

 

ВЫРАЖЕНИЯ. Решение любой задачи – это процесс получения новых данных из исходных по особым правилам. Эти правила задаются с помощью выражений.

Выражения можно делить на два класса:

1. арифметические выражения;

2. логические выражения.

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

 

Пример: (((2 * (3 + 4) * sin(x)/cos(x)) + 5/6) + 9 div 4) * exp(x)

 

Логические выражения состоят из логических операндов, знаков логических операций и круглых скобок. Логическими операндами являются константы логического типа (true, false), переменные логического типа, указатели функций логического типа, отношения (a=b, c<=d).

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

4.1. Структура программы на языке Паскаль

Паскаль-программа состоит из:

1. Заголовка программы.

2. Тела программы (блока).

3. Точка (признак конца текста программы).

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

Тело программы. Блок состоит из шести разделов, которые должны следовать в строго определенном порядке.

1. Раздел меток (label).

2. Раздел констант (const).

3. Раздел типов (type).

4. Раздел переменных (var).

5. Раздел процедур и функций (procedure, function).

6. Раздел операторов (begin, end).

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

 

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

Формат: label M1,M2,...MN;

где Мi – идентификатор метки (может быть только цифровым).

label dbf, m1, vvod, 10;

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

Формат: сonst <(ИДЕНТ)>=<значение>;

const dlina1=100; k=0;

Ряд констант определены стандартно, к ним можно обращаться без предварительного описания (например число ПИ - Pi).

 

Раздел описания типов. Тип данных может быть описан непосредственно в разделе переменных, либо определяется идентификатором типа. Стандартные типы (integer, byte, real, char, boolean) не требуют описания в отличие от типов, образованных пользователем.

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

Формат: type <имя типа>=<значение типа>;

Например: 1. TYPE Zel = (10,11,...150);

var A1: Zel;

2. TYPE Month=(Jan,Feb,Mar,.. Dec);

var A: Month.

3. var f, fbh, k: real;

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

Реальные данные, с которыми работает программа, — это числа, строки и логические величины (аналоги 1 и 0, «да» и «нет», «истина» и «ложь»). Каждая единица информации хранится в ячейках памяти компьютера, имеющих свои адреса. На практике заранее неизвестно, в каких конкретно ячейках памяти во время работы программы будут записаны ее данные, поэтому в языках програм­мирования введено понятие переменной, позволяющее отвлечься от конкретных адресов и обращаться к содержимому памяти с помощью идентификатора или имени — как правило, последовательности, содержащей английские буквы, цифры, символы подчеркивания и начинающейся не с цифры. Например:

Hello

_SumOfReal

xl

H8_G7_F6

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

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

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

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

Каждой переменной дается имя и определяется ее тип. Это осуществляется в разделе переменных.

Формат: var <идентификатор>:<тип>;

var a,b,c: integer; A1: reаl;

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

 

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

Формат процедуры:

PROCEDURE <имя> {(параметры)};

<разделы описаний>;

<раздел операторов>;

end;

Формат функции:

FUNCTION <имя функции>{(параметры)}:<тип результата>

<разделы описаний>;

<раздел операторов>;

end;

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

 

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

Текст комментария ограничен символами { } и может содержать русские, латинские буквы, цифры, символы алфавита языка Паскаль. В тексте не должны содержатся знаки ограничители комментария { }. На длину ограничений нет.

Пример: {комментарий к программе Ex1 }

4.2. Понятие о типах данных

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

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

Тип любого программного объекта определяет:

1) множество допустимых значений, которые могут иметь объект;

2) множество допустимых операций, которые применимы к объекту;

3) формат внутреннего представления значения объекта (т.е. сколько байт ОП представляется данной переменной).

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

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

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

 

 
 

 


Рис. 4.1 Структура типов языка Паскаль

 

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

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

INTEGER - целочисленный тип;

а) множество допустимых значений -32768<-N<-32767 (целые);

б) допустимые операции - все арифметические действия, кроме деления;

в) внутреннее представление - 2 байт ОП.

REAL - вещественный тип:

а) множество вещественных чисел;

б) допустимые операции - все арифметические действия;

в) внутреннее представление - 6 байт ОП

BOOLEAN:

а) множество допустимых значений - 2 (True, false);

б) допустимые операции - все логические операции: AND,OR,NOT;

в) внутреннее представление - 1 байт.

CHAR:

а) множество допустимых значений кодовой таблицы ASCII;

б) запрещены в арифметических выражениях, возможны операции сравнения;

в) внутренне представление - 1 байт.

4.2.1. Стандартные типы данных и операции с ними

Тип целый (целочисленный) употребляется в обычном смысле, включает положительные, отрицательные и нуль и обозначается стандартным именем INTEGER. Все константы типа integer должны быть обозначены так:

CONST doz=12; decr = -1;

{нет десятичной точки}

Все переменные типа integer должны быть объявлены так:

VAR i, j, k: integer;

Выражение, присваиваемое целой переменной, должно принимать целое значение:

i:=doz*decr+6; нет

j:=doz+decr*7; десятичной точки

k:=i/j; Результат типа REAL

Деление вида i/j использовать нельзя.

Поскольку в аппаратуре компьютера для изображения чисел отводится фиксированное количество разрядов, то для каждой конкретной ЭВМ существует константа с именем MAXINT такая, что любое представимое в компьютере целое число N должно удовлетворять условию

-MAXINT <= N <= MAXINT

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

program find;

begin write(maxint) end.

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

i*j div k на i*(j div k)

200*200 div 100 на 200*(200 div 100)

div (divide - делить) - деление и отсечение дробной части, целочислен-ное деление.

Данные целочисленного типа могут быть представлены как в десятичной, так и в шестнадцатеричной системах. Если число представлено в шестнадцатеричной системе, перед ним без пробела записывается знак $. Диапазон изменения шестнадцатеричных чисел $OOOO..SFFFF.

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

+ сложение

- вычитание

* умножение

div деление и отсечение дробной части

mod (modulo - определение остатка) взятие остатка при делении.

Первые три операции в пояснениях не нуждаются. Div – есть целочисленное деление. Знак результата определяется по обычным алгебраическим правилам.

7 div 2 = 3; 3 div 5 = 0; (-7) div 2 = -3; (-7) div (-2) =3;

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

ABS(X) - х - целое, результат - абсолютная величина х;

SQR(X) - х - целое, результат - х в квадрате;

TRUNC(X) - х - вещественное, результат - целая часть значения х (дробная часть отбрасывается и результат не округляется);

TRUNC(5.2)-5 TRUNC(5.8)→5

ROUND(X) - x - вещественное, результат - целое.

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

SUCC(I) (successor - последующий) - дает следующее за i число;

PRED(I) (predecessor - предшествующий) - дает предшествующее i число.

Вещественный тип данных описывается стандартным идентификатором REAL - это числа с дробной частью. Вещественное число может быть отрицательным, нулем или положительным в диапазоне от 1Е-38 до 1Е+38. Мантисса может содержать до 11 значащих цифр.

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

Вещественные десятичные числа в форме с плавающей точкой представлены в экспоненциальном виде mЕр, где

m - мантисса (целое или дробное число с десятичной точкой)

Е - означает "10 в степени"

р - порядок (целое число).

Все константы типа REAL должны быть объявлены так:

CONST PI=3.1415; сouр=5.18Е-3;

Все переменные типа REAL должны быть объявлены так:

VAR X,Y,Z: REAL;

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

х:=pi/180.0; или 180

y:=i/j; вещественный результат автоматически

z:=i+2; преобразуется из integer в real

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

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

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

Литерный тип данных описывается стандартным идентификатором CHAR (character - символ, печатный знак, литера). Значениями литерного типа являются элементы из набора литер клавиатуры ЭВМ. Каждая переменная литерного типа может принимать значение только одной литеры.

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

Все константы типа CHAR при объявлении надо заключать в апострофы

CONST p='a';q='*'; r='6';

Все переменные типа CHAR должны быть объявлены так:

VAR а, b, с: char;

Значения литерных переменных также заключаются в апострофы:

x:='L'; naam:= '8';

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

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

Однако, литеры можно сравнивать. Результат будет логического типа (т.е. false - ложь или true - истина). Литеры сравниваются на основе их порядковых номеров в кодовой таблице: A<a<B<b<...<Z<z<0<1<...<9

Следовательно, литерный тип является упорядоченным, и с литерами определены стандартные функции:

PRED (x) - дает предшествующий элемент кодовой таблицы;

SUCC(x) - дает последующий элемент кодовой таблицы.

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

ORD(с) - дает порядковый номер литеры в множестве значений типа CHAR;

CHR(i) - дает литеру (значение типа CHAR) с порядковым номером i.

Эти функции являются обратными по отношению друг к другу, т.е. CHR(ORD(c))=c и ORD(CHR(i))=i

 

Логический тип описывается стандартным идентификатором BOOLEAN. Этим названием он обязан английскому математику Джоржу Булю (Bool). Он первым начал в середине прошлого века изучение логики с формальных позиций. В честь него исчисление высказываний называют иначе "булевой алгеброй", а логические значения - булевскими.

Под высказыванием понимается любое предложение, в отношении которого можно однозначно сказать, истинно оно или ложно, например,"3>2", "Осло - столица Кубы" и т.д.

Значение истинности некоторых высказываний может изменяться в зависимости от обстоятельств, при которых сделаны эти высказывания. Например, истинность высказывания "сегодня - среда" зависит от того, в какой день недели оно сделано, а высказывания"х<0" - от конкретного значения числовой переменной х. В связи с этим возникает понятие логической иди булевской переменной, которая может принимать одно из двух возможных логических значений истина - true или ложь - false, подобно тому как в математике имеется понятие переменной, принимающей числовые значения. В частности, каждому высказыванию можно сопоставить определенную логическую переменную.

Логические выражения очень часто используются в программах. Без них невозможно обойтись при записи условных операторов, а также циклов WHILE и REPEAT. В языке Паскаль используются следующие знаки операций сравнения <, <=, >, >=, =, <>. Все эти операции дают результат типа Boolean.

Логические переменные должны быть объявлены так:

VAR ok, alv: Boolean;

Логическое выражение, т.е. выражение, содержащее операцию сравнения, должно приводиться к значению false или true.

В качестве иллюстрации рассмотрим следующую программу:

program Ex2;

var x: integer; bol: Boolean;

begin

x:=4; bol:=x>3; writeln(bol);

bol:=x<3; writeln(bol);

end.

Значения булевым переменным могут присваиваться или непосредственно bl:=true; b2:=false; или путем рассмотрения логических выражений (как в примере).

Над аргументом логического типа определены следующие операции (по старшинству): NOT (не) - отрицание; AND (и) - конъюнкция;OR (или) - дизъюнкция.

Логический тип упорядочен и определен так, что false<true. ORD(false)=0, ORD(true)=1.

В языке Паскаль нельзя записать двустороннее неравенство 1<х<2. Надо: (х>1) and (х<2). Если необходимо записать условие, что х не лежит в диапазоне от -2 до2, то not((x<2)and(x>-2)) или (х<=2)ог(х>=2). В задачах, решаемых на практике, могут возникнуть и другие самые разнообразные логические выражения.

В Паскале предусмотрены следующие стандартные функции, дающие результат логического типа;

ODD(x) - true, если х нечетно;

EOLN(f) - end of line - true, если указатель текстового файла f стоит на разделителе строк;

EOF (f) - end of file - true, если указатель последовательного файла дошел до его конца.

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

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

Таблица 4.1. Арифметические операции.

Опера-ция Действие   Типы операндов   Тип результата   Выражение   Результат  
Бинарные        
+ Сложение integer integer 2+3  
real real 2.4+5E1 52.4
- Вычитание integer integer 10-7  
real real 15.76-6.13 9.63
* Умножение integer integer 4*6  
real real 3.3*1.5 4.95
/ Деление integer real 6/2  
real real    
div Целочислен-ное деление Integer Integer 7 div 2  
mod Остаток Integer Integer 7 mod 2  
Унарные        
- Отрицание Знака Integer Integer   -17
real Real -3.6 3.6
             

 

Таблица 4.2. Операции отношения.

Операция Название Выражение Результат
= <> > < >= <= IN   Равно Не равно Больше Меньше Больше или равно Меньше или равно Принадлежность   А=В а<>В А>В А<В А>=В А<=В A in M   TRUE, если А=В TRUE, если а<>В TRUE, если А>В TRUE, если А<В TRUE, если А>=В TRUE, если А<=В TRUE, если А находится в списке М  

Сравниваемые величины могут принадлежать к любому скалярному (integer, real, char, boolean) или перечисляемому типу данных. Результат всегда имеет булевский тип и принимает одно из двух значений: TRUE или FALSE.

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

Операция Приоритет Вид операции
NOT * / div mod and + - OR XOR = <> > < >= <= IN   I(высший) II III IV(низший)   Унарная операция Операция типа умножения Операция типа сложения Операция отношения  

 

4.2.2. Пользовательские типы данных

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

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

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

TYPE days=(sun, mоn, tue, wed, thu, fri, sat);

season=(wnt, spr, sum, aut);

Можно поступить иначе, убрав определение типа из раздела TYPE и включив его в раздел VAR

VAR today: sun, mon, tue, wed, thu, fri, sat;

color: yel, red, wht, blc, grn, blue;

Ниже даны определения двух перечисляемых типов и соответствую-щих переменных

TYPE days=(sun, mon, tue, wed, thu, fri, sat);

status=(wedded, unwed);

{Во втором случае использовано слово wedded, а не wed, поскольку все имена в перечислении должны быть различны}

VAR today, tomorrow: days;

Переменные today, tomorrow могут принимать только одно из перечисленных значений (sun, mon, tue, wed, thu, fri, sat). Попытка присвоить им любое другое значение вызовет программное прерывание.

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

READ(today, tomorrow); WRITE (fri, today);

Можно присваивать значения переменным перечисляемого типа

today:=mon; tomorrow:=today;

но только в том случае, когда переменная и значение относятся к одному перечислению.

today:=unwed;

К перечисляемому типу неприменимы арифметические действия;

today:=sat+sun;

Константы перечисляемого типа имеют порядковые значения, начинающиеся c нуля

writeln(ord(mon), ord(tue), ord(sun)); 120

Следовательно, можно вычислять предшествующий и последующий элементы

today:=pred(mon);

tomorrow:=succ(today);

writeln(ord(today), ord(tomorrow)); 5 6

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

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

TYPE daytype =(sun, mon, tue, wed, thu, fri, sat);

VAR weekday:mon..fri; {интервал типа daytype} T,S:2..12; m:1..3; {интервал типа integer}

GR:'a'..'d'; {интервал типа char}

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

VAR price: 1.99..5.99; {неверно}

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

Пример

TYPE dni=1..31;

VAR rab, hol: dni;

или

CONST min=1; max=31;

TYPE dni=min.. max;

VAR rab, hol: dni;

Интервалы перечислений подчинены тем же самым ограничениям, что и сам перечисляемый тип. Так, элементы типа mon..fri не могут читаться или печататься, к ним нельзя применять арифметические действия, их нельзя присваивать переменным никаких других типов кроме mon..fri и daytype (где daytype - базовый тип, по отношению к которому mon..fri - интервал и они, следовательно, совместимы).

Константы любого интервального типа имеют порядковые значения, совпадающие с их порядковыми значениями в базовом типе. Так, в интервале fri..sat, базовый тип которого daytype, значения ORD(fri) и ORD(sat) будут соответственно 5 и 6, но не 0 и 1.

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

 

Read(Т);

S:=sqr(T);

write(s);

 

Более того, можно смешивать значения из различных интервалов:

m:= s + 2;

1..32..12 -maxint..maxint

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

If (s>12)or(s<2) then write('s вне границ');

В хорошо написанных программах Вы скорее увидите

VAR s: 2..12; нежели VAR s: integer;

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

Read(gr);

if gr<='B' then write(gr);

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

 

Таблица 4.4. Диапазоны значений целых чисел

Длина,байт   Название типа   Диапазон значений  
  byte shortint word integer longint   0...255 -128...127 0...65535 -32768...32767 -2147483648...2147483647  

 

Вещественное число в Паскале занимает от 4 до 10 смежных байт.

Таблица 4.5. Диапазоны значений вещественных чисел

Длина,байт   Название типа   Количество значащих цифр Диапазон десятичного порядка
  single real double extended comp 7..8 11..12 15.. 16 19.. 20 19.. 20 -45...+38 -39...+38 -324...+308 -4951...+4932 -263+l...+263-l

 

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

Frac(x) - дробная часть числа;

Int(x) - целая часть числа;

Random - равномерное псевдослучайное число (0<=х<1) Random (х) - равномерное псевдослучайное число (0<=i<х)

Как видим, в Паскале имеется богатая гамма вещественных чисел, однако доступ к типам Single, Double и Extended возможен только при особых режимах компиляции, так как эти типы рассчитаны на аппаратную поддержку арифметики с плавающей точкой. Особое положение в Паскале занимает тип Соmр, который трактуется как вещественное число без экспоненциальной и дробной частей. Фактически Comp - это "большое" целое число со знаком, сохраняющее 19-20 значащих десятичных цифр. В то же время в выражениях Comp полностью совместим с любыми другими вещественными типами: над ним определены все вещественные операции, он может использоваться как аргумент математических функций и т.д.

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

 

Вопросы для самоконтроля:

1. Назовите состав Паскаль–программы?

2. Что такое переменная?

3. Дайте определение идентификатора?

4. Какие вы знаете типы операторов?

5. Что понимается под типом данных?

6. Какие типы данных относятся к простым типам?

7. Какие типы данных относятся к структурированным типам?

8. Какие операции в Паскале Вы знаете?

9. Используемые в Паскале простые и вещественные типы.


ГЛАВА 5




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 7584; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.249 сек.