Программа на Delphi
|J:=-L - 200; |250 |
|B:= J > L; |False |
|B:= (J < L) and (Q[5] = |True |
|'i'); |230 |
|Rec.A:= J-20; |Ошибка. Несоответствие типов |
|Rec.B:= 20; |'d\\d' |
|Rec.B:= S[1]+S[3]+'\d'; | |
11.2. Оператор безусловного перехода
Этот оператор выполняет передачу управления оператору, которому
предшествует метка. Синтаксис оператора:
Goto Метка;
Язык допускает в качестве меток использовать имя или значение целого типа
из диапазона 1 .. 9999.
При использовании операторов перехода необходимо придерживаться следующих
правил:
1. Все метки, используемые в блоке, должны быть описаны словом Label.
Пример оператора описания меток:
Label 1, 2, Met1, Met2, Met3;
2. Метка должна располагаться в том же блоке, что и оператор, который ею
помечен.
3. Недопустим переход к метке внутрь структурного оператора (например,
внутрь цикла, минуя его заголовок). Компилятор не реагирует на эту
ситуацию, однако поведение программы может быть непредсказуемо.
Недопустимы также вход или выход по метке в процедурах или функциях.
П р и м е ч а н и е. Не используйте меток, если в этом нет особой
необходимости. В технике современного программирования использование меток
считается правилом плохого тона, т. к. их применение часто ведет к
составлению плохо структурированных модулей, усложняющих чтение,
сопровождение и отладку программ.
11.3. Оператор обращения к процедуре
Этот оператор вызывает активизацию операторов, расположенных в теле
процедуры (см. параграф 15.1). После выполнения процедуры управление
передается к оператору, расположенному вслед за оператором процедуры.
При вызове процедуры её формальным параметрам должны строго соответствовать
по совместимости типов и количеству фактические параметры.
Примеры обращения к процедурам:
Val (s, r, Code);
Sort (a, n * 2);
SaveParameters;
11.4. Обращение к функции
Следует подчеркнуть, что не существует специального оператора обращения к
функции (см. параграф 15.1). Обычно такое обращение производится
посредством другого оператора, часто оператора присваивания.
Обращение к функции активизирует ее внутренние операторы точно так же, как
это происходит в процедурах. Принципиальное отличие между выполнением
процедуры и функции состоит в следующем:
. после выполнения оператора процедуры управление передается к
следующему за ним оператору;
. после выполнения функции управление вновь передается в оператор,
который содержит обращение к этой функции, с целью передачи в него
вычисленного значения функции и для завершения вычислений внутри этого
оператора.
Поясним это на примере оператора присваивания, содержащего обращение к
функции Func8:
G:= 2 * Pi * Func8(m, n, a) / Sqr (z);
При выполнении этого оператора сначала происходит обращение к функции
Func8. После выполнения операторов, составляющих тело этой функции,
вычисленное значение возвращается в этот оператор, где оно используется для
выполнения дальнейших вычислений внутри оператора.
12. Стандартные процедуры и функции
Язык содержит ряд процедур и функций, которые в практике программирования
ипользуются наиболее часто. Расширенный список процедур и функций, которые
могут найти применение в практике программирования, приведен в приложении.
12.1. Строковые процедуры и функции
1. Function Length (St): LongInt;
Возвращает длину строки символов St, т. е. количество символов в ней
(не путать с размером строки).
St:= '1234abc';
L:= Length(St); {L= 7}
2. Procedure Delete (St, Pos, Num);
Удаляет Num символов из строки St начиная с позиции Pos, если
PosLength (Target), то результат Target + Obj.
St1:= '***';
St2:= '1234abc';
Insert (St1, St2, 3) { St2= '12***34abc'}
4. Procedure Str (Value, St);
Преобразует значение Value числового типа в строку символов St. Value
может сопровождаться форматом.
L:=19;
Str (L, g); {g= '19'}
R:= 2.123155;
Str (R: 8:3, h); {h= ' 2.123' (длина 8, в дробной части 3}
5. Procedure Val (St, Vr, Code);
Преобразует строку символов St в числовую величину Vr целого или
вещественного типа. Code = 0, если преобразование прошло успешно,
иначе в Code будет записан номер первого ошибочного символа
конвертируемой строки, при этом значение Vr не определено.
St:='319';
Val (St, k, Cod); {k= 319, Cod = 0}
St:='81yy9';
Val (St, k, Cod); {k= ?, Cod = 3}
6. Function Copy (St, Pos, Num): String;
Выделяет из строки St подстроку символов длиной Num начиная с позиции
Pos. Если Pos>Length, то возвращает пустую строку.
St1:='АБВГДЕ';
St2:= Copy(St1, 2, 3); {St2= 'БВГ'}
St2:= Copy(St1, 2, 27); {St2= 'БВГДЕ'}
St2:= Copy(St1, 44, 2); {возвращает пустую строку St2= ''}
7. Function Concat (St1, St2{, …, StN}): String;
Объединяет строки в одну строку.
St:='abc';
St1:=Concat( 'sss', St, '1234'); {St1= 'sssabc1234'}
St1:=Concat( St, '123'); {St1= 'abc123'}
8. Function Pos (Obj, Target): Integer;
Возвращает номер символа, начиная с которого строка Obj первый раз
входит в строку Target. Если строка Obj отсутствует в строке Target,
то Pos = 0.
Q:= 'Иванов Сергей Петрович';
H:= Pos ('Сергей', Q); {H= 7}
H:= Pos ('Игорь', Q); {H= 0}
9. Function SizeOf (Obj): Integer;
Возвращает размер переменной Obj.
10. Function FormatFloat(const Format: string; Value: Extended): string;
Возвращает форматированное вещественное значение в виде строки. Format
– формат числа, Value – число. В табл. 14 даны форматы функции
FormatFloat.
Таблица 14
|Формат |Описание |
|0 |Поле для цифры. Недостающие позиции заменяются нулями |
|# |Поле для цифры. Если в позиции имеется значащая цифра, то|
|. |оно выводится. Нули не выводятся |
|, |Разделитель целой и дробной частей |
|E+, E- |Поле разделителя тысяч, миллионов |
| |Формат представления чисел с плавающей точкой. Если "+" |
|; |указан, то перед порядком выводится знак. Если указан |
| |"-", то минус выводится только для отрицательных порядков|
| | |
| |Разделитель форматов |
Примеры действия форматов при конвертации числа в строку представлены в
табл. 15.
Таблица 15
|Формат |Число 1 |Число 2 |Число 3 |Число 4 |
|0 |1234 |-1234 |0.5 |0 |
|0.00 |1234 |-1234 |1 |0 |
|#.## |1234.00 |-1234.00 |0.50 |0.00 |
|#,##0.00 |1234 |-1234 |.5 |0.00 |
|#,##0.00;(#,##0.00|1,234.00 |-1,234.00 |0.50 |0.00 |
|) |1,234.00 |(1,234.00) |0.50 |Zero |
|#,##0.00;;Zero |1,234.00 |-1,234.00 |0.50 |0.000E+00|
|0.000E+00 |.234E+03 |-1.234E+03 |5.000E-01 | |
|#.###E-0 |1.234E3 |-1.234E3 |5E-1 |0E0 |
12.2. Стандартные функции
1. Function Char (X: byte): Char;
Возвращает символ с номером X.
Ch:= Char(74); {Ch= 'J'}
2. Function Ord (X): LongInt;
Возвращает порядковый номер скалярного аргумента.
j:= Ord('J'); {j= 74}
3. Function Round (X: Real): LongInt;
Возвращает округленное до целого значение вещественного аргумента.
j:= Round(12.8235); {j= 13}
4. Function Trunc (X: Real): LongInt;
Возвращает целое путем отбрасывания дробной части вещественного
аргумента.
j:= Round(12.8235); {j= 12}
12.3. Арифметические процедуры и функции
1. Function Frac (X: Extended): Extended;
Возвращает дробную часть аргумента, например:
r:= Frac(-12.82); {r = -0.82, Frac(12.82)=0.82 }
2. Function Abs (X: Extended): Extended;
Возвращает абсолютное значение аргумента, например:
r:= Abs(-12.82); {r = 12.82}
3. Function ArcTan (X: Extended): Extended;
Возвращает арктангенс аргумента.
4. Function Cos (X: Extended): Extended;
Возвращает косинус аргумента.
5. Function Sin (X: Real): Real;
Возвращает синус аргумента.
6. Function ArcCos(X: Extended): Extended;
Возвращает арккосинус аргумента, значение которого должно принадле-
жать отрезку [-1, 1]. Возвращает значение из отрезка [0, Pi].
7. Function ArcSin(X: Extended): Extended;
Возвращает арксинус аргумента, значение которого должно принадле-жать
отрезку [-1, 1]. Возвращает значение из отрезка [-Pi/2, Pi/2].
8. Function ArcTan2(Y, X: Extended): Extended;
Возвращает арктангенс аргументов, вычисляя ArcTan(Y/X) в соответ-ствии
с квадрантами координатной плоскости xOy. Возвращает значение из
отрезка [-Pi, Pi].
9. Function Exp (X: Real): Real;
Возвращает экспоненту аргумента.
10. Function Sinh(X: Extended): Extended;
Возвращает гиперболический синус аргумента.
11. Function Cosh(X: Extended): Extended;
Возвращает гиперболический косинус аргумента.
12. Function Tanh(X: Extended): Extended;
Возвращает гиперболический тангенс аргумента.
13. Function ArcSinh(X: Extended): Extended;
Возвращает гиперболический арксинус аргумента.
14. Function ArcCosh(X: Extended): Extended;
Возвращает гиперболический арккосинус аргумента.
15. Function ArcTanh(X: Extended): Extended;
Возвращает гиперболический арктангенс аргумента.
16. Function Ln (X: Real): Real;
Возвращает натуральный логарифм аргумента.
17. Function Sqr (X: Real): Real;
Возвращает квадрат аргумента.
18. Function Sqrt (X: Real): Real;
Возвращает квадратный корень аргумента.
19. Function Ceil(X: Extended):Integer;
Возвращает наибольшее целое аргумента.
Сeil(-2.8) = -2
Ceil(2.8) = 3
Ceil(-1.0) = -1
20. Function Floor(X: Extended): Integer;
Возвращает наименьшее целое аргумента.
Ceil(-2.8) = -3
Ceil(2.8) = 2
Ceil(-1.0) = -1
21. Function Dec (X, [n]: LongInt): LongInt;
Уменьшает значение аргумента на величину второго параметра. Если он
отсутствует, то уменьшает на 1.
J:=67;
K:=Dec(J); {j= 66}
K:=Dec(J, 13); {j= 53}
22. Function Inc (X, [n]: LongInt): LongInt;
Увеличивает значение аргумента на величину второго параметра. Если он
отсутствует, то увеличивает на 1.
J:=67;
K:=Inc(J); {j= 68}
K:=Inc(J, 13); {j= 81}
12.4. Скалярные функции
1. Function Odd (X: LongInt): Boolean;
Возвращает True, если аргумент четный.
J:=67;
K:=Odd(J); {K= False}
2. Function Pred (X);
Возвращает предшествующее значение типа аргумента.
3. Function Succ (X);
Возвращает последующее значение типа аргумента.
12.5. Процедуры завершения
1. Procedure Exit; Выход из процедуры.
2. Procedure Halt([Code:Word]);
Выход в операционную систему с кодом возврата, если он указан.
12.6. Процедуры и функции для работы с типами "дата/время"
Типы TDateTime и TTimeStamp, а также производные от них типы предназначены
для хранения даты и времени. Эти типы используются в ряде весьма полезных и
необходимых процедур и функций для работы с датами и временем.
1. Function Now: TDateTime;
Возвращает текущую дату и время.
2. Function Date: TDateTime;
Возвращает текущую дату.
3. Function Time: TDateTime;
Возвращает текущее время.
4. Function DateToStr (D: TDateTime): String;
Преобразует дату в строку символов, например:
S:= DateTimeToStr(Date); {текущая дата '26.10.99'}
5. Function TimeToStr(T: TDateTime): String;
Преобразует время в строку символов, например:
S:= TimeToStr(Time); { текущее время '13.58.13'}
6. Function DateTimeToStr(DateTime: TDateTime): String;
Преобразует дату/время в строку символов, например:
S:= DateTimeToStr(Now); { текущие дата и время '26.10.99 14.01.51'}
7. Function DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;
Конвертирует TDateTime в TTimeStamp, например:
TS:= DateTimeToTimeStamp(Now); {type TS = TTimeStamp}
s:= IntToStr(Ts.Date) + ' ' + IntToStr(Ts.Time); {'730053 51095810' –
(прошло дней с 00.00.0000 г. и миллисекунд от полуночи текущего дня}
8. Function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
Конвертирует TTimeStamp в TDateTime.
9. Procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);
Раскладывет дату Date на год, месяц и день, например:
DecodeDate(Now, Y, M, D);
s:= IntToStr(Y) + ' ' + IntToStr(M) + ' ' + IntToStr(M); {'1999 10
26'}
10. .Procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec:
Word);
Раскладывет время Time на час, минуты, секунды и миллисекунды,
например:
DecodeTime(Now, H, M, S, MS);
ss:= IntToStr(H) + ' ' + IntToStr(M) + ' ' + IntToStr(S) + ' ' +
IntToStr(MS);
{'14 22 34 567', т. е. 14 ч 22 мин 34 с 567 мс}
11. .Function EncodeDate(Year, Month, Day: Word): TDateTime;
Противоположна DecodeDate;
12. .Function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;
Противоположна DecodeTime;
13. .Function FormatDateTime(const Frmt: string; DateTime: TDateTime):
string;
Преобразует DateTime в строку с заданным форматом. Если формат пуст,
то функция возвращает строку в формате "c". Следующий оператор
присвоит строковой переменной s значение 'Встреча состоится: пятница,
6 Ноябрь, 1999, в 10:30 AM'.
s:= FormatDateTime('"Встреча состоится:" dddd, mmmm d, yyyy, ' +'"в"
hh:mm AM/PM', StrToDateTime('6.11.99 10:30am'));
Виды форматов даны в табл. 16.
12.7. Прочие процедуры и функции
1. Function Hi(X): byte;
Возвращает старший байт своего целочисленного аргумента.
2. Function Lo(X) : byte;
Возвращает младший байт своего целочисленного аргумента.
3. Procedure Swap(X);
Меняет старший и младший байты целочисленного аргумента местами.
4. Procedure Randomize;
Инициализирует генератор случайных чисел.
5. Function Random(N: Integer): Integer;
Возвращает случайное число из интервала (0, N).
6. Function SizeOf(X) : Integer;
Возвращает число байт, занимаемых аргументом.
7. Procedure Move(Var Source, Dest; Count: Integer);
Копирует Count байт из переменной Source в переменную Dest. В случае
перекрытия областей памяти пересылка в перекрывающуюся область не
производится.
8. Function ParamCount: Word;
Возвращает число параметров, переданных в командной строке.
9. Procedure Break;
Оператор безусловного завершения цикла, процедуры или функции.
10. . Procedure Continue;
Оператор, используемый в цикле для передачи управления в его начало.
Таблица 16
|Формат |Описание |
|C |Показывает сначала дату в формате дд.мм.гг, затем время в |
| |формате чч.мм.сс. Не показывает время, если дробная часть |
|D |DateTime равна нулю |
|Dd |Показывает день без лидирующего нуля (1 – 31) |
|Ddd |Показывает день с лидирующим нулём (01 – 31) |
|Dddd |Показывает день недели в укороченном формате (Вос – Суб) |
|Ddddd |Показывает день недели в полном формате (Воскресенье – Суббота)|
|Dddddd | |
|M |Показывает дату в формате дд.мм.гг. |
|Mm |Показывает дату в формате д Месяц год |
|Mmm |Показывает месяц без лидирующего нуля (1 – 12) |
|Mmmm |Показывает месяц с лидирующим нулём (01 – 12) |
|Yy |Показывает месяц в сокращенном виде (Янв – Дек) |
|Yyyy |Показывает месяц в полном формате (Январь – Декабрь) |
|h |Показывает год в виде двух последних цифр (00 – 99) |
|hh |Показывает год в виде четырех цифр (00000 – 9999) |
|n |Показывает час без лидирующего нуля (0 – 23) |
|nn |Показывает час с лидирующим нулем (00 – 23) |
|s |Показывает минуту без лидирующего нуля (0 – 59) |
|ss |Показывает минуту с лидирующим нулем (00 – 59) |
|t |Показывает секунду без лидирующего нуля (0 – 59) |
|tt |Показывает секунду с лидирующим нулем (00 – 59) |
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
|