Сортировка слов (строк) методом Боуза-нельсона - Pascal

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток друзья. Суть задачи. Обычная сортировка слов(строк) методом Боуза-нельсона. Код не работает. Помогите найти ошибку.
Var
A: mass;
j, n:word;
 
Procedure Bose (Var AA; voz:Boolean; n: integer);
Var
m,j:word; x:mass;
 
Procedure Sli(j,r,m: word);
Begin
if j+r<=n Then
If m=1 Then
Begin
If voz Xor (A[j] < A[j+r]) Then
Begin
x[j]:=A[j];
A[j]:= A[j+r];
A[j+r]:=x[j];
End
End
Else
Begin
m:=m div 2;
Sli(j,r,m);
If j+r+m<=n Then
Sli(j+m,r,m);
Sli(j+m,r-m,m) End
End;
Begin
m:=1;
Repeat
j:=1;
While j+m<=n do
Begin
Sli(j,m,m);
j:=j+m+m
End;
m:=m+m
Until m >= n
End;
BEGIN
Writeln('Vvedite kol-vo slov: ');
readln(n);
For j:=1 to n do
begin
readln(A[j]);
end;
Readln;
Bose(A,true,n);
For j:=1 to n do
Write(A[j]);
Readln
END.

Решение задачи: «Сортировка слов (строк) методом Боуза-нельсона»

textual
Листинг программы
const
  n_max = 100;
 
type
  mass = array [1..n_max] of integer;
 
var
  A: mass;
  j, n: word;
 
procedure Bose(var AA: mass; voz: Boolean; n: integer);
var
  m, j: word;
  x: mass;
  
  procedure Sli(j, r, m: word);
  begin
    if j + r <= n Then
      if m = 1 Then
      begin
        if voz Xor (Aa[j] < Aa[j + r]) Then
        begin
          x[j] := Aa[j];
          Aa[j] := Aa[j + r];
          Aa[j + r] := x[j];
        end
      end
      Else
      begin
        m := m div 2;
        Sli(j, r, m);
        if j + r + m <= n Then
          Sli(j + m, r, m);
        Sli(j + m, r - m, m) end
  end;
 
begin
  m := 1;
  repeat
    j := 1;
    while j + m <= n do
    begin
      Sli(j, m, m);
      j := j + m + m
    end;
    m := m + m
  until m >= n
end;
 
begin
  Writeln('Vvedite kol-vo slov: ');
  readln(n);
  for j := 1 to n do
  begin
    readln(A[j]);
  end;
  Bose(A, true, n);
  for j := 1 to n do
    Write(A[j]:8);
  Readln;
end.

Объяснение кода листинга программы

  1. Объявляется константа n_max и устанавливается ее значение равное 100.
  2. Объявляется тип mass - массив, который состоит из 100 элементов с целочисленными значениями.
  3. Объявляются переменные A - массив mass, j и n - целые числа.
  4. Объявляется процедура Bose с параметрами AA - массив mass, voz - логическое значение и n - целое число.
  5. В процедуре объявляются локальные переменные m, j - целые числа и x - массив mass.
  6. Объявляется вложенная процедура Sli с параметрами j, r, m - целые числа.
  7. В начале Bose устанавливается значение m равное 1 и начинается цикл.
  8. В цикле, используя вложенную процедуру, производится сортировка массива AA по методу Боуза-Нельсона.
  9. В основной программе запрашивается количество слов n и считываются значения для массива A.
  10. Вызывается процедура Bose для сортировки массива A.
  11. После сортировки выводится отсортированный массив A.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы