Вконтакте Facebook Twitter Лента RSS

Подпрограммы. Понятие подпрограммы Работает подпрограмма в основной программе

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

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

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

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

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

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

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

При составлении подпрограмм с параметрами надо соблюдать следующие правила:

1) каждая подпрограмма имеет свое имя и список формальных параметров;

2) процедура из основной программы вызывается командой вызова, которая по форме ничем не отличается от вызова команды исполнителя. Результат присваивается одной или нескольким переменным, которые находятся в списке формальных параметров. Но результатом могут быть, конечно, не только значения переменных, но какое либо действие, выполненное ЭВМ.

Пример 1. Используем алгоритм нахождения наибольшего общего делителя двух натуральных чисел в качестве вспомогательного при решении задачи: составить программу вычитания дробей (a, b, c, d - натуральные числа). Результат представить в виде обыкновенной несократимой дроби.

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

1) Ввести натуральные числа M, N.

2) Если M=N, перейти к п. 5, иначе к следующему пункту.

3) Если M>N, то M:=M-N, иначе N:=N-M.

4) Перейти к п. 2.

5) Передать значение M в основную программу.

6) Конец подпрограммы.

Основная программа.

1) Ввести значения A, B, C, D.

2) E:=A*D - B*C.

4) Если E=0, вывести значение E и перейти к п. 9, иначе перейти к следующему пункту.

5) M:=|E|, N:=F, перейти к подпрограмме вычисления НОД.

7) E и F нацело разделить на G.

8) Вывести значения E и F на печать.

9) Конецпрограммы.

Var A, B, C, D, G, E, F: Integer;

Procedure Nod(M, N: Integer; Var K: Integer);

While M <> N Do

If M >

Write("Введите числители и знаменатели дробей:");

ReadLn(A, B, C, D);

E:= A * D - B * C;

If E = 0 Then WriteLn(E)

Nod(Abs(E), F, G);

WriteLn("Ответ: ", E, "/", F)

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

Вызов процедуры осуществляется следующим образом:

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

Например,

Nod(Abs(E), F, G);

По способу передачи фактических значений в подпрограмму в Turbo Pascal 7.0 выделяют параметры-переменные, параметры-значения, параметры-константы и массивы открытого типа, строки открытого типа, параметры-процедуры, параметры-функции (подробности - в литературе).

Функция (в отличие от процедуры) всегда возвращает единственное значение.

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

Function Nod(M, N: Integer) : Integer;

While M <> N Do

If M > N Then M:= M - N Else N:= N - M;

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

Вызов функции будет следующим:

G:= Nod(Abs(E), F);

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

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

Пример 2. Дано натуральное число n. Переставить местами первую и последнюю цифры этого числа.

If Impossible(N)

Then WriteLn("Невозможно переставить цифры, возникнет переполнение")

WriteLn("Ответ: ", N)

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

Function Impossible(N: Integer) : Boolean;

If Number(N) < 5

Then Impossible:= False

Else Impossible:= (N Mod 10 > 3) Or

(N Mod 10 = 3) And

(N Mod 10000 Div 10 * 10 + N Div 10000 > MaxInt Mod 10000)

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

Function Number(N: Integer) : Integer;

Var Vsp: Integer;

While N > 0 Do

Vsp:= Vsp + 1; N:= N Div 10

Наконец, последняя процедура.

Procedure Change(Var N: Integer);

Var Kol, P, S, R: Integer;

Kol:= Number(N);

P:= N Mod 10; {последняяцифра}

If Kol > 1 Then

S:= N Div Round(Exp((Kol - 1) * Ln(10)))

Else S:= 0; {перваяцифра}

R:= N Mod Round(Exp((Kol - 1) * Ln(10))) Div 10;

N:= P * Round(Exp((Kol - 1) * Ln(10))) + R * 10 + S

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

Пример 3. Найти максимальную цифру в записи данного натурального числа.

Program MaxDigit;

Type NaturLong = 1..(High(LongInt));

Function Maximum(N: LongInt) : Digit;

Then Maximum:= N

Else If N Mod 10 > Maximum(N Div 10)

Then Maximum:= N mod 10

Else Maximum:= Maximum(N Div 10)

Write("Введите натуральное число: ");

WriteLn("Максимальнаяцифраравна ", Maximum(A))

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

Более подробно о рекурсии говорится в следующей статье.

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

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

В языке Паскаль механизм подпрограмм реализуется в виде ПРОЦЕДУР и ФУНКЦИЙ, которые вводятся в программе с помощью своего описания, но их способом их использования.

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

Delay (10); вызывает задержку выполнения программы на 10мс.

Функция аналогична процедуре, но имеются два отличия: функция передает в точку вызова скалярное значение; имя функции в выражении может выходить как операнд. Например, функция SQR(x)-возведет в квадрат значение целого или вещественного значения X и передаст в точку вызова вычисленное значение квадрата переменной X.

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

à Встроенные (стандартные) - входят в состав языка и вызываются для выполнения по строго фиксированному имени.

à Определенные пользователем – разрабатываются и имеются самим пользователем.

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

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

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

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

Фактические параметры - это параметры, которые передаются подпрограмме при общении с ней.

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

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

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

Цель урока:

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

Задачи:

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

План

I. Повторение материала.
II. Изучение нового материала.
III. Итог урока.
IV. Домашнее задание.

