В
Все
Б
Биология
Б
Беларуская мова
У
Українська мова
А
Алгебра
Р
Русский язык
О
ОБЖ
И
История
Ф
Физика
Қ
Қазақ тiлi
О
Окружающий мир
Э
Экономика
Н
Немецкий язык
Х
Химия
П
Право
П
Психология
Д
Другие предметы
Л
Литература
Г
География
Ф
Французский язык
М
Математика
М
Музыка
А
Английский язык
М
МХК
У
Українська література
И
Информатика
О
Обществознание
Г
Геометрия
марина1087
марина1087
17.11.2021 01:06 •  Информатика

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

Показать ответ
Ответ:
leomax2
leomax2
08.07.2020 06:08
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]<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
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота