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

Правила использования вложенных циклов

  1. циклы не должны «пересекаться», т.е. внутренний цикл должен начинаться позже внешнего, а кончаться – раньше;

  2. параметры вложенных циклов не могут совпадать;

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

  4. глубина вложения, т.е. число внутренних циклов обычно ограничивается здравым смыслом;

  5. число повторений самого внутреннего цикла определяется как произведение числа повторений всех внешних относительно него циклов;

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

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

Writeln(‘Massiv A’);

For i:=1 to 5 do begin

For j:=1 to 4 do write(A[i,j]:6);

Writeln;

End;

Найти в массиве S(3,4), рассмотренном выше, максимальный элемент.

Программа имеет вид:

Program Matrix;

Uses CRT;

Const M=3; N=4;

Var i,j,smax: integer;

s: Array [1..M,1..N] of integer;

begin CLRSCR; {очистка экрана}

Write (‘Vvedite znacheniya s[i,j]: ’);

{ввод массива} for i :=1 to 3 do

for j :=1 to 4 do read (s[i,j]);

{поиск максимума} smax := s[1,1];

for i := 1 to 3 do

for j :=1 to 4 do

if s[i,j] > smax then smax := s[i,j] ;

Writeln (‘V massive S’);

for i:=1 to 3 do begin

for j:=1 to 4 do write (s[i,j]:6); writeln;

end;

Writeln (‘S max = ’, smax);

end.

1.7. Вспомогательные алгоритмы. Нестандартные функции

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

Подпрограммы бывают двух видов:

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

  • функции, которые формируют одно значение переменной, соответствующей имени функции, в зависимости от значений параметров (аргументов).

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

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

Рассмотрим на примере,

FUNCTION tg (xx:real):real;

Begin

tg := sin(xx)/cos(xx);

End;

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

  • ключевое слово FUNCTION,

  • идентификатор функции,

  • список аргументов (формальных параметров) с указанием их типов в скобках,

  • после скобок указывается тип результата функции.

Операторы, описывающие формирование результата функции, называются телом функции.

В приведенном примере:

tg - произвольное имя (идентификатор) процедуры, которому в теле процедуры должно быть присвоено определенное значение. Обычно значение присваивается однократно;

xx - уникальное для программы имя аргумента с указанием типа (real), которое называется формальным параметром;

после скобок указан тип результата real, т.е. тип переменной tg.

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

оператором

Y:= tg(a-x)+2*sqr(tg(x));

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

Например: вычислить значение функции

при i=4; k=7-i.

Находим в выражении типовой участок и называем его fun:

fun(a,b) = ab+(a+b)2 ,

тогда исходное выражение принимает вид:

Z = fun(3,k)/fun(i,k) – fun(2,i)

Программа имеет вид:

Program Funkcija;

Var i,k:integer; z:= real;

Function fun (a,b:integer):integer;

begin fun := a*b+SQR(a+b); end;

BEGIN

i:=4; k:= 7-i;

Z := fun(3,k)/fun(i,k) – fun(2,i);

Writeln (‘ z=’, z:6:3);

END.

Заметим, что в фактическими параметрами функции могут быть элементы массива (т.е. индексированные переменные).

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

Например, вычислить значение функции

при x=3; a=6.

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

Блок-схема вычисления факториала приведена на рис.1.7.

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

Блок-схема основной программы очевидна.

function Factor(n)

factor =1

k от 1 до n

factor = factor*i

возврат

Рис 1.7

Программа имеет вид:

Program Primer;

Var x,a:integer; y:= real;

Function factor (n:integer):integer;

Var k,f:integer;

begin f := 1;

for k:=1 to n do f := f*k;

factor := f;

end;

{основная программа}

BEGIN

x := 3; a := 6;

y := (factor (x)+ factor (a))/ factor (5);

Writeln (‘ y=’, y:6:3);

END.