ขนาดวิดีโอ: 1280 X 720853 X 480640 X 360
แสดงแผงควบคุมโปรแกรมเล่น
เล่นอัตโนมัติ
เล่นใหม่
⚠学習前にご確認ください!・誤りがあった場合に概要欄で訂正している場合があります。動画におかしな点があった場合、まずは概要欄のご確認をお願いします。・動画で投影している教材は、本動画の概要欄からさいとうの公式LINEに登録頂くと無料でダウンロードできます! ※概要欄で訂正している内容が反映されたものをダウンロードできます。
対策本1冊は購入して科目Aはある程度勉強したのですが、1週間ほど前に科目Bに取り掛かってみて愕然。科目Aの勉強だけではまったくと言っていいほど対応できませんでした。この動画及びチャンネルの他動画を見て問題文の「日本語になおす」コツがつかめ、なんとか合格することができました。ありがとうございました!
合格おめでとうございます!
具体例を付け加えてるから、わかりやすいです。抽象的なプログラムなので、具体例があると一気に理解しやすくなります!やっぱり初心者にとって具体例は一番大事だと思いました。ありがとうございます、基本情報技術者の動画が少ない中、この動画に助かってます。
ありがとうございます!勉強頑張ってくださいね!
プログラミング初心者なこともあり、科目Bは『教科書に書いてあることが、何をいっているのかさっぱり分からない…(特にオブジェクト指向)』状態に陥っていましたが、こちらの動画シリーズのおかげで、科目B克服&合格できました!本当にありがとうございます!
合格おめでとうございます!素晴らしいですね!
分かりやすい解説&オリジナル問題で助かりました!基本情報技術者まであと1ヶ月で、科目Bでかなり詰まっていましたので、いい演習になりました!
コメントありがとうございます!勉強頑張って下さい!
問13のみ、訂正前の状態で解いたので「010」と続いて答えが合致しないと思いましたが、コメント欄や概要欄を見て再度解き直して「0110」になることが確認できました。訂正後にはなりますが、全問正解することができました。解説も分かりやすくて助かっています。
コメントありがとうございます!
おかげさまで本日合格できました。未経験から勉強し一度は落ちましたが諦めずに続けてよかったです。この動画をきっかけに理解が深まりました!
合格おめでとうございます!!
問13にて、i=2、j=3の時についてですが、この時nowstateは2かと思います。この場合、statetransition[3][1]は2なので、一つ目のif文はtrueinput[2]は1、statetransition[3][3]は1なので、二つ目のif文もtrueになり、statetransition[3][4]の値0を出力するのかと思ったのですが違いますでしょうか。
ご質問ありがとうございます。ご指摘の通り、j=1の時に値を変えた結果、i=2、j=3の時もif文が通ってしまいますね。if文内のブロックに、for文内のブロックを抜ける旨の記載が必要ですので、概要欄にも訂正の旨記載させて頂きます。修正後のプログラムですが以下のようになるイメージです。---------- if (input[i] と stateTransition[j][3] が等しい) stateTransition[j][4] の値を出力する nowState ← stateTransition[j][2] 繰り返しを抜ける endif----------以上、よろしくお願いいたします。
問13は自分で何回かトレースをしてみました。解説を聞いてみて、半年前ならできなかったですが今は出来るように自信が出来ました。ありがとうございます。
コメントありがとうございます!トレース、大事ですね!
模擬問題全部解いちゃって困ってたけどオリジナル問題とかマジで助かります!!本当に感謝しかないです!
コメントありがとうございます!これからもオリジナル問題は追加予定なのでぜひ楽しみにしていてください!
参考書より分かりやすくて驚いてます笑科目Bで苦戦していましたが、やっと理解できました。ありがとうございます。
よかったです!勉強頑張ってください!
とても分かりやすくて助かっています。
嬉しいコメントありがとうございます!
このような動画が欲しかった!ありがとうございます!
ありがとうございます!!
自分の頭ではついていけない所がありました😂 ポインターなどで説明している所を示してもらえると更に楽に理解ができる気がします。 大変分かりやすく解説された動画でしたのでまた違う動画も拝見したいと思います😊
コメントありがとうございます!改善していきますね!
基礎アルゴリズム講義コースありがとうございました。!!また応用問題にも進んでいきます!😄
コメントありがとうございます!頑張ってください!
本日試験でした。サイトウさんのおかげで手も足も出なかった、アルゴリズム擬似言語の問題を理解することができ、無事合格できました。それもこれも、この動画のおかげです。初心者向けのこの動画がレベルアップにつながりました。本当に感謝しています^_^
アルゴリズムが難しく理解に苦しみました。何回も動画見返してみますが何かコツがありましたら教えてほしいです。
質問ありがとうございます。具体的にはどのあたりで苦しみましたか?どんな苦しみ方をしたかによって例えば以下のように対応は異なります。 ・時間はかかるがなんとか理解できる → たくさん問題を解いてアルゴリズムの問題に慣れる ・とにかく全くわからない → アルゴリズムで利用される記号などを覚えるところから 始める必要があるかもしれません。アルゴリズムの問題が解けるようになるには、コツというよりは1つ1つ理解を積み上げていく他ありません。自分の現状に合った学習を積み重ねていけるといいですね。
この動画でアルゴリズムの基礎を理解でき、その後の過去問や模擬問題演習をスムーズに進めることができました。初回で科目B730点で合格出来ました。当日は、アルゴリズムの基本問題は自信をもって回答でき、応用問題は2-3問ほど分からなかったですが、アルゴリズムの基本問題とセキュリティを落とさなかったので、合格できたと思います。ありがとうございます!
まずは合格おめでとうございます!余裕を持ったスコアでの合格素晴らしいですね!Thanksありがとうございます!より良いTH-camチャンネル運営に使わせていただきます。
@@itgakko お返事ありがとうございます!受験を考えている友人にも動画を紹介いたします。
@user-ko6ze2dx8h ありがとうございます!
こんにちは!一昨日B試験落ちましたので心を改めてアルゴリズムを勉強しようと思いました。検索で偶然この動画をみつけましたが、説明の前に自分で考える時間があるのが非常に良いと思います。今日は00:35:40までやりました。明日また早く勉強したと思いました。良い学習動画ありがとうございます。
こんにちは!勉強頑張ってください!
今日初めて基本情報技術者試験を受けてAB共にめっちゃギリギリですがでなんとか合格点に達せました!科目bの勉強はこの動画にお世話になりました!ありがとうございます!
コメントありがとうございます!試験お疲れ様でした!
今日試験科目B受験しました!(科目Aは免除)結果は615点だったのでなんとか合格できました!さいとうさんには解説動画や質問対応など、本当にお世話になりました!ありがとうございました!
とても分かりやすく参考にさせていただいてます。明日試験なので合格できるよう頑張ってきます!
コメントありがとうございます!試験頑張って下さい!
@@itgakko 合格できました。配信動画は全て使わせてもらいました(*'ω'*)有益な動画ありがとうございました!
前回科目Bの問題集をなんとなくやって420点と惨敗したので、今回はさいとうさんが作った科目Bに向けての再生リストの動画を完全理解➕なんとなくやってた問題集の内容にさいとうさんの動画の知識を上乗せして理解する感じで勉強して本日科目Bを受けてきました。そして無事二回目で受かりました!!!本当に救われましたありがとうございました!!!!!!
分かりやすい動画ありがとうござます。最近科目Bの勉強を始めたのですが、テキストは買うべきなのでしょうか。もし必要であればおすすめを教えて頂けたら嬉しいです。また、こちらのチャンネルで科目B対策をする際に動画の見る順番などがありましたら、教えて頂きたいです。
質問ありがとうございます!それぞれ回答しますね【テキストは買うべきか】私の動画が合っている(解説を聞いて理解が進む)のであれば、テキストは不要かなと思います。ただアルゴリズムについては、基本的な考え方が理解できた後は実力アップのために問題演習が重要です。私の動画でも60問以上ありますが、それでも足りない場合は以下の問題集がオススメです(70問以上収録されています)。---基本情報技術者[科目B]アルゴリズムとプログラミング トレーニング問題集(第2版)---【本チャンネルの視聴順】コメントいただいたこの動画は最初に見ていただくと良いですが、それ以外は順不同です!基本的には『別動画で解説してるからこの動画では解説を省略します』みたいな説明はしてないので、お好きな順番で見ていただければと思います!
@itgakko ご丁寧に回答して頂きましてありがとうございます。科目Bはまずこちらのチャンネル動画で学習を進めて、頑張ってみます!
@みねみさ 勉強頑張ってください!
何度も質問すみません。問10から初見では全く歯が立たないので、答えと解説を見て何とか理解しようとしているのですが、よくわからない部分もありますが、この状態でテキストを買わずにこちらのチャンネルでこのまま学習を進めても問題ないでしょうか。時間を空けて再度問題文と解説を読むと理解できる部分もある状態です。また、初見で1問に費やしてもいい時間と歯が立たなかったら回答と解説を見てもいいのでしょうか。長文になってしまいすみません。
科目Bの動画を色々探しましたがこの動画が一番わかりやすかったです特にアウトプット→インプットなので考えながらインプットできる所が頭にスッと入ってきました明日、早速受けてきます正直科目Bの勉強を詰め込みでやったので心配しか無いですが頑張ります!
ありがとうございます!試験頑張ってください!
受けて来ました!A 615 B540で撃沈です💦 特に関数と再帰が苦手でした💦基本中の基本なのでまた動画を見ながら3週間勉強して挑みますとても悔しい!!!!!
受験お疲れ様でした!3週間後ですか、また頑張ってください!
6月と7月(こっちは落ちたら)に受験します科目B解説やってる動画はほとんどないので重宝しています
ありがとうございます!勉強頑張ってください!
非IT社会人ですが、自己研鑽のためITの勉強を始めました。ITパスポート、情報セキュリティマネジメントと何とか合格できました。基本情報技術者試験に挑戦すべく、B試験の勉強から始めました。参考書も応用になると分かりません。この動画でも丁寧に解説して頂いていますが、後半から全くついていけません。通信口座などであれば理解できるのでしょうか?それとも潔く諦めるべきでしょうか?
ITパスポート・情報セキュリティマネジメントいいですね!通信講座なども良いです!私からは自学の観点で1点アドバイスさせていただきます!「全くわからない」という状態は、突き詰めるとほとんどの場合ありません。必ずと言っていいほど細かい問題に分解できます!今自分がどこまで分かってて、どこから分からなくなってしまっているのか、コメントを拝見したところそこを整理するところから始めるのが良いと思いました!
基本情報技術者試験合格しました!さいとうさんの動画がすごく参考になり、安心して受験できました♪ありがとうございます☺️
合格おめでとうございます!わざわざご報告ありがとうございます!
@@itgakko 現在、応用情報技術者試験の勉強をしているのですが、どのような勉強法が良いのか、もし良ければ応用情報技術者試験の動画もぜひお願いしたいです。
応用情報いいですね!動画化検討しますね!
@@itgakko ありがとうございます!動画お待ちしてます☺️
問10について質問させてくださいelse文はbyte Λ 10000000が「10000000」という結果以外のときに実行する式だと思うのですが、resultByte ← resultByte ∨ (resultByte ∨ 00000001 )はどういうことを表しているのでしょうか?resultByte ← resultByte ∨ 00000001との違いがわからないので、教えてほしいです。
コメントありがとうございます。すみません、質問いただいた通り違いはないです。意図としては問題文を resultByte ←【a】というように、右辺丸ごと空欄にしようとしていたのですが誤ってました。混乱させてしまってすみません。
この人マジで助かる❤ありがとうございます🎉
いつも分かりやすく、大変助かっております!7月に受けるのですが、科目Aの基本理論以外も出していただけると大変助かります、、!
コメントありがとうございます!7月受験、頑張ってください!ただ申し訳ないのですが、科目Aの対策動画は7月の受験には間に合わないと思います。
概要欄に訂正があるの知らなくて問13何回やっても答えにたどり着かなくてめっちゃ時間無駄にした笑自分と同じ過ちを犯す人が出ないようにいつか訂正済み動画出してくれるとうれしいもうすぐ試験だから詰め込むぞ~
わかりやすい解説ありがとうございます!問5の配列基本問題ですが、data[3]はプログラミング言語的には6なのではと思いました!配布されているサンプル問題では問題文の前提条件として、配列は1から始まるの記載があるのでそちらでしたら答えは5なのかなとおもいます
すみません。IPAが公開しているサンプル問題に合わせて配列のインデックスは1から始まるようにしています。前提として書いておくべきでしたね。最近は多くのプログラミング言語が0始まりなので基本情報技術者試験の擬似言語も0からにすればよいのに、と個人的には思っています!COBOLとかは1始まりだった気がするんですけどさすがに今時じゃないので...
素晴らしい動画をありがとうございます。問13に関しては概要欄の修正を見ないと一生回答の0110(ア)とならず010・(イ)?となるので注意が必要ですね。私はこれで数十分時間がかかってしまいました笑
素晴らしい動画ありがとうございます。とても分かりやすいです。誤りもありますが(問題作りは大変なので致し方ないと思います)、オリジナル問題は非常にありがたいので今後もあたらしい問題作りを期待します。8/14に受検して参ります。頑張ります!
コメントありがとうございます!試験頑張ってください!
54:06 右の4,5行目のif文について。「minNumがソート前配列の要素より小さい場合」ってなってますが、「ソート前配列の要素がminNumより小さい場合」minNumをソート前配列で上書きするのではないでしょうか。日本語がややこしくてすみません
大変失礼しました。コメント頂いた内容が正しいです。お手数ですがお手数ですがご理解頂いている内容で読み進めていただけますでしょうか。
動画ありがとうございます!とても、参考になりました!ありがとうございます!⭐👍️
参考書だけじゃ足りなくて試験1日前にこの動画で勉強したらギリギリ合格できました!ありがとうございます( ; ; )
外国人の私でもわかりやすかったです、ありがとうございました!
嬉しいコメントありがとうございます!基本情報技術者試験の勉強頑張って下さい!
さいとうさん、こんばんは。今日基本情報技術者試験を受験しました。午後試験がさいとうさんの動画のおかげで、点数が合格線を軽く超えました!動画がわかりやすいです。試験時、半分ぐらいの内容を間に合わなくても、安全線にたどりました。超luckyでした。😂ありがとうございました!超超超超超超感謝します!!!!
合格おめでとうございます!わざわざ報告いただいて嬉しいです!ありがとうございます!
問10について解説で①の作業をbyte=01010101∧1000000 と置いていますが、この01010101はどこから出てきた数字でしょうか
質問ありがとうございます!01010101は一例です。
これオリジナル問題集ですか?このボリュームの問題よく作られましたね...すごい。4月5日に改定後の試験を受ける予定なので、サンプル問題が少ない中非常に助かります!
コメントありがとうございます!オリジナルの問題集ですね、試験頑張ってください!
いつ動画で勉強させていただき、ありがとうございます。今後、初心者むけオブジェクトの動画を作成する予定がありますか?
質問ありがとうございます!頂いたのは「オブジェクト指向」の講座のことでしょうか?構想としてはありますが、現時点で具体的な予定はありません。
問13人関して質問です。他の方と重複しますが。i=2, j=3の時、全てのif文通りませんか?はい、またはいいえでのご回答とその理由もくださると嬉しいです。お願い致します。
質問ありがとうございます。ご記載いただいた通り、i=2,j=3の時、全てのif文が通ります。概要欄に記載している以下の内容の通り、プログラムに以下内容を追加した状態が正しいので、お手数ですが読み替えて進めていただければと思います。ーーーーー ■対象:問13.繰り返し文(応用) ・プログラムに以下1行が不足しておりました。 お手数ですが以下の行を追加したものとして動画の視聴をお願いします。 動画内で喋っている解説自体は合っております。 ---------- if (nowState と stateTransition[j][1] が等しい) if (input[i] と stateTransition[j][3] が等しい) stateTransition[j][4] の値を出力する nowState ← stateTransition[j][2] 繰り返しを抜ける ←←← この行が不足しておりました endif endif ----------ーーーーー
10月に基本情報技術者試験を受けます。大変参考になる動画ありがとうございます!
コメントありがとうございます!勉強頑張ってください!
お疲れ様です。問13について質問があります。for(jを1からstatetransitionの要素数まで1ずつ増やす)IF(nowstateとstateTransition(j)(1)が等しいとあった際に、対象となる要素は、(j=1)(1)の値である1だけではなく(J=2)(1)の要素まで見るのかがわかりませんでした。もしよろしければ理由を教えていただけないでしょうか?
質問ありがとうございます!まず、質問内容について確認させて下さい。-----1. for ( i を 1 から 3 まで 1ずつ増やす )2. for ( j を 1 から 2 まで 1ずつ増やす)3. i + j の値を出力する4. endfor5. endfor-----頂いた内容は、上記のようにfor文が二重構造になっていた場合、その中の処理順は以下のようになる理由ということでしょうか?・i=1の時/j=1の時:1+1 = 2 を出力・i=1の時/j=2の時:1+2 = 3 を出力・i=2の時/j=1の時:2+1 = 3 を出力・i=2の時/j=2の時:2+2 = 4 を出力・i=3の時/j=1の時:3+1 = 4 を出力・i=3の時/j=2の時:3+2 = 5 を出力そうであれば以下にその理由を回答します。1行目にfor文があり、その中に2行目のfor文が存在します。まず1行目のfor文が先に実行されます。1行目のfor文はi=1〜3の3回の繰り返し処理です。その繰り返し1、2、3回目それぞれで2行目のfor文が実行されます。2行目のfor文はj=1〜2の2回の繰り返し処理です。その繰り返し1、2回目それぞれで3行目の「i + j の値を出力する」が実行されます。これをまとめると以下のイメージです。・1行目のfor文の1回目(i=1)が実行される。 └2行目のfor文の1回目(j=1)が実行される。 └「i + j の値を出力する」が実行される。 └2行目のfor文の2回目(j=2)が実行される。 └「i + j の値を出力する」が実行される。・1行目のfor文の3回目(i=2)が実行される。 └2行目のfor文の1回目(j=1)が実行される。 └「i + j の値を出力する」が実行される。 └2行目のfor文の2回目(j=2)が実行される。 └「i + j の値を出力する」が実行される。・1行目のfor文の3回目(i=3)が実行される。 └2行目のfor文の1回目(j=1)が実行される。 └「i + j の値を出力する」が実行される。 └2行目のfor文の2回目(j=2)が実行される。 └「i + j の値を出力する」が実行される。for文が二重構造になっている場合は上記のような処理順になります。問い合わせ内容が異なる場合、もう少し詳細に教えていただけると幸いです。
43:14で、byteの01010101と10000000の論理積を見ていると思いますがbyteが01010101であるのはなぜですか?単純に例を挙げただけです?すみません、混乱しています🥲
そうですね!あくまで1例ということです!
お恥ずかしい質問なのですが、問10がほぼ理解できない場合なにを勉強したらよいですか?失礼な質問でしたらすみません。あと、for (i を 1 から 8 まで 1 ずつ増やす) if ((byte ∧ 10000000) が 10000000 である) resultByte ← resultByte ∨ 00000000 else resultByte ← 【a】 endif if (i が 8 と等しい) return resultByte endif byte ← byte << 1 resultByte ← resultByte << 1 end for2行目の最初のbyteには、何の値が入っていますでしょうか?汗度々、すみません。最終的にreturn resultByteの値は10000000になるのでしょうか?
質問ありがとうございます!それぞれ回答しますね!> 問10がほぼ理解できない場合なにを勉強したらよいですか?失礼な質問でしたらすみません。 →問10のようなビット値の操作の問題については他の問題と少し異なり、 例外的にまずは科目Aの勉強をするのがおすすめです。 ビット値の操作は前提として 2進数 に関する理解が求められる場合が多いです。 科目Aの「基礎理論」という分野でまずは 2進数 を学習するのがおすすめです。 その後に、科目Bアルゴリズムの問題を解くのが良いです。> 2行目の最初のbyteには、何の値が入っていますでしょうか? →ご質問の内容は、関数invertを呼び出す際の引数の値によって変わります。 問題文に記載してある例のように、invert(00110101)と呼び出した場合であれば、 関数上の 変数byte には 00110101 という値が入ります。> 最終的にreturn resultByteの値は10000000になるのでしょうか? →これも関数invertを呼び出す際の引数の値によって変わります。 問題文に記載してある例のように、invert(00110101)と呼び出した場合であれば、 最終的に resultByte の値は 00110101 をビット反転した 11001010 になります。
@@itgakko ご返信ありがとうございます!一つ一つ実行していこうと思います。ご丁寧に解答いただき感謝いたします!
勉強頑張ってください!
@@itgakko ありがとうざいます!
1:10:29 問14でreturnが4回出てきますけど、4つのreturnを足したものではなくて最後に出てきたreturnが答えなんですね
コメントありがとうございます!そうですね!関数getSum(3) と呼び出した場合、getSum(3) の戻り値としては 6 が返されます。途中で呼び出されることになる getSum(2)、getSum(1)、getSum(0) についてはそれぞれあくまでその呼び出し元である getSum(3)、getSum(2)、getSum(1) の中で戻り値が使われているだけなので、return文 が複数回出てきているからといって、その結果を足したりはしないです。
解説動画を作成してくださり、ありがとうございます。問11 について質問なのですが、プログラムから最小値を求めている動きが想像できません…。2行目で minNum←compareDate[1] となっておりますが、6行目でも minNum←compareDate[i] としていることから、i=2 の場合、最小値ではない3を minNum へ上書きしてしまうのではないのでしょうか?考え直し方やアドバイスをご教示いただけますと幸いです。
質問ありがとうございます。回答しますね。おそらくご質問頂いているであろう、while文の繰り返し1回目の際のプログラムの動きについて以下に書きます。プログラムに対する補足を「//斜体 」で書きますね。----------minNum ← compareData[1] _//compareData={4,3,1,5}なので、minNumには4が格納される_delTarget ← 1for ( i を 1から compareDataの要素数まで 1ずつ増やす) _//4回の繰り返し処理_ if (compareData[i] が minNum より小さい) _//このif文が真となるのはi=2,i=3のケースのため、for文が終了した時、minNum=1,delTarget=3となる_ minNum ← compareData[i] delTarget ← i endifendforsortedData ← addElement(sortedData, minNum) _//sortedDataに1を追加_compareData ← delElement(compareData,delTarget) _//compareDataから要素の3番目を削除_----------記載いただいている通り、i=2の時、最小値ではない 3 で minNum が上書きされますが、その後i=3の時、最小値である 1 で minNum が上書きされるので、for文による繰り返し処理が全て完了した時には、最小値である 1 が minNum に格納されるようになっています。上記のような処理をしていることから、動画内ではこの部分を「ソート前配列から最小値を探す」というように説明させて頂いております。以上、ご不明点あればご連絡頂ければと思います。
@@itgakko for文による繰り返しがあることで3ではなく、1が最終的に上書きされるのですね!全く同じところで苦戦していたのでとてもスッキリしました!
@user-gf7hq6qo6d よかったです!!
動画ありがとうございます。凄くわかりやすくて助かります。質問ですが、問13で、for文でjを要素数まで1ずつ増やす処理の目的がわかりません。Inputの要素数の繰り返し処理だけでは、駄目なのでしょうか?宜しくお願い致します。
質問ありがとうございます。問13のプログラムの 2つ目の for文 がなぜ必要かということですが、結論から言うと必要で、1つ目の for文(配列inputの要素数分の繰り返し処理)だけでは実現が難しいです。2つ目の for文で行っている処理は以下の通りです。----------① if (nowState と stateTransition[j][1] が等しい)② if (input[i] と stateTransition[j][3] が等しい)③ stateTransition[j][4] の値を出力する④ nowState ← stateTransition[j][2] endif endif----------①〜④の行でやっている内容を日本語に直すとそれぞれ以下の通りになります。 ① 現在いる状態と、状態遷移図を表す配列stateTransitionのうち、 「矢印の始点」と一致するものを探す。 ② 入力(input[i])と、状態遷移図を表す配列stateTransitionのうち、 「入力」と一致するものを探す。 ③ ①②が両方一致する配列stateTransitionの要素から、 「出力」の値を出力する ④ ①②が両方一致する配列stateTransitionの要素から、 「矢印の終点」の値を「現在いる状態」に設定する特に①②の部分は「配列の中の全要素から合致するものを探す」と言う処理なので、繰り返し処理を用いて配列の値を1つ1つ参照し、if文で値が合致するかをチェックする、と言う処理が必要になります。一応 整数型配列の配列stateTransition の値が常に同じ前提なら、プログラムの 2つ目の for文 を使用しなくても同様の処理を実現できることはできますが、行数が無駄に増えてしまいますし、そうだったとしても for文 があった方がベターです。以上となります。ご不明点あればご連絡頂ければと思います。
科目Bのセキュリティもこのような動画が見たいです!!!
コメントありがとうございます!セキュリティですね、動画化検討してみます。
とてもためになります!初学者なのですが、問9について質問があります。average←sum÷dataなのでaverageが実数型でないといけないのは分かるのですが、getAverageも実数型にならなければいけないのでしょうか?
質問ありがとうございます。27:15 から説明している関数の定義方法をご確認いただけると分かりやすいと思います。呼び出し元に返す値の型も実数型にしておかないと、せっかく関数内で平均値を計算しても呼び出し元に間違った値が返されてしまう可能性があります。関数から呼び出し元のプログラムへ返される値が実数型なのであれば、関数名の左の型定義部分も実数型にしておく必要があります。以上、ご不明点あればご連絡頂ければと思います。
質問です、問13でi=2,j=2の時に出力1までは理解できてnowstateが2になるのはわかりました。ただそのあとにi=2.j=3、4,5,6は繰り返し処理しないのはなぜですか?i=1~4,j=1~6を実行しなければと思うのですが、各iで出力が一回あればjの残りをすっ飛ばして次のiに行くのはなぜですか?
質問ありがとうございます!問13は本動画の概要欄で訂正させていただいていますので、お手数ですが訂正内容をご確認ください。以下、概要欄に記載してある内容を転記しておきます。----- ■対象:問13.繰り返し文(応用) ・プログラムに以下1行が不足しておりました。 お手数ですが以下の行を追加したものとして動画の視聴をお願いします。 動画内で喋っている解説自体は合っております。 ---------- if (nowState と stateTransition[j][1] が等しい) if (input[i] と stateTransition[j][3] が等しい) stateTransition[j][4] の値を出力する nowState ← stateTransition[j][2] 繰り返しを抜ける ←←← この行が不足しておりました endif endif ----------
@@itgakko ご丁寧にありがとうございます。私が見落としていただけでした、失礼しました。無事問13解けました!
@@吉原瑞樹 よかったです!勉強頑張ってください!
大変分かりやすい動画ありがとうございます。お手数をおかけしますが、2点ご質問させてください。<質問①>問11の設問のプログラム2行目に「整数型:i,delTarget minNum」とありますが、これは、「整数型:i,delTerget,minNum」(delTargetとminNumの間に「,」を追加)ではないのでしょうか。最初にプログラムを見た時は、「delTerget minNum」という1つの変数かと思いましたが、以下のブログラム中でもdelTergetとminNumはそれぞれ独立して使用されて混乱しました。それとも、そもそも問題文の通り「整数型:i,delTarget minNum」記載されていても、それぞれ独立した変数として読み取るべきなのでしょうか。<質問②>問13の問題文2行目「帯域変数」は「大域変数」が正しいということでよろしいのでしょうか。お手数ですが、ご回答の程、何卒よろしくお願いします。
質問ありがとうございます!それぞれ回答しますね。【質問①の回答】→すみません、誤値です。 正しくは「整数型:i,delTerget,minNum」になります。【質問②の回答】→すみません、誤値です。 正しくは「大域変数」になります。以上、お手数おかけしますが読み替えて進めていただけますでしょうか。
@@itgakko 早々にご回答いただき、誠にありがとうございました。科目Bについては複数の書籍を読んでも納得できずに読み進めれませんでしたが、さいとう先生の動画で何とか少しずつ理解できるようになってきました。動画作成、ありがとうございます。合格できるように頑張ります!
勉強頑張って下さい!
大変興味深いかつ良い問題ありがとうございます。問10について質問させてください。トレースがうまくできなくて。。。i=7終了時点でbyte 10000000resultbyte 11001010となりi=8終了時点でbyte 00000000resultbyte 10010100となってしまいました。どこがおかしいかご教授頂けませんか。よろしくお願いします。ちなみにi=1終了時点ではbyte 01101010resultbyte 00000010となっています。
質問ありがとうございます。大変失礼いたしました。トレース頂いた内容はあっており、プログラムの記載に不備がありました。正しいプログラムでは以下のようにresultByte を左シフトする前に returnする必要があります。お手数ですが読み替えてトレース頂ければと思います。◼︎修正後[プログラム] ○8ビット型: invert(8ビット型: byte) 8ビット型: resultByte ← 00000000 整数型: i for (i を 1 から 8 まで 1 ずつ増やす) if ((byte ∧ 10000000) が 10000000 である) resultByte ← resultByte ∨ 00000000 else resultByte ← 【a】 endif if (i が 8 と等しい) return resultByte endif byte ← byte
@@itgakko丁寧にご回答いただきありがとうございました。とても納得できました。今後も動画で学習させていただきます。今後ともよろしくお願い致します。
大変失礼しました。勉強頑張ってください!
先生!問題の解答に関する質問とは違いますが質問があります!問11なんですが、このプログラムを最後までトレースしてみましたが結果が出るまでのプロセスに自信がありません。上から1行ずつトレースしていって、minNumが4→3→1と変わっていきcompareData[4]=5になったとき、minNum=1でif文が不成立でそのままfor文終了で下の関数(add/delElement)に入りますよね?(すでにちょっと自信ない😒)Elementの関数を回して、1→3→4と数字をsortedに送っていき、compareから消して行きます。まだcompare内に5(要素番号1)が1つ残ってるのでwhile文の『compareDataの要素数が0より多い』が真なので、また1行目から当て嵌めていくとminNum=5、delTarget=1。for文はすでにi=4まで回してるで飛ばして、下のadd/delElementの関数へ。そこで最後の5がsortedの末尾に行って、compareからラスト1つ1番目の5が削除される。こんな流れになると思うんですが、これ…ちゃんとトレースできてますでしょうか?😅なーんか、結果だけたまたま合ってるだけでプロセスが違うんじゃないかと自信がないんです💦
質問ありがとうございます!1つ1つ回答しますね。> 上から1行ずつトレースしていって、minNumが4→3→1と変わっていきcompareData[4]=5になったとき、minNum=1でif文が不成立でそのままfor文終了で下の関数(add/delElement)に入りますよね?(すでにちょっと自信ない😒) → これは合ってます。> Elementの関数を回して、1→3→4と数字をsortedに送っていき、compareから消して行きます。 → おそらく合っていると思うのですが「Elementの関数を回して」はどういう意味でしょうか? 合っているかどうかはここの意味次第です。> まだcompare内に5(要素番号1)が1つ残ってるのでwhile文の『compareDataの要素数が0より多い』が真なので、また1行目から当て嵌めていくとminNum=5、delTarget=1。for文はすでにi=4まで回してるで飛ばして、下のadd/delElementの関数へ。そこで最後の5がsortedの末尾に行って、compareからラスト1つ1番目の5が削除される。 → 一部違います。関数の処理が進んで compareDate = {5} になった時の while文内の処理を順に説明しますね。-----minNum ← compareData[1] _// minNumに5が格納される_delTarget ← 1 _// delTargetに1が格納される_for ( i を 1から compareDataの要素数まで 1ずつ増やす) _// compareDataの要素数=1なので、中の処理を1回だけ行う_ if (compareData[i] が minNum より小さい) _// compareDate=5,minNum=5なのでif文の中は実行されない_ minNum ← compareData[i] delTarget ← i endifendforsortedData ← addElement(sortedData, minNum) _// sortedDataに5を追加し、sortedData={1,3,4,5}になる。_compareData ← delElement(compareData,delTarget) _// compareDataから5を削除し、compareData={}になる__// この時点でcompareDataの要素数が0になるため、while文による繰り返し処理を終了する。_-----以上、ご不明点ございましたらご連絡いただければと思います。
うわぁー😲ありがとうございます✨✨✨『関数を回す』という謎オリジナルな言い回しで混乱させてしまいすいませんでした。i=4のときcompareData4番(=5)とdelTarget=1でfor文が偽で下の段の関数に行きますよね😊そのときi=1〜3までのminNumとdelTargetの数値を、i=3の結果から遡りながらadd/delElementに入れていけば良いのかなと解釈していますが、いかがでしょうか?👀5が1つだけになってからも再度for文に行ってるんですね!何かもうi=4まで行って手詰まりになって、プログラム最初からになったんでfor文は使えないのかと思ってました。(考えてみたらそんなルールはない😂)結果的に条件が偽になるからあってないような感じになってますが、これを知ってるのと知らないのとでは、理解に大きな差が出ますね😮とても丁寧な解説をして頂いて助かります✨いつもありがとうございます😇
補足ありがとうございます!> i=4のときcompareData4番(=5)とdelTarget=1でfor文が偽で下の段の関数に行きますよね😊> そのときi=1〜3までのminNumとdelTargetの数値を、i=3の結果から遡りながらadd/delElementに入れていけば良いのかなと解釈していますが、いかがでしょうか?👀→ 前半はあってますが、おそらく後半が違います。 while文の繰り返し1回目の処理の一部をトレースした結果を以下に記述しますので、 内容確認してみていただけますか?-----(前略) endifendfor_// この時点で minNum=1, delTarget=3 です_sortedData ← addElement(sortedData, minNum) _// sortedDataに1を追加し、sortedData={1}になる。_compareData ← delElement(compareData,delTarget) // compareDataから1を削除し、compareData={4,3,5}になる__// 次の繰り返しに進む(while文の先頭から実行する)_-----
ようやく完全に理解しましたー💡毎回compareData =5になってはfor文が偽になり、下段の関数に移り、そのときの最新のminNumとdelTargetを処理してはwhile文の最初に戻ってたんですね✨ありがとうございます🥳奥が深い!!
@@Lizm0414 よかったです!
問10についてです。resultByteの一番右の桁に設定する理由が分からなくて困っています。。。
コメントありがとうございます。resultByte の一番右の桁に設定する理由は以下の通りです。前提として、この問題のプログラムでの繰り返し処理では、 ・1回の処理では1桁分しか処理できない (変数byte、変数resultByte 両方ともに言える話) ・変数resultByteに 1 or 0 を設定する処理は毎回同じ桁 (このプログラムでは一番右の桁)にしかできないこのようなプログラムになっています。上記前提があるので、問題の解説の中で、 「③ 繰り返し処理の次の回で1つ隣の桁を対象にするために、byte、resultByte をそれぞれ1つ左シフト。」このような処理をしていると説明しています。ここから本題です。今回このプログラムで実現したい処理は、 「8ビットの2進数の全ビット反転」なので、例えば2進数 10000000 が関数の引数であれば、結果は 01111111 となりますよね。これをプログラムのfor文の1回目の繰り返しの部分に着目すると、 ① 変数byte の 一番左の桁の値が「1」 ② 変数resultByte の 一番右の桁に「0」を設定 ③ 変数byte、変数resultByte をそれぞれ1つ論理左シフトとなります。上記②で 変数resultByte に設定した「0」は、2回目〜8回目の繰り返し処理で、合計7回論理左シフトされます。こうすることで、最終的に「0」が一番左の桁に移動します。「resultByte の一番右の桁に設定する理由」としては、このような処理をしているから、ということになるのですが、回答になっていましたでしょうか?ご不明点などあればご連絡いただければと思います。
@@itgakko私も同じところで躓いたのですが解説が上手すぎて理解できました!ありがとうございます
度々質問がございます問5配列(基本)の箇所です整数型iが3となっていますが何故でしょうか?i番目なのでどこも指定されていないと思います
質問ありがとうございます!整数型の変数i の具体的な値は問題文中の以下記載で指定されています。-----関数printArrayData を printArrayData(3,{3,4,5,6})として呼び出すと ...-----上記の記載により、関数printArrayData 内で使用する変数i, data の値はそれぞれ以下になります。 ・i = 3 ・data = {3,4,5,6}以上、ご不明点ございましたらご連絡頂ければと思います。
@@itgakko ありがとうございます!
いつも勉強させていただいております。問13のfor文についてですがこの場合i=1;j=1の次はi=2;j=2。またその次はi=3;j=3と順に同じ数だけ増えていくのでしょうか?
質問ありがとうございます!問13のfor文の実行順に関するご質問とお見受けします。for文の実行順は以下の通りになります。 ・i = 1, j = 1 ・i = 1, j = 2 ・i = 1, j = 3 ・i = 1, j = 4 ・i = 1, j = 5 ・i = 1, j = 6 ・i = 2, j = 1 ・i = 2, j = 2 ・ ・ ・ (以下省略)以上、ご不明点ございましたらご連絡いただければと思います。
@@itgakko 様お返事ありがとうございます😊for文の実行手順がよく分かりました。ここでまた1つ疑問が生じたので質問させていただきたいです。問13についてこちらの動画の概要欄を確認したところnowState ← stateTransition[j][2] 繰り返しを抜ける ←←← この行が不足しておりましたこの文言に疑問が生じました。コメント欄でみなさん指摘されていますがi=2;j=3;のときif文を通過し「出力する」という処理が実行されるはずですがこの「繰り返しを抜ける」という処理が追加されることでi=2;j=2で「1」を出力したあとはi=2;j=3を判定するのではなくi=2の繰り返しを抜けi=3から判定を続けるという理解でよろしいでしょうか?
追加のご質問について、ご認識いただいている通りの動きです!おそらく合っていると思いますが、念の為以下補足させて頂きます。正確に言うと「繰り返しを抜ける」が実行されることで、以下の j から始まる for文がその時点で終了します。-----for ( j を 1 から stateTransitionの要素数 まで 1ずつ増やす)-----上記for文が終了すると、その後すぐに i から始まるfor文の方もi=2の時の処理が終了するので、プログラムの動きとしては「繰り返しを抜ける」が実行された直後 i=3から判定が続いていきます。以上、ご不明点ございましたらご連絡いただければと思います。
問6は要素数と要素番号がごっちゃになって混乱しますね。わかりやすい解説が楽しいです。
問10番の処理に関して質問です。日本語的な質問になってしまうのですが、、for(iを1から8まで1ずつ増やす)上記は、8を含む表現でしょうか?繰り返し処理を7回まで実施し、iが8になるからループから抜けるのでしょうか?(i
質問ありがとうございます。こちらは8を含む表現です。1,2,3,4,5,6,7,8 の合計8回の繰り返し処理になります。
ビット値の操作が難し過ぎる…説明あって、そっから2時間くらい考えてようやく理解しました。こんなのが普通にスルッと理解できる脳じゃなきゃエンジニアは厳しいのだろうか…
コメントありがとうございます!脳がどうとかいうことはないと思います。単純にこの問題を理解できる知識レベルに到達しているかしていないかだけです。ビット値の問題が他と比べて難しく感じるのであれば、2進数に関する理解を深めた方がいいかもしれませんね。私の動画でも2進数関連の問題の解説をしているのでよろしければご覧ください。✅【永久保存版】科目A過去問10回分解説|1.基礎理論編(基本情報技術者試験) th-cam.com/video/rVAqR-jgd_Y/w-d-xo.html【2進数関連の問題】問4.ビット反転問6.2進数の乗算①問9.2進数の論理積問12.2進数の排他的論理和問19.2進数の特徴問28.10進数→2進数の変換問30.2進数の負数表現(2の補数)問35.2進数の乗算②問38.2進数の否定論理積
ありがとうございます。拝見します!今回引っ掛かっていたのは、左端の数字でチェックして、右端の数字を書き換えていくという流れが理解するまでに時間を要したのと、iの存在です。iが8になったら8桁全て回ったということでループ終了で良いのに、i=8はどこかに代入する為にあるんじゃないのかとか、どこかの何かの数値と比較して両者が8になったことを確認しないとループを終わっちゃダメなんじゃないかと勝手に思い込んでいたことが大問題でした(笑)
なるほど!「for文があったら配列の要素番号に指定する」とか予想を立てることは大事ですが、プログラムは書いてあることが全てで、それ以上の処理はないので、予想に囚われすぎないようにしたらいいかもしれませんね。
@@itgakko ありがとうございます。囚われないことは超重要ですね!予測するにも色々パターンのプログラムに触れて見る事が大事だと思いました。まだ知らないプログラムが多くある中で知った気になって先回りしないように気をつけます!
頑張って下さい!
問題10.11だけわからなくて悔しい、、頑張ります。
難しい問題を解いて、またこの動画に戻ってきたら11解けるようになりました!成長!
@user-qw9cd8xi4b 素晴らしいですね!
初心者向けとありましたが応用問題は結構難しかったですw状態遷移図のやつチンプンカンプンです
コメントありがとうございます!そうですね、状態遷移図の問題は少し難しめに設定しています!ご不明点ありましたら質問頂ければと思います。
問14最後のreturnでなぜgetsumの値だけが戻り値となるのですか?
質問ありがとうございます!すみません、もう少し具体的に不明点を教えて頂けますでしょうか?問14は関数getSumだけで4回呼び出されていることもあり、ご質問頂いている内容が理解できませんでした。可能であれば、逆にどうあるべきだと思うかもあわせて教えていただけると助かります。関数getSumの値以外に戻り値となる可能性のあるものということです。以上、お手数ですがよろしくお願いします。
アルゴリズムこの動画のおかげで意外とすんなりできた!
ありがとうございます!
31:53 ①が関数を呼び出して②がその関数を定義している問10もう一回問13解けたけどもう一回解説理解する問14 プログラム中のreturnとnumはくっついてない
問5で(3{3.4.5.6})で最初の(3の部分は何を示しているんでしょうか?整数型の値でしょうか?またi=3というのがよくわからないのですが、dataの配列の最初の[1]が3だから3なんでしょうか?
質問ありがとうございます!前提を説明した方が理解しやすいので、順を追って説明しますね。まず細かいですが、ご質問いただいている問5の該当部分は (3,{3,4,5,6}) です。この問題のprintArrayDataのような関数に対して、printArrayData(3,{3,4,5,6})のように()内に具体的な値をつけて記述することで、関数内で使用する値を指定した状態で関数を実行することができます。また、上記で指定する具体的な値は関数の定義(以下)に記載してある順番と対応します。-----○文字列型: printArrayData(整数型: i, 整数型の配列: data)-----関数の定義上、()内の 1番目が「i」、2番目が「data」になっていますよね。このように定義してある関数に対して、先ほどのようにprintArrayData(3,{3,4,5,6})と指定すると、 ・3 → 関数定義の「i」に対応 ・{3,4,5,6} → 関数定義の「data」に対応このようになるので、問題文の例で関数を実行した場合、i の値は「3」になります。【質問に対する回答まとめ】・(3,{3,4,5,6})の「3」は整数型の値を表しています。・i=3なのは、printArrayData(3,{3,4,5,6})のように()内の1番目の値が「3」だから今回お話しした関数について、詳しくは「問7.関数呼び出し①」で解説しているのでよろしければそちらをご確認ください。
00:47:08 問11.繰り返しのwhile文配列 4,3,1,5の場合if文( ソート前配列の要素 が minNum より小さい場合 )ではソート後の一番目が 3 ではないのですか?
質問ありがとうございます!関数selectSortを引数={4,3,1,5}として呼び出すと、最終的に関数が返す配列は記載してある通り{1,3,4,5} になります。もう少し詳細に「ソート後の1番目が 3 になる」と思われる部分をご記載いただければ、疑問点にお答えできると思いますので、よろしければ具体的な処理順やトレース結果などの詳細をご記載ください。
問13について質問がございます。if(nowStateとstateTransition[j][1]が等しい)について、一つ前のfor文でjを1からnowstateの要素数まで1ずつ増やすとあるため、j=1で、if文のstateTransition[j][1]の[1]はj=1の要素である、1,1,0,0の内の始点の1だと思ってしまいました。解説の中でif(nowStateとstateTransition[j][1]が等しい)について、水色の列から一致するものを探すという説明があり、一つ前のfor文でjを増やしており、j=1の配列のみ見るものだと思っていたので、なぜ水色の列から一致するものを探すという方法を取るのかが分からないです。
ご質問ありがとうございます!ご質問いただいたのは投映している資料の中で-----・i=1 のとき(input[i] = 0)※ nowState = 1」 → 配列stateTransition(要素数 = 6) の繰り返し処理-----このように説明している箇所だと思います。ここで「if (nowState と stateTransition[j][1] が等しい)」の部分を-----水色の列から一致するものを探す → j=1 と j=2 が見つかる-----と表現しています。これは画面上の資料にも映している通り、「配列stateTransition(要素数 = 6) の繰り返し処理」の処理のことを説明しています。つまり、j=1の時だけの話ではなく、j=1〜j=6までの繰り返し処理全体の説明になります。そのため、・j=1の時:if (nowState と stateTransition[1][1] が等しい)・j=2の時:if (nowState と stateTransition[2][1] が等しい)・j=3の時:if (nowState と stateTransition[3][1] が等しい)・j=4の時:if (nowState と stateTransition[4][1] が等しい)・j=5の時:if (nowState と stateTransition[5][1] が等しい)・j=6の時:if (nowState と stateTransition[6][1] が等しい)j=1〜6の6個分の処理を行った結果、j=1とj=2の時にif文の条件が真(true)になったということで、「水色の列から一致するものを探す」という表現をしています。以上となります。混乱させて申し訳ありません。
@@itgakko ありがとうございます!分からないことが多く混乱していたため、冷静になって考えることで理解できました。申し訳ないのですが、追加で2点質問がございます。1点目は問11について、for(iを1からcompareDataの要素数まで1ずつ増やす)について、これは問13のjを1からstateTransitionの要素数まで1ずつ増やすfor文と同様にi=1〜compareDataの要素数までの繰り返し処理全体の説明なのでしょうか?問題を解いた際、for文以降のif文からdelTarget1←iをループしてしまい、解けませんでした。for文をしっかり理解していないことが原因なのでしょうか?2点目は問10についてbyteと10000000の論理積をして判断したビット値を反転させて、一番「右」の桁に設定するのはなぜなのでしょうか?普通に考えて、ビットに数値を入れる際は右から入れるからなのでしょうか。(10進数なら1の位から数を入れるように。)
それぞれ回答しますね!> 1点目は問11について、for(iを1からcompareDataの要素数まで1ずつ増やす)について、これは問13のjを1からstateTransitionの要素数まで1ずつ増やすfor文と同様にi=1〜compareDataの要素数までの繰り返し処理全体の説明なのでしょうか?→そうですね、この問題では1行1行トレースしているわけではなく、 for文全体の処理について説明しています。> 問題を解いた際、for文以降のif文からdelTarget1←iをループしてしまい、解けませんでした。> for文をしっかり理解していないことが原因なのでしょうか?→解く時にトレースしてみたということでしょうか? であれば、お話を聞く限りfor文への理解というより、 まずは時間がかかってもいいから1行1行確実に トレースしていくことに注意するのが良いと思います。> 2点目は問10についてbyteと10000000の論理積をして判断したビット値を反転させて、一番「右」の桁に設定するのはなぜなのでしょうか?普通に考えて、ビットに数値を入れる際は右から入れるからなのでしょうか。(10進数なら1の位から数を入れるように。)→まず前提として、右から設定しなければいけないという決まりはないです。 関数の目的であるビット反転が実現できれば右からでも左からでも問題ありません。 その上でこの問題のプログラムで1番右の桁に設定している理由について、 ・for文による繰り返し処理で8回繰り返し処理を行うことを考えた時に、 各繰り返し処理では毎回同じ場所(桁)に対して処理することになる。 ・ビット値の操作については、左シフト・右シフト・論理積・論理和がある。 ※これは公式のサンプル問題に合わせています 上記から、まず右の桁に値を設定して、それを左シフトすることを繰り返せば 最終的に元の値をビット反転した値が得られるということで こういったプログラムにしています。以上、よろしくお願いします。
@@itgakko ありがとうございます!1からトレースして、再度解き直したら、正解することができました。その際、他の選択肢が間違っている理由も理解することができました。本当にありがとうございます。今は応用編の動画を学習しており、ビット値操作の問題がこの動画で勉強したおかげで、スムーズに解くことができました!
よかったです!
わかりやすいです、ありがとうございます!
問10のビット値の操作は、反転操作の処理手順を覚えた方が良いですか?
トレースで対応しても厳しいように感じました。
質問ありがとうございます!処理手順を覚えるのはお勧めできません。理由は「ビット反転の操作」のプログラム1つをとっても、実現方法は1つではなく、覚えた形のまま出るとは限らないためです。おっしゃられている「トレースしても厳しい」とは具体的にどのような状態でしょうか?具体例を作って、選択肢1つ1つトレースしていけば時間はかかるかもしれませんが多くの問題が解けると思います。最初は時間がかかるかもしれませんが、様々な問題で練習を積めばトレースも早くなり、プログラム穴埋めの勘所もついてきます。
この動画で基礎力を付けたら応用問題にもチャレンジしてみてくださいね!応用問題はコチラ↓↓th-cam.com/video/9fU2HlAXTiM/w-d-xo.html
問8で質問です。関数calc=関数calccombinationということですか?関数calcが組み合わせの数xCyを返すから、return【a】のaにxCyの式を入れているのでしょうか。
質問ありがとうございます!それぞれ回答しますね。> 関数calc=関数calccombinationということですか?→ そうです。誤植失礼しました。関数calcが組み合わせの数xCyを返すから、return【a】のaにxCyの式を入れているのでしょうか。→ そうです。
ありがとうございます!勉強頑張ります💪
文系、非IT、プログラミング未経験者でしたが昨日無事合格できました😂科目A、Bともに貴重な動画をありがとうございました!!
コメントありがとうございます!素晴らしいですね!合格おめでとうございます!
なるほど。「2の倍数かつ4の倍数ではない」は「2の倍数かつ4の倍数である」
大変助かります。ありがとうございます。
i = 1. j = 1 出力0i = 2. j = 2 出力1i = 2. j = 3 出力0i = 3. j = 4 出力1i = 3. j = 5 出力0i = 4. j = 6 出力0出力結果:010100間違ってたら教えてください
それ私も思いました!!どなたか教えてください!!
返信ができておらず失礼しました。問13はお手数ですが概要欄で訂正を入れさせて頂いております。以下の「繰り返しを抜ける」が不足しておりました。こちらで正しい解答になりますのでお手数ですがご確認下さい。----- ■対象:問13.繰り返し文(応用) ・プログラムに以下1行が不足しておりました。 お手数ですが以下の行を追加したものとして動画の視聴をお願いします。 動画内で喋っている解説自体は合っております。 ---------- if (nowState と stateTransition[j][1] が等しい) if (input[i] と stateTransition[j][3] が等しい) stateTransition[j][4] の値を出力する nowState ← stateTransition[j][2] 繰り返しを抜ける ←←← この行が不足しておりました endif endif ----------------
問13について質問があります。何度解きなおしても3つ目の出力が010のイになります。3つ目の出力はなぜ1になり、アが答えになるのでしょうか?
質問ありがとうございます!すみません、問13のについては動画概要欄で訂正を入れさせて頂いております。概要欄に記載の内容を以下に記載しますのでこちらご確認いただけますでしょうか。----- ■対象:問13.繰り返し文(応用) ・プログラムに以下1行が不足しておりました。 お手数ですが以下の行を追加したものとして動画の視聴をお願いします。 動画内で喋っている解説自体は合っております。 ---------- if (nowState と stateTransition[j][1] が等しい) if (input[i] と stateTransition[j][3] が等しい) stateTransition[j][4] の値を出力する nowState ← stateTransition[j][2] 繰り返しを抜ける ←←← この行が不足しておりました endif endif ---------------こちらをご確認いただければ、頂いた質問が解決すると思います。
ご回答ありがとうございます!概要欄の記載を見落としていました💦無事アが答えになり、理解できました。次の日曜日に先月のリベンジを果たしに再受験致します。ありがとうございます!
リベンジ頑張って下さい!
質問があります24:25で整数型iが2,整数型jが1と解説されていますがなぜですか?
質問ありがとうございます!問題文中で i=2、j=1 として関数が呼び出されているからです。-----関数printDualArrayData を printDualArrayData(2, 1, {{3,2}, {3,4}, {1,7}, {5,5}}) として呼び出すと...-----問題文中にこのように関数をどのような引数で呼び出すかが記載されています。この関数の引数の1つ目が i 、2つ目が j に該当しますので、i=2、j=1 になります。
@@itgakko ありがとうございます!再度確認します!
またご不明点あればご質問ください!
間がない話し方で脳が理解に追いついていけず聞き取りにくいです🥲
ご意見ありがとうございます!改善しますね!
問10について質問です。i=1というのは、01010101の場合12345678と一番左から順番に名前を付けていてそれぞれ論理積して確認しているということでしょうか。見当違いなことを聞いていましたらすみません。
すみません!ご質問の内容が理解できませんでした。お手数ですがもう少し詳細に教えていただけますか?
for(iを1~8まで1ずつ増やす)とありますが、i=1、i=2、i=3は、どのような状況のことを表現しているのでしょうか。i=1からトレースをして考えたいのですが、i=1が何を表しているのかわからない状況です。@@itgakko
そういうことですね!動画内 43:03 あたりから説明しているページの内容が関数invert(01010101)として呼び出した場合のi=1の場合の処理になっていますので、こちらを参考にi=2以降もトレースしてみてください。
i=1は、1ビット左シフトi=2は、2ビット左シフトということでしょうか。@@itgakko
@@長谷川竜也-u3jおっしゃっている内容だけではあっているともあってないとも言えません。動画内で説明している具体例において、変数byteの値は、関数が呼び出されてからi=1〜i=3にかけて以下のように変化していきます。・関数が呼び出されたタイミング byte=01010101・i=1の時のfor文内の処理が実行された後 byte=10101010 ※「01010101」を1ビット左シフト・i=2の時のfor文内の処理が実行された後 byte=01010100 ※「10101010」を1ビット左シフト・i=3の時のfor文内の処理が実行された後 byte=10101000 ※「01010100」を1ビット左シフトこのように変数byteの値は変化していきます。
科目bはサンプル問題さえ解ければ合格点取れるのでしょうか?
質問ありがとうございます!結論、分からないですね。しかし個人的な感覚で言えば、公式が出しているサンプル問題や過去問を全て「素早く」かつ「内容を理解」した上で解けているのであれば、科目B合格点は到達できると思います。
問5の(3,{3,4,5,6,})のカッコの意味を教えてください。{ }のデータを一個の変数だと思ってしまいました。このような記号が使われている場合、どのように変数のハコに格納されるのでしょうか?
質問ありがとうございます。{3,4,5,6} は「整数型の配列」です。これが 関数printArrayData に渡され、data という変数名で受け取っているので、data という配列の名前に 番号を [ ] でつけてあげることで配列の各要素をプログラム内で使用できます。具体的には以下のようになります。 data[1] = 3 data[2] = 4 data[3] = 5 data[4] = 6ご不明点あればご連絡頂ければと思います。
@@itgakko便乗で質問です配列は0から始まるので配列3は「6」を指す筈ですが、なぜ回答が「5」なのでしょうか
@randora2015 基本情報技術者試験の科目Bアルゴリズムにおいては、基本的に要素数は1から数えます。※問題に記載がある場合はそちらを優先してください
@@itgakko 要素数は「1」から数えますが配列は「0」からの筈です
@randora2015 失礼しました。しかし、配列の要素番号(プログラム上で「配列名[要素番号]」の形で指定する番号)も1から数えています。Javaなど実際のプログラミング言語では、要素番号は0から数えることが多いですが、基本情報技術者試験の科目Bでは1から数えることが多いです。※問題文に指定がある場合は指定に従ってください
すみません、問6のi=2,j=1がなぜか分かりませんでした。教えていただけますと幸いです。
ご質問ありがとうございます。頂いた質問ですが、なぜi=2,j=1になるのか分からないということでしょうか?それともi=2,j=1でなぜこの答えになるのかが分からないということでしょうか?お手数ですが具体的に分からなかった箇所を教えて頂けますでしょうか。
ファーーーーーーーwwwwwwwwwwオリジナル問題助かるwwwwwwwwwwww
科目Bの予想問題では時々長文の問題(循環小数や2進数の加算のプログラム)が出てくるのですが、そのような時にはどのようにして解くのが良いのでしょうか?
質問ありがとうございます。解答方針はこの動画で解説しているものと変える必要はないと思います。 ・プログラムの穴埋め形式の問題であれば文章とプログラムをリンクさせる、 ・プログラムの実行結果を問う問題では1行1行トレースする。記載頂いている2進数や循環小数の問題であれば、プログラムを全て見なくても2進数や循環小数の知識だけで答えが出るケースもありますが、他の問題を解く際の再現性に欠けるので、こんなケースで解けたらラッキーくらいに思うのがお勧めです。問題を解く上で個別にわからない箇所があるようであれば記載頂ければアドバイスはできると思います。
ご回答ありがとうございます!色々な種類の問題を解いて慣れていこうかなと思います。
めちゃくちゃ初歩的で申し訳ないのですが、 43:34 の①でbyteが01010101になっているのは例として出しているだけですよね..?🙇🏻♀️
質問ありがとうございます!そうですね!あくまで例です。
@@itgakkoありがとうございます!!
数学的な考え方が抜けなくてi=i+1ん?ってなったのは良い思い出
初めてプログラミングする時に違和感を感じるところですよね!
1〜9 ○10〜 △
12 ✖︎
再帰呼び出しで単純にgetSum(引数)としないのはなぜでしょうか?
質問ありがとうございます!質問内容は、問14について回答が「(イ) num」でない理由ということでよろしいでしょうか?その前提で回答しますね。関数内の1番下の行を-----return num + getSum(num)-----このようにした場合、プログラムの処理が一生終わらない(無限ループ)になってしまいます。例えばgetSum(3)として呼び出した場合、・呼び出した関数内でgetSum(3)が呼び出される・さらに呼び出した関数内で呼び出した関数内でgetSum(3)が呼び出される...これが無限に繰り返されてしまいプログラムが終わらなくなってしまいます。
問10の最上位ビットが1のときの処理resultByte = resultByte v 00000000はやる意味があるのでしょうか?この一行を実行するかしないかでresultByteの中身は変わらない気がしてます
質問ありがとうございます!おっしゃる通り意味がないです。2択の処理をわかりやすくするために残してますが、実際にプログラミングするんだったら不要なコードです。
問10で、空欄に答えを入力したうえでI=1から8まで計算した後のresultbyteの結果が10010100になってしまうのですが、この部分が正しく計算できれば、反転した値である11001010になるということでしょうか。
質問ありがとうございます!そうですね!問題文に書いてある通りinvert(00110101)として呼び出した場合であれば、最終的な値は11001010になります!
@@itgakko i=8でresultbyt←resultbyte∨00000001 を入力した段階で11001010になり、その下のresultbyte<<1をすると10010100になってしまうのですが、これは計算途中でどこかがずれてしまったということですよね、、、。
問10は概要欄で訂正させて頂いており、それをご確認頂けてないのかもしれません。概要欄の訂正内容をご確認頂けますでしょうか?同じく動画概要欄でご案内している公式LINEから無料ダウンロードできる教材の方は訂正内容も反映したものになってますので、よろしければそちらもご確認ください。
@@itgakko if (i が 8 と等しい) return resultByte 訂正して頂いていたこの部分を見逃していました!i=8になったらreturn resultByte でresultByteに戻るということで、その下のbyteとresultByteの桁をずらさなくてよいという解釈であっていますでしょうか。
@@oo-m8p あってます!
問13で、I=3,j=3の時、nowstateとstatetrainsitionが等しく、その次に、input[3]=0とtransition[J][3]=1で等しくなっていないと思うのですが、どうしてこのような回答になるのでしょうか?01までは解けたのですが、0110になる理由がわかりません。よろしくお願いいたします。
コメントありがとうございます。問13のi=3のケースについて、使用されている変数について整理すると、 ・input[i] = 0 ・nowState = 2となります。これとstateTransitionの値で一致する箇所を見ていくと、j=4の場合、2つのif文の判定結果が真(true)となります。 ・1つ目のif文:if (nowState と stateTransition[j][1] が等しい) → nowState と stateTransition[j][1] ともに 2 ・2つ目のif文:if (input[i] と stateTransition[j][3] が等しい) → input[i] と stateTransition[j][3] ともに 0j=4の場合、stateTransition[j][4] = 1 なので、1が出力され、次の i=4 の繰り返しに続きます。なので記載されている通り、i=3, j=3 のケースは input[3]=0とtransition[J][3]=1 で等しくなっていません。j=4 が等しいので、ご確認をお願いします。ご不明点あればご連絡いただければと思います。
@@itgakko 解説ありがとございます。私も同じところで躓いておりまして、jは1ずつ増えていくというif文の条件は無視してもよいということでしょうか?私も01までは理解できたのですが、一致する場所を見つけるという考え方がいまいちピンと来ておりません。
@@user-hg5yx2lg9s 頂いた質問、お手数なのですが、「jは1ずつ増えていくというif文の条件」こちらがプログラム上のどこを指されているか教えて頂けますでしょうか。
申し訳ございません。if文ではなくfor文でした。for(jを1からstateTransitionの要素数まで1ずつ増やす)という部分です。1ずつではなく一気に2数値分増やしている(j→3ではなくj→4という解釈になっている)ところがわかりませんでした。
@@user-hg5yx2lg9s ありがとうございます。おそらく、問題で説明している箇所について、if文の条件が真になってない箇所は飛ばしているため誤解されているのだと思います。実際プログラムは以下のように動きます。 ・i=1の時、j=1〜6の6回繰り返す、その結果合致したのがj=1の時 ・i=2の時、j=1〜6の6回繰り返す、その結果合致したのがj=2の時 ・i=3の時、j=1〜6の6回繰り返す、その結果合致したのがj=4の時 ・i=4の時、j=1〜6の6回繰り返す、その結果合致したのがj=6の時このようにiの値1〜4それぞれにケースについて、j=1〜6の6回ずつfor文内の処理が実行されています。解説の中では、その中でif文に合致するケースのみをかいつまんで説明しているので、「jが1つずつ増えていない」ように解釈されたのだと思います。わかりづらく申し訳ありません。
自分用 続き41:16
17:38 問5ってdata[3]が出力されるから、出力されるのは6じゃね?配列はdata[0]からだから3+1番目の6になると思うんやけどさらに、if内の「data[i]の値を出力する」だとi=4の時data[4]は存在しないからエラーになると思うんだけど、私の勘違いかなこの問題の言語たぶんCだよね?
質問ありがとうございます。この問題は基本情報技術者試験の科目Bアルゴリズムで用いられる擬似言語と同じで配列の要素番号は1から始まることを前提にしております。動画内での説明が不足しておりすみません。
@@itgakko なるほど!!むしろそれ知らないと本番絶対間違えてたな・・・教えてくれてサンクス!
基本情報技術者試験頑張ってください!
動画で投影している教材はさいとうの公式LINEに登録頂くと無料でダウンロードできます!無料で教材が欲しい方は概要欄からLINEに登録してみて下さいね!今回の動画の教材名:【初心者向け】基本情報技術者試験 科目B|アルゴリズムをゼロから理解する
問13難しすぎて笑ってしまうw基本情報ってこんなに難しいのか・・・。
あああ問13だけ難しくてわからねえええ受かる気がしねぇ
一見複雑な問題でも1行1行トレースすることでやることはシンプルになります。是非あきらめずにトライしてみてください!不明な箇所を教えて頂ければコメントで解説しますのでお知らせください。
⚠学習前にご確認ください!
・誤りがあった場合に概要欄で訂正している場合があります。動画におかしな点があった場合、まずは概要欄のご確認をお願いします。
・動画で投影している教材は、本動画の概要欄からさいとうの公式LINEに登録頂くと無料でダウンロードできます!
※概要欄で訂正している内容が反映されたものをダウンロードできます。
対策本1冊は購入して科目Aはある程度勉強したのですが、1週間ほど前に科目Bに取り掛かってみて愕然。
科目Aの勉強だけではまったくと言っていいほど対応できませんでした。
この動画及びチャンネルの他動画を見て問題文の「日本語になおす」コツがつかめ、なんとか合格することができました。
ありがとうございました!
合格おめでとうございます!
具体例を付け加えてるから、わかりやすいです。
抽象的なプログラムなので、具体例があると一気に理解しやすくなります!
やっぱり初心者にとって具体例は一番大事だと思いました。
ありがとうございます、基本情報技術者の動画が少ない中、この動画に助かってます。
ありがとうございます!
勉強頑張ってくださいね!
プログラミング初心者なこともあり、科目Bは
『教科書に書いてあることが、何をいっているのかさっぱり分からない…(特にオブジェクト指向)』
状態に陥っていましたが、こちらの動画シリーズのおかげで、科目B克服&合格できました!
本当にありがとうございます!
合格おめでとうございます!
素晴らしいですね!
分かりやすい解説&オリジナル問題で助かりました!基本情報技術者まであと1ヶ月で、科目Bでかなり詰まっていましたので、いい演習になりました!
コメントありがとうございます!
勉強頑張って下さい!
問13のみ、訂正前の状態で解いたので「010」と続いて答えが合致しないと思いましたが、コメント欄や概要欄を見て再度解き直して「0110」になることが確認できました。
訂正後にはなりますが、全問正解することができました。
解説も分かりやすくて助かっています。
コメントありがとうございます!
おかげさまで本日合格できました。未経験から勉強し一度は落ちましたが諦めずに続けてよかったです。この動画をきっかけに理解が深まりました!
合格おめでとうございます!!
問13にて、i=2、j=3の時についてですが、この時nowstateは2かと思います。
この場合、statetransition[3][1]は2なので、一つ目のif文はtrue
input[2]は1、statetransition[3][3]は1なので、二つ目のif文もtrueになり、
statetransition[3][4]の値0を出力するのかと思ったのですが違いますでしょうか。
ご質問ありがとうございます。
ご指摘の通り、j=1の時に値を変えた結果、
i=2、j=3の時もif文が通ってしまいますね。
if文内のブロックに、for文内のブロックを抜ける旨の記載が必要ですので、
概要欄にも訂正の旨記載させて頂きます。
修正後のプログラムですが以下のようになるイメージです。
----------
if (input[i] と stateTransition[j][3] が等しい)
stateTransition[j][4] の値を出力する
nowState ← stateTransition[j][2]
繰り返しを抜ける
endif
----------
以上、よろしくお願いいたします。
問13は自分で何回かトレースをしてみました。
解説を聞いてみて、半年前ならできなかったですが今は出来るように自信が出来ました。ありがとうございます。
コメントありがとうございます!
トレース、大事ですね!
模擬問題全部解いちゃって困ってたけどオリジナル問題とかマジで助かります!!
本当に感謝しかないです!
コメントありがとうございます!
これからもオリジナル問題は追加予定なのでぜひ楽しみにしていてください!
参考書より分かりやすくて驚いてます笑
科目Bで苦戦していましたが、やっと理解できました。
ありがとうございます。
よかったです!
勉強頑張ってください!
とても分かりやすくて助かっています。
嬉しいコメントありがとうございます!
このような動画が欲しかった!ありがとうございます!
ありがとうございます!!
自分の頭ではついていけない所がありました😂 ポインターなどで説明している所を示してもらえると更に楽に理解ができる気がします。
大変分かりやすく解説された動画でしたのでまた違う動画も拝見したいと思います😊
コメントありがとうございます!
改善していきますね!
基礎アルゴリズム講義コースありがとうございました。!!また応用問題にも進んでいきます!😄
コメントありがとうございます!
頑張ってください!
本日試験でした。サイトウさんのおかげで手も足も出なかった、アルゴリズム擬似言語の問題を理解することができ、無事合格できました。それもこれも、この動画のおかげです。初心者向けのこの動画がレベルアップにつながりました。本当に感謝しています^_^
合格おめでとうございます!!
アルゴリズムが難しく理解に苦しみました。何回も動画見返してみますが何かコツがありましたら教えてほしいです。
質問ありがとうございます。
具体的にはどのあたりで苦しみましたか?
どんな苦しみ方をしたかによって例えば以下のように対応は異なります。
・時間はかかるがなんとか理解できる
→ たくさん問題を解いてアルゴリズムの問題に慣れる
・とにかく全くわからない
→ アルゴリズムで利用される記号などを覚えるところから
始める必要があるかもしれません。
アルゴリズムの問題が解けるようになるには、
コツというよりは1つ1つ理解を積み上げていく他ありません。
自分の現状に合った学習を積み重ねていけるといいですね。
この動画でアルゴリズムの基礎を理解でき、その後の過去問や模擬問題演習をスムーズに進めることができました。初回で科目B730点で合格出来ました。当日は、アルゴリズムの基本問題は自信をもって回答でき、応用問題は2-3問ほど分からなかったですが、アルゴリズムの基本問題とセキュリティを落とさなかったので、合格できたと思います。ありがとうございます!
まずは合格おめでとうございます!
余裕を持ったスコアでの合格素晴らしいですね!
Thanksありがとうございます!
より良いTH-camチャンネル運営に使わせていただきます。
@@itgakko お返事ありがとうございます!受験を考えている友人にも動画を紹介いたします。
@user-ko6ze2dx8h ありがとうございます!
こんにちは!一昨日B試験落ちましたので心を改めてアルゴリズムを勉強しようと思いました。検索で偶然この動画をみつけましたが、説明の前に自分で考える時間があるのが非常に良いと思います。今日は00:35:40までやりました。明日また早く勉強したと思いました。良い学習動画ありがとうございます。
こんにちは!
勉強頑張ってください!
今日初めて基本情報技術者試験を受けてAB共にめっちゃギリギリですがでなんとか合格点に達せました!科目bの勉強はこの動画にお世話になりました!ありがとうございます!
コメントありがとうございます!試験お疲れ様でした!
今日試験科目B受験しました!(科目Aは免除)結果は615点だったのでなんとか合格できました!さいとうさんには解説動画や質問対応など、本当にお世話になりました!ありがとうございました!
合格おめでとうございます!
とても分かりやすく参考にさせていただいてます。
明日試験なので合格できるよう頑張ってきます!
コメントありがとうございます!
試験頑張って下さい!
@@itgakko 合格できました。配信動画は全て使わせてもらいました(*'ω'*)有益な動画ありがとうございました!
合格おめでとうございます!!
前回科目Bの問題集をなんとなくやって420点と惨敗したので、今回はさいとうさんが作った科目Bに向けての再生リストの動画を完全理解➕なんとなくやってた問題集の内容にさいとうさんの動画の知識を上乗せして理解する感じで勉強して本日科目Bを受けてきました。
そして無事二回目で受かりました!!!
本当に救われましたありがとうございました!!!!!!
合格おめでとうございます!!
分かりやすい動画ありがとうござます。
最近科目Bの勉強を始めたのですが、テキストは買うべきなのでしょうか。もし必要であればおすすめを教えて頂けたら嬉しいです。
また、こちらのチャンネルで科目B対策をする際に動画の見る順番などがありましたら、教えて頂きたいです。
質問ありがとうございます!
それぞれ回答しますね
【テキストは買うべきか】
私の動画が合っている(解説を聞いて理解が進む)のであれば、テキストは不要かなと思います。
ただアルゴリズムについては、基本的な考え方が理解できた後は実力アップのために問題演習が重要です。
私の動画でも60問以上ありますが、それでも足りない場合は以下の問題集がオススメです(70問以上収録されています)。
---
基本情報技術者[科目B]アルゴリズムとプログラミング トレーニング問題集(第2版)
---
【本チャンネルの視聴順】
コメントいただいたこの動画は最初に見ていただくと良いですが、それ以外は順不同です!
基本的には『別動画で解説してるからこの動画では解説を省略します』みたいな説明はしてないので、お好きな順番で見ていただければと思います!
@itgakko
ご丁寧に回答して頂きましてありがとうございます。
科目Bはまずこちらのチャンネル動画で学習を進めて、頑張ってみます!
@みねみさ 勉強頑張ってください!
何度も質問すみません。
問10から初見では全く歯が立たないので、答えと解説を見て何とか理解しようとしているのですが、よくわからない部分もありますが、この状態でテキストを買わずにこちらのチャンネルでこのまま学習を進めても問題ないでしょうか。
時間を空けて再度問題文と解説を読むと理解できる部分もある状態です。
また、初見で1問に費やしてもいい時間と歯が立たなかったら回答と解説を見てもいいのでしょうか。
長文になってしまいすみません。
科目Bの動画を色々探しましたがこの動画が一番わかりやすかったです
特にアウトプット→インプットなので考えながらインプットできる所が頭にスッと入ってきました
明日、早速受けてきます
正直科目Bの勉強を詰め込みでやったので心配しか無いですが頑張ります!
ありがとうございます!
試験頑張ってください!
受けて来ました!A 615 B540で撃沈です💦 特に関数と再帰が苦手でした💦基本中の基本なのでまた動画を見ながら3週間勉強して挑みます
とても悔しい!!!!!
受験お疲れ様でした!
3週間後ですか、また頑張ってください!
6月と7月(こっちは落ちたら)に受験します
科目B解説やってる動画はほとんどないので重宝しています
ありがとうございます!
勉強頑張ってください!
非IT社会人ですが、自己研鑽のためITの勉強を始めました。
ITパスポート、情報セキュリティマネジメントと何とか合格できました。
基本情報技術者試験に挑戦すべく、B試験の勉強から始めました。
参考書も応用になると分かりません。
この動画でも丁寧に解説して頂いていますが、後半から全くついていけません。
通信口座などであれば理解できるのでしょうか?
それとも潔く諦めるべきでしょうか?
ITパスポート・情報セキュリティマネジメントいいですね!
通信講座なども良いです!
私からは自学の観点で1点アドバイスさせていただきます!
「全くわからない」という状態は、突き詰めるとほとんどの場合ありません。
必ずと言っていいほど細かい問題に分解できます!
今自分がどこまで分かってて、どこから分からなくなってしまっているのか、
コメントを拝見したところそこを整理するところから始めるのが良いと思いました!
基本情報技術者試験合格しました!
さいとうさんの動画がすごく参考になり、安心して受験できました♪
ありがとうございます☺️
合格おめでとうございます!
わざわざご報告ありがとうございます!
@@itgakko
現在、応用情報技術者試験の勉強をしているのですが、どのような勉強法が良いのか、もし良ければ応用情報技術者試験の動画もぜひお願いしたいです。
応用情報いいですね!動画化検討しますね!
@@itgakko ありがとうございます!
動画お待ちしてます☺️
問10について質問させてください
else文はbyte Λ 10000000が「10000000」という結果以外のときに実行する式だと思うのですが、
resultByte ← resultByte ∨ (resultByte ∨ 00000001 )はどういうことを表しているのでしょうか?
resultByte ← resultByte ∨ 00000001との違いがわからないので、教えてほしいです。
コメントありがとうございます。
すみません、質問いただいた通り違いはないです。
意図としては問題文を resultByte ←【a】というように、
右辺丸ごと空欄にしようとしていたのですが誤ってました。
混乱させてしまってすみません。
この人マジで助かる❤ありがとうございます🎉
コメントありがとうございます!
いつも分かりやすく、大変助かっております!
7月に受けるのですが、科目Aの基本理論以外も出していただけると大変助かります、、!
コメントありがとうございます!
7月受験、頑張ってください!
ただ申し訳ないのですが、
科目Aの対策動画は7月の受験には間に合わないと思います。
概要欄に訂正があるの知らなくて問13何回やっても答えにたどり着かなくてめっちゃ時間無駄にした笑
自分と同じ過ちを犯す人が出ないようにいつか訂正済み動画出してくれるとうれしい
もうすぐ試験だから詰め込むぞ~
コメントありがとうございます!
わかりやすい解説ありがとうございます!
問5の配列基本問題ですが、data[3]はプログラミング言語的には6なのではと思いました!
配布されているサンプル問題では問題文の前提条件として、
配列は1から始まるの記載があるのでそちらでしたら答えは5なのかなとおもいます
すみません。
IPAが公開しているサンプル問題に合わせて配列のインデックスは1から始まるようにしています。
前提として書いておくべきでしたね。
最近は多くのプログラミング言語が0始まりなので基本情報技術者試験の擬似言語も0からにすればよいのに、と個人的には思っています!
COBOLとかは1始まりだった気がするんですけどさすがに今時じゃないので...
素晴らしい動画をありがとうございます。
問13に関しては概要欄の修正を見ないと一生回答の0110(ア)とならず010・(イ)?となるので注意が必要ですね。
私はこれで数十分時間がかかってしまいました笑
コメントありがとうございます!
素晴らしい動画ありがとうございます。とても分かりやすいです。誤りもありますが(問題作りは大変なので致し方ないと思います)、オリジナル問題は非常にありがたいので今後もあたらしい問題作りを期待します。8/14に受検して参ります。頑張ります!
コメントありがとうございます!
試験頑張ってください!
54:06 右の4,5行目のif文について。
「minNumがソート前配列の要素より小さい場合」ってなってますが、「ソート前配列の要素がminNumより小さい場合」minNumをソート前配列で上書きするのではないでしょうか。
日本語がややこしくてすみません
大変失礼しました。
コメント頂いた内容が正しいです。
お手数ですがお手数ですがご理解頂いている内容で
読み進めていただけますでしょうか。
動画ありがとうございます!
とても、参考になりました!
ありがとうございます!⭐👍️
コメントありがとうございます!
参考書だけじゃ足りなくて試験1日前にこの動画で勉強したらギリギリ合格できました!ありがとうございます( ; ; )
合格おめでとうございます!!
外国人の私でもわかりやすかったです、ありがとうございました!
嬉しいコメントありがとうございます!
基本情報技術者試験の勉強頑張って下さい!
さいとうさん、こんばんは。
今日基本情報技術者試験を受験しました。
午後試験がさいとうさんの動画のおかげで、点数が合格線を軽く超えました!
動画がわかりやすいです。
試験時、半分ぐらいの内容を間に合わなくても、安全線にたどりました。超luckyでした。😂
ありがとうございました!
超超超超超超感謝します!!!!
合格おめでとうございます!
わざわざ報告いただいて嬉しいです!ありがとうございます!
問10について
解説で①の作業をbyte=01010101∧1000000 と置いていますが、
この01010101はどこから出てきた数字でしょうか
質問ありがとうございます!
01010101は一例です。
これオリジナル問題集ですか?
このボリュームの問題よく作られましたね...すごい。4月5日に改定後の試験を受ける予定なので、サンプル問題が少ない中非常に助かります!
コメントありがとうございます!
オリジナルの問題集ですね、試験頑張ってください!
いつ動画で勉強させていただき、ありがとうございます。
今後、初心者むけオブジェクトの動画を作成する予定がありますか?
質問ありがとうございます!
頂いたのは「オブジェクト指向」の講座のことでしょうか?
構想としてはありますが、現時点で具体的な予定はありません。
問13人関して質問です。
他の方と重複しますが。
i=2, j=3の時、全てのif文通りませんか?
はい、またはいいえでのご回答とその理由もくださると嬉しいです。
お願い致します。
質問ありがとうございます。
ご記載いただいた通り、i=2,j=3の時、全てのif文が通ります。
概要欄に記載している以下の内容の通り、
プログラムに以下内容を追加した状態が正しいので、
お手数ですが読み替えて進めていただければと思います。
ーーーーー
■対象:問13.繰り返し文(応用)
・プログラムに以下1行が不足しておりました。
お手数ですが以下の行を追加したものとして動画の視聴をお願いします。
動画内で喋っている解説自体は合っております。
----------
if (nowState と stateTransition[j][1] が等しい)
if (input[i] と stateTransition[j][3] が等しい)
stateTransition[j][4] の値を出力する
nowState ← stateTransition[j][2]
繰り返しを抜ける ←←← この行が不足しておりました
endif
endif
----------
ーーーーー
10月に基本情報技術者試験を受けます。
大変参考になる動画ありがとうございます!
コメントありがとうございます!
勉強頑張ってください!
お疲れ様です。問13について質問があります。
for(jを1からstatetransitionの要素数まで1ずつ増やす)
IF(nowstateとstateTransition(j)(1)が等しい
とあった際に、対象となる要素は、(j=1)(1)の値である1だけではなく(J=2)(1)の要素まで見るのかがわかりませんでした。
もしよろしければ理由を教えていただけないでしょうか?
質問ありがとうございます!
まず、質問内容について確認させて下さい。
-----
1. for ( i を 1 から 3 まで 1ずつ増やす )
2. for ( j を 1 から 2 まで 1ずつ増やす)
3. i + j の値を出力する
4. endfor
5. endfor
-----
頂いた内容は、上記のようにfor文が二重構造になっていた場合、
その中の処理順は以下のようになる理由ということでしょうか?
・i=1の時/j=1の時:1+1 = 2 を出力
・i=1の時/j=2の時:1+2 = 3 を出力
・i=2の時/j=1の時:2+1 = 3 を出力
・i=2の時/j=2の時:2+2 = 4 を出力
・i=3の時/j=1の時:3+1 = 4 を出力
・i=3の時/j=2の時:3+2 = 5 を出力
そうであれば以下にその理由を回答します。
1行目にfor文があり、その中に2行目のfor文が存在します。
まず1行目のfor文が先に実行されます。
1行目のfor文はi=1〜3の3回の繰り返し処理です。
その繰り返し1、2、3回目それぞれで2行目のfor文が実行されます。
2行目のfor文はj=1〜2の2回の繰り返し処理です。
その繰り返し1、2回目それぞれで3行目の「i + j の値を出力する」が実行されます。
これをまとめると以下のイメージです。
・1行目のfor文の1回目(i=1)が実行される。
└2行目のfor文の1回目(j=1)が実行される。
└「i + j の値を出力する」が実行される。
└2行目のfor文の2回目(j=2)が実行される。
└「i + j の値を出力する」が実行される。
・1行目のfor文の3回目(i=2)が実行される。
└2行目のfor文の1回目(j=1)が実行される。
└「i + j の値を出力する」が実行される。
└2行目のfor文の2回目(j=2)が実行される。
└「i + j の値を出力する」が実行される。
・1行目のfor文の3回目(i=3)が実行される。
└2行目のfor文の1回目(j=1)が実行される。
└「i + j の値を出力する」が実行される。
└2行目のfor文の2回目(j=2)が実行される。
└「i + j の値を出力する」が実行される。
for文が二重構造になっている場合は上記のような処理順になります。
問い合わせ内容が異なる場合、
もう少し詳細に教えていただけると幸いです。
43:14で、byteの01010101と10000000の論理積を見ていると思いますがbyteが01010101であるのはなぜですか?単純に例を挙げただけです?すみません、混乱しています🥲
そうですね!
あくまで1例ということです!
お恥ずかしい質問なのですが、問10がほぼ理解できない場合なにを勉強したらよいですか?失礼な質問でしたらすみません。
あと、
for (i を 1 から 8 まで 1 ずつ増やす)
if ((byte ∧ 10000000) が 10000000 である)
resultByte ← resultByte ∨ 00000000
else
resultByte ← 【a】
endif
if (i が 8 と等しい)
return resultByte
endif
byte ← byte << 1
resultByte ← resultByte << 1
end for
2行目の最初のbyteには、何の値が入っていますでしょうか?汗
度々、すみません。最終的にreturn resultByteの値は10000000になるのでしょうか?
質問ありがとうございます!
それぞれ回答しますね!
> 問10がほぼ理解できない場合なにを勉強したらよいですか?失礼な質問でしたらすみません。
→問10のようなビット値の操作の問題については他の問題と少し異なり、
例外的にまずは科目Aの勉強をするのがおすすめです。
ビット値の操作は前提として 2進数 に関する理解が求められる場合が多いです。
科目Aの「基礎理論」という分野でまずは 2進数 を学習するのがおすすめです。
その後に、科目Bアルゴリズムの問題を解くのが良いです。
> 2行目の最初のbyteには、何の値が入っていますでしょうか?
→ご質問の内容は、関数invertを呼び出す際の引数の値によって変わります。
問題文に記載してある例のように、invert(00110101)と呼び出した場合であれば、
関数上の 変数byte には 00110101 という値が入ります。
> 最終的にreturn resultByteの値は10000000になるのでしょうか?
→これも関数invertを呼び出す際の引数の値によって変わります。
問題文に記載してある例のように、invert(00110101)と呼び出した場合であれば、
最終的に resultByte の値は 00110101 をビット反転した 11001010 になります。
@@itgakko ご返信ありがとうございます!
一つ一つ実行していこうと思います。
ご丁寧に解答いただき感謝いたします!
勉強頑張ってください!
@@itgakko ありがとうざいます!
1:10:29 問14でreturnが4回出てきますけど、4つのreturnを足したものではなくて最後に出てきたreturnが答えなんですね
コメントありがとうございます!そうですね!
関数getSum(3) と呼び出した場合、getSum(3) の戻り値としては 6 が返されます。
途中で呼び出されることになる getSum(2)、getSum(1)、getSum(0) についてはそれぞれ
あくまでその呼び出し元である getSum(3)、getSum(2)、getSum(1) の中で戻り値が
使われているだけなので、return文 が複数回出てきているからといって、
その結果を足したりはしないです。
解説動画を作成してくださり、ありがとうございます。
問11 について質問なのですが、
プログラムから最小値を求めている動きが想像できません…。
2行目で minNum←compareDate[1] となっておりますが、
6行目でも minNum←compareDate[i] としていることから、
i=2 の場合、最小値ではない3を minNum へ上書きしてしまうのではないのでしょうか?
考え直し方やアドバイスをご教示いただけますと幸いです。
質問ありがとうございます。回答しますね。
おそらくご質問頂いているであろう、
while文の繰り返し1回目の際のプログラムの動きについて以下に書きます。
プログラムに対する補足を「//斜体 」で書きますね。
----------
minNum ← compareData[1] _//compareData={4,3,1,5}なので、minNumには4が格納される_
delTarget ← 1
for ( i を 1から compareDataの要素数まで 1ずつ増やす) _//4回の繰り返し処理_
if (compareData[i] が minNum より小さい) _//このif文が真となるのはi=2,i=3のケースのため、for文が終了した時、minNum=1,delTarget=3となる_
minNum ← compareData[i]
delTarget ← i
endif
endfor
sortedData ← addElement(sortedData, minNum) _//sortedDataに1を追加_
compareData ← delElement(compareData,delTarget) _//compareDataから要素の3番目を削除_
----------
記載いただいている通り、
i=2の時、最小値ではない 3 で minNum が上書きされますが、
その後i=3の時、最小値である 1 で minNum が上書きされるので、
for文による繰り返し処理が全て完了した時には、
最小値である 1 が minNum に格納されるようになっています。
上記のような処理をしていることから、
動画内ではこの部分を「ソート前配列から最小値を探す」
というように説明させて頂いております。
以上、ご不明点あればご連絡頂ければと思います。
@@itgakko for文による繰り返しがあることで3ではなく、1が最終的に上書きされるのですね!
全く同じところで苦戦していたのでとてもスッキリしました!
@user-gf7hq6qo6d よかったです!!
動画ありがとうございます。
凄くわかりやすくて助かります。
質問ですが、問13で、for文でjを要素数まで1ずつ増やす処理の目的がわかりません。
Inputの要素数の繰り返し処理だけでは、駄目なのでしょうか?
宜しくお願い致します。
質問ありがとうございます。
問13のプログラムの 2つ目の for文 がなぜ必要かということですが、
結論から言うと必要で、1つ目の for文(配列inputの要素数分の繰り返し処理)だけでは実現が難しいです。
2つ目の for文で行っている処理は以下の通りです。
----------
① if (nowState と stateTransition[j][1] が等しい)
② if (input[i] と stateTransition[j][3] が等しい)
③ stateTransition[j][4] の値を出力する
④ nowState ← stateTransition[j][2]
endif
endif
----------
①〜④の行でやっている内容を日本語に直すとそれぞれ以下の通りになります。
① 現在いる状態と、状態遷移図を表す配列stateTransitionのうち、
「矢印の始点」と一致するものを探す。
② 入力(input[i])と、状態遷移図を表す配列stateTransitionのうち、
「入力」と一致するものを探す。
③ ①②が両方一致する配列stateTransitionの要素から、
「出力」の値を出力する
④ ①②が両方一致する配列stateTransitionの要素から、
「矢印の終点」の値を「現在いる状態」に設定する
特に①②の部分は「配列の中の全要素から合致するものを探す」
と言う処理なので、繰り返し処理を用いて配列の値を1つ1つ参照し、
if文で値が合致するかをチェックする、と言う処理が必要になります。
一応 整数型配列の配列stateTransition の値が常に同じ前提なら、
プログラムの 2つ目の for文 を使用しなくても同様の処理を
実現できることはできますが、行数が無駄に増えてしまいますし、
そうだったとしても for文 があった方がベターです。
以上となります。ご不明点あればご連絡頂ければと思います。
科目Bのセキュリティもこのような動画が見たいです!!!
コメントありがとうございます!
セキュリティですね、動画化検討してみます。
とてもためになります!初学者なのですが、問9について質問があります。
average←sum÷dataなのでaverageが実数型でないといけないのは分かるのですが、
getAverageも実数型にならなければいけないのでしょうか?
質問ありがとうございます。
27:15 から説明している関数の定義方法をご確認いただけると分かりやすいと思います。
呼び出し元に返す値の型も実数型にしておかないと、
せっかく関数内で平均値を計算しても
呼び出し元に間違った値が返されてしまう可能性があります。
関数から呼び出し元のプログラムへ返される値が
実数型なのであれば、関数名の左の型定義部分も
実数型にしておく必要があります。
以上、ご不明点あればご連絡頂ければと思います。
質問です、問13でi=2,j=2の時に出力1までは理解できてnowstateが2になるのはわかりました。ただそのあとにi=2.j=3、4,5,6は繰り返し処理しないのはなぜですか?i=1~4,j=1~6を実行しなければと思うのですが、各iで出力が一回あればjの残りをすっ飛ばして次のiに行くのはなぜですか?
質問ありがとうございます!
問13は本動画の概要欄で訂正させていただいていますので、お手数ですが訂正内容をご確認ください。
以下、概要欄に記載してある内容を転記しておきます。
-----
■対象:問13.繰り返し文(応用)
・プログラムに以下1行が不足しておりました。
お手数ですが以下の行を追加したものとして動画の視聴をお願いします。
動画内で喋っている解説自体は合っております。
----------
if (nowState と stateTransition[j][1] が等しい)
if (input[i] と stateTransition[j][3] が等しい)
stateTransition[j][4] の値を出力する
nowState ← stateTransition[j][2]
繰り返しを抜ける ←←← この行が不足しておりました
endif
endif
----------
@@itgakko ご丁寧にありがとうございます。私が見落としていただけでした、失礼しました。無事問13解けました!
@@吉原瑞樹 よかったです!勉強頑張ってください!
大変分かりやすい動画ありがとうございます。
お手数をおかけしますが、2点ご質問させてください。
<質問①>
問11の設問のプログラム2行目に
「整数型:i,delTarget minNum」
とありますが、これは、
「整数型:i,delTerget,minNum」(delTargetとminNumの間に「,」を追加)
ではないのでしょうか。
最初にプログラムを見た時は、「delTerget minNum」という1つの変数かと思いましたが、
以下のブログラム中でもdelTergetとminNumはそれぞれ独立して使用されて混乱しました。
それとも、そもそも問題文の通り「整数型:i,delTarget minNum」記載されていても、それぞれ独立した変数として読み取るべきなのでしょうか。
<質問②>
問13の問題文2行目
「帯域変数」は「大域変数」が正しいということでよろしいのでしょうか。
お手数ですが、ご回答の程、何卒よろしくお願いします。
質問ありがとうございます!
それぞれ回答しますね。
【質問①の回答】
→すみません、誤値です。
正しくは「整数型:i,delTerget,minNum」になります。
【質問②の回答】
→すみません、誤値です。
正しくは「大域変数」になります。
以上、お手数おかけしますが
読み替えて進めていただけますでしょうか。
@@itgakko
早々にご回答いただき、誠にありがとうございました。
科目Bについては複数の書籍を読んでも納得できずに読み進めれませんでしたが、
さいとう先生の動画で何とか少しずつ理解できるようになってきました。
動画作成、ありがとうございます。合格できるように頑張ります!
勉強頑張って下さい!
大変興味深いかつ良い問題ありがとうございます。
問10について質問させてください。
トレースがうまくできなくて。。。
i=7終了時点で
byte 10000000
resultbyte 11001010
となりi=8終了時点で
byte 00000000
resultbyte 10010100
となってしまいました。
どこがおかしいかご教授頂けませんか。
よろしくお願いします。
ちなみにi=1終了時点では
byte 01101010
resultbyte 00000010となっています。
質問ありがとうございます。
大変失礼いたしました。トレース頂いた内容はあっており、
プログラムの記載に不備がありました。
正しいプログラムでは以下のように
resultByte を左シフトする前に returnする必要があります。
お手数ですが読み替えてトレース頂ければと思います。
◼︎修正後
[プログラム]
○8ビット型: invert(8ビット型: byte)
8ビット型: resultByte ← 00000000
整数型: i
for (i を 1 から 8 まで 1 ずつ増やす)
if ((byte ∧ 10000000) が 10000000 である)
resultByte ← resultByte ∨ 00000000
else
resultByte ← 【a】
endif
if (i が 8 と等しい)
return resultByte
endif
byte ← byte
@@itgakko
丁寧にご回答いただきありがとうございました。
とても納得できました。
今後も動画で学習させていただきます。
今後ともよろしくお願い致します。
大変失礼しました。
勉強頑張ってください!
先生!問題の解答に関する質問とは違いますが質問があります!
問11なんですが、このプログラムを最後までトレースしてみましたが結果が出るまでのプロセスに自信がありません。
上から1行ずつトレースしていって、minNumが4→3→1と変わっていきcompareData[4]=5になったとき、minNum=1でif文が不成立でそのままfor文終了で下の関数(add/delElement)に入りますよね?(すでにちょっと自信ない😒)
Elementの関数を回して、1→3→4と数字をsortedに送っていき、compareから消して行きます。
まだcompare内に5(要素番号1)が1つ残ってるのでwhile文の『compareDataの要素数が0より多い』が真なので、また1行目から当て嵌めていくとminNum=5、delTarget=1。for文はすでにi=4まで回してるで飛ばして、下のadd/delElementの関数へ。そこで最後の5がsortedの末尾に行って、compareからラスト1つ1番目の5が削除される。
こんな流れになると思うんですが、これ…ちゃんとトレースできてますでしょうか?😅
なーんか、結果だけたまたま合ってるだけでプロセスが違うんじゃないかと自信がないんです💦
質問ありがとうございます!1つ1つ回答しますね。
> 上から1行ずつトレースしていって、minNumが4→3→1と変わっていきcompareData[4]=5になったとき、minNum=1でif文が不成立でそのままfor文終了で下の関数(add/delElement)に入りますよね?(すでにちょっと自信ない😒)
→ これは合ってます。
> Elementの関数を回して、1→3→4と数字をsortedに送っていき、compareから消して行きます。
→ おそらく合っていると思うのですが「Elementの関数を回して」はどういう意味でしょうか?
合っているかどうかはここの意味次第です。
> まだcompare内に5(要素番号1)が1つ残ってるのでwhile文の『compareDataの要素数が0より多い』が真なので、また1行目から当て嵌めていくとminNum=5、delTarget=1。for文はすでにi=4まで回してるで飛ばして、下のadd/delElementの関数へ。そこで最後の5がsortedの末尾に行って、compareからラスト1つ1番目の5が削除される。
→ 一部違います。関数の処理が進んで compareDate = {5} になった時の while文内の処理を順に説明しますね。
-----
minNum ← compareData[1] _// minNumに5が格納される_
delTarget ← 1 _// delTargetに1が格納される_
for ( i を 1から compareDataの要素数まで 1ずつ増やす) _// compareDataの要素数=1なので、中の処理を1回だけ行う_
if (compareData[i] が minNum より小さい) _// compareDate=5,minNum=5なのでif文の中は実行されない_
minNum ← compareData[i]
delTarget ← i
endif
endfor
sortedData ← addElement(sortedData, minNum) _// sortedDataに5を追加し、sortedData={1,3,4,5}になる。_
compareData ← delElement(compareData,delTarget) _// compareDataから5を削除し、compareData={}になる_
_// この時点でcompareDataの要素数が0になるため、while文による繰り返し処理を終了する。_
-----
以上、ご不明点ございましたらご連絡いただければと思います。
うわぁー😲ありがとうございます✨✨✨
『関数を回す』という謎オリジナルな言い回しで混乱させてしまいすいませんでした。
i=4のときcompareData4番(=5)とdelTarget=1でfor文が偽で下の段の関数に行きますよね😊
そのときi=1〜3までのminNumとdelTargetの数値を、i=3の結果から遡りながらadd/delElementに入れていけば良いのかなと解釈していますが、いかがでしょうか?👀
5が1つだけになってからも再度for文に行ってるんですね!
何かもうi=4まで行って手詰まりになって、プログラム最初からになったんでfor文は使えないのかと思ってました。(考えてみたらそんなルールはない😂)
結果的に条件が偽になるからあってないような感じになってますが、これを知ってるのと知らないのとでは、理解に大きな差が出ますね😮
とても丁寧な解説をして頂いて助かります✨
いつもありがとうございます😇
補足ありがとうございます!
> i=4のときcompareData4番(=5)とdelTarget=1でfor文が偽で下の段の関数に行きますよね😊
> そのときi=1〜3までのminNumとdelTargetの数値を、i=3の結果から遡りながらadd/delElementに入れていけば良いのかなと解釈していますが、いかがでしょうか?👀
→ 前半はあってますが、おそらく後半が違います。
while文の繰り返し1回目の処理の一部をトレースした結果を以下に記述しますので、
内容確認してみていただけますか?
-----
(前略)
endif
endfor
_// この時点で minNum=1, delTarget=3 です_
sortedData ← addElement(sortedData, minNum) _// sortedDataに1を追加し、sortedData={1}になる。_
compareData ← delElement(compareData,delTarget) // compareDataから1を削除し、compareData={4,3,5}になる_
_// 次の繰り返しに進む(while文の先頭から実行する)_
-----
ようやく完全に理解しましたー💡
毎回compareData =5になってはfor文が偽になり、下段の関数に移り、
そのときの最新のminNumとdelTargetを処理してはwhile文の最初に戻ってたんですね✨
ありがとうございます🥳奥が深い!!
@@Lizm0414 よかったです!
問10についてです。
resultByteの一番右の桁に設定する理由が分からなくて困っています。。。
コメントありがとうございます。
resultByte の一番右の桁に設定する理由は以下の通りです。
前提として、この問題のプログラムでの繰り返し処理では、
・1回の処理では1桁分しか処理できない
(変数byte、変数resultByte 両方ともに言える話)
・変数resultByteに 1 or 0 を設定する処理は毎回同じ桁
(このプログラムでは一番右の桁)にしかできない
このようなプログラムになっています。
上記前提があるので、問題の解説の中で、
「③ 繰り返し処理の次の回で1つ隣の桁を対象にするために、byte、resultByte をそれぞれ1つ左シフト。」
このような処理をしていると説明しています。
ここから本題です。
今回このプログラムで実現したい処理は、
「8ビットの2進数の全ビット反転」
なので、例えば2進数 10000000 が関数の引数であれば、
結果は 01111111 となりますよね。
これをプログラムのfor文の1回目の繰り返しの部分に着目すると、
① 変数byte の 一番左の桁の値が「1」
② 変数resultByte の 一番右の桁に「0」を設定
③ 変数byte、変数resultByte をそれぞれ1つ論理左シフト
となります。
上記②で 変数resultByte に設定した「0」は、
2回目〜8回目の繰り返し処理で、合計7回論理左シフトされます。
こうすることで、最終的に「0」が一番左の桁に移動します。
「resultByte の一番右の桁に設定する理由」としては、
このような処理をしているから、ということになるのですが、
回答になっていましたでしょうか?
ご不明点などあればご連絡いただければと思います。
@@itgakko私も同じところで躓いたのですが解説が上手すぎて理解できました!ありがとうございます
度々質問がございます
問5配列(基本)の箇所です
整数型iが3となっていますが何故でしょうか?
i番目なのでどこも指定されていないと思います
質問ありがとうございます!
整数型の変数i の具体的な値は問題文中の以下記載で指定されています。
-----
関数printArrayData を printArrayData(3,{3,4,5,6})として呼び出すと ...
-----
上記の記載により、関数printArrayData 内で使用する変数i, data の値はそれぞれ以下になります。
・i = 3
・data = {3,4,5,6}
以上、ご不明点ございましたらご連絡頂ければと思います。
@@itgakko ありがとうございます!
勉強頑張ってください!
いつも勉強させていただいております。問13のfor文についてですが
この場合i=1;j=1の次はi=2;j=2。
またその次はi=3;j=3と順に同じ数だけ増えていくのでしょうか?
質問ありがとうございます!
問13のfor文の実行順に関するご質問とお見受けします。
for文の実行順は以下の通りになります。
・i = 1, j = 1
・i = 1, j = 2
・i = 1, j = 3
・i = 1, j = 4
・i = 1, j = 5
・i = 1, j = 6
・i = 2, j = 1
・i = 2, j = 2
・
・
・
(以下省略)
以上、ご不明点ございましたらご連絡いただければと思います。
@@itgakko 様
お返事ありがとうございます😊
for文の実行手順がよく分かりました。
ここでまた1つ疑問が生じたので質問させていただきたいです。
問13についてこちらの動画の概要欄を確認したところ
nowState ← stateTransition[j][2]
繰り返しを抜ける ←←← この行が不足しておりました
この文言に疑問が生じました。
コメント欄でみなさん指摘されていますがi=2;j=3;のときif文を通過し
「出力する」という処理が実行されるはずですが
この「繰り返しを抜ける」という処理が追加されることで
i=2;j=2で「1」を出力したあとはi=2;j=3を判定するのではなく
i=2の繰り返しを抜けi=3から判定を続けるという理解でよろしいでしょうか?
追加のご質問について、ご認識いただいている通りの動きです!
おそらく合っていると思いますが、念の為以下補足させて頂きます。
正確に言うと「繰り返しを抜ける」が実行されることで、
以下の j から始まる for文がその時点で終了します。
-----
for ( j を 1 から stateTransitionの要素数 まで 1ずつ増やす)
-----
上記for文が終了すると、その後すぐに i から始まるfor文の方もi=2の時の処理が終了するので、
プログラムの動きとしては「繰り返しを抜ける」が実行された直後 i=3から判定が続いていきます。
以上、ご不明点ございましたらご連絡いただければと思います。
問6は要素数と要素番号がごっちゃになって混乱しますね。わかりやすい解説が楽しいです。
コメントありがとうございます!
問10番の処理に関して質問です。
日本語的な質問になってしまうのですが、、
for(iを1から8まで1ずつ増やす)
上記は、8を含む表現でしょうか?
繰り返し処理を7回まで実施し、iが8になるからループから抜けるのでしょうか?(i
質問ありがとうございます。
こちらは8を含む表現です。
1,2,3,4,5,6,7,8 の合計8回の繰り返し処理になります。
ビット値の操作が難し過ぎる…説明あって、そっから2時間くらい考えてようやく理解しました。こんなのが普通にスルッと理解できる脳じゃなきゃエンジニアは厳しいのだろうか…
コメントありがとうございます!
脳がどうとかいうことはないと思います。単純にこの問題を理解できる知識レベルに到達しているかしていないかだけです。
ビット値の問題が他と比べて難しく感じるのであれば、2進数に関する理解を深めた方がいいかもしれませんね。
私の動画でも2進数関連の問題の解説をしているのでよろしければご覧ください。
✅【永久保存版】科目A過去問10回分解説|1.基礎理論編(基本情報技術者試験)
th-cam.com/video/rVAqR-jgd_Y/w-d-xo.html
【2進数関連の問題】
問4.ビット反転
問6.2進数の乗算①
問9.2進数の論理積
問12.2進数の排他的論理和
問19.2進数の特徴
問28.10進数→2進数の変換
問30.2進数の負数表現(2の補数)
問35.2進数の乗算②
問38.2進数の否定論理積
ありがとうございます。拝見します!今回引っ掛かっていたのは、左端の数字でチェックして、右端の数字を書き換えていくという流れが理解するまでに時間を要したのと、iの存在です。iが8になったら8桁全て回ったということでループ終了で良いのに、i=8はどこかに代入する為にあるんじゃないのかとか、どこかの何かの数値と比較して両者が8になったことを確認しないとループを終わっちゃダメなんじゃないかと勝手に思い込んでいたことが大問題でした(笑)
なるほど!
「for文があったら配列の要素番号に指定する」とか予想を立てることは大事ですが、プログラムは書いてあることが全てで、それ以上の処理はないので、予想に囚われすぎないようにしたらいいかもしれませんね。
@@itgakko ありがとうございます。囚われないことは超重要ですね!予測するにも色々パターンのプログラムに触れて見る事が大事だと思いました。まだ知らないプログラムが多くある中で知った気になって先回りしないように気をつけます!
頑張って下さい!
問題10.11だけわからなくて悔しい、、頑張ります。
勉強頑張ってください!
難しい問題を解いて、またこの動画に戻ってきたら11解けるようになりました!成長!
@user-qw9cd8xi4b 素晴らしいですね!
初心者向けとありましたが応用問題は結構難しかったですw状態遷移図のやつチンプンカンプンです
コメントありがとうございます!
そうですね、状態遷移図の問題は少し難しめに設定しています!
ご不明点ありましたら質問頂ければと思います。
問14最後のreturnでなぜgetsumの値だけが戻り値となるのですか?
質問ありがとうございます!
すみません、もう少し具体的に不明点を教えて頂けますでしょうか?
問14は関数getSumだけで4回呼び出されていることもあり、ご質問頂いている内容が理解できませんでした。
可能であれば、逆にどうあるべきだと思うかもあわせて教えていただけると助かります。
関数getSumの値以外に戻り値となる可能性のあるものということです。
以上、お手数ですがよろしくお願いします。
アルゴリズムこの動画のおかげで意外とすんなりできた!
ありがとうございます!
31:53 ①が関数を呼び出して②がその関数を定義している
問10もう一回
問13解けたけどもう一回解説理解する
問14 プログラム中のreturnとnumはくっついてない
問5で(3{3.4.5.6})で最初の(3の部分は何を示しているんでしょうか?整数型の値でしょうか?
またi=3というのがよくわからないのですが、dataの配列の最初の[1]が3だから3なんでしょうか?
質問ありがとうございます!
前提を説明した方が理解しやすいので、
順を追って説明しますね。
まず細かいですが、ご質問いただいている問5の該当部分は (3,{3,4,5,6}) です。
この問題のprintArrayDataのような関数に対して、
printArrayData(3,{3,4,5,6})のように()内に具体的な値をつけて記述することで、
関数内で使用する値を指定した状態で関数を実行することができます。
また、上記で指定する具体的な値は
関数の定義(以下)に記載してある順番と対応します。
-----
○文字列型: printArrayData(整数型: i, 整数型の配列: data)
-----
関数の定義上、()内の 1番目が「i」、2番目が「data」になっていますよね。
このように定義してある関数に対して、
先ほどのようにprintArrayData(3,{3,4,5,6})と指定すると、
・3 → 関数定義の「i」に対応
・{3,4,5,6} → 関数定義の「data」に対応
このようになるので、問題文の例で関数を実行した場合、
i の値は「3」になります。
【質問に対する回答まとめ】
・(3,{3,4,5,6})の「3」は整数型の値を表しています。
・i=3なのは、printArrayData(3,{3,4,5,6})のように()内の1番目の値が「3」だから
今回お話しした関数について、
詳しくは「問7.関数呼び出し①」で解説しているので
よろしければそちらをご確認ください。
00:47:08 問11.繰り返しのwhile文
配列 4,3,1,5
の場合
if文( ソート前配列の要素 が minNum より小さい場合 )
ではソート後の一番目が 3 ではないのですか?
質問ありがとうございます!
関数selectSortを引数={4,3,1,5}として呼び出すと、
最終的に関数が返す配列は記載してある通り{1,3,4,5} になります。
もう少し詳細に「ソート後の1番目が 3 になる」と思われる部分をご記載いただければ、
疑問点にお答えできると思いますので、
よろしければ具体的な処理順やトレース結果などの詳細をご記載ください。
問13について質問がございます。if(nowStateとstateTransition[j][1]が等しい)について、一つ前のfor文でjを1からnowstateの要素数まで1ずつ増やすとあるため、j=1で、if文のstateTransition[j][1]の[1]はj=1の要素である、1,1,0,0の内の始点の1だと思ってしまいました。
解説の中でif(nowStateとstateTransition[j][1]が等しい)について、水色の列から一致するものを探すという説明があり、一つ前のfor文でjを増やしており、j=1の配列のみ見るものだと思っていたので、なぜ水色の列から一致するものを探すという方法を取るのかが分からないです。
ご質問ありがとうございます!
ご質問いただいたのは投映している資料の中で
-----
・i=1 のとき(input[i] = 0)※ nowState = 1」
→ 配列stateTransition(要素数 = 6) の繰り返し処理
-----
このように説明している箇所だと思います。
ここで「if (nowState と stateTransition[j][1] が等しい)」の部分を
-----
水色の列から一致するものを探す
→ j=1 と j=2 が見つかる
-----
と表現しています。
これは画面上の資料にも映している通り、
「配列stateTransition(要素数 = 6) の繰り返し処理」
の処理のことを説明しています。
つまり、j=1の時だけの話ではなく、
j=1〜j=6までの繰り返し処理全体の説明になります。
そのため、
・j=1の時:if (nowState と stateTransition[1][1] が等しい)
・j=2の時:if (nowState と stateTransition[2][1] が等しい)
・j=3の時:if (nowState と stateTransition[3][1] が等しい)
・j=4の時:if (nowState と stateTransition[4][1] が等しい)
・j=5の時:if (nowState と stateTransition[5][1] が等しい)
・j=6の時:if (nowState と stateTransition[6][1] が等しい)
j=1〜6の6個分の処理を行った結果、
j=1とj=2の時にif文の条件が真(true)になったということで、
「水色の列から一致するものを探す」
という表現をしています。
以上となります。
混乱させて申し訳ありません。
@@itgakko ありがとうございます!分からないことが多く混乱していたため、冷静になって考えることで理解できました。
申し訳ないのですが、追加で2点質問がございます。
1点目は問11について、for(iを1からcompareDataの要素数まで1ずつ増やす)について、これは問13のjを1からstateTransitionの要素数まで1ずつ増やすfor文と同様にi=1〜compareDataの要素数までの繰り返し処理全体の説明なのでしょうか?問題を解いた際、for文以降のif文からdelTarget1←iをループしてしまい、解けませんでした。
for文をしっかり理解していないことが原因なのでしょうか?
2点目は問10についてbyteと10000000の論理積をして判断したビット値を反転させて、一番「右」の桁に設定するのはなぜなのでしょうか?普通に考えて、ビットに数値を入れる際は右から入れるからなのでしょうか。(10進数なら1の位から数を入れるように。)
それぞれ回答しますね!
> 1点目は問11について、for(iを1からcompareDataの要素数まで1ずつ増やす)について、これは問13のjを1からstateTransitionの要素数まで1ずつ増やすfor文と同様にi=1〜compareDataの要素数までの繰り返し処理全体の説明なのでしょうか?
→そうですね、この問題では1行1行トレースしているわけではなく、
for文全体の処理について説明しています。
> 問題を解いた際、for文以降のif文からdelTarget1←iをループしてしまい、解けませんでした。
> for文をしっかり理解していないことが原因なのでしょうか?
→解く時にトレースしてみたということでしょうか?
であれば、お話を聞く限りfor文への理解というより、
まずは時間がかかってもいいから1行1行確実に
トレースしていくことに注意するのが良いと思います。
> 2点目は問10についてbyteと10000000の論理積をして判断したビット値を反転させて、一番「右」の桁に設定するのはなぜなのでしょうか?普通に考えて、ビットに数値を入れる際は右から入れるからなのでしょうか。(10進数なら1の位から数を入れるように。)
→まず前提として、右から設定しなければいけないという決まりはないです。
関数の目的であるビット反転が実現できれば右からでも左からでも問題ありません。
その上でこの問題のプログラムで1番右の桁に設定している理由について、
・for文による繰り返し処理で8回繰り返し処理を行うことを考えた時に、
各繰り返し処理では毎回同じ場所(桁)に対して処理することになる。
・ビット値の操作については、左シフト・右シフト・論理積・論理和がある。
※これは公式のサンプル問題に合わせています
上記から、まず右の桁に値を設定して、それを左シフトすることを繰り返せば
最終的に元の値をビット反転した値が得られるということで
こういったプログラムにしています。
以上、よろしくお願いします。
@@itgakko ありがとうございます!1からトレースして、再度解き直したら、正解することができました。その際、他の選択肢が間違っている理由も理解することができました。
本当にありがとうございます。今は応用編の動画を学習しており、ビット値操作の問題がこの動画で勉強したおかげで、スムーズに解くことができました!
よかったです!
わかりやすいです、ありがとうございます!
ありがとうございます!!
問10のビット値の操作は、反転操作の処理手順を覚えた方が良いですか?
トレースで対応しても厳しいように感じました。
質問ありがとうございます!
処理手順を覚えるのはお勧めできません。
理由は「ビット反転の操作」のプログラム1つをとっても、実現方法は1つではなく、覚えた形のまま出るとは限らないためです。
おっしゃられている「トレースしても厳しい」とは具体的にどのような状態でしょうか?
具体例を作って、選択肢1つ1つトレースしていけば時間はかかるかもしれませんが多くの問題が解けると思います。
最初は時間がかかるかもしれませんが、様々な問題で練習を積めばトレースも早くなり、プログラム穴埋めの勘所もついてきます。
この動画で基礎力を付けたら応用問題にもチャレンジしてみてくださいね!
応用問題はコチラ↓↓
th-cam.com/video/9fU2HlAXTiM/w-d-xo.html
問8で質問です。
関数calc=関数calccombinationということですか?
関数calcが組み合わせの数xCyを返すから、return【a】のaにxCyの式を入れているのでしょうか。
質問ありがとうございます!それぞれ回答しますね。
> 関数calc=関数calccombinationということですか?
→ そうです。誤植失礼しました。
関数calcが組み合わせの数xCyを返すから、return【a】のaにxCyの式を入れているのでしょうか。
→ そうです。
ありがとうございます!勉強頑張ります💪
頑張って下さい!
文系、非IT、プログラミング未経験者でしたが昨日無事合格できました😂
科目A、Bともに貴重な動画をありがとうございました!!
コメントありがとうございます!
素晴らしいですね!合格おめでとうございます!
なるほど。「2の倍数かつ4の倍数ではない」は「2の倍数かつ4の倍数である」
大変助かります。ありがとうございます。
コメントありがとうございます!
勉強頑張って下さい!
i = 1. j = 1 出力0
i = 2. j = 2 出力1
i = 2. j = 3 出力0
i = 3. j = 4 出力1
i = 3. j = 5 出力0
i = 4. j = 6 出力0
出力結果:010100
間違ってたら教えてください
それ私も思いました!!
どなたか教えてください!!
返信ができておらず失礼しました。
問13はお手数ですが概要欄で訂正を入れさせて頂いております。
以下の「繰り返しを抜ける」が不足しておりました。
こちらで正しい解答になりますのでお手数ですがご確認下さい。
-----
■対象:問13.繰り返し文(応用)
・プログラムに以下1行が不足しておりました。
お手数ですが以下の行を追加したものとして動画の視聴をお願いします。
動画内で喋っている解説自体は合っております。
----------
if (nowState と stateTransition[j][1] が等しい)
if (input[i] と stateTransition[j][3] が等しい)
stateTransition[j][4] の値を出力する
nowState ← stateTransition[j][2]
繰り返しを抜ける ←←← この行が不足しておりました
endif
endif
----------
------
問13について質問があります。
何度解きなおしても3つ目の出力が010のイになります。
3つ目の出力はなぜ1になり、アが答えになるのでしょうか?
質問ありがとうございます!
すみません、問13のについては動画概要欄で訂正を入れさせて頂いております。
概要欄に記載の内容を以下に記載しますのでこちらご確認いただけますでしょうか。
-----
■対象:問13.繰り返し文(応用)
・プログラムに以下1行が不足しておりました。
お手数ですが以下の行を追加したものとして動画の視聴をお願いします。
動画内で喋っている解説自体は合っております。
----------
if (nowState と stateTransition[j][1] が等しい)
if (input[i] と stateTransition[j][3] が等しい)
stateTransition[j][4] の値を出力する
nowState ← stateTransition[j][2]
繰り返しを抜ける ←←← この行が不足しておりました
endif
endif
----------
-----
こちらをご確認いただければ、頂いた質問が解決すると思います。
ご回答ありがとうございます!
概要欄の記載を見落としていました💦
無事アが答えになり、理解できました。次の日曜日に先月のリベンジを果たしに再受験致します。
ありがとうございます!
リベンジ頑張って下さい!
質問があります
24:25で整数型iが2,整数型jが1と解説されていますがなぜですか?
質問ありがとうございます!
問題文中で i=2、j=1 として関数が呼び出されているからです。
-----
関数printDualArrayData を printDualArrayData(2, 1, {{3,2}, {3,4}, {1,7}, {5,5}}) として呼び出すと...
-----
問題文中にこのように関数をどのような引数で呼び出すかが記載されています。
この関数の引数の1つ目が i 、2つ目が j に該当しますので、i=2、j=1 になります。
@@itgakko ありがとうございます!再度確認します!
またご不明点あればご質問ください!
間がない話し方で脳が理解に追いついていけず聞き取りにくいです🥲
ご意見ありがとうございます!
改善しますね!
問10について質問です。
i=1というのは、
01010101の場合
12345678
と一番左から順番に名前を付けていてそれぞれ論理積して確認しているということでしょうか。
見当違いなことを聞いていましたらすみません。
すみません!
ご質問の内容が理解できませんでした。
お手数ですがもう少し詳細に教えていただけますか?
for(iを1~8まで1ずつ増やす)とありますが、
i=1、i=2、i=3は、どのような状況のことを表現しているのでしょうか。
i=1からトレースをして考えたいのですが、i=1が何を表しているのかわからない状況です。@@itgakko
そういうことですね!
動画内 43:03 あたりから説明しているページの内容が
関数invert(01010101)として呼び出した場合のi=1の場合の処理になっていますので、
こちらを参考にi=2以降もトレースしてみてください。
i=1は、1ビット左シフト
i=2は、2ビット左シフト
ということでしょうか。
@@itgakko
@@長谷川竜也-u3j
おっしゃっている内容だけではあっているともあってないとも言えません。
動画内で説明している具体例において、
変数byteの値は、関数が呼び出されてから
i=1〜i=3にかけて以下のように変化していきます。
・関数が呼び出されたタイミング
byte=01010101
・i=1の時のfor文内の処理が実行された後
byte=10101010
※「01010101」を1ビット左シフト
・i=2の時のfor文内の処理が実行された後
byte=01010100
※「10101010」を1ビット左シフト
・i=3の時のfor文内の処理が実行された後
byte=10101000
※「01010100」を1ビット左シフト
このように変数byteの値は変化していきます。
科目bはサンプル問題さえ解ければ合格点取れるのでしょうか?
質問ありがとうございます!
結論、分からないですね。
しかし個人的な感覚で言えば、公式が出しているサンプル問題や過去問を全て「素早く」かつ「内容を理解」した上で解けているのであれば、科目B合格点は到達できると思います。
問5の(3,{3,4,5,6,})のカッコの意味を教えてください。{ }のデータを一個の変数だと思ってしまいました。このような記号が使われている場合、どのように変数のハコに格納されるのでしょうか?
質問ありがとうございます。
{3,4,5,6} は「整数型の配列」です。
これが 関数printArrayData に渡され、data という変数名で受け取っているので、
data という配列の名前に 番号を [ ] でつけてあげることで配列の各要素をプログラム内で使用できます。具体的には以下のようになります。
data[1] = 3
data[2] = 4
data[3] = 5
data[4] = 6
ご不明点あればご連絡頂ければと思います。
@@itgakko便乗で質問です
配列は0から始まるので配列3は「6」を指す筈ですが、なぜ回答が「5」なのでしょうか
@randora2015
基本情報技術者試験の科目Bアルゴリズムにおいては、基本的に要素数は1から数えます。
※問題に記載がある場合はそちらを優先してください
@@itgakko 要素数は「1」から数えますが配列は「0」からの筈です
@randora2015
失礼しました。
しかし、配列の要素番号(プログラム上で「配列名[要素番号]」の形で指定する番号)も1から数えています。
Javaなど実際のプログラミング言語では、要素番号は0から数えることが多いですが、基本情報技術者試験の科目Bでは1から数えることが多いです。
※問題文に指定がある場合は指定に従ってください
すみません、問6のi=2,j=1がなぜか分かりませんでした。教えていただけますと幸いです。
ご質問ありがとうございます。
頂いた質問ですが、なぜi=2,j=1になるのか分からないということでしょうか?
それともi=2,j=1でなぜこの答えになるのかが分からないということでしょうか?
お手数ですが具体的に分からなかった箇所を教えて頂けますでしょうか。
ファーーーーーーーwwwwwwwwwwオリジナル問題助かるwwwwwwwwwwww
コメントありがとうございます!
科目Bの予想問題では時々長文の問題(循環小数や2進数の加算のプログラム)が出てくるのですが、そのような時にはどのようにして解くのが良いのでしょうか?
質問ありがとうございます。
解答方針はこの動画で解説しているものと変える必要はないと思います。
・プログラムの穴埋め形式の問題であれば文章とプログラムをリンクさせる、
・プログラムの実行結果を問う問題では1行1行トレースする。
記載頂いている2進数や循環小数の問題であれば、
プログラムを全て見なくても2進数や循環小数の知識だけで答えが出るケースもありますが、
他の問題を解く際の再現性に欠けるので、
こんなケースで解けたらラッキーくらいに思うのがお勧めです。
問題を解く上で個別にわからない箇所があるようであれば記載頂ければ
アドバイスはできると思います。
ご回答ありがとうございます!
色々な種類の問題を解いて慣れていこうかなと思います。
めちゃくちゃ初歩的で申し訳ないのですが、 43:34 の①でbyteが01010101になっているのは例として出しているだけですよね..?🙇🏻♀️
質問ありがとうございます!
そうですね!あくまで例です。
@@itgakkoありがとうございます!!
勉強頑張って下さい!
数学的な考え方が抜けなくてi=i+1ん?ってなったのは良い思い出
初めてプログラミングする時に違和感を感じるところですよね!
1〜9 ○
10〜 △
12 ✖︎
再帰呼び出しで単純にgetSum(引数)としないのはなぜでしょうか?
質問ありがとうございます!
質問内容は、問14について回答が「(イ) num」でない理由ということでよろしいでしょうか?
その前提で回答しますね。
関数内の1番下の行を
-----
return num + getSum(num)
-----
このようにした場合、プログラムの処理が一生終わらない(無限ループ)になってしまいます。
例えばgetSum(3)として呼び出した場合、
・呼び出した関数内でgetSum(3)が呼び出される
・さらに呼び出した関数内で呼び出した関数内でgetSum(3)が呼び出される
...
これが無限に繰り返されてしまいプログラムが終わらなくなってしまいます。
問10の最上位ビットが1のときの処理
resultByte = resultByte v 00000000
はやる意味があるのでしょうか?
この一行を実行するかしないかでresultByteの中身は変わらない気がしてます
質問ありがとうございます!
おっしゃる通り意味がないです。
2択の処理をわかりやすくするために残してますが、実際にプログラミングするんだったら不要なコードです。
問10で、空欄に答えを入力したうえでI=1から8まで計算した後のresultbyteの結果が10010100になってしまうのですが、この部分が正しく計算できれば、反転した値である11001010になるということでしょうか。
質問ありがとうございます!
そうですね!問題文に書いてある通りinvert(00110101)として呼び出した場合であれば、最終的な値は11001010になります!
@@itgakko i=8でresultbyt←resultbyte∨00000001 を入力した段階で11001010になり、その下のresultbyte<<1をすると10010100になってしまうのですが、これは計算途中でどこかがずれてしまったということですよね、、、。
問10は概要欄で訂正させて頂いており、それをご確認頂けてないのかもしれません。
概要欄の訂正内容をご確認頂けますでしょうか?
同じく動画概要欄でご案内している公式LINEから無料ダウンロードできる教材の方は訂正内容も反映したものになってますので、よろしければそちらもご確認ください。
@@itgakko if (i が 8 と等しい)
return resultByte 訂正して頂いていたこの部分を見逃していました!i=8になったらreturn resultByte でresultByteに戻るということで、その下のbyteとresultByteの桁をずらさなくてよいという解釈であっていますでしょうか。
@@oo-m8p あってます!
問13で、I=3,j=3の時、nowstateとstatetrainsitionが等しく、その次に、input[3]=0とtransition[J][3]=1で等しくなっていないと思うのですが、どうしてこのような回答になるのでしょうか?01までは解けたのですが、0110になる理由がわかりません。よろしくお願いいたします。
コメントありがとうございます。
問13のi=3のケースについて、
使用されている変数について整理すると、
・input[i] = 0
・nowState = 2
となります。
これとstateTransitionの値で一致する箇所を見ていくと、
j=4の場合、2つのif文の判定結果が真(true)となります。
・1つ目のif文:if (nowState と stateTransition[j][1] が等しい)
→ nowState と stateTransition[j][1] ともに 2
・2つ目のif文:if (input[i] と stateTransition[j][3] が等しい)
→ input[i] と stateTransition[j][3] ともに 0
j=4の場合、stateTransition[j][4] = 1 なので、1が出力され、
次の i=4 の繰り返しに続きます。
なので記載されている通り、
i=3, j=3 のケースは input[3]=0とtransition[J][3]=1 で等しくなっていません。
j=4 が等しいので、ご確認をお願いします。
ご不明点あればご連絡いただければと思います。
@@itgakko 解説ありがとございます。私も同じところで躓いておりまして、jは1ずつ増えていくというif文の条件は無視してもよいということでしょうか?私も01までは理解できたのですが、一致する場所を見つけるという考え方がいまいちピンと来ておりません。
@@user-hg5yx2lg9s 頂いた質問、お手数なのですが、「jは1ずつ増えていくというif文の条件」こちらがプログラム上のどこを指されているか教えて頂けますでしょうか。
申し訳ございません。if文ではなくfor文でした。for(jを1からstateTransitionの要素数まで1ずつ増やす)という部分です。1ずつではなく一気に2数値分増やしている(j→3ではなくj→4という解釈になっている)ところがわかりませんでした。
@@user-hg5yx2lg9s ありがとうございます。
おそらく、問題で説明している箇所について、if文の条件が真になってない箇所は飛ばしているため誤解されているのだと思います。
実際プログラムは以下のように動きます。
・i=1の時、j=1〜6の6回繰り返す、その結果合致したのがj=1の時
・i=2の時、j=1〜6の6回繰り返す、その結果合致したのがj=2の時
・i=3の時、j=1〜6の6回繰り返す、その結果合致したのがj=4の時
・i=4の時、j=1〜6の6回繰り返す、その結果合致したのがj=6の時
このようにiの値1〜4それぞれにケースについて、j=1〜6の6回ずつfor文内の処理が実行されています。
解説の中では、その中でif文に合致するケースのみをかいつまんで説明しているので、「jが1つずつ増えていない」ように解釈されたのだと思います。
わかりづらく申し訳ありません。
自分用 続き41:16
17:38 問5ってdata[3]が出力されるから、出力されるのは6じゃね?
配列はdata[0]からだから3+1番目の6になると思うんやけど
さらに、if内の「data[i]の値を出力する」だとi=4の時data[4]は存在しないからエラーになると思うんだけど、私の勘違いかな
この問題の言語たぶんCだよね?
質問ありがとうございます。
この問題は基本情報技術者試験の科目Bアルゴリズムで用いられる擬似言語と同じで配列の要素番号は1から始まることを前提にしております。
動画内での説明が不足しておりすみません。
@@itgakko
なるほど!!むしろそれ知らないと本番絶対間違えてたな・・・
教えてくれてサンクス!
基本情報技術者試験頑張ってください!
動画で投影している教材はさいとうの公式LINEに登録頂くと無料でダウンロードできます!
無料で教材が欲しい方は概要欄からLINEに登録してみて下さいね!
今回の動画の教材名:【初心者向け】基本情報技術者試験 科目B|アルゴリズムをゼロから理解する
問13難しすぎて笑ってしまうw
基本情報ってこんなに難しいのか・・・。
勉強頑張ってください!
あああ問13だけ難しくてわからねえええ
受かる気がしねぇ
一見複雑な問題でも1行1行トレースすることでやることはシンプルになります。
是非あきらめずにトライしてみてください!
不明な箇所を教えて頂ければコメントで解説しますのでお知らせください。