Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры ОАиП(теория).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
151.01 Кб
Скачать

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

Многократно повторяющиеся вычисления рекомендуется оформлять в виде отдельного блока (подпрограммы). Обращение к подпрограмме реализуется в любой точке головной программы. В языке Pascal подпрограмму можно оформить двумя способами:

1.в виде подпрограммы-функции

2.в виде подпрограммы-процедуры

Отличия процедуры и функции:

1.способом описания заголовка

2.способом вызова в головной программе

3.в теле функции присутствует оператор, который имени функции присваивает значение вычисленного выражения.

Функции пользователя:

Формат: function <имя функции> [(<список формальных параметров>)]: <тип возвращаемого значения>;

<описания>

…….

begin

<оператор 1>

….

<оператор n >

<имя функции>:=<выражение>;

end;

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

Например:

<переменная> := <имя функции> [(<список фактических параметров>)];

При вызове все формальные параметры заменяются фактическими, образуя

так называемое модифицированное тело функции и выполняется модифицированное тело так, как если бы оно стояло в точке вызова.

Процедуры пользователя

Формат:

procedure <имя процедуры> [(список формальных параметров)];

<описание>

begin

<оператор 1>

<оператор n>

end

Вызов процедуры:

<имя процедуры> [(список фактических параметров)];

Область действия переменных

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

Переменные, объявленные во внешнем блоке по отношению к внутреннему

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

37. Алгоритмы генерирования k-элементных подмножеств множества

Без ограничения общности можно принять, что множество х = { 1, 2, 3,…n}, тогда каждому к-элементному подмножеству взаимнооднозначно соответствует возрастающая последовательность длины «к» с элементами из х. Например, подмножеству {3, 5, 1} соответствует {1, 3, 5}.

Пример:

Генерирование всех к-элементных подмножеств n-элементного множества.

Var

i, p, k, n : Integer;

b: Array [1..10] of Integer;

Begin

ClrScr;

Write (‘ Введите n, k ‘);

Readln (n, k);

for i:=1 to n do

b [ i ]:= i;

p:= k;

while p > = 1 do

begin

for i:=1 to k do

Write ( b [ i ], ‘ ‘);

Writeln;

if b [ k ] = n then

p:= p –1

else

p:= k;

if p >= 1 then

for i:= k downto p do

b [ i ]:= b [ p ] + i – p +1;

end;

ReadKey;

End.

6. Использование множеств для решения задач

Множество – структурированный тип данных. Представляет собой

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

называется элементом множества и занимает в памяти 1 бит. Количество элементов колеблется от 0 до 255. Все эти элементы должны принадлежать одному из

скалярных типов кроме вещественного. Этот тип называется базовым. Значения элементов множества указываются в квадратных скобках.

Объявление множества:

Type

Prostoe = Set of (3,5,7,11);

Var

pr : Prostoe;

Положительные качества использования в программах множеств:

- упрощаются сложные операторы if;

- улучшается наглядность программ;

- возможна экономия памяти;

- может уменьшаться время компиляции и время выполнения программы

Недостаток:

В языке Pascal отсутствуют процедуры ввода – вывода элементов множества.

Пример:

Создать множество из элементов типа Сhar, конец ввода обозначить “Z”. Найти во множестве элемент с минимальным номером в таблице кодов и

распечатать элементы множества в алфавитном порядке.

Uses

Crt;

Var

s : Set of Char;

ch , rejim : Char;

procedure Konstr; {формирование множества}

begin

Writeln (‘множество конструируется из символов ‘a .. z’);

Writeln (‘введите элементы множества’);

s:=[]; {инициализация множества}

Readln (ch);

while True do {организация бесконечного цикла}

begin

s:=s+[ch];

Readln (ch);

if ch =’z’ then

Exit;

end;

end;

procedure MinS;

begin

ch:=’ ‘;

while not (ch in S) do

ch := Succ (ch); {переход к следующему символу в кодовой таблице}

Writeln (‘элемент с минимальным номером равен’, ch);

end;

procedure Rasp;

var

c1:Char;

begin

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

if c1 in s then {содержит ли множество s символ ch}

Writeln (c1);

end;

Begin

ClrScr;

While True do

begin

Writeln (‘1 – создание’);

Writeln (‘2 – поиск элемента с минимальным номером’);

Writeln (‘3 – вывод элементов множества’);

Writeln (‘4 – выход’);

Readln (rejim);

case rejim of

‘1’: Konstr;

‘2’: MinS;

‘3’: Rasp;

‘4’: Halt;

end;

ReadKey;

End.