Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_10_Tipy_dannykh.docx
Скачиваний:
1
Добавлен:
25.09.2019
Размер:
31.27 Кб
Скачать

Var Str: Stroka; St1: string; St2, St3: string[30];

     Массивымассив – это упорядоченная индексированная совокупность однотипных элементов, имеющих общее имя. Элементами массивов могут быть данные любого типа, включая структурные. Каждый элемент массива однозначно определяется именем массива и индексом (номером этого элемента в массиве) или индексами, если массив многомерный. Для обращения к отдельному элементу массива указывают имя этого массива и номер (номера) элемента, заключенный в квадратные скобки, например, arr1[3, 5] или arr2[7].

     Количество индексных позиций определяет размерность массив (одномерный, двумерный и т.д.), при этом размерность массива не ограничивается. В математике аналогом одномерного массива является вектор, а двумерного массива – матрица. Индексы элементов массива должны принадлежать порядковому типу.

     Различают массивы статические и динамическиеСтатический массив представляет собой массив, границы индексов и, соответственно, размеры которого задаются при объявлении, т.е. они известны до компиляции программы. Формат описания типа статического массива:

     Type <имя типа> = Аггау [<тип индексов>] of <тип элементов >;

     Иначе: var <имя переменной, ...>: Аггау[<тип индексов>] of <тип элементов >;

     Пример. type Matrix = a ггау [1..3, 1..2] of integer;

                            Znak = array[1..255] of char;

                             Day =(Mon, Tue, Wed, Thu, Fri, Sat, Sun);

Var m1, m2: Matrix; a: Znak;

                   Week: array[1..7] of Day; r: array[1..10] of real;

     Динамический массив представляет собой массив, для которого при объявлении указывается только тип его элементов, а размер массива определяете при выполнении программы. Формат описания типа динамического массива:

     Type <имя типа> = Аггау of <тип элементов >;

     Задание размера динамического массива во время выполнения программы производится процедурой SetLength(var S;NewLength: integer), которая для динамического массива устанавливает новый размер, равный NewLength. Выполнять операции с динамическим массивом и его элемента­ми можно только после задания размеров этого массива.

     После задания размера динамического массива для определения его длины, минимального и максимального номеров элементов используются функции Length( ), Low( ) и High( ) соответственно. Нумерация элементов динамиче­ского массива начинается с нуля, поэтому функция Low( ) для него всегда возвращает значение ноль.

    Пример. Var n: integer;

                       m: array of real;

                    . . .

                   SetLength(m, 100);

                   for n:=0 to 99 do m[n]:=n;

                   SetLength (m , 200);

После описания динамического массива, состоящего из вещественных чи­сел, определяется размер этого массива, равный 100 элементам. Каждому элементу присваивается значение, равное его номеру в массиве. Так как ну­мерация элементов массива начинается с нуля, то номер последнего из них равен не 100, а 99. После цикла размер массива увеличивается до двухсот.

     Для описания типа многомерного динамического массива (например, дву­мерного) используется конструкция:

     Type <имя типа> = Аггау of Аггау of <тип элементов >;

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

     Множества: множество представляет собой совокупность элементов, выбранных из пред­определенного набора значений. Все элементы множества имеют порядко­вый тип; количество элементов множества не может превышать 256. Формат, описания множественного типа:

     Type <имя типа> = Set of <тип элементов >;

     Переменная множественного типа может содержать от нуля до максимального числа элементов своего множества. Значения множественного типа заключаются в квадратные скобки. Пустое множество обозначается [ ]. Операции, допустимые над множествами, приведены в таблице.

     Кроме того, имеется операция in (проверка членства), которая определяет принадлежность выражения порядкового типа (первого операнда) множест­ву (второму операнду). Результат операции будет типа boolean и иметь зна­чение True в случае соблюдения принадлежности значения множеству.

     Записи: записи объединяют фиксированное число элементов данных других типов. Отдельные элементы записи имеют имена и называются полями. Имя поля должно быть уникальным в пределах записи. Различают фиксированные и вариантные записиФиксированная запись состоит из конечного числа по­лей, ее объявление имеет следующий формат:

     Type <имя типа> = record ;

             <имя поля­_1>: <Тип поля>;

             . . .

            <имя поля_ n >: <Тип поля>;

      end ;

     Вариантная запись, так же как и фиксированная, имеет конечное число по­лей, однако предоставляет возможность по-разному интерпретировать об­ласти памяти, занимаемые полями. Все варианты записи располагаются в одном месте памяти и позволяют обращаться к ним по различным именам. Отметим, что термин «вариантная запись» не имеет ничего общего с терми­ном «вариантный тип» (variant). Формат объявления вариантной записи:

     Type <имя типа> = record ;

     Case <Признак>: <Тип признака> of ;

           <вариант_1>: (<описание варианта_1>)

             . . .

           <вариант_ n >: (<описание варианта_ n >);

     end ;

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

     Пример. var Man: record;

                   Name: string;

                   Salary: real;

                   Note: string;

                   end;

                   . . .

                   Man.Name:=’Ivanov M.A.’;

                   Man .Salary:=5000;

Переменная Man — фиксированная запись, которая содержит поля имени ( Name ), оклада ( Salary ) и примечания ( Note ), причем каждое поле имеет свой тип.

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

     Для выполнения операций с конкретным файлом, размещенным на диске, в программе обычно используется так называемая файловая переменная (логический файл). Файловая переменная после ее описания связывается с некоторым файлом, в результате чего операции, выполняемые над ней, при­водят к соответствующим изменениям в этом файле. После завершения всех операций связь между файловой переменной и файлом разрывается. Теперь файловую переменную можно связать с другим файлом этого же типа.

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

     Пример. var f1: TextFile;

                         f2: File of integer;

                         f3: File of real;

                         f4: File;

здесь переменная f1 предназначена для работы с тек­стовыми файлами, переменные f2 и f3 – с типизированными файлами, со­держащими целые и вещественные числа, соответственно, а переменная f4 – с нетипизированными файлами.

     Примечание . В языке Object Pascal описателем текстовых файлов служит слово Text. В Delphi многие компоненты имеют одноименное свойство, поэтому при описа­нии текстовых файлов этот описатель применять нельзя; нужно использовать TextFile или System. Text (описатель Text из модуля System ).

     Для непосредственной работы с файлами многие компоненты (объекты) предоставляют соответствующие методы, например, LoadFromFile ( const FileName : string ) – загрузить из файла или SaveToFile(const FileName: string) сохранить в файле. В таких методах файловая переменная не нужна и в параметре FileName указывается имя файла.

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