Алгоритмы обработки символьной информации
Вид материала | Документы |
- Метод и алгоритмы обработки информации в системе прогнозирования качества агломерата, 229.88kb.
- Алгоритмы обучения и архитектура нейронных сетей. Нейросетевые системы обработки информации, 21.42kb.
- Рабочая программа По дисциплине «Цифровые методы обработки аудио визуальной информации», 267.73kb.
- Примерная программа наименование дисциплины Структуры и алгоритмы компьютерной обработки, 215.14kb.
- Алгоритмы на графах, 47.29kb.
- Рабочая программа По дисциплине «Основы обработки визуальной информации» По специальности, 230.56kb.
- Контрольные вопросы по дисциплине «модели и алгоритмы обработки информации», 27.51kb.
- Программы для просмотра Web-страниц, работы с электронной почтой, скачивания информации,, 25.58kb.
- Реферат по дисциплине «Поиск и обработка экономической информации» на тему: «Автоматизированных, 153.2kb.
- «наша новая школа»: место информационно-коммуникационных технологий в работе учителя, 67.37kb.
Алгоритмы обработки символьной информации
В Паскале используют следующие типы данных для работы с текстом:
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*. Преобразовать число, заданное в римской системе счисления, в число десятичной системы.