Модульный принцип построения программ

Содержание

Слайд 2

5 Модульный принцип построения программ 60 Управление экраном в графическом режиме

5 Модульный принцип построения программ 60

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

режиме
В графическом режиме программист получает возможность управлять
каждой точкой (пикселем) экрана. Координаты точки определяются относительно верхнего левого угла. Каждая точка экрана при этом может высвечиваться одним из доступных цветов. Информация о цвете точки хранится в видеобуфере.
Количество цветов зависит от количества бит, отведенных в видеобуфере
под одну точку. Рассмотрим основные варианты.
1. «1 точка - 1 бит» - монохромный режим: каждая точка высвечивается
либо основным цветом, если в видеобуфере для точки записана 1, либо
цветом фона, если в видеобуфере записан 0.
2. «1 точка - 2 бита» - режим с двумя трехцветными палитрами:
Палитра 0: Палитра1:
01-зеленый; 01-светло-голубой;
10 - красный; 10 - сиреневый;
11 - коричневый. 11 - белый.
Если в буфере записана комбинация 00, то точка высвечивается цветом фона.
Слайд 3

5 Модульный принцип построения программ 61 3. «1 точка - 4

5 Модульный принцип построения программ 61

 
3. «1 точка -

4 бита» - режим, использующий 16-цветную палитру. В
этом режиме в отличие от предыдущих в видеобуфер заносится не цвет точки, а номер регистра палитры, в котором записан нужный цвет.
Для записи цвета используется 6 бит по схеме RGBrgb, причем первые
три бита кодируют 2/3 яркости цвета, а вторые три бита - оставшуюся 1/3 яркости.
Так, максимально яркий красный цвет будет кодироваться двумя единицами в первом и четвертом битах:
R G В r g b
0 0 1 0 0
Таким образом, каждый цвет имеет четыре градации яркости: 0, 1/3, 2/3, 1, что позволяет кодировать 4^3 = 64 варианта цвета. На экране в этом режиме одновременно может присутствовать не более 16 цветов, так как имеется всего 16 регистров палитры.
Слайд 4

5 Модульный принцип построения программ 62 4. «1 точка - 8

5 Модульный принцип построения программ 62

 
4. «1 точка -

8 бит» - режим, использующий палитру на 256 цветов. В
этом режиме используется та же идея записи кода цвета не в видеобуфер, а в регистры палитры, что и в предыдущем режиме, но используется 256 регистров палитры, в которых под запись цвета используется 18 бит. Из этих 18 бит под кодирование яркости каждого цвета используется 6 бит, обеспечивая 64 градации яркости каждого цвета. Таким образом, на экране можно одновременно видеть 256 цветов из 64^3 = 262144 возможных.
Количество точек на экране, набор возможных цветов и количество
страниц изображения, которые могут одновременно храниться в памяти, зависят от используемых технических средств (типа монитора и блока управления монитором - адаптера) и режимов их работы.
Для каждого типа оборудования, существовавшего на момент разработки среды программирования, среда программирования Turbo Pascal 7.0 включает свою программу управления дисплеем - драйвер, которая обеспечивает работу в нескольких доступных режимах, различающихся количеством точек на экране и количеством страниц, информация о которых может храниться в видеобуфере.
Слайд 5

5 Модульный принцип построения программ 63 Драйвер – это специальная программа,

5 Модульный принцип построения программ 63

 
Драйвер – это специальная

программа, которая управляет техническими средствами компьютера. Для всех существующих типов адаптеров фирма Borland разработала графические драйверы (они имеют расширение .bgi и находятся на диске в одноименном подкаталоге).
Необходимые процедуры и функции для работы с графикой собраны стандартном модуле – Graph (более 80 процедур, функций, типов, констант).
I. Процедуры и функции переключения режимов управления экраном.
Модуль Graph содержит средства, обеспечивающие различные варианты
переключения текстового и графического режимов.
1. Процедура InitGraph(Var driver, mode:integer; path:string) – переключает экран в графический режим. При вызове процедуры следует объявить специальные переменные, куда занести константу драйвера и константу режима, и указать эти переменные в качестве параметров процедуры. Существует возможность запросить автоматическое определение драйвера и режима: для этого необходимо вместо константы драйвера в переменную, используемую в качестве параметра, записать константу detect = 0.
Слайд 6

5 Модульный принцип построения программ 64 Целая переменная mode задает режим

5 Модульный принцип построения программ 64

 
Целая переменная mode задает

режим работы графического адаптера. Многие адаптеры могут работать в нескольких режимах.
Например, переменная Mode в момент обращения к InitGraph может иметь одно из следующих значений для адаптера VGA: VGALo =0; VGAMed = 1; VGAHi = 2;
Параметр path должен описывать путь, определяющий местоположение
файла, который содержит требуемый драйвер (обычно все драйверы находятся в подкаталоге BGI основного каталога среды Turbo Pascal). Если драйвер находится в текущем каталоге, то в качестве параметра передается пустая строка - ".
Для нашего графического режима обычно значение максимальной координаты X равно 640 пикселям, а Y– 480 пикселям.
2. Функция GraphResult: integer - возвращает номер ошибки, обнаруженной при инициализации графического режима.
3. Функция GraphErrorMSG(ErrNum:integer):string - позволяет по номеру
ошибки определить ее причину.
Слайд 7

x Чтобы точно строить изображение на экране, Вам нужно сначала нарисовать,

x

Чтобы точно строить изображение на экране, Вам нужно сначала нарисовать, как

это должно выглядеть на бумаге. Для этого начертите в тетради систему координат графического режима.
Слайд 8

5 Модульный принцип построения программ 66 Полностью инициализация графического режима может

