Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 16.doc
Скачиваний:
19
Добавлен:
20.11.2019
Размер:
336.38 Кб
Скачать

16.1.1. Процедуры и функции типа String

На строковом типе данных определены:

Функции:

    • Length(X: String): Byte; – длина строки X; Length(EmptyStr) = 0.

    • Pos(Y:String; X:String):Byte; – позиция первого символа первого слева вхождения подстроки Y в строку X. Если X не содержит Y, Pos(Y, X) = 0.

    • Copy(X:String; Index, Count: Integer):String; – подстрока строки X, начинающаяся с пози­ции Index и содержащая Count символов.

    • Concat(X1, X2, .., Xk: String): String; – конкатенация строк Х1, X2, .., Xk. Другая форма записи суммы X1+X2+ .. +Xk.

Процедуры:

    • Delete(var X: String; Index, Count: Integer); Из строки X удаляется Сount символов, начиная с позиции Index. Результат помещается в переменную X.

    • Insert(Y:string; var X: String; Index: Integer); В строку X вставляется строка Y, причем вставка осуществляется начиная с позиции Index.

Пример 1. Дан массив A[1..n] of string[20]. Составить программу замены всех первых вхождений подстроки L в A[i] на подстроку R. Строки L и R вводятся с клавиатуры в виде равенства L = R. Результат замен отобразить в массив, элементы которого – равенства вида A[i]=результат замены L на R в A[i].

 Program RewriteArray;

Const n = 100; Single = 20; Double = 41;

Type

Sitem = string[Single]; Ditem = string[Double];

SWordArray = array[1..n] of Sitem; DWordArray = array[1..n] of Ditem;

Var

A: SWordArray; B: DWordArray;

L, R: Sitem; X : Sitem;

i, Index : Integer;

 Procedure InpWord(var U, V : Sitem);

Var X : Ditem; j : Integer;

Begin

Writeln('________ Ввод равенства L = R __________');

Read(X); j := Pos('=', X);

U := Copy(X, 1, j – 1);

V := Copy(X, j + 1, Length(X))

End;

 Procedure InpArray;

begin

Writeln('====== Ввод массива слов ======');

For i:=1 to n do Readln(A[i])

end;

Procedure OutArray;

begin

Writeln('====== Вывод массива слов ====');

For i:=1 to n do Writeln(B[i])

 end;

 Begin

InpArray; {ввод массива слов с клавиатуры}

InpWord(L, R); {ввод и анализ равенства L = R}

For i := 1 to n do begin

X := A[i]; Index := Pos(L, X);

If Index <> 0 then begin

Delete(X, Index, Length(L));

Insert(R, X, Index)

end;

B[i] := A[i] + '=' + X

end;

OutArray; {вывод массива слов на печать }

 End.

16.2. Записи

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

Значениями так называемого комбинированного типа данных являются записи. Комбинированный тип задает образ структуры объекта – данного этого типа, каждая часть кото­рой (поле) может иметь совершенно различные характеристики.

Таким образом, запись – это набор разнотипных данных, объединенных общим именем. Более формально, запись содержит определенное число компонент, называемых полями.

Описание записи в языке Паскаль осуществляется с помощью служебного слова record, вслед за которым описываются компоненты записи. Завершается описание записи служебным словом end.

В определении типа записи задается имя и тип каждого поля записи:

<комбинированный тип>::= Record < список описаний полей > End

<список полей>::= <фиксир. часть> | <фиксир. часть>;<вариант. часть> | <вариант. часть>

<фиксированная часть>::= <секция записи> {,<секция записи>}

< секция записи >::= <имя поля>{, <имя поля>}: < тип > | <пусто>

Синтаксис записей, содержащих вариантную часть – записей с вариантами – мы опреде­лим ниже. Соответствующие синтаксические диаграммы записей с вариантами:

Комбинированный тип

Фиксированная часть Секция записи

Например, записная книжка содержит фамилии, инициалы и номера телефона, поэтому отдельную строку в записной книжке удобно представить в виде следующей записи:

type row=record

fio: string[20];

tel: string[7]

end;

var str: row;

Описание записей возможно и без использования имени типа, например:

var str: record

fio: string[20];

tel: string[7]

end;

Пример 2.

Type Complex = Record

Re, Im : Real

 end;

Var z1, z2 : Complex;

 Пример 3.

Type Name = array [1..15] of Char;

Student = Record

F1,F2,F3 : Name;

Day : 1..31;

Month : 1..12;

Year : integer;

StudDoc : integer

end;

Var Group : array [1..25] of student;

S : Student;

Обращение к записи в целом допускается только в операторах присваивания, где слева и справа от знака присваивания используются имена записей одинакового типа. Во всех остальных случаях оперируют отдельными полями записей. Чтобы обратиться к отдельной компоненте записи, необходимо задать имя записи и через точку указать имя нужного поля, например:

str.fio, str.tel

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

При обозначении компоненты записи в программе следом за именем записи ставится точка, а затем имя соответствующего поля. Таким образом осуществляется доступ к этой компо­ненте. Например:

1) z1.Re := 2; z1.Im := 3;

M := sqrt(sqr(z1.Re) + sqr(z1.Im));

2) S.F1 := Group[i].F1;

S.Year := Group[i + 1].Year;

writeln( Group[i].StudDoc);

Запись может входить в состав данных более сложной структуры. Можно говорить, напри­мер, о массивах и файлах, состоящих из записей. Запись может быть полем другой записи.

Пример 4.

Type Name = array[1..20] of Char;

FullName = Record

Name1, Name2, Name3 : Name

end;

Date = Record

Day : 1..31;

Month : 1..12;

Year : integer

end;

Student = Record

StudName: FullName;

BirthDay: Date;

StudDoc: integer

end;

Var StudGroup : Array [1..30] of Stugent;

A, B : Student;

Например, доступ к полю day переменной A возможен по имени A.BirthDay.Day, а к первой букве поля Name2 имени студента с номером 13 переменной StudGroup – по имени StudGroup[13].StudName.Name2[1]

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]