【科目B】午後試験のアルゴリズムが全く分かりません

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
SUTさん  
(No.1)
来月2月に受験しようと思っている者です。
午前中の試験は過去問を繰り返し実施することで、過去問も大体7割弱から8割弱の正答率まで引き上げることが出来ましたので、引き続き過去問を繰り返し行い、不明な知識を参考書で補完しようと思っております。

が、問題なのが午後試験で、問題文を見てもさっぱり理解が出来ません。

簡単な問題であれば何となく問題文が意味することが分かるのですが、問題文とプログラムが何を書いてあるのか理解が出来ません。単方向リストや2次元配列等、単語としては聞いたことがある単語でも、問題文を見ると何が書いてあるのかさっぱりです。
公開されている以下のサンプル問題も試しに見てみたのですが、解説を見ても何をやっているのか分かりませんでした。

===============
手続 append は,引数で与えられた文字を単方向リストに追加する手続である。単方向リ
ストの各要素は,クラス ListElement を用いて表現する。クラス ListElement の説明を図に
示す。ListElement 型の変数はクラス ListElement のインスタンスの参照を格納するものと
する。大域変数 listHead は,単方向リストの先頭の要素の参照を格納する。リストが空の
ときは,listHead は未定義である。

〔プログラム〕
大域: ListElement: listHead ← 未定義の値
○append(文字型: qVal)
 ListElement: prev, curr
curr ← ListElement(qVal)
 if (listHead が a)
 listHead ← curr
else
 prev ← listHead
 while (prev.next が 未定義でない)
 prev ← prev.next
 endwhile
 prev.next ← b
endif
===============

来月受講予定ですが、正直受かる未来が見えません。
自身には向いていないのではないかとマイナスなことしか考えられません。

試験日を遅らせた方が良いのでしょうか?
皆さまはどのような形で勉強されているのでしょうか?

ちなみに今持っている参考書は以下の通りです。
・アルゴリズム×擬似言語  トレーニングブック
・栢木先生の基本情報技術者教室
・基本情報技術者パーフェクトラーニング予想問題集(令和05年)
2024.01.07 11:21
AJさん 
(No.2)
アルゴリズム問題は、基本的には数値代入かトレースが主体です。

あと指摘の問題は、リストの問題ですが、オブジェクト指向も理解していないとキツイと思います。具体的には、リストの図が書けるレベルじゃないと手も足も出ないかと思います。

おすすめの参考書としては、出るとこだけ!基本情報技術者科目Bです。リストやオブジェクト指向の基本と、図の書き方が詳しく書いてありますので、役に立ちます。
2024.01.07 11:36
ashlay23さん 
(No.3)
ひたすらトレースしたり、PCでプログラムを書いてみたり……。
最初の頃は1つの問題を理解するのに2日かかったりしましたが、段々と読めるようになりました。

アルゴリズムは数学的な側面が強いので、いつも同じ方法で解けるとは限らないのがネックですね。暗記があまり通用しない分野ですので、練習して勘と経験を養うしかないと思います。

本当にいつの間にかなんとなく分かってくるようになりますので、諦めずにがんばってください。
2024.01.07 17:10
まきさん 
(No.4)
>スレ主さん
私もアルゴリズムに関しては
紙で再現するしかないのかと今までやってきました経験でしかいえませんが

私の場合には基本が出来ていなかったので・・・
(勉強する前はソートって何というくらいでした)

①基礎的な本→科目Bの重点対策or出るとこだけ!基本情報技術者科目B
アルゴリズムというのはこんなことを学ばなければいけなかったと感じた本です。これを一字一句紙に何回も書いてトレースしてください。
3から4回は必須です
あと本の相性もあるのでどっちか選んだら1冊やり切ってください。

それができれば何も分からない状態は脱出できると思います
②その上で、
・演習・アルゴリズム×擬似言語  トレーニングブック
・基本情報技術者パーフェクトラーニング予想問題集(令和05年) 
  をしてください。

  午後はむやみに演習をしても点数は上がりません。
  やっていくうちにパターンがつかめると思います。一緒に頑張りましょう
2024.01.07 19:49
まきさん 
(No.5)
>スレ主さん
あと分からないところがあったらこの掲示板で聞けば答えてくれる方ばかりなので私みたいにいっぱい質問しましょう
2024.01.07 19:51
にぱーさん 
(No.6)
自分も単方向リストの問題かなり苦手でした。

地道に何度もトレースするのが一番の近道だと
思いますよ。

YouTubeなどでサンプル問題を解説している
動画もあるのでそれを視聴して学習するのも
いいと思います。
(自分も単方向リストの解説動画は何度も視聴しました)
2024.01.08 01:09
AJさん 
(No.7)
補足)

試験日を遅らせたほうが良いかとのことですが、一回は受けてみることをおすすめします。

内容を口外してはいけない決まりなので、アドバイスするのにも限界があります。

