русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Подпрограммы: процедуры.


Дата добавления: 2015-07-23; просмотров: 1662; Нарушение авторских прав


1. Структурное программирование и технология нисходящего программирования.

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

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

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

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

С массовым внедрением вычислительной техники процесс программирования постепенно превращается в промышленное изготовление программ. Для этого создаются различные технологии, одна из них технология нисходящего программирования. Эта технология базируется на методе программирования «сверху – вниз». Основой этого метода является то, что любую сложную задачу можно разбить на более простые подзадачи, или фрагменты. Решение отдельного фрагмента сложной задачи может представлять собой самостоятельный программный блок. Процесс детализации продолжается до тех пор, пока на станут ясны все детали решения задачи. В этом случае программу решения сложной задачи можно представить как иерархическую совокупность относительно самостоятельных фрагментов - подпрограмм. Таким образом, подпрограммой называется обособленная, оформленная в виде отдельной синтаксической конструкции и снабженная именем часть программы. Использование подпрограмм позволяет выполнять одну и туже обработку различных данных в разных участках основной программы, что существенно уменьшает объем программы и упрощает ее написание. Например, формирование случайным образом и вывод на экран одномерных массивов разной размерности (см. задачу 1).



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

2. Подпрограммы в языке Pascal. Понятие «процедура».

Все подпрограммы языка Pascal делятся на стандартные (входят в состав языка и вызываются для выполнения по строго фиксированному имени) и определенные пользователем (разрабатываются и именуются самим пользователем). К стандартным относятся, например, подпрограммы модулей Graph и Crt. Далее мы будем рассматривать подпрограммы, определенные пользователем.

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

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

2. Структура программы.

Program Primer; {заголовок основной программы}

Uses …; {раздел подключения модулей основной программы}

Label …; {раздел описания меток основной программы}

Const …; {раздел описания констант основной программы}

Type …; {раздел описания типов основной программы}

Var …; {раздел описания переменных основной программы}

Procedure <имя_процедуры> (<список формальных параметров>); {заголовок процедуры}

Раздел описаний п/п
Label …; {раздел описания меток процедуры}

Const …; {раздел описания констант процедуры}

Тело п/п
Type …; {раздел описания типов процедуры}

Раздел операторов п/п
Var … ; {раздел описания переменных процедуры}

Begin {начало процедуры}

… {тело процедуры}

End; {конец процедуры}

Begin {начало основной программы}

<имя_процедуры>(<список фактических параметров>); {вызов процедуры}

End. {конец основной программы}

В отличие от основной программы, в конце подпрограммы (при описании) обязательно ставится точка с запятой, а не точка (основное отличие). <Имя_процедуры> - это идентификатор, уникальный в пределах программы. Упоминание имени процедуры в тексте программы называется вызовом процедуры.

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

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

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

При вызове подпрограммы на место формальных параметров подставляются конкретные значения (выражения) либо имена конкретных переменных. Это <список фактических параметров>. Имена фактических и формальных параметров не должны совпадать.

Между формальными и фактическими параметрами должно быть полное соответствие:

- формальных и фактических параметров должно быть одинаковое количество;

- порядок следования фактических и формальных параметров должен быть один и тот же;

- тип каждого фактического параметра должен совпадать с типом соответствующего формального параметра.

Если параметром подпрограммы является массив (одномерный или двумерный), то следует описать тип-массив в разделе описания типов основной программы (см. задачу 1).

4. Параметры-значения и параметры-переменные (входные и выходные параметры) подпрограмм, механизм передачи параметров (можно перенести на Занятие 2, если не хватит времени).

Формальные параметры подпрограмм можно разбить на две основные группы: параметры-значения (без Var) и параметры-переменные (c Var).

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

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

Параметры-переменные обязательно используются для определения результатов выполнения процедуры, поэтому они являются выходными параметрами. После окончания работы процедуры они передаются в основную программу. В <списке формальных параметров> выходные параметры перечисляются после зарезервированного слова Var с обязательным указанием типа.

Входные параметры = параметры-значения (без Var). Выходные параметры = параметры-переменные (с Var).

 

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

