После вызова подпрограммы из программы запускается подпрограмма

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

Работа подпрограммы с переменной напрямую.

При изучении процедур и функций для работы со строками было обещано, что в этом параграфе мы подробно изучим использование слово var при объявлении процедур и функций.

Как было сказано, слово var используется в том случае, если мы хотим что бы процедура или функция работала с переменной напрямую. При обычном объявлении, без использования слова var, создаётся как бы копия передаваемого параметра, и работа подпрограммы ведётся с этой копией. При использовании слова Var подпрограмма, изменяя свою переменную, при этом меняет ту переменную, которая была передана в качестве параметра. Например, в следующем примере процедура summ в своём теле, изменяя значение переменной y, меняет значение переменной i, которая находится в теле основной программы:

Вызов подпрограммы «М98»

Procedure summ(x: integer ; var y: integer );

writeln( ‘После вызова процедуры summ i=’ ,i);

После вызова процедуры summ i=7

Во время работы процедуры summ будет создана переменная x, которая примет значение 5, а переменная y будет указывать на переменную i и не будет занимать место в памяти компьютера.

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

function summ(x,y: integer ): integer ;

writeln( ‘После вызова функции summ i=’ ,i);

После вызова функции summ i=7

Как видно результат тот же самый, да и строчек такое же количество, однако во время работы данной функции в памяти будет создано две переменные x и y. Переменная x примет значение 5, а переменная y «возьмёт» значение у переменной i. В итоге в памяти компьютера будет отведено место под две переменные.

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

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

var m: array [ 1..2 ] of integer ;

procedure perestanovka( var x,y: integer );

var temp: integer ;

writeln( ‘m[1]=’ ,m[ 1 ], ‘ ‘ , ‘m[2]=’ ,m[ 2 ]);

writeln( ‘После сортировки’ );

writeln( ‘m[1]=’ ,m[ 1 ], ‘ ‘ , ‘m[2]=’ ,m[ 2 ]);

Конечно, можно было перестановку значений в массиве организовать внутри цикла for to do, однако если вам необходимо в разных местах программы произвести перестановку, то создав данную процедуру, вам не придётся писать один и тот же код несколько раз. В данном случае уместно вспомнить программистскую поговорку: «Не пиши код дважды».

И ещё одно. Будьте внимательны, если в данном примере вы не напишите слово var, то ошибки при компиляции не выйдет, так же программа будет работать без ошибок, однако перестановки значений не произойдёт. Можете проверить сами.

Подпрограммы (процедура)

Вызов подпрограммы подпрограммой.

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

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

Var m: array [ 1..10 ] of integer ;

for var i:= 1 to 10 do

if (i mod 5 ) = 0 then writeln;

Procedure perestanovka( var x,y: integer );

for var i:= 1 to 9 do

if m[i]>m[i+ 1 ] then

Writeln(shag, ‘-й шаг сортировки’ );

for var i:= 1 to 10 do m[i]:= random( 0 , 100 );

writeln( ‘Имеем следующий список случайных чисел:’ );

writeln( ‘Начинаем сортировку’ );

Writeln( ‘После сортировки список стал следующим:’ );

Имеем следующий список случайных чисел:

1-й шаг сортировки

2-й шаг сортировки

21-й шаг сортировки

22-й шаг сортировки

После сортировки список стал следующим:

Примечание: В целях экономии бумаги из результата работы программы были убраны с 3-его по 20-й шаги.

Данная программа демонстрирует, как происходит сортировка массива по шагам. На каждом шагу происходит перемещение меньшего элемента влево. Для вывода массива на экран используется процедура vivod. Она вызывается как в теле самой программы, так и в теле процедуры sortirovka. Так же в теле процедуры sortirovka вызывается процедура perestanovka.

В принципе тут всё ясно, ничего сложного нет. Однако есть один нюанс. Из одной подпрограммы вызвать другую можно только в том случае, если вызываемая подпрограмма описана выше по тексту. Т.е. если рассматривать данный пример, то мы не можем внутри процедуры vivod вызвать процедуру sortirovka.

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

procedure P_2; forward ;

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

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

Читайте также:
Программа дело инструкция видео

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

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

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

function Fac(n: integer ): longint ;

writeln( ‘Факториал числа 9 равен ‘ ,fac( 9 ));

Факториал числа 9 равен 362880

Наглядно работу рекурсии можно изобразить следующим образом:

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

Специальная переменная Result.

