HOME»基本情報技術者試験掲示板»平成30秋午後問8設問3e
投稿する
平成30秋午後問8設問3e [3384]
すずきさん(No.1)
問8の計算処理の部分で質問です.
2×(-1)の場合,最初の繰り返しでipに1が入り,
0×-1の結果をValue[1]に格納
そのあとに最後の繰り返し処理を行うと,
ip+1, i<Opcnt, 1 が,2, i<2, 1
になり実行されないのではないかと思うのですが,
何か考え方が間違っているのでしょうか.
2×(-1)の場合,最初の繰り返しでipに1が入り,
0×-1の結果をValue[1]に格納
そのあとに最後の繰り返し処理を行うと,
ip+1, i<Opcnt, 1 が,2, i<2, 1
になり実行されないのではないかと思うのですが,
何か考え方が間違っているのでしょうか.
2021.06.10 03:03
こだまさん(No.2)
すずきさん
正しいです。
ここで間違えているのではないかと思います。
ipに1が入っているとき、chrには Operator[1]='-'が入ります。
したがって、0-1の結果がValue[1]に格納されます。
これで正しいです。
i:ip+1, i<Opcnt, 1 のループは一度も実行されません。
(実行されなくてよい理由)
2×(-1)では演算の優先度が昇順(左から右に大きくなっていく)に並んでいます。
この場合式のいちばん右から順に演算していけばよいので要素を左詰めする必要がなく、
ループが実行されなくても演算処理が正常に終了します。
以下、私がトレースした際のメモです。
何かの参考になれば幸いです。
---
○OpCnt=2のとき
ip←0
●i:1, i<OpCnt(=2), 1 のループ
・i=1のとき
Priority[0]<Priority[1] (2<11)なので
ip←1
・i=2はi<OpCntを満たさないのでループ終了
chr←Operator[1] = '-'
chr = '-' なので
Value[1] = Value[0]-Value[1] = 0-1 = -1
ここでValue[] = [2,-1,...]となる
●i:ip+1(=2), i<OpCnt(=2), 1 のループ
・i=2はi<OpCntを満たさないのでループ終了
OpCnt←OpCnt-1 = 1
○OpCnt=1のとき
ip←0
●i:1, i<OpCnt(=1), 1 のループ
・i=1はi<OpCntを満たさないのでループ終了
chr←Operator[0] = '×'
chr = '×' なので
Value[0] = Value[0]×Value[1] = 2 × -1 = -2
ここでValue[] = [-2,...]となる
●i:ip+1(=1), i<OpCnt(=1), 1 のループ
・i=1はi<OpCntを満たさないのでループ終了
OpCnt←OpCnt-1 = 0
OpCnt > 0 を満たさなくなったのでループ終了
Value[0] = -2 を計算結果としてreturn
>> 2×(-1)の場合,最初の繰り返しでipに1が入り,
正しいです。
>> 0×-1の結果をValue[1]に格納
ここで間違えているのではないかと思います。
ipに1が入っているとき、chrには Operator[1]='-'が入ります。
したがって、0-1の結果がValue[1]に格納されます。
>> そのあとに最後の繰り返し処理を行うと,
>> ip+1, i<Opcnt, 1 が,2, i<2, 1
>> になり実行されないのではないかと思うのですが,
これで正しいです。
i:ip+1, i<Opcnt, 1 のループは一度も実行されません。
(実行されなくてよい理由)
2×(-1)では演算の優先度が昇順(左から右に大きくなっていく)に並んでいます。
この場合式のいちばん右から順に演算していけばよいので要素を左詰めする必要がなく、
ループが実行されなくても演算処理が正常に終了します。
以下、私がトレースした際のメモです。
何かの参考になれば幸いです。
---
○OpCnt=2のとき
ip←0
●i:1, i<OpCnt(=2), 1 のループ
・i=1のとき
Priority[0]<Priority[1] (2<11)なので
ip←1
・i=2はi<OpCntを満たさないのでループ終了
chr←Operator[1] = '-'
chr = '-' なので
Value[1] = Value[0]-Value[1] = 0-1 = -1
ここでValue[] = [2,-1,...]となる
●i:ip+1(=2), i<OpCnt(=2), 1 のループ
・i=2はi<OpCntを満たさないのでループ終了
OpCnt←OpCnt-1 = 1
○OpCnt=1のとき
ip←0
●i:1, i<OpCnt(=1), 1 のループ
・i=1はi<OpCntを満たさないのでループ終了
chr←Operator[0] = '×'
chr = '×' なので
Value[0] = Value[0]×Value[1] = 2 × -1 = -2
ここでValue[] = [-2,...]となる
●i:ip+1(=1), i<OpCnt(=1), 1 のループ
・i=1はi<OpCntを満たさないのでループ終了
OpCnt←OpCnt-1 = 0
OpCnt > 0 を満たさなくなったのでループ終了
Value[0] = -2 を計算結果としてreturn
2021.06.10 05:07
すずきさん(No.3)
ご丁寧な解説ありがとうございます,理解できました!
2021.06.10 16:45