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

2.17 Пустой оператор

Пустой оператор является в некотором смысле парадоксальной конструкцией, так как он, во-первых, не имеет «графического» начертания, а, во-вторых, не производит никаких действий. Необходимость введения такого понятия диктуется в первую очередь синтаксическими причинами. Синтаксис языка определяет символ ';' (точка с запятой) как разделитель операторов. Таким образом, последний оператор, например, в составном операторе не должен завершаться этим символом, так как после него не следует оператор, а идет служебное слово end:

begin S1;S2;...;SN end

Однако, если предположить, что между последним оператором SN и служебным словом end расположен пустой оператор, то становится допустимой такая форма записи:

begin S1;S2;...;SN; end

что в ряде случаев более предпочтительно.

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

writeln('нажмите любую клавишу');

repeat until Keypressed;

Экзотические конструкции:

1) begin S1;;;;;S2; end

2) if Cond then begin end

else while true do;

3) if Cond then;

Все эти примеры операторов синтаксически правильны (но бесполезны).

2.18 Ограниченные типы

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

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

Пример:

1..10 | ограничение некоторого

-100..100 | целого типа

'a'..'z' | ограничение символьного типа

Описание переменных:

var

s:1..10;

Можно ввести идентификатор для нового типа. Для этого в программе вводится раздел описаний, начинающийся со служебного слова type:

type

digits=0..9;

sto=-100..100;

letter='a'..'z';

var

n:digits;

Схема программы в более общем виде:

const |

<описания констант> |

type | любой из этих разделов

<описание типов> | может отсутствовать

var |

<описания переменных> |

begin

<операторы>

end.

Ограниченный тип наследует все свойства базового типа (в частности, набор допустимых операций).

Активно используйте ограниченные типы:

  • наглядность программы,

  • контроль ошибочных выходов значений за пределы заданного диапазона (как при трансляции, так и при выполнении).

2.19 Функции

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

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

function <имя функции><формальные параметры>:<тип значения>;

<описания локальных констант, типов, переменных>

begin

<операторы>

end;

Примеры:

var

m,n,k:real;

function max(x,y:real):real;

{максимум двух чисел}

begin

if x>y then max:=x else max:=y

end;

begin

writeln('введите три числа');

readln(m,n,k);

writeln('максимум=',max(max(m,n),k) )

end.

2)

type

natural=0..maxint;

var n:natural;

function sumDigits(a:natural):natural;

{вычисляет сумму цифр числа a}

var m,b:natural;

begin

m:=0;

repeat

b:=a mod 10;

m:=m+b;

a:=a div 10;

until a=0;

sunDigits:=m

end;

begin

writeln('введите число');

readln(n);

writeln('Сумма цифр числа ',n,' = ',sumDigits(n));

end.

<формальные параметры>::=

(<описание параметров>{;<описание параметров>})

<описание параметров>::=

<идентификатор> {,<идентификатор>} : <идентификатор типа>

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

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

Чтобы функция действительно вычисляла нужное значение, необходимо присутствие в теле функции оператора присваивания (новая форма!) в виде:

<имя функции>:=<выражение, вычисляющее возвращаемое значение>;

Таких операторов может быть несколько. Хотя бы один должен работать.

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

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