Сортировка+список)

  • Автор темы Svetlankaya
  • Дата начала
S

Svetlankaya

Гость
#1
С Паскаля на Си++
Здравствуйте, уважаемые программисты)
Совсем недавно перешли с языка Паскаль на Си++)Переход дается сложно, если честно
Помогите, пожалуйста, перевести программу с языка Паскаль на Си++


Код:
{Программа решает следующую задачу:
Отсортировать линейный массив, используя быструю нерекурсивную сортировку, и найти индекс элемента в нем,
используя последовательный поиск с конца массива.}
program Poisk;
const
nmax=100;
type
item=record key: integer; end;
index=0..nmax;
Vector=array[1..Nmax] of item;
var
a: Vector;
l1,l2,n,b,i: integer;

procedure vvodmas( var a : vector); {Процедура заполняет массив случайными числами}
var
i : integer;
begin {vvodmas}
randomize;
for i :=1 to N do
a[i].key:=random(100);
end; {vvodmas}

procedure vivodmas (var a : vector); {Процедура выводит мaссив на экран}
var
i : integer;
begin {vivodmas}
for i :=1 to N do
write(a[i].key : 4,'' );
end; {vivodmas}



{Процедура осуществляет быструю нерекурсивную сортировку}
procedure QSort(var L,R:integer);
const m=12;
var i,j:index;
x,w: item;
s:0..m;
stack:array[1..m] of record L,R:index END;
begin
s:=1;
stack[1].L:=1;
stack[s].R:=n;
repeat {выбор запроса из вершины стека}
l:=stack[s].l;
r:=stack[s].r;
s:=s-1;
repeat
i:=L;
j:=R;
x:=a[(L+R)div 2];
repeat
while a[i].key<x.key do
i:=i+1;
while x.key<a[j].key do
j:=j-1;
if i<=j then
begin
w:=a[i];
a[i]:=a[j];
a[j]:=w;
inc(i);
dec(j);
end
until i>j;
if i<R then
begin  {запись в стек запроса на сортировку правой части}
s:=s+1;
stack[s].L:=i;
stack[s].R:=R;
end;
R:=j;
until L>=R
until s=0
end;

{Процедура ищет индекс элемента в массиве}
Procedure Find(a1: integer; var j:integer);
begin
j:=n;
while (j>=1) and (a[j].key<>a1) do
dec(j);
if (j>=1) then
writeln('Indeks elementa ',a1,' = ',j)
else
writeln('element ', a1,' NE naiden');
end;

begin
writeln('Введите ра3мерность массива');
readln(n);
Vvodmas(a);
writeln('Исходный массив');
Vivodmas(a);
writeln;
QSort(l1,l2);
writeln('Отсортированный массив массив');
Vivodmas(a);
writeln;
writeln('Введите число, которое хотите найти');
readln(B);
Find(b,i);
end.