Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Строка типа string

Читайте также:
  1. B.B. King’85 – Six Silver Strings – MCA – Germany – 1800
  2. CleanString - очистка строк
  3. Родина строкатокрилки (пестрокрылки, Tephritidae
  4. Строка меню
  5. Функции стандартной библиотеки для работы со строками в стиле С (заголовочный файл string.h).
  6. Я увожу туда, где вечный стон» (Данте. «Божественная комедия», «Ад», песнь Ш, строка 2). Ред.

Строки

Строка (string) – это последовательность символов кодовой таблицы персонального компьютера. Количество символов в строке может изменяться от 0 до 255.

Массивы

Простые типы определяют различные множества неразделимых значений. В отличие от них структурированные типы задают множества сложных значений, каждое из которых образует совокупность нескольких значений другого типа. В структурных типах выделяют регулярный тип (массивы - array). Название регулярный тип (или ряды) массивы получили за то, что в них объединены однотипные элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве.

Множества

Множество (set) – это структурированный тип данных, представляющий собой набор взаимосвязанных по какому-либо признаку или группе признаков объектов, которые можно рассматривать как единое целое. Каждый объект в множестве называется элементом множества. Все элементы множества должны принадлежать одному из скалярных типов, кроме вещественного.

Записи

Для записи комбинации объектов разных типов в Паскале применяется комбинированный тип данных – запись (record). Например, товар на складе описывается следующими величинами: наименование, количество, цена, наличие сертификата качества и т.д. В этом примере наименование – величина типа string, количество – integer, цена – real, наличие сертификата – boolean.

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

Файлы

Большие совокупности данных удобно иметь записанными во внешней памяти в виде последовательности сигналов. В Паскале для этих целей предусмотрены специальные объекты – файлы (file). Файлом называется совокупность данных, записанная во внешней памяти под определенным именем.

Структурированные типы данных определяют наборы однотипных или разнотипных компонент. Типы компонент образуются из других типов (простых, структурированных, указателей и т. д.) данных. В языке Паскаль существуют следующие структурированные типы:

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

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

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

- тип-файл.

В Turbo Pascal имеется еще два структурированных типа:

- тип-строка string и

- тип-строка PChar, являющиеся разновидностями массива.

 

В дальнейшем объекты структурированных типов для краткости будут называться теми же именами, что и их типы, без указания слова "тип": массив, запись, множество, файл, строка. В стандарте языка существуют упакованные (packed) и неупакованные структурированные типы. В Turbo Pascal слово packed, характеризующее упакованный тип, не оказывает никакого влияния; в случае, когда это возможно, упаковка данных осуществляется автоматически.

Массив

Тип-массив представляет собой фиксированное количество упорядоченных однотипных

компонент, снабженных индексами. Он может быть одномерным и многомерным. Чтобы задать тип-массив, используется зарезервированное слово array, после которого следует указать тип индекса (индексов) компонент (в квадратных скобках) и далее после слова of - тип самих компонент:

type

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

Пример.

type

Arr = array[1..3] of Real; {тип—массив из 3 вещественных чисел}

Matrix = array[1..3, 1..2] of Integer; {тип - двумерный массив целых чисел, состоящий

из 3 строк и 2 столбцов}

Введя тип-массив, можно затем задать переменные или типизированные константы этого типа. Размерность массива может быть любой, компоненты массива могут быть любого, в том числе и структурированного, типа, индекс (индексы) может быть любого порядкового типа, кроме типа Longint.

При задании значений константе-массиву компоненты указываются в круглых скобках и

разделяются запятыми, причем, если массив многомерный, внешние круглые скобки

соответствуют левому индексу, вложенные в них круглые скобки - следующему индексу

и т. д. Так, для введенных выше типов можно задать, например, следующие переменные и константы:

var

Ml, М2: Arr;

Matr: Matrix;

const

M3: Arr =(1, 2, 3);

Mat: Matrix = ((1, 2), (3, 4), (5, 6));

Последняя константа соответствует следующей структуре:

1 2

3 4

5 6

Примечание.

Тип-массив можно вводить непосредственно и при определении соответствующих переменных или типизированных констант.

Например:

var

Ml, M2: array [1..3] of Real;

Matr: array[1..3, 1..2] of Integer;

Здесь определены те же массивы, что и в предыдущем примере.

При таком объявлении массивов следует помнить, что их типы не будут идентичными никаким другим типам, даже если они имеют одинаковую структуру. Поэтому передавать их как параметры в подпрограмму нельзя (см. п. 10.3), нельзя также присваивать им значения других массивов (и наоборот), даже если их структуры совпадают.

Доступ к компонентам массива осуществляется указанием имени массива, за которым в

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

M1[2], Matrix[X, Y], M2[Succ(I)] и т. д.

Одному массиву можно присвоить значение другого массива, но только идентичного типа. Так, если заданы следующие массивы:

var А, В: array[l..5] of Integer;

С: array [1..5] of Integer;

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

A:= В;

С другой стороны, оператор

С:= А;

недопустим, т. к. массивы А и С - не идентичных типов.

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

величинами типа string - см. п. 6.2). Так, типизированным константам этого вида можно присвоить значение как обычным строковым константам, указав строку символов в апострофах, например

