УРРААА! Свершилось.
Я сделал первую свою прогу в Фортране!
РЕшение ОУ методом Хорд.
вот текст
!Блок программы
PROGRAM METOD_XORD
INTEGER L
DOUBLE PRECISION A, B, X, EPS
EXTERNAL F
PRINT *, 'Program METOD_XORD'
PRINT *, 'Data parametrs - "granici otrezka"'
PRINT *, 'Left granica'
READ *, A
PRINT *, 'Right granica'
READ *, B
PRINT *, 'Vvidite Max iteraciy'
READ *, ITMAX
PRINT *, 'Vvedite dopustimuyu pogreshnostb'
READ *, EPS
L=0
CALL XORDE (F,A,B,EPS,X,ITMAX,L)
IF (L==1) THEN
PRINT *, 'Lyamda =', X
ELSE IF (L==-1) THEN
PRINT *, 'Ne tot otrezok'
ELSE
PRINT *, 'Net resheniy'
ENDIF
END PROGRAM
!Блок функции
DOUBLE PRECISION FUNCTION F(X)
DOUBLE PRECISION X,Re,e,arlog
Re=250000.000; e=0.0001
arlog=(11.2D11*Re*DSQRT(X))/(2D11*DSQRT(2D11)+0.31D11*e*Re*DSQRT(X))
F=0.884*DLOG(arlog)-1/DSQRT(X)-2.018
RETURN
END FUNCTION
!Блок подпрограммы
SUBROUTINE XORDE (F,A,B,EPS,X,ITMAX,L)
INTEGER ITMAX,L,ITER
DOUBLE PRECISION F,A,B,EPS,X,FL,FR,ZERO,XL,XR,SWAP,DX,FX,DEL
COMMON ITER
DATA ZERO/0.0D0/
L=0
FL=F(A)
FR=F(B)
IF(FL*FR<ZERO) THEN
ELSE IF(FL>ZERO) THEN
XL=B;XR=A;SWAP=FL;FL=FR;FR=SWAP;DX=XR-XL
ELSE IF(FL<ZERO) THEN
XL=A;XR=B;DX=XR-XL
ELSE IF(FL*FR>=ZERO) THEN
L=-1; RETURN
ENDIF
J=0
DO WHILE (J<ITMAX)
J=J+1;X=XL+DX*FL/(FL-FR);FX=F(X)
IF(FX>ZERO) THEN
DEL=XR-X;XR=X;FR=FX;DX=XR-XL
ELSE
DEL=XL-X;XL=X;FL=FX;DX=XR-XL
ENDIF
IF(DABS(DEL)<DABS(EPS).OR.FX==ZERO) THEN
L=1
RETURN
ELSE IF(J==ITMAX) THEN
L=0
RETURN
ENDIF
ENDDO
END SUBROUTINE
Уффф.
:200:
Отредактировано Олегатор (2006-12-26 17:39:12)