Interface

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.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: