アプリ版:「スタンプのみでお礼する」機能のリリースについて

三角形の三辺の長さを入力し、面積を求めるプログラムを作成せよ。三角形の面積はヘロンの公式を用いて求める。ヘロンの公式による面積計算部分を関数プログラムとして作成せよ。 ヘロンの公式:三辺の長さをa,b,cとすると,(s(s-a)(s-b)(s-c))^2  s =(a+b+c)

それで僕なりに作ってみたんですが
cls
print"入力した数字から三角形の面積を求めます"
input a,b,c
s=(a+b+c)/2
A=(s-a)*(s-b)*(s-c)
B=A*s
M=(B^2)
print M
end
が副プログラムを入れないで作ったもので
cls
print"入力した数字から三角形の面積を求めます"
input a,b,c
print Mb3
end
Function mb3
s=(a+b+c)/2
A=(s-a)*(s-b)*(s-c)
B=A*s
M=(B^2)
print M
end function
になるんですがなぜだか結果が0になってしまいます
なぜでしょうか?

A 回答 (6件)

別にsurfaceって特別なもんじゃない。


単に変数名がaとsとかが混ざってると個人的に見辛かったから勝手につけた変数名。sでもxでも何でもいいよ(笑

sqrは平方根。ルートね。あらかじめ定義されている関数というか副プログラムというか

print sqr(4)
とか
print sqr(9)
とか
print sqr(16)
とかやるとわかると思う。

>#4補足,#5補足。
その通り。変数名が同じでも,
PUBLICがないと
メインルーチン,サブルーチンが違うと
値が共有されていないことがわかるよね。
PUBLICで宣言された変数はルーチン間で同じ変数名の時に値を共有するんだ。
    • good
    • 0
この回答へのお礼

なるほどなるほどありがとうございましたー^^

お礼日時:2007/06/21 18:54

ついでにこれもかな。

プログラムその4

cls
a = 1
call hoge
call fuga
end
sub hoge
a = a+1
print a
end sub
sub fuga
a = a+1
print a
end sub
    • good
    • 0
この回答へのお礼

結果は1 1になりました

お礼日時:2007/06/20 19:57

プログラムその1



cls
a = 2
print a
call hoge
print a
end
sub hoge
print a
a = a+1
print a
end sub

=========
プログラムその2

public a
cls
a = 2
print a
call hoge
print a
end
sub hoge
print a
a = a+1
print a
end sub
==================
プログラムその3 これは俺も予想外だったんだけど・・・・
(2,0,1,0,1,2だと思ってたし、普通の言語はそうなる)

cls
a = 2
print a
call hoge
call hoge
print a
end
sub hoge
print a
a = a+1
print a
end sub
    • good
    • 0
この回答へのお礼

1の結果は2 0 1 2になって
2は2 2 3 3になって
3は2 0 1 1 2 2になりました

お礼日時:2007/06/20 19:56

考えてもらおうと思って時間おいたけど、出来たかな?



cls
print"入力した数字から三角形の面積を求めます"
input a,b,c
print Mb3(a,b,c)
end
Function Mb3(X,Y,Z)
s=(X+Y+Z)/2
surface=s*(s-X)*(s-Y)*(s-Z)
surface=sqr(surface)
Mb3 = surface
end function

実は前回,Xを使ったり,今回X,Y,Zを使ったのは混乱しないようにするためで,別に変えなくても良かったんだけど。
勉強のために,次の回答の結果を考えてもらおうかな。(実際に実行して確かめてみてね)
    • good
    • 0
この回答へのお礼

surfaceやsqrも習ってないんでどういう意味だかわかりません><

surfaceやsqrを使わないでできませんかね?

お礼日時:2007/06/20 20:01

あ、ちなみに、最初に表示される値はFunctionの方のprintで、後に表示されるのがメインルーチンのprintだ。



#1で書かなかったけど,
引数で書いた方がプログラム的にはいいんだろうなあ・・・
(出来るだけPublicとかGlobal[VB系の言語]とかが出てくるのは避けた方が良い。プログラムの可読性が下がるから)
    • good
    • 0
この回答へのお礼

とりあえずできました。。。
でも結果は一つでいいんでそれはまあprint mb3を消せば一つになったんでいいんですけど。。
やっぱり、publicはつかいたくないっすね^^;
授業でもやってないんで
やっぱりそこは自分で考えないとだめか。。

お礼日時:2007/06/20 15:43

'Q3097471と同様Functionの引数として渡さないなら


'PUBLICと宣言しておくべき
PUBLIC a,b,c
cls
print"入力した数字から三角形の面積を求めます"
input a,b,c
print Mb3
end
Function Mb3
s=(a+b+c)/2
A=(s-a)*(s-b)*(s-c)
B=A*s
'質問文のへロンの公式がそもそも間違ってます。調べてみよう
'input a,b,cのところで,3,4,5と打つと,a=3,b=4,c=5となる。
'この三角形は有名な直角三角形で,3*4/2 = 6が面積とならなければならない
M=sqr(B)
'戻り値をきちんとセットしないとメインルーチンで0になるのは当然だ。
Mb3 = M
print M
end function
    • good
    • 0

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