Файл: Могилев А.В. Информатика.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.03.2021

Просмотров: 6807

Скачиваний: 51

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

251 

График  рассматриваемой  функции  представлен  на  двух  отрезках  [а,  b]  и  [-0.1,0.1].  Чтобы 

построить график другой функции, достаточно задать ее аналитический вид в описании функции 
(function f). 

 
Программа 32 

program

 grafik;

 

uses crt, graph; 
var gd,gm, errCode : integer; a,b : real; n : integer; 
function f(x:real):real; 
begin if

 x<>0

 then

 f:=x*x*sin(l/x);

 

end; 

procedure grafun(xO,xl,yO,yl,n :word;a,b;real); 

var h,m,x, tl,t2 : real; i, u,v,xv,yv : word; 

begin 

h:=(b-a)/n; (поиск максимума f(x)} m:=abs(f (a)); 

for 

i:=l

 to n do if m<abs(f(a+i*h)) then m:=abs(f(a+i*h)) ; 

tl:=(xl-x0)/(b-a); 

t2:=(yl-y0)/(2*m); (построение координатных осей)  

setfillstyle(l,15); bar(x0-5,y0-5,xl+5,yl+5) ; 
xv:=round(x0-a*tl); yv:=round((yO+yl)/2) ; 
setcolor(l); line(xv,y0,xv,yl); 
 line(xO,yv,xl.yv) ; 
 Moveto(xO,yv-round(f(a)  *t2));  (установка  курсора  в  начало  гра-

фика}  

setcolor(3);  (построение  графика)  for  i:=l  to  n  do  begin 

x:=a+i*h; u:=x0+round((x-a)*tl); 
v:=yv-round(f(x)*t2); lineto(u,v); 
end; 

end; (конец процедуры } begin 

clrscr; write ('введи a,b и n : '); readln(a,b,n); gd^Detect; 

 InitGraph (gd,gm, ' ' ) ; 

errCode:=GraphResult ; 

 if errCode = grOk then begin 

grafun(100,500,50,300,n,a,b); 
grafun(550,620,10,100,200,-0.1,0.1); 

repeat until keypressed; CloseGraph; 

