Записи.

Строка типа STRING.

Символьные массивы.

Если в качестве элемента массива использовать символьный тип CHAR, то такие массивы называются строками.

Var

s: array [1..13] of char;

Можно записывать конкретные значения строковых массивов с помощью изображения строки.

s:= ‘Пример строки’;

Для строковых массивов допускается операция конкатенации, которая обозначается знаком плюс( +). Смысл этой операции заключается в объединении строк.

Например, если есть массив

Var

s1:= array[1..10] of char;

s2:= array[1..6] of char;

то допустимы следующие операторы

s1:= ‘Символьный’;

s2:=‘массив’;

......................

Writeln(s1+’ ’+s2);

На экране появится текст «Символьный массив».

При присваивании символьным массивам значений необходимо точное соответствие размера строк и массивов. Операция конкатенации не допустима в правой части оператора присваивания.

 

Строка представляет собой последовательность символов от 0 до 255 символов.

У типа STRING в квадратных скобках может быть указан размер не более 255. Если скобки с указанием размера отсутствуют, то по умолчанию размер строки равен 255.

Var

stroka 1:string[100];

stroka 2:string;

Для типа STRING можно применять операцию конкатенации, которая объединяет две строки. Результат операции конкатенации присваивается третьей строке

Var

str1, str2,str3: string[30];

BEGIN

str1:= ‘ строковый’;

str2:=’ тип ’;

str3:=str1+str2;

END.

В отличии от символьных массивов строки могут динамически менять длину. Один из вариантов определения текущего значения длины строки является использование функции LENGH(S); где S - переменная типа STRING.

К отдельным элементам переменной типа STRING доступ осуществляется так же, как и к элементам одномерного массива.

A:=str1[5];

Эта конструкция символьного типа.

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

Строки можно между собой сравнивать и сравнение это происходит слева направо в соответствии с ASCII кодами символов. Если длина строк различна, то в короткой строке отсутствующие символы имеют всегда значение кода меньше, чем соответствующие символы в более длинной строке, поэтому строка ‘АВС ‘ больше строки ‘АВ’ и строка ‘АВ’ больше строки ‘А’.

ПРИМЕР: Составить программу формирования списка студентов в группе.

Program Spisok;

Const ColStud=22;

Var

Pz00: array [1..ColStud] of string;

i: byte;

BEGIN

for i:=1 to ColStud do

BEGIN

Writeln(‘ Введите Ф.И.О. ‘,i,’ -а студента’);

Readln(pz00[i]);

END;

END.

 

Необходимость описания атрибутов какого-либо объекта требует использования такого комбинированного типа, как запись. Например, для описания объекта «Студент» могут понадобится следующие характеристики: номер по списку (тип byte или word), Ф.И.О.(тип string), баллы (массив из 5-6 элементов, каждый из которых типа byte), средний балл (тип real ). Отдельные компоненты записи, которые называются полями, не могут рассматриваться с индексами как в массивах, поскольку имеют различный тип.

Когда задается тип «запись», используется слово RECORD, после которого перечисляются поля. После каждого поля через двоеточие указывается тип. В конце описания записи ставится слово END. Количество полей принципиально не ограниченно.

Const ColDsp = 7;

Type StrVed=record

nomer: byte;

f.i.o.: string[30];

ball: array[1..ColDsp] of byte;

srBall: real;

end;

В пределах записи имена полей не должны совпадать друг с другом, но могут совпадать с именами полей в других записях или с именами в программном блоке. После введения в разделе Type типа запись в разделе Var задаются переменные этого типа, а также могут задаваться типизированные константы в разделе Const. Для получения доступа к отдельному полю, входящему в состав записи, необходимо указать имя переменной, затем точка и после точки имя поля.

Var

OneStroka: strVed;

.............................

OneStroka.nomer:=5;

...............................

Для того, чтобы при обращении к полям переменной типа «запись» каждый раз не записывать имя переменной, можно использовать оператор над записями. Его конструкция: WITH < имя переменной> DO < оператор>;

Например: Составить программу формирования ведомости успеваемости студентов. Каждая строка ведомости включает номер по списку, Ф. И. О., баллы полученные на экзаменах по отдельным дисциплинам, средний бал студента по результатам сессии.

Program VedST;

Const ColStud=25;

ColDisp=5;

Type strVed =record

nomer: byte;

f.i.o.: string [30];

ball: array [1..ColDisp] of byte;

Srball: real;

Var

Pz00:array [1..ColStud] of strVed;

i, j: byte;

s: real;

BEGIN

for j:=1 to ColStud do

BEGIN

with pz00[i] do

BEGIN

nomer:=i;

Writeln(‘ Введите Ф. И. О. ’,i,’ -го студента‘);

Readln(f.i.o);

s:=0;

for i:= to ColDisp do

begin

Writeln(‘ Введите оценки студента ’,f.i.o.,’ по ’,j,’-ой дисциплине‘);

Readln(ball[j]);

s:=s+ball[j];

end;

Srball:= s / ColDisp;

end;

end:

end.