Скачать презентацию Курс Паскаль Программирование на языке высокого уровня Павловская Скачать презентацию Курс Паскаль Программирование на языке высокого уровня Павловская

Дополнительно.ppt

  • Количество слайдов: 58

Курс «Паскаль. Программирование на языке высокого уровня» Павловская Т. А. Паскаль. Программирование на языке Курс «Паскаль. Программирование на языке высокого уровня» Павловская Т. А. Паскаль. Программирование на языке высокого уровня. Учебник. 2 -е изд. — СПб. : ПИТЕР, 2010. — 464 с. 1 Павловская Т. А. (СПб. ГУИТМО)

Лекция 4. Модульное программирование Процедуры и функции: описание и использование. Виды параметров подпрограмм: значения, Лекция 4. Модульное программирование Процедуры и функции: описание и использование. Виды параметров подпрограмм: значения, переменные, константы, открытые, процедурные. Рекурсия. Модули: описание и использование. Стандартные модули Паскаля. 2 Павловская Т. А. (СПб. ГУИТМО)

Подпрограммы 3 Павловская Т. А. (СПб. ГУИТМО) Подпрограммы 3 Павловская Т. А. (СПб. ГУИТМО)

Общие положения n Подпрограмма — это фрагмент кода, к которому можно обратиться по имени Общие положения n Подпрограмма — это фрагмент кода, к которому можно обратиться по имени n Логические законченные части программы оформляются в виде подпрограмм n Подпрограмма записывается один раз, а вызываться может столько раз, сколько необходимо n Одна и та же подпрограмма может обрабатывать различные данные, переданные ей в качестве параметров. Павловская Т. А. (СПб. ГУИТМО) 4

Структура программы Главная Глобальные переменные Подпрограмма А Локальные переменные begin. . . end Подпрограмма Структура программы Главная Глобальные переменные Подпрограмма А Локальные переменные begin. . . end Подпрограмма В Подпрограмма С begin Вызов А. . . Вызов В. . . end Павловская Т. А. (СПб. ГУИТМО) 5

Структура программы в оперативной памяти В IBM PC-совместимых компьютерах память условно разделена на сегменты. Структура программы в оперативной памяти В IBM PC-совместимых компьютерах память условно разделена на сегменты. Динамическая память Сегмент стека Сегмент данных Адрес каждого байта составляется из номера сегмента и смещения. Компилятор формирует сегмент кода, в котором хранится программа в виде машинных команд, и сегмент данных, в котором выделена память под глобальные переменные программы. Сегмент кода 16 бит 4 бита Адрес сегмента + 0000 16 бит Смещение Физический адрес 20 бит Павловская Т. А. (СПб. ГУИТМО) 6

Виды переменных n Глобальными называются переменные, которые описаны в главной программе. Время жизни глобальных Виды переменных n Глобальными называются переменные, которые описаны в главной программе. Время жизни глобальных переменных — с начала программы и до ее завершения. Располагаются в сегменте данных. n В подпрограммах описываются локальные переменные. Они располагаются в сегменте стека, причем распределение памяти происходит в момент вызова подпрограммы, а ее освобождение — по завершении подпрограммы. n Локальные переменные автоматически не обнуляются. Павловская Т. А. (СПб. ГУИТМО) 7

Вызов Для того чтобы подпрограмма выполнилась, ее надо вызвать. Вызов подпрограммы записывается в том Вызов Для того чтобы подпрограмма выполнилась, ее надо вызвать. Вызов подпрограммы записывается в том месте программы, где требуется получить результаты работы. Процедура вызывается с помощью отдельного оператора, а функция — в правой части оператора присваивания, например: inc(i); writeln(a, b, c); { вызовы процедур } y : = sin(x) + 1; { вызов функции } Павловская Т. А. (СПб. ГУИТМО) 8

