uses Graph; const DAYS = 31; var T: array[1..DAYS] of Integer; gd, gm, i: Integer; x, y, xNext, yNext, zeroY: Integer; xCross: Integer; begin { 1. Генерация случайных температур для марта (-10..+15) } Randomize; for i := 1 to DAYS do T[i] := Random(26) - 10; { 2. Инициализация графики } gd := Detect; InitGraph(gd, gm, ''); zeroY := GetMaxY div 2; { Линия нуля посередине экрана } { 3. Рисуем ось и подписи } SetColor(White); Line(0, zeroY, GetMaxX, zeroY); OutTextXY(10, zeroY - 15, '0 C'); { 4. Построение графика } for i := 1 to DAYS - 1 do begin x := i * 20; xNext := (i + 1) * 20; y := zeroY - T[i] * 10; { Масштаб 1 градус = 10 пикселей } yNext := zeroY - T[i+1] * 10; { Проверка: пересекает ли отрезок ноль? } if ((T[i] >= 0) and (T[i+1] < 0)) or ((T[i] < 0) and (T[i+1] >= 0)) then begin { Вычисляем точку пересечения с осью (подобие треугольников) } xCross := x + Round((xNext - x) * Abs(T[i]) / (Abs(T[i]) + Abs(T[i+1]))); { Рисуем первую часть отрезка } if T[i] >= 0 then SetColor(LightRed) else SetColor(LightBlue); Line(x, y, xCross, zeroY); { Рисуем вторую часть отрезка } if T[i+1] >= 0 then SetColor(LightRed) else SetColor(LightBlue); Line(xCross, zeroY, xNext, yNext); end else begin { Если пересечения нет, просто рисуем весь отрезок одним цветом } if T[i] >= 0 then SetColor(LightRed) else SetColor(LightBlue); Line(x, y, xNext, yNext); end; { Ставим точку на графике } PutPixel(x, y, White); end; ReadLn; CloseGraph; end.