Реферат: Алгоритмы обработки символьной информации


Алгоритмы обработки символьной информации


В Паскале используют следующие типы данных для работы с текстом:

1. Символьный тип Char. Значением переменной этого типа может быть один символ: буква, цифра, знак препинания.

2. Строковый String[количество символов] . Значением переменной этого типа может быть последовательность символов.

Значения переменных задаются в апострофах.  a:=' f ' ; b:='+' ; c:='5' t:='Литерная величина' ; f:=' ' ; (пустая строка) 

Для данных символьного и литерного типов применимы операции сцепки (соединения, конкатенации) и сравнения (<, >, <=, >=, =, <>).
Сравнивать можно строки разной длины. Сравнение осуществляется слева направо в соответствии с ASCII-кодами соответствующих символов.
Так, строка "стол" меньше строки "стул", строка "teacher" больше строки "pupil", а строка "А" меньше строки "АВ".


Процедуры

Delete(Str, N,M) Удаляет M символов из строки Str, начиная с позиции N.

Insert(SubS, S, N) Вставляет подстроку SubS в строку S, начиная с позиции N.

Str(X, S) Переводит число Х в строку символов S содержащую цифры.

Val(S , X, Code) Переводит строку S содержащую цифры в целое число. Параметр Code содержит признак ошибки преобразования (если Code = 0, ошибки нет).

Функции

A:=Chr(X) присваивает переменной А символ с порядковым номером Х.

A:=Copy(S , N, M) присваивает переменной А фрагмент строки S, начиная с позиции N и длиной M символов.

N:=Length(S) Присваивает переменной N количество символов в строке S.

N:=Ord(X) Присваивает переменной N порядковый номер символа X в таблице кодов символов.

N:=Pos(SubS, S) Присваивает переменной N номер позиции, начиная с которой в строке S располагается подстрока SubS (если значение функции равно нулю, то S не содержит SubS).


^ Пример 1. Составить программу осуществляющую вырезку из слова ИНТЕГРАЛ букв так, что бы из них получилось слово ТОРТ.


Program n1;

Uses crt;

var a,b,c,d:string;

Begin

Clrscr;

a:='информатика';

b:='';

c:=copy(a,8,1);

d:=copy(a,4,2);

b:=c+d+c;

writeln(b);

readln;

End.


(Самостоятельно) 2. Получите из слова "ИНТЕГРАЛ" слова "ГАНТЕЛИ" , "РЕНТГЕН", "ТИГР" , "АГЕНТ".


^ Пример 3. Сравнить длину двух строк введенных с клавиатуры.


Program n2;

Uses crt;

var a,b:string;

m,n:Integer;

Begin

Clrscr;

Writeln('ВВеди первую строку ');Readln(a);

Writeln('ВВеди вторую строку ');Readln(b);

m:=Length(a);

n:=length(b);

if (m=n) then writeln('Строки равны');

if (m>n) then writeln('Первая больше');

