Borland delphi 4 0 для начинающих типы данных структурные типы
Delphi 4 для начинающих. Часть 3
Разгребаясь с письмами читателей, я решил начать следующую статью с работы с файлами и строковыми переменными. На такой ход меня натолкнуло следующее письмо: «Я только начал программировать на Delphi. У меня к вам большая просьба: при создании различных программ часто приходится работать с файлами (создавать, удалять, копировать, переписывать файлы), не могли бы вы в ближайшем номере «Компьютерной газеты» мне рассказать о методах работы с файлами». Что ж, желание просящих выполняю.
Подавляющее большинство приложений, с которыми работает пользователь, должно как-то сохранять результаты своей работы, сохранять изменения в настройках. Для сохранения настроек приложения зачастую используют системный реестр, а вот для сохранения конечных данных приходится использовать файлы или базы данных. О базах данных мы поговорим в будущих статьях, а о работе с файлами я поведаю Вам уже сейчас.
Для использования файлов в приложении разработчику приходится решать множество задач. Основные из них – это поиск необходимого файла и выполнение с ним операций ввода/вывода.
Основные принципы и структура файловой системы мало изменились еще со времен MS-DOS. Если не принимать во внимание способы защиты файлов и организацию их хранения на уровне кластеров, то все остается без изменений вот уже скоро двадцать лет. Новые варианты файловых систем (FAT32, NTFS) не изменяют главного – понятия файла и способов обращения к нему. Поэтому современный программный код Delphi, например, для чтения данных из файла, удивительно похож на аналогичный, написанный, к примеру, на Turbo Pascal 4.0.
При организации операций файлового ввода/вывода в приложении большое значение имеет тип используемых данных. В основном это строки, но встречаются числовые данные или структурированная информация, например, записи или массивы данных. О типе хранимых в файле данных необходимо знать заранее. Для работы с файлами необходимо для начала описать тип файла. Для этого используются специальные файловые переменные. Они делятся на нетипизированные и типизированные. В Delphi имеется одна нетипизированная переменная. Для ее обозначения используется ключевое слово file :
Такие файловые переменные используются для организации быстрого и эффективного ввода/вывода безотносительно к типу данных. При этом подразумевается, что данные читаются или записываются в виде двоичного массива. Для этого используются специальные процедуры блочного чтения и записи.
Типизированные файловые переменные обеспечивают ввод/вывод с учетом конкретного типа данных. Для их объявления используется ключевое слово file of, к которому добавляется конкретный тип данных. Например, для работы с двоичным файлом файловая переменная будет иметь вид:
v ar ByteFile: file of byte;
При этом можно использовать любые типы фиксированного размера, за исключением указателей. Разрешается использовать структурные типы, если их составные части удовлетворяют названному выше ограничению. Например, можно создать файловую переменную для записи:
type Country = record
var CountryFile: file of Country;
Для работы с текстовыми файлами используется специальная файловая переменная TextFile или Text :
Теперь, после рассмотрения типов файлов, рассмотрим две наиболее распространенные операции, выполняемые с файлами: чтение и запись. Для их выполнения применяются специальные функции файлового ввода/вывода.
Итак, для выполнения операции чтения и/или записи необходимо выполнить следующие действия:
- Объявить файловую переменную;
- При помощи функции AssignFile связать эту переменную с требуемым файлом;
- Открыть файл при помощи функций Append, Reset или Rewrite;
- Выполнить операции чтения и/или записи. При этом, в зависимости от сложности задачи и структуры данных, может использоваться целый ряд вспомогательных функций.
- Закрыть файл при помощи функции CloseFile .
В качестве примера рассмотрим небольшой фрагмент исходного кода программы:
If OpenDlg1.Execute then AssignFile(F, OpenDlg1.fileName) else exit;
While Not EOF(F) do
Если в диалоге OpenDlg1 был выбран файл, то его имя связывается с файловой переменной F при помощи процедуры AssignFile . В качестве имени файла всегда рекомендуется передавать полное имя файла (включая путь к нему). Как раз в таком виде возвращают результат выбора файла диалоги работы с файлами, описанные в материале прошлого номера. Затем при помощи процедуры Reset этот файл открывается для чтения и записи. В цикле осуществляется чтение из файла текстовых строк и запись их в компонент TMemo . Процедура Readln осуществляет чтение текущей строки файла и переходит на следующую строку. Цикл выполняется до тех пор, пока функция EOF не сообщит о достижении конца. По завершении цикла файл закрывается.
Теперь остановимся поподробнее на назначении функций, используемых для файлового ввода/вывода. Открытие файла может осуществляться тремя процедурами:
procedure Reset(var F [: File; RecSize: Word ] ); — открывает существующий файл для чтений и записи, текущая позиция устанавливается на первой строке файла;
procedure Append(var F: Text); — открывает файл для записи информации после его последней строки, текущая позиция устанавливается на конец файла;
procedure Rewrite(var F: File [; Recsize: Word ] ); — создает новый файл и открывает его, текущая позиция устанавливается в начало файла. Если файл с таким именем уже существует, то он перезаписывается.
Чтение данных из файла выполняют процедуры Read и Readln.
procedure Read( [ var F: Text; ] V1 [, V2. Vn ] ); — для текстовых файлов;
Procedure Read(F, V1 [, V2,…,Vn ] ); — для типизированных файлов.
При одном вызове процедуры можно читать данные в произвольное число переменных. Естественно, тип переменных должен совпадать с типом файла. При чтении в очередную переменную читается ровно столько байт из файла, сколько занимает тип данных. В следующую переменную читается столько же байт, расположенных следом. После выполнения процедуры текущая позиция устанавливается на первом непрочитанном байте. Аналогично работают несколько процедур Read для одной переменной, выполненных подряд.
procedure Readln([ var F: Text; ] V1 [, V2, . Vn ]); — считывает одну строку текстового файла и устанавливает текущую позицию на следующую строку. Если использовать процедуру без переменных, то она просто передвигает текущую позицию на следующую строку.
Процедуры для записи данных в файл Write и Writeln работают аналогично.
Для контроля за текущей позицией в файле применяются две основные функции. Функция EOF возвращает значение True, если достигнут конец файла. Функция EOLN сигнализирует о достижении конца строки. В качестве параметра в функции необходимо передавать файловую переменную.
procedure Seek(var F; N: Longint); — обеспечивает смещение текущей позиции на N элементов. Размер одного элемента в байтах зависит от типа данных файла (от типизированной переменной).
Рассмотрим теперь режим блочного чтения и записи в файл. Он обеспечивает ввод/вывод данных между файлом и областью адресного пространства (буфером). Этот режим отличается значительной скоростью, причем скорость пропорциональна размеру одного передаваемого блока – чем больше блок, тем больше скорость.
Для реализации этого режима необходимо использовать только нетипизированные файловые переменные. Размер блока определяется в процедуре открытия файла ( Reset, Rewrite, Append ). Непосредственно для выполнения операций используются процедуры BlockRead и BlockWrite . Процедура
procedure BlockRead(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);
выполняет запись блока из памяти в файл. При этом параметр F содержит нетипизированную файловую переменную, связанную с нужным файлом, параметр Buf определяет переменную (число, строку, массив, структуру), в которую читаются байты из файла, параметр Count определяет число считываемых блоков, а параметр AmtTransferred возвращает число реально считанных блоков.
В блочном режиме чтения/записи размер блока необходимо выбирать таким образом, чтобы он был кратен размеру одному значению типа, который хранится в файле. Например, если в файле хранятся значения типа Double (8 байт), то размер блока может быть равен 8, 16, 24, 32 и т.д. Фрагмент исходного кода блочного чтения из такого файла выглядит так:
DoubleArray: array [0..255] of Double;
If OpenDlg.Execute then AssignFile(F, OpenDlg.FileName) else Exit;
BlockRead(F, DoubleArray, 32, Transfered);
ShowMessage(‘Считано ‘+IntToStr(Transfered)+’ блок(-а,-ов)’);
Как видно из примера, размер блока установлен в процедуре Reset и кратен размеру элемента массива DoubleArray, в который считываются данные. В переменную Transfered возвращается число считанных блоков. Если размер файла меньше заданного в процедуре BlockRead числа блоков, ошибка не возникает, а в переменную Transfered передается число реально считанных блоков.
Обратите внимание, что для процедуры BlockRead организовывать цикл для чтения нескольких блоков нет необходимости.
procedure BlockWrite(var f: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);
Еще одна часто выполняемая с файлом операция – поиск файлов в заданном каталоге. Для организации поиска и отбора файлов используются специальные процедуры, а также структура, в которой сохраняются результаты поиска.
Эта запись обеспечивает хранение характеристик файла при удачном поиске. Дата и время создания файла хранятся в формате MS-DOS, поэтому для получения этих параметров в формате TDateTime необходимо использовать функцию
function FileDateToDateTime(FileDate: Integer): TDateTime;
Обратное преобразование выполняет функция
function DateTimeToFileDate(DateTime: TDateTime): Integer;
Свойство Attr может содержать комбинацию следующих значений:
faReadOnly – только для чтения;
Для определения параметров файла используется оператор AND :
If SearchRec.Attr AND faReadOnly) > 0 then ShowMessage(‘ файл только для чтения’);
Непосредственно для поиска файлов используются функции FindFirst и FindNext .
function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;
находит первый файл, заданный полным маршрутом Path и параметрами Attr . Если заданный файл найден, функция возвращает 0, иначе – код ошибки. Параметры найденного файла возвращаются в записи F типа TSearchRec .
function FindNext(var F: TSearchRec): Integer;
используется для поиска файла. При этом используются параметры поиска, заданные последним вызовом функции FindFirst . В случае удачного поиска возвращается 0.
Для освобождения ресурсов, выделенных для выполнения поиска, применяется функция
procedure FindClose(var F: TSearchRec);
В качестве примера организации поиска файлов рассмотрим фрагмент исходного кода, в котором маршрут поиска файлов задается в однострочном текстовом редакторе DirEdit, а список найденных файлов передается в компонент TListBox.
FindFirst(DirEdit.Text, faArchive + faHidden, SearchRec);
While FindNext(SearchRec) = 0 do
Напоследок, как и обещал в прошлом номере, немного о создании дополнительных форм. Итак, для создания дополнительной формы необходимо воспользоваться пунктом меню New Form ( File/New Form ) или кнопкой New Form на панели инструментов. Перед Вами появится новая форма проекта с названием Form2 . При запуске программы эта форма не будет активизирована. Для ее запуска необходимо воспользоваться процедурой Show из кода исходной программы. Список существующих форм и возможность активизация форм проекта доступны при нажатии на кнопку ViewForm на панели инструментов или при нажатии на пункт Forms… ( View/Forms… ). Таким образом, необязательно загромождать экран бесконечными формами проекта, когда на данный момент из них необходима только одна. Достаточно закрыть ненужные формы, а при необходимости активизировать их при помощи диалога ViewForm .
Borland delphi 4 0 для начинающих типы данных структурные типы
Школа программирования Delphi
Портал DelphiSchool является бесплатным проектом, обеспечивающим пользователям быстрый и легкий доступ к урокам программирования на Delphi. Сайт позволяет научиться программировать на Делфи любому, кто хочеть писать свои программы, игры, Android приложения, программы для MAC OC или IOS. Кроме уроков Delphi и статей Delphi, на сайте доступны также и видеоуроки. Практически к каждому уроку, пользователю доступен исходник, изучив который, он сможет наглядно посмотреть как работает та или иная программа, написанная на Делфи. Кроме того мы постараемся прилагать к каждому материалу (статье, уроку, видеоуроку) файлы Delphi, которые будут помогать изучить предоставленный материал.
Каждый кто решил написать свою программу, создать свое приложение, научиться программировать и т.д., найдет на DelphiSchool статьи Delphi, уроки Delphi, видеоуроки Delphi, исходники Delphi, файлы Delphi, изучит компоненты Delphi, посмотрит Delphi примеры и многое другое абсолютно бесплатно. Все о Delphi программировании теперь собрано на одном сайте.
DelphiSchool
В языке программирования Delphi все должно иметь свой тип. Delphi требует явного указания всех типов. Существует четыре простых типа данных: целые числа, вещественные числа (дробные), строки и булевые значения.
Все переменные должны относиться к какому-то типу. Поскольку переменная — это область памяти, где хранится определенная информация, то для того, чтобы знать, что хранится в этой памяти, мы должны указать компилятору, к какому типу относится переменная. Если переменная относится к типу целых чисел, то в памяти, отведенной под переменную, хранится целое число.
В переменных целого типа, информация представляется в виде чисел, которые не имеют дробной части. Такие числа используются для математических вычислений и любых других операций, в которых требуется работа с числами.
Существует несколько видов целых типов данных. В основном они отличаются только размером отводимой переменным памяти для хранения данных.
В таблице ниже перечислены все типы целых чисел. В примечании указано, какого типа могут быть эти числа — со знаком или без (т. е. только положительные или могут быть и отрицательными). В зависимости от объема памяти, отводимого переменной для хранения данных, определяется максимальное число, которое можно записать в эту переменную.
Таблица. Типы целочисленных переменных
Название
Размер памяти для хранения данных
Простые типы данных
Введение
В предыдущих уроках мы между делом знакомились с типами данных. Всё это время речь шла о простых типах. Сегодня мы обобщим пройденное ранее, а также познакомимся с новым материалом, который необходимо знать в рамках темы «Простые типы данных». Осмысленно подходить к выбору типов данных для используемых в программах переменных необходимо по разным причинам. Во-первых, имея под рукой многообразие доступных типов и умело ими распоряжаясь, можно сократить объём памяти, требуемый программе для работы. Экономию в 1-2 байта никто не заметит, но если речь идёт о больших объёмах данных, эти байты могут вылиться во вполне реальные мегабайты. Во-вторых, разумный выбор типов данных позволяет избежать некоторых ошибок, причём как со стороны программиста (на этапе создания программы), так со стороны пользователя (во время использования программы).
Простые типы данных — общее представление
Простые типы данных названы простыми, потому что они не содержат внутри себя никаких других типов. Кроме того, простые типы данных обеспечивают хранение в памяти только одного значения. К простым типам данных относят следующие:
- целочисленные;
- вещественные;
- логические;
- строковые (символьные).
Следует отметить, что все эти типы за исключением вещественного, упорядочены. Что это значит? А это значит, что в рамках данного типа значения расположены не в произвольном порядке, а в порядке возрастания. Зная об этом, в некоторых случаях можно исключить в своей программе лишний код. Поясню на примере, как именно упорядочены значения в этих типах данных:
Целочисленный тип — содержит числовые значения, целые числа. Числа упорядочены по возрастанию: . -2, -1, 0, 1, 2, 3, .
Логический тип — содержит всего 2 значения — True, False, которые тоже упорядочены: False, True (следует из соответствия False — 0, True — 1).
Символьный тип — символы кодовой таблицы. Поскольку каждому символу соответствует свой код, то символы расположены в порядке увеличения кода. К примеру, буквы латинского алфавита A, B, C, D, . идут в кодовой таблице именно так, т.к. чем дальше от начала алфавита, тем больший код имеет буква. То же самое касается и арабских чисел в кодовой таблице — они идут по порядку: 0, 1, 2, . 8, 9. Это позволяет делать такие сравнения, как, например ‘A’ Pred() — функция возвращает предыдущее значение для выражения, указанного в качестве единственного аргумента.
Примеры: Pred(5) = 4, Pred(‘E’) = ‘D’, Pred(True) = False.
Succ() — функция, обратная для Pred() — возвращает следующее значение.
Примеры: Succ(5) = 6, Succ(‘E’) = ‘F’, Succ(False) = True.
Ord() — возвращает порядковый номер значения в списке значений типа данных. С этой функцией мы уже встречались при работе со строками — с её помощью мы узнавали код символа.
Примеры: Ord(‘A’) = 65, Ord(True) = 1.
Low() — возвращает минимальное значение указанного типа данных.
Примеры: Low(Byte) = 0, Low(Boolean) = False, Low(Char) = #0 (символ с кодом 0).
High() — возвращает максимальное значение указанного типа данных.
Примеры: High(Byte) = 255, High(Boolean) = True, High(Char) = #255 (в русской локали это символ «я»).
Ну и ещё две процедуры, с которыми мы уже знакомы:
Dec() — уменьшает значение на единицу.
Inc() — увеличивает значение на единицу.
Не забывайте о втором необязательном параметре этих процедур.
Пользовательские типы данных
На основе порядковых типов данных программист может создать свои собственные типы — перечислимые и интервальные. Они будут рассмотрены ниже.
Целочисленные типы
Как следует из названия, целочисленные типы позволяют хранить целые числа. Среди них есть типы, которые хранят числа со знаком (т.е. положительные или отрицательные), а есть и такие, которые хранят только положительные. Чем большее количество значений может содержать тип, тем больше памяти он занимает. Рассмотрим целочисленные типы данных.
Сначала рассмотрим беззнаковые типы, т.е. те, которые позволяют хранить только положительные числа и ноль:
Byte — значения 0..255 — занимает в памяти 1 байт.
Word — значения 0..65535 — 2 байта.
LongWord — значения 0..4294967295 — 4 байта.
Теперь типы со знаком (отрицательные числа записываются со знаком минус «-» впереди, неотрицательные могут записываться как со знаком «+», так и без него):
ShortInt — значения -128..127 — 1 байт.
SmallInt — значения -32768..32767 — 2 байта.
LongInt — значения -2147483648..2147483647 — 4 байта.
Int64 — значения -2 ^53 ..2 ^53 -1 — 8 байт.
Существуют также 2 общих типа, которые находят своё отражение в вышеперечисленных. Рекомендуется использовать именно эти типы, т.к. компилятор «заточен» под них и создаёт более быстрый и эффективный код:
Integer — значения -2147483648..2147483647 — 4 байта.
Cardinal — значения 0..4294967295 — 4 байта.
Следует отметить, что целые числа могут быть представлены не только в десятичной, но и в шестнадцатеричной системе счисления, т.е. в виде $xxxxxxxx, где x — один из символов 0, 1, . 8, 9, A, B, . E, F. К примеру, все цвета (точнее, их коды) представляются именно в виде шестнадцатеричных чисел.
Логические типы
С логическими выражениями и с логическим типом данных мы уже знакомы — это тип Boolean , принимающий значения True и False. Помимо Boolean существуют следующие логические типы: ByteBool , WordBool и LongBool . Однако последние введены лишь для обспечения совместимости с другими языками и системами программирования. Использовать рекомендуется только тип Boolean. Логическое значение в памяти занимает 1 байт. На самом деле, конечно, достаточно и одного бита, но оперировать ячейками меньше байта, мы, к сожалению, не можем.
Символьные типы
Символьные типы обеспечивают хранение отдельных символов. Основной тип данных — Char , который содержит символы с кодами 0..255. Существуют ещё типы AnsiChar и WideChar . Тип AnsiChar эквивалентен типу Char, т.е. по сути это один и тот же тип. Занимает в памяти 1 байт. Для кодирования символов используется код ANSI (American National Standards Institute). Тип WideChar кодируется международным кодом Unicode и занимает в памяти 2 байта. Таблица Unicode включает символы практически всех языков мира.
Вещественные типы
Из названия следует, что эти типы используются для хранения вещественных, т.е. действительных чисел. Отличаются они границами допустимых значений и точностью, т.е. числом цифр после запятой. Вот эти типы:
Real (он же Double ) — значения от 5.0×10 ^-324 до 1.7×10 ^308 , точность — 15-16 цифр, занимает в памяти 8 байт.
Real48 — значения от 2.9×10 ^-39 до 1.7×10 ^38 , точность — 11-12 цифр, 6 байт памяти.
Single — значения от 1.7×10 ^-45 до 3.4×10 ^38 , точность — 7-8 цифр, 4 байта.
Extended — от 3.6×10 ^-4951 до 1.1×10 ^4932 , точность — 19-20 цифр, 10 байт памяти.
Comp — от -2×10 ^63 +1 до 2×10 ^63 -1, точность — 19-20 цифр, 8 байт.
Currency — от -922337203685477.5808 до 922337203685477.5807, точность — 19-20 цифр, в памяти занимает 8 байт.
Как и в случае с целыми числами, перед вещественными числами может стоять знак «+» или «-«.
Существует 2 формы записи вещественных чисел — с фиксированной точкой и с плавающей.
Запись с фиксированной точкой представляет собой обычную запись, в которой целая и дробная части отделены друг от друга точкой/запятой.
Запись с плавающей точкой подразумевает запись порядка числа, который отделяется от самого числа буквой «E» (запись «e» тоже допустима). Например, запись 1.5e2 означает число 1.5 с порядком +2, т.е. это 1.5×10 ^2 = 150.
Типы Comp и Currency были введены специально для произведения точных денежных расчётов. При этом, тип Comp, как видно из значений границ диапазона, хранит целые числа, поэтому при задании чисел с дробной частью они автоматически преобразуются в ближайшее целое число.
Перечислимые типы данных
От рассмотрения готовых типов данных перейдём к типам, которые могут быть созданы самим программистом. Один из вариантов, как было отмечено выше, — это перечислимый тип.
Смысл перечислимого типа в том, что мы явным образом указываем (перечисляем) все возможные значения. Преимущества в том, что кроме заданных значений переменные этого типа не смогут принимать больше никаких значений. Кроме того, значения можно задавать вполне осмысленные — например слова. Это упростит понимание кода и написание программы.
Значения типа данных перечисляются через запятую, а весь этот набор заключается в круглые скобки. Описание типа должно производиться в специальном разделе раздела описаний — разделе описания типов. Этот раздел предваряется ключевым словом type . Т.е. запись идёт приблизительно так же, как и описание переменных или констант, только вместо var и const пишется type. Сам тип описывается следующим образом: название типа, далее знак равенства и далее само значение. В случае с перечислимым типом это будет набор возможных значений.
Примечание: практически все типы данных в Object Pascal принято называть с буквы «T» (сокращённо от «Type»). Это не закон языка — просто одно из правил хорошего тона. Зная, что «T***» — это тип, вы никогда не ошибётесь, в противном же случае название можно спутать, например, с названием переменной.
Допустим, мы хотии задать тип данных, определяющий один из месяцев года. Мы можем описать его так:
Обратите внимание, что после описания перечислимого типа в программе не может быть переменных, название которых совпадает с названием значений объявленного типа. В нашем примере не может быть переменных «Jan», «Feb» и т.д. При попытке присвоения переменной перечислимого типа значение, не указанное в списке, компилятор выдаст ошибку, поэтому ошибиться не представляется возможным.
Раздел type существует как в модуле всей формы (в этом разделе изначально описана сама форма: TForm1 = class(TForm) . ), так и в любой подпрограмме. Область действия типа, соответственно, определяется местом в программе, в котором он описан.
Интервальные типы данных
Интервальные типы данных (также их называют ограниченными) получаются из имеющихся типов путём ограничения диапазона значений. Интервал задаётся двумя константами — начальной и конечной границей. При каждом присвоении значения переменной выполняется проверка соответствия нового значения указанному диапазону. Если значение не попадает в диапазон, выдаётся сообщение об ошибке. Во время выполнения программы задание недопустимого значения к ошибке не приводит, зато значение переменной может стать неверным.
Ограниченный тип данных можно создать только на основе простого упорядоченного типа. Значение второй константы (т.е. правой границы) должно быть больше значения первой (левой границы).
Ограниченные типы данных также описывают в разделе type. Формат записи похожий, только между константами-границами ставятся две точки.
Например, мы хотим в программе работать с датами. Можно создать ограниченные типы данных для значений дня, месяца и года (диапазон для значения года следует задать в зависимости от контекста задачи):
Помните, что использование ограниченного типа данных не уменьшит объём занимаемой памяти. Это следует из того, что задание интервала — это всего лишь условное задание возможных значений из общего набора значений данного типа.
Заключение
Сегодня мы рассмотрели простые типы данных — целочисленные, вещественные, символьные и логические, а также научились создавать перечислимые и интервальные типы данных в своих программах. Как было отмечено в начале, все эти типы позволяют хранить только одно значение и не содержат внутри себя других типов. В дальнейшем мы перейдём к рассмотрению структурных типов данных, где дело обстоит иначе.
Автор: Ерёмин А.А.
Статья добавлена: 12 июня 2008
Зарегистрируйтесь/авторизируйтесь,
чтобы оценивать статьи.
Статьи, похожие по тематике
Для вставки ссылки на данную статью на другом сайте используйте следующий HTML-код:
Ссылка для форумов (BBCode):
Быстрая вставка ссылки на статью в сообщениях на сайте:
<
<<статья:122>> — полноценная HTML-ссылка на статью (текст ссылки — название статьи).
Поделитесь ссылкой в социальных сетях:
Комментарии читателей к данной статье
Репутация: +40 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Репутация: нет | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Репутация: +1 |
Было было. где-то в первых ‘уроках’. Кстати чё-то в паскале не помню инта64, как впрочем и реала48. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Репутация: +40 |
При использовании Delphi 2009 — да, там есть поддержка Юникода. А вам нужны греческие и японские? И они на клавиатуре у вас есть? > в одном из предыдущих уроков Вы говорили, что рассскажете про этот момент |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Репутация: -1 |
В качестве параметра все буквы русского, латинского, греческого, японского. и всех остальных языков, а так же все существующие служебные символы. в одном из предыдущих уроков Вы говорили, что рассскажете про этот момент, отсюда собственно и возник вопрос. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Репутация: +40 |
Кажется, вопрос не по теме урока. А как сделать — обработать событие OnKeyDown или OnKeyPress. У второго в качестве параметра введённый символ. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Репутация: -1 |
Оставлять комментарии к статьям могут только зарегистрированные пользователи. Borland delphi 4 0 для начинающих типы данных структурные типыВ этом уроке мы раскроем важную тему собственных типов данных, ее не знание будет очень сильно вас ограничивать в плане удобства програмирования и построения правильной архитектуры приложения. При создании любой серьёзной программы не обойтись без дополнительных, более сложных, чем числа и строки, типов данных. В Delphi программист может для своих целей конструировать собственные типы данных. Чтобы ввести в программу (описать) новый тип данных, применяется оператор с ключевым словом type: Перечислимый тип — это тип данных, диапазоном значений которого является просто набор идентификаторов. Это может применяться в тех случаях, когда нужно описать тип данных, значения которого нагляднее представить не числами, а словами. Перечислимый тип записывается взятой в круглые скобки последовательностью идентификаторов — значений этого типа, перечисляемых через запятую. При этом, первые элементы типа считаются младшими по сравнению с идущими следом. Например, тип, описывающий названия футбольных команд, можно сформировать так: Вообще, под перечислимыми типами понимают все типы, для которых можно определить последовательность значений и их старшинство. К ним относятся:
Структурные типы данных используются практически в любой программе. Это такие типы, как
Массив — это структура данных, доступ к элементам которой осуществляется по номеру (или индексу). Все элементы массива имеют одинаковый тип. Вместо присвоения типа можно явно описать переменные как массивы: Для доступа к элементу массива нужно указать имя массива и индекс элемента в квадратных скобках. В качестве индекса может выступать число, идентификатор или выражение, значение которых должно укладываться в диапазон, заданный при описании массива: Иногда требуется узнать верхнюю границу массива. Встроенная функция High() вернёт число, являющееся верхней границей массива. В скобки нужно подставить массив, верхнюю границу которого требуется узнать. Выражение: Означает, что каждый элемент массива B равен элементу с таким же индексом массива A. Такое присвоение возможно только если переменные объявлены через некий поименованный тип, или перечислены в одном списке. И в случае: его использовать невозможно (но возможно поэлементное присвоение B[1] := A[2]; и т.д.). Массивы могут иметь несколько измерений, перечисляемых через запятую. Например, таблицу из четырёх столбцов и трёх строк:
Можно описать в виде массива с двумя измерениями: Теперь в результате операции присвоения Y будет равен 7.
S-e-m Здесь m – знаковый разряд числа; e – экспоненциальная часть (содержит двоичный порядок); m – мантисса числа. Мантисса m имеет длину от 23 (для Single) до 63 (для Extended) двоичных разрядов, что и обеспечивает точность 7-8 для Single и 19-20 для Extended десятичных цифр. Десятичная точка(запятая) подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом она сдвигается влево и вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называют арифметикой с плавающей точкой(запятой). К порядковым типам относятся целые типы, логический и символьный типы, а так же перечисления и тип-диапазон(пользовательский тип). К любому из них применима функция ORD(X) , которая возвращает порядковый номер значения выражения X. Для целых типов ORD(X) возвращает само значение X. Применение к логическому, символьному и к перечислениям дает «+» целое число в диапазоне 0-1(лог. тип), 0-255 (символьный), 0-65535 (перечисление). У типа-диапазон результат применения ord(x) зависит от свойств базового порядкового типа. SUCC(X)– возвращает следующее значение порядкового типа( ord(succ(x)) = ord(x)+1).
К типам применимы следующие функции : Abs(x)–возвращает модуль X Chr(x)–возвращает символ по его коду Dec(x)–уменьшает значение на 1 Inc(x)–увеличивает значение на 1 Mod–дробная часть деления Sqr(x)–возвращает квадрат X А так же операции *,/,+,—. 12.Порядковые типы. Символьный тип. Таблица символов. Тип ANSIChar представляет собой так называемые Ansi-символы. Это символы, которые используются в операционных системах семейства Windows(размером 1 байт). Тип WideChar предназначен для хранения так называемых Unicode-символов, которые в отличие от Ansi-симвояов занимают два байта. Это позволяет кодировать символы числами от 0 до 65535 и используется для представления различных азиатских алфавитов. Первые 256 символов в стандарте Unicode совпадают с символами Аnsi.Тип Char в Delphi 7 эквивалентен типу AnsiChar и обеспечивает наибольшую производительность. Для отображения множества символов в подмножество натуральных чисел и обратно имеются следующие две стандартные функции: ord(c) — дает порядковый номер символа с; 14.Порядковые типы. Перечисляемый тип.(пользовательский тип) Описание переменных : var snd:TSound; 15.Тип массив(статический) : описание, ввод, вывод. Форматный вывод.
16.Тип запись : описание, ввод, вывод, Оператор With. Запись с вариантами.
S2:=[‘2’,’3’,’1’]; 18.Текстовый файл : описание файловой переменной, основные операции. Использование параметров программы для передачи программе имен файлов. Основные операторы для работы с текстовыми файлами: Операторы ввода-вывода: Все параметры трактуются как отдельные строки (string). Параметры пользователя нумеруются, начиная с единицы. В нулевом параметре ParamStr(0) ОС передает программе полное имя запускаемого приложения (например, D:\Гречкина\Project1.exe). Этот (нулевой) параметр не входит в общее число параметров, которое можно узнать с помощью функции ParamCount: function ParamCount: word. procedure имя процедуры (формальные параметры); раздел описаний процедурыbegin исполняемая часть процедурыend; … function имя функции (формальные параметры):тип результата; раздел описаний функции begin Формальный параметр-значение обрабатывается, как локальная по отношению к процедуре или функции переменная, за исключением того, что он получает свое начальное значение из соответствующего фактического параметра при активизации процедуры или функции. Изменения, которые претерпевает формальный параметр-значение, не влияют на значение фактического параметра. implementation begin end. При восходящем подходе программа собирается и тестируется снизу вверх. Только модули самого нижнего уровня (модули, не вызывающие других модулей) тестируются независимо, автономно. После того как тестирование этих модулей завершено, вызов их должен быть так же надежен, как вызов встроенной функции языка или оператор присваивания. Затем тестируются модули, непосредственно вызывающие уже проверенные. Эти модули более высокого уровня тестируются не автономно, а вместе с уже проверенными модулями более низкого уровня. Процесс повторяется до тех пор, пока не будет достигнута вершина. Здесь завершаются и тестирование модулей, и тестирование сопряжений программы. Для каждого модуля необходимо написать небольшую ведущую программу. Глава 3.Типы данныхПохожие главы из других книгТипы данныхГлава 1 Типы данных, услоные операторы и массиы VBAГлава 1 Типы данных, услоные операторы и массиы VBA Типы данныхТипы данных Один из этапов проектирования базы данных заключается в объявлении типа каждого поля, что позволяет процессору базы данных эффективно сохранять и извлекать данные. В SQL Server предусмотрено использование 21 типа данных, которые перечислены в табл. 1.1.Таблица 1.1. 12.2. Типы баз данных12.2. Типы баз данных Группу связанных между собой элементов данных называют обычно записью. Известны три основных типа организации данных и связей между ними: иерархический (в виде дерева), сетевой и реляционный.Иерархическая БДВ иерархической БД существует Типы данныхТипы данных В JScript поддерживаются шесть типов данных, главными из которых являются числа, строки, объекты и логические данные. Оставшиеся два типа — это null (пустой тип) и undefined (неопределенный Типы данныхТипы данных Приведенные в этой главе таблицы взяты непосредственно из оперативной справочной системы и представляют единую модель данных Windows (Windows Uniform Data Model). Определения типов можно найти в заголовочном файле BASETSD.H, входящем в состав интегрированной среды разработки 14.5.1 Типы данных14.5.1 Типы данных Файл может содержать текст ASCII, EBCDIC или двоичный образ данных (существует еще тип, называемый локальным или логическим байтом и применяемый для компьютеров с размером байта в 11 бит). Текстовый файл может содержать обычный текст или текст, форматированный 20.10.3 Типы данных MIB20.10.3 Типы данных MIB Причиной широкого распространения SNMP стало то, что проектировщики придерживались правила «Будь проще!»? Все данные MIB состоят из простых скалярных переменных, хотя отдельные части MIB могут быть логически организованы в таблицы.? Только небольшое число Глава 3.Типы данныхТипы данныхТипы данных Многие языки программирования при объявлении переменной требуют указывать, какой тип данных будет ей присваиваться. Например, в языке Java кодint i = 15;объявит переменную целого типа int с именем i и присвоит ей значение 15. В этом случае тип данных ставится в 5.2.4. Типы данных5.2.4. Типы данных Мы можем вводить в ячейки следующие данные: текст, числа, даты, также приложение Numbers предоставляет возможность добавлять флажки, ползунки и другие элементы управления. Аналогично MS Excel для выравнивания чисел, дат и текстовых данных в Numbers существуют ГЛАВА 9. Числовые типы данных.ГЛАВА 9. Числовые типы данных. Firebird поддерживает числовые типы данных с фиксированной точкой (точные числа) и с плавающей точкой (приблизительная точность). Десятичными типами с фиксированной точкой являются целые типы с нулевым масштабом SMALLINT, INTEGER и в диалекте 3 BIGINT, а ГЛАВА 11. Символьные типы данных.ГЛАВА 11. Символьные типы данных. Firebird поддерживает символьные (строковые) типы данных фиксированной и переменной длины. Они могут быть определены для локального использования в любом наборе символов, выбираемом из большого списка. Символьные типы фиксированной длины не Типы данныхТипы данных Несмотря на то, что типы данных подробно описаны в документации (см. [1, гл. 4]), необходимо рассмотреть ряд понятий, которые будут часто использоваться в последующих главах книги. Помимо изложения сведений общего характера будут рассмотрены также примеры Иллюстрированный самоучитель по Delphi 7 для начинающихЯзык программирования Delphi. Типы данных.В среде программирования Delphi для записи программ используется язык программирования Delphi. Программа на Delphi представляет собой последовательность инструкций, которые довольно часто называют операторами. Одна инструкция от другой отделяется точкой с запятой. Каждая инструкция состоит из идентификаторов. Идентификатор может обозначать:
Программа может оперировать данными различных типов: целыми и дробными числами, символами, строками символов, логическими величинами. Целый типЯзык Delphi поддерживает семь целых типов данных: shortint, smailint, Longint, Int64, Byte, word и Longword, описание которых приведено в табл. 1.1. Таблица 1.1. Целые типы.
Object Pascal поддерживает и наиболее универсальный целый тип – Integer, который Эквивалентен Longint. Типы данных в Delphi Обучающий материалВ delphi, при разработке приложений для их быстродействия и максимальной производительности в работе с оперативной памятью используются типы данных. Без указания типа невозможно себе представить, какое количество байт будет выделено для хранения значения переменной в оперативной памяти. Только обязательное назначение типа переменной обеспечит эффективную работу приложения с минимальной нагрузкой на компьютерную систему. Язык delphi оперирует достаточно большим набором типов данных: целочисленный тип, вещественный, символьный, строчный и логический тип. К тому же представленные, обобщенные типы в зависимости от объема выделенной памяти под хранение имеют конкретное разделение на типы. Целочисленный тип данных в Delphi представлен:
Следует заметить, что последние 3 типа называются беззнаковыми так, как имеют в своем числовом интервале только положительные числа( нет отрицательных значений). К тому же можно использовать и тип “Integer”, который соответствует “Longint”. К тому же следует знать, что значения в типах имеют строгий порядок. Такое положение позволяет использовать по отношению к значениям различные процедуры и функции. Не относится к вещественному типу данных в Delphi(не упорядочен). Числа с плавающей точкой (дробные) представлены в delphi вещественным типом. Вещественный тип данных делится на 6 типов, которые отличаются числовым диапазоном, количеством значащих цифр и занимаемой памятью.
Currency – этот вещественный тип данных называют еще денежным. С его помощью осуществляется реализация различных приложений финансовой тематики. Имеет 53 бита точности и поддержку 4 десятичных мест. Текстовую информацию(переменные) представляют строковые типы данных в Delphi. Различают 3 типа:
В delphi строковые типы данных допускается обозначать типом string, который аналогичен shortstring. Синтаксис указания типа переменной в delphi довольно просто. Ряд примеров подтверждает это утверждение: Язык Delphi является производным от низкоуровневого языка Object Pascal, что позволяет разрабатывать с использованием совместимых компиляторов программы под Linux. Такое положение обеспечивает написание программ, разработку графических интерфейсов, приложений, способных облегчить администрирование linux, насытить систему новым и удобным функционалом. Типы данных Delphi и работа с нимиК встроенным типам данных в языке Delphi относятся типы целые, действительные, символы, строки, указатели, булевы. Порядковые типы. Порядковыми (ordinal) типами называются те, в которых значения упорядочены, и для каждого из них можно указать предшествующее и последующее значения. Структурные типы. К структурным типам относятся множества, массивы, записи, файлы, классы, интерфейсы. Целые типы данных. В переменных целых типов информация представляется в виде целых чисел, т.е. чисел не имеющих дробной части. Таблица 1 Операции над порядковыми типами Минимальное значение порядкового типа Т Максимальное значение порядкового типа Т Порядковый номер значения выражения порядкового типа. Для целого выражения — просто его значение. Для остальных порядковых типов Ord возвращает физическое представление результата выражения, трактуемое как целое число. Возвращаемое значение всегда принадлежит одному из целых типов Предыдущее по порядку значение. Для целых выражений эквивалентно Х-1 Следующее по порядку значение. Для целых выражений эквивалентно Х+1 Уменьшает значение переменной на 1. Эквивалентно V := Pred(V) Увеличивает значение переменной на 1. Эквивалентно V := Succ(V) 8 битов, беззнаковый 16 битов, беззнаковый 32 бита, беззнаковый Также существует такой тип, как Integer, который эквивалентен типу LongInt. Его диапазон от -2147483648 до 21474836478. Занимает 4 байта в пямяти. Основными являются Integer и Cardinal, так что в большинстве случаев желательно использовать эти типы. Над целыми данными выполняются все операции, определенные для порядковых типов. Операции над целыми типами: Возвращает абсолютное целое значение Х Возвращает целую часть частного деления Х на Y Возвращает остаток частного деления Х на Y Возвращает булево True (истина), если Х — нечетное целое, и False (ложь) — в противном случае Действительные типы данных. В переменных действительных типов содержатся числа, состоящие из целой и дробной частей. Количество значащих цифр Основным, обеспечивающим максимальную производительность, является тип Real, который в настоящий момент эквивалентен типу Double. Таблица 5 Функции действительных типов Абсолютная величина х Косинус х (х выражается в радианах, а не в градусах) Экспоненциальная функция от х Дробная часть х Целая часть х. Несмотря на название, возвращает действительное значение (с плавающей запятой), т.е. просто устанавливает нуль в дробной части Натуральный логарифм от х Ближайшее к х целое значение. Возвращает значение целого типа. Условие «ближайшее к х» не работает, если верхнее и нижнее значения оказываются равноудаленными (например, если дробная часть точно равна 0,5). В этих случаях Delphi перекладывает решение на операционную систему. Обычно процессоры Intel решают эту задачу в соответствии с рекомендацией IEEE округлять в сторону ближайшего четного целого числа. Иногда такой подход называют «банкирским округлением» Квадрат х, т.е. X*X Квадратный корень от х Целая часть х. В отличие от Int, возвращающей Символьные типы данных. Символьные типы предназначены для хранения одного символа. Однобайтовые символы, упорядоченные в соответствии с расширенным набором символов ANSI Символы объемом в слово, упорядоченные в соответствии с международным набором символов UNICODE. Первые 256 символов совпадают с символами ANSI Булевы типы данных. Переменные булевых типов данных представляют логические значения, например, true (истина) и false (ложь). Таблица 7 Размеры переменных булевых типов 2 байт (объем Word) 4 байт (объем Longint) Массив — это структура данных, представляющая собой набор переменных одинакового типа, имеющих общее имя. Массивы удобно использовать для хранения однородной по своей природе информации, например, таблиц и списков. Массив, как и любая переменная программы, перед использованием должен быть объявлен в разделе объявления переменных. В общем виде инструкция объявления массива выгладит следующим образом: Имя: [нижний_индекс..верхний_индекс] of тип где: имя — имя массива; array — зарезервированное слово языка Delphi, обозначающее, что объявляемое имя является именем массива; нижний_индекс и верхний_индекс — целые константы, определяющие диапазон изменения индекса элементов массива и, неявно, количество элементов (размер) массива; Дополнительные строковые типы данных Delphi Pascal.В Delphi Pascal помимо основного строкового типа данных string добавлены новые строковые типы. При этом изменено значение стандартного типа string. В результате определены следующие типы строк:
Рис. 4.30. Структура строки AnsiString В связи с этим целесообразно во всех случаях явно указывать тип shortstring или Ansistring вместо string, чтобы программа не зависела от значения опции н компилятора. Строки первых трех типов: shortstring, AnsiString, WideString — совместимы. При присваивании строк любого типа строке PChar используют явное преобразование типа в тип PChar вида Для строк всех указанных типов в SysUtils определены стандартные подпрограммы копирования, поиска подстроки и т.п. Для строк, кроме PChar, существуют несколько удобных функций преобразования.
|