Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Присваивание значений сложных типовСодержание книги
Поиск на нашем сайте
Подобные длинные цепочки вложений конструкций разных типов друг в друга могут свободно использоваться в выражениях Паскаля наравне с обычными переменными. От них они, впрочем, ничем и не отличаются — разве что формой записи. При этом можно копировать не только значения самых простых (базовых) типов наподобие Integer или Real, но и значения массивов и структур в одном опе- раторе присваивания, Надо только, чтобы типы и правой, и левой частей оператора присваивания совпадали. type TAr - array[1..1000] of Byte; TRc = record Ar: TAr; Count: integer; end; var А: ТДг; R: TRc; Begin A:= R.Ar; R.Ar:= A;__ Инициализация констант сложных типов Часто требуется использовать в работе константы не только базовых типов, но и константы сложных типов (массивы, записи). Например, таблицы всевозможных начальных значений и параметров удобно размещать в массивах. Инициализация массивов Значения массива располагаются последовательно в круглых скобках. Если изме- рений у массива более одного, то измерения вкладываются друг в друга, начиная 54 Урок 1. Язык Delphi (Object Pascal) и ею использование с младших измерений (справа налево, если смотреть на описание массива). На- пример, если создан тип type Tl = array[1..2, 1..5] of byte; то в первую очередь надо сформировать значения для диапазона 1..5. Таких после- довательностей из 5 чисел требуется две — в соответствии с размером диапазона первого измерения. Записывается константа сложного типа так: const Т: Т1 = ((1, 2, 3, 4, 5), (100,200,300,400,500)]; ВНИМАНИЕ Число элементов при инициализации массива должно в точности равняться его размеру (произведению длин всех измерений). Инициализация записи Форма инициализации записи отличается от формы инициализации массива тем, что приходится дополнительно указывать названия элементов, а за ними через двоеточие — значения. Разделяются такие конструкции точками с запятой. type T2 = record Name: str-ing; Num: integer; end,- const TT: T2 = (Name:'первый'; Num:l|; ) Инициализация указателей Указатель инициализируется значением адреса ранее описанной переменной. var N: Integer; const PI: ~Integer = @H; const constPStr: PChar = 'нуль-строка';__ Каждая программа использует при работе память (*). Память занимает любая переменная в вашей программе. Будь это форма, компонент, массив, запись, строка или же простой Integer. Под некоторые переменные память выделяется автоматически (например, под переменные типа Integer и статические массивы), под другие - вы должны выделять её сами, явно (например, динамические массивы). Собственно, с точки зрения операционной системы каждая переменная характеризуется адресом в памяти (местоположением) и размером. Понятно, что обычно данные разных переменных не пересекаются - за исключением случаев обращением к одной области памяти через разные имена с помощью указателей. Грубо говоря, обычно в программе используется три типа памяти: область памяти для глобальных переменных, стек и куча. Память для глобальных переменных выделяется загрузчиком ОС при загрузке исполняемого модуля программы в память и освобождается при выгрузке модуля (выходе из программы). Глобальные переменные - это любые переменные, объявление которых располагается вне класса или процедуры. Стек используется для размещения локальных переменных (объявленных в процедуре/функции) и служебных данных (типа адресов возврата и адресов обработчиков исключений). Куча же используется для размещения динамических данных. Заметим, что для переменных динамических типов данных (динамические массивы, строки, любые объекты, компоненты), хотя сама переменная может размещаться в области для глобальных переменных или в стеке (а, значит, память для неё выделяется автоматически), но данные, на которые она указывает, всегда размещаются в куче и, зачастую, должны управляться вручную. Вне зависимости от того, кто выделяет память для переменной (вы вручную или компилятор автоматически), память для любой переменной должна быть выделена перед использованием, а потом, когда переменная уже не будет нужна - освобождена. 8. Массивы в Delphi. Способы задания массивов. Обращение к элементам массива в выражениях. Структурные типы данных Обойтись только простыми — линейными типами в большой программе довольно сложно. Желательно, чтобы структура данных прикладной программы отвечала структуре данных решаемой задачи. Для этого в Паскале есть набор структурных типов данных. Массивы Массив — это структура данных, доступ к элементам которой осуществляется по номеру (или индексу). Все элементы в массиве имеют одинаковый тип. Индекс элемента массива может быть вычисляемым, что позволяет организовывать ком- пактную и эффективную обработку больших наборов данных. Описание массива имеет вид: type имя-типа-маесива = array[ диапазон ] of тип-элемента; В КВАДРАТНЫХ СКОБКАХ ПИШЕТСЯ ТИП ИНДЕКСА,который в свою очередь должен быть порядковым типом!!! Слова array (массив) и of — ключевые. Диапазон определяет нижнюю и верхнюю границы массива и, соответственно, число элементов в нем. При обращении к мас- сиву индекс должен лежать в этом диапазоне. Тип элемента определяет тип каж- дого элемента массива. Массив из 100 элементов целого типа (первый элемент будет иметь номер 1, послед- ний — номер 100) описывается в программе так: type TMyArray = array[ 1..100 ] of'integer; При задании диапазона могут выступать не только числовые значения: type TMyArray = array[ TMyTeams ] of string; Таким способом определяется тип, описывающий массив из трех строк. При обра- щении к первой строке индекс должен иметь значение С5КА (самое маленькое зна- чение из диапазона TMyTeams), а при обращении к третьей строке — значение Locomotive. Доступ к элементу массива описывается путем указания имени переменной соот- ветствующего типа вместе со следующим за ней в квадратных скобках индексом. В качестве индекса может выступать произвольное выражение Паскаля, значение которого должно укладываться в диапазон, указанный при описании массива. Например: type TMyArray = array[ 1..100 ] of integer; var MyArray: TMyArray; N: integer; begin N:= 50; MyArray[ 1 ]:= 100,- Му Array[ К ]:= MyArray[ N+l ] * 2; MyArray[ N+12 ]:= N div 4; Определение собственных типов данных 4 1 Другой пример: type TMyArray = array] TMyTeams ] of string; var Teams: TMyArray; begin Teams[ CSKA ]:= 'это ЦСКА'; Teams[ Dynamo ]:= 'это Динамо'; Teams[ Locomotive ]:= 'это Локомотив'; Вместо создания в программе нового типа на основе описания массива можно явно декларировать переменную как массив с помощью ключевого слова van var Teams: array[ TMyTeams ] of string; Хотя такой подход использовать не рекомендуется. Дело в том, что при этом методе описания, даже когда две переменные внешне описаны одинаково, в Паскале они считаются относящимися к разным типам. Б таком случае присваивать их значения (весь массив) друг другу в одном операторе присваивания не разрешается. var Tl: array[ TMyTeams ] of string; T2: array[ TMyTeams ] of string; begin Tl:= T2,- // неправильно! Чтобы разрешить копирование массивов, надо переменные описать как имеющие один тип: type TMyArray = array! TMyTeams ] of string; var Tl: TMyArray; T2: TMyArray; begin Tl:= T2; // правильно! Массив может иметь несколько измерении, перечисляемых через запятую. аггау[ -5..10, 0.. 2 ] of'byte; Каждое измерение характеризуется своим диапазоном, тип которого может не сов- падать с типами диапазонов других измерений. Например, если требуется описать массив дробных чисел с тремя измерениями, первое из которых охватывает диапа- зон целых чисел от 1 до 10, второе — диапазон значений от False до True (Boolean), a третье — диапазон TMyTeams, то выглядеть это будет так: tyjtp<e THewArray = J array[ 1.. 10, boolean, TMyTeams ] of real; При доступе к элементам массива значения индексов также перечисляются через запятую: var AA: TNewArray; begin АА[ 5, true, CSKA) = 3.14; 42 Урок 1. Язык Delphi (Object Pascal) и его использование Строковые данные формально представляют собой массивы символов, и к элемен- там строк можно обращаться с помощью индексов. Это позволяет выделять конкрет- ные символы и менять их значения. Отсчет символов для переменных типа string начинается с единицы. var S: string,- begin S:= '54321'; S[5]:= '0'; //в строке окажется значение '54320' Однако явно описывать строки как массивы символов вместо использования клю- чевого слова string неправильно. Единственное отличие — строки, заканчивающи- еся нулевым символом. Их можно описывать в программе как массивы символов, первый элемент которых имеет номер 0. При занесении значений в такие перемен- ные в конце строки надо указывать символ с кодом 0: var SO: array[ 0.. 5 0 ] of char; begin SO:= 'строка с нулем'#О;
|
||||
Последнее изменение этой страницы: 2017-02-21; просмотров: 227; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.170.253 (0.006 с.) |