АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

ПРОЦЕДУРЫ И ФУНКЦИИ

Читайте также:
  1. II. Выполнение процедуры
  2. II. Основные задачи и функции
  3. III. Завершение процедуры
  4. III. Завершение процедуры
  5. III. Окончание процедуры
  6. III. Предмет, метод и функции философии.
  7. XVIII. ПРОЦЕДУРЫ И ФУНКЦИИ
  8. А) ПЕРЕДАЧА НА РУССКОМ ЯЗЫКЕ ФУНКЦИИ АРТИКЛЯ
  9. А. Средняя квадратическая погрешность функции измеренных величин.
  10. Абстрактные классы и чистые виртуальные функции. Виртуальные деструкторы. Дружественные функции. Дружественные классы.
  11. Адаптивные функции
  12. Администраторы судов, их функции

В тексте песни припев дается только один раз, если нужно его повторить, то указывается одно слово “припев”, под которым подразумевается текст, приведенный ранее.

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

Более того, рекомендуется большую задачу разбивать на отдельные смысловые задачи (подпрограммы), программировать их отдельно, отлаживать, а затем объединять в единую программу. Использование подпрограмм считается хорошим стилем программирования. При этом уменьшается в целом объем программы и уменьшается время на ее отладку.

Любая программа может содержать несколько подпрограмм, каждая из которых так же может содержать подпрограммы.

В Паскале имеется два вида подпрограмм: процедура (procedure) и функция (function).

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

1) описание процедуры или функции;

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

По окончании работы процедуры или функции управление возвращается за точку вызова (к следующему оператору).

Описание процедуры:

procedure имя [(список параметров)];

oписание данных;

begin

oператоры процедуры или тело процедуры

end;

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

На место параметра-значения подставляется при вызове процедуры или функции значение выражения, передаваемого как аргумент. Этот параметр описывается указанием имени и типа. Его значение не может быть возвращено в точку вызова (передается входная информация). На место параметра-переменной подставляется переменная, ее значение может быть изменено в процедуре или функции и возвращено обратно (передается входная и выходная информация). Описанию этого параметра должно предшествовать ключевое слово var. Параметры, указанные при описании процедуры или функции, могут рассматриваться, как своеобразное расширение раздела описания и могут участвовать в любых разрешенных операциях, функциях, операторах внутри подпрограммы.

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

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

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

Описание функции:

function имяф(список_параметров): тип_возвращаемого_значения;

oписание данных;

begin

Операторы функции или тело функции;

имяф:= выражение; {обязательный оператор, формирующий

возвращаемое функцией значение}

end;

Вызов функции осуществляется с помощью указателя функции, который записывается в каком-либо выражении: имяф(список_аргументов). Операторов имяф:= выражение может быть несколько в теле функции. Значение, которое вычисляется функцией, задается последним выполненным до завершения работы функции оператором. Если такого оператора присваивания нет в функции, то значение функции не определено, что приведет к аварийному завершению программы.

Задача 1. Напишите функцию, определяющую является ли заданный символ русской гласной буквой.

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

function gl (ch: char): boolean;

begin

gl:= pos (ch, ‘аеиоуыэюя’) <> 0;

end;

Задача 2. Даны два действительных числа x, y. Вычислите значение выражения z:= (sign x + sign y)· sign (x + y), где sign - функция, определяющая знак числа, т.е. .

Решение. В качестве передаваемого параметра будем использовать значение вещественной переменной. Функция будет принимать значение -1, 0 или 1, т.е. целое.

var x, y, z: real;

function sign (a: real): integer;

begin

if a < 0 then sign:= -1

else if a = 0 then sign:= 0

else sign:= 1;

end;

begin {тело основной программы}

writeln (‘задайте значения x и y’);

readln (x, y);

z:= (sign (x) + sign (y)) * sign (x + y);

writeln (‘z = ‘, z);

end.

Упражнение. Решите предложенную задачу без описания функции.

Задача 3. Напишите функцию, определяющую следующее за данным простое число.

Решение. Передаваемый параметр - целое число, значение функции - целое число.

function pr (a: integer): integer;

var i: integer; {возможные делители числа}

aa: integer; {число - кандидат на простое}

f: boolean; {равно true, если нашли простое число}

begin

f:= false; {простое число еще не нашли}

aa:= a;

repeat

aa:= aa + 1;

i:= 1;

repeat

i:= i + 1;

until aa mod i = 0;

if aa = i then begin f:= true; pr:= aa end; {нашли простое число}

until f;

end;

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

Задача 4. Напишите функцию, проверяющую принадлежит ли заданный элемент двумерному массиву. С помощью этой функции проверить все ли элементы одномерного массива принадлежат заданному двумерному.

Решение. Просматриваем двумерный массив, сравнивая каждый его элемент с элементом одномерного массива. Если нашли совпадение, то элемент имеется в двумерном массиве. Напишем две дополнительные процедуры для вывода одномерного и двумерного массивов.

const nn = 5; mm = 5;

type mas2 = array [1..nn, 1..mm] of integer;

mas1 = array [1..nn] of integer;

var a: mas2; {исходный двумерный массив}

b: mas1; {исходный одномерный массив}

n, m, i, j: integer;

f: boolean;

 

function prov (a: mas2; n, m: integer; x: integer): boolean;

{проверяет, принадлежит ли x двумерному массиву}

var i, j: integer;

f: boolean;

begin

f:= false; {еще не нашли}

i:=1;

while (i <= n) and not f do

begin j:=1;

while (j <= m) and not f do

if a[i, j] = x

then f:= true {нашли}

else j:= j + 1; {переходим к следующему}

if not f then i:= i + 1

end;

prov:= f

end;

 

procedure wri1 (a: mas1; n: integer);

{вывод одномерного массива}

var i: integer;

begin

writeln;

writeln (‘одномерный массив’);

for i:= 1 to n do write (a[i], ‘ ‘)

end;

 

procedure wri2 (a: mas1; n, m: integer);

{вывод двумерного массива}

var i, j: integer;

begin

writeln (‘одномерный массив’);

for i:= 1 to n do

begin

writeln;

for j:= 1 to m do write (a[i, j], ‘ ‘);

end;

end;

 

begin {основная программа}

write (‘введите количество строк и столбцов’);

readln (n, m);

for i:= 1 to n do

for j:= 1 to m do a[i, j]:= random (10);

for i:= 1 to n do b[i]:= random (10); {или b[i]:= i}

wri2(a, n, m);

wri1 (b, n); writeln;

f:= true;

i:= `;

while (i <= 1) and f do

begin f:= f and prov (a, n, m, b[i]);

if f then i:= i + 1; {если данный элемент есть в двумерном массиве, то переходим к анализу следующего элемента двумерного массива}

end;

if f then writeln (‘входят все’)

else writeln (‘не входит ’, i, ‘элемент’);

end.

Упражнения.

1. Напишите функцию, проверяющую принадлежит ли заданный элемент одномерному массиву. С ее помощью проверить принадлежит ли каждый элемент двумерного массива заданному одномерному. Программа должна быть эффективной и не допускать лишних переборов.

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


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.014 сек.)