zadach520.PAS

{* Задача 520 *}

Unit ZADACH520;
Interface
Implementation
Begin
 writeln('Из заданного текста выбрать и напечатать те символы, которые встречаются в нем ровно один раз (в том порядке, как они встречаются в тексте). ');
End.

Program zadach520;

Uses zadach520.pas; {* Эту строку можно удалить *}
Uses crt; {* Вызов внешних функций *}
Var {* В работе нам потребуются переменные: *}
  f  : Text;
  a  : Array [1..256, 1..2] Of Char;
  i  : Word;
  j  : Word;
  k  : Word;
  ch : Char;
  b  : Boolean;
Begin
  ClrScr; {* Стираем всё с экрана *}
  Writeln; {* Пустая строка *}
  assign(f, 'input.txt'); {входной файл}
  reset(f); {* Подготовка переменной f для чтения из файла *}
  i := 1; {цикл чтения текста и проверки на встречаемость символа}
  Repeat          {читаем символ из файла}
    read(f, ch); {если это первый символ, то записываем его в массив и}
  {увеличиваем счетчик массива на 1}
  If i = 1 Then
  Begin
    a[1, 1] := ch;
    a[1, 2] := '0';
    inc(i) {* Прибавим к i единицу *}
  End;
  Else Begin {если это не первый символ, то сравниваем его со всеми}
    {элементами массива a[j, 1] и если такой символ не найден,}
  {то увеличиваем счетчик массива на 1 и записываем этот}
  {символ в конец массива}
  {если текущий символ встретился в массиве, то в a[j, 2] записываем '1'}
  {'0' признак того, что символ встречался в тексте один}
  {раз, а '1', что он встречался более одного раза}
  b := true;
  For j := 1 To i Do {* Переменная j увеличивается с 1 до i *}
    If a[j, 1] = ch Then
    Begin
      a[j, 2] := '1';
      b := false;
      break
    End;
  If b = true Then
  Begin
    a[i, 1] := ch;
    a[i, 2] := '0';
    inc(i) {* i++ *}
  End;
  
End;
Until eof(f); {Вывод символов}
{проверяем один раз (a[j, 2]='0') или более встречался символ, если один раз}
{то он выводится на печать}
For j := 1 To i Do {* Увеличиваем j от 1 до i с шагом 1 *}
  If a[j, 2] = '0' Then
    write(a[j, 1]);
close(f); {* Файл f будет закрыт *}
ReadKey
End..