Процедуры заголовок procedure <имя> [(список параметров)]; <разделы описаний> begin <раздел операторов> end; Павловская Т. Процедуры заголовок procedure <имя> [(список параметров)]; <разделы описаний> begin <раздел операторов> end; Павловская Т. А. (СПб. ГУИТМО) 9

Пример процедуры Вычислить разность между средними арифметическими значениями элементов двух вещественных массивов program dif_average; Пример процедуры Вычислить разность между средними арифметическими значениями элементов двух вещественных массивов program dif_average; const n = 3; type mas = array[1. . n] of real; var a, b : mas; i : integer; dif, av_a, av_b : real; Павловская Т. А. (СПб. ГУИТМО) 10

procedure average(x : mas; var av : real) var i : integer; begin av procedure average(x : mas; var av : real) var i : integer; begin av : = 0; for i : = 1 to n do av : = av + x[i]; av : = av / n; {Главная программа} end; begin for i : = 1 to n do read(a[i]); for i : = 1 to n do read(b[i]); average(a, av_a); average(b, av_b); dif : = av_a - av_b; writeln('Разность значений ', dif: 6: 2) end. Павловская Т. А. (СПб. ГУИТМО) 11

Функции заголовок Описание функции: function <имя> [(список параметров)] : <тип>; <разделы описаний> begin <раздел Функции заголовок Описание функции: function <имя> [(список параметров)] : <тип>; <разделы описаний> begin <раздел операторов> <имя> : = <выражение>; end; Простейший вызов функции: имя переменной : = имя ( список аргументов ); Павловская Т. А. (СПб. ГУИТМО) 12

Пример функции program dif_average 1; function average(const x : mas): real; const n = Пример функции program dif_average 1; function average(const x : mas): real; const n = 3; var av : real; type mas = array[1. . n] of real; var a, b : mas; i i : integer; begin av : = 0; : integer; for i : = 1 to n do av : = av + x[i]; dif : real; average : = av / n; {Главная программа} begin end; for i : = 1 to n do read(a[i]); for i : = 1 to n do read(b[i]); dif : = average(a) - average(b); writeln('Разность значений ', dif: 6: 2) end. Павловская Т. А. (СПб. ГУИТМО) 13

Виды параметров подпрограмм 14 Павловская Т. А. (СПб. ГУИТМО) Виды параметров подпрограмм 14 Павловская Т. А. (СПб. ГУИТМО)

Обмен данными Через глобальные переменные n Через параметры n Параметры передаются: n По значению Обмен данными Через глобальные переменные n Через параметры n Параметры передаются: n По значению n По адресу (var или const) Павловская Т. А. (СПб. ГУИТМО) Типы параметров: n Значения n Переменные n Константы n Бестиповые n Открытые n Процедурные n Объекты 15

Параметры и аргументы n При вызове подпрограммы после ее имени в скобках указываются аргументы, Параметры и аргументы n При вызове подпрограммы после ее имени в скобках указываются аргументы, то есть те конкретные величины, которые передаются в подпрограмму n Список аргументов как бы function sh(x, e: real): real; накладывается на список параметров и замещает их, поэтому аргументы должны соответствовать параметрам по количеству, типу и порядку следования. n Для каждого параметра обычно задается его имя, тип и способ передачи. n Либо тип, либо способ передачи могут не указываться. n y : = sh(x, 1 e-5); procedure a(var m: mas; x: real; var y); В заголовке подпрограммы нельзя вводить описание нового типа. Павловская Т. А. (СПб. ГУИТМО) 16

Параметр-значение имя : тип; Например: n procedure P(x : integer); n При вызове подпрограммы Параметр-значение имя : тип; Например: n procedure P(x : integer); n При вызове подпрограммы на месте параметра, передаваемого по значению, может находиться выражение: P(x); P(3); P(1. 2); P(a + b/2); P(a + b div 2); { var x, a, b : integer; } Тип выражения должен быть совместим по присваиванию с типом параметра. Павловская Т. А. (СПб. ГУИТМО) 17

Параметр-переменная var имя : тип; Например: n procedure P(var x : integer); При вызове Параметр-переменная var имя : тип; Например: n procedure P(var x : integer); При вызове подпрограммы на месте параметра-переменной может находиться только ссылка на переменную точно того же типа: P(a); P(x); Павловская Т. А. (СПб. ГУИТМО) 18

Параметр-константа const имя : тип; Например: n procedure P(const x : integer); При вызове Параметр-константа const имя : тип; Например: n procedure P(const x : integer); При вызове подпрограммы на месте параметра может быть записано выражение, тип которого совместим по присваиванию с типом параметра. Павловская Т. А. (СПб. ГУИТМО) 19

Пример var a, b, c, d, e : real; procedure Xa. Xa(a, b: real; Пример var a, b, c, d, e : real; procedure Xa. Xa(a, b: real; c : real; var d : real); var e: real; begin c : = a + b; d : = c; e : = c; writeln (‘c=‘, c, ‘ d=‘, d, ‘ e=‘, e); end; begin а : =3; b : =5; Xa. Xa(a, b, c, d); writeln (‘c=‘, c, ‘ d=‘, d, ‘ e=‘, e); end. Павловская Т. А. (СПб. ГУИТМО) с= 8 d= 8 e= 8 с= 0 d= 8 e= 0 20

Пример Заголовок процедуры имеет вид: Procedure P(a: real; b: char; var c: real); Переменные Пример Заголовок процедуры имеет вид: Procedure P(a: real; b: char; var c: real); Переменные в вызывающей программе описаны так: Var a: integer; b, c: char; d, x: real; -------------n P(a, b, c); n P(d+a, c, x); n P(x, ’c’, d); n P(a, b, a+1); Павловская Т. А. (СПб. ГУИТМО) 21

Итоги n Для передачи в подпрограмму исходных данных испольуются параметры-значения и параметры-константы. Параметры составных Итоги n Для передачи в подпрограмму исходных данных испольуются параметры-значения и параметры-константы. Параметры составных типов (массивы, записи, строки) предпочтительнее передавать как константы. n Результаты работы процедуры следует передавать через параметры-переменные, результат функции — через ее имя. Павловская Т. А. (СПб. ГУИТМО) 22

Открытый массив n n n Может быть только одномерным и состоять из элементов любого Открытый массив n n n Может быть только одномерным и состоять из элементов любого типа, кроме файлового. На место открытого массива можно передавать одномерный массив любой размерности, состоящий из элементов такого же типа Элементы массива нумеруются с нуля. Номер максимального элемента в массиве можно определить с помощью функции High. Пример. Функция, определяющая максимальный элемент любого целочисленного массива. function max_el(const mas : array of integer) : integer; var i, max : integer; begin max : = mas[0]; for i : = 0 to High(mas) do if mas[i] > max then max : = mas[i]; max_el : = max; end; Павловская Т. А. (СПб. ГУИТМО) 23

Открытые строки Строки произвольной длины можно передавать: n по значению; n на место параметра-константы. Открытые строки Строки произвольной длины можно передавать: n по значению; n на место параметра-константы. Для передачи в подпрограмму строк любой длины по адресу используются: n специальный тип Open. String, называемый открытой строкой; n тип string при включенном режиме {$P+}. type s 20 = string[20]; var s 1 : string[40]; s 2 : string[10]; procedure P(const x : s 20; y : string; var z : openstring); . . . begin. . . end. Павловская Т. А. (СПб. ГУИТМО) P(s 2, s 1); . . . 24

Бестиповые параметры Function EQ( var x, y; size: word ): boolean; {С помощью функции Бестиповые параметры Function EQ( var x, y; size: word ): boolean; {С помощью функции EQ можно сравнить две любые величины} Type Bytes = array[ 0. . Max. Int ] of byte; Var xb: Bytes absolute x; yb: Bytes absolute y; n : integer; Begin n : =0; While (n < size) and (xb[n] = yb[n]) do inc(n); EQ : = n = size; End; Павловская Т. А. (СПб. ГУИТМО) 25

Пусть, например, в программе описаны переменные: var a, b : array [1. . 10] Пусть, например, в программе описаны переменные: var a, b : array [1. . 10] of byte; x : real; c : string; Следующие обращения к функции EQ будут корректны: EQ(a, b, sizeof(a)) { сравнение двух массивов } EQ(a[2], b[5], 4) { сравнение 2– 5 элементов массива "a" с 5– 8 элементами массива "b", соответственно } EQ(c, x, sizeof(real)) { сравнение первых 6 байт строки с с переменной x } Павловская Т. А. (СПб. ГУИТМО) 26

Параметры процедурного типа procedure tabl_fun(x, Xk, d. X : real; f : fun); begin Параметры процедурного типа procedure tabl_fun(x, Xk, d. X : real; f : fun); begin writeln(' -------------- '); writeln('| X | Y |'); writeln(' -------------- '); while x <= Xk do begin writeln('|', x: 9: 2, ' |', f(x): 9: 2, ' x : = x + d. X; end; |'); writeln(' -------------- '); end. Павловская Т. А. (СПб. ГУИТМО) 27

Работа с параметром 1. Определить процедурный тип type fun = function(x : real) : Работа с параметром 1. Определить процедурный тип type fun = function(x : real) : real; 2. Задать для подпрограмм, предназначенных для передачи в качестве параметра, ключ компилятора {$F+}, определяющий дальнюю адресацию {$F+} function Q(x : real) : real; begin Q : = 2 * x / sqrt(1 – sin(2 * x)); end; {$F–} Задать в заголовке подпрограммы параметр процедурного типа: procedure tabl_fun(x, Xk, d. X : real; f : fun); Передать в подпрограмму имя конкретной функции/процедуры: tabl_fun(0, 10, d, Q); 3. 4. Павловская Т. А. (СПб. ГУИТМО) 28

Рекурсивные подпрограммы function FTR(n : byte): longint; begin if (n = 0) or (n Рекурсивные подпрограммы function FTR(n : byte): longint; begin if (n = 0) or (n = 1) then FTR : = 1 else FTR : = FTR(n - 1) * n; стек end; -----A : = FTR(4); … n=2 … n=3 … n=4 Павловская Т. А. (СПб. ГУИТМО) n=1 … 29

Модули 30 Павловская Т. А. (СПб. ГУИТМО) Модули 30 Павловская Т. А. (СПб. ГУИТМО)

Структура модуля unit имя; { заголовок модуля } interface { интерфейсная секция модуля } Структура модуля unit имя; { заголовок модуля } interface { интерфейсная секция модуля } { описание глобальных элементов модуля (видимых извне) } implementation { секция реализации модуля } { описание локальных (внутренних) элементов модуля } begin end. { секция инициализации } { может отсутствовать } Павловская Т. А. (СПб. ГУИТМО) 31

Состав модуля n В интерфейсной секции модуля определяют константы, типы данных, переменные, а также Состав модуля n В интерфейсной секции модуля определяют константы, типы данных, переменные, а также заголовки процедур и функций. n В секции реализации описываются подпрограммы, заголовки которых приведены в интерфейсной части. Кроме того, в этой секции можно определять константы, типы данных, переменные и внутренние подпрограммы. n Секция инициализации предназначена для присваивания начальных значений переменным, которые используются в модуле. Павловская Т. А. (СПб. ГУИТМО) 32

Создание и использование модуля Сохранение скомпилированного модуля на диске. Перед компиляцией задать режим: Compile Создание и использование модуля Сохранение скомпилированного модуля на диске. Перед компиляцией задать режим: Compile -> Destination -> Disk. n Компилятор создаст файл с расширением. tpu, который надо переместить в каталог, путь к которому указан в меню Options -> Directories (поле Unit Directories). n Кроме того, откомпилированный модуль может находиться в том же каталоге, что и использующие его программы. Использование в программе величин, описанных в интерфейсной части модуля: uses Average, Graph, Crt; Павловская Т. А. (СПб. ГУИТМО) 33

Пример модуля unit Average; interface const n = 10; type mas = array[1. . Пример модуля unit Average; interface const n = 10; type mas = array[1. . n] of real; procedure aver_mas(x : mas; var av : real); implementation procedure aver_mas(x : mas; var av : real); var i : integer; begin av : = 0; for i : = 1 to n do av : = av + x[i]; av : = av / n; end. Павловская Т. А. (СПб. ГУИТМО) Использование модуля в программе: program dif_average; uses Average; var a, b : mas; i : integer; dif, av_a, av_b : real; begin for i : = 1 to n do read(a[i]); for i : = 1 to n do read(b[i]); aver_mas(a, av_a); aver_mas(b, av_b); dif : = av_a – av_b; writeln('Разность: ', dif: 6: 2); end. 34

Стандартные модули Паскаля 35 Павловская Т. А. (СПб. ГУИТМО) Стандартные модули Паскаля 35 Павловская Т. А. (СПб. ГУИТМО)

Стандартные модули Паскаля n System n Crt n Dos и Win. Dos n Graph Стандартные модули Паскаля n System n Crt n Dos и Win. Dos n Graph n Strings Павловская Т. А. (СПб. ГУИТМО) 36

Модуль System n содержит базовые средства языка, которые поддерживают ввод-вывод, работу со строками, операции Модуль System n содержит базовые средства языка, которые поддерживают ввод-вывод, работу со строками, операции с плавающей точкой и динамическое распределение памяти n содержит все стандартные и встроенные процедуры, функции, константы и переменные Паскаля n автоматически используется во всех программах, его не требуется указывать в операторе uses Павловская Т. А. (СПб. ГУИТМО) 37

Примеры переменных System n var Heap. Org: Pointer Указывает на конец динамической памяти. n Примеры переменных System n var Heap. Org: Pointer Указывает на конец динамической памяти. n n var Heap. Ptr: Pointer Указывает на начало динамической памяти. var In. Out. Res: Integer Содержит код последней операции ввода-вывода. Его можно получить с помощью вызова функции IOResult. n var Input: Text n Назначает стандартный файл ввода. var Rand. Seed: Longint Содержит начальное значение встроенного генератора случайных чисел. Павловская Т. А. (СПб. ГУИТМО) 38

Примеры подпрограмм System n var Rand. Seed: Longint n function Abs(x) n procedure Assign(var Примеры подпрограмм System n var Rand. Seed: Longint n function Abs(x) n procedure Assign(var f; Name) n procedure Continue n function Cоpy(s: String; Indx: Integer; Count: Integer): String n procedure Dec(var x: <порядковый тип> [; n: Longint]) n function Eof[ (var f) ]: Boolean n procedure Exit n function Exp(x: Real): Real n procedure Моvе(var Src, Dst; Count: Word) n procedure Mk. Dir(s: String) n procedure Randomize n procedure Writeln([var f: Text; ] v 1, [, v 2, . . . , vn] ) Павловская Т. А. (СПб. ГУИТМО) 39

Модуль Crt позволяет: n выполнять вывод в заданное место экрана заданным цветом символа и Модуль Crt позволяет: n выполнять вывод в заданное место экрана заданным цветом символа и фона; n открывать на экране окна прямоугольной формы и выполнять вывод в пределах этих окон; n очищать экран, окно, строку и ее часть; n обрабатывать ввод с клавиатуры; n управлять встроенным динамиком. Павловская Т. А. (СПб. ГУИТМО) 40

Текстовый режим монитора 1 80 Экран Знакоместо 1 Цвет символа Цвет фона 25 Видеопамять Текстовый режим монитора 1 80 Экран Знакоместо 1 Цвет символа Цвет фона 25 Видеопамять Код символа Атрибут R 0 0 1 1 0 0 G B 0 1 0 Цвет фона R 1 G B 1 1 0 Цвет символа Бит мерцания Павловская Т. А. (СПб. ГУИТМО) 41

Константы цветов текста Константа Значение Black 0 (черный) Blue 1 (синий) Green 2 (зеленый) Константы цветов текста Константа Значение Black 0 (черный) Blue 1 (синий) Green 2 (зеленый) Cyan 3 (голубой) Red 4 (красный) Magenta 5 (малиновый) Brown 6 (коричневый) Light. Gray 7 (светло-серый) Dark. Gray 8 (темно-серый) Light. Blue 9 (светло-синий) Light. Green 10 (светло-зеленый) Light. Cyan 11 (светло-голубой) Light. Red 12 (розовый) Light. Magenta 13 (светло-малиновый) Yellow 14 (желтый) White 15 (белый) Blink 128 (мерцание) Павловская Т. А. (СПб. ГУИТМО) 42

Подпрограммы модуля Crt n procedure Clr. Scr; n procedure Delay(Msec: word) n procedure Go. Подпрограммы модуля Crt n procedure Clr. Scr; n procedure Delay(Msec: word) n procedure Go. To. XY(X, Y: Byte) n function Key. Pressed: Boolean n procedure No. Sound n function Read. Key: Char n function Sound(Herz: Word) n procedure Text. Back. Groud(Color: byte) n procedure Text. Color(Color: Byte) n function Where. X: Byte n function Where. Y: Byte n procedure Window(X 1, Y 1, X 2, Y 2: Byte) n … Павловская Т. А. (СПб. ГУИТМО) 43

Пример Программа создает меню из трех пунктов, управляемое клавишами курсора, а также клавишами Tab Пример Программа создает меню из трех пунктов, управляемое клавишами курсора, а также клавишами Tab и Shift+Tab. Выбор пункта меню выполняется с помощью клавиши Enter. Выход из программы – клавиша Esc. Павловская Т. А. (СПб. ГУИТМО) 44

program Stupid. Menu; uses Crt; const n_items = 3; l_item = 10; item: array[1. program Stupid. Menu; uses Crt; const n_items = 3; l_item = 10; item: array[1. . n_items] of string[l_item] = ('item 1', 'item 2', 'item 3'); pos : array[1. . n_items] of integer = (1, l_item+1, 2*l_item+1); var Default. Mode, Active. Color, Inactive. Color: word; c : char; i, j : word; procedure Init. Menu(Active. Color, Inactive. Color: word); var i : word; begin window(1, 1, 80, 2); Text. Back. Ground(Light. Gray); clrscr; Text. Color(Inactive. Color); Draw. Item(1, Active. Color); for i : = 2 to n_items do Draw. Item(i, Inactive. Color); goto. XY(1, 2); write(‘_________________’); goto. XY(3, 1); end; Павловская Т. А. (СПб. ГУИТМО) 45

procedure Draw. Item(i, Color: word); begin window(1, 1, 80, 2); Text. Back. Ground(Light. Gray); procedure Draw. Item(i, Color: word); begin window(1, 1, 80, 2); Text. Back. Ground(Light. Gray); Text. Color(Color); goto. XY(pos[i], 1); write(item[i]); end; procedure Do. Item(i: word); { выполнение пункта меню } begin window(3, 4, 78, 24); Text. Back. Ground(Light. Gray); clrscr; write('Working: item ', i); end; Павловская Т. А. (СПб. ГУИТМО) 46

begin { главная программа} clrscr; Default. Mode : = Last. Mode; Active. Color : begin { главная программа} clrscr; Default. Mode : = Last. Mode; Active. Color : = Light. Green; Inactive. Color: = Green; Init. Menu(Active. Color, Inactive. Color); i : = 1; j : = 1; Павловская Т. А. (СПб. ГУИТМО) 47

while true do begin c : = readkey; case ord(c) of 27: break; 13: while true do begin c : = readkey; case ord(c) of 27: break; 13: Do. Item(i); 15 {Shift+Tab}, 75 {Left}: begin j : = i; dec(i); if i = 0 then i : = n_items; end; 9 {Tab}, 77 {Right}: begin j : = i; inc(i); if i = n_items + 1 then i : = 1; end; Draw. Item(j, Inactive. Color); Draw. Item(i, Active. Color); end; Text. Mode(Default. Mode); end. Павловская Т. А. (СПб. ГУИТМО) 48

Модули Dos и Win. Dos n содержат подпрограммы, реализующие возможности операционной системы MS-DOS — Модули Dos и Win. Dos n содержат подпрограммы, реализующие возможности операционной системы MS-DOS — например, переименование, поиск и удаление файлов, получение и установку системного времени, выполнение программных прерываний. n Для поддержки этих подпрограмм в модулях определены константы и типы данных. n Модуль Dos использует строки Паскаля, а Win. Dos — строки с завершающим нулем. Павловская Т. А. (СПб. ГУИТМО) 49

Подпрограммы модуля Dos n function Disk. Free(Disk: byte): Longint; n function Disk. Sizе(Disk: Byte): Подпрограммы модуля Dos n function Disk. Free(Disk: byte): Longint; n function Disk. Sizе(Disk: Byte): Longint; n procedure Exec(Path, Cmd. Line: String); n procedure Find. First(Path: String; Attr: Bytе; var S: Search. Rec) n procedure Get. Date(var Year, M, Day, D: Word) n procedure Get. Attr(var f; var Attr: Word) n procedure Intr(Int. Num: Byte; var Regs: Registers) n procedure Set. FAttr(var f; Attr: Word) n procedure Set. Date(var Y, M, D, Dw: Word) n procedure Set. Time(var Hour, Min, Sec, Ssec: Word) n … Павловская Т. А. (СПб. ГУИТМО) 50

Пример Программа определяет, сколько русских букв находится во всех текстовых файлах текущего каталога. program Пример Программа определяет, сколько русских букв находится во всех текстовых файлах текущего каталога. program count_rus_letters; uses Dos; var Info : Search. Rec; code : integer; n : longint; c : char; f : text; begin n : = 0; Find. First('*. txt', Any. File, Info); while Dos. Error = 0 do begin assign(f, Info. Name); reset(f); while not EOF(f) do begin read(f, c); code : = ord(c); if (code > $7 F) and (code < $B 0) or (code > $DF) and (code < $F 2) then inc(n); end; close(f); Find. Next(Info); end; writeln('Русских букв в текущем каталоге – ', n) end. Павловская Т. А. (СПб. ГУИТМО) 51

Модуль Graph обеспечивает: n вывод линий и геометрических фигур заданным цветом и стилем; n Модуль Graph обеспечивает: n вывод линий и геометрических фигур заданным цветом и стилем; n закрашивание областей заданным цветом и шаблоном; n вывод текста различным шрифтом, заданного размера и направления; n определение окон и отсечение по их границе; n использование графических спрайтов и работу с графическими страницами. Павловская Т. А. (СПб. ГУИТМО) 52

Использование графики 1. подключение модуля Graph; 2. перевод экрана в графический режим; 3. установка Использование графики 1. подключение модуля Graph; 2. перевод экрана в графический режим; 3. установка параметров изображения; 4. вывод изображения; 5. возврат в текстовый режим. Павловская Т. А. (СПб. ГУИТМО) 53

Примеры типов модуля Graph type Line. Settings. Type = record Line. Style : Word Примеры типов модуля Graph type Line. Settings. Type = record Line. Style : Word Pattern : Word Thickness : Word end; type Text. Settings. Type = record Font, Direction, Char. Size : Word Horiz, Vert : Word end; type Arc. Coords. Type = record X, Y : Integer XStart, Ystart : Integer XEnd, Yend : Integer end; Павловская Т. А. (СПб. ГУИТМО) 54

Примеры констант модуля Graph Константы шрифтов Константы образцов закрашивания Константа Значение Константа Значени е Примеры констант модуля Graph Константы шрифтов Константы образцов закрашивания Константа Значение Константа Значени е Описание Default. Font 0 (растровый шрифт) Empty. Fill 0 Закрашивание области фоновым цветом Triplex. Font 1 (векторный шрифт) Solid. Fill 1 Непрерывное закрашивание области Small. Font 2 Line. Fill 2 San. Serif. Font 3 Закрашивание ---------- Gothic. Font 4 lt. Slash. Fill 3 Закрашивание ///// Horiz. Dir 0 (слева направо) Slash. Fill 4 Закрашивание жирными линиями //// Vert. Dir 1 (сверху вниз) Константы стиля линии Константа Solid. Ln 0 (непрерывная) Dotted. Ln 1 (линия из точек) Norm. Width 1 (обычная толщина) Thick. Width Павловская Т. А. (СПб. ГУИТМО) Значение 3 (жирная линия) 55

Примеры подпрограмм модуля Graph n n n n procedure Arс(Х, Y: Integer; Angle 1, Примеры подпрограмм модуля Graph n n n n procedure Arс(Х, Y: Integer; Angle 1, Angle 2, R: Word) procedure Circlе(Х, Y: Integer; R: Word) procedure Close. Graph procedure Fill. Poly(N : Word; var S) function Get. Color: Word function Get. Max. X: Integer function Graph. Result: Integer procedure Init. Graph(var Gr. Driver: Integer; var Mode: Integer; Path : String) procedure Line(X 1, Y 1, X 2, Y 2: Integer) procedure Out. Text. XY(Х, Y: Integer; S: String) procedure Put. Image(X, Y: Integer; var Mass; Oper: Word) procedure Rectangle(X 1, Y 1, X 2: Integer) procedure Set. Bk. Color(Color: Word) procedure Set. Line. Style(SType: Word; Pattern: Word; S: Word) procedure Set. Visual. Page(Page: Word) Павловская Т. А. (СПб. ГУИТМО) 56

Пример pole The end uses Graph; const gr. Driver : integer = Detect; pole Пример pole The end uses Graph; const gr. Driver : integer = Detect; pole = 20; var gr. Mode : integer; max. X, max. Y : integer; begin { ---------------инициализация графики ----- } Init. Graph(gr. Driver, gr. Mode, 'd: tpbgi'); if Graph. Result <> Gr. OK then begin writeln('Ошибка графики: ', Graph. Error. Msg(Err. Code)); exit end; { --------------------- вывод линий ----- } max. X : = Get. Max. X; max. Y : = Get. Max. Y; Line(pole, max. Y div 2, max. X - pole, max. Y div 2); Line(max. X div 2, pole, max. X div 2, max. Y - pole); { --------------------- вывод текста ----- } Set. Color(Cyan); Set. Text. Style(Gothic. Font, Horiz. Dir, 4); Outtext. XY(pole, 'The end'); readln; Close. Graph end. Павловская Т. А. (СПб. ГУИТМО) 57

Модуль Strings n предназначен для работы со строками, заканчивающимися нуль-символом (ASCIIZ-строки) и содержит функции Модуль Strings n предназначен для работы со строками, заканчивающимися нуль-символом (ASCIIZ-строки) и содержит функции копирования, сравнения, слияния строк, преобразования их в строки типа string, поиска подстрок и символов. n В модуле System определен тип p. Char, представляющий собой указатель на символ (^Char). Этот тип можно использовать для работы с ASCIIZ-строками. Эти строки располагаются в динамической памяти, и программист должен сам заниматься ее распределением. n Кроме того, для хранения ASCIIZ-строк используются массивы символов с нулевой базой, например: var str : array[0. . 4000] of char; n Массивы символов с нулевой базой и указатели на символы совместимы. Павловская Т. А. (СПб. ГУИТМО) 58