Сортировка слов (строк) методом Боуза-нельсона - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д