Слайд 2Стандартные модули Паскаля
System
Crt
Graph
Слайд 3Модуль System
содержит базовые средства языка, которые поддерживают ввод-вывод, работу
со строками, операции с плавающей точкой и динамическое распределение памяти
содержит все стандартные и встроенные процедуры, функции, константы и переменные Паскаля
автоматически используется во всех программах, его не требуется указывать в операторе uses
Слайд 4Примеры переменных System
var HeapOrg: Pointer
Указывает на конец динамической памяти.
var HeapPtr:
Pointer
Указывает на начало динамической памяти.
var InOutRes: Integer
Содержит код последней операции
ввода-вывода. Его можно получить с помощью вызова функции IOResult.
var Input: Text
Назначает стандартный файл ввода.
var RandSeed: Longint
Содержит начальное значение встроенного генератора случайных чисел.
Слайд 5Примеры подпрограмм System
var RandSeed: Longint
function Abs(x)
procedure Assign(var f; Name)
procedure Continue
function
Cоpy(s: String; Indx: Integer; Count: Integer): String
procedure Dec(var x:
тип> [; n: Longint])
function Eof[ (var f) ]: Boolean
procedure Exit
function Exp(x: Real): Real
procedure Моvе(var Src, Dst; Count: Word)
procedure MkDir(s: String)
procedure Randomize
procedure Writeln([var f: Text;] v1, [,v2, ..., vn] )
Слайд 6Модуль Crt
позволяет:
выполнять вывод в заданное место экрана заданным цветом
символа и фона;
открывать на экране окна прямоугольной формы и выполнять
вывод в пределах этих окон;
очищать экран, окно, строку и ее часть;
обрабатывать ввод с клавиатуры;
управлять встроенным динамиком.
Слайд 9Подпрограммы модуля Crt
procedure ClrScr;
procedure Delay(Msec: word)
procedure GoToXY(X, Y: Byte)
function
KeyPressed: Boolean
procedure NoSound
function ReadKey: Char
function Sound(Herz: Word)
procedure TextBackGroud(Color: byte)
procedure TextColor(Color:
Byte)
function WhereX: Byte
function WhereY: Byte
procedure Window(X1, Y1, X2, Y2: Byte)
…
Слайд 10Модуль Graph
Модуль (файл Graph.tpu) обеспечивает работу с экраном в
графическом режиме :
вывод линий и геометрических фигур заданным цветом и
стилем ;
закрашивание областей заданным цветом и шаблоном;
вывод текста различным шрифтом, заданного размера и направления;
определение окон и отсечение по их границе;
использование графических спрайтов и работу с графическими страницами.
Слайд 11Текстовый и графический режимы.
В текстовом режиме минимальным объектом, отображаемым на
экране, является символ (80 символов по горизонтали и 25 символов
по вертикали, то есть всего 2000 визуальных объектов);
Экран в графическом режиме представляется в виде совокупности точек — пикселов (pixel, сокращение от picture element). Цвет каждого пиксела можно задавать отдельно.
Количество точек по горизонтали и вертикали (разрешение экрана) и количество доступных цветов зависят от графического режима. Графический режим устанавливается с помощью служебной программы — графического драйвера расширение .bgi имени файла (EGAVGA.BGI) (Видеоадаптера)
Режим устанавливается при инициализации графики либо автоматически, либо программистом. Самый "мощный" режим, поддерживаемый модулем Graph, — 640х480 точек, 16 цветов. Модуль Graph обеспечивает (307 200 графических элементов)
Размер пикселя можно приблизительно получить, разделив размер экрана на разрешение. Геометрические размеры пикселя определяют степень детализации изображения, его качество.
Слайд 12Графические координаты.
Допустимый диапазон изменения графических координат составляет [0,rx-1] для х-координаты
и [0,ry-1] для y-координаты, где rx – количество пикселей на
экране по горизонтали, а ry – количество пикселей по вертикали
Точкой отсчета является верхний левый угол экрана. Значения х-координаты отсчитываются слева направо, а y-координаты – сверху вниз. Последнее отличает графические координаты от обычных декартовых координат, принятых в математике :
1. Графические координаты принимают только целочисленные значения.
2. Графические координаты принимают значения, ограниченные как снизу (нулевым значением), так и сверху (значением разрешения).
3. Графическая координата y отсчитывается сверху вниз.
Декартовы координаты точки (x,y) для отображения ее на экране следует пересчитать в графические (xg,yg) по формулам
Графические координаты правого нижнего угла экрана равны (GetMaxX, GetMaxY). Функции GetMaxX и GetMaxY, возвращающие наибольший номер пикселя по горизонтали и по вертикали соответственно.
Графические координаты задают положение точки на экране дисплея.
Начало координат находится в левом верхнем углу экрана и имеет координаты (0, 0).
xg=|sx * x|+dx;
yg=ry-|sy * y|-dy,
где |x| - целая часть х; sx и sy – масштабные множители, выбираемые из условия
rx=|sx * xmax|+1, (640)
ry=|sy * ymax|+1. (480)
Слайд 13Использование графики
подключение модуля Graph;
перевод экрана в графический режим;
установка параметров
изображения;
вывод изображения;
возврат в текстовый режим.
Слайд 14Переключение между текстовым и
графическим режимами
Переключение в графический режим и
работа в нем реализованы в Турбо Паскале в виде набора
процедур, находящихся в специальном модуле graph.tpu. Работа этого модуля основана на использовании так называемого графического интерфейса Борланд (BGI – Borland Graphics Interface), специализированной графической библиотеки:
Модуль Graph должен явно подключаться к программе с помощью оператора использования Uses, записываемого после заголовка программы:
Program Grafics;
Uses Graph;
Переключение в графический режим работы дисплея выполняется вызовом процедуры InitGraph из модуля Graph.
InitGraph(var gd:Integer; var gm:Integer;путь_драйвер:string)
Первый параметр в этой процедуре задает тип видеоадаптера, второй определяет режим. И параметр gd, и параметр gm являются параметрами-переменными (var). Параметр "путь_драйвер" определяет путь доступа к каталогу (маршрут), в котором находятся графические драйверы.
Слайд 15 Процедура InitGraph инициализирует графическую систему и переводит аппаратуру в графический
режим.
Примеры:
Program Grafics; Program Grafics;
Uses graph; Uses graph;
Var gd,gm:Integer; Var gd,gm:Integer;
Begin Begin
gd:=9; gm:=1; gd:=vga; gm:=VGALo;
InitGraph(gd,gm,' ');
InitGraph(gd,gm,'c:\tp\bgi')
. . . . . . . . . .
Слайд 16 Переключение в графический режим (инициализация графического режима) обычно сопровождается
обработкой возможных ошибок инициализации.
Procedure Graphinterface;
Var
driver,
mode, error:Integer; CloseGraph
s:String;
Begin
driver:=detect;
s:=' ';
Initgraph(driver,mode,s);
error:=GraphResult;
if error<>GrOk then
begin
writeln(GraphErrorMsg(Error));
Halt(error)
end
end;
Uses Crt,Graph;
Var Gd, Gm: integer;
Begin
-----
Gd:=detect;
InitGraph(Gd, Gm, '' );
……
Repeat Until Keypressed;
CloseGraph;
…
End.
выгружает драйвер из памяти и восстанавливает предыдущий видеорежим.
Слайд 17Переключение между текстовым и графическим режимами
Процедура RestoreCrtMode перезагружает первоначальный экранный
режим перед инициализацией графики.
Процедура RestoreCrtMode и процедура SetGraphMode позволяют переключаться
между текстовым и графическим режимами, не закрывая графический режим.
Uses Crt,Graph;
Var Gd, Gm: integer;
Begin
Gd:=detect;
InitGraph(Gd, Gm, '');
Outtext('Для виходу з графічного режиму нажміть Enter');
Readln;
RestorCrtMode;
Clrscr;
Writeln('Тепер ви у текстовому режимі');
Write('Для переходу у графічний нажміть Enter ');
Readln;
SetGraphMode(GetGraphMode);
OuttextXY(0,0,' Ви знову у графічному режимі');
Readln;
CloseGraph
End.
RestorCrtMode – возвращает екран в начальное состояние , которое было до инициализации графики.
SetGraphMode (<режим>) - устанавливает графический режим и очищает екран.
GetGraphMode - устанавливает поточним тот графический режим, который был установлений процедурой InitGraph.
Слайд 18Модуль Graph
Модуль Graph Турбо Паскаля содержит около пятидесяти различных
процедур и функций, предназначенных для работы с графическим экраном. В
этом же модуле описаны некоторые встроенные константы и переменные, которые могут быть использованы в графических программах:
Основную часть модуля составляют процедуры вывода базовых графических элементов, таких как точки, отрезки прямых линий, дуги и целые окружности и т.д. Такие элементы называются графическими примитивами.
Другая группа процедур предназначена для управления графическим режимом.
закрашивание областей заданным цветом и шаблоном;
вывод текста различным шрифтом, заданного размера и направления;
определение окон и отсечение по их границе;
Слайд 19Примеры констант модуля Graph
Константы образцов закрашивания
Константы шрифтов
Константы стиля линии
Слайд 20Примеры подпрограмм модуля Graph
procedure Arс(Х, Y: Integer; Angle1, Angle2, R:
Word)
procedure Circlе(Х, Y: Integer; R: Word)
procedure CloseGraph
procedure FillPoly(N : Word;
var S)
function GetColor: Word
function GetMaxX: Integer
function GraphResult: Integer
procedure InitGraph(var GrDriver: Integer; var Mode: Integer; Path : String)
procedure Line(X1, Y1, X2, Y2: Integer)
procedure OutTextXY(Х, Y: Integer; S: String)
procedure PutImage(X, Y: Integer; var Mass; Oper: Word)
procedure Rectangle(X1, Y1, X2, X2: Integer)
procedure SetBkColor(Color: Word)
procedure SetColor(Color: Word)
procedure SetLineStyle(SType: Word; Pattern: Word; S: Word)
procedure SetVisualPage(Page: Word)
Слайд 21Пример
uses Graph;
const grDriver : integer = Detect;
pole = 20;
var grMode
: integer;
maxX, maxY : integer;
begin
{ -----------------------------инициализация графики ----- }
InitGraph(grDriver, grMode, 'd:\tp\bgi');
if GraphResult <> GrOK then begin
writeln('Ошибка графики: ', GraphErrorMsg(ErrCode));
exit end;
The end
pole
{ ------------------------------------------ вывод текста ----- }
SetColor(Cyan);
SetTextStyle(GothicFont, HorizDir, 4);
OuttextXY(pole, pole, 'The end'); readln;
CloseGraph
end.
{ ------------------------------------------ вывод линий ----- }
maxX := GetMaxX; maxY := GetMaxY;
Line(pole, maxY div 2, maxX - pole, maxY div 2);
Line(maxX div 2, pole, maxX div 2, maxY - pole);
Слайд 22Пример
{Заполнение экрана отрезками случайной длины}
Uses Crt,Graph;
Var Gd, Gm: integer;
Begin
Gd:=detect;
InitGraph(Gd,
Gm, '');
Randomize;
Repeat
Line(random(640),random(200),random(640),random(200));
Until Keypressed;
Delay(1000);
CloseGraph
End.
Слайд 23Точки и линии на экране
Процедура PutPixel
Рисует точку на экране в
заданном месте заданным цветом.
Описание: PutPixel (x, y, цвет).
Примечания:
Выводит точку на экране с координатами (x, y) заданным цветом (параметр "цвет").
Процедура Line
рисует прямую линию из точки (x1, y1) в точку (x2, y2).
Описание: Line (x1, y1, x2, y2).
Примечания: Толщина и тип линии задаются процедурой SetLineStyle, а цвет линии устанавливается процедурой SetColor.
Слайд 24Вывод изображений в относительных координатах
Для этого используется понятие "текущий указатель"
Текущий указатель (CP – Current Pointer) используется во многих графических
системах. Понятие СР аналогично понятию курсора для текстового режима, за исключением того, что текущий указатель невидим.
Процедура MoveTo
Перемещает текущий графический указатель (СР) в точку (x, y).
Описание: MoveTo(x, y).
Процедура LineTo
Описание: LineTo (x, y).
Рисует прямую линию, толщина и тип которой задаются процедурой SetLineStyle, а цвет задается процедурой SetColor.
Примечания: MoveTo (100,100); LineTo (200, 200) эквивалентно Line (100, 100, 200, 200), второй метод не изменяет значения текущего указателя.
Слайд 25Алгоритм побудови графіка y=f(x)
Задати початкове значення відрізка a,b.
Задати кількість
точок графіка n.
Обчислити крок змінення по осі х: h=(b-a)/n.
Обчислити масиви
значень х і у:
For i:=1 to n do
Begin
X[i]:=a+h*(i-1);
Y[i]:=<за формулою>
End;
Знайти крок в пікселях по осі х.
deltax := round(GetmaxX/(x[n]- x[1]));
Крок в пікселях по осі y:
знайти ymax, ymin
deltay=round(GetmaxY/(ymax-ymin));
Побудувати графік:
встановити курсор у точку з координатами (x[1],y[1]) в пікселях (MoveTo(x[1],y[1])).
lineto(x[i],y[i]) провести лінію від поточної точки в задану.
Слайд 26String
Структурный тип данных –Строка
Слайд 27String СТРОКА
’Київ’ ’Маs’ ’ЗТВ-61’
String
Type
Strn = String[60];
Var
st1, st2 : Strn;
st : String;
Var
st1, st2 : String[60];
st : String;
Мах длина– 255 символов. +1 один байт
елемент масива: st[1], st[2].
Слайд 28Ввод – вывод строк
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] );
Слайд 29Выражения типа Строка
операция сцепления: ’+’
’Т’+’В’+’–61’=’ТВ–61’
st1:=’ТВ–61';
st2:=’група ’+st1; - ‘ група
ТВ–61’
Операции отношения (=,,>, ’AKKORD’) = True
'TOM' > 'MIKE'
, так как 'T' > 'M'
'LOOK' < 'LOPE', так как 'P' > 'O'
'KING' < 'KINGDOM', так как нет символа = 0, 'D' > 0
сортировка
Слайд 30Выражения типа Строка
операция сцепления: ’+’
’Т’+’В’+’–61’=’ТВ–61’
st1:=’ТВ–61';
st2:=’група ’+st1; - ‘ група
ТВ–61’
Операции отношения (=,,>, ’AKKORD’) = True
'TOM' > 'MIKE'
, так как 'T' > 'M'
'LOOK' < 'LOPE', так как 'P' > 'O'
'KING' < 'KINGDOM', так как нет символа = 0, 'D' > 0
сортировка
Слайд 31Процедуры для обработки строк
Delete(St,Pos,N) – удаление N символов St, начиная
с позиции Pos.
St=’група’
Delete(St,3,1)
Результат: ’грпа’
Insert(St1,St2,Pos) – вставка строки St1 в St2, начиная
с позиции Pos.
St2=’трода’,
St1=’ян’
Insert(St1,St2,4)
Результат: ’троянда’
Insert(’ян’,St2,4)
Результат: ’троянда’
Слайд 32Процедуры для обработки строк
Str(R, St) – преобразование числового значения величины
R в строку St.
Значение R 1500 12056
str(R:6,St) str(–R:3,St)
Результат
St: ’ 1500’ ’–12056’
Val (St, R, Cod) – преобразование значения St на величину целого или действытельного типа в зависимости от описания R
Значение St: ’1500’ ’15.2E+02‘ ’15.2A+02‘
Val(St,R,Cod) Val(St,R,Cod) Val(St,R,Cod)
Результат: 1500 Cod=0 1520 Cod=0 ? Cod=5
Слайд 33Функции для обработки строк
Length (St) – определяет текущую длину строки;
Pos
(St1, St2) – позиция первого появ. St1 в St2;
Сopy(St, Pos,
N) – выделяет из St строку длиной N символов, начиная с позиции Pos;
St1:=’целочисловой’;
St2:=Copy(St1,5,5);
Результат: St2=’число’
Concat (St1, St2, ..., StN) – выполняет сцепление строк аналогично операции + ;
UpCase (Ch) – преобразует строчную букву в прописную.
Слайд 34Фрагменти програм
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;
-------------------------------------
Слайд 35Фрагменти програм
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);
-------------------------------------
Слайд 36Фрагменти програм
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
Слайд 37Фрагменти програм
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.
{вивести перші входження літер}
-------------------------------------
st1 := ‘’;
for i:=1 to length(st) do
if Pos( st[ i ], st1) = 0 then st1:=st1+st[i];
writeln(st1);
-------------------------------------
Слайд 38Фрагменти програм
Рядок можна описати як масив слів, наприклад:
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;
і обробляти його за відповідними правилами.
Слайд 39Павловская Т.А. (СПбГУИТМО)
Параметы строки
Строки можно передавать:
по значению;
на место параметра-константы.
по
ссылке
type s20 = string[20];
var s1 : string[40];
s2 : s20;
s3 :
s20;
procedure P(const x : s20; y : string;
var z : s20);
...
begin ... P(s2, s1, s3); ...
end.
Слайд 40Павловская Т.А. (СПбГУИТМО)
ПРИКЛАД ЗАВДАННЯ ПРОГРАМИ
Тема: „Рядки”,.
Завдання: дано: послідовність, яка вміщує
від 1 до 30 слів, у кожному з яких від
1 до 5 рядкових латинських букв; поміж сусідніми словами кома, за останнім словом – крапка. Надрукувати: усі різні слова та показати для кожного з них кількість його входжень у послідовність.
Тема: „Множини”.
Завдання: вивести в алфавітному порядку усі рядкові голосні.
Слайд 41Павловская Т.А. (СПбГУИТМО)
ПРИКЛАД ПРОГРАМИ
Програма:
PROGRAM LAB2;
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;
END;
PROCEDURE GOLOSNI(str:string);
type mn=set of char;
var mn1,mn2:mn;
i:integer;
ch:char;
BEGIN
mn1:=['e','y','u','i','o','a'];
mn2:=[];
FOR i:=1 to length(str) do
if str[i] in mn1 then
include(mn2,str[i]);
FOR ch:='a' to 'z' do
if ch in mn2 then
write(ch);
END.
BEGIN
clrscr;
VVOD(str);
MAS_1(str,mas);
MAS_2(str;mas);
GOLOSNI(str);
readln;
END.