Хелпикс

Главная

Контакты

Случайная статья





ЛАБОРАТОРНАЯ РАБОТА №12. Ход работы.. Теоретическая часть



ЛАБОРАТОРНАЯ РАБОТА №12

Тема:Обработка текста.

Цель:Освоить программирование алгоритмов обработки строковых  и символьных данных.

Оборудование:ПК

Ход работы.

1. Изучить теоретический материал.

2. Ответить на вопросы допуска.

3. Выполнить практическое задание.

4. Ответить на контрольные вопросы.

5. Составить отчет.

Теоретическая часть

Строки символов – это некая разновидность массивов

Описание массива символов имеет вид: var M: Array[1..20] of char;

Строка символов является последовательностью, что содержит ноль и более символов из расширенного набора символов кода ASCII, записанную в одной строке программы и заключенную в одиночные кавычки. Строка символов, которая ничего не содержит между апострофами, называется нулевой строкой. Два последовательных апострофа в строке символов помечают один символ - апостроф. Длиной строки символов является количество символов между апострофами.

Паскаль позволяет вставлять в строку символов управляющие символы. Символ # с целой константой без знака в диапазоне от 0 до 255 помечает соответствующий этому значению символ в коде ASCII. Между символом # и целой константой не должно быть никаких разделителей.

Например: 'TURBO',  ‘#13#10’

Символьным константам можно присваивать имена. – Const st=’рядок’;

Символьные переменные описываются в разделе описания переменных с описателем String.

Var st1,st2:string[10]; st3:string;

begin

 st1:= ’строка’;

end.

По умолчанию для строк определенная максимальная длинная, равная 255 символам, но ее можно изменить, указав при описании: string[число символов]. Если строка длиннее максимальной длины, то символы, которые не поместились, отбрасываются.

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

Текущее значение длины строковой переменной можно получить с помощью стандартной функции Length – Length(s).

Строки выводятся и вводятся с помощью операторов read, readln, write, writeln. Над строками выполняется операция конкатенации, которая позволяет соединить две или более строк в одну без разделителей.

Пример:

st1:=’Сту’;st2:=’де’;

st3:=st1+st2+’нт’;

Результат: st3=’студент’;

 

Над строками выполняются операции сравнения: = < > <= >= <>.

Строки сравниваются посимвольно слева направо до получения результата или до исчерпания символов строки.

Пример:

’паскаль’=’паскаль’, поскольку все символы поэлементно совпадают.

Пример: ’программа’<’программист’. Результат сравнения (true), поскольку 'а'<'и' и второе слово длинее

Функции обработки строк.

Наименование Назначение
concat(строка1,строка2….) Сцепление строк(конкатенация)
copy(подстрока,число1,число2) Из указанной строки выделяется подстрока, начиная с позиции, заданной числом1, длиной, заданной числом2.
Pos(строка1, строка2) Отыскивает первое вхождение строки1 в строку2 и возвращает номер начальной позиции вхождения или ноль, если строка1 не входит в строку2.
length(строка) Возвращает длину строки – аргумента.

Примеры:

1. Начальные данные: a=’код’, b=’ил’. s:=concat(‘кро’,a,b). Результат: s=’крокодил’. 2. Начальные данные: s=’крокодил’. Оператор: b:=copy(s,2,3). Результат: b=’рок’.
3. Начальные данные: s=’крокодил’. Оператор: i:=pos(‘око’,s). Результат: i=3. Оператор: i:=pos(‘я’,’крокодил’). Результат: i=0.

Процедуры обработки строк.

 

Наименование

Назначение

insert(строка1, строка2, число)

Вставляет рядок1 в рядок2, начиная с позиции, заданной числом. Если в результате выходит строка длины больше максимальной, то он усекается дело.

 

delete(строка, число1,число2).

Удаляет из строки подстроку, начиная с позиции, заданной числом1, длиной, заданной числом2. Если число1 больше размера строки, то подстрока не удаляется. Если число2 больше начальных количества, то удаляются символы до конца строки

 

str(число[:M[:N]],строка).

Преобразование числа в строку. M задает общее количество символов, получаемых в строке, N – для вещественных чисел задает количество цифр в дробной части.

 

val(строка, число, код).

Преобразование строки символов во внутреннее представление числа. Код указывает номер неправильного символа или равный 0 в случае успешного преобразования.

 
         

Примеры:

Начальные данные: S=’крокодил’. Оператор: d:=copy(s,3,3). Результат: d=’око’. . Оператор: val(‘+12.3’,v,k). Результат: v=12.3, k=0 { преобразование прошло успешно}
Начальные данные: S=’крокодил’. Оператор: insert(‘h’,d,3). Результат: d=’окно’. Начальные данные: S=’крокодил’. Оператор: delete(s,1,1). Результат: s=’роил’
Оператор: str(123,s). Результат: s=’123’. Начальные данные: S=’крокодил’. Оператор: delete(s,4,3). Результат: =’кроил’
.Оператор: val(‘23+5’,v,k). Результат: v=неверно, k=3 { ошибка при попытке превратить третий символ}  

 

 

