Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal_lectures_small.doc
Скачиваний:
13
Добавлен:
23.03.2015
Размер:
339.46 Кб
Скачать
    1. Описание переменных и типов данных

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

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

Все описания переменных помещаются в разделе Var. В одном описании можно описывать произвольное количество переменных одного типа. Для переменных разных типов нужны отдельные описания.

<описание переменных>::= <имя> {"," <имя> } ":" (<конструкция типа>|<имя типа>).

Конструкция типа описывает нестандартные типы, сконструированные программистом, а имя типа – стандартные типы, либо сконструированные типы которым было ранее присвоено имя.

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

Типу данных можно присвоить имя в разделе Type с помощью описаний типов.

<описание типа>::= <имя> "=" (<конструкция типа>|<имя типа>).

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

Пример:

Const Top=100; {константе целого типа назначено имя Top}

Type Week=(Su,Mo,Tu,We,Th,Fr,Sa); {перечислению назначено имя Week}

WorkDay=Mo..Fr; {диапазону назначено имя WorkDay}

Span=1..Top; {диапазону назначено имя Span}

Row=array[1..20] of Char; {массивному типу из 20 элементов символьного типа назначено имя Row}

Logic=Boolean; {стандартному типу Boolean назначено другое имя Logic}

Var a,b,c: Real; {описаны переменные вещественного типа}

I,j,k,l,m,n:Integer; {описаны переменные целого типа}

d:array[1..10,'A'..'E'] of integer; {описан двумерный массив из 50 элементов целого типа}

T:logic; {описана переменная типа Logic}

W:char; {описана переменная символьного типа}

Draft:array[10..Top] of Week; {описан массив из 61 элемента типа Week}

Staff, PayRoll: Array [WorkDay, Span] of Row; {описаны 2 двумерных массива, состоящие из 500 элементов типа Row, или из 10000 элементов типа Char}

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

Этот оператор позволяет изменять значение переменных.

<присваивание>::= <имя> [<квалификатор>] ":=" <выражение>.

Знак присваивания := используется только в операторах присваивания и является их признаком.

Квалификатор указывает на часть сложной переменной.

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

<выражение>::= [<знак>] <терм> {<аддитивная операция> <терм>}.

<знак>::= "+"|"–"|"Not".

<аддитивная операция>::= "+"|"–"|"Or".

<терм>::= <фактор> {<мультипликативная операция> <фактор>}.

<мультипликативная операция>::= "*"|"/"|"div"|"mod"|"and".

<фактор>::= <константа> | <переменная> [<квалификатор>] | <отношение> | <вызов функции> | "(" <выражение> ")".

<отношение>::= <выражение> <операция отношения> <выражение>.

операция отношения>::= "=" | ">" | "<" | ">=" | "<=" | "< >" | "In".

Вызов функции будет определен позднее, в разделе о процедурах и функциях.

Квалификатор разный у разных сложных типов. Пока дадим определение квалификатора массивов:

<квалификатор элемента массива>::= "[" <индексное выражение> {"," < индексное выражение > } "]".

Здесь индексное выражение – это выражение того же типа, что и тип соответствующего индекса массива, или совместимого с ним типа (см. ниже о совместимых типах).

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

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

Арифметические операции.

Опера­ция

Тип 1-го операнда

Тип 2-го операнда

Тип результата

Примечания

+

Real или Integer

Real или Integer

Real / Integer

Результат Integer, если оба операнда типа Integer.

Real или Integer

Real или Integer

Real / Integer

*

Real или Integer

Real или Integer

Real / Integer

/

Real или Integer

Real или Integer

Real

Веществ. деление

div

Integer

Integer

Integer

Целочисл. деление

mod

Integer

Integer

Integer

Делен. по модулю

Логические операции. Оба операнда типа Boolean, результат типа Boolean.

Операция

Название

Not

Логическое отрицание

And

Логическое умножение, логическое И

Or

Логическое сложение, логическое ИЛИ

Операции отношения. Во всех операциях, кроме "In" оба операнда одного и того же простого или множественного типа, или один. В операции правый (второй) операнд – множество, а левый (первый) операнд – допустимый элемент этого множества. Результат типа Boolean, True, если отношение выполняется и False в противном случае.

Операция

Название

=

Равно. Значения двух выражений равны между собой, либо множества одного типа содержат одинаковые элементы

< >

Неравно. Значения двух выражений неравны между собой, либо множества одного типа содержат неодинаковые элементы

>

Больше. Значение выражения слева больше, чем значение выражения справа.

<

Меньше. Значение выражения слева меньше, чем значение выражения справа.

>=

Больше, либо равно. Значение выражения слева больше, либо равно значению выражения справа, либо множество справа является подмножеством множества слева

<=

Меньше, либо равно. Значение выражения слева меньше, либо равно значению выражения справа, либо множество слева является подмножеством множества справа

In

Элемент слева присутствует в множестве справа.

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

В Паскале 4 уровня приоритетов, 0 – наивысший, 3 – низший.

Приоритеты операций

Приоритет

Операции

0

Одноместные (знаки) – + Not

1

Мультипликативные * / div mod And

2

Аддитивные + – Or

3

Отношения = < > > < >= <= In

Пример:

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

Type Color=(Red, Green, Blue);

Var a,b:Real; i,j:Integer;

c:Char; L,m:Boolean;

paint:Color;

d,e:array[1..5] of Integer;

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

i:= 5; a:=4.3; c:='D'; L:=False;

paint:-green; d[1]:=5; d[2]:=4;

d[3]:=3; d[4]:=2; d[5]:=1;

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

b:=a+i*2; b=14.3

b:=(a+i)*2; b=18.6

m:=c>'A'; m=True

m:=(paint=Red) and

(i+4<=100) or L

or (c<>'D'); m=False

j:=d[i]*(2+d[2]); j=6

e:=d; Элементы массива e принимают такие же значения, как и элементы массива d

Примеры некорректного употребления операций:

b:=a+c; Типы переменных а и с несовместимы.

m:=paint=red or L; Сначала выполняется операция or с более высоким приоритетом над операндами red и L несовместимых типов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]