ХОД УРОКА

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

  1. Какова структура программы?
  2. Обязателен ли заголовок программы?
  3. Перечислите разделы описаний
  4. Какие служебные слова служат для описания переменных?
  5. Какое служебное слово является началом основной части программы?
  6. Как заканчивается программа?

PROGRAM ИМЯ; (можно не писать)
1. CONST
2. TYPE
3. VAR
4. PROCEDURE, FUNCTION
BEGIN
Тело программы
END.

А сейчас будем разгадывать КЛЮЧВОД, заполняя его – повторим операторы, служебные слова языка Паскаль (Приложение 1 ).
(Заполненный КЛЮЧВОРД – Приложение 2 )

II. Изучение нового материала

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

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

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

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

В языке Pascal механизм подпрограмм реали­зуется в виде ПРОЦЕДУР (PROCEDURE) и ФУНКЦИЙ (FUNCTION), которые вводятся в про­грамму с помощью своего описания, но их структура такая же, как иструктура программы. Они различаются назначением и способом их использования.

Процедуры предназначены для выполнения некоторой после­довательности действий.
Чтобы использовать подпрограмму – процедуру её надо описать и к ней надо уметь обращаться.

Описание:

  1. Выбрать для неё имя.
  2. Определить параметры.
  3. Составить последовательность действий, которые надо выполнять, для получения результата.

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

Параметры бывают следующих видов:

I. Глобальные – параметры описываются в головном модуле, доступны любой подпрограмме.
I. Локальные – используются только в процедуре, они могут быть или не быть, описываются после слова VAR, с указанием типа.

II. Формальные – описываются в заголовке процедуры, к ним относятся входные и выходные параметры.
III. Входные – это и IV. Параметры – значений описываются через запятую с указанием типа. При выходе из процедуры не сохраняются.
III. Выходные – это и IV. Параметры – переменные описываются после слова VAR через запятую, с указанием типа, при выходе из процедуры сохраняются.
Эти параметры описываются в круглых скобках после имени процедуры

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

Формальные и фактические должны совпадать по 3-м признакам:

  • по количеству
  • по типу
  • по порядку следования.

Описание процедуры

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

Рrосеdиге <имя> (формальные параметры);
VAR (описание локальных параметров, они могут быть или не быть)
begin
тело процедуры
end; (конец процедуры)
BEGIN (головного модуля)
Фактические параметры
END.
Используя подпрограмму – процедуру рассмотрим несколько задач

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

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

uses art;
var a,b,s,c,d:real;
procedure maxim (x,y: real; var s:real);
begin
if x
end;

begin
clrscr;
writeln("bbedite 4 chisla ");readln(a,b,c,d);

В переменную S заносим большее из двух чисел А и В.

maxim(a,b,s);

В переменную S заносим большее из двух чисел С и S.

maxim(c,s,s);

В переменную S заносим большее из двух чисел D и S.

maxim(d,s,s);}
writeln("max=",s:3:I);
readkey;
end.

Произвести отладку на компьютере.

III. Итак, мы познакомились с новым понятиям: подпрограмма, процедура. Узнали, какие параметры необходимо для работы с процедурами. Структуру процедуры. Описание.

IV. Домашнее задание

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

– формула для подсчёта длины: A =

Какая функция в Паскале означает корень квадратный? – SQRT означает возведение в квадрат – SQR

– периметр находим по формуле Р = A + B + C
– формула для нахождения площади: S =
– сколько раз будем обращаться к процедуре? – 3 раза

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

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

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

Листинг 1. Пример подпрограммы - процедуры

G_Per=56 ; PeredatByte(); ... G_Per=37 ; PeredatByte(); ... /********************************************** Подпрограмма передачи байта через последовательный порт **********************************************/ void PeredatByte(void ) {do ;while (TI==0) SBUF=G_Per //то передать очередной байт }

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

PeredatByte(56 ); ... PeredatByte(57 ); ... void PeredatByte(char byte) {do ;while (TI==0 ) //Если предыдущий байт передан SBUF=byte; //то передать очередной байт }

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

PeredatStroky("Напечатать строку");

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

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

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

Y=sin(x);

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

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

Листинг 2. Пример подпрограммы - процедуры с передачей данных через параметр подпрограммы

... if (PeredatByte("A" )!=0 )printf(“Отказ последовательного порта” ); ... /******************************************************* Подпрограмма передачи байта через последовательный порт ********************************************************/ int PeredatByte(char byte) {for (i=1000 ;i0;) {if (TI==0 ) //Если предыдущий байт передан {SBUF=byte; //то передать очередной байт return(0 ); //и вернуть признак нормального выполнения подпрограммы } } return(-1 ); //Если превышено время ожидания, то вернуть признак отказа передатчика }

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

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

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

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

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

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

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

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

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


Подпрограмма – это блок кода между операторами Sub и End Sub или Function и end Function .

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

Подпрограмма-процедура Sub и End Sub . Обычно подпрограмму-процедуру принято называть процедурой.

При написании программы нужно учесть одно правило: «Внутри одной процедуры не может быть описана другая процедура».

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

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

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

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

6.2.4 Принцип проектирования программ сверху-вниз и снизу–вверх.

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

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

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

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

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

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

Пример. Чтобы написать число 512, сначала пишут цифру 5, затем 1 и, наконец, 2. При этом цифры рисуют, последовательно прорисовывая линии, из которых они состоят. Принтер напечатает это число точками.

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

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

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

© 2024 Windows. Программы. Железо. Интернет. Полезно знать