Использование функций в структурном программировании

Автор работы: Пользователь скрыл имя, 08 Июля 2014 в 19:22, курсовая работа

Краткое описание

Цель: рассмотреть возможности реализации метода структурного программирования средствами языка программирования Паскаль.
Задачи:
• Изучить методы и типизацию структурного программирования;
• Использовать возможности реализации подпрограмм языка программирования Паскаль на примере функций и процедур;
• Рассмотреть технологию обработки информации с помощью различных функций.

Содержание

ВВЕДЕНИЕ 2
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА 4
ЗАКЛЮЧЕНИЕ 19
ЛИТЕРАТУРА 20

Вложенные файлы: 1 файл

KURSOVAYa.docx

— 129.09 Кб (Скачать файл)

 

 

Использование функций в структурном программировании

 

СОДЕРЖАНИЕ

 

 

 

ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

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

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

Тема: Использование функций в структурном программировании.

Объект: структурное программирование.

Предмет: функции как одна из способов реализации структурного программирования.

Цель: рассмотреть возможности реализации метода структурного программирования средствами языка программирования Паскаль.

Задачи:

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

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

 

 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

Локализация имен

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

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

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

Функция аналогична процедуре, но имеет два отличия:

1) функция передает в программу  результат своей работы в виде  значения простого типа;

2) имя функции может находиться  в выражении как операнд.

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

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

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

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

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

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

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

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

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

Рисунок 1. Пример структуры программы

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

Program ... ;

Procedure A;

ProcedureА1;

begin

end{A1};

Procedure A2;

begin

end{A2}

begin{A}

end{A}.

Procedure В;

Procedure B1;

begin

end {Bl};

Procedure В 2;

Procedure B21;

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

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

Например, в рассмотренном выше примере из основной программы можно обратиться к процедурам А и В, но нельзя вызвать ни одну из вложенных в них процедур A1, A2, B1и т.д.Сказанное относится не только к именам подпрограмм, но и вообще к любым именам, объявленным в них - типам, константам, переменным и меткам.

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

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

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

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

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

Пусть имеем такое описание:

Program .. ;

var V1 : ... ;

Procedure A;

var V2 : . . .;

end{A};

Procedure B;

var V3 : . . . ;

Procedure B1;

var V4 : .. . ;

ProcedureВ 11;

var V5;

Из процедуры В11 доступны все пять переменных V1,...,V5, из процедуры В1 доступны переменные V1,…, V4, из центральной программы - только VI.

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

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

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

Эти объекты называются глобальными по отношению к подпрограмме.

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

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

Для Паскаля совершенно безразличен порядок следования и количество разделовVAR, CONST, TYPE, LABEL, но при определении области действия этих описаний следует помнить, что имена, описанные ниже по тексту программы, недоступны из ранее описанных подпрограмм, например:

var V1 : . . . ;

Procedure S;

var V2 : . . . ;

end{S};

var V3 : . . . ;

Из процедуры S можно обратиться к переменным VI и V2, но нельзя использовать VЗ, так как описание V3 следует в программе за описанием процедуры S.

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

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

var

i : Integer;

Procedure P;

var

i : Integer;

begin

writeln(i)

end {P};

begin

i := 1;

P

end.

Что напечатает эта программа? Все, что угодно: значение внутренней переменной I при входе в процедуру Р не определено, хотя одноименная глобальная переменная имеет значение 1.

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

Если убрать описание

var

i : Integer;

из процедуры Р, то на экран будет выведено значение глобальной переменной I, т.е. 1.

Таким образом, одноименные глобальные и локальные переменные - это разные переменные.

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

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

Описание подпрограммы состоит из заголовка и тела подпрограммы.

Заголовок

Заголовок процедуры имеет вид:

PROCEDURE <имя> [ (<сп.ф.п.>) ];

Заголовок функции:

Информация о работе Использование функций в структурном программировании