const

A: array[1..5] of Char='ааааа';

В: array[1..3] of Char='bbb';

Для таких массивов, как и для строк, можно использовать операции сравнения (даже если

они не идентичных типов и даже если имеют различный размер) и конкатенации (объединения) - см. п. 6.2. Их можно использовать в операторах вывода Write и WriteLn. Например,

для введенных выше массивов можно написать

if A > В then

WriteLn(A) else

WriteLn(B);

Строка типа string

В Turbo Pascal тип-строка (стандартный тип string) - последовательность символов

произвольной длины (до 255 символов). Строку можно рассматривать как массив символов, однако в связи с широким использованием строк и некоторыми особенностями по сравнению со стандартными массивами они выделены в отдельный тип данных.

У типа-строки в квадратных скобках может быть указан его размер (от 1 до 255). Если

размер строки не указан, он считается равным 255, например:

var

Str: string[80];

MaxStr: string; {строка в 255 символов}

const

January: string[10] = 'Январь';

Для строк применимы операции конкатенации (+) и сравнения.

Операция конкатенации добавляет к первой строке вторую.

Пример. Объединение двух строк.

Str, Strl, Str2:string[80];

begin

Strl:= 'Turbo ';

Str2:= 'Pascal';

Str:= Strl + Str2; {в переменной Str — 'Turbo Pascal'}

end.

Сравнивать можно строки разной длины. Сравнение осуществляется слева направо в

соответствии с ASCII-кодами соответствующих символов. Считается, что отсутствующие

символы в более короткой строке имеют код меньше кода любого действительного символа. Например, 'XS' больше, чем 'X'.

Пример.

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

program EXAMPLE11;

const

Instance: array[l..12] of string!10]=

('ЯНВАРЬ', 'ФЕВРАЛЬ', 'МАРТ', 'АПРЕЛЬ', 'МАЙ', 'ИЮНЬ', 'ИЮЛЬ', 'АВГУСТ', 'СЕНТЯБРЬ',

'ОКТЯБРЬ', 'НОЯБРЬ', 'ДЕКАБРЬ');

Month: Boolean = False;

var

Str: string[10]; i: Integer;

begin

Writeln('Введите заглавные символы: ');

ReadLn(Str);

for i:= 1 to 12 do

if Str = Instance[i] then

Month:=True;

if Month then

WriteLn('Введено имя месяца') else

WriteLn('Введено не имя месяца')

end.

Фактически строка N символов представляет собой массив из N+1 символа:

string[N] = аrrау[0..N] of Char.

Нулевой символ предназначен для указания используемого количества символов строки и

