Зворотний зв'язок

Обробка текстів

Приклад 6. У тексті з рядками необмеженої довжини записано слова в латинському алфавіті, довжина яких не перевищує 255. Слова відокремлюються пропусками в довільній кількості та з рядка на рядок не переносяться. Треба визначити кількість повторень першого слова в подальшому тексті.

Для розв’ язання задачі треба

прочитати перше слово (якщо воно взагалі є в тексті), а далі по одному читати слова й порівнювати їх із першим, за рівності збільшуючи значення лічильника.

Слово є лексичною одиницею, або лексемою тексту, тобто такою послідовністю, що має самостійне значення, тому функцію читання слова з тексту назвемо getlex (взяти лексему). Ось її заголовок:

function getlex(var f:text; var lex:string):boolean.

З її виклику повертається ознака наявності слова в частині тексту, прочитаній за її виклику. Слово зберігається як значення параметра-змінної lex (лексема), а коли його в решті тексту немає, значенням стає порожній рядок. Отже, нехай s1, s2 – рядки, nrep – лічильник повторень у такому алгоритмі:

nrep:=0;

if getlex(f, s1) then

begin

while getlex(f, s2) do

if s1=s2 then nrep:=nrep+1;

writeln(nrep)

end

else writeln('у тексті немає слів');

Щоб прочитати слово, треба

від поточного доступного символу прочитати пропуски та кінці рядків, що передують слову, та запам’ ятати його символи в рядковій змінній.

Для визначення, чи є символ латинською літерою, скористаємося функцією isletter:

function isletter(c : char) : boolean;

begin

isletter := ('a'
end;

Запишемо функцію getlex. Коли під час її виклику завершується виконання першого циклу, можуть бути істинними обидві умови, eof(f) та isletter(ch). Це можливо, якщо останній символ тексту є водночас першою літерою слова. У цьому разі символ дописується до порожнього слова.


Реферати!

У нас ви зможете знайти і ознайомитися з рефератами на будь-яку тему.







Не знайшли потрібний реферат ?

Замовте написання реферату на потрібну Вам тему

Замовити реферат