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 – досрочное завершение очередного прохода цикла. Эквивалентен передаче управления в самый конец циклического оператора.