• ベストアンサー

フォートランの初歩でつまってます;;

fortran77入門 浦昭二著 で、いくつか整数を読み込み、その平均値と標準偏差を求める問題があるのですが、コマンドプロンプト上でどのようにしたら計算をしてくれるのかわかりません。例えば5個の整数の和を計算したいなら、5個の整数を入力したあと、何を入力すれば計算してくれるのでしょうか? 初歩的な質問ですいません。 ----------------------------------------------- INTEGER N REAL X,T1,T2,M,SD N=0 T1=0 T2=0 10 READ(5,*,END=20) X N=N+1 T1=T1+X T2=T2+X*X GO TO 10 20 IF(N.GE.2) THEN M = T1/N SD=SQRT((T2-T1*M)/(N-1)) WRITE(6,*) 'N= ',N, ' MEAN = ',M,'SD = ',SD ELSE IF(N.EQ.1) THEN WRITE(6,*) 'N= ',N, ' MEAN = ',M,'SD = ',SD ELSE WRITE(6,*) 'SUCHI GA NAI' END IF END IF END

質問者が選んだベストアンサー

  • ベストアンサー
  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1

実行してる環境に左右されるため、断言することはできません。 EOF に相当するコードを入力することになります。  例.    ・単なる [Enter]    ・Ctrl + D    ・Ctrl + C            etc.

その他の回答 (5)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.6

>ctrl+Dやctrl+Cは違います。ctrl+Cは強制終了です。 専門家のお言葉ですが、cygwinを使ったコンパイラでの実行ファイルであれば ^DがEOFになります。 質問者さんがコンパイラに関しての情報を書いていなかったので 並べて書いときました。

  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.5

EOFを入力してやればいいのです。 Windowsの標準入力の場合、ctrl+Zを入力し、画面に~Zが表示されている状態でEnterです。 ctrl+Dやctrl+Cは違います。ctrl+Cは強制終了です。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

>”データを入れない”とはコマンドプロンプト上ではどのように入力することを指すのでしょうか? キーボードから入れているのであれば、 #1の方のかかれている、入力の終わりを示す入力をしてやればよいです。 コントロールを押しながらDキーを押すか、 コントロールを押しながらZキーを押すか のいずれかでそのようになると思います。

  • outerlimit
  • ベストアンサー率26% (993/3718)
回答No.3

Fortran77は  テキストエディタでソースプログラムを作成し それにコントロールデータを付加して Fortran77コンパイラでコンパイルし(エラーが無ければ)  その出力をリンカで ライブラリ等とリンクし 実行モジュールを作成します その実行モジュールを実行して初めて プログラムした処理が行なわれます (希望の処理が行なわれなければデバッグです) 質問の状況では コンパイラも無さそうです 学校で 先生の指導を受けて下さい

merideme
質問者

補足

質問が悪かったかもしれませんが、 コンパイルはできてます。 コマンドプロンプト上で実行して、例えば5個の数字の標準偏差を求めたいとすると 5個数字をうつわけですが、本によると”6個目のデータをいれない”ことで標準偏差の計算を実行できるプログラムみたいなのですが、 ”データを入れない”とはコマンドプロンプト上ではどのように入力することを指すのでしょうか?

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.2

FORTRUNはコンパイラ言語ですから、インタプリタの一種である MS-DOSのコマンドプロンプト上で直接動くわけが無いです。 つか、そもそも論として、FORTRUNを動かす「専用のソフト」が 無いと動きませんし。 http://www.coastal-env.k.u-tokyo.ac.jp/koibuchi/fortran95/fortran77.htm もし、上記のようなソフトを導入済みだったら、ソフトの利用上の 問題ですからマニュアルを参照してください。ちなみに上記のソフト をDOSコマンドプロンプト上で使うなら、「FTN77」を実行してないと 動作しません。

