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

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

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

Доброго времени суток друзья. Суть задачи. Обычная сортировка слов(строк) методом Боуза-нельсона. Код не работает. Помогите найти ошибку.
Листинг программы
  1. Var
  2. A: mass;
  3. j, n:word;
  4. Procedure Bose (Var AA; voz:Boolean; n: integer);
  5. Var
  6. m,j:word; x:mass;
  7. Procedure Sli(j,r,m: word);
  8. Begin
  9. if j+r<=n Then
  10. If m=1 Then
  11. Begin
  12. If voz Xor (A[j] < A[j+r]) Then
  13. Begin
  14. x[j]:=A[j];
  15. A[j]:= A[j+r];
  16. A[j+r]:=x[j];
  17. End
  18. End
  19. Else
  20. Begin
  21. m:=m div 2;
  22. Sli(j,r,m);
  23. If j+r+m<=n Then
  24. Sli(j+m,r,m);
  25. Sli(j+m,r-m,m) End
  26. End;
  27. Begin
  28. m:=1;
  29. Repeat
  30. j:=1;
  31. While j+m<=n do
  32. Begin
  33. Sli(j,m,m);
  34. j:=j+m+m
  35. End;
  36. m:=m+m
  37. Until m >= n
  38. End;
  39. BEGIN
  40. Writeln('Vvedite kol-vo slov: ');
  41. readln(n);
  42. For j:=1 to n do
  43. begin
  44. readln(A[j]);
  45. end;
  46. Readln;
  47. Bose(A,true,n);
  48. For j:=1 to n do
  49. Write(A[j]);
  50. Readln
  51. END.

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

textual
Листинг программы
  1. const
  2.   n_max = 100;
  3.  
  4. type
  5.   mass = array [1..n_max] of integer;
  6.  
  7. var
  8.   A: mass;
  9.   j, n: word;
  10.  
  11. procedure Bose(var AA: mass; voz: Boolean; n: integer);
  12. var
  13.   m, j: word;
  14.   x: mass;
  15.  
  16.   procedure Sli(j, r, m: word);
  17.   begin
  18.     if j + r <= n Then
  19.       if m = 1 Then
  20.       begin
  21.         if voz Xor (Aa[j] < Aa[j + r]) Then
  22.         begin
  23.           x[j] := Aa[j];
  24.           Aa[j] := Aa[j + r];
  25.           Aa[j + r] := x[j];
  26.         end
  27.       end
  28.       Else
  29.       begin
  30.         m := m div 2;
  31.         Sli(j, r, m);
  32.         if j + r + m <= n Then
  33.           Sli(j + m, r, m);
  34.         Sli(j + m, r - m, m) end
  35.   end;
  36.  
  37. begin
  38.   m := 1;
  39.   repeat
  40.     j := 1;
  41.     while j + m <= n do
  42.     begin
  43.       Sli(j, m, m);
  44.       j := j + m + m
  45.     end;
  46.     m := m + m
  47.   until m >= n
  48. end;
  49.  
  50. begin
  51.   Writeln('Vvedite kol-vo slov: ');
  52.   readln(n);
  53.   for j := 1 to n do
  54.   begin
  55.     readln(A[j]);
  56.   end;
  57.   Bose(A, true, n);
  58.   for j := 1 to n do
  59.     Write(A[j]:8);
  60.   Readln;
  61. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы