Пример 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