Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции(ЯВУ)-Паскаль.doc
Скачиваний:
63
Добавлен:
31.03.2015
Размер:
1.08 Mб
Скачать

4.4. Скалярные, пользовательские типы данных

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

Type <имя типа>=(< идентификатор 1 >, < идентификатор 2>, …, < идентификатор n>);

Например, Type Week= (mon, twe, wen, tru, fri, sut, sun);

Интервальный тип в языке Паскаль определяется следующим образом. В любом порядковом типе можно выделить подмножество значений, определяемое минимальным и максимальным значением. Интервальный тип называется типом-диапазоном и определяется в разделе Type следующим образом:

Type <имя типа> = <мин. значение>..<макс. значение>;

Например,

Type A=1..100;

5. Структурные типы данных

Структурные или составные типы данных определяют наборы однотипных или разнотипных компонент. Типы компонент могут быть как скалярными, так и составными.

В языке Паскаль существуют следующие составные типы данных:

  • тип-массив;

  • строковый тип;

  • тип-запись;

  • тип-запись-с-вариантами;

  • тип-множество;

  • тип-файл.

    1. Массивы

Данными типа «массив» являются массивы. Массив представляет собой фиксированное количество компонент одного и того же типа. Массив определяется именем, количеством размерностей (координат), необходимых для указания месторасположения элемента в массиве, типом элементов и типами индексов.

Массивы могут быть одномерными и многомерными. Для объявления типа-массива в разделе Typeиспользуется ключевое словоarray:

Type

<имя типа-массив>= array[<тип индекса1>,<тип индекса2>, …]of<тип элементов>;

Тип индекса обычно задается интервальным типом или типом-диапазоном порядкового типа:

<номер первого элемента>.. <номер последнего элемента>.

Например, объявление типа:

Type V=array[1..10] of integer;

определяет тип-массив из 10 элементов целого типа integer.

Массивы в программах могут быть константами или переменными.

Переменные типа-массив объявляются в разделе Varс помощью ключевого словаarrayследующим образом:

Var

<имя массива>: array[<тип индекса(ов)]of<тип элементов>;

Например,

Var M1: array[1..10] of real;

Mt: array[1..5,1..5] of real;

Границы изменения индексов можно задать в разделе Const; например,

Const k=10;

m=4;

n=5;

Var A: array[1..k] of integer;

B: array [1..m,1..n] of real;

Массивы- константы объявляются в разделе Constследующим образом:

Const<имя массива>: <описание массива>=(<список значений элементов>);

Например,

Const A: array[1..5] of integer=(1,2,3,4,5);

Const B: array[1..3,1..2] of integer=((1,2),(2,3),(3,4));

Значения элементов массивов-констант не изменяются в программе.

Доступ к элементам массивов осуществляется с помощью индексированных переменных, которые записываются с помощью имени массива и списка индексов в квадратных скобках:

<имя массива >[< индекс 1 >,< индекс 2>, …< индекс n>]

На практике обычно используются одномерные и двумерные массивы.

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

A[1]

A[2]

A[3]

A[n]

Одномерный массив – аналог понятия «вектор» в математике.

Двумерный массив можно представить в виде прямоугольной таблицы из mстрок иnстолбцов.

A[1,1]

A[1,2]

A[1,n]

A[2,1]

A[2,2]

A[2,n]

A[m,1]

A[m,2]

A[m,n]

Двумерный массив объявляется в разделе VARследующим образом:

<имя массива>: array[<тип индекса1>,< тип индекса2>]of<тип элементов >;

где тип индекса 1 определяет тип индекса для строк; тип индекса 2 определяет тип индекса для столбцов.

Например, объявление VarM:array[1..10,1..8]ofreal; определяет двумерный массив из 10 строк и 8 столбцов.

Двумерные массивы размещаются в памяти ЭВМ по строкам:

A[1,1]

A[1,2]

A[1,n]

A[m,1]

A[m,2]

A[m,n]

1-я строка m-я строка

    1. Строки

Данные строкового типа, или строки, представляют собой последовательности символов произвольной длины. Строку можно рассматривать как одномерный массив символов. В языке BorlandPascal7.0 используются две разновидности строкового типа:

  • тип string;

  • тип Pchar.

Строка типа stringобъявляется в разделе описаний переменных следующим образом:

Var

<имя переменной строкового типа>: string[<максимальная длина строки>];

Максимальная длина строки может быть не задана, тогда она равна 255 символам. Строка отличается от массива тем, что первый элемент строки имеет индекс 0 и служит для хранения текущей длины строки. Символы в строке нумеруются с единицы. Каждый символ занимает один байт. Таким образом, индекс элементов строки изменяется от нуля до максимальной длины строки.

Объявление строки вида

VarS1:string[10];

эквивалентно объявлению массива символов

Var S1: array [0..10] of char;

Если символьный массив объявлен как строка типа string, то нулевой символ будет заполняться автоматически Паскаль - системой. Если символьный массив объявлен как массив типаchar, то нулевой символ не будет заполняться автоматически.

Символьная строка размещается в памяти ЭВМ следующим образом:

0 1 2 L N

L

……

где N– максимальная длина строки,L– текущая длина строки.

Для работы со строками в Паскале используется операция сцепления строк, которая добавляет в конец первой строки вторую строку. Например,

Program Stroki;

Var Str1, Str2, Str: string[80];

Begin

Str1:=’Turbo ’;

Str2:=’Pascal’;

Str:=Str1+Str2;

Writeln(‘Str=’,Str);

end.

В результате работы этой программы на экране будет отображено:

Str=TurboPascal

Следующие процедуры и функции модуля Systemиспользуются для обработки символьных строк типаstring:

  • Функция Concat(S1,S2,…,Sn) выполняет объединение нескольких строкS1,S2,…,Sn, гдеn>=2, возвращает объединенную строку. Если длина результирующей строки больше 255, она усекается до 255 символов.

  • Функция Copy(S1,Ind,Count) создает и возвращает подстроку строкиS1, которая начинается с символа с номеромIndи имеет длину, равнуюCount.

  • Процедура Delete(S1,Ind,Count) удаляет подстроку из строкиS1, которая начинается с символа с номеромIndи имеет длину, равнуюCount.

  • Функция Length(S1) определяет текущую длину строкиS1.

  • Процедура Str(X,S) преобразует значение арифметического выраженияXв строкуS.

  • Процедура Insert(S1,S2,Ind) вставляет строкуS2 в строкуS1 после символа с номеромInd-1 строкиS1.

  • Процедура Val(S,V,C) преобразует строкуSв целое или вещественное число и присваивает его переменнойV. Если строкаSсодержит символы, отличающиеся от цифр и других допустимых в числовых константах символов, то преобразования не выполняется а в переменнуюCпомещается номер неправильного символа; С=0, если все символы правильные.