Краткая справка по языку программирования Turbo Pascal

         

Любое изображение на экране монитора



1. Введение

Любое изображение на экране монитора формируется из отдельных элементов – пикселов (от англ. Pixel - Picture Element – элемент изображения). Экран монитора можно рассматривать как матрицу пикселов. Для получения того или иного изображения на экране монитора как в графическом, так и в текстовом режимах необходимо заставить светиться строго определенную группу пикселов. В текстовом режиме на экран могут выводиться только определенные символы, образы которых хранятся в постоянной или оперативной памяти компьютера, а управление отдельными пикселами невозможно. В графическом режиме появляется возможность управления отдельными пикселами, что позволяет формировать любые изображения.
С технической точки зрения управлением монитора занимается специальное устройство компьютера – видеоадаптер. Именно согласно его сигналам зажигаются и гаснут отдельные точки на экране монитора. Конструктивно видеоадаптер – это весьма сложное электронное устройство, управляемое собственным микропроцессором. Качество изображения, получаемое на экране монитора во многом зависит не только от самого монитора, но и от типа видеоадаптера. В самом общем виде видеоадаптер состоит из контроллера электронно-лучевой трубки (CRT-контроллера) и видеопамяти (видеобуфера). Для получения изображения на экране монитора необходимо поместить в видеопамять определенную информацию. Графическое программирование на таком уровне представляется весьма непростой и трудоемкой задачей, требующей знания особенностей того или иного видеоадаптера.
Чтобы сделать процесс создания графических изображений более простым и эффективным фирма Borland International разработала специальную библиотеку GRAPH, а также набор графических драйверов, позволяющих работать с различными типами видеоадаптеров. Графический драйвер – это вспомогательная программа-посредник, обеспечивающая взаимодействие пользовательских программ с конкретным графическим устройством. Графические драйверы хранятся в файлах с расширением .BGI (Borland Graphic Interface). Обычно эти файлы расположены в каталоге \BP\BGI


(или \TP\BGI).
2. Модуль Graph. Инициализация графического режима
Для формирования графических изображений в среде Borland (Turbo) Pascal имеется стандартный библиотечный модуль . В нем содержится множество графических процедур и функций, десятки стандартных констант и типов данных.
Любая программа, использующая графику должна прежде всего подключить модуль Graph. Это выполняется директивой USES:
USES Graph;
С этого момента все графические средства доступны пользователю.
Прежде чем работать с графикой необходимо установить определенный графический видеорежим. Выбор видеорежима зависит от имеющегося графического адаптера. Большинство современных компьютеров (IBM-совместимых) имеют в своем составе видеоадаптер стандарта VGA (Video Graphic Array) или SuperVGA. Для работы с таким адаптером используется графический драйвер EGAVGA.BGI. При этом имеется возможность работы в трех различных видеорежимах:



Режим Разрешение
VGALo = 0 640х200
VGAMed = 1 640х350
VGAHi = 2 640х480

Разрешение определяется максимальным числом пикселов в строке и максимальным количеством строк пикселов.
Во всех трех видеорежимах возможно одновременное отображение до 16 различных цветов.
Для переключения видеоадаптера в графический режим и установки определенного видеорежима необходимо вызвать специальную процедуры инициализации графики – InitGraph:
InitGraph( var GraphDriver, GraphMode : Integer; DriverPath : String );
Процедура InitGraph имеет 3 параметра. Целочисленные переменные GraphDriver и GraphMode определяют соответственно тип графического видеоадаптера и видеорежим. Третий параметр DriverPath указывает путь в каталог, содержащий файлы с графическими драйверами.
В модуле Graph для задания типа видеоадаптера определен ряд констант:
Detect = 0 – автоопределение;

CGA = 1 – адаптер CGA;

EGA = 3 – адаптер EGA;

VGA = 9 – адаптер VGA;

и др.
Если для параметра GraphDriver используется значение Detect, а значение параметра GraphMode явно не указано, то тип графического адаптера будет определен автоматически и после инициализации соответствующего драйвера будет установлен режим с максимальным разрешением.
Подытожив сказанное выше, запишем пример инициализации графического режима:
USES
Graph;

VAR

GrDr, GrMd : integer;

BEGIN

  GrDr := detect;

  InitGraph( GrDr, GrMd, ‘c:\bp\bgi’ );

  { теперь можно вызывать графические процедуры }

  . . .

  . . .

  . . .

  CloseGraph;

END.
Для завершения работы в графическом режиме необходимо всегда производить вызов процедуры CloseGraph. Она очищает экран, переводит адаптер в текстовый режим и, если возможно, выгружает из памяти графический BGI-драйвер.

А) Параметры-значения



Параметры-значения

(или передача параметров по значению). Параметры-значения - это локальные переменные подпрограмм, стартовые значения которых задаются при вызове подпрограмм из внешних блоков (им присваиваются значения соответстующих фактических параметров). Параметры-значения, описанные в заголовке, могут изменять свои значения наряду с прочими переменными, но эти изменения будут строго локальными и никак не отразятся на значениях фактических параметров.

Синтаксис описания параметров-значений:

ИмяПодпрограммы ( P1, P2, ..., PN : Тип );

или

ИмяПодпрограммы ( P1 : Тип1; P2 : Тип2; ... );

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



Алфавит



Алфавит

Как и любой другой язык программирования (и не только программирования), Турбо Паскаль имеет свой алфавит - набор символов, разрешенных к использованию и воспринимаемых компилятором. В алфавит языка входят:

Латинские строчные и прописные буквы: A, B, ..., Z и  a, b, ..., z

Цифры от 0 до 9.

Символ подчеркивания "_" (ASCII код - 95).

Символ "пробел" (код 32). Пробел является разделителем в языке. Если между двумя буквами имени или ключевого слова стоит пробел, то две буквы будут считаться принадлежащими разным именам (словам). Количество пробелов не является значащим. Там, где можно поставить один пробел, можно поставить их сколько угодно.

Символы с кодами ASCII от 0 до 31 (управляющие символы). Они могут участвовать в написании значений символьных и строчных констант. Символы, замыкающие строку (коды 10 и 13), и символ табуляции (код 9) также могут быть разделителями.

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

+ - * / = < > [ ] . , ( ) : ; ^ @ { } $ # '

Составные символы: <= >= := (*   *)  (.  .)  ..

Разделители (пробелы, табуляция, перевод строки) между элементами составных символов недопустимы.

Как видно символы из расшириного набора таблицы ASCII, т.е. символы с номерами от 128 до 255 (а именно в этот диапазон входит алфавит кириллицы), а также некоторые другие символы (!, %, ~, и др.) не входят в алфавит языка. Тем не менее они могут использоваться в тексте программ, но только в виде значений символьных или строковых констант, а также в тексте коментариев.



Б) Параметры-переменные


Параметры-переменные

(или передача параметров по ссылке). Параметры-переменные предоставляют принципиально иной механизм передачи параметров, состоящий в том, что в подпрограмму передается не значение фактического параметра, а ссылка на ячеку (или ячейки) памяти где хранится значение этого фактического параметра. При этом все действия с формальным параметром-переменной (внутри подпрограммы) на самом деле являются действиями над фактическим параметром.

Синтаксис описания параметров-переменных:

ИмяПодпрограммы ( VAR P1, P2, ..., PN : Тип );

или

ИмяПодпрограммы ( VAR P1 : Тип1; VAR

P2 : Тип2; ... );

Описание параметров-переменных отличается от описание параметров-значений лишь наличием ключевого слова VAR перед идентификатором параметра.



Целочисленные типы



Целочисленные типы

- обозначают множества целых чисел в различных диапазонах. Имеется пять целочисленных типов, различающихся диапазоном допустимых значений и размером занимаемой оперативной памяти. Целочисленные типы обозначаются идентификаторами: Byte, ShortInt, Word, Integer, LongInt; их характеристики приведены в следующей таблице.

Тип Диапазон  Размер в байтах 
Byte 

ShortInt 

Word

Integer 

LongInt

0 ... 255

-128 ... 127

0 ... 65535

-32768 ... 32767

-2147483648 ... 2147483647

1

1

2

2

4

Значения целых типов записываются в программе привычным способом:

123     4    -3    +345    -699

Наличие десятичной точки в записи целого числа недопустимо. Будет ошибкой записать целое число следующим образом:

123.0

Кроме прывычной десятичной формы записи допускается запись целых чисел в шестнадцатиричном формате, используя префикс $, например:

$01AF     $FF    $1A    $F0A1B

Регистр букв A,B, ..., F значения не имеет.



Численные (арифметические) выражения



Численные (арифметические) выражения

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

+ сложение (унарный плюс)
- вычитание (унарный минус)
* умножение
/ деление
div целочисленное деление
mod остаток от целочисленного деления

Операция возведения в степень в языке не предусмотрена.

В сложных выражениях порядок выполнения операций определяется правилами приоритета:

I-й (высший) приоритет унарные минус и плюс
II-й приоритет * и /
III-й приоритет + и  -

Для изменения порядка выполнения операций используют круглые скобки ( ).

Тип значения выражения зависит типов операндов и от выпоняемой операции.

Если все операнды целочисленные, то операции сложения, вычитания, умножения, целочисленного деления дают значение выражения также целочисленного типа. Операция деления "/" дает вещественный результат! Если в выражение присутствуют целочисленные операнды, имеющие различные типы (например, Byte и Integer), то значение выражения будет иметь тип с наибольшим диапазоном (в данном случае Integer).

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

При построении арифметических выражений можно использовать различные встроенные математические функции. Ниже в таблице приведены их имена, назначение и характеристики.

Вызов функции Тип аргумента Тип результата Назначение
 Abs(x)  целый

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

целый вещественный  Абсолютное значение x 
Pi  вещественный  Ззначение числа ПИ 
Sin(x)  целый

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

вещественный  Синус x радиан 
Cos(x)  целый

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

вещественный  Косинус x радиан 
ArcTan(x)  целый

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

вещественный  Арктангенс x радиан 
Sqrt(x)  целый

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

вещественный   Квадратный корень из x>=0 
Sqr(x)  целый

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

целый вещественный  Ззначение квадрата x 
Exp(x)  целый

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

вещественный  Значение e в степени x 
Ln(x)  целый

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

вещественный  Натуральный логарифм x, x>0 
Trunc(x)  целый 

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

LongInt Целую часть значения x 
Frac(x)  целый 

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

вещественный  Дробную часть значения x  
Int(x)  целый 

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

вещественный  Целую часть значения x 
Round(x)  целый 

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

LongInt Округляет x до ближайшего целого 
Random - вещественный Случайное число от 0 до 1
Random(X) Word Word Случайное число от 0 до Х
Odd(x)  целый  логический  Проверяет нечетность значения x 

Примеры записи арифметических выражений

x+5        (a+b)/n      a+b/n       sin(x)*sqr(x)

1/(1+abs(sin(x)))    Trunc((max-min)/dx)

23.05*(x-0.01)-sqrt(x+1)



Диапазон



Диапазон

или (ограниченный тип) не является предопределенным типом языка (таким как, например, или Char) и поэтому ему не соответствует никакой идентификатор. Этот тип является вводимм пользователем. Используя его мы можем определить новый тип, который будет содержать значения только из ограниченного поддиапазона некоего базового типа. Базовым типом может быть только целочисленный тип, тип Char (символьный) и любой из введенных программистом перечислимых типов.

Для введения нового типа - диапазона - нужно в указать имя вводимого типа и границы диапазона через специальный символ диапазона ".." (две точки подряд):

TYPE

Century = 1..21; { поддиапазон цилочисленного типа }

  CapsLetters = 'А'..'Я'; { поддиапазон из типа Char }

Структурированные типы языка

К структурированным типам относятся: массив, запись, множество, файл и др. Все они определяют тип (или типы) некоторой структуры данных.



Допустимые операции


:

- присваивание;

- все арифметические: +, - ,*, /, div, mod (при обычном делении [/] результат вещественный!);

- сравнение <, >, >=, <=, <>, =.


:

- присваивание;

- сравнение: <, >, >=, <=, <>, =;

- логические операции: NOT, OR, AND, XOR




:

- присваивание;

- сравнение: <, >, >=, <=, <>, =. Большим считается тот символ, который имеет больший ASCII-номер.




:

- присваивание;

- сложение (конкатенация, слияние); например, S := 'Зима'+' '+'пришла!';

- сравнение: <, >, >=, <=, <>, =. Строки считаются равными, если имеют одинаковую длину и посимвольно эквивалентны.

Функции для работы со строками смотри здесь




:

- присваивание;

- все арифметические: +, - ,*, / ;

- сравнение: <, >, >=, <=, <>, =. При сравнении вещественных чисел следует помнить, что в следствие неточности их представления в памяти компьютера (в виду неизбежности округления) стоит избегать попыток определения строгого равенства двух вещественных значений. Есть шанс, что равенство окажется ложным, даже если на самом деле это не так.



EXIT



EXIT

Процедура EXIT завершает работу своего программного блока. Если EXIT вызывается внутри процедуры или функции, то их работа завершается. Если EXIT вызывается в основном блоке программы, то это приводит к ее завершению.



Форматы вывода данных.



Форматы вывода данных.

Перейти к: | | Вывод данных |

При выводе значений в текстовый файл и на экран можно указывать формат вывода, т.е. отводить поле для размещения этих значений. Для строковых, символьных и целочисленных   значений формат задается одним числом, отделенным от значения двоеточием:

Write( Ch:3, St:10, i:5 );

Это число показывает, сколько позиций (знакомест) отдводится под значение. Так, значение Ch (символ) будет размещено в трех позициях, хотя реально займет лишь одну, строка St - в 20 позициях, а целое значение i - в пяти позициях. Если реальное значение "короче" формата, излищек будет заполнен пробелами. Но если наоборот (формат "мал"), то значение будет выводится, игнорируя спецификацию формата. Ошибки при этом не возникнет. Выравнивание значение в поле формата происходит по правому краю.

При выводе вещественных значение без указания формата числа (по умолчанию) выводятся в экспоненциальном виде. Например,

VAR

  x : Real;

BEGIN

  x := 27.5;

  Write( x );

END.

На экран будет выведено:

2.7500000000Е+01

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

Write( x:12:3, sin(2.5):8:1 );

Если при указании формата вывода вещественного значения опустить второй параметр, то значение будет представлено в экспоненциальной форме. Например,

VAR

  x : Real;

BEGIN

  x := 27.5;

  Write( x:5:2, '    ', x:10 );

END.

На экран будет выведено:

27.50         2.7500Е+01



Функции


служат, прежде всего, для определения алгоритма вычисления некоторого значения (). В этом отношении функции подобны выражениям, которые также вычисляют значение. В соответствии с этим вызов функции является одним из допустимых операндов выражения, обозначая в нем то значение, которое вычисляет ("возвращает") функция.

Описание процедуры:

PROCEDURE

ИмяПроцедуры ( СписокФормальныхПараметров );

LABEL

Перечисление меток внутри тела процедуры

CONST

  Описание локальных констант

TYPE

  Описание локальных типов

VAR

  Описание локальных переменных

BEGIN

  Тело процедуры

END.

Пример описания и вызова процедуры:

PROGRAM

Example_of_Procedure;

USES CRT;

PROCEDURE ChangeColor( C1, C2 : Word );

BEGIN

  TextColor(C1);

  TextBackGround(C2)

END;

BEGIN

  ChangeColor( Yellow, Blue ); { Вызов процедуры }

  ClrScr; { Ощичаем экран }

  ...

  ...

END.

Описание функции:

FUNCTION

ИмяФункции ( СписокФормальныхПараметров ) : ТипЗначения;

LABEL

  Перечисление меток внутри тела процедуры

CONST

  Описание локальных констант

TYPE

  Описание локальных типов

VAR

  Описание локальных переменных

BEGIN

  Вычисление значения функции;

  ИмяФункции := ВычисленноеЗначение

END.

Для присвоения функции вычисленного значения ее имя должно хотя бы раз появиться в левой части оператора присванивания в теле самой функции (ИмяФункции := ВычисленноеЗначение).

Пример описания и вызова функции:

PROGRAM

Example_of_Function;

USES CRT;

VAR a : Integer;

FUNCTION Factorial( n : Integer ) : LongInt;

VAR

  F : LongInt;

  k : Integer;

BEGIN

  F:=1;

  for k:=1 to n do F:=F*k;

  Factorial := F

END;

BEGIN

  ClrScr;

  Write('Введите целое число a: ');

  ReadLn(a);

  Writeln('Факториал а = ', Factorial(a) );

  ReadLn;

END.



Краткая справка по языку программирования Turbo Pascal


О Блезе Паскале, языке ПАСКАЛЬ и среде программирования Borland Pascal

Блез Паскаль родился во Франции в г. Клермон-Ферран в 1623 г. Его огромные способности, прежде всего в области математики, ослепили всех еще в детстве. После смерти (1662 г.) он вошел в история как один из величайших математиков, которых когда-либо знал мир. Так, он заложил основы математической области, которую теперь мы называем теорией вероятности.
Кроме математики Паскаль проявил свой талант в физике, философии и литературоведении. Чтобы помочь своему отцу, он сконструировал в 1642 г. счетную машину. Его отец был сборщиком налогов, и эта машина ему была очень полезна при счетных работах. Заслуживает интереса то, как сам Паскаль представлял читателям свою машину: "Уважаемый читатель, этим сообщением ставлю Вас в известность, что мною изобретена маленькая машина, на которой Вы сможете выполнять любую арифметическую операцию. Машина будет показана публике".

В настоящее время имя ПАСКАЛЬ используется в качестве названия очень эффективного языка программирования. Первая версия языка ПАСКАЛЬ, разработанного швейцарским ученым, профессором кафедры вычислительной техники Швейцарского федерального института технологии Никласом Виртом, появилась еще  в 1968 г. как альтернатива существующим и все усложняющимся языкам программирования, таким как ПЛ/1, АЛГОЛ и ФОРТРАН. Интенсивное развитие языка ПАСКАЛЬ привело к появлению уже в 1973 г. его ANSI-стандарта, а число трансляторов с этого языка уже в 1979 г. перевалило, по оценке Н.Вирта, за 80.
Новый язык оказался не только очень доступным для понимания и удобным в использовании, но и достаточно мощным для решени множества задач. Он быстро и широко распространился на различных платформах, но особенно широко - на IBM-совместимых компьютерах. Особую роль в распространении языка ПАСКАЛЬ на персональные компьютеры сыграла фирма , разработавшая компиляторы и другие инструментальные средства.

Инструментальные средства этой фирмы представляют собой интегрированную среду разработки программ, то есть дают возможность решить практически все задачи, стоящие перед программистом при разработке программ, а именно:

редактирование текстов программ;

компиляцию программы, сопровождаемую поиском синтаксических ошибок;

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

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

<

Первые версии интегрированной среды программирования носили название Turbo Pascal. После версии 5.5 появился новый, более совершенный продукт - Borland Pascal. Нумерация была продолжена, то есть на ряду с Turbo Pascal 6 и 7.0 появились Borland Pascal 6 и, наконец, Borland Pascal 7.0.
В комплект Borland Pascal 7.0 входят три варианта среды программирования. Из них два работают под управлением операционной системы MS-DOS. Одна из программ (bp.exe) позволяет разрабатывать программы как для реального, так и для защищенного режимов работы процессора, в том числе и программы, предназначенные для работы под Windows. Другая программа (turbo.exe) обеспечивает разработку программ только для реального режима работы процессора. Третий вариант среды программирования (bpw.exe) работает под управлением системы Windows 3.1 и позволяет разрабатывать полноценные приложения, обладающие стандартным графическим интерфейсом (Windows API).

[]

Краткая справка по языку программирования Turbo Pascal


Написанная по правилам стандарта языка Паскаль программа будет иметь в своем полном варианте структуру показанную ниже:

PROGRAM

Имя_Программы;

USES

   Список используемых библиотек (модулей);

LABEL

   Список меток в основном блоке программы;

CONST

    Определение констант;

TYPE

    Описание типов;

VAR

    Определение глобальных переменных программы;


ОПИСАНИЕ ПРОЦЕДУР;


ОПИСАНИЕ ФУНКЦИЙ;

BEGIN

   Основной блок программы (операторы)

END.

Таким образом, программа содержит два раздела: (I) раздел описаний (блоки USES, LABEL, CONST, TYPE, VAR, а также описание процедур и функций) и (II) исполняемую часть (основной блок). Раздел описаний, в принципе, не является обязательным и может вовсе отсутствовать. Заголовок программы, начинающийся с ключевого слова PROGRAM, выполняет исключительно декоративную функцию, и поэтому также может отсутствовать.

Самая короткая "программа" на языке Турбо Паскаль выгдядит следующим образом:

BEGIN

END.

Она ничего не делает, но работает!

Деректива USES подключает библиотечные модули из стандартного набора Турбо Паскаля или написанные программистом. У дерективы USES есть свое четко определенное место: если она присутствует, то должна находится перед прочими разделами описаний. Кроме этого, слово USES может появиться в программе только один раз. Список модулей дается через запятую, например:

USES CRT, DOS, Graph, My_Unit;

Блок описания меток LABEL содержит перечисленные через запятую метки переходов. Блоков LABEL может быть сколько угодно и располагаться они могут где угодно в пределах раздела описаний. Метки могут обозначаться целым числом в диапазоне от 0 до 9999 или символьными конструкциями длнной не более 63 символов, например

LABEL 1, 12, Start, Finish, m1, m2;

Блок объявления констант CONST так же, как блок LABEL может располагаться в любом месте раздела описаний. Таких блоков может быть несколько или может не быть вообще. В них размещают определения констант различных видов.


Необязательный, как и все предыдущие, блок описания типов TYPE содержит определения вводимых программистом новых типов. В этом блоке могут быть использованы константы из блока CONST. Если это так, то блок TYPE может быть расположен где угодно, но не выше соответствующего блока CONST.
Раздел описания глобальных переменных VAR формально тоже не обязателен и может отсутствовать. Реально же он, конечно, объявляется и содержит список глобальных переменных программы и их типы. Блоков VAR может быть сколько угодно.
Основной блок - это собственно программа, использующая все, что было описано и объявлено выше. Он обязательно начинается словом BEGIN и заканчивается словом END с точкой. Любой текст после завершающей точки игнорируется компилятором.
Язык Турбо Паскаль предоставляет гораздо большую гибкость в организации текста программы, чем ANSI-стандарт языка. Программа на языке Турбо Паскаль может иметь, например, такую структуру:
PROGRAM
Большая_Программа;

USES

   Список используемых библиотек (модулей);

CONST Константы и переменные для

VAR      выполнения математических расчетов;

Определение процедур и функция для математических расчетов;
CONST Описание констант, типов и

TYPE   переменных необходимых для графического

VAR     представления расчетов;

Определение процедур и функция для построения графиков;

LABEL   Метки,

CONST  константы,

TYPE     типы и переменные, используемые

VAR       в основном блоке программы;

BEGIN

   Основной блок программы (операторы)

END.

Краткая справка по языку программирования Turbo Pascal


Константы, определяющие графический режим

Графический драйвер

Константа режима

Растр

Палитра

Число страниц

Имя

Значение

Имя

Значение

CurrentDriver* -128
Detect 0
CGA 1 CGACO 0 320х200 СО 1
CGAC1 1 320х200 С1 1
CGAC2 2 320х200 С2 1
CGAC3 3 320х200 СЗ 1
CGAHl 4 640х200 2 цвета 1
MCGA 2 MCGACO 0 320х200 СО 1
MCGAC1 1 320х200 С1 1
MCGAC2 2 320х200 С2 1
MCGAC3 3 320х200 СЗ 1
MCGAMed 4 640х200 2 цвета 1
MCGAHi 5 640х480 2 цвета 1
EGA 3 EGALo 0 640х200 16 цветов 4
EGAHi 1 640х350 16 цветов 2
EGA64 4 EGA64Lo 0 640х200 16 цветов 1
EGA64Hi 1 640х350 4 цвета 1
EGAMono 5 EGAMonoHi 3 640х350 2 цвета 1**
EGAMonoHi 3 640х350 2 цвета 2***
IBM8514 6 IBM8514Lo 0 640х480 256 цветов 1
IBM8514Hi 1 1024х768 256 цветов 1
HercMono 7 HercMonoHi 0 720х348 2 цвета 2
ATT400 8 ATT400CO 0 320х200 СО 1
ATT400C1 1 320х200 С1 1
ATT400C2 2 320х200 С2 1
ATT400C3 3 320х200 СЗ 1
ATT400Med 4 640х200 2 цвета 1
ATT400Hi 5 640х400 2 цвета 1
VGA 9 VGALo 0 640х200 16 цветов 2
VGAMed 1 640х350 16 цветов 2
VGAHi 2 640х480 16 цветов 1
PC3270 10 PC3270Hi 0 720х350 2 цвета 1

* используется в процедуре GetModeRange

** 64 К на EGAMono-карте

*** 256К на EGAMono-карте

Прочие константы

Имя

Тип

Значение

Использование

Примечание

TopOn boolean True Определяют, изображать ли верхнюю грань в процедуре Bar3D Изображать
TopOff boolean False Не изображать
NormalPut word 0 Определяют способ наложения изображения при выводе процедурой Putlmage Изображение

заменяется новым

CopyPut word 0  

XORPut word 1 по логике ХОР
OrPut word 2 по логике OR
AndPut word 3 по логике AND
NotPut word 4 по логике NOT
ClipOn boolean True Определяют, отсекать ли изображение за пределами визуального порта, устанавливаемого процедурой SetViewPort Отсекать изображение
ClipOff boolean False Выводить изображение
Black word 0 Установка цвета в процедурах SetColor, SetBkColor, PutPixel Черный
Blue word 1 Синий
Green word 2 Зеленый
Cyan word 3 Циан (цвет морской волны)
Red word 4 Темно-красный
Magenta word 5 Пурпурный
Brown word 6 Коричневый
LightGray word 7 Светло-серый
DarkGray word 8 Темно-серый
LightBlue word 9 Голубой
LightGreen word 10 Ярко-зеленый
LightCyan word 11 Светлый циан
LightRed word 12 Ярко-красный
LightMagenta word 13 Ярко-пурпурный
Yellow word 14 Желтый
White word 15 Белый
EGABIack word 0 Установка цветов при работе с монитором IBM 8514 Черный
EGABlue word 1 Синий
EGAGreen word 2 Зеленый
EGACyan word 3 Циан
EGARed word 4 Темно-красный
EGAMagenta word 5 Пурпурный
EGABrown word 20 Коричневый
EGALightgray word 7 Светло-серый
EGADarkgray word 56 Темно-серый
EGALightblue word 57 Голубой
EGALightgreen word 58 Ярко-зеленый
EGALightcyan word 59 Светлый циан
EGALightred word 60 Ярко-красный
EGALightmagenta word 61 Ярко-пурпурный
EGAYellow word 62 Желтый
EGAWhite word 63 Белый
SolidLn word 0 Определение шаблона начертания линии в процедурах GetLineSettings

и SetLineStyle

Сплошная
Dotted Ln word 1 Точечная
CenterLn word 2 Пунктирная
DashedLn word 3 Штриховая
UserBitLn word 4 Определенная пользователем
EmptyFill word 0 Для установки шаблонов закраски в процедурах GetFillSettings, SetFillStyle

Цвет фона
SolidFill word 1 Цвет рисунка
LineFill word 2 Горизонт. штриховка
LtSlashFill word 3 Штриховка /////
SlashFill word 4 Утолщ. штриховка
BkSlashFill word 5 Утолщ. штриховка
LtBkSlashFill word 6 Расплывчатая штр.
HatchFill word 7 Решетка
XHatchFill word 8 Косая решетка а
InterleaveFill word 9 Частое переплетение
WideDotFill word 10 Редкие точки
CloseDotFill word 11 Частые точки
UserFill word 12 Шаблон, определенный пользователем
LeftText word 0 Установка способа привязки текста к точке вывода по горизонтали и вертикали Левым краем
CenterText word 1 По центру
RightText word 2 Правым краем
BottomText word 0 Нижним краем
CenterText word 1 По центру
TopText word 2 Верхним краем
NormWidth word 1 Определение толщины линий в процедурах GetLineSettings и SetLineStyle Одинарная
ThickWidth word 3 Тройная
DefaultFont word 0 Определение шрифта для текста в процедурах SetTextStyle и GetTextSettings Матричный шрифт
TriplexFont word 1 Триплекс
Small Font word 2 Мелкий шрифт
SansSerifFont word 3 Сан-сериф
GothicFont word 4 Готический
HorizDir word 0 Определение направления текста в процедурах SetTextStyle и GetTextSettings Горизонтальное
VertDir word 1 Вертикальное
UserCharSize word 0 Определение размера шрифта для процедур SetTextStyle и GetTextSettings Размер, определенный пользователем



HALT



HALT

Процедура HALT, или более полно HALT(n),   завершает работу программы с кодом завершения n. Этот код впоследствии может быть проанализирован, в частности командой IF ERRORLEVEL в среде MS-DOS. Значение ERRORLEVEL после остановки программы будет равно значению n. Вызов процедуры HALT без параметра эквивалентен вызову HALT(0).

На основе процедуры HALT можно легко построить программу, например ASK.PAS, для организации диалога в BAT-файлах MS-DOS.

Например:

PROGRAM

ASK;

VAR i : Word;

BEGIN

  ReadLn(i);

  HALT(i)

END.

После компиляции получаем файл – AKS.EXE

Пример BAT-файла:

@ECHO OFF

CLS

ECHO Сейчас вы можете:

ECHO 0 - Завершить работу

ECHO 1 – Запустить Norton Commander

ECHO 2 – Отформатировать жесткий диск

ECHO Ваш выбор ?

ask.exe

IF ERRORLEVEL 0 GOTO end

IF ERRORLEVEL 1 GOTO startNC

IF ERRORLEVEL 2 GOTO formatHDD

GOTO end

:startNC

   c:\nc\nc

:formatHDD

   format C: /s

:end



Идентификаторы (имена)



Идентификаторы (имена)

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

а) идентификатор может состоять только из букв, включая символ подчеркивания, и цифр (пп.1-3 алфавита языка). Использование пробела недопустимо;

б) первым символом должна быть буква;

в) строчные и прописные буквы считаются компилятором эквивалентными;

г) максимальная длина идентификатора - 126 символов. Однако компилятор различает только первые 63 символа.

Примеры идентификаторов: a, x1, alpha, ALPHA, Mass_of_Sun, speed



Ключи компиляции (дерективы компилятора)


- спициальные конструкции позволяющие управлять режимом компиляции: включать или выключать контроль ошибок, производить или нет проверку диапазонов массивов, изменять распределение памяти и т.д. Ключ компиляции представояет собой специфический коментарий, содержащий символ "$" и букву-ключ с последующим знаком "+" (включить режим) или "-" (выключить). Например,

    {$R-} - отключить проверку диапазонов индексов массивов;

    {$I+} - включить обработку ошибок ввода-вывода и т.д.

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

    {$I Имя_файла}

называемый командой включения в программу внешнего текстового файла. Эта команда заставляет компилятор считать заданный файл частью обрабатываемой программы.



Коментарии


- произвольная последовательность символов заключенная в фигурные скобки { } или в разделители вида (*   *). Коментарии используются для размещения в программе фрагментов пояснительного характера. Например,

    { Это строка коментария }

  {

   Это

   несколько строк

   коментария

  }

Кроме этого с помощью символов { } можно верменно исключить из программы определенную группу операторов, поскольку все, что является текстом коментария полностью игнорируется компилятором.



Лексический состав языка



Лексический состав языка

Лексема - это минимальная единица языка, имеющая самостоятельный смысл. В языке Паскаль имеются следующие виды лексем:



Логические выражения



Логические выражения

Условное выражение  - совокупность переменных и констант простых типов, объединеных знаками операций сравнения. Результат вычисления условного выражение - одно из двух логических значений типа Boolean: True

(истина) или False (ложь).

В языке Паскаль определены шесть операций сравнения (все они относятся к четвертому (низшему) приоритету):

< меньше
> больше
<= меньше или равно
>= больше или равно
= равно
<> не равно

Типы операндов должны быть совместимыми по присваиванию.

Примеры условных выражений (условий):  

x<2     ch='Y'    a+b<>0    sin(x)>=0.5

Важно: При сравнении вещественных чисел следует помнить, что в следствие неточности их представления в памяти компьютера (в виду неизбежности округления) стоит избегать попыток определения строгого равенства двух вещественных значений. Есть шанс, что равенство окажется ложным, даже если на самом деле это не так. Например, выражение x = (2.23*x/2.23) формально является истинным, но из-за ошибок округления в вещественном типе может оказаться ложным.

Логическое выражение - это совокупность переменных и констант логического типа, а также условных выражений, объединенных знаками логических операций. Операндами логических операций могут выступать другие логические выражения. Результат вычисления логического выражение, как и в случае условных выражений, - одно из двух логических значений типа : True

(истина) или False (ложь).

В Паскале предусмотрены четыре логические операции:

Приоритет Операция Название
I-й NOT логическое отрицание
II-й AND логическое умножение
III-й OR логическое сложение
III-й XOR логическое исключающее сложение

Результаты логических операций в зависимости от значения операндов приведены ниже в виде "таблицы истинности":

L1 L2 not L1 L1 and L2 L1 or L2 L1 xor L2
False False True False False False
False True True False True True
True False False False True True
True True False True True False

Примеры логических выражений: 

(x>=0)and(x<=10)     (ch='y')or(ch='Y')    (x=5)or(y=1)

(x+1>0)and(x+1<10) or (y>0)and(y<2)

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



Логический тип (Boolean)



Логический тип (Boolean)

- состоит всего из двух значений: False (ложно) и True

(истинно). Слова False и True

определены в языке и являются, по сути, логическими константами. Регистр букв в их написании несущественен: FALSE = false. Значения этого типа являются результатом вычислений условных и логических выражений и участвуют во всевозможных условных операторах языка.



Массив



Массив

- упорядоченная структура однотипных

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

Тип массив определяется конструкцией:

Array [диапазон]   of  ТипЭлементов;

Диапазон в квадратных скобках указывает значения индексов первого и последнего элемента в стурктуре. Примеры объявления типов и переменных:

TYPE

  Vector = array[1..10] of Real;

VAR

  V1 : Vector;

  V2 : array[0..5] of Byte;

Здесь переменная V1 определяется с использованием описанного выше типа Vector; тип переменной V2 конструируется непостредственно на этапе ее описания.

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

VAR

  M1 : array[1..3] of array[1..3] of Byte;

Это же самое можно записать гораздо компактнее:

VAR

  M2 : array[1..3, 1..3] of Byte;

Зжесь массивы M1 и M2 имеют совершенно одинаковую структуру - квадратной матрицы размером 3x3.

Доступ к элемента массива осуществляется путем указания его индекса, например:

writeln( V1[1] ); {вывод на экран первого элемента массива V1}

readln( M2[2,3] );{ввод третьего элемента второй строки матрицы М2}



Модуль CRT



Модуль CRT

Управление цветом текста и фона

Управление выводом текста

Модуль DOS

Функции работы с окружением

Функции управления прерываниями

Процедуры определения даты и времени

Процедуры установки даты и времени

Процедуры и функции работы с файлами

Дополнительные процедуры и функции

Модуль Strings



Модуль Graph



Модуль Graph

Изображение геометрических фигур и линий

Модуль Overlay

Модуль System

Интерфейс

Назначение

Арифметические функции

Function Abs(x : real): real; Абсолютное значение
Function ArcTan(x : real): real; Арктангенс угла в радианах
Function Cos(x : real): real; Косинус угла в радианах
Function Exp(x : real): real; Показательная функция (экспонента)
Function Frac(x : real): real; Дробная часть числа
Function lnt(x : real): real; Целая часть числа
Function Ln(x : real): real; Логарифм
Function Pi: real; Число ?
Function Random: real;

Function Random(Range : word): word;

Если задан диапазон Range - значение типа word от 0 до (Range - 1), если не задан - вещественное от 0 до 1.

Случайное число
Procedure Randomize; Инициализация генератора случайных чисел случайным значением
Function Sin(x : real): real; Синус угла в радианах
Function Sqr(x : real): real; Квадрат аргумента
Function Sqrt(x : real) :real; Квадратный корень из аргумента

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

Function Chr(i: byte): char;

i-код ASCII символа

Возвращает символ по его коду в таблице ASCII
Function Ord(i: Порядковый тип>): longint; Преобразует типы char и boolean к целому типу; для целых аргументов повторяет значение аргумента
Function Round(x : <вещественный тип>): longint; Округляет значение вещественного типа до целого
Function Trunc(x : <вещественный тип>): longint; Усекает значение вещественного типа до целого

Порядковые процедуры и функции

Procedure Dec(var i: <порядковый тип>); Procedure Dec(var i: <порядковый тип>, n: longint); Преобразует переменную порядкового типа i к предшествующему значению или на n шагов назад
Function High(X) :Tx;

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

Тх - совпадает по типу с порядковым типом Х или имеет целое значение для строк и массивов

Наибольшее значение для

заданного объекта порядково

го типа или наибольший

индекс для строки и массива

Procedure lnc( var i: <порядковый тип>); Procedure Inс( var i: <порядковый тип>, n : longint); Преобразует переменную порядкового типа i к последующему значению или на n шагов вперед
Function Low(X): Тх;

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

Тх - совпадает по типу с порядковым типом Х или имеет целое значение для строк и массивов

Наименьшее значение для заданного объекта порядкового типа или наименьший индекс для строки и массива
Function Odd( i: <порядковый тип>): boolean; Проверка числа на нечетность
Function Predf i: <порядковый тип>): <порядковый тип>; Возвращает предыдущее значение для порядкового типа, не изменяя переменной
Function Succf i: <порядковый тип>): <порядковый тип>; Возвращает следующее значение порядкового типа, не изменяя переменной

Байтовые операции

Function Hi(X : word): byte; Старший байт аргумента
Function Lo(X : word): byte; Младший байт аргумента
Function Swap(X: <двухбайтный аргумент>): <тип аргумента>; Перестановка старших и младших байтов аргумента

Работа с параметрами командной строки

Function ParamCount: word; Определяет число параметров, переданных программе при запуске в командной строке
Function ParamStr(Num : byte): String; Num - номер параметра Возвращает заданный параметр командной строки

Управление вычислительным процессом

Procedure Break; Выход из цикла
Procedure Continue; Завершение очередной итерации цикла
Procedure Exit; Выход из текущего блока
Procedure Halt;

Procedure Halt(ExitCode : word);

ExitCode - код завершения программы

Прекращение выполнения программы и возврат в операционную систему
Procedure RunError;

Procedure RunError(ErrorCode : byte);

ErrorCode- код ошибки

Остановка выполнения

программы и генерация

ошибки времени выполнения

Указатели и адресация

Function Addr(X : <переменная или подпрограмма>): Pointer;

X - объект (переменная, процедура или функция); Результат - адрес объекта

Определяет адрес заданного объекта
Function Cseg: word; Текущее значение регистра CS
Function DSeg: word; Текущее значение регистра DS
Function Ofs(X : <переменная или подпрограмма>): word;

X - объект (переменная, процедура или функция); Результат - смещение адреса объекта

Определяет смещение адреса заданного объекта
Function Ptr(Segment, Offset: word): Pointer; Segment, Offset - сегмент и смещение, результат указатель (полный адрес) Образует указатель по заданному сегменту и смещению
Function Seg(X : <переменная или подпрограмма>): word;

Х - объект (переменная, процедура или функция); Результат - сегмент адреса объекта

Определяет сегмент адреса заданного объекта
Function SPtr : word; Текущее значение регистра SP
Function SSeg

: word;

Текущее значение регистра SS

Работа с памятью

Procedure FillChar(varX : <переменная любого типа>; Count: word; Value : <byte или char>);

X - переменная, с которой начинается заполнение; Count - число байт; Value - заполнение

Заполняет заданное число последовательных байтов указанным значением
Procedure Movefvar

Source, Dest; Cound : word); Source - источник, Dest - приемник ; Count - число байтов;

Копирование заданного числа байтов из источника в приемник
Function SizeOf(X:<переменная любого типа или тип>): word; Число байтов, занимаемых аргументом

Работа с динамическими переменными

Function Assigned(var P : Pointer): boolean; Результат - false, если P=nil и true в противном случае Проверяет, присвоено ли значение указателю
Procedure Dispose(var Ptr: Pointer);

Procedure Dlspose(var Ptr: Pointer; Done : Destructor);

