基本情報技術者科目Bの問題  質問  

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
ポイさん  
(No.1)
基本情報技術者試験に向けて勉強中の者です。

基本情報技術者試験  令和元年秋  午前問9  改題  の問題の解き方について

配列aが図1の状態で、プログラムを実行すると配列bの図2になる)という問題です。
プログラム
1:整数:i,j
2:for(iを0から7まで1ずつ増やす)
3:  for(jを0から7まで1ずつ増やす)
4:※回答群から選ぶ
5:   endfor
6:endfor

トレース表を書いてみようと思い順番に書いていきました。
2:for(iを0から7まで1ずつ増やす)
3:  for(jを0から7まで1ずつ増やす)
4:※回答群から選ぶ
2:for(iを0から7まで1ずつ増やす)・・・

本の解説には、
2:for(iを0から7まで1ずつ増やす)
3:  for(jを0から7まで1ずつ増やす)
4:※回答群から選ぶ
3:  for(jを0から7まで1ずつ増やす)・・・

と書かれており、4:の後はどうして(2からではなく3からなのか?)と不思議に思いました。

ココに書いている時に3:  for(jを0から7まで1ずつ増やす)・・・
                        ↑ココのスペースが5:  endforに対応していてなのかな?と考えましたが。

お時間ある時に、トレース表についてご教授いただけたらと思います。
2023.06.08 15:43
電タックさん 
FE ブロンズマイスター
(No.2)
求められているものになっているか分かりませんが
本の解説には、
「4:※回答群から選ぶ」後の「3:  for(jを0から7まで1ずつ増やす)・・・」は「5:   endfor」に対応しています。

プログラムは囲われている(カッコやループ)場合内側から解決していきます。
※ループの終わりは「ループ処理行の最後」では無く「ループの継続条件が否定される時」になります。

「■A」が最も内側
4:※回答群から選ぶ

「■B」がその外側
3:  for(jを0から7まで1ずつ増やす)
5:   endfor

「■C」がその外側
2:for(iを0から7まで1ずつ増やす)
6:endfor

実際ここまで細かくしなくても良いかもしれませんが、ループ処理は数式みたいに表現できるかもしれません。
{■A×■B}×■C
■Aがjループで7回処理され、その一連の処理がiループで7回処理される。
※回数だけであれば、■Aの実行回数は49回です。

>{■A×■B}は一連の塊なので■abと置き換えれば
■ab×■Cとなって■abをiループで7回処理するみたいに見ることも出来ます。

こうすると
iが0の時に■abを実行。
iが1の時に■abを実行。
iがxの時に■abを実行・・・
という感じでいくらか見やすいです。

最後に2重ループはExcelのセルが視覚的にはわかりやすいです
iループとjループを各[i-j]セルで表せば
[0-0][0-1][0-2][0-3][0-4][0-5][0-6]
[1-0][1-1][1-2][1-3][1-4][1-5][1-6]
[x-0][x-1][x-2]...
と見えてこちらはトレースのイメージに近いかもしれません。
2023.06.08 17:42
なおまるさん 
(No.3)
ループ2が完了していないからです。

まず、ループ1に入ります。
この時、i = 0 です。

次にループ2に入ります。
この時、i = 0、j = 0 です。

次に[ a ]の処理を行います。

[ a ]の処理後、jは7まで1ずつ増えるので、
i = 0(据え置きのまま)
j = 0 → j = 1 → j = 2 → j = 3 → j = 4 → j = 5 → j = 6 → j = 7
と、いう感じに j が 7 まで増え、その度に[ a ]の処理を行います。
(この時、i は ループ2からはまだ抜けていないので 0 のままです。)
j = 8 になるとループ2のfor文はFalseとなるので終了し、ループ1に戻ります。

ループ1に戻り、i = 1 になります。
そのあとは上記の流れを繰り返します。


流れとしては、

i = 0(据え置きのまま)
j = 0 → j = 1 → j = 2 → j = 3 → j = 4 → j = 5 → j = 6 → j = 7

