Составление программ использование подпрограмм

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

$log_a x = ln x/ln a $

Замечание 1

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

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

Сдай на права пока

§ 20. Составление программ. Использование подпрограмм (вспомогательных алгоритмов)чертежник.


учишься в ВУЗе
Вся теория в удобном приложении. Выбери инструктора и начни заниматься!

В VBA подпрограммы разделяются на:

  • подпрограммы-процедуры – Sub;
  • подпрограммы-функции – Function.

Кроме того, от первоначальных версий BASIC сохранилась конструкция подпрограмм GoSub – Return , которая в настоящее время практически используется.

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

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

Синтаксис процедуры в упрощенной форме имеет вид:

[ Private | Public ] Sub ( список )

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

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

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

Pascal ABC. Процедуры(Procedure). Использование вспомогательных подпрограмм. Исполнитель чертёжник

«Подпрограммы-процедуры и подпрограммы-функции»
Готовые курсовые работы и рефераты
Решение учебных вопросов в 2 клика
Помощь в написании учебной работы

Call ( фактические переменные )

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

Private Sub Workbook_Open()

Const $a = 2, b = 4$

Dim x As Single

Dim y As Single

Dim z As Single

Call Логарифм(a + b, (a + b) ^ 5, y)

Call Логарифм(10, 10000, z)

Call Логарифм(y, x, z)

Public Sub Логарифм(ByVal основание, аргумент_As Single, ByRef результат _As Single)

результат = Log(аргумент) / Log(основание)

Замечание 2

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

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

Подпрограммы-функции

Определение 1

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

Подпрограмма-функция имеет следующий синтаксис:

[Public | Private] Function (список) _As

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

Обращения к подпрограммам-функциям аналогичны обращению к стандартным математическим функциям VBA.

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

Private Sub Workbook_Open()

Const $a = 2, b = 4$

Dim x As Single

Dim y As Single

Dim z As Single

$y = Логарифм(a + b, (a + b) ^ 5)$

$z = Логарифм(10, 10000)$

Public Function Логарифм(ByVal основание, аргумент _

As Single) As Single

Логарифм = Log(аргумент) / Log(основание)

Результат счета по приведенным программам одинаковый и имеет вид, представленный на рисунке ниже:

Замечание 3

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

  • в ячейку A1 — значение $log2 4 = 2$;
  • в ячейку A3 – значение $log_ (a+b)^6 = 5$;
  • в ячейку A5 – значение $lg_ 10000 = 4$;
  • в ячейку A7 — значение $log_z 2,38^4$ .

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

Учебники. Программирование для начинающих.

монтаж турникета Наша компания предлагает вам широкий ассортимент турникетов различных типов, а также установку турникетов «под ключ», плюс, техническое обслуживание. Система контроля доступа по бесконтактным картам позволяет ограничить доступ в помещение. На входе устанавливает бесконтактный считыватель карт стандарта EM-marine, на выходе из помещения накладная кнопка «EXIT».

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

