Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 300; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.137 (0.009 с.) |