klasscho

Untitled

Dec 24th, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. program CountingSort;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils, Windows;
  7.  
  8. var
  9. inputFile, outputFile: TextFile;
  10. size, max, i, j, k: Integer;
  11. arr, counter: array of Integer;
  12. result: string;
  13.  
  14. begin
  15. SetConsoleCP(1251); //установка русского языка
  16. SetConsoleOutputCP(1251);
  17. try
  18. if (FileExists('input.txt')) then
  19. begin
  20. AssignFile(inputFile, 'input.txt'); //имя читаемого файла
  21. Reset(inputFile);
  22. Readln(inputFile, size); //длина массива
  23. SetLength(arr, size); //установка длины массива
  24. for i:= 0 to (size - 1) do
  25. begin
  26. Read(inputFile, arr[i]); //чтение массива
  27. Write(arr[i], ' '); //и его вывод на экран
  28. end;
  29. CloseFile(inputFile); //закрытие файла
  30.  
  31. //чтобы знать длину массива счетчиков нужно узнать,
  32. //какой элемент в данном массиве максимальный
  33. max := arr[0];
  34. for i:= 0 to (size - 1) do
  35. begin
  36. if (arr[i] > max) then
  37. begin
  38. max := arr[i];
  39. end;
  40. end;
  41.  
  42.  
  43. SetLength(counter, max + 1);
  44. for i:= 0 to (size - 1) do
  45. begin //подсчет количества чисел в счетчике
  46. inc(counter[arr[i]]);
  47. end;
  48.  
  49. //сортировка
  50. j:= 0;
  51. k:= 0;
  52. for i:= 0 to (size - 1) do
  53. begin
  54. if (k >= counter[j]) then
  55. begin
  56. inc(j);
  57. while (counter[j] = 0) do
  58. begin
  59. inc(j);
  60. end;
  61. k:= 0;
  62. end;
  63. arr[i]:= j;
  64. inc(k);
  65. end;
  66.  
  67. //сохранение отсортированного массива в виде строки
  68. for i:= 0 to (size - 1) do
  69. begin
  70. result:= result + IntToStr(arr[i]) + ' ';
  71. end;
  72.  
  73. Writeln;
  74. Writeln(result); //вывод строки
  75.  
  76. if (FileExists('output.txt')) then
  77. begin
  78. AssignFile(outputFile, 'output.txt'); //имя читаемого файла
  79. Rewrite(outputFile);
  80. Write(outputFile, result); //чтение в файл
  81. CloseFile(outputFile); //закрытие файла
  82. end
  83. else Writeln('Файла "output.txt" не существует'); //проверка на существование записываемого файла
  84. end
  85. else Writeln('Файла "input.txt" не существует'); //проверка на существование читаемого файла
  86. except
  87. on err: EInOutError do
  88. Write('Ошибка при чтении массива из файла'); //ошибка при чтении
  89. else Write('Ошибка'); //при непредусмотренных ошибках
  90. end;
  91. Readln;
  92. end.
Advertisement
Add Comment
Please, Sign In to add comment