【基本情報技術者試験科目B】サンプル問題全20問完全解説~Vol.2(問7~問12)
Vložit
- čas přidán 21. 08. 2024
- 「基本情報技術者試験7つの超速合格術」
科目B完全対応!合格メソッドを圧倒的なタイパとコスパでご提供します
masuyaplus.com...
---------------------------------------------------------------------------------------------
IPAのサイトにて2022年12月26日に公開された基本情報技術者試験科目Bのサンプル問題全20問を徹底解説します。専門講座やテキストにはない裏情報がある…かも。
解説は4つの動画に分かれています。Vol.2は問7~問12を解説します。
---関連動画-----------------------------------------------------------------------
【基本情報技術者試験科目B】サンプル問題全20問完全解説~Vol.4(問17~問20)
• 【基本情報技術者試験科目B】サンプル問題全2...
【基本情報技術者試験科目B】サンプル問題全20問完全解説~Vol.3(問13~問16)
• 【基本情報技術者試験科目B】サンプル問題全2...
【基本情報技術者試験科目B】サンプル問題全20問完全解説~Vol.1(問1~問6)
• 【基本情報技術者試験科目B】サンプル問題全2...
【改訂基本情報技術者試験】科目Bサンプル問題 超ゆるゆる解説(2022年4月25日公開全6問解説)
• 【基本情報技術者試験】科目Bサンプル問題 超...
【2023年4月改訂】基本情報技術者試験・情報セキュリティマネジメント試験の攻略ポイント
• 【2023年4月改訂】基本情報技術者試験・情...
---------------------------------------------------------------------------------------------
株式会社マスヤプラス 尖ったセミナーを真面目にやる会社
masuyaplus.com/
#基本情報技術者試験 #科目B #サンプル問題
マジで学校で聞くより圧倒的にわかりやすい笑
そう言っていただけてとても感謝です!
恐らくそれは、他の講師やCZcamsrとは違いゆるゆるな会話口調で緊張感がないからだと思いますwwまぁそれが私のウリなのですが(^_^;)
ご丁寧な解説ありがとうございます。
ご質問があります。
16:50
Q9の8を出力後、L3のorder(8)に戻り、その後L4でn=4が出力される理由がよく分かりません。
マトリックス表見ても、8はゼロですし8の親は4だからと言われれば何となく分かるのですが、プログラム上だけで見るとどのようにorder(8)だとn=4がくると判断されたのでしょうか。
n=4のときのプログラムを表すと
order(4)
if(tree[4]の要素数が2と等しい)
order(tree[4][1])
4を出力
order(tree[4][2])
tree[4][1]はマトリクスで見ると4行1列目なので8となり、order(tree[4][1])=order(8)です。order(8)の場合、tree[8]の要素数は2分木の末端要素なので2でも1でもなく0のためelse内の「8を出力」が実行されます。
order(tree[4][1])が「8を出力」となるため、上記プログラムを見るとその後は「4を出力」となります。
本日受けてきました。先生の動画のお陰で合格です。ありがとう(^.^)(-.-)(__)ございました‼️
合格おめでとうございます!いやー、こういったメッセージをいただけると、そのたびにチャンネル開設した甲斐があったと実感します。
ちなみに、当社の有料セミナーではさらに合格率が上がるメソッドをご提供しているのですが、そこまで至らずとも実力を伴っていた、って感じですねww
ご解説誠にありがとうございます! 一つ疑問があります。
ご解説の方法は、受験者が予めにある分野の予備知識持った前提上でタイトル付けしてから説明、との感じでした。
そこで質問ですが、基本情報技術者試験科目Bの出題される問題に対しての予備知識の種類はサンプル問題20問前後くらいで限られているのでしょうか?
予備知識もし果て無く出題されそうでしたら、勉強方法をもっと見直そうと思います。
全部動画見たわけではないですので、もし上記の点について別の動画などで説明されていましたら申し訳ありません。
詳しくは当社の基本情報技術者試験合格術で解説しておりますが、アルゴリズムとプログラミングはほぼほぼ出題される5種類の計算があり、それはサンプル問題に含まれています。
問題は時間です。20問もあると必ずハマる問題が現れるので、それをいかにスルーできるかが合格のカギとなります
こんばんは。未経験の独学でFEを勉強しているのですが、解説動画にはとても助けられております。
問10、というよりむしろ単方向リストについて質問かもしれませんが、「if (pos == 1) listHead ← listHead.next」は要するに、「先頭(一番目)の要素を削除して、先頭の次の要素(二番目の要素)を先頭の要素に代入する」というイメージだと思います。それでは、その後に続く三番目、四番目 … n番目の要素を、二番目、三番目 … (n-1)番目の要素へとずらす という処理は必要ないのでしょうか?
ご視聴ありがとうございます。
単方向リストはイメージされた通りです。
ずらす処理に関しては、リストを配列で管理しているわけではないので不要です。リスト間はnextという参照で管理しているので、例えば3番目の要素を削除した場合は、2番目の要素のnextが3番目から4番目に代わる処理だけで済みます。
ありがとうございます。
1時間後に試験なので良い結果が報告できるよう頑張ります。
ちなみに参考書は「いちばんやさしい〜」という奴ですが、先生の方が圧倒的に優しくわかりやすいです。結構優しくないし嘘を書いてる本でした。試験形式変更もあったので仕方ないと思うしかなかったですが。。。
先生、公式発表はまだですが、試験終了時の点数結果画面にて合格を確認いたしました🎉🎉
周りでFEを受ける人がいましたら、必ずやこのチャンネルをオススメいたします。
ありがとうございます。科目bの解説が参考書に一切無かったので、この合格は先生のおかげです。
未経験独学で1月勉強しただけで1発合格が出来たのはとても嬉しいです。
合格おめでとうございます!
多少なりとも動画がお役に立てたようで何よりですが、合格の根本的な要因はra Nakamu様の実力によるところだと思います。なにより、1か月で合格できるのはとてもスゴイことです👍
問9ですが、4回目の2が出力される理由がわかりません。
処理は3回目で終わるのではと思ってしまいます。
再帰構造のプログラムは面倒くさいですよねー。
8 4 9が出力されるのはorder[4]のときですが、order[4]ということはorder(tree[2][1])です。n=2のときにif文の中でorder(tree[2][1])が呼び出され8 4 9が出力されますがそこで終わらず、次の行「nを出力」が実行されるため、2が出力されることになります。
なお次の行は「order(tree[2][2])」で10 5 11が出力されます。
問9について本当に初歩的な質問で申し訳ないのですが、
15:15 で order(tree{1}{1})について、先生が「この{1}{1}はそれぞれマトリクスの行と列に対応していて行が1、列が1のところを見ると2になってますので...」と仰っていますが、{1}{1}のカッコの中の数字がマトリクスの行と列に対応しているというのはどこでわかるのでしょうか。
私は解いてる途中にorder{1}{1}を見た時点で、この文が何を表しているのかさっぱりわからなくなりました...。
マトリクスは、問題文中プログラムの最初にあるtreeの配列{{2,3},{4,5}…}に対応しています。おっしゃっている[1][1]は1行1列目で2。ちなみに、1行2列目([1][2])は3、2行1列目([2][1])は4、2行2列目([2][2])は5…てな具合です。
このような2次元配列の場合、行が{}単位で列が{}の中の数字単位です。つまり、1行目が{2,3}、2行目が{4,5}、1列目が2と4、2列目が3と5になります。
この問題は2次元配列に加え自身を呼び出す再帰構造にもなっているので、一度ハマるとドツボる可能性は高いですね😵
マトリックス図を書いて「○行目の○列目はこれ」って分かるのが問題の意図的に当たり前なんですかね?
問9について他の方の動画や解説では全く分からなかったのですが先生の解説でばっちりわかりました!ありがとうございます!ただ細かいところで申し訳ないですが二分木の読みは調べてみると「にぶんもく」ではなく「にぶんぎ」らしいです... おせっかいでしたらすみません。
動画がお役に立てたようでなによりです😊
数十年「にぶんもく」で誰にも指摘されなかったのでそれが正しいと思っていましたが「にぶんぎ」だったんですね!おせっかいどころか、長年の誤りを指摘いただきありがとうございます。
問10についてですが、答えはカとなっておりますが、ウも同様ではないかと思うのですが違うのでしょうか、、?
解答でprevベースで処理が進んでいくとありますが、elseの下のprev←listHeadでもlistHeadはそのまま生き続けていてprevと同じ所を参照しているのではないかと思ってしまいましたm(__)m
確かに、i=2のときはウも同様ですね。
ただ、listHeadはあくまでリストの先頭に固定されているメンバ変数なので、i=3,4,5…と増加した場合はそれに伴い次の要素に移動するprevでないと対応できません。
ちなみに、prev←listHeadは単にprevを初期化しているだけなので、listHead自体には何の変化もないですね。
これに関して質問です。
上記の処理で任意の位置の要素を削除出来るのは分かりましたが、仮にリストの要素数が4つで3番目の要素を削除した場合、prevが参照するのは2番目の要素になってしまう気がします。
そうなるとprev→2番目の要素→4番目の要素となって、1番目の要素まで消える気がするのですが違うのでしょうか?
解説ありがとうございます。問10についてなのですが、forの繰り返し処理が理解できないので解説頂けたら有り難いです🙇♂️🙇♂️
iはループを回すためだけに使われる変数です。
中身の『prev←prev.next』はリストの次へ次へと移動させる処理で、削除対象の位置(pos)の1つ手前であるpos-1まで移動させます。
最終的には、pos-1の次(pos)の次の要素を次の要素に上書きすることで結果的にposの位置の要素を削除しています。
分かりやすいご解説ありがとうございます。
そもそもオブジェクト指向型のプログラミング問題の内容が理解できないのですが、listelement型とはどういう意味でしょうか?整数型や文字型、文字列型は言葉通りなのでわかりやすいのですが...
またlistelementとprevやlistheadを:で繋げているのはどういう意味でしょうか?
クラスlistelementのなかにprevの説明がないので混乱してしまいました。
問題の冒頭で「クラスListelementは…」と言っているのでListelement型とは、この問題に限ったのクラスの型です。クラスとはフォルダみたいなもので、表にあるようにメンバ変数と呼ばれるいくつかの変数が格納されます。
そこで2つ目の質問に繋がるのですが、Listelement型の変数も「整数型:i」のように実際に変数名を定義しなければなりません。ご質問の「Llistelement: prev」・「Listelement: Listhead」というのは、「整数型:i」と同じように実際にプログラムで使用するListelement型の変数を定義している処理となります。
オブジェクト指向型のプログラミング問題の内容が理解できないと仰ったのですが、
科目Aの部分もオブジェクト指向型に関する質問が出てくるのです、ある程度理解しておいた方がいいです。
個人的に同じ受験勉強している意見として、
科目Bを先にある程度みて勉強でもいいですが、
科目Aの知識は結構科目Bにも応用してくるので、科目Aを先に勉強したほうがいいと思います。
@@Hy-go6dx
アドバイスありがとうございます!
難しかったんですが、5月に基本情報技術者試験合格できました!
ちなみにいまは応用情報技術者試験の勉強していますがめちゃくちゃ苦戦してます💦
問9なのですが、orderが再帰と気づけなくて、1回目の処理でnの出力で1を出力すると考えてしまいました。再帰というのはどこからわかるのでしょうか?
関数(この場合order)の中に同じ名前の関数が登場したら確実に再帰構造となります。
再帰構造を解析するコツのひとつとして、まず最初にとにかく最終到達点を確定することです。この場合は、1→2→4→8で8になりますね。
prevにはlistHeadしか入ってないと思うのですが、prev.next.nextは空じゃないのですか?そもそもprev=listHeadをしたら要素の1番目が消えてしまうと思うのですが。
おっしゃる通りprev←ListHeadの時点ではprevにはListHeadしか入っていません。prevはあくまでwork(作業用)の変数、言い換えると参照のコピーのようなものなので、prev←ListHeadの処理で要素の1番目が消えることはありません。
一方、nextは次の要素の参照となっているので、prevはコピーでもprev.nextは実際のリストの参照となります。分かりやすく言うと、最初のprevはListHeadと同じなので、コピー(prev)であろうと本物(ListHead)であろうと、次の要素の参照はListHead.nextになるということです。つまりprev.next.nextはprevが参照する要素の次の次の実際のリストの参照を指すことになります。
@@masuyaplus ListHeadはあくまでリストの先頭を意味していて、prev=ListHeadをするとリスト1番目の要素をprevに格納して、空いたリストの先頭を詰めていくのだと考えていたのですが。
prev=ListHeadは恐らくprev←ListHeadのことだと思われますが、前述したようにListHeadの参照をprevにコピーするイメージのwork処理なので、リスト自体には何の影響も与えません
私もこの辺分からなくて、ListHead.next.nextを選んで間違えました。解説を聞いて、そういうものなのかと思いましたが、難しいです。。
毎動画丁寧な解説ありがとうございます
質問です
処理の中で配列の要素番号を表している場合と配列の中身の値を表している場合の見分けがつきません。どうすれば見分けられるようになりますか?
例として問10の
bins[ date[ i ] ]←date [ i ] の部分とかです
回答お願いします
要素番号となるのは [ ] で囲まれた中身の数字だけ、それ以外は値と単純に考えた方が良いと思います。
bins[date[ i ]]←date[ i ]の場合二重構造になっているので分かりにくいですが、
・i ⇒ 要素番号
・date[ i ] ⇒ 左辺:要素番号、右辺:値
・bins[date[ i ]] ⇒ 値
となります。ネックとなるのはdate[ i ]ですが、xなどの単純な変数に置き換えれば bins[ x ]←x となり「x番目の要素にxを入れる」となるのが分かると思います。
こんばんは。
先日受験してきましたが、科目B合格得点でした。科目Aは油断してギリギリでしたが…
先生の動画で苦手意識が無くなり知識の整理ができました。これが一番大きかったです。違うチャンネルでいくつか解説動画はありますが、それらは淡々と解説される事でただ圧倒される感が強かったです。それで知識の定着効率が悪かった気がしました。しかし先生の動画は「なんだべ?」セリフなどこちらと一体感を持って解く感じが、基本情報との垣根を取り払ってくれました。
この問題の何が厄介なのか、近道なのか、非常に参考になりました。
(応用情報もアップして頂けると…)
ありがとうございました。
合格確定おめでとうございます!
本動画が多少なりともお役に立てたようでなによりです。私も勉強がてら他の方の動画を拝見することがありますが、高速で理路整然と話されているのを見ると、おっしゃる通り圧倒されることしばしばです(^_^;) なので、私のゆるゆるな感じが逆に無意識に差別化となっているようですねww
応用情報も本業の合間を縫って作成できれば思っております。
今後とも当チャンネルをよろしくお願いいたします。
科目bはサンプル問題さえ解ければ合格点とれるのでしょうか?
平均5分以内で解ければ合格率は高いと思います。科目Bの問題は時間制限さえなければたいてい解けるので、この5分というのが大事です。
問10で分からないです、、
1.List Head.nextは単一方向リストイメージのインスタンスになるのでしょうか?
2.削除のイメージは理解しましたが、
prev←ListHeadはイメージ図でいうとどうなるのでしょうか?
1.オブジェクト指向は概念的要素が多くイメージしにくいですが、List Head.nextはList Headの次の場所を示すデータ、つまりインスタンスの参照となります。
2.イメージ図…は割愛させていただきますが、prev←ListHeadは未定義のprevにListHeadで初期化する処理です。
余談ですが、この問題、valというメンバ変数を定義しておきながらプログラムでは一切しない微妙な問題かと思います。
@@masuyaplus 問10について質問なので、このスレッドで利用させていただきます。
問題自体の作りがおかしいじゃない?(もしくは自分の認識が違う)という質問になりますが、下記が質問:
関数内のListElement型のprevにListElementを格納した時点で、
関数内prevやprev.nextにどう変えようと、大域のlistHeadの中身は変わらないはずなんじゃないかという質問です。
まだ浅いですが、今まで開発で型についてを触ってきた経験でかなり異様に感じました。
それとも、基本情報技術者のプログラムになんか自分の知識と違うルールが入っているのでしょうか?
正直科目B簡単だと思うんですけど、
以前よりだいぶ簡単ですよね?
おっしゃる通り、旧午後試験に比べると1問1問の難易度はかなり低くなっていると思います。
ポイントは問題数です。20問もあると必ずハマる問題が出てきます。それを瞬時に見極めてスルーして確実に解ける問題を落とさないことが重要になります。
なんでcnt プラス1をが出てくるんですか?
求めていらっしゃる回答内容が2パターンあると思われるので2個解答いたします。
・「cnt←cnt+1」という表記は値を増加(インクリメント)させる定番処理で、矢印の右側を先に処理し、それをcntに上書きするという意味です。例えば、cntが3なら、3+1した値をcntに上書きするのでcntは4になります。
・問12のプログラムの中にある「cnt」はcountの略でいわゆる数を計測するカウンターです。この場合は、文字列s1とs2の中で文字とその位置が同じである個数をカウントしています。表の戻り値0.4の例だと、ifに当てはまるのは1番目のaと2番目のpなのでcnt=2となります。