Сортировка слов (строк) методом Боуза-нельсона - 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.
Объяснение кода листинга программы
- Объявляется константа
n_max
и устанавливается ее значение равное 100. - Объявляется тип
mass
- массив, который состоит из 100 элементов с целочисленными значениями. - Объявляются переменные
A
- массивmass
,j
иn
- целые числа. - Объявляется процедура
Bose
с параметрамиAA
- массивmass
,voz
- логическое значение иn
- целое число. - В процедуре объявляются локальные переменные
m
,j
- целые числа иx
- массивmass
. - Объявляется вложенная процедура
Sli
с параметрамиj
,r
,m
- целые числа. - В начале
Bose
устанавливается значениеm
равное 1 и начинается цикл. - В цикле, используя вложенную процедуру, производится сортировка массива
AA
по методу Боуза-Нельсона. - В основной программе запрашивается количество слов
n
и считываются значения для массиваA
. - Вызывается процедура
Bose
для сортировки массиваA
. - После сортировки выводится отсортированный массив
A
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д