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

Ответы 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)  endend;procedure SortWords(n:integer);// Сортировка первых n элементов массива astvar  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    endend;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],' ');  writelnend.Тестовое решение: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
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years