Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Программа на Delphi

нием их типа|
|Var                             |Type                             |
|t,u,n:(Mon, Tue,Wed,            |DaysOfWeek = (Mon, Tue,Wed,      |
|Thu,Fri,Sat,Sun);               |Thu,Fri,Sat,Sun);                |
|                                |Var t,u,n: DaysOfWeek;           |


      В тех случаях, когда явный и типизованный способы описания переменных
      конкурируют, следует всегда отдавать предпочтение способу описания
      переменных с предварительным объявлением их типа в секции Type. Такой
      способ позволяет:
      а) конкретизировать тип;
      б) четко выделить множество переменных этого типа;
      в) повысить уровень структурированности программы;
      г) снизить вероятность путаницы в типах, когда переменные фактически
      того же типа объявлены разными способами;
      д) уменьшить объем текста за счет возможности быстрой ссылки на ранее
      определенный тип, особенно в тех ситуациях, когда этот тип
      используется для порождения новых типов, переменных, функций и пр. в
      других секциях или модулях.
      В этой связи важно подчеркнуть, что даже при совпадении базовых типов
      различие в пользовательских типах может привести к непредсказуемому
      поведению программы. Например, в нижеследующей секции Type два
      производных типа t1 и t2 имеют одинаковый базовый тип byte. Однако
      объявленные ниже в Var-секции переменные p1 и p2 будут расценены
      системой как переменные разных типов. Это обстоятельство может
      послужить причиной недоразумений в ходе составления и/или выполнения
      программы.
      Type
      t1 = byte;

      t2 = byte;
      Var
      p1: t1;

      p2: t2;
      Корректным можно считать следующий аналог:
      Type
      t1 = byte;
      Var
      p1,p2: t1;
       
                             7. Структурные типы
Структурные типы представляют собой совокупность значений одного или
нескольких различных типов. Их наличие позволяет программисту
конструировать производные типы практически любой сложности, что резко
расширяет возможности языка.
К числу структурных относятся следующие типы:
    . множественные типы [Set],
    . регулярные типы (массивы) [Array],
    . комбинированные типы (записи) [Record],
    . файловые типы [File],
    . классы [Class],
    . классовые ссылки [Class reference],
    . интерфейсы [Interface].
Ниже будут подробно описаны первых четыре структурных типа – регулярный,
комбинированный, множественный и файловый.
Три последних типа будут описаны отдельно в разделах, посвященных объектно-
ориентированному программированию.
                       7.1. Регулярные типы (массивы)
Массив – это структура языка Object Pascal, представляющая собой
упорядоченную совокупность элементов одного типа.
Следует различать два вида массивов: массив-тип и массив-переменную.
Массив-тип. Синтаксис маcсива-типа:
<имя массива> = Array [<тип индекса>, <тип индекса>, …, <тип индекса>]
                            Of <тип элемента>;
Всякий массив имеет размерность. Размерность определяется количеством типов
индексов, которые заключены в квадратные скобки [ .. ].
Массив-тип предназначен для описания:
    . структуры массива как типа;
    . размерности массива;
    . типов индексов массива;
    . типа каждого элемента массива.
Так, в следующем примере
                 Type
                 tA1: array [1 .. 10] of Real;
описана структура одномерного массива вещественных элементов (Real), в
котором индекс может изменяться в диапазоне целых значений от 1 до 10. Его
элементами являются вещественные типы tA1[1], tA1[2], tA1[3], …, tA1[9],
tA1[10].
Другой пример:
      Type
           Color: (Red, Green); { перечислимый тип }

           Z: array [1 .. 3, Color ] of Boolean; { массив }
В нем сначала описан простой перечислимый тип Color. Ниже на его основе
описан двумерный массив Z логических (Boolean) элементов. Первый индекс
массива имеет целый тип, а второй – тип Color. Таким образом, массив
состоит из шести элементов – логических типов:
  Z [1, Red], Z [1, Green], Z[2, Red], Z[2, Green], Z[3, Red], Z[3, Green].
Массив-переменная. Синтаксис маcсива-переменной:
   <имя массива > : Array [<тип индекса>,<тип индекса>, …, <тип индекса>]
                            Of <тип элемента>;
Массив-переменная отличается от массива-типа тем, что все его элементы –
это отдельные независимые переменные, которые могут содержать различные
значения одного типа.
Массив-переменная может быть описан явно или с помощью ранее определенного
в секции Type типа.
В следующем примере массивы y, Z описаны идентично, причем y – явно, Z – на
основе ранее определенного типа в секции Type, т. е. неявно.
                 Type
                 tA1: array [1 .. 10] of Real;
                 Var
                 y : array [1 .. 10] of Real; {массив}

                 Z : tA1; {массив}