関連するQ&A

  • FORTRAN77のプログラミングについて教えてください。

    ・学校の課題で任意の数値の平均と、入力した数の個数を出力するプログラムを作 りなさいという課題が出たのですがうまくいきません。次にあげるプログラムの 中で修正する部分を教えてください。 *課題2 平均値 integer N real X,T1,M * 初期値 N=0 T1=0 * 累積 10 read(5,*,end=20) X N=N+1 T1=T1+X go to 10 * まとめ 20 if(N.GE.2) then M=T1/N write(6,*) '総数は' ,N, '平均は',M ELSE IF(N.EQ.1) THEN WRITE(6,*) '総数は',N, '平均は',T1 ELSE WRITE(6,*) '数値がない' END IF END IF END ・この問題は最初からよくわかりません。教えてください。  「3つの数a,b,cを読み込む。a,b,cを三角形の3辺の長さとしたとき三角形にな  るかを判定しなさい。三角形にならない場合はその面積をヘロンの公式を求め  て表示する。     s=(a+b+c)/2 , ss=s(s-a)(s-b)(s-c) として       S=sqrt(ss) とする。」 以上の二つです。分かる方お願いします。

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

    Rubyのプログラムについて、宜しければ教えてください。 def fct(n, f=1) if n<=1 then f else fct(n-1, n*f) end end def factorial(n) (1..n).inject{|x,y| x*y} end def factorial(n) eval( [*(1..n)].join("*") ) end このプログラムが、階乗を計算するメソッドになっているみたいなのですが、なぜコレだけで階乗が計算できるのでしょうか? 宜しければ教えてください><

    • ベストアンサー
    • Ruby
  • fortran 途中まで考えたのですが。。。。

    エラトステネスのふるい(素数の倍数を除いていって残ったのが素数)で3桁の素数を求めて表示したいです。 私が考えたのは、 1・2~99までの数を素数かどうか調べて、素数を配列に入れていく 2・100~999まで素数の配列の中の数で割って、割り切れたらおしまい。割り切れなかったら表示していく ということです。 しかし下のプログラムではうまく素数配列ができていないようなのです。 ここまでかなり時間がかかったのでこのプログラムに手をいれて これ以外におかしくなるところもどこを直せばいいのか教えてくださるとうれしいです。 C C q223.f C PROGRAM q223 C IMPLICIT NONE C INTEGER N,i,K,s,l REAL a(99),b(99),c(99),X,Y C real M C a(1)=2 a(2)=3 l=2 C DO N=2,99,1 M=N**(0.5) S=M DO i=2,S,1 K=MOD(N,i) IF(K ==0)THEN exit ELSE IF(K /=0)THEN l=l+1 a(l)=N ENDIF ENDDO ENDDO C do N=100,999 do l=1,99 X=a(l) Y=N/X if(Y==0)then exit else if(Y/=0)then write(*,*)N end if end do end do c end よろしくおねがいします

  • プログラム (BASIC) 教えてください

    コンピュータが 3桁の整数(100~999) n をランダムに生成。 「3桁の整数(100~999) n を当ててください」と表示。 解答者はキーボードで整数 x を入力。 x > n なら「もっと小さい数です.再入力してください」と表示してゲームを継続( 3. に戻り,x を再入力)、 x < n なら「もっと大きい数です.再入力してください」と表示してゲームを継続( 3. に戻り,x を再入力)、 x = n となったら ループを抜ける。 「正解です」と表示して,ゲーム終了。 100 RANDOMIZE 110 PRINT "3桁の整数(100~999) n を当ててください" 120 LET n=100+INT (900*RND) 130 DO 140 INPUT x 150 IF x=n THEN EXIT DO 160 IF x>n THEN 170 PRINT "もっと小さい数です.再入力してください" 180 ELSEIF x<n THEN 190 PRINT "もっと大きい数です.再入力してください" 200 END IF 210 LOOP 220 PRINT "正解です" 230 END このプログラムをIF、END IFを一回のみ使うプログラムに変える方法を教えてください。

  • mの平方根の連分数展開なのですがうまく動きません。

    subroutine keisan(m) integer a,a0,n,i,m real t,X,Y,Z t=sqrt(real(m)) a0=int(t) write(*,*) 'a0=',a0 a=a0 X=1 Y=0 Z=1 do 10 n=1,20 if (Z==0.0) exit X=X*Z Y=Z*(-Y+real(a)*Z) Z=X*X*real(m)-(real(a)*Z-Y)**2 do 100 i=1,X if(real(i)==X) then X=X else if(((mod(int(X),i))==0).AND.((mod(int(Y),i))==0).AND.((mod(int(Z),i))==0)) then X=X/real(i) Y=Y/real(i) Z=Z/real(i) else X=X endif endif 100 continue a=int((X*t+Y)/Z) write(*,*) 'a',n,'=',a 10 continue end subroutine サブルーチンのみ載せてますけど・・・・どうなのでしょう??

  • fortranでのプログラム作成について

    DO t=0,100   k(t)=0   IF (0<x<=1-at)then   k(t)=k(t)+1    cycle   ELSE IF (1-at<x<=1)then     ・     ・   ---------------------------------    DO t=t1,100      ・      ・    END DO   END IF END DO 上記のプログラムをある目的で作っていて、線上の・・の部分で、1-at(aは少数)が乱数xより小さくなったときのt(t1)(tは整数)を求めて、線以下の・・でt1を用いたループを作りたいのですが、線上の・・の部分をどうすればt1が求められるのかがわかりません。アドバイスをいただけませんか?

  • グラフを書きたいのですがどのようにして使うかわかりません

    FOR I=-200 to 200 FOR J=-200 to 200 X(0) = I / 100 ; Y(0) = J / 100 FOR N=0 to 1000 X(N+1) = X(N)^2 - Y(N)^2 + X(0) Y(N+1) = 2*X(N)*Y(N)+Y(0) IF X(N)^2 + Y(N)^2 > 4 THEN PSET(I,J) WHITE ELSE IF N = 1000 THEN PSET(I,J) BLUE ELSE NEXT N END IF NEXT J; NEXT I というグラフを書くプログラムがあるのですがこのプログラムの使い方がわからなくて使えないのでどのようにすれば見れるのか教えてください。

  • プログラミングの問題

    整数nをキーボードから入力し、1からnまでの数のうち奇数だけを加えた和を計算し表示するプログラム ヒント ・変数xが奇数か偶数かは、MOD(x、2)が0か否かで判断できる。 ・FOR~NEXT構文のなかでも、 IF~THEN~ELSE~END IF 構文を使える。 という問題で、 input n let s=0 for i=1 to n までしかわかりませんでした。 いったいこのあとはどうなるのか、教えてください。 おねがいします。

  • pascal二分木の課題

    レポート課題で、pascalの二分木についての問題が出たのですが、うまくソースコードを作ることができません! 誰かお手伝いよろしくお願いします! 課題:progに木をバランスよく組みなおす関数repackを追加せよ program prog(input,output); const maxRange = 100; type dataType = integer; tree = ^treeCall; treeCall = record data:dataType; left,right:tree end; var root:tree; command:char; value:dataType; function search(d:dataType; t:tree):tree; begin if t=nil then search:=nil(*ブレーク*) else if t^.data=d then search:=t(*見つけた*) else if t^.data>d then search:=search(d,t^.left)(*左を検索*) else search:=search(d,t^.right)(*右を検索*) end; procedure insert(d:dataType; var t:tree); begin (**) if t=nil then begin new(t); t^.data:=d; t^.left:=nil; t^.right:=nil end else if t^.data=d then (*すでに登録されているので何もしない*) else if t^.data>d then insert(d,t^.left) else insert(d,t^.right); end; procedure delete(d:dataType; var t:tree); var temp:tree; procedure deleteMin(var r:tree); var temp:tree; begin temp:=r; while temp^.left<>nil do temp:=temp^.left; t^.data:=temp^.data; delete(temp^.data,r) end; begin if t=nil then writeln('Not Exist.') else if t^.data=d then if (t^.left<>nil) and (t^.right<>nil) then deleteMin(t^.right) else begin temp:=t; if t^.left<>nil then t:=t^.left else t:=t^.right; dispose(temp); end else if t^.data>d then delete(d,t^.left) else delete(d,t^.right) end; procedure writeSet(t:tree); begin if t=nil then (*何もしない*) else begin writeSet(t^.left);(*左へ左へ・・・*) write(t^.data:1,' '); writeSet(t^.right)(*右へ・・・*) end end; (****** Body ******) begin root:=nil; repeat write('> '); read(command); if command in ['i','d','s','w'] then begin (*もしもコマンドがw以外なら値を読み込む*) if command='w' then readln else readln(value); case command of (*数値をバイナリーツリーに挿入 ここでソーティングしたい*) 'i': insert(value,root); 'd': delete(value,root);

  • fortran 初心者です。

    fortranでフィボナッチ数列 A0 = 0 , A1 = 1 , Ai+1 = Ai + Ai-1 (i =2,3...) を計算するプログラムを作っています。 得られた値が奇数の時には、数値の右横に*をつけ、奇数かつ3の倍数なら**をつけます。 が、以下のようにプログラムしましたが、*印がつきません。どこが、間違っているのか、アドバイスよろしくお願いします。 C Question A0 = 0.0 A1 = 1.0 A2 = 1.0 WRITE(6,*)'A0 = 0.0' WRITE(6,*)'A1 = 1.0' DO 10 I = 2,10,1 A2 = A1 + A0 N = A2-(A2/2)*2 M = A2-(A2/3)*3 IF ( M .NE. 0 .AND. N .NE.0) THEN WRITE(6,*)'A',I,'=' ,A2,'*' ELSE IF ( M .NE. 0.AND. N .EQ.0)THEN WRITE(6,*)'A',I,'=' ,A2,'**' ELSE WRITE(6,*) 'A',I,'=' ,A2 END IF A0 = A1 A1 = A2 10 CONTINUE STOP END

専門家に質問してみよう