>>24 Core Duoでもイゴイタ 32bit ifort版はシングルプロセッサ用に最適化されているみたいだが SSE/SSE2が使えればIntel CPUでもOKのようだ。 >>25 SYSTEM とかそんな感じの関数なりサブルーチンなりが用意されている(ことが多い)。 >>28 X の値を 1 に変える(X に 1 を代入する) X = 1. X の常用対数を計算して Y に代入する Y = LOG10(X) X の自然対数を計算して Z に代入する Z = LOG(X) X, Y, Z の値を順に表示する WRITE(*,*) X, Y, Z
>>32 PROGRAM chinpopo DO 10 i = 0, 6 x = 10.0**REAL(i) y = LOG10(x) z = LOG(x) WRITE(6, *) INT(x), y, z 10 CONTINUE END >>35
36 :06/11/15
complex(8) c において, c=(0.d0, 0.d0) として初期化するのも, c=0.d0 として初期化するのも全く同じことなのですか?
37 :06/11/15
DO文を使用して,xの値を,1,10,100,1000,10000,100000,1000000 の順に変えて その常用対数および自然対数の値を 計算して表示するプログラムを作れ. なお,計算結果は書式の指定をして,x, log10(x), log(x) の順に表形式で表示すること. また,計算結果が整数となるものは整数型(In),実数となるものは実数型(Fn.m)または指数型(En.m)で出力すること. program report5 implicit none integer :: x real :: y,z write (*,*) 'x=' read (*,*) x,log(x),log10(x) do 10 i = 0.6 x=10.0**real(i) y=log(x) z=log10(x) write (6,) end do stop end program report5 何処がおかしいんでしょうか?
WRITE(6, '(I10, F15.7, F15.7)') x, y, z もう少し教科書嫁!! こんな感じでw
44 :06/11/17
>>37 がんばったけど書式がうまくいかなかった。ゴメン c DO文を使用して,xの値を, c 1,10,100,1000,10000,100000,1000000 の順に変えて c その常用対数および自然対数の値を 計算して表示する c 計算結果は書式の指定をして,x, log10(x), log(x) の順に c 計算結果が整数となるものは整数型(In), c 実数となるものは実数型(Fn.m)または指数型(En.m)で出力. Program report5 Implicit none INTEGER i REAL x
do i = 0, 6 x = 10.0**i write(*, *) aint(x), log10(x), log(x) end do
stop end c 実行結果 c 1.00000 0.000000E+00 0.000000E+00 c 10.0000 1.00000 2.30259 c 100.000 2.00000 4.60517 c 1000.00 3.00000 6.90776 c 10000.0 4.00000 9.21034 c 100000. 5.00000 11.5129 c 0.100000E+07 6.00000 13.8155
45 :06/11/17
program report5 implicit none integer :: x real :: y,z write (*,*) 'x=' DO 10 i = 0, 6 x = 10.0**REAL(i) y = LOG10(x) z = LOG(x) WRITE(6, '(I10, F15.7, F15.7)') x, y, z 10 CONTINUE END do stop end program report5 こうですか?
46 :06/11/17
Program report5 Implicit none real :: i,x do i=0, 6 x=10.0**i write(*, '(i7, f15.7 f15.7)') x, log10(x), log(x) end do stop end 結果 ******* 0.0000000 0.0000000 ******* 1.0000000 2.3025851 ******* 2.0000000 4.6051702 ******* 3.0000000 6.9077554 ******* 4.0000000 9.2103405 ******* 5.0000000 11.5129251 ******* 6.0000000 13.8155107 おかげさまでここまで出来たんですが、どうしても*******が出てしまいます><
>>53 REAL A DIMENSION A(10) DO 10 I=1,10 A(I) = REAL(I) 10 CONTINUE A = 1.23 WRITE(*,*) A WRITE(*,*) (A(I), I=1,10) END 規格上どうなってたかは知らないが g77だと A = 1.23 の部分でコンパイルエラーになった。 g95では(当然)
拡散方程式の境界値問題をオイラー陽解法で解くための 参考プログラムというものが教科書にあり、まわしたのですが errorは出ないものの上手くまわりませんでした。 アドバイスを願います。 ちなみにMX=41,KM=30,DT=0.01としています。 PARAMETER(NX=51) DIMENSION U(NX),UU(NX) C**** INPUT & CALCULATE PARAMETERS WRITE(*,*) 'MX (<52: MESH POINTS) ? KM (NUMBER OF TIME STEP) ?' READ(*,*) MX,KM WRITE(*,*) 'DELTA T: DT ? ' READ(*,*) DT DX=1./FLOAT(MX-1) R=DT/DX**2 IH=(MX+1)/2 I5=.05/DT IF(I5.EQ.0) I5=1 CALL OUTPUT(U,NX,MX,1) C**** INITIAL CONDITION DO 10 I=1,MX X=FLOAT(I-1)/FLOAT(MX-1) IF(I.LE.IH) THEN U(I)=X ELSE U(I)=1.-X END IF 10 CONTINUE
65 :06/11/20
C**** MAIN LOOP DO 20 K=1,KM U(1)=0. U(MX)=0. IF(MOD(K,I5).EQ.1) CALL OUTPUT(U,NX,MX,2) C DO 30 I=2,MX-1 UU(I)=R*U(I-1)+(1.-2*R)*U(I)+R*U(I+1) 30 CONTINUE DO 40 I=2,MX-1 U(I)=UU(I) 40 CONTINUE C IF(ABS(U(IH)).GE.10000.) THEN WRITE(*,*) 'DIVERGE!' STOP END IF C 20 CONTINUE C CALL OUTPUT(U,NX,MX,3) STOP END C SUBROUTINE OUTPUT(U,NX,MX,MM) CHARACTER Z(60,23) DIMENSION U(NX)
66 :06/11/20
IF(MM.EQ.1) THEN DO 10 J=1,23 DO 10 I=2,MX-1 Z(I,J)=' ' 10 CONTINUE DO 20 J=1,23 Z(1,J)=':' Z(MX,J)=':' 20 CONTINUE DO 30 I=1,MX Z(I,1)='-' Z(I,23)='-' 30 CONTINUE END IF IF(MM.EQ.2) THEN DO 40 I=1,MX J=U(I)*40+.001 IF(J.GT.23) GO TO 40 Z(I,J)='*' 40 CONTINUE END IF IF(MM.EQ.3) THEN DO 50 J=23,1,-1 WRITE(*,600) (Z(I,J),I=1,60) 50 CONTINUE 600 FORMAT(1H ,60A1) END IF RETURN END
便乗しようじゃあないか. CPU: Pentium4 3.4GHz RAM: 1.5GB (DDRPC3200デュアル) コンパイラ: Intel Fortran Compiler 9.1 OS: Windows XP pro SP2 友人のC2D (T7200) 搭載機使って計算したらノートPCのくせに俺の デスクより2倍以上速くて鬱ry
74 :06/11/22
これはなんですか???教えてください!! NO ERRORS,4 WARNINGS [<TDOFS>FTN77 Ver 4.03] NO ERRORS [<FORVIB>FTN77 Ver 4.03] NO ERRORS [<COEF0>FTN77 Ver 4.03] NO ERRORS [<COEF1>FTN77 Ver 4.03] NO ERRORS [<SOLU>FTN77 Ver 4.03] NO ERRORS [<F_TAN>FTN77 Ver 4.03] NO ERRORS [<Z_GK>FTN77 Ver 4.03] NO ERRORS [<INTARG>FTN77 Ver 4.03] NO ERRORS [<INTARG3>FTN77 Ver 4.03] NO ERRORS [<INTARG4>FTN77 Ver 4.03] NO ERRORS [<INTARG5>FTN77 Ver 4.03] WARNING the following symbols are missing: DLAX D:\MyDo\Fortran\1122test.obj (D:\MYDO\FORTRAN\1122TEST.FOR) DLAXR D:\MyDo\Fortran\1122test.obj (D:\MYDO\FORTRAN\1122TEST.FOR)
>>89 PROGRAM unko REAL a(5, 2) CALL kintama(5 * 2, a) DO 10 i = 1, 5 PRINT *, a(i, 1), a(i, 2) 10 CONTINUE END C SUBROUTINE kintama(n, x) REAL x(n) DO 10 i = 1, n x(i) = REAL(i) 10 CONTINUE RETURN END 実行結果 1.000000 6.000000 2.000000 7.000000 3.000000 8.000000 4.000000 9.000000 5.000000 10.00000 Press any key to continue サブルーチン 金玉 で、1次元配列xに1〜nまで順番に数を代入している。 一方、メインルーチンから呼び出すときは、2次元配列を引数(ひきすう)に与えている。 要素数は行×列=10個で渡している。 返ってくる結果を見ると、列方向に連続した値で戻って来ている。 同様のことをSORTでやれば、はじめ二次元にランダムだった数が、 列方向にソートされて戻ってくる。