Seazhzhes 26 ноября 2019 в 06:40

Помогите пожалуйста составить программу на Паскале(подробно). Дан текст. Выведите в алфавитном порядке все буквы текста, входящие в него: - не более двух раз

//Pascal ABC.NET v3.1 сборка 1219

Const chb:set of char=[а..я,a..z]; //множество букв

Var
 ar,s,st:string;
 i,j,n:integer;
 c:char;
begin
 readln(s); //читаем текст
 n:=0; //обнуляем счётчик
 for i:=1 to length(s) do {всё в нижнем регистре, чтобы не считать заглавную и строчную буквы разными}
 s[i]:=lowcase(s[i]);
 for i:=1 to length(s) do //снова пройдёмся по каждой букве
  begin
   st:=s; {передаём переменной текст, тем самым не трогая "оригинал"}
    while pos(s[i],st)lt;gt;0 do //пока в копии есть символ с заданным циклом for индексом
     begin
      delete(st,pos(s[i],st),1); {...удаляем этот символ(по одному за шаг вложенного цикла)}
      inc(n); //увеличиваем число удалённых
     end; {таким образом, данный цикл позволяет проверить количество вхождений символа в строку}
    if (nlt;=2) and (pos(s[i],ar)=0) and (s[i] in chb) then ar:=ar+s[i]; {если вхождений не больше 2 и символа нет в конечной строке(чтобы не было повторов) и символ есть в множестве букв(чтобы не было знаков препинания), то добаляем в конечную строку}
    n:=0; //обнуляем счётчик 
 end;
 for i:=1 to length(ar)-1 do {Здесь могла быть "быстрая сортировка", но люди не знающие ничего, кроме "пузырька" будут против}
  for j:=i+1 to length(ar) do
   if ar[i]gt;ar[j] then {сравниваем символы. Тип char является целочислительным, следовательно, нам можно}
    begin 
    c:=ar[i];
     ar[i]:=ar[j];
     ar[j]:=c;
    end;
 writeln(Result:); //вывод конечной строки
 for i:=1 to length(ar) do
  write(ar[i], );
end.

Пример ввода:
Daaaaaaaaaaaaaads.
Пример вывода:
Result:
d s
Что же, можно и покороче решить, но поймете ли решение

// PascalABC.NET 3.1, сборка 1230 от 27.04.2016
begin
  var s:=ReadlnString(Введите строку:).ToUpper.
    Where(c-gt;c in [A..Z,А..Я,Ё]);
  var d:=new dictionarylt;char,integergt;;
  foreach var c in s do d[c]:=d.Get(c)+1;
  d.Where(k-gt;k.Valuelt;=2).OrderBy(k-gt;k.key).
    Select(k-gt;k.key).Println(,);
end.

Тестовое решение
Введите строку: А роза упала на лапу Азора. Карл у Клары украл кораллы.
З,Н,П,Ы
Для комментирования необходимо зарегистрироваться на сайте