Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
inf 35-30.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
46.11 Кб
Скачать

35. Переменная – именованный элемент программы, который может менять свое значение. Перед употреблением переменная должна быть объявлена в разделе переменных var. При объявлении должен быть указан тип переменной, задающий размер памяти для нее. Переменные могут быть:

  • Глобальные. Объявляются в главной программе. Место под них выделяется компилятором в статической памяти на все время выполнения программы. Они доступны и во вложенных подпрограммах, если там нет локальных переменных с таким же именем.

  • Локальные. Действуют в пределах подпрограммы, где они объявлены. Место под них выделяется в стеке на время выполнения подпрограммы. Стек – память для отложенных значений. При завершении подпрограммы переменная освобождается, а при повторном обращении к подпрограмме создается заново.

  • Динамические. Создаются при исполнении программы в динамической памяти. Компилятор в статической памяти создает под них указатель для занесения адреса начала данных. Размер указателя 4 байта.

Переменные получают значения с помощью операторов присвоения.

var

VarName:Real;

begin

VarName:=<значение выражения>;

end.

Данные в компьютере можно рассматривать как ячейки памяти, имеющие свои имена (идентификаторы). Все данные в программе на языке Delphi должны быть описаны до их первого использования. И компилятор следит, чтобы в программе они использовались в соответствии с этим описанием, что позволяет избежать ошибок.     Любая величина в Delphi может быть постоянной или переменной. Её имя (идентификатор) может состоять из комбинации латинских букв, цифр и знака подчёркивания, и начинаться не с цифры. При этом регистр символов значения не имеет.     Место описания данных в программе - вне логических блоков begin / end. В модуле перед ключевым словомimplementation есть блок описания: var   Form1: TForm1; Именно здесь, начиная со следующей строки, удобно объявлять глобальные переменные и константы. Как видим, одна (Form1) уже есть! Команда объявления переменных в языке Delphi:    var имя_переменной : тип_переменной ;     Слово var - ключевое. Именем может быть любой идентификатор, если он не был описан ранее и не является одним из ключевых или зарезервированных слов языка Delphi. Если нужно описать несколько переменных одного типа, то их перечисляют, отделяя запятой:      var A, B, C : Integer;     Если несколько описаний следуют друг за другом, то ключевое слово var повторно можно не указывать: var A, B : Integer;         C, D : String;

34.  Константа — в программировании элемент данных, который занимает место в памяти, имеет имя и определенный тип, причем его значение никогда не меняется.

 Данные в компьютере можно рассматривать как ячейки памяти, имеющие свои имена (идентификаторы). Все данные в программе на языке Delphi должны быть описаны до их первого использования. И компилятор следит, чтобы в программе они использовались в соответствии с этим описанием, что позволяет избежать ошибок.     Любая величина в Delphi может быть постоянной или переменной. Её имя (идентификатор) может состоять из комбинации латинских букв, цифр и знака подчёркивания, и начинаться не с цифры. При этом регистр символов значения не имеет.     Место описания данных в программе - вне логических блоков begin / end. В модуле перед ключевым словом implementation есть блок описания: var   Form1: TForm1; Именно здесь, начиная со следующей строки, удобно объявлять глобальныепеременные и константы. Как видим, одна (Form1) уже есть!

Постоянную величину иначе называют константой. Конечно, в программе можно использовать числа и строки непосредственно: 3.1415 или 'Это значение числа пи', но иногда удобнее присвоить их идентификатору. Описание констант аналогично описанию переменных, но используется ключевое слово const, за именем идентификатора следует тип, затем знак равенства и его значение. Причём тип константы допускается не указывать: const pi=3.1415 ;          ZnakPi : String = 'Это значение числа пи'; К слову, константа Pi встроенная в Delphi, то есть для того чтобы использовать в Delphi число 3,1415... в расчётах, нужно просто присвоить встроенную константу Piпеременной типа Real или просто использовать непосредственно в выражениях. 33. СОВМЕСТИМОСТЬ И ПРЕОБРАЗОВАНИЕ ТИПОВ ДАННЫХ

Когда в тех или иных операциях или операторах присутствуют данные, относящиеся к различным

типам, возникает вопрос о соответствии типов. В связи с этим говорят об идентичности типов,

