Автор работы: Пользователь скрыл имя, 20 Февраля 2011 в 19:37, лекция
Программа на языке Паскаль состоит из следующих частей:
Заголовок
Подключение модулей
Раздел описаний
Begin
Раздел операторов
Выражение – это формальное правило для вычисления нового значения. Выражением может быть одиночный объект (константа, переменная, обращение к функции) или несколько операндов, разделённых знаками операций.
Операции – определяют действие по вычислению новых значений, исходя из значения операндов.
Все операции Паскаля можно разделить на 4 группы по приоритетам: 1) унарные операции (логическое not, операция взятия адреса); 2) мультипликативные операции (умножение, деление, деление нацело, взятие остатка от целочисленного деления, логическое and, операции сдвига – shl и shr); 3) аддитивные операции (сложение, вычитание, логическое or, логическое xor); 4) операции отношения (проверка на равенство или неравенство, операции сравнения, операция проверки принадлежности к множеству – in).
Для логических выражений характерно то, что их значение может стать известным ещё до конца вычисления всего выражения. Такой способ называется усечённым способом вычисления логических выражений.
Options – Compiler – Boolean
Evaluation – выбор типа вычисления логических
выражений.
Операторы.
Это синтаксические конструкции, предназначенные как для записи действий по преобразованию данных, так и для задания порядка выполнения других действий. Язык Паскаль содержит всего 11 операторов: 1) оператор присваивания; 2) оператор процедуры; 3) оператор перехода; 4) составной оператор; 5) условный оператор; 6) оператор варианта; 7, 8, 9) операторы цикла; 10) оператор над записями; 11) пустой оператор. Кроме того, существуют операторы машинного кода и ассемблера.
Оператор присваивания.
<идентификатор> := <выражение>;
Выражение должно давать результат такого же типа, как и переменная. Присваивание допустимо для всех типов, кроме файловых.
Оператор процедуры.
Другое название – вызов процедуры.
<имя процедуры>(<параметры>);
Оператор процедуры вызывает выполнение операторов, которые находятся в теле процедуры.
Оператор перехода.
Этот оператор вызывает передачу управления оператору, которому предшествует метка.
goto <метка>;
Все метки, используемые в блоке, должны быть описаны, причём не более одного раза.
Метка, указанная в операторе перехода, должна помечать оператор, находящийся в том же блоке.
Переход внутрь структурного оператора может вызвать непредсказуемые эффекты, хотя компилятор не выдаст сообщение об ошибке.
Составной оператор.
Это последовательность операторов программы, заключённая в операторные скобки begin-end.
Условный оператор.
С помощью условного
оператора реализуется
if <выражение> then <оператор1> else <оператор2>;
if <выражение> then <оператор>;
if <выражение1> then if <выражение2> then <оператор1> else <оператор2>;
else всегда относится
к ближайшему if.
var a, b, c, d: integer;
begin
a := 1; b := 2; c := 3; d := 4;
if a > b then if c < d then if c < 0 then c := 0 else a := b;
Значение a не изменится.
If a > b then if c < d then if c < 0 then c := 0 else else else a := b;
Значение a станет равным 2.
Рассмотрим пример программы, которая вводит произвольное десятичное число от 0 до 15 и выводит его в шестнадцатеричном формате.
program Hex1;
var ch: char;
n: integer;
begin
write(‘n = ‘); readln(n);
if (n >= 0) and (n <= 15) then
begin
if n < 10 then ch := chr(ord(‘0’) + n)
else ch := chr(ord(‘A’) + n - 10);
writeln(‘n = ‘, ch);
end
else writeln(‘Ошибка.’);
end.
Оператор варианта.
Реализует структуру «выбор», то есть возможность выбирать из нескольких альтернатив. Оператор работает следующим образом: сначала вычисляется выражение. Это выражение иногда называется селектором или ключом выбора. Выражение должно давать результат любого порядкового типа. После этого вычисленное значение сравнивается с константами выбора. При совпадении с какой-либо константой выполняется оператор, помеченный этой константой. На этом выполнение оператора варианта заканчивается. Если значение не совпадает ни с одной из ветвей, то выполняется оператор else, если он есть. Если ветвей нет, то оператор не производит никаких действий.
case <выражение> of
<константа выбора1>: <оператор1>
<константа выбора2>: <оператор2>
…
<константа выбора n>: <оператор n>
[else <оператор>]
end;
Пример.
var color: (Green, Yellow, Red);
begin
color :=
case color of
Red: x := y + 2;
Yellow: x := y – 2;
Green: x := y;
end;
Кроме одиночных констант в альтернативах могут быть заданы несколько констант для каждой альтернативы (в этом случае они разделяются запятыми) или диапазоны значений. Пример:
case switch of
1..3: Proc1;
4, 10..20: Proc2;
5, 6: Proc3;
else Proc4;
end;
var ch: char;
begin
readln(ch);
case ch of
‘n’, ‘N’: writeln(‘Нет’);
‘y’, ‘Y’: writeln(‘Да’);
end
end.
При использовании оператора варианта должны выполняться следующие правила: 1) Значение ключа выбора должно принадлежать порядковому типу. 2) Все константы альтернатив должны быть типа совместимого с типом ключа выбора. 3) Все константы в альтернативах должны быть уникальны в пределах оператора варианта. Диапазоны не должны пересекаться. 4) Синтаксис языка предусматривает только один оператор в каждой альтернативе. Если необходимо выполнить несколько операторов, следует образовывать составной оператор.
Операторы цикла.
В Паскале существует три вида циклов: цикл с предусловием, цикл с постусловием и цикл с параметром.
Оператор цикла с предусловием.
while <выражение> do <оператор>
В качестве примера использования while рассмотрим программу, выводящую минимальное, не равное нулю вещественное число эпсилон, которое после добавления его к единице ещё даёт результат, отличный от единице.
var epsilon: real;
begin
epsilon := 1;
while epsilon / 2 + 1 > 1 do epsilon := epsilon / 2;
writeln(‘Машинный epsilon = ‘, epsilon);
end.
Оператор цикла с постусловием.
repeat
<операторы>
until <выражение>
Пример: программа вводит символ и печатает его код, пока не будет нажата клавиша Enter.
begin
repeat
readln(ch);
writeln(ch, ‘=’, ord(ch));
until ord(ch) = cr;
end.
Оператор цикла с параметром.
Используется тогда, когда заранее известно число повторений цикла. Этот оператор предусматривает повторное выполнение тела цикла с одновременным изменением по правилу арифметической прогрессии параметра цикла.
for <имя> := <выражение1> to <выражение2> do <оператор>
for <имя> := <выражение1> downto <выражение2> do <оператор>
Выполнение оператора цикла с параметром:
1) Вычисляется выражение 1, определяющее начальное значение параметра.
2) Параметру
цикла присваивается это
3) Параметр цикла
сравнивается с конечным
4) Выполняется тело цикла.
5) Значение параметра изменяется на 1. Переход к шагу 3).
Пример: программа, находящая сумму целых чисел от 1 до n.
var i, n, s: integer;
begin
write(‘N = ‘); readln(n);
s := 0;
for i := 1 to n do s := s + i;
writeln(‘Сумма = ‘, s);
end.
На параметр цикла накладываются следующие ограничения:
1) В качестве параметра цикла должна использоваться простая переменная, описанная в текущем блоке, и эта переменная должна принадлежать к порядковым типам.
2) Типы выражений для вычисления начального и конечного значений параметра цикла должны быть совместимыми с типом параметра цикла.
3) В теле цикла запрещается явное изменение значений параметра цикла.
Пустой оператор.
Никак не обозначается и никак не выглядит. Может использоваться, например, перед операторной скобкой end.
Пример:
repeat until Keypressed;
Составные типы.
В Паскале есть следующие составные, или структурные, типы: регулярные типы (массивы), комбинированные типы (записи), строки, множества, файлы, объекты.
Массивы.
Массив – это конечная именованная совокупность элементов одного типа.
Массив является структурой с прямым доступом, к каждому элементу можно обратиться по его номеру. Этот номер называется индексом.
type <имя> = array[<тип индекса>] of <тип элемента>;
В качестве типа индекса можно задавать любой порядковый тип, кроме Longint. Элементами массива может быть любой тип, кроме файлового.
mas = array[1..10] of real;
color = array[byte] of mas;
m2 = array[char] of Boolean;
Размерность массива – количество индексов, заданных при описании. В Паскале оно неограниченно. Количество элементов в массиве фиксировано, то есть должно быть определено до трансляции программы.
Многомерные массивы располагаются в памяти так, что быстрее всего меняется самый правый индекс. Максимальный объём памяти под все переменные – 64 кБ.
Строковые типы.
Строки используются для хранения последовательностей символов. В Паскале существует три типа строк:
1) Стандартные. Определяются ключевым словом string.
2) Определяемые
программистом на основе
3) Строки в динамической памяти.
var st: string;
st1: array[0..255] of char;
str: string[4];
const st7: string[15] = ‘Пример строки’;
Такая строка может содержать от 0 до 255 символов. Каждый символ в такой строке занимает 1 байт.
Под строку st отводится 256 байт памяти. При этом в нулевом элементе строки хранится длина строки в символьном виде.
begin
st := ‘Это строка’;
Для строк применима операция конкатенации, или склеивания. Обозначается эта операция символом «+».
var line: string;
begin
line := line + ‘стала длиннее’;
Для того, чтобы узнать длину строки: ord(line[0]) или length(<имя строки>).
Кроме операции склеивания над значениями строковых типов определены операции отношения. При выполнении этих операций действуют следующие правила: