Главная » Просмотр файлов » Основы Object Pascal

Основы Object Pascal (551739), страница 6

Файл №551739 Основы Object Pascal (Основы Object Pascal) 6 страницаОсновы Object Pascal (551739) страница 62015-11-14СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 6)

Остальные функции StrToXXX (StrToFloat, StrToDate, и т.д.) работают точно также. Любая из этих функций создает исключительную ситуацию если не может выполнить преобразование строки в число. Например, если пользователь введет S123 вместо 123, возникнет ошибка времени выполнения (исключительная ситуация) так как символ S нельзя интерпретировать как цифру.

Функция Format используется довольно часто. Ее удобно применять для формирования текстов сообщений, содержание которых зависит от переменных параметров. Рассмотрим следующий текст

Спутник выведен на орбиту высотой км.

Здесь угловыми скобками отмечены переменные составляющие текста - параметры. Пусть первый параметр – наименование спутника; второй – одно из слов «расчетную/нерасчетную»; третий параметр – целое число. Следующий фрагмент кода – текст функции, которая возвращает отформатированное сообщение.

function GetSituationTxt(const SatName:string;

Situation:boolean; Altitude:integer):string;

const

sTextToFormat=

’Спутник %s выведен на %s орбиту высотой %d км’;

sSitTxt:array[boolean] of string=

(’нерасчетную’,’расчетную’);

begin

Result:=Format(sTextToFormat,

[SatName, sSitTxt[Situation], Altitude]);

end;

Исходная строка представлена константой sTextToFormat. Символы %s в ней означают, что вместо них надо подставить параметр – строку, а символы %d обозначают место вставки значения целого числа. Подставляемые параметры перечисляют через запятую и заключают в квадратные скобки. Типы значений параметров не должны противоречить символам форматирования. Подробные сведения о форматировании строк функцией Format приведены в следующем разделе.

Форматирование строк

Форматируемая строка, передаваемая в функцию Format может содержать обычный текст и спецификации формата. Текст копируется в результирующую строку без изменения. Спецификация формата извлекает из списка аргументов очередной параметр и преобразует его в строку т.е. форматирует в соответствии с информацией, закодированной в спецификаторе.

Спецификатор формата имеет вид:

% [index :] [-] [width] [. prec] type

Здесь квадратные скобки охватывают необязательные элементы конструкции.

Любая спецификация формата начинается с символа %. После % следуют параметры спецификации в следующем порядке:

индекс аргумента [index:]

признак выравнивания влево, [-]

спецификация ширины, [width]

спецификация точности, [. prec]

код формата, type

Допустимые коды перечислены в следующей таблице:

Код

Описание

d

Десятичный. Соответствующий аргумент должен быть целым числом. Значение аргумента преобразуется в строку десятичных цифр. Если указан спецификатор точности, то отформатированное значение будет содержать это количество символов. Если аргумент содержит меньше цифр, то слева добавляется недостающее число нулей.

e

Научный. Аргумент должен быть вещественным числом. Его значение преобразуется в строку вида "-d.ddd...E+ddd". Знак ставится если число отрицательное. Десятичной точке предшествует всегда одна цифра. Общее число цифр (включая одну перед точкой) определяется спецификатором точности. По умолчанию число цифр равно 15. За символом экспоненты "E" всегда следует знак плюс или минус и, по-крайней мере, 3 цифры.

f

Фиксированный. Аргумент должен быть вещественным числом. Его значение преобразуется в строку вида "-ddd.ddd...". Знак ставится если число отрицательное. Число цифр после точки определяется спецификатором точности. Если спецификатор точности отсутствует после точки по умолчанию будет две цифры.

g

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

n

Числовой. Аргумент должен быть вещественным числом. Его значение преобразуется в строку вида "-d,ddd,ddd.ddd...". Этот формат аналогичен формату "f" с той разницей, что добавляются разделители тысяч.

m

Денежный. Аргумент должен быть вещественным числом. Его значение преобразуется в строку с учетом текущих значений глобальных переменных CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator, CurrencyDecimals, взятых из раздела «Язык и стандарты» панели управления Windows. Если задан спецификатор точности, его значение используется вместо CurrencyDecimals.

p

Адрес. Аргумент должен быть указателем Его значение преобразуется в строку вида "XXXX:YYYY" где XXXX и YYYY сегмент и смещение, выраженные в 16-ричной системе счисления.

s

Строка. Аргумент должен быть символом, строкой типа string или строкой PChar. Строковый аргумент вставляется в результирующую строку вместо спецификатора формата. Спецификатор точности устанавливает максимальную длину результата (количество символов). Если аргумент–строка имеет большую длину, «лишние» символы отбрасываются.

x

Шестнадцатеричный. Аргумент должен быть целым числом. Его значение преобразуется в строку 16-ричных цифр.

Спецификаторы формата можно записывать как строчными, так и заглавными буквами.

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

Значения спецификаторов index, width, и precision могут быть указаны явно (например "%10d"), либо неявно с помощью символа * (например "%*.*f"). В последнем случае следующий по порядку аргумент из списка (он должен быть целым числом) используется как соответствующий спецификатор. Например,

Format('%*.*f', [8, 2, 123.456])

то же самое что и

Format('%8.2f', [123.456]).

Спецификация width задает минимально допустимую ширину поля. Если результирующая строка короче ширины поля, в нее добавляется соответствующее число пробелов. По умолчанию результат выравнивается вправо, но если спецификация формата содержит знак (-), то результат выравнивается влево.

