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

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

Показать ответ
Ответ:
MAMAV147
MAMAV147
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-бота