КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Комментарных скобках, т.е. не заблокирован, то
Type End. End else Begin Var Графика в Паскале BEGIN End. End В следующей программе перемножается матрица на вектор, основу которой составляет ранее рассмотренные Program Prim 29 i Prim 29а. Здесь максимальные размеры матрицы – 10*10 элементов типа byte. Ввод информации производится в окне светло-бирюзового цвета, вывод результатов – в окне малинового цвета, цвет букв – желтый. Программа в начале работы издает звуки частотой от 130 до 2130 Гц, затем при вводе величины a – частотой 2000 Гц, b – 1500 Гц длительностью n=100 мс. В конце работы программа издает звуки от 2130 до 130 Гц. Программа использует подпрограмму Wind, написанную на основе Prim 52. Program Prim53; Uses CRT; var i,j,n,m,k,l:integer; a:array[1..50,1..70] of byte; b:array[1..10] of byte; c:array[1..10] of longint; cv:byte; {$i C:\TURBO\ wind.pas} Clrscr; {очистить экран } cv:=11; {цвет 11, светло-бирюзовый} wind(1,1,50,7); { открыть окно, обращения к процедуре} Sound(330); { включить звук, частотой 330 гц } Delay(1000); { задержать на 1000 миллисекунд } NoSound; { выключить звук } writeln ('ввести количество строк и столбцов'); GotoXY(2,3); l:=4; {l устанавливает курсор по y} readln(n,m); for i:=1 to n do for j:=1 to m do begin GotoXY(2,l); writeln(' введите a[',i,',',j,'] элемент матрицы а '); GotoXY(34,l); { перевести курсор в конец текста:} {ввести a[i,j] – элемент матрицы'} ClrEol; { удалить конец строки до границы окна} readln(a[i,j]); { ввести очередное а в конце текста } end; L:=L+1;{} for j:=1 to m do begin GotoXY(2,l); writeln(ввести b[',j,'] элемент вектора b'); GotoXY(33,l); ClrEol; readln(b[j]); end; cv:=5; { фиолетовый цвет для нового окна } wind(20,2,80,18); GotoXY(2,2); l:=3; for i:=1 to n do { начало перемножения матрицы на векторы } begin c[i]:=0; for j:=1 to m do c[i]:=c[i]+ a[i,j]*b[j]; end; { конец перемножения матрицы на вектор } writeln(' распечатка массива а '); for i:=1 to n do begin GotoXY(2,l); l:=l+1; { начать новую строку } for j:=1 to m do write(a[i,j]:5); end; GotoXY(2,l); l:=l+1; writeln('распечатка массива b'); GotoXY(2,l); for j:=1 to m do write(' ',b[j]); L:=L+1; GotoXY(2,L); L:=L+1; writeln('результирующий массив с'); GotoXY(2,L); for i:=1 to n do write(' ',c[i]); readln; END.
12.1. Инициализация графического режима
Для вывода графических изображений на экран турбо Паскаль предоставляет пользователю библиотеку Graph. Общий вид программы с использованием Graph имеет следующий вид: Program имя; Uses Graph; grDriver, grMode, errCode: integer; grDriver:= Detect; {определение номера, установленного в системе драйвера} initGraph (grDriver, grMode,''); {инициализация графического режима} if errCode= grOK then begin { режим открыт и можно работать} begin {графический режим не удалось открыть, проанализируйте содержание переменной errCode} Замечание. Две кавычки в initGraph правомочны только тогда, когда графическая программа находится в том же каталоге, что и библиотека Graph. В противном случае в кавычках должен стоять путь – указание, где находится библиотека Graph. 12.2. Процедуры и функции библиотеки Graph
Функции GetMaxX и GetMaxY возвращают значения типа Word, содержащие максимальные координаты, соответственно, X и Y относительно левого верхнего угла в пикселах (точках). Различные мониторы имеют различную разрешающую способность, например: VGA - 640´480 точек, IBM 8514Hi - 1024´768 точек. Функции GetX и GetY возвращают текущие координаты указателя. Процедура SetViewPort (Х1, Y1, Х2, Y2, Clipon); устанавливает прямоугольное окно на графическом экране, X1, Y1 - координаты левого верхнего угла; Х2, Y2 - координаты нижнего правого угла окна. Если выражение Clipon имеет значение true и элементы изображения не помещаются в окне, то они отсекаются, если – false, то отсечка игнорируется. Процедура MoveTo (Х, Y); устанавливает новое текущее положение указателя. Процедура MoveRel (Ox, Dy); устанавливает приращения новых координат указателя относительно старых. Процедура ClearDevice, очищает графический экран, указатель устанавливается в левый верхний угол, экран заполняется цветом, заданным процедурой SetBkColor. Процедура PutPixel (Х, Y, Color); выводит на экран точку Color цвета. Процедура LineTo (Х, Y); вычерчивает линию от текущего положения указателя до точки Х, Y. Процедура SetLineStyle (Туре, Pattern, Thick); Где Туре – тип линии. Pattern – образец линии. Thick – толщина линии. Тип линии: 0 – сплошная, 1 – точечная, 2 – штрихпунктирная, 3 –........ 4 – узор линии определяет пользователь параметром pattern. Thick=l – толщина линии в 1 пиксел. Thick=2 – толщина линии в 3 пиксела. Процедура Rectangle (Х1, Y1, Х2, Y2); вычерчивает прямоугольник с использованием текущего цвета и текущего стиля линий. Процедура DrawPoly (N, Р); вычерчивает произвольную ломаную линию. N - количество точек излома, включая крайние; Р - переменная типа PointType, которая в Graph имеет вид: PointType=record X, Y: Word end; При вычерчивании используются текущий цвет и текущий стиль линий. Процедура Circle (Х, Y, R); вычерчивает окружность с центром X, Y и радиусом R. Процедура Arc (Х, Y, Beg А, End А, R); вычерчивает дугу окружности Beg А и End А, соответственно, начальный и конечный углы дуги. Процедура Ellipse (Х, Y, Beg А, End А, RX, RY); вычерчивает дугу эллипса с центром X, Y; Beg А, End А – начальный и конечный угол, RX и RY – горизонтальный и вертикальный радиусы. Процедура Bar (Х1, Y1, Х2, Y2); заполняет прямоугольную область экрана образцом узора и текущим цветом, которые устанавливаются процедурой SetFillStyle. Процедура Ваr3D (Х1, Y1, Х2, Y2, Depth, Тор); вычерчивает трехмерное изображение параллелепипеда и закрашивает его переднюю грань. Depth – глубина третьего измерения, Top=true – верхняя грань вычерчивается, false - нет. Процедура FillPoly (n, Coords); обводит линией и закрашивает замкнутый многоугольник; n – количество вершин, Coords – переменная типа PointType, содержащая координаты вершин (см. DrawPoly). Процедура FillEllipse (Х, Y, Rx, Ry); обводит линией и заполняет эллипс. Процедура Sector (Х, Y, Beg А, End А, Rx, Ry); вычерчивает и заполняет эллипсный сектор. Процедура PieSlice (Х, Y, Beg А, End А, R); вычерчивает и заполняет сектор окружности. Процедура SetColor (Color); устанавливает текущий цвет для выводимых линий и символов. Процедура SetbkColor (Color); устанавливает цвет фона окна. Процедура SetFillStyle (Fill, Color); устанавливает стиль Fill и цвет заполнения Color. Значения Fill: 0 – заполнение фоном (узор отсутствует); 1 – сплошное заполнение; 2 – заполнение – – – – –; 3 – – «– ///////; 4 – – «– утолщенными ///////; 5 – – «– утолщенными \\\\\\; 6 – – «– \\\\\\; 7 – – «– + + + + + +; 8 – – «– ******; 9 – – «– прямоугольной клеточкой; 10 – – «– редкими точками; 11 – – «– частыми точками; 12 – – «– узор определяется пользователем. Процедура FloodPill (Х, Y, Color); заполняет произвольную замкнутую линию (точки соединения должны совпадать, например, концы линий не могут пересекаться) текущим стилем и текущим цветом. X, Y – координаты точки внутри фигуры, Color — цвет ограничений линии. Если линии разомкнуты или пересекаются и концы «торчат», то цвет «разольется» по всему окну. Функция ImageSize (X1, Y1, X2, Y2); возвращает размер памяти в байтах, необходимый для размещения прямоугольного фрагмента изображения (например, окна с рисунком). Процедура GetImage (X1, Y1, X2, Y2, Buf); помещает в память копию прямоугольного фрагмента изображения. Buf — переменная или участки кучи, куда будет помещена копия видеопамяти с фрагментом изображения. Размер Buf должен быть не меньше значения, возвращаемого функцией ImageSize с теми же координатами X1...Y2. Процедура PutImage (X, Y, Buf, Mode); выводит в заданное место экрана копию фрагмента изображения, ранее помещенную в память процедурой GetImage. X, Y — координаты левого угла того места на экране, куда будет скопирован фрагмент изображения. Buf — переменная, или участок кучи, откуда берется фрагмент изображения. Mode — способ копирования.
12.3. Примеры программ
Ниже приведены программы, демонстрирующие некоторые возможности графики в Паскале. Программа Prim 54 демонстрирует вывод различных простых объектов-окружностей, дуг, эллипсов, прямоугольников, параллелепипедов. Program Prim54;Uses Graph;var grDriver,grMode,errCode,Radius,i,Width,y0,y1,y2,x1,x2:integer;Begin grDriver:=detect; { определение номера драйвера } InitGraph(grDriver,grMode,''); { инициализация графического режима } errCode:=GraphResult; if errCode=grOK then begin { графический режим открыт, можно работать } for radius:=1 to 5 do begin { рисуем окружности с радиусами 10,20..50, с центром x=200, y=70 точек растра } Circle(200,70,Radius*10); readln; end; { Cleardevice;} { если бы этот оператор не был в сейчас окружности были бы стерты с экрана } Ellipse(200,200,0,360,30,50); { рисуем дугу эллипса с центром 200,200, начальный угол=0, конечный – 360 (замкнутый, эллипс радиусами 30,50 } readln; Ellipse(300,200,0,180,50,30); {полэллипса } readln; for Radius:=1 to 5 do Arc(300,100,0,90,radius*10); {дуги с центром 300,100, от 0 до 90 градусов, радиусами 10,20..50} readln; Width:=10; Bar(30,20,50,100); {прямоугольник с координатами 30,20 – верхний левый угол и 50,100 – нижний правый угол} for i:=1 to 5 do Bar(10+i*Width,300+i*10,20+i*Width,400); {пять прямоугольников: первый 20,310.30,400, второй 30,320,40,400 и т.д. } readln; Bar3D(210,300,250,360,10,TopOn); {параллелепипед с крышкой} readln; x1:=410; y1:=300; x2:=450; y2:=360; Bar3D(x1,y1,x2,y2,10,TopOff); { параллелепипед без крышки } readln; CloseGraph; {закрыть Graph}
Дата добавления: 2014-12-17; Просмотров: 455; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |