• ベストアンサー

Fortran の DO

kernel_kazzzの回答

回答No.2

fortranをやってたのがもう25年以上前なので記憶が曖昧ですが、型宣言無しで整数型となる変数は変数名の先頭文字がi~nでは無かったですか? Aでは整数として扱われないので、増分値が「文字」であるエラーが出ると思います。

mari0725
質問者

お礼

ありがとうございました!!!!できました。

関連するQ&A

  • FORTRAN

    FORTRANについて聞かせてください。 WRITE(*,*) 'A= READ( *,*) A Aの値を0~0.15の範囲で0.01刻みで増やしていって実行したいのですが,どのようにプログラムを作成すればいいですか?? DOループだと思うのですが,あってますか? 分かる方いらっしゃったらお願いします。 FORTRANについてお勧めの初心者用ホームページがあればおしえてくださると助かります。

  • fortranとVBAのdo文

    fortranをBVAのプログラムに直す作業をしています。 プログラムが不慣れなもので、基本的なことかもしれませんが書き込みます。 fortranにて do 10 i=1, n call SET(IX, i, x(i)) 10 continue ここでn、IXは整数で、サブルーチンSETで作業はします。 これをVBAで書き直すとどのようにあらわされるのでしょうか。 よろしくお願いします。

  • FORTRAN→Cに翻訳

     どなたか、次のFORTRANのプログラムを、Cに、翻訳して頂けないでしょうか。C++ではなく、Cです。ANSI準拠のCでお願いします。  プログラムの内容は、最小二乗法による計算プログラムです。MS-DOS Ver3.3~6.0の頃の、MS FORTRANコンパイラ仕様のものです。その頃持っていたFORTRANの本も処分してしまい、今からFORTRANを学びなおすのにも多大な労力と時間がかかりそうなので、Cに翻訳して頂ければ大変ありがたいです。よろしくお願いします。 (“□”はタブ) ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ C□LEAST SQUARE APPROXIMATION □PROGRAM MAIN9 □DIMENSION X(100),Y(100),S(0:18),T(0:9),SM(10,10),TV(10),AV(10) □WRITE(*,*) 'N ?' □READ(*,*) N □WRITE(*,*) 'x1,x2,..,xn ?' □READ(*,*) ( X(I),I=1,N ) □WRITE(*,*) 'y1,y2,..,yn ?' □READ(*,*) ( Y(I),I=1,N ) □WRITE(*,*) 'M ?' □READ(*,*) M □DO 110 K=0,M*2 □□VS=0. □□DO 100 I=1,N □100□VS=VS+X(I)**K □□S(K)=VS □110□CONTINUE □□DO 130 K=0,M □□□VS=0. □□□DO 120 I=1,N □120□VS=VS+Y(I)*X(I)**K □□□T(K)=VS □130 CONTINUE □□DO 140 I=1,M+1 □□□DO 140 J=1,M+1 □□□□K=I+J-2 □□□□SM(I,J)=S(K) □140 CONTINUE □□DO 150 I=1,M+1 □150 TV(I)=T(I-1) □□CALL SIMULE( AV, SM, TV, M+1 ) □□DO 160 I=1,M+1 □160 WRITE(*,1000) I-1,AV(I) □1000 FORMAT(1H ,'A',I1,'=',F10.5) □□STOP □□END ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

  • fortranで疑問

    今fortranで困ったことがあります。 例えば 1 2 3 と縦に改行されているファイルを、新しいファイルに同じ数値データを写したいとき 元のデータから read(*,*)(n,i=1,3) で値を読み込み write(*,*)(n=i,3) で新しいデータに書き込み出来る と思ったのですが 3 3 3 と新しいファイルに書き込まれてしまうのです。 まず縦に改行した形で表示するにはどうしたら良いでしょうか? ちなみにdo~continue文でプログラムするとうまくいきます。

  • fortranでファイルから数値を読み取ることについての質問です。

    fortranでファイルから数値を読み取ることについての質問です。 次のような内容のファイルから数値を読み取る場合: 1 2 3 4 5 6 7 8 9 これはdoループを使って do i=1,n read(1,*)a[3*(i-1)+1],a[3*(i-1)+2],a[3*(i-1)+3] end do として、行数をn=3と指定すれば読み取れますが、 行数を指定しなくてはabortします。 行数を指定せずに、最後のデータまで自動的に読むようにするには どうすれば良いでしょうか?

  • FORTRAN77の質問です。

    ある問題で定圧モル熱容量が C/R=A+BT+DT^-2 であたえられていました。 まずA,B,Dの値と温度Tを与えると、定圧モル熱容量を計算する関数副プログラムFCPMを求めました。 次に表があって圧力5つがあってそれぞれにA、B、Dが書かれています。 250℃から650℃まで50℃刻みで定圧モル熱容量を計算し 表のような一覧表の形で出力するプログラムを書く問題ができません。 まずA、B、DですがDATA文などで表して DO文で DO 10 T=250,50,650 DO 5 I=1,1,5 write(*,*)T,FCPM(A(I),B(I),D(I),T) format(F9.2,5F10.4) 5 continue 10 continue みたいなのでいいんですか? 表の上のほうはどう書けばいいのでしょうか? またDATA文以外で何か良い方法はありませんか?READ文で読み込むのもなんかなぁと思います。

  • fortran77で複数のファイルの読み込み

    fortran77で複数のファイルの読み込み 現在fortran77のプログラムを勉強しております。 ファイルが複数あり、すべてのファイルを読み込みたいのですが、ファイルの数がたくさんあるため、プログラムの行数が多くなってしまいます。 do ループで次々とファイルを開くプログラムを考えているのですが、思いつきません。 どなたか考え方でもいいので、教えてください。 ちなみに私が考えたプログラムは、 open(10,file='C:\FORTRAN\100.txt',status='old') open(11,file='C:\FORTRAN\121.txt',status='old') open(12,file='C:\FORTRAN\144.txt',status='old') open(13,file='C:\FORTRAN\169.txt',status='old') open(14,file='C:\FORTRAN\196.txt',status='old') open(15,file='C:\FORTRAN\225.txt',status='old') ・・・。 これを do ループで次々に開くことを考えると、 character*3 A(10) do 100 i=1,10 A=i*i open(i,file='C:\FORTRAN\A.txt',status='old') 100 continue ・・・ みたいな感じです。 ' 'の中の一部だけを変えたい場合のcharacter 文の使い方がいまいちよく分かりません。

  • fortranについて

    fortranでコンパイルしようとすると、 READ(1,FILE='syoki.txt') X0(I),Y0(I) ^ Invalid form for READ statement at (^) とエラー?が出てしまうのですが、原因としてどのようなことが考えられるでしょうか。 どなたかお願いします。

  • プログラミング Fortran

    以下のプログラムの空白部分が分かる方、是非力を貸して下さい!!(> <) 次の数列ai=1,…,N(1≦N≦100)                  ai=1, ai+1=2ai-3 に対して               S=Σai(※Σの上はN、下はi=1) を計算・表示するプログラムは以下のようになる。ここでは整数Nは端末から入力する。 common num,a(100),sum read(5,*) num call [ ] call pqrstu write(6,*) ‘a=’,(a(i),i=1,num) write(6,*) ‘sum=’,sum end * subroutine abcdef common num,a(100) a(1)=[ ] do 20 i=1,num a(i+1)=a(i)*2.0-3.0 20 continue end * subroutine pqrstu common [ ] sum=[ ] do 20 i=1,num sum=[ ] 20 continue end よろしくお願いします!!

  • Fortran90のプログラムについて

    大学で卒論のためにFortran90でランダムウォークのプログラムを作ってるんですが…2週間悩んでるんですが、できないところがあります。 「1次元のランダムウォークにおいて、ステップ数Nとxの値を与えたときのすべての可能な歩行を数え上げるプログラムを書け」というものです。 直接ステップ数を書き込んだプログラムを基にして任意のステップ数を入力するプログラムを作ってみたんですが、うまくいきません。 integer :: a(100,20), x, i1, i2, i3 x = 0 do i1 = -1, 1, 2;do i2 = -1, 1, 2;do i3 = -1, 1, 2 x = x + 1 a(x, 1) = i1;a(x, 2) = i2;a(x, 3) = i3 end do;end do;end do end が基にしたプログラムです。これはステップ数が'3'なので実行結果は「-1-1-1,-1-11,-11-1,-11-1,-111,1-1-1,11-1,111」というxの変位の仕方が出ます。 integer, allocatable :: a(:,:) integer :: i, n, x, l print *, 'ステップ数を入力:'; read *, n allocate(a(n, 2**n)) do l = 1, n do i = -1, 1, 2 x = x + 1 a(x, l) = i end do end do end という風に作ってみたんですが、'3'を入力しても同じ結果が出ません。わかりにくい文章で申し訳ないですがどなたかご教授お願いします。