Тема урока: понятие подпрограмм
Учебные материалы


Тема урока: понятие подпрограмм



Карта сайта pkeeper9.ru




  • Тема урока

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


I. Повторение материала

  • Какова структура программы?

  • Обязателен ли заголовок программы?

  • Какие разделы описаний вы знаете?

  • С чего начинается раздел констант?

  • Как описать переменные?

  • С чего начинается основная часть программы? Как ее закончить?



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

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

  • Языки программирования Qbasic и Turbo Pascal позволяют разделять программу на отдельные части, которые называются подпрограммами. Сам термин подпрограмма говорит о том, что она подобна и подчинена основной программе.



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

  • Подпрограммы решают три важные задачи, значительно облегчающие программирование:

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

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

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

  • Таким образом,

    подпрограмма

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


Общие принципы выделения подпрограмм:

  • Если в программе необходимо переписывать одни и те же последовательности команд, то стоит эту последовательность команд оформить в виде подпрограммы;

  • Стоит перенести в подпрограмму подробности, заслоняющие основной смысл программы;

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





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

  • Процедуры предназначены для выполнения некоторой последовательности действий.

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

  • Заголовок состоит из служебного слова

    Procedure

    (

    Sub

    в языке QBasic), за которым следует имя процедуры, а в круглых скобках — список формальных параметров. После заголовка могут идти те же разделы, что и в программе. Таким образом, общий вид будет следующим:
  • SUB

    [(формальные параметры)]

    Procedure

    [(формальные параметры)];
  • Список формальных параметров может отсутствовать.

  • Объявление переменных описательная часть

  • Begin

  • тело процедуры тело процедуры

  • EXIT SUB досрочный выход

    EXIT SUB

  • END SUB End;



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

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

  • Фактические параметры — это параметры, которые передаются процедуре при обращении к ней.

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

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

  • Все формальные параметры делятся на два вида:

  • параметры-переменные и параметры-значения.



Qbasic

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

  • Без круглых скобок переменные передаются по ссылке.

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


Turbo Pascal

7.0

  • Параметры-переменные в Turbo Pascal 7.0

    — это те формальные параметры,

    перед которыми стоит служебное слово Var.

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

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


Локальные или глобальные переменные

  • Область действия переменной (идентификатора) - часть программы, где он может быть использован. Область действия переменной определяется местом их объявления. В программе все переменные делятся на глобальные и локальные.

  • Глобальные переменные

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

    локальными

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


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

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

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

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

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



Составить процедуру сложения двух чисел, вводимых с клавиатуры



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

  • Процедура вызывается как оператор, состоящий из имени процедуры. В круглых скобках передаются фактические параметры. В нашем примере, фактические параметры а, в и s передают свои значения соответственно формальным параметрам X, Y и S. После завершения работы процедуры переменные A и B имеют те же значения, что и при вызове, а S получает новое значение.

  • Передача параметров очень важна для процедур и функций. Это процесс, благодаря которому передается информация.

  • Пусть а=3 и в=4. Когда в программе встречается оператор

  • summa((a), (b),S) или summa (a,b,s);,

    то ЭВМ выполняет следующие действия:

  • - выделяет память для переменных, опи­санных в процедуре;

  • - присваивает формальным параметрам значе­ния фактических: х:=а (х=3), у:=в (у=4), s:=s;

  • - выполняет операторы процедуры, то есть найдет сумму

  • - полученное значение присвоит перемен­ной

    S

    , а переменные

    A

    и

    B

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


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





Составить программу, которая будет находить аb, то есть b-ую степень числа A, где A и B - это целые числа и B>0, вводимые с клавиатуры.

  • uses crt;

  • ^ DIM A, B AS INTEGER var a,b:integer;

  • DIM S AS LONGSUB s:longint;

  • stepen (X, Y AS INTEGER, procedure stepen (x,y:integer;var

  • S AS LONG) s:longint);

  • DEFINT I var i:integer;

  • begin

  • S = 1 s:=1;

  • FOR I = 1 TO Y for i:=1 to y do

  • S = S * X s:=s*x;

  • NEXT

  • END SUB end;











edu 2018 год. Все права принадлежат их авторам! Главная