Задание в паскале - Turbo Pascal
Формулировка задачи:
Решение задачи: «Задание в паскале»
uses graph; function F(x:real):real; begin F:=x*x+4*x; end; const h=0.25; xn=-7; xk=3; var x,ymx,mx,my:real; x1,y1:array[1..100] of real; n,i,gd,gm,x0,y0,px,py:integer; st:string; begin {заполнение таблицы значений и нахождение максимального для масштаба по оси Y} ymx:=F(xn); x:=xn; n:=0; while x<=xk+h/2 do begin n:=n+1; x1[n]:=x; y1[n]:=F(x1[n]); if y1[n]>ymx then ymx:=y1[n]; x:=x+h; end; {переход в графический режим} gd:=0; initgraph(gd,gm,''); {начало координат} x0:=getmaxX-round((getmaxX-250)*xk/(xk-xn)); y0:=getmaxY-120; {масштаб по осям} mx:=(getmaxX-280)/(xk-xn); my:=(y0-30)/ymx; {координатная сетка} line(x0-round(-xn*mx),y0,x0+round(xk*mx),y0); outtextXY(getmaxX-15,y0-15,'X'); line(x0,getmaxY,x0,0); outtextXY(x0+5,5,'Y'); for i:=1 to 11 do begin line(x0+round(mx*i),y0+3,x0+round(mx*i),y0-3); str(i,st); outtextXY(x0+round(mx*i),y0+10,st); if i<8 then begin line(x0-round(mx*i),y0+3,x0-round(mx*i),y0-3); outtextXY(x0-round(mx*i),y0+10,'-'+st); end; str(i*2,st); line(x0+3,y0-round(my*i*2),x0-3,y0-round(my*i*2)); outtextXY(x0-20,y0-round(my*i*2),st); line(x0+3,y0+round(my*i*2),x0-3,y0+round(my*i*2)); outtextXY(x0-25,y0+round(my*i*2),'-'+st); end; {график} x:=xn; setcolor(12); while x<=xk+h/2 do begin px:=x0+round(x*mx); py:=y0-round(F(x)*my); circle(px,py,2); x:=x+h; end; {построение таблицы} setcolor(15); settextstyle(0,0,1); outtextXY(45,5,'Znachenia argumenta i'); outtextXY(65,25,'functii y=x^2+4x'); outtextXY(45,45,'na int. [-7;3] h=0.25'); line(40,60,40,60+(n div 2+2)*15); line(75,60,75,60+(n div 2+2)*15); line(120,60,120,60+(n div 2+2)*15); line(155,60,155,60+(n div 2+2)*15); line(200,60,200,60+(n div 2+2)*15); for i:=0 to n div 2+2 do line(40,60+i*15,200,60+i*15); outtextXY(55,65,'X'); outtextXY(95,65,'Y'); outtextXY(135,65,'X'); outtextXY(170,65,'Y'); settextstyle(2,0,4); for i:=1 to n div 2+1 do begin str(x1[i]:0:2,st); outtextXY(45,65+15*i,st); str(y1[i]:6:2,st); if st='-1000.00' then outtextXY(80,65+15*i,' - ') else outtextXY(80,65+15*i,st); end; for i:=1 to n div 2 do begin str(x1[i+n div 2+1]:0:2,st); outtextXY(125,65+15*i,st); str(y1[i+n div 2+1]:6:2,st); outtextXY(160,65+15*i,st); end; readln end.
Объяснение кода листинга программы
В данном коде используется функция F, которая вычисляет значение выражения x^2+4x. Также определены константы h, xn, xk, x1, y1, x0, y0, gd, gm. Переменная xm и ym вычисляются для определения масштаба по осям Y и X соответственно. Затем происходит заполнение таблицы значений функции F. Для этого используется цикл while, который выполняется до тех пор, пока значение переменной x не превысит значение xk+h/2. Внутри цикла происходит вычисление координат точек на графике (x0, y0), (x0+round(xmx), y0), (x0-round(xmx), y0), (x0+round(xmx), y0-3), (x0-round(xmx), y0-3), (x0+3, y0-round(myi2)), (x0-3, y0-round(myi2)), (x0+3, y0+round(myi2)), (x0-3, y0+round(myi2))). Далее строятся графики функции F. Для этого используется цикл while, который выполняется до тех пор, пока значение переменной x не превысит значение xk+h/2. Внутри цикла происходит вычисление координат точек на графике (x0, y0), (x0+round(xmx), y0), (x0-round(xmx), y0), (x0+round(xmx), y0-3), (x0-round(xmx), y0-3), (x0+3, y0-round(myi2)), (x0-3, y0-round(myi2)), (x0+3, y0+round(myi2)), (x0-3, y0+round(myi2))). Затем строятся столбцы таблицы. Для этого используется цикл for, который выполняется до тех пор, пока значение переменной i не превысит значение n div 2+2. Внутри цикла происходит вычисление координат точек на графике (x0, y0), (x0+round(xmx), y0), (x0-round(xmx), y0), (x0+round(xmx), y0-3), (x0-round(xmx), y0-3), (x0+3, y0-round(myi2)), (x0-3, y0-round(myi2)), (x0+3, y0+round(myi2)), (x0-3, y0+round(myi2))). Наконец, выводится текстовая информация о значении функции F и координатах точек на графике.