Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Документ'
Мыслить — значит стараться обнаружить конкретные связи между нашими действиями и их последствиями, так чтобы они стали продолжением других. Благодаря...полностью>>
'Литература'
ПАНАРИН ИГОРЬ НИКОЛАЕВИЧ,доктор политических наук,Академик Академии военных наук,Профессор Дипломатической академии МИД РФИНФОРМАЦИОННАЯ ВОЙНАИ ТРЕТИ...полностью>>
'Программа'
Территориальное управление Федеральной антимонопольной службы по Краснодарскому краю (далее - Краснодарское УФАС России) (по согласованию);Органы испо...полностью>>
'Документ'
Оглянуться не успели — и Вы уже в ТРИДЕВЯТОМ ЦАРСТВЕ, а оно нынче аккурат в славном городе Переславле-Залесском находится! И уж там, на неведомых дор...полностью>>

Шкиль Владимир Григорьевич практическая работа

Главная > Практическая работа
Сохрани ссылку в одной из сетей:

Подпрограммы. Рекурсия. 69

Министерство образования и науки Республики Казахстан

Средняя общеобразовательная профильная школа

дифференцированного обучения №17 города Павлодара

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

Рекурсия

Методические указания

по дисциплине «Информатика»

к выполнению практической работы №4

программирование в Turbo (Borland) Pascal

(для внутришкольного пользования)

Павлодар, 2008 г.

СОГЛАСОВАНО:

Заместитель директора по УВР Шевченко Л.В.

Руководитель методического объединения учителей математики, информатики, физики

Харитонова Т.В.

«20» августа 2007г.

УТВЕРЖДАЮ:

Директор СОПШДО №17

города Павлодара

Шиндлярская Г.Ш.

«20» августа 2007г.

Составитель:

Преподаватель математики и информатики СОПШДО №17 г.Павлодара

Шкиль Владимир Григорьевич

Практическая работа №4

Тема: Подпрограммы. Рекурсия.

Цель работы: Получение навыков работы с подпрограммами (процедурами и функциями) в Паскале, понятие и применение рекурсии.

  1. Теоретический материал.

Понятие подпрограммы. Процедуры и функции.

Стандартные подпрограммы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

M:= MIN (X, Y)

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

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

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

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

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

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

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

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

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

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

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

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

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

Рrogram hh;

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

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

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

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

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

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

Begin

. . .

. . .

end.

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

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

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

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

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

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

Program A;

Uses

Crt;

Var

x, y : LongInt;

Procedure Input;

Begin

TextColor(12);

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

TextColor(7);

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

readln(x, y);

End;

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

Procedure Summa;

Begin

TextColor(14);

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

x:=x+y;

End;

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

Procedure Output;

Begin

TextColor(10);

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

TextColor(7);

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

End;

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

Begin

ClrScr;

Input;

Summa;

Output;

readln;

End.

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

Program F;

Uses

Crt;

Var

A, B : integer;

Rez :real;

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

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

Begin

SredArif:=(A+B)/2;

End;

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

Begin

ClrScr;

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

readln(A,B);

Rez:=SredArif(A,B);

write('Cреднее арифметическое этих чисел равно ',Rez:5:3);

readln;

End.

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

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

Все формальные параметры можно разбить на четыре категории:

•параметры значения (эти параметры в основной программе подпрограммой не меняются );

•параметры - переменные ( эти параметры подпрограмма может изменить в основной программе );

•параметры-константы ( используются только в версии 7.0);

•параметры-процедуры и параметры-функции (т.е. процедурного типа).

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

function Max( A: array[ 1..100 ] of real ): real;

Чтобы правильно записать этот заголовок, следует в основной программе ввести тип-массив, а затем использовать его в заголовке:

type tArr =array [ 1..100 ] of real;

function Max ( A: tArr ) : real;

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

Вызов по ссылке и по значению

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

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

Приведем примеры:

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

Procedure SetDate (Year, Month, Day : Word);

