Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетодУказdDelphi.doc
Скачиваний:
19
Добавлен:
10.05.2015
Размер:
378.37 Кб
Скачать

4. Какие из приведенных операций допустимы в Паскале, если дано такое объявление переменных:

var A,B : array[1..15,0..8] of real; t: Boolean;?

а) A := B; б) A := A + B; в) t := A <> B; г) A[1] := B[1]; д) A[1] := A[15];

е) A[2,3] :=B[4][8] +B[1,1];

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

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

  • последовательное исполнение— однократное выполнение операций в том порядке, в котором они записаны в тексте программы;

  • ветвление— однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;

  • цикл— многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

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

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

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

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

- заголовок (интерфейс), позволяющий выполнить активизацию подпрограммы;

- локальное описание, содержащее объявление внутренних (рабочих) типов, объектов и переменных;

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

Или другими словами заголовок содержит информацию о том, что делает подпрограмм, а тело – описывает, как она это делает.

Общий вид процедуры:

Procedure<имя>( <список формальных параметров>); [<директивы >];

<локальное описание >;

begin

<тело процедуры>

end;

Функцию описывают так:

Function<имя>( <список формальных параметров>): <тип функции>; [<директивы >];

< локальное описание >;

begin

<тело процедуры, содержащее хотя бы одну команду вида:

имя := выражение >

end;

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

В ObjectPascalсуществует два способа передачи параметров в подпрограмму: по значению и по имени.

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

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

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

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

MyProc(3, 6);

А функции:

X:=Myfunc(3, 6);

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

Вопросы для самопроверки:

1. Даны три натуральных числа. Напишите функцию определения наибольшего делителя.

2. В чем отличия передачи аргументов в подпрограмму по имени и по значению.

3. Как в списке формальных параметров можно задать значения по умолчанию?