Нарисовать график (с помощью модуля GRAPH в паскаль) - Pascal
Формулировка задачи:
program zadanie1; var n:integer; k,S:real; begin writeln ('введите k'); readln (k); S:=0; n:=2001; repeat S:=S+k; n:=n+2; k:=K*0.8; until k<5; writeln ('n=',n:4); end.
Решение задачи: «Нарисовать график (с помощью модуля GRAPH в паскаль)»
program zadanie1; uses crt,graph; var n,i,gd,gm,x0,y0:integer; g:array[1..20] of integer;{массив лет 2001-2015} u:array[1..20] of real;{массив урожаев} mx,my:real;{масштаб по осям в граф.режиме} s:string;{строка для вывода чисел в гр.режиме} begin clrscr; n:=1;{первый год} g[1]:=2001; u[1]:=20; writeln(g[1],u[1]:8:1); repeat n:=n+1;{следующие годы} g[n]:=g[n-1]+2;{+2 к предыдущему} u[n]:=u[n-1]*0.8;{х 0,8 предыдущий} writeln(g[n],u[n]:8:1); until u[n]<5; writeln('Nachinaya s ',g[n],' goda budet sobrano < 5t'); readln; gd:=0; initgraph(gd,gm,'');{переходим в графику} {начало координат} x0:=30; y0:=460; {масштабы по осям} mx:=(600-x0)/(g[n]-g[1]);{делим ширину выбранного окна на разность макс. и мин. значений лет} my:=(y0-40)/u[1];{высоту выбранного окна на разность макс и мин урожая} {оси} line(x0,y0,620,y0); line(x0,y0,x0,10); for i:=0 to 7 do{максимальное количество засечек в одну сторону=8} begin {засечки по Х} line(x0+round(i*2*mx),y0+3,x0+round(i*2*mx),y0-3);{от начала оси откладываем отрезки через 2, умноженные на масштаб} str(2000+i*2+1,s);{преобразуем года в строки} outtextXY(round(x0+i*2*mx+2),y0+10,s);{выводим около засечек} {засечки по Y} line(x0-3,round(y0-i*5*my),x0+3,round(y0-i*5*my));{тоже с урожаем, по оси У} str(i*5,s); outtextXY(x0-15,round(y0-i*5*my-10),s); end; {график} moveto(x0,y0-round(u[1]*my));{в первую точку слева} Setlinestyle(1,0,3);{толстенькой линией} Setcolor(12);{рисуем красный кружок} Circle(x0,round(y0-round(u[1]*my)),1); for i:=2 to n do{в цикле берем данные из массивов, рисуем линию и кружки} begin Setcolor(11); Setlinestyle(1,0,0); lineto(round((g[i]-2000)*mx)-5,round(y0-round(u[i]*my))); Setlinestyle(1,0,3); Setcolor(12); Circle(round((g[i]-2000)*mx)-5,round(y0-round(u[i]*my)),1); end; Setlinestyle(1,0,0);{проведем линию У=5 для наглядности} Setcolor(10); line(x0,round(y0-5*my),620,round(y0-5*my)); readln; closegraph end.
Объяснение кода листинга программы
program zadanie1; uses crt,graph; var n,i,gd,gm,x0,y0:integer; g:array[1..20] of integer; u:array[1..20] of real; mx,my:real; s:string; begin clrscr; n := 1; g[1] := 2001; u[1] := 20; writeln(g[1], u[1]:8:1); repeat n := n + 1; g[n] := g[n-1] + 2; u[n] := u[n-1] 0.8; writeln(g[n], u[n]:8:1); until u[n] < 5; writeln('Nachinaya s ', g[n], ' goda budet sobrano < 5t'); readln; gd := 0; initgraph(gd, gm, ''); {начало координат} x0 := 30; y0 := 460; {масштабы по осям} mx := (600 - x0) / (g[n] — g[1]); my := (y0 — 40) / u[1]; {оси} line(x0, y0, 620, y0); line(x0, y0, x0, 10); for i := 0 to 7 do begin {засечки по Х} line(x0 + round(i 2 mx), y0 + 3, x0 + round(i 2 mx), y0 — 3); str(2000 + i 2 + 1, s); outtextXY(round(x0 + i 2 mx + 2), y0 + 10, s); {засечки по Y} line(x0 — 3, round(y0 — i 5 my), x0 + 3, round(y0 — i 5 my)); str(i 5, s); outtextXY(x0 — 15, round(y0 — i 5 my — 10), s); end; {график} moveto(x0, y0 — round(u[1] my)); Setlinestyle(1, 0, 3); Setcolor(12); Circle(x0, round(y0 — round(u[1] my)), 1); for i := 2 to n do begin Setcolor(11); Setlinestyle(1, 0, 0); lineto(round((g[i] — 2000) mx) — 5, round(y0 — round(u[i] my))); Setlinestyle(1, 0, 3); Setcolor(12); Circle(round((g[i] — 2000) mx) — 5, round(y0 — round(u[i] my)), 1); end; Setlinestyle(1, 0, 0); line(x0, round(y0 — 5 my), 620, round(y0 — 5 * my)); readln; closegraph; end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д