Понятие процедуры и функции

Процедуры и функции

Вопросы для самопроверки

Множества как типизированная константы

Пример использования множеств

Задача №1. Пользователь вводит 20 строк (маленькими буквами). Напечатать на экране в алфавитном порядке набор первых символов вводимых строк. Если в разных строках на первой позиции находится один и тот же символ, напечатать его один раз.

Пример:

program primer1;

type tchars = set of char;

var

s: string;

ch: tchars;

i: integer;

c: char;

begin

ch:=[];

for i:=1 to 20 do

begin

readln(s);

ch:=ch + [ s[1] ];

end;

for c:=’a’ to ‘z’ do

if c in ch then writeln(c);

end.

Задача №2. Пользователь вводит текст из 20 строк. Напечатать на экране все цифры (по одному разу), которые входят в текст.

Пример:

program primer2;

type

tdigits = set of ‘0’..’9’;

var

s: string;

dig: tdigits;

i, j: integer;

c: char;

begin

dig:=[];

for i:=1 to 20 do

begin

readln(s);

for j:=1 to length(s) do

if s[j] in [‘0’..’9’] then dig:=dig + [ s[j] ];

end;

for c:=’0’ to ‘9’ do

if c in dig then writeln(c);

end.

Задать множество как типизированную константу можно следующим образом:

<имя_константы> : SET OF <тип_эл-тов> = [<список_эл-тов>];

Пример:

type

digits = set of '0'..'9';

const

odds: digits = ['1', '3', '5', '7', '9'];

vowels: set of 'a'..'z' = ['a', 'o', 'e', 'u', 'i'];

Отметим, что множество нельзя задать в виде нетипизированной константы.

1. Что такое множество?

2. Чем множества отличаются от массивов? От записей?

3. Какое максимальное количество элементов может включать в себя множество?

4. Какие операции допустимы над множествами?

5. Учитывает ли множество количество вхождений в него элементов? Порядок следования элементов?


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

Пример: в программе нужно сначала найти максимум из чисел a и b, затем – из x и y, и т.д.

При написании исходного кода программы в такой ситуации, конечно, можно несколько раз записать одни и те же операторы в разных местах. Однако можно поступить и по-другому.

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

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

В языке программирования Паскаль существуют два типа таких подпрограмм – процедуры и функции.

Процедуры и функции – это именованные последовательности описаний и операторов (подпрограммы).

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

Пример:

x := sin(A); - здесь sin – это функция. Она возвращает значение.

writeln('Это проверка'); - здесь writeln – это процедура. Она выполняет действие (печать на экране), но результата не возвращает.

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

При использовании процедур или функций программа на языке Паскаль должна содержать:

а) объявление и описание процедуры или функции;

б) вызов процедуры или функции.

Если текст процедуры включается непосредственно в текст программы, то его необходимо поместить в разделе описания процедур и функций, до ключевого слова begin, означающего начало исходного кода самой программы (см. §4).

Для вызова процедуры или функции в тексте программы указывают имя подпрограммы, а также список фактических параметров (будут рассмотрены позже).

Вызов процедуры может быть записан отдельным оператором (например, writeln, readln).

Вызов же функции, в отличие от процедур, не может быть отдельным оператором, т.к. она всегда возвращает некоторое значение, которое необходимо куда-то сохранить или вывести (например, sin, sqr).

В программе можно использовать не только собственные процедуры и функции, но и уже готовые, хранящиеся в специализированных библиотеках (например, writeln, readln, sin, sqr). Для использования уже готовых процедур и функций нужно предварительно в разделе uses указать имя модуля (библиотеки), в котором они хранятся. Если используются готовые подпрограммы из разных модулей, то их имена перечисляются через запятую.

Пример: используем в программе процедуру ClrScr из модуля Crt, очищающую экран.

uses сrt;

begin

ClrScr;

end.