Программирование — в обычном понимании, это процесс создания компьютерных программ.
В узком смысле (так называемое кодирование) под программированием понимается написание инструкций — программ — на конкретном языке программирования (часто по уже имеющемуся алгоритму — плану, методу решения поставленной задачи). Соответственно, люди, которые этим занимаются, называются программистами (на профессиональном жаргоне — кодерами), а те, кто разрабатывает алгоритмы — алгоритмистами, специалистами предметной области, математиками.
В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения ЭВМ. Более точен современный термин — «программная инженерия» (также иначе «инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.

Assembler

Глава 3. Команды и алгоритмы

Использование подпрограмм

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

Пример 3-8.Вызов подпрограммы без параметров

code segment

assume cs:code,ds:data

delay proc ;Процедура-подпрограмма

push CX ;Сохраним СХ основной программы

mov CX,2000 ;Счетчик внешнего цикла

del1: push CX ;Сохраним его

mov CX,0 ;Счетчик внутреннего цикла

del2: loop del2 ;Внутренний цикл (64К шагов)

pop CX ;Восстановим внешний счетчик

loop del1 ;Внешний цикл (2000 шагов)

pop CX ; Восстановим СХ программы

ret ;Возврат в подпрограмму

delay endp

main proc

mov AX,data ;Настроим DS

mov DX,AX ;на сегмент данных

mov AH,09h ;Функция вывода на экран

mov DX,offset npl1 ;Адрес первой строки

mov CX,3 ;Будем выводить строки в цикле

cntrl1: int 21h ;Вызов DOS

cal1 delay ;Вызов подпрограммы задержки

add DX,msg_len ;Прибавим к смещению длину строки

loop cntrl ;Цикл вызовов DOS

mov AX,4C00h ;Завершение программы

int 21h

main endp

code ends

data segment

msg1 db «Процесс стартовал»,13,10,’$’

msg_len=$-msg1

msg2 db «Процесс идет»,13,10,’$’

msg3 db «Процесс завершается»,13,10,’$’

data ends

stk segment stack

dw 128 dup(‘)

stk ends

end main

В тексте программы сначала описана процедура-подпрограмма, затем основная программа. Как уже отмечалось, порядок их описания роли не играет; важно только, чтобы в завершающей директиве окончания трансляции end был указан в качестве точки входа адрес основной программы (main в нашем примере).
Подпрограмма реализует задержку с помощью вложенных циклов с командой loop, использующей в качестве счетчика шагов регистр СХ. В основной программе этот регистр используется для организации цикла вывода трех строк. Поэтому первое, что должна сделать подпрограмма — это сохранить содержимое регистра СХ, для чего естественно использовать стек. Перед завершающей командой ret регистр СХ должен быть восстановлен. Фрагмент, реализующий задержку, был описан ранее, в разделе 3.2.
Основная программа выводит на экран с помощью функции 09h три строки текста. Для упрощения программы, а также чтобы продемонстрировать некоторые приемы программирования, вывод строк реализован в цикле. Строки сделаны одной длины, и модификация смещения к очередной строке выполняется прибавлением к содержимому регистра DX длины строки.

Читайте также:
Microsoft access это прикладная программа

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

Это и не нужно, так как DOS, выполняя затребованную операцию, первым делом сохраняет все регистры программы, а перед возвратом в программу их восстанавливает. Поэтому, вызывая функции DOS (или BIOS) можно не заботиться о сохранении регистров — их содержимое система на разрушает. Надо только иметь в виду, что многие функции DOS и BIOS после своего завершения возвращают в программу некоторую информацию (число реально введенных символов, доступный объем памяти, номер видеорежима и т.п.) Обычно эта информация возвращается в регистре АХ, однако могут использоваться и другие регистры или их сочетания. Поэтому, обращаясь в программе к системным функциям, необходимо ознакомиться с их описанием и, в частности, посмотреть, какие регистры они могут использовать для возвращаемых значений.
Запустив программу, можно убедиться в том, что строки текста появляются на экране через заметные промежутки времени.
В примере 3-8 подпрограмма не требовала параметров. Чаще, однако, подпрограмма должна принимать один или несколько параметров и возвращать результат. В этом случае необходимо организовать взаимодействие основной программы и подпрограммы.

Никаких специальных средств языка для этого не существует; передачу параметров в подпрограмму и из нее программист организует по своему усмотрению. Для передачи параметров как в одну, так и в другую сторону можно использовать регистры общего назначения, ячейки памяти или стек. Например, нетрудно преобразовать подпрограмму delay из примера 3-8 так, чтобы ей можно было передавать величину требуемой задержки. Пусть эта величина (в числе шагов внешнего цикла) передается в регистре SI.

Пример 3-8а. Подпрограмма задержки с одним параметром, передаваемом в регистре SI

delay proc ;Процедура- подпрограмма

push CX ;Сохраним СХ основной программы

mov CX,SI ;Счетчик внешнего цикла

del1: push CX ;Сохраним его

mov CX,0 ;Счетчик внутреннего цикла

del2: loop del2 ;Внутренний цикл (64К шагов)

pop CX ;Восстановим внешний счетчик

loop del1 ;Внешний цикл (2000 шагов)

pop CX ;Восстановим СХ программы

ret ;Возврат в программу

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

Пример 3-8б. Подпрограмма задержки с преобразованием параметра, передаваемого в регистре SI

delay proc ;Процедура-подпрограмма

push AX ;Сохраним все

push BX ;используемые

push CX ;в программе

push DX ;регистры

mov AX,SI ;первый сомножитель в AX

mov BX,600 ;второй экспериментально

;подобранный сомножитель

mul BX ;Произведение в DX:AX

mov CX,AX ;Нам оно нужно в CX

del1: push CX ;Сохраним его

mov CX,0 ;Счетчик внутреннего цикла

del2: loop del2 ;внутренний цикл (64К шагов)

pop CX ;Восстановим внешний счетчик

loop del1 ;Внешний цикл ( 2000 шагов)

pop DX ;Восстановим

pop CX ;все сохраненные

pop BX ; в начале подпрограммы

pop AX ;регистры

ret ;Возврат в программу

Эксперименты показали, что для получения правильной задержки значение параметра, обозначающее число секунд, следует умножать на 600. Поскольку при умножении в системе команд МП 86 первый сомножитель должен находиться в регистре АХ, а второй не может быть непосредственным значением и тоже, следовательно, должен быть помещен в один из регистров, и, к тому же, произведение занимает два регистра DX:AX, приходится сохранять при входе в подпрограмму не один регистр, как в предыдущем примере, а 4. Передаваемый в SI параметр переносится в АХ, в ВХ загружается второй сомножитель, а из полученного с помощью команды mul произведения используется младшая часть, находящаяся в АХ. Таким образом, для данного варианта подпрограммы значение задержки не должно превышать 109 с (109 х 600 = 65500, что почти совпадает с максимально возможным значением 65535).
Следует обратить внимание на опасность, подстерегающую нас при выполнении операции умножения. Пусть значение передаваемого параметра составляет всего 5. При умножении на 600 получится число 3000, которое безусловно помещается в регистре АХ. Однако операция умножения 16-разрядных операндов

всегда, независимо от конкретной величины произведения, помещает его в пару регистров DX:AX, и, следовательно, при небольшой величине произведения регистр DX будет обнуляться. Поэтому, хотя мы и не используем старшую часть произведения и фактически ее может и не быть, сохранение и последующее восстановление регистра DX является обязательным.
Передача параметров в подпрограмму через регистры общего назначения или даже через сегментные регистры вполне возможна, однако на практике для передачи параметров чаще всего используют стек, хотя бы потому, что регистров немного, а в стек можно поместить любое число параметров. При этом применяется своеобразная методика работы со стеком не с помощью команд push и pop, а с помощью команд mov с косвенной адресацией через регистр ВР, который архитектурно предназначен именно для адресации к стеку. Преобразуем пример 3-8а так, чтобы единственный в этом примере параметр (условная величина задержки) передавался в подпрограмму не через регистр SI, а через стек. Вызов подпрограммы delay в этом случае должен выполняться следующим образом:

push 2000 ;Проталкиваем в стек значение параметра

call delay ;Вызываем подпрограмму delay

Текст подпрограммы подвергнется значительным изменениям:

Читайте также:
Программа на смартфон документы

Пример 3-8в. Передача параметра через стек

delay proc ;Процедура-подпрограмма

push CX ;Сохраним СХ основной программы

push BP ;Сохраним BP

mov BP,SP ;Настроим BP на текущую вершину стека

mov CX, [BP+6] ;Скопируем из стека параметр

del1: push CX ;Сохраним его

mov CX,0 ;Счетчик внутреннего цикла

del2 loop del2 ;Внутренний цикл(64К шагов)

pop CX ;Восстановим внешний счетчик

loop del1 ;Внешний цикл

pop BP ;Восстановим BP

pop CX ;и СХ программы

ret 2 ;Возврат и снятие со стека

;ненужного уже параметра

Команда call, передавая управление подпрограмме, сохраняет в стеке адрес возврата в основную программу. Подпрограмма сохраняет в стеке еще два 16-разрядных регистра. В результате стек оказывается в состоянии, изображенном на рис. 3.9.
После сохранения в стеке исходного содержимого регистра ВР (в основной программе нашего примера этот регистр не используется, однако в общем случае это может быть и не так), в регистр ВР копируется содержимое указателя стека, после чего в ВР оказывается смещение вершины стека. Далее командой mov в регистр СХ заносится содержимое ячейки стека, на 6 байтов ниже текущей вершины. В этом месте стека как раз находится передаваемый в подпрограмму параметр, как это показано в левом столбце рис. 3.8. Конкретную величину смещения относительно вершины стека надо для каждой подпрограммы определять индивидуально,

Рис. 3.8. Состояние стека в подпрограмме после сохранения регистров.

исходя из того, сколько слов сохранено ею в стеке к этому моменту. Напомним, что при использовании косвенной адресации с регистром ВР в качестве базового, по умолчанию адресуется стек, что в данном случае и требуется.
Параметр, полученный таким образом, используется далее в подпрограмме точно так же, как и в примере 3-8а.
Выполнив возложенную на нее задачу, подпрограмма восстанавливает сохраненные ранее регистры и осуществляет возврат в основную программу с помощью команды ret, в качестве аргумента которой указывается число байтов, занимаемых в стеке отправленными туда перед вызовом подпрограммы параметрами. В нашем случае единственный параметр занимает 2 байт. Если здесь использовать обычную команду ret без аргумента, то после возврата в основную программу параметр останется в стеке, и его надо будет оттуда извлекать (между прочим, не очень понятно, куда именно, ведь все регистры у нас могут быть заняты). Команда же с аргументом, осуществив возврат в вызывающую программу, увеличивает содержимое указателя стека на значение ее аргумента, тем самым осуществляя логическое снятие параметра. Физически этот параметр, как, впрочем, и все остальные данные, помещенные в стек, остается в стеке и будет затерт при дальнейших обращениях к стеку.
Разумеется, в стек можно было поместить не один, а сколько угодно параметров. Тогда для их чтения надо было использовать несколько команд mov со значениями смещения ВР+6, ВР+8, BP+0Ah и т.д.
Рассмотренная методика может быть использована и при дальних вызовах подпрограмм, но в этом случае необходимо учитывать, что дальняя команда call сохраняет в стеке не одно, а два слова, что повлияет на величину рассчитываемого смещения относительно вершины стека.

Источник: programm.ws

Программирование с использованием подпрограмм

Nbsp; Ю. Е. Алексеев, А. В. Куров Практикум по программированию на языке C в среде VS C++ Часть 3 Москва Издательство МГТУ им. Н. Э. Баумана 2013 УДК 681.3.06(075) ББК 22.18 А47 Рецензенты А.Д.Козлов, А.И.Коротаев Алексеев Ю.Е., Куров А.В. А47 Практикум по программированию на языке C в среде VS C++. Часть 3: Учеб. посо-бие. –М.: МГТУ им.

Н.Э.Баумана, 2013.- с. В данном пособии продолжается изложение основ программирования на языке C в среде VC C++. В данной части пособия рассматривается программирование с использованием подпрограмм. Изложены принципы организации функций в языке C, подробно рассматриваются вопросы передачи параметров в подпрограммы.

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

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

Материал пособия авторы используют при проведении практических занятий в МГТУ им.Н.Э.Баумана. Для студентов первого курса машино- и приборостроительных специальностей. Может быть полезно преподавателям как сборник заданий при проведении лабораторных работ. Оглавление 6. Программирование с использованием подпрограмм.. 5 6.1. Объявление функций.

5 6.2.Глобальные переменные. 8 6.3.Передача параметров. 10 6.4.Передача массивов в качестве параметров. 12 6.5. Примеры выполнения заданий. 17 6.6. Задания А для самостоятельной работы.. 23 6.7. Задания Б для самостоятельной работы.. 27 6.8.

Рекурсивные функции. 30 6.9. Пример выполнения задания на составление рекурсивной функции. 33 6.10. Задания для самостоятельной работы.. 35 6.11.Дополнительные сведения о подпрограммах и массивах. 40 Динамические массивы.. 40 Перегружаемые функции.

45 Параметры со значениями по умолчанию.. 46 Функции с переменным числом параметров. 47 Шаблоны функций. 49 Передача имен функций в качестве параметров. 50 6.12.

Примеры программ с подпрограммами. 52 7. Модули пользователей. 58 7.1.Создание и использование модулей. 58 7.2. Пример выполнения задания на составление модуля. 69 7.3.

Задания для самостоятельной работы.. 75 7.4. Пример выполнения задания. 81 7.5. Задания для самостоятельной работы.. 87 Список литературы.. 93 Алфавитный указатель. 94 Вопросы для самопроверки.

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

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

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

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

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

Читайте также:
Как замаскировать вирус под программу

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

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

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

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

Рассмотрены правила организации модулей, их структура, действия, которые необходимо выполнить при работе в среде VS C++. Как и в первых двух частях, в данном пособии краткое изложение теоретического материала сопровождается достаточным количеством примеров, что должно позволить студенту за ограниченное время освоить правила организации подпрограмм в языке C. Для закрепления изучаемого материала и приобретению необходимого опыта разработки программ с подпрограммами авторами предлагаются по каждой теме комплекты индивидуальных заданий, выполнение которых послужит приобретению навыков и умений при решении рассматриваемых задач. Задания имеют индивидуальный характер, могут использоваться при проведении лабораторных работ, подготовке к рубежным контролям знаний, а также в качестве заданий при проведении контрольных мероприятий.

Программирование с использованием подпрограмм

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

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

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

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

Объявление функций

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

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

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

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

Имя функции строится так же, как и прочие имена в языке C. Имя функции задаёт её разработчик, и оно должно быть уникальным в своём модуле.

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

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

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

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

Выход из функции и возвращаемые значения (результаты) в вызвавшую ее функцию осуществляется оператором

return выражение;

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

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

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

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

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

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

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

int mod5(int k, int m);//объявление функции

int _tmain(int argc, _TCHAR* argv[])

printf(«wwedite a i bn»);

printf(«n a=%4d b=%4d»,a,b);

printf(«nperwoe kratnoe pjati = %4d»,mod5(a,b));//1

printf(«nperwoe kratnoe pjati = %4d»,mod5(a+9,b+2));//2

printf(«nperwoe kratnoe pjati = %4d»,mod5(a+7,b+3));//3

Источник: studopedia.net

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