В отличии от TurboPascal в PascalABC.NET существует специальная переменная, которую можно использовать вместо имени функции для присвоения результата работы функции. Т.е. что бы присвоить возвращаемое функцией значение можно присвоить это значение специальной переменной result. Пример:

function f: integer ;

Подпрограммы с одним именем.

Следующий в данном подразделе материал относится только к PascalABC.NET.

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

Procedure perestanovka( var x,y: integer );

Procedure perestanovka( var x,y: Real );

var i:= 3 ; var k:= 4 ;

writeln( ‘До вызова процедуры perestanovka i=’ ,i, ‘ k=’ ,k);

writeln( ‘После вызова процедуры perestanovka i=’ ,i, ‘ k=’ ,k);

var r:= 5.7 ; var s:= 6.3 ;

writeln( ‘До вызова процедуры perestanovka r=’ ,r, ‘ s=’ ,s);

writeln( ‘После вызова процедуры perestanovka r=’ ,r, ‘ s=’ ,s);

До вызова процедуры perestanovka i=3 k=4

После вызова процедуры perestanovka i=4 k=3

До вызова процедуры perestanovka r=5.7 s=6.3

После вызова процедуры perestanovka r=6.3 s=5.7

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

Когда в программе существуют подпрограммы с одинаковыми именами, они называются перегруженными. Написание подпрограмм с одинаковыми именами называется перегрузкой.

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

В принципе всё просто, однако есть нюансы.

В следующем примере обе процедуры считаются одинаковыми, и при компиляции выйдет ошибка:

procedure p(i,k: integer );

procedure p( var i,k: integer );

Т.е. нельзя писать две подпрограммы с одним именем, с одинаковыми передаваемыми параметрами, но одна со словом var, другая без него.

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

И ещё один нюанс. Если имеем следующие перегруженные процедуры:

procedure p_1(i,k: integer );

procedure p_1(i: integer ,r: real );

И если процедура будет вызвана следующим образом: p_1(1,2), то к данному вызову одинаково подходят обе функции, по этому так же возникнет ошибка при компиляции.

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

1. В параграфе приведена программа Sortirovka_massiva. Переделать программу, организовав сортировку одномерного массива с помощью рекурсии.

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

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

Var m: array [ 1..10 ] of integer ;

for var i:= 1 to 10 do

if (i mod 5 ) = 0 then writeln;

Источник: www.dvkuklin.ru

Контрольная работа 4. Контрольная работа по теме Процедуры и функции, Модуль

Единственный в мире Музей Смайликов

Самая яркая достопримечательность Крыма

Скачать 64.13 Kb.

Контрольная работа по теме «Процедуры и функции, Модуль»

1. Что такое подпрограмма?

  1. запускается подпрограмма, программа и подпрограмма работают параллельно
  2. выполнение программы приостанавливается и управление передается в подпрограмму, после завершения подпрограммы управление возвращается в программу
  3. выполняется фрагмент программы, который может быть связан с подпрограммой
  1. при вызове, и при описании
  2. описании подпрограммы
  3. вызове подпрограммы
  1. переменные, описанные в заголовке подпрограммы и используемые только внутри процедуры (функции)
  2. переменные, описанные внутри процедуры (функции) и используемые только внутри процедуры (функции)
  3. переменные, которые описаны в самой программе, а используются как в программе, так и в процедуре (функции).
  1. Function Sum ( a: integer; Var c: integer);
  2. Function 2S (a, b): integer;
  3. Function Sum1 (a,b: Integer; Var c:integer): real;
  4. Function SQ (a,c: real): integer;
Читайте также:
Что такое сапфир программа

6. Напишите, что напечатает следующая программа:

7. Напишите, что напечатает следующая программа:

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

  1. Function Sum1 (a,b: Integer; Var c:integer): real;
  2. function Sum ( a: integer; Var c: integer);
  3. Function 2S (a, b): integer;
  4. Function SQ (a,c: real): integer;
  1. Procedure Sum1 (a,b: Integer; Var c:integer): real;
  2. Procedure S2m3(a,b: Integer);
  3. Procedure 2S (a: Real; b: integer);
  1. переменные, которые описаны в самой программе, а используются только в процедуре
  2. переменные (константы), которые задаются при вызове процедуры (функции)

13. Что такое процедура?
14. Напишите, что напечатает следующая программа:

Источник: topuch.com

Подпрограммы – описание, особенности, сферы применения

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

Что это такое

