投稿
画像に書いてありますが、DEF関数でつまづいています(><) どうか違いを教えては頂けませんか?
4そうだね
プレイ済み
返信[1]
親投稿
OUTで使っているA,Bを初期化していないからではないでしょうか? ところでXが0の時にXとYを掛けると0になってしまうのでは? おそらく他の処理の代わりに書いたのだと思いますけど
0そうだね
プレイ済み
返信[2]
親投稿
pinfu ANNAININ
むむ。 DEFはいつか使いこなしたいので乱入します!(笑) つまりは、帰せる値がなければNG??みたいな事なのでしょうか???
0そうだね
プレイ済み
返信[3]
親投稿
>pinfuさん 値を返す関数は必ず値を返さないといけません。 戻り値の変数を初期化しましょう(RETURNで返す場合を除く) 値を返さない関数は値を返してはいけません。
1そうだね
プレイ済み
返信[4]
親投稿
pinfu ANNAININ
おぉ、クッキーさん!! 回答ありがとうございます♪ すっきりしました! そして、人の投稿で勝手に質問失礼しました。 (´・ω・`)オオメニミテクダサイ
0そうだね
プレイ済み
返信[5]
親投稿
クッキーさんの言う通りだと思います。 エラーになる例では、Xの条件によりAかBのどちらかしか値が設定されません。そのため、OUT引数を呼び出し元に渡すときに、渡す値が無い(変数の型が確定していない)ためにエラーになっていると思います。 ちなみに、この例では、 AAA X,Y OUT A,B で呼び出すことが出来ます。 CALL命令は、関数名(命令名に)文字列変数や文字列式を使うときに便利です。
1そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
IF X==1 THEN A=X+Y:B=0 IF X==0 THEN B=X*Y:A=0 これで大丈夫です。
0そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
Xが0、1以外の値を取る可能性を考慮すると A=0:B=0 IF X==1 THEN A=X+Y IF X==0 THEN B=X*Y としなくてはダメですね。理由はすでに書かれている通りです。
1そうだね
プレイ済み
返信[8]
親投稿
>クッキー氏、コータ氏、おちゃめ氏 回答感謝です(*´∀`) DEF…やはり難しいですね しかし、皆さまの協力を得てまた一つ進むことができました(*'∀')/ 本当にありがとうございました(*_ _)
0そうだね
プレイ済み
返信[9]
親投稿
けい kei0baisoku
おちゃめさんの書かれてるやり方が、分かりやすくてバグも出にくいと思います。 相談は解決してますが、自分の知ってることの整理もかねてプチコンでのDEFのルールを書いてみます。 ・DEF FUNC OUT A,B,C と宣言したら、OUT変数は必ず全てDEF内で初期化しないとエラーになる ・DEF FUNC() と宣言したら、必ずRETURNで値を返さないとエラーになる。使う側も X=FUNC()と返り値を受け取らないとエラーになる。 ・DEF FUNC OUT A のようにOUT1つで宣言したDEF命令は、 X=FUNC() の形で呼び出すこともできる。 ・逆に、DEF FUNC() の形で宣言した関数は、 FUNC OUT X の形でも呼び出せる。
1そうだね
プレイ済み
返信[10]
親投稿
>>マギー氏 遅れながら感謝申しあげます そうですね、皆さんの回答と合わせ、今後気を付けていきたいと思います。 >>けい氏 分かりやすいまとめのほどありがとうございます。 これで、今後戻りの値に関して戸惑うことはなさそうです(*´∀`) クッキー氏を始めとする様々な方が回答をくださり、本当にありがとうございました(*_ _)
1そうだね
プレイ済み