Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Osnovy_informatiki_-_9_Tipy_dannykh

.pdf
Скачиваний:
14
Добавлен:
13.02.2015
Размер:
484.47 Кб
Скачать

Обработка всех элементов массива

uses arrays; var a:IArr;

n,j,s,p,k:integer;

sr:real; begin

read(n); assert((n>0)and(n<=NM));

ReadArr(a,n); s:=0; {сумма}

for j:=1 to n do s:=s + a[j]; p:=1; {произведение}

for j:=1 to n do p:=p*a[j]; k:=0; {количество нулевых} for j:=1 to n do

if a[j]=0 then k:=k+1;

10.11.2012

Чердынцева М.И., мехмат ЮФУ

21

Обработка всех элементов массива (продолжение)

FillArrRand(a,n,100);

sr:=0; k:=0; {ср. арифм. больших 50} for j:=1 to n do

if a[j]>50 then

begin sr:=sr+a[j];k:=k+1; end; if k<>0 then sr:=sr/k;

end.

10.11.2012

Чердынцева М.И., мехмат ЮФУ

22

Минимальный элемент и его номер

uses arrays; var a:IArr;

n,j,min,nmin:integer; begin

read(n); assert((n>0)and(n<=NM));

ReadArr(a,n);

min:=a[1]; nmin:=1; {при n=1 min=a[1]} for j:=2 to n do

{ min=min(a[1],a[2],…,a[j-1]) – инвариант цикла} if a[j]<min then

{по определению min для двух чисел (a[j] и min)} begin

min:=a[j];

nmin:=j;

end;

end.

10.11.2012

Чердынцева М.И., мехмат ЮФУ

23

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

uses arrays; var a:IArr;

n,j,s:integer; begin

read(n); ReadArr(a,n); s:=0;

j:=1;

while (j<=n) and(a[j]<>0) do begin

s:=s+a[j];

j:=j+1;

end;

if (j>n) then writeln(’нет нулей’) else writeln(s);

end.

10.11.2012

Чердынцева М.И., мехмат ЮФУ

24

Среднее арифметическое после первого отрицательного, если он есть

uses arrays;

 

 

var a:IArr;

n,j,k:integer;

sr:real;

begin

 

 

read(n);

ReadArr(a,n);

 

j:=0;

 

 

repeat

 

 

j:=j+1;

 

 

until (j=n) or (a[j]<0);//короткое вычисление OR if (a[j]<0) then

if (j=n) then

writeln (’отр. – последнее’)

else begin

sr:=0; k:=n-j;

for j:=j+1 to n do sr:=sr+a[j]; writeln(sr/k)

end

else writeln(’нет отрицательных’) end.

10.11.2012

Чердынцева М.И., мехмат ЮФУ

25

Переставить два элемента с заданными номерами m, k

r:=a[m]; a[m]:=a[k]; a[k]:=r;

swap(a[m],a[k]);

Инвертировать массив

for i:=1 to n div 2 do

swap(a[i],a[n-i+1]);

10.11.2012

Чердынцева М.И., мехмат ЮФУ

26

Циклический сдвиг влево/вправо

r:=a[1];

r:=a[n];

for i:=1 to n -1 do

for i:=n downto 2 do

a[i]:=a[i+1];

a[i]:=a[i-1];

a[n]:=r;

a[1]:=r;

Удаление элемента в позиции k

for i:=k to n -1 do a[i]:=a[i+1];

n:=n-1;

Добавление элемента в позицию k

for i:=n downto k+1 do a[i]:=a[i-1];

a[k]:= …; n:=n+1;

10.11.2012

Чердынцева М.И., мехмат ЮФУ

27

Поиск заданного значения

function Find(const A: IArr; n: integer; k: integer): integer;

var i: integer; begin

i:=1;

while (i<=n) and (a[i]<>k) do i:=i+1; if i=n+1 then

Result:=0 else Result:=i; end;

10.11.2012

Чердынцева М.И., мехмат ЮФУ

28

Поиск с барьером

function BarrierFind (var A:IArr;

n:integer; k:integer): integer;

var i: integer; begin

i:=1;

a[n+1]:=k; // барьер (для него нужно место!!!)

while a[i]<>k do i:=i+1; if i=n+1 then

Result:=0 else Result:=i; end;

10.11.2012

Чердынцева М.И., мехмат ЮФУ

29

Поиск по условию, передаваемому как параметр

type

IPredicate = function(r: integer): boolean; function Find (const A: IArr; n: integer;

Pred: IPredicate): integer;

var i: integer; begin

i:=1;

while (i<=n) and not Pred(a[i]) do i:=i+1; if i=n+1 then

Result:=0

else Result:=i; end;

10.11.2012

Чердынцева М.И., мехмат ЮФУ

30