Понятие подпрограммы. Формальные и фактические параметры

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

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


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

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

Итак, рассмотрим синтаксис объявления и описания процедуры в Паскале

var …;{область объявления глобальных переменных} procedure название (параметры); {начало процедуры} var …;{объявление локальных переменных} begin … {тело процедуры} end;{конец процедуры} begin … {основная программа} end.

Пример: Процедура без параметров, которая печатает 60 звездочек, каждую с новой строки

procedure pr; var i:integer; begin for i:=1 to 60 do begin {тело подпрограммы} write("*"); writeln; end; end; {конец подпрограммы} begin pr; {вызов процедуры} end.

В данном примере работы с процедурой в Паскале очевидно, что компилятор пропустит блок описания процедуры и дойдет до основной программы (9 строка кода). И только после того, как встретится вызов процедуры (10 строка), компилятор перейдет к ее выполнению, вернувшись к строке 1.

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

Рассмотрим пример необходимости использования процедуры.

Пример:
Построить фигуру

Особенность: Три похожие фигуры.

  • общее: размеры, угол поворота
  • отличия: координаты, цвет
  • Алгоритм решения:

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

    Решение на паскале:
    Процедура:

    Программа:

    15 uses GraphABC; procedure Tr( x, y: integer ; color: system. Drawing . Color ) ; begin MoveTo(x, y) ; LineTo(x, y- 60 ) ; LineTo(x+ 100 , y) ; LineTo(x, y) ; FloodFill(x+ 20 , y- 20 , color) ; end ; begin SetPenColor(clBlack) ; Tr(100 , 100 , clBlue) ; Tr(200 , 100 , clGreen) ; Tr(200 , 160 , clRed) ; end .

    uses GraphABC; procedure Tr(x, y: integer; color:system.Drawing.Color); begin MoveTo(x, y); LineTo(x, y-60); LineTo(x+100, y); LineTo(x, y); FloodFill(x+20, y-20,color); end; begin SetPenColor(clBlack); Tr(100, 100, clBlue); Tr(200, 100, clGreen); Tr(200, 160, clRed); end.

    Рассмотрим синтаксис объявления и описания процедуры с параметрами в Паскале.

    var …;{область объявления глобальных переменных} procedure pr(параметр1, параметр2: integer; параметр3:char); {начало процедуры} var …;{объявление локальных переменных} begin … {тело процедуры} end;{конец процедуры} begin … {основная программа} pr (параметр1, параметр2, параметр3); {вызов процедуры} end.

    Задание procedure 1: N вертикальных линий. N задается параметром процедуры.


    Задание procedure 2: Написать процедуру рисования N окружностей, сдвинутых по горизонтали. N , радиус R и отступ O задаются параметрами процедуры (всего 3 параметра).

    Пример: Написать процедуру, которая печатает 60 раз указанный символ (введенный с клавиатуры), каждый с новой строки

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

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

    Фактический параметр — это то значение, которое указывается в скобках при вызове процедуры. Фактическим параметром может быть конкретное значение (литерал: число, символ, строка…) либо переменная, которые компилятор подставит вместо формального параметра. Поэтому тип данных у формального и фактического параметра процедуры должен быть одинаковым.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 var s: char ; procedure pr(a: char ) ; {a - формальный параметр} var i: integer ; begin for i: = 1 to 60 do begin write (a) ; writeln ; end ; end ; begin writeln ("simvol" ) ; readln (s) ; pr(s) ; {s - фактический параметр} end .

    var s:char; procedure pr(a:char); {a - формальный параметр} var i:integer; begin for i:=1 to 60 do begin write(a); writeln; end; end; begin writeln("simvol"); readln(s); pr(s); {s - фактический параметр} end.

    В данном примере при вызове процедуры компилятор заменит формальный параметр a фактическим параметром s , т.е. тем символом, который будет введен с клавиатуры. Оба параметра имеют тип данных char .

    Задача procedure 3. Написать процедуру, которая складывает два любых числа (два параметра).

    Процедуры с параметрами. Параметр-переменная

    1. способ:
    2. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 var x, y, m, n: integer ; procedure MaxNumber(a, b: integer ; var max: integer ) ; {a и b - параметры значения, max - параметр-переменная} begin if a>b then max: = a else max: = b; end ; begin write ("vvedite x,y" ) ; readln (x, y) ; MaxNumber(x, y, m) ; {фактические параметры} writeln ("max=" , m) end .

      var x,y,m,n:integer; procedure MaxNumber(a,b:integer;var max:integer); {a и b - параметры значения, max - параметр-переменная} begin if a>b then max:=a else max:=b; end; begin write("vvedite x,y"); readln(x,y); MaxNumber(x,y,m); {фактические параметры} writeln("max=",m) end.

      В примере формальные параметры a и b служат для помещения в них сравниваемых чисел, а параметр-переменная max — для сохранения в ней максимального из двух чисел. Параметр-переменная или выходной параметр передает свое значение в основную программу (фактическому параметру m), т.е. возвращает значение, тогда как формальные параметры-значения (входной параметр), наоборот, принимают значения из основной программы (из фактических параметров x и y). Для параметра-переменной (max) используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры (ячейка m).

      Таким образом, сформулируем понятия:

      Если в качестве формального параметра указана обычная переменная с указанием ее типа, то такой параметр есть параметр-значение или входной параметр (a и b в примере). Тип данных формального параметра-значения должен соответствовать типу данных его фактического параметра (a и b должны попарно соответствовать типу данных x и y).

      Если перед именем формального параметра в объявлении процедуры стоит служебное слово var , то такой параметр называется параметром-переменной или выходным параметром (max в примере). Для него используются те ячейки памяти, которые отведены под соответствующий параметр при вызове процедуры (m). Фактический параметр, соответствующий параметру-переменной, может быть только переменной (не константой, не литералом и не выражением).

    3. способ:
    4. Использование параметров-переменных позволяет тратить меньше памяти

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var x, y: integer ; procedure exchange(a: integer ; var b: integer ) ; {b - параметр-переменная или выходной параметр} var c: integer ; begin if a>b then begin c: = a; a: = b; b: = c; {второй параметр процедуры - b - всегда будет максимальным} end ; end ; begin writeln ("введите два числа" ) ; readln (x, y) ; exchange (x, y) ; writeln ("max=" , y) end .

      var x,y:integer; procedure exchange(a: integer;var b:integer); {b - параметр-переменная или выходной параметр} var c:integer; begin if a>b then begin c:=a; a:=b; b:=c; {второй параметр процедуры - b - всегда будет максимальным} end; end; begin writeln("введите два числа"); readln(x,y); exchange (x,y); writeln("max=",y) end.

      Используя данный способ решения задачи, мы обошлись без третьего параметра. Для этого в процедуре мы использовали еще одну локальную переменную c . Процедура меняет значения переменных a и b таким образом, чтобы b всегда была максимальной. Поэтому в 15 строке программы в качестве максимальной выводится второй параметр (y), соответствующий формальному параметру b .

    Задача procedure 4.

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


    Словесный алгоритм:

    • Вводятся a и b (например, 18 и 24 )
    • В цикле повторяем действия:
    • Если а < b , то меняем переменные местами (1 шаг: a=24 , b=18 ; 2 шаг: a=18 , b=6 )
    • Переменной a присваиваем остаток от деления a на b (1 шаг: a=6 , b=18 ; 2 шаг: a=0 , b=6 )
    • Когда остаток равен 0 , выводится результат (значения переменной b ) (b=6 )

    Алгоритм решения поиска НОД:

    Задача procedure 5. Используя процедуры, построить фигуру:


    Задача procedure 6. Даны 3 различных массива целых чисел (размер каждого 15 элементов). В каждом массиве найти и среднее арифметическое значение.
    Для формирования элементов массива и подсчета суммы и среднего арифметического использовать одну процедуру (среднее арифметическое и сумму оформить как параметры-переменные).

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

    Пример: Создать процедуру для вывода десяти элементов массива (два параметра: количество элементов, массив)

    Показать решение:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 const n = 10 ; var i: integer ; a, b: array [ 1 .. n ] of integer ; procedure arr_out (k: integer ; arr: array [ 1 .. n ] of integer ) ; var i: byte ; begin write ("вывод массива: " ) ; for i : = 1 to k do write (arr[ i] : 4 ) ; writeln ; end ; begin for i: = 1 to n do a[ i] : = random(10 ) ; arr_out (n, a) ; end .

    const n = 10; var i:integer; a, b: array of integer; procedure arr_out (k:integer; arr: array of integer); var i: byte; begin write ("вывод массива: "); for i:= 1 to k do write (arr[i]:4); writeln; end; begin for i:=1 to n do a[i]:=random(10); arr_out (n, a); end. integer ; procedure arr_rand (k: integer ; var arr: array [ 1 .. n ] of integer ) ; var i: byte ; begin write ("Заполнение массива случайными числами " ) ; randomize; for i : = 1 to k do arr[ i] : = random(100 ) ; end ; begin arr_rand (n, a) ; end .

    const n = 10; var a, b: array of integer; procedure arr_rand (k:integer; var arr: array of integer); var i: byte; begin write ("Заполнение массива случайными числами "); randomize; for i:= 1 to k do arr[i]:=random(100); end; begin arr_rand (n, a); end.

    Задача procedure 7. Объедините обе решенные задачи (для заполнения и вывода массива).


    Задача procedure 8. Добавьте в задачу процедуру для заполнения значений массива пользователем (ввод значений с клавиатуры). Оформите вывод двух разных массивов: один — со значениями, сформированными случайным образом, другой — со значениями, введенными пользователем.


    Задача procedure 9. Составить программу с процедурой для вычисления (входные параметры: число и степень). Для вывода результата использовать параметр-переменную.

    Самостоятельная работа

    1 вариант: для 5 одномерных массивов определять произведение элементов каждого массива, используя процедуру с двумя параметрами - число элементов массива и параметр-переменная для вывода произведения.

    2 вариант: для 5 одномерных массивов определять минимальный элемент каждого массива, используя процедуру с двумя параметрами - число элементов массива и параметр-переменная для вывода минимального элемента.

    * сложное С помощью процедуры формировать случайным образом одномерные массивы из 10 элементов (значения от -20 до +20). Вызывать процедуру до тех пор, пока среди значений не появится ноль.

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

    Подпрограммы решают три важные задачи:

    Избавляют от необходимости многократно повторять в тексте программы аналогичные фрагменты;

    Улучшают структуру программы, облегчая ее понимание;

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

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

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

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

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

    4. Бывают сложные частные алгоритмы. Полезно отладить их отдельно в небольших тестирующих программах. Включение программ с отлаженными алгоритмами в основную программу будет легким, если они оформлены как подпрограммы.

    5. Все, что Вы сделали хорошо в одной программе, Вам захочется перенести в новые. Для повторного использования таких частей лучше сразу выделять в программе полезные алгоритмы в отдельные подпрограммы.

    Подпрограммы могут быть стандартными, т.е. определенными системой, и собственными, т.е. определенными программистом.

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

    Из набора стандартных процедур и функций по обработке одного типа информации составляются модули. Каждый модуль имеет своё имя (мы уже хорошо знакомы с модулями Crt, Graph). Доступ к процедурам и функциям модуля осуществляется при подключении этого модуля (Uses Crt, Graph).

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

    Задание . Вызовите помощь по функции Cos и рассмотрите предоставленную информацию.


    Сначала идет краткое описание подпрограммы (в одну фразу). Далее под словом Declaration (Объявление) следует интерфейсная часть процедуры или функции, которая особенно часто необходима для определения типа переменных при обращении к ним. Далее под словом Target приводятся платформы, на которых может использоваться подпрограмма: Windows, real (реальный режим DOS), protected (защищенный режим DOS). После слова Remarks следуют заметки, содержащие необходимые детали использования. В разделе See Also приведены имена подпрограмм, связанных с данной по смыслу или по совместному применению. Если перемещать курсор по этим именам (они выделяются курсорной рамкой), то выбрав одно из них (нажать клавишу ), можно получить справку по следующей функции. Каждая процедура и функция сопровождается примером применения, переключение к которому дает последняя строка программы. Любой текст из Help может быть скопирован в редактируемый файл обычными приемами копирования через буфер. Копирование примеров или заголовков функций облегчает работу.

    Существует другой способ получения помощи по процедурам и функциям. Для этого нужно использовать пункт меню Help/Reserved words (зарезервированные слова) или Help/Standard units (стандартные модули).

    Задание . Рассмотрите список процедур и функций, выберите какие-либо и просмотрите предлагаемую информацию.

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

    Существует два способа объединения программ и подпрограмм:

    1. Текст подпрограмм может быть приведен в разделе описания использующей их программы.

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

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

    Структура текста подпрограммы соответствует структуре текста основной программы за двумя исключениями:

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

    Подпрограмма кончается не точкой, а точкой с запятой.

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

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

    Например, вызов функции

    вернет в основную программу значение наименьшего из двух чисел и это значение будет присвоено переменной M.

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

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

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

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

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

    Если говорить о плюсах использования в программировании подпрограмм, то можно назвать следующие:

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

    Программа становится более читаемой.

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

    В языке Паскаль выделяют два вида подпрограмм: процедуры (Procedure) и функции (Function). Любая программа может содержать несколько процедур и функций. Структура любой подпрограммы аналогична структуре всей программы. Подпрограмма должна быть описана до того, как будет использована в программе или другой подпрограмме.

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

    Тогда общая структура программы выглядит так:

    Label; {описание меток}

    Const; {описание констант}

    Type; {описание типов}

    Var; {описание переменных}

    Procedure; {описание процедур}

    Function; {описание функций}

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

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

    Подпрограмма вызывается по своему имени с указанием необходимых параметров .

    На этом занятии рассмотрим примеры организации наиболее простого вызова подпрограмм.

    Задание . Рассмотрите решение предложенных задач, наберите на компьютере, проверьте работоспособность, внесите свои изменения и дополните своими комментариями.

    Задача 1 . Написать программу, состоящую из трех подпрограмм и основной программы. Подпрограммы должны организовывать ввод чисел, вычисление их суммы и вывод результата.

    Program AkulovE;

    Procedure Input ;

    writeln("По вызову активизировалась процедура "Input"",#10);

    writeln("Введите два числа через пробел - ");

    Procedure Summa ;

    writeln("Для сложения подключилась процедура "Summa"",#10);

    {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}

    Procedure Output ;

    writeln("Заключительная часть. Процедура "Output"",#10,#13);

    writeln("Их сумма - ",x);

    {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}

    Задача 2 . Найти среднее арифметическое двух чисел.

    {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}

    Function SredArif (A, B:integer):real;

    SredArif :=(A+B)/2;

    {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}

    write("Введите два числа ");

    Rez:=SredArif (A,B);

    Наименование параметра Значение
    Тема статьи: Подпрограммы
    Рубрика (тематическая категория) Программирование

    Методология структурного программирования основывается на использовании подпрограмм и независимых структур данных.

    Подпрограмма (англ. subprogram) - поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. Подпрограмма должна быть многократно вызвана из разных частей программы.

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

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

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

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

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

    Формальные и фактические параметры. Чтобы отличать параметры подпрограммы, описанные в её заголовке и телœе, от параметров, указываемых при вызове подпрограммы, первые принято называть формальными параметрами, вторые - фактическими параметрами.

    Подпрограмма - ϶ᴛᴏ блок кода между операторами Sub и End Sub или Function и end Function .

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

    Подпрограмма-процедура Sub и End Sub . Обычно подпрограмму-процедуру принято называть процедурой.

    При написании программы нужно учесть одно правило: ʼʼВнутри одной процедуры не должна быть описана другая процедураʼʼ.

    Процедура - это любая подпрограмма, которая не является функцией.

    Подпрограмма-функция - ϶ᴛᴏ блок кода, заключенный между операторами Function и End Function. Она выполняет какую-то операцию, но при этом обязательно возвращает какое-нибудь значение. Значение возвращается через имя функции.

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

    Подпрограммы, входящие в состав классов в объектных языках программирования, обычно называются методами . Этим термином называют любые подпрограммы-члены класса, как функции, так и процедуры; когда требуется уточнение, говорят о методах-процедурах или методах-функциях.

    6.2.4 Принцип проектирования программ сверху-вниз и снизу–вверх.

    Программирование ʼʼсверху внизʼʼ, или нисходящее программирование - ϶ᴛᴏ методика разработки программ, при которой выработка начинается с определœения целœей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой. Является противоположной методике программирования ʼʼснизу вверхʼʼ.

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

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

    Программирование ʼʼснизу вверхʼʼ, или восходящее программирование - ϶ᴛᴏ методика разработки программ, начинающаяся с разработки подпрограмм (процедур, функций), в то время когда проработка общей схемы не закончилась. Является противоположной методике программирования ʼʼсверху внизʼʼ.

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

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

    Пример.
    Размещено на реф.рф
    Чтобы написать число 512, сначала пишут цифру 5, затем 1 и, наконец, 2. При этом цифры рисуют, последовательно прорисовывая линии, из которых они состоят. Принтер напечатает это число точками.

    При разработке программы пошагово, методом ʼʼсверху вниз ʼʼ сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста͵ вставляется вызов подпрограммы, которая будет выполнять данный фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются ʼʼзаглушкиʼʼ, которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём выработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной ʼʼзатычкиʼʼ, которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и должна быть уверен, что общая структура всœех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.

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

    Программирование ʼʼвширьʼʼ - ориентиром провозглашается набор однородных модулей. В одной программе должна быть выявлено несколько однородных наборов. После того как однородные модули выявлены, приступают к непосредственному программированию, ĸᴏᴛᴏᴩᴏᴇ, собственно, и разбивается на этапы. На первом этапе создается лишь минимальное число представителœей каждого из выделœенных однородных наборов. В случае если поиск однородности проводился достаточно энергично, то обычно оказывается, что объём работ первого этапа реализации сравнительно невелик.

    Подпрограммы - понятие и виды. Классификация и особенности категории "Подпрограммы" 2017, 2018.

  • - Call имя подпрограммы (фактические параметры).

    Вызов подпрограммы процедуры Sub Синтаксис процедуры типа Sub Процедура типа Sub [ Public | Private] Sub имя [(параметры)] [операторы внутри процедуры] End Sub Public - процедура доступна для всех других процедур модулей проекта. По умолчанию... .


  • - ПРОГРАММЫ И ПОДПРОГРАММЫ. СВЯЗЬ ПО УПРАВЛЕНИЮ И ПО ДАННЫМ

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


  • - Программы и подпрограммы. связь по управлению и по данным

    Лабораторная работа № 3. В целях структуризации программ, облегчения их разработки, отладки и понимания большие программы принято разбивать на отдельные модули, логически связанные друг с другом и достаточно автономные. Идея структурного программирования... .


  • - Основы программирования на языке Visual Basic for Applications (VBA). Подпрограммы-процедуры и подпрограммы-функции. Модульная структура программы.

    При вызове процедуры или функции передают в них некоторые переменные путем замены формальных параметров на фактические. (Фактические параметры берутся при вызове ф-ции. Формальные параметры берутся из задач.) Внутри процедуры этим переменным может быть присвоено... .


  • - Подпрограммы пользователя

    Begin Var s:real; s1: integer;{Ввод числовых данных} s:=StrToFloat(Edit1.Text); s1:=StrToInt(InputBox("Ввод данных","Введите s","")); {Вывод числовых данных} Edit2.Text:=FloatToStr(s); Label1.Caption:=IntToStr(s1); ShowMessage(FloatToStr(s)) End; Для вывода чисел по формату используются: - Процедура Str(F[:Width[:Decimals]], S), которая... .


  • - Вызов подпрограммы на С из подпрограммы на ассемблере

    Вызов подпрограммы на С не отличается от вызова подпрограммы на ассемблере. Однако при вызове С/С++-функции следует учитывать, что она работает в соответствии с рассмотренными положениями функционирования среды выполнения. Поэтому, если вложенная asm-процедура в... .


  • - Вызов подпрограммы на ассемблере из программы на С

    Хорошим стилем программирования считается описание прототипа ассемблерной функции для определения аргументов функции и интерфейса между программой на С и подпрограммой на ассемблере. Run-time модель выполнения определяет некоторые регистры как рабочие (Scratch), а... .


  • - Подпрограммы

    Begin Uses Uses End. Begin . . .//код проектаРабота с модулем: 1. Создать консольное приложение командой Файл => Новый => Другое => Console Application. 2. Cохранить проект в папке KR командой Файл => Сохранить проект как..=> Blank. 3.... .


  • - Основные функции и подпрограммы

    Программное обеспечение USB Библиотечные подпрограммы разработаны для использования с компоновщиком. Нет необходимости создавать дополнительные включаемые файлы. Подпрограммы предлагаются упакованными в следующие файлы: USB_CH9 .ASM - обработка всех команд в... .


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

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

    В языке Паскаль механизм подпрограмм реализуется в виде ПРОЦЕДУР и ФУНКЦИЙ, которые вводятся в программе с помощью своего описания, но их способом их использования.

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

    Delay (10); вызывает задержку выполнения программы на 10мс.

    Функция аналогична процедуре, но имеются два отличия: функция передает в точку вызова скалярное значение; имя функции в выражении может выходить как операнд. Например, функция SQR(x)-возведет в квадрат значение целого или вещественного значения X и передаст в точку вызова вычисленное значение квадрата переменной X.

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

    à Встроенные (стандартные) - входят в состав языка и вызываются для выполнения по строго фиксированному имени.

    à Определенные пользователем – разрабатываются и имеются самим пользователем.

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

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

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

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

    Фактические параметры - это параметры, которые передаются подпрограмме при общении с ней.

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

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

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

    Подпрограмма – относительно самостоятельная часть программы, имеющая свое имя и выполняющая определенные действия.

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

    Структура подпрограммы почти полностью повторяет структуру всей программы и состоит из следующих частей:

      заголовок подпрограммы

      раздел описаний

      тело подпрограммы

    В Паскаль имеются два вида подпрограмм – процедуры и функции . Они отличаются назначеием и способом их использования. Процедуры служат для выполнения определенной последовательности действий, направленных на изменение программной обстановки (изменение значений переменных, ввод/вывод данных и т.п.). Функции для вычисления значения выражения.

    5.1 Процедуры

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

    <раздел описаний>;

    begin

    < тело процедуры >;

    Пример 1: Процедура вычисления и вывода на экран куба числа.

    procedure cub(x: real);

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

    Например:

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

    Пример 2: Программа, выводящая на экран следующее:

    var a,b: integer;

    procedure Stars; {без параметров}

    var i: integer;

    for i:=1 to 9 do write(‘*’);

    for a:=1 to 4 do

    writeln(‘a=’,a,’ b=’,b);

    Stars; {вызов процедуры Stars }

    Пример 3:

    var a,b: integer;

    procedure Stroka(ch: char, n: integer);

    var i: integer;

    for i:=1 to n do write(ch);

    Stroka(‘+’,4);

    for a:=1 to 3 do

    writeln(‘a=’,a,’ b=’,b);

    Stroka(‘*’,8);

    Разберем вызов процедуры Stroka(‘*’,8): ‘*’ и 8 – фактические параметры (т.е. те, которые указаны в скобках после имени процедуры при ее вызове), они присваиваются при вызове формальным параметрам ch и n (т.е. тем, которые указаны в скобках после имени процедуры при ее описании).

    Замечание: количество, порядок и тип параметров при вызове процедуры должны совпадать с количеством, порядком и типом параметров, заданным при описании процедуры.

    Результат на экране :

    Поддержите проект — поделитесь ссылкой, спасибо!
    Читайте также
    Геометки в Instagram: зачем они нужны Геометки в Instagram: зачем они нужны Автоматизированная система ирбис, разработка и использование Установка и настройка «ирбис» Автоматизированная система ирбис, разработка и использование Установка и настройка «ирбис» Как включить гироскоп на андроиде Информация о типе громкоговорителей и поддерживаемых устройством аудиотехнологиях Как включить гироскоп на андроиде Информация о типе громкоговорителей и поддерживаемых устройством аудиотехнологиях