Методические указания для проведения практических и лабораторных занятий по дисциплине "Программирование на языке высокого уровня" для студентов специальностей 220200 Автоматизированные системы обработки информации и управления
Вид материала | Методические указания |
- Рабочая программа по дисциплине Программирование на языке высокого уровня для специальности, 182.97kb.
- Соболева Наталья Владимировна методические указания, 73.26kb.
- Методические указания к проведению лабораторных работ. Специальность 23. 01. 02 «Автоматизированные, 1178.37kb.
- Рабочая программа По дисциплине «Системы искусственного интеллекта» для специальности, 86.74kb.
- Рабочая программа По дисциплине «Программирование на языке высокого уровня» По специальности, 280.81kb.
- Р. Е. Алексеева кафедра ису программирование на языке высокого уровня методические, 57.65kb.
- Рабочая программа по дисциплине «Алгоритмические языки и программирование» Для специальности, 208.45kb.
- Рабочая программа дисциплины «Объектно-ориентированное программирование» для специальности, 325.53kb.
- А. В. Яковлев Операционные системы и системное программирование Раздел Операционная, 1847.03kb.
- Рабочая программа дисциплины «Автоматизированные информационные системы» для специальности, 301.29kb.
Примечания:
1. Число всегда округляется до той точности, которую позволяет заданное программистом количество полей для размещения цифр ('0' и '#').
2. Если у преобразуемого числа слева от десятичной точки получается больше значащих цифр, чем задано полей для их размещения, то цифры все равно добавляются в строку. Если полей недостаточно справа от точки, происходит округление.
3. Символ ';' позволяет задать три разных формата вывода для чисел с разным знаком. При различном количестве форматов они применяются следующим образом:
• один: применяется для всех чисел;
• два: первый применяется для чисел, больших или равных нулю, второй — для отрицательных;
• три: первьш применяется для положительных, второй — для отрицательных чисел, третий — для нуля.
Если форматы для отрицательных чисел или нуля пусты, применяется формат для положительных чисел.
Если пуст формат для положительных чисел или спецификатор формата вообще не задан (пустая строка), то числа форматируются согласно обобщенному формату (как в функции FloatToStr). Такое форматирование применяется также в случае, если число значащих цифр слева от десятичной точки превысило 18 и не задан научный формат.
Применение спецификатора иллюстрируется в таблице на примере преобразования четырех чисел:
Спецификатор | 1234 | -1234 | 0.5 | 0 |
0 | 1234 | -1234 | 1 | 0 |
0.00 | 1234.00 | -1234.00 | 0.50 | 0.00 |
#.## | 1234 | -1234 | .5 | |
#.##0.00 | 1,234.00 | -1,234.00 | 0.50 | 0.00 |
#,##0.00;(#,##0.00) | 1,234.00 | (1,234.00) | 0.50 | 0.00 |
#,##0.00;;Zero | 1,234.00 | -1,234.00 | 0.50 | Zero |
О.ОООЕ+00 | 1.234Е+03 | -1.234Е+03 | 5.000Е-01 | 0.000Е+00 |
#.###Е-0 | 1.234ЕЗ | -1.234ЕЗ | 5Е-1 | 0Е0 |
Две следующие функции применяют те же правила, что и рассмотренные выше функции, но отличаются параметрами:
function FloatToText(Buffer: PChar; Value: Extended; Format: TFloatFormat; Precision, Digits: Integer) : Integer; | Соответствует FloatToStrF, но выходная строка помещается в буфер Buffer (без начальной длины!), а число символов в ней возвращается самой функцией. |
function FloatToTextFmt(Buffer: PChar; Value: Extended; Format: PChar): Integer; | Соответствует FormatFloat, но выходная строка помещается в буфер Buffer (без начальной длины!), а число символов в ней возвращается самой функцией. |
Наконец, процедура:
procedure FloatToDecimal(var Result: TFloatRec; Value: Extended; Precision, Decimals: Integer); | Производит подготовительный анализ преобразуемого числа, занося в поля записи Result различные его характеристики. |
Перейдем к рассмотрению функций преобразования текстовой строки в число. Их две — соответственно для строк типа string и PChar:
function StrToPloat(const S: string): Extended;
function TextToFloat(Buffer: PChar; var Value: Extended): Boolean;
Общие правила для передаваемой в функцию строки таковы:
• допускаются как научный, так и фиксированный форматы;
• в качестве десятичной точки должен выступать символ, который содержится в DecimalSeparator;
• не допускаются символы-разделители тысяч (ThousandSeparator), а также символы обозначения денежньк единиц.
В случае ошибки преобразования функция StrToFloat генерирует исключительную ситуацию EConvertError, a TextToFloat — возвращает значение False.
4.5. Функции работы с датами и временем
В Delphi для хранения даты и (или) времени предусмотрен формат TDateTime, представляющий собой, на самом деле, обычное число с плавающей точкой.
При этом дата представляется целой частью числа, а время — дробной. Преимущество этого подхода в том, что теперь даты и времена можно корректно складывать и вычитать, например:
var StartTime: tDateTime;
procedure TFormI.PormCreate(Sender: TObject);
begin
StartTime := Now;
end;
procedure TFormI.FormClick(Sender: TObject);
begin
Labell.Caption := 'Co времени запуска прошло' +
DateTimeToStr(Now - StartTime);
end;
Функции этой группы приведены в таблице:
function EncodeDate(Year, Month, Day: Word): TDateTime; | Преобразует дату, заданную раздельно годом, месяцем и днем, в формат TDateTime. Если они выходят за допустимые пределы, возникает ИС EConvertError. |
procedure DecodeDatefDate: TDateTime; var Year, Month, Day: Word); | Преобразует дату в виде TDateTime к раздельным составляющим: году, месяцу и дню. |
function EncodeTimefHour, Min, Sec, MSec: Word): TDateTime; | Преобразует значение времени, заданное часом, минутой, секундой и миллисекундой в формат TDateTime. |
procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word) ; | Преобразует значение времени в формате TDateTime в раздельные составляющие: час, минуту, секунду и миллисекунду. |
function DayOfWeektDate: TDateTime): Integer; | Возвращает номер текущего дня недели от 1 (воскресенье) до 7 (суббота). |
function Date: TDateTime; | Возвращает текущую дату. |
function Time: TDateTime; | Возвращает текущее время. |
function Now: TDateTime; | Возвращает текущие дату и время. |
function DateToStr(Date: TDateTime): string; | Преобразует дату Date в текстовую строку. |
function TimeToStr(Time: TDateTime): string; | Преобразует время из типа TDateTime в текстовую строку. |
function DateTimeToStr(DateTime: TDateTime): string; | Преобразует дату и время из типа TDateTime в текстовую строку. |
function StrToDatefconst S: string): TDateTime; | Преобразует текстовую строку в дату типа TDateTime. Строка должна содержать два или три числа, разделенных символом, содержащимся в DateSeparator. Формат даты в строке определяется в соответствии со значением переменной ShortDateFormat. |
function StrToTime(const S: string): TDateTime; | Преобразует текстовую строку S в значение времени. Должен использоваться формат HH:NN:SS, где SS — может принимать значения 'AM' или ТМ', иначе означает секунды. Если необходимо получать время в 24-х часовой шкале, то элемент SS формата опускается. Если преобразование невозможно, возникает ИС EConvertError. |
function StrToDateTime(const S: string): TDateTime; | Преобразует текстовую строку S в дату и время в формате MM/DD/YY HH:NN:SS (элемент SS см. выше). |
function FormatDateTime(const Format: string; DateTime: TdateTime): string; | Преобразует дату и время из типа TDateTime в текстовую строку, используя формат, задаваемый параметром Format (см. примеч. 1). |
procedure DateTimeToStringfvar Result: string; const Format: string; DateTime: TDateTime); | Преобразует дату и время типа TDateTime в строку Result, используя формат, передаваемый параметром Format (см. примеч. 1). |
Примечания:
1. Правила задания спецификатора формата для даты и времени отличаются от рассмотренных выше. В первую очередь надо иметь в виду то, что функции вроде FormatDateTime оперируют над одним значением TDateTime, а спецификаторы формата извлекают из него те или иные составные части. При этом могут использоваться:
с | Отображает дату, используя формат ShortDateFormat, затем отображается время в формате LongTimeFormat. Время не отображается, если дробная часть переменной DateTime нулевая. |
d | Отображает число месяца без нуля в левом разряде (1-31). |
dd | Отображает число месяца с нулем в левом разряде (01-31). |
ddd | Отображает день недели в соответствии с сокращенными именами из переменной ShortDayNames. |
dddd | Отображает день недели в соответствии с полными именами из переменной LongDayNames. |
ddddd | Отображает дату в соответствии с форматом ShortDateFormat. |
dddddd | Отображает дату в соответствии с форматом LongDateFormat. |
m | Отображает месяц как число без нуля в левом разряде (1-12). |
mm | Отображает месяц как число с нулем в левом разряде (01-12). |
irirnm | Отображает месяц в соответствии с сокращенными именами из переменной ShortMonthNames. |
П1ГПГПП1 | Отображает месяц в соответствии с полными именами из переменной Long MonthN am es. |
УУ | Отображает год двумя цифрами. |
УУУУ | Отображает год четырьмя цифрами. |
h | Отображает час как число без нуля в левом разряде (0-23). |
hh | Отображает час как число с нулем в левом разряде (00-23). |
n | Отображает минуты как число без нуля в левом разряде (0-59). |
nn | Отображает минуты как число с нулем в левом разряде (00-59). |
s | Отображает секунды как число без нуля в левом разряде (0-59). |
ss | Отображает секунды как число с нулем в левом разряде (00-59). |
t | Отображает время в соответствии с форматом ShortTimeFormat. |
tt | Отображает время в соответствии с форматом LongTimeFormat. |
am/pin | Отображает время в 12-часовой шкале. 'AM' означает часы до полудня, 'РМ' — часы после полудня. |
arnpm | Отображает время в 12-часовой шкале. При этом для времени до полудня отображается содержимое переменной TimeAMString, а после полудня — TimePMString. |
a/p | Отображает время в 12-часовой шкале, 'а' означает часы до полудня, 'р' — часы после полудня. |
/ | Отображает символ — разделитель даты, содержащийся в переменной DataSeparator. |
| Отображает символ — разделитель времени, содержащийся в переменной TimeSeparator. |
'XX'/'XX' | Символы, заключаемые в простые или двойные кавычки, отображаются как есть и не подвергаются форматированию. |
Например, результатом вызова функции с параметрами
FormatDateTime (' "Совещание состоится в" dddd, dirrmim, yyyy, ' + ' "в" hh:nn', StrToDateTime('12/31/95 23:55')) ;
будет строка 'Совещание состоится в среду, 31 декабря 1995 в 23:55' (естественно, если вы переопределили значения элементов массива LongMonth-Names).
2. Спецификаторы am/pm, ampm, a/p используются вместе со спецификаторами h и hh.
3. Спецификаторы могут быть указаны как в верхнем, так и в нижнем регистрах символов — это не играет роли.
4. Начальные значения всех используемых при форматировании даты и времени переменных берутся из секции [inti] файла WIN.INI.
2Л4.6. Функции для работы с памятью
Для работы с памятью Delphi предоставляет следующие функции:
function AllocMemfSize: Cardinal): Pointer; | SYSUTILS | Выделяет блок памяти размером Size и возвращает указатель на него. Выделенная память обнуляется. |
function ReAllocMem(P: Pointer; CurSize, NewSize: Cardinal): Pointer; | SYSUTILS | Изменяет размер блока памяти размером CurSize, на который указывает Р. Если удается выделить блок размером NewSize, функция возвращает указатель на него. Содержимое старого блока переносится в новый. При этом, если CurSize>NewSize, часть содержимого отбрасывается, а если CurSize |
function MemAlloc(Size: Longint): Pointer; | GRAPHICS | Выделяет блок размером Size. Если он меньше 64К, память выделяется в куче памяти Delphi, в противном случае — глобальная. |
Память, выделенная при помощи этих функций, может быть освобождена при помощи функции FreeMem.
У компонента же определение конструктора на удивление лаконично, но в нем присутствует указатель на Owner:
constructor Create(AOwner: TComponent);
Ответ прост: Owner — тот объект, который при создании вызывает конструкторы всех объектов, владельцем которых он является, а при уничтожении — их деструкторы. Таким образом, поместив при разработке компонент на форму, вы можете не заботиться о его создании и уничтожении в программе. Все свойства таких компонентов и все связи между ними запоминаются в файле формы .DFM и при запуске приложения создаются вновь автоматически.
Деструктор компонента
destructor Destroy;
уничтожает все дочерние компоненты (вызывая их деструкторы) и вычеркивает себя из списка компонента-владельца.
Конструкторы нужно вызывать только для тех компонентов, которые создаются вами во время исполнения. При этом они получат владельца и явный вызов деструктора не понадобится. Практически все конструкторы и деструкторы описанных ниже компонентов имеют тот же вид, что приводится здесь. Поэтому в дальнейшем их описания опущены, где это возможно.
Принадлежащие компоненты оформлены в виде списка, доступного через свойство Components. В классе TComponent предусмотрен набор методов и свойств для управления этим списком:
property Components[Index: Integer]: TComponent; | Возвращает указатель на компонент с индексом в списке Index. |
property ComponentCount: Integer; function FindComponent(const AName: string): TComponent; | Возвращает число компонентов в списке. |
Возвращает ссылку на компонент-потомок с заданным именем. | |
procedure InsertComponent(AComponent: TComponent) ; procedure Rerr.oveCornponent (AComponent: TComponent) ; | Вставляет компонент в конец списка. |
Удаляет компонент из списка. | |
procedure DestroyComponents; | Удаляет все компоненты из списка. |
Изменять владельца компонента во время исполнения можно, но без особой необходимости не нужно. Дело в том, что используемый для этого метод RemoveComponent не только вычеркивает компонент из списка, но и обнуляет указатель на него в соответствующем поле владельца. Например, если во время визуального проектирования вы поместили на форму кнопку Buttoni, а затем во время выполнения изменили ее владельца, то все обращения к ней в программе как к Buttoni стали недействительны.
Рассмотрим другие свойства компонента. Он может находиться в одном из множества следующих состояний:
property ComponentState: TCornponentState;
TComponentState = set of (csLoading, csReading, csWriting, csDestroying, csDesigning) ;
Эти состояния используются средой во время визуального проектирования, при загрузке/выгрузке компонентов из файлов ресурсов. Во время исполнения приложения множество состояний пусто. Лишь метод
procedure Destroying;
устанавливает в состоянии компонента флаг csDestroying и вызывает аналогичный метод у всех потомков из списка. Он также используется в деструкторе компонента.
Свойство Designlnfo относится к стадии разработки (конструирования) приложения:
property Designlnfo: Longint;
В нем хранятся координаты верхнего левого угла компонента во время разработки.