имеет три передаваемых в подпрограмму величины. Ее вызов в основной программе может иметь различные формы:

• SetDate (MyYear, MyMonth, MyDay); где MyYear, MyMonth, MyDay – переменные типа Word, которые описаны в основной программе и должны иметь при обращении к процедуре определенные значения. При вызове процедуры эти значения присваиваются внутренним переменным процедуры Year, Month, Day.

• SetDate (MyYear+1, MyMonth div 2, MyDay); при вызове процедуры используются арифметические выражения, которые вычисляются при вызове. В подпрограмму поступает результат вычислений.

• SetDate (1999, 1, 31); где в подпрограмму передаются значения констант.

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

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

Procedure GetDate (Var Year, Month, Day : Word);

Она имеет три переменные, передаваемые по ссылке. Если мы аналогично предыдущему случаю, вызовем эту процедуру из основной программы командой

Procedure GetDate (MyYear, MyMonth, MyDay);

процедура разместит свои переменные Year, Month, Day в тех же ячейках памяти, что и переменные основной программы MyYear, MyMonth, MyDay. После завершения подпрограммы эти переменные сохраняют полученные в процедуре значения.

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

Объявление параметра-константы в заголовке подпрограмм имеет вид

const <имя константы>:<тип константы>

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

• константа может быть задана в явном виде;

• может быть указана переменная или выражение совместимого с константой типа.

Например, Procedure Primer (Const x : byte).

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

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

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

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

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

Пример.

procedure Inp ( Max, Min: real ; N: Word );

function Mult (X, Y: integer): real;

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

Inp(Abs (Z), - Abs (T), 2 * K);

M:=Mult(X + Y, X - Y);

MA:=MAX( B, 5 );

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

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

Рассмотрим две почти одинаковые программы.

Program Variant1; Program Variant2;

Var Var

X : real; X : real;

Procedure writeX; Procedure writeX;

Var

x : real;

Begin Begin

write(x) write(x)

End; End;

Begin Begin

X := Pi; X := Pi;

writeX writeX

End. End.

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

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

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

Возникает вопрос, какова роль локальных переменных, нельзя ли все переменные описать как глобальные?

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

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

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

Задание. Найдите в приведенных выше примерах локальные и глобальные переменные, формальные и фактические параметры, какие параметры переданы по ссылке, а какие – по значению.



Скачать документ

Похожие документы:

  1. Планирование и развертывание научно-исследовательской работы в области педагогической науки

    Документ
    Глейзер Г.Д., Черкасов Р.С. Центр творческих усилий педагогов [к 50-летию Российской академии образования] Математика в школе. 1993. № 5. С. 2–8; 1993.
  2. Л. П. Рифель Государственный архив Восточно-Казахстанской области и его филиалы. Путеводитель по фондам личного происхождения. Усть-Каменогорск, 2005- стр

    Документ
    Путеводитель раскрывает состав и содержание фондов личного происхождения, хранящихся в государственном архиве Восточно-Казахстанской области и его филиалах.
  3. В. А. Козаченко (председатель), С. С. Иванов (зам председателя); члены редколлегии: Н. П. Скобло, И. Т. Марусев, В. Г. Яковлев. Булава иван Антонович, ОАО "Енисейское речное пароходство", 2000. Книга

    Книга
    Книга “Флотская судьба” написана Иваном Антоновичем Булавой к 70-летию Енисейского речного пароходства и является логическим продолжением двух ранее изданных книг: “Были великой реки” И.
  4. Бюллетень поступлений за 2011 год

    Бюллетень
    Диагностика и надежность автоматизированных систем : учебник / Бржозовский Борис Максович [и др.] ; под ред. Б.М. Бржозовского. - 3-е изд., перераб. и доп.
  5. Институт Проблем Экологии и Эволюции им. А. Н

    Документ
    Причины и эволюционные последствия межвидовой гибридизации у птиц (на примере взаимоотношений двух видов овсянок: Emberiza citrinella, E. leucocephala)

Другие похожие документы..