Задать вопрос
6 августа, 04:40

Дана строка в которой содержится осмысленной текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Вывести только те слова, которые встречаются более n раз.

+4
Ответы (2)
  1. 6 августа, 05:31
    0
    const

    z = 30; / / максимально число слов

    var

    s, w : string;

    n, p, i, j, l : integer;

    words : array [1 ... z] of string;

    kw : array [1 ... z] of integer;

    r : boolean;

    begin

    writeln ('введите строку') ;

    readln (s) ;

    writeln ('укажите кол-во повторений') ;

    readln (n) ;

    l : = Length (s) ;

    p : = 1;

    w : = '';

    for i : = 1 to l do

    if (s[i] ' ') and (s[i] '.') and (s[i] ',') then

    w : = w + s[i]

    else

    begin

    for j : = 1 to p do

    if w = words[j] then

    begin

    kw[j] : = kw[j] + 1;

    r : = true;

    end;

    if not r then

    begin

    p : = p + 1;

    words[p] : = w;

    kw[p] : = kw[p] + 1;

    end;

    w : = '';

    r : = false;

    end;

    for i : = 1 to p do

    if kw[i] > n then

    writeln (words[i]) ;

    end.
  2. 6 августа, 07:59
    0
    Const

    n=50; { максимальное число различных слов в строке }

    del=[' ','.',',',':','; ','-','!','?','/'];

    var

    mw:array[1 ... n] of string; { найденные слова }

    mk:array[1 ... n] of integer; { количество повторений слов }

    s, w:string;

    i, j, k, l, m:integer;

    skip, new_word:boolean;

    begin

    Write ('Введите текст: ') ;

    Readln (s) ;

    s:=s+' ';

    Write ('Укажите предельное число повторений слова: ') ;

    Read (k) ;

    l:=Length (s) ;

    m:=0;

    skip: = (s[1] in del) ;

    if skip then w:='' else w:=s[1];

    for i:=2 to l do

    if s[i] in del then begin

    if not skip then begin

    { w содержит очередное найденное слово }

    j:=1; new_word:=true;

    while (j<=m) and new_word do begin

    if w=mw[j] then begin Inc (mk[j]) ; new_word:=false end;

    Inc (j)

    end;

    if new_word then begin Inc (m) ; mw[m]:=w; mk[m]:=1 end;

    w:=''; skip:=true

    end

    end

    else

    if skip then begin w:=s[i]; skip:=false end

    else w:=w+s[i];

    { фраза разобрана и проанализирована }

    j:=0; i:=1;

    while (i<=m) and (j=0) do begin

    if mk[i]>k then j:=i;

    Inc (i)

    end;

    if j>0 then begin

    Writeln ('Слова, которые встретились больше, чем ', k,' раз:') ;

    Writeln (mw[j]) ;

    for i:=j+1 to m do

    if mk[i]>k then Writeln (mw[i]) ;

    end

    else Writeln ('Нет слов, которые встретились больше, чем ', k,' раз.')

    end.

    Тестовое решение:

    Введите текст: еду, еду в чистом поле; колокольчик дин-дин-дин ... страшно, страшно поневоле средь неведомых равнин!

    Укажите предельное число повторений слова: 1

    Слова, которые встретились больше, чем 1 раз:

    еду

    дин

    страшно
Знаете ответ?
Сомневаетесь в ответе?
Найдите правильный ответ на вопрос ✅ «Дана строка в которой содержится осмысленной текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Вывести ...» по предмету 📘 Информатика, а если вы сомневаетесь в правильности ответов или ответ отсутствует, то попробуйте воспользоваться умным поиском на сайте и найти ответы на похожие вопросы.
Смотреть другие ответы