В процессе использования того или иного языка программирования предстоит сталкиваться с так называемыми подпрограммами. Это – алгоритм, который записан обособленно. У него есть заранее присвоенное имя. Подпрограммой называется некая зафиксированная последовательность действий, необходимая для выполнения поставленных перед разработчиком задач.

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

Разновидности

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

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

Некоторые языки программирования описывают подпрограммы в качестве одной или нескольких функций. В C-приложениях работает именно такая концепция. В ней процедуры реализовываются через функции типа void. У него пустой тип. Такой прием дает возможность не возвращать вследствие обработки никакое значение.

Ключевые особенности

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

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

  1. За счет таких компонентов становится возможным уменьшение объема исходного кода. Прием позволяет ускорять тестирование и упрощать его. То же самое касается непосредственной отладки итогового программного обеспечения.
  2. Используя подпрограммы, разработчик сможет обеспечить лучшую работоспособность написанного кода. Ошибки и крупные баги сведутся к минимуму.
  3. Повышается читабельность ПО. Некоторые коды смогут достаточно быстро разобрать даже те, кто только начал путь изучения особенностей разработки на выбранном языке.
  4. Схожие программы удастся создавать быстрее. Это получается за счет применения «готовых блоков» кода в новых проектах.
  5. Функции и процедуры нужны для того, чтобы избавиться от крупных и масштабных алгоритмов. Программное обеспечение удастся «разбить» на небольшие задачи. За счет такого приема становится возможным абстрагирование от деталей.

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

Области применения

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

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

  1. Может применяться однократно. Такой прием является вполне оправданным. С его помощью удается сократить объем исходного кода.
  2. Используется, когда нужно логически выделить конкретную целостную подзадачу с типовым решением.

Если разобраться с принципами формирования, вызова и непосредственного использования функций и процедур, получится значительно ускорить разработку. А еще – быстрее программировать «с нуля», обладая минимальными знаниями и навыками.

О вызове и описании

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

  • специальными командами вывода;
  • именем процедуры, по которым осуществляется непосредственный вызов.

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

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

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

Читайте также:
Расширение xlsx может быть присвоено файлу программой

Параметры – что знать программисту

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

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

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

Вот – образец кода. Тут Line – это параметр. Он при вызове получает совершенно разные значения. Такая концепция дает возможность отображения различных строк.

Формально и фактически

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

  • фактическими;
  • формальными.

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

Список таких параметров будет определять:

  • имеющийся порядок;
  • типы параметров;
  • количество параметров, необходимое для выполнение той или иной команды.

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

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

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

Как передавать

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

  1. При помощи значений. Формальный параметр станет фактическим. Он включает в себя его копию.
  2. Через ссылки. Формальные параметры будут размещаться в пределах фактических. Реализация – преимущественно через размещение ссылок на фактические значения.
  3. Путем работы со стеками. Это вариация передачи параметров «по значению» с поддержкой ручного привода. Информация будет размещаться на стеках. Их количество, типы и порядок не контролируется компиляторами.
  4. По именам. Параметры формального характера получают произвольные выражения. Операции и вычисления в данном случае выполняются в пределах заданного процесса. Прием актуален тогда, когда возникает необходимость в получении определенного значения.

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

Параметры-значения

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

Предусматривает такие особенности:

  1. Параметр-значение ведет себя точно так же, как локальная переменная. Инициализация происходит как значения, которое передается при вызове процедуры.
  2. Если возникает необходимость в передаче переменной, компиляторы будут создавать их копии. Функции будут работать с этими самыми дубликатами.
  3. Изменения копий не влияют на исходные переменные в коде.
  4. Для обработки элемента устройство должно выделить под операцию необходимое количество памяти.

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

Параметры-переменные

Определены как формальные. В Паскале объявляются при помощи специального ключевого слова – var. Относится к идентичному типу. В качестве фактического параметра в подпрограмме выступают исключительно переменные.

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

В виде констант

Параметры в подпрограммах могут выражаться константами. Это – формальный тип, для которого используется ключевое слово. Выглядит как «const». Относится к совместимому типу. В виде фактического значения может использоваться выражение.

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

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

Методы

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

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

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

Как быстро освоиться

Для того чтобы записи в коде типа end, var, main() и другие не вызывали трудностей, рекомендуется выбрать язык программирования и закончить онлайн-курсы. Пример – от OTUS. В срок от нескольких месяцев до года пользователя с нуля научат писать приложения и различные подпрограммы.

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

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!

Источник: otus.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru