【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

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

A 回答 (3件)

どんなプログラムを作りたいのか, 日本語がよくわかりません.


「3-1=」という文字列データが入力されたときに, その式を計算して「2」と出力したい, ということですか?
他の入力に対してもそれに応じて計算したいのですか?

この回答への補足

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

補足日時:2009/05/26 07:20
    • good
    • 0

それは.... とても面倒だと思う. 事実上コンパイラ (というかインタプリタ) を作るのと同じなので, そっち系の本を漁った方が早いかもしれない.


簡単にいうと,
・「3-1=」という文字列から「3」「-」「1」「=」と分解する (字句解析)
・その分解結果から「3 から 1 を引くんだ」と理解する (構文解析)
・理解した結果に基づいて実際に計算
という手順を踏むことになります.

この回答への補足

以下のようなプログラムを作ってみたのですが、どうでしょうか。
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

補足日時:2009/05/26 18:48
    • good
    • 0

こんな感じでよいのでしょうか?


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/29 10:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!