График температур. Подправить код из 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.
Объяснение кода листинга программы
- Задача программы - график температур.
- Используемые библиотеки - crt, graphABC.
- Константа n=31.
- Массив a:array[1..n] of integer.
- Переменные x0, y0, i, max.
- Масштаб по оси Х mx:=(windowwidth-40)/n.
- Масштаб по оси У my:=(y0-20)/max.
- Ось дней - линия(x0,y0,windowwidth-2,y0).
- Подписи к оси дней - textout(windowwidth-20,y0-15,'D').
- Засечки - линия(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).
- Ось температур - линия(x0,y0+round(mymax),x0,y0-round(mymax)).
- Подписи к оси температур - textout(x0+5,y0-round(my*max),'t').
- Линия графика - если (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;
- Рисуем точки - кружочки.
- Используется одна из трех цветов: clblue, clred, clblack.
- Отрисовка кружочков - circle(x0+round((i-1)mx),y0-round(a[i]my),2).
- Конец программы - end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д