足らない部分は個人差が大きいので、一度受けたほうが対策しやすいと思います。
2024.01.09 00:06
u-ni-sonさん 
(No.8)
そのサンプル問題、私も最初全く理解できませんでした。ちなみに私は文系大学出で仕事でパソコンは使っていますがプログラムなどはド素人です。そんな私ですが去年ITパスと情報セキュリティマネジメントを続けて合格しまして、調子に乗って基本情報を受けようと勉強しているものです。で、そのサンプル問題ですが今では理解できるようになりました。私がお勧めするのはYouTubeの「やるかやられるかチャンネル」でその問題について懇切丁寧に解説しています。1回だけでは理解できないと思います。10回以上は見たんじゃないかな~そのチャンネルでも言ってましたが、そのサンプル問題は非常に難しいもののようです。なので、そんなに落ち込む必要もないと思いますよ。リストやらオブジェクトやらを仕事で使っているような人は簡単な問題かもしれませんが。リストって紙に印刷されるものだろー、くらいの知識の私が理解できるようになったのですからSUTさんも頑張ってください。あとお勧めのチャンネルは「文系でもわかる!IT勉強会」ですかね。お互い頑張りましょう!
2024.01.09 12:49
さとさとさん 
(No.9)
たまたま自分も復習したので、自分なりの解き方を載せます。参考になれば幸いです

○append(文字型: A)
 ListElement: prev, curr
curr ← ListElement(A)
 if (listHead が 未定義)
 listHead ← curr
  /上を図で示すと、List Head→【A|???】のような構造になります。
  設問にあるように  引数で与えられた文字を単方向リストに追加する手続  で、Aを単方向リストに追加するのが、この部分の処理です。
  大域変数?listHead?は,単方向リストの先頭の要素の参照を格納する。から、
  Aは先頭であるはずなので、???は未定義になります。(単方向リストの先頭は未定義と決まっているので)

else
?prev?←?listHead
  
  また、続くelseの処理は、List Head→何か→【A|未定義】  のような、List Head と 追加するAの間に何か違う文字を挟んでいる構造であると推測できます。
  prevは以前という意味なので、何か=prevということになります。

?while?(prev.next?が?未定義でない)
?prev?←?prev.next
?endwhile
?
  prev.nextが未定義でないというのは、
List Head→prev→prev.next→【A|未定義】という状態を意味しています。これは、prevとそれに続くprev.nextへと、未定義でない要素を順に巡回していき、Aを追加するための先頭(未定義の要素)を探しているためです。

prev.next?←?Curr

  そして、巡回の結果  先頭を探し当てたときに、A=Currを追加することで、プログラムが完了します。
2024.01.10 17:38
SUTさん  
(No.10)
ご確認が遅くなりすみませんでした。

>>AJさん
参考書の提供ありがとうございます。
早速購入して勉強を進めてます。中身もわかりやすく、トレースのやり方を少し理解できました!
結局試験ですが、今年の3月頭に一度受けてみることにしました!

>>ashlay23さん
ありがとうございます!
トレースを少しずつ取り入れるようにしたのですが、ちょっとずつ基本問題のプログラムが読めるようになりました!

>>まきさん
ありがとうございます。
出るとこだけ!基本情報技術者科目Bの基礎問題を今繰り返しトレースしながら解いてます。
まだ時間かかっており到底試験にはまだ通用するスピードではないのですが、書かれている内容が何となくわかるようになってきました。
まずはこのテキストを最後までやり切りたいと思います。
分からないことがあったらどんどん質問するようにします。

>>にぱーさん
ありがとうございます。
単方向リスト、上記問題は何度も解説を見てようやく納得できるようになりました。
テキストとYouTubeも確認しながら勉強を進めたいと思います。

>>u-ni-sonさん
ありがとうございます。
「やるかやられるかチャンネル」見てみました!
回答者の気持ちにもなってくれて内容がすっと入ってきました。
やはり解説者からしてもすごく難しい問題だったようですね…
この問題も解けるようになるために引き続き勉学に励みます!
「文系でもわかる!IT勉強会」も観てみます!

>>さとさとさん
ありがとうございます。
私の場合、単方向リストそのものがわかっていなかったので、
【A|???】のような構造になることが理解できていませんでした。
それに加えてオブジェクト指向が絡んだ表まで出てきて、この分は何が言いたいんだとずっと悩んでおりました。
さとさとさんやいろんな解説を見てやっと理解できました。

皆様本当に貴重なご意見、アドバイスの数々ありがとうございます!
また行き詰まったら質問しご迷惑をおかけしてしまうかもしれませんが、
その時は何卒よろしくお願いいたします。
2024.01.15 13:56
まきさん 
(No.11)
>スレ主さん
pythonとか簡単なPGでもいいので組む練習をするといいかと思います。
paizaラーニングでやればいいと思います。
私は大学時代にjavaをやっていたのでjavaを再度習いました。
2024.01.15 14:14
SUTさん  
(No.12)
>>まきさん
ありがとうございます。
paizaラーニングですね!調べてやってみます!
2024.01.17 13:13

返信投稿用フォーム

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

その他のスレッド


Pagetop