![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Тема 19. Алгоритмизация обработки строковой информации. Обработка записей.Содержание книги
Поиск на нашем сайте
Для работы с символьной информацией в ТР используют новый тип данных - строковый, именуемый ключевым словом STRING (или просто строка). Этот тип данных во многом похож на одномерный массив символов (Array[0..N] of char), но длина строки (максимальное количество символов N ограничивается числом 255). Значение N определяется при объявлении типа STRING(N) и может быть любой константой порядкового типа, но не больше 255. Значение N при объявлении типа STRING можно не указывать: в этом случае длина строки принимается равной 255 символам. Строка в ТР трактуется как цепочка символов и к любому символу в строке можно обратиться по адресу (индексу), подобно одномерным массивам типа Array[0..N] of char. Самый первый байт в строке, имеющий адрес 0 (ноль), содержит код, равный числу символов в строке (длине строки). Например, дана строка, имеющая следующее описание: Var St:string; Тогда длину строки St можно определить как значение функции Ord(St[0]). Значением строки может быть любая последовательность символов, заключенная в одинарные кавычки (апострофы). Можно присваивать строке пустое значение, обозначаемое как '' (две одинарные кавычки подряд). При попытке записать в переменную строку длиннее, чем задано в описании, "лишняя" часть будет отсечена. Строки можно присваивать, сливать и сравнивать. Например: Var st1,st2,st3,sts:string; Begin ... { Операции присваивания} st1:='Фамилия'; st2:='Имя'; st3:='Отчество'; { Операция слияния} sto:=st1+' '+st2+' '+st3; { В результате в строке sto будет 'Фамилия Имя Отчество'} End;... Сравнение строк основывается на порядке расположения символов в таблице ASCII. Например: 'abcd' = 'abcd' - результат сравнения True (истина); 'abc'<'bcd' так как код символа 'a' меньше кода символа 'b' и т.п. Для работе со строками в ТР разработан ряд стандартных процедур и функций. Первоначально любая описанная в разделе Var строка содержит "мусор" и рекомендуется инициализировать (заполнять) строки пустыми значениями или чем-либо другим. Для заполнения достаточно длинных строк одинаковыми символами используется встроенная процедура FillChar, например: Var S:string[80]; Begin... FillChar(S[1],80,' '); {Заполнение строки пробелами} S[0]:=Chr(80); {Занесение кода длины строки} ... End; Длину строки можно определить также, используя встроенную функцию Length(S), где S - строка типа String.
В ряде случаев возникает необходимость преобразования числовых значений в строку и наоборот. Для этого можно использовать две процедуры: 1) STR(X,S) - преобразует числовое значение X в строковое S. Возможно задание формата для Х в виде: X:F:n (для вещественных чисел, где F - общее число позиций выделяемых под число, включая десятичную точку, а n - число знаков в дробной части) или X:F (для целых чисел). Эта функция чаще всего используется при работе с процедурами модуля GRAPH. Например: STR(55,s); - строковая переменная s принимает значение, равное '55'. 2) VAL(S,Х,ErrCode) - преобразует строку S в числовое значение, если это возможно. Параметр ErrCode содержит ноль, если преобразование прошло успешно, и тогда в Х помещается результат преобразования, в противном случае он содержит номер позиции в строке S, где обнаружен ошибочный символ. Например: Val('125',K,kod) - в результате выполнения этой процедуры переменная К получает целое значение, равное 125, параметр kod=0; Val(' 1.05',M,code) - M=1.05, code=0; Val('100, ',N,code) - это ошибочный вызов, т.к. в исходной строке на 4-й позиции располагается недопустимый для числа символ ',' и поэтому параметр code=4, а переменная N остается без изменения. Кроме перечисленных, в ТР имеется еще 5 функций и процедур: 1) Concat (S1,S2,…,Sn) -функция, результат которой равен слиянию строк S1,S2,…,Sn. Например: Ssum:=Concat(s1,s2,s3). 2) Copy (S,Start,L) - функция, результатом которой является подстрока длиной L, начинающаяся с позиции Start строки S. Например: Stcop:=Copy('TTTx1+++',4,2) - результатом является подстрока Stcop='x1'. 3) Delete (S,Start,L) - процедура, которая удаляет из S подстроку длиной L, начиная с позиции Start в строке S. Insert (S,Subs,Start) - процедура, которая вставляет подстроку Subs в строку S начиная с позиции Start строки S. Например: S:='Фамилия Адрес'; Insert(S,' Имя Отчество',9); В результате строка S будет иметь вид: 'Фамилия Имя Отчество Адрес'; Pos(Subs,S) - функция поиска вхождения подстроки Subs в строку S; результатом поиска будет номер (адрес) первого символа подстроки Subs в S, если заданная подстрока найдена, или 0, если подстроки в строке нет.
Множества Под множеством в языке Паскаль понимают ограниченный неупорядоченный набор различных элементов одинакового типа, логически связанных друг с другом. Количество элементов, входящих в множество, может меняться в пределах от 0 до 255. Множество, не содержащее элементов, называется пустым. Множество имеет имя. Тип элементов, входящих в множество, называется базовым. В качестве базового типа можно использовать любой порядковый тип, кроме Word, Integer, Longint.
Множества должны быть объявлены либо в разделе Var, либо в разделах Type и Var, одновременно: Var Имя множества:Set of базовый тип; или Type Имя типа=Set of базовый тип; Var Имя множества:Имя типа; Например: Type TM=Set of 1..100; TS=Set of 'a'..'z'; Var Mch:TM; {Множество целых чисел от 1 до 100} MSym:TS; {Множество строчных латинских букв} M: Set of 1..10; {Множество целых чисел от 1 до 10}
Значения переменных множества задаются в разделе операторов с помощью конструктора множества, который представляет собой список элементов базового типа, заключенный в квадратные скобки. Например: Var M1,M2,M3:set of 1..99; Begin... M1:=[]; { Множество пустое} M2:=[1,3,5,7,9]; { Множество нечетных чисел в первом десятке} M3:=[2,4,6,8]; { Множество четных чисел в первом десятке} ... End. В качестве элементов в изображении множеств допускается использовать константы и выражения, тип которых совместим с базовым типом. Типизированная константа - множество задается в виде правильного конструктора множества, например: Type Type_month=(Jn,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec); TDays=Set of 1..31; Tmonth=Set of 1..12; Tsym=Set of 'A'..'Z'; Tmno=Set of Type_month; Const SymMno:Tsym=['A','E','I','O','U']; {подмножество гласных букв} DaysMno:TDays=[1,8,15,22,29]; {подмножество выходных дней месяца} Spring_Mes:Tmonth=[3,4,5]; {подмножество весенних месяцев года} Spring_Month:Tmno=[Mar,Apr,May]; {то же, что и предыдущее}
Над множествами определены следующие операции: * - пересечение множеств: результат содержит элементы, общие для обоих множеств. Например: пусть имеется описание: Var S1,S2,S3,S4,S5:Set of 1..10; Begin S1:=[1,3,4,6]; S2:=[2,4,5,1]; S3:=S1*S2; - в S3 будет содержаться [1,4]. + - объединение множеств: результат содержит элементы первого множества, дополненные недостающими элементами из второго множества: S4:=S1+S2; - в S4 будет содержаться [1,3,4,6,2,5]. - - разность множеств: результат содержит элементы из первого множества, которые не принадлежат второму: S5:=S1-S2; - в S5 будет содержаться [3,6]. = - проверка эквивалентности (или равенства): возвращает TRUE, если оба множества эквивалентны, т.е. содержат все одинаковые элементы. <> - проверка неэквивалентности (или неравенства): возвращает TRUE, если оба множества неэквивалентны, т.е. содержат неодинаковые элементы. <= - проверка вхождения: возвращает TRUE, если первое множество включено во второе (т.е. все элементы первого множества присутствуют также и во втором). >= - проверка вхождения: возвращает TRUE, если второе множество включено в первое. IN - проверка принадлежности элемента множеству. Эта операция возвращает результат TRUE, если элемент (или выражение), стоящий слева принадлежит множеству, указанному справа. Дополнительно к этим операциям можно использовать две процедуры: Include - включает новый элемент во множество: Include(M,elem); где М - множество элементов некоторого базового типа, а elem - элемент того же типа, который необходимо включить в множество М. Exclude - исключает элемент из множества: Exclude(M,elem). В отличие от операций "+" и "-", реализующих аналогичные действия над двумя множествами, эти процедуры оптимизированы для работыс одиночными элементами множества и поэтому отличаются высокой скоростью выполнения. Основным достоинством использования множеств является экономия памяти: внутренне устройство множества таково, что каждому его элементу ставится в соответствие один двоичный разряд (один бит). Если элемент включен в множество, то соотвествующий разряд имеет значение 1, в противном случае - 0. Минимальной единицей памяти является 1 байт, содержащий 8 бит, поэтому для хранения множества мощностью 256 элементов выделяется память 32 смежных байта.
Рассмотрим работу с множествами на следующем примере. Из множества целых чисел от 1 до 20 выделить: множество чисел, делящихся на 2 и 3 одновременно; множество чисел, делящихся на 2 или на 3. Первая задача соответствует нахождению пересечения множеств чисел, одно из которых содержит числа, делящиеся на 2, а другое на 3. Вторая - объединению этих двух множеств. Обозначим множество чисел, делящихся на 2 через М2; множество чисел, делящихся на 3 через М3; множество чисел, делящихся на 2 и 3 через М2and3; множество чисел, делящихся на 2 или 3 через М2or3.
Записи Запись - это структура данных, состоящая их фиксированного числа компонентов, называемых полями. Запись имеет имя. Каждое поле записи также имеет имя. Обращение к любому элементу записи осуществляется по составному имени, имеющему вид: Имя записи.Имя поля В отличие от массива компоненты (поля или элементы) записи могут быть различного типа. Записи удобно использовать в тех случаях, когда необходимо описать атрибуты (характеристики или свойства) одного объекта, имеющие различный тип. Запись может быть объявлена в разделе Var или в разделах Type и Var, одновременно. 1. Var Имя записи:RECORD Имя поля 1:тип; Имя поля 2:тип; ... Имя поля n:тип END; или 2. Type Имя типа для записи=RECORD Имя поля 1:тип; Имя поля 2:тип; ... Имя поля n:тип END; Var Имя записи:Имя типа для записи; Второй способ описания более предпочтителен, будем использовать его. Например, пусть необходимо описать список студентов, имеющий следующую структуру:
Описание представленной структуры будет иметь следующий вид: Type T_Stud=Record Nom:word; FIO:string[40]; Fac:string[5]; Group:string[6]; Ball:array[1..3] of byte; End; Var Stud: T_Stud; {Описание одной записи} Записи могут быть составными частями массивов или других записей. Так для описания всего списка студентов, состоящего, допустим, из 1000 записей необходимо записать: Spisok:Array[1..1000] of T_Stud; {Описание массива из записей} Элементы записи (поля) используются в программе как обычные переменные данного типа. Чтобы обратиться к i - той записи представленного списка (массива Spisok) и к его полю FIO необходимо записать: Spisok[i].FIO. Для того, чтобы обратиться к той же записи и выбрать оценку по математике необходимо записать Spisok[i].Ball[2].
Для упрощения обращения к элементам записи используется оператор присоединения WITH Имя записи DO Begin Операторы обращения к элементам записи End; Для нашего примера используем этот оператор при суммировании трех оценок i-го студента: ... Sum:=0; With Spisok[i] do Begin For j:=1 to 3 do Sum:=Sum+Ball[j]; ... End;
Рассмотрим пример использования записи внутри другой записи. Пусть имеется структура:
Причем поле дата рождения состоит из полей: число, месяц, год. Тогда описание в программе будет иметь вид: Type Date=Record Days:1..31; Month:1..12; Year:1900..2000; End; Tzap=Record Nom:word; FIO:string[40]; Birthday:Date; Pol:(Man,Woman); Nac:string[20]; End; Var Zap:Tzap; Для того чтобы обратиться к элементам записи дата рождения, необходимо записать: D:=Zap. Birthday.Days; M:= Zap. Birthday.Month; G:= Zap. Birthday.Year; или с использованием оператора присоединения With Zap. Birthday do Begin D:=Days; M:=month; G:=Year; End; Типизированные константы - записи имеют вид: Имя константы: Тип = (Список значений полей записи); Список значений полей записи - это список из последовательностей вида: Имя поля: Константа; Например: 1) Type Tdate=Record Day:1..31; Month:1..12; Year:1000..2000; End; Const Date:Tdate=(day:25;month:10;year:1999); 2) Type Tkoord=record Xk,Ykreal; end; Tmas=array[1..3] of Tkoord; Const Maskoord:Tmas=((Xk:0.0; Yk:0.0), Xk:1.5; Yk:2.5), Xk:3.0; Yk:4.5));
|
||||||||||||||||||
Последнее изменение этой страницы: 2016-12-10; просмотров: 413; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.225.72.200 (0.012 с.) |