Автор: klem4 29.04.2005 11:23
Задание, посчитать интеграл, а потом построить график, по отдельности пашет, а вместе нет, у меня даже предположений нет почему, для графиков использовал шаблон Олег_З'а.
Исходный код
uses crt,graph; const { OPTIONS } shag=0.0001; lgr = 3; pgr = 10; zcrtX=320; zcrty=240; mtrX=10; mtrY=10; colorG=15; colorOXY=4; OXYminX=-200; OXYmaxX=200; OXYminY=-200; oxymaxY=200; Var grDriver : Integer; grMode : Integer; x,y,dx,x1,x2,e,i : extended; L : integer; f : Text; function Fx(x:real):real; begin Fx:=(exp(3*ln(x))+2*x+3)/(x+sqrt(x)); {Zdes' podintegralnoe virajenie.} end; procedure CountViaBar; var xx1,xx2:real; c:longint; begin writeln('------------------------------------------------'); writeln('-->Metod srednih pramougolnikov.'); writeln('Vsego iteracii : ',round(abs(x2-x1)/e)); i:=0; for c:=1 to round(abs(x2-x1)/e) do begin write('iteraciaя ',c,chr(13)); xx1:=Fx(x1+c*e); xx2:=Fx(x1+c*e+e); i:=i+abs(xx1+xx2)/2*e; end; writeln('------------------------------------------------'); writeln('Integral=',i:3:6); end; procedure CountViaTrap; var xx1,xx2,xx3:real; c:longint; begin writeln('------------------------------------------------'); writeln('-->Metod trapecii.'); writeln('Vsego iteracii:',round(abs(x2-x1)/e)); i:=0; for c:=1 to round(abs(x2-x1)/e) do begin write('Iteraciaя ',c,chr(13)); xx1:=Fx(x1+c*e); xx2:=Fx(x1+c*e+e); if xx2>xx1 then xx3:=xx1 else xx3:=xx2; i:=i+abs(xx2-xx1)*e+abs(xx3)*e; end; writeln('------------------------------------------------'); writeln('Integral=',i:3:5); end; begin clrscr; writeln('------------------------------------------------'); writeln('-=Programma vi4islenia opredelennogo integrala=-'); writeln('Vvedite ishodnie zna4eniyaя:'); write('Na4alnoe zna4enie x (x1)=');Readln(x1); write('Konexnoe zna4enie x (x2)=');Readln(x2); write('To4nost vi4isleniyaя (e)=');Readln(e); CountViaBar; CountViaTrap; writeln('------------------------------------------------'); writeln('Najmite lubuy klavishu ...'); repeat until keypressed; grDriver:=Detect; InitGraph(grDriver, grMode, ''); for L:=OXYminX to OXYmaxX do putpixel(zcrtX+L,zcrty,colorOXY); for L:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrty-L,colorOXY); x:=lgr; assign(f,'OutFile'); {*} rewrite(f); while x<=pgr do begin y:=(x*x*x+2*x+3)/(x+sqrt(x)); putpixel(zcrtx+trunc(x*mtrX),zcrty-trunc(y*mtrY),colorg); x:=x+shag; writeln(f,'x=',x:1:2,' y=',y:1:2); end; close(f); readkey; closegraph; END.
заранее спасибо.
Автор: volvo 29.04.2005 14:21
Цитата(klem4 @ 29.04.05 7:23)
Задание, посчитать интеграл, а потом построить график, по отдельности пашет, а вместе нет, у меня даже предположений нет почему
В чем именно заключается неправильная работа программы? Хммм... Попробую догадаться: ты не видишь график, правда?
Причина:
writeln('Najmite lubuy klavishu ...'); repeat until keypressed; ... { отрисовка } ... readkey; { вот то, что ты ввел в repeat until прочитано... }
... и естественно, ждать следующей клавиши никто не собирается...
Есть 2 выхода:
1.
writeln('Najmite lubuy klavishu ...'); repeat until keypressed; while keypressed do readkey; { очищаешь буфер клавиатуры } ...
2.
writeln('Najmite klavishu <ENTER>...'); readln;