Смекни!
smekni.com

Анализ алгоритмов нечисленной обработки данных (стр. 4 из 4)

Имя параметра Физический смысл параметра Тип параметра
i1 Счетчик, индекс элемента массива, сохраняемого в файл integer
F Файл, в который необходимо записывать сортируемый массив после каждой перестановки text
n Длина массива integer
a Исходный массив, сохраняемый в файл mas=array [1..1024] of integer
m Количество перестановок integer

А.5 Идентификаторы процедуры Lin_Poisk

Имя параметра Физический смысл параметра Тип параметра
i Счетчик, индекс элемента массива integer
k Количество сравнений integer
n Длина массива integer
a Массив, в котором необходимо найти искомый элемент mas=array [1..1024] of integer
x Искомый элемент integer

Таблица А.6 Идентификаторы процедуры Dv_Poisk

Имя параметра Физический смысл параметра Тип параметра
sri Индекс среднего элемента в массиве integer
k Количество сравнений integer
vi Индекс верхнего элемента в массиве integer
ni Индекс нижнего элемента в массиве integer
n Длина массива integer
a Массив, в котором необходимо найти искомый элемент mas=array [1..1024] of integer
x Искомый элемент integer
f Флаг нахождения искомого элемента в массиве boolean

Таблица А.7: Идентификаторы процедуры Tree

Имя параметра Физический смысл параметра Тип параметра
i Счетчик, индекс элемента массива (строка) integer
j Счетчик, индекс элемента массива (столбец) integer
s Рабочая память, необходимая для хранения значения integer
k Индекс элемента в массиве integer
a Исходный массив, из которого следует построить дерево mas=array [1..1024] of integer
n Длина массива integer
b Дерево, полученное из массива A mas2=array [1..1024, 1..5] of integer

Таблица А.8: Идентификаторы процедуры TreeSort

Имя параметра Физический смысл параметра Тип параметра
k Число вершин дерева integer
m Количество перестановок integer
i1 Счетчик, индекс элемента массива integer
b Дерево, полученное из массива mas2=array [1..1024, 1..5] of integer
b1 Сортируемое дерево mas2=array [1..1024, 1..5] of integer
a Отсортированный массив mas=array [1..1024] of integer

Приложение Б

Текст программы

Program Fariza_Kurs;

uses crt;

type

mas= array [1..1024] of integer;

mas2= array [1..1024, 1..5] of integer;

var n,i,j,x: integer;

a: mas;

b,b1: mas2;

f, f1: text;

Procedure Vvod(n: integer; Var a: mas);

var i: integer;

begin

if n<=16 then

begin

writeln('Vvedite elementy massiva');

for i:=1 to n do read(A[i]);

end

else

for i:=1 to n do

A[i]:=random(1000);

writeln(f,'Ishodnii masssiv');

for i:=1 to n do write(f,a[i]:4);

end;

Procedure Vivod(n: integer; a: mas);

var i: integer;

begin

for i:=1 to n do write(a[i], ' ');

end;

{zapis v fail}

Procedure Save_To_File(var f:text; n: integer; a: mas; m:integer);

var i1: integer;

begin

if n<=16 then

begin

writeln(f,m,'-yi shag:');

for i1:=1 to n do

write(f,A[i1]:4);

writeln(f);

end;

if (n>16) and (m mod 10=0) then

begin

writeln(f,m,'-yi shag:');

for i1:=1 to n do

write(f,A[i1]:4);

writeln(f);

end;

end;

{metod lineinogo poiska}

Procedure Lin_Poisk(n: integer; a: mas; x: integer);

var i,k: integer;

begin

writeln('Metod lineinogo poiska:');

k:=0;

for i:=1 to n do

if a[i]=x then begin k:=i; break;

end;

if k<>0 then Writeln('Element naiden. Sravnenii - ',k)

else writeln('Element ne naiden');

end;

{========metod dvoichnogo poiska ================}

procedure Dv_Poisk(n:integer;a:mas; x:integer);

var k,ni,vi, sri:integer;

f:boolean;

begin

writeln('Metod dvoichnogo poiska:');

vi:=N;

ni:=1;

k:=0;

f:=FALSE;

repeat

sri:=( (ni+vi) div 2);

k:=k+1;

if a[sri] = X then f:=TRUE

else if X > a[sri] then ni:=sri else vi:=sri;

until (k>trunc(ln(n)/ln(2))) or (f=true);

if f=true then writeln('Element naiden, Index= ', sri,'. Sravnenii ',k)

else writeln('Element ne naiden');

end;

{predstavlenie massiva A v vide dereva}

Procedure Tree(a:mas; n: integer; var b: mas2 );

label l;

var i,j,s,k: integer;

begin

b[1,3]:=0;

b[1,4]:=0;

b[1,5]:=0;

for i:=1 to n do begin

b[i,1]:=a[i];

b[i,2]:=a[i];

end;

for i:=2 to n do

begin

k:=1;

l: if b[i,1]<b[k,1] then j:=3 else j:=4;

s:=b[k,j];

if s<>0 then begin

k:=s;

goto l;

end;

b[k,j]:=i;

b[i,3]:=0;

b[i,4]:=0;

b[i,5]:=k;

end;

end;

{sortirovka derevom}

procedure Tree_Sort(b: mas2; var b1: mas2; n: integer);

label l1,l2,l3;

var k,m,i1: integer;

begin m:=0;

for i:=1 to n do

for j:=1 to 5 do

b1[i,j]:=b[i,j];

i:=1;

k:=0;

l1:

if b[i,3]<>0 then

begin

i:= b[i,3];

goto ll;

end;

m:=m+1;

for i1:=1 to n do A[i1]:=b1[i1,1];

savetofile(f1,n,a,m);

l2:

k:=k+1;

b1[k,1]:=b[i,1];

b1[k,2]:=b[i,2];

if b[i,4]<>0 then

begin

i:=b[i,4];

goto ll;

end;

m:=m+1;

for i1:=1 to n do A[i1]:=b1[i1,1];

savetofile(f1,n,a,m);

l3:

j:=i;

i:=b[i,5];

if i<>0 then

begin

if b[i,1]> b[j,1] then goto lm else goto ln;

end;

m:=m+1;

for i1:=1 to n do A[i1]:=b1[i1,1];

savetofile(f1,n,a,m);

writeln('Otsortirovanii massiv');

Vivod(n,a);

readln;

writeln('Kolichestvo perestanovok=',m);

end;

BEGIN

writeln(' VVedite 4islo elementov massiva N<=1024');

readln(n);

assign (f, 'd:&bsol;dan.txt');

rewrite(f);

Vvod(n,a);

close(f);

writeln('Ishodnii massiv:');

Vivod(n,a);

{====================lineinii poisk===============}

writeln;

writeln('Vvedite element dla poiska');

readln(x);

LinPoisk(n,a,x);

{========sortirovka============}

assign (f1, 'd:&bsol;res.txt');

rewrite(f1);

tree(a,n,b);

Treesort(b,b1,n);

writeln(f1, 'Otsortirovannyi massiv:');

for i:=1 to n do write(f1, A[i]:4);

close(f1);

{========dvoichnii poisk===========}

DvPoisk(n,a,x);

end.