Рассмотрим задачу по обработке строковых данных.

Пример.Заданна строка, состоящая из слов, разделенных одним или несколькими пробелами. Удалить повторные вхождения каждого слова.

Выделяем слова, переписываем их в первую строку двумерного массива, во вторую строку в соответствующую позицию записываем ‘0’ для уникального слова и ‘1’- для слова, которое повторяется. Потом формируем строку, которая состоит из элементов первой строки массива, в которых во второй строке записан '0‘ и распечатываем строку.

 

program ttt;

const nn=10;

type mas=array [1..2,1..nn] of string;

var a:mas;

 n:integer;

 s,ss:string; { начальная и вспомогательная строки}

 и, j, k:integer;

begin

       write(‘Введите строку : ’);readln(s);

       s:=s+’ ’;j:=0; ss:=’ ’;

       for i:=1 to length(s) -1 do

                   if (s[i]<>’ ’) and(s[i+1]=’ ’) { выделение слов}

                   then begin  ss:=ss+s[i];j:=j+1;a[1, j]:=ss;a[2, j]:=’0’; ss:=’ ’;

{ в первую строку{ записываем слово}

                               end

{0’ во второй строке означает, что слово встретилось впервые}

                   else if s[i]<>’ ’ then ss:=ss+s[i];

                   for i:=1 to j-1 do for k:=i+1 to j do

                          if (а[2,i]<>’1’) and(а[2,k]<>’1’) and(а[1,i]=a[1,k]) then а[2,k]=’1’; { нашли слова, которые совпали}

       s:=’ ’;

       for i:=1 to j do if а[2,i]<>’1’ then s:=s+a[1,i]+’ ’;

       writeln(‘Результат : ’,s);

end.

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

Вопросы допуска

В чем отличие типа char и типа string. 1. Отличий нет 2. Значением величины типа char может быть только буква, а string – любой символ 3 Значением величины типа char может быть только 1 симлов, а string – любое количество символов символ (до 255)
Начальные данные: S=’автоматический’. Оператор: d:=copy(s,5,3).. 1 Результат: d=’том’ 2 Результат: d=’мат’ 3 Результат: d=’томат’
Начальные данные: d =’омар’. Оператор: insert(‘кош’,d,1). 1 Результат: d=’комар’ 2 Результат: d=’окош’ 3 Результат: d=’кошмар’
Начальные данные: S=’фрагмент’. Оператор: delete(s,1,4). 1 Результат: d=’фрамент’ 2 Результат: d=’франт’ 3 Результат: d=’мент’
Начальные данные: S=’крокодил’. Оператор: d:= length(s) 1 Результат: d=8 2 Результат: d=’крокодил’ 3 Результат: d=0

Практическое задание.

1. Запустить среду Turbo Pascal. В окне ввода текста набрать текст программы, согласно варианта.

1. Напишите программу, подсчитывающую количество букв во введенном с клавиатуры слове. Ввод осуществляйте в цикле while do. Выход из программы – строка «999».

2. Дано натуральное число n и символы s1, s2, …, sn. Подсчитать сколько раз среди данных символов встречается символ +.

3. Дано натуральное число n и символы s1, s2, …, sn. Подсчитать количество встречающихся символов *.

4. Дано натуральное число n и символы s1, s2, …, sn. Выяснить, каких символов больше + или *.

5. Напишите программу, определяющую число слов в строке. Одно слово от другого отделяется одним пробелом.

6. Напишите программу, которая подсчитывает стоимость телеграммы, текст которой вводится с клавиатуры.

7. Напишите программу, определяющую, какая из букв первая или последняя встречаются в заданном слове чаще.

8. Заданы фамилия, имя и отчество учащегося, разделенные пробелами. Напишите программу, печатающую фамилию ученика и его инициалы.

9. Напишите программу, удаляющую из текста все буквы, совпадающие с его последней буквой.

10. Напишите программу, удаляющую из слова X все буквы, которые встречаются в слове Z.

11. Напишите программу, которая в заданном тексте меняет слово «Петр» на слово «Иван».

12. Напишите программу, которая удаляет из введенной строки любой требуемый введенный с клавиатуры символ. Процесс удаления выделите в отдельную процедуру.

13. В заданном тексте заменить все буквы "а" на букву "о".

14. Составить программу, определяющую, является ли введенное слово перевертышем.

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

3. Выполнить компиляцию программы и установить синтаксические ошибки.

4. Выполнить программу и проверить результат ее работы на контрольном примере.

5. Сохранить текст отлаженной программы.Выйти из среды Turbo Pascal.

Контрольные вопросы.

1. Перечислите функции обработки строк и проанализируйте их работу.

2. Есть ли ошибки в инструкциях st:=copy(s,I,k) и st:=delete(s,I,k). Если есть, то какие?

3. Какой другой операцией можно заменить действие функции concat(строка1,строка2….)

Содержание отчета.

1. Тема, цель, оборудование

2. Выполненное практическое задание.

3. Ответы на контрольные вопросы.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.