Например, (задача 1) в процедуре формирования массива Input() параметр D типа Massiv является выходным (параметром-переменной), т. к. процедура формирует матрицу, т. е. изменяет переменную. А целочисленное N процедурой не изменяется, поэтому является параметром-значением.

5. Локальные и глобальные переменные, область действия переменных

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

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

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

Например, ( см. задачу 1) массивы А и В являются глобальными переменными, а i – локальной переменной.

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

 
 

 

 


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

- имена объектов, описанных в некотором блоке, считаются известными в пределах данного блока, включая и все вложенные (например, вложенными являются блоки C и D по отношению к блоку В);

- имена объектов, описанных в блоке, должны быть уникальны в пределах данного блока и могут совпадать с именами объектов из других блоков;

- если в некотором блоке описан объект, имя которого совпадает с именем объекта, описанного во внешнем блоке (например, для блока F внешним является блок Е), то имя объекта внешнего блока становится недоступным в данном блоке (оно как бы экранируется одноименным объектом данного блока).

Например, (см. рис.) можно сказать, что объекты, описанные в блоке В, известны (видимы) кроме самого блока В еще и в блоках С и D, но невидимы в блоке А. Объекты, описанные в блоке F, известны только в пределах этого блока.

Задача 2. С помощью датчика случайных чисел сформировать матрицы А{5,6} и В{7,5}. Вывести их на экран. Использовать процедуры. Для каждой матрицы сформировать одномерный массив из сумм элементов каждой строки.

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

б) Схема алгоритма процедуры формирования матрицы:

 

 

в) Схема алгоритма процедуры вывода матрицы:

г) Схема алгоритма процедуры вывода массива:

 

 

д) Схема алгоритма процедуры формирования массива из матрицы:

 

Program Primer; Uses Crt; Type Matrica=array[1..7,1..6] of Integer; Massiv=array[1..7] of Integer; Var A, B : Matrica; E, F : Massiv; Procedure Input(Var D:Matrica; N,K:Integer); Var i, j : Integer; Begin Randomize; For i:=1 to N Do For j:=1 to K Do D[i,j]:=Random(10)-5; End; Procedure Output(D:Matrica; N,K:Integer); Var i, j : Integer; Begin For i:=1 to N Do Begin For j:=1 to K Do Write(D[i,j]:4,’ ‘); Writeln; End; End; Procedure Output_Massiv(Z:Massiv; N:Integer); Var i : Integer; Begin For i:=1 to N Do Writeln(Z[i]:4); End; Procedure Form_Massiv(Var Z:Massiv;D: Matrica; Var S, i, j : Integer; Begin For i:=1 to N Do Begin S:=0; For j:=1 to K Do S:=S+D[i,j]; Z[i]:=S; End; End; Begin Input(A,5,6); Input(B,7,5); Form_Massiv(E,A,5,6); Form_Massiv(F,B,7,5); Clrscr; Writeln(‘Матрица А’); Output(A,5,6); Writeln(‘Массив Е’); Output_Massiv(E,5); Readkey; Clrscr; Writeln(‘Матрица В’); Output(В,7,5); Writeln(‘Массив F’); Output_Massiv(F,7); Readkey; End. {заголовок программы} {объявление типа матрица с макс. числом} {строк и столбцов и типа массив} {объявление переменных} {процедура формирования матрицы} {указанной размерности} {N – число строк в матрице} {K – число столбцов в матрице} {формирование матрицы с помощью} {датчика случайных чисел} {процедура вывода матрицы нужной} {размерности} {N – число строк в матрице} {K – число столбцов в матрице} {процедура вывода массива указанной} {размерности} {N – число элементов в массиве} N, K : Integer); {процедура формирования} {массива из сумм эл-тов строк матрицы} {основная программа} (вызов процедуры форм-я для матрицы А) {вызов процедуры форм-я для матрицы В} {вызов проц. форм-я масс. Е из матр. А} {вызов проц. форм-я масс. F из матр. В} {очистка экрана} {вызов проц. вывода матр. для матр. А} {вызов проц. вывода масс. для масс. Е} {вызов проц. вывода матр. для матр. В} {вызов проц. вывода масс. для масс. F} {конец программы}


<== предыдущая лекция | следующая лекция ==>
Генерация звука в модуле Crt | Подпрограммы: функции


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.632 сек.