Дана последовательность, содержащая от 2 до 30 слов, в каждом из от 1 до 8 символов строчных латинских букв между соседними слов
ами-не менее одного пробела, за последним словом-точка. Составить программу на языке Паскаль 1) Все слова, которые встречаются в последовательность по одному разу
procedure GetWord(s: string; var ib: integer; var pWord: string; var l: integer); // Возвращает слово pWord, которое является подстрокой s // Разделителем слов являются один и более пробелов. // ib при вызове процедуры указывает на позицию в строке s, // начиная с которой ведется поиск слова. // При выходе из процедуры ib - позиция начала найденного слова, // l- длина найденного слова, l=0 если слово не найдено. var i, n: integer; w: string; begin n := Length(s); l := 0; w := ''; if ib >= n then begin ib := n; pWord := '' end else begin i := ib; while (s[i] = ' ') and (i < n) do i := i + 1; ib := i; w := ''; while (s[i] <> ' ') and (i < n) do begin w := w + s[i]; i := i + 1 end; if i < n then begin l := i - ib; pWord := w end else begin l := i - ib + 1; pWord := w + s[n] end; if pWord[l]='.' then pWord:=Copy(pWord,1,l-1) end end;
procedure SortWords(n:integer); // Сортировка первых n элементов массива ast var i,j:integer; s:string; begin for i:=1 to n-1 do begin if ast[i]>ast[i+1] then begin s:=ast[i]; ast[i]:=ast[i+1]; ast[i+1]:=s; j:=i; while j>1 do if ast[j]<ast[j-1] then begin s:=ast[j]; ast[j]:=ast[j-1]; ast[j-1]:=s; j:=j-1 end else j:=0 end end end;
var s,st:string; p,n,i,len:integer; Flag:Boolean; begin st:=' aquila non captat muscas '; st:=st+'dolus an virtus quis in hoste requirat '; st:=st+'de mortuis aut bene aut nihil '; st:=st+'esse oportet ut vivas non vivere ut edas.'; p:=1; i:=1; len:=1; n:=0; while len>0 do begin GetWord(st,p,ast[i],len); if len>0 then begin p:=p+len; n:=n+1; i:=i+1 end end; for i:=1 to n do write(ast[i],' '); SortWords(n); writeln; writeln; s:=ast[1]; Flag:=True; for i:=2 to n do if ast[i]<>s then begin If Flag then write(s,' ') else Flag:=True; s:=ast[i]; end else Flag:=False; if Flag then write(ast[n],' '); writeln end.
Тестовое решение: aquila non captat muscas dolus an virtus quis in hoste requirat de mortuis aut bene aut nihil esse oportet ut vivas non vivere ut edas
an aquila bene captat de dolus edas esse hoste in mortuis muscas nihil oportet quis requirat virtus vivas vivere