HOME»基本情報技術者試験掲示板»平成30秋午後問8設問3e

基本情報技術者試験掲示板

掲示板検索:

[3384]平成30秋午後問8設問3e

 すずきさん(No.1) 
問8の計算処理の部分で質問です.
2×(-1)の場合,最初の繰り返しでipに1が入り,
0×-1の結果をValue[1]に格納
そのあとに最後の繰り返し処理を行うと,
ip+1, i<Opcnt, 1 が,2, i<2, 1
になり実行されないのではないかと思うのですが,
何か考え方が間違っているのでしょうか.
2021.06.10 03:03
こだまさん(No.2) 
すずきさん

>> 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

【返信投稿用フォーム】

お名前(10文字以内)

顔アイコン


本文(2,000文字以内)

投稿削除用のパスワード(20文字以内)

プレビュー
※CBT方式においては出題内容の公開は禁止されているため、出題内容を尋ねたり、出題内容を特定できる類の投稿を禁止します。
※宣伝や迷惑行為を防止するため、当サイトとIPAサイト以外のURLを含む文章の投稿は禁止されています。

投稿記事削除用フォーム

投稿No. パスワード 
© 2010-2021 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop