График температур. Подправить код из turbo (не знаю где писать в PascalABC или PascalABC.net) - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

На Pascal ABC не запускается((

------------------- Знаю, что initgraph не нужен. Модуль graph должен запиcываться как graphABC. Но программа всё равно не запускается.. В общем прошу помощи, подсказки.. Последний пример, но не пойму что надо ему( ------------------------ Само задание: Даны целые числа t1, t2, ... t31, – задающие график температур за март месяц. Построить график температур. Отрезки прямых, лежащие выше 0 градусов Цельсия и лежащие ниже 0 градусов Цельсия, должны быть окрашены в разные цвета.

Решение задачи: «График температур. Подправить код из turbo (не знаю где писать в PascalABC или PascalABC.net)»

textual
Листинг программы
uses crt,graphABC;
const n=31;
      {массив - константа, можно ввести с клавиатуры}
      a:array[1..n] of integer=(-10,-15,-9,-8,-5,-8,-6,-2, 0,-1,
                                  2,  4, 6, -2, 4, 6, 8, 8,10, 6,
                                  9, 11, 9, 8, 6, 9,12,13, 9, 8, 5);
var x0,y0,i,max:integer;
    mx,my,x:real;
    s:string;
begin
x0:=40;{начало координат}
y0:=windowheight div 2;
mx:=(windowwidth-40)/n;{массштаб по оси Х}
max:=abs(a[1]);
for i:=1 to n do
if abs(a[i])>max then max:=abs(a[i]);{найдем максимальный модуль}
my:=(y0-20)/max;{масштаб по оси У}
line(x0,y0,windowwidth-2,y0);{ось дней}
textout(windowwidth-20,y0-15,'D');
for i:=1 to n do
 begin
  line(x0+round(mx*(i-1)),y0-3,x0+round(mx*(i-1)),y0+3);{засечки}
  str(i,s);
  textout(x0+round(mx*(i-1)+3),y0+15,s);{подписи}
 end;
line(x0,y0+round(my*max),x0,y0-round(my*max));{ось температур}
textout(x0+5,y0-round(my*max),'t');
for i:=-max to max do
 begin
  line(x0-3,y0+round(my*i),x0+3,y0+round(my*i));
  str(i:3,s);
  textout(x0-30,y0-round(my*i),s);
 end;
for i:=2 to n do{линия графика}
 begin
  if (a[i-1]>=0)and(a[i]>=0) then{если соседние точки выше ноля}
    begin
     setpencolor(clred);
     line(x0+round((i-2)*mx),y0-round(a[i-1]*my),
     x0+round((i-1)*mx),y0-round(a[i]*my));
    end
  else if(a[i-1]<=0)and(a[i]<=0) then{ниже ноля}
     begin
      setpencolor(clblue);
      line(x0+round((i-2)*mx),y0-round(a[i-1]*my),
      x0+round((i-1)*mx),y0-round(a[i]*my));
     end
  else if a[i-1]*a[i]<0 then{по разные стороны}
   begin
    x:=abs(a[i-1])/(abs(a[i-1])+abs(a[i]));{вычисляем ординату пересечения с осью Х}
    if a[i-1]<0 then{если левая точка ниже}
     begin
      setpencolor(clblue);
      line(x0+round((i-2)*mx),y0-round(a[i-1]*my),x0+round((i-2)*mx)+round(x*mx),y0);
      setpencolor(clred);
      line(x0+round((i-2)*mx)+round(x*mx),y0,x0+round((i-1)*mx),y0-round(a[i]*my));
     end
    else{если првая ниже}
     begin
      setpencolor(clred);
      line(x0+round((i-2)*mx),y0-round(a[i-1]*my),x0+round((i-2)*mx)+round(x*mx),y0);
      setpencolor(clblue);
      line(x0+round((i-2)*mx)+round(x*mx),y0,x0+round((i-1)*mx),y0-round(a[i]*my));
     end
   end
 end;
for i:=1 to n do{рисуем точки - кружочки}
 begin
  if a[i]<0 then setpencolor(clblue)
  else if a[i]=0 then setpencolor(clblack)
  else setpencolor(clred);
  circle(x0+round((i-1)*mx),y0-round(a[i]*my),2);
 end;
end.

Объяснение кода листинга программы

  1. Задача программы - график температур.
  2. Используемые библиотеки - crt, graphABC.
  3. Константа n=31.
  4. Массив a:array[1..n] of integer.
  5. Переменные x0, y0, i, max.
  6. Масштаб по оси Х mx:=(windowwidth-40)/n.
  7. Масштаб по оси У my:=(y0-20)/max.
  8. Ось дней - линия(x0,y0,windowwidth-2,y0).
  9. Подписи к оси дней - textout(windowwidth-20,y0-15,'D').
  10. Засечки - линия(x0+round(mx(i-1)),y0-3,x0+round(mx(i-1)),y0+3).
  11. Строка для подписей - str(i,s).
  12. Подписи к точкам - textout(x0+round(mx*(i-1)+3),y0+15,s).
  13. Ось температур - линия(x0,y0+round(mymax),x0,y0-round(mymax)).
  14. Подписи к оси температур - textout(x0+5,y0-round(my*max),'t').
  15. Линия графика - если (a[i-1]>=0)and(a[i]>=0) then{если соседние точки выше ноля} begin setpencolor(clred); line(x0+round((i-2)mx),y0-round(a[i-1]my), x0+round((i-1)mx),y0-round(a[i]my)); end else if(a[i-1]<=0)and(a[i]<=0) then{ниже ноля} begin setpencolor(clblue); line(x0+round((i-2)mx),y0-round(a[i-1]my), x0+round((i-1)mx),y0-round(a[i]my)); end else if a[i-1]a[i]<0 then{по разные стороны} begin x:=abs(a[i-1])/(abs(a[i-1])+abs(a[i]));{вычисляем ординату пересечения с осью Х} if a[i-1]<0 then{если левая точка ниже} begin setpencolor(clblue); line(x0+round((i-2)mx),y0-round(a[i-1]my),x0+round((i-2)mx)+round(xmx),y0); setpencolor(clred); line(x0+round((i-2)mx)+round(xmx),y0,x0+round((i-1)mx),y0-round(a[i]my)); end else{если првая ниже} begin setpencolor(clred); line(x0+round((i-2)mx),y0-round(a[i-1]my),x0+round((i-2)mx)+round(xmx),y0); setpencolor(clblue); line(x0+round((i-2)mx)+round(xmx),y0,x0+round((i-1)mx),y0-round(a[i]*my)); end end;
  16. Рисуем точки - кружочки.
  17. Используется одна из трех цветов: clblue, clred, clblack.
  18. Отрисовка кружочков - circle(x0+round((i-1)mx),y0-round(a[i]my),2).
  19. Конец программы - end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5