HOME»基本情報技術者試験掲示板»グローバル関数について
投稿する
グローバル関数について [5248]
雑魚の中の雑魚さん(No.1)
大域
B=2
Opoc(X)
整数型:A=3
A ← A+B
Opco(Y)
整数型:A=1
整数型:B=1
A ← A+B
Opoc(X)
Z ←A+B
pint Z
最初に読み込みをOpco(Y)から呼び出すとき、
答えは6になるのでしょうか?
それとも、2になるのでしょうか?
以上、よろしくお願いいたします。
B=2
Opoc(X)
整数型:A=3
A ← A+B
Opco(Y)
整数型:A=1
整数型:B=1
A ← A+B
Opoc(X)
Z ←A+B
pint Z
最初に読み込みをOpco(Y)から呼び出すとき、
答えは6になるのでしょうか?
それとも、2になるのでしょうか?
以上、よろしくお願いいたします。
2024.01.14 11:27
電タックさん(No.2)
★FE ブロンズマイスター
この投稿は投稿者により削除されました。(2024.01.14 13:36)
2024.01.14 13:36
電タックさん(No.3)
★FE ブロンズマイスター
スコープの近いものがある時はそちらが使われるはずなので、Opco(Y)内で定義されたBは大域のBとは別の扱いになります。
そのため、Opco(Y)でZに入るのは3となりますが、
Zがどこにも定義されていない変数なのでエラーとなるが正解かもしれません。
そのため、Opco(Y)でZに入るのは3となりますが、
Zがどこにも定義されていない変数なのでエラーとなるが正解かもしれません。
2024.01.14 13:39
雑魚の中の雑魚さん(No.4)
電タックさん、ご返信ありがとうございます。
もう一つ質問がありますが、Opco(Y)の A ← A+Bの次ところにOpoc(X)を呼び出す命令文がありますが、
その命令を実行したら、Aは5になりますが、それは気にしなくてもいいでしょうか?
もう一つ質問がありますが、Opco(Y)の A ← A+Bの次ところにOpoc(X)を呼び出す命令文がありますが、
その命令を実行したら、Aは5になりますが、それは気にしなくてもいいでしょうか?
2024.01.14 14:08
y4 kさん(No.5)
★FE ブロンズマイスター
この投稿は投稿者により削除されました。(2024.01.14 15:01)
2024.01.14 15:01
y4 kさん(No.6)
★FE ブロンズマイスター
この投稿は投稿者により削除されました。(2024.01.14 15:01)
2024.01.14 15:01
y4 kさん(No.7)
★FE ブロンズマイスター
この投稿は投稿者により削除されました。(2024.01.14 15:01)
2024.01.14 15:01
y4 kさん(No.8)
★FE ブロンズマイスター
投稿内容に誤りがあったので、改めて投稿します。
書いてある内容に則ると以下になります。
まず大域(グローバル)変数B(※1)が宣言されていますが、関数Opco(Y)内で宣言されている変数B(※2)とは別物の扱いとなります。
(同名での変数宣言を避けるのが一般的なプログラマかと)
なので、関数Opco(Y)内では
1) まずA=1, B(※2)=1となります。大域変数B(※1)には代入されません。
2) A←A+Bですが、PythonであればB(※2)となりA=2となります。
3) その後, Opoc(X)とありますが、変数Xの宣言がないので引数として渡せず異常終了します。
4) Z←A+Bは3)により実行されません。
5) print Zも当然実行されません。
ご質問したかった点について想像はできますが、正しく返信することはできないです。
書いてある内容に則ると以下になります。
まず大域(グローバル)変数B(※1)が宣言されていますが、関数Opco(Y)内で宣言されている変数B(※2)とは別物の扱いとなります。
(同名での変数宣言を避けるのが一般的なプログラマかと)
なので、関数Opco(Y)内では
1) まずA=1, B(※2)=1となります。大域変数B(※1)には代入されません。
2) A←A+Bですが、PythonであればB(※2)となりA=2となります。
3) その後, Opoc(X)とありますが、変数Xの宣言がないので引数として渡せず異常終了します。
4) Z←A+Bは3)により実行されません。
5) print Zも当然実行されません。
ご質問したかった点について想像はできますが、正しく返信することはできないです。
2024.01.14 15:04
雑魚の中の雑魚さん(No.9)
y4 kさん、ご返信ありがとうございます。
もし、以下の式をOpoc2()から実行すると、
Zはどうなるのでしょうか?
大域
B=2
Opoc1()
整数型:A=3
A ← A+B
Opoc2()
整数型:A=1
整数型:B=1
A ← A+B
Opoc1()
Z ←A+B
もし、以下の式をOpoc2()から実行すると、
Zはどうなるのでしょうか?
大域
B=2
Opoc1()
整数型:A=3
A ← A+B
Opoc2()
整数型:A=1
整数型:B=1
A ← A+B
Opoc1()
Z ←A+B
2024.01.14 16:46
y4 kさん(No.10)
★FE ブロンズマイスター
プログラム言語の仕様により動作が変わる事もあります。
なので、No.9が動作するPythonの例で考えます。
1) 関数Opoc2()で宣言された各ローカル変数に、値1が代入されます。
2) ローカル変数A,Bを用いた結果、Aの値は2になります。
3) 関数Opoc1()を実行しますが、戻り値が無い為関数Opoc2()では変数の値は変化しません。
4) 変数Zにはローカル変数の値が用いられる為2+1の3となります。
なので、No.9が動作するPythonの例で考えます。
1) 関数Opoc2()で宣言された各ローカル変数に、値1が代入されます。
2) ローカル変数A,Bを用いた結果、Aの値は2になります。
3) 関数Opoc1()を実行しますが、戻り値が無い為関数Opoc2()では変数の値は変化しません。
4) 変数Zにはローカル変数の値が用いられる為2+1の3となります。
2024.01.14 17:15
雑魚の中の雑魚さん(No.11)
なるほど、本当にありがとうございます!
2024.01.14 17:36
KKさん(No.12)
y4 kさん、
下記について、ご教授いただけますでしょうか。Opoc1()を実行してから、Aの値は5になる認識ですが、その後、Z ←A+B にすると、Zは7になるんではないでしょうか。
3) 関数Opoc1()を実行しますが、戻り値が無い為関数Opoc2()では変数の値は変化しません。
下記について、ご教授いただけますでしょうか。Opoc1()を実行してから、Aの値は5になる認識ですが、その後、Z ←A+B にすると、Zは7になるんではないでしょうか。
3) 関数Opoc1()を実行しますが、戻り値が無い為関数Opoc2()では変数の値は変化しません。
2024.01.15 10:38
y4 kさん(No.13)
★FE ブロンズマイスター
KKさん
関数Opoc1()内のローカル変数Aの値であれば、宣言時にA=3と代入されます。
また、Opoc1()ではローカル変数Bを宣言していないので大域変数B(=2)が参照されます。
その為、関数Opoc1()内ではローカル変数Aの値は5となります。
しかしながら、あくまでもローカル変数です。
「関数の中」だけで有効な変数という意味になります。
更にOpoc1()内で得られたAの値(=5)は、戻り値として呼び出し元ヘ返されていません。
そのためOpoc2()内の変数の値は何一つ変わらないのです。
関数Opoc1()内のローカル変数Aの値であれば、宣言時にA=3と代入されます。
また、Opoc1()ではローカル変数Bを宣言していないので大域変数B(=2)が参照されます。
その為、関数Opoc1()内ではローカル変数Aの値は5となります。
しかしながら、あくまでもローカル変数です。
「関数の中」だけで有効な変数という意味になります。
更にOpoc1()内で得られたAの値(=5)は、戻り値として呼び出し元ヘ返されていません。
そのためOpoc2()内の変数の値は何一つ変わらないのです。
2024.01.15 14:35
y4 kさん(No.14)
★FE ブロンズマイスター
KKさん
書き方を変えます。この例で言うなら
大域変数B 〇
Opoc2()内
A △
B □
A←A+B (△=△+□の操作です)
Opoc1()実行 詳細は後述
Z←A+B (Z=△+□の操作です)
Opoc1()内
A ◇
A←A+B (◇=◇+〇の操作です)
(そして呼び出し元へ◇を返していない)
という動きになります。つまり同じ名前でも別物になることを御理解ください。
書き方を変えます。この例で言うなら
大域変数B 〇
Opoc2()内
A △
B □
A←A+B (△=△+□の操作です)
Opoc1()実行 詳細は後述
Z←A+B (Z=△+□の操作です)
Opoc1()内
A ◇
A←A+B (◇=◇+〇の操作です)
(そして呼び出し元へ◇を返していない)
という動きになります。つまり同じ名前でも別物になることを御理解ください。
2024.01.15 14:59
KKさん(No.15)
y4 kさん
了解しました。ご教授ありがとうございました。
了解しました。ご教授ありがとうございました。
2024.01.15 21:52