Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Алгоритмы проверки свойств последовательностиBEGIN Программа. Алгоритмы поиска/замены и вставки/удаления фрагментов текста Begin BEGIN Begin Программа. Алгоритмы проверки свойств символов Алгоритмы обработки Turbo-строк Алгоритмы обработки строк можно условно разделить на: 1. Алгоритмы проверки свойств символов (часто для подсчета количества определенных символов) 2. Алгоритмы поиска\замены и вставки\удаления фрагментов текста. 3. Алгоритмы проверки свойств последовательности. 4. Алгоритмы сортировки и перемещения. 5. Алгоритмы обработки слов текста (включает все вышеперечисленные алгоритмы, применяемые для отдельного слова текста) Пример. Задан текст. Найти количество букв кириллицы в этом тексте, а также преобразовать все латинские буквы в большие. Решение. Для преобразования букв латинского алфавита можно использовать стандартную функцию upcase(), которая возвращает для малой латинской буквы большую, а для остальных символов таблицы ASCII – их же самих без изменения. Для определения букв кириллицы создадим собственную функцию prov, которая для заданного ей символа будет выдавать результат True, если это буква кириллицы. В функции при организации проверки необходимо учесть особенность таблицы ASCII: буквы кириллицы разбиты на две серии: 1-я – все прописные, кроме «Ё», по алфавиту и сразу после них часть строчных от «а» до «п», кроме «ё»; 2-я – оставшаяся часть строчных от «р» до «я», после которой следуют «Ё» и «ё». В сериях коды символов увеличиваются согласно расположению букв в алфавите: «А» меньше «Б» и т.д., «Я» меньше «а» и т.д. Исключением являются буквы «Ё» и «ё», которое имеют самые большие коды символов и не соответствуют своему расположению в алфавите. var s:string; i,a:integer; Function prov(c:char):Boolean; If ((c>=’А’)and(c<=’п’)) or ((c>=’p’)and(c<=’ё’)) {если символ попадает в 1-ю серию букв кириллицы или символ попадает во 2-ю серию} thenprov:=true {то функция = истина} elseprov:=false;{иначе функция = ложь} end; readln(s); a:=0; {количество букв кириллицы – результат} for i:=1 to length(s) do{для каждого символа текста} if prov(s[i])then a:=a+1; {подсчет букв кириллицы} s[i]:=upcase(s[i]); {преобразование регистра символа} end; writeln('Новый текст:',s); writeln(‘Букв кириллицы - ’,a); end. Пример. Задан текст. Удалить из него все группы повторяющихся символов, оставив из группы одинаковых символов по одному, например: текст ‘абббввв444fffghtt’ должен быть преобразован в ‘абв4fght’. Решение. Программа будет осуществлять сравнение двух соседних символов, и пока они равны, удалять первый из этих двух символов процедурой delete. var s:string; n:integer; readln(s); n:=1; {позиция очередного проверяемого символа} while n<length(s) do{пока позиция очередного символа меньше длины S} ifs[n]=s[n+1] {если соседние символы равны} thendelete(s,n,1) {то удалить из текста S с позиции N один символ} else n:=n+1; {иначе - перейти на следующий символ } writeln('Новый текст - ',s); end. Пример. Задан текст. Определить, образуют ли символы строки симметричную последовательность (палиндром). Малые и большие буквы считаются эквивалентными. Последовательность из одного символа считается симметричной Решение. Для решения этой задачи нужно сравнивать между собой символы, расположенные на одинаковом расстоянии от центра. Пусть имеется строка S:
Длина строки определяется функцией length(S) и равна 9. Тогда пары символов для сравнения между собой должны быть такими:
Если все сравнения дают положительный результат, то текст является палиндромом. При нечетной длине строки центральный символ можно не сравнивать сам с собой. В программе используем процедуру UpChar преобразования малых букв в большие, описанную в примере №2.
Дата добавления: 2014-03-11; просмотров: 748; Нарушение авторских прав Мы поможем в написании ваших работ! |