平成31年春期 午後問11

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
ぱるさん  
(No.1)
設問2のソースコードの最後の行の
i = i < 2 ? 0 : i - 2;
ってどういった処理をしているんですか?
2021.07.20 15:05
GinSanaさん 
FE シルバーマイスター
(No.2)
この投稿は投稿者により削除されました。(2021.07.20 16:44)
2021.07.20 16:44
GinSanaさん 
FE シルバーマイスター
(No.3)
三項演算子なので、
i = i < 2 ?(なら) 0 :(でなければ) i - 2;
と読めます。
つまり、
if(i < 2){
i = 0;
} else {
i = i - 2;
}
と同じです。

2021.07.20 16:44
ずる休み中さん 
(No.4)
この投稿は投稿者により削除されました。(2021.07.20 16:52)
2021.07.20 16:52
かなさん 
FE ブロンズマイスター
(No.5)
初期状態
■■■■
■□■■
■□■■
■□■■
■□G■
■☆■■
■■■■

====================================

1. Piece piece = new Piece(maze)
2. while(!piece.isAtGoal()){
3. _____piece.turnLeft();
4. _____while(!piece.tryStepForward()){
5. __________piece.turnRight();
6. _____}
7. }

1行目でコマを作成し、Sに↑向きに配置。

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを←に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↑に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にNorthを追加。
[North]

■■■■
■□■■
■□■■
■□■■
■☆G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを←に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↑に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にNorthを追加。
[North, North]

■■■■
■□■■
■□■■
■☆■■
■□G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを←に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↑に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にNorthを追加。
[North, North, North]

■■■■
■□■■
■☆■■
■□■■
■□G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを←に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↑に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にNorthを追加。
[North, North, North, North]

■■■■
■☆■■
■□■■
■□■■
■□G■
■S■■
■■■■
2021.07.20 17:00
かなさん 
FE ブロンズマイスター
(No.6)
2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを←に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↑に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを→に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↓に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にSouthを追加。
[North, North, North, North, South]

■■■■
■□■■
■☆■■
■□■■
■□G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを→に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↓に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にSouthを追加。
[North, North, North, North, South, South]

■■■■
■□■■
■□■■
■☆■■
■□G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを→に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↓に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にSouthを追加。
[North, North, North, North, South, South, South]

■■■■
■□■■
■□■■
■□■■
■☆G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを→に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にEastを追加。
[North, North, North, North, South, South, South, East]

■■■■
■□■■
■□■■
■□■■
■□☆■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はfalse

迷路探索終了
[North, North, North, North, South, South, South, East]
2021.07.20 17:00
かなさん 
FE ブロンズマイスター
(No.7)
上記の探索が設問2コードなしバージョンです。

これに設問2のコードを追加すると、突き当りまで行って戻ったという記録を消して(remove)してくれるようになります。

つまり、[North, North, North, North, South, South, South, East]が[North, East]になるのです。

ここで注目しなければならないのが、NorthとSouthの組が1セットずつ消えているということです。

[North, North, North, North, South, South, South, East]
  0      1     2    3      4     5    6    7
から3つ目と4つ目が削除され、

[North, North, North, South, South, East]
  0      1     2     3     4    5

から2つ目と3つ目が削除され、

[North, North, South, East]
  0      1     2    3  

から1つ目と2つ目が削除され、

[North, East]
  0     1

になるのです。
2021.07.20 17:06
かなさん 
FE ブロンズマイスター
(No.8)
トレースしたように、要素3, 4を削除したあと、検索する要素を後退させる必要があるため、i = i < 2 ? 0 : i-2で検索要素番号を後退させているのです。
2021.07.20 17:28
ぱるさん  
(No.9)
理解できました。詳しく説明していただきありがとうございます
2021.07.21 15:03

返信投稿用フォーム

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

その他のスレッド


Pagetop