uses op;
function kol(st: tStr):integer;
Implementation
function kol;
Var
i, col: integer;
Begin
i:=Length(st);
col:=0;
while st[i]<> ’ ’ do begin {Цикл - пока не найден пробел}
if (st[i]=’м’) or (st[i]=’М’) then // если это буква ’м’ или ’М’
col:=col+1; // увеличили количество найденных букв на 1
i:=i-1 // перешли к предыдущему символу
end;
kol:=col // указали возвращаемое значение
end;
End.
Примечание: Условие в команде ветвления можно записать используюя ктнструктор множества. Например, вместо условия (st[i]=’м’) or (st[i]=’М’) записать st[i] in [’м’, ’М’].
Основная программа.
Uses
op, obrabotka;
Var
stt: str;
col: byte;
Begin
writeln(’Введите текст’);
readln(stt);
col:= kol(stt); // нашли количество букв
writeln(’Количество букв «м» в последнем слове данного текста ’, col)
End.
Задача № 2. Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 строчных русских или латинских букв; между соседними словами – запятая, за последним словом – точка. Напечатать все слова последовательности, которые отличны от первого слова, предварительно преобразовав каждое из них по следующему правилу: удалить первую букву.
|
|
Постановка задачи.
Получение результата, в соответствии с условием задачи, требует предварительной обработки текста, т.е. сначала требуется выделить слова из текста. Далее удалим из каждого слова первую букву, а затем выведем все слова текста, отличные от первого слова.
Входные данные.
Максимальное <Количество> слов в тексте – n (постоянное целое).
<Строка> текста – st (тип – string).
Промежуточные данные.
<Список> слов – LstSlovo (тип – массив строк)
Выходные данные.
Преобразованный <Список> слов неравных первому слову.
Алгоритм.
1. Ввести <Строку> текста.
2. Сформировать <Список> слов из заданной <Строки> текста.
3. Удалить первую букву у каждого слова из <Списка>.
4. Вывести слова из <Списка> неравные первому слову.
Текст программы.
Модуль 1.
unit op;
Interface
Type
tSetChar= set of char;
Const
n=20; // в строке модет быть не более чем n слов
Razdelit: tSetChar=[’ ’, ’,’, ’.’, ’!’, ’?’, ’:’, ’;’]; // символы—разделители слов
Type
tLstSlovo= array [1..n] of string;
Implementation
End.
Модуль 2.
unit obrabotka;
Interface
uses op;
function VidelitSlova(st: string; var SS: tLstSlovo): integer;
procedure DeleteBukva(var SS: tLstSlovo);
procedure PrintSlova(SS: tLstSlovo);
Implementation
function Nachalo(st: string; nach: byte): byte;
{функция поиска начала слова в строке текста начиная с указанной позиции
st – заданная строка текста
nach – начальная позиция для поиска начала слова
}
Begin
while (st[nach] in Razdelit) do // символ nach относится к разделителям слов
nach:=nach+1;
Nachalo:=nach // вернули номер символа, не относящегося к разделителям
end;
function Konec(st: string; kon: byte): byte;
|
|
{функция поиска конца слова строке текста начиная с указанной позиции
st – заданная строка текста
kon – начальная позиция для поиска начала слова
}
Begin
while (not (st[kon] in Razdelit)) and // символ kon не относится к разделителям слов и
(kon<Length(st)) do // не конец строки
kon:= kon+1;
Konec:=kon-1 // вернули номер символа, относящегося к разделителям
end;
function VidelitSlova(st: string; var SS: tLstSlovo): integer;
Var
i: integer;
kol: byte; // количество слов в тексте
nach, // начало слова
kon // конец слова
: byte;
Begin
nach:=1; // начинаем искать первое слово в первого символа
while (nach<Length(st) do begin
nach:=Nachalo(st, nach); // найдем начало слова
kon:=Konec(st, nach+1); // найдем конец слова слова
kol:=kol+1; // стало на одно слово больше
SS[kol]:=copy(st, nach, con-nach+1); // записали найденное слово в массив слов
nach:=con+1 // начало следующего слова будем искать за концом предыдущего
end;
VidelitSlova:=kol // всего слов
end;
procedure DeleteBukva(var SS: tLstSlovo; kol: byte);
Var
i: integer;
Begin
for i:=2 to kol do // для каждого слова из списка начиная со второго
delete(SS[i], 1, 1) // удаляем первую букву в слове
end;
procedure PrintSlova(SS: tLstSlovo; kol: byte);
Var
i: integer;
Begin
for i:=1 to kol do // для каждого слова из списка
if SS[i]= SS[1] then // если слово совпадает с первым
WriteLn(SS[i]) // выводим его
end;
End.