совместимости типов и совместимости типов для присваивания. Когда возникают проблемы с

соответствием типов данных, можно осуществить преобразование тех или иных типов. Эти

вопросы и будут рассмотрены в данном разделе.

9.1. Идентичность типов

Идентичность типов требуется от формальных параметров процедур и функций и соответствующих

им фактических параметров во время вызова.

Два типа Т1 и Т2 идентичны в следующих случаях:

- Т1 и Т2 - один и тот же идентификатор типа (например, Integer, Real и т.д.);

- один тип объявляется эквивалентным другому.

Пример.

type

Tl = Boolean;

Т2 = Т1;

ТЗ = Boolean;

Все типы: Tl, T2, ТЗ и Boolean - идентичные типы.

type

Ml = array[1..5] of Integer;

M2 = array[1..5] of Integer;

Типы Ml и М2 - не идентичные типы. Однако VI и V2 - переменные идентичных типов:

var

VI, V2: array[1..5] of Integer;

9.2. Совместимость типов

Совместимость типов требуется в выражениях (в том числе и в операциях отношения).

Два типа Т1 и Т2 совместимы в следующих случаях:

- Т1 и Т2 - один и тот же тип или они идентичны;

- Т1 и Т2 - вещественные типы;

- Т1 и Т2 - целые типы;

- один тип - вещественный, а другой - целый;

- один тип представляет собой тип-диапазон другого;

- оба типа являются типами-диапазонами какого-то одного типа;

- оба типа являются типами-множествами с совместимыми базовыми типами;

- один тип является строкой, а другой - строкой или символом;

- один тип - Pointer, а другой - любой тип-указатель;

- один тип PChar, а другой - массив символов, заканчивающийся символом

с кодом 0 (только при наличии ключа компилятора ($Х+) - см. п. 17.7.1);

- оба типа являются указателями, полученными с помощью адресной операции @,

примененной к величинам идентичных типов (только при наличии ключа компилятора

{$Т+} - см. п. 17.7.1);

- оба типа - процедурные типы с идентичными типами результатов (для типа-функции),

идентичным числом параметров и попарной идентичностью типов этих параметров.

9.3. Совместимость для присваивания

Эта совместимость необходима, когда значение какого-то выражения

присваивается переменной, типизированной константе, функции. Если значение объекта

типа Т2 присваивается объекту типа Т1, то это возможно в следующих случаях:

- Т1 и Т2 - идентичные типы и не являются файловыми типами или структурированными

типами, содержащими компоненты файлового типа на любом уровне структурирования;

- Т1 и Т2 - совместимые порядковые типы и значение типа Т2 находится в

границах возможных значений объекта типа Т1;

- Т1 и Т2 - вещественные типы и значение типа Т2 находится в границах

возможных значений объекта типа Т1;

- Т1 - вещественный тип, а Т2 - целый тип;

- Т1 и Т2 - строки;

- Т1 - строка, а Т2 - символ;

- Т1 и Т2 - совместимые типы-множества и все компоненты значения типа

Т2 находятся в множестве Т1;

- Т1 и Т2 - совместимые указатели;

- Т1 - типа PChar, a T2 - строковая константа (только при наличии ключа

компилятора {$Х+} - см. п. 17.7.1);

- Т1 - типа PChar, a T2 - массив символов, заканчивающийся символом с

кодом 0 (только при наличии ключа компилятора {$Х+} - см. п. 17.7.1);

- Т1 и Т2 - совместимые процедурные типы;

- Т1 - процедурный тип, а Т2 - процедура или функция с идентичным

типом результата, числом параметров и попарной идентичностью типов

этих параметров;

- Т1 и Т2 - объектные типы (см. п. 14) и Т2 - потомок Т1;

- Т1 и Т2 - указатели на объектные типы (см. п. 14) и Т2 - указатель на

потомок типа, на который указывает Т1.

9.4. Преобразование типов

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

В Turbo Pascal такое преобразование осуществляется сравнительно просто, если переменные

обоих типов имеют один и тот же размер. Для этого следует указать идентификатор типа, а

за ним в круглых скобках переменную исходного типа. Если новый тип - структурированный,

можно в случае необходимости выбрать компоненту в соответствии с общими правилами.

Пример.

