Решения (задачи 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.