Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3.doc
Скачиваний:
3
Добавлен:
30.04.2019
Размер:
262.66 Кб
Скачать

7. Опрацювання текстової інформації

Опрацювання текстової інформації складає основу більшості програм. Завдяки таким алгоритмам використання комп'ютерів стало можливим у різних сферах життя.

Довільний алгоритм роботи з символами по суті налічує лише дві основні дії: пошук і заміну. Згідно з тезою Маркова, довільний алгоритм можна зобразити як послідовність таких дій.

Зрозуміло, що пошук можна використати для виявлення певних властивостей вхідного тексту. Заміна дає змогу цей текст модифікувати певним чином.

Розглянемо кілька алгоритмів роботи з літерною інформацією для ілюстрації основних прийомів її опрацювання.

7.1. Розпізнавання чисел

Задача 30. Дано послідовність символів, яку закінчено крапкою. Визначити кількість цифр у цій послідовності.

Щоб розв'язати поставлену задачу, треба врахувати, що символи всіх цифр розташовано у кодовій таблиці підряд, починаючи від '0'. Тому цифрою є довільний символ с, для якого істинною є умова (с>='0') and (c<='9').

program searchDigit;

var c:char; k:byte;

begin writeln('Введіть послідовність літер, ' 'яка закінчується крапкою.');

к:=0; {лічильник кількості цифр}

repeat read(c);

if (c>='0')and(c<='9') then k:=k+l;

Until C= ' . ' ;

writeln('Послідовність містить ',k,' цифр.')

end.

Цю задачу можна використати для розв'язування складнішої задачі, яку розв'язує кожен компілятор.

Задача 31. Дано послідовність символів. Перевірити, чи задана

послідовність є записом цілого числа у десятковій системі

числення, і якщо так, то обчислити значення цього числа.

Ціле число - це послідовність цифр, якій може передувати знак

' + ' чи '-'. Цю послідовність можна зобразити рядком - структурою

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

program defineNumber;

var s:string; {задана послідовність літер}

zn:integer; k:longint; {знак числа і його значення} t:boolean; {ознака правильності запису числа}

i,cyf:bуte; {робочі ЗМІННІ}

const o=ord('0і);

begin writeln('Введіть послідовність літер');

readln(s);

k:=0; {число, яке треба сформувати}

і:=1; zn:=i; {припускаємо, то число додатне)

if s[i] = ' + ' then і: =2 (цифри починаються з другої літери} else if s{i] = '-' then (число - від'ємне, цифри - з}

begin zn:=-l; і:=2 end; {другої літери}

t:=true; {спочатку вважаємо, що запис правильний}

while{i<= length (s) } and t do

begin if (s [i] >='0')and(s [i]<='9') then

begin cyf:=s[i]-o; (обчислили значення цифри)

k:=k*10+cyf {обчислили відповідне значення числа}

end {then} else t:=false; {помилка у записі}

i:=i+1

end;{while}

if t then

writeln('Послідовність є числом зі значенням ',zn*k)

else writeln('Послідовність не є числом.’)

end.

Послідовність, яку аналізує програма, повинна починатись із символів ' + '. '—' чи цифр. Усі інші символи сприймаються як помилкові. Проте цю програму легко модифікувати так, щоб вона ігнорувала пропуски перед числом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]