i = 1(据え置きのまま)
j = 0 → j = 1 → j = 2 → j = 3 → j = 4 → j = 5 → j = 6 → j = 7

i = 2(据え置きのまま)
j = 0 → j = 1 → j = 2 → j = 3 → j = 4 → j = 5 → j = 6 → j = 7

(省略)

i = 6(据え置きのまま)
j = 0 → j = 1 → j = 2 → j = 3 → j = 4 → j = 5 → j = 6 → j = 7

i = 7(据え置きのまま)
j = 0 → j = 1 → j = 2 → j = 3 → j = 4 → j = 5 → j = 6 → j = 7


という順番です。
2023.06.08 19:51
boyonboyonさん 
FE シルバーマイスター
(No.4)
プログラム
1:整数:i,j
2:for(iを0から7まで1ずつ増やす)
3:  for(jを0から7まで1ずつ増やす)
4:※回答群から選ぶ
5:   endfor
6:endfor

を分解すると

2:for(iを0から7まで1ずつ増やす)
******
6:endfor
とは、

まず、i=0にして
3:  for(jを0から7まで1ずつ増やす)
4:※回答群から選ぶ
5:   endfor
を実行します。
次に、i=1にして
3:  for(jを0から7まで1ずつ増やす)
4:※回答群から選ぶ
5:   endfor
を実行します。
次に、i=2にして
3:  for(jを0から7まで1ずつ増やす)
4:※回答群から選ぶ
5:   endfor
を実行します。
・・・・・
最後に、i=7にして
3:  for(jを0から7まで1ずつ増やす)
4:※回答群から選ぶ
5:   endfor
を実行します。
3:4:5:のかたまりをiを変えて、8回繰り返します。

ここに出てくる、3:4:5:のかたまりは、下記のような処理になります。


3:  for(jを0から7まで1ずつ増やす)
4:※回答群から選ぶ
5:   endfor

まず、j=0にして
4:※回答群から選ぶ
を実行します。
次に、j=1にして
4:※回答群から選ぶ
を実行します。
・・・・・・・
最後に、j=7にして
4:※回答群から選ぶ
を実行します。
こちらでは、4:※回答群から選ぶ  が8回繰り返されます。

4:※回答群から選ぶ  の処理は、i,jを変えながら64回実行されます。
2023.06.08 22:34
ポイさん  
(No.5)
なるほど!とても分かりやすい解説をありがとうございます。
「ループすること・64回通りあること」の言葉から理解でき、問題を解くことができました!
3人の方、お忙しい中ご丁寧な解説をありがとうございました。助かりました。

まだ基本情報技術者の勉強を始めたばかりで、少し捻った問題・本に載っていないことがあると理解に苦しみます。
色々と調べたり、自分で考えたりはもちろんしますが、また分からないことがあれば教えていただけたら嬉しいです。
ありがとうございました。またよろしくお願いします。
2023.06.09 13:11
えださまさん 
(No.6)
ポイさん
他の方の丁寧な解説はその通りで文句はないのですが、1分で解ける問題です。

A{0,6}→B{6,7}
A{3,4}→B{4,4}
の位置に移動しているので、この2つの要素を満たすのは
B[j,7-i]←A[i,j]
になります。
図1図2と解答群だけで答えが求めれます。

丁寧にトレースするのは素晴らしいと思いますが、時間を使わなくても解ける問題もあったりします。
2023.06.10 22:57
ポイさん  
(No.7)
えださまさん
コメントいただき、ありがとうございます。そうですよね。
今、1から10まで丁寧にやって莫大な時間がかかっています。
これでは試験当日はダメだな〜と思いますが、ココまで丁寧にしないと解けていない・理解していない現状でもあります。
情けない者ですね。

とにかく何問も解きながら、時間を使わずとも解ける問題を見極め、
今学んでいる型を守破離して最短で的確な型を自分に身に付けたいと思います。

またよろしくお願いします。
2023.06.12 14:23

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop