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

Тема в разделе "C/C++/C#", создана пользователем Svetlankaya, 16 май 2010.

  1. Svetlankaya

    Svetlankaya Гость

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


    Код (Delphi):
    {Программа решает следующую задачу:
    Отсортировать линейный массив, используя быструю нерекурсивную сортировку, и найти индекс элемента в нем,
    используя последовательный поиск с конца массива.}

    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.
     

Поделиться этой страницей