Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Паскаль ИНФОРМАТИКА.doc
Скачиваний:
221
Добавлен:
09.04.2015
Размер:
4.57 Mб
Скачать

Печать массива

Пусть в программе уже стандартизирована константа N, соответствующая количеству элементов массива, и сам тип Massive:

Const n=15;

Type Massive=array[1..n] of real;

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

Procedure PrintMas(aa: Massive);

Var ii: byte;

Begin

Writeln;

For ii:=1 to n do Write(aa[ii]:6:2,’ ‘); {вывод на экран результата}

Writeln;Writeln;

End;

Заметим, что процедура вызывается PrintMas(Имя_Массива), то есть требуется лишь имя распечатываемого массива. При этом предполагается, что элементы массива относятся к типу Real. Если мы заменим тип Real на Integer, то придется исправить еще и формат вывода, убрав одну лишнюю цифру, так как формат aa[ii]:6:2 соответствует выводу вещественных чисел.

Локальная обработка массива

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

Пример. Дан массив a, состоящий из 10 целых чисел. Найти 1) количество нулевых; 2) сумму положительных; 3) произведение отрицательных элементов массива.

Program Lokal;

Uses Crt;

Const n=10;

Type Massive = array [1..n] of integer;

Const a: Massive = (-4,3,-9,0,2,-1,6,0,-5,1);

Var i,p :byte; s,t : integer;

Begin

ClrScr;

p:=0;s:=0;t:=1; {Стандарты сумм и произведения}

For i:=1 to n do Begin

If (a[i]=0) Then Inc(p)

Else If(a[i]>0) Then s:=s+a[i]

Else t:=t*a[i];

End;

Writeln(‘p=’,p,’ s=’,s,’ ‘t=’,t);

Repeat Until KeyPressed; End.

Пример: Найти max и min элементы одномерного массива целых чисел и их индексы

Program Poisk;

Uses crt;

Var A:array[1..10] of integer;

i,q,max,min,imin,imax:integer;

begin

clrscr;

write ('q='); readln(q) ; {загрузка одномерного массива целых чисел}

randomize;

for i:=l to 10 do begin

A[i]:=Random(q); {от 0 до q}

writeln('A[' , i , ']=', A[i]); end;

max:=-1000; min:=1000; {max:=-1.0e38;min:=1.0e38}

for i:=l to 10 do begin

if (A[i]>max) then begin max:=A[i]; imax:=i; end;

if (A[i]<min) then begin min:=A[i]; imin:=i; end; end;

writeln('max - A[', imax, ']=',max);

writeln ('min - A[', imin, ']=',min);

readkey

end.

Глобальная обработка массива

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

Инверсия

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

0

-6

13

3

8

-5

-1

7

после инверсии превратиться в массив

7

-1

-5

8

3

13

-6

0

Таким образом, 1-ый элемент меняется местами с N-ым, 2-ой – с (N-1)-ым, и т.д. Можно убедиться в том, что некоторый i-ый элемент поменяется с (N+1-i)-ым. Тонкость заключается в том, что при организации цикла по всему массиву от 1 до N элементы будут дважды переставлены, то есть вернуться на свои места. Дважды инвертированный массив совпадает с исходным. Из этого следует, что цикл придется заводить до середины массива.

Если вычислять эту середину как N div 2(целая часть от деления), то возможны две ситуации: четное и нечетное количество элементов. Но выясняется, что принципиальной разницы между ними нет, так как при нечетном числе элементов (например, 9) средний элемент (с номером 5) хоть и не попадает в цикл, заведенный от 1 до 4, он просто не имеет пары для перестановки. Будучи симметричным самому себе.

Если константа n, тип Massive и процедура Swap заложены в программе, то процедура инверсии может иметь вид:

Имя файла: Inversia.pas

Procedure Inversia (Var aa:Massive);

Var ii: byte;

Begin

For ii:=1 to n div 2 do Swap (aa[ii],aa[n+1-ii]);

End;

Обратите внимание на то, что, в отличие от печати массива, процедура инверсии изменяет исходный массив, и поэтому входной параметр “aa” описан как переменная.