Размер видео: 1280 X 720853 X 480640 X 360
Показать панель управления
Автовоспроизведение
Автоповтор
⚠学習前にご確認ください!・誤りがあった場合に概要欄で訂正している場合があります。動画におかしな点があった場合、まずは概要欄のご確認をお願いします。・動画で投影している教材は、本動画の概要欄からさいとうの公式LINEに登録頂くと無料でダウンロードできます! ※概要欄で訂正している内容が反映されたものをダウンロードできます。
先日科目B受けて無事合格点超えました!受験直前まで全く対策出来てませんでしたが、この動画の解説のおかげでアルゴリズムの理解が深まり、本番も確信を持って答えを選べました。ありがとうございます!
合格おめでとうございます!自信を持って答えられたのも素晴らしいですね!
この動画と、公式LINEに載せてる最新版の解説しか科目Bの対策はやってませんが無事8割弱とれて合格することが出来ました。本当にありがとうございます。
合格おめでとうございます!!
今日無事受かりました!ほぼこの動画のおかげといっても過言では無いです!本当にありがとうございました!これから応用情報に向けて頑張ります。
合格おめでとうございます!次は応用情報ですか、頑張ってください!
サンプルよりも本番の問題が難しく、手応えなかったのですが845点も取れました。多少時間かかっても実行結果を書いて解いた結果だと思っています。本当にありがとうございました。
合格おめでとうございます!素晴らしいですね!
すごい!大学の補習授業と並行しているのですが、口頭の説明だけだと分からないこともあり、図やマーカーのおかげでイメージがつきやすく、すごくわかりやすいです!この動画を無料で提供して下さり、ありがとうございます🙇♂️
コメントありがとうございます!勉強頑張ってください!
本日無事合格することができました。こちらの動画に本当に助けられました、20回くらい見たと思います笑主さんのように人に説明するつもりで解いて練習すると頭の整理ができておすすめです。今勉強している皆様が無事合格できますように。
合格おめでとうございます!わざわざご報告いただき嬉しいです!記載いただいている通り人に説明するレベルまでいければ完璧ですね!
2.2.20回!?
ほぼ一夜漬けでの受験でしたが、この動画だけで午後試験十分な点を取ることができました。問題ごとの手の付け方から詳しい解説まで参考になりました。ありがとうございます。
合格点おめでとうございます!嬉しいコメントもありがとうございます!
34:56 急に説明飛んで分からなかったけど、tree[1][1]は「treeの1番目の要素の1つ目」ってことなのね・・・。だからorder(2)となるわけか、これは飛ばされたら泣きそう・・・!
ご意見ありがとうございます!泣かせてすみません。本問題のような2次元配列は以下で詳しく解説していますので、よろしければこちらもご覧ください。【初心者向け】基本情報技術者試験 科目B|アルゴリズムをゼロから理解するruclips.net/video/waAwVXa9y2o/видео.html(問6.配列(応用))
@@itgakko あざっす!
勉強頑張って下さい!
いつもお世話になっております。情報系出身ではない私は御チャンネルの動画を見て、アルゴリズムへの苦手意識を解消させ、理解も深めました。おかげで本日基本情報技術者試験に合格しました。心から感謝しております。
合格おめでとうございます!嬉しい報告ありがとうございます!
サンプル問題は初見で20問中17問正解できました。科目Bは「出るとこだけ!」シリーズの参考書を勉強していたので、その成果を発揮できたと思っています。間違えた問題は、この動画の解説を見て理解することができました!解説が分かりやすくて助かりました。来週が試験本番なので、合格の報告ができるように頑張ります!(過去問やサンプル問題含めて、科目A、Bともに及第点はありますが、試験本番は何があるか分からないので、気を引き締めて臨みたいと思います)
いいですね!来週の試験頑張って下さい!
一夜漬けでFE試験に臨みましたが、科目Bはこの動画だけでなんとかなりました!ありがとうございます!
受かりました!B試験全く手付かずで焦っていたところこの動画を見つけ救われました…感謝です。
お陰様で前日670点を取りました。ありがとうございます!!✳︎外国人のため、日本語文章を読んだ時、スピードは遅いから、内容は長い問題を二つスキップしました。。
670点素晴らしいですね!おめでとうございます!
基本情報合格しました!!この動画のおかげで理解深めることでき、本番で活かすことができました。本当にありがとうございます。
この動画の解説を聞いて理解を深めたことで、合格点を取ることができました!動画を作成していただき、本当にありがとうございます!
合格おめでとうございます!
基本情報処理技術者を合格しました!解説が分かりやすくとても助かりました。本当にありがとうございました!
合格おめでとうございます!わざわざ報告頂いて嬉しいです!
ついに、科目Bが600点越えました!連続不合格の中、本動画にたどりつきました。プログラミング未経験でしたが、繰り返し関連動画を参照することで理解が深まりました。また、質問にも丁寧に回答頂き感謝しかありません。有名どころの参考書を繰り返すより動画を何度もみることが合格につながったと思います。ありがとうございました。今後の配信も楽しみにしております。
科目B合格点到達おめでとうございます!!未経験からの合格点到達素晴らしいですね!またThanksありがとうございます!より良いチャンネル運営に使用させていただきます!
先日、基本情報技術者試験受けて合格しました!理解の難しかった科目Bですが動画の解説のおかげです。ありがとうございました!
試験日が近づいてきました。毎日この動画を見ます。
試験頑張ってください!
こちらの動画のおかげであやふやだった問題ごとのアプローチがうまくできそうです!ありがとうございます!
コメントありがとうございます!勉強頑張って下さい!
本日基本情報を受けて合格できました!動画とても参考になりました!ありがとうございます!
合格の助けになりました。ありがとうございます。
先生!サンプル問題を人に解説出来るレベルまで仕上げることが出来たのに落ちてしまいました。🥲やはり試験なので回によっての難易度ってあるものですかね。。。勉強したことのない分野からの出題が多くとても難しかったです。
質問ありがとうございます!試験ごとに出題される問題はランダムなので、感じる難易度にある程度のばらつきはあります。サンプル問題は完璧だと感じるのであれば、その他いろいろな問題を解いてもっと実力をつけると良いですね!
試験が今月に迫っていますが、とても参考にさせてもらっています。一緒に解いていくうちに自信もつきます!本当にありがとうございます!
コメントありがとうございます!試験頑張って下さい!
科目Bに苦手意識を持っていたのですがさいとうさんの動画で各パターンの問題の考え方、解き方のコツを掴むことができるようになり無事に試験合格しました☺️🎉わかりやすい解説ありがとうございます!
今日試験を受けてきました!受けながら絶対落ちたと諦めてたんですギリギリで無事に合格できました😢問1すら分からなかった私が合格できたのは間違いなくさいとうさんのおかげです😭貴重な動画本当にありがとうございました!
さいとうさんの動画はとても分かりやすので是非2024年の公開問題の解説動画も上げて頂きたいです!!待ってます!!
リクエストありがとうございます!
何度かチャレンジして、やっと合格できました!この動画のおかげです。ありがとうございます!今後も勉強は続けていきます!
購入した科目B対策の教科書では、プログラムの実行結果を表に書くときに、行ごとに結果を書いていました。この動画では、行ごとの結果を書くのではなく、for文のiの値や再帰関数の引数ごとに結果を書く方法も紹介されていて、2つ目の武器を手に入れることができたのがありがたかったです。
お世話になります。こちらの動画で、無事合格することができました。5年前に午後試験で落ちて、苦手意識が強かったですが、動画の通り一つ一つ手を動かし回答できました。感謝の気持ちです。ありがとうございました。
合格おめでとうございます!苦手を克服して素晴らしいですね!
ビデオのおかけで1週間対策で科目Bは700点を取れました!ありがとうございました!
アルゴリズムちんぷんかんぷんだった私ですがこの動画で勉強→再度自分のみで解くの短期間勉強で無事に合格できました!860/1000なので満足の結果です!本当に感謝しかないです😭ありがとうございます!
合格おめでとうございます!高得点ですね!わざわざ報告ありがとうございます!
この動画見る前は全くと言っていいほど解き方とか分からなかった感じですか?自分明日試験なんでこの動画みて勉強しようと思ってます!
@@もらたで工藤 そうですね、ほぼほぼ分かってない状態でした。明日頑張ってください🫡
@@mihapi ありがとうございます!(´▽`)
お陰様で合格できました✨ありがとうございました😊
解説が流れる様に早くて、理解しながら付いて行くのは大変でした、、
コメントありがとうございます!
解説ありがとうございます。基本的なアルゴリズムはできるのですが、少し複雑なアルゴリズムになると苦手意識が出てしまいどうしても勉強が捗れません。出来れば四月中に取得したいと考えておりますが、こんな私にアルゴリズム(試験B)の勉強法と応援ください。
ご質問ありがとうございます。勉強法についてですが、アルゴリズムはとにかく問題の量をこなすことが大事です。また問題の解説を見て復習する際に、ただ単に「理解した」ではなく「同類の問題を次に解くとしたら解ける」というレベルまで復習することが重要です。3月下旬にIPA公式のサンプル問題の類似問題の解説動画を追加でアップ予定ですので、受験までに間に合えばそちらもご利用ください。基本情報技術者試験の勉強頑張ってください!
あと2週間も無いくらいで科目B試験あります😭毎回20問中5問しか正解しません💦残りわずか動画活用させていただきます!!
ずっと科目Bが不安でしたが、645点ですがギリギリで合格することができました!本当にこの動画のおかげで、再帰を始めこれまで理解が難しかったアルゴリズムの問題がしっかりと解けました!!ありがとうございました!!!
合格おめでとうございます!報告嬉しいです!ありがとうございます!
IPA公式の問題サンプルはこちらです!科目Aの問題もあるのでチャレンジしてみてくださいね🤗www.jitec.ipa.go.jp/1_00topic/topic_20221226.html
基本情報合格しました!さいとうさんのおかげでトレースの仕方が分かり、アルゴリズムを理解していくことができました。ありがとうございました。
Thanks機能を解除していただきありがとうございます。お陰様で無事に合格しました。Thanksさせていただきます🎉
改めて合格おめでとうございます!Super Thanksありがとうございます!ありがたくいただきます!
アルゴリズムで🤔←状態だったので、主さんの解説動画で理解が深まりました!新方式頑張っていきます!
ありがとうございます!!アルゴリズムの勉強頑張ってください🤗
お陰様で無事に合格しました。ありがとうございます🙏Thanksでお礼を申し上げたいと思います。さいとう先生のThanks機能制限がされているようですが、thanksできないです😢
合格おめでとうございます!!Thanks機能というものがあるのですね、知りませんでした!機能はオンにしてみましたが、わざわざもう一度Thanksはしなくても大丈夫です!合格のご報告頂けたのが嬉しいです。
@@itgakko 返事が遅れて申し訳ないです。THANKS機能制限を解除していただきありがとうございます。先程Thanksを申し上げました😌本当にありがとうございました😊
別のThanksコメント確認させていただきました!ありがとうございます!
6→❌ 実際に書いてみる8→△ 実際に書いたらできる9→❌ 再帰関数の動き方が分からなかった10→❌
13→△ 実際に書いたらできる
14→△ 実際に書いたらできる15→❌ 考え方がわからなかった16→❌ シンプルに難しい
17〜20 セキュリティの知識をつける
神様ですか!?紙での解説も欲しい・・どこかに載ってたりしますか?
ありがとうございます!投影している資料のPDF版でよろしければ、動画概要欄から公式LINEに登録して頂くとダウンロードできます🤗
この動画のおかげで無事合格することができました。お世話になりました。
ありがとうございます。
ありがたいっす😊
ほぼこの動画でしか科目Bの対策しませんでしたが、なんとか合格できました。的確で分かりやすい説明を80分の動画にまとめてください大変ありがとうございました。
さいとうさんのおかげで合格することができました!お世話になりました!
わかりやす!
@@itgakko 合格しました!ありがとうございます。
@akira_in_the_morning 合格おめでとうございます!
先日基本情報技術者試験を受け、3回目のチャレンジで合格点クリア出来ました。この動画を何度も見て解いてを繰り返したお陰です。本当にありがとうございました。次は応用情報技術者試験にチャレンジします。これから基本情報技術者試験を受ける方にもオススメさせていただきます。
自信があったのに500点で落ちてしまいました。問題の難易度としても、11問は理解できていると思いながら解きましたが時間が足りなくて見直しを行いませんでした。自分としては次の学習として何をするべきなのかわかりません。
まずは試験お疲れ様でした!仮に11問全て正解していたとしても不合格の可能性が高いので、もっと問題演習をして実力アップ&解くスピードアップしていくのが良いですね!
問4の解説で num1=24 num2=60 という具体的な数値で考えました。whiley←y-x36←60-24y←y-x12←36-24X=24 Y=12x=x-y12=24-12X=12 Y=12x>y 偽endwhile終了
コメントありがとうございます!記載頂いた具体例 num1=24、num2=60、プログラムの流れ含めて合ってます。
問3のoutの要素数について質問です。"要素数"という内容から"outの配列の長さ"だと解釈したのですが、ここはどのように考えればoutの中身の3を代入するという思考に至るのでしょうか?
質問ありがとうございます。動画内8:48あたりから説明している、i=2の場合の、tail ← out[outの要素数]、ここでtailに代入される値がなぜ3なのかという質問だと思います。記載頂いている通り、「outの要素数」は「out配列の長さ」となります。i=2の繰り返し処理開始時点で、「out配列の長さ」は 1 ですので、i=2の場合の、tail ← out[outの要素数]、という記載は、tail ← out[1] になります。この時点での 配列out = {3}、となっていますので、tail に 配列out の 1番目の要素である 3 が代入されます。不明点ありましたらご連絡いただければと思います。
@@itgakko ありがとうございます。ご説明していただいた内容で理解できました。また何かありましたら質問させていただきたいと思います
よかったです!
@hirohi9370 質問ありがとうございます!まず、この問題の解答は ウ ではなく カ です。その上で頂いた「問3のtailの要素数というのは、要素の個数ではないのでしょうか?」という質問についてですが、すみません、この質問の意図を読み取れませんでした。おそらく頂いている質問はプログラム上のtail ← out[outの要素数] こちらの部分を指しておられると思います。また、さらに記載いただいている以下の内容ですが、in={3}→要素数1In={3,2,1}→要素数3プログラム上では inの要素数を使用している箇所はfor文の繰り返し回数を指定している箇所だけであり、inは上記のように格納されている値は変化しないため、何を指されているのか読み取ることができませんでした。お手数ですが、不明点をより詳細に教えていただければと思います。
これtail←outの要素数=1って考えちゃってるってことですね。実際はtail←out[outの要素数=1]となってout[1]で、現状out{3}だから3ってことです。
今回、午前免除等でなく午前と午後のフルタイムの受験です。午前は余裕で基準をクリアできましたけど、やはり、午後が難しい。前回はあと一歩のところで、不合格。今回は話しにならない点数。皆さんが言うように、午後対策に特化した講義です。しかしながら、人により、問題との相性がピッタリはまらないと、初見のオンパレードで地獄を見ます。見たことがあると、感じられるならば、感触どうりに得点できるだろうけど、運がなかったのかな。
コメントがありがとうございます!見たことがあると感じられる問題が出てくるのは期待できません。見たことがある問題が出てきたらラッキーくらいに考えた方が良いです。
解説ありがとうございます。問8の二分木の問題で、処理の手順について質問があります。if (tree[n]の要素数 が 2 と等しい) order(tree[n][1]) ・・・処理① n を出力 ・・・処理② order(tree[n][2]) ・・・処理③とありますが、IFの条件を満たしたら処理①を行い、次に処理②に行かないでまたIFの条件を満たすか確認して処理①にいくのがわかりませんでした。
質問ありがとうございます!order(1)と呼び出された場合の処理順について以下に説明しますね。-----◯order(整数型: n)1. if (tree[n]の要素数 が 2 と等しい)2. order(tree[n][1])3. n を出力4. order(tree[n][2])5. elseif (tree[n]の要素数 が 1 と等しい)6. order(tree[n][1])7. n を出力8. else9. n を出力10. endif-----まずorder(1)と呼び出されると、1行目でif文の条件式が実行されます。tree[1] = {2, 3} で要素数が2なのでif文内の処理が実行されます。次に2行目の「order(tree[n][1])」が実行されます。これは関数orderの呼び出しです。関数内で関数が呼び出された場合、実行中の関数(ここではorder(1)として呼び出された関数)は中断されて、新たに呼び出した関数が実行されます。tree[1][1] = 2 なので、order(2)が新たに実行されます。中断したorder(1)はorder(2)の処理が終了したら再開されます。order(2)が呼び出されるとまた先頭から実行されます。1行目のif文の条件式が実行され、tree[2] = {4, 5} で要素数が2なのでif文内の処理が実行されます。このような処理順で続いていきます。そのためおっしゃっている「IFの条件を満たしたら処理①を行い、次に処理②に行かないでまたIFの条件を満たすか確認して処理①にいく」順番で処理されます。以上、ご不明点ございましたらご連絡いただければと思います。
解説とても助かっています。ありがとうございます!問16が難しいです…。素朴な疑問なのですが、1桁が1ビットとどこかで習って、6桁だと6bitだと思っていたのですが、64bitになるのがよく分からなくなってきました…(2^6で64になるのは理解できました)
質問ありがとうございます。回答します。まず、記載頂いた「1桁が1ビット」はあっています。細かいのですが、より正確に言うと「2進数の1桁が1ビット」になります。コンピュータ上の処理の話で、扱われるデータは 0 or 1 なので、"2進数の"という枕言葉が必要です。上記を踏まえた上で、記載頂いている ① 2進数の6桁は6ビット ② 2進数の6桁は64ビットこちらの違いについて説明しますね。結論から言うと、どちらも間違いではありません。ただし、どちらも日本語が一部省略されていて、 ① 2進数の6桁「のデータサイズ」は6ビット ② 2進数の6桁「で表現できる値の全パターン数」は64ビットと補足してあげるとどちらも適切で正しい記載になります。まず①については、2進数の6桁なので、1 or 0 が入る箱が6つあるイメージです。例えば2進数「101010」であれば、以下のようになり、コンピュータ上でのデータのサイズは 6ビット になります。 |1|0|1|0|1|0|次に②については、具体的な2進数の値のデータサイズを表しているのではなく、「6つの箱があれば、表現できる2進数の値は全部で 64(2の6乗)パターンある」と言う意味になります。ご質問頂いた内容に対する回答としては以上となるのですが、問16で頂いた質問ということで、なぜ64で割る必要があるのか、という部分に疑問があるかもしれませんので、なぜ64で割るのかを下記に補足で記載しておきます。何かご不明点などあればご連絡ください。ーーーーーーーーーーーーーーーーーーなぜ64で割った余りが後ろの64ビットになるのか、まず、2進数で話をする前に、10進数の場合で考えてみましょう。例として、以下の「xxxxxx」の部分に10進数「333,222,222,111,111」を右詰めで格納する時の処理を考えます。 対象:33xxxxxx 22xxxxxx 11xxxxxxまず結果だけ見ると、33000333 22222222 11111111 になりますよね。これをプログラムで表現するために計算上どうやっているかを考えます。以下の通りです。①11xxxxxx の部分を穴埋め 「333,222,222,111,111」の"右側6桁を取得" この右側6桁を取得するという計算を具体的な計算式で書くと 「333,222,222,111,111」を1,000,000 で割った余り になります ※333,222,222,111,111 ÷ 1,000,000 = 333,222,222、余り111,111 なぜこのようになるかというと、1,000,000で割るというのは、 小数点を6桁右にずらすと同義で、小数点以下にずれた6桁が余りになるからです また、1,000,000 で割った商、「333,222,222」 つまり小数点を6桁右にずらした結果の小数点より左側の値を 次の②で使用します②22xxxxxx の部分を穴埋め 「333,222,222」の"右側6桁を取得" つまり「333,222,222」を1,000,000 で割った余り を取得 また、1,000,000 で割った商、「333」 つまり小数点を6桁右にずらした結果の小数点より左側の値を次の③で使用します③33xxxxxx の部分を穴埋め 「333」の"右側6桁を取得" つまり「333」を1,000,000 で割った余り を取得問16の内容を全ての値が10進数として扱うと上記のような計算を行うことで結果を得ることができますここでポイントなのは、10進数でいう6桁分の値を抽出するには、 1,000,000で割る = 小数点を6桁右にずらす (10の6乗で割る)という処理が必要だということです問16の内容に戻って、2進数で考えるとき「小数点を6桁右にずらす」には何をすればよいでしょうか。これが2進数だと「64で割る」という計算になります。もっとポイントを押さえた形で書くと、「2の6乗で割る」ということになります。2進数と10進数の違いは1桁あたりで表現できる数字の数になります。 ・2進数の1桁で表現できる数字の数は0と1の2パターン、 ・10進数の場合は0,1,2,3,4,5,6,7,8,9の10パターン、その為「小数点をn桁右側にずらす」ためには、それぞれ上記のパターン数のn乗で割った余りを求める必要があります。 ・2進数の場合:2のn乗で割る ・10進数の場合:10のn乗で割るーーーーーーーーーーーーーーーーーー
ご丁寧にありがとうございます!64で割る理由がピンときていなかったのですが、10進数で例えてくたさったらとても分かりやすかったです!今後も動画を活用させていただきます…!
@@かまささ-o7r よかったです!基本情報技術者試験の勉強頑張ってください!
30日に受けるのですが、サンプル問題の正答数は16/20でした。公開問題を見た感じ、サンプル問題よりも全然難易度が高い問題が予想されますが、どうなんだろ笑
試験本番ではランダムに出題されるので確実な内容は分かりませんが、サンプル問題よりも難易度が高い問題が出たというお話もよく聞きますので、レベルの高い問題も練習した方が良いと思います!
コメント失礼しますこの20問の対策のみでは、本試験に対応するのにはさすがに不十分ですよね??
質問ありがとうございます!十分かどうかは人によって変わるのでなんとも言えませんが、この20問がすらすら解けないのであれば、その他の問題も解いて練習するのがいいと思います!
先生!何とか受かりました!✨科目A 725点、B 610点…ギリッギリでした😂どちらも見たことない問題のオンパレードで半分以上がそんなのだったんでAからすでに心が折れそうでした😢でも受かって良かった🎶先生の対策のおかげです!ありがとうございました!!
過去問道場とかの感覚や、先生の対策やった感覚ではどっちも800点は出るだろうと思ってて『合格は当たり前として、いかに高得点で受かろうか』って調子乗ってたら難しすぎて一気に現実を突きつけられました😂前回合格率高かったからきっとIPAが難しくしたんだー(´;ω;`)では次のIT資格の勉強に移ります!後日、今回の試験の問題が発表されて、先生が解法動画アップしてくださったら確認しに来ます(笑)
次の資格の勉強頑張って下さい!試験の問題は毎回ランダムなこともあり、今回受験された問題が公開される可能性は薄いですね。
@@itgakko あらー、そうなんですねー(´・ω・`)もし応用情報受けるときには、いつか先生が対策してくれるかも知れませんので、またお世話になるかも知れません😏(仮定の仮定の仮定w)
すみません再度質問失礼します。問16に関してなのですがcpというのはこの場合何を指しているのでしょうか?数値としては無いのでしょうか?またこの場合の具体的な結果の数値はどのようになりますでしょうか?初学者で不明点多くて申し訳ありません。よろしくお願いします。
また本文中では2進数のビットパターンで記載されていて、プログラム上では10進数での記載がされているためプログラム上の値を2進数に変換してしてしまったのですが、この場合は10進数のまま進めていくのでしょうか?加えてこの配列に格納されている3つの値はそれぞれ別物で考えるのか一つのものとして考えるのかどちらでしょうか?何度も申し訳ありません。答えていただければ幸いです。よろしくお願いします。
質問ありがとうございます!いかにそれぞれ回答しますね。・cpというのはこの場合何を指しているのでしょうか?数値としては無いのでしょうか? →変数cpはプログラム上以下2つの値を格納しています。 cpに対して割り算した結果をさらにcpに格納しているので、 何か1つのものを指してはおらず、役割が変わっていっているイメージです。 ・引数で渡された Unicode の符号位置 ・引数で渡された Unicode の符号位置について、 ビットパターン(配列utf8bytesに格納されている値)で割った商・この場合の具体的な結果の数値はどのようになりますでしょうか? →問題の具体例にある”あ”の符号位置 3042(16進数表記) が 本プログラムの引数に渡された場合を例に説明しますね。 以下プログラムの動きです。「//_斜体_」で具体値など補足しています。 最終的にプログラムから返される値(10進数表記)が{227, 129, 130}となります。 これを2進数表記に直すと{11100011, 10000001, 10000010}となり、 問題文に記載してある"あ"のutf-8の記号に一致します。--------------------整数型の配列: utf8bytes ← {224, 128, 128}整数型: cp ← codePoint _// cp = 12354(16進数表記3042 を 10進数表記に直した形)_整数型: ifor (i を utf8bytes の要素数 から 1 まで 1ずつ減らす) _// i=3 から i=1 の3回繰り返す_ ・繰り返し1回目(i=3) utf8bytes[i] ← utf8bytes[i] + (cp ÷ 64 の余り) _// 12354 ÷ 64 の余り = 2 なので、_ _// utf8bytes[3] = 128 + 2 = 130 となる_ cp ← cp ÷ 64 の商 _// cp ÷ 64 の商 = 193 なので、_ _// cp = 193 となり、次の繰り返しへ_ ・繰り返し2回目(i=2) utf8bytes[i] ← utf8bytes[i] + (cp ÷ 64 の余り) _// 193 ÷ 64 の余り = 1 なので、_ _// utf8bytes[2] = 128 + 1 = 129 となる_ cp ← cp ÷ 64 の商 _// cp ÷ 64 の商 = 3 なので、_ _// cp = 3 となり、次の繰り返しへ_ ・繰り返し3回目(i=1) utf8bytes[i] ← utf8bytes[i] + (cp ÷ 64 の余り) _// 3 ÷ 64 の余り = 3 なので、_ _// utf8bytes[1] = 224 + 3 = 227 となる_ cp ← cp ÷ 64 の商 _// cp ÷ 64 の商 = 0 なので、_ _// cp = 0 となり、繰り返し終了_endforreturn utf8bytes _// utf8bytes = {227, 129, 130}_--------------------・本文中では2進数のビットパターンで記載されていて、 プログラム上では10進数での記載がされているため プログラム上の値を2進数に変換してしてしまったのですが この場合は10進数のまま進めていくのでしょうか →問題を解く上では 2進数 or 16進数 どちらで考えてもOKです。・加えてこの配列に格納されている3つの値は それぞれ別物で考えるのか一つのものとして考えるのかどちらでしょうか? →すみません、こちらの質問の意図を読み取ることができませんでした。 具体的に考える上で困った理由、箇所などを教えていただけないでしょうか。
この動画のおかげで今日合格出来ました。ありがとうございました。
悔しい…、B試験525点でした…。また受けます。次は絶対…。
試験お疲れ様でした!対策して次合格目指しましょう!
問12は文章とプログラミングを照らし合わせると、文章に答えがそのまま書いてありますね😂見掛け倒しの問題だ
そうです!素晴らしいですね!そこに気づければ早く解けると思います!
本日受験してA705,B680でした。合格見込みです。ありがとうございました!
合格ライン到達おめでとうございます!!
考え方の解説ありがたすぎる!サンプルと参考書の少量の問題しかやっていなくて不安なのですが、他にどのような勉強をしておくべきでしょうか?学校で午前免除を受け合格済みです。午後だけのアドバイスをお願いします!!!
ご質問ありがとうございます。午後問題、とにかく問題の量をこなすことが大事です。既にサンプル問題を解いている状態なら、他の問題にチャレンジするのが望ましいです。また問題の解説を見て復習する際に、ただ単に「理解した」ではなく「同類の問題を次に解くとしたら解ける」というレベルまで復習することが重要です。3月下旬にはなってしまいますが、IPA公式のサンプル問題の類似問題の解説動画を追加でアップ予定ですので、受験までに間に合えばそちらもご利用ください。基本情報技術者の勉強頑張ってください!
ためになる動画をありがとうございます。問3について、質問させてください。9:04 辺りのoutの要素数が配列の末尾の値になる理由が理解できておりません。要素数=その中にある値の数(何個の値が入っているのか)ことだと理解していたのですが、要素数=配列の末尾の値というものなのでしょうか?
質問ありがとうございます。以下に回答しますね。ご質問は動画内8:57付近の「out[outの要素数]というのは配列の中の一番末尾の値をとってくるという風に言い換えられる」と言っている部分を指されていると思います。具体例で考えるとわかりやすいです。下記、iの値ごとに tail ← out[outの要素数] が実行されるタイミングにおいて、 ・i=2の場合、out={3}、outの要素数=1、out[outの要素数]=out[1]=3 ・i=3の場合、out={3,5}、outの要素数=2、out[outの要素数]=out[2]=5 ・i=4の場合、out={3,5,6}、outの要素数=3、out[outの要素数]=out[3]=6となっています。全てのケースでout[outの要素数]が配列outの末尾の値になっていることが見て取れると思います。なのでご質問いただいている「outの要素数が配列の末尾の値になる」のではなく、「out[outの要素数]が配列の末尾の値になる」ということを説明しております。動画内での説明が混乱させてしまう形となっておりすみません。ご不明点などありましたらご連絡ください。
@@itgakko ご回答いただき、ありがとうございます。返信遅くなり、申し訳ないです。詳しい説明のおかげで、out[outの要素数]が配列の末尾の値になる、という意味が理解できました。ありがとうございます!今後もこの動画を活用させていただきます!
科目Bは、さいとうさんの動画を全てみて理解すれば解けるようになるのでしょうか?他にやるべき問題、参考書などはありますか?科目Bは過去問がないのでいけるか不安です。
質問ありがとうございます!「理解した」のハードルが人によって違うので、基本的に「〜〜やれば解けますか?」のような質問にはお答えしておりません。ご了承ください。人によって前提となる知識が異なるのでどの程度の量問題を解けば良いという目安はありません。ご自身の感覚で「8割程度正解できる」という自信がつくまで学習するのが良いです。私の動画だけで自信がつくならそれで良いですし、足りないなら問題集でさらなる自信アップをする必要があります。問題集であれば以下の問題集はオリジナル問題が77問掲載されていておすすめです!基本情報技術者[科目B]アルゴリズムとプログラミング トレーニング問題集
48:04 最初問題を解いているとき、問13(ア)でelseのreturn middleが実行されたあと、while文頭に戻って更にlow
質問ありがとうございます!そうですね、return が実行されると問答無用でその関数の実行が終了します。
いつもお世話になっております!ご質問がありまして、トレースの際は、実行結果を書くと さいとうさんから学びました。そこで、難易度が高くなったら実行結果の正しい表が作れません。表の順番の作り方をご教示頂きたいです。よろしくお願い致します!
質問ありがとうございます!トレースする際はとにかく1行1行トレースすることが大事です。最初の方は時間がかかるかもしれませんが、1行1行しっかりとトレースすれば確実に正しい結果が出ます。慣れるまでは時間がかかっても1行1行飛ばさずにトレースし、慣れてきたら一部スキップしたりしてスピードを上げていくのが良いですね。
承知しました!勉強になります。ありがとうございます
@@あさ-g6x 勉強頑張ってください!
科目Bの結果が615点だったのでまだちょっと不安ですが、本動画にてトレーニングを重ねたからだと思います。ありがとうございました!
試験お疲れ様でした!不安かもしれませんが結果を待ちましょう!
受かってましたー🎉
今、試験1週間前で前回あと5点で不合格だったのでこの動画でしっかり対策して頑張ります、!
コメントありがとうございます!直前の追い込み頑張って下さい!
問9ですが、order(2)の後nを出力して、order([n],[2])をしてから、order(tree[n][1])をするのではないのでしょうか?if文3行の処理をせず、処理1をする点がちょっと理解できずにいます。
質問ありがとうございます。結論としては、動画内で解説している順序が正しいです。再帰呼び出しの場合の処理順についてですが、下記でより詳しく解説していますので、こちらの問14を確認してみてください。 【初心者向け】基本情報技術者試験 科目B|アルゴリズムをゼロから理解する ruclips.net/video/waAwVXa9y2o/видео.html
ありがとうございます。やってみます!
問9の処理①、②、③はどれですか?PGの文章の中に番号書いてないとわかりずらいですあと問題を解いてみて思いましたが、この問題は再帰ってなんでわかるんですか?order(1)を実行します。 tree[1]の判定 tree[1]={2,3} 要素数2 なので order(tree[1][1]=2) tree[2]の判定 tree[2]={4,5} 要素数2 なので order(tree[2][1]=4) tree[4]の判定 tree[4]={8,9} 要素数2 なので order(tree[4][1]=8) tree[8]の判定 tree[8]={} 要素数0 なので* 8を出力 endif* 4を出力←ここでなんで出力されるのですか?(これが一番聞きたいです) よろしくお願いいたします。
N=8の時は処理③ではないのでしょうか。要素が0のなので処理③だと思います。そこら辺因果関係が不明です
また、8が出力されたら二分木探索上、4しかないから4なのですか?
ご質問ありがとうございます。まず、問9の処理①②③について、以下の通りとなります。 ①order(tree[n][1]) ②nを出力 ③order(tree[n][2])上記がわかりづらくすみません。上記を把握していただくと、質問頂いている内容の多くが解決すると思われますので、ご確認のほどよろしくお願いします。上記だけでは解決しない箇所について下記で回答します。 ・この問題は再帰ってなんでわかるんですか →再帰呼出とは、あるプログラムからそのプログラム自身を呼び出すことを指します。今回は order という関数の中の処理で order が呼び出されているのがプログラムを見てわかるので、再帰呼出だと判断できます。 ・4を出力←ここでなんで出力されるのですか? →簡略化するために n=4、n=8、n=9のケースだけに絞って説明します。以下にプログラムの実行される行を1行1行書きます。わかりやすくするために呼び出した関数のブロックを {~~~} で表しています。 ----------- order(tree[2][1] = 4) { _//order(4)の呼び出し_ if (tree[n]の要素数 が 2 と等しい = true) _//条件がtrue(真)なのでブロック内の3行の処理を実行する_ order(tree[4][1] = 8) { _//order(8)の呼び出し_ _//if文の結果がfalse(偽)となるケースは記載を省略します_ else _//tree[8] = {}なのでelseのブロックに入る_ *n=8を出力* } *n=4を出力* order(tree[4][2] = 9) { _//order(9)の呼び出し_ _//if文の結果がfalse(偽)となるケースは記載を省略します_ else _//tree[9] = {}なのでelseのブロックに入る_ *n=9を出力* endif } _//中略_ } _//以下省略_ -----------上記のようにプログラム1行1行の動きを追ってみると、nの出力順序は 8 → 4 → 9 であることがわかります。以上、ご不明点などありましたらご連絡ください🤗
@@itgakko ご回答ありがとうございます。 ☆nの出力順序は 8 → 4 → 9 order(8)が呼ばれた ↓ 8がブロックに入る ↓ その前でorder(4)が読んであるので、order( tree[2][1]=4 ←(他の解説者もここを省略しているから解説が分かりにくいと私は感じました.) ↓ 4を出力する。 ↓ 4を出力されたら、order(tree[4][2] = 9) { //order(9)の呼び出し ↓ 9を呼び出す という考え方でしょうか 私も再帰というのが分かっておらず質問があやふやになってしまいました。 ご了承ください
@akiper 記載いただいた内容であっていると思います!プログラムの処理順序については、基本的に上から下!を意識すると良いと思います。i=4,8,9 の処理をさらに簡略化して書くと以下のようになります。先ほど記載した処理①、②、③を使って再帰呼出であることを意識しない形にしています。 ----------- order(tree[2][1] = 4) { _//order(4)として呼び出す_ if (tree[n]の要素数 が 2 と等しい = true) _//条件がtrue(真)なのでブロック内の3行の処理を実行する_ 処理① _//order(8) の呼び出し_ 処理② _//n=4を出力_ 処理③ _//order(9) の呼び出し_ _//中略_ } _//以下省略_ -----------上記の処理順序を考えてみると、「上から下!」なので処理①→処理②→処理③の順序になります。それを踏まえた上で、処理①、処理②、処理③の中身を考えると、下記の通りになります。 ・処理①では、order(8)として呼び出しているので、その中身で「n=8」が出力され、 ・処理②では、そのまま「n=4」を出力、 ・処理③では、order(9)として呼び出しているので、その中身で「n=9」が出力されます。また、動画の中でも触れていたかもしれませんが、再帰呼出については、「あー、そんなこと(関数の中でその関数自体を呼び出す)もできるんだなぁ」くらいに留めておくのがいいかもしれません。再帰呼出だから何か特殊なこと(処理順序が変わったり)があるという訳ではないので。どんなプログラムでも、1行だけをみると複雑なことはしてないので、1行1行理解して読み解いていくのがいいと思います。またいただいたアドバイスについては改善しますね。ありがとうございます。以上、ご不明点ありましたらご連絡ください🤗
今さっき受験してきました!科目A 725/1,000科目B 745/1,000科目Bの方が苦手だったのに……!このチャンネル3日間くらい見てたおかげです。本当にありがとうございました!
素晴らしいですね!合格おめでとうございます!
旧試験の午後試験とどっちが難しいと思います??
コメントありがとうございます。個人的には旧試験の方が難しいと思います。旧試験はプログラミング未経験の方には非常にとっつきずらかったところがあったのですが、新試験では多少とっつきやすい表現に変わっていると思います。
問3について。どうしてtailにoutの末尾を入力するとわかるのでしょうか?
質問ありがとうございます。以下に回答しますね。ご質問は動画内8:57付近の「out[outの要素数]というのは配列の中の一番末尾の値をとってくるという風に言い換えられる」と言っている部分を指されていると思います。具体例で考えるとわかりやすいです。下記、iの値ごとに tail ← out[outの要素数] が実行されるタイミングにおいて、 ・i=2の場合、out={3}、outの要素数=1、out[outの要素数]=out[1]=3 ・i=3の場合、out={3,5}、outの要素数=2、out[outの要素数]=out[2]=5 ・i=4の場合、out={3,5,6}、outの要素数=3、out[outの要素数]=out[3]=6となっています。全てのケースでout[outの要素数]が配列outの末尾の値になっていることが見て取れると思います。ご不明点などありましたらご連絡ください。
2か月後に基本情報を受けるます!科目B対策として、基本情報の過去問午後試験を解くなら何問目が良いですか?サンプル問題だけだと心もとない気がして、、
質問ありがとうございます!アルゴリズムは「データ構造及びアルゴリズム」セキュリティは「情報セキュリティ」が良いですね。
常に問題と解答を表示してほしいけど、画面見づらくなっちゃうよなぁ
ご意見ありがとうございます!そうですね、悩んだのですが画面見やすさの関係で問題と解答は表示していません。その代わりに無料で本動画で使用している教材をプレゼントしています。この動画概要欄のURLからLINEに登録頂くと教材がダウンロードできますのでよければ試してみて下さいね。※PCでLINEをご覧の方は、LINE登録後に教材が欲しい旨メッセージを送っていただく必要がございます。
【質問(問9)】→「8」出力後に「4」が出力される理由が分かりません【質問詳細】「8」出力後に3行目の処理、 order(tree[n][1])に再帰しているにも関わらず、それを無視して4行目の処理、 nを出力に移行してるのは何故ですか?
質問ありがとうございます!結論から言うとorder(8)として関数が呼び出された際、3行目の処理「order(tree[n][1])」は実行されません。-----1. ◯order(整数型: n)2. if (tree[n]の要素数 が 2 と等しい)3. order(tree[n][1])4. nを出力5. order(tree[n][2])6. elseif (tree[n]の要素数 が 1 と等しい)7. order(tree[n][1])8. nを出力9. else10. nを出力11. endif-----order(8)として関数が呼び出された場合、tree[n]の要素数は0です。そのため、10行目の「nを出力」だけ実行されてorder(8)として呼び出された関数は終了します。以上、ご不明点ございましたらご連絡頂ければと思います。
返信ありがとうございます。しかしながら、説明してくださっているのは、不明点の1つ前の処理です。疑問点は下記の通りです。order(8)が nを出力して、処理終了となるのは分かります。困惑しているのはその後のorder(4)に再帰後の処理です。order(4)に再帰後になぜそのまま nを出力となり、「4」を出力しているのですか?なぜ、3行目の order([][1])を無視しているのですか?
失礼しました。ご認識されているプログラムの処理順が誤っているので、プログラムの処理順を説明しますね。-----1. ◯order(整数型: n)2. if (tree[n]の要素数 が 2 と等しい)3. order(tree[n][1])4. nを出力5. order(tree[n][2])6. elseif (tree[n]の要素数 が 1 と等しい)7. order(tree[n][1])8. nを出力9. else10. nを出力11. endif-----まずorder(4)として呼び出されると、3行目:order(tree[n][1]) が実行されます。これは関数order(8)として呼び出すことを指します。もう少し詳しくいうとorder(4)を中断してorder(8)を実行するイメージです。order(8)は「8を出力」だけ実行して終了します。ここで中断していたorder(4)を再開します。order(4)は3行目まで実行していたので、4行目の「nを出力」から再開します。このような処理順になっています。以上、ご不明点ございましたらご連絡頂ければと思います。
@@itgakko中断された行(処理)の次の行(処理)から始まるということなんですね…本問題について理解できました。ありがとうございます。
@user-lw4hn3pn2h よかったです!
問3、なんでoutの要素数は末尾になるんですか?
回答させて頂きます。ご質問は動画内8:57付近の「out[outの要素数]というのは配列の中の一番末尾の値をとってくるという風に言い換えられる」と言っている部分を指されていると思います。具体例で考えるとわかりやすいです。下記、iの値ごとに tail ← out[outの要素数] が実行されるタイミングにおいて、 ・i=2の場合、out={3}、outの要素数=1、out[outの要素数]=out[1]=3 ・i=3の場合、out={3,5}、outの要素数=2、out[outの要素数]=out[2]=5 ・i=4の場合、out={3,5,6}、outの要素数=3、out[outの要素数]=out[3]=6となっています。全てのケースでout[outの要素数]が配列outの末尾の値になっていることが見て取れると思います。ご不明点などありましたらご連絡ください🤗
@@itgakko ありがとうございます!めちゃくちゃ助かりました!!
質問です。実行結果を書き出す時、変数に入れる値は何でも良いのでしょうか。また、頭の中で処理できなかった時はとりあえず数字を入れてみる、で良いのでしょうか。言葉足らずですみません、アドバイスを頂きたいです。
質問ありがとうございます!実行結果を書き出す時、変数に入れる値は問題によってどうすれば良いか変わります。・プログラムの実行結果が問われている問題 →問題文に具体的な値がきさいされているはずなのでその通りの値を使う。・そうでない場合 →基本的になんでも良いです。ただ、繰り返し処理があるなら配列の要素数は2以上にするとか、if文の条件を見て変数の値を決めるだったり少し考える必要があります。頭の中で処理できなかった場合はおっしゃる通りとりあえず具体的な値を入れてトレースするのがよいですね!原始的と思われるかもしれませんが紙に書いてみるのがよいです!
アルゴリズムどう解いたらいいか分かるようになりました!!ありがとうございます!
ありがとうございます!!
問6は、丁寧にトレースすると正解がアなので、イウエをトレースしなくても速い時間で答えが出ます。もし本番でこのような問題がでて、答えがウエらへんだと時間が足りなさすぎる気がするのですが、やはり、この場合は地道にトレースして、トレースする時間をはやくする練習をした方がいいのでしょうか??
質問ありがとうございます!本番を考えると、まず大前提として時間がかかりそうな問題に出会った場合、制限時間の関係から後回しにするのが良いです。その上で問6レベルの問題であれば、全て地道にトレースしなくても答えが出せるようになるくらいの実力をつけてから試験に臨むのが望ましいです。純粋にトレースの速度を上げることと、トレースに慣れて端折るスキルを身につけましょう。1行1行トレースするのではなく、for文であれば繰り返し処理の最初の方だけトレースしてみてプログラムの全体像を掴むことだったりといったことです。
基本情報技術者 午後問題のデータ構造及びアルゴリズムという項目の過去問を勉強しているのですが、この動画で言っていることは完璧に理解できるし、1人でもできるのに、過去問は解けません。本番の科目bはどのレベルのものが出るのでしょうか?テスト形式が変わる前のデータ構造及びアルゴリズムレベルの問題が出るのでしょうか?
質問ありがとうございます!本番の試験でも本動画で取り扱っているような問題が出ますので、「基本情報技術者 午後問題のデータ構造及びアルゴリズム」ではなく、可能であれば現行試験の形式の問題を解いて練習した方が良いですね。私の他の動画でも良いですし、やり尽くしてしまった場合は、以下の問題集がおすすめです。77問掲載されていて結構な量を演習できます。基本情報技術者[科目B]アルゴリズムとプログラミング トレーニング問題集
解いても模試で30%しか解けません。解説を読めばわかるのに本番になるとアルゴリズムが読めなくなります。基本がまだなってないのでしょうか😅
質問ありがとうございます。記載いただいた内容を確認しました。「解説を読めばわかる」と「問題が解ける」は別物です。記載いただいている通り基礎が足りないということもあると思いますが、問題を解いて解説を見る際、「同様の問題が来たらどう解くか」というところまで復習をしていくことが一番大事だと思います。
大変有用な解説動画をありがとうございます。問16について質問があります。cpを64で割って余った数が後ろの64ビットになるという部分ですが、なぜこのようになるのでしょうか?説明が難しければ、理解するうえで抑えておくべき単元の内容をご教授いただけますと幸いです。よろしくお願いします。
質問ありがとうございます。回答します。まず、2進数で話をする前に、10進数の場合で考えてみましょう。例として、以下の「xxxxxx」の部分に10進数「333,222,222,111,111」を右詰めで格納する時の処理を考えます。 対象:33xxxxxx 22xxxxxx 11xxxxxxまず結果だけ見ると、33000333 22222222 11111111 になりますよね。これをプログラムで表現するために計算上どうやっているかを考えます。以下の通りです。①11xxxxxx の部分を穴埋め 「333,222,222,111,111」の"右側6桁を取得" この右側6桁を取得するという計算を具体的な計算式で書くと 「333,222,222,111,111」を1,000,000 で割った余り になります ※333,222,222,111,111 ÷ 1,000,000 = 333,222,222、余り111,111 なぜこのようになるかというと、1,000,000で割るというのは、 小数点を6桁右にずらすと同義で、小数点以下にずれた6桁が余りになるからです また、1,000,000 で割った商、「333,222,222」 つまり小数点を6桁右にずらした結果の小数点より左側の値を 次の②で使用します②22xxxxxx の部分を穴埋め 「333,222,222」の"右側6桁を取得" つまり「333,222,222」を1,000,000 で割った余り を取得 また、1,000,000 で割った商、「333」 つまり小数点を6桁右にずらした結果の小数点より左側の値を次の③で使用します③33xxxxxx の部分を穴埋め 「333」の"右側6桁を取得" つまり「333」を1,000,000 で割った余り を取得問16の内容を全ての値が10進数として扱うと上記のような計算を行うことで結果を得ることができますここでポイントなのは、10進数でいう6桁分の値を抽出するには、 1,000,000で割る = 小数点を6桁右にずらす (10の6乗で割る)という処理が必要だということです問16の内容に戻って、2進数で考えるとき「小数点を6桁右にずらす」には何をすればよいでしょうか。これが2進数だと「64で割る」という計算になります。もっとポイントを押さえた形で書くと、「2の6乗で割る」ということになります。2進数と10進数の違いは1桁あたりで表現できる数字の数になります。 ・2進数の1桁で表現できる数字の数は0と1の2パターン、 ・10進数の場合は0,1,2,3,4,5,6,7,8,9の10パターン、その為「小数点をn桁右側にずらす」ためには、それぞれ上記のパターン数のn乗で割った余りを求める必要があります。 ・2進数の場合:2のn乗で割る ・10進数の場合:10のn乗で割るご不明点ありましたらご連絡ください。
@@itgakko 無事理解できました。基礎の基礎からかみ砕いて説明してくださり大変助かりました。ありがとうございました!
よかったです。基本情報技術者試験の勉強頑張ってください!
頭パンクしそうです…
何か不明点あればご質問下さいね!
質問です問9の二分木で処理①、処理②、処理③がそれぞれ問題文記載のプログラムのどのコード部分を仰っているのでしょうか。ご回答お願いします
質問ありがとうございます。問9の処理①②③について、以下の通りとなります。 ①order(tree[n][1]) ②nを出力 ③order(tree[n][2])上記がわかりづらくすみません。ご不明点などあればご連絡頂ければと思います。
解説ありがとうございます、、心強いです。残り4日しかありませんが気合い出します。質問です。36:01 n=8を出力した後、なぜ一つ前の4に戻るかがよく分かりません、、
8が格納されている節の親が4だからですね、、初歩的ミスでした😅
いつもさいとうさんの動画にはとてもお世話になっております。問16の文字コードの問題につきまして、質問があります。処理の内容は把握できたのですが、6桁を取得するための計算で、なぜ64で割るのかが理解できずにいます。6桁なので32だと思っているのですが…
質問ありがとうございます!なぜ6桁だと64で割るのかについて、1桁の場合から1つずつ桁を増やして考えるとわかりやすいです。・1桁: 0 or 1 の2つしかないので、2パターン・2桁:1桁の時の各パターンに対して、1番左に 0 or 1 がつくパターンが増えるので、 2 × 2 = 4パターン・3桁:2桁の時の各パターンに対して、1番左に 0 or 1 がつくパターンが増えるので、 4 × 2 = 8パターン・4桁:3桁の時の各パターンに対して、1番左に 0 or 1 がつくパターンが増えるので、 8 × 2 = 16パターン・5桁:4桁の時の各パターンに対して、1番左に 0 or 1 がつくパターンが増えるので、 16 × 2 = 32パターン・6桁:5桁の時の各パターンに対して、1番左に 0 or 1 がつくパターンが増えるので、 32 × 2 = 64パターンまた、動画概要欄にも「なぜ64で割った余りが後ろの64パターン(6ビット分)になるのか」という説明を補足として記載していますのでよろしければそちらもご確認ください。
すみません質問です。問9のようなtree[n][2]はtree[n+2]という認識であっていますでしょうか?お返事お待ちしております。
質問ありがとうございます。tree[n][2] の意味は tree[n+2] ではなく、「2次元配列 tree の n番目の配列の 2番目の値」という意味になります。2次元配列は、配列の要素が配列になっているもののことです。問9で与えられている2次元配列 tree で説明しますね。tree = { {2,3} ・・・tree[1] ,{4,5} ・・・tree[2] ,{6,7} ・・・tree[3] ,{8,9} ・・・tree[4] ,{10,11} ・・・tree[5] ,{12,13} ・・・tree[6] ,{14} ・・・tree[7] ,{} ・・・tree[8] ,{} ・・・tree[9] ,{} ・・・tree[10] ,{} ・・・tree[11] ,{} ・・・tree[12] ,{} ・・・tree[13] ,{} ・・・tree[14] }2次元配列は、配列の要素1つ1つが配列となっているので、例えば上記の1要素の「tree[1]」これ自体が配列となります。例えば普通の配列 array の2番目の値を取得する場合は、array[2] と書くと思います。2次元配列 tree の場合では、「tree[1]」自体が配列なので、「tree の 1番目の配列 から 2番目の値を取得する」という意味合いで tree[1][2] という記述を使用します。この記述で配列 tree[1] の 2番目である「3」が取得できます。何かご不明点ありましたらご連絡ください。
お返事ありがとうございます。おかげで概要を理解することができました🙇
よかったです。基本情報の勉強頑張ってください!
斎藤先生ご無沙汰しております。まきです。現状報告です。現時点で午後重点対策2週、大滝本とやりましたがやはり再度Javaを復習してプログラミングしてます。写経でソートやリスト類は組みましたが、基礎が身についてないので分かりにくかったのでやはり本腰入れてプログラミングを出来るだけ組んで理解してから再度問題集に戻ります。年末までには受かりたいです。
コメントありがとうございます!実際にプログラミングしてみるのがやはりいいですね!頑張って下さい!
ありがとうございます。初学者なので大変助かります。問13で、選択肢 エ)も無限ループになってしまいます、、、どこかを勘違いしているのですが、もしお時間あれば教えてください。例えば、data [-1, 1], target 1 ではどうなるか教えていただけるとありがたいです。
ご質問ありがとうございます。まず、記載頂いた data=[-1,1]、target=1 のケースですと、「(ウ)要素数が2で、target が dataの末尾要素の値と等しい」ケースにも当てはまってしまい、無限ループとなってしまいます。ですので、記載頂いたケースとは別に、「(エ)要素に -1 が含まれている」ケースで無限ループにならない例を記載します。data=[-1, 2, 3], target=2 です。以下プログラムと各行の実行結果です。実行結果を 「_//斜体のコメント_」で記載しています。----------low ← 1high ← dataの要素数_//high = 3_while (low target) _// elseif (2 > 2) = false(偽) なので elseまでスキップ_ else return middle _// return 2 となり、targetと同じ値が格納されている要素番号が返されるので無限ループしない。_----------ただ、この問題の少し複雑な箇所として、「(ウ)要素数が2で、target が dataの末尾要素の値と等しい」が無限ループとなる唯一の条件ではない(十分条件ではあるが必要十分条件ではない)と言う点です。※なので、問題文の中に「例えば...」という記載があるようです。例えば(ウ)には合致しませんが、以下のケースは無限ループします。data=[-1, 2, 3], target=4----------low ← 1high ← dataの要素数_//high = 3_while (low
@@itgakko ご丁寧にありがとうございます。恐れ入ります。やっとスッキリしました。問題(選択肢)に若干クセがあるような気もしますが、学習を続けていくうちにさらに理解できるかもしれません。この動画のおかげで科目Bに取り組めています。合格に向けて頑張れそうです。
@@ffffrrrreeeeeeee ご返信ありがとうございます!おっしゃる通り他の問題と少し毛色が違うかもしれませんね。「試験の制限時間内に解く」という意味では全問正解を目指すより優先度をつけて解ける問題から解くということも大事になると思います。このタイプの問題は時間がかかりそうなので試験では後回しでもいいかもしれません。どの問題から解くか、を動画化するのも検討してみますね。基本情報技術者試験の勉強頑張ってください🤗
16の文字コードの問題で64ビットという数字が出てきましたがどのような計算で64が出てきたのか教えていただきたいです😢
質問ありがとうございます。なぜ64という数値なのか、長くなりますが以下に記載しますのでご確認ください。ーーーーーーーーーーーーーーーーーーなぜ64で割った余りが後ろの64ビットになるのか、まず、2進数で話をする前に、10進数の場合で考えてみましょう。例として、以下の「xxxxxx」の部分に10進数「333,222,222,111,111」を右詰めで格納する時の処理を考えます。 対象:33xxxxxx 22xxxxxx 11xxxxxxまず結果だけ見ると、33000333 22222222 11111111 になりますよね。これをプログラムで表現するために計算上どうやっているかを考えます。以下の通りです。①11xxxxxx の部分を穴埋め 「333,222,222,111,111」の"右側6桁を取得" この右側6桁を取得するという計算を具体的な計算式で書くと 「333,222,222,111,111」を1,000,000 で割った余り になります ※333,222,222,111,111 ÷ 1,000,000 = 333,222,222、余り111,111 なぜこのようになるかというと、1,000,000で割るというのは、 小数点を6桁右にずらすと同義で、小数点以下にずれた6桁が余りになるからです また、1,000,000 で割った商、「333,222,222」 つまり小数点を6桁右にずらした結果の小数点より左側の値を 次の②で使用します②22xxxxxx の部分を穴埋め 「333,222,222」の"右側6桁を取得" つまり「333,222,222」を1,000,000 で割った余り を取得 また、1,000,000 で割った商、「333」 つまり小数点を6桁右にずらした結果の小数点より左側の値を次の③で使用します③33xxxxxx の部分を穴埋め 「333」の"右側6桁を取得" つまり「333」を1,000,000 で割った余り を取得問16の内容を全ての値が10進数として扱うと上記のような計算を行うことで結果を得ることができますここでポイントなのは、10進数でいう6桁分の値を抽出するには、 1,000,000で割る = 小数点を6桁右にずらす (10の6乗で割る)という処理が必要だということです問16の内容に戻って、2進数で考えるとき「小数点を6桁右にずらす」には何をすればよいでしょうか。これが2進数だと「64で割る」という計算になります。もっとポイントを押さえた形で書くと、「2の6乗で割る」ということになります。2進数と10進数の違いは1桁あたりで表現できる数字の数になります。 ・2進数の1桁で表現できる数字の数は0と1の2パターン、 ・10進数の場合は0,1,2,3,4,5,6,7,8,9の10パターン、その為「小数点をn桁右側にずらす」ためには、それぞれ上記のパターン数のn乗で割った余りを求める必要があります。 ・2進数の場合:2のn乗で割る ・10進数の場合:10のn乗で割るーーーーーーーーーーーーーーーーーー
先日試験を受けてきましたが、科目Bの点数が届かず不合格でした。想定していたよりも穴埋め問題が多く出題され、穴埋めが苦手な私は時間が全然足りませんでした。動画内で解説頂いていますが、穴埋め問題をサクッと早く解けるようになるには回数をこなすしかないのでしょうか?コツがあれば教えて頂きたいです。
穴埋め問題は基本的な解き方を抑えたらあとは問題を解く・復習するの繰り返しが地味ですが1番効果的です!以下はオブジェクト思考に関する演習・解説動画ですが、穴埋め問題も一部取り扱っており、解き方についてより詳しく解説しているのでよければご覧ください!ruclips.net/video/adjCffDTWnE/видео.html
@ ありがとうございます!
過去問道場にあるアルゴリズムはもっと長文なのですが、2023からは動画のような短い問題が沢山あるのでしょうか?
質問ありがとうございます!2023年4月から試験形式が新しくなり、この動画のような短めの問題が主となっています。
@@itgakko ご回答ありがとうございます!情報セキュリティも今までと比べるかなり短いようですね。こちらの動画を使用して勉強したいと思います。
@user-co8ip1ks5b 勉強頑張って下さい!
問9の質問です。tree[n]の要素数が2と等しいの条件で最初に{2,3}となり2と等しいはず(私の理解不足だったらすいません)なのに、8になるまで出力せずにn=1,2,4,8と処理を実行するのはなぜですか。
質問ありがとうございます!まず記載頂いている内容の前半の「tree[n]の要素数が2と等しいの条件で最初に{2,3}となり2と等しいはず」こちらは合っています。おそらく再帰呼び出しの処理順について理解が不十分だと思います。再帰呼び出しについて以下の動画で詳しく解説していますのでよければまずこちらをご覧ください。✅【初心者向け】基本情報技術者試験 科目B|アルゴリズムをゼロから理解する(問14が再帰呼び出しの問題です)ruclips.net/video/waAwVXa9y2o/видео.html
自分用メモ 37:30
⚠学習前にご確認ください!
・誤りがあった場合に概要欄で訂正している場合があります。動画におかしな点があった場合、まずは概要欄のご確認をお願いします。
・動画で投影している教材は、本動画の概要欄からさいとうの公式LINEに登録頂くと無料でダウンロードできます!
※概要欄で訂正している内容が反映されたものをダウンロードできます。
先日科目B受けて無事合格点超えました!
受験直前まで全く対策出来てませんでしたが、この動画の解説のおかげでアルゴリズムの理解が深まり、本番も確信を持って答えを選べました。ありがとうございます!
合格おめでとうございます!
自信を持って答えられたのも素晴らしいですね!
この動画と、公式LINEに載せてる最新版の解説しか科目Bの対策はやってませんが無事8割弱とれて合格することが出来ました。
本当にありがとうございます。
合格おめでとうございます!!
今日無事受かりました!ほぼこの動画のおかげといっても過言では無いです!本当にありがとうございました!これから応用情報に向けて頑張ります。
合格おめでとうございます!
次は応用情報ですか、頑張ってください!
サンプルよりも本番の問題が難しく、手応えなかったのですが845点も取れました。多少時間かかっても実行結果を書いて解いた結果だと思っています。本当にありがとうございました。
合格おめでとうございます!
素晴らしいですね!
すごい!
大学の補習授業と並行しているのですが、口頭の説明だけだと分からないこともあり、図やマーカーのおかげでイメージがつきやすく、すごくわかりやすいです!
この動画を無料で提供して下さり、ありがとうございます🙇♂️
コメントありがとうございます!
勉強頑張ってください!
本日無事合格することができました。こちらの動画に本当に助けられました、20回くらい見たと思います笑
主さんのように人に説明するつもりで解いて練習すると頭の整理ができておすすめです。今勉強している皆様が無事合格できますように。
合格おめでとうございます!
わざわざご報告いただき嬉しいです!
記載いただいている通り人に説明するレベルまでいければ完璧ですね!
2.2.20回!?
ほぼ一夜漬けでの受験でしたが、この動画だけで午後試験十分な点を取ることができました。問題ごとの手の付け方から詳しい解説まで参考になりました。ありがとうございます。
合格点おめでとうございます!
嬉しいコメントもありがとうございます!
34:56 急に説明飛んで分からなかったけど、tree[1][1]は「treeの1番目の要素の1つ目」ってことなのね・・・。だからorder(2)となるわけか、これは飛ばされたら泣きそう・・・!
ご意見ありがとうございます!
泣かせてすみません。
本問題のような2次元配列は以下で詳しく解説していますので、
よろしければこちらもご覧ください。
【初心者向け】基本情報技術者試験 科目B|アルゴリズムをゼロから理解する
ruclips.net/video/waAwVXa9y2o/видео.html(問6.配列(応用))
@@itgakko あざっす!
勉強頑張って下さい!
いつもお世話になっております。
情報系出身ではない私は御チャンネルの動画を見て、アルゴリズムへの苦手意識を解消させ、理解も深めました。おかげで本日基本情報技術者試験に合格しました。
心から感謝しております。
合格おめでとうございます!
嬉しい報告ありがとうございます!
サンプル問題は初見で20問中17問正解できました。
科目Bは「出るとこだけ!」シリーズの参考書を勉強していたので、その成果を発揮できたと思っています。
間違えた問題は、この動画の解説を見て理解することができました!
解説が分かりやすくて助かりました。
来週が試験本番なので、合格の報告ができるように頑張ります!(過去問やサンプル問題含めて、科目A、Bともに及第点はありますが、試験本番は何があるか分からないので、気を引き締めて臨みたいと思います)
いいですね!
来週の試験頑張って下さい!
一夜漬けでFE試験に臨みましたが、科目Bはこの動画だけでなんとかなりました!ありがとうございます!
合格おめでとうございます!!
受かりました!
B試験全く手付かずで焦っていたところこの動画を見つけ救われました…
感謝です。
合格おめでとうございます!
嬉しい報告ありがとうございます!
お陰様で前日670点を取りました。
ありがとうございます!!
✳︎外国人のため、日本語文章を読んだ時、スピードは遅いから、内容は長い問題を二つスキップしました。。
670点素晴らしいですね!
おめでとうございます!
基本情報合格しました!!
この動画のおかげで理解深めることでき、本番で活かすことができました。本当にありがとうございます。
合格おめでとうございます!
嬉しい報告ありがとうございます!
この動画の解説を聞いて理解を深めたことで、合格点を取ることができました!
動画を作成していただき、本当にありがとうございます!
合格おめでとうございます!
基本情報処理技術者を合格しました!解説が分かりやすくとても助かりました。本当にありがとうございました!
合格おめでとうございます!
わざわざ報告頂いて嬉しいです!
ついに、科目Bが600点越えました!
連続不合格の中、本動画にたどりつきました。
プログラミング未経験でしたが、繰り返し関連動画を参照することで理解が深まりました。
また、質問にも丁寧に回答頂き感謝しかありません
。有名どころの参考書を繰り返すより動画を何度もみることが合格につながったと思います。ありがとうございました。今後の配信も楽しみにしております。
科目B合格点到達おめでとうございます!!
未経験からの合格点到達素晴らしいですね!
またThanksありがとうございます!
より良いチャンネル運営に使用させていただきます!
先日、基本情報技術者試験受けて合格しました!理解の難しかった科目Bですが動画の解説のおかげです。ありがとうございました!
合格おめでとうございます!!
試験日が近づいてきました。毎日この動画を見ます。
試験頑張ってください!
こちらの動画のおかげであやふやだった問題ごとのアプローチがうまくできそうです!
ありがとうございます!
コメントありがとうございます!
勉強頑張って下さい!
本日基本情報を受けて合格できました!
動画とても参考になりました!
ありがとうございます!
合格おめでとうございます!!
合格の助けになりました。
ありがとうございます。
合格おめでとうございます!!
先生!サンプル問題を人に解説出来るレベルまで仕上げることが出来たのに落ちてしまいました。🥲
やはり試験なので回によっての難易度ってあるものですかね。。。
勉強したことのない分野からの出題が多くとても難しかったです。
質問ありがとうございます!
試験ごとに出題される問題はランダムなので、感じる難易度にある程度のばらつきはあります。
サンプル問題は完璧だと感じるのであれば、その他いろいろな問題を解いてもっと実力をつけると良いですね!
試験が今月に迫っていますが、とても参考にさせてもらっています。一緒に解いていくうちに自信もつきます!本当にありがとうございます!
コメントありがとうございます!
試験頑張って下さい!
科目Bに苦手意識を持っていたのですが
さいとうさんの動画で各パターンの問題の考え方、
解き方のコツを掴むことができるようになり
無事に試験合格しました☺️🎉
わかりやすい解説ありがとうございます!
合格おめでとうございます!!
今日試験を受けてきました!
受けながら絶対落ちたと諦めてたんですギリギリで無事に合格できました😢
問1すら分からなかった私が合格できたのは間違いなくさいとうさんのおかげです😭貴重な動画本当にありがとうございました!
合格おめでとうございます!
さいとうさんの動画はとても分かりやすので是非2024年の公開問題の解説動画も上げて頂きたいです!!待ってます!!
リクエストありがとうございます!
何度かチャレンジして、やっと合格できました!
この動画のおかげです。ありがとうございます!
今後も勉強は続けていきます!
合格おめでとうございます!!
購入した科目B対策の教科書では、プログラムの実行結果を表に書くときに、行ごとに結果を書いていました。
この動画では、行ごとの結果を書くのではなく、for文のiの値や再帰関数の引数ごとに結果を書く方法も紹介されていて、2つ目の武器を手に入れることができたのがありがたかったです。
コメントありがとうございます!
勉強頑張ってください!
お世話になります。
こちらの動画で、無事合格することができました。
5年前に午後試験で落ちて、苦手意識が強かったですが、動画の通り一つ一つ手を動かし回答できました。
感謝の気持ちです。ありがとうございました。
合格おめでとうございます!
苦手を克服して素晴らしいですね!
ビデオのおかけで1週間対策で科目Bは700点を取れました!ありがとうございました!
合格おめでとうございます!!
アルゴリズムちんぷんかんぷんだった私ですがこの動画で勉強→再度自分のみで解くの短期間勉強で無事に合格できました!860/1000なので満足の結果です!
本当に感謝しかないです😭ありがとうございます!
合格おめでとうございます!
高得点ですね!わざわざ報告ありがとうございます!
この動画見る前は全くと言っていいほど解き方とか分からなかった感じですか?自分明日試験なんでこの動画みて勉強しようと思ってます!
@@もらたで工藤 そうですね、ほぼほぼ分かってない状態でした。明日頑張ってください🫡
@@mihapi ありがとうございます!(´▽`)
お陰様で合格できました✨
ありがとうございました😊
合格おめでとうございます!
嬉しい報告ありがとうございます!
解説が流れる様に早くて、理解しながら付いて行くのは大変でした、、
コメントありがとうございます!
解説ありがとうございます。
基本的なアルゴリズムはできるのですが、少し複雑なアルゴリズムになると苦手意識が出てしまいどうしても勉強が捗れません。
出来れば四月中に取得したいと考えておりますが、こんな私にアルゴリズム(試験B)の勉強法と応援ください。
ご質問ありがとうございます。
勉強法についてですが、アルゴリズムはとにかく問題の量をこなすことが大事です。
また問題の解説を見て復習する際に、ただ単に「理解した」ではなく
「同類の問題を次に解くとしたら解ける」というレベルまで復習することが重要です。
3月下旬にIPA公式のサンプル問題の類似問題の解説動画を追加でアップ予定ですので、
受験までに間に合えばそちらもご利用ください。
基本情報技術者試験の勉強頑張ってください!
あと2週間も無いくらいで科目B試験あります😭
毎回20問中5問しか正解しません💦残りわずか動画活用させていただきます!!
勉強頑張って下さい!
ずっと科目Bが不安でしたが、645点ですがギリギリで合格することができました!
本当にこの動画のおかげで、再帰を始めこれまで理解が難しかったアルゴリズムの問題がしっかりと解けました!!
ありがとうございました!!!
合格おめでとうございます!
報告嬉しいです!ありがとうございます!
IPA公式の問題サンプルはこちらです!科目Aの問題もあるのでチャレンジしてみてくださいね🤗
www.jitec.ipa.go.jp/1_00topic/topic_20221226.html
基本情報合格しました!さいとうさんのおかげでトレースの仕方が分かり、アルゴリズムを理解していくことができました。ありがとうございました。
合格おめでとうございます!!
Thanks機能を解除していただきありがとうございます。お陰様で無事に合格しました。Thanksさせていただきます🎉
改めて合格おめでとうございます!
Super Thanksありがとうございます!
ありがたくいただきます!
アルゴリズムで🤔←状態だったので、主さんの解説動画で理解が深まりました!新方式頑張っていきます!
ありがとうございます!!
アルゴリズムの勉強頑張ってください🤗
お陰様で無事に合格しました。ありがとうございます🙏
Thanksでお礼を申し上げたいと思います。
さいとう先生のThanks機能制限がされているようですが、thanksできないです😢
合格おめでとうございます!!
Thanks機能というものがあるのですね、知りませんでした!
機能はオンにしてみましたが、わざわざもう一度Thanksはしなくても大丈夫です!
合格のご報告頂けたのが嬉しいです。
@@itgakko 返事が遅れて申し訳ないです。THANKS機能制限を解除していただきありがとうございます。先程Thanksを申し上げました😌本当にありがとうございました😊
別のThanksコメント確認させていただきました!ありがとうございます!
6→❌ 実際に書いてみる
8→△ 実際に書いたらできる
9→❌ 再帰関数の動き方が分からなかった
10→❌
13→△ 実際に書いたらできる
14→△ 実際に書いたらできる
15→❌ 考え方がわからなかった
16→❌ シンプルに難しい
17〜20 セキュリティの知識をつける
神様ですか!?
紙での解説も欲しい・・
どこかに載ってたりしますか?
ありがとうございます!
投影している資料のPDF版でよろしければ、動画概要欄から公式LINEに登録して頂くとダウンロードできます🤗
この動画のおかげで無事合格することができました。
お世話になりました。
合格おめでとうございます!!
ありがとうございます。
コメントありがとうございます!
勉強頑張ってください!
ありがたいっす😊
コメントありがとうございます!
ほぼこの動画でしか科目Bの対策しませんでしたが、なんとか合格できました。的確で分かりやすい説明を80分の動画にまとめてください大変ありがとうございました。
合格おめでとうございます!!
さいとうさんのおかげで合格することができました!
お世話になりました!
合格おめでとうございます!
わかりやす!
コメントありがとうございます!
勉強頑張ってください!
@@itgakko 合格しました!ありがとうございます。
@akira_in_the_morning 合格おめでとうございます!
先日基本情報技術者試験を受け、3回目のチャレンジで合格点クリア出来ました。
この動画を何度も見て解いてを繰り返したお陰です。本当にありがとうございました。
次は応用情報技術者試験にチャレンジします。これから基本情報技術者試験を受ける方にもオススメさせていただきます。
合格おめでとうございます!!
自信があったのに500点で落ちてしまいました。
問題の難易度としても、11問は理解できていると思いながら解きましたが時間が足りなくて見直しを行いませんでした。
自分としては次の学習として何をするべきなのかわかりません。
まずは試験お疲れ様でした!
仮に11問全て正解していたとしても不合格の可能性が高いので、
もっと問題演習をして実力アップ&解くスピードアップしていくのが良いですね!
問4の解説で num1=24 num2=60 という具体的な数値で考えました。
while
y←y-x
36←60-24
y←y-x
12←36-24
X=24 Y=12
x=x-y
12=24-12
X=12 Y=12
x>y 偽
endwhile
終了
コメントありがとうございます!
記載頂いた具体例 num1=24、num2=60、プログラムの流れ含めて合ってます。
問3のoutの要素数について質問です。
"要素数"という内容から"outの配列の長さ"だと解釈したのですが、ここはどのように考えればoutの中身の3を代入するという思考に至るのでしょうか?
質問ありがとうございます。
動画内8:48あたりから説明している、
i=2の場合の、tail ← out[outの要素数]、
ここでtailに代入される値が
なぜ3なのかという質問だと思います。
記載頂いている通り、「outの要素数」は「out配列の長さ」となります。
i=2の繰り返し処理開始時点で、「out配列の長さ」は 1 ですので、
i=2の場合の、tail ← out[outの要素数]、という記載は、
tail ← out[1] になります。
この時点での 配列out = {3}、となっていますので、
tail に 配列out の 1番目の要素である 3 が代入されます。
不明点ありましたらご連絡いただければと思います。
@@itgakko ありがとうございます。ご説明していただいた内容で理解できました。また何かありましたら質問させていただきたいと思います
よかったです!
@hirohi9370
質問ありがとうございます!
まず、この問題の解答は ウ ではなく カ です。
その上で頂いた
「問3のtailの要素数というのは、要素の個数ではないのでしょうか?」
という質問についてですが、
すみません、この質問の意図を読み取れませんでした。
おそらく頂いている質問はプログラム上の
tail ← out[outの要素数]
こちらの部分を指しておられると思います。
また、さらに記載いただいている以下の内容ですが、
in={3}→要素数1
In={3,2,1}→要素数3
プログラム上では inの要素数を使用している箇所は
for文の繰り返し回数を指定している箇所だけであり、
inは上記のように格納されている値は変化しないため、
何を指されているのか読み取ることができませんでした。
お手数ですが、不明点をより詳細に教えていただければと思います。
これtail←outの要素数=1って考えちゃってるってことですね。実際はtail←out[outの要素数=1]となってout[1]で、現状out{3}だから3ってことです。
今回、午前免除等でなく午前と午後のフルタイムの受験です。午前は余裕で基準をクリアできましたけど、やはり、午後が難しい。前回はあと一歩のところで、不合格。今回は話しにならない点数。皆さんが言うように、午後対策に特化した講義です。しかしながら、人により、問題との相性がピッタリはまらないと、初見のオンパレードで地獄を見ます。見たことがあると、感じられるならば、感触どうりに得点できるだろうけど、運がなかったのかな。
コメントがありがとうございます!
見たことがあると感じられる問題が出てくるのは期待できません。見たことがある問題が出てきたらラッキーくらいに考えた方が良いです。
解説ありがとうございます。問8の二分木の問題で、処理の手順について質問があります。
if (tree[n]の要素数 が 2 と等しい)
order(tree[n][1]) ・・・処理①
n を出力 ・・・処理②
order(tree[n][2]) ・・・処理③
とありますが、IFの条件を満たしたら処理①を行い、次に処理②に行かないでまたIFの条件を満たすか確認して処理①にいくのがわかりませんでした。
質問ありがとうございます!
order(1)と呼び出された場合の処理順について以下に説明しますね。
-----
◯order(整数型: n)
1. if (tree[n]の要素数 が 2 と等しい)
2. order(tree[n][1])
3. n を出力
4. order(tree[n][2])
5. elseif (tree[n]の要素数 が 1 と等しい)
6. order(tree[n][1])
7. n を出力
8. else
9. n を出力
10. endif
-----
まずorder(1)と呼び出されると、
1行目でif文の条件式が実行されます。
tree[1] = {2, 3} で要素数が2なのでif文内の処理が実行されます。
次に2行目の「order(tree[n][1])」が実行されます。
これは関数orderの呼び出しです。
関数内で関数が呼び出された場合、実行中の関数(ここではorder(1)として呼び出された関数)は中断されて、
新たに呼び出した関数が実行されます。
tree[1][1] = 2 なので、order(2)が新たに実行されます。
中断したorder(1)はorder(2)の処理が終了したら再開されます。
order(2)が呼び出されるとまた先頭から実行されます。
1行目のif文の条件式が実行され、
tree[2] = {4, 5} で要素数が2なのでif文内の処理が実行されます。
このような処理順で続いていきます。
そのためおっしゃっている「IFの条件を満たしたら処理①を行い、次に処理②に行かないでまたIFの条件を満たすか確認して処理①にいく」順番で処理されます。
以上、ご不明点ございましたらご連絡いただければと思います。
解説とても助かっています。ありがとうございます!
問16が難しいです…。
素朴な疑問なのですが、1桁が1ビットとどこかで習って、6桁だと6bitだと思っていたのですが、64bitになるのがよく分からなくなってきました…(2^6で64になるのは理解できました)
質問ありがとうございます。回答します。
まず、記載頂いた「1桁が1ビット」はあっています。
細かいのですが、より正確に言うと「2進数の1桁が1ビット」になります。
コンピュータ上の処理の話で、扱われるデータは 0 or 1 なので、
"2進数の"という枕言葉が必要です。
上記を踏まえた上で、記載頂いている
① 2進数の6桁は6ビット
② 2進数の6桁は64ビット
こちらの違いについて説明しますね。
結論から言うと、どちらも間違いではありません。
ただし、どちらも日本語が一部省略されていて、
① 2進数の6桁「のデータサイズ」は6ビット
② 2進数の6桁「で表現できる値の全パターン数」は64ビット
と補足してあげるとどちらも適切で正しい記載になります。
まず①については、2進数の6桁なので、
1 or 0 が入る箱が6つあるイメージです。
例えば2進数「101010」であれば、以下のようになり、
コンピュータ上でのデータのサイズは 6ビット になります。
|1|0|1|0|1|0|
次に②については、具体的な2進数の値のデータサイズを表しているのではなく、
「6つの箱があれば、表現できる2進数の値は全部で 64(2の6乗)パターンある」
と言う意味になります。
ご質問頂いた内容に対する回答としては以上となるのですが、
問16で頂いた質問ということで、なぜ64で割る必要があるのか、
という部分に疑問があるかもしれませんので、
なぜ64で割るのかを下記に補足で記載しておきます。
何かご不明点などあればご連絡ください。
ーーーーーーーーーーーーーーーーーー
なぜ64で割った余りが後ろの64ビットになるのか、
まず、2進数で話をする前に、10進数の場合で考えてみましょう。
例として、以下の「xxxxxx」の部分に
10進数「333,222,222,111,111」を右詰めで格納する時の処理を考えます。
対象:33xxxxxx 22xxxxxx 11xxxxxx
まず結果だけ見ると、
33000333 22222222 11111111 になりますよね。
これをプログラムで表現するために
計算上どうやっているかを考えます。以下の通りです。
①11xxxxxx の部分を穴埋め
「333,222,222,111,111」の"右側6桁を取得"
この右側6桁を取得するという計算を具体的な計算式で書くと
「333,222,222,111,111」を1,000,000 で割った余り になります
※333,222,222,111,111 ÷ 1,000,000 = 333,222,222、余り111,111
なぜこのようになるかというと、1,000,000で割るというのは、
小数点を6桁右にずらすと同義で、小数点以下にずれた6桁が余りになるからです
また、1,000,000 で割った商、「333,222,222」
つまり小数点を6桁右にずらした結果の小数点より左側の値を
次の②で使用します
②22xxxxxx の部分を穴埋め
「333,222,222」の"右側6桁を取得"
つまり「333,222,222」を1,000,000 で割った余り を取得
また、1,000,000 で割った商、「333」
つまり小数点を6桁右にずらした結果の小数点より左側の値を次の③で使用します
③33xxxxxx の部分を穴埋め
「333」の"右側6桁を取得"
つまり「333」を1,000,000 で割った余り を取得
問16の内容を全ての値が10進数として扱うと
上記のような計算を行うことで結果を得ることができます
ここでポイントなのは、10進数でいう6桁分の値を抽出するには、
1,000,000で割る = 小数点を6桁右にずらす
(10の6乗で割る)
という処理が必要だということです
問16の内容に戻って、2進数で考えるとき
「小数点を6桁右にずらす」には何をすればよいでしょうか。
これが2進数だと「64で割る」という計算になります。
もっとポイントを押さえた形で書くと、「2の6乗で割る」ということになります。
2進数と10進数の違いは1桁あたりで表現できる数字の数になります。
・2進数の1桁で表現できる数字の数は0と1の2パターン、
・10進数の場合は0,1,2,3,4,5,6,7,8,9の10パターン、
その為「小数点をn桁右側にずらす」ためには、
それぞれ上記のパターン数のn乗で割った余りを求める必要があります。
・2進数の場合:2のn乗で割る
・10進数の場合:10のn乗で割る
ーーーーーーーーーーーーーーーーーー
ご丁寧にありがとうございます!64で割る理由がピンときていなかったのですが、10進数で例えてくたさったらとても分かりやすかったです!今後も動画を活用させていただきます…!
@@かまささ-o7r よかったです!
基本情報技術者試験の勉強頑張ってください!
30日に受けるのですが、サンプル問題の正答数は16/20でした。
公開問題を見た感じ、サンプル問題よりも全然難易度が高い問題が予想されますが、どうなんだろ笑
試験本番ではランダムに出題されるので確実な内容は分かりませんが、
サンプル問題よりも難易度が高い問題が出たというお話もよく聞きますので、
レベルの高い問題も練習した方が良いと思います!
コメント失礼します
この20問の対策のみでは、本試験に対応するのにはさすがに不十分ですよね??
質問ありがとうございます!
十分かどうかは人によって変わるのでなんとも言えませんが、
この20問がすらすら解けないのであれば、
その他の問題も解いて練習するのがいいと思います!
先生!何とか受かりました!✨
科目A 725点、B 610点…ギリッギリでした😂
どちらも見たことない問題のオンパレードで半分以上がそんなのだったんでAからすでに心が折れそうでした😢でも受かって良かった🎶先生の対策のおかげです!ありがとうございました!!
合格おめでとうございます!!
過去問道場とかの感覚や、先生の対策やった感覚ではどっちも800点は出るだろうと思ってて『合格は当たり前として、いかに高得点で受かろうか』って調子乗ってたら難しすぎて一気に現実を突きつけられました😂
前回合格率高かったからきっとIPAが難しくしたんだー(´;ω;`)
では次のIT資格の勉強に移ります!
後日、今回の試験の問題が発表されて、先生が解法動画アップしてくださったら確認しに来ます(笑)
次の資格の勉強頑張って下さい!
試験の問題は毎回ランダムなこともあり、今回受験された問題が公開される可能性は薄いですね。
@@itgakko あらー、そうなんですねー(´・ω・`)もし応用情報受けるときには、いつか先生が対策してくれるかも知れませんので、またお世話になるかも知れません😏(仮定の仮定の仮定w)
すみません再度質問失礼します。
問16に関してなのですがcpというのはこの場合何を指しているのでしょうか?数値としては無いのでしょうか?
またこの場合の具体的な結果の数値はどのようになりますでしょうか?初学者で不明点多くて申し訳ありません。よろしくお願いします。
また本文中では2進数のビットパターンで記載されていて、プログラム上では10進数での記載がされているためプログラム上の値を2進数に変換してしてしまったのですが、この場合は10進数のまま進めていくのでしょうか?
加えてこの配列に格納されている3つの値はそれぞれ別物で考えるのか一つのものとして考えるのかどちらでしょうか?
何度も申し訳ありません。答えていただければ幸いです。よろしくお願いします。
質問ありがとうございます!いかにそれぞれ回答しますね。
・cpというのはこの場合何を指しているのでしょうか?数値としては無いのでしょうか?
→変数cpはプログラム上以下2つの値を格納しています。
cpに対して割り算した結果をさらにcpに格納しているので、
何か1つのものを指してはおらず、役割が変わっていっているイメージです。
・引数で渡された Unicode の符号位置
・引数で渡された Unicode の符号位置について、
ビットパターン(配列utf8bytesに格納されている値)で割った商
・この場合の具体的な結果の数値はどのようになりますでしょうか?
→問題の具体例にある”あ”の符号位置 3042(16進数表記) が
本プログラムの引数に渡された場合を例に説明しますね。
以下プログラムの動きです。「//_斜体_」で具体値など補足しています。
最終的にプログラムから返される値(10進数表記)が{227, 129, 130}となります。
これを2進数表記に直すと{11100011, 10000001, 10000010}となり、
問題文に記載してある"あ"のutf-8の記号に一致します。
--------------------
整数型の配列: utf8bytes ← {224, 128, 128}
整数型: cp ← codePoint _// cp = 12354(16進数表記3042 を 10進数表記に直した形)_
整数型: i
for (i を utf8bytes の要素数 から 1 まで 1ずつ減らす) _// i=3 から i=1 の3回繰り返す_
・繰り返し1回目(i=3)
utf8bytes[i] ← utf8bytes[i] + (cp ÷ 64 の余り)
_// 12354 ÷ 64 の余り = 2 なので、_
_// utf8bytes[3] = 128 + 2 = 130 となる_
cp ← cp ÷ 64 の商
_// cp ÷ 64 の商 = 193 なので、_
_// cp = 193 となり、次の繰り返しへ_
・繰り返し2回目(i=2)
utf8bytes[i] ← utf8bytes[i] + (cp ÷ 64 の余り)
_// 193 ÷ 64 の余り = 1 なので、_
_// utf8bytes[2] = 128 + 1 = 129 となる_
cp ← cp ÷ 64 の商
_// cp ÷ 64 の商 = 3 なので、_
_// cp = 3 となり、次の繰り返しへ_
・繰り返し3回目(i=1)
utf8bytes[i] ← utf8bytes[i] + (cp ÷ 64 の余り)
_// 3 ÷ 64 の余り = 3 なので、_
_// utf8bytes[1] = 224 + 3 = 227 となる_
cp ← cp ÷ 64 の商
_// cp ÷ 64 の商 = 0 なので、_
_// cp = 0 となり、繰り返し終了_
endfor
return utf8bytes _// utf8bytes = {227, 129, 130}_
--------------------
・本文中では2進数のビットパターンで記載されていて、
プログラム上では10進数での記載がされているため
プログラム上の値を2進数に変換してしてしまったのですが
この場合は10進数のまま進めていくのでしょうか
→問題を解く上では 2進数 or 16進数 どちらで考えてもOKです。
・加えてこの配列に格納されている3つの値は
それぞれ別物で考えるのか一つのものとして考えるのかどちらでしょうか?
→すみません、こちらの質問の意図を読み取ることができませんでした。
具体的に考える上で困った理由、箇所などを教えていただけないでしょうか。
この動画のおかげで今日合格出来ました。ありがとうございました。
合格おめでとうございます!
悔しい…、B試験525点でした…。
また受けます。次は絶対…。
試験お疲れ様でした!
対策して次合格目指しましょう!
問12は文章とプログラミングを照らし合わせると、文章に答えがそのまま書いてありますね😂
見掛け倒しの問題だ
そうです!素晴らしいですね!
そこに気づければ早く解けると思います!
本日受験してA705,B680でした。合格見込みです。
ありがとうございました!
合格ライン到達おめでとうございます!!
考え方の解説ありがたすぎる!サンプルと参考書の少量の問題しかやっていなくて不安なのですが、他にどのような勉強をしておくべきでしょうか?学校で午前免除を受け合格済みです。午後だけのアドバイスをお願いします!!!
ご質問ありがとうございます。
午後問題、とにかく問題の量をこなすことが大事です。
既にサンプル問題を解いている状態なら、
他の問題にチャレンジするのが望ましいです。
また問題の解説を見て復習する際に、ただ単に「理解した」ではなく
「同類の問題を次に解くとしたら解ける」というレベルまで復習することが重要です。
3月下旬にはなってしまいますが、
IPA公式のサンプル問題の類似問題の解説動画を追加でアップ予定ですので、
受験までに間に合えばそちらもご利用ください。
基本情報技術者の勉強頑張ってください!
ためになる動画をありがとうございます。
問3について、質問させてください。
9:04 辺りのoutの要素数が配列の末尾の値になる理由が理解できておりません。要素数=その中にある値の数(何個の値が入っているのか)ことだと理解していたのですが、要素数=配列の末尾の値というものなのでしょうか?
質問ありがとうございます。以下に回答しますね。
ご質問は動画内8:57付近の「out[outの要素数]というのは配列の中の一番末尾の値をとってくるという風に言い換えられる」と言っている部分を指されていると思います。
具体例で考えるとわかりやすいです。下記、iの値ごとに tail ← out[outの要素数] が実行されるタイミングにおいて、
・i=2の場合、out={3}、outの要素数=1、out[outの要素数]=out[1]=3
・i=3の場合、out={3,5}、outの要素数=2、out[outの要素数]=out[2]=5
・i=4の場合、out={3,5,6}、outの要素数=3、out[outの要素数]=out[3]=6
となっています。全てのケースでout[outの要素数]が配列outの末尾の値になっていることが見て取れると思います。
なのでご質問いただいている「outの要素数が配列の末尾の値になる」のではなく、
「out[outの要素数]が配列の末尾の値になる」ということを説明しております。
動画内での説明が混乱させてしまう形となっておりすみません。
ご不明点などありましたらご連絡ください。
@@itgakko
ご回答いただき、ありがとうございます。
返信遅くなり、申し訳ないです。
詳しい説明のおかげで、out[outの要素数]が配列の末尾の値になる、という意味が理解できました。
ありがとうございます!
今後もこの動画を活用させていただきます!
科目Bは、さいとうさんの動画を全てみて理解すれば解けるようになるのでしょうか?
他にやるべき問題、参考書などはありますか?
科目Bは過去問がないのでいけるか不安です。
質問ありがとうございます!
「理解した」のハードルが人によって違うので、
基本的に「〜〜やれば解けますか?」のような質問にはお答えしておりません。
ご了承ください。
人によって前提となる知識が異なるので
どの程度の量問題を解けば良いという目安はありません。
ご自身の感覚で「8割程度正解できる」という自信がつくまで学習するのが良いです。
私の動画だけで自信がつくならそれで良いですし、
足りないなら問題集でさらなる自信アップをする必要があります。
問題集であれば以下の問題集はオリジナル問題が77問掲載されていておすすめです!
基本情報技術者[科目B]アルゴリズムとプログラミング トレーニング問題集
48:04 最初問題を解いているとき、問13(ア)でelseのreturn middleが実行されたあと、while文頭に戻って更にlow
質問ありがとうございます!
そうですね、return が実行されると問答無用でその関数の実行が終了します。
いつもお世話になっております!
ご質問がありまして、トレースの際は、実行結果を書くと さいとうさんから学びました。そこで、難易度が高くなったら実行結果の正しい表が作れません。表の順番の作り方をご教示頂きたいです。よろしくお願い致します!
質問ありがとうございます!
トレースする際はとにかく1行1行トレースすることが大事です。
最初の方は時間がかかるかもしれませんが、
1行1行しっかりとトレースすれば確実に正しい結果が出ます。
慣れるまでは時間がかかっても1行1行飛ばさずにトレースし、
慣れてきたら一部スキップしたりしてスピードを上げていくのが良いですね。
承知しました!
勉強になります。ありがとうございます
@@あさ-g6x 勉強頑張ってください!
科目Bの結果が615点だったのでまだちょっと不安ですが、本動画にてトレーニングを重ねたからだと思います。ありがとうございました!
試験お疲れ様でした!
不安かもしれませんが結果を待ちましょう!
受かってましたー🎉
合格おめでとうございます!
今、試験1週間前で前回あと5点で不合格だったのでこの動画でしっかり対策して頑張ります、!
コメントありがとうございます!
直前の追い込み頑張って下さい!
問9ですが、order(2)の後nを出力して、order([n],[2])をしてから、order(tree[n][1])をするのではないのでしょうか?if文3行の処理をせず、処理1をする点がちょっと理解できずにいます。
質問ありがとうございます。
結論としては、動画内で解説している順序が正しいです。
再帰呼び出しの場合の処理順についてですが、
下記でより詳しく解説していますので、こちらの問14を確認してみてください。
【初心者向け】基本情報技術者試験 科目B|アルゴリズムをゼロから理解する
ruclips.net/video/waAwVXa9y2o/видео.html
ありがとうございます。やってみます!
問9の処理①、②、③はどれですか?
PGの文章の中に番号書いてないとわかりずらいです
あと問題を解いてみて思いましたが、この問題は再帰ってなんでわかるんですか?
order(1)を実行します。
tree[1]の判定
tree[1]={2,3} 要素数2 なので
order(tree[1][1]=2)
tree[2]の判定
tree[2]={4,5} 要素数2 なので
order(tree[2][1]=4)
tree[4]の判定
tree[4]={8,9} 要素数2 なので
order(tree[4][1]=8)
tree[8]の判定
tree[8]={} 要素数0 なので
* 8を出力
endif
* 4を出力←ここでなんで出力されるのですか?(これが一番聞きたいです)
よろしくお願いいたします。
N=8の時は処理③ではないのでしょうか。要素が0のなので処理③だと思います。そこら辺因果関係が不明です
また、8が出力されたら二分木探索上、4しかないから4なのですか?
ご質問ありがとうございます。
まず、問9の処理①②③について、以下の通りとなります。
①order(tree[n][1])
②nを出力
③order(tree[n][2])
上記がわかりづらくすみません。上記を把握していただくと、質問頂いている内容の多くが解決すると思われますので、ご確認のほどよろしくお願いします。
上記だけでは解決しない箇所について下記で回答します。
・この問題は再帰ってなんでわかるんですか
→再帰呼出とは、あるプログラムからそのプログラム自身を呼び出すことを指します。今回は order という関数の中の処理で order が呼び出されているのがプログラムを見てわかるので、再帰呼出だと判断できます。
・4を出力←ここでなんで出力されるのですか?
→簡略化するために n=4、n=8、n=9のケースだけに絞って説明します。以下にプログラムの実行される行を1行1行書きます。わかりやすくするために呼び出した関数のブロックを {~~~} で表しています。
-----------
order(tree[2][1] = 4) { _//order(4)の呼び出し_
if (tree[n]の要素数 が 2 と等しい = true) _//条件がtrue(真)なのでブロック内の3行の処理を実行する_
order(tree[4][1] = 8) { _//order(8)の呼び出し_
_//if文の結果がfalse(偽)となるケースは記載を省略します_
else _//tree[8] = {}なのでelseのブロックに入る_
*n=8を出力*
}
*n=4を出力*
order(tree[4][2] = 9) { _//order(9)の呼び出し_
_//if文の結果がfalse(偽)となるケースは記載を省略します_
else _//tree[9] = {}なのでelseのブロックに入る_
*n=9を出力*
endif
}
_//中略_
}
_//以下省略_
-----------
上記のようにプログラム1行1行の動きを追ってみると、
nの出力順序は 8 → 4 → 9 であることがわかります。
以上、ご不明点などありましたらご連絡ください🤗
@@itgakko
ご回答ありがとうございます。
☆nの出力順序は 8 → 4 → 9
order(8)が呼ばれた
↓
8がブロックに入る
↓
その前でorder(4)が読んであるので、order( tree[2][1]=4 ←(他の解説者もここを省略しているから解説が分かりにくいと私は感じました.)
↓
4を出力する。
↓
4を出力されたら、order(tree[4][2] = 9) { //order(9)の呼び出し
↓
9を呼び出す
という考え方でしょうか
私も再帰というのが分かっておらず質問があやふやになってしまいました。
ご了承ください
@akiper
記載いただいた内容であっていると思います!
プログラムの処理順序については、基本的に上から下!を意識すると良いと思います。
i=4,8,9 の処理をさらに簡略化して書くと以下のようになります。
先ほど記載した処理①、②、③を使って再帰呼出であることを意識しない形にしています。
-----------
order(tree[2][1] = 4) { _//order(4)として呼び出す_
if (tree[n]の要素数 が 2 と等しい = true) _//条件がtrue(真)なのでブロック内の3行の処理を実行する_
処理① _//order(8) の呼び出し_
処理② _//n=4を出力_
処理③ _//order(9) の呼び出し_
_//中略_
}
_//以下省略_
-----------
上記の処理順序を考えてみると、「上から下!」なので処理①→処理②→処理③の順序になります。
それを踏まえた上で、処理①、処理②、処理③の中身を考えると、下記の通りになります。
・処理①では、order(8)として呼び出しているので、その中身で「n=8」が出力され、
・処理②では、そのまま「n=4」を出力、
・処理③では、order(9)として呼び出しているので、その中身で「n=9」が出力されます。
また、動画の中でも触れていたかもしれませんが、再帰呼出については、
「あー、そんなこと(関数の中でその関数自体を呼び出す)もできるんだなぁ」くらいに留めておくのがいいかもしれません。
再帰呼出だから何か特殊なこと(処理順序が変わったり)があるという訳ではないので。
どんなプログラムでも、1行だけをみると複雑なことはしてないので、1行1行理解して読み解いていくのがいいと思います。
またいただいたアドバイスについては改善しますね。ありがとうございます。
以上、ご不明点ありましたらご連絡ください🤗
今さっき受験してきました!
科目A 725/1,000
科目B 745/1,000
科目Bの方が苦手だったのに……!
このチャンネル3日間くらい見てたおかげです。本当にありがとうございました!
素晴らしいですね!
合格おめでとうございます!
旧試験の午後試験とどっちが難しいと思います??
コメントありがとうございます。
個人的には旧試験の方が難しいと思います。
旧試験はプログラミング未経験の方には非常にとっつきずらかったところがあったのですが、新試験では多少とっつきやすい表現に変わっていると思います。
問3について。どうしてtailにoutの末尾を入力するとわかるのでしょうか?
質問ありがとうございます。以下に回答しますね。
ご質問は動画内8:57付近の「out[outの要素数]というのは配列の中の一番末尾の値をとってくるという風に言い換えられる」と言っている部分を指されていると思います。
具体例で考えるとわかりやすいです。下記、iの値ごとに tail ← out[outの要素数] が実行されるタイミングにおいて、
・i=2の場合、out={3}、outの要素数=1、out[outの要素数]=out[1]=3
・i=3の場合、out={3,5}、outの要素数=2、out[outの要素数]=out[2]=5
・i=4の場合、out={3,5,6}、outの要素数=3、out[outの要素数]=out[3]=6
となっています。全てのケースでout[outの要素数]が配列outの末尾の値になっていることが見て取れると思います。
ご不明点などありましたらご連絡ください。
2か月後に基本情報を受けるます!
科目B対策として、基本情報の過去問午後試験を解くなら何問目が良いですか?サンプル問題だけだと心もとない気がして、、
質問ありがとうございます!
アルゴリズムは「データ構造及びアルゴリズム」
セキュリティは「情報セキュリティ」が良いですね。
常に問題と解答を表示してほしいけど、画面見づらくなっちゃうよなぁ
ご意見ありがとうございます!
そうですね、悩んだのですが画面見やすさの関係で問題と解答は表示していません。
その代わりに無料で本動画で使用している教材をプレゼントしています。この動画概要欄のURLからLINEに登録頂くと教材がダウンロードできますのでよければ試してみて下さいね。
※PCでLINEをご覧の方は、LINE登録後に教材が欲しい旨メッセージを送っていただく必要がございます。
【質問(問9)】
→「8」出力後に「4」が出力される理由が分かりません
【質問詳細】
「8」出力後に3行目の処理、
order(tree[n][1])
に再帰しているにも関わらず、それを無視して4行目の処理、
nを出力
に移行してるのは何故ですか?
質問ありがとうございます!
結論から言うとorder(8)として関数が呼び出された際、
3行目の処理「order(tree[n][1])」は実行されません。
-----
1. ◯order(整数型: n)
2. if (tree[n]の要素数 が 2 と等しい)
3. order(tree[n][1])
4. nを出力
5. order(tree[n][2])
6. elseif (tree[n]の要素数 が 1 と等しい)
7. order(tree[n][1])
8. nを出力
9. else
10. nを出力
11. endif
-----
order(8)として関数が呼び出された場合、
tree[n]の要素数は0です。
そのため、10行目の「nを出力」だけ実行されてorder(8)として呼び出された関数は終了します。
以上、ご不明点ございましたらご連絡頂ければと思います。
返信ありがとうございます。
しかしながら、説明してくださっているのは、不明点の1つ前の処理です。
疑問点は下記の通りです。
order(8)が
nを出力
して、処理終了となるのは分かります。
困惑しているのはその後のorder(4)に再帰後の処理です。
order(4)に再帰後になぜそのまま
nを出力
となり、「4」を出力しているのですか?
なぜ、3行目の
order([][1])
を無視しているのですか?
失礼しました。
ご認識されているプログラムの処理順が誤っているので、
プログラムの処理順を説明しますね。
-----
1. ◯order(整数型: n)
2. if (tree[n]の要素数 が 2 と等しい)
3. order(tree[n][1])
4. nを出力
5. order(tree[n][2])
6. elseif (tree[n]の要素数 が 1 と等しい)
7. order(tree[n][1])
8. nを出力
9. else
10. nを出力
11. endif
-----
まずorder(4)として呼び出されると、
3行目:order(tree[n][1]) が実行されます。
これは関数order(8)として呼び出すことを指します。
もう少し詳しくいうとorder(4)を中断してorder(8)を実行するイメージです。
order(8)は「8を出力」だけ実行して終了します。
ここで中断していたorder(4)を再開します。
order(4)は3行目まで実行していたので、
4行目の「nを出力」から再開します。
このような処理順になっています。
以上、ご不明点ございましたらご連絡頂ければと思います。
@@itgakko
中断された行(処理)の次の行(処理)から始まるということなんですね…
本問題について理解できました。
ありがとうございます。
@user-lw4hn3pn2h よかったです!
問3、なんでoutの要素数は末尾になるんですか?
回答させて頂きます。
ご質問は動画内8:57付近の「out[outの要素数]というのは配列の中の一番末尾の値をとってくるという風に言い換えられる」と言っている部分を指されていると思います。
具体例で考えるとわかりやすいです。下記、iの値ごとに tail ← out[outの要素数] が実行されるタイミングにおいて、
・i=2の場合、out={3}、outの要素数=1、out[outの要素数]=out[1]=3
・i=3の場合、out={3,5}、outの要素数=2、out[outの要素数]=out[2]=5
・i=4の場合、out={3,5,6}、outの要素数=3、out[outの要素数]=out[3]=6
となっています。全てのケースでout[outの要素数]が配列outの末尾の値になっていることが見て取れると思います。
ご不明点などありましたらご連絡ください🤗
@@itgakko ありがとうございます!めちゃくちゃ助かりました!!
質問です。
実行結果を書き出す時、変数に入れる値は何でも良いのでしょうか。
また、頭の中で処理できなかった時はとりあえず数字を入れてみる、で良いのでしょうか。
言葉足らずですみません、アドバイスを頂きたいです。
質問ありがとうございます!
実行結果を書き出す時、変数に入れる値は問題によってどうすれば良いか変わります。
・プログラムの実行結果が問われている問題
→問題文に具体的な値がきさいされているはずなのでその通りの値を使う。
・そうでない場合
→基本的になんでも良いです。ただ、繰り返し処理があるなら配列の要素数は2以上にするとか、if文の条件を見て変数の値を決めるだったり少し考える必要があります。
頭の中で処理できなかった場合はおっしゃる通りとりあえず具体的な値を入れてトレースするのがよいですね!
原始的と思われるかもしれませんが紙に書いてみるのがよいです!
アルゴリズムどう解いたらいいか分かるようになりました!!
ありがとうございます!
ありがとうございます!!
問6は、丁寧にトレースすると正解がアなので、イウエをトレースしなくても速い時間で答えが出ます。もし本番でこのような問題がでて、答えがウエらへんだと時間が足りなさすぎる気がするのですが、やはり、この場合は地道にトレースして、トレースする時間をはやくする練習をした方がいいのでしょうか??
質問ありがとうございます!
本番を考えると、まず大前提として時間がかかりそうな問題に出会った場合、制限時間の関係から後回しにするのが良いです。
その上で問6レベルの問題であれば、全て地道にトレースしなくても答えが出せるようになるくらいの実力をつけてから試験に臨むのが望ましいです。
純粋にトレースの速度を上げることと、トレースに慣れて端折るスキルを身につけましょう。1行1行トレースするのではなく、for文であれば繰り返し処理の最初の方だけトレースしてみてプログラムの全体像を掴むことだったりといったことです。
基本情報技術者 午後問題のデータ構造及びアルゴリズムという項目の過去問を勉強しているのですが、この動画で言っていることは完璧に理解できるし、1人でもできるのに、過去問は解けません。
本番の科目bはどのレベルのものが出るのでしょうか?テスト形式が変わる前のデータ構造及びアルゴリズムレベルの問題が出るのでしょうか?
質問ありがとうございます!
本番の試験でも本動画で取り扱っているような問題が出ますので、
「基本情報技術者 午後問題のデータ構造及びアルゴリズム」ではなく、
可能であれば現行試験の形式の問題を解いて練習した方が良いですね。
私の他の動画でも良いですし、
やり尽くしてしまった場合は、以下の問題集がおすすめです。
77問掲載されていて結構な量を演習できます。
基本情報技術者[科目B]アルゴリズムとプログラミング トレーニング問題集
解いても模試で30%しか解けません。解説を読めばわかるのに本番になるとアルゴリズムが読めなくなります。基本がまだなってないのでしょうか😅
質問ありがとうございます。
記載いただいた内容を確認しました。
「解説を読めばわかる」と「問題が解ける」は別物です。
記載いただいている通り基礎が足りないということもあると思いますが、
問題を解いて解説を見る際、「同様の問題が来たらどう解くか」というところまで
復習をしていくことが一番大事だと思います。
大変有用な解説動画をありがとうございます。
問16について質問があります。cpを64で割って余った数が後ろの64ビットになるという部分ですが、なぜこのようになるのでしょうか?説明が難しければ、理解するうえで抑えておくべき単元の内容をご教授いただけますと幸いです。よろしくお願いします。
質問ありがとうございます。回答します。
まず、2進数で話をする前に、10進数の場合で考えてみましょう。
例として、以下の「xxxxxx」の部分に
10進数「333,222,222,111,111」を右詰めで格納する時の処理を考えます。
対象:33xxxxxx 22xxxxxx 11xxxxxx
まず結果だけ見ると、
33000333 22222222 11111111 になりますよね。
これをプログラムで表現するために
計算上どうやっているかを考えます。以下の通りです。
①11xxxxxx の部分を穴埋め
「333,222,222,111,111」の"右側6桁を取得"
この右側6桁を取得するという計算を具体的な計算式で書くと
「333,222,222,111,111」を1,000,000 で割った余り になります
※333,222,222,111,111 ÷ 1,000,000 = 333,222,222、余り111,111
なぜこのようになるかというと、1,000,000で割るというのは、
小数点を6桁右にずらすと同義で、小数点以下にずれた6桁が余りになるからです
また、1,000,000 で割った商、「333,222,222」
つまり小数点を6桁右にずらした結果の小数点より左側の値を
次の②で使用します
②22xxxxxx の部分を穴埋め
「333,222,222」の"右側6桁を取得"
つまり「333,222,222」を1,000,000 で割った余り を取得
また、1,000,000 で割った商、「333」
つまり小数点を6桁右にずらした結果の小数点より左側の値を次の③で使用します
③33xxxxxx の部分を穴埋め
「333」の"右側6桁を取得"
つまり「333」を1,000,000 で割った余り を取得
問16の内容を全ての値が10進数として扱うと
上記のような計算を行うことで結果を得ることができます
ここでポイントなのは、10進数でいう6桁分の値を抽出するには、
1,000,000で割る = 小数点を6桁右にずらす
(10の6乗で割る)
という処理が必要だということです
問16の内容に戻って、2進数で考えるとき
「小数点を6桁右にずらす」には何をすればよいでしょうか。
これが2進数だと「64で割る」という計算になります。
もっとポイントを押さえた形で書くと、「2の6乗で割る」ということになります。
2進数と10進数の違いは1桁あたりで表現できる数字の数になります。
・2進数の1桁で表現できる数字の数は0と1の2パターン、
・10進数の場合は0,1,2,3,4,5,6,7,8,9の10パターン、
その為「小数点をn桁右側にずらす」ためには、
それぞれ上記のパターン数のn乗で割った余りを求める必要があります。
・2進数の場合:2のn乗で割る
・10進数の場合:10のn乗で割る
ご不明点ありましたらご連絡ください。
@@itgakko 無事理解できました。基礎の基礎からかみ砕いて説明してくださり大変助かりました。ありがとうございました!
よかったです。
基本情報技術者試験の勉強頑張ってください!
頭パンクしそうです…
何か不明点あればご質問下さいね!
質問です
問9の二分木で処理①、処理②、処理③がそれぞれ問題文記載のプログラムのどのコード部分を仰っているのでしょうか。
ご回答お願いします
質問ありがとうございます。
問9の処理①②③について、以下の通りとなります。
①order(tree[n][1])
②nを出力
③order(tree[n][2])
上記がわかりづらくすみません。
ご不明点などあればご連絡頂ければと思います。
解説ありがとうございます、、心強いです。残り4日しかありませんが気合い出します。質問です。
36:01 n=8を出力した後、なぜ一つ前の4に戻るかがよく分かりません、、
8が格納されている節の親が4だからですね、、
初歩的ミスでした😅
いつもさいとうさんの動画にはとてもお世話になっております。
問16の文字コードの問題につきまして、質問があります。
処理の内容は把握できたのですが、
6桁を取得するための計算で、なぜ64で割るのかが理解できずにいます。
6桁なので32だと思っているのですが…
質問ありがとうございます!
なぜ6桁だと64で割るのかについて、
1桁の場合から1つずつ桁を増やして考えるとわかりやすいです。
・1桁: 0 or 1 の2つしかないので、2パターン
・2桁:1桁の時の各パターンに対して、1番左に 0 or 1 がつくパターンが増えるので、 2 × 2 = 4パターン
・3桁:2桁の時の各パターンに対して、1番左に 0 or 1 がつくパターンが増えるので、 4 × 2 = 8パターン
・4桁:3桁の時の各パターンに対して、1番左に 0 or 1 がつくパターンが増えるので、 8 × 2 = 16パターン
・5桁:4桁の時の各パターンに対して、1番左に 0 or 1 がつくパターンが増えるので、 16 × 2 = 32パターン
・6桁:5桁の時の各パターンに対して、1番左に 0 or 1 がつくパターンが増えるので、 32 × 2 = 64パターン
また、動画概要欄にも「なぜ64で割った余りが後ろの64パターン(6ビット分)になるのか」という説明を
補足として記載していますのでよろしければそちらもご確認ください。
すみません質問です。
問9のようなtree[n][2]はtree[n+2]という認識であっていますでしょうか?
お返事お待ちしております。
質問ありがとうございます。
tree[n][2] の意味は tree[n+2] ではなく、
「2次元配列 tree の n番目の配列の 2番目の値」という意味になります。
2次元配列は、配列の要素が配列になっているもののことです。問9で与えられている2次元配列 tree で説明しますね。
tree = {
{2,3} ・・・tree[1]
,{4,5} ・・・tree[2]
,{6,7} ・・・tree[3]
,{8,9} ・・・tree[4]
,{10,11} ・・・tree[5]
,{12,13} ・・・tree[6]
,{14} ・・・tree[7]
,{} ・・・tree[8]
,{} ・・・tree[9]
,{} ・・・tree[10]
,{} ・・・tree[11]
,{} ・・・tree[12]
,{} ・・・tree[13]
,{} ・・・tree[14]
}
2次元配列は、配列の要素1つ1つが配列となっているので、例えば上記の1要素の「tree[1]」これ自体が配列となります。
例えば普通の配列 array の2番目の値を取得する場合は、array[2] と書くと思います。
2次元配列 tree の場合では、「tree[1]」自体が配列なので、「tree の 1番目の配列 から 2番目の値を取得する」という意味合いで tree[1][2] という記述を使用します。この記述で配列 tree[1] の 2番目である「3」が取得できます。
何かご不明点ありましたらご連絡ください。
お返事ありがとうございます。おかげで概要を理解することができました🙇
よかったです。
基本情報の勉強頑張ってください!
斎藤先生ご無沙汰しております。まきです。現状報告です。現時点で午後重点対策2週、大滝本とやりましたがやはり再度Javaを復習してプログラミングしてます。写経でソートやリスト類は組みましたが、基礎が身についてないので分かりにくかったのでやはり本腰入れてプログラミングを出来るだけ組んで理解してから再度問題集に戻ります。年末までには受かりたいです。
コメントありがとうございます!
実際にプログラミングしてみるのがやはりいいですね!頑張って下さい!
ありがとうございます。初学者なので大変助かります。問13で、選択肢 エ)も無限ループになってしまいます、、、どこかを勘違いしているのですが、もしお時間あれば教えてください。例えば、data [-1, 1], target 1 ではどうなるか教えていただけるとありがたいです。
ご質問ありがとうございます。
まず、記載頂いた data=[-1,1]、target=1 のケースですと、「(ウ)要素数が2で、target が dataの末尾要素の値と等しい」ケースにも当てはまってしまい、無限ループとなってしまいます。
ですので、記載頂いたケースとは別に、「(エ)要素に -1 が含まれている」ケースで無限ループにならない例を記載します。data=[-1, 2, 3], target=2 です。以下プログラムと各行の実行結果です。実行結果を 「_//斜体のコメント_」で記載しています。
----------
low ← 1
high ← dataの要素数
_//high = 3_
while (low target)
_// elseif (2 > 2) = false(偽) なので elseまでスキップ_
else
return middle
_// return 2 となり、targetと同じ値が格納されている要素番号が返されるので無限ループしない。_
----------
ただ、この問題の少し複雑な箇所として、「(ウ)要素数が2で、target が dataの末尾要素の値と等しい」が無限ループとなる唯一の条件ではない(十分条件ではあるが必要十分条件ではない)と言う点です。
※なので、問題文の中に「例えば...」という記載があるようです。
例えば(ウ)には合致しませんが、以下のケースは無限ループします。
data=[-1, 2, 3], target=4
----------
low ← 1
high ← dataの要素数
_//high = 3_
while (low
@@itgakko ご丁寧にありがとうございます。恐れ入ります。やっとスッキリしました。問題(選択肢)に若干クセがあるような気もしますが、学習を続けていくうちにさらに理解できるかもしれません。この動画のおかげで科目Bに取り組めています。合格に向けて頑張れそうです。
@@ffffrrrreeeeeeee
ご返信ありがとうございます!
おっしゃる通り他の問題と少し毛色が違うかもしれませんね。
「試験の制限時間内に解く」という意味では全問正解を目指すより優先度をつけて解ける問題から解くということも大事になると思います。このタイプの問題は時間がかかりそうなので試験では後回しでもいいかもしれません。
どの問題から解くか、を動画化するのも検討してみますね。
基本情報技術者試験の勉強頑張ってください🤗
16の文字コードの問題で64ビットという数字が出てきましたがどのような計算で64が出てきたのか教えていただきたいです😢
質問ありがとうございます。
なぜ64という数値なのか、長くなりますが以下に記載しますのでご確認ください。
ーーーーーーーーーーーーーーーーーー
なぜ64で割った余りが後ろの64ビットになるのか、
まず、2進数で話をする前に、10進数の場合で考えてみましょう。
例として、以下の「xxxxxx」の部分に
10進数「333,222,222,111,111」を右詰めで格納する時の処理を考えます。
対象:33xxxxxx 22xxxxxx 11xxxxxx
まず結果だけ見ると、
33000333 22222222 11111111 になりますよね。
これをプログラムで表現するために
計算上どうやっているかを考えます。以下の通りです。
①11xxxxxx の部分を穴埋め
「333,222,222,111,111」の"右側6桁を取得"
この右側6桁を取得するという計算を具体的な計算式で書くと
「333,222,222,111,111」を1,000,000 で割った余り になります
※333,222,222,111,111 ÷ 1,000,000 = 333,222,222、余り111,111
なぜこのようになるかというと、1,000,000で割るというのは、
小数点を6桁右にずらすと同義で、小数点以下にずれた6桁が余りになるからです
また、1,000,000 で割った商、「333,222,222」
つまり小数点を6桁右にずらした結果の小数点より左側の値を
次の②で使用します
②22xxxxxx の部分を穴埋め
「333,222,222」の"右側6桁を取得"
つまり「333,222,222」を1,000,000 で割った余り を取得
また、1,000,000 で割った商、「333」
つまり小数点を6桁右にずらした結果の小数点より左側の値を次の③で使用します
③33xxxxxx の部分を穴埋め
「333」の"右側6桁を取得"
つまり「333」を1,000,000 で割った余り を取得
問16の内容を全ての値が10進数として扱うと
上記のような計算を行うことで結果を得ることができます
ここでポイントなのは、10進数でいう6桁分の値を抽出するには、
1,000,000で割る = 小数点を6桁右にずらす
(10の6乗で割る)
という処理が必要だということです
問16の内容に戻って、2進数で考えるとき
「小数点を6桁右にずらす」には何をすればよいでしょうか。
これが2進数だと「64で割る」という計算になります。
もっとポイントを押さえた形で書くと、「2の6乗で割る」ということになります。
2進数と10進数の違いは1桁あたりで表現できる数字の数になります。
・2進数の1桁で表現できる数字の数は0と1の2パターン、
・10進数の場合は0,1,2,3,4,5,6,7,8,9の10パターン、
その為「小数点をn桁右側にずらす」ためには、
それぞれ上記のパターン数のn乗で割った余りを求める必要があります。
・2進数の場合:2のn乗で割る
・10進数の場合:10のn乗で割る
ーーーーーーーーーーーーーーーーーー
先日試験を受けてきましたが、科目Bの点数が届かず不合格でした。想定していたよりも穴埋め問題が多く出題され、穴埋めが苦手な私は時間が全然足りませんでした。動画内で解説頂いていますが、穴埋め問題をサクッと早く解けるようになるには回数をこなすしかないのでしょうか?コツがあれば教えて頂きたいです。
穴埋め問題は基本的な解き方を抑えたら
あとは問題を解く・復習するの繰り返しが地味ですが1番効果的です!
以下はオブジェクト思考に関する演習・解説動画ですが、
穴埋め問題も一部取り扱っており、
解き方についてより詳しく解説しているのでよければご覧ください!
ruclips.net/video/adjCffDTWnE/видео.html
@ ありがとうございます!
過去問道場にあるアルゴリズムはもっと長文なのですが、2023からは動画のような短い問題が沢山あるのでしょうか?
質問ありがとうございます!
2023年4月から試験形式が新しくなり、この動画のような短めの問題が主となっています。
@@itgakko
ご回答ありがとうございます!
情報セキュリティも今までと比べるかなり短いようですね。
こちらの動画を使用して勉強したいと思います。
@user-co8ip1ks5b 勉強頑張って下さい!
問9の質問です。tree[n]の要素数が2と等しいの条件で最初に{2,3}となり2と等しいはず(私の理解不足だったらすいません)なのに、8になるまで出力せずにn=1,2,4,8と処理を実行するのはなぜですか。
質問ありがとうございます!
まず記載頂いている内容の前半の
「tree[n]の要素数が2と等しいの条件で最初に{2,3}となり2と等しいはず」
こちらは合っています。
おそらく再帰呼び出しの処理順について理解が不十分だと思います。
再帰呼び出しについて以下の動画で詳しく解説していますので
よければまずこちらをご覧ください。
✅【初心者向け】基本情報技術者試験 科目B|アルゴリズムをゼロから理解する(問14が再帰呼び出しの問題です)
ruclips.net/video/waAwVXa9y2o/видео.html
自分用メモ 37:30