大原本 練習38 魔方陣のアルゴリズム

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
jjon-comさん  
FE ゴールドマイスター
(No.1)
(この書き込みは質問ではありません。情報提供です)

このサイトの掲示板で
基本情報技術者[科目B]アルゴリズムとプログラミング トレーニング問題集 第2版 (大原出版)
に掲載されている「練習38 魔方陣のアルゴリズム」についてのご質問に対応した際,私自身が疑問に思った点があったので大原出版に問い合わせをしてみました。
同じ疑問を持つ人がいるかもしれないので,大原出版からの回答をご紹介しておきます。

●p.51の擬似言語(該当箇所のみ抜粋)
if (((iがnより大きい) and (jがnより大きい))
    or (a[i,j]が0と等しくない))
  i←(1)
  j←(2)
else if (iがnより大きい)
  (3)
else if (jがnより大きい)
  (4)
endif

●私から大原出版への指摘
★1の判定と同じ位置に★4の判定を書くと、
a[i,j]が配列の範囲外を参照してしまう。
★1 ★2 ★3を範囲検査をすべて終えた後で
★4の判定をおこなうこと。正しいコードは以下のとおり。

if ((iがnより大きい) and (jがnより大きい))  //★1
  i←(1)
  j←(2)
else if (iがnより大きい)  //★2
  (3)
else if (jがnより大きい)  //★3
  (4)
else if (a[i,j]が0と等しくない)  //★4
  i←(1)
  j←(2)
endif

●大原出版からの回答
お問い合わせいただいた件につきましては、誤りではございません。
この問題では、二次元配列aは呼出し元で宣言されていると
考えることができます。
呼出し元から副プログラムmagic_squareを呼び出す際、
二次元配列の行数(列数)を引数nに渡しますが、nに渡す
値を3、5、7などと変えることにより、様々なサイズに対応
できるように、二次元配列aは、3×3のような決め打ちでは
なく、大きなサイズで宣言されているとお考え下さい。
2024.04.24 10:53

返信投稿用フォーム

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

その他のスレッド


Pagetop