Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Основы логического строения текстаАлгоритм обработки слов текста Begin Then Begin BEGIN Программа. Алгоритмы сортировки и перемещения Begin Begin Программа. BEGIN Программа. var s:string; n:integer; {---здесь описание процедуры UpChar для преобразования букв текста в большие---} readln(s); UpChar(s); {преобразуем буквы в большие} i:=1; while (i<=length(s) div 2) and (s[i]=s[length(s)-i+1]) do i:=i+1; if i>length(s) div 2 then writeln(‘Строка симметрична’) else writeln(‘Строка не симметрична’); end. Пример 2. Задан текст. Найти сумму чисел, присутствующих в этом тексте. Решение. Сумму будем накапливать в переменной sym. Очередное слагаемое формировать в переменной СL. В начале обе переменные равны 0. Для получения слагаемого будем просматривать строку от 1-го до последнего символа. Очередной символ функцией val будем преобразовывать в одноразрядное число, и помещать его в переменную q. Если преобразование получилось, то добавляем к числу, формируемому в CL, очередной разряд. Разряд должен стать младшим разрядом числа. Поэтому значение CL умножаем на 10 и затем добавляем q. Если преобразование не получилось, то, следовательно, последовательность цифр в исходной строке закончена и очередное слагаемое получено. Поэтому добавляем CL к сумме и затем обнуляем СL. program symma; var s:string; cl,i,sym,c,q,cod:integer; readln(s); sym:=0; {сумма-результат} cl:=0; {очередное слагаемое} i:=1; while i<=length(s) do val(s[i],q,cod); {q-цифра, } if cod=0 then cl:=cl*10+q {новый разряд в слагаемое} else begin sym:=sym+c; c:=0;end; i:=i+1; end; if c<>0 then sym:=sym+c; writeln('symma=',sym); end. Пример. Дана последовательность символов латинского алфавита. Упорядочить в порядке убывания символы, расположенные на четных местах в строке. Большие и малые буквы считаются разными. Решение. Будем перебирать только четные символы строки. Для сортировки применим пузырьковый алгоритм. var s,a:string; i:integer; readln(s); f:=true; repeat i:=2; while i+2<=length(s) if s[i]>s[i+2] c:=s[i]; s[i]:=s[i+2]; s[i+2]:=c; f:=false end; i:=i+2; end; until f; writeln(‘Результат:’,s); end. Минимальные логические единицы текста, которые могут обладать самостоятельным смысловым значением, – это слова. Слова – это тоже последовательность символов. Компьютер не может понимать смысл слов, поэтому для компьютерной программы необходимо определить формальные правила (алгоритм), по которым можно отличить одну последовательность от другой. По таким правилам программа сможет выделять отдельные части текста и обрабатывать их по-разному. Эти правила можно разделить на три группы: 1. Определяется множество символов (алфавит), которые считаются буквами слов. Тогда любая непрерывная последовательность символов алфавита считается словом. 2. Определяются специальные символы-ограничители, которые используются для выделения слов. При этом слово – это любая последовательность, расположенная между такими ограничителями. 3. Определяется множество всех допустимых значений слов – словарь. При этом слово – это любая строка, включенная в словарь. Этот принцип ближе всего к строению обычного естественного языка. Для формального исполнителя первые два метода проще и удобнее. Любая строка может содержать символы двух типов. Одни символы образуют группы различной длины, которые считаются словами. Это символы-буквы. Другая разновидность символов используется только для разделения слов и называется разделителями. В обычном тексте разделители – это пробелы, запятые, точки и другие знаки препинания. При этом важно помнить, что количество разделителей между словами может быть произвольным и предусмотреть это при написании программы. Такая модель логического строения текста представляется просто и наглядно:
Здесь символы-буквы – это крестики, а символы небуквы (разделители) – квадратики. Виден главный принцип – свободное чередование букв и разделителей в тексте. Любая программа обработки текста должна отличать символы-буквы и символы-разделители. Если символ является буквой, то он определенным образом обрабатывается. Если символ является разделителем, то он просто пропускается. Пример 10. Дана последовательность символов. Группу символов, разделенную с одной или обеих сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Вывести на экран слова текста в столбик и подсчитать количество слов. Решение. Из условия задачи видно, что символом-разделителем считается пробел. Все остальные символы считаются буквами. Рассмотрим пример текста:
Видно, что в тексте слова чередуются с разделителями. Если бы перед первым словом не было пробелов, то функцией POS можно было бы найти p – позицию пробела после первого слова (p=8)
Тогда функцией COPY можно было бы выделить слово, которое начинается на позиции №1 и имеет длину p-1(7). Поэтому перед началом работы удалим пробелы в начале текста, а затем выполним все действия, описанные выше. Затем функцией delete удалим первое слово вместе с пробелом после него:
Теперь второе слово переместилось в начало текста и стало первым. Можно повторить действия, описанные выше, но уже для второго слова. И так далее, пока текст не закончится, т.е. не будут удалены все его символы. Особенности алгоритма: 1. После каждого слова необходим 1 пробел, который является признаком конца слова. После последнего слова может быть один, несколько или ни одного пробела. Поэтому в конце текста сначала удалим все пробелы, а затем операцией конкатенации (+) добавим 1 пробел в конец последнего слова. 2. Текст в ходе работы пропадает. Если он будет нужен в дальнейшем, то его нужно сохранить в дополнительной переменной.
Дата добавления: 2014-03-11; просмотров: 370; Нарушение авторских прав Мы поможем в написании ваших работ! |