Pascal1.ppt
- Количество слайдов: 41
Стандартные модули Паскаля 1
Стандартные модули Паскаля n System n Crt n Graph 2
Модуль System n содержит базовые средства языка, которые поддерживают ввод-вывод, работу со строками, операции с плавающей точкой и динамическое распределение памяти n содержит все стандартные и встроенные процедуры, функции, константы и переменные Паскаля n автоматически используется во всех программах, его не требуется указывать в операторе uses 3
Примеры переменных 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 Содержит начальное значение встроенного генератора случайных чисел. 4
Примеры подпрограмм 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] ) 5
Модуль Crt позволяет: n выполнять вывод в заданное место экрана заданным цветом символа и фона; n открывать на экране окна прямоугольной формы и выполнять вывод в пределах этих окон; n очищать экран, окно, строку и ее часть; n обрабатывать ввод с клавиатуры; n управлять встроенным динамиком. 6
Текстовый режим монитора 1 80 Экран Знакоместо 1 Цвет символа Цвет фона 25 Видеопамять Код символа Атрибут R 0 0 1 1 0 0 G B 0 1 0 Цвет фона R 1 G B 1 1 0 Цвет символа Бит мерцания 7
Константы цветов текста Константа Значение 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 (мерцание) 8
Подпрограммы модуля 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 … 9
Модуль Graph Модуль (файл Graph. tpu) обеспечивает работу с экраном в графическом режиме : n вывод линий и геометрических фигур заданным цветом и стилем ; n закрашивание областей заданным цветом и шаблоном; n вывод текста различным шрифтом, заданного размера и направления; n определение окон и отсечение по их границе; n использование графических спрайтов и работу с графическими страницами. 10
Текстовый и графический режимы. В текстовом режиме минимальным объектом, отображаемым на экране, является символ (80 символов по горизонтали и 25 символов по вертикали, то есть всего 2000 визуальных объектов); Экран в графическом режиме представляется в виде совокупности точек — пикселов (pixel, сокращение от picture element). Цвет каждого пиксела можно задавать отдельно. n n n Количество точек по горизонтали и вертикали (разрешение экрана) и количество доступных цветов зависят от графического режима. Графический режим устанавливается с помощью служебной программы — графического драйвера расширение. bgi имени файла (EGAVGA. BGI) (Видеоадаптера) Режим устанавливается при инициализации графики либо автоматически, либо программистом. Самый "мощный" режим, поддерживаемый модулем Graph, — 640 х480 точек, 16 цветов. Модуль Graph обеспечивает (307 200 графических элементов) Размер пикселя можно приблизительно получить, разделив размер экрана на разрешение. Геометрические размеры пикселя определяют степень детализации изображения, его качество. 11
Графические координаты. Графические координаты задают положение точки на экране дисплея. Начало координат находится в левом верхнем углу экрана и имеет координаты (0, 0). n Допустимый диапазон изменения графических координат составляет [0, rx-1] для х-координаты и [0, ry -1] для y-координаты, где rx – количество пикселей на экране по горизонтали, а ry – количество пикселей по вертикали n ü ü xg=|sx * x|+dx; yg=ry-|sy * y|-dy, где |x| - целая часть х; sx и sy – масштабные множители, выбираемые из условия rx=|sx * xmax|+1, (640) ry=|sy * ymax|+1. (480) ü n n Точкой отсчета является верхний левый угол экрана. Значения х-координаты отсчитываются слева направо, а y-координаты – сверху вниз. Последнее отличает графические координаты от обычных декартовых координат, принятых в математике : 1. Графические координаты принимают только целочисленные значения. 2. Графические координаты принимают значения, ограниченные как снизу (нулевым значением), так и сверху (значением разрешения). 3. Графическая координата y отсчитывается сверху вниз. Декартовы координаты точки (x, y) для отображения ее на экране следует пересчитать в графические (xg, yg) по формулам Графические координаты правого нижнего угла экрана равны (Get. Max. X, Get. Max. Y). Функции Get. Max. X и Get. Max. Y, возвращающие наибольший номер пикселя по горизонтали и по вертикали соответственно. 12
Использование графики 1. подключение модуля Graph; 2. перевод экрана в графический режим; 3. установка параметров изображения; 4. вывод изображения; 5. возврат в текстовый режим. 13
Переключение между текстовым и графическим режимами Переключение в графический режим и работа в нем реализованы в Турбо Паскале в виде набора процедур, находящихся в специальном модуле graph. tpu. Работа этого модуля основана на использовании так называемого графического интерфейса Борланд (BGI – Borland Graphics Interface), специализированной графической библиотеки: Модуль Graph должен явно подключаться к программе с помощью оператора использования Uses, записываемого после заголовка программы: Program Grafics; Uses Graph; Переключение в графический режим работы дисплея выполняется вызовом процедуры Init. Graph из модуля Graph. Init. Graph(var gd: Integer; var gm: Integer; путь_драйвер: string) Первый параметр в этой процедуре задает тип видеоадаптера, второй определяет режим. И параметр gd, и параметр gm являются параметрами-переменными (var). Параметр "путь_драйвер" определяет путь доступа к каталогу (маршрут), в котором находятся графические драйверы. 14
Процедура Init. Graph инициализирует графическую систему и переводит аппаратуру в графический режим. Примеры: Program Grafics; Uses graph; Var gd, gm: Integer; Begin gd: =9; gm: =1; Init. Graph(gd, gm, ' '); . . . Program Grafics; Uses graph; Var gd, gm: Integer; Begin gd: =vga; gm: =VGALo; Init. Graph(gd, gm, 'c: tpbgi'). . . 15
Переключение в графический режим (инициализация графического режима) обычно сопровождается обработкой возможных ошибок инициализации. Procedure Graphinterface; Var driver, mode, error: Integer; s: String; Begin driver: =detect; s: =' '; Initgraph(driver, mode, s); error: =Graph. Result; if error<>Gr. Ok then begin writeln(Graph. Error. Msg(Error)); Halt(error) end; Close. Graph Uses Crt, Graph; Var Gd, Gm: integer; Begin ----- Gd: =detect; Init. Graph(Gd, Gm, '' ); …… Repeat Until Keypressed; Close. Graph; … End. выгружает драйвер из памяти и восстанавливает предыдущий видеорежим. 16
Переключение между текстовым и графическим режимами Процедура Restore. Crt. Mode перезагружает первоначальный экранный режим перед инициализацией графики. Процедура Restore. Crt. Mode и процедура Set. Graph. Mode позволяют переключаться между текстовым и графическим режимами, не закрывая графический режим. n Uses Crt, Graph; n Var Gd, Gm: integer; n Begin n Gd: =detect; n Init. Graph(Gd, Gm, ''); n Outtext('Для виходу з графічного режиму нажміть Enter'); n Readln; n Restor. Crt. Mode; n Clrscr; n Writeln('Тепер ви у текстовому режимі'); n Write('Для переходу у графічний нажміть Enter '); n Readln; n Set. Graph. Mode(Get. Graph. Mode); n Outtext. XY(0, 0, ' Ви знову у графічному режимі'); n Readln; n Close. Graph n End. Restor. Crt. Mode – возвращает екран в начальное состояние , которое было до инициализации графики. Set. Graph. Mode (<режим>) - устанавливает графический режим и очищает екран. Get. Graph. Mode - устанавливает поточним тот графический режим, который был установлений процедурой Init. Graph. 17
Модуль Graph Турбо Паскаля содержит около пятидесяти различных процедур и функций, предназначенных для работы с графическим экраном. В этом же модуле описаны некоторые встроенные константы и переменные, которые могут быть использованы в графических программах: n Основную часть модуля составляют процедуры вывода базовых графических элементов, таких как точки, отрезки прямых линий, дуги и целые окружности и т. д. Такие элементы называются графическими примитивами. n Другая группа процедур предназначена для управления графическим режимом. n закрашивание областей заданным цветом и шаблоном; n вывод текста различным шрифтом, заданного размера и направления; n определение окон и отсечение по их границе; 18
Примеры констант модуля 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 (жирная линия) 19
Примеры подпрограмм модуля 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) 20
Пример 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. 21
Пример n {Заполнение экрана отрезками случайной длины} n Uses Crt, Graph; Var Gd, Gm: integer; Begin Gd: =detect; Init. Graph(Gd, Gm, ''); Randomize; Repeat Line(random(640), random(200), random(640), random(200) ); Until Keypressed; Delay(1000); Close. Graph End. n n n 22
Точки и линии на экране Процедура Put. Pixel Рисует точку на экране в заданном месте заданным цветом. Описание: Put. Pixel (x, y, цвет). Примечания: Выводит точку на экране с координатами (x, y) заданным цветом (параметр "цвет"). Процедура Line рисует прямую линию из точки (x 1, y 1) в точку (x 2, y 2). Описание: Line (x 1, y 1, x 2, y 2). Примечания: Толщина и тип линии задаются процедурой Set. Line. Style, а цвет линии устанавливается процедурой Set. Color. 23
Вывод изображений в относительных координатах Для этого используется понятие "текущий указатель" Текущий указатель (CP – Current Pointer) используется во многих графических системах. Понятие СР аналогично понятию курсора для текстового режима, за исключением того, что текущий указатель невидим. n n n Процедура Move. To Перемещает текущий графический указатель (СР) в точку (x, y). Описание: Move. To(x, y). Процедура Line. To n Описание: Line. To (x, y). n Рисует прямую линию, толщина и тип которой задаются процедурой Set. Line. Style, а цвет задается процедурой Set. Color. Примечания: Move. To (100, 100); Line. To (200, 200) эквивалентно Line (100, 200, 200), второй метод не изменяет значения текущего указателя. n 24
Алгоритм побудови графіка y=f(x) Задати початкове значення відрізка a, b. n Задати кількість точок графіка n. n Обчислити крок змінення по осі х: h=(b-a)/n. n Обчислити масиви значень х і у: For i: =1 to n do Begin X[i]: =a+h*(i-1); Y[i]: =<за формулою> End; n Знайти крок в пікселях по осі х. deltax : = round(Getmax. X/(x[n]- x[1])); n Крок в пікселях по осі y: знайти ymax, ymin deltay=round(Getmax. Y/(ymax-ymin)); n Побудувати графік: встановити курсор у точку з координатами (x[1], y[1]) в пікселях (Move. To(x[1], y[1])). n lineto(x[i], y[i]) провести лінію від поточної точки в задану. 25
String Структурный тип данных –Строка 26
String СТРОКА ’Київ’ ’Маs’ ’ЗТВ-61’ String Type Var Strn = String[60]; st 1, st 2 : Strn; st : String; Var st 1, st 2 : String[60]; st : String; Мах длина– 255 символов. +1 один байт елемент масива: st[1], st[2]. 27
Ввод – вывод строк st: =’. . . . ’ st: =’’ Readln ( st ); For i: =1 To 10 Do Read ( st[i] ); где st[i] – отдельный символ строки Аналогично можно выполнить вывод строк: Writeln ( st ); For i: =1 To 10 Do Write ( st[i] ); 28
Выражения типа Строка операция сцепления: ’+’ ’Т’+’В’+’– 61’=’ТВ– 61’ st 1: =’ТВ– 61'; st 2: =’група ’+st 1; - ‘ група ТВ– 61’ Операции отношения (=, <>, >, <, <=, >=) (’akkord’ > ’AKKORD’) = True 'TOM' > 'MIKE' , так как 'T' > 'M' 'LOOK' < 'LOPE', так как 'P' > 'O' 'KING' < 'KINGDOM', так как нет символа = 0, 'D' > 0 сортировка 29
Выражения типа Строка операция сцепления: ’+’ ’Т’+’В’+’– 61’=’ТВ– 61’ st 1: =’ТВ– 61'; st 2: =’група ’+st 1; - ‘ група ТВ– 61’ Операции отношения (=, <>, >, <, <=, >=) (’akkord’ > ’AKKORD’) = True 'TOM' > 'MIKE' , так как 'T' > 'M' 'LOOK' < 'LOPE', так как 'P' > 'O' 'KING' < 'KINGDOM', так как нет символа = 0, 'D' > 0 сортировка 30
Процедуры для обработки строк Delete(St, Pos, N) – удаление N символов St, начиная с позиции Pos. St=’група’ Delete(St, 3, 1) Результат: ’грпа’ Insert(St 1, St 2, Pos) – вставка строки St 1 в St 2, начиная с позиции Pos. St 2=’трода’, St 1=’ян’ Insert(St 1, St 2, 4) Результат: ’троянда’ Insert(’ян’, St 2, 4) Результат: ’троянда’ 31
Процедуры для обработки строк Str(R, St) – преобразование числового значения величины R в строку St. Значение R Результат St: 1500 12056 str(R: 6, St) str(–R: 3, St) ’ 1500’ ’– 12056’ Val (St, R, Cod) – преобразование значения St на величину целого или действытельного типа в зависимости от описания R Значение St: ’ 1500’ ’ 15. 2 E+02‘ Val(St, R, Cod) Результат: 1500 Cod=0 1520 Cod=0 ’ 15. 2 A+02‘ Val(St, R, Cod) ? Cod=5 32
Функции для обработки строк Length (St) – определяет текущую длину строки; Pos (St 1, St 2) – позиция первого появ. St 1 в St 2; Сopy(St, Pos, N) – выделяет из St строку длиной N символов, начиная с позиции Pos; St 1: =’целочисловой’; St 2: =Copy(St 1, 5, 5); Результат: St 2=’число’ Concat (St 1, St 2, . . . , St. N) – выполняет сцепление строк аналогично операции + ; Up. Case (Ch) – преобразует строчную букву в прописную. 33
Фрагменти програм Var st : string; i, k : integer; Приклад 1. { Підрахувати кількість літер а у рядку. } ------------------k: =0; for i: =1 to length(st) do if st [i] =’a’ then k: =k+1; ------------------ Приклад 2. { Замінити ‘раз’ на ‘роз’} ------------------ While Pos(‘раз’, st) <> 0 do St [Pos(‘раз’, st) +1]: =’o’; Приклад 3. { підрахувати кількість слів у рядку (між словами пробіл, в кінці крапка)} ------------------- k: =0; for i: =1 to length(st)-1 do if (st[i] <>’ ‘ ) and ((st[i+1] = ‘ ‘) or (st[i+1] =’. ’)) then k: =k+1; ------------------- 34
Фрагменти програм Var st : string; i, k : integer; Приклад 4. { підрахувати кількість слів у рядку (між словами пробіл, в кінці крапка), які починаються на а} ------------------- st: =’ ‘ + st; k: =0; for i: =1 to length(st)-1 do if (st[i] = ’ ‘ ) and ((st[i+1] = ‘a ‘) or (st[i+1] = ‘A ‘)) then k: =k+1; ------------------- Приклад 5. { видалити пробіли на початку рядку } ------------------- While st[1] = ‘ ‘ do Delete (st, 1, 1); ------------------- Приклад 6. { видалити зайві пробіли між словами} ------------------- While Pos (“ “, st) <> 0 do Delete (st, Pos (“ “, st), 1); ------------------35
Фрагменти програм Var st : string; i, k : integer; Приклад 7. {Поділити рядок на слова} ------------------st: =’ слово його довжина’; i: =1; Repeat k: =1; while (i <= length(st)) and (st[i] <> ‘ ‘ ) do begin i: =i+1; k: =k+1 end; writeln (Copy(st, i-(k-1), k-1)), ‘ ‘, k-1); {k-1 – довжина слова } {i-(k-1) – початoк слова} i: =i+1 Until i>length(st); Протокол роботи: слово 5 його 4 довжина 7 36
Фрагменти програм Var st : string; i, k : integer; Приклад 8. { замінити слово точка на слово крапка} ------------------- k: = Pos (‘точка’, st); while k<>0 do begin Delete(st, k, 5); Insert(‘крапка’, st, k); k: = Pos (‘точка’, st); end; ------------------- Приклад 9. {вивести перші входження літер} ------------------- st 1 : = ‘’; for i: =1 to length(st) do if Pos( st[ i ], st 1) = 0 then st 1: =st 1+st[i]; writeln(st 1); ------------------37
Фрагменти програм Рядок можна описати як масив слів, наприклад: Var st : array[1. . 5] of string [10]; В цьому випадку окреме слово позначається - st [ i ], а окремий символ - st [ i, j ] , де j – індекс символа у слові. Приклад 12. {підрахувати кількість літер а у кожному слові} ------------------ for i: =1 to 5 do read(st[i]); for i: =1 to 5 do begin k: =0; for j: =1 to length ( st[ i ] ) do if st [ i, j ] =’a’ then k: =k+1; writeln ( ‘ у слові ’, st[ i ], ’ ‘, k, ’ літер а’); end; ------------------- Рядок можна описати як масив символів, наприклад: Var st : array[1. . 10] of char; і обробляти його за відповідними правилами. 38
Параметы строки Строки можно передавать: n по значению; n на место параметра-константы. n по ссылке type s 20 = string[20]; var s 1 : string[40]; s 2 : s 20; s 3 : s 20; procedure P(const x : s 20; y : string; var z : s 20); . . . begin. . . P(s 2, s 1, s 3); . . . end. Павловская Т. А. (СПб. ГУИТМО) 39
ПРИКЛАД ЗАВДАННЯ ПРОГРАМИ n Тема: „Рядки”, . n Завдання: дано: послідовність, яка вміщує від 1 до 30 слів, у кожному з яких від 1 до 5 рядкових латинських букв; поміж сусідніми словами кома, за останнім словом – крапка. Надрукувати: усі різні слова та показати для кожного з них кількість його входжень у послідовність. n Тема: „Множини”. n Завдання: вивести в алфавітному порядку усі рядкові голосні. Павловская Т. А. (СПб. ГУИТМО) 40
ПРИКЛАД ПРОГРАМИ n n n n n n n n Програма: PROGRAM LAB 2; uses crt; type st=array[1. . 30] of string[5]; var str: string; mas: st; kol: integer; PROCEDURE VVOD(var stroka: string); BEGIN writeln('Vvedite stroku'); readln(str); END; PROCEDURE MAS_1(str: string; var mas: st); var i, j: integer; BEGIN i: =0; j: =1; REPEAT i: =i+1; if (str[i]<>', ') and (str[i]<>'. ') then mas[j]: =mas[j]+str[i] else j: =j+1; UNTIL str[i]='. '; kol: =j-1; END; Павловская Т. А. (СПб. ГУИТМО) PROCEDURE MAS_2 (str: string; mas: st); var i, n: integer; BEGIN FOR i: =1 to kol do BEGIN n: =0; WHILE pos(mas[i], str)<>0 do BEGIN n: =n+1; str[pos(mas[i], str)]: =''; END; if n<>0 then writeln(mas[i], ' - ', n); END; PROCEDURE GOLOSNI(str: string); type mn=set of char; var mn 1, mn 2: mn; i: integer; ch: char; BEGIN mn 1: =['e', 'y', 'u', 'i', 'o', 'a']; mn 2: =[]; FOR i: =1 to length(str) do if str[i] in mn 1 then include(mn 2, str[i]); FOR ch: ='a' to 'z' do if ch in mn 2 then write(ch); END. BEGIN clrscr; VVOD(str); MAS_1(str, mas); MAS_2(str; mas); GOLOSNI(str); readln; END. 41