end else writeln( "ezzCode=' ,errCode) 

end. 

Для изображения поверхностей, определяемых функцией двух переменных z=f(x,y), можно 

использовать  разные  способы.  Одним  из  них  является  метод  построения  семейства  одномерных 
графиков  функции  z=f(x.y)  от  одной  переменной  х  или  у  различных  фиксированных  значениях 
другой. Это может быть хорошей тренировкой для самостоятельной работы по освоению графики. 

Построение движущихся изображений.

 Особую ценность в графике представляет органи-

зация движения фрагментов рисунка. Наиболее просто это сделать по следующему плану: 

• нарисовать фрагмент

 

в нужном месте экрана; 

• стереть фрагмент, рисуя его цветом фона или используя процедуру cleardevice; 
• снова нарисовать фрагмент в другом месте экрана. 
Такой способ осуществлен в программе  billiard, где два шарика радиусом 5 пикселей раз-

ных цветов двигаются с одинаковой скоростью внутри зеленого прямоугольника, построенного с 
помощью процедуры bar. 

Процедура  blou  измеряет  смещение  центра  шарика  от  сторон  прямоугольника  по  каждой 

оси и, если это смещение на следующем шаге цикла станет меньше радиуса, изменяет направление 
движения, моделируя поведение упругого шара при ударе о стенку. 

В программе также рассмотрена ситуация соприкосновения шариков во время их движения. 

Она решается примитивно просто: каждый шарик меняет направление своего движения на проти-


background image

 

252 

воположное. 

 
Программа 33 

program billiard; 

uses crt,graph; 
var х,y,dx,dy,gd,gm:integer; xl,yl,dxl,dyl:integer; 
procedure blow(a,b:integer; var c,d:integer); 

begin if (a<107) or (a>523) then c:=-c; 

if (b<107) or (b>363) then d:=-d; 

end; 
begin 

gd:=detect; initgraph(gd,gm,''); setcolor(14); 
setlinestyle(0,0,1); rectangle(99,99,531,371) ; 
setfillstyle(l,3); bar(100,100,530,370) ; 
x:=320; y:=240; dx:=2; dy:°2; 
xl:=320; yl:=200; dxl:=-2; dyl:=-2; 
repeat circle(x,y,5); setcolor(4); circle(xl,yl,5); 
blow(x,y,dx,dy); blow(xl,yl,dxl,dyl); delay(10); 

if (abs(x-xl)<=10) and (abs(y-yl)<=10) then begin 

dx:—dx; dy:=-dy; dxl:=-dxl; dyl:=-dyl; delay(300) 

end; 
setcolor(3); circle(х,у,5); 
x:=x+dx; y:=y+dy; 
setcolor(3); circle(xl,yl,5) ; 
xl:=xl+dxl; yl:=yl+dyl; setcolor(14) 
until keypressed; 
closegraph  

end. 

Еще один способ организации движения на экране, широко применяющийся в компьютер-

ных играх, связан с использованием нескольких экранных страниц. В режиме Vgamed их две, а в 
режиме Vgalo - четыре. Страницы имеют номера: 0,1,... В любой момент времени одну из страниц 
можно  сделать  видимой  и  посмотреть  ее  содержимое  на  экране  с  помощью  процедуры 
setvisualpage(номep).  Визуальная страница  обычно пассивна,  т.е. на  ней нельзя выполнять  графи-
ческие  процедуры.  Другую  страницу  можно  объявить  активной  с  помощью  процедуры 
setactivepage(номep).  Активная  страница  невидима  для  пользователя.  На  ней  можно  подготовить 
другой рисунок. В следующий момент можно поменять роли страниц, т.е. визуальную сделать ак-
тивной и невидимой и на ней рисовать следующий кадр, а бывшую активную сделать визуальной 
и показать объект в новом месте экрана. 

В программе helicopter с помощью страниц моделируется вращение винтов вертолета. Две 

процедуры verti и vert2 подготавливают рисунки вертолета с разным положением винтов. Изобра-
жения выводятся на разные страницы, которые потом по очереди становятся то видимыми, то ак-
тивными. 

В программе организовано также движение вертолета по эллиптической орбите. Центр ор-

биты - точка (х0,у0) - располагается в центре экрана, числа а=250 и b=130 -горизонтальная и вер-
тикальная полуоси эллипса. Положение вертолета на орбите 'вычисляется по формулам 

u=x0+round(a*cosp), t=y0+round(b*sinp), 

где р - чекущии угол, образованный радиус-вектором точки эллипса с осью абсцисс.  
 

Программа 34

 

program helicopter; 
uses crt,graph; 
const step=0.01; 

var gd,gm,u,t,z,k,xO,yorc,ac,vi:integer; p,a,b:real; 

procedure vertl(x,у:integer) ; 
begin 


background image

 

253 

cleardevice; setcolor(14); 
setlinestyle (0,0,1); setfillstyle(1,3) ; 
line(x+12,y,x+36,y);line(x+24,y,x+24,y+8) ; 
fillellipse(x+24,y+14,12,7); moveto(x+18,y+20); 
lineto(x,y+20); lineto(x,y+14); 
line(x+18.y+28,x+30,y+28); line(x+24,y+27,x+24,y+21) ; 

end; 
procedure vert2(x,у:integer); 
begin 

cleardevice; setcolor(14); 
setlinestyle(0.0,1); setfillstyle(1,3) ; 
line(x+22,y,x+26,y); line(x+24,у,x+24,y+8) ; 
fillellipse(x+24,y+14,12,7); moveto(x+18,y+20) ; 
lineto(x,y+20); lineto(x,y+14) ; 
line(x-3,y+14,x+3,y+14); line(x+24,y+27,x+24,y+21) ; 

line(x+18,y+28.x+30,y+28); 

end; 
begin 

gd:=vga; gm:=vgamed; initgraph(gd,gm,' '); 

x0:=getmaxx div 2; y0:=getmaxy div 2; 

z:=l; p:=pi; a:=250; b:=130; ac:=0; vi:=l; 
for 

k:=l

 to 800 do 

begin u:=x0+round(a*cos(р)); t:=y0-round(b*sin(p)); 

• setactivepage(ac); setvisualpage(vi); 

if z=l then vertl(u,t) else vert2(u,t); z:=-z; 

delay(50); p:=p+step; c:=ac; ac:=vi; 

vi:=c:

 

end; closegraph  

end. 
 

Контрольные вопросы и задания 

1. Какие бывают режимы графического экрана? 
2. Охарактеризуйте возможности процедур модуля Graph. 
3. Какие есть способы построения движущихся изображений? 
4. Постройте трехмерные столбчатую и круговую 

анаграммы

 для примеров, рассмотренных 

в данном параграфе. 

5.  Изобразите  поверхность  функции  z=Sin(x)+Cos(y),  предусмотрев  удаление  «невидимых 

линии». 

6. Создайте демонстрационную модель идеального газа в замкнутом объеме. 

 

3.8. ТУРБО-ОБОЛОЧКИ. ВЕРСИИ ПАСКАЛЯ 

 
Система

 

программирования  Турбо-Паскаль  3.0.

  После  запуска  программы  turbo.exe  на 

экране появится меню системы 

Logged drive : A  

Work fi1е: 

Main file:  

Edit         Compile         Run         Save        eXecute      Dir      Quit        compiler       Options  

Text:       0 bytes (7BF5-7BF5) 

Free:     19472 by tes (7BF6-C806) > 

  

Рис. 3.2.

 Главное меню Турбо-Паскаля 3.0 

 
Соответствующие команды выполняются

 

при нажатии выделенной большой буквы. 

Logged drive:   

 

команда «L» осуществляет выбор дисковода: на запрос  


background image

 

254 

(выбор устройства)   

 

 NEW DRIVE ввести одну из букв от А до Р,        

 

 

 

 

 

oбозначающую номер дисковода; 

Work file:  

 

 

команда  «W»  осуществляет  выбор  рабочего  файла,  на  

(рабочий файл)  

 

 

 запрос Work file name ввести имя вашего файла; 

 
Main file:  

 

 

команда  «М»  выбирает  основной  файл  для  программ,  

(основной файл)  

 

 

использующих директивы $I: аналогична команде «W»; 

 
Edit    

 

 

команда «Е» вызывает текстовый редактор; если не  

(редактор)    

 

выбран файл, то будет запрос; инструкцию по работе с        

 

 

 

 

 

редактором см. ниже; 

 
Compile 

 

 

 команда «С» осуществляет компиляцию программы,  

(компиляция)  

 

компиляция  проводится в память, режим компиляции (в  

 

 

 

 

 

СОМ или CHN файлы) меняют по команде «О» (см.    

 

 

 

 

 

compiler Options ); 

 
Run    

 

 

команда 

«R» 

запускает 

откомпилированную 

или  

(запуск) 

 

 

неоткомпилированную программу; 

 
Save    

 

 

команда  «S»  осуществляет  запись  рабочего  (сохранить) 

(сохранить)    

 

файла с сохранением предыдущей версии с расширением  

 

 

 

 

.ВАК; 

 
EXecute 

 

 

 команда «X» осуществляет вызов и выполнение любого  

(выполнять)   

 

СОМ-файла; 

 
Dir  

 

 

 

команда 

«D» 

осуществляет 

просмотр 

директории  

(оглавление файлов); 
 
Quit 

 

 

 

команда  «Q»  осуществляет  выход

 

из  системы;  если  файл 

 (прервать) 

 

 

не записан, то будет запрос; 

 
compiler Options 

 

команда 

«О» 

выбирает 

режим 

компиляции  

(опции компилятора)  

с помощью меню 

 

(команды  «М»,  «С»  и  «Н»  осуществляют  выбор  режима  компи-
ляции  в  память,  в  corn-файл  и  в  chn-файл  (откомпилированный 
файл  без  библиотеки),

  команда  «Q»

  возвращает  в  основное  ме-

ню) 
 

Описание языка Паскаль, проведенное в §3, соответствует версии 3. Исключение составля-

ет раздел работы с графикой, в котором использован универсальный модуль Graph для версий 5 и 
выше. Таким образом, практически все приведенные в главе примеры могут быть реализованы в 
среде Турбо-Паскаль 3 (и, разумеется, в более поздних версиях) 

Система программирования Турбо-Паскаль 5.5.

  Ниже  перечисляются  основные  расши-

рения возможностей версии Турбо-Паскаля 5.5: 

•допускается изменение структуры Паскаль-программы, заголовок программы (program) не 

обязателен, разделы глобальных описаний могут следовать в любом порядке; 

• расширен синтаксис описания констант, разрешено определять типизированные констан-


background image

 

255 

ты и производить их инициализацию; 

• введены шестнадцатиричные константы; 
• расширен список арифметических функций; 
• введены типы данных Word, Byte, 
• значительно расширен список процедур и функций для работы с файлами и модулями. 
Начиная с версии 4.0 в Турбо-Паскале введено понятие модуля (Unit), определены его со-

ставляющие части, а также разрешена раздельная компиляция модулей. Имеются стандартные мо-
дули Crt, Svstem, 

DOS

,

 

Graph,  Turbo3. Graph3.  Последние  модули призваны  осуществлять  совмес-

тимость с предыдущими версиями. 

В  системе  программирования  Турбо-Паскаль  версии  5.5  создана  интегрированная  среда 

разработчика, т е ряд специализированных средств и возможностей, объединенных оконным тур-
бо-меню (контекстное меню). Главное меню интегрированной среды содержит следующие пунк-
ты: 

 

File   Edit   Run   Compile  

Options  

Debug   

Break/watch 

 
Система вступает в диалог с пользователем и предоставляет возможность обратиться к кон-

текстной помощи в любой момент. 

Как правило, работа в среде начинается с загрузки текста программы или с его формирова-

ния в окне редактирования. После редактирования программы осуществляется компиляция и вы-
полнение, которые выполняются при нажатии клавиш Ctrl+F9 (эквивалентно выбору команды run 
из меню Run). 

Во  время  компиляции  программы  на  экране  появляется  специальное  окно,  в  котором  ин-

формируется процесс компиляции. В случае обнаружения ошибки компиляция прерывается и ак-
тивизируется встроенный редактор, в котором курсор указывает место ошибки. Клавиша F1 в этот 
момент  выводит  информацию  из  службы  помощи  по  диагностике  ошибки.  Исправив  ошибку, 
можно  опять  отправить  программу  на  компиляцию.  После  удачной  компиляции  программа  вы-
полняется и результаты ее работы можно просмотреть нажатием клавиш Alt+F5. В процессе ком-
пиляции выявляются лишь синтаксические ошибки. Правильность работы программы необходимо 
проверять специальными приемами. В интегрированной среде разработчика предусмотрен отлад-
чик,  позволяющий  осуществлять  трассировку  программы  или  ее  отдельных  участков,  прерывать 
выполнение в заданных точках, следить за изменениями  значений различных переменных. Трас-
сировкой называют пошаговое исполнение программы, при котором за один шаг выполняются все 
операторы одной строки с последующим ожиданием. Очевидно, что трассировка эффективнее ра-
ботает для исходного текста, в котором в строке помещают не более одного оператора. При этом 
появляется возможность анализировать результаты работы каждого оператора в отдельности. 

Сеанс отладки обычно начинается с команды Trace into (F*) или Step over (F8) из меню Run. 

Выборочная  трассировка  отдельных  участков  исходного  текста  осуществляется  с  помощью  ко-
манд Toggle breakpoint из меню Break/Watch и Go to cursor меню Run, Для наблюдения за значе-
ниями переменных и выражений существует окно просмотра Watch (F6) в меню Debug. В нем ото-
бражаются текущие значения выбранного выражения. Сеанс отладки программы необходимо за-
вершать командой Program reset (Ctrl+F2) из меню Run. 

Система  программирования  Турбо-Паскаль  6.0.

  Главное  меню  интегрированной  среды 

содержит следующие пункты. Е - системное меню; 

File - работа с файлами (сохранение, загрузка, связь с операционной системой); 
Edit  -редактирование  текущего  файла  (стандартные  возможности  встроенного  текстового 

редактора); 

Search  

 - поиск и замена фрагментов текста; 

Run 

 

 -запуск программы на выполнение; 

Compile 

 -компиляция программы: 

Options  

- установка опций интегрированной среды; 

Debug   

- установка параметров отладки программы; 

Window 

 - работа с окнами; 

Help   

 - система помощи и подсказок. 

Версия 6.0 является развитием и усовершенствованием версии 5.5. Существенно перерабо-