H26春  問題8

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
エヌマエリッシュさん  
(No.1)
なぜループでは変数k nを使うのに変数mが入るアが答えになるのでしょうか?誰か説明願います。
2019.08.10 10:47
てきとーさん 
(No.2)
変数kは配列の添字です。
この添字が、各配列のどこを表しているかがこの問題のポイントです。


具体例で考えるとわかりやすいです。
これは文字をつなげる処理なので、文字で考えてみます。

長さmの文字列:たらこ(3文字なのでm=3)
長さnの文字列:マヨネーズ(5文字なのでn=5)

配列X
要素:「た」「ら」「こ」
添字:「1」「2」「3」  ←変数k

配列Y
要素:「マ」「ヨ」「ネ」「ー」「ズ」
添字:「1」「2」「3」「4」「5」  ←これも変数k

配列Xの後ろに配列Yを連結して配列Zにするとありますから、処理後はこうなります。

配列Z
要素:「た」「ら」「こ」「マ」「ヨ」「ネ」「ー」「ズ」
添字:「1」「2」「3」「4」「5」「6」「7」「8」  ←この添字をどうやって表現するか、です


処理を進めながら、「出力=空っぽの配列Zに先頭から一つずつ要素を入れる」とイメージしてみてください。

実際の処理の流れを文字で表すと
ループ1開始
配列Xの1番目「た」を  配列Zの1番目に入れる k=1
配列Xの2番目「ら」を  配列Zの2番目に入れる k=2
配列Xの3番目「こ」を  配列Zの3番目に入れる k=3
ループ1終了
ループ2開始
配列Yの1番目「マ」を  配列Zの4番目(3+1)に入れる k=1←ココに注目
配列Yの2番目「ヨ」を  配列Zの5番目(3+2)に入れる k=2
配列Yの2番目「ネ」を  配列Zの6番目(3+3)に入れる k=3
...
と続きます。

ループ1が終わった時点で配列Zは配列Xの文字列の長さ(m=3)まで埋まりました。
ここから配列Zに要素を追加するので添字は4番目からになります。
そこで配列Yの添字(k)に配列Xの文字列の長さ(m)を足してずらしています。
これがZ(m+k)の意味です。

選択肢アを当てはめるとこうなります。
X(1) →  Z(1)
X(2) →  Z(2)
X(3) →  Z(3)
Y(1) →  Z(3+1)
Y(2) →  Z(3+2)
Y(3) →  Z(3+3)


随分長くなってしまって…すみません。
2019.08.10 11:37
エヌマエリッシュさん  
(No.3)
ありがとうございます。おかげで理解することができました。
2019.08.10 13:00

返信投稿用フォーム

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

その他のスレッド


Pagetop