Pascal. Массивовый тип данных. Организация одномерных, многомерных массивов. Записи

Описание массива задается так:

<имя типа> = array [<список индексных типов>] of <тип>,

где <имя типа> - идентификатор, array и of – зарезервированные слова, [<список индексных типов> - список из одного или нескольких индексных типов, разделенных запятыми, <тип> - любой тип языка. Компоненты массива являются переменными одного типа (!).

пример: type vector10 = array [1..10] of real;

Определение переменной как массива: var a,b : array [1..10] of real; или var a,b : vector10;

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

type mat = array [0..5] of array [-2..2] ofreal;

или type mat = array [0..5, -2..2] of real; – двумерный массив.

Можно одним оператором «=» передать все элементы одного массива другому массиву того же типа:

var a,b : array[1..5] of real;

Begin

…….

a := b;

…….

end.

Сравнивать два массива можно поэлементно:

for i:=1 to 5 do

Begin

if a[i] := b[i] then

writeln(‘Массивы равны’);

end;

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

Структура объявления типа записи:

<имя типа> = RECORD <список полей> END

<имя типа> - идентификатор, RECORD, END– зарезервированные слова, <список полей> - последовательность разделов записи, между которыми ставится «;».

Type

birthday = recordздесь birthday – запись с полями day, month, year, hour

day, month, year : integer; переменные a и b содержат записи типа birthday

hour : real;

end;

var a,b : birthday;

Как и в массиве, значения переменных типа записи можно присваивать другим переменным того же типа: a := b.

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

a.day := 27;

b.year := 2000;

Вложенные поля:

type Birthday = record

day, month, year : integer;

hour : real

end;

Var

с : record

name : string;

bd : Birthday

end;

Begin

……

if c.bd.year = 200 then ….

end.

Чтобы упростить доступ к полям записи, используется оператор присоединения:

WITH <переменная> DO <оператор>

WITH, DO– ключевые слова, <переменная> - имя переменной типа запись, за которым следует список вложенных полей (не обязательно), <оператор> - любой оператор языка.

with c.bd do month := 9;

Записи с вариантными полями – когда запись состоит из одного фиксированного поля и вариантной части, которая задается предложением CASE … OF. Вариантная часть состоит из нескольких вариантов. Каждый вариант определяется константой выбора, за которой следует двоеточие и список полей, заключенный в круглые скобки. Пример:

Type

form = record

name : string;

case byte of

0: (birthplace : string [40]);

1: (country : string [20];

entryport : string [20];

entrydate : 1..31;

exitdate : 1..31);

end;

11. Операторы языка Pascal. Простые операторы. Управляющие операторы: конструкция оператора if, оператор выбора.

Один из самых используемых операторов языка – оператор присваивания «:=».

В языке определены арифметические операции: + (сложение), - (вычитание), * (умножение), / (деление), div (деление целочисленное).

mod – получение остатка от целочисленного деления (пример 5 mod 2 = 1).

Операции отношения: = (равно), <> (не равно), < (меньше), > (больше), <= (меньше или равно), >= (больше или равно).

Логические операции: not – логическое НЕ, and – логическое И, or – логическое ИЛИ, xor – исключающее ИЛИ.

Составной оператор – последовательность произвольных операторов программы, заключенная в операторные скобки – зарезервированные слова begin и end.

Язык допускает произвольную глубину вложенности операторов:

Begin

….

Begin

….

....

end;

….

end;

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

Условный оператор.

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

Структура:

IF <условие> THEN <оператор1> ELSE <оператор2>

Работает по следующему алгоритму: вначале вычисляется условное выражение <условие>, если результат есть TRUE (истина), то выполняется <оператор1>, если FALSE (ложь), то <оператор2>.

Примеры:

Var var

x, y, max : integer; g,k : real;

Begin begin

……… ……

if x > max then ifg > 5 then

y := max k := k+g

else else ifg = 5 then

y := x; k := 0

……… elsek := k-g;

end. end.

Часть ELSE <оператор2> может быть опущена. Тогда при значении TRUE условного выражения выполняется <оператор1>, иначе он пропускается.

Оператор выбора.

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

Структура: CASE <ключ_выбора> OF <список_выбора> [ELSE <операторы>] END

<список_выбора> - одна или более конструкций вида:

<константа_выбора > : < оператор>;

<константа_выбора > - константа того же типа, что и <ключ_выбора>.

Работает следующим образом: вначале вычисляется значение <ключ_выбора>, затем в последовательности операторов <список_выбора> отыскивается тот, которому предшествует константа, равная вычисленному значению. Найденный оператор выполняется, после чего оператор выбора завершает работу. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению ключа выбора, то управление передается операторам, стоящим за словом ELSE. Часть ELSE <операторы> можно опускать.

Пример:

Program Calc;

Var

operation : Char; {знак операции}

x, y, z : real;

stop : Boolean;

Begin

stop := false;

Repeat

wtiteln;

write(‘x, y =’);

readln(x, y);

write(‘операция:’);

readln(operation);

case operation of

‘+’ : z := x + y;

‘-’ : z := x - y;

‘*’ : z := x * y;

‘/’ : z := x / y;

Else

stop := true;

end;

if not stop then

writeln(‘ результат =', z)

Until stop

end.

12. Операторы языка Pascal. Циклические операторы: for, while, repeat.

Имеются три оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программ.

1) Счетный оператор цикла FOR. Структура:

FOR <параметр цикла> := <начальное значение> TO <конечное> DO <операторы>

<параметр цикла> - переменная типа integer, <начальное значение> и <конечное значение> - выражения того же типа.

Вначале вычисляется выражение <начальное значение> и осуществляется присваивание

<параметр цикла> := <начальное значение>. После этого циклически повторяются:

а) проверка условия <параметр цикла> <= конечное значение>. Если условие не выполнено, то оператор завершает свою работу.

