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

Вид материалаДокументы

Содержание


Пример 1. Составить программу осуществляющую вырезку из слова ИНТЕГРАЛ букв так, что бы из них получилось слово ТОРТ.
Пример 3. Сравнить длину двух строк введенных с клавиатуры.
10. Составить программу исправляющую ошибки в правописании "ЖИ" и "ШИ" .
13. Из данного текста удалить все буквы "С" которые предшествуют букве "Т"
Пример 15. Вычислите сумму цифр натурального числа N.
17. Вычеркните из слова все буквы стоящие на четных местах.
19. Определить количество слов в заданном тексте.
Letter   : Char;   {текущая буква }
20. Заданную последовательность слов переупорядочить в алфавитном порядке (то есть выполнить лексикографическое упорядочение).
BEGIN   ClrScr
WriteLn; ReadLn
Подобный материал:
Алгоритмы обработки символьной информации


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

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*. Преобразовать число, заданное в римской системе счисления, в число десятичной системы.