Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 1
Всего онлайн: 1
Зарегистрировано юзеров: 6358
Комментариев на сайте: 645
Новый юзер: Realtyvaday



Последние комментарии
c
Aqel прокомментировал "Урок 71 - Работа с сжатыми файлами":
GZip псевдоархив, на мой вопрос тоже не отвечают, как распаковать отдельные файлы/папки...
Pingitrus прокомментировал "Урок 71 - Работа с сжатыми файлами":
Есть еще кто нибудь живой на этом сайте, кто сможет помочь? Так то все работает, zip и rar распаковывает, но у меня есть файл dat который сжат GZip, почему то его не удается распаковать или так не получится так как этот файл не является архивом или является?)) пишет ошибку что неверная функция



Мы в соцсетях
c
Delphi
Урок 48 - Структурные типы данных, часть (1/2)

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

  При создании любой серьёзной программы не обойтись без дополнительных, более сложных, чем числа и строки, типов данных. В Delphi программист может для своих целей конструировать собственные типы данных. Чтобы ввести в программу (описать) новый тип данных, применяется оператор с ключевым словом type:
  type название_типа = описание_типа;

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

type 
	FootballTeam = (Spartak, Dinamo, CSKA, Torpedo, Lokomotiv);
var 
	MyTeam: FootballTeam;
begin
	MyTeam:=Spartak;
end;
   Вообще, под перечислимыми типами понимают все типы, для которых можно определить последовательность значений и их старшинство. К ним относятся:

  • все целочисленные типы, для которых всегда можно указать число, следующее за числом N;
  • символьные типы (Char): за символом ?a? всегда следует ?b?, за ?0? следует ?1?, и так далее;
  • логические типы - тип Boolean также представляет собой перечислимый тип: type Boolean = (false, true);
  Структурные типы данных используются практически в любой программе. Это такие типы, как
  • массивы
  • записи
  • множества

  Массив - это структура данных, доступ к элементам которой осуществляется по номеру (или индексу). Все элементы массива имеют одинаковый тип.
  Описание массива имеет вид:
type 
	имя_типа_массива = array [диапазон] of тип_элемента;
   Диапазон определяет нижнюю и верхнюю границы массива и, следовательно, количество элементов в нём. При обращении к массиву индекс должен лежать в пределах этого диапазона. Массив из ста элементов целого типа описывается так:
type 
	TMyArray = array [1 .. 100] of Integer;
  Теперь можно описать переменные типа TMyArray:

var 
	A, B: TMyArray;
  Вместо присвоения типа можно явно описать переменные как массивы:

var 
	A, B : array [1..100] of Integer;
   Для доступа к элементу массива нужно указать имя массива и индекс элемента в квадратных скобках. В качестве индекса может выступать число, идентификатор или выражение, значение которых должно укладываться в диапазон, заданный при описании массива:
var 
	N: Integer;
begin
	N := 65;
	A[5] := 101;
	A[N] := 165;
	A[N+3] := 200;
	B := A;
end;
  Иногда требуется узнать верхнюю границу массива. Встроенная функция High() вернёт число, являющееся верхней границей массива. В скобки нужно подставить массив, верхнюю границу которого требуется узнать.

Выражение:
B := A
   Означает, что каждый элемент массива B равен элементу с таким же индексом массива A. Такое присвоение возможно только если переменные объявлены через некий поименованный тип, или перечислены в одном списке. И в случае:

var 
	A: array[1..100] of String;
	B: array[1..100] of String;
его использовать невозможно (но возможно поэлементное присвоение B[1] := A[2]; и т.д.).

   Массивы могут иметь несколько измерений, перечисляемых через запятую. Например, таблицу из четырёх столбцов и трёх строк:
1234
5678
9101112
   Можно описать в виде массива с двумя измерениями:
type 
	MyTable = array[1..4, 1..3] of Integer;
var
	X : MyTable;
	Y : Integer;
	begin
	Y:=X[3, 2];
	end;
   Теперь в результате операции присвоения Y будет равен 7.
   Многомерный, например, двумерный массив можно описать как массив массивов:
type
	TMyArray = array [1 .. 4] of array [1 .. 3] of Integer;
   Результат будет аналогичен предыдущему примеру.
   Каждое измерение многомерного массива может иметь свой собственный тип, не обязательно целый.
   Кроме вышеописанных, так называемых статических массивов, у которых количество элементов неизменно, в Delphi можно использовать динамические массивы, количество элементов в которых допускается изменять в зависимости от требований программы. Это позволяет экономить ресурсы компьютера, хотя работа с такими массивами происходит гораздо медленнее. Описываются динамические массивы аналогично статическим, но без указания диапазона индексов:
type 
	TDinArray = array of Integer;
var 
	A: TDinArray;
   После создания в динамическом массиве нет ни одного элемента. Необходимый размер задаётся в программе специальной процедурой SetLength. Массив из ста элементов:
begin
	SetLength(A, 100);
end;
   Нижняя граница динамического массива всегда равна нулю. Поэтому индекс массива A может изменяться от 0 до 99.
Многомерные динамические массивы описываются именно как массивы массивов. Например, двумерный:
type 
	T3DinArray = array of array of Integer;
var 
	A : T3DinArray;
   В программе сначала задаётся размер по первому измерению (количество столбцов):

   SetLength(A, 3);

Затем задаётся размер второго измерения для каждого из трёх столбцов, например:

   SetLength(A[0], 3);
   SetLength(A[1], 2);
   SetLength(A[2], 1);

   Таким образом создаётся треугольная матрица:    A00 A10 A20
A01 A12
A02
   Чтобы освободить память, выделенную динамическому массиву, нужно массиву как целому присвоить значение nil:
A:=nil;
   Ключевое слово nil в Delphi означает отсутствие значения.

   Данная тема обширна и не влезает в один урок, Множества и Записи в следующей части.

Удачи!
Встретимся в следующем уроке!


Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 5 Июня 2013
Просмотров: 6790

Урок 47 - Пишем MediaPlayer, часть (7/7) Урок 49 - Структурные типы данных, часть (2/2)

Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.



аватар Добавил(а): DIMASKRASAVA [Новичок] Дата: 2018-01-11