5 Модульный принцип построения программ 66

 
Полностью инициализация графического режима

может быть выполнена следующим образом:
Var driver,mode,error: integer;
Begin
driver: =detect; {или driver: =0;}
InitGraph (driver, mode, 'd: \BP \BGI');
error: =GraphResult;
If error <>0 then {если обнаружены ошибки}
begin
WriteLn('Ошибка инициализации графического режима',
GraphErrorMSG(error));
Halt(1); {аварийное завершение программы}
end;
{работа в графическом режиме}...
Слайд 9

5 Модульный принцип построения программ 67 4. Процедура CloseGraph - завершает

5 Модульный принцип построения программ 67

 
4. Процедура CloseGraph -

завершает работу в графическом режиме:
выгружает драйвер и восстанавливает текстовый режим. Если завершить
программу, не выходя из графического режима, то нормальная работа MS
DOS нарушается, так как MS DOS функционирует в текстовом режиме.
5. Процедура RestoreCrtMode - осуществляет временный возврат в текстовый режим с сохранением графического изображения в видеобуфере.
6. Процедура SetGraphMode(mode:integer) - осуществляет возврат в
графический режим после временного выхода, осуществленного процедурой RestoreCrtMode.
7. Функция GetGraphMode:integer - возвращает номер активного графического режима.
Таким образом, временный выход в текстовый режим обычно оформляется
следующим образом:
RestoreCrtMode; {переход в текстовый режим}
... {выполнение обработки в текстовом режиме}
SetGraphMode(GetGraphMode); {возврат в графический режим}
Слайд 10

5 Модульный принцип построения программ 68 II. Процедуры и функции управления

5 Модульный принцип построения программ 68

 
II. Процедуры и функции

управления цветом. Модуль Graph содержит
специальные процедуры и функции управления цветом изображения.
1. Процедура SetBkColor(Color:word) - устанавливает новый цвет фона.
При инициализации графического режима видеобуфер очищается (обнуляется). При этом все точки оказываются связаны с 0 регистром палитры, который и считается регистром, хранящим цвет фона. Процедура SetBkCoIor записывает в 0 регистр палитры цвет, указанный в параметре Color.
2. Процедура SetColor(ColorNum:word) - объявляет цвет в регистре с
номером ColorNum текущим цветом рисования.
III. Процедуры и функции управления типом, толщиной линии и видом штриховки. Модуль Graph содержит средства, позволяющие управлять типом и толщиной линии, а также образцом закраски замкнутых контуров.
1. Процедура SetLineStyle(style, pattern, thickness: word) - устанавливает
стиль style или образец pattern линии и ее толщину thickness.
Для установки стиля используют следующие константы:
SolidLn=0; {сплошная} DottedLn=l; {точечная}
CenterLn=2; {штрихпунктирная} DashedLn=3; {пунктирная}
UserBitLn=4; {определенная программистом в образце}
Слайд 11

5 Модульный принцип построения программ 69 Если указаны стили 0..3, то

5 Модульный принцип построения программ 69

 
Если указаны стили 0..3,

