|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ЛАБОРАТОРНАЯ РАБОТА №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), поскольку 'а'<'и' и второе слово длинее Функции обработки строк.
Примеры:
Процедуры обработки строк.
Примеры:
Рассмотрим задачу по обработке строковых данных. Пример.Заданна строка, состоящая из слов, разделенных одним или несколькими пробелами. Удалить повторные вхождения каждого слова. Выделяем слова, переписываем их в первую строку двумерного массива, во вторую строку в соответствующую позицию записываем ‘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. Не следует забывать инициализировать строку перед ее заполнением (первый оператор программы). В противном случае, так как начальная длина строки является неопределенной, можно получить произвольный результат. Вопросы допуска
Практическое задание. 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. Ответы на контрольные вопросы.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|