Дано не пустую последовательность из строчных латинских букв. Между соседними словами — запятая, после последнего слова — точка. Напечатать в алфавитном порядке все согласные буквы, которые входят только в одно слово — Pascal(Паскаль)

uses crt;
const
ds=['a'..'z',',','.'];
sg=['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z'];
type mnoz=set of char;
var  s,s1:string;
     m:array[1..100] of mnoz;{массив множеств}
     mn_ob,mn,mn1:mnoz;
     n,i,j,k:byte;
begin
clrscr;
repeat
k:=0;
writeln('Введите текст из строчных латинских букв, между словами запятая, в конце точка:');
readln(s);
for i:=1 to length(s) do
if not(s[i] in ds) then
 begin
  k:=1;
  break;
 end;
if(s='')or(k=1)or(pos('.',s)=0) then writeln('Строка введена неверно');
until (s<>'')and(k=0)and(pos('.',s)>0);
s:=copy(s,1,pos('.',s)-1);{возьмем строку до первой точки}
s:=s+',';{добавим запятую}
mn_ob:=[];{множество согласных, которые есть в строке}
for i:=1 to length(s) do
if s[i] in sg then mn_ob:=mn_ob+[s[i]];
n:=0;
while pos(',',s)>0 do{создаем массив множеств}
 begin
  s1:=copy(s,1,pos(',',s)-1);{копируем очередное слово}
  n:=n+1;{считаем}
  m[n]:=[];{создаем множество}
  for j:=1 to length(s1) do
  if s1[j] in sg then m[n]:=m[n]+[s1[j]];{из его букв по условию}
  delete(s,1,pos(',',s));{удаляем это слово}
 end;
mn1:=[];{множество букв, входящих только в одно число}
for i:=1 to n do{для каждого множества }
 begin
  mn:=[];
  for j:=1 to n do
  if j<>i then mn:=mn+m[j];{делаем множество из букв, котoрые входят в другие числа}
  mn1:=mn1+(m[i]-mn);{вычитаем из даннго множества общее множество
                      и остаток записываем в новое}
 end;
if mn1=[] then writeln('Букв, которые входят только в одно число, нет!')
else
 begin
  writeln('Буквы, которые входят только в одно слово:');
  for i:=98 to 122 do{коды от b до z, если буква есть по разу, выводим}
  if chr(i) in mn1 then write(chr(i),' ');
 end;
readln
end.

Leave a Comment

7 + = 9