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

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

Зачем нужны подпрограммы? Их использование удобно, когда в программе несколько раз решается одна и та же подзадача, но для разных наборов данных. Кроме того, использование подпрограмм естественно для человека, которому проще воспринимать логически связанные объекты, чем множество разнородных данных.

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

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

procedure имя (параметры);

function имя (параметры): тип результата;

Между функциями и процедурами есть существенное отличие. Значение, полученное в результате выполнения кода функции, жестко соотносится с ее именем путем присвоения этому имени конкретного значения. Тип, который может принять вычисляемое значение, указывается в заголовке функции (тип результата). И в теле основной программы функция вызывается только в том случае, если ее имя фигурирует в каком-либо выражении. В то время как процедура вызывается отдельно.

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

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

Тело подпрограммы, как и любого составного оператора на языке Паскаль, ограничивается скобками begin и end.

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

procedure box (s: char; w,h: integer);
    var i,j:integer;
    begin
        for i := 1 to h do begin
            for j := 1 to w do
                write (s);
            writeln
        end;
        writeln
    end;
 
begin
    box ('+', 10, 5);
    box ('r', 20, 3);
    box ('|', 50, 10);
    box ('$', 12, 4);
 
readln
end.

var num: integer;
 
function digits (n:integer): integer;
    var i: integer;
    begin
        i := 0;
        while n > 0 do begin
            n := n div 10;
            i := i + 1
        end;
 
        digits := i
    end;
 
begin
    write ('Введите положительное число: ');
    readln (num);
 
    num := digits (num);
    writeln ('Количество разрядов = ', num);
 
readln
end.

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

Задачи к данной теме

Комментарии

Помогите решить

Напишите программу, которая в последовательности натуральных чисел определяет количество чисел, кратных 3 и оканчивающихся на 2. Программа
получает на вход количество чисел в последовательности, а затем сами числа. Количество чисел не превышает 1000. Введённые числа по модулю не превышают 30000.
Программа должна вывести одно число: количество чисел, кратных 3 и оканчивающихся на 2

Помогите решить

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

Помогите))

Разработать функции рекурсивного и не рекурсивного вывода чисел Фибоначчи. Сравнить функции по скорости выполнения для больших N.

Помогите решить

Разработать функции рекурсивной и не рекурсивной реализации алгоритма Евклида нахождения наибольшего общего делителя (НОД) двух натуральных чисел. Сравнить функции по скорости выполнения для больших чисел. В программе реализовать также вычисление НОК (наименьшее общее кратное).

Кто может помогите))

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

Помогите))

Вычислить факториал числа, используя рекурсивную функцию и не рекурсивную процедуру. Сравнить их по скорости выполнения для больших N.

Задача

Описать процедуру поиска наибольшего и наименьшего элемента массива. С помощью этой процедуры составить программу, которая определяет совпадают наибольший и наименьший элементы двух массивов A[1..n], B[1..n].

функция

f=(a*x^2+b*x-c)/(sin(x)+cos(x)) при а=4,5; b=0,7; c=6,2; А x принимает значения 0,2; 0,56; 0,83

процедура

Определить математическое ожидание и дисперсию для четырёх случайных чисел, заданных векторами:
A=[0,5; 1,5; 2] b=[6,7; 8; 7,5; 6]
C=[0,1; 10; 4] d=[3,2; 5,1]
Спасибо больше

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

может ли функция и процедура иметь одинаковое имя в одной программе?
заранее спасибо за ответ)

Это сложный вопрос, так как у

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

Тест во FreePascal показывает, что может. Программа, имеющая одинаковые по имени функцию и процедуру, компилируется без ошибок. Однако, если функция и процедура имеют одинаковые параметры, то всегда вызывается только то, что было определено первым. Если процедура, то будет вызываться только процедура, даже если вызов подразумевает функцию. Если параметры разные то программа работает правильно. Тестовый код:

var 
    a,b: integer;
function test(var c: integer): integer;
    begin
        test := c+1;
    end;
procedure test(var c, d: integer);
    begin
        writeln(c+1);
    end;
 
begin
    a := 1;
    b := 2;
    test(a,b);
    b := test(a);
    writeln(b);
end.

Работают обе. Если убрать параметр d, будет вызываться только функция.

pomogite

pomogite sostaviti function dlea uravneniea y(x1Ux3)& not x3

(x1 or x3) and not x3

(x1 or x3) and not x3