ขนาดวิดีโอ: 1280 X 720853 X 480640 X 360
แสดงแผงควบคุมโปรแกรมเล่น
เล่นอัตโนมัติ
เล่นใหม่
⚠学習前にご確認ください!・誤りがあった場合に概要欄で訂正している場合があります。動画におかしな点があった場合、まずは概要欄のご確認をお願いします。・動画で投影している教材は、本動画の概要欄からさいとうの公式LINEに登録頂くと無料でダウンロードできます! ※概要欄で訂正している内容が反映されたものをダウンロードできます。
1月に基本情報受験し、先日合格証書が届きました!さいとうさんのチャンネルは、初学者の私にとって大変有難い存在でした。科目Bが解けるようになったのはさいとうさんのたくさんの動画のおかげです。本当にありがとうございました!!
合格おめでとうございます!!
何をやっても理解できなかったのですが、この動画のおかげで、科目Bの理解ができるようになって無事合格できました😭本当にありがとうございました!
基本情報合格できました。科目Bに苦戦していたところ、こちらのチャンネルと出会い、問題が解けるようになりました!本当にありがとうございました!
この動画のおかげで、教科書だと何いっているのか分からなかったオブジェクト指向が解けるようになりました!本当にありがとうございます!!
コメントありがとうございます!よかったです!
本日試験を受けて無事合格しました。科目Bに関してはさいとうさんのおかげです。ありがとうございました。
合格おめでとうございます!
先日、受験して科目Aが745点、科目Bが650点で合格しました。さいとう先生の講義のおかげです!本当にありがとうございました!
本日B科目、715点で合格点に達する事が出来ました!!!さいとうさんの数多の動画を繰り返し視聴したから合格できました!本当にありがとうございます😊
基本情報技術者試験合格できました。難しい問題、何度も見させていただきました。ありがとございました。
本日4回目で科目B試験受けたのですがやっと660点で合格しました😭本当にチャンネルのすべての動画を何度も見返して学校で理解できなかったことほとんど理解できました。感謝しかないです。これからも頑張ってください!!
本動画のおかげで合格しました。ありがとうございます
合格おめでとうございます!!またThanksありがとうございます!より良いチャンネル運営に利用させていただきます!
今日受験して科目A690、科目B600でなんとか合格できそうです!先生のおかげです!ありがとうございます !!
試験お疲れ様でした!合格点到達おめでとうございます!Thanksありがとうございます!より良いTH-camチャンネル運営に使わせていただきます。
もうすぐ受験を控えており、大変勉強になりました。ありがとうございます!正答率7割ぐらいと悪くなかったので、残り期間精度上げていきます!!
コメントありがとうございます!勉強頑張ってください!
1問目 14:272問目 21:453問目 37:204問目44:475問目 48:106問目 52:067問目 59:508問目 1:10:149問目 1:21:3310問目 1:34:50
今日基本情報受けまして評価点はAとB 共に700越えました。余程のことがない限り合格していると思います。アルゴリズムで稼ぐことができたと思うので助かりました。ありがとうございました!
試験お疲れ様でした!合格ライン到達おめでとうございます!
質問しても良いですか?先生のおかげで苦手だったリストが分かるようになってきました。とても感謝しております。その中でひとつ疑問です。問題7 1:08:37双方向リストの追加の問題です。解にあたる部分ですが、insert element(リストに追加したい値)を、element.previousElementに入れることで、追加するinsertElementの1つ前のリストの、次の要素へのリンクを書き換えるとあります。『追加するinsertElementの1つ前のリストの、【次の要素へのリンク】を書き換え』と言われると、何となくinsert elementの値を、選択肢イの『element.previousElement.nextElement』を選びたくなり、私はイを選んでしまいました。イがダメな理由は、element.previousElement.nextElementが表す数字が、図の表で言う、【9】を示しているということでしょうか。
質問ありがとうございます!(イ) element.previousElement.nextElementこちらは「値7を持つ要素」の「次の要素がどこかを指すリンク」になるので、おっしゃる通り 1:08:37 で解説しているタイミングでいうと「値9を持つ要素」を指します。
本日受験してまいりました。合格基準得点を超えることができたので受かったかと思います!科目Bの対策で詰まっている時にとても助けられました。大変お世話になりました!
合格点到達おめでとうございます!!
@@itgakko ありがとうございます!!応用情報技術者試験の対策動画をあげられる予定はございますか?是非さいとうさんの説明を聞きながら勉強したいと思っております。(まだ勉強していないので、動画が作れるような内容なのかは分かりませんが…。)
応用情報は対策動画の予定はないですね!勉強法とかならあげるかもしれませんが、それも時期未定です。
@@itgakko かしこまりました!わざわざお返事有難うございます。
いつも勉強させていただいています!問6について質問なのですが、こちらは(ア)も正解になるのではないでしょうか?エッジを(i,j)と表現し、jを1からi まで増やすとしてi=1:(1,1)→i=jなので×、内側のfor文離脱i=2:(2,1) ※(2,2)で内側のfor文離脱i=3:(3,1)(3,2) ※(3,3)で内側のfor文離脱i=4:(4,1)(4,2)(4,3) ※(4,4)で内側のfor文離脱i=5:(5,1)(5,2)(5,3)(5,4) ※(5,5)で内側のfor文離脱i=6:(6,1)(6,2)(6,3)(6,4)(6,5) ※(6,6)で内側のfor文離脱外側のfor文離脱ご確認いただけますと幸いです。
コメントありがとうございます!おっしゃる通り動画内に投影している資料上、(ア)も正解となってしまっておりました。大変お手数ですが本動画の概要欄で訂正させていただいておりますので、そちらをご覧ください。
@@itgakkoご確認いただきありがとうございます!今後の動画も楽しみにしております!
ありがとうございます!
先ほど受験してきて、科目A 635点科目B 630点で合格することができました!!本当にこの動画のおかげです!
さいとう先生。先日受けてきました。結果は585/545点でした。あと一歩だったので悔しいです。前回Bが310点で235点も上がったからそこは褒める点数だったと思います。全体的に両方とも難しかったです。またコーティングして力付けます
試験お疲れ様でした!合格に近づいてきていますね!継続して頑張って下さい!
@@itgakko 問7もやっと分かりました
@@itgakko 問7もやっと分かりました。
問7について質問です。whlie(true)文では、「繰り返し処理を終了する」でループを抜けると思っていたのですが、今回の場合だとreturn resultListHeadで処理が終了になると言うことでしょうか?今回の例だと、最後の処理では、3つ目のif文にも、最後の3行にも辿りつかないということでしょうか?よろしくお願いします。
質問ありがとうございます!まず「繰り返し処理を終了する」と「return ~~~」の意味について抑えておきましょう。・繰り返し処理を終了するその文章の通り、実行中の繰り返し処理を終了します。例えば以下のようなプログラムがあった場合、繰り返し処理の5回目で終了するため、出力される値は 1, 2, 3, 4, 5 のみになります。for ( i を 1 から 10 まで 1ずつ増やす) i の値を出力する if ( i = 5 ) 繰り返し処理を終了する endifendfor・return ~~~return は実行中の関数を終了すると言う意味です。また、「return ~~~」のように指定してあげることで、~~~ を呼び出し元に渡してあげることができます。こうすることで関数の実行した結果を呼び出し元で使用することができます。「return ~~~」では関数自体を終了するため、繰り返し処理の実行中に「return ~~~」が実行された場合は当然繰り返し処理も終了されます。また、質問いただいている「今回の例だと、最後の処理では、3つ目のif文にも、最後の3行にも辿りつかないということでしょうか?」はその通りになります。
動画ありがとうございます! 問2に関して、知識不足で申し訳ないのですが、【a】に関して、workelementが未定義でないが答えとなっているのですが、workelement.nextelementが未定義でないとした場合でも成り立つと考えてしまったのですが、これは違うのですか?お時間があったら、教えて頂きたいです。
workelementが未定義でなかったら、workelement.nextelementも未定義じゃないから、、みたいに考えてしまいました
質問ありがとうございます!例えば動画内で説明している例で「workElement.nextElementが未定義でない」をwhlie文の条件としてしまった場合、繰り返し処理が3回しか実行されず「え」を値に持つ要素に対して処理がされなくなってしまいます。トレースして確認してみて下さい!
1:43:38に関して質問です。1. value = 4 のleftNode = 7の処理が実行2. leftNode未定義、rightNode未定義3. value = 4のrightNodeの処理に戻るここでの「value = 4のrightNodeの処理に戻る」とは、再起呼び出しをしてるということですか?(動画内で「中断していた「4」を値荷物ノードが引数に渡された場合の処理が再開されます」と仰っていますが、それは、再起呼び出しということですか?)(中断した処理が再度実行されるのと、再起呼び出しが別物であれば、どう違うのかをご教授いただけると嬉しいです 🙇)
そこは再帰呼び出しですね。「中断していた処理が再度実行される」というのは再帰呼び出しの際の処理順の話です。ある関数が実行されている途中で、再帰呼び出し(その関数自身を呼び出す)が行われた場合、以下のような順で処理されます。元々実行されていた関数の処理をA、再帰呼び出しされた方の処理をBとすると、Aが実行される↓Aの中で再帰呼び出しされる↓Bが最後まで実行される↓Aが再帰呼び出しした所から実行されるこのような再帰呼び出しされた際の処理順を指して「中断していた処理が再度実行される」という表現を使っています。
@@itgakko なるほど!ありがとうございます!
勉強頑張って下さい!
昨日受験して合格しました! B問題解説の一連の動画のおかげです。ありがとうございます!
とてもわかりやすかったです!Bは720なんですけど、Aが難しくて600点ぴったりでした。正式な合格発表は来月なので不安です。まだ安心できないですよね?
合格ライン到達おめでとうございます!100%ではないですが、科目A,Bそれぞれ合格ライン(600点)に到達していれば、基本的に安心して大丈夫だと思います。というのも、合格ラインに到達していても不合格(試験が無効)になってしまうケースはIPA試験受験者規約 ( cbt-s.com/page/attention3_ipacbt ) に記載されており、不正などが後から見つかった場合のみになっています。よく「問題ごとの配点が受験後に反映されて点数が変わる可能性がある」と思っている方もいらっしゃいますが、問題ごとの配点の違いは受験直後に表示される点数に反映されていますので、基本的に受験直後の表示が合格ラインに到達していれば合格と考えてOKです。IPA試験受験者規約内の「受験済みの科目が無効にるケース」について、以下にも転記しておきますね。-----次の事項に該当する者の答案は、採点されません。受験済みの科目は無効になります。残る科目の受験もできません。(1)監督員など係員の指示に従わない者(*)(2)不正行為をした者(*)■カンニング、替え玉受験をした者■時計(腕時計も含む)、電子機器(携帯電話(スマートフォンを含む)、ウェアラブル端末、パソコン、オーディオプレーヤー、ゲーム機、電子辞書、電卓)、書籍(参考書、ノートなど)をカバン(ロッカーのある会場ではロッカー)にしまっていない者■USBメモリ等の外部メディアを接続した者■受験に必要のない操作をした者(受験に必要な操作:キーボードによるログインID、パスワードの入力、マウス操作)■メモ用紙を持ち出した者(3)受験者端末の電源を切った者、ネットワークケーブルを抜いた者、マウス、キーボード等を試験会場の設備以外のものに変更した者-----
@@itgakko そうなんですね!ありがとうございます安心しました!不正はしていないので、合格してると信じます笑
受験お疲れ様でした!
さいとう先生 動画の更新 ありがとうございます😊
コメントありがとうございます!
動画ありがとうございます。オブジェクト指向はプログラミングをしても分からないことが多くて、苦労しています。(javaが一番近いかもしれません)1回目に落ちた時に何が足りないと考えて、某午後重点対策本を取りました。最初はよく分からないことが多く辛かったですが、さいとう先生のこの講義板書を見て、本と似たようなことをおっしゃっていると感じて嬉しく思いました。リストは分かり難くて辛い思い思いをしましたがやってきて嬉しいですまだまだ継続してやっていきます
おっしゃる通り、科目Bアルゴリズムの擬似言語におけるオブジェクト指向はJavaをベースに作られたかもしれませんね。勉強頑張って下さい!
問3は2番目のfor文で1番高い点数を探し、resultに格納。その後、1番目のfor文でリセットした後、再び最も高い点数を探して、resultに格納という手順を繰り返してソートするという解釈で大丈夫ですか?
質問ありがとうございます!あってます!
視聴者からの「ポインタ(カーソル)」を使って解説してほしいという要望にきちんと応えてらっしゃるところに感銘しました。当方工業高校生で1月下旬に受験する予定なので、さいとうさんの動画をリピートしまくりたいと思います!
いくつかご意見頂いたので、今回の動画ではポインタを扱う問題を何個か入れました。勉強頑張って下さい!
質問失礼します。問2のwhileの終了条件なのですが、「workElement.nextElementが未定義でない」ではなく、「workElementが未定義でない」で終わるか、というのがよく分かりませんでした。whileは条件が真の間繰り返すので、「workElement.nextElementが未定義でない」にすると「え」のnextElementの部分で条件に引っかかってしまい、処理が「う」までしか行われなくなってしまうから「workElementが未定義でない」という条件にしなくてはいけないということでしょうか?加えてなのですが、「workElementが未定義」という状況がそもそも分かりません。定義されてないけどその先に処理があったとしたら、「workElementが未定義」という条件にしないと、whileが繰り返され無限ループになってしまうから。ということでしょうか?
質問ありがとうございます!それぞれ回答しますね!> whileは条件が真の間繰り返すので、「workElement.nextElementが未定義でない」にすると「え」のnextElementの部分で条件に引っかかってしまい、処理が「う」までしか行われなくなってしまうから「workElementが未定義でない」という条件にしなくてはいけないということでしょうか? →ご認識の通りです。 「workElement.nextElementが未定義でない」にしてしまうと「値="え"を持つ要素」に対して処理がされず、 「単方向リストを逆順にする」ということを実現できません。> 加えてなのですが、「workElementが未定義」という状況がそもそも分かりません。定義されてないけどその先に処理があったとしたら、「workElementが未定義」という条件にしないと、whileが繰り返され無限ループになってしまうから。ということでしょうか? →そうですね。 このプログラムのwhile文では、単方向リストの要素1つ1つに対して処理を行っています。 言い換えると、解説している具体例のように要素数が4の単方向リストについては、 「繰り返し処理の回数を4回」にする必要があります。 繰り返し処理の回数を4回にするために、「while ( workElement が未定義でない )」がという条件を設定しています。
初歩的なことでお恥ずかしいですが、質問させていただきます。問2 28:00の解説についてなぜListElement:workElement ← listHead(文字列「あ」,次要素へのリンク「い」)となるのでしょうか?私の解釈では、次になってしまいます。ListElement:workElement ← listHead(文字列「あ」,次要素へのリンク「無し」)理由:1要素を表すのはメンバー変数「data」であるため。問題文を読むと・「メンバー変数dataは、単方向リストの1要素を表す」・「引数listHeadには、単方向リストの先頭の要素が渡される」とあります。よって、先頭の要素 = data以上からこの時点では、次の要素へのリンクを表す「nextElement」は渡されない。従いまして、上記の解釈となります。お手すきの際によろしくお願いいたします。
質問ありがとうございます!順を追って説明していきます。まず、関数の定義を見てみましょう。-----◯ListElement: reverse(ListElement listHead)-----上記からこの関数について、引数にはListElement型の変数listHeadが渡されるということがわかります。ListElementクラスについては、問題文の表に明確な定義が書いてあります。-----・文字列型: data:リストの1要素が保持する文字列・ListElement: nextElement:この要素の次の要素に対するリンク-----さらに問題文には以下の記述があります。-----関数reverseが呼び出される時点で、既に単方向リストには値が格納されており、引数listHeadには単方向リストの先頭の要素が渡されるものとする-----よって引数listHeadには単方向リストの先頭の要素が渡されます。動画内の具体例であれば listhead.data="あ"、listHead.nextElement="い"を値に持つ要素になります。おっしゃられている(文字列「あ」,次要素へのリンク「無し」)というのは、要素数が2以上の単方向リストにおいてそもそも先頭の要素になりえません。「単方向リストの先頭の要素」という時点で(次要素へのリンク「無し」)というのはありえないと判断してください。動画内でも説明していますが、単方向リストの次要素へのリンクがないのは、その要素が1番後ろの要素である場合だけです。
ご回答ありがとうございます。確かに末尾以外でリンクが無いのはあり得ませんね。クラスの読み取りも苦手ですが、少しずつ慣れていきます。私事ですが、体が不自由でメモ書きも一苦労です。なので尚更 時間的にもきついです(^^;ですが、諦めません。引き続き活用させていただきます。よろしくお願いいたします。
@@itgakko 追加で質問させていただきます。【a】について、workElement.nextElement と勘違いしてしまいます。お手すきの際によろしくお願いいたします。理由:ループ終了条件の認識 この認識が原因でしょうか?処理対象の次の要素へのリンクが未定義になる時点。次の要素へのリンク = workElement.nextElement であるため。
現在科目Bの勉強で苦戦しています。Aについては免除試験を受けて合格しました。私の現在の状況なのですが公式のサンプル問題は解けるのですが購入したオリジナル問題がたくさん載っている問題集に苦戦しており解説を見ても?になる問題がたくさんあります。私はこのまま問題集を続けた方がいいのでしょうか?それとも公式サンプルを重点的に勉強した方が良いのでしょうか?よろしければさいとうさんのご意見をお聞きしたいです。長文失礼しました。
質問ありがとうございます!私の見解としては「問題集もやった方が良い」です。理由としては特にアルゴリズムの問題は「問題を解く→復習する」この繰り返しが非常に重要です。どうしても同じ問題を繰り返しやってしまうと答えを覚えてしまっていたりして問題を解いても新たな学びが少なく学習効率があまり良くないです。公式サンプルは問題数もあまり多くないので、それだけではなく問題集なども利用して問題演習を多くこなしていくことが大事です。問題集は基本的にある程度の問題数があれば良いと思いますが、やり尽くしてしまった場合は、以下の問題集がおすすめです。77問掲載されていて結構な量を演習できます。基本情報技術者[科目B]アルゴリズムとプログラミング トレーニング問題集
はじめまして。B試験、いつも550点前後で落としてしまい、再度勉強したくこの動画にたどり着きました。オブジェクト指向がちんぷんかんぷんな私ですが、1-5問までは安易に解けて、あれ?私理解してるのかも?と思ったところ、6問目からとことん理解出来ておらず、滅多切りにされました(笑)6問目は解説を聞いて理解できましたが7問目からがよくわかりません。7問目、1:02:30 の所が不明です。element value=1と言われていますが、そもそもelement valueの定義が、この問題文から読み取れません。良ければ詳しく教えていただけないでしょうか。
質問ありがとうございます!順を追って説明していきますね。まずこの問題の解説では、問題の解説の前に具体例として説明している { 1, 5, 7, 9 } この順で値が格納されている双方向リストを題材にトレースしています。次に、問題文中の関数insertの説明です。----... 引数には追加する値insertValue、双方向リストの先頭の要素listHeadを受け取り、...----この部分から、関数insertに渡される引数は双方向リストの先頭の値、トレースに使用している具体例で言うと「1」が渡されることがわかります。最後に関数insertの先頭の行です。-----ListElement: element ← listHead-----listHead を 変数element に代入しているので、elementには「1」が格納されます。そのため質問いただいているタイミングで、element.value = 1 になります。
きのう8回目の受験でようやく合格できました。市販本はやり切ってしまい、手詰まりのドロ沼状態で苦しんでいたところ、さいとうさんのチャンネルで這い上がることができました。ありがとうございました。
合格おめでとうございます!学習を継続しての合格素晴らしいですね!
A615/B790で合格見込になれました!3度目の受験でして,2回ともB550点だったのですが,動画のおかげで試験中の焦りや考えに詰まることが減ったと実感しております,本当にありがとうございますm()mですが試験中は値の並び替え問題1題に15分以上かけてしまい,ラスト6分で問14~16を解く羽目になってました(汗)
合格おめでとうございます!本番に思うようにいかない点があったにも関わらずB試験790点すばらしいですね!
動画ありがとうございます!先日、基本情報受けてきました。結果はB試験が685点でした。さいとうさんの動画のおかげです。ありがとうございました。ただ、合格見込みではあるものの試験内容が非常に優しめだったため、平均点はかなり高いと思います。合格基準が7割行くこともあるか心配です。
試験お疲れ様でした!試験後の結果表示内容が600点を超えていた場合は、不正などが見つからない限りは合格するようです。※基本情報技術者試験の配点はIRT方式で、問題の難易度などに応じて配点が変わりますが、これは試験直後の結果表示で問題の難易度などが反映された配点での合計点が表示されます。
@@itgakko ご返信、ありがとうございます!試験終了後のスコアが600点超えているのを確認したので、さいとうさんの話を聞いて安心しました。
よかったです!
問6の回答についてですが、jをnodeArrayの要素から(nodeArrayの要素数-i−1) まで 1 ずつ減らす ではないのですか? i=2のとき、jは3まで減らせばいいので
質問ありがとうございます!それだと i=6 の時に (6,-1) という存在しないノードに対するエッジができてしまいませんか?
問10.二分木がヒープ木であるか判定する問題について質問です。①トレースするにあたりなぜ、「ヒープ木でない条件でトレースしているのかが分かりませんでした。」どこの説明からヒープ木でない条件でトレースに至ったのでしょうか?
質問ありがとうございます!ヒープ木でない具体例を使ってトレースした理由は、その方がトレース時間が短い(と予想できるから)です。まず大前提として、ヒープ木であるパターンとヒープ木でないパターン、どっちでトレースしても解答を導く上で問題はありません。しかし、ヒープ木でない具体例を使ってトレースした方が、トレースにかかる時間が短く済む場合が多いです。なぜかというと、ヒープ木であることを判定するには全てのノードを調べなければいけないのに対し、ヒープ木でないことを判定する場合、ヒープ木の条件に合致しない箇所を1つでも見つければそれ以降のノードは見る必要がなくなるからです。【参考:ヒープである条件】任意のノードに対して「ノードの持つ値 ≦ 存在する子ノードの持つ値」が成り立つ。※逆にいうと「親ノードの値 > 子ノードの値」を満たすノードが1つでも存在すればヒープではない。このように「〜〜である」ということを判定する条件としてヒープ木のように全てのノードをチェックしなければいけない場合においては、トレースに使う具体例は「〜〜でない」ものを使った方がトレース時間が短くなる場合が多いので、他の問題にも応用してみてください!
質問すみません。回答とは関係ない部分ですが。 42:31 resultの末尾にtarget[maxScoreIndex]の値を追加するとありますが、1番大きい要素番号から順に要素番号を並べるということは、配列resultは[3,1,4,2]の順で並べられるということでしょうか?
質問ありがとうございます!そうですね!ご記載いただいている[3,1,4,2]というのはソート前の要素番号だと思います!であればresultの順序はその通りの順になります!
問7に関して質問です。ListElement:element ←Listheadとありますが問題文中には「element」についての説明がないと思います。なぜ、element は例で言う、1 を表すことになるのでしょうか。
質問ありがとうございます!結論、問題文中の関数insertの説明から読み取ります。以下に詳細を記述します。「引数には ... 双方向リストの先頭の要素listHeadを受け取り...」問題文の上記記述から、プログラムの以下行の「listHead」には双方向リストの先頭の要素が渡されると読み取ります。-----◯ListElement: insert(整数型: insertValue, ListElement: listHead)-----さらに関数内で以下のように listHead を element に代入しているので、element が双方向リストの先頭の要素(例でいう「1」が格納されている要素)だと読み取ります。-----ListElement: element ← listHead-----
公開問題などのオブジェクト指向は解けるようになったのですが、この動画に出てくる問題はさっぱりわかりません。本当にこのレベルの問題が出題されるのですか?
質問ありがとうございます!結論、出題される可能性はあります。しかし本番の試験の出題はランダムなので、確実に出てくるとは言い切れません。
先月受験したところAは7割弱だったのですがBは5割5分であと一歩届きませんでした…なので来月リベンジするのでこの動画も参考にして頑張ります!!
あと少しですね!頑張って下さい!
@@itgakko 先日再受験しA 760点 B 735点でした!!さいとうさんの動画でBの点数がすごく伸びたので本当に感謝してます!ありがとうございました!!
44:22問4について質問があります。printNumber2内でprintNumber1を呼び出して変数の値を-1していますが、printNumber1に戻り値がないのに値は変化するのでしょうか?初歩的な質問になりますが、お答えいただけると幸いです。
質問ありがとうございます!変化します
動画を拝見しているものです。資料を作成いただきましてありがとうございます。1点不明点がございまして、ご教示いただけますと幸いです。問2のプログラムの中のListElement workElement←ListHeadListElement previous←未定義の値ListElement next←未定義の値とありますが、ここでの「ListElement」は単なる変数名でしょうか。それともクラス名でしょうか。その後で、workElement.nextElementというメンバ変数が出てきているので、ListElementが何を指しているかが良く分からなくなっております。お手すきの際にご教示いただけると大変助かります。
質問ありがとうございます!「ListElement」はクラス名です。変数名かクラス名か判断する方法について、以下で順を追って説明しますね。まず、プログラムの中である変数が初めて出てくる場合、必ず「型名 変数名」の形で記述されます。【正しい例】 ListElement aaa _// ListElementクラスのaaaという変数が宣言される_ aaa ← ListElement("あ")【誤った例】 aaa ← ListElement("あ") _// 型名を指定せずにいきなり変数を記述する_上記の誤った例の形では、aaa という変数の型がプログラム上で判断できないため、正しい例のように「型名 変数名」の形でまず変数の方を明確にしてあげる必要があります。ご質問頂いている以下の部分は、どれも上で説明した「型名 変数名」の形になっています。-----ListElement workElement←ListHeadListElement previous←未定義の値ListElement next←未定義の値-----これによってListElementクラスの変数workElement,previous,nextが宣言されるので、プログラムの以降の行でこの3つの変数が使用できるようになります。以上、ご不明点ありましたらご連絡いただければと思います。
@@itgakko ありがとうございます。理解出来ました。引き続きよろしくお願いいたします。
何度もコメントすみません。問10で、再起呼び出しでisheaptree(7)でtrueになり、7の処理が終わった後にisheaptree(4)の続きに戻るところまでは理解出来ましたが、なぜrightnodeの方のisHeap←isHeapTree(currenttNode.rightNode)部分に戻るのでしょうか。isheaptree(4)はrightnodeが未定義のため、if文内を処理せずtrueを返すのかと思っていました。
すみません、資料が誤ってます。正しくは以下の部分(左側の子ノード)に戻るが正しいです。-----isHeap ← isHeapTree(currentNode.leftNode)if (【a】) return falseendif-----お手数ですが読み替えて進めていただければと思います。
たくさん質問してすみません。1:25:11問9 辞書に意味を追加する問題において、プログラム1行目Wordの配列:addword(Wordの配列:before,文字型列:addvalue,文字型:addmean)の、Wordの配列:beforeが辞書の前の単語を示していると、どこからわかるのでしょうか。クラスの説明から、addvalueとaddmeanは何を示しているか分かりますが、beforeのみ問題文にないため、どこから引っ張っきたものなのかよく分かりません。お手隙の際にご教授いただけないでしょうか。
質問ありがとうございます!まず 関数addWordの引数beforeは「辞書の前の単語」ではなく「単語追加前の辞書の状態」です。動画内 1:25:11 でもそのように説明しています。その上で 引数before は問題文の以下に説明があります。-----関数addWordは辞書へ単語とその単語の意味を追加するプログラムである。引数に辞書、追加する単語、追加する単語の意味の3つを受け取り、以下ルールに従い辞書に単語を追加する。-----これと実際の関数の定義を照らし合わせて、引数beforeが辞書を表していると読み取ります。-----◯Wordの配列: addWord(Wordの配列: before, 文字列型: addValue, 文字列型: addMean)-----
追加の質問です。問10で(イ)が誤りの理由がわからずに困っています。(イ)だと、ヒープ木の場合でも、falseと判定してしまうから間違いなのかな、とは思ったのですが、具体的にどういう場合にどういう挙動を起こして間違った判定になるのかが分かりません。もしよろしければ教えてください。
今日受験してきて、A635.B750で合格しました!ありがとうございました!
合格おめでとうございます!!問10でいただいた質問については、(イ)だと無限ループになってしまい処理が終わらなくなります。試しにトレースしてみてください。
いつも拝見させていただいております。問6以降が難しい印象を持っているのですが本番ではこのレベルがバンバン出題されるのでしょうか。問題文やリストを示す表示も長くてどこを示してるのか混乱してしまい、本番では解答できそうにないので質問させていただきました。
質問ありがとうございます!推測が混じりますがご回答させて頂きます。結論としては、問6以降のレベルも頻出とまではいかないもののある程度は出題されると考えた方が良いと思います。以下に理由を記載しますね。本動画の問6以降の問題は、IPA公式が出しているサンプル問題のうち、難易度が高めのものに合わせたレベルで作っています。公式サンプル問題については、受験した方から「公式サンプル問題よりも難しい問題が出題された」と言う声は聞きますが、逆に「公式サンプル問題より易しい問題が出題された」との声は聞いておりません。したがって本動画の問6以降のレベルの問題も本番の試験では一定数出るものと推測しています。また、問題文が長くて混乱してしまうとのことでしたが、対策としては動画内でも解説している通り、 ・実行結果を問う問題はとにかくトレースする ・穴埋め問題は問題文とプログラムをリンクさせて考える(問題文からプログラムの処理内容が書いてある部分を抜き出して考える以上の内容がポイントです。前者の実行結果を問う問題では問題文の長さは関係ありません。根気よくトレースしていけば必ず答えは出ます。もちろんトレースのスピードを上げるには問題数をこなす必要はあります。また、後者の穴埋め問題については、文章が長くても処理内容を表している部分はその中の一部です。問題文からそこをしっかりと抜き出せると良いですね。ここも問題たくさん解いて1問1問しっかりと解説を見て理解していくことで身についていきます。勉強頑張って下さい!
詳しくご回答いただきましてありがとうございます!やはりトレースが大切なんですね、時間がかかりますが理解できるよう何度も解いてみます。ありがとうございました。
@user-lv4bm8re6e 勉強頑張って下さい!
問3について質問です。最初にrepeatSizeにtargetの要素数を入れてi回ループすると思います。そしてjループの後にtargetの要素を削除するとおもうのですが、削除すればtargetの要素が減り、iのループの最後で要素数が足りずにエラーが起きると思うんですがそこについて教えていただきたいです!
質問ありがとうございます!結論から言うと、エラーは発生しません。例えば要素数4の配列であれば、1つ目のfor文は4回繰り返され、targetの要素数は繰り返し処理の中で以下のように変化していきます。・i=1の時:targetの要素数は4→3になる・i=2の時:targetの要素数は4 3→2になる・i=3の時:targetの要素数は2→1になる・i=4の時:targetの要素数は1→0になるおっしゃっている「要素数が足りずにエラーになる」というのがどういう状態を指しているかは分からなかったのですが、上記のような場合特にエラーは起きません。以上、ご不明点ありましたらご連絡頂ければと思います。
質問失礼します。26:17の辺り、問2のコンストラクタ2番目で、nextElememtの値を「引数.nextElememt」で作成すると、引数「お」のnextElememtと同じになり、未定義になってしまうのではないでしょうか。。また、問題文のプログラム内では変数(previousやnext等)の宣言の「:」がなくても大丈夫なのでしょうか
質問ありがとうございます!頂いた質問2つ、それぞれ回答しますね。> 26:17の辺り、問2のコンストラクタ2番目で、> nextElememtの値を「引数.nextElememt」で作成すると、> 引数「お」のnextElememtと同じになり、> 未定義になってしまうのではないでしょうか。→まずご質問を整理させてください。 おそらく上記のご質問は「引数」自体がListElementクラスの変数なので、 例で記載している「ListElement: b ← ListElement("え", a)」が実行された場合、 作成されるオブジェクトのnextElementが a.nextElement、つまり未定義になってしまうのでは?という内容だと思います。 結論から言うと未定義にはなりません。 「引数.nextElement」は「引数で渡されたnextElementという変数」という意味を表しています。 そのため、おっしゃられている状況(「お」のnextElement)を表現する場合は、 「引数.nextElement.nextElement」という形になります。 ただ、ご質問いただき、動画内容にわかりづらい所があったと思います。 お手数おかけしてすみません。今後改善していきます。> また、問題文のプログラム内では変数(previousやnext等)の宣言の「:」がなくても大丈夫なのでしょうか→すみません、こちらは「:」が必要ですが抜けておりました。 動画概要欄の方で訂正させていただきます。 お手数ですが「:」があるものとして進めていただけますでしょうか。
@@itgakko 回答ありがとうございます。>「引数.nextElement」は「引数で渡されたnextElementという変数」という意味を表しています。この「.」は、オブジェクトのメンバ変数を引いてくる「.」とは別のものという事ですね。やっと理解はしましたが、区別が難しいですね。。ありがとうございます。
@livelife8236 勉強頑張って下さい!
やっと問7まで進みましたが、また質問です。。この問題の例では値が9までの4つしかない双方向リストになっていますが、これが11や13などで続いていた場合、「繰り返し処理を終了する」に引っかからずに11等次の要素の前にまた要素を追加してしまうのではないでしょうか。またプログラムのendwhileの後の記述は挿入先が末尾だった場合の処理だと思いますが、これは繰り返しの外にあり、条件もないので、必ず実行されてしまうのではないでしょうか。すみません、よろしくお願い致します。。明日テストです 笑
以下に回答しますね!>この問題の例では値が9までの4つしかない双方向リストになっていますが、これが11や13などで続いていた場合、「繰り返し処理を終了する」に引っかからずに11等次の要素の前にまた要素を追加してしまうのではないでしょうか。→ 追加することはありません。 双方向リストに要素を追加した後「return resultListHead」が実行されているためです。 おっしゃられている11や13などで続いていたケースをトレースしてみて下さい。> またプログラムのendwhileの後の記述は挿入先が末尾だった場合の処理だと思いますが、これは繰り返しの外にあり、条件もないので、必ず実行されてしまうのではないでしょうか。→ 必ず実行されるわけではありません。 これも双方向リストに要素を追加した後「return resultListHead」が実行されているためです。
なるほど!returnで戻り値を返して、プログラム自体が終了するのですね!素人過ぎました。。ありがとうございます!
どこかで読んだような気はしますが、知らないで行くところでした笑助かりました〜ありがとうございます。
試験頑張って下さい!
問2で”い”の"い"のリンクを書き換える説明で不明点があります2番目:"い"のリンクを書き換える workElement=いListElement: reverse(ListElement listHead) ListElement:workElement ← listHeadListElement:previous ← 未定義の値ListElement:next ← 未定義の値1行目. while(workElement が 未定義でない)2行目. next ← workElement.nextElement 次の要素←次要素へのリンク う← "い"に入っている"う"へのリンク3行目. workElement.nextElement ← previous "い"に入っている"う"へのリンク 未定義4行目. previous ← workElement 未定義 い5行目. workElement ← next い う6行目. endwhileという理解をしました。こういったことですか?特に2行目、3行目2行目. next ← workElement.nextElement 次の要素←次要素へのリンク う← "い"に入っている"う"へのリンク の理解をいまいち不安でして・・・3行目. workElement.nextElement ← previous "い"に入っている"う"へのリンク 未定義 なんで未定義にするのかも理屈が分からないです。
質問ありがとうございます!3行目のところが違いますね。1つ前の繰り返しで previous には "あ"を値に持つ要素 が格納されているので、workElement.nextElement には "あ"を値に持つ要素 へのリンクが格納されます。日本語で言うと、"い"の次要素を "あ"に変更する といった意味になります。2行目はあってますよ!
25日に受験予定なのでありがたいです!
問2next←work element.next element は「いと、次のう」を定義しているのに、次のwork element.nextelement は「い」だけ定義しているのがなんでなのかよくわかりません、、、
質問ありがとうございます!おそらくプログラムの動きでイメージができていない箇所があって上記質問をいただいていると思うので、動きについて具体例で説明しますね。直接的な回答ではないですが、具体的な処理内容がイメージできると解決すると思いますので、以下の内容をご確認いただければと思います。要素数4の単方向リスト{ あ, い, う, え, お }を考えます。・workElement = 値"う"を持つ要素(次要素へのリンク:値"え"を持つ要素)・previous = 値"い"を持つ要素(次要素へのリンク:値"あ"を持つ要素)2つの変数にはこのように値が格納されている状態で以下①②の行が実行された場合の動きを考えましょう。-----① next ← workElement.nextElement② workElement.nextElement ← previous-----①:next ← workElement.nextElementworkElement.nextElementは、値"う"を持つ要素の次の要素なので、nextには以下のように値"え"を持つ要素が格納されます。◾next └値:え └次要素へのリンク:値"お"を持つ要素変数nextに対して、値と次要素へのリンクがセットで代入されるイメージですね。②:workElement.nextElement ← previouspreviousは値"い"を持つ要素なので、workElement.nextElement、つまり値"う"を持つ要素の次要素へのリンクには以下のように値"い"を持つ要素が格納されます。◾workElement └値:う └次要素へのリンク:値"い"を持つ要素変数workElementの次要素に、値"い"を持つ要素、つまり「値"い"」とその次要素へのリンク「値"あ"を持つ要素」がセットで代入されるイメージですね。これがプログラムの動きの具体例です。いただいた質問に戻ると、-----next←work element.next element は「いと、次のう」を定義しているのに、次のwork element.nextelement は「い」だけ定義しているのがなんでなのかよくわかりません、、、-----とありますが、上記で説明した①②のどちらも値だけ代入しているのではなく、値と次要素へのリンクをセットで代入しています。以上、ご確認よろしくお願いします。
14:25 これってなぜoperateStackに()がついているのでしょうか?プログラム実行なら「operateStack」って打ったら勝手に実行されないんですか?
質問ありがとうございます!「operateStack」だけでは関数は実行されません。関数を実行する際は「operateStack()」のように()が必要です。これは科目Bアルゴリズムのルールですね。関数を実行する際は「関数名(...)」の形で記述します。関数に引数がある場合は()の中にカンマ区切りで引数を指定します。
1:44:40のヒープ説明で再帰7のノードがtrueで終わり4のノードに戻ってくると、→変数isHeapには呼び出した関数から返された値trueが格納されるisHeap ← isHeapTree(currentNode.rightNode) if (【a】) return false↑いきなりif文でHeapを判定する文をもってこれるのが理由が分かりずらいですfalseをが帰ってくることはisHeap=falseのかと選択肢になるのかと予想でなら出来ますがと解答の根拠が導けれない・・isHeap ← isHeapTree(currentNode.rightNode) との関連性はありますか前提として問題はヒープであるかを聞いている事は分かりましたウエ以外は絞り込めました。
質問ありがとうございます!isHeap ← isHeapTree(currentNode.rightNode) との関連性はあります。動画内ではプログラム上側の「isHeap ← isHeapTree(currentNode.leftNode)」で説明していますが、プログラム下側の「isHeap ← isHeapTree(currentNode.rightNode)」の部分も同じ構造になっており、考え方は同じです。また、「falseをが帰ってくることはisHeap=falseのかと選択肢になるのかと予想でなら出来ますがと解答の根拠が導けれない・・」とありますが、これについてはプログラムの中でfalseを返している部分を抜き出して考えると良いです。-----if (currentNode.value > currentNode.leftNode.value) return falseendif-----例えば上記の部分でfalseを返しています。if文の条件を日本語に直すと「左側の子ノードの値がそのノードの値より小さい」という意味になります。この条件に合致する場合にfalseを返しています。この「左側の子ノードの値がそのノードの値より小さい」が成り立つ場合、その二分木は即ヒープでないと判断できますよね。なので再帰呼び出しした結果falseが帰ってきた時は既にその二分木はヒープでないということになるので、「isHeap=false」が解答になります。以上、ご不明点ありましたらご連絡いただければと思います。
解説ありがとうございました。私もヒープと二分木と混乱していて、最初if (currentNode.value > currentNode.leftNode.value) のコード見て合ってないか?と理解が出来ず悩みましたが、では本題isHeap ← isHeapTree(currentNode.rightNode ヒープ判定をするif (【a】) return false ←falseを返すというのはヒープではないことを意味するのでではif文に入るのはヒープが偽である条件がここに入るよってisHeap=false エということでよろしいでしょうか
そうです!
@@itgakko ありがとうございました
問9のメンバ変数、コンストラクタ、メゾット問題文のどこに定義されてるんですか?
解説の時急に出てきても困るんですが
質問ありがとうございます!動画内の 1:21:36 あたりで投影してますね!
問3のjで何番目の生徒を指すかは理解できたのですが、iがなにを指しているのかわかりません。教えていただけると嬉しいです。
質問ありがとうございます!このプログラムで i 自体に意味はありません。理由はfor文内の処理で i を使用していないためです。※ for文の文法上「◯を△から□まで×ずつ増やす」という記述が必要なので、 プログラム上では i を使っています。
問2で躓いています。質問させてください。while文3行目でworkelement.nextelement← previousで 具体例「あ」の次のリンクがなくなるという理屈がわかりませんでした。workelement.nextelementは「い」のことを指しているから「い」のつぎのリンクがなくなるということではないのでしょうか?またpreviousをいれると次へのリンクがなくなる理由も分かりませんでした。宜しくお願いします
質問ありがとうございます!問2のプログラムの具体例{"あ","い","う","え"}でのトレースについて、while文1回目の繰り返しの処理に関するご質問だと思います。該当箇所を説明する前に、まず単方向リストについて改めて説明します。トレースで使用している具体例{"あ","い","う","え"}を単方向リストの形(値と次要素へのリンク)で表すと以下のようになります。[先頭の要素]・値:"あ"・次要素へのリンク:値"い"を持つ要素[2番目の要素]・値:"い"・次要素へのリンク:値"う"を持つ要素[3番目の要素]・値:"う"・次要素へのリンク:値"え"を持つ要素[4番目の要素]・値:"え"・次要素へのリンク:未定義単方向リストでは末尾の要素は次要素を持たないので、次要素へのリンクは未定義と表されています。またもう1点注目するべきは、単方向リストの要素が持つのは「次要素へのリンク」であり「次要素自体ではない」ということです。これを踏まえてご質問の内容を見ていきましょう。 workElement.nextElement← previousこの行を日本語に置き換えると、変数workElementの次要素へのリンクに変数previousの値を格納する。こうなります。さらに具体例でのトレースのwhile文1回目で言うと"あ"を値に持つ要素の次の要素へのリンクに変数previousの値を格納する。このような意味になります。変数previousはこの時点で未定義となっているので、"あ"を値に持つ要素の次の要素へのリンクが未定義になります。つまり"あ"を値に持つ要素の次の要素へのリンクが次要素へのリンクを持たない形に変わるので、「あ」の次のリンクがなくなるということになります。workElement.nextElementは次要素自体を表しているのではなく、このようにあくまで次要素へのリンク(リンクではなく参照と表現している問題もあります)なので、ここまで説明してきたような解釈になります。次要素へのリンクを別の値に書き換えても、その要素自体が書き換わるわけではありません。以上、ご不明点ありましたらご連絡頂ければと思います。
@@itgakko 返信ありがとうございます。次の要素ではなく、次要素のリンクなんですね!また、質問させといただくかもしれませんが、よろしくお願いします
@user-zf1te8xc8y 勉強頑張って下さい!
@@itgakko本日試験だったのですが勉強開始から1ヶ月で受かりましたー!午後試験対策は斎藤さんの動画以外はほぼやってないのですが、点数取れました!ありがとうございました!この後、応用情報も受験予定なのでまたお願いします!
合格おめでとうございます!応用情報の動画も楽しみにしていて下さい!
大変勉強になり、助かります。私の勘違いでしたら申し訳ないのですが、問5についてなのですが、問題文の2文目は、スタックではなくキューではないでしょうか。
おっしゃる通りキューのことですね。大変失礼しました。お手数ですがキューと読み替えて進めていだだけますでしょうか。
@@itgakko ご返信ありがとうございます。本日、試験を受けてきたのですが、先生のお陰で、以前までよく分かっていなかったオブジェクト指向の問題に苦戦することなく、科目Bで875点取ることができました。重ねて感謝申し上げます。
合格おめでとうございます!875点素晴らしいですね!
参考書だと「クラスは鯛焼きの型です」(ふんふん)「インスタンスは鯛焼きです」(ふんふん)「じゃあ問題です」(???)←みたいな流れなので混乱するんですよね頭の中が鯛焼き一色になった記憶があります
コメントありがとうございます!イメージ自体は非常に大事なのですが、あくまでイメージはイメージなので「じゃあ擬似言語上ではどういうことなの?」を理解する必要があります。動画の中ではそれを説明しているので見ていただけると幸いです!
この問題って自作のものですか。難しいのも多いですが勉強になります。
自作問題です!勉強頑張って下さい!
5:17自分用
58:10
動画で投影している教材全202ページはさいとうの公式LINEに登録頂くと無料でダウンロードできます!無料で教材が欲しい方は概要欄からLINEに登録してみて下さいね!今回の動画の教材名:【問題演習付き】科目Bオブジェクト指向完全攻略(基本情報技術者試験|アルゴリズム)
質問です。問題6の選択肢アはなぜ不正解なのでしょうか?
(途中で送ってしまいました)自分なりにトレースしてみたら(2,1)、(3,1)、(3,2)と個数が増えていくパターンですがiは6までなので(6,5)で重複なく進めるのではないかな?と思いました。無向グラフのノードは小さい方から増えていく決まりなのでしょうか。
申し訳ありません。解答群の選択肢、(ア)が誤っており、(ア)も正しい答えとなっておりました。(ア)も(エ)も無向グラフにおける完全グラフを作成できる選択肢になります。動画と教材については以下の通り訂正を入れさせて頂きました。お手数おかけしてしまい申し訳ありません。----- ■対象:問6.無向グラフにおける完全グラフの作成 ・解答群の選択肢(ア)が誤っており、(ア)も正しい答えとなっておりました。 以下の通り訂正させて頂きます。 ・正:(ア) j を 1 から (nodeArrayの要素数-i) まで 1 ずつ増やす ・誤:(ア) j を 1 から i まで 1 ずつ増やす-----
早速ありがとうございます。当初アの選択肢で導いた分も正しくなるものだったのですね。自分なりのトレースも間違ってはいなかったとわかって少し安心しました。解法が腑に落ちるよう繰り返して解きます。最後になりますが動画配信ありがとうございます。勉強のネタが増えて嬉しいです。
@user-cq2cf5hh4g お手数おかけしました。勉強頑張って下さい!
クラスの対になるのはインスタンスでしょ。
コメントありがとうございます!そうですね!
誤字多いな…
コメントありがとうございます!すみません!
7から難易度がかなり上がるなぁ
そうですね!後半につれて難易度が高くなるように設定しています。
⚠学習前にご確認ください!
・誤りがあった場合に概要欄で訂正している場合があります。動画におかしな点があった場合、まずは概要欄のご確認をお願いします。
・動画で投影している教材は、本動画の概要欄からさいとうの公式LINEに登録頂くと無料でダウンロードできます!
※概要欄で訂正している内容が反映されたものをダウンロードできます。
1月に基本情報受験し、先日合格証書が届きました!さいとうさんのチャンネルは、初学者の私にとって大変有難い存在でした。科目Bが解けるようになったのはさいとうさんのたくさんの動画のおかげです。本当にありがとうございました!!
合格おめでとうございます!!
何をやっても理解できなかったのですが、
この動画のおかげで、科目Bの理解ができるようになって無事合格できました😭
本当にありがとうございました!
合格おめでとうございます!!
基本情報合格できました。
科目Bに苦戦していたところ、こちらのチャンネルと出会い、問題が解けるようになりました!
本当にありがとうございました!
合格おめでとうございます!!
この動画のおかげで、教科書だと何いっているのか分からなかったオブジェクト指向が
解けるようになりました!本当にありがとうございます!!
コメントありがとうございます!
よかったです!
本日試験を受けて無事合格しました。科目Bに関してはさいとうさんのおかげです。ありがとうございました。
合格おめでとうございます!
先日、受験して科目Aが745点、科目Bが650点で合格しました。さいとう先生の講義のおかげです!本当にありがとうございました!
合格おめでとうございます!!
本日B科目、715点で合格点に達する事が出来ました!!!
さいとうさんの数多の動画を繰り返し視聴したから合格できました!
本当にありがとうございます😊
合格おめでとうございます!
基本情報技術者試験合格できました。
難しい問題、何度も見させていただきました。
ありがとございました。
合格おめでとうございます!!
本日4回目で科目B試験受けたのですがやっと660点で合格しました😭
本当にチャンネルのすべての動画を何度も見返して学校で理解できなかったことほとんど理解できました。感謝しかないです。これからも頑張ってください!!
合格おめでとうございます!!
本動画のおかげで合格しました。
ありがとうございます
合格おめでとうございます!!
またThanksありがとうございます!
より良いチャンネル運営に利用させていただきます!
今日受験して科目A690、科目B600でなんとか合格できそうです!
先生のおかげです!
ありがとうございます !!
試験お疲れ様でした!
合格点到達おめでとうございます!
Thanksありがとうございます!
より良いTH-camチャンネル運営に使わせていただきます。
もうすぐ受験を控えており、大変勉強になりました。
ありがとうございます!
正答率7割ぐらいと悪くなかったので、残り期間精度上げていきます!!
コメントありがとうございます!
勉強頑張ってください!
1問目 14:27
2問目 21:45
3問目 37:20
4問目44:47
5問目 48:10
6問目 52:06
7問目 59:50
8問目 1:10:14
9問目 1:21:33
10問目 1:34:50
今日基本情報受けまして評価点はAとB 共に700越えました。余程のことがない限り合格していると思います。
アルゴリズムで稼ぐことができたと思うので助かりました。ありがとうございました!
試験お疲れ様でした!
合格ライン到達おめでとうございます!
質問しても良いですか?
先生のおかげで苦手だったリストが分かるようになってきました。
とても感謝しております。
その中でひとつ疑問です。
問題7 1:08:37
双方向リストの追加の問題です。
解にあたる部分ですが、insert element(リストに追加したい値)を、element.previousElementに入れることで、追加するinsertElementの1つ前のリストの、次の要素へのリンクを書き換えるとあります。
『追加するinsertElementの1つ前のリストの、【次の要素へのリンク】を書き換え』と言われると、何となくinsert elementの値を、選択肢イの『element.previousElement.nextElement』を選びたくなり、私はイを選んでしまいました。
イがダメな理由は、element.previousElement.nextElementが表す数字が、図の表で言う、【9】を示しているということでしょうか。
質問ありがとうございます!
(イ) element.previousElement.nextElement
こちらは「値7を持つ要素」の「次の要素がどこかを指すリンク」になるので、
おっしゃる通り 1:08:37 で解説しているタイミングでいうと「値9を持つ要素」を指します。
本日受験してまいりました。
合格基準得点を超えることができたので受かったかと思います!
科目Bの対策で詰まっている時にとても助けられました。
大変お世話になりました!
合格点到達おめでとうございます!!
@@itgakko
ありがとうございます!!
応用情報技術者試験の対策動画をあげられる予定はございますか?
是非さいとうさんの説明を聞きながら勉強したいと思っております。(まだ勉強していないので、動画が作れるような内容なのかは分かりませんが…。)
応用情報は対策動画の予定はないですね!
勉強法とかならあげるかもしれませんが、それも時期未定です。
@@itgakko かしこまりました!
わざわざお返事有難うございます。
いつも勉強させていただいています!
問6について質問なのですが、こちらは(ア)も正解になるのではないでしょうか?
エッジを(i,j)と表現し、jを1からi まで増やすとして
i=1:(1,1)→i=jなので×、内側のfor文離脱
i=2:(2,1) ※(2,2)で内側のfor文離脱
i=3:(3,1)(3,2) ※(3,3)で内側のfor文離脱
i=4:(4,1)(4,2)(4,3) ※(4,4)で内側のfor文離脱
i=5:(5,1)(5,2)(5,3)(5,4) ※(5,5)で内側のfor文離脱
i=6:(6,1)(6,2)(6,3)(6,4)(6,5) ※(6,6)で内側のfor文離脱
外側のfor文離脱
ご確認いただけますと幸いです。
コメントありがとうございます!
おっしゃる通り動画内に投影している資料上、
(ア)も正解となってしまっておりました。
大変お手数ですが本動画の概要欄で訂正させていただいておりますので、そちらをご覧ください。
@@itgakkoご確認いただきありがとうございます!
今後の動画も楽しみにしております!
ありがとうございます!
先ほど受験してきて、
科目A 635点
科目B 630点で合格することが
できました!!
本当にこの動画のおかげです!
合格おめでとうございます!!
さいとう先生。
先日受けてきました。結果は585/545点でした。あと一歩だったので悔しいです。前回Bが310点で235点も上がったからそこは褒める点数だったと思います。全体的に両方とも難しかったです。またコーティングして力付けます
試験お疲れ様でした!
合格に近づいてきていますね!
継続して頑張って下さい!
@@itgakko 問7もやっと分かりました
@@itgakko 問7もやっと分かりました。
問7について質問です。
whlie(true)文では、「繰り返し処理を終了する」でループを抜けると思っていたのですが、今回の場合だとreturn resultListHeadで処理が終了になると言うことでしょうか?
今回の例だと、最後の処理では、3つ目のif文にも、最後の3行にも辿りつかないということでしょうか?
よろしくお願いします。
質問ありがとうございます!
まず「繰り返し処理を終了する」と「return ~~~」の意味について抑えておきましょう。
・繰り返し処理を終了する
その文章の通り、実行中の繰り返し処理を終了します。
例えば以下のようなプログラムがあった場合、
繰り返し処理の5回目で終了するため、
出力される値は 1, 2, 3, 4, 5 のみになります。
for ( i を 1 から 10 まで 1ずつ増やす)
i の値を出力する
if ( i = 5 )
繰り返し処理を終了する
endif
endfor
・return ~~~
return は実行中の関数を終了すると言う意味です。
また、「return ~~~」のように指定してあげることで、
~~~ を呼び出し元に渡してあげることができます。
こうすることで関数の実行した結果を呼び出し元で使用することができます。
「return ~~~」では関数自体を終了するため、
繰り返し処理の実行中に「return ~~~」が実行された場合は
当然繰り返し処理も終了されます。
また、質問いただいている「今回の例だと、最後の処理では、3つ目のif文にも、最後の3行にも辿りつかないということでしょうか?」はその通りになります。
動画ありがとうございます!
問2に関して、知識不足で申し訳ないのですが、
【a】に関して、workelementが未定義でないが答えとなっているのですが、
workelement.nextelementが未定義でないとした場合でも成り立つと考えてしまったのですが、これは違うのですか?
お時間があったら、教えて頂きたいです。
workelementが未定義でなかったら、workelement.nextelementも未定義じゃないから、、みたいに考えてしまいました
質問ありがとうございます!
例えば動画内で説明している例で「workElement.nextElementが未定義でない」をwhlie文の条件としてしまった場合、繰り返し処理が3回しか実行されず「え」を値に持つ要素に対して処理がされなくなってしまいます。
トレースして確認してみて下さい!
1:43:38に関して質問です。
1. value = 4 のleftNode = 7の処理が実行
2. leftNode未定義、rightNode未定義
3. value = 4のrightNodeの処理に戻る
ここでの「value = 4のrightNodeの処理に戻る」とは、再起呼び出しをしてるということですか?(動画内で「中断していた「4」を値荷物ノードが引数に渡された場合の処理が再開されます」と仰っていますが、それは、再起呼び出しということですか?)
(中断した処理が再度実行されるのと、再起呼び出しが別物であれば、どう違うのかをご教授いただけると嬉しいです 🙇)
そこは再帰呼び出しですね。
「中断していた処理が再度実行される」というのは再帰呼び出しの際の処理順の話です。
ある関数が実行されている途中で、再帰呼び出し(その関数自身を呼び出す)が行われた場合、以下のような順で処理されます。
元々実行されていた関数の処理をA、再帰呼び出しされた方の処理をBとすると、
Aが実行される
↓
Aの中で再帰呼び出しされる
↓
Bが最後まで実行される
↓
Aが再帰呼び出しした所から実行される
このような再帰呼び出しされた際の処理順を指して「中断していた処理が再度実行される」という表現を使っています。
@@itgakko なるほど!ありがとうございます!
勉強頑張って下さい!
昨日受験して合格しました! B問題解説の一連の動画のおかげです。ありがとうございます!
合格おめでとうございます!
とてもわかりやすかったです!
Bは720なんですけど、Aが難しくて600点ぴったりでした。
正式な合格発表は来月なので不安です。まだ安心できないですよね?
合格ライン到達おめでとうございます!
100%ではないですが、科目A,Bそれぞれ合格ライン(600点)に到達していれば、基本的に安心して大丈夫だと思います。
というのも、合格ラインに到達していても不合格(試験が無効)になってしまうケースはIPA試験受験者規約 ( cbt-s.com/page/attention3_ipacbt ) に記載されており、不正などが後から見つかった場合のみになっています。
よく「問題ごとの配点が受験後に反映されて点数が変わる可能性がある」と思っている方もいらっしゃいますが、問題ごとの配点の違いは受験直後に表示される点数に反映されていますので、基本的に受験直後の表示が合格ラインに到達していれば合格と考えてOKです。
IPA試験受験者規約内の「受験済みの科目が無効にるケース」について、以下にも転記しておきますね。
-----
次の事項に該当する者の答案は、採点されません。受験済みの科目は無効になります。残る科目の受験もできません。
(1)監督員など係員の指示に従わない者(*)
(2)不正行為をした者(*)
■カンニング、替え玉受験をした者
■時計(腕時計も含む)、電子機器(携帯電話(スマートフォンを含む)、ウェアラブル端末、パソコン、オーディオプレーヤー、ゲーム機、電子辞書、電卓)、書籍(参考書、ノートなど)をカバン(ロッカーのある会場ではロッカー)にしまっていない者
■USBメモリ等の外部メディアを接続した者
■受験に必要のない操作をした者(受験に必要な操作:キーボードによるログインID、パスワードの入力、マウス操作)
■メモ用紙を持ち出した者
(3)受験者端末の電源を切った者、ネットワークケーブルを抜いた者、マウス、キーボード等を試験会場の設備以外のものに変更した者
-----
@@itgakko
そうなんですね!ありがとうございます安心しました!
不正はしていないので、合格してると信じます笑
受験お疲れ様でした!
さいとう先生 動画の更新 ありがとうございます😊
コメントありがとうございます!
動画ありがとうございます。オブジェクト指向はプログラミングをしても分からないことが多くて、苦労しています。(javaが一番近いかもしれません)
1回目に落ちた時に何が足りないと考えて、某午後重点対策本を取りました。
最初はよく分からないことが多く辛かったですが、
さいとう先生のこの講義板書を見て、本と似たようなことをおっしゃっていると感じて嬉しく思いました。
リストは分かり難くて辛い思い思いをしましたがやってきて嬉しいです
まだまだ継続してやっていきます
おっしゃる通り、科目Bアルゴリズムの擬似言語におけるオブジェクト指向はJavaをベースに作られたかもしれませんね。
勉強頑張って下さい!
問3は2番目のfor文で1番高い点数を探し、resultに格納。その後、1番目のfor文でリセットした後、再び最も高い点数を探して、resultに格納という手順を繰り返してソートするという解釈で大丈夫ですか?
質問ありがとうございます!
あってます!
視聴者からの「ポインタ(カーソル)」を使って解説してほしいという要望にきちんと応えてらっしゃるところに感銘しました。当方工業高校生で1月下旬に受験する予定なので、さいとうさんの動画をリピートしまくりたいと思います!
いくつかご意見頂いたので、今回の動画ではポインタを扱う問題を何個か入れました。
勉強頑張って下さい!
質問失礼します。
問2のwhileの終了条件なのですが、「workElement.nextElementが未定義でない」ではなく、「workElementが未定義でない」で終わるか、というのがよく分かりませんでした。
whileは条件が真の間繰り返すので、「workElement.nextElementが未定義でない」にすると「え」のnextElementの部分で条件に引っかかってしまい、処理が「う」までしか行われなくなってしまうから「workElementが未定義でない」という条件にしなくてはいけないということでしょうか?
加えてなのですが、「workElementが未定義」という状況がそもそも分かりません。
定義されてないけどその先に処理があったとしたら、「workElementが未定義」という条件にしないと、whileが繰り返され無限ループになってしまうから。ということでしょうか?
質問ありがとうございます!
それぞれ回答しますね!
> whileは条件が真の間繰り返すので、「workElement.nextElementが未定義でない」にすると「え」のnextElementの部分で条件に引っかかってしまい、処理が「う」までしか行われなくなってしまうから「workElementが未定義でない」という条件にしなくてはいけないということでしょうか?
→ご認識の通りです。
「workElement.nextElementが未定義でない」にしてしまうと「値="え"を持つ要素」に対して処理がされず、
「単方向リストを逆順にする」ということを実現できません。
> 加えてなのですが、「workElementが未定義」という状況がそもそも分かりません。
定義されてないけどその先に処理があったとしたら、「workElementが未定義」という条件にしないと、whileが繰り返され無限ループになってしまうから。ということでしょうか?
→そうですね。
このプログラムのwhile文では、単方向リストの要素1つ1つに対して処理を行っています。
言い換えると、解説している具体例のように要素数が4の単方向リストについては、
「繰り返し処理の回数を4回」にする必要があります。
繰り返し処理の回数を4回にするために、「while ( workElement が未定義でない )」がという条件を設定しています。
初歩的なことでお恥ずかしいですが、質問させていただきます。
問2 28:00の解説について
なぜListElement:workElement ← listHead(文字列「あ」,次要素へのリンク「い」)
となるのでしょうか?
私の解釈では、次になってしまいます。
ListElement:workElement ← listHead(文字列「あ」,次要素へのリンク「無し」)
理由:1要素を表すのはメンバー変数「data」であるため。
問題文を読むと
・「メンバー変数dataは、単方向リストの1要素を表す」
・「引数listHeadには、単方向リストの先頭の要素が渡される」
とあります。
よって、先頭の要素 = data
以上からこの時点では、次の要素へのリンクを表す「nextElement」は渡されない。
従いまして、上記の解釈となります。
お手すきの際によろしくお願いいたします。
質問ありがとうございます!
順を追って説明していきます。
まず、関数の定義を見てみましょう。
-----
◯ListElement: reverse(ListElement listHead)
-----
上記からこの関数について、
引数にはListElement型の変数listHeadが渡されるということがわかります。
ListElementクラスについては、
問題文の表に明確な定義が書いてあります。
-----
・文字列型: data:リストの1要素が保持する文字列
・ListElement: nextElement:この要素の次の要素に対するリンク
-----
さらに問題文には以下の記述があります。
-----
関数reverseが呼び出される時点で、既に単方向リストには値が格納されており、
引数listHeadには単方向リストの先頭の要素が渡されるものとする
-----
よって引数listHeadには単方向リストの先頭の要素が渡されます。
動画内の具体例であれば listhead.data="あ"、listHead.nextElement="い"を値に持つ要素になります。
おっしゃられている(文字列「あ」,次要素へのリンク「無し」)というのは、
要素数が2以上の単方向リストにおいてそもそも先頭の要素になりえません。
「単方向リストの先頭の要素」という時点で
(次要素へのリンク「無し」)というのはありえないと判断してください。
動画内でも説明していますが、単方向リストの次要素へのリンクがないのは、
その要素が1番後ろの要素である場合だけです。
ご回答ありがとうございます。
確かに末尾以外でリンクが無いのはあり得ませんね。
クラスの読み取りも苦手ですが、少しずつ慣れていきます。
私事ですが、体が不自由でメモ書きも一苦労です。なので尚更 時間的にもきついです(^^;
ですが、諦めません。引き続き活用させていただきます。
よろしくお願いいたします。
勉強頑張って下さい!
@@itgakko 追加で質問させていただきます。
【a】について、workElement.nextElement と勘違いしてしまいます。
お手すきの際によろしくお願いいたします。
理由:
ループ終了条件の認識 この認識が原因でしょうか?
処理対象の次の要素へのリンクが未定義になる時点。
次の要素へのリンク = workElement.nextElement であるため。
現在科目Bの勉強で苦戦しています。Aについては免除試験を受けて合格しました。
私の現在の状況なのですが公式のサンプル問題は解けるのですが購入したオリジナル問題がたくさん載っている問題集に苦戦しており解説を見ても?になる問題がたくさんあります。
私はこのまま問題集を続けた方がいいのでしょうか?それとも公式サンプルを重点的に勉強した方が良いのでしょうか?
よろしければさいとうさんのご意見をお聞きしたいです。長文失礼しました。
質問ありがとうございます!
私の見解としては「問題集もやった方が良い」です。
理由としては特にアルゴリズムの問題は
「問題を解く→復習する」
この繰り返しが非常に重要です。
どうしても同じ問題を繰り返しやってしまうと答えを覚えてしまっていたりして
問題を解いても新たな学びが少なく学習効率があまり良くないです。
公式サンプルは問題数もあまり多くないので、
それだけではなく問題集なども利用して
問題演習を多くこなしていくことが大事です。
問題集は基本的にある程度の問題数があれば良いと思いますが、
やり尽くしてしまった場合は、以下の問題集がおすすめです。
77問掲載されていて結構な量を演習できます。
基本情報技術者[科目B]アルゴリズムとプログラミング トレーニング問題集
はじめまして。B試験、いつも550点前後で落としてしまい、再度勉強したくこの動画にたどり着きました。
オブジェクト指向がちんぷんかんぷんな私ですが、1-5問までは安易に解けて、あれ?私理解してるのかも?と思ったところ、6問目からとことん理解出来ておらず、滅多切りにされました(笑)
6問目は解説を聞いて理解できましたが7問目からがよくわかりません。
7問目、1:02:30 の所が不明です。
element value=1と言われていますが、そもそもelement valueの定義が、この問題文から読み取れません。良ければ詳しく教えていただけないでしょうか。
質問ありがとうございます!順を追って説明していきますね。
まずこの問題の解説では、問題の解説の前に具体例として説明している
{ 1, 5, 7, 9 }
この順で値が格納されている双方向リストを題材にトレースしています。
次に、問題文中の関数insertの説明です。
----
... 引数には追加する値insertValue、双方向リストの先頭の要素listHeadを受け取り、...
----
この部分から、関数insertに渡される引数は双方向リストの先頭の値、
トレースに使用している具体例で言うと「1」が渡されることがわかります。
最後に関数insertの先頭の行です。
-----
ListElement: element ← listHead
-----
listHead を 変数element に代入しているので、
elementには「1」が格納されます。
そのため質問いただいているタイミングで、
element.value = 1 になります。
きのう8回目の受験でようやく合格できました。市販本はやり切ってしまい、手詰まりのドロ沼状態で苦しんでいたところ、さいとうさんのチャンネルで這い上がることができました。ありがとうございました。
合格おめでとうございます!
学習を継続しての合格素晴らしいですね!
A615/B790で合格見込になれました!3度目の受験でして,2回ともB550点だったのですが,動画のおかげで
試験中の焦りや考えに詰まることが減ったと実感しております,本当にありがとうございますm()m
ですが試験中は値の並び替え問題1題に15分以上かけてしまい,ラスト6分で問14~16を解く羽目になってました(汗)
合格おめでとうございます!
本番に思うようにいかない点があったにも関わらずB試験790点すばらしいですね!
動画ありがとうございます!
先日、基本情報受けてきました。結果はB試験が685点でした。
さいとうさんの動画のおかげです。ありがとうございました。
ただ、合格見込みではあるものの試験内容が非常に優しめだったため、平均点はかなり高いと思います。
合格基準が7割行くこともあるか心配です。
試験お疲れ様でした!
試験後の結果表示内容が600点を超えていた場合は、不正などが見つからない限りは合格するようです。
※基本情報技術者試験の配点はIRT方式で、問題の難易度などに応じて配点が変わりますが、これは試験直後の結果表示で問題の難易度などが反映された配点での合計点が表示されます。
@@itgakko
ご返信、ありがとうございます!
試験終了後のスコアが600点超えているのを確認したので、さいとうさんの話を聞いて安心しました。
よかったです!
問6の回答についてですが、jをnodeArrayの要素から(nodeArrayの要素数-i−1) まで 1 ずつ減らす ではないのですか? i=2のとき、jは3まで減らせばいいので
質問ありがとうございます!
それだと i=6 の時に (6,-1) という存在しないノードに対するエッジができてしまいませんか?
問10.二分木がヒープ木であるか判定する問題について質問です。
①トレースするにあたりなぜ、「ヒープ木でない条件でトレースしているのかが分かりませんでした。」どこの説明からヒープ木でない条件でトレースに至ったのでしょうか?
質問ありがとうございます!
ヒープ木でない具体例を使ってトレースした理由は、
その方がトレース時間が短い(と予想できるから)です。
まず大前提として、ヒープ木であるパターンとヒープ木でないパターン、
どっちでトレースしても解答を導く上で問題はありません。
しかし、ヒープ木でない具体例を使ってトレースした方が、
トレースにかかる時間が短く済む場合が多いです。
なぜかというと、ヒープ木であることを判定するには全てのノードを調べなければいけないのに対し、
ヒープ木でないことを判定する場合、ヒープ木の条件に合致しない箇所を1つでも見つければそれ以降のノードは見る必要がなくなるからです。
【参考:ヒープである条件】
任意のノードに対して「ノードの持つ値 ≦ 存在する子ノードの持つ値」が成り立つ。
※逆にいうと「親ノードの値 > 子ノードの値」を満たすノードが1つでも存在すればヒープではない。
このように「〜〜である」ということを判定する条件として
ヒープ木のように全てのノードをチェックしなければいけない場合においては、
トレースに使う具体例は「〜〜でない」ものを使った方がトレース時間が短くなる場合が多いので、
他の問題にも応用してみてください!
質問すみません。回答とは関係ない部分ですが。 42:31 resultの末尾にtarget[maxScoreIndex]の値を追加するとありますが、1番大きい要素番号から順に要素番号を並べるということは、配列resultは[3,1,4,2]の順で並べられるということでしょうか?
質問ありがとうございます!
そうですね!
ご記載いただいている[3,1,4,2]というのは
ソート前の要素番号だと思います!
であればresultの順序はその通りの順になります!
問7に関して質問です。
ListElement:element ←Listhead
とありますが問題文中には「element」についての説明がないと思います。なぜ、element は例で言う、1 を表すことになるのでしょうか。
質問ありがとうございます!
結論、問題文中の関数insertの説明から読み取ります。
以下に詳細を記述します。
「引数には ... 双方向リストの先頭の要素listHeadを受け取り...」
問題文の上記記述から、プログラムの以下行の「listHead」には双方向リストの先頭の要素が渡されると読み取ります。
-----
◯ListElement: insert(整数型: insertValue, ListElement: listHead)
-----
さらに関数内で以下のように listHead を element に代入しているので、
element が双方向リストの先頭の要素(例でいう「1」が格納されている要素)だと読み取ります。
-----
ListElement: element ← listHead
-----
公開問題などのオブジェクト指向は解けるようになったのですが、この動画に出てくる問題はさっぱりわかりません。本当にこのレベルの問題が出題されるのですか?
質問ありがとうございます!
結論、出題される可能性はあります。
しかし本番の試験の出題はランダムなので、確実に出てくるとは言い切れません。
先月受験したところAは7割弱だったのですがBは5割5分であと一歩届きませんでした…
なので来月リベンジするのでこの動画も参考にして頑張ります!!
あと少しですね!頑張って下さい!
@@itgakko 先日再受験しA 760点 B 735点でした!!
さいとうさんの動画でBの点数がすごく伸びたので本当に感謝してます!ありがとうございました!!
合格おめでとうございます!
44:22
問4について質問があります。
printNumber2内でprintNumber1を呼び出して変数の値を-1していますが、printNumber1に戻り値がないのに値は変化するのでしょうか?
初歩的な質問になりますが、お答えいただけると幸いです。
質問ありがとうございます!変化します
動画を拝見しているものです。
資料を作成いただきましてありがとうございます。
1点不明点がございまして、ご教示いただけますと幸いです。
問2のプログラムの中の
ListElement workElement←ListHead
ListElement previous←未定義の値
ListElement next←未定義の値
とありますが、ここでの「ListElement」は単なる変数名でしょうか。それともクラス名でしょうか。
その後で、workElement.nextElementというメンバ変数が出てきているので、ListElementが何を指しているかが良く分からなくなっております。
お手すきの際にご教示いただけると大変助かります。
質問ありがとうございます!
「ListElement」はクラス名です。
変数名かクラス名か判断する方法について、
以下で順を追って説明しますね。
まず、プログラムの中である変数が初めて出てくる場合、
必ず「型名 変数名」の形で記述されます。
【正しい例】
ListElement aaa _// ListElementクラスのaaaという変数が宣言される_
aaa ← ListElement("あ")
【誤った例】
aaa ← ListElement("あ") _// 型名を指定せずにいきなり変数を記述する_
上記の誤った例の形では、aaa という変数の型がプログラム上で判断できないため、
正しい例のように「型名 変数名」の形でまず変数の方を明確にしてあげる必要があります。
ご質問頂いている以下の部分は、
どれも上で説明した「型名 変数名」の形になっています。
-----
ListElement workElement←ListHead
ListElement previous←未定義の値
ListElement next←未定義の値
-----
これによってListElementクラスの変数workElement,previous,nextが宣言されるので、
プログラムの以降の行でこの3つの変数が使用できるようになります。
以上、ご不明点ありましたらご連絡いただければと思います。
@@itgakko ありがとうございます。理解出来ました。引き続きよろしくお願いいたします。
勉強頑張って下さい!
何度もコメントすみません。問10で、再起呼び出しでisheaptree(7)でtrueになり、7の処理が終わった後にisheaptree(4)の続きに戻るところまでは理解出来ましたが、なぜrightnodeの方のisHeap←isHeapTree(currenttNode.rightNode)部分に戻るのでしょうか。isheaptree(4)はrightnodeが未定義のため、if文内を処理せずtrueを返すのかと思っていました。
すみません、資料が誤ってます。
正しくは以下の部分(左側の子ノード)に戻るが正しいです。
-----
isHeap ← isHeapTree(currentNode.leftNode)
if (【a】)
return false
endif
-----
お手数ですが読み替えて進めていただければと思います。
たくさん質問してすみません。
1:25:11
問9 辞書に意味を追加する問題において、
プログラム1行目
Wordの配列:addword(Wordの配列:before,文字型列:addvalue,文字型:addmean)の、Wordの配列:beforeが辞書の前の単語を示していると、どこからわかるのでしょうか。
クラスの説明から、addvalueとaddmeanは何を示しているか分かりますが、beforeのみ問題文にないため、どこから引っ張っきたものなのかよく分かりません。
お手隙の際にご教授いただけないでしょうか。
質問ありがとうございます!
まず 関数addWordの引数beforeは「辞書の前の単語」ではなく「単語追加前の辞書の状態」です。
動画内 1:25:11 でもそのように説明しています。
その上で 引数before は問題文の以下に説明があります。
-----
関数addWordは辞書へ単語とその単語の意味を追加するプログラムである。引数に辞書、追加する単語、追加する単語の意味の3
つを受け取り、以下ルールに従い辞書に単語を追加する。
-----
これと実際の関数の定義を照らし合わせて、引数beforeが辞書を表していると読み取ります。
-----
◯Wordの配列: addWord(Wordの配列: before, 文字列型: addValue, 文字列型: addMean)
-----
追加の質問です。
問10で(イ)が誤りの理由がわからずに困っています。
(イ)だと、ヒープ木の場合でも、falseと判定してしまうから間違いなのかな、とは思ったのですが、具体的にどういう場合にどういう挙動を起こして間違った判定になるのかが分かりません。
もしよろしければ教えてください。
今日受験してきて、A635.B750で合格しました!ありがとうございました!
合格おめでとうございます!!
問10でいただいた質問については、
(イ)だと無限ループになってしまい処理が終わらなくなります。
試しにトレースしてみてください。
いつも拝見させていただいております。
問6以降が難しい印象を持っているのですが本番ではこのレベルがバンバン出題されるのでしょうか。
問題文やリストを示す表示も長くてどこを示してるのか混乱してしまい、本番では解答できそうにないので質問させていただきました。
質問ありがとうございます!
推測が混じりますがご回答させて頂きます。
結論としては、問6以降のレベルも頻出とまではいかないもののある程度は出題されると考えた方が良いと思います。以下に理由を記載しますね。
本動画の問6以降の問題は、IPA公式が出しているサンプル問題のうち、難易度が高めのものに合わせたレベルで作っています。
公式サンプル問題については、受験した方から「公式サンプル問題よりも難しい問題が出題された」と言う声は聞きますが、逆に「公式サンプル問題より易しい問題が出題された」との声は聞いておりません。
したがって本動画の問6以降のレベルの問題も本番の試験では一定数出るものと推測しています。
また、問題文が長くて混乱してしまうとのことでしたが、対策としては動画内でも解説している通り、
・実行結果を問う問題はとにかくトレースする
・穴埋め問題は問題文とプログラムをリンクさせて考える(問題文からプログラムの処理内容が書いてある部分を抜き出して考える
以上の内容がポイントです。
前者の実行結果を問う問題では問題文の長さは関係ありません。
根気よくトレースしていけば必ず答えは出ます。
もちろんトレースのスピードを上げるには問題数をこなす必要はあります。
また、後者の穴埋め問題については、文章が長くても処理内容を表している部分はその中の一部です。
問題文からそこをしっかりと抜き出せると良いですね。
ここも問題たくさん解いて1問1問しっかりと解説を見て理解していくことで身についていきます。
勉強頑張って下さい!
詳しくご回答いただきましてありがとうございます!
やはりトレースが大切なんですね、時間がかかりますが理解できるよう何度も解いてみます。
ありがとうございました。
@user-lv4bm8re6e 勉強頑張って下さい!
問3について質問です。
最初にrepeatSizeにtargetの要素数を入れてi回ループすると思います。
そしてjループの後にtargetの要素を削除するとおもうのですが、削除すればtargetの要素が減り、iのループの最後で要素数が足りずにエラーが起きると思うんですがそこについて教えていただきたいです!
質問ありがとうございます!
結論から言うと、エラーは発生しません。
例えば要素数4の配列であれば、
1つ目のfor文は4回繰り返され、
targetの要素数は繰り返し処理の中で
以下のように変化していきます。
・i=1の時:targetの要素数は4→3になる
・i=2の時:targetの要素数は4 3→2になる
・i=3の時:targetの要素数は2→1になる
・i=4の時:targetの要素数は1→0になる
おっしゃっている
「要素数が足りずにエラーになる」
というのがどういう状態を
指しているかは分からなかったのですが、
上記のような場合特にエラーは起きません。
以上、ご不明点ありましたらご連絡頂ければと思います。
質問失礼します。26:17の辺り、問2のコンストラクタ2番目で、nextElememtの値を「引数.nextElememt」で作成すると、引数「お」のnextElememtと同じになり、未定義になってしまうのではないでしょうか。。また、問題文のプログラム内では変数(previousやnext等)の宣言の「:」がなくても大丈夫なのでしょうか
質問ありがとうございます!頂いた質問2つ、それぞれ回答しますね。
> 26:17の辺り、問2のコンストラクタ2番目で、
> nextElememtの値を「引数.nextElememt」で作成すると、
> 引数「お」のnextElememtと同じになり、
> 未定義になってしまうのではないでしょうか。
→まずご質問を整理させてください。
おそらく上記のご質問は「引数」自体がListElementクラスの変数なので、
例で記載している「ListElement: b ← ListElement("え", a)」が実行された場合、
作成されるオブジェクトのnextElementが a.nextElement、つまり未定義になってしまうのでは?という内容だと思います。
結論から言うと未定義にはなりません。
「引数.nextElement」は「引数で渡されたnextElementという変数」という意味を表しています。
そのため、おっしゃられている状況(「お」のnextElement)を表現する場合は、
「引数.nextElement.nextElement」という形になります。
ただ、ご質問いただき、動画内容にわかりづらい所があったと思います。
お手数おかけしてすみません。今後改善していきます。
> また、問題文のプログラム内では変数(previousやnext等)の宣言の「:」がなくても大丈夫なのでしょうか
→すみません、こちらは「:」が必要ですが抜けておりました。
動画概要欄の方で訂正させていただきます。
お手数ですが「:」があるものとして進めていただけますでしょうか。
@@itgakko
回答ありがとうございます。
>「引数.nextElement」は「引数で渡されたnextElementという変数」という意味を表しています。
この「.」は、オブジェクトのメンバ変数を引いてくる「.」とは別のものという事ですね。やっと理解はしましたが、区別が難しいですね。。
ありがとうございます。
@livelife8236 勉強頑張って下さい!
やっと問7まで進みましたが、また質問です。。
この問題の例では値が9までの4つしかない双方向リストになっていますが、これが11や13などで続いていた場合、「繰り返し処理を終了する」に引っかからずに11等次の要素の前にまた要素を追加してしまうのではないでしょうか。
またプログラムのendwhileの後の記述は挿入先が末尾だった場合の処理だと思いますが、これは繰り返しの外にあり、条件もないので、必ず実行されてしまうのではないでしょうか。
すみません、よろしくお願い致します。。
明日テストです 笑
以下に回答しますね!
>この問題の例では値が9までの4つしかない双方向リストになっていますが、これが11や13などで続いていた場合、「繰り返し処理を終了する」に引っかからずに11等次の要素の前にまた要素を追加してしまうのではないでしょうか。
→ 追加することはありません。
双方向リストに要素を追加した後「return resultListHead」が実行されているためです。
おっしゃられている11や13などで続いていたケースをトレースしてみて下さい。
> またプログラムのendwhileの後の記述は挿入先が末尾だった場合の処理だと思いますが、これは繰り返しの外にあり、条件もないので、必ず実行されてしまうのではないでしょうか。
→ 必ず実行されるわけではありません。
これも双方向リストに要素を追加した後「return resultListHead」が実行されているためです。
なるほど!
returnで戻り値を返して、プログラム自体が終了するのですね!素人過ぎました。。ありがとうございます!
よかったです!
どこかで読んだような気はしますが、知らないで行くところでした笑
助かりました〜
ありがとうございます。
試験頑張って下さい!
問2で”い”の"い"のリンクを書き換える説明で不明点があります
2番目:"い"のリンクを書き換える
workElement=い
ListElement: reverse(ListElement listHead)
ListElement:workElement ← listHead
ListElement:previous ← 未定義の値
ListElement:next ← 未定義の値
1行目. while(workElement が 未定義でない)
2行目. next ← workElement.nextElement
次の要素←次要素へのリンク
う← "い"に入っている"う"へのリンク
3行目. workElement.nextElement ← previous
"い"に入っている"う"へのリンク 未定義
4行目. previous ← workElement
未定義 い
5行目. workElement ← next
い う
6行目. endwhile
という理解をしました。こういったことですか?
特に2行目、3行目
2行目. next ← workElement.nextElement
次の要素←次要素へのリンク
う← "い"に入っている"う"へのリンク の理解をいまいち不安でして・・・
3行目. workElement.nextElement ← previous
"い"に入っている"う"へのリンク 未定義 なんで未定義にするのかも理屈が分からないです。
質問ありがとうございます!
3行目のところが違いますね。
1つ前の繰り返しで previous には "あ"を値に持つ要素 が格納されているので、
workElement.nextElement には "あ"を値に持つ要素 へのリンクが格納されます。
日本語で言うと、"い"の次要素を "あ"に変更する といった意味になります。
2行目はあってますよ!
25日に受験予定なのでありがたいです!
勉強頑張って下さい!
問2
next←work element.next element は「いと、次のう」を定義しているのに、次のwork element.nextelement は「い」だけ定義しているのがなんでなのかよくわかりません、、、
質問ありがとうございます!
おそらくプログラムの動きでイメージができていない箇所があって
上記質問をいただいていると思うので、動きについて具体例で説明しますね。
直接的な回答ではないですが、
具体的な処理内容がイメージできると解決すると思いますので、
以下の内容をご確認いただければと思います。
要素数4の単方向リスト{ あ, い, う, え, お }を考えます。
・workElement = 値"う"を持つ要素(次要素へのリンク:値"え"を持つ要素)
・previous = 値"い"を持つ要素(次要素へのリンク:値"あ"を持つ要素)
2つの変数にはこのように値が格納されている状態で
以下①②の行が実行された場合の動きを考えましょう。
-----
① next ← workElement.nextElement
② workElement.nextElement ← previous
-----
①:next ← workElement.nextElement
workElement.nextElementは、値"う"を持つ要素の次の要素なので、
nextには以下のように値"え"を持つ要素が格納されます。
◾next
└値:え
└次要素へのリンク:値"お"を持つ要素
変数nextに対して、値と次要素へのリンクがセットで代入されるイメージですね。
②:workElement.nextElement ← previous
previousは値"い"を持つ要素なので、
workElement.nextElement、つまり値"う"を持つ要素の次要素へのリンクには
以下のように値"い"を持つ要素が格納されます。
◾workElement
└値:う
└次要素へのリンク:値"い"を持つ要素
変数workElementの次要素に、値"い"を持つ要素、
つまり「値"い"」とその次要素へのリンク「値"あ"を持つ要素」がセットで代入されるイメージですね。
これがプログラムの動きの具体例です。
いただいた質問に戻ると、
-----
next←work element.next element は「いと、次のう」を定義しているのに、
次のwork element.nextelement は「い」だけ定義しているのがなんでなのかよくわかりません、、、
-----
とありますが、上記で説明した①②のどちらも
値だけ代入しているのではなく、値と次要素へのリンクをセットで代入しています。
以上、ご確認よろしくお願いします。
14:25 これってなぜoperateStackに()がついているのでしょうか?
プログラム実行なら「operateStack」って打ったら勝手に実行されないんですか?
質問ありがとうございます!
「operateStack」だけでは関数は実行されません。
関数を実行する際は「operateStack()」のように()が必要です。
これは科目Bアルゴリズムのルールですね。
関数を実行する際は「関数名(...)」の形で記述します。
関数に引数がある場合は()の中にカンマ区切りで引数を指定します。
1:44:40のヒープ説明で
再帰7のノードがtrueで終わり4のノードに戻ってくると、
→変数isHeapには呼び出した関数から返された値trueが格納される
isHeap ← isHeapTree(currentNode.rightNode)
if (【a】)
return false
↑いきなりif文でHeapを判定する文をもってこれるのが理由が分かりずらいです
falseをが帰ってくることはisHeap=falseのかと選択肢になるのかと予想でなら出来ますがと解答の根拠が導けれない・・
isHeap ← isHeapTree(currentNode.rightNode) との関連性はありますか
前提として問題はヒープであるかを聞いている事は分かりました
ウエ以外は絞り込めました。
質問ありがとうございます!
isHeap ← isHeapTree(currentNode.rightNode) との関連性はあります。
動画内ではプログラム上側の「isHeap ← isHeapTree(currentNode.leftNode)」で説明していますが、
プログラム下側の「isHeap ← isHeapTree(currentNode.rightNode)」の部分も同じ構造になっており、考え方は同じです。
また、
「falseをが帰ってくることはisHeap=falseのかと選択肢になるのかと予想でなら出来ますがと解答の根拠が導けれない・・」
とありますが、これについてはプログラムの中でfalseを返している部分を抜き出して考えると良いです。
-----
if (currentNode.value > currentNode.leftNode.value)
return false
endif
-----
例えば上記の部分でfalseを返しています。
if文の条件を日本語に直すと「左側の子ノードの値がそのノードの値より小さい」という意味になります。
この条件に合致する場合にfalseを返しています。
この「左側の子ノードの値がそのノードの値より小さい」が成り立つ場合、
その二分木は即ヒープでないと判断できますよね。
なので再帰呼び出しした結果falseが帰ってきた時は
既にその二分木はヒープでないということになるので、
「isHeap=false」が解答になります。
以上、ご不明点ありましたらご連絡いただければと思います。
解説ありがとうございました。私もヒープと二分木と混乱していて、最初
if (currentNode.value > currentNode.leftNode.value) のコード見て合ってないか?と理解が出来ず悩みましたが、
では本題
isHeap ← isHeapTree(currentNode.rightNode ヒープ判定をする
if (【a】)
return false ←falseを返すというのはヒープではないことを意味するので
ではif文に入るのはヒープが偽である条件がここに入る
よってisHeap=false エ
ということでよろしいでしょうか
そうです!
@@itgakko ありがとうございました
勉強頑張って下さい!
問9のメンバ変数、コンストラクタ、メゾット問題文のどこに定義されてるんですか?
解説の時急に出てきても困るんですが
質問ありがとうございます!
動画内の 1:21:36 あたりで投影してますね!
問3のjで何番目の生徒を指すかは理解できたのですが、iがなにを指しているのかわかりません。
教えていただけると嬉しいです。
質問ありがとうございます!
このプログラムで i 自体に意味はありません。
理由はfor文内の処理で i を使用していないためです。
※ for文の文法上「◯を△から□まで×ずつ増やす」という記述が必要なので、
プログラム上では i を使っています。
問2で躓いています。質問させてください。
while文3行目で
workelement.nextelement← previousで 具体例「あ」の次のリンクがなくなるという理屈がわかりませんでした。
workelement.nextelementは「い」のことを指しているから「い」のつぎのリンクがなくなるということではないのでしょうか?
またpreviousをいれると次へのリンクがなくなる理由も分かりませんでした。
宜しくお願いします
質問ありがとうございます!
問2のプログラムの具体例{"あ","い","う","え"}でのトレースについて、
while文1回目の繰り返しの処理に関するご質問だと思います。
該当箇所を説明する前に、まず単方向リストについて改めて説明します。
トレースで使用している具体例{"あ","い","う","え"}を単方向リストの形(値と次要素へのリンク)で表すと以下のようになります。
[先頭の要素]
・値:"あ"
・次要素へのリンク:値"い"を持つ要素
[2番目の要素]
・値:"い"
・次要素へのリンク:値"う"を持つ要素
[3番目の要素]
・値:"う"
・次要素へのリンク:値"え"を持つ要素
[4番目の要素]
・値:"え"
・次要素へのリンク:未定義
単方向リストでは末尾の要素は次要素を持たないので、
次要素へのリンクは未定義と表されています。
またもう1点注目するべきは、単方向リストの要素が持つのは
「次要素へのリンク」であり「次要素自体ではない」ということです。
これを踏まえてご質問の内容を見ていきましょう。
workElement.nextElement← previous
この行を日本語に置き換えると、変数workElementの次要素へのリンクに変数previousの値を格納する。
こうなります。
さらに具体例でのトレースのwhile文1回目で言うと
"あ"を値に持つ要素の次の要素へのリンクに変数previousの値を格納する。
このような意味になります。
変数previousはこの時点で未定義となっているので、
"あ"を値に持つ要素の次の要素へのリンクが未定義になります。
つまり"あ"を値に持つ要素の次の要素へのリンクが
次要素へのリンクを持たない形に変わるので、
「あ」の次のリンクがなくなるということになります。
workElement.nextElementは次要素自体を表しているのではなく、
このようにあくまで次要素へのリンク(リンクではなく参照と表現している問題もあります)なので、
ここまで説明してきたような解釈になります。
次要素へのリンクを別の値に書き換えても、その要素自体が書き換わるわけではありません。
以上、ご不明点ありましたらご連絡頂ければと思います。
@@itgakko
返信ありがとうございます。
次の要素ではなく、次要素のリンクなんですね!
また、質問させといただくかもしれませんが、よろしくお願いします
@user-zf1te8xc8y 勉強頑張って下さい!
@@itgakko
本日試験だったのですが勉強開始から1ヶ月で受かりましたー!
午後試験対策は斎藤さんの動画以外はほぼやってないのですが、点数取れました!
ありがとうございました!
この後、応用情報も受験予定なのでまたお願いします!
合格おめでとうございます!
応用情報の動画も楽しみにしていて下さい!
大変勉強になり、助かります。
私の勘違いでしたら申し訳ないのですが、問5についてなのですが、問題文の2文目は、スタックではなくキューではないでしょうか。
おっしゃる通りキューのことですね。大変失礼しました。
お手数ですがキューと読み替えて進めていだだけますでしょうか。
@@itgakko ご返信ありがとうございます。本日、試験を受けてきたのですが、先生のお陰で、以前までよく分かっていなかったオブジェクト指向の問題に苦戦することなく、科目Bで875点取ることができました。重ねて感謝申し上げます。
合格おめでとうございます!
875点素晴らしいですね!
参考書だと「クラスは鯛焼きの型です」(ふんふん)「インスタンスは鯛焼きです」(ふんふん)「じゃあ問題です」(???)←みたいな流れなので混乱するんですよね
頭の中が鯛焼き一色になった記憶があります
コメントありがとうございます!
イメージ自体は非常に大事なのですが、あくまでイメージはイメージなので「じゃあ擬似言語上ではどういうことなの?」を理解する必要があります。動画の中ではそれを説明しているので見ていただけると幸いです!
この問題って自作のものですか。難しいのも多いですが勉強になります。
自作問題です!勉強頑張って下さい!
5:17
自分用
58:10
動画で投影している教材全202ページはさいとうの公式LINEに登録頂くと無料でダウンロードできます!
無料で教材が欲しい方は概要欄からLINEに登録してみて下さいね!
今回の動画の教材名:【問題演習付き】科目Bオブジェクト指向完全攻略(基本情報技術者試験|アルゴリズム)
質問です。問題6の選択肢アはなぜ不正解なのでしょうか?
(途中で送ってしまいました)自分なりにトレースしてみたら(2,1)、(3,1)、(3,2)と個数が増えていくパターンですがiは6までなので(6,5)で重複なく進めるのではないかな?と思いました。無向グラフのノードは小さい方から増えていく決まりなのでしょうか。
申し訳ありません。
解答群の選択肢、(ア)が誤っており、(ア)も正しい答えとなっておりました。
(ア)も(エ)も無向グラフにおける完全グラフを作成できる選択肢になります。
動画と教材については以下の通り訂正を入れさせて頂きました。お手数おかけしてしまい申し訳ありません。
-----
■対象:問6.無向グラフにおける完全グラフの作成
・解答群の選択肢(ア)が誤っており、(ア)も正しい答えとなっておりました。
以下の通り訂正させて頂きます。
・正:(ア) j を 1 から (nodeArrayの要素数-i) まで 1 ずつ増やす
・誤:(ア) j を 1 から i まで 1 ずつ増やす
-----
早速ありがとうございます。当初アの選択肢で導いた分も正しくなるものだったのですね。自分なりのトレースも間違ってはいなかったとわかって少し安心しました。解法が腑に落ちるよう繰り返して解きます。最後になりますが動画配信ありがとうございます。勉強のネタが増えて嬉しいです。
@user-cq2cf5hh4g お手数おかけしました。
勉強頑張って下さい!
クラスの対になるのはインスタンスでしょ。
コメントありがとうございます!そうですね!
誤字多いな…
コメントありがとうございます!すみません!
7から難易度がかなり上がるなぁ
そうですね!後半につれて難易度が高くなるように設定しています。