Читайте также: |
|
В модуле Graph нет процедур, предназначенных для вывода численных данных. Поэтому для вывода чисел сначала нужно преобразовать их в строку с помощью процедуры Str, а затем подключить посредством ‘+’ к выводимой строке.
Например: Max:=34.56;
Str(Max: 6: 2, Smax);{результат преобразования находится в Smax}
OutTextXY(400, 40, ‘Максимум=’ + Smax);
Для удобства преобразование целочисленных и вещественных типов данных в строку лучше осуществлять специализированными пользовательскими функциями IntSt и RealSt:
function IntSt(Int: integer): string;
var Buf: string[10];
begin
Str(Int, Buf);
IntSt:= Buf;
end;
function RealSt(R: real, Dig, Dec: integer): string;
var Buf: string[20];
begin
Str(R: Dig: Dec, Buf);
RealSt:= Buf;
end;
Эти функции указываются как параметры в процедурах OutText и OutTextXY.
Например:
x:= 5.295643871;
OutTextXY(20, 20, ‘x=’+RealSt(x,11,9));
В результате на экране появится x=5.29564443871
Шрифты
Вывод текста в графическом режиме может осуществляться различными стандартными (таблица 5) и пользовательскими шрифтами. Различают два типа шрифтов: растровые и векторные. Растровый шрифт задается матрицей точек, а векторный – рядом векторов, составляющих символ.
По умолчанию после инициализации графического режима устанавливается растровый шрифт DefaultFont, который, как правило, является шрифтом, используемым драйвером клавиатуры.
Стандартные шрифты
Шрифт | Файл |
TriplexFont | Trip.chr |
SmallFont | Litt.chr |
SansSerifFont | Sans.chr |
GothicFont | Goth.chr |
Большинство стандартных шрифтом не содержат русских символов. Разработка же собственных шрифтов – довольно сложный и трудоемкий процесс. Он может быть ускорен, если воспользоваться специализированными пакетами TurboFont, BgiToolKit.
Установить нужный шрифт можно процедурой SetTextStyle(Font,d,c:word), где Font – выбранный шрифт, d – направление (горизонтальное или вертикальное), с – размер выводимых символов. Возможные значения двух первых параметров представлены в таблице 5. При организации вертикального вывода необходимо учитывать, что если не установить точку начала вывода с помощью MoveTo, то текст начинается с нижней строки экрана и продолжается вверх. Величина символов устанавливается коэффициентом с. Если с=1, то символ строится в матрице 8´8, если с= 2, то матрица 16´16 и т.д. до 10-кратного увеличения.
Например выведем 2 строки (вертикальную и горизонтальную) шрифтом DefaultFont разной величины:
SetTextStyle(0,11); {буквы стандартной величины}
OutTextXY(200,200, ‘Вертикальная строка’);
SetTextStyle(0,0,2); {размер букв увеличен}
OutTextXY(200,220, ‘Горизонтальная строка’);
Выравнивание текста
В некоторых случаях требуется в пределах одной строки выводить символы выше или ниже друг друга. Выравнивание текста выполняется с помощью процедуры SetTextJustify(Horiz, Vert: word) как по вертикали, так и по горизонтали посредством задания параметров Horiz и Vert (возможные значения в таблице 6).
Параметры выравнивания
Параметр | Значение | Комментарий |
Горизонтальное выравнивание | ||
LeftText | Выровнять влево | |
CenterText | Центрировать | |
RightText | Выровнять вправо | |
Вертикальное выравнивание | ||
BottomText | Переместить вниз | |
CenterText | Центрировать | |
TopText | Переместить вверх |
В качестве примера выведем x2:
SetTextJustify(1, 1);
OutTextXY(100,100, ‘X’);
SetTextJustify(1, 0);
OutTextXY(108,100, ‘2’);
Записи.
Запись представляет собой совокупность ограниченного числа логически связанных компонент, принадлежащих к разным типам. Компоненты записи называются полями, каждое из которых определяется именем. Поле записи содержит имя поля, вслед за которым через двоеточие указывается тип этого поля. Поля записи могут относиться к любому типу, допустимому в языке Паскаль, за исключением файлового типа.
Описание записи в языке Паскаль осуществляется с помощью служебного слова record, вслед за которым описываются компоненты записи. Завершается описание записи служебным словом end.
Например, телефонный справочник содержит фамилии и номера телефонов, поэтому отдельную строку в таком справочнике удобно представить в виде следующей записи:
type TRec = Record
FIO: String[20];
TEL: String[7]
end;
var rec: TRec;
Описание записей возможно и без использования имени типа, например:
var rec: Record
FIO: String[20];
TEL: String[7]
end;
Обращение к записи в целом допускается только в операторах присваивания, где слева и справа от знака присваивания используются имена записей одинакового типа. Во всех остальных случаях оперируют отдельными полями записей. Чтобы обратиться к отдельной компоненте записи, необходимо задать имя записи и через точку указать имя нужного поля, например:
rec.FIO, rec.TEL
Такое имя называется составным. Компонентой записи может быть также запись, в таком случае составное имя будет содержать не два, а большее количество имен.
Обращение к компонентам записей можно упростить, если воспользоваться оператором присоединения with.
Он позволяет заменить составные имена, характеризующие каждое поле, просто на имена полей, а имя записи определить в операторе присоединения:
with rec do оператор;
Здесь rec - имя записи, оператор - оператор, простой или составной. Оператор представляет собой область действия оператора присоединения, в пределах которой можно не использовать составные имена. Например для нашего случая:
with rec do begin
FIO:='Иванов А.А.';
TEL:='2223322';
end;
Такая алгоритмическая конструкция полностью идентична следующей:
rec.FIO:='Иванов А.А.';
rec.TEL:='2223322';
Инициализация записей может производиться с помощью типизированных констант:
type
RecType = Record
x,y: Word;
ch: Char;
dim: Array[1..3] of Byte
end;
const
Rec: RecType = (x: 127;
y: 255;
ch: 'A';
dim: (2, 4, 8));
Подробнее..
Особой разновидностью записей являются записи с вариантами, которые объявляются с использованием зарезервированного слова case. С помощью записей с вариантами вы можете одновременно сохранять различные структуры данных, которые имеют большую общую часть, одинаковую во все структурах, и некоторые небольшие отличающиеся части.
Например, сконструируем запись, в которой мы будем хранить данные о некоторой геометрической фигуре (отрезок, треугольник, окружность).
type
TFigure = record
type_of_figure: string[10];
color_of_figure: byte;
...
case integer of
1: (x1,y1,x2,y2: integer);
2: (a1,a2,b1,b2,c1,c2: integer);
3: (x,y: integer; radius: word);
end;
var figure: TFigure;
Таким образом, в переменной figure мы можем хранить данные как об отрезке, так и о треугольнике или окружности. Надо лишь в зависимости от типа фигуры обращаться к соответствующим полям записи.
Заметим, что индивидуальные поля для каждого из типов фигур занимают тем не менее одно адресное пространство памяти, а это означает, что одновременное их использование невозможно.
В любой записи может быть только одна вариантная часть. После окончания вариантной части в записи не могут появляться никакие другие поля. Имена полей должны быть уникальными в пределах той записи, где они объявлены.
Динамическая память
В IBM PC-совместимых компьютерах память условно разделена на сегменты. Компилятор формирует сегменты кода, данных и стека, а остальная доступная программе память называется динамической (хипом).
Динамические переменные создаются в хипе во время выполнения программы. Обращение к ним осуществляется через указатели. С помощью этих переменных можно обрабатывать данные, объем которых до начала выполнения программы не известен. Память под такие данные выделяется блоками, которые связываются друг с другом. Этот способ хранения данных называется динамическими структурами.
Дата добавления: 2015-08-13; просмотров: 93 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Цветовая шкала | | | Динамические переменные |