練習 3(提出プログラム名:p1303a.c)
まず,このプログラム(p1303a.c)をダウンロードしなさい.
p1303a.c では PLAYER という構造体を定義しており,この構造体は X-Y 平面上を移動する
ゲームのプレイヤーを表している.
構造体のメンバは
name と x と y
の 3 つであり,name がプレイヤーの名前,x と y はそのプレイヤーの現在地(座標)である.
p1303a.c では MAX 人分(MAX はマクロとして定義してある)のプレイヤー情報(名前と位置座標)をファイルから読み込み,
各自の近くに位置している他のプレイヤーの名前を表示させようとしているが未完成となっている.
関数 print_neighbor を編集してこれを完成させなさい.
【関数 print_neighbor の仕様】
■ 引数 a[ ] :全プレイヤーの情報が入った配列
■ 引数 k :注目しているプレイヤーの配列内での添字
(つまり,注目しているプレイヤーの情報は a[k] となる)
■ 動作内容:
a[k] に該当するプレイヤーの近くにいる他のプレイヤーの名前を表示する(実行例を参照).
ただし,ここでいう「近くにいる」とは,両者の x 座標の差を dx, y 座標の差を dy としたとき,
dx*dx + dy*dy < 10 が成立する場合をいう.(自分自身を誤って表示させないこと)
【注意】
ここでは添字が違っていれば別人と考えてよい(つまり i != k ならば,a[i] と a[k] は別人)
また,main 関数の内容は一切変更しないこと.
- 【プログラムの実行例】(その1)※赤字は実行時にキーボードから入力する内容
(データファイル data1303a1.txt はここから入手)
データファイル名を入力してください:data1303a1.txt データファイルから 6 人分のデータを読み込みました.⏎ ⏎ aman さんの近くにいる人(たち):shiro さん;⏎ taro さんの近くにいる人(たち):saburo さん; goro さん;⏎ jiro さんの近くにいる人(たち):⏎ saburo さんの近くにいる人(たち):taro さん; goro さん;⏎ shiro さんの近くにいる人(たち):aman さん;⏎ goro さんの近くにいる人(たち):taro さん; saburo さん;⏎
- 【プログラムの実行例】(その2)※赤字は実行時にキーボードから入力する内容
(データファイル data1303a2.txt はここから入手)
データファイル名を入力してください:data1303a2.txt データファイルから 6 人分のデータを読み込みました.⏎ ⏎ aman さんの近くにいる人(たち):shiro さん; goro さん;⏎ taro さんの近くにいる人(たち):saburo さん;⏎ jiro さんの近くにいる人(たち):⏎ saburo さんの近くにいる人(たち):taro さん;⏎ shiro さんの近くにいる人(たち):aman さん; goro さん;⏎ goro さんの近くにいる人(たち):aman さん; shiro さん;⏎
【過去にあったミス(減点となり,やり直しを命じられる)】
■ 2 種類の実行例を確認せずに提出してしまっている.
(例1)本人を近くにいる人として表示させてしまっている.
(例2)位置座標が重なっている場合(実行例その2の aman と goro)について,うまく表示できていない.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
← [ 練習 2 (p1302a.c) ]
ミスが無いことを確認したら次の問題へ → [ 練習 4 (p1304a.c) ]