может изменяться от символа с кодом 0 до символа с кодом N. С ним можно работать как и с остальными символами строки (записывать и читать его значение и т. д.), но не забывая о его основном предназначении.

Запись

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

Пример.

type

Complex = record {Тип комплексных чисел}

Re: Real;

Im: Real

end;

Data = record {Тип - дата рождения}

Year: Integer;

Month: 1..12;

Day: 1..31

end;

Person = record {Тип - сведения о сотруднике}

Name: string[20];

Sex: (Male, Female);

Age: Integer;

Married: Boolean

end;

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

type

Complex = record

Re, Im: Real

end;

После введения типа-записи можно затем задать переменные или типизированные константы этого типа - записи.

При задании значений константе ее поля записываются в круглых скобках через точку с

запятой. Для задания значения каждого поля сначала указывается имя поля, а затем через

двоеточие - его значение.

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

var

X, У, Z: Complex;

Dat: Data;

const

Birthday: Data = (Year: 1971; Month: 12; Day: 9);

Ivanov: Person = (Name: 'Иванов'; Sex: Male; Age: 40; Married: True);

Примечание. Тип-запись можно вводить и непосредственно при определении переменных или типизированных констант. Например, фрагмент

var

X, Y, Z: record

Re, Im: Real

end;

определяет те же комплексные переменные, что и в предыдущем примере.

Доступ к полям записи осуществляется указанием имени переменной (константы) и имени поля, записываемого через точку, например:

Ivanov.Age, X.Re, Dat.Day и т. д.

Пример. Использование полей записей.

X.Re:= 1.5;

X.Im:=1.7; Y.Re:= -X.Re;

Y.Im:= -X.Im;

Ivanov.Married:= False;

Для того чтобы не выписывать каждый раз имя записи при обращении к ее полям, можно

использовать оператор над записями WITH. Его структура выглядит следующим образом:

with <имя записи> do <оператор>;

В этом случае внутри оператора можно указывать только поле записи. Например,

фрагмент:

with X do begin

Re:= 1.5;

Im:= 1.7;

Y.Re:= -Re;

Y.Im:= -Im

end;

with Ivanov do

Married:= False;

эквивалентен фрагменту из предыдущего примера.

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

Пример. Использование вариантной части.

type

Figure = (Square, Triangle, Circle);

Param = record

X, Y: Real; {координаты точки привязки}

case Fig: Figure of {параметры фигур}

Square: (Side: Real);

Triangle: (Sidel, Side2, Angle: Real);

Circle: (Radius: Real)

end;

var MySquare, MyCircle: Param;

Вариантная часть начинается словом case, за которым следует переменная выбора варианта (в примере Fig) с указанием типа. Далее указываются константы значения которых может принимать переменная выбора варианта (в примере Square, Triangle, Circle). За каждой константой через двоеточие в круглых скобках записываются поля данного варианта записи с указанием их типов. Круглые скобки необходимы, даже если для данного варианта вариантная часть отсутствует. Следует отметить, что вариантная часть не завершается своей операторной скобкой end, как у обычной конструкции CASE, т. к. далее идет завершающая операторная скобка end всего типа.

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

Fig:= Square;

MySquare.Side:=5.0;

Fig:= Circle;

MyCircle.Radius:=7.5;

В Turbo Pascal эту операцию делать необязательно, хотя, если переменная выбора задана,

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

эквивалентен рассмотренному выше:

Fig:= Circle;

MySquare.Side:= 5.0;

Fig:= Square;

MyCircle.Radius:-7.5;

В тип-записи допустимо не вводить переменную выбора вариантов, а перечислить лишь разные варианты, например:

Transf = record

case Integer of

1: (_Word: Word);

2: (_TwoSymb: array[1..2] of Char)

end;


Дата добавления: 2015-07-25; просмотров: 47 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Пола: Это удивительно! Какой же следующий шаг в ваших исследованиях?| Множество

mybiblioteka.su - 2015-2024 год. (0.022 сек.)