русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Динамические массивы


Дата добавления: 2013-12-24; просмотров: 952; Нарушение авторских прав


Тип дата-время

Вещественные типы

 

В отличие от порядковых типов, значения которых всегда сопоставляются с рядом целых чисел и, следовательно, представляются в ПК абсолютно точно, значения вещественных типов определяют произвольное число лишь с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа.

 

Длина, байт Название Количество значащих цифр Диапазон значений  
          Real   Single   Double   Extended   Comp   Currency 15…16   7…8   15…16   19…20   19…20   19…20   5.0*10e-324…1.7*10e308   1.5*10e-45…3.4*10e38   5.0*10e324…1.7*10e308   3.4*10-4951…1.1*10e4932   -2e63…+2e63-1   +/-922 337 203 685477,5807  

 

 

Тип дата-время определяется стандартным идентификатором TDateTime и предназначен для одновременного хранения и даты, и времени. Во внутреннем представлении он занимает 8 байт и подобно currency представляет собой вещественное число с фиксированной дробной частью: в целой части числа хранится дата, в дробной - время. Дата определяется как количество суток, прошедших с 30 декабря 1899 года, а время - как часть суток, прошедших с 0 часов, так что значение 36444,837 соответствует дате 11.10.1999 и времени 20:05. Количество суток может быть и отрицательным, однако значения меньшие -693594 (соответствует дате 00.00.0000 от Рождества Христова) игнорируются функциями преобразования даты к строковому типу.

 

Над данными типа TDateTime определены те же операции, что и над вещественными числами, а в выражениях этого типа могут участвовать константы и переменные целого и вещественного типов.



 

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

 

Function Date: TDateTime;   Function DateToStr(D: TDateTime): String;   Function DateTimeToStr(D: TDateTime): String;   Function FormatDateTime (Format: String; Value: TDateTime): String;     Function Now: TDateTime;   Function Time: TDateTime;   Function TimeToStrfT: TDateTime): String; Возвращает текущую дату   Преобразует дату в строку символов   Преобразует дату и время в строку символов   Преобразует дату и время из параметра value в строку символов в соответствии со спецификаторами параметра Format (см. пояснения в п. 7.3.) Возвращает текущую дату и время   Возвращает текущее время   Преобразует время в строку  

 

 

 

В версии Delphi 4 впервые введены так называемые динамические массивы. При объявлении таких массивов в программе не следует указывать границы индексов:

 

Var A: array of Integer;

 

В: array of array of Char;

 

C: array of array of array of Real;

 

В этом примере динамический массив A имеет одно измерение, массив B - два и массив C - три измерения. Распределение памяти и указание границ индексов по каждому измерению динамических массивов осуществляется в ходе выполнения программы путем инициации массива с помощью функции SetLength. В ходе выполнения такого оператора:

 

SetLength(А,3);

 

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

 

Фактически идентификатор динамического массива ссылается на указатель (см. гл. 9), содержащий адрес первого байта памяти, выделенной для размещения массива. Поэтому для освобождения этой памяти достаточно присвоить идентификатору значение nil (другим способом является использование процедуры Finalize):

 

Var А,В: array of Integer;

 

begin

// Распределяем память:

SetLength(A,10) ;

SetLength(B,20) ;

// Используем массивы:

…………………

// Освобождаем память:

А := NIL;

Finalize(В);

end;

 

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

 

В многомерных массивах сначала устанавливается длина его первого измерения, затем второго, третьего и т. д. Например:

 

Var A: array of array of Integer;//Двумерный динамический массив begin

//Устанавливаем длину первого измерения (количество столбцов):

SetLength(A,3) ;

//Задаем длину каждого столбца:

SetLength(A[0],3) ;

SetLength(A[l],3) ;

SetLength(A[2] ,3) ;

end;

 

Обратите внимание: в отличие от обычных массивов стандартного Паскаля (и Object Pascal), динамические массивы могут иметь разную длину по второму и следующим измерениям. В предыдущем примере определен квадратный массив 3х3. Однако ничто не мешает нам создать, например, треугольный массив:

 

SetLength(A,3) ;

//Задаем длину каждого столбца:

SetLength(A[0],3) ;

SetLength(A[l],4) ;

SetLength(A[2],5) ;

 

В многомерных динамических массивах каждый элемент любого из N-1 измерений (N - количество измерений) представляет собой динамический массив и, следовательно, нуждается в инициации. Вот как, например, можно инициировать вещественный кубический массив 3х3х3:

 

Var A: array of array of array of Real; i, j: Integer;

begin

SetLength(A,3) ;

for i := 0 to 2 do

begin

SetLength(A[i],3) ;

for j := 0 to 2 do SetLength(A[i,j],3) ;

end;

end;

 



<== предыдущая лекция | следующая лекция ==>
Целые типы. | ЗЕМЛЯНЫЕ РАБОТЫ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.456 сек.