Продолжаем разбор олимпиадных задач. В прошлом выпуске мы рассмотрели задание, в котором приходилось оперировать с числовыми величинами. Давайте попробуем решить задачу на оперирование с символьными величинами.
Задача. Дана строка, состоящая из нескольких слов, между словами стоит один пробел, в конце предложения - точка. Подсчитать количество слов и вывести на экран только те из них, которые начинаются с буквы 'П'.
Формат входного файла(слова.IN): "Язык программирования Паскаль был разработан Н. Виртом в 1968 - 1970 годах и получил широкое распространение благодаря наглядности программ и легкости при изучении".
Формат выходного файла(слова.OUT): N = 5, программирование, Паскаль, получил, программ, при.
1 этап. Все ли вам понятно в условии задачи?
Внимательно вчитаемся в условие задачи. На входе нам предлагается файл, содержащий строковую величину, которая представляет собой предложение, состоящее из отдельных слов. Необходимо заставить компьютер просмотреть последовательно всю строку; выделить в ней отдельные слова; распознать слова, начинающиеся на букву "П". Судя по приведенному формату выходного файла, требуется подсчитать количество именно этих слов, вывести их на экран и записать в выходной файл. Создание файла "слова.OUT" и будет являться итогом выполнения составленной программы.
2 этап. Составим план действий, которые должен выполнить компьютер:
- считать из входного файла заданную строку;
- начиная с первого символа, проверяем его на "равенство" строчной или прописной букве "п";
- если это данная буква, то считываем последующие символы до пробела в отдельную переменную;
- после пробела повторяем все действия заново;
- при выполнении операций ведем подсчет слов, удовлетворяющих поставленному условию;
- выполняем эти действия до тех пор, пока не дойдем до конца строки;
- результаты работы, т. е. количество найденных слов и сами эти слова выводим на экран и записываем в выходной файл.
Решение задачи облегчается тем, что в языке Pascal строковую переменную можно рассматривать как одномерный массив, в котором индексом является порядковый номер буквы в строке.
3 этап. Составим схематический алгоритм решения данной задачи.
Название программы
Описание переменных
Параметры циклов
строка
количество
индексы
Начало программы
Очистка экрана
считывание содержимого файла
Количество = 0
цикл до конца строки
проверка на соответствие букве "п" или "П"
цикл до пробела
считывание символов в отдельную переменную
количество = количество +1
выводим найденное слово на экран
записываем в отдельный файл количество найденных слов и сами эти слова
Конец программы
4 этап. Так как нам не требуется отдельно составить алгоритм, оформленный по всем правилам алгоритмического языка, то можно сразу обратиться к языку программирования. Как мы уже говорили - это будет Turbo Pascal.
Приводим ниже текст готовой программы:
program kolslov;
uses Crt;
var
stroka,sl: string[255];
kol,a: integer;
f: text;
slova: array[1..25] of string;
begin
ClrScr;
Assign(f,'slova.in');
Reset(f);
readln(f,stroka);
Close(f);
kol:=0;
sl:='';
a:=1;
repeat
if ((stroka[a]='п') or (stroka[a]='П')) and ((stroka[a-1]=' ') or (a-1=0)) then
begin
repeat
sl:=sl+stroka[a];
a:=a+1;
until (stroka[a]=' ') or (a=length(stroka));
kol:=kol+1;
slova[kol]:=sl;
Writeln(sl);
sl:='';
end;
a:=a+1;
until a>=length(stroka);
Writeln('N=',kol);
Assign(f,'slova.out');
Rewrite(f);
Write(f,'N=',kol,', ');
for a:=1 to kol do
begin
Write(f,slova[a]);
if a=kol then Write(f,'.')
else Write(f,', ');
end;
Close(f);
{Write(sl);}
readln;
end.
|
В следующих выпусках нашего интернет-приложения мы продолжим разбор олимпиадных задач различных типов и разных уровней сложности.