Задан текст в виде последовательности из 40 слов, каждое не более 25 символов. сколько раз в тексте встречаются слова: значит, вот, автмобиль? через процедуры

Диана9989 Диана9989    2   27.07.2019 16:20    2

Ответы
Alinonik Alinonik  07.08.2020 15:27
В программе предполагается, что слова отделяются друг от друга одним пробелом, знаков препинания нет.
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
ПОКАЗАТЬ ОТВЕТЫ
dachaerofeeva dachaerofeeva  07.08.2020 15:27
Этой программе все равно, сколько слов во фразе и какой они длины. А заодно, ей все равно, сколько между словами пробелов...

// 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 - АВТОМОБИЛЬ
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика