profile
Опубликовано 5 лет назад по предмету Информатика от imangushev

Задан текст в виде последовательности из 40 слов, каждое не более 25 символов. Сколько раз в тексте встречаются слова: ЗНАЧИТ, ВОТ, АВТМОБИЛЬ?через процедуры

  1. Ответ
    Ответ дан petyaGavrikov
    В программе предполагается, что слова отделяются друг от друга одним пробелом, знаков препинания нет.
    const m=3;
    var s:string;
    sl:array[1..m] of string=('ЗНАЧИТ', 'ВОТ', 'АВТОМОБИЛЬ');
    n:array[1..m] of integer;
    i:integer;
    procedure pr(s1,s2:string; var k:integer);
    var l,p:integer;
    begin
     s1:=' '+s1+' ';
     l:=length(s2);
     k:=0;
     p:=pos(s2,s1);
     while p>0 do
      begin
      if (s1[p-1]=' ')and(s1[p+l]=' ') then k:=k+1;
      delete(s1,1,p+l);
      p:=pos(s2,s1);
      end;
    end;
    begin
    writeln('Введите текст:');
    readln(s);
    for i:=1 to m do
     begin
     pr(s,sl[i],n[i]);
     writeln(sl[i],' - ',n[i]);
     end;
    end.

    Пример (слов меньше 40):
    Введите текст:
    ЗНАЧИТ ТАК ВОТ АВТОМОБИЛЬ РАЗ ВОТ АВТОМОБИЛЬ ДВА ВОТ АВТОМОБИЛЬ ТРИ
    ЗНАЧИТ - 1
    ВОТ - 3
    АВТОМОБИЛЬ - 3
  2. Ответ
    Ответ дан Аккаунт удален
    Этой программе все равно, сколько слов во фразе и какой они длины. А заодно, ей все равно, сколько между словами пробелов...

    // PascalABC.NET 3.1, сборка 1230 от 27.04.2016
    procedure Times(a:array of string; pic:string; var n:integer);
    begin
      n:=a.Where(s->s=pic).Count
    end;

    begin
      var s:=ReadlnString('>').ToWords;
      var k:integer;
      var w:='ЗНАЧИТ'; Times(s,w,k); Println(k,'-',w);
      w:='ВОТ'; Times(s,w,k); Println(k,'-',w);
      w:='АВТОМОБИЛЬ'; Times(s,w,k); Println(k,'-',w);
    end.

    Тестовое решение
    > ВОТ ЗНАЧИТ КАКОЕ ДЕЛО БЫЛО ЕХАЛ ПО ДОРОГЕ АВТОМОБИЛЬ И ВОТ СТОИТ ЧЕЛОВЕК И ДУМАЕТ А ЧТО ЗНАЧИТ СЛОВО АВТОМОБИЛЬ А СЛОВО АВТОМОБИЛЬ ЭТО ОТ ГРЕЧЕСКОГО АУТОС (САМ) И ЛАТИНСКОГО МОБИЛИС (ПОДВИЖНЫЙ) ВОТ ТАКОЕ ЭТО СЛОВО
    2 - ЗНАЧИТ
    3 - ВОТ
    3 - АВТОМОБИЛЬ