Этот пример демонстрирует разные способы описания одинаковых по структуре,
но разных по типу массивов. С точки зрения корректного программирования он
одновременно является примером того, как не следует описывать идентичные
переменные. Причина этого заключается в том, что идентичные структуры во
избежание непредсказуемого поведения программы следует описывать одним
типом.
В этой связи корректным будет любой из вариантов, приведенных в табл. 5.
                                                                   Таблица 5
|Корректный неявный способ        |Корректный явный способ      |
|Type tA1: array [1 .. 10] of     |Var y, Z: array [1 .. 10] of |
|Real;                            |Real;                        |
|Var Y, Z: tA1;                   |                             |


Многомерные массивы содержат два и более индексов, например:
      Var  h: array[1 ..3, boolean, -7 .. 7] of Word;
что эквивалентно
      Var  h: array[1 ..3] of array[boolean] of array[-7 .. 7] of Word;
Для упакованных массивов
             Var  packed array[Boolean,1..10,TShoeSize] of Char;
что эквивалентно
      Var 

      packed array[Boolean] of packed array[1..10]

      of packed array[TShoeSize] of Char;
Манипуляции с отдельными элементами массивов. Обращение к отдельному
элементу массива возможно через его индексы. В следующем примере в секции
Var описаны простая переменная i и два одномерных массива A и V как целые
переменные типа Integer. Затем в блоке begin … end расположены три
вычислительных оператора.
                       Var

                       i: Integer;

                       A, V: array[1..100] of Integer;
                       …
                       begin

                       i:= 5;

                       V[8]:= i+9;

                       A[45]:= V[i+3]*2;

                       end;
При выполнении первого из них переменная i примет значение 5. При
выполнении второго – восьмой элемент массива V примет значение 14. В
третьем операторе сначала будет вычислен индекс i + 3 = 8, затем значение
восьмого элемента массива V (значение 14) будет умножено на 2 и полученный
результат – значение 28 – будет присвоено 45-му элементу массива A.
Манипуляции с массивами. Язык допускает с помощью одного оператора
присваивания выполнить операцию над массивом в целом. Пусть, например,
массивы A, V объявлены как квадратные матрицы. Тогда оператор
                                   V:= A;
выполнит копирование значений всех элементов массива A в массив V, а после
выполнения оператора
                                 V:= A * V;
будет выполнено умножение матрицы А на матрицу V и результат будет помещен
в матрицу V с предварительным затиранием старых значений.
Упакованные массивы. Элементы упакованного массива хранятся в памяти
максимально плотно. При записи он предварительно упаковывается с целью
экономии памяти. При чтении, наоборот, распаковывается. Операции упаковки и
распаковки требуют дополнительного времени. Поэтому использование
упакованных массивов несколько замедляет работу программы. От обычного
массива Array описание упакованного массива отличается тем, что перед этим
словом добавляется слово Pаcked, например:
           Var W: packed array [1..100] of Integer;
                     7.2. Комбинированные типы (записи)
Запись – это объединение элементов разных типов. Как и в массивах, следует
различать запись-тип и запись-переменную. Один элемент записи называется
полем.
Запись-тип. Синтаксис записи-типа:
                 <имя записи> = Record
                            <имя поля 1> : <тип>;
                            <имя поля 2> : <тип>;
                            ...
                            <имя поля N> : <тип>;
                            <вариантная часть >
                            End;
Записи очень удобны для описания и хранения разнотипных данных о каких-либо
однотипных структурах.
Примером могут служить сведения о студентах. Сведения о любом из них могут
включать поля: Фамилия, Имя, Отчество, Год рождения, Группа, Год
поступления в вуз, Курс. Такие структуры являются однотипными и могут быть
описаны следующим типом:
Type

TStud = Record { Сведения о студенте как запись }

Fio : String[40];  { ФИО как строка из 40 символов }

Name : String[20]; { Имя как строка из 20 символов }

Otch : String[30]; { Отчество как строка из 30 символов }

BirthYear : Word;  { Год рождения как целое типа Word }

Group : String[8]; { Группа как строка из 8 символов }

ElectYear : Word;  { Год поступления как целое типа Word }

Curs : Byte;       { Курс как целое типа Byte }

End;
В этом примере типы полей записи типа tStud назначены с учетом максимально
возможных значений этих полей. Так, структура может хранить фамилию из не
более чем 40 символов. Полю Curs назначен тип Byte, который и
12345След.
скачать работу

Программа на Delphi

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