Фразой называется набор слов, разделенных одним или несколькими пробелами.
В большинстве случаев, если в программе нужно сделать какой- либо анализ введенной фразы, то ее необходимо предварительно разбить на слова.
АЛГОРИТМ РАЗБИВКИ ФРАЗЫ НА СЛОВА
Пусть S - введенная фраза, тогда для хранения отдельных слов фразы заведем массив B.
var s:sring; b:array[1..40] of string;{считаем, что больше 40 слов в фразе не будет}
i,j:integer;
label 1,2;
begin
readln(s);
j:=1; {текущий номер слова в фразе}
1: i:=pos(' ',s); { есть ли в фразе пробелы?}
if i=0 then {пробелов нет,т.е. в фразе только одно слово}
begin b[j]:=s;goto 2; end;
if i=1 then {фраза начинается с пробела,его нужно удалить}
begin delete(s,1,1);goto 1;end;
if i<>1 then {пробел в фразе есть,но не на первом месте,выделяем слово с начала фразы и
удаляем его из фразы}
begin b[j]:=copy(s,1,i-1);
delete(s,1,i-1);j:=j+1;goto 1; end;
2:......
ЗАДАЧА. Составить программу, которая в введенной фразе удаляет самое короткое слово. Программа работу заканчивает, если фраза состоит из одного слова.
program prim;
var s:string; b:array[1..40] of string;
l:array[1..40] of integer;
|
|
i,min,j,k:integer;
label 1,2;
begin
readln(s);
{ разбивка фразы на слова }
j:=1;
1:i:=pos(' ',s);
if i=0 then begin b[j]:=s;goto 2;end;
if i=1 then begin delete(s,1,1);goto 1;end;
if i<>1 then begin b[j]:=copy(s,1,i-1);delete(s,1,i-1);
j:=j+1;goto 1;end;
2:if j>1 then {если в фразе больше одного слова}
begin
{определение длины каждого слова}
for i:=1 to j do l[i]:=length(b[i]);
{определение минимального элемента массива "l" и его индекса}
min:=l[1];k:=1;
for i:=2 to j do
if l[i]<min then begin min:=l[i];k:=i;end;
{ удалить слово из фразы - равносильно выводу ее на экран без этого слова}
for i:=1 to k-1 do write(b[i],' ');
for i:=k+1 to j do write(b[i],' ');
writeln;
end;
end.
ЗАДАЧА. Составить программу, которая слова введенной фразы преобразует следующим образом: в каждом слове после каждых двух букв вставляется символ "-".
program prim;
var s:string; b:array[1..40] of string;
i,j,k:integer;
label 1,2;
begin
readln(s);
{ разбивка фразы на слова }
j:=1;
1:i:=pos(' ',s);
if i=0 then begin b[j]:=s;goto 2;end;
if i=1 then begin delete(s,1,1);goto 1;end;
if i<>1 then begin b[j]:=copy(s,1,i-1);delete(s,1,i-1);
j:=j+1;goto 1;end;
2:for i:=1 to j do begin
s:=b[i]; {запоминаем слово в переменной S}
k:=1; {текущий номер буквы в слове }
repeat
write(s[k]); {выводим "к"-ю букву слова}
k:=k+1;
if k<=length(s) then {если в слове есть буква с номером "к"}
write(s[k]); { то выводим ее }
if k<>l then {если буква с номером "к" не последняя}
write('-'); {то выводим после нее "-"}
k:=k+1;
until k<>l;
write(' '); {вывод пробела между словами}
end;
end.
Примечание. Не во всех задачах с фразами нужно разбивать фразу на слова, например, задача: "подсчитать количество букв "о" в введенной фразе" не требует разбивки фразы на слова:
program prim;
var s:string;k,i,l:integer;
begin
readln(s);
l:=length(s);
k:=0;
for i:=1 to l do
if s[i]='o' then k:=k+1;
writeln('в фразе ',s,' букв "о" =',k);
end.
ЗАДАЧИ
1. Заменить в заданном слове все буквы "о" пробелами.
|
|
2. Выяснить, какая из букв: первая или последняя, встречается в заданном слове чаще.
3. Сколько букв "у" в слове стоит на четных местах?
4. Проверить, является ли данное слово "перевертышем".
5. Вычеркнуть из заданного слова все буквы, совпадающие с его последней буквой.
6. Список А содержит фамилии 20 учеников класса. Список В - их возраст. Вывести на экран фамилии
тех, кому больше 16 лет.
7. Задан список 20 областных центров России. Вывести на экран название города с максимальным коли-
чеством букв.
8. Даны два слова А и В. Можно ли из букв, входящих в слово А составить слово В?
9. Составить программу, которая введенное слово, если его длина меньше 10 символов, располагает по
центру поля, состоящего из 10 символов "-".
10. Составить программу, которая в введенном слове меняет местами первую и последнюю буквы.
11. Вывести на экран первую половину введенного слова.
12. Удалить из слова первую и последнюю буквы.
13. Вставить в слово после первых двух букв знак "-".
14. Заменить в слове каждую четную букву на "*".
15. Вывести введенное слово "наоборот".
16. В введенном слове после каждой буквы вставить знак "-".
17. В слове заменить знаком "-" все буквы, кроме первой и последней.