ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Федеральное государственное образовательное учреждение высшего профессионального об...
33 downloads
243 Views
363KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Федеральное государственное образовательное учреждение высшего профессионального образования «ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
АМЕЛИНА Н.И., РУСАНОВА Я.М. СТРУКТУРЫ ДАННЫХ. СТРОКИ
МЕТОДИЧЕСКИЕ УКАЗАНИЯ по «Практикуму на ЭВМ» для студентов 1 курса дневного и вечернего отделений факультета математики, механики и компьютерных наук
Ростов-на-Дону 2007 3
Методические указания разработаны сотрудниками кафедры прикладной математики и программирования: кандидатом технических наук, доцентом Я.М. Русановой и старшим преподавателем Н.И. Амелиной.
Методические указания содержат примеры обработки строк на языке Паскаль, список задач и варианты индивидуальных заданий для самостоятельной работы. Методические указания предназначены для студентов 1 курса дневного и вечернего отделений факультета математики, механики и компьютерных наук, специализирующихся в области прикладной математики, и для преподавателей, ведущих занятия по «Практикуму на ЭВМ».
Печатается в соответствии с решением кафедры прикладной математики и программирования факультета математики, механики и компьютерных наук ЮФУ, протокол № 9 от 31мая 2007г.
4
СОДЕРЖАНИЕ
1 Основные понятия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 Посимвольная обработка строк . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3 Использование стандартных процедур и функций . . . . . . . . . . .
13
4 Обработка слов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Задачи. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
Индивидуальные задания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Задание 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
Задание 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
Задание 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
Приложение. Процедуры и функции обработки строк . . . . . . . . . . 35 ЛИТЕРАТУРА . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
37
1 ОСНОВНЫЕ ПОНЯТИЯ
Строка – это последовательность символов произвольной длины (от 0 до 255). Символы хранятся в памяти компьютера в виде кодов. Соответствие между символами и их кодами называется кодировкой, а таблица соответствия между символами и кодами – кодовой таблицей. Определение строкового типа string устанавливает максимальное количество символов, которое может содержать строка. Например, string[20] устанавливает максимальное количество символов в строке – 20, а если количество символов в квадратных скобках не указано, то оно считается равным 255: type slovo=string[20]; var Sl : slovo; Str : string[80]; S,S1,S2 : string; Тип string без указания типа является базовым строковым типом и все другие производные строковые типы совместимы с ним.
Длина строки – это фактическое количество символов, хранящихся в строке. Длина строки может изменяться в ходе работы программы, но не может превышать определенный при описании размер. В языке Pascal в нулевом элементе строки хранится символ, код которого равен длине строки. Значение текущей длины строки можно получить двумя способами: – определяя код нулевого символа ord(S[0]), – используя стандартную функцию length(S). К символам строки можно обращаться по индексу:
S[i] – i-ый символ строки S. 6
Например, фрагмент программы, приведенный ниже, позволяет найти сумму всех цифр, входящих в строку S : sum := 0; for i:=1 to ord(S[0]) do if S[i] in [’0’..’9’] then sum := sum + (ord(S[i])-ord(’0’)); Для строк применимы операции конкатенации и сравнения. Операция конкатенации (+) используется для сцепления нескольких строк в одну: var S1,S2 : string; C : char; . . . . . . . . . S1:=’Строка’; S2:=’ABC’; C:=’ ’; S1:=S1+C+S2; В результате строка S1 будет содержать значение ’Строка ABC’. Для сравнения строк применяются операции отношения:
= , < > , < , > , = . Сравнение происходит посимвольно слева направо в соответствии с кодировкой символов. При сравнении строк разной длины считается, что отсутствующие символы в более короткой строке имеют код меньше кода любого другого символа, например, ’ABC’ больше ’AB’.
7
2 ПОСИМВОЛЬНАЯ ОБРАБОТКА СТРОК Пример 1. Дана строка. Получить новую строку, содержащую символы исходной строки в обратном порядке. Задачу можно решить с помощью операции конкатенации. Очередной символ S[i] исходной строки S добавляется к результирующей строке Sr слева, что и обеспечивает размещение символов в обратном порядке. program S_1_1; var S,Sr: string; i: integer; begin writeln (’Введите строку’); readln (S); Sr := ’’; for i := 1 to ord(S[0]) do Sr := S[i]+Sr; writeln(Sr) end. Более эффективный способ решения задачи состоит в том, что результирующая строка заполняется посимвольно, как обычный массив. program S_1_2; var S,Sr: string; i,n: integer; begin writeln (’Введите строку’); readln (S); n := ord(S[0]); Sr[0]:= S[0]; {или Sr[0]:=chr(n);} 8
for i := 1 to n do Sr[i] := S[n-i+1]; writeln(Sr) end. Следует обратить внимание на использование одного из операторов
Sr[0]:=S[0] или Sr[0]:=chr(n). Таким образом устанавливается длина строки Sr равной длине строки S, так как в языке Pascal информация о текущей длине строки хранится в ее символе с нулевым индексом. Ниже приводится еще один вариант решения, в котором преобразованию подвергается исходная строка. Решение оформлено в виде процедуры S13( S ). Строка S является и входным, и выходным параметром. procedure S13(var S: string); var i, n: integer; C: char; begin n := ord(S[0]); for i := 1 to n div 2 do begin C := S[i]; S[i]:= S[n-i+1]; S[n-i+1]:= C end end; Контрольный пример Входные данные:
S=’строка для теста’
Выходные данные: S=’атсет ялд акортс’ 9
Пример 2. Дана строка, состоящая из строчных латинских букв, цифр, пробелов и знаков равенства. Для каждой цифры посчитать, сколько раз она встречается в строке. Решение оформлено c использованием процедуры S21( S, A). Входные параметры:
строка S.
Выходные параметры: массив А для хранения числа вхождений соответствующей цифры. Параметр для количества элементов в массиве не предусмотрен, так как количество элементов массива для данной задачи фиксировано и равно количеству цифр – 10. program S_2_1; type mas = array[’0’..’9’] of integer; {каждый элемент массива типа mas предназначен для хранения числа вхождений соответствующей цифры от 0 до 9} var S: string; Res: mas; j: char; procedure S21(var S: string; var A: mas); var n, i: integer; j: char; begin n := ord(S[0]); for j := ’0’ to ’9’ do A[j] := 0; for i := 1 to n do {если символ S[i] принадлежит множеству цифр} if S[i] in [’0’..’9’] then 10
A[S[i]] := A[S[i]]+1 end; begin writeln (’Введите строку’); readln (S); S21(S, Res); for j := ’0’ to ’9’ do writeln(’символ ’,j,’ встречается ’,Res[j],’ раз(а)’) end. В случае если тип данных множество еще не известен, проверку факта, что символ является цифрой, можно произвести следующим образом: if (S[i] >= ’0’) and (S[i]