Дана последовательность, содержащая от 2 до 30 слов, в каждом из от 1 до 8 символов строчных латинских букв между соседними словами-не менее одного пробела, за последним словом-точка. Составить программу на языке Паскаль 1) Вс...

 Дана последовательность, содержащая от 2 до 30 слов, в каждом из от 1 до 8 символов строчных латинских букв между соседними словами-не менее одного пробела, за последним словом-точка. Составить программу на языке Паскаль  1) Все слова, которые встречаются в последовательность  по одному разу
Гость
Ответ(ы) на вопрос:
Гость
var   ast:array[1..30] of string; 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]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
Не нашли ответ?
Ответить на вопрос
Похожие вопросы