fork download
  1. const
  2. size = 100;
  3. randomInt = 30;
  4.  
  5. type
  6. A = array [1..size] of Integer;
  7.  
  8. var
  9. TMass: A;
  10. menuInt, menuInt2, N : Integer; // N - количество элементов
  11.  
  12. procedure Input(var TMass: A); // Запись массива вручную
  13. var i: Integer;
  14. begin
  15. writeln('Введите N: ');
  16. read(N);
  17. writeln('Введите массив: ');
  18. for i:= 1 to N do
  19. readln(TMass[i]);
  20. end;
  21.  
  22. procedure Output(TMass: A); // Вывод
  23. var i: integer;
  24. begin
  25. for i:= 1 to N do
  26. write(TMass[i],';');
  27. end;
  28.  
  29. procedure randomGenerate(var TMass: A); // Рандомная последовательность
  30. var a, i: integer;
  31. begin
  32. writeln('Количество элементов: ');
  33. read(N);
  34. randomize;
  35. for i:=1 to N do begin
  36. a := random(N);
  37. TMass[i] := a;
  38. end;
  39. writeln('Массив сгенерирован');
  40. end;
  41.  
  42. procedure BubbleSortv1(var TMass: A); // Пузырьковая сортировка версия 1
  43. var j, i : integer;
  44. WasSwap : Boolean;
  45. begin
  46. for j:=1 to N do begin
  47. WasSwap := False;
  48. for i:=1 to N-j do begin
  49. if TMass[i] > TMass[i+1] then begin
  50. Swap(TMass[i],TMass[i+1]);
  51. WasSwap := True;
  52. end;
  53. end;
  54. If WasSwap = False then exit;
  55. end;
  56. end;
  57.  
  58. procedure BubbleSortv2(var TMass: A); // Пузырьковая сортировка версия 2
  59. var R, j : integer;
  60. WasSwap : Boolean;
  61. begin
  62. R:=N;
  63. WasSwap:=True;
  64. while (R>1) and WasSwap do begin
  65. WasSwap := False;
  66. for j:=1 to R-1 do
  67. if TMass[j] > TMass[j+1] then begin
  68. Swap(TMass[j], TMass[j+1]);
  69. WasSwap:=True;
  70. end;
  71. Dec(R);
  72. end;
  73. end;
  74.  
  75. procedure InsertionSort(var TMass: A); // Простые вставки
  76. var i, j, R : integer;
  77. begin
  78. for i := 2 to N do begin //
  79. R := TMass[i];
  80. j := i - 1; // левая граница
  81. while (R < TMass[j]) and (j > 0) do begin
  82. TMass[j+1] := TMass[j];
  83. Dec(j);
  84. end;
  85. TMass[j+1] := R;
  86. end;
  87. end;
  88.  
  89. procedure FastSort(var TMass: A; L, R: Integer); // Быстрая сортировка
  90. var i, j, medium: integer;
  91. begin
  92. i := L;
  93. j := R;
  94. medium := TMass[(L+R) div 2];
  95. repeat
  96. while TMass[i] < medium do Inc(i); // i увел-ем до тех пор, пока i-ый элемент не окажется больше опорного(расширяем левую часть)
  97. while medium < TMass[j] do Dec(j); // j уменьшаем до тех пор, пока j-ый элемент не окажется меньше опорного(сокращаем правую часть)
  98. if i <= j then begin
  99. if TMass[i] > TMass[j] then begin
  100. Swap(TMass[i], TMass[j]);
  101. Inc(i);
  102. Inc(j);
  103. end;
  104. end;
  105. until i>j;
  106. if L<j then FastSort(TMass, L, j); // Рекурсивно упорядочиваем подмассивы, лежащие слева и справа от опорного элемента
  107. if i<R then FastSort(TMass, i, R);
  108. end;
  109.  
  110. procedure Menu(); // Меню
  111. var L, R :integer;
  112. begin
  113. writeln('Выберите метод заполнения'#10'№1.Ручной метод'#10'№2.Случайно сгенерированный');
  114. readln(menuInt); // Выполнение меню
  115. case menuInt of
  116. 1: Input(TMass);
  117. 2: randomGenerate(TMass);
  118. end;
  119. writeln('Выберите сортировку'#10'№1.Пузырёк'#10'№2.Простые вставки'#10'№3.Быстрая сортировка'#10);
  120. readln(menuInt2);
  121. case menuInt2 of
  122. 1 : BubbleSortv1(TMass); // Пузырек
  123. 2 : InsertionSort(TMass); // Вставки
  124. 3 : FastSort(TMass, L, R); // Быстрая сортировка
  125. end;
  126. end;
  127.  
  128. begin // Тело программы
  129. Menu();
  130. Output(TMass);
  131. end.
  132.  
  133.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Free Pascal Compiler version 2.6.4+dfsg-4 [2014/10/14] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Linux for i386
Compiling prog.pas
prog.pas(50,5) Error: Wrong number of parameters specified for call to "swap"
prog.pas(68,5) Error: Wrong number of parameters specified for call to "swap"
prog.pas(100,6) Error: Wrong number of parameters specified for call to "swap"
prog.pas(124,27) Warning: Local variable "R" does not seem to be initialized
prog.pas(124,24) Warning: Local variable "L" does not seem to be initialized
prog.pas(133) Fatal: There were 3 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
stdout
Standard output is empty