то образец игнорируется. Если установлен
стиль 4, то вид линии определяется образцом.
Толщину линии можно установить одинарной и тройной, соответствующие
константы выглядят следующим образом:
NormWidth=l; {нормальная толщина линии}
ThickWidth=3; {тройная толщина линии }
2. Процедура SetFillStyle(fillstyle, color: word) - устанавливает образец
fillstyle и цвет color штриховки замкнутых контуров. Для определения образцов штриховки можно использовать следующие константы:
EmptyFill=0; {без штриховки - прозрачный контур}
SolidFill=1; {сплошная заливка}
LineFill=2; { горизонтальные линии}
LtSlashFill=3; {//// тонкие линии}
SlashFiU=4; {\\\\ - толстые линии}
BkSlashFill=5; {\\\\ - толстые линии}
LtBkSlashFill=6; {////- тонкие линии}
HatchFill=7; {-f+++ - клетка горизонтальная}
и т.д.
Слайд 12

5 Модульный принцип построения программ 70 3. Процедура FloodFill(x, у, color:

5 Модульный принцип построения программ 70

 
3. Процедура FloodFill(x, у,

color: word) - закрашивает текущим образцом
и цветом закраски, установленными процедурой SetFiIlStyle, область,
ограниченную контуром цвета color, внутри которой находится точка с координатами (х,у). Если контур не замкнут, то будет закрашен весь экран
IV. Процедуры и функции рисования точек и линий, фигур
Модуль Graph предоставляет программисту большой набор процедур и функций, рисующих различные примитивы (простейшие фигуры, размеры и местоположение которых определяются параметрами).
1. Процедура PutPixel(x, у, color: word) - рисует точку цветом, определенным color, в точке экрана с координатами (x, у).
2. Функция GetPixel(x,y:word):word – возвращает цвет точки с указанными координатами.
3. Функция MoveTo(x,y:word):word- задает положение текущей точки -
точки, используемой в качестве исходной при рисовании линий или выводе
текста.
4. Процедура MoveRel(dx,dy:word) - задает положение текущей точки
относительно ее предыдущего положения.
5. Функции GetX:word и GetY:word- возвращают соответственно координаты x и у текущей точки.
Слайд 13

5 Модульный принцип построения программ 71 6. Функции GetMaxX:word и GetMaxY:word

5 Модульный принцип построения программ 71

 
6. Функции GetMaxX:word и

GetMaxY:word - возвращают соответственно
максимальные размеры экрана в точках для текущего режима.
7. Процедура Line(x1,y1,x2,y2:word) - рисует линию из точки (х1,у1) в точку (х2,у2).
8. Процедура LineTo(x,y:word) - рисует линию из текущей точки в точку (х,у).
9. Процедура LineRel(dXydy:word) - рисует линию из текущей точки в точку, отстоящую от текущей на dx, dy.
10. Процедура Rectangle(xl,yl,x2,y2:word) - рисует прямоугольник по координатам левого верхнего и правого нижнего углов.
11. Процедура Bar(xlyyl,x2,y2:word) - рисует заштрихованный прямоугольник с заданными координатами текущим цветом и закрашивает его текущим образцом закраски.
12. Процедура Bar3D(xl,yl,x2,y2, depth:word; top: boolean) - рисует параллелепипед, у которого: размер передней грани определяется координатами х1, у 1, х2, у2; глубина depth обычно задается равной 25% ширины, а параметр top определяет, рисовать ли верхнюю грань (да, если true, и нет, если false). Верхнюю грань не рисуют, если необходимо изобразить несколько параллелепипедов, стоящих друг на друге. Передняя грань закрашивается текущим образцом и цветом закраски.
Слайд 14

Bar3D (x1,y1,x2,y2, Depth, Top), где переменные X1, X2, Y1, Y2 типа

Bar3D (x1,y1,x2,y2, Depth, Top), где переменные X1, X2, Y1, Y2 типа

Integer, Depth типа Word, а Top типа Boolean – рисуется параллелепипед, закрашенный текущим стилем и цветом. Здесь переменные X1, X2, Y1, Y2 являются координатами левого верхнего и правого нижнего углов передней грани, Depth – ширина боковой грани (отсчитываются по горизонтали), Top – признак включения верхней грани: TopОn = true – верхняя грань изображается, TopОff = false – верхняя грань не изображается.
Слайд 15

5 Модульный принцип построения программ 73 13. Процедура DrawPoly(numPoints:word; var PolyPoints)

5 Модульный принцип построения программ 73

 
13. Процедура DrawPoly(numPoints:word; var

PolyPoints) - рисует ломаную линию. Первый параметр определяет количество вершин ломаной, а второй - координаты этих вершин в массиве элементов специального типа PointType:
Type PointType = record
x,y:word;
end;...
Например:
Var MP:array[1..5] of PointType; {объявление массива координат точек}
DrawPoly(5,MP); {рисуем ломаную линию}
14. Процедура FillPoly (numPoints:word; Var PolyPoints) - рисует закрашенный многоугольник с указанными вершинами.
15. Процедура Circle (х, у, radius:word) - рисует окружность заданного
радиуса radius с центром в точке (х, у).
16. Процедура Arc(х,у, stangle, endangle, radius: word) - рисует дугу окружности указанного радиуса radius от угла stangle до угла endangle. Углы отсчитываются от положительного направления оси абсцисс против часовой стрелки и указываются в градусах.
Слайд 16

5 Модульный принцип построения программ 74 17. Процедура Pieslice (х, у,

5 Модульный принцип построения программ 74

 
17. Процедура Pieslice (х,

у, stangle, endangle, radius:word) - рисует заштрихованный сектор или окружность (если конечный угол равен начальному). Углы отсчитываются от положительного направления оси абсцисс против часовой стрелки и указываются в градусах.
18. Процедура Ellipse (х, у, stangle, endangle, radiusX, radiusY: word) -
рисует эллипс или его дугу.
19. Процедура Sector (х, у, stangle, endangle, radiusX, radiusY: word) -
рисует заштрихованный эллипс или его сектор.
20. Процедура FillEllipse (х, у, radiusX, radiusY: word) - рисует заштрихованный эллипс.
Слайд 17

Например, чтобы начертить дугу (смотри рисунок) от окружности радиуса 50 пикселей

Например, чтобы начертить дугу (смотри рисунок) от окружности радиуса 50 пикселей

и координатами центра (100, 230) надо набрать команду:
Arc (100, 230, 45, 135, 50)
Слайд 18

5 Модульный принцип построения программ 76 V. Процедуры и функции управления

5 Модульный принцип построения программ 76

 
V. Процедуры и функции

управления текстом. Текст в графическом режиме может быть выведен процедурами Write и WriteLn, но при этом управление выполняется аналогично текстовому режиму. Специально для работы с текстом в графическом режиме модуль Graph предлагает следующие процедуры и функции.
1. Процедура SetTextStyle(font,direction,charsize:word) - устанавливает
текущий шрифт font, направление вывода строки direction и размер шрифта charsize.
Для установки шрифта используют специальные константы:
DefaultFont=0; {обычный}
TriplexFont=1; {полужирн ы й}
SmallFont=2; {мел кий}
SanserifFont=3; {прямой}
GothicFont=4; {готический}
Направление вывода может быть либо горизонтальным, либо вертикальным: HorizDir=0; {горизонтальное направление}
VertDir=l; {вертикальное направление}
Размер шрифта указывается значением, на которое необходимо умножить
исходный размер шрифта (8x8 точек). Таким образом, шрифт можно
увеличивать в целое число раз.
Слайд 19

5 Модульный принцип построения программ 77 2. Процедура SetTextJustify(goriz, vert :word)

5 Модульный принцип построения программ 77
2. Процедура SetTextJustify(goriz, vert :word)

- устанавливает способ выравнивания для горизонтального goriz и вертикального vert направлений вывода. Способ выравнивания определяется относительно некоторой точки с помощью специальных констант:
LeftText=0; {точка слева от текста}
CenterText=1; {точка по центру текста при горизонтальном направлении
вывода}
RightText=2; {точка справа от текста}
BottomText=0; {точка под текстом}
CenterText=1; {точка по центру текста при вертикальном направлении
вывода}
TopText=2; {точка над текстом}
3. Процедура OutText (st:string) - выводит строку, выравнивая ее заданным способом относительно текущей точки.
4. Процедура OutTextXY(x,y:word; st: string) - выводит строку st, выравнивая ее в соответствии с установленными режимами вертикального и горизонтального выравнивания относительно точки (х, у).
Слайд 20

5 Модульный принцип построения программ 78 Пример 1. Приведем пример программы,

5 Модульный принцип построения программ 78
Пример 1. Приведем пример программы,

при выполнении которой создается интересный визуальный эффект путем заполнения экрана множеством точек различных цветов.
Uses Crt, Graph;
Var    Driver, Mode : integer; Color: word; X,Y:word;
Procedure GrInit;
Begin
Driver:= Detect; {автораспознанание драйвера} InitGraph(Driver, Mode,'');
If GraphResult<>0 then Begin Writeln ('Ошибка  инициализации!');
Writeln ('Работа   программы  прервана'); Halt (1) {остановить  выполнение  программы с кодом  завершения — 1}
       End; End;
Begin GrInit;
Color: =0; Randomize;
Repeat
{выберем    случайным    образом    координаты точки}
X: = Random(GetMaxX); Y: = Random(GetMaxY);
PutPixel(X,Y, Color); {вывод точки} Inc(Color); {изменение цвета}
{проверим,  не  превышает ли значение  цвета максимального   значения,   которое   определяет   функция GetMaxColor}
If Color = GetMaxColor Then Color: =0;
Until KeyPressed; {повторять до нажатия любой клавиши}
ClearDevice;
CloseGraph
End.
Слайд 21

5 Модульный принцип построения программ 79 Пример 2 Будильник. program Budil;

5 Модульный принцип построения программ 79
Пример 2 Будильник.
program Budil; uses

graph; var grDriver:integer; grMode:integer; Begin grDriver:=Detect; InitGraph(grDriver,grMode,''); {Смена цвета фона}
SetBkColor(14); {Смена цвета линии}
SetColor(5); {Рисование окружности}
Circle(250,180,60); Circle(270,180,60); Circle(210,235,7); Circle(310,235,7); Circle(260,180,7); Circle(260,115,10); SetColor(9); {Рисование линий}
Line(260,180,260,140); Line(260,180,270,150); Circle(260,230,5); Circle(260,125,5); Circle(230,180,5); Circle(290,180,5); readln; End.
Слайд 22

5 Модульный принцип построения программ 80 Пример 3. Прогрaмма рисует 5

5 Модульный принцип построения программ 80
Пример 3. Прогрaмма рисует 5

концентрических окружностей в центре экрaнa.
Program Krug2;
Uses Graph;
Var Gd, Gm, rad,xc,yc:integer;
begin Gd:=Detect; { функция InitGraph должнa выполнить } { aвтоопределение типa мониторa (Gd) и его } { мaксимaльного рaзрешения (Gm)} InitGraph(Gd,Gm,''); { инициaлизaция грaфического режимa }
if GraphResult <> 0 then { в случaе ошибки инициaлизaции } begin Writeln('Ошибкa инициaлизaции грaфического режимa');
Writeln('В кaтaлоге прогрaммы должен присутствовaть дрaйвер egavga.bgi'); Writeln('или укaжите путь к нему в IniGraph(Gd,Gm,<путь>)'); Halt(1); end;
Case Gd of { aнaлизируем тип дисплея } { и вычисляем координaты центрa экрaнa }
9: begin { VGA монитор } xc:=(640-1) div 2; yc:=(480-1) div 2; end;
3: begin { EGA монитор } xc:=(640-1) div 2; yc:=(350-1) div 2; end; end;
for rad:=1 to 5 do Circle(xc, yc, rad*20); { рисуем окружности } Readln; CloseGraph; { возврaт в текстовый режим }
end.
Слайд 23

5 Модульный принцип построения программ 81 Пример 4. Программа выводит десять

5 Модульный принцип построения программ 81
Пример 4. Программа выводит десять

вложенных друг в друга прямоугольников, после чего циклически меняет цвет фона. Для выхода из программы достаточно нажать на любую клавишу.
Uses Graph, CRT; 
const NC: array [0..15] of String [12] = ('Black', 'Blue', 'Green', 'Cyan‘ ,'Red', 'Magenta',
 ' Brown', 'LightGray‘ ,'DarkGray', 'LightBlue',  'LightGreen’,'LightCyan1,'LightRed',
'LightMagenta‘ ,'Yellow', 'White');
var d, r, e, k, color, dx, dy: Integer;
Begin {Инициируем графику}
d := Detect; InitGraph(d, r, ' ') ; 
e := GraphResult; if e <> grOK then WriteLn(GraphErrorMsg(e)) 
else  begin {Выводим текст в центре экрана}
OutTextXY(200,GetMaxY div 2 ,'BACKGROUND COLOR');
dx := GetMaxX div 30; {Приращение длины}
dy := GetMaxY div 25; {Приращение высоты}
for k := 0 to 9 do {Выводим 10 прямоугольников}
Rectangle(k*dx,k*dy,GetMaxX-k*dx,GetMaxY-k*dy);
color := black; {Начальный цвет фона} 
repeat {Цикл смены фона}
SetBkColor(color) ; SetFillStyle(0,Color);
Bar(345,GetMaxY div 2, 440 , GetMaxY div 2+8);
OutTextXY(345,GetMaxY div 2,NC[color]); delay(1000); inc(color);
if color > White then color := Black until KeyPressed;
if ReadKey=#0 then  k := ord(ReadKey); 
CloseGraph  end 
end.
Слайд 24

5 Модульный принцип построения программ 82 Построение графика элементарных функций Пусть

5 Модульный принцип построения программ 82
Построение графика элементарных функций
Пусть дана

некоторая функция у = f(х). Рассмотрим прямоугольную область координатной плоскости, которая  определяется значениями:
xMin ≤  x  ≤  xMax; yMin ≤  y  ≤  yMax;
Эту область назовём областью функции, а координаты (х, у) — мировыми координатами. Графиком функции f(х) является некоторое конечное множество точек (хk,уk),  уk = f(xk), k=1, ..., n из области функции.
Выделим на экране компьютера прямоугольную область, которую будем называть окном, в котором поместим точечный график функции. В графическом режиме экран имеет другую систему координат U и V.
Шаг 1. Определим исходные данные uMin, uMax, vMin, vMax, xMin, xMax, yMin, уМах, а также количество точек n=uMax — uMin и шаг изменения х xStep=(xMax — xMin)/n.
Шаг 2. Нарисуем рамку, обрамляющую окно (это будет прямоугольник, левый верхний угол которого имеет координаты (uMin, vMin), а правый нижний угол — (uMax, vMax).
Шаг 3. Вычислим кооэффициенты сжатия рх и ру по формулам .
Шаг 4. Нарисуем оси координат.
Шаг 5.    Строим график функции y = f(x) из n точек, преобразовывая  х в u,  а у - в v.
Слайд 25

Приведем программу построения графика функции y=х2 — 5х + 6, используя

Приведем   программу  построения   графика   функции y=х2 — 5х + 6, 

используя  следующие  исходные данные: xMin= —2;    yMin= —2; xMax = 10; уМах=10.
Слайд 26

5 Модульный принцип построения программ 84 uses Graph; Const uMin=50; uMax=600;

5 Модульный принцип построения программ 84
uses Graph; Const uMin=50; uMax=600; vMin=50;

vMax=450; {Окно графика функции} Var grDriver: integer; grMode: integer; xStep:real; {Шаг по х} n, k: integer; {Число точек графика} x, y, px, py:real; xMin, yMin, yMax, xMax: real;{Область функции} Procedure Grlnit; Begin grDriver:=Detect; InitGraph(grDriver,grMode,''); IF GraphResult<>0 then begin Writeln('Ошибка инициализации!'); writeln('Работа программы прервана'); Halt(1) end End;
Слайд 27

5 Модульный принцип построения программ 85 Function xScr(x: real):integer; {Преобразование координаты

5 Модульный принцип построения программ 85
Function xScr(x: real):integer; {Преобразование координаты х

в u} begin xScr:=Round((x-xMin)*px+uMin); end; Function yScr(y:real):integer; {Преобразование координаты y в v} begin yScr:=Round((y-yMax)*py+vMin); end; Function f(x:real):real; {Вид функции} begin f:=X*X-5*X+6; end;
Слайд 28

5 Модульный принцип построения программ 86 Begin {Ввод исходных значений области

5 Модульный принцип построения программ 86
Begin {Ввод исходных значений области функции} write('xMin=');

readln(xMin); write('xMax='); readln(xMax); write('yMin='); readln(yMin); write('yMax='); readln(yMax); px:=(uMax-uMin)/(xMax-xMin); py:=-(vMax-vMin)/(yMax-yMin); Grlnit; {Построение рамки прямоугольника} SetLineStyle(0,0,3); Rectangle(uMin,vMin,uMax,vMax); {Построение осей координат} SetLineStyle(0,0,1); If (xMin<0) and (xMax>0) then Line (xScr(0),vMin,xScr(0),vMax); If(yMin<0) and(yMax>0) then Line(uMin,yScr(0),uMax,yScr(0));
Слайд 29

5 Модульный принцип построения программ 87 {Определение количества точек графика} n:=uMax-uMin;

5 Модульный принцип построения программ 87
{Определение количества точек графика} n:=uMax-uMin; {Вычисление шага} xStep:=(xMax-xMin)/n; x:=xMin; {Вывод

графика в виде n точек желтого цвета, преобразовывая при этом х в u, у в v} for k:=1 to n do begin y:=f(x); if(y> yMin) and (y
Слайд 30

6 Основы проектирования программ 88 Этапы проектирования программ: техническое задание; разработка

6 Основы проектирования программ 88
Этапы проектирования программ:
техническое задание;
разработка технического

проекта;
разработка рабочего проекта;
отладка отдельных модулей и программы в целом;
разработка документации
Слайд 31

6 Основы проектирования программ 89 I. Техническое задание (примерный план) 1.Организационно-экономическая

6 Основы проектирования программ 89
I. Техническое задание (примерный план)
1.Организационно-экономическая сущность

задачи:
• наименование задачи, место ее решения;
• цель решения;
• назначение (для каких объектов подразделений и пользователей она предназначена);
• периодичность решения и требования к срокам решения;
• источники и способы поступления данных;
• потребители результатной информации и способы ее отправки
• информационная связь с другими задачами.
Слайд 32

6 Основы проектирования программ 90 2. Описание исходной (входной) информации: •

6 Основы проектирования программ 90
2. Описание исходной (входной) информации:
• перечень

исходной информации;
• формы представления (электронная форма или бумажный документ) по каждой позиции перечня; примеры заполнения форм (документов); описание структурных единиц информации (каждого элемента данных, реквизита);
• способы контроля ввода исходной информации;
3. Описание выходной информации:
• перечень результатной информации;
• формы представления, (печатная сводка, видеограмма, машинный носитель и его макет и т.д.);
• перечень пользователей результатной информации (подразделение и персонал)
• перечень регламентной и запросной информации;
• описание структурных единиц информации (каждого элемента данных, реквизита) по аналогии с исходными данными;
• способы контроля результатной информации;
• контроль разрядности;
• контроль интервала значений реквизита;
• контроль соответствия списку значений.
Слайд 33

6 Основы проектирования программ 91 4.Описание алгоритма решения задачи (последовательности действий

6 Основы проектирования программ 91
4.Описание алгоритма решения задачи (последовательности действий

и логики решения задачи):
• описание способов формирования результатной информации с указанием последовательности выполнения логических и арифметических действий;
• описание связей между частями, операциями, формулами алгоритма;
• требования к порядку расположения (сортировке) ключевых реквизитов, например; по возрастанию значений табельных номеров.
5.Описание используемой условно-постоянной и справочной информации:
• перечень единиц условно-постоянной информации, классификаторов, справочников, таблиц, списков с указанием их полных наименований;
• формы представления;
• описание структурных единиц информации (по аналогии с исходными записями;
• способы взаимодействия с переменной информацией;
• содержание справочной информации, ее структура и способы обращения к ней.
Слайд 34

6 Основы проектирования программ 92 Описание данных (входной, выходной и справочной

6 Основы проектирования программ 92
Описание данных (входной, выходной и справочной

информации) свести в таблицу 1.
Таблица 1 - Описание данных, используемых в программе.
В столбце «Назначение переменной» может быть указан один из трёх вариантов: 
исходные данные;
вспомогательная переменная;
результат.
В столбце «Ограничения» необходимо указать тип переменной и ее вид (простая или элемент массива или записи), а также ограничения на значения, например, «значение больше нуля».
Слайд 35

6 Основы проектирования программ 93 II. Разработка технического проекта На данном

6 Основы проектирования программ 93
II. Разработка технического проекта
На данном этапе

выполняется комплекс наиболее важных работ:
конкретизируются данные об объекте программы,
производится декомпозиция задачи,
разрабатывается детальный алгоритм обработки данных.
Задачи обладают внутренней структурой.
Необходимо разбить сложную задачу на структурные элементарные составляющие и задать их комбинирование.
Далее требуется детализация задачи, т.е. переход от описания задачи в крупных понятиях к стоящим за этими понятиями объектам более низкого уровня.
Структурная методология включает следующие методы:
Метод нисходящего проектирования («сверху-вниз»);
Метод восходящего проектирования («снизу-вверх»)
Слайд 36

6 Основы проектирования программ 94 Метод нисходящего проектирования («сверху-вниз») – подход

6 Основы проектирования программ 94
Метод нисходящего проектирования («сверху-вниз») – подход

функциональной декомпозиции на основе 2 стратегий:
пошагового уточнения, при котором на каждом следующем этапе декомпозиции определяются модули очередного более низкого уровня;
анализа сообщений, при котором анализируются потоки данных, обрабатываемых модулями.
Метод восходящего проектирования («снизу-вверх») – подход, при котором в первую очередь определяются вспомогательные модули, которые потребуются при проектировании программы.
Программные продукты обладают внутренней структурой, образованной взаимосвязанными программными модулями
Модуль – это самостоятельная часть программы, имеющая определенное назначение и обеспечивающая заданные функции обработки.
При модульном подходе работа программного продукта представляется в виде совокупности действий по преобразованию данных от «исходных» к «выходным». Под исходными данными подразумеваются данные, которые задаются об объекте при инициализации программы.
Слайд 37

6 Основы проектирования программ 95 При проектировании программы необходимо разделять ее

6 Основы проектирования программ 95

При проектировании программы необходимо разделять ее

на все меньшие и меньшие подпрограммы, т.е. производить декомпозицию задачи. Под декомпозицией подразумевается разделение задачи на составляющие модули.
Рис. 1 Примерный состав модулей, выделяемых в программном продукте при декомпозиции
Слайд 38

6 Основы проектирования программ 96 На этом этапе также необходимо: установить

6 Основы проектирования программ 96
На этом этапе также необходимо:
установить какие

справочные данные требуются для решения поставленной задачи,
разработать форму представления и ввода для них.
определить в виде каких объектов данных будут представлена используемая информация.
Под объектом данных программы подразумевается переменные, структуры (записи), массивы, файлы, используемые в программе.
Обычно объекты данных, используемые в программе, формируются на основе объектов предметной области, участвующих в задаче.
Выделенные подзадачи (рис.1) являются прообразами будущих программных модулей.
Для разработки программных модулей необходимо разработать алгоритм для каждой выделенной подзадачи.
На рис. 2 приведена типовая структура программного продукта, состоящего из отдельных программных модулей, процедур, встроенных функций.
Слайд 39

6 Основы проектирования программ 97

6 Основы проектирования программ 97

Слайд 40

6 Основы проектирования программ 98 Среди множества модулей различают: головной модуль

6 Основы проектирования программ 98
Среди множества модулей различают:
головной модуль (вызывающая

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

6 Основы проектирования программ 99 Общие рекомендации при декомпозиции: не пытайтесь

6 Основы проектирования программ 99
Общие рекомендации при декомпозиции:
не пытайтесь разбивать

на модули очень простые задачи;
рекомендуемый размер модуля от 15 до 60 программных строк;
обязательно выделяйте в виде модуля ту часть программы, которая может быть полезна в других программах или в нескольких частях данной программы;
переменные, общие для нескольких модулей, должны быть определены в вызывающей программе;
стремитесь к независимости модулей.
Выделим преимущества модульного программирования:
единичный модуль легче написать, отладить, проверить;
один модуль можно использовать в разных частях программы и в других программах;
изменения в программе могут затрагивать только один модуль, а не всю программу;
разработку отдельных модулей можно поручить различным людям.
Слайд 42

6 Основы проектирования программ 100 Пример. – Разработка информационно-поисковой системы «Склад».

6 Основы проектирования программ 100

Пример. – Разработка информационно-поисковой системы «Склад».

Созданная программа должна обеспечивать:
ввод исходных данных;
редактирование и модификацию данных;
просмотр результатов;
выдачу данных по запросам пользователя (поиск товара по наименованию, подсчет общей стоимости продуктов);
выход в ОС.
Выделим сущность предметной области - Товар. В качестве объекта данных, соответствующего сущности предметной области, выбираем структуру данных – запись, включающую поля:
номер,
наименование,
стоимость единицы товара,
количество единицы товара.
Для хранения и организации последовательной обработки информации о товарах наиболее удобной структурой представляется файл из записей.
Слайд 43

6 Основы проектирования программ 101 Зададим описания основных структур данных: Type

6 Основы проектирования программ 101

Зададим описания основных структур данных:
Type tovar

=record
nom: 0..100; {номер или индекс товара}
nt: string[20]; {наименование товара}
ed_iz : string[10]; {единица измерения }
s_ed, kol : real; {цена 1 единицы, количество единиц}
end;
tov=tovar;
file_type= file of tov; {файл из записей}
var t :tov; { описание переменной типа запись}
copf, f: file_type; { описание двух переменных типа файл}
p: byte; {пункт меню}
Слайд 44

6 Основы проектирования программ 102 На рис.3 приведена примерная структурная схема

6 Основы проектирования программ 102

На рис.3 приведена примерная структурная схема

информационно-поисковой системы (ИПС) «Склад», полученная в результате декомпозиции поставленной задачи на подзадачи первого и второго уровней.
Слайд 45

6 Основы проектирования программ 103 III. Разработка рабочего проекта На данном

6 Основы проектирования программ 103

III. Разработка рабочего проекта
На данном этапе

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

6 Основы проектирования программ 104 Функциональное назначение должно содержать описание классов

6 Основы проектирования программ 104

Функциональное назначение должно содержать описание классов

решаемых задач и (или) назначение программы и сведения о функциональных ограничениях на применение.
В описании логической структуры должны быть указаны используемые методы, представлена модульная структура программы с описанием функций составных частей и связей между ними.
Для одного из модулей должна быть представлена блок-схема алгоритма его реализации, описаны виды организации диалога.
В описании логической структуры также должны быть представлены описания созданных процедур и функций, а также описания используемых данных.
Описания созданных процедур и функций должны быть представлены в виде таблицы 2.
Таблица 2 - Характеристика созданных подпрограмм.
Слайд 47

6 Основы проектирования программ 105 Продолжение примера – Головной модуль BEGIN

6 Основы проектирования программ 105

Продолжение примера – Головной модуль
BEGIN
Assign(f,

'sclad'); { назначение переменной типа файл имени физического {файла}
Writeln(‘Нужно ли создавать файл? (д/н)'); Readln(c);
If (с='д') or (с='Д') Then sozdfile(f);{вызов п/п создания файла}
Repeat
Quit:=false; {переменная типа boolean}
Clrscr;
Writeln (' Программа "СКЛАД" ');
Writeln ('Что будете делать?');
Writeln (‘1. Работа с записями о товарах'); {вывод пунктов меню}
Writeln ('2.Обработка запросов');
Writeln (‘3. Выход из программы');
Readln(p); {ввод пункта }
Case p of
1: RabZap;{вызов п/п записей}
2: ObrZapr;
3: Quit:=True; {выбран пункт выхода из программы}
End; {Case}
Untile quit;
END.
Слайд 48

6 Основы проектирования программ 106 Пример 1 – Управляющий модуль работы

6 Основы проектирования программ 106

Пример 1 – Управляющий модуль работы

с записями
Procedure RabZap;
Var m:byte; qrab: boolean;
BEGIN
Repeat
qrab :=false; {переменная типа boolean}
Clrscr;
Writeln (' Работа с записями');
Writeln (‘Что будете делать?');
Writeln (‘1. Добавление записи'); {вывод пунктов меню}
Writeln (‘2.Просмотр записей');
Writeln (‘3.Изменение записи');
Writeln (‘4.Удаление записи');
Writeln (‘5. Выход из режима работы с записями');
Readln(p); {ввод пункта }
Case m of
1: dobav(f); {вызов п/п записей}
………………..
5: qrab :=True; {выбран пункт выхода из управляющего модуля}
End; {Case}
Untile qrab;
END.
Слайд 49

6 Основы проектирования программ 107 Пример 2 – Управляющий модуль обработки

6 Основы проектирования программ 107

Пример 2 – Управляющий модуль обработки

запросов
Procedure ObrZapr;
Var m:byte; qobr: boolean;
BEGIN
Repeat
Qobr:=false; {переменная типа boolean}
Clrscr;
Writeln (' Обработка запросов');
Writeln (‘Что будете делать?');
Writeln (‘1. Поиск товара по наименованию '); {вывод пунктов меню}
Writeln (‘2.Подсчет общей стоимости товаров');
Writeln (‘3. Выход из режима обработки запросов');
Readln(p); {ввод пункта }
Case m of
1: poisk (f); {вызов п/п записей}
………………..
3: Qobr:=True; {выбран пункт выхода из управляющего модуля}
End; {Case}
Untile qobr;
END.
Слайд 50

6 Основы проектирования программ 108 Пример 3 - Процедура ввода одной

6 Основы проектирования программ 108

Пример 3 - Процедура ввода одной

записи.
Procedure vvodzap( Var t: tov);
begin
Clrscr;
With t do begin
Writeln(‘Конец ввода номер=0');
Write('Нoмep товара'); Readln(nom);
Write('Название товара'); Readln(nt);
............................. {ввод значений остальных полей}
end;
end; {конец п/п}
Пример 4 - Процедура вывода одной записи.
Procedure vivodzap(Var t: tov);
Begin
With t do begin
Writeln('Hovep’,nom:4, 'название ', nt:20);
........................ {вывод остальных полей с пояснениями}
end;
end; { конец п/п}
Слайд 51

6 Основы проектирования программ 109 Пример 5 – Процедура создания файла

6 Основы проектирования программ 109

Пример 5 – Процедура создания файла

и записи в него.
Procedure sozdfile( var f: file_type);
Var t: tov;
Begin
Rewrite(f); {установка указателя на начало файла для записи }
Vvodzap(t); {ввод одной записи с клавиатуры}
While t.nom<>0 do {выполнять, пока номер записи не будет равен 0}
Begin
Write(f,t); {запись в файл}
Vvodzap(t); {ввод следующей записи с клавиатуры}
End;
Close(f); {закрытие файла}
End; {конец п/п}
Слайд 52

6 Основы проектирования программ 110 Пример 6 – Процедура удаления записи

6 Основы проектирования программ 110

Пример 6 – Процедура удаления записи

из файла.
Procedure udal(var i:file_type);
Var t: tov; k: 1..100; с: char; found: boolean;
Begin
Assign(copf, 'copsc');
Writeln('Какую запись удалить? Введите номер товара'); Readln(k);
Reset(f); Rewrite(copf); {позиционирование файлов}
Found:=False;
While Not Eof(f) do begin
Read(f,t); {читаем запись из файла}
If t.nom < > k then write(copf, t) {если номер записи не k, записываем ее в файл-{копию}
Else begin found:=true; {запись для удаления найдена}
Vivod(t); write(‘Именно эту запись удалить?'); Writeln(‘Д/H'); Readln(c);
Case с of
‘ д','Д','у','У : ; {пустой оператор, запись k в файл-копию не записываем}
Else Write(copf,t); {раздумали удалять, записываем запись k в файл-копию }
End; {case}
End; {else}
End; {while}
Close(f); Close(copf); {закрываем файлы }
If not found { если запись не найдена} Then begin
Writeln('Запись с номером ', k : 3, ' не найдена'); Erase(copf); {удаляем файл-копию}
End
Else begin Erase(f); Rename(copf,’sclad’); End;
End; {конец п/п}
Слайд 53

6 Основы проектирования программ 111 Пример 7– Процедура изменения. записи procedure

6 Основы проектирования программ 111

Пример 7– Процедура изменения. записи
procedure izmen(

var f : file_type); {изменение записи в файле}
var t:tov; k: 1..100; c: char;
begin
writeln(‘Какую запись нужно изменить (номер товара)?’); readln(k);
reset(f);
while not eof(f) and (t.nom < >k) do read(f,t); {считываем записи из файла, пока не достигнем искомой записи}
if t.nom = k then begin
vivod(t); write(‘новая цена ед.’?);readln(t.s_ed);
write(‘новое количество?’); readln(t.kol);…………………..
seek(f,filepos(f)-1); {поместить указатель перед изменяемой записью}
write(f,t); {записываем в файл исправленную запись}
end
else writeln(‘Запись с номером ‘, k : 3, ‘ не найдена’);
close(f);
end; {конец п/п}
Слайд 54

6 Основы проектирования программ 112 Пример 8 – Процедура просмотра всех

6 Основы проектирования программ 112

Пример 8 – Процедура просмотра всех

записей файла.
Procedure prosmotr(var f:file_type);
Var t:tov;
Begin
Reset(f); {установка указателя на начало файла для чтения из него}
While not eof(f) do begin {выполнять, пока не достигнут конец файла}
Read(f, t); {чтение записи из файла}
Vivodzap(t); {вывод записи}
end;
End; {конец п/п}
Пример 9– Процедура добавления новой записи в файл.
Procedure dobav( Var f: file_type);
Var t:Tov; с: Char;
Begin
Reset(f);
Seek(f,Filesize(f)); {указатель перемещаем на конец файла}
Vvodzap(t);
Write(f, t); Close(f);
End; {конец п/п}
Слайд 55

6 Основы проектирования программ 113 Пример 10 – Процедура нахождения общей

6 Основы проектирования программ 113

Пример 10 – Процедура нахождения общей

стоимости товаров
Procedure Sum(Var f: File_type); { }
Var t:Tov; s:Real;
Begin
Reset(f); s:=0;
While not eof(f) do begin
Read(f, t); {читаем запись из файла}
s:=s+t.s_ed * t.kol; {суммируем стоимости отдельных товаров}
End;
Writeln('Ha складе хранятся товары на сумму – ‘, s:8:2, 'руб');
Readln;
End; {конец п/п}
Слайд 56

6 Основы проектирования программ 114 Пример 11 – Процедура поиска данных

6 Основы проектирования программ 114

Пример 11 – Процедура поиска данных

о товаре по наименованию.
Procedure poisk(var f: file_type);
Var t:tov; name: String[20]; z: Boolean;
Begin
Writeln('Введите название искомого товара?'); Readln(name);
Reset(f); z:=false;
While not eof(f) do Begin
Read(f,t); {читаем запись из файла}
If t.nt=name {товар с искомым наименованием найден}
Then begin {выводим данную запись}
z:=true; vivod(t);
end;
end; {while}
if not z then Writeln('3апись с наименованием ', name:20, ' не найдена');
readln;
close(f);
end; {конец п/п}