HOME»基本情報技術者試験掲示板»トレースができない
投稿する
トレースができない [4832]
AAさん(No.1)
科目Bの学習をはじめてはや、2カ月。
未だにトレースができません。
適当に数字を入れて解けません。
途中で訳がわからなくなってしまいます。
何かいい方法はありませんか。
未だにトレースができません。
適当に数字を入れて解けません。
途中で訳がわからなくなってしまいます。
何かいい方法はありませんか。
2023.05.09 17:07
Aさん(No.2)
持っていなければ、参考書代はかかると思いますが、出るとこだけ!基本情報技術者試験科目Bという参考書を自分はいいのではないかと思います。基礎となる考え方やトレースのやり方、
実践問題も掲載されておりますので、取り組みやすいと思います。それでもやり方が不明な部分を掲示板で質問をしてみるという方法が一番良いのはないかと思いますが…いかがでしょうか?
実践問題も掲載されておりますので、取り組みやすいと思います。それでもやり方が不明な部分を掲示板で質問をしてみるという方法が一番良いのはないかと思いますが…いかがでしょうか?
2023.05.09 21:30
まーぼさん(No.3)
★FE シルバーマイスター
どういう原因でできないのか、どの程度できないのかが判断しづらく説明に困ります。そのため、サンプル問題などでの具体的なあなたのトーレスの様子を見せていただければやりやすいです。
以下からは普遍的なアドバイスをします。
自身がプログラミングの基本の処理(順次、分岐、反復)の中でどれが一番苦手なのかを理解し、苦手なものを対策しましょう。おそらく、反復処理(for文やwhile文などを使う処理)を一番苦手としている人が多いと思うので、反復処理について私がどのようにして学習してきたかを説明しようと思います。
連結リストを例にして説明します。連結リストととは、各要素が値(変数名:valueとします)と次の要素のアドレスを格納する変数(変数名:nextとします)の2つのメンバ変数を持ち、1つ目の要素が2つ目の要素を指し、2つ目の要素が3つ目の要素を指していくような形で繋がっているリストでした。では、連結リストの最後の要素を取得するためにはどのようにすればいいでしょうか?
連結リストの最後の要素のnextの値は未定義でしたよね。ということは、「連結リストの最初の要素を変数に格納し、nextが未定義でない間 連結リストを順に辿る」ということを記述すれば良いわけです。
擬似言語で記述すると以下のようになります。
//コード開始
p (連結のリストの要素型の変数、簡単化のために宣言時にリストの先頭の要素で初期化されてるものとする。)
while(p.nextが未定義でない){
p = p.next
}
//コード終了
ここで、whileの条件式を(p.nextが未定義)のように書いてしまう人が結構います。このミスはwhileをifと別個と考えるのではなく、ifの拡張として考えると解消できます。
想定している処理はリストを選択から最後まで辿る処理でした。しかし、if(p.nextが未定義)とすると、リストの要素数が十分にあるとき、最初の要素はnextとして次の要素のアドレスが入ってますから未定義ではないため、if文は実行されません。ifをwhileに変えても1回も実行されないことが分かると思います。while文の条件に迷ったらwhileをif文にして考えてみて、想定通りの動作に繋がるかを確かめてください。
また、リストを辿る処理で、
p = p.next
と書きましたが、私はこの処理を考えているというよりむしろ覚えているお思います。なぜなら、これはよく使う処理だからです。これを覚える感覚は英語でイディオムを覚えるのに似ています。例えば、「見る」という単語を覚えるのに、lookとatを別に考えるのではなく、「look at」で「見る」なんだとかたまりで覚えるような感じです。プログラミングでの有名な処理は他にも、1からnまでの総和を求める、二変数の値を入れ替える(a = 2,b=5?a = 5,b=2のような処理)などがありますが、これらもかたまりで覚えてます。
長くなりましたが、まとめると
・自分が苦手としている処理をしっかり把握し、対策しよう。
・whileの条件式で迷ったらifに置き換えて考えてみよう。
・有名な処理、よく使う処理は覚えよう。
というような感じですかね。
自分なりに丁寧に説明したつもりですが、分かりづらかったらすみません。
以下からは普遍的なアドバイスをします。
自身がプログラミングの基本の処理(順次、分岐、反復)の中でどれが一番苦手なのかを理解し、苦手なものを対策しましょう。おそらく、反復処理(for文やwhile文などを使う処理)を一番苦手としている人が多いと思うので、反復処理について私がどのようにして学習してきたかを説明しようと思います。
連結リストを例にして説明します。連結リストととは、各要素が値(変数名:valueとします)と次の要素のアドレスを格納する変数(変数名:nextとします)の2つのメンバ変数を持ち、1つ目の要素が2つ目の要素を指し、2つ目の要素が3つ目の要素を指していくような形で繋がっているリストでした。では、連結リストの最後の要素を取得するためにはどのようにすればいいでしょうか?
連結リストの最後の要素のnextの値は未定義でしたよね。ということは、「連結リストの最初の要素を変数に格納し、nextが未定義でない間 連結リストを順に辿る」ということを記述すれば良いわけです。
擬似言語で記述すると以下のようになります。
//コード開始
p (連結のリストの要素型の変数、簡単化のために宣言時にリストの先頭の要素で初期化されてるものとする。)
while(p.nextが未定義でない){
p = p.next
}
//コード終了
ここで、whileの条件式を(p.nextが未定義)のように書いてしまう人が結構います。このミスはwhileをifと別個と考えるのではなく、ifの拡張として考えると解消できます。
想定している処理はリストを選択から最後まで辿る処理でした。しかし、if(p.nextが未定義)とすると、リストの要素数が十分にあるとき、最初の要素はnextとして次の要素のアドレスが入ってますから未定義ではないため、if文は実行されません。ifをwhileに変えても1回も実行されないことが分かると思います。while文の条件に迷ったらwhileをif文にして考えてみて、想定通りの動作に繋がるかを確かめてください。
また、リストを辿る処理で、
p = p.next
と書きましたが、私はこの処理を考えているというよりむしろ覚えているお思います。なぜなら、これはよく使う処理だからです。これを覚える感覚は英語でイディオムを覚えるのに似ています。例えば、「見る」という単語を覚えるのに、lookとatを別に考えるのではなく、「look at」で「見る」なんだとかたまりで覚えるような感じです。プログラミングでの有名な処理は他にも、1からnまでの総和を求める、二変数の値を入れ替える(a = 2,b=5?a = 5,b=2のような処理)などがありますが、これらもかたまりで覚えてます。
長くなりましたが、まとめると
・自分が苦手としている処理をしっかり把握し、対策しよう。
・whileの条件式で迷ったらifに置き換えて考えてみよう。
・有名な処理、よく使う処理は覚えよう。
というような感じですかね。
自分なりに丁寧に説明したつもりですが、分かりづらかったらすみません。
2023.05.10 01:52
AAさん(No.4)
Aさんありがとうございます!
参考書は一応、(うかる! 基本情報技術者 [科目B・アルゴリズム編]
うかる! 基本情報技術者 [科目B・セキュリティ編] 令和05年【上期】 基本情報技術者 パーフェクトラーニング予想問題集
かんたん合格 基本情報技術者予想問題集 令和5年度)はもっているのですが、中々理解できないままです。身近な人やこの場を有効活用して学習していきたいと思います。
ありがとうございます!
参考書は一応、(うかる! 基本情報技術者 [科目B・アルゴリズム編]
うかる! 基本情報技術者 [科目B・セキュリティ編] 令和05年【上期】 基本情報技術者 パーフェクトラーニング予想問題集
かんたん合格 基本情報技術者予想問題集 令和5年度)はもっているのですが、中々理解できないままです。身近な人やこの場を有効活用して学習していきたいと思います。
ありがとうございます!
2023.05.10 09:14
AAさん(No.5)
まーぼさんありがとうございます!
問題にはよく使う処理の傾向があるんですね。
いまいちつかめていなくて、、、(-_-;)
長々と説明してくださってうれしいです!ありがとうございます。
苦手を自己分析して、1つ1つ解決していけるように頑張りたいと思います。
返信してくださってありがとうございました。
合格に向けて頑張ります!!
問題にはよく使う処理の傾向があるんですね。
いまいちつかめていなくて、、、(-_-;)
長々と説明してくださってうれしいです!ありがとうございます。
苦手を自己分析して、1つ1つ解決していけるように頑張りたいと思います。
返信してくださってありがとうございました。
合格に向けて頑張ります!!
2023.05.10 09:18