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

Osnovy_informatiki_-_9_Tipy_dannykh

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

Поиск по условию, передаваемому как параметр (пример использования)

function LZ(x:integer):boolean; begin

Result:= x>0; end;

function Cont5(x:integer) boolean; var d:integer;

begin result:=false; x:=abs(x);

while (x>0) and not result do begin

d:=x mod 10; result:=d=5; x:= x div 10

end

end;

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

31

10.11.2012

Поиск по условию, передаваемому как параметр (пример использования)

k:=Find(A, n, LZ); {поиск первого положительного}

M:=Find(B, l, Cont5);

{поиск числа, в котором встречается цифра 5}

10.11.2012

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

32

Проверить, что массив упорядочен по возрастанию элементов

function IsGrow(const A: IArr; n: integer): boolean; var i: integer;

begin

i:=1; result:=true; while (i<n) and result do begin

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

i:=i+1;

end;

end;

10.11.2012

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

33

Количество по условию

function Count(const A:IArr; n:integer; Pred:IPredicate):integer;

var i: integer; begin Result:=0;

for i:=1 to n do if Pred(a[i]) then

Inc(Result);

end;

10.11.2012

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

34

Минимум по условию

procedure MinElemCond(const A: IArr; n: integer; var min: real; var minind: integer;

Pred: IPredicate); var i: integer;

begin

min:=MaxInt; minind:=0; for i:=1 to n do

if Pred(a[i]) and (a[i]<min) then begin

min:=a[i];

minind:=i;

end;

end;

10.11.2012

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

35

Удаление всех по условию

procedure Delete(var a:IArr; var n:integer; Pred: IPredicate);

var i,j: integer; begin

j:=0;

for i:=1 to n do

if not Pred(a[i]) then begin

j:=j+1;

a[j]:=a[i];

end

n:=j;

end;

10.11.2012

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

36

Слияние двух упорядоченных массивов

procedure Merge(const a: IArr; n: integer;

const b: IArr; m: integer; var c: IArr); var ia,ib,ic: integer;

begin // a,b упорядочены по возрастанию a[n+1]:=MaxInt; // барьер b[m+1]:=MaxInt; // барьер

ia:=1; ib:=1;

for ic:=1 to n+m do

if a[ia]<b[ib] then begin c[ic]:=a[ia]; ia:=ia+1 end

else begin

c[ic]:=b[ib]; ib:=ib+1 end;

end;

10.11.2012

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

37

Поиск в упорядоченном массиве (двоичный поиск)

procedure BinarySearch(const a: IArr; n: integer; x: integer; var ind: integer);

var i,j,k: integer; begin

i:=1; j:=n; repeat

k:=(i+j) div 2; if x>a[k] then

i:=k+1 else j:=k-1;

until (a[k]=x) or (i>j); if a[k]=x then

ind:=k else ind:=0;

end;

10.11.2012

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

38