Ptr - указатель на динамическую переменную; метод Done задается при уничтожении объектов

Уничтожает динамическую переменную
Procedure FreeMem

(var Ptr: Pointer; Size : word);

Ptr - указатель на переменную; Size - размер переменной в байтах;

Уничтожает динамическую переменную заданного размера
Procedure GetMein (var Ptr: Pointer; Size : word);

Ptr - указатель на переменную; Size - размер переменной в байтах;

Создает новую динамическую переменную заданного размера и устанавливает указатель на нее
Procedure Mark(var Ptr: Pointer); Ptr -указатель; Записывает текущее состояние кучи в переменную типа указатель
Procedure New(var Ptr: Pointer); Создает новую динамическую
Procedure Dispose

(var Ptr: Pointer; Init: constructor); Ptr - указатель на динамическую переменную; метод Init задается при создании объектов

переменную и устанавливает указатель на нее
Function MaxAvail: Longint; Возвращает размер наибольшего непрерывного свободного блока кучи
Function MemAvail: Longint; Возвращает количество свобод ных байтов, имеющихся в куче
Procedure Release(var Ptr: Pointer);

Ptr - указатель;

Освобождает часть памяти, следующую после указателя

Работа с множествами

Procedure Exclude(var S : set of T; Element: T);

S - множество элементов типа T, Element - элемент типа Т

Исключает элемент из множества
Procedure lnclude(var S : set of T; Element: T);

S - множество элементов типа T, Element - элемент типа Т

Включает элемент в множество

Ввод и вывод

Procedure Assign(FileVar: <файловый тип>, File-Name);

FileVar - переменная файлового типа; FileName - строка, содержащая имя файла

Присвоение имени внешнего файла файловой переменной
Procedure ChDir(NewDir: string);

NewDir - новая директория

Изменение текущего каталога
Procedure Close(FileVar: <файловыйтип>): FileVar - переменная файлового типа; Закрытие открытого файла
Function Eof(FileVar: <файловый тип>): boolean; FileVar - переменная файлового типа Определяет, достигнут ли конец файла
Procedure Erase(FileVar: <файловыйтип>);

FileVar - переменная файлового типа

Удаление внешнего файла
Function FilePos( FileVar: <файловый тип>): longint; FileVar - переменная файлового типа; результат - текущая позиция указателя в файле Возвращает текущую позицию указателя в файле
Function FileSize(FileVar: <файловый тип>): longint; FileVar - переменная файлового типа; результат - число записей в файле Возвращает текущий размер файла
Procedure GetDir(Driv : byte; var CurrentDir: string); Driv - числовой код диска (0-текущий, 1 -А, 2-В и т.д.) CurrentDir - текущий каталог; Возвращает текущий каталог на заданном диске
Function lOResult: integer; Возвращает код состояния последней выполненной операции ввода / вывода
Procedure MRDir(NewDir: string);

NewDir - новый каталог

Открывает новый каталог
Procedure Read(FileVar: <файловый тип>; var v1,v2,....);

Procedure Read(var FileVar: Text; varv1,v2,....); Procedure Read(v1,v2,....);

FileVar - переменная файлового типа, для чтения при вводе с клавиатуры может не указываться; v1, v2,... - переменные

Считывает одно или более значений из файла в одну или более переменных
Procedure ReName(FileVar: <файловыйтип>, NewName);

FileVar - переменная файлового типа; NewName -строка, содержащая новое имя файла

Переименовывает внешний файл
Procedure ReSet( FileVar: <файловый тип>):FileVar - переменная файлового типа Открывает существующий файл
Procedure ReWrite( FileVar: <файловый тип>):FileVar - переменная файлового типа Создает и открывает новый файл
Procedure RmDir(DelDir: string);

DelDir - удаляемый каталог

Удаление пустого каталога
Procedure Seek(FileVar: <файловый тип>; Pos : longint);

FileVar - переменная файлового типа; Pos – позиция указателя

Передвигает указатель на заданную компоненту файла
Procedure Truncate(FileVar: <файловый тип>): FileVar - переменная файлового типа Усекает размер файла до текущей позиции в файле
Procedure Write(FileVar: <файловый тип>; var v1,v2,„..);

Procedure Write(var FileVar: Text; varv1,v2,....);

Procedure Write(v1,v2,....);

FileVar - переменная файлового типа, для вывода на экран может не указываться; v1,v2, ... -переменные

Записывает одно или более значений из одной или более переменных в файл

Работа со строками и символами

Function Concat(s1, s2,... : string): string;

s1, s2 - последовательность объединяемых строк

Объединение (конкатенация) последовательности строк
Function Copy(Source : String; Pos, Count: integer):string;

Source - исходная строка; Pos - номер позиции, с которой начинается копирование; Count – число копируемых символов

Копирует подстроку из строки
Procedure Delete(var Source : String; Pos, Count: integer);

Source- строка, с которой проводится операция;

Pos- номер позиции, с которой начинается удаление;

Count - число удаляемых символов

Удаляет подстроку из строки
Procedure lnsert(Source : String; var Dest: string; Pos: integer);

Source - вставляемая строка; Dest - строка, с которой проводится операция; Pos - номер позиции, с которой начинается вставка

Вставляет подстроку в строку
Function Length(S : String): integer; S - строка Определяет динамическую длину строки
Function Pos(SubStr, S : String): byte;

S - строка, в которой происходит поиск;

SubStr -искомая подстрока, результат - позиция в S, начиная с которой следует искомая подстрока. Если подстрока не содержится в строке, возвращается 0

Поиск подстроки в строке
Procedure Str(X : <целый или вещественный тип>;var S : String);

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

S - результирующая строка

Преобразует численное значение в строку
Function UpCase(Symbol: Char): Char; Преобразует буквы латинского алфавита в прописные
Procedure Val(ValueString : string; var X: <целый или вещественный тип>; var ErrorCode: integer);

ValueString - преобразуемая строка; Х – результат целого или вещественного типа; ErrorCode – код ошибки

Преобразует строку в численное значение

Текстовые файлы

Procedure Append(var F: Text); F - переменная, соответствующая текстовому файлу Открывает существующий файл для добавления текста в конец файла
Function EoLn(var F : Text): boolean ;

Значение функции true, если в файле достигнут конец строки, и false - в противоположном случае

Определяет, достигнут ли в файле конец строки
Procedure Flush(var F : Text);

F - переменная, соответствующая текстовому файлу

Выталкивает содержимое буфера в файл
Procedure ReadLn(var F: Text; var v1,v2,....);

Procedure ReadLn(varv1,v2,....);

F - текстовый файл, для чтения при вводе с клавиатуры может не указываться; v1, v2,... -переменные

Выполняет те же действия, что и Read, а потом делает пропуск до начала следующей строки файла
Function SeekEof(var F : Text): boolean;

F - текстовый файл

Определяет, достигнут ли конец файла, пропуская пробелы, символы табуляции и конца строк
Function SeekEoln(var F : Text): boolean;

F - текстовый файл

Определяет, достигнут лив файле конец строки, пропуская пробелы и символы табуляции
Function SetTextBuf(var F : Text; var But; Size : word);

Function SetTextBuf(var F : Text; var Buf);

F - текстовый файл; Buf - буфер; Size – размер буфера

Назначает буфер ввода, вывода для текстового файла
Procedure WriteLn(var F : Text; varv1,v2,....);

Procedure WriteLn(varv1,v2,....);

F - текстовый файл, для вывода на экран может не указываться; v1, v2,... - переменные

Выполняет те же действия, что и Write, а потом добавляет к файлу маркер конца строки

Работа с нетипизированными файлами

Procedure BlockRead(var F: File; var Buf: <любой тип>; Count: word);

Procedure BlockRead(var F : File; var Buf: <любой тип>; Count: word; var Result: word);

F - файл; Buf - буфер, в который осуществляется считывание; Count - число записей; Result – текущее положение указателя

Считывает из файла в переменные одну или более записей
Procedure BlockWrite(var F : File; var Buf: <любой тип>; Count :word);

Procedure BlockWrite(var F: File; var Buf: <любой тип>; Count: word; var Result: word);

F - файл; Buf - буфер, в который осуществляется считывание; Count - число записей; Result - текущее положение указателя

Записывает в файл одну или более записей из переменных
<
Модуль CRT

Интерфейс

Назначение



Установка режимов и окон

Procedure AssignCrt(File : Text); Связывает окно дисплея с текстовым файлом, что позволяет ускорить вывод на экран
Procedure CIrScr; Очищает экран и помещает курсор в верхний левый угол
Procedure TextMode(Mode: integer);

Mode - номер текстового режима или соответствующая константа
Выбор текстового режима
Procedure Window(X1, Y1, Х2, Y2 : byte);

(Х1 ,Y1) и (X2.Y2) - координаты верхнего левого и нижнего правого углов окна
Определяет окно вывода в текстовом режиме


Управление цветом текста и фона

Procedure HighVideo; Устанавливает высокую яркость выводимых символов
Procedure LowVideo; Устанавливает низкую яркость выводимых символов
Procedure Norm Video; Возвращает цвет символов и фона, свойственный данному графическому режиму по умолчанию
Procedure TextBackground(Color: byte);

Color - код цвета или соответствующая константа
Выбор цвета фона
Procedure TextColor

(Color : byte);

Color - код цвета или соответствующая константа
Выбор цвета символов


Управление выводом текста

Procedure CIrEol; Стирает все символы от текущей позиции курсора до конца строки
Procedure DelLine; Удаление линии, в которой находится курсор
Procedure InsLine; Вставляет новую строку текста перед строкой, где находится курсор


Работа с клавиатурой

Function KeyPressed

: boolean;

Значение функции true, если нажата клавиша, и false, если нет
Определяет, была ли нажата клавиша на клавиатуре
Function ReadKey

: char;

Значение функции - код символа клавиши, нажатой на клавиатуре
Чтение символа из буфера клавиатуры


Управление курсором

Procedure GotoXY( X, Y : integer);

X, Y - координаты курсора
Перемещает курсор в указанные координаты окна вывода
Function WhereX: integer;

Значение функции - координата X курсора
Возвращает текущую координату Х курсора
Function WhereY: integer;

Значение функции - координата Y курсора
Возвращает текущую координату Y курсора


Управление звуком

Procedure NoSound; Выключает звук динамика
Procedure Sound(Hz: word);

Hz - частота звука в герцах
Включает звук динамика с заданной тональной частотой


Управление временем

Procedure Delay(MS : word);

MS - значение задержки в миллисекундах
Задержка исполнения программы на заданное число миллисекунд
<




Модуль DOS





Интерфейс



Назначение



Управление вычислительным процессом

Function DosExitCode: word; Возвращает код завершения подпроцесса
Procedure Exec( Name : PathStr; CmdLine : string);

Name - имя файла - строка типа PathStr; CmdLine - командная строка запускаемой программы
Выполняет заданную программу с указанной командной строкой
Procedure Keep(ExitCode : word);

ExitCode - код завершения программы
Завершает программу и оставляет ее в памяти (реализует прерывание "завершить и оставить резидентным" - TSR)
Procedure SwapVectors; Меняет сохраненные векторы прерываний с текущими векторам


Функции работы с окружением

Function EnvCount: integer; Возвращает число строк, содержащихся в окружении
Function EnvStr(lndex : integer): string;

Index - номер строки
Возвращает указанную строку окружения
Function GetEnv(EnvVal: string): string;

EnvVal - заданная переменная окружения, результат - ее значение
Возвращает значение указанной переменной среды окружения


Функции управления прерываниями

Procedure GetlntVec(lntNo : byte; var Vector: Pointer);

IntNo - номер вектора прерывания; Vector – дальний адрес процедуры обработки
Возвращает FAR-адрес, хранящийся в указанном векторе прерывания
Procedure lntr(lntN: byte; var Regs : Registers);

IntN - номер программного прерывания (О...255);

Regs - регистры процессора (запись, тип которой определен в модуле DOS)
Выполняет указанное программное прерывание
Procedure MSDos(var Regs : Registers);

Regs - регистры процессора (запись, тип которой определен в модуле DOS)
Выполняет функцию прерывания операционной системы
Procedure SetlntVec(lntNo : byte; Vector: Pointer);

IntNo - номер вектора прерывания;

Vector - длинный адрес процедуры обработки прерывания
Устанавливает адрес процедуры обработки в заданном векторе прерывания


Процедуры определения даты и времени

Procedure GetDate(var Year, Month, Day, DayOfWeek :word);

Year - год, Month - месяц, Day - дата, DayOfWeek - день недели
Возвращает текущую дату, установленную в операционной системе
Procedure GetFTime(var F : <файловый тип>; var Time : longint);

F - файл (переменная файлового типа, типизированного, нетипизированного или текстового); Time - дата
Возвращает дату и время последней записи в файл
Procedure GetTime(var Hour, Minute, Second, SedOO: word);

Hour - часы, Minute - минуты, Second - секунды, SedOO - сотые доли секунды
Возвращает текущее время, установленное в операционной системе
Procedure PackTime(varT: DateTime; var Time: longint);

Т- запись типа DateTime, содержащая дату, часы, минуты, секунды и сотые секунды; Time - время в "упакованном" виде
Преобразует запись времени типа DateTime к одной переменной типа longint, используемой процедурой SetFTime
Procedure SetDate(Year, Month, Day : word);

Year - год, Month - месяц, Day – число
Устанавливает текущую дату операционной системы
Procedure SetFTime(var F: <файловый тип>; Time: longint);

F - переменная файлового типа; Time – время в упакованном виде
Устанавливает в файле указанное время создания


Процедуры установки даты и времени

Procedure SetTime(Hour, Minute, Second, SedOO : word);

Hour - часы, Minute - минуты, Second - секунды, Sed 00 - сотые доли секунды
Устанавливает в операционной системе текущее время
Procedure UnpackTime(Time : longint; var DT: DateTime);

Time - "упакованное" время; DT – запись "распакованного времени"
Преобразует время из упакованной формы в запись типа DateTime, содержащую дату, часы, минуты и т.д.


Функции статуса диска

Function DiskFree(Drive : byte): longint

Drive - номер диска ( 0'- текущий, 1 - А и т.д.) Результат - число свободных байтов (-1, если диск задан неверно)
Возвращает число свободных байтов на заданном диске
Function DiskSize(Drive : byte): longint

Drive - номер диска ( 0 - текущий, 1 - А и т.д.) Результат- число байтов на диске (-1, если диск задан неверно)
Возвращает общее число байтов на диске


Процедуры и функции работы с файлами

Function FExpand(Name : PathStr): PathStr

Name - имя файла
Получив имя файла, расширяет его до полностью определенного имени (диск, директория и расширение)
Function FSearch(Name : PathStr; OirList: string): PathStr

Name - имя файла; DirList - список путей для поиска; результат - найденный путь к файлу
Ищет файл в заданном списке директорий
Function FSplit(Path: PathStr; var Dir: DirStr; var Name: NameStr; var Ext: ExtStr);

Path – имя файла с полным путем;

Dir – директория; Name – имя файла; Ext - расширение
Разделяет полное имя файла на 3 части (директория, имя файла, расширение)
Procedure FindFirst(Path : String; Attr: word; var F: TSearchRec);

Path – путь для поиска с маской; Attr- атрибуты искомых файлов; F- запись типа TsearchRec с результатами поиска
Ищет в заданном каталоге первый файл, соответствующий заданной спецификации
Procedure FindNext(var F : TSearchRec);

F – запись типа TsearchRec с результатами поиска
Ищет следующие файлы, удовлетворяющиеспецификации, заданной в процедуре FindFirst
Procedure GetFAttr(var F, var Attr: word);

F - переменная файлового типа; Attr - код атрибутов файла
Определяет атрибуты файла
Procedure SetFAttr(var R Attr: word);

F - переменная файлового типа; Attr - код атрибутов файла
Устанавливает атрибуты файла


Дополнительные процедуры и функции

Function DosVersion: word;

Значение функции – номер версии DOS, при этом старший байт содержит вторую цифру номера
Возвращает номер версии DOS
Procedure SetCBreak(var Break : boolean);

Break - если true, прерывание по Ctrl-Break установлено
Возвращает состояние проверки Ctrl-Break в DOS
Procedure SetVerify(var Verify : boolean); Возвращает состояние флага верификации в DOS.
Procedure SetVerify(Verify : boolean); Устанавливает состояние флага верификации в DOS
Procedure SetCBreak(var Break : boolean);

Break - если true, прерывание по Ctrl-Break установлено
Устанавливает состояние Ctrl-Break в DOS
<




Модуль Strings





Интерфейс



Назначение



Создание, уничтожение, длина

Function StrDispose(Str: Pchar);

Str - уничтожаемая строка
Освобождает память в куче, занятую строкой
Function StrEnd(Str: PChar): Pchar; Возвращает указатель на конец заданной строки
Function StrLen(Str: PChar): word; Определяет число символов в строке
Function StrNew(Str: PChar): PChar; Выделяет память в куче под строку


Объединение строк

Function StrCat(Dest, Source : PChar): PChar;

Dest - первая и результирующая строка; Source - добавляемая строка
Копирует одну строку после конца другой и возвращает указатель на объединенную строку
Function StrLCat(Dest, Source :.PChar; MaxLen : word) : PChar;

Dest - первая и результирующая строка; Source - добавляемая в конец строка; MaxLen – максимальная длина результирующей строки
Объединяет две строки с контролем длины результирующей строки


Сравнение строк

Function StrComp(Str1, Str2 : PChar): integer;

Str1 и Str2 - сравниваемые строки; результат сравнения

<0, если Str1 <Str2

=0, если Str1 = Str2

>0, если Str1 > Str2
Сравнивает две строки
Function StrlComp(Str1, Str2 : PChar): integer;

Str1 и Str2 - сравниваемые строки; результат сравнения аналогично StrComp
Сравнивает две строки, игнорируя разницу прописных и строчных букв (латинского алфавита)
Function StrLComp(Str1, Str2 : PChar; MaxLen : word): integer;

Str1 и Str2 - сравниваемые строки; MaxLen – число сравниваемых символов; результат сравнения - как у функции StrLComp
Сравнивает две строки, используя определенное число символов
Function StrLIComp(Str1, Str2 : PChar; MaxLen : word): integer;

Str1 и Str2 - сравниваемые строки; MaxLen – число сравниваемых символов; результат сравнения - как у функции StrLComp
Сравнивает определенное число символов двух строк, игнорируя разницу прописных и строчных букв (латинского алфавита)


Копирование

Function StrCopy(Dest, Source : PChar): PChar;

Source - источник; Dest - результат. Значение функции - указатель на Dest
Копирует строку Source в строку Dest
Function StrECopy(Dest, Source : Pchar): PChar;

Dest - первая и результирующая строка; Source - добавляемая строка
Копирует одну строку после другой и возвращает указатель на конец результирующей строки
Function StrLCopy(Dest, Source : PChar; MaxLen word): PChar;

Dest - строка, откуда ведется копирование; Source - строка, куда ведется копирование; MaxLen – число символов
Копирует определенное число символов одной строки в другую
<




Модуль Graph





Интерфейс



Назначение



Управление графическим режимом

Procedure CloseGraph; Закрывает графический режим
Procedure DetectGraph(var grDriver, grMode : integer);

GrDriver - код драйвера, grMode - код графического режима
Определяет рекомендуемые к применению для данного компьютера графические драйвер и режим
Function GetDriverName : string;

Значение функции - имя используемого драйвера
Определяет имя файла с используемым графическим драйвером
Function GetGraphMode : integer;

Значение функции - код графического режима
Определяет код используемого графического режима
Function GetMaxMode : integer;

Значение функции - максимальное значение кода режима
Определяет максимальное значение кода графического режима для используемого драйвера
Function GetModeName : string;

Значение функции - имя используемого графического режима
Определяет имя используемого графического режима
Procedure GetModeRange(grDriver: integer; var LoMode, HiMode : integer);

grDriver - код графического режима;

LoMode, HiMode - наименьшее и наибольшее значение кода графического режима для данного драйвера
Определяет минимальное и максимальное значение кода графического режима для указанного при обращении драйвера
Procedure GraphDefaults; Устанавливает графический указатель в начало координат и переустанавливает графическую систему
Function GraphErrorMsg(ErrorCode : integer): string;

ErrorCode - код графической ошибки.

Значение функции - текстовое сообщение о характере ошибки
Дает строку - сообщение об ошибке графического режима по коду ошибки
Function GraphResult: integer;

Значение функции - код ошибки
Определяет, произошла ли ошибка при исполнении процедур модуля
Procedure lnitGraph(var grDriver, grMode : integer; PathToDriver: string);

grDriver - код драйвера, grMode - код графического режима; PathToDriver - путь к файлу используемого драйвера
Устанавливает заданный графический режим
Function InstallUserDriver(Name : string; AutoDetectPtr: Pointer): integer;

Name - имя файла графического драйвера AutoDetectPtr - указатель на процедуру, определяющую успешность запуска драйвера. Значение функции - цифровой код установленного драйвера.
Инсталлирует пользовательский драйвер графического режима
Procedure RegisterBGIdriver(Driver: pointer) : integer;

Driver - указатель на драйвер
Регистрирует драйвер графической системы
Procedure RestoreSrtMode; Закрывает графический режим и восстанавливает текстовый режим, установленный ранее
Procedure SetGraphMode(grMode: integer);

grMode - код графического режима
Устанавливает другой графический режим без изменения драйвера


Управление экраном и окнами

Procedure ClearDevice; Очищает экран, сбрасывает все графические установки к значениям по умолчанию, устанавливает графический указатель в положение (0,0)
Procedure ClearViewPort; Очищает экран, устанавливая фон, заданный в SetBRColor
Function GetMaxX: integer;

Значение функции - максимальная координата X
Function GetMaxY: integer;

Значение функции - максимальная координата Y
Procedure GetAspectRatio(var Xasp, Yasp : word ); Определяет коэффициенты, характеризующие расстояния между пикселами по осям Х и Y
Function GetBkColor: word;

Значение функции – код цвета фона
Определяет установленный цвет фона


Экран в целом и окна

Procedure GetViewSettings(var ViewPort: ViewPortType);

Viewport - параметры текущего окна
Запрашивает текущие параметры окна и отсечения
Procedure SetBkColor(Color: word);

Значение функции - код цвета фона
Устанавливает цвет фона
Procedure SetActivePage(Page : word);

Page - номер активной страницы
Устанавливает активную графическую страницу
Procedure SetAspectRatio(var Xasp, Yasp : word );

Xasp, Yasp - коэффициенты по осям Х и Y
Изменяет масштабный коэффициент отношения сторон экрана
Procedure SetVisualPage(Page : word);

Page - номер активной страницы
Устанавливает номер видимой графической страницы
Procedure SetViewPort(X1, Y1, X2, Y2 : integer; Clip : boolean);

(X1, Y1) (X2, Y2) - координаты противоположных углов окна; Clip определяет, отсекать ли изображение за пределами окна (true) или нет (false)
Устанавливает визуальный порт (окно) для вывода графического изображения


Управление цветом

Function GetColor : word;

Значение функции - код цвета
Возвращает текущий цвет

(установленный SetColor)
Procedure GetDefaultPalette(var Palette : PaletteType); Palette - палитра (массив типа PaletteType) Определяет, какая палитра действует в режиме по умолчанию
Function GetMaxColor : word;

Значение функции - максимальный код цвета
Определяет максимальный код цвета в установленном режиме
Procedure GetPalette(var Palette : PaletteType);

Palette - палитра (массив типа PaletteType)
Определяет, какая палитра установлена
Function QetPaletteSize : word;

Значение функции - количество цветов в палитре
Возвращает размер таблицы палитры
Procedure SetAIIPalette(var Palette : PaletteType);

Palette - палитра (массив типа PaletteType)
Устанавливает все цвета палитры
Procedure SetColor(Color: word);

Color - код цвета
Устанавливает цвет для линий
Procedure SetPalette(ColorNum, Color: word);

ColorNum - код заменяемого цвета; Color - код нового цвета
Устанавливает один новый цвет в палитре
Procedure SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue : word );

ColorNum - код устанавливаемого в палитре цвета; RedValue, GreenValue, BlueValue – интенсивность красного, зеленого и синего для этого цвета
Устанавливает в палитру цвет, заданный тремя компонентами: красным, зеленым и синим


Управление указателем

Function GetX : integer;

GetX - координата X указателя
Возвращает координату Х текущего положения указателя
Function GetY: integer;

GetY - координата Y указателя
Возвращает координату Y текущего положения указателя
Procedure MoveTo(X : integer; Y : integer);

X, Y - координаты точки экрана
Перемещает указатель в точку, заданную координатами X, Y
Procedure MoveRel(DeltaX : integer; DeltaY : integer);

DeltaX, DeltaY - вектор приращений координат точки экрана
Перемещает указатель в точку, координаты которой отличаются от текущих координат на величину DeltaX, DeltaY


Шаблоны, закраска областей

Procedure FloodFill(X, Y : integer; ColorBorder: word);

X, Y - координаты точки, вокруг которой идет закраска; ColorBorder - цвет, обозначающий границы области закраски
Закрашивает произвольную область по заданным шаблону и цвету, вокруг заданной точки до границ, обозначенных определенным цветом
Procedure GetFillPattern(var FillPattern : FillPatternType);

FillPattern - массив типа FillPatternType, содержащий информацию о шаблоне
Определяет установленный тип шаблона
Procedure GetFillSettings(var Filllnfo : FillSettingsType);

Filllnfo - запись типа FillSettingsType, содержащая информацию о шаблоне
Определяет установленный тип шаблона
Procedure GetLineSettings(var Linelnfo : LineSetting-sType);

Linelnfo - запись типа LineSettingsType, содержащая информацию о типе линии
Определяет установленный тип линии
Procedure SetGraphBufSize(Size : word);

Size - размер буфера
Изменяет размер буфера для функций заполнения
Procedure SetFillPattern(Pattern: FillPatternType; Color: word);

Pattern - массив типа FillPatternType, содержащий информацию о шаблоне; Color - цвет закраски
Устанавливает шаблон и цвет закраски
Procedure SetFillStyle( Pattern, Color: word );

Pattern - код стандартного шаблона, Color – цвет закраски
Устанавливает один из стандартных шаблонов и цвет закраски
Procedure SetLineStyle(lineStyle, Pattern, Thickness : word);

LineStyle - код стиля линии, Pattern - собственный шаблон линии, Thickness - толщина линии
Устанавливает стиль линии как один из стандартных или по собственному шаблону


Изображение геометрических фигур и линий

Procedure Arc(X, Y: integer; StartAngle, EndAngle, R : word);

X, Y - координаты центра окружности; StartAngle, EndAngle - начальный и конечный углы дуги окружности в градусах ( 0 359); R-радиус окружности в пикселах в направлении Х
Дуга окружности. Процедура учитывает неодинаковость

масштаба по осям
Procedure Bar(X1, Y1, Х2, Y2 : integer);

(Х1, Y1) и (Х2, Y2) - координаты левого верхнего и правого нижнего углов прямоугольника
Окрашенный прямоугольник без контура
Procedure Bar3D(X1, Y1, Х2, Y2 : integer; Depth : word; Top : boolean);

(X1, Y1) и (Х2, Y2) - координаты левого верхнего и правого нижнего углов параллелепипеда; Depth - его глубина; Тор -определяет, изображать ли верхнюю грань фигуры (true - изображать).
Изображает трехмерный прямоугольный параллелепипед, с заполнением передней грани. Верхняя грань может изображаться или нет
Procedure Circle(X, Y : integer; R : word);

(X, Y) - координаты центра окружности; R - радиус в направлении оси Х
Окружность. Процедура учитывает неодинаковость масштаба по осям
Procedure DrawPoly(NumPoints : word; var PolyPoints);

NumPoints - число точек, задающих ломаную линию, PolyPoints - массив точек (элементов типа Point), задающих ломаную линию
Ломаная линия, проходящую через заданный массив точек
Procedure Ellipse(X, Y : integer; StartAngle, EndAngle, Rx, Ry :word);

X, Y - координаты центра эллипса; StartAngle, EndAngle -начальный и конечный углы дуги эллипса в градусах(0 359); Rx, Ry - полуоси эллипса в направлениях Х и Y в пикселах
Дуга эллипса,начиная от StartAngle до EndAngle, полуоси эллипса в направлениях Х и Y заданы в пикселах и не учитывают масштаб изображения по осям
Procedure GetArcCoords(var ArcCoords: ArcCoordsType);

ArcCoords - запись, содержащая координаты дуги
возвращает координаты дуги, изображенной процедурами Arc и Ellipse
Procedure FillEllipse(X, Y : integer; Rx, Ry : word);

X, Y - координаты центра эллипса; Rx, Ry - полуоси эллипса в направлениях Х и Y в пикселах
Чертит закрашенный эллипс, полуоси эллипса в направлениях Х и Y заданы в пикселах; масштаб изображения по осям не учитывается
Procedure FillPoly(NumPoints : word; var PolyPoints);

NumPoints - число точек, задающих ломаную линию, PolyPoints - массив точек (элементов типа point), задающих ломаную линию
Изображает закрашенный многоугольник, заданный массивом вершин
Function GetPixel(X, Y : integer): word;

X, Y - координаты точки, результат - цвет точки
Возвращает цвет заданной точки
Procedure Line (x1, у1, х2, у2 : integer);

(х1,у1) и (х2,у2)-координаты конечных точек отрезка прямой
Чертит отрезок прямой по двум заданным конечным точкам
Procedure LineRel(DeltaX, DeltaY : integer);

(DeltaX, DeltaY) - смещение конечной точки относительно начального положения указателя
Чертит отрезок прямой от положения указателя до точки, смещенной относительно указателя на заданную величину. Перемещает указатель в конечную точку
Procedure LineTo(X, Y : integer);

(X, Y) - координаты точки, в которую проводится отрезок
Чертит отрезок прямой от точки положения указателя до заданной точки. Перемещает указатель в эту точку
Procedure Rectangle (x1, у1, х2, у2 : integer);

(x1, у1) и (х2, у2) - координаты противоположных углов прямоугольника
Чертит контур прямоугольника
Procedure Sector(X, Y : integer; StartAngle, EndAngle, Rx, Ry :word);

X, Y - координаты центра эллипса; StartAngle, EndAngle -крайние углы сектора эллипса в градусах (0...359); Rx, Ry - полуоси эллипса в направлениях Х и Y в пикселах
Изображает заполненный сектор эллипса, ограниченный углами от StartAngle до EndAngle. Заполняется сектор от минимального до максимального значения углов, независимо от их следования
Procedure PieSlice(X, Y : integer; StartAngle, EndAngle, R :word);

X, Y - координаты центра эллипса; StartAngle, EndAngle - крайние углы сектора эллипса в градусах (0...359); R - радиус окружности в направлении Х в пикселах
Изображает закрашенный сектор круга, ограниченный углами от StartAngle до EndAngle, радиус круга задан в пикселах в направлении Х и учитывает масштаб изображения по осям. Заполняется сектор от минимального до максимального значения углов, независимо от их следования
Procedure PutPixel(X, Y : integer; Color: word);

X, Y - координаты точки, Color - цвет точки
Окрашивает точку экрана в заданный цвет


Вывод текста

Procedure GetTextSettings(var Textlnfo : TextSettingsType);

Textlnfo - запись, содержащая действующие установки вывода текста
Определяет установки вывода текста
Procedure OutText(Text: string);

Text - выводимая строка текста
Выводит текст на экран начиная с позиции графического указателя. Позиция графического указателя смещается на ширину выводимого текста
Procedure OutTextXY(X, Y : integer; Text: string);

X, Y - координаты точки, к которой привязывается выводимый текст;

Text - выводимая строка текста
Выводит текст на экран относительно заданной точки, с учетом используемого типа юстировки
Function lnstallUserFont(FontFileName : string): integer;

FontFileName - имя файла, содержащего шрифт; Результат - номер (код) установленного шрифта
Инсталлирует новый шрифт
Procedure RegisterBGIFont(Font: pointer): integer;

Font - указатель на шрифт
Регистрирует шрифт для графической системы
Procedure SetTextJustify(Horiz, Vert: word); Horiz, Vert - коды привязки текста по горизонтали и вертикали Устанавливает тип привязки текста к точке вывода по горизонтали и вертикали
Procedure SetTextStyle(Font, Direction, CharSize : word);

Font - тип используемого шрифта, Direction -направление вывода надписи, CharSize – размер символов
Устанавливает стиль выводимого текста
Procedure SetUserCharSize(MultX, DivX, MultY, DivY: word); MultX, DivX, MultY, DivY - коэффициенты умножения (Mult) и деления (Div) по осям X и Y, соответственно Масштабирование шрифтов с произвольным дробным масштабом
Procedure SetWriteMode(WriteMode: integer);
Function TextHeight(Text: string): integer;

Text - строка выводимого текста. Результат - высота текста в пикселах
Определяет высоту текстовой строки при заданных установках стиля
Function TextWidth(Text: string): integer;

Text - строка выводимого текста. Результат - длина текста в пикселах
Определяет длину текстовой строки при заданных установках стиля


Копирование части экрана

Procedure Getlmage(X1, Y1, Х2, Y2 : integer; var BitMap: pointer);

(X1, Y1) и (Х2, Y2) - координаты противоположных углов прямоугольника, ограничивающего копируемую область экрана; BitMap - указатель на область памяти, отведенную для хранения данного изображения
Копирует в ОЗУ прямоугольную область экрана
Function lmageSize(X1, Y1, Х2, Y2 : integer): word;

(X1, Y1) и (Х2, Y2) - координаты противоположных углов прямоугольника, ограничивающего область экрана; значение функции - объем информации в байтах
Определяет размер в байтах памяти, необходимой для хранения прямоугольной области экрана
Procedure Putlmage(X, Y : integer; var BitMap : Pointer; BitBIt: word);

X, Y - координаты левого верхнего угла для выводимого изображения; BitMap - указатель на область памяти; BitBIt - код логической операции
Выводит изображения из памяти ЭВМ в указанную область экрана с заданной логической операцией наложения нового изображения на старое





Модуль Overlay



Модуль Overlay

Интерфейс

Назначение

Procedure OvrClearBuf; Очищает буфер оверлеев
Function OvrGetBuf: Longint; Возвращает текущий размер области оверлеев
Function OvrGetRetry: Longint; Возвращает текущий размер области апробирования в байтах
Procedure OvrlnitfFileName

: string);

FileName - имя файла оверлея

Инициализирует менеджер оверлеев и открывает оверлейный файл
Procedure OvrlnitEMS; Если возможно, загружает оверлейный файл в EMS
Procedure OvrSetBuf(Size : Longint);

Size - размер оверлейного буфера

Устанавливает размер оверлейного буфера
Procedure OvrSetRetry(Size : Longint);

Size - размер области в байтах

Устанавливает размер области апробации в буфере оверлеев



Неименованные константы (изображения)


. Группа лексем обозначающая числа, символы, строки и некоторые другие значения. Например, 'a' - символ "а"; 'Турбо Паскаль'

- текстовая строка, 123 - целое число, 123.5 или 1.235Е2 - вещественное число.



Общая структура подпрограммы



Общая структура подпрограммы

Подпрограмма это часть программы, оформленная в виде отдельной синтаксической конструкции и снабженная именем. "Вызов" подпрограммы, т.е. выполнение действий, заданных в подпрограмме в виде операторв, может быть произведен в некоторой точке программы посредством указания имени этой подпрограммы. Кроме задания последовательности действий, любая подпрограмма может содержать описание некоторой совокупности локальных объектов - констант, типов, переменных и т.д. Эти объекты предназначены для организации действий внутри подпрограммы и имеют смысл (т.е. доступны или видимы) только внутри данной подпрограммы [1].

Механизм подпрограмм в языке Турбо Паскаль реализован в виде процедур и функций. Они имеют почти одинаковую структуру, один и тот же смысл, но различаются назначением и способом вызова.



Одно важное замечание



Одно важное замечание

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

PROCEDURE PrintVector( V : array[1..10] of Real );

Правильное описание параметра показано ниже

TYPE

  Tvector = array[1..10] of Real;

PROCEDURE PrintVector( V : Tvector );



Оператор цикла с предусловием WHILE



Оператор цикла с предусловием WHILE

Применяется для организации циклов с неизвестным заранее числом повторений, логика которых предполагает выполнение цикла пока истинно некоторое условие.

Синтаксис оператора WHILE:

WHILE Условие DO

Оператор;

Конструкция WHILE…DO переводится как “пока…делать”. Оператор (простой или составной), стоящий после служебного слова DO и называемый телом цикла, будет выполнятся циклически, пока значение “Условия” равно TRUE (истина). Само условие цикла может быть логической константой, переменной или логическим выражением.

Условие выполнения тела цикла WHILE проверяется до начала каждой итерации. Поэтому если условие сразу не выполняется, то тело цикла игнорируется и будет выполнятся оператор, стоящий сразу за телом цикла.

Оператором в теле цикла может быть другой циклический оператор, т.е. циклы могут быть вложенными.

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

Пример цикла WHILE: Вычисление факториала 10! = 1·2·3·4·5·6·7·8·9·10

VAR

Factorial, N : Integer;

BEGIN

  Factorial := 1; {стартовое значение факториала =0! }

  N := 1;         {стартовое значение для условия цикла }

  WHILE N<=10 DO

               {заголовок цикла, условие }

   begin

                       {начало тела цикла }

     Factorial := Factorial*N; {вычисление факториала N! }

     N := N + 1                 {N должно меняться в цикле}

   end;                         {конец тела цикла }


  WriteLn(’10!= ’,Factorial);  {вывод результата расчета }

END.

Обратите внимание на присваивание N:=1

пред циклом. Без него значение N может быть любым, и условие может оказаться некорректным, не говоря уже о самом значении факториала. Значение N меняется внутри цикла. При этом гораздо безопаснее так писать тело цикла, чтобы оператор, влияющий на условие, был бы последним. Это гарантирует от нежелательных переборов. Если, скажем, в рассмотренном выше примере, поставить строку N:=N+1; перед вычислением факториала, то результатом программы будет значение 11!. Исправить оплошность можно, заменив стартовое значение N на 0, а условие – на N<10. Но от этого программа вряд ли станет нагляднее.



Оператор цикла с постусловием REPEAT…UNTIL



Применяется для организации циклов с неизвестным заранее числом повторений, логика которых предполагает выполнение цикла до тех пор пока не станет истинным некоторое условие.



Синтаксис оператора REPEAT…UNTIL:



REPEAT

  Оператор1;

  Оператор2;

  ···

  ОператорN;

UNTIL Условие;

Операторы (Оператор1, Оператор2, … ОператорN), образующие тело цикла, будут выполнятся циклически, до тех пор пока значение “Условия” не станет равно TRUE (истина). Иными словами, в цикле REPEAT…UNTIL условием продолжения итераций является невыполнение “Условия” (его значение FASLE – ложь).

Условие цикла может быть логической константой, переменной или логическим выражением.

Оператор REPEAT…UNTIL имеет две части: начальную (слово REPEAT) и завершающую (слово UNTIL), которые охватывают группу операторов, составляющих тело цикла. Поэтому необходимости в использовании составного оператора для построения тела цикла из нескольких простых операторов не возникает.

Принципиальное отличие оператора REPEAT…UNTIL от оператора WHILE в том, что проверка условия производится не перед началом выполнения тела цикла, а после его выполнения, когда решается вопрос, повторить ли еще раз действия. Поэтому тело цикла всегда выполняется по крайней мере один раз.





Пример 1. Проверка ввода



VAR

  N : Integer;

BEGIN

  . . .

  REPEAT

    Write(‘Введите целое число от 0 до 10: ’);

    ReadLn(N);

  UNTIL (N>=0) and (N<=10);

  . . .

END.

В этом примере программа будет запрашивать ввод числа до тех пор, пока пользователь не введет “правильное” число.



Пример 2. “Вечный цикл”



REPEAT UNTIL False;

Этот цикл пустой и никогда не прекращающийся. Он хорош только в том случае, когда нужно заблокировать программу, и, возможно весь компьютер. (Но если отбросить шутки, то можно и его пристроить в дело. Обычно так организуют программы с повторяющимися действиями: вначале программы ставят REPEAT, а в конце – UNTIL False. А прервать цикл можно специальными операторами EXIT и HALT). Это имеет смысл, если условий завершения программы много или они очень сложны.)



Оператор цикла с параметром FOR



Оператор цикла с параметром вводится для организации “строгих” циклов, которые должны быть проделаны заданное число раз. Кроме того, циклы с параметром позволяют организовать автоматическое изменение значения некоторой переменной в определенном диапазоне.



Синтаксис оператора FOR:



FOR

ПараметрЦикла := МладшееЗначение TO

СтаршееЗначение DO Оператор;

или

FOR

ПараметрЦикла := СтаршееЗначение DOWNTO

МладшееЗначение DO Оператор;

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

(от стартового до конечного включительно) может быть только  порядкового (целочисленного. символьного, логического) или перечислимого типа! Параметр цикла это обычная переменная, описанная в текущем блоке. Шаг изменения значения параметра цикла всегда постоянный (в случае целочисленного типа равен единице).

Изменение параметра цикла может быть как возрастающим, так и убывающим. В первом случае МладшееЗначение должно быть больше чем Старшее, а во втором – наоборот.



Примеры оформления циклов с параметром.





VAR i : integer;

BEGIN

  FOR i := 1 TO 10 DO Write(i:5);

  FOR i := 5 DOWNTO 0 DO

Write(i:5)

END.

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

CONST n = 10;

      m = 3;

VAR i,

    k : integer;

BEGIN

  k := 1;

  FOR i := k TO n DO Write(i:5);

  FOR i := (m+2) DOWNTO 0 DO

Write(i:5)

END.

Выполнение цикла начинается с присваивания параметру стартового значения. Затем следует проверка, не превосходит ли параметр конечное значение (случай с TO) или не является ли он меньше конечного значения (случай с DOWNTO). Если результат проверки утвердительный, то цикл считается завершенным. В противном случае выполняется тело цикла (оператор, следующий за словом DO), и после этого параметр цикла меняет свое значение на следующее. Далее снова производится проверка значения параметра цикла, т.е. алгоритм повторяется.



Запрещается

изменять параметр цикла и его старшее и младшее значения внутри тела цикла. Кроме того, параметр цикла не может участвовать в построении диапазонов этого же цикла. Компилятор таких “незаконных” действий не замечает, но программа, содержащая цикл с заголовком типа

FOR i := i-5 TO

i+5 DO ... ;

не заслуживает никакого доверия, даже если запускается!

Операторы FOR могут быть вложенными друг в друга, например

VAR

  i,j : integer;

BEGIN

  WriteLn(‘Таблица умножения’);

  FOR i := 1 TO 10 DO begin

     FOR j := 1 TO 10 DO

Write((i*j):5);

    WriteLn;

  end;

END.






Описание констант



Описание констант

Перейти к: | | Типизированные константы | |

Раздел описания CONST позволяет ввести в программу , являющиеся синонимами (представителями) определенных значений. Описание константы представляет собой пару "идентификатор - значение", разделителем пары служит символ "=".



Описание переменных



Описание переменных

Перейти к: |

| | |

Переменные вводятся в программу для хранения и передачи данных внутри нее. Все переменные, которые предполагается использовать в программе должны, прежде всего, быть определены в разделе описания переменных. Описание переменных начинается со служебного слова VAR, вслед за которым располагается последовательность самих определений переменных.  Определение переменной заключается в указании ее имени (идентификатора) и . Имя и тип разделяются двоеточием. После объявления и описания переменной должен стоять символ ";". Концом блока описания будет начало какого-либо другого блока программы или описание процедур и функций.



Описание типизированных констант



Описание типизированных констант

Перейти к: |

| | Описание типов |

Наряду с обычными константами Турбо Паскаль допускает использование типизированных констант. Название "типизированная константа" не совсем удачное (а точнее совсем не удачное), поскольку, по своим характеристикам, она (типизированная константа) скорее переменная нежели константа. Вот эти характеристики:

при описании типизированных констант явно указывается их тип;

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

типизированные константы описываются в разделе CONST и также, как простые константы, получают при описании (начальное) значение;

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



Описание типов



Описание типов

Перейти к: |

| | Типизированные константы |

Наряду с обычными константами Турбо Паскаль допускает использование типизированных констант.



Открытые параметры-массивы



Открытые параметры-массивы

Открытые параметры-массивы дают возможность передавать в подпрограмму массивы, размер которых не фиксируется в объявлении подпрограммы. Этот механизм позволяет создавать максимально гибкие и универсальные подпрограммы для обработки массивов произвольного размера.

Синтаксис описания открытых параметров-массивов:

ИмяПодпрограммы ( VAR P : array of ТипЭлементов );

Это единственное исключение из правила, согласно которому типы формальных параметров в заголовках подпрограмм могут задаваться только посредством идентификаторов (см. замечание выше). Подпрограмма, содержащая открытый массив в списке своих формальных параметров, может быть вызвана с массивом ЛЮБОГО размера (типы элементов массивов из формального и фактического параметров должны, естественно, совпадать). Заметим, что в качетсве открытых массивов допускаются ТОЛЬКО одномерные массивы [1].

Реальные границы переданного в подпрограмму массива можно определить используя две функции Low и High. Эти функции предназначены для определения граничных значений типов и переменных. В данном случае функция Low будет всегда возвращать 0, а функция High - верхнее значение индекса равное (n-1), где n-число элементов в переданном массиве. Например:

PROGRAM

TestOpenArray;

VAR

  A : array[-5..5] of Byte;


PROCEDURE P( var V : array of Byte );

BEGIN

  WriteLn('Нижний индекс V: ', Low(V));

  WriteLn('Верхний индекс V: ', High(V));

END;

BEGIN

  WriteLn('Нижний индекс A: ', Low(A));

  WriteLn('Верхний индекс A: ', High(A));

  P(A);

  ReadLn;

END.

Выполнение этой программы приведет к выводу на экран следующей информации:

Нижний индекс А: -5

Верхний индекс А: 5

Нижний индекс V: 0

Верхний индекс V: 10

В качестве полезного примера приведем функцию вычисляющую сумму элементов произвольного массива вещественных чисел [1]:

FUNCTION Sum( var V : array of Real ) : Real;

VAR

  i : Word;

  S : Real;

BEGIN

  S := 0;

  for i:=Low(V) to High(V) do

S := S + V[i];

  Sum := S

END;

[1] Е.А.Зуев, Программирование на языке Turbo Pascal 6.0/7.0 -М.: Радио и связь, 1993.



Параметры подпрограмм



Параметры подпрограмм

Параметры подпрограмм используются для обмена значениями между вызываемой и вызывающей частями программы. Описываемые в заголовке объявления подпрограммы параметры называвются формальными, а те, которые подставляются на их место при вызове, - фактическими. Параметры подпрограмм разделяются на параметры-значения, параметры-переменные и параметры-константы.



Порядковые типы


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



Построение дуг и окружностей



3.8. Построение дуг и окружностей

Процедура вычерчивания окружностей текущим цветом имеет вид:

Circle( X, Y, Radius ),

где X, Y – координаты центра окружности, а Radius – ее радиус. Например, следующий фрагмент выводит ярко-зеленую окружность c радиусом 50 пикселов и центром в точке 450, 100:

SetColor( LightGreen );

Circle( 450, 100, 50 );

Для вычерчивания дуг используется процедура

Arc( X, Y, StartAngle, EndAngle, Radius ),

где X, Y –

координаты центра дуги, StartAngle и EndAngle – начальный и конечный угол (в градусах), Radius – радиус. Очевидно, что если StartAngle = 0, а EndAngle = 359, то вычерчивается полная окружность.



Построение прямоугольников



3.7. Построение прямоугольников

Для построения прямоугольных фигур имеется несколько процедур. Первая из них – процедура вычерчивания одномерного прямоугольника:

Rectangle( X1, Y1, X2, Y2 ),

где X1, Y1 – координаты верхнего левого угла, X2, Y2 – координаты правого нижнего угла прямоугольника. Ниже в качестве примера приведен фрагмент, который выводит на экран 100 разноцветных прямоугольников произвольной высоты:

FOR

i:=1 TO 100 DO BEGIN

  SetColor( Random(15) ); { “случайный” цвет }

  Rectangle( 200, Random(300), 250, 300 ); { i-й прямоугольник }

  Delay(100); { задержка 100 мс }

  ClearDevice { очистка экрана }

END;

Для построения закрашенных прямоугольников используется процедура:

Bar( X1, Y1, X2, Y2 ),

где параметры X1, Y2, X2 и Y2 имеют то же смысл, что и в процедуре Rectangle.

Цвет и стиль закраски устанавливается процедурой

SetFillStyle( Pattern, Color ),

где параметр Pattern определяет стиль (шаблон) заливки, а параметр Color – ее цвет. Возможные значения параметра Pattern приведены в таблице 3.

Таблица 3. Стили заливки

Описание стиля

Константа

Описание стиля

Константа

Заполнение цветом фона (SetBkColor) EmtyFill = 0 Вертикально-

горизонтальная

штриховка

HatchFill = 7
Заполнение текущим цветом (SetColor) SolidFill = 1 Разреженная

штриховка

крест-накрест

XhatchFill = 8
Заполнение символами - - LineFill = 2 Частая штриховка

крест-накрест

InterLeaveFill = 9
Заполнение символами // нормальной толщины LtslashFill = 3 Заполнение

разреженными

точками

WideDotFill = 10
Заполнение символами // удвоенной толщины SlashFill = 4 Заполнение частыми точками CloseDotFill = 11
Заполнение символами \\ нормальной толщины BkSlashFill = 5 Пользовательский

стиль

UserFill = 12
Заполнение символами \\ удвоенной толщины LtBkSlashFill = 6

Для построения “объемных” закрашенных прямоугольников используется процедура:

Bar3D( X1, Y1, X2, Y2, Depth, Top ).

Тип и цвет заливки устанавливается процедурой SetFillStyle. Параметр Depth определяет глубину трехмерного контура. Чаще всего его значение равно четверти ширины прямоугольника:

Depth := (X2-X1) div 4;

Параметр Top определяет, строить над прямоугольником вершину (True) или нет (False). Например:

SetFillStyle( XhatchFill, Red );

Bar3D( 10, 10, 50, 100, 10, True );



Процедуры


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



Процедуры BREAK, CONTINUE, EXIT и HALT



Процедуры BREAK, CONTINUE, EXIT и HALT

Процедура BREAK применяется для досрочного прекращения циклов WHILE, REPEAT…UNTIL и FOR.

Пример: Определение номера первого нулевого элемента в массиве А

VAR

  i, num : Integer;

  A : array[1..10] of Integer;

BEGIN

  . . . { Ввод элементов массива А }

  num := 0;

  FOR i:=1 TO 10 DO { Цикл для i от 1 до 10 }

   IF A[i]=0 THEN begin { если найден нулевой элемент }

                    num := i; { запоминаем его номер }

                    BREAK      { прекращаем цикл }

                  end;

  IF num <> 0 THEN WriteLn(num)

              ELSE

WriteLn(‘Нулевых элементов нет’);

END.

Процедура CONTINUE вызывает переход к следующей циклической итерации игнорируя расположенные ниже операторы, составляющие тело цикла.

Пример: Определение наибольшего общего делителя (НОД) двух чисел

VAR

  CommDiv,        { кандидат в НОД }

  num1,           { первое число }

  num2 : Integer; { второе число }

BEGIN

  Write(‘Введите первое число: ’); ReadLn(num1);

  Write(‘Введите второе число: ’); ReadLn(num2);

  FOR CommDiv := num1 DOWNTO 1 DO begin

    IF (num2 mod CommDiv)<> 0 THEN

CONTINUE;

    IF (num1 mod CommDiv) = 0 THEN begin

       WriteLn(‘Наибольший общий делитель: ’, CommDiv);

       BREAK

    end {if}

end {for}

END.

В примере применен цикл FOR, в котором по убывающий перебираются возможные кандидаты в наибольший общий делитель. Критерий делимости – равенство нулю остатка от деления (операция mod). Если кандидат (значение переменной CoomDiv) не является делителем числа num2, по команде CONTINUE начинается следующий проход цикла, а операторы, оставшиеся в теле цикла, не выполняются. Если число (CommDiv) оказывается делителем числа num2 и num1, что проверяется вторым оператором IF тела цикла, значит, оно – общий делитель. А поскольку перебор идет от больших к меньшим значениям, первый найденный общий делитель – наибольший. Выводим его на печать и прерываем цикл командой BREAK.



Простые типы языка



Простые типы языка

К простым типам относятся порядковые, вещественный, строковый и адресный (указатели) типы. Все они определяют тип только одного отдельного значения.



Символьный тип (Char)



Символьный тип (Char)

- это тип данных, состоящих из одного символа (знака, буквы, кода). Значением типа Char может быть любой символ из набора ASCII. Если символ имеет графическое представление, то в программе он записывается заключенным в одиночные кавычки (апострофы), например:

'ж' 's'    '.'    '*'    ' '-(пробел)