if (m

readln;

End.


Пример 4. Составить программу, подсчитывающую количество букв «А» в слове (слово ввести с клавиатуры)


Program n4;

Uses crt;

var a,b,c:string;

i,k:Integer;

Begin

Clrscr;

Writeln('ВВеди строку ');Readln(a);

b:='А';

k:=0;

for i:=1 to length(a) do

begin

c:=copy(a[i],1,1);

if (c=b) then k:=k+1;

end;

Writeln(k);

readln;

End.


Пример 5. Составить программу, осуществляющую переворот слов.


Program n5;

Uses crt;

var a,b,c:string;

i,k:Integer;

Begin

Clrscr;

Writeln('ВВеди строку ');Readln(a);

b:='';

for i:=length(a) downto 1 do

begin

c:=copy(a[i],1,1);

b:=b+c;

end;

a:=b;

Writeln(a);

readln;

End.


Пример 6. Составить программу заменяющую все буквы "А" на "О" в слове, введенном с клавиатуры.


Program n6;

Uses crt;

var a,с,d:string;

i,k:Integer;

Begin

Clrscr;

Writeln('ВВеди строку ');Readln(a);

d:='';

for i:=1 to length(a) do

begin

с:=copy(a[i],1,1);

if (с<>'A') then d:=d+с else d:=d+'O';

end;

a:=d;

Writeln(a);

readln;

End.


Пример 7. Составить программу , удаляющую букву «А» из данного текста(текст ввести с клавиатуры )


Program n7;

Uses crt;

var a,b:string;

i,n:Integer;

Begin

Clrscr;

Writeln('ВВеди слово ');Readln(a);

n:=length(a);

for i:=1 to n do

begin

b:=copy(a[i],1,1);

if (b='A') and (n>0) then begin

delete(a,i,1);

if (i>0) then i:=i-1;

n:=n-1;

end;

end;

Writeln(a);

readln;

End.


(Самостоятельно) 8. Дан текст , представляющий собой алгебраическое выражение, проверить в нем парность скобок . Результат сообщить .

9. Составить программу, подсчитывающую количества парных букв. Результат сообщить .

^ 10. Составить программу исправляющую ошибки в правописании "ЖИ" и "ШИ" .

11. Для оформления заголовков и логически важных слов , символы текста при печати чередуют с пробелами , т.е. раздвигают текст. Написать программу, которая выполняет такую операцию.

12. По общим правилам оформления машинописных работ и служебных документов после знака препинания (. , : ;) ставится пробел. Составьте программу добавляющую недостающие пробелы.

^ 13. Из данного текста удалить все буквы "С" которые предшествуют букве "Т"

14. Составьте программу подсчитывающую количество слогов в слове. (Подсчитайте количество гласных букв , это и будет кол-во слогов)

^ Пример 15. Вычислите сумму цифр натурального числа N.


Program n15;

Uses crt;

var a,b:string;

s,i,x,code:Integer;

n:longint;

Begin

Clrscr;

Writeln('ВВеди число ');Readln(n);

str(n,a);

s:=0;

for i:=1 to length(a) do

begin

b:=copy(a[i],1,1);

val(b,x,code);

s:=s+x;

end;

Writeln(s);

readln;

End.


(Самостоятельно) 16. Дан текст, содержащий две цифры меньше 10 и знак + (- , * , /) между ними. Составить программу находящую значение этого арифметического выражения.

^ 17. Вычеркните из слова все буквы стоящие на четных местах.

18. Выясните, какая из букв "А" или "B" встречается в слове раньше.


Program n18;

Uses Crt;

var a,c:string;

i:integer;

Flag:boolean;

begin

Clrscr;

Writeln('ВВеди строку ');readLn(a);

Flag:=false;

i:=1;

while (i<=length(a)) and (flag=false) do

begin

c:=copy(a,i,1);

if (c='A') or (c='B') then flag:=true;

i:=i+1;

end;

if (c='A') then writeln('Раньше А') else writeln('Раньше В');

readln;

end.


^ 19. Определить количество слов в заданном тексте.

Если слова в тексте разделены одним пробелом, то задача сводится к подсчету числа пробелов. Количество слов при этом равно числу пробелов плюс 1. Если же число пробелов между соседними словами произвольное, как обычно и бывает, то алгоритм усложняется.


Вариант 1

Program n19; 

  Uses Crt; 

  Var Text   : String;  {заданный непустой текст}

  i, Number : Integer; {Number - количество слов в тексте}

  ^ Letter   : Char;   {текущая буква }

BEGIN ClrScr;

  WriteLn('Введите текст :'); ReadLn(Text);

  Number:=1;

  For i:=1 to Length(Text) do {цикл по буквам текста}

begin

Letter:=Text[i];

If (Letter = ' ' ) then Number:=Number+1;

end;

  WriteLn('О т в е т : количество слов в тексте равно ', Number);

END.


^ 20. Заданную последовательность слов переупорядочить в алфавитном порядке (то есть выполнить лексикографическое упорядочение).

Program N20;

  Uses Crt;

  Var W   : Array[1..10] of String; {массив слов}

  Tmp   : String; {Tmp - вспомогательная переменная}

  i, j, N : Integer;   {NWords - количество слов}

^ BEGIN

  ClrScr;

  Write('Количество слов в тексте - ');

  ReadLn(N);

  For i := 1 to N do

  begin Write(i, '-ое слово : ');

  ReadLn(W[i]);

  end;

  For i := 1 to N-1 do {лексикографическое упорядочение слов}

  For j := i+1 to N do

  If W[i]>W[j] then

  begin

Tmp := W[i]; W[i]:=W[j]; W[j]:=Tmp

  end;

  WriteLn;  WriteLn('О т в е т');

  WriteLn('Лексикографически упорядоченный массив слов:');

  For i := 1 to N do Write(W[i], ' ');

  ^ WriteLn; ReadLn

END.


Задачи для самостоятельного решения.


7.1. Подсчитать количество запятых в заданном тексте.

7.2. Подсчитать, сколько раз в заданном тексте встречается заданный символ.

7.3. Определить долю пробелов в заданной строке.

7.4. Проверить, является ли заданное слово названием  времени года на русском языке.

7.5. Заменить в заданном тексте буквосочетание "min" на "max".

7.6. В заданном тексте подсчитать общее количество букв  "x" и "y".

7.7. В заданном тексте везде букву "а" заменить на букву "б",  а букву "б" - на букву "а".

7.8. Удвоить каждую букву в заданном тексте.

7.9. В заданном слове каждую букву "б" заменить буквосочетанием "ку".

7.10. Вычеркнуть из заданного слова все буквы "а".

7.11. Подсчитать, сколько раз в заданном слове встречается буквосочетание "аб".

7.12. Заданную строку А переписать в обратном порядке в строку В.

7.13. Выяснить, есть ли в заданном предложении буква "ы".

7.14. Выяснить, верно ли, что в заданном предложении P есть все буквы, входящие в заданное слово S.

7.15. Определить количество предложений в заданном тексте (предложение заканчивается либо точкой, либо вопросительным или восклицательным знаком).

7.16 Определить долю гласных букв в заданном тексте на русском (английском) языке.

7.17. Определить, является ли одно заданное слово обращением другого заданного слова.

7.18. Из заданного текста удалить те его части, которые заключены в кавычки (вместе с кавычками).

7.19. Каждые n символов во введенном тексте отделить знаком "!".

7.20. Выяснить, верно ли, что в заданном предложении есть пара соседствующих одинаковых символов.

7.21. Найти хотя бы одно слово, которое встречается  в каждом из трех заданных предложений.

7.22. Отредактировать заданное предложение,  удаляя из него все слова с чётными номерами.

7.23. В заданном предложении указать слово, в котором доля гласных (A, E, I, O, U - строчных или прописных) максимальна.

7.24. Дан текст из цифр и строчных латинских букв, за которым следует точка. Определить, каких букв - гласных (A, E, I, O, U) или согласных - больше в этом тексте.

7.25. В заданную упорядоченную в лексикографическом (алфавитном) порядке последовательность слов вставить новое заданное слово так, чтобы лексикографический порядок сохранился.

7.26. В заданной последовательности слов найти все слова, начинающиеся с заданной приставки.

7.27. В заданной последовательности слов найти все слова, имеющие заданное окончание.

7.28. Найти самое длинное и самое короткое слово в заданном предложении.

7.29. В заданном тексте подсчитать наибольшее количество подряд идущих пробелов.

7.30. Для каждого из слов заданного предложения указать, сколько раз оно встречается в предложении.

7.31. Найти самое длинное симметричное слово заданного предложения.

7.32. Из заданного текста выбрать и напечатать те символы, которые встречаются в нём ровно один раз.

7.33. Определить частоту вхождения в текст каждой буквы русского алфавита.

7.34. Дана последовательность слов, в которой слова разделены запятыми, а за последним словом - точка. Напечатать:
  а) эту же последовательность слов, но в обратном порядке;
  б) все различные слова, указав для каждого из них число его вхождений в последовательность.

7.35*. Отредактировать заданное предложение, удаляя из него все лишние пробелы.

7.36*. Из заданного предложения удалить те слова, которые уже встречались в предложении раньше.

7.37*. Преобразовать заданное десятичное, натуральное число в римскую систему счисления.

7.38*. Преобразовать число, заданное в римской системе счисления, в число десятичной системы.
еще рефераты
Еще работы по разное