Задать вопрос
27 июля, 06:13

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

1) Все слова, которые встречаются в последовательность по одному разу

+4
Ответы (1)
  1. 27 июля, 09:57
    0
    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]
    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
Знаете ответ на вопрос?
Не уверены в ответе?
Правильный ответ на вопрос 👍 «Дана последовательность, содержащая от 2 до 30 слов, в каждом из от 1 до 8 символов строчных латинских букв между соседними словами-не ...» по предмету 📗 Информатика. Развернутая система поиска нашего сайта обязательно приведёт вас к нужной информации. Как вариант - оцените ответы на похожие вопросы. Но если вдруг и это не помогло - задавайте свой вопрос знающим оппонентам, которые быстро дадут на него ответ!
Искать готовые ответы