Для представления самого апострофа его изображение удваивается: ''''.

Если же символ не имеет графического представления, например, символ табуляции или символ возрата каретки, то можно воспользоваться эквивалентной формой записи символьного значения, состоящего из префикса # и ASCII-кода символа:

#9     #32    #13



Синтаксис описания констант:


CONST

ИмяКонстанты1 = Значение1;

  ИмяКонстанты2 = Значение2;

или

  ИмяКонстанты = ЗначениеВыражения;

Примеры описания констант:

CONST

  Min = 0;  { константа - целое число }

  Max = 100;{ константа - целое число }

  e = 2.7;  { константа - вещественное число }

  SpecChar = '\'; {константа - символ }

  HelpStr = 'Нажмите клавишу F1'; {константа - строка }

  OK = True; { логическая константа "истина" }

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

Турбо Паскаль дает возможность определять константы как значения выражений из чисел, некоторых арифметических функций языка и ранее определенных констант. Так приведенный выше список констант можно продолжить

CONST

  Interval = Max - Min + 1;

  e2 = e*e;

  BigHelpStr = HelpStr + ' для подсказки';

В выражениях могут использоваться все математические операции (+, -, /, *, div, mod), логические операции (not, or, and, xor) и операции отношения.

Описанные ранее константы можно использовать для построения индексов массивов, например:

CONST

  N = 100;

VAR

  V : array[1..N] of Byte;



Синтаксис описания переменных:


VAR

ИмяПеременной1 : ИмяТипа1;

  ИмяПеременной2 : ИмяТипа2;

  . . .

  ИмяПеременнойN : КонструкцияТипа;

или

VAR

  ИмяПеременной1,

  ИмяПеременной2,

  ИмяПеременной3  : ИмяТипа;

Имя типа может быть именем стандартного типа языка или введенного программистом в предшествующем блоке описания типов TYPE.

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

Примеры описания переменных:

VAR

  X : Real;          { вещественная переменная }

  i, j, k : Integer; { три целочисленных переменных }

  T : MyType; { переменная определенного ранее типа MyType }

  D : 1..10;  { целочисленная переменная ограниченного типа }

  M : array[1..5] of Byte; { переменная типа "массив" }

  Data : RECORD

           X, Y : Byte;

           TextStr : String { переменная тпиа "запись" }

         END



Синтаксис описания типизированных констант:


CONST

ИмяКонстанты1 : ИмяТипа1 = Значение1;

  ИмяКонстанты2 : ИмяТипа2 = Значение2;

Примеры описания типизированных констант:

CONST

  R : Real = 19.875;

  I : Integer = -10;

  Title : String = 'Заголовок';

  SpecChar : Char = '\';

  { стартовое значение можно задать масиву }

  Vector : array[1..5] of Byte = (1,3,5,7,9);

  { а можно и множеству }

  Indexes : set of Byte = [1..10,20,100..200];



Система координат устройства



3.1 Система координат устройства

В растровой компьютерной графике экран представляет собой прямоугольный массив пикселов. Любое изображение строится как композиция из светящихся или погашенных пикселов. Каждый пиксел адресуется двумя целыми числами – номером по горизонтали nx и номером по вертикали ny:

0 <= nx <= Xmax

0 <= ny <= Ymax

Значения Xmax и Ymax зависят от текущего графического видеорежима. В случае адаптера VGA и режима VGAHi Xmax = 639, а Ymax = 479. В модуле Graph определены две функции GetMaxX и GetMaxY, возвращающие текущие значения параметров Xmax и Ymax, соответственно.



Служебные (зарезервированные слова)


. Это ограниченная группа слов (чуть более 50-ти), построенных из букв. Смысл каждого служебного слова четко фиксирован в языке. Служебные слова НЕЛЬЗЯ использовать в качетве идентификаторов вводимых программистом.

Примеры служебных слов: begin, end, for, to, if, else, array, in, mod, var, unit

и т.д.



Строковый тип (String, String[n])



Строковый тип (String, String[n])

- этот тип данных определяет последовательности символов - строки. Параметр n определяет максимальное количество символов в строке. Если он не задан, подразумевается n=255. Значение типа "строка" в программе запиывается как последовательность символов, заключенных в одиночные кавычки (апострофы), например

'Это текстовая строка' 'This is a string'

'1234' - это тоже строка, не число

'' - пустая строка



Кодировка цвета



Таблица 1. Кодировка цвета

Цвет

Константа

Цвет

Константа

Черный Black = 0 Темно-серый DarkGray = 8
Синий Blue = 1 Ярко-синий LightBlue = 9
Зеленый Green = 2 Ярко-зеленый LightGreen = 10
Голубой Cyan = 3 Ярко-голубой LightCyan = 11
Красный Red = 4 Ярко-красный LightRead = 12
Сиреневый Magenta = 5 Светло-сиреневый LightMagenta = 13
Коричневый Brown = 6 Желтый Yellow = 14
Светло-серый LightGray = 7 Белый White = 15

Примеры:

Вывод красной точки в центр экрана.

x := GetMaxX div 2;

y := GetMaxY div 2;

PutPixel( x, y, Red );

Вывод вертикальной линии зеленого цвета в середине экрана.

x := GetMaxX div 2;

FOR y:=0 TO GetMaxY DO PutPixel( x, y, Green );

3.4. Установка цвета пера и цвета фона

При выводе на экран точки ее цвет указывается непосредственно в процедуре PutPixel. Во всех остальных случаях, при построении графических примитивов (линий, прямоугольников, окружностей и т.п.), а также при выводе текста, цвет их контуров (цвет пера) задается специальной поцедурой:

SetColor( Color ),

где Color – цвет, значения которого берутся из таблицы 1.

Для установка цвета фона графического экрана имеется процедура:

SetBkColor( Color ),

где Color – цвет, значения которого берутся из таблицы 1. При выполнении процедуры SetBkColor экран сразу же окрашивается в заданный цвет.



Управление “текущим указателем”



3.2. Управление “текущим указателем”

“Текущий указатель” (CP – Current Pointer) или, как его еще называют, графический курсор выполняет те же функции, что и курсор в текстовом режиме, однако является при этом невидимым. Положение графического курсора указывает на начальные координаты изображения графического примитива, выводимого “от текущей позиции”. Текущий указатель перемещается специальными процедурами. В частности, процедура

MoveTo( X, Y );

перемещает его в точку экрана, с координатами (X, Y). Другая процедура –

MoveRel( dX, dY );

перемещает текущий указатель на dX пикселов по горизонтали и на dY пикселов по вертикали относительно последнего положения текущего указателя.



Установка стиля линии



3.6. Установка стиля линии

Turbo Pascal позволяет вычерчивать линии самого различного стиля: тонкие, широкие, пунктирные, штриховые и т.д. Установка стиля производится процедурой

SetLineStyle( Style, Pattern, Thickness ),

где Style – параметр, определяющий стиль линии. Возможные значения этого параметра приведены в таблице 2; Pattern – образец; Thickness – толщина линии. Если применяется один из стандартных стилей, значение параметра Pattern должно быть равно 0.

Таблица 2. Стили линии

Описание стиля

Константа

Сплошная линия SolidLn = 0
Точечная линия DottedLn = 1
Штрих-пунктирная линия CenterLn = 2
Пунктирная линия DashedLn = 3
Стиль, определяемый

пользователем

UserBitLn = 4

Параметр Thickness может принимать всего два значения:

NormWidth = 1  – линия толщиной в один пиксел

ThickWidth = 3  – линия толщиной в три пиксела

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



В) Параметры-константы



Параметры-константы

- аналогичны параметрам-значениям с той лишь разницей, что они не могут изменять свои значения в теле подпрограммы. Попытка изменить значение параметра-константы будет немедленно замечена компилятором.

Синтаксис описания параметров-констант:

ИмяПодпрограммы ( CONST P1, P2, ..., PN : Тип );

или

ИмяПодпрограммы ( CONST P1 : Тип1; CONST

P2 : Тип2; ... );



Важно


: Поскольку типизированные константы это, на самом деле, обычные переменные, их нельзя использовать в описаниях других констант и типов. Следующий фрагмент показывает пример НЕПРАВИЛЬНОГО использования типизированных констант:

CONST

  Min : Byte = 0;

  Max : Byte = 1;

  e : Real = 2.7;

  Interval = Max - Min + 1; {

Ошибка }

  e2 = e*e;                 { Ошибка }

VAR

  V : array[Min..Max] of Integer; { Ошибка }

Зачем нужны типизированные константы?

Когда программа начинает работать, места под значения переменных уже выделены, но не очищены. Это означает, что в ячейках памяти может быть что угодно (остатки предыдущей программы или ее следы). Поэтому в Паскале очень важно, чтобы каждая переменная перед использованием была бы заполнена имеющим смысл или хотя бы пустым (нулевым) значением. Выполнить это требование можно, начиная программу со "скучной" перепеси переменных

  x := 0; y := 0; ch := 'n';

  flag := FALSE;

  a[1] := 1; a[2] := 0; a[3] := -1; a[4] := 0;

Более элегантное решение этой проблемы - переменная со стартовым значением: вводим идентификатор переменной, указываем ее тип и тут же (!) определяем ее начальное значение. Все просто!


В качестве фактических параметров подпрограммы, подставляемых на место фомальных параметров-значений, могут выступать: переменные, константы и выражения (точнее их значения), причем их типы должны быть совместимы по присваиванию с типами соответствующих формальных параметров-значений.




В качестве фактических параметров подпрограммы, подставляемых на место фомальных параметров-переменных, могут выступать ТОЛЬКО ИДЕНТИФИКАТОРЫ ПЕРЕМЕННЫХ.



Вещественные типы



Вещественные типы

- обозначают множества вещественных чисел в различных диапазонах. Имеется пять вещественных типов, различающихся диапазоном допустимых значений и размером занимаемой оперативной памяти. Вещественные типы обозначаются идентификаторами: Real, Single, Double, Extended, Comp; их характеристики приведены в следующей таблице.

Тип Диапазон  Размер в байтах 
Real

Single

Double

Extended

Comp

2.9·10-39 ... 1.7·1038

1.5·10-45 ... 3.4·1038

5.0·10-324 ... 1.7·10308

3.4·10-4932 ... 1.1·10-4932

-2·1063 ... +2·1063-1

6

4

8

10

8

Тип Comp хотя и относится к вещественным типам, на самом деле является целочисленным с очень огромным диапазоном значений.

Значения вещественных типов могут записываться в программе несколькими способами:

1.456 0.000134 -120.0 65432
+345 0 -45 127E+12
-1.5E-5 -1.6E+12 5E4 0.002E-6

Будет ошибкой записать вещественное число следующим образом:

.5 (правильно 0.5)

12. (правильно 12.0 или 12)

Вещественное число в форме с плавающей точкой (экспоненциальная форма) записывается как пара

<мантисса> Е <порядок>

Такое обозначение понимается как "мантисса, умноженная на десять в степени, равном порядку". Например,

-1.6E+12 сответствует -1.6·1012



Вывод линии



3.5. Вывод линии

В последнем примере с помощью процедуры PutPixel и оператора FOR из отдельных точек была построена линия. Для построения отрезков прямых имеется специальная процедура Line:

Line( X1, Y1, X2, Y2 ),

где X1, Y1 – координаты начала, а X2, Y2 – координаты конца отрезка.

Примеры.

Вывод вертикальной линии зеленого цвета в середине экрана.

SetColor( Green );

x := GetMaxX div 2;

Line( x, 0, x, GetMaxY );

Вывод диагональной линии ярко-красного цвета.

SetColor( LightRed );

Line( 0, 0, 639, 479 );

Для вычерчивания линий существует еще две процедуры: LineTo и LineRel.

Процедура LineTo( X, Y ) строит отрезок прямой из точки текущего положения указателя в точку с координатами X, Y. Процедура LineRel( dX, dY )

проводит линию от точки текущего положения указателя в точку со смещением dX, dY.



Вывод точки



3.3. Вывод точки

Какие бы изображения не выводились на экран, все они построены из точек. Имея средство построения точки определенного цвета в нужном месте экрана теоретически можно создать изображение любой сложности.

Вывод точки осуществляется процедурой:

PutPixel( X, Y, Color ),

где X и Y – экранные координаты точки, а Color – ее

цвет. Возможные значения параметра Color приведены ниже в таблице.



Заполнение замкнутых областей



3.9. Заполнение замкнутых областей

Для заполнения внутренней или внешней области фигуры определенным образцом закраски используется процедура

FloodFill( X, Y, Border ),

где X, Y – координаты точки внутри или вне фигуры, Border – цвет контура фигуры. Если точка (X, Y) находится внутри замкнутой области, то заполняется внутренняя область. Если эта точка находится вне замкнутой области, то заполняется ее внешняя часть.

Пример: Красная окружность заполненная зеленой штриховкой

SetColor( Red ); Circle( 450, 100, 50 );

SetFillStyle( SlashFill, Green );

FloodFill( 450, 100, Red );

4. Вывод текста в графическом режиме

4.1. Вывод текста


В графическом режиме стандартные процедуры вывода Write и Writeln не работают. Для вывода текстовой информации на графический экран используют две процедуры OutText и OutTextXY. Процедура

OutText( TextString )

выводит на экран строку текста начиная с текущего положения графического курсора. Например:

OutText( ‘Добро пожаловать!’ );

Явный недостаток этой процедуры – нельзя указать произвольную точку начала вывода. Его можно устранить с помощью процедуры MoveTo, которая перемещает указатель в нужную позицию, но лучше воспользоваться процедурой

OutTextXY( X, Y, TextString ),

где X, Y – координаты точки начала вывода текста, TextString – константа или переменная строкового типа string. Например, чтобы вывести сообщение “Для продолжения нажмите любую клавишу ...”, начиная с точки 20, 400 надо записать:

OutTextXY( 20, 400, ‘Для продолжения нажмите любую клавишу ...’ );

4.2. Вывод числовых значений


Для начинающих проблемой является вывод числовых данных на графический экран, ибо в модуле Graph нет предназначенных для этого процедур. Выход прост: преобразовать числовое значение в строковое с помощью процедуры Str.

Примеры:

X := 12.5;

Str(X:4:1, S) { преобразование числа x в строку S }

OutTextXY( 10, 10, S ); { вывод строки S }

max := 345.55;

Str(max:6:2, S) { преобразование числа max в строку S }

OutTextXY( 10, 50, ‘Максимальное значение = ’ + S ); { вывод суммы двух строк }



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


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