【基本情報技術者試験科目B】サンプル問題全20問完全解説~Vol.2(問7~問12)

แชร์
ฝัง
  • เผยแพร่เมื่อ 30 พ.ย. 2024

ความคิดเห็น • 51

  • @harukid7426
    @harukid7426 9 หลายเดือนก่อน

    分かりやすいご解説ありがとうございます。
    そもそもオブジェクト指向型のプログラミング問題の内容が理解できないのですが、listelement型とはどういう意味でしょうか?整数型や文字型、文字列型は言葉通りなのでわかりやすいのですが...
    またlistelementとprevやlistheadを:で繋げているのはどういう意味でしょうか?
    クラスlistelementのなかにprevの説明がないので混乱してしまいました。

    • @masuyaplus
      @masuyaplus  9 หลายเดือนก่อน

      問題の冒頭で「クラスListelementは…」と言っているのでListelement型とは、この問題に限ったのクラスの型です。クラスとはフォルダみたいなもので、表にあるようにメンバ変数と呼ばれるいくつかの変数が格納されます。
      そこで2つ目の質問に繋がるのですが、Listelement型の変数も「整数型:i」のように実際に変数名を定義しなければなりません。ご質問の「Llistelement: prev」・「Listelement: Listhead」というのは、「整数型:i」と同じように実際にプログラムで使用するListelement型の変数を定義している処理となります。

    • @Hy-go6dx
      @Hy-go6dx 5 หลายเดือนก่อน

      オブジェクト指向型のプログラミング問題の内容が理解できないと仰ったのですが、
      科目Aの部分もオブジェクト指向型に関する質問が出てくるのです、ある程度理解しておいた方がいいです。
      個人的に同じ受験勉強している意見として、
      科目Bを先にある程度みて勉強でもいいですが、
      科目Aの知識は結構科目Bにも応用してくるので、科目Aを先に勉強したほうがいいと思います。

    • @harukid7426
      @harukid7426 5 หลายเดือนก่อน +1

      @@Hy-go6dx
      アドバイスありがとうございます!
      難しかったんですが、5月に基本情報技術者試験合格できました!
      ちなみにいまは応用情報技術者試験の勉強していますがめちゃくちゃ苦戦してます💦

  • @Hy-go6dx
    @Hy-go6dx 5 หลายเดือนก่อน

    ご解説誠にありがとうございます! 一つ疑問があります。
    ご解説の方法は、受験者が予めにある分野の予備知識持った前提上でタイトル付けしてから説明、との感じでした。
    そこで質問ですが、基本情報技術者試験科目Bの出題される問題に対しての予備知識の種類はサンプル問題20問前後くらいで限られているのでしょうか?
    予備知識もし果て無く出題されそうでしたら、勉強方法をもっと見直そうと思います。
    全部動画見たわけではないですので、もし上記の点について別の動画などで説明されていましたら申し訳ありません。

    • @masuyaplus
      @masuyaplus  5 หลายเดือนก่อน

      詳しくは当社の基本情報技術者試験合格術で解説しておりますが、アルゴリズムとプログラミングはほぼほぼ出題される5種類の計算があり、それはサンプル問題に含まれています。
      問題は時間です。20問もあると必ずハマる問題が現れるので、それをいかにスルーできるかが合格のカギとなります

  • @keishirokamata
    @keishirokamata 8 หลายเดือนก่อน

    解説ありがとうございます。問10についてなのですが、forの繰り返し処理が理解できないので解説頂けたら有り難いです🙇‍♂️🙇‍♂️

    • @masuyaplus
      @masuyaplus  8 หลายเดือนก่อน

      iはループを回すためだけに使われる変数です。
      中身の『prev←prev.next』はリストの次へ次へと移動させる処理で、削除対象の位置(pos)の1つ手前であるpos-1まで移動させます。
      最終的には、pos-1の次(pos)の次の要素を次の要素に上書きすることで結果的にposの位置の要素を削除しています。

  • @弊社-m9p
    @弊社-m9p ปีที่แล้ว +3

    問9について本当に初歩的な質問で申し訳ないのですが、
    15:15 で order(tree{1}{1})について、先生が「この{1}{1}はそれぞれマトリクスの行と列に対応していて行が1、列が1のところを見ると2になってますので...」と仰っていますが、{1}{1}のカッコの中の数字がマトリクスの行と列に対応しているというのはどこでわかるのでしょうか。
    私は解いてる途中にorder{1}{1}を見た時点で、この文が何を表しているのかさっぱりわからなくなりました...。

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +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次元配列に加え自身を呼び出す再帰構造にもなっているので、一度ハマるとドツボる可能性は高いですね😵

    • @とうもろこし-q1b
      @とうもろこし-q1b ปีที่แล้ว

      マトリックス図を書いて「○行目の○列目はこれ」って分かるのが問題の意図的に当たり前なんですかね?

  • @山田花子-k3u
    @山田花子-k3u ปีที่แล้ว +6

    ご丁寧な解説ありがとうございます。
    ご質問があります。
    16:50
    Q9の8を出力後、L3のorder(8)に戻り、その後L4でn=4が出力される理由がよく分かりません。
    マトリックス表見ても、8はゼロですし8の親は4だからと言われれば何となく分かるのですが、プログラム上だけで見るとどのようにorder(8)だとn=4がくると判断されたのでしょうか。

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +3

      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を出力」となります。

  • @misa2393
    @misa2393 ปีที่แล้ว +1

    問9なのですが、orderが再帰と気づけなくて、1回目の処理でnの出力で1を出力すると考えてしまいました。再帰というのはどこからわかるのでしょうか?

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว

      関数(この場合order)の中に同じ名前の関数が登場したら確実に再帰構造となります。
      再帰構造を解析するコツのひとつとして、まず最初にとにかく最終到達点を確定することです。この場合は、1→2→4→8で8になりますね。

  • @user-wi5ec5lz7f
    @user-wi5ec5lz7f ปีที่แล้ว +1

    問10についてですが、答えはカとなっておりますが、ウも同様ではないかと思うのですが違うのでしょうか、、?
    解答でprevベースで処理が進んでいくとありますが、elseの下のprev←listHeadでもlistHeadはそのまま生き続けていてprevと同じ所を参照しているのではないかと思ってしまいましたm(__)m

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว

      確かに、i=2のときはウも同様ですね。
      ただ、listHeadはあくまでリストの先頭に固定されているメンバ変数なので、i=3,4,5…と増加した場合はそれに伴い次の要素に移動するprevでないと対応できません。
      ちなみに、prev←listHeadは単にprevを初期化しているだけなので、listHead自体には何の変化もないですね。

    • @Anne_re_d
      @Anne_re_d ปีที่แล้ว

      これに関して質問です。
      上記の処理で任意の位置の要素を削除出来るのは分かりましたが、仮にリストの要素数が4つで3番目の要素を削除した場合、prevが参照するのは2番目の要素になってしまう気がします。
      そうなるとprev→2番目の要素→4番目の要素となって、1番目の要素まで消える気がするのですが違うのでしょうか?

  • @めーぷる-e1e
    @めーぷる-e1e ปีที่แล้ว +6

    マジで学校で聞くより圧倒的にわかりやすい笑

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +1

      そう言っていただけてとても感謝です!
      恐らくそれは、他の講師やTH-camrとは違いゆるゆるな会話口調で緊張感がないからだと思いますwwまぁそれが私のウリなのですが(^_^;)

  • @にょ-h3d
    @にょ-h3d ปีที่แล้ว +1

    科目bはサンプル問題さえ解ければ合格点とれるのでしょうか?

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว

      平均5分以内で解ければ合格率は高いと思います。科目Bの問題は時間制限さえなければたいてい解けるので、この5分というのが大事です。

  • @ToshI-hn7vn
    @ToshI-hn7vn ปีที่แล้ว +2

    prevにはlistHeadしか入ってないと思うのですが、prev.next.nextは空じゃないのですか?そもそもprev=listHeadをしたら要素の1番目が消えてしまうと思うのですが。

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +1

      おっしゃる通りprev←ListHeadの時点ではprevにはListHeadしか入っていません。prevはあくまでwork(作業用)の変数、言い換えると参照のコピーのようなものなので、prev←ListHeadの処理で要素の1番目が消えることはありません。
      一方、nextは次の要素の参照となっているので、prevはコピーでもprev.nextは実際のリストの参照となります。分かりやすく言うと、最初のprevはListHeadと同じなので、コピー(prev)であろうと本物(ListHead)であろうと、次の要素の参照はListHead.nextになるということです。つまりprev.next.nextはprevが参照する要素の次の次の実際のリストの参照を指すことになります。

    • @ToshI-hn7vn
      @ToshI-hn7vn ปีที่แล้ว +1

      @@masuyaplus ListHeadはあくまでリストの先頭を意味していて、prev=ListHeadをするとリスト1番目の要素をprevに格納して、空いたリストの先頭を詰めていくのだと考えていたのですが。

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว

      prev=ListHeadは恐らくprev←ListHeadのことだと思われますが、前述したようにListHeadの参照をprevにコピーするイメージのwork処理なので、リスト自体には何の影響も与えません

    • @mochhy6803
      @mochhy6803 9 หลายเดือนก่อน

      私もこの辺分からなくて、ListHead.next.nextを選んで間違えました。解説を聞いて、そういうものなのかと思いましたが、難しいです。。

  • @久保雅也不動産しゃちょー
    @久保雅也不動産しゃちょー ปีที่แล้ว +4

    問9ですが、4回目の2が出力される理由がわかりません。
    処理は3回目で終わるのではと思ってしまいます。

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +1

      再帰構造のプログラムは面倒くさいですよねー。
      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が出力されます。

  • @ranakamu3691
    @ranakamu3691 ปีที่แล้ว +2

    こんばんは。未経験の独学でFEを勉強しているのですが、解説動画にはとても助けられております。
    問10、というよりむしろ単方向リストについて質問かもしれませんが、「if (pos == 1) listHead ← listHead.next」は要するに、「先頭(一番目)の要素を削除して、先頭の次の要素(二番目の要素)を先頭の要素に代入する」というイメージだと思います。それでは、その後に続く三番目、四番目 … n番目の要素を、二番目、三番目 … (n-1)番目の要素へとずらす という処理は必要ないのでしょうか?

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +1

      ご視聴ありがとうございます。
      単方向リストはイメージされた通りです。
      ずらす処理に関しては、リストを配列で管理しているわけではないので不要です。リスト間はnextという参照で管理しているので、例えば3番目の要素を削除した場合は、2番目の要素のnextが3番目から4番目に代わる処理だけで済みます。

    • @ranakamu3691
      @ranakamu3691 ปีที่แล้ว

      ありがとうございます。
      1時間後に試験なので良い結果が報告できるよう頑張ります。
      ちなみに参考書は「いちばんやさしい〜」という奴ですが、先生の方が圧倒的に優しくわかりやすいです。結構優しくないし嘘を書いてる本でした。試験形式変更もあったので仕方ないと思うしかなかったですが。。。

    • @ranakamu3691
      @ranakamu3691 ปีที่แล้ว +2

      先生、公式発表はまだですが、試験終了時の点数結果画面にて合格を確認いたしました🎉🎉
      周りでFEを受ける人がいましたら、必ずやこのチャンネルをオススメいたします。
      ありがとうございます。科目bの解説が参考書に一切無かったので、この合格は先生のおかげです。
      未経験独学で1月勉強しただけで1発合格が出来たのはとても嬉しいです。

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว

      合格おめでとうございます!
      多少なりとも動画がお役に立てたようで何よりですが、合格の根本的な要因はra Nakamu様の実力によるところだと思います。なにより、1か月で合格できるのはとてもスゴイことです👍

  • @さっつん-t4l
    @さっつん-t4l ปีที่แล้ว

    問10で分からないです、、
    1.List Head.nextは単一方向リストイメージのインスタンスになるのでしょうか?
    2.削除のイメージは理解しましたが、
    prev←ListHeadはイメージ図でいうとどうなるのでしょうか?

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +1

      1.オブジェクト指向は概念的要素が多くイメージしにくいですが、List Head.nextはList Headの次の場所を示すデータ、つまりインスタンスの参照となります。
      2.イメージ図…は割愛させていただきますが、prev←ListHeadは未定義のprevにListHeadで初期化する処理です。
      余談ですが、この問題、valというメンバ変数を定義しておきながらプログラムでは一切しない微妙な問題かと思います。

    • @Hy-go6dx
      @Hy-go6dx 5 หลายเดือนก่อน

      @@masuyaplus 問10について質問なので、このスレッドで利用させていただきます。
      問題自体の作りがおかしいじゃない?(もしくは自分の認識が違う)という質問になりますが、下記が質問:
      関数内のListElement型のprevにListElementを格納した時点で、
      関数内prevやprev.nextにどう変えようと、大域のlistHeadの中身は変わらないはずなんじゃないかという質問です。
      まだ浅いですが、今まで開発で型についてを触ってきた経験でかなり異様に感じました。
      それとも、基本情報技術者のプログラムになんか自分の知識と違うルールが入っているのでしょうか?

  • @kahluamilk4525
    @kahluamilk4525 ปีที่แล้ว +1

    問9について他の方の動画や解説では全く分からなかったのですが先生の解説でばっちりわかりました!ありがとうございます!ただ細かいところで申し訳ないですが二分木の読みは調べてみると「にぶんもく」ではなく「にぶんぎ」らしいです... おせっかいでしたらすみません。

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +1

      動画がお役に立てたようでなによりです😊
      数十年「にぶんもく」で誰にも指摘されなかったのでそれが正しいと思っていましたが「にぶんぎ」だったんですね!おせっかいどころか、長年の誤りを指摘いただきありがとうございます。

  • @Kyo-us9bi
    @Kyo-us9bi ปีที่แล้ว

    毎動画丁寧な解説ありがとうございます
    質問です
    処理の中で配列の要素番号を表している場合と配列の中身の値を表している場合の見分けがつきません。どうすれば見分けられるようになりますか?
    例として問10の
    bins[ date[ i ] ]←date [ i ] の部分とかです
    回答お願いします

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว

      要素番号となるのは [ ] で囲まれた中身の数字だけ、それ以外は値と単純に考えた方が良いと思います。
      bins[date[ i ]]←date[ i ]の場合二重構造になっているので分かりにくいですが、
       ・i ⇒ 要素番号
       ・date[ i ] ⇒ 左辺:要素番号、右辺:値
       ・bins[date[ i ]] ⇒ 値
      となります。ネックとなるのはdate[ i ]ですが、xなどの単純な変数に置き換えれば bins[ x ]←x となり「x番目の要素にxを入れる」となるのが分かると思います。

  • @tecumdominus5842
    @tecumdominus5842 ปีที่แล้ว +8

    本日受けてきました。先生の動画のお陰で合格です。ありがとう(^.^)(-.-)(__)ございました‼️

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +3

      合格おめでとうございます!いやー、こういったメッセージをいただけると、そのたびにチャンネル開設した甲斐があったと実感します。
      ちなみに、当社の有料セミナーではさらに合格率が上がるメソッドをご提供しているのですが、そこまで至らずとも実力を伴っていた、って感じですねww

  • @第1空挺団-f1q
    @第1空挺団-f1q ปีที่แล้ว

    なんでcnt プラス1をが出てくるんですか?

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +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となります。

  • @pumpkins1161
    @pumpkins1161 ปีที่แล้ว

    正直科目B簡単だと思うんですけど、
    以前よりだいぶ簡単ですよね?

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว +3

      おっしゃる通り、旧午後試験に比べると1問1問の難易度はかなり低くなっていると思います。
      ポイントは問題数です。20問もあると必ずハマる問題が出てきます。それを瞬時に見極めてスルーして確実に解ける問題を落とさないことが重要になります。

  • @kemi8333
    @kemi8333 ปีที่แล้ว +2

    こんばんは。
    先日受験してきましたが、科目B合格得点でした。科目Aは油断してギリギリでしたが…
    先生の動画で苦手意識が無くなり知識の整理ができました。これが一番大きかったです。違うチャンネルでいくつか解説動画はありますが、それらは淡々と解説される事でただ圧倒される感が強かったです。それで知識の定着効率が悪かった気がしました。しかし先生の動画は「なんだべ?」セリフなどこちらと一体感を持って解く感じが、基本情報との垣根を取り払ってくれました。
    この問題の何が厄介なのか、近道なのか、非常に参考になりました。
    (応用情報もアップして頂けると…)
    ありがとうございました。

    • @masuyaplus
      @masuyaplus  ปีที่แล้ว

      合格確定おめでとうございます!
      本動画が多少なりともお役に立てたようでなによりです。私も勉強がてら他の方の動画を拝見することがありますが、高速で理路整然と話されているのを見ると、おっしゃる通り圧倒されることしばしばです(^_^;) なので、私のゆるゆるな感じが逆に無意識に差別化となっているようですねww
      応用情報も本業の合間を縫って作成できれば思っております。
      今後とも当チャンネルをよろしくお願いいたします。