Спецификатор индекса (index) явно указывает на аргумент в списке. Индекс первого аргумента в списке равен 0. Используя спецификацию индекса можно форматировать одни и те же аргументы несколько раз. Например, результатом Format('%d %d %0:d %d', [10, 20]) будет строка вида '10 20 10 20'.

Множества

Поскольку множества используются в Delphi весьма часто, рассмотрим как с ними работать.

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

Как пример множества рассмотрим свойство Style объекта VCL Font (шрифт). Это свойство представляет собой комбинацию признаков начертания символов шрифта. Каждый из признаков имеет стандартное наименование

fsBold – полужирный

fsItalic – наклонный

fsUnderline – подчеркнутый

fsStrikeout – перечеркнутый

Шрифт можно характеризовать любым сочетанием этих признаков или ни одним из них. Иными словами, множество признаков шрифта может быть пустым, оно может содержать все различные признаки или любую комбинацию различных признаков.

В общем случае объявление множества включает определение базового типа (если базовый тип не является стандартным) и самого множества. Базовым может быть любой дискретный (целочисленный) тип с количеством различных элементов не более 256. Таким образом, стандартными базовыми типами элементов множеств являются byte и char.

Базовый тип признаков шрифта в модуле VCL GRAPHICS.PAS объявлен так

type

TFontStyles= (fsBold,fsItalic,fsUnderline,fsStrikeout);

Данное объявление вводит в рассмотрение четыре различных значения. Тип свойства Style шрифта объявлен так

type TFontStyle = set of TFontStyles;

и буквально означает «множество значений типа TFontStyles». При проектировании формы приложения, в свойство–множество Style шрифта можно включать любые различные признаки из числа перечисленных в TFontStyles, отмечая их в окне инспектора объектов. Может возникнуть необходимость изменения состава признаков шрифта непосредственно в процессе выполнения программы, например, в ответ на нажатие какой-либо кнопки. Допустим, что нам необходимо изменить стиль шрифта формы добавлением признаков «полужирный, наклонный». Следующий фрагмент кода показывает как это можно сделать:

procedure Form1.Button1Click(Sender:TObject);

begin

Font.Styles := Font.Styles + [fsBold, fsItalic];

end;

В этом коде в свойство-множество Styles включаются элементы fsBold и fsItalic. Список включаемых элементов находится в квадратных скобках, которые в данном случае называются конструктором множества. Исключить признак наклонного шрифта можно так:

Font.Style := Font.Style – [fsItalic];

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

Допустим, что нам нужно знать, содержится данный элемент в множестве или нет. Например, мы хотим знать обладает ли текущий шрифт признаком «полужирный»? Ответ дает следующий код:

if fsBold in Styles then DoSomething;

Для «очистки» множества используется конструктор пустого множества, например:

Form1.Font.Styles := [];

Следующий пример показывает как инициализировать множество с требуемым составом элементов:

Form1.Font.Styles := [fsBold, fsItalic];

Подобным образом можно модифицировать стиль шрифта любого компонента формы, например,

Memo1.Font.Style:= [];

Memo1.Font.Style:= Memo1.Font.Style + [fsBold, fsItalic];

Совместимость типов данных

Новый термин. Совместимость типов означает, что данные одного типа можно трактовать как данные другого типа. Тем самым, переменные (объекты) родственных типов, можно трактовать как переменные одного и того же общего типа. Принцип совместимости позволяет выполнять преобразование типа переменной. На английском языке это называется typecasting.

Ниже дан пример, показывающий как узнать цифровой код, соответствующий букве «А» латинского алфавита:

procedure TForm1.Button1Click(Sender: TObject);

var

AChar : Char;

AnInteger : Integer;

begin

AChar := 'A';

AnInteger := Integer(AChar);

Label1.Caption := IntToStr(AnInteger);

end;

В этом примере выражение Integer(AChar) есть указание компилятору преобразовать значение переменной AChar типа Char в значение типа Integer. Такое преобразование необходимо постольку поскольку мы не можем присвоить значение типа Char переменной целого типа. Если бы мы сделали такое присваивание, минуя операцию приведения типа, компилятор выдал бы сообщение «Incompatible types: 'Integer' and 'Char' ».

Приведение типов, однако, возможно не всегда. Рассмотрим следующий код:

procedure TForm1.Button1Click(Sender: TObject);

var

Pi : Double;

AnInteger : Integer;

begin

Pi := 3.14;

AnInteger := Integer(Pi);

Label1.Caption := IntToStr(AnInteger);

end;

Здесь мы пытаемся трактовать данные типа Double как данные типа Integer. Это недопустимо. Компилятор выдаст сообщение «Invalid typecast ». Для преобразования вещественного значения в целочисленное необходимо использовать функции Trunc, Floor, или Ceil.

ПРИМЕЧАНИЕ.

Функция Trunc возвращает целую часть вещественного числа

Функция Floor округляет вещественное до ближайшего целого снизу

Функция Ceil округляет вещественное до ближайшего целого сверху

Для преобразования типа указателя используется оператор as. (Указатели рассматриваются в следующем разделе, а использование оператора as объясняется ниже в разделе "Ключевые слова классов is и as."

Указатели

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

Характеристики

Тип файла
Документ
Размер
599,5 Kb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6274
Авторов
на СтудИзбе
315
Средний доход
с одного платного файла
Обучение Подробнее