Иллюстрированный самоучитель по Turbo Pascal для начинающих

Решения (задачи 217-221)

Задача 221

{ Светофор } uses Graph, Crt;
grDriver: Integer; grMode: Integer; ErrCode: Integer; res: integer;
i,j: integer; { счетчики циклов }
{ Рисует круг заданного цвета}
{ х,у,г – координаты центра и радиус круга }
(fc,bc – цвет круга и окантовки }
Procedure Krug(x,y,r: integer; fc,bc: integer);
begin
SetFillStyle(SolidFill,fc);
SetColor(fc);
PieSlice(x,y,0.360,r);
SetColor(be);
Circle(x,y,r); end;
{ Основная программа } begin
grDriver: = detect;
InitGraph(grDriver, grMode,'e:\tp\bgi');
ErrCode: = GraphResult;
if ErrCode = grOk then
begin
OutTextXYdO,10,'Соблюдайте правила уличного движения!'
Rectangle(88.88.112.152);
{ Горит красный свет }
KrugdOO, 100.10,Red,White);
Krug(100.120.10,LightGray,White);
Krug(100.140.10,LightGray,White);
Начальное положение стрелок: угол
между стрелкой и осью ОХ равен 90 град .as: = 90; am: =90;
Circle(xO,yO,d+5); SetFillStyle{SolidFill,0); Str(m,stm); repeat
{ вывести секундную стрелку }
MoveTo(x0,y0);
SetColor(Yellow);
Vector(as,d);
(вывести минутную стрелку } MoveTo(x0,y0); SetColor(Green); Vector(am,d-10);
{ вывести "цифровые" часы }
Bar(10.10.50.20);
Str (s,sts);
OutTextXy(10.10,stm+':'+sts);
Delay(lOO); { задержка
{ стереть стрелки } SetColor(0); { секундную } MoveTo(x0,y0); Vector(as,d);
{ минутную } MoveTo(x0,y0); Vector(am,d-10);
s: = s+l;
if s = 60 then
begin
m: = m+l; Str (m, stm); s: = 0;
Sound(1000); Delay(10); NoSound;
am: = am-6; { шаг движения минутной
стрелки 6 градусов } if am < 0 then am: = 354; end;
as: = as-6;
if as < 0 then as: = 354;
until KeyPressed; end;
CloseGraph; end.
(Построение графика функции } program groffunc; uses Graph;
var
x1,x2:real; y1,y2:real; x:real; y:real; dx:real; l,b:integer;
 w,h:integer; mx,my:real; xO,yO:integer; st:string;
{границы изменения аргумента функции }
{ границы изменения значения функции }
{ аргумент функции }
{ значение функции в точке х}
(приращение аргумента }
{ левый нижний угол области вывода графика }
{ ширина и высота области вывода графика }
{ масштаб по осям X и Y }
{ точка – начало координат }
(изображение числа }
grDriver: Integer; grMode: Integer; ErrCode: Integer;
Функция, график которой надо построить } Function f(x:real):reain
f: = 2*Sin(x)*exp(x/5); end;
Function f2(x:real):real; begin
f2: = Ln(x); end;
begin
grDriver: = VGA;
grMode: = VGAHi;
InitGraph(grDriver, grMode,'e:\tp\bgi');
ErrCode: = GraphResult;
if ErrCode о grOk then HALT(l);
l: = 40; b: = 400; h: = 200; w: = 200;
xl: = 0;
x2: = 25;
dx: = 0.01;
{ найдем максимальное и минимальное значения
функции на отрезке [xl,x2] } yl: = f(xl); { минимум } y2: = f(xl); (максимум } x: = xl;
repeat y: = f (x); if y<yl then yl: = y; if y>y2 then y2: = y; x: = x+dx; until (x>=x2);
my: = h/abs(y2-yl); mx: = w/abs(x2-xl); { оси } xO: = l; yO: = b-Abs(Round(yl*my));
Line(l,b,l,b-h); Line(xO,yO,xO+w,yO); Str(y2:5:l,st);
OutTextXY(l+5,b-h,st); Str(yl:5:l,st); OutTextXY(l+5,b,st);
{ построение графика }
x: = xl;
repeat
y: = f(x);
PutPixel(xO+Round(x*mx),yO-Round(y*my),15);
x: = x+dx; until (x>=x2); Readln; CloseGraph;
end.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.