type

ByteRec = record

Lo, Hi: Byte

end;

WordRec = record

Low, High: Word

end;

PtrRec = record

Ofs, Seg: Word

end;

BytePtr = ^Byte;

var

B: Byte;

W: Word;

L: Longint;

P: Pointer;

begin

W := $1234; (присвоение переменной W значения)

В := ByteRec(W).Lo;

{преобразование переменной типа Word в запись из двух байтов и выделение младшего байта}

ByteRec(W).Hi := 0;

{преобразование переменной типа Word в запись из двух байтов и запись в старший байт

значения 0}

L := $01234567; {присвоение переменной L значения}

W := WordRec(L).Low;

{преобразование переменной типа Longint в запись из двух

слов и выделение младшего слова}

В := ByteRec(WordRec(L).Low).Hi;

{преобразование переменной типа Longint в запись из двух слов, выделение младшего слова,

преобразование его в запись из двух байтов и выделение старшего байта}

В := BytePtr(L)^;

{преобразование переменной типа Longint в указатель и получение значения параметра, на

который он указывает}

Р :=Ptr ($40,$49);

{Присвоение указателю Р значения с помощью стандартной функции Ptr}

W := PtrRec(P).Seg;

{преобразование указателя в запись из двух слов и выделение второго слова (фактически

адреса сегмента)}

Inc(PtrRec(P).Ofs, 4);

{преобразование указателя в запись из двух слов, выделение первого слова (фактически

смещения адреса) и увеличение его величины на 4 с помощью стандартной процедуры Inc}

end.

Такое преобразование возможно не только, когда исходный и окончательный типы имеют

одинаковый размер. Оно возможно также в случае преобразования друг в друга двух порядковых

типов (см. п. 3.2), независимо от их размера, а также преобразования параметра без типа

32. Вещественные типы Внутреннее представление

Вещественные типы данных хранятся в памяти компьютера иначе, чем целые. Внутреннее представление вещественного числа состоит из двух частей - мантиссы и порядка, и каждая часть имеет знак. Например, число 0,087 представляется в виде 0,87*10-1, и в памяти хранится мантисса 87 и порядок -1 (для наглядности мы пренебрегли тем, что данные на самом деле представляются в двоичной системе счисления и несколько сложнее).

Существует несколько вещественных типов, различающихся точностью и диапазоном представления данных. Точность числа определяется длиной мантиссы, а диапазон - длиной порядка.

Тип

Название

Размер

Значащих цифр

Диапазон значений

real

вещественный

6 байт

11-12

2.9e-39..1.7e+38

single

одинарной точности

4 байта

7-8

1.5e-45..3.4e+38

double

двойной точности

8 байт

15-16

5.0e-324..1.7e+308

extended

расширенный

10 байт

19-20

3.4e-4932..1.1e+4923

comp

большое целое

8 байт

19-20

-9.22e18..9.22e18(-263..263-1)

Операции

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

Операция

Знак операции

сложение

+

вычитание

-

умножение

*

деление

/

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

К вещественным величинам можно также применять операции отношения, перечисленные в разделе "Логические типы" (подробнее>>). Результат этих операций имеет логический тип.

Стандартные функции

К вещественным величинам можно применять стандартные функции, перечисленные ниже:

Имя

Описание

Результат

Пояснения

abs

модуль

вещественный

|x| записывается abs(x)

arctan

арктангенс угла

вещественный

arctg x записывается arctan(x)

cos

косинус угла

вещественный

cos x записывается cos(x)

exp

экспонента

вещественный

ex записывается exp(x)

frac

дробная часть аргумента

вещественный

frac(3.1) даст в результате 0.1

int

целая часть аргумента

вещественный

frac(3.1) даст в результате 3.0

ln

натуральный логарифм

вещественный

logex записывается ln(x)

pi

значение числа п

вещественный

3.1415926536

round

округление до целого

целый

round(3.1) даст в результате 3  round(3.8) даст в результате 4

sin

синус угла

вещественный

sin x записывается sin(x)

sqr

квадрат

целый

x2 записывается sqr(x)

sqrt

квадратный корень

вещественный

записывается sqrt(x)

trunc

целая часть аргумента

целый

trunc(3.1) даст в результате 3

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]