• 締切済み

Fortran90 初心者です

Fortran初心者です。 「3-1=」を文字列データとして入力された式の答えを数値で出力するプログラムをつくりたいのですがよくわかりません。どなたかヒントください。御願いします。

  • ta117
  • お礼率33% (1/3)

みんなの回答

  • nineexit
  • ベストアンサー率100% (8/8)
回答No.3

こんな感じでよいのでしょうか? 2数の足し算のみにしか対応していません. 他の四則演算や複雑な数式を利用するためには,もう少し手を加える必要があります. program bc implicit none character(len=100) c integer i,j,io,n read(*,*) c n=len_trim(c) io=index(c,"+") read(c(1:io-1),*) i read(c(io+1:n-1),*) j if(iachar(c(n:n)) == iachar("=")) then write(*,*) i,"+",j,"=",i+j end if end program bc

ta117
質問者

お礼

有難う御座います。 同じようにして割り算をしてみたのですが、index(c,"/") しても0になって値が出てきません。なぜでしょうか。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

それは.... とても面倒だと思う. 事実上コンパイラ (というかインタプリタ) を作るのと同じなので, そっち系の本を漁った方が早いかもしれない. 簡単にいうと, ・「3-1=」という文字列から「3」「-」「1」「=」と分解する (字句解析) ・その分解結果から「3 から 1 を引くんだ」と理解する (構文解析) ・理解した結果に基づいて実際に計算 という手順を踏むことになります.

ta117
質問者

補足

以下のようなプログラムを作ってみたのですが、どうでしょうか。 character(10)::a(4) integer::b,i real(8)::aa,bb,c do i=1,4 read*,a(i) enddo read(a(1),*) aa read(a(3),*) bb b=ichar(a(2)) if(b==43) then c=aa+bb else if(b==45) then c=aa-bb else if(b==42) then c=aa*bb else if(b==47) then c=aa/bb endif print*,c end

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

どんなプログラムを作りたいのか, 日本語がよくわかりません. 「3-1=」という文字列データが入力されたときに, その式を計算して「2」と出力したい, ということですか? 他の入力に対してもそれに応じて計算したいのですか?

ta117
質問者

補足

説明不足ですみません。 キーボードから直接「3-1=」と打ち込んで、2という答えを出力するプログラムです。「1*4=」のように他の入力も計算できるようにしたいです。

関連するQ&A

  • FORTRANについて(初心者です)

    FORTRANを使って数値解析をやりたいと考えています。 先輩からの引継ぎでプログラムを使う事になったのですが、ソースプログラムはなく、実行ファイルと入力ファイルのみあります。 このプログラムを実行したのですが、エラーが出てきてしまいます。もちろん入力した数値や文字に問題はありません。全くの初心者で申し訳ないのですが、ソースプログラムがないと実行できないのでしょうか? ちなみにエラーは以下のように出ます。 Starting of プログラム名. Reading the input file. input file [./入力ファイル名] is selected. 入力ファイル名 format error!!

  • fortran

    fortranでファイルに出力したく、出力したいファイルには文字が書いてあり、その文字の下に出力をさせたい場合にはどうのようにプログラムを書けばいいのですか?

  • FORTRANについて

    今、大学の研究室でFORTRANの勉強をしています。そこで、院生から問題を出されました。それは、 テキストファイルから数字を読み込み、それらをFORTRANの中で計算し、その答えをまたテキストファイルに出力する、というプログラムです。 計算するところまではできたのですが、どうしてもテキストファイルに出力するプログラムがわかりません。 出力の仕方だけでも教えてください。教科書にもなく、図書館でも古い時代のものばかりで。しかも、僕は学校の関係でFORTRANを全く知りません。

  • fortran

    fortranでn次正方行列の対角要素の和を求める関数副プログラムを作ろうと思います。 fortran初心者で、何から始めていいのかさっぱりワカリマセン。 ヒント・アドバイスがあればよろしくお願いいたします。

  • fortranのwrite文について

    fortranで数値計算をしています。 計算結果をdatファイルに出力する際、 長い変数名の数値を30列(1列は1000行以上)以上にわたって出力したいことがあります。 現在は、それぞれの変数名を横並びにプログラムに書き、 かつ、1行あたりの文字列の制限もあるので、 &記号を使って、無理やり出力しています。 具体的には、 do i=1,1000,1 write(1000,*)aaaaaaaaaaaaaaaa(i),& &bbbbbbbbbbbbbbbb(i),& &cccccccccccccccc(i),& &dddddddddddddddd(i),& ........ end do という形です。 もっとスマートにかけないでしょうか?

  • fortran初心者です。

    fortran初心者です。 2つの3次元ベクトルa=(a1, a2, a3)、b=(b1, b2, b3)の各成分を入力したときに外積を求めるプログラムを配列、doループを使用して作成することは可能でしょうか?

  • Fortran;入出力の繰り返し

     まだまだFortran初心者なのですがよろしくお願い致します。  Fortranを用いて数値計算を行っておりまして、読み込ませたいデータが100ほどあるのですが(data1, data2, …, data100、というデータファイルでして、ヘッダーは同じで読み込ませたい数値のみが異なっています。)、1つずつ読み込ませるのはかなり効率悪いので連続して全てを一気に読み込ませるたいのですが、そのためにはどうしたらよいのか悩んでいます。  同様に結果のファイル(result1, result2, …, result100)も全て自動で書き出したいので、どちらもopen文をdo-continueでくくればよいのかとも思いやってみましたが上手く行きませんでした。(このようにしますとresult100のみしか作成されません)    かなり見当違いのことをやってしまっているのかもしれませんが、周囲にはFortranユーザーはおりませんので、こちらに質問させて頂きました。  正しいプログラムの書き方やアドバイスなど、ご教授頂ければ幸いです。

  • fortran

    fortranで走らせて、あるデータを時系列に沿ってエクセルに記入していきたいのですが、どの様に組めばいいのかわかりません。 分からないので、DOSにそれを出力させて、コピペで対処していますが、数万桁やる必要があるので・・とてもそれでは、って感じです。 1step 100 2step 130 3step 165 ・・・ (DOS出力させる時は、1stepなどは書かずに数値のみ出力させています) って感じのデータをエクセル化したいです。 お願いします。

  • fortranについて

    「ベクトルを入力して、それを正規化したものを出力するプログラムを作りなさい。ベクトルを正規化するとは、ベクトルをその長さで割り、長さを1にすることである。」  情報処理の講義で上記のような問題がでたのですが、どうすればいいのか分かりません。親切な方よかったら教えてください。ちなみにプログラムとはfortranのプログラムのことです。

  • Fortranでの記号「./」について

    Fortran 90で書かれた数値計算プログラムを、より専門的な言語に書き換える作業を行っています。 Fortranを学んだことがないのでインターネット等で関数の意味や書式を調べながら作業しているのですが、 「X./Y」という式の意味がわからずに困っています。 単純に「X/Y」とはどう違うのでしょうか。 初歩的な質問で申し訳ありませんが、よろしくお願いします。

専門家に質問してみよう