[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]

Пример 7.1. Определить количество слов в заданном тексте.

Если слова в тексте разделены одним пробелом, то задача сводится к подсчету числа пробелов. Количество слов при этом равно числу пробелов плюс 1. Если же число пробелов между соседними словами произвольное, как обычно и бывает, то алгоритм усложняется. Рассмотрим оба варианта решения этой задачи.

Вариант 1. Слова в тексте разделены одним пробелом.

Тест

Данные
Результат
"Кот на крыше"
N=3

Демонстрация
Школьный АЯ 
алг Число слов (арг лит Text, рез цел N) 
  дано | В непустом тексте Text слова 
       | разделены одним пробелом 
  надо | N — количество слов 
нач цел i 
  N:=1 
  нц для i от 1 до длин(Text) 
             | цикл по буквам текста 
    если Text[i] = " " 
      то N:=N+1 
    все
  кц
кон 
Исполнение алгоритма
i
Text[i]
Text[i]='' ''
N
1
2
3
4
5
6
7
8
9
10
11
12
К
о
т
_
н
а
_
к
р
ы
ш
е
+
-
-
-
+
-
-
+
-
-
-
-
1
 
 
 2
 
 3
 
 Turbo Pascal
Program Probel; 
  Uses Crt; 
  Var Text      : String;  {заданный непустой текст}
      i, Number : Integer; {Number — количество слов в тексте}
      Letter    : Char;    {текущая буква }
BEGIN ClrScr;
  WriteLn('Введите текст :'); ReadLn(Text);
  Number:=1;
  For i:=1 to Length(Text) do {цикл по буквам текста}
   begin
     Letter:=Text[i];
     If (Letter = ' ' ) then Number:=Number+1;
   end;
  WriteLn('О т в е т : количество слов в тексте равно ', Number);
END.

Вариант 2. Слова в тексте разделены произвольным количеством пробелов.

Тест

Данные
Результат
"Кот на   крыше"
N=3

Демонстрация

 Школьный АЯ

алг Число слов (арг лит Text, рез цел N)
  дано | В тексте Text слова могут быть разделены
       | произвольным количеством пробелов
  надо | N — количество слов в тексте Text
нач цел i, лог Flag
  N:=0; Flag:=да
  нц для i от 1 до длин(Text)      | цикл по буквам текста
     если (Text[i]<>" ") и (Flag=да) | это условие выполняется только 
       то N:=N+1                     | для первой буквы каждого слова
     все
     Flag := (Text[i]=" ")    | Flag=да, если очередная буква — пробел,
  кц                          | в противном случае Flag = нет
кон

Исполнение алгоритма
Обозначение проверяемого условия:
(Text[i]<>" ") и (Flag = да)=>(1)
i
Text[i]
(1)
N
Flag
1
2
3
4
5
6
7
8
9
10
11
12
13
14
К
о
т
_
н
а
_
_
_
к
р
ы
ш
е
+
-
-
-
+
-
-
-
-
+
-
-
-
-
0
1
 
 
2
 
 
 
3
да
нет
нет
нет
нет
да
нет
нет
нет
нет
да
нет
нет
нет
нет
 
Turbo Pascal
Program KolSlov;
  Uses Crt;
  Var Text      : String;  {заданный текст}
      i, Number : Integer; {Number - количество слов в тексте}
      Flag      : Boolean;
      Letter    : Char;    {текущая буква }
BEGIN
  ClrScr;
  WriteLn('Введите текст :');
  ReadLn(Text);
  Number := 0; Flag := TRUE;
  For i := 1 to Length(Text) do {цикл по буквам текста}
    begin
      Letter := Text[i];        {текущая буква текста }
      If (Letter <> ' ') and Flag
        then Number := Number+1;
      Flag := (Letter=' ')     {(Letter=' ') — логическое выражение,}
    end;                       {принимающее значения TRUE или FALSE }
  WriteLn;
  WriteLn('О т в е т : количество слов в тексте равно ', Number); ReadLn
END.
 
QBasic
CLS
PRINT "Введите текст, отделяя слова пробелами."
PRINT "Если в тексте есть запятые, заключите его в кавычки."
INPUT Text$ : PRINT
Number = 0 : Flag = 0
FOR i = 1 TO LEN(Text$)               'цикл по буквам текста
    Letter$ = MID$(Text$, i, 1)       'текущая буква текста
    IF (Letter$ <> " ") AND (Flag = 0) THEN Number=Number+1
    IF (Letter$ = " ") THEN Flag = 0 ELSE Flag = 1
NEXT i
PRINT "О т в е т : количество слов в тексте равно "; Number
END
 

[ домой ] [ следующий ] [ начало главы ] [ предыдущий ] [ содержание ]