Запись оставлена nik 18.04.2026 в 05:56
запустить | скачать | новая запись
- 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.
Отправка исправлений и поправок. (cоздать новую запись)
После отправки поправок вы сможете посмотреть различия между старой и новой записью.