(*~\Глагол\Приложения\Упорядочивание\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                           ОТДЕЛ ЧислаИзФайла+;
(*============================================================================*
 * НАЗНАЧЕНИЕ: пример упорядочивания чисел из внешнего файла быстрым обменом
 *============================================================================*)

ИСПОЛЬЗУЕТ 
  ОбменомБ,

  ИзФайла ИЗ "..\..\Отделы\Обмен\ВводВывод\",
   ВФайл  ИЗ "..\..\Отделы\Обмен\ВводВывод\",
  НаЭкран ИЗ "..\..\Отделы\Обмен\ВводВывод\",

 Параметр ИЗ "..\..\Отделы\Обмен\";

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Ошибка1(ц-:ЦЕПЬ);
УКАЗ
  НаЭкран.ВсяЦепь(ц);
  НаЭкран.ВсяЦепь("^Вызов:^ЧислаИзФайла.exe имяВходногоФайла имяВыходногоФайла");
  СТОП(1)
КОН Ошибка1;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Ошибка2(ц1-,ц2-:ЦЕПЬ);
УКАЗ
  НаЭкран.ВсяЦепь(ц1);
  Ошибка1(ц2)
КОН Ошибка2;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Упорядочивание;
ПЕР
  ряд:ДОСТУП К РЯД ИЗ ЦЕЛ;     (* обрабатываемый ряд *)
  потокЧтенияД:ИзФайла.ДкПотоку; (* поток для  вх-го неупорядоченного ряда чисел *)
  потокЗаписиД:  ВФайл.ДкПотоку; (* поток для вых-го   упорядоченного ряда чисел *)
  чисел:ЦЕЛ;                   (* чисел во входном файле *)
  имяФайла:ЦЕПЬ[100];
  число:ЦЕЛ;
УКАЗ
                                            (* проверка параметров приложения *)
  ЕСЛИ Параметр.всего <= 1 ТО Ошибка1("Нет имени входного  файла.") КОН;
  ЕСЛИ Параметр.всего <= 2 ТО Ошибка1("Нет имени выходного файла.") КОН;
                                            (* подсчёт чисел во входном файле *)
                   Параметр.Втекст(1,имяФайла);

       потокЧтенияД:=ИзФайла.Открыть(имяФайла);

  ЕСЛИ потокЧтенияД = ПУСТО ТО
                             Ошибка2(имяФайла," не найден.")
  КОН;

       потокЧтенияД.цВидЗнаков:=ИзФайла.знУни;

              чисел:=0;
  ПОКА
        НЕ ИзФайла.Конец(потокЧтенияД)
  ВЫП
    число:=ИзФайла.Цел32(потокЧтенияД);
    УВЕЛИЧИТЬ(чисел)
  КОН;
         ИзФайла.Закрыть(потокЧтенияД);
                                       (* распределение памяти под ряд чисел *)
  СОЗДАТЬ(ряд,чисел);
                                                              (* чтение ряда *)
                   Параметр.Втекст(1,имяФайла);

       потокЧтенияД:=ИзФайла.Открыть(имяФайла);

       потокЧтенияД.цВидЗнаков:=ИзФайла.знУни;

  ОТ число:=0 ДО чисел-1 ВЫП
    ряд[число]:=ИзФайла.Цел32(потокЧтенияД)
  КОН;
              ИзФайла.Закрыть(потокЧтенияД);
                                      (* упорядочивание ряда быстрым обменом *)
  ОбменомБ.Упорядочить(ряд^);
                                                              (* запись ряда *)
                 Параметр.Втекст(2,имяФайла);

       потокЗаписиД:=ВФайл.Открыть(имяФайла);

  ЕСЛИ потокЗаписиД = ПУСТО ТО
                           Ошибка2(имяФайла," не открывается.")
  КОН;

       потокЗаписиД.цВидЗнаков:=ВФайл.знУни;

  ОТ число:=0 ДО чисел-1 ВЫП
     ВФайл.Цел4числа(потокЗаписиД,"%d^",ряд[число],0,0,0)
  КОН;
       ВФайл.Закрыть(потокЗаписиД);

  НаЭкран.ВсяЦепь("^Конец работы задачи ИзФайла.Упорядочивание ^");

КОН Упорядочивание;

(*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
УКАЗ
  Упорядочивание
КОН ЧислаИзФайла.