б) выполнение оператора<оператор>.

в) наращивание переменной <параметр цикла> на единицу.

Пример: {сумма всех целых чисел в диапазоне от 1 до N}

program sum_of_integer;

var i, N, s : integer;

Begin

write(‘Vvedite N’);

readln(N);

s := 0;

for i := 1 to N do

s := s+i;

writeln(‘Sum =’, s)

end.

2) Оператор цикла WHILE. Структура:

WHILE <условие> DO <оператор>.

<условие> - выражение логического типа.

Если выражение <условие> имеет значение TRUE, то выполняется оператор <оператор>. После чего вычисляется выражение <условие> и его проверка повторяется. Если <условие> имеет значение FALSE, то оператор прекращает свою работу.

Пример:

program epsilon; {вычисляет и выводит на экран эпсилон}

var eps : real;

Begin

eps := 1;

while eps/2 + 1 > 1 do

eps := eps/2

writeln(‘epsilon =’, eps)

end.

3) Оператор цикла REPEAT..UNTIL.

REPEAT <тело цикла> UNTIL <условие>

<тело цикла> - произвольная последовательность операторов

Операторы <тело цикла> выполняются хотя бы раз, после чего вычисляется выражение <условие>: если его значение FALSE, операторы <тело цикла> повторяются, если TRUE – то оператор завершает свою работу.

Пример:

program codes_of_char; {вводит символ и выводит на экран его код}

var ch : char; {вводимый символ}

const cr = 13; {его код}

Begin

Repeat

readln(ch);

writeln(ch,’ = ‘, ord(ch))

until ord(ch) = cr

end;

Пара REPEAT..UNTILподобна паре BEGIN..END, поэтому точку с запятой перед UNTIL ставить не обязательно.

Для гибкого управления циклическими параметрами FOR, WHILE, REPEAT включены две процедуры:

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

CONTINUE – досрочное завершение очередного прохода цикла. Эквивалентен передаче управления в самый конец циклического оператора.

Наши рекомендации