1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Дали задание построить сопло и найти число маха газа в этом сопле двумя способами:методом половинного деления и мет. Ньютона. Я записал исходные данные координат точек образования сопла, построил его, и нашел число маха M методом половинного деления, а вот Ньютоном не получается. Я так понял надо вместо вычисления точек гравика, найти производную.
procedure SolvEqv; var ml,mr,fl,fr,fc,mc,e:real; xt,ft : ArrayType; i : word; begin e:=1e-5; if key=0 then begin ml:=0; mr:=0.999; end else begin ml:=1.001; mr:=100; end; Fl := Fun(Tmp,Gamma,Ml); FR := Fun(Tmp,Gamma,MR);
if FL*FR < 0 then begin {writeln('ў ¤ ®¬ ¤Ё Ї §®Ґ Є®аҐм Ґбвм');} { for i:=1 to N do begin Xt[i] := ML + (MR-ML)*(i-1)/(n-1); Ft[i] := Fun(Tmp,Gamma,Xt[i]); end; Graphic (n, 40,1,600,450, Xt,ft, 11,11, 2,2, 'M','F','F(M)'); }
Repeat mc:=(ml+mr)/2; fc:= Fun(Tmp,Gamma,MC); if fl*fC<0 then begin mr:=mc; fr:=fC; {ml:=ml; fl:=fL;} end else begin ml:=mc; fl:=fc; {mr:=mr; fr:=fr;} end; Until (mr-ml <= e ); M:=(mr+ml)/2; end else writeln('ў ¤ ®¬ ¤Ё Ї §®Ґ Є®ап Ґв'); end;
unit MyGraph; Interface uses Graph,crt; const NMax = 300; NGrMax = 1; type arraytype2=array[1..NMax] of real; ArrayType=array[1..NMax] of real; ArrayBigType=array[1..NGrMax,1..NMax] of real; procedure Graphic(n : word; XP1,YP1,XP2,YP2 : word; X,Y : arraytype; ngr1,ngr2 : word; n0x,n0y : word; namex,namey,namegr : string ); procedure Graphic1 (NGr,n : word; XP1,YP1,XP2,YP2 : word; X : arraytype; Y : arrayBigtype; ngr1,ngr2 : word; namex,namey,namegr : string );
Implementation Procedure Graphic; var XStr,YStr : string; X1,Y1,X2,Y2,Xtmp,Ytmp : word; xs,ys,xf,yf :word; XMin,XMax,YMin,YMax,Xt,Yt : real; GraphDriver, GraphMode, i : Integer; begin GraphDriver := Detect; InitGraph(GraphDriver, GraphMode, ' '); if GraphResult<> grOk then Halt(1); x1 := xp1 + 70; x2 := xp2 - 50; y1 := yp1 + 30; y2 := yp2 - 30; Rectangle(XP1, YP1, XP2, YP2); Setlinestyle(1,0,0); Rectangle(X1, Y1, X2, Y2); Outtextxy(x2+10,y2-5,namex); Outtextxy(x1+10,y1-15,namey); Outtextxy(round((x1+x2)/2),y1-15,namegr); XMin:=X[1]; XMax:=X[N]; YMin:=10000; YMax:=-10000; for i:= 1 to N do begin if(YMin>Y[i]) then YMin:=Y[i]; if(YMax<Y[i]) then YMax:=Y[i]; if(XMin>X[i]) then XMin:=X[i]; if(XMax<X[i]) then XMax:=X[i]; end; for i:=1 to ngr1 do begin Xtmp:= X1 + round((X2-X1)*(i-1)/(ngr1-1)); Xt := XMin + (XMax-XMin)*(i-1)/(ngr1-1); Str(Xt:6:n0x,XStr); OutTextXY(XTmp-35,y2+10,XStr); line(Xtmp,y1,Xtmp,y2); end; for i:=1 to ngr2 do begin Ytmp:=y1 + round((y2-y1)*(i-1)/(ngr2-1)); Yt:=YMax - (YMax-YMin)*(i-1)/(ngr2-1); Str(Yt:6:n0y,YStr); OutTextXY(x1-55,YTmp,YStr); line(X1,Ytmp,X2,Ytmp); end; Setlinestyle(0,1,1); SetColor(lightcyan); xs := x1 + trunc((x[1]-xmin)/(xmax-xmin)*(x2-x1)); ys := y2 - trunc((y[1]-ymin)/(ymax-ymin)*(y2-y1)); for i:=2 to n do begin xf := x1 + trunc((x[i]-xmin)/(xmax-xmin)*(x2-x1)); yf := y2 - trunc((y[i]-ymin)/(ymax-ymin)*(y2-y1)); line(xs,ys,xf,yf); xs:= xf; ys := yf; end; readln; CloseGraph; end; { ------------------------ } Procedure Graphic1; var XStr,YStr : string; X1,Y1,X2,Y2,Xtmp,Ytmp : word; xs,ys,xf,yf : word; XMin,XMax,YMin,YMax,Xt,Yt : real; GraphDriver, GraphMode, i,j : Integer; begin GraphDriver := Detect; InitGraph(GraphDriver, GraphMode, ' '); if GraphResult<> grOk then Halt(1); x1 := xp1 + 70; x2 := xp2 - 50; y1 := yp1 + 30; y2 := yp2 - 30; Rectangle(XP1, YP1, XP2, YP2); Setlinestyle(1,0,0); Rectangle(X1, Y1, X2, Y2); Outtextxy(x2+10,y2-5,namex); Outtextxy(x1+10,y1-15,namey); Outtextxy(round((x1+x2)/2),y1-15,namegr); XMin:=X[1]; XMax:=X[N]; YMin:=1000; YMax:=-1000; for j:=1 to ngr do for i:= 1 to N do begin if(YMin>Y[j,i]) then YMin:=Y[j,i]; if(YMax<Y[j,i]) then YMax:=Y[j,i]; end; for i:=1 to ngr1 do begin Xtmp:= X1 + round((X2-X1)*(i-1)/(ngr1-1)); Xt := XMin + (XMax-XMin)*(i-1)/(ngr1-1); Str(Xt:6:2,XStr); OutTextXY(XTmp-35,y2+10,XStr); line(Xtmp,y1,Xtmp,y2); end; for i:=1 to ngr2 do begin Ytmp:=y1 + round((y2-y1)*(i-1)/(ngr2-1)); Yt:=YMax - (YMax-YMin)*(i-1)/(ngr2-1); Str(Yt:6:2,YStr); OutTextXY(x1-55,YTmp,YStr); line(X1,Ytmp,X2,Ytmp); end; Setlinestyle(0,1,1);
for j := 1 to ngr do begin SetColor(j); xs := x1 + trunc((x[1]-xmin)/(xmax-xmin)*(x2-x1)); ys := y2 - trunc((y[j,1]-ymin)/(ymax-ymin)*(y2-y1)); for i := 2 to n do begin xf := x1 + trunc((x[i]-xmin)/(xmax-xmin)*(x2-x1)); yf := y2 - trunc((y[j,i]-ymin)/(ymax-ymin)*(y2-y1)); line(xs,ys,xf,yf); xs:= xf; ys := yf; end; end; readln; CloseGraph; end; end.
Сообщение отредактировано: Гил Бейтс - 16.12.2007 21:53