JASONハーシュホーン:ようこそ 週3に、すべての人。 私たちは忙しいが、エキサイティングなを持っている 我々の前にしてください。 そこでまず、我々はいくつかなされているため コー​​スのある前進が、我々はまだ 学習の多くは、私は、やり残してきた 君たちいくつかのリソースを表示しようとして それは信じられないほどであることを証明する必要があります あなたがいないだけにアプローチして投票 問題が設定されますが、また、すべてのダイジェスト 私たちはあなたでは、みんなを与える材料 講義やショートパンツとセクション。 その後、我々は最初の20を過ごすつもりだ セクションでは、上に行くの25分 あなたが持っている、あるいは持っていてもいなくてもよい、GDB、 この時点で使用されるが、それは その意志信じられないほど便利なツール あなたのプログラムのデバッグに役立つ。 あなた方の多くは、中のprintfを使用した可能性があり 図のように、プログラムの途中 変数が等しかったのかを。 GDBは、printf関数よりも優れていると あなたので、あなたのコードを台無しにしない 実行ファイル上で実行します。 だから我々は10最も参考になった上に行くよ あなたは、GDBのために必要なコマンド、そして我々はしている そう一緒に練習に行くつもり 問題では、3以降を設定 デバッグを支援するために、GDBを使用することができます あなたのプログラム。 そして最後に、我々はいくつかの上に行くつもりだ ソートアルゴリズムと検索 あなたが講義中に見て、我々はあることを だけではなく、実際にコードに行く 擬似コードが、コード、バイナリ検索、 バブルソート、選択ソート。 したがって、最初、私が行ってみたい 資源をめぐる。 これは広範なリストであり、それはだ 私はたくさんあったので、小さいフォント ここに収まる。 しかし、これらは、あなたを助けるだけでなく、 もう一度、問題セットを持つと あなたが学習した情報を消化したが、 確かに、クイズの時間、これらの意志を来る 信じられないほど有用である。 したがって、最初の講義ノート。 あなたはcs50.net/lecturesに行けばと 特定の週と曜日までスクロール あなたはそれぞれにノートがあることがわかります 単純ではない講義、 転写産物が、の編集されたバージョン コー​​ドでの講演で覆われていたものを スニペットやその他の有用な一口。 私は非常にそれらの上に行くお勧めします。 してからも、ソースコードがあります 各講義から入手できる。 そして再び、これらのスライドにもなります cs50.net/sectionsからオンラインで入手でき この夜。 第2ショーツは毎週されていることを 通常は5から15、トピックをカバー 長さの分。 そして、それらがうまくいけばあなたを与えるだろう さまざまなトピックに大きなプライマー。 第三 - これは、ブランドの新しい本です 年 - study.cs50.netです。 あなたがそれをチェックアウトしていない場合は、私 非常にあなたがそうすることをお勧めします。 あなたは、トピックを選ぶことを得る。 我々はそこにトピックの数十を持っている。 だからたとえば、関数を選択します。 それはあなたにいくつかのスライドを提供します と機能についての注意事項。 それらは実際のTFのスライドです 私たちの中に使用することが推奨される セクションでのプレゼンテーション。 対処するためのヒントやコツもあります 機能を備えた、とあります 役立つ練習問題 あなたが機能を操作します。 我々はまた、短い上にあなたのリンクを与える 機能と機能回 講義で出ている。 こののでstudy.cs50.net、真新しい 今年、素晴らしいリソース。 次に、私は手動で男を持っている あなたが実行できるコマンド コマンドライン。 だから、についてご質問がある場合は、 コマンド、例えば、RAND、その私たち セクションの間に先週発生した あなたは可能性が高い中で遭遇した を経由する場合は、あなたの問題は、設定 コー​​ドを生成しますが、男を入力すると ランドには、そのページを取得します ランドをするか教えてくれます。 それは、それが必要なものあなたを与える それが取るのパラメータだけでなく、リターン 種類と簡単な説明 その関数の。 だから、ランドをチェックアウト。 それは、少し冗長なと混乱することができます その時々私はそれを見つける 単に私が知りたいのは何ですかグーグル 答えを見つけるための最善の方法。 だから、Googleと練習。 グーグルが得意ゲット。 それはあなたの親友になります。 だけでなく、Googleは、あなたはそれを見つけることができない場合 Googleで、cs50.net/discuss、それはだ ディスカッション·フォーラム。 あなたが質問がある場合は、1チャンスである あなたの700 +のピアにもいることがある 質問と尋ねた可能性があります それはすでに議論中 フォーラムは、それが答えている。 ですから、一般的な質問がある場合、または あなたが思う疑問を持っている 多分他の人が中に実行した可能性があり、 cs50.net/discussをチェックアウト。 最後に、最後の2、あなたがしたい場合は、 本当の人間、オフィスに話 金曜日を通して時間月曜日。 オンライン営業時間もあります 延長学生のため。 そして最後になりましたが、確かではない、 私、感嘆符。 みなさんは私の連絡先情報を持っている。 あなたは何が必要な場合は、決して喜ばない 私に連絡することを躊躇。 いつもそうして自由に感じる。 あなたの非常に少数はGchatに私を追加し、 だから失望している、 うまくいけば、それは間で変更します この次のセクション。 これまでの資源へのご質問? 素晴らしい。 最後に、別のプラグインのための フィードバック、sayat.me/cs50。 あなたは私の匿名のフィードバックを与えることができます 私がやっている方法について。 つまり、先週は本当に役に立ちました。 私はあなたたちからのコメントをいくつか持って 右側のセクションの後に、プラスから それを見、他の学生 週の間に、それ 信じられないほど親切でした。 私が試してみて、私の使用のを制限するつもりです 単語 "甘い"私は私が表示されます 熱意と興奮 他の方法で。 しかし、他の追加があった 実質的なフィードバック、 プラスとデルタの両方。 だから、私はあなたたちのフィードバックを与えてください 問題のセットで。 私にフィードバックを与えること自由に感じ 私の教えに。 私はあなたたちのためにここにいる。 素晴らしい。 それは私が持っているすべてである 最初のセクション。 誰もがいずれかを持っていますか 質問ここまで? そして私はのためのノートを持っている コントロールセンター。 拡張生徒は私をメッセージとして送らきた 彼らはすべてのオーディオを取得していないと言って、 それは修正するために私の力が不足しています。 うまくいけば、それを取得 まもなく解決しました。 こんにちは、あなたがオンラインで見ている場合は、 しかし、あなたは私を聞くことはできません。 したがって、最初、私たちは行く GDBを通過する。 GDB、私が以前に示唆したように、 デバッグ·ツールです printf関数よりもはるかに良い。 もしそうであれば、GDB、君たちを開始するには あなたのアプライアンスを開きたい と私はあなたに電子メールで送信ファイルを取得 それ以前のバージョン - このファイルには、になります ビットで利用できるオンライン - とGDBを実行します。/ファイルの名前。 まず、もちろん、あなたがコンパイルする必要があります GDBはのみで動作しているため、ファイル 実行可​​能ファイル。 しかし、あなたがこれまでに開始したい場合 GDB、あなたが最初に行うこと、 あなたは、GDB /シーザーを実行します。 だから、それは我々がしているプログラムの名前です 今それで行くつもり。 だから私は、シーザーを作る書くつもりどのよ 私に実行可能ファイルを提供します ここに緑色で強調表示。 そして私は、GDB /セザールを実行するつもりです。 そしてそこに行く。 あなたは私たちが私に言っていくつかのテキストを持って参照してください。 GDBのバージョンに関する、私を与える その後、いくつかの保証情報、そして我々 ソートに見えるのGDPプロンプトを、持っている 我々のコマンドラインプロンプトのように、 しかし、あなたはそれが開いて参照してください。 括弧は、GDB、近くに括弧。 我々は、このファイルを継続し、デバッグする前に 私はあなたのすべてに送信されるので、次に見てみましょう いくつかの有用なコマンドは、私たちはセンスがある 私たちがカバーしようとしているものの。 これらのコマンドは、ここに記載されています 私は一般的にそれらを使用する順番。 だから私は実行することで、私のプログラムを起動する プログラムのGBD。/名、 この場合は、シーザー。 した後、まず最初に、私は99.9%をする 時間の種類のブレークは平均である。 すなわち、主にブレークポイントを設定します。 基本的には、そこに何をやっている プログラムがで停止しようとしているされている 主なので、あなたはそれに行を検査し始めることができます ラインによる、むしろすべて実行するよりも 道を通して。 あなたは、異なる時点で破ることができる あなたのコードが、メイン一般的である 開始するには良い場所。 私が実行したコマンドが実行されます。 すなわち、プログラムの実行を開始し、 あなたがコマンドラインを入力する必要がある場合 引数は、あなたはそれをそのコマンドを実行します。 引数を指定して実行します。 だから我々はバージョンに上書きしようとしているので、 プログラム君たちは、C、の PSET 2のために書いた - この1は、もちろん、いくつかのバグを持っている うまくいけば、我々は見つけることができますことを、その中に - 我々はいくつかのコマンドを使用して実行]を実行するつもり ライン引数シーザーので、 あなたたちは、問題ごとに知っているように 仕様を設定、一部を取り コマンドライン引数。 コマンドの次のカップル、次の 1は実際には次のと呼ばれています。 その1は、ラインによってあなたのラインを取る あなたのプログラムを通じて。 そう打つN Enterをすると表示されます 次の行に、実行 前の行。 ステップが移動しますだけでなく、 次の行が、 あなたは関数の内部かかります。 ですから、関数を書かれている場合は、 あなたのコードか、探検したい場合 私には、例えば、あなたは、Sを打つことができ、 むしろの次の行に行くより あなたが右を通過しているファイル 今、あなたが実際にステップインします この関数とそのコードを参照してください。 リストには、フレンドリーな非常にユーザーに、あなたを示しています 形式、約10行程度 現在、コードのどこにいるか だから、実際にはファイルを見ることができます むしろバックスワップを有し、かつより 異なるビュー間など。 プリントは、printfのようなものです その名前が示すとおり。 つまり、変数が等しいあなたが何を示しています。 インフォ地元の人々は本当に便利です。 これは、印刷の特別なバージョンです。 インフォ地元の人々は地元のあなたのすべてを示しています 変数は、あなたのためにそれらのすべてを出力します 現在利用可能であることを。 だからではなくするよりも、一般的に私は、 私は4つの変数をプリントアウト 私はループにいる場合には好奇心のために たとえば、私は情報の地元の人々を書き、 そしてそれはどのような私のカウンタI私を紹介します 私は、配列だけでなく、等しく イコールで作業。 最後に、続けています。 休憩を入力すると、あなたを停止します ブレークポイントで。 次の方法でラインを通って歩くことができます 次のステップに沿って。 あなたの次に実行するプログラムを継続 場合は、ポイントを壊すか、完了まで これ以上のブレークポイントがあります。 もしあれば無効にするには、ブレークポイントを削除します メインでのブレークが判断しました 不適切な、あなたがしたい どこか別の場所に設定してください。 そして最後にQ、終了、GDBから取得します。 したがって、このプログラムは、。/シーザー、我々は行く 今に目を通すと我する 見つけて、GDBを使用しようとしている このプログラムのバグ。 私は以前にこのプログラムを実行したと 50を確認して、私は1しかめ面を得た。 それが存在していたすべてのものは、それは、それをコンパイルした 多くのテストに合格したが、用 何らかの理由で、第5に合格しなかった BARFOO、すべてのキャップを回すテスト、、へ E-D-U-I-R-R、すべて大文字、 キーように、3つを使用して。 私はかなり親しま。 私は、1文字で降りた。 だからここにいくつかの小さなミスがあります。 私は自分のコードを見てきた。 私はそれを把握することができませんでした。 うまくいけば、あなたたちは私を助けることができる このバグが何であるかを把握。 だから、我々はしているエラーです を検索する。 それでは、GDBに移動しましょう​​。 繰り返しますが、私は、GDB /シーザーを実行した だから今、私たちは、GDBにいる。 そして、最初は何ですか 私は何をすべきなこと? 私はGDBを入力した。 誰かが私によいを与える 入力するコマンド。 学生:メインブレイク。 JASONハーシュホーン:メインブレイク。 幻想的。 それではインチそれを入力してみましょう 君たちはここに見たり、従うことができます お使いのコンピュータ上に沿って。 メインブレイク、あなたが表示されます ブレークポイントは、とした - それは私にいくつかの奇妙なメモリ·アドレスを与え、 そしてそれはまた、私に行番号を示します。 私は、このファイルを振り返るとしたら、 私はその主を理解するであろう 21行目に起こった。 私は次は何を実行する必要がありますか? 私のプログラムは、実行されている? いいえ。 だから私は、次は何を実行する必要がありますか? 学生:実行します。 JASONハーシュホーン:ファイル名を指定して実行。 私はちょうど実行]を実行するか、すべき必要があります 私は、いくつかの他のものを追加しますか? 学生:引数を指定して実行します。 JASONハーシュホーン:で実行 コマンド引数。 と私は非常に特定のデバッグてるので、 場合、私はそれを入力してください コマンドライン引数。 だから私は、再び、である、3を実行するつもりだ 私がチェック50から得た出力。 プログラムを開始する。 私たちは、数行を通過します。 これで、私たちは21行にしていることがわかります。 どうすれば我々は、ライン21にしていることを知っていますか? なぜならあなたが左に見れば そこに私のターミナルウィンドウの それはライン21を言う。 そして、それは、実際には、私を与える 21行目にあるコード。 だから私は、以前のmisspoke。 メインは21行で、実際にはありません。 メインは21以上の数行です。 しかし、21行目では、それはです どこで破壊している。 このコード行は、あります まだ実行されません。 これは重要です。 ご覧の行ではありませんがあります まだ実行されて。 つまり、次のコード行です あなたが実行しようとしている。 君たちがいるように、次の行、 と、おそらく馴染みの、これは 条件私が持っているかどうかを確認 コマンドライン引数を入力しました。 と私には、2番目は何ですか それは何の一部? 私には何ですか? 学生:整数に変更する。 JASONハーシュホーン:申し訳ありませんが? 学生:それは変わりつつ 整数の引数。 JASONハーシュホーン:だから私に引数を変更 整数への文字列からV1。 そしてそれは何をチェックするのですか? 学生:二がある場合 コマンドライン引数はさておき プログラムを実行しているから。 JASONハーシュホーン:そして、何だ この年の後半 ブール式をチェック? こっちにこの部分は、私に? 学生:それは否定的だ場合。 JASONハーシュホーン:確かに何を作る? 学生:それを確認すること 正、実際には、である。 JASONハーシュホーン:その通りです。 これはだかどうかを確認してい 陰性、そしてそれは、I負である場合 気持ちを次の行のマイトを持っている 私は、ユーザーに叫んでも。 それでは、この行を実行するためにエンドをヒットしてみましょう。 私たちはあなたたち、その行が表示されない 多分叫んで参照することが期待 ユーザー、次に戻って、理由 この行は実行されませんでした。 私は3に入った。 だから私は、実際には、2のコマンドを入力しなかった ライン引数、および3である ゼロよりも大きい。 だから我々は、その行を見て、我​​々は実行され、 しかし、我々はステップませんでした If条件内部。 だから今、次の、私は私が設定してい参照 int型のキーは、私は、V1をARGに相当します。 だから私は、変数のキーを作成しています。 だから、私は今、キーを印刷した場合、理由 それはあなたが見ることができます 変数内の値、 キーは47に等しい。 それは奇妙なことだが、もちろん、 私は持っていないためです まだその行を実行する。 私はNを打つのであれば、今、その行を実行し、 PRINTキーをし、キー​​は、3に等しくなる 我々はそれが等しくなるように期待するものである。 だからもう一度、GDB、ラインあなたの中に あなたはまだ実行されていない参照してください。 あなたは、NまたはSまたは番号にヒットする必要があります 実際に他のコマンドの その行を実行します。 Printキー。 キーの3時。 ここまでは順調ですね。 文字列はプレーンテキストです。 のは、その行を実行してみましょう。 私は、ユーザーから文字列を取得しています。 それでは、私のチェック50で見てみましょう、私 BARFOOすべて大文字を入力するので、 それは私が入るだろうものだ。 私は今、プレインテキストを印刷する場合。 あなたはそれが文字列に等しい表示されます。 それは私にいくつかの他の奇妙進を与えます 数が、それはでない 私の文字列がBARFOOであるという事実を言う。 私は、キーがで等しかったか見たいと思った場合 この時点で、私はどのようにキーをチェックすることができます? 学生:Printキー。 JASONハーシュホーン:Printキー、正確に。 そして実際に、ショートカットがあります。 あなたがプリントを入力するのに疲れたなら、 あなただけのPを入力することができます。 だから、pキーがまったく同じことを行います。 そして再び、私はそれが3に等しい参照してください。 私は何キーの両方を検索する場合 そしてBARFOO同時に等しかった 私はそれぞれを入力するのは疲れていた 個別に1つ、私が インフォ地元の人々と入力することができます。 つまり、キーが3に等しい私に与えます。 プレーンテキストはBARFOOに等しい。 それはまた私に、これら2奇妙なことを提供します 上部には、この変数iと この変数n。 それらは実際に存在している 私のメインプログラム。 私たちは、それらをまだ発生していない しかし、プレビューとして、それらの 私のループのために存在する。 だから、今、彼らはいくつかの奇妙なと等しく 数字、彼らはされていないため、 まだ初期化されているが、彼らはまだ存在しない メモリには違いますので単に設定している いくつかのごみ値に設定します。 しかし、我々は、プレーン内のキーを見ますか? すぐそこにテキスト。 だから私は、この行を実行するつもりです、 ライン34、forループ。 私たちは、に飛び込むつもりだ Nを押すことで、forループ。 そして、我々は、forループの中にいる。 私たちは、最初のチェックにいる。 そして再び、これらは一種のはず これがあったので、あなたによく知られ シーザー書かれたプログラムが、 再び、バグのようなものを持っています。 そして今、私はだから、私は、インフォ地元の人々を行う場合 ループのそれの中に、次のように表示されます 我々が期待として、私は、ゼロに等しいこと。 それは我々がそれを設定したものだと、初期化 それのためのループ内に。 nが6に等しい。 我々は設定しているためそれはまた、理にかなっている それをプレーンテキストのstrlen関数に。 だから私は情報の地元の人や印刷をしたい 変数に、多くの場合、ことを確認する すべてが常にあるもの 私はそれが等しくなるように期待しています。 この場合は、すべてがある 私はそれが等しくなるように期待するもの。 それではを通じて移動を開始しましょう このループのために。 プレーンな場合、私は上だラインは、ライン36である テキスト私は、プレーンよりも大きい テキスト私は、以下のzに等しい。 私は私の問題は私の最初ではない知っている 手紙には、二文字でだ。 私たちは、チェックイン時に戻ってみると 50、Bは、Eの罰金になります。 私はAを取り、としてそれを残している A、D.だからそれを変更しない 何かが間違っている 番目の文字。 だから私は移動するつもりだ そこに第二中。 しかし、私はどのようなプレーンをチェックしたいなかった場合 私は、この特定のに等しかったテキスト 場合、私はそれが何をすべきだと思います? 私はこのプレーンテキストは何を等しくなければならない のためのループを通る最初のラウンド? 学生:ゼロ? JASONハーシュホーン:私のプレーンテキスト? だから、私は、もちろん資本B.でなければなりません ゼロに等しいが、プレーンテキスト ブラケットゼロクローズブラケットは、Bに等しい 文字列なので、我々は先週見たように、 配列ですので、取得している それから、最初の文字。 だからもう一度、私は、プレーンテキストをプリントアウトした場合 私は、実際には、文字を得るのですか B.とその通り、きちんとしたの? 私は実際にプレーンテキストIを持っていない それは私が設定した変数の1ではありません または初期化しますが、印刷することができます 物事の全体のホスト外 あなたがしたい場合。 しかし、ここでは間を移動してみましょう。 プレーンテキストIはAよりも大きい場合と プレーンテキスト私は以下に等しい 我々が持っているので、Zは、それは明らかに真である 私は実行するつもり資本B. その上にいくつかのコマンドを実行します。 我々は先週、その数学を見たので、よ それが動作するのは当然だと取る 右50をチェックしてください方法。 これらの中括弧、最初の1 私があれば出て行くことを示した 条件、第1は示した 私は、forループから出てること。 私は[次へ]を打ったときなど、今、我々が表示されます 我々は再び戻ってループにいる。 我々は経由つもりだ 再びforループ。 それでは、実際に第二にステップインしましょう ループとタイプの繰り返し インフォ地元の人。 だから我々は、2回目の反復にいる 私たちのforループの。 私たちは期待している、1に等しい。 Nは我々が期待6に等しい。 キーは、我々が期待3に等しい。 プレーンテキストには、等しく、表示されます EARFOOは今、もはやBARFOOていないため、 私たちの前の反復で、Bがあった 首都Eに変更だからうとしている 問題が発生したので、このように 我々が行っている場所である デバッギングに飛び込む。 しかし、誰もが疑問を持っていません 我々はこれまでに何をやったかはどうでしょうか? 幻想的。 だから我々は、次の場合に、これを実行しようとしている 条件、私は閉じたプレーンテキストのブラケット ブラケットAより大きく、プレーンテキストI 以下Zに等しいが前 これはどこにあるので、私は、それに入る 私は私が指すようにしたい、私のエラーが知っている Iのプレーンテキスト出そう のプリントを出してみましょう。 そのように、それは、キャラクタAに等しくない これまでのところ、すべてが順調と良いようです。 だから私は、私のロジック当たりの行を期待する この行は本当でなければなりません。 これは大文字です。 私はNを打つなら、我々はこのことを実現するか 行は、実際には実行されませんでした。 私があれば、他にまで跳ね上がった。 それはなぜ起こるのですか? 学生:あなたが持っているのであなたの状態 プレーンテキストの大きい A、等しくないか、より大きくより。 JASONハーシュホーン:だから、私はプレーンテキストを持っていた 私は、大きくないよりも大きい イコール。 そう明らかに、資本Aはしませんでした 条件場合は、これをトリガし、私たちはやった それに足を踏み入れると、私たちはしませんでした 必要なシフトをしない。 だから実際には、これだけです。 私は私のバグを考え出した。 私は自分のソース·ファイルに戻って行くことができる、 それを変更し、それを更新し、 再び50をチェックして実行します。 しかし、我々は単に教育のために、表示されます 日本酒、私は続けるします。 他の場合は、どちらか実行されませんが、 何の代わりに等しいことはコマンドです それは変わりません。 だから、それは全く変化しなかったら、私 ここにプレーンテキストを印刷し、我々は行く表示されます そのループスルーのために、実際にはしませんでした 全くその二文字を変更。 それはまだ資本A.です だからもう一度、私たちは、エラーをデバッグする。 我々があったことに気づいた 不足しているいくつかのロジック。 そして、我々は前に事前にそれをデバッグ 実際にその行を実行すると、 しかし、あなたはちょうど私達が持っていた気づいているだろう [次へ]をヒットした場合に、そのほかのにジャンプし、 それはつまり、もし条件 本当ではなかった。 私たちは、実際には、取得していない 我々は期待された結果。 それでは、我々は持っていた、プロンプトが表示されている可能性 私たちを見て、そう明敏されていない その条件と実際には、かどうかを確認する場合 私たちの状態はに評価する必要があります 現在のコンテキストでは真。 つまり、このプログラムをデバッグするためのすべてです。 誰もが疑問を持っていますか? 私は、GDBを終了し、どのコマンド打つだろうか? Q.そして私は要求されます、 とにかく終了しますか? yesまたはno。 私はイエスのヒットだろう、と私は、GDBを終了しています。 だから、GDBへの迅速なプライマーた。 実際に、現実のシナリオでは、 私はオフィスの時間でこれをした。 私は、この正確なプログラムをGDBed 学生と営業時間。 そして、我々は我々が見たコ​​マンドに戻った場合 前に、まず、ブレーク主に使用される 我々が行ったもの。 私たちは、コマンドライン引数にファイル名を指定して実行に使用、 我々が行った二つ目。 我々は移動するには、次のロットを使用 ラインを通して私たち。 そして再び、ショートバージョン の次のnです。 これはカッコ内にい スライド上のグレー。 私たちはステップを使用していないが、我々はしませんでした 必ずしもこのような場合のためにする必要があります。 しかし、我々は、後少しでそれを使用する場合があります 今日の上の私たちが、デバッグしている場合は、 たとえば、二分探索するときのバイナリ 検索は別々に呼ばれて 機能だけあります それに多少の誤差はご了承ください。 私たちは、足を踏み入れるするつもりだ 二分探索の呼び出しと 実際にそれをデバッグします。 我々が持っていたので、我々はどちらを使用していないリスト 我々のコードの良識があれば、私 どのようなコード私の感覚を取得したいんでした 私は、リストを使用することができ、周りのだった。 我々は、我々が使用情報、地元の人々を使用して印刷。 続けて、我々はこの中で使用する必要はありませんでした ケースは、どちらも我々は使用する必要はありませんでした 無効にするには、我々は使用が終了しました。 再度、これらの10個のコマンド、 それらを実践しています。 これらの10のコマンドを理解していれば、 あなたがいずれかをデバッグするために設定する必要があります GDBの問題。 だから我々はするには、もう一度、上に行くしようとしている セクションの核心は、今日、上に行く これらの並べ替えと検索 アルゴリズム。 我々はそうする前に、もう一度、ご質問、 GDBへのコメント、懸念? だから、誰もが使用しようとする GDBはなく、printfの? 永遠の便宜上そう皆、、 誰もが自分の頭を右にうなずいている 今、私はオフィスの時間で、あなたが表示されます そして、すべてのTFはあなたが表示され、 それらは、使用する方法を私を見る、と言うでしょう GDB、あなたができるようになります 右、それらを表示するには? のようなもの? 多分うまくいけば。 涼しい。 だから我々はに移動しようとしている ソートや検索を。 あなたは、私がすでにソートされたリストを持って表示されます 私たちが、それを行っていないため 常にそうであると。 だから、問題にするための仕様を設定 問題は3を設定すると、ショートパンツを持っている あなたが見ることができることと、実際に これらのショートパンツを見るために要求されます。 また、講義では先週、我々は渡った これらのアルゴリズムの多くは、私はよ 行くクラスで時間を費やすつもりはない これらもう一度アルゴリズムや図面の上 どのようにこれらの写真 アルゴリズムが働く。 繰り返しますが、再度見ることができる情報 講義、またはその情報 ショートパンツに抜群に捕獲される これらの検索のために、すべての これcs50.netでご利用いただけます。 だからではなく、私たちはするつもりだ 行うには、プログラムを書くことです。 私たちは、どのように精神的なモデルを、センスがある 彼らは我々が行っているものをそのように作業し、 やることに対する真のためにそれらをコードです。 我々は、メンタルモデルを有効にするつもりだ、 にその絵、可能ならば、 実際のコード。 そして、あなたは少し混乱した場合には メンタルモデルにかすんで、私は完全に 理解しています。 私たちは、実際にするつもりはない コー​​ドすぐににジャンプします。 したがって、このスライドは、このプロンプトが求められている間 あなたバイナリ検索をコーディングすると、 実際には、反復バージョン バイナリサーチ、まず最初に私が 本当にあなたが何をしているか いくつかの擬似コードを記述します。 だから、このメンタルモデルを持っている どのように二分探索の作品。 あなたが持っている場合、紙のシートを取り出し 容易に利用可能な1、または開く テキストエディタ、そして私がしたい 書いて皆。 書き込みに4分かかる 二分探索のための擬似コード。 繰り返しますが、そのメンタルモデルを考える。 ご質問がある場合、私は周りに来るよ 私たちは絵を描くことができます。 しかし、最初に、我々はプログラミングを開始する前に、 私が書きたいのですが 二分探索のための擬似コードそうときに我々 でのダイビングを、我々はいくつかの方向性を持っている 我々は頭べき場所へ。 学生:私たちは、の配列をとることができる 我々が得る値は、すでにソートされている? JASONハーシュホーン:だから二分探索のための 動作するように - 優秀な質問を - あなたは ソートされた中で取らなければならない 値の配列。 だから、それが動作すると仮定します。 我々は、このスライドに戻って行きます。 あなたは紫の関数で表示されます 宣言は、ブールbinary_searchのintで 値、int型の値はint nである。 あなたがした場合、これは見覚えがあるはず すでに近づいたりを得て 問題が設定された汚れた手。 しかし、それはあなたの関数宣言です。 繰り返しますが、心配する必要はありません 現時点ではそれだけ。 私が本当にあなたがしたいことは取るです 擬似コードのバイナリへの4分 検索し、我々は行くよ グループとして、その上に。 そして私の周り来る。 ご質問がございましたら、気軽に 手を上げ、無料です。 なぜあなたは2分以上を取ることはありません 擬似コードを仕上げるには? 私はこれがあることをばかげて見えるかもしれません知っている 我々は上に多くの時間を費やしている にしても、実際にはない何か Cが、特にこれらの多くのため 挑戦的なアルゴリズムと問題 我々は把握する必要がありセット、 擬似コードで始まる心配はない 構文については、単に気にせ ロジックは、信じられないほど便利です。 そしてそのように、あなたは2を解決していない 一度に非常に難しい問題。 あなただけのロジックに焦点を当てている、と あなたは構文に移動します。 [OK]をクリックします。 を経由起動してみましょう 擬似コード。 私は、バイナリ、ここには記述されています 検索擬似コード。 私たちは、上でこれを書きます 一緒に乗る。 または私はそれを書くだろうとあなたがあげる 私私は必要なのプロンプト。 だから、誰かが私に最初に与えることができます 擬似コードの行ご 二分探索のために書いた? はい、アニー? 学生:一方の長さ リストはゼロより大きい。 JASONハーシュホーンます。while長 ゼロより大きいリスト。 そして再び、我々はいくつかのC-探して参照してください。 ここでの構文的なもの。 しかし、これのほとんどは英語です。 誰もが、彼らが置かれた任意の行がありましたか その擬似コードでは、これは前に? 学生:配列​​を取得 数をソート。 JASONハーシュホーン:あなたが書いた "を取得 ソートされた数字の配列。0.138 " 関数宣言は、渡すことができます ソートされた数字の配列。 学生:[聞こえない]。 JASONハーシュホーン:だから 我々はそれを持つことになります。 しかし、はい、私たちは、それを持っていなかった場合、我々 我々の配列をソートする必要があります 数字、なぜならバイナリサーチ 唯一のソートされた配列で動作します。 リストの長さがゼロに等しいのでながら、私は今 いくつかの中括弧に入れに行く それはもう少しのように見えるようにする C.が、しばらくは、上にマッピングしているようだ whileループなので、この間の内部 ループは、我々には何が必要なのですか 二分探索のために何が? 私に与えられていない他の誰か まだ答えしかし、誰がこれを書いた? 学生:リストの中央に移動します。 JASONハーシュホーン:トム。 リストの中間に移動します。 とフォローアップの質問、どのような 私たちがしてもらった上行っておりません リストの中間? 学生:それはだかどうかチェックを行う あなたが探している番号。 JASONハーシュホーン:優秀。 リストの中間を行くと確認 私たちの価値があるかどうか - 幻想的。 誰もが何かを持っていました それは、これよりも違っていた? それはまさにそうです。 我々はバイナリ検索で最初に行うこと リストの中間に移動している 私たちの価値があるかどうかを確認してください。 私たちの価値があるので、もし私が想定し そこに、私たちは何をしますか? 学生:私たちは、[聞こえない]がゼロを返します。 JASONハーシュホーン:ええ、私たちの場合 値が存在し、我々はそれを発見した。 だから我々は、しかし、いくつかの方法を伝えることができ、この 関数が定義されている、我々はユーザーに通知 我々はそれを発見した。 それはそこにはない場合、しかし、それはです これはトリッキー取得する場所。 だから、そこにはない場合、他の誰かが誰 二分探索に取り組んでいる、またはした 今考えを持って、私たちは何をしますか? 学生:質問。 JASONハーシュホーン:はい? 学生:配列​​はすでにソートされていますか? JASONハーシュホーン:はい、我々は想定してい 配列はすでにソートされている。 学生:それで、あなたはチェックする必要がある場合 ご覧の値がより大きくなる 必要な値は、あなたが移動することができます 残りの半分の真ん中に。 JASONハーシュホーン:もしそうなら中旬 リストには、私たちがしているものよりも大きい を探して、その後、我々は何をすべきか? 私たちは、どこに移動しますか? 学生:あなたはに移動したい でリストの半分 それよりも低い数字。 JASONハーシュホーン:だから我々はよ 左のその呼び出し。 真ん中の方が大きいのであれば、私たちは検索することができます リストの左半分。 と入力し、[検索することにより、どのような 私は、検索によって意味ですか? 学生:[聞こえない]。 JASONハーシュホーン:我々は中央に移動します。 私たちは、実際にこの事を繰り返します。 私たちは、whileループを通って行く。 私はあなたの最後の1をあげる - 他に、真ん中のは何よりも小さい場合など 我々は、我々はここで何をすればよいですか? 学生:右に移動します。 JASONハーシュホーン:権利を検索します。 これはよさそうだが、誰もが持っているん 我々は失われることが何か あなたが置く何か あなたの擬似コードで? だから、これは私たちがこれまで何をしています。 リストの長さは大きくなる一方で ゼロより、私達は行くつもりです リストの中間にと 私たちの価値があるかどうかを確認してください。 真ん中が大きい場合、我々はするつもりだ 中間であれば、他の左検索 以下、我々は権利を検索しようとしている。 だから我々は、すべてについてある程度の知識を持っていた 我々はコンピュータサイエンスで使用する用語 そして我々が持っているツール。 しかし、あなたはすでに私達がいた気づく 英語で言えば、我々は発見 へマッピングするように見えたことがたくさん 私たちは私たちのコーディングツールキットを持っているツール。 だから、すぐさま、私たちではない まだ実際にコーディングする予定。 私たちは英語でここに何が見えます、そのマップ ものにで私達はC言語で書くことができますか? 学生:ながら。 JASONハーシュホーンます。while。 したがって、この中に右ここ 何の上のマップ? 学生:whileループ。 JASONハーシュホーン:whileループ? または、おそらく、より一般的には、ループ。 私たちは、何度も何かをしたい。 だから我々は、ループをコーディングするつもりだ。 私たちがやったので、我々はすでに知っている、 この時代のカップルと私たち 、そこに例がたくさんある どのように実際に書く方法 forループのこのインデックス。 だから、これはかなり簡単なはずです。 我々はそれを得ることができる必要があり かなり迅速に開始した。 他に何が我々がここで見ていますか? 他にどのような構造の構文は、物事 我々はC言語で精通していることを、私たちは何 すでにベースの感を持っている 我々は使用されている単語のオフ? はい、アンナ? [聞こえない] ほんの冗談です。 アンナは、先に行く。 学生:ifとelse。 JASONハーシュホーン:Ifと 他の - ちょうどここ。 それでは、それらは次のようになりますか? 学生:もしelse文。 JASONハーシュホーン:ええ、 条件は、右? だから我々は、おそらくする必要があります いくつかの条件を記述します。 そして再び、でも多分に混乱 まず、我々は一般的になりました感覚を持っている 条件や書き方の 条件の構文。 もしそうしないと、我々はただ見上げる 条件、カット&ペーストの構文 我々は我々が知っているので、その ここでの条件を必要としています。 我々は上にそのマップを参照して、他のもの 我々はC言語で行う必要があるかもしれませんもの? ええ、Aleha? 学生:これは、明白かもしれない 場合は、単にチェックすることにより、 値が何かに等しい。 JASONハーシュホーン:では、どのようにチェックしますか と - ので、リストの中央に移動します 私たちの価値があるかどうかをチェック? 我々はそれがC言語でどのように行うのですか? そのための構文は何ですか? 学生:等しい、等しい。 JASONハーシュホーンは:等しい、等しい。 このチェックは、おそらく起こっている 対等であるためには、等しくなります。 だから我々は我々がどこかが必要に知っているよ。 そして実際に、それを書面で、 我々は、これらの他のものを参照してください。 我々はいくつかを行う必要があるとしている そこでの比較演算子 - 幻想的。 だから、実際にで、のように見え、 大規模な、私たちは書いていないA まだCコードの言葉。 しかし、我々はダウンメンタルモデルを持って 講義やそれらのショーツを経由。 私たちは、グループとしての擬似コードを書いた。 すでに、私たちは80パーセントを持っていない場合 我々は何をすべきかの90%。 今、私たちは単にコードする必要があります それは、再び、これは 解決する些細な問題。 しかし、少なくとも我々は論理に立ち往生している。 少なくとも今は営業時間に行くとき、 私は私が必要なものを知っている、と言うことができます 実行するには、しかし、あなたは思い出させることができる 構文の私? または営業時間は、混雑している場合でも、 むしろ、構文については、Googleができます ロジックに貼付されているよりも。 そして再び、のではなく、解決しようとし ロジックと構文上の問題のすべて 一度、多くの場合、はるかに良好である にそれらの2のハードの問題を解消 2より扱いのものは、観光 Cの擬似コード最初にして、コード それでは、私がやったことを見てみましょう 事前に擬似コード。 リストの長さは大きくなる一方で ゼロより、中を見て リストの。 番号が見つかった場合はtrueを、返さ 数値が高いほど、検索のままにした場合。 他の数が低い場合は、検索 右、falseを返します。 ていないのであれば、それはほぼ同じに見える 私たちが書いたものとほぼ同じ。 実際には、トム、あなたが最初に言ったこと、 リストの中間を壊すとIF 2文にされた数 私が何をしたか実際にある。 私はそこにそれらを組み合わせる。 私は耳を傾けている必要があります あなたは初めて。 だから、それは我々が持っている擬似コードである。 あなたが今したい場合は、申し訳ありませんが、行く 私たちの最初の問題にバックアップします。 のコードbinary.cをしてみましょう。 だから、反復バージョンを実装 次を使用してバイナリサーチ 関数宣言。 そして、あなたはコピーする必要はありません それダウンだけではまだありません。 私は実際に開くつもりだ アップ右ここbinary.c。 だから、関数宣言があります 画面中央の。 そして、あなたは、私は擬似コードを取っ表示されます 私の両側からではなく、ほぼ同一 何を私たちは書いて、 あなたのためにそれを置く。 だから今、のは5分かかりましょう この機能をコーディングする。 そして再び、ご質問がある場合には、 手を上げ、私はよ、私に知らせて 集まってくる。 学生:[聞こえない]。 JASONハーシュホーン:だから私は、バイナリを取った での検索定義 12行目の一番上の、。 それは私が私のスライドのために得たものです。 して、このすべての擬似コードちょうど私 コピーとスライドから貼り付け、 擬似コードスライド。 私はまだ[聞こえない]を聞いていないよ。 つまり、あなたが終了した場合 実装は、私はそれを確認したい。 私はあなたにHelpers.hにファイルを電子メールで送信 以前のこのクラスの。 そしてそれは同様にオンラインで利用できるようになります 見ている人々のためにダウンロードする このセクションでは、時間が遅れる。 と私は一般的なディストリビューションを使用 pset3からコード。 だから、私はHelpers.hにファイルを使用し、find.Cを取った むしろHelpers.hにファイルよりも つまり、配布コードに記載されいます。 そして、私は中1の他の変更をしなければならなかった むしろ単に呼び出すよりもfind.C 検索、binary_search呼び出します。 だから、あなたのコードをテストする場合、 それはそれを行う方法であることを知っている。 実際には、ときに我々は、このコードを実行している必要があります 今、私はただのコピーを作った 私pset3ディレクトリには、再び、スワップアウト そしてヘルパーファイルとは、作った binary_searchを呼び出すためfind.Cの変化 のではなく、単純に検索します。 JASONハーシュホーン:はい。 あなたが質問がありますか? 学生:ネヴァーマインド。 JASONハーシュホーン:心配はありません。 さて、を始めましょう。 当社は、グループとしてこれをコーディングします。 もう一つ注意してください。 再度、これは、容易に交換することができる 問題設定された3点がある場合。 むしろ私はHelpers.hにファイルを持っている、 Helpers.hに比べて、我々は与えられている、 二分探索、バブルを宣言 ソート、選択ソート。 そしてfind.cでは、行に気づくでしょう、 ライン68は、我々はバイナリを呼び出す、というものです 検索ではなく、検索。 だからもう一度、利用可能なコード オンラインであなたがしているコード 今作成は簡単に交換することができます Pのためにそれをチェックするために3を設定します。 しかし、最初に、バイナリサーチをコーディングしてみましょう。 私たちの関数宣言、 私たちは、BOOLを返す。 私たちは、価値と呼ばれる整数値を取る。 私たちは、と呼ばれる整数の配列を取る 値、そして我々はあることN取る 配列のサイズ。 右ここ行10、上、私が持っている シャープはをインクルードする。 それがあると、なぜ誰もが知っていますか? だから、このコード行は、何をするのでしょうか? 学生:それはあなたがすることができます BOOLの戻り値の型を使用します。 JASONハーシュホーン:その通りです。 学生:またはそれは可能にするライブラリの BOOLの戻り値の型を使用します。 JASONハーシュホーン:だからシャープは、 stdbool.hラインは私にいくつかを提供します 物事の定義と宣言 私が中に使用させていただくこと このライブラリ。 だから、それらの中があることを言っている このタイプのブールと呼ばれ、であることができる trueまたはfalse。 だから、その行が何をするかだ。 私はそのラインを持っていなかったなら、私はだろう これを書くためのトラブルに巻き込まれる 右ここで、BOOL、すぐそこに言葉。 まったく正しい。 だから私は、このコードでそれを必要とする。 [OK]をクリックします。 これは、再び、反復的である バージョンではなく、再帰的1。 だから私たちは、始めましょう。 のは、この第一から始めましょう 擬似コードの行。 うまくいけば、我々は意志 - かうまくいけば。 私たちは部屋の中を行くつもりです。 私たちは、行ごとに行くよ、と私は助ける あなたは私たちが必要とするラインを把握 最初に書き込みます。 そうしながら、リストの長さ ゼロよりも大きい。 前に起動してみましょう。 どのようなライン私が書く必要があります ここでは、コード内の? 学生:カッコながら nは0より大きい。 JASONハーシュホーンます。while nは0よりも大きい。 そうnは、リストのサイズです そして我々は、次の場合にチェックしている - [声を挟ん] JASONハーシュホーン: - 申し訳ありませんが? 学生:どのように我々は知っていますか nはリストのサイズですか? JASONハーシュホーン:申し訳ありません。 PSET仕様ごとに、検索 そして、あなたが書く必要がある関数を並べ替える nは、リストのサイズです。 私はここでそれを説明するのを忘れていました。 しかし、はい。 nはのサイズです この場合はリスト。 そのようにしながら、nは0より大きい。 [OK]をクリックします。 それは少し問題となるかもしれ しかし、物事が進んでいる場合。 我々は知っているしていきますので、 この全体リストのサイズ 機能しますが、我々が始めると言う 5整数の配列を持つ。 そして、我々は通過し、我々はしました 今、それを絞り込ん 2整数の配列。 それは2の整数である? サイズは、今我々がしたいことを2で を見て、それはその2です? それは、その質問に意味があるか? [OK]をクリックします。 私は再びそれを聞いてみよう。 だから我々は5のこの配列から始める 整数、nは5に等しいですよね? 私たちはここを実行することになるでしょう。 我々は、おそらくサイズを変更します、 物事が上に行くように、右。 これは我々が何をしたいと言うことです。 我々は検索しない フル事もう一度。 だから我々は2に変更し言う。 私たちは、奇妙な半リストを取る。 だから2を選択します。 だから今、N 2に等しい。 私は貧しい人々のために謝罪 乾燥消去マーカー。 右? そして、我々は、リストを検索している もう一度サイズ2のリスト。 さて、私たちの配列のサイズは5のままです。 我々は我々だけしたいとし その中に2スポットを検索します。 だから、その2点は、それらのでしょうか? それは理にかなっていますか? 彼らは左の2のスポットはありますか? 彼らは正しい2のスポットはありますか? 彼らは中央の2のスポットはありますか? 私たちは、問題を分解し、しかし、我々している 実際のどの部分がわからない 我々はまだ見ている問題、 ちょうどこれらの2つの変数を持つことによって。 だから我々は、その後、少し多くを必要とする nが0より大きいいる。 我々はどこにことを知っておく必要があり nは私たちの実際の配列である。 だから、誰もが持っているん この行に変更しますか? この行のほとんどはある 完全に正しい。 別の追加はありますか? 我々は、n個のために何かを入れ替えることができます この行は少し良くする? MM-HM? 学生:あなたは、変数を初期化することができます それから使用されますnまでの長さのような 後で関数内の? JASONハーシュホーン:だから初期化 nの可変長、 そして我々は、後でそれを使うのか? しかし、我々は単に長さと、私たちを更新 まだ我々この問題が発生し 我々の問題の長さを削減、 しかし、我々は、実際には、どこで知っていることはありません その長さは、上にマッピングされます。 学生:それが起こることを行っていない あなたが言っている後にすると、左の検索、 右検索? あなたが別のに行くつもりだ あなたの地域 - JASONハーシュホーン:私たちは行くつもりだ エリアに、しかし、どのように我々は知っている に行っているでしょうか? 私たちは、配列およびこれを持っている場合 N、どのように我々はを知っていますか 配列にアクセスしてください。 後ろに、はい? 学生:あなたが持っています、のように、下 と上限変数または そのような何か? JASONハーシュホーン:わかりました。 だから、これはもう一つのアイデアです。 というだけを追跡するよりも 大きさは、下部を追跡し、 上限の変数。 では、どのようにからサイズを計算か 下限と上限? [声を挟ん] JASONハーシュホーン:減算。 また下を追跡する バインドされ、上側の私たちが知っているようにバインドされ、 我々はこれら2を検索したい ここでは上で、これらの2を探していますか? 私たちは、真ん中の2を探していますか? なぜなら、2たぶん真ん中ではない これは、実際には、二分探索である。 しかし、今、我々はサイズを取得することができるでしょう、 しかし、アレイの限界。 基本的に、我々は我々の巨大なを持っている場合 電話帳、我々はそれを半分に裂く。 我々は今、どこにそれが小さい知って 電話帳である。 しかし、我々は実際にリッピングしていない 半分に電話帳。 我々はまだどこに知っておく必要があります 我々の問題の新たな境界がある。 誰もが疑問を持っていますか それはどうでしょうか? はい? 学生:それは作成することにより動作します 変数は、私は、あなたは、ちょうどシフトしていること そのへのIの位置 現在位置、および長さ、nは? JASONハーシュホーン:私は何ですか? 学生:私は一種のようなもののように - あなたは、私がために初期化するのと同じよう 配列の中央の位置。 そして、もし位置の値I IN に見つかったの配列の真ん中 私は今、あなたが必要とする値よりも小さく 配列の長さとなり、プラス iの値が2で割った。 同様に、参照して、あなたは私をシフト - JASONハーシュホーン:右。 学生: - 最大 - JASONハーシュホーン:だから私はほとんど午前 動作します正。 しかし、ポイントの幸福は、次の2つが必要です ここでの情報。 あなたは、最初と最後でそれを行うことができます またはあなたは、サイズでそれを行う、とすることができます いくつかのマーカー。 しかし、あなたは2枚必要ですか ここでの情報。 あなただけの1とすることによって得ることができません。 それは理にかなっていますか? だから我々は通過するつもりだ、と 私たちは、やろうとしている[聞こえない] といくつかのマーカーを作成します。 つまり、あなたのコード内でホワッドを書くのか? 学生:私はちょうど言ったINTバウンド 一方は0に等しい。 JASONハーシュホーン:レッツ·コール そのint型、始まる。 学生:わかりました。 JASONハーシュホーン:それが作る 私のためのより多くの意味。 と? 学生:私は終了INT、私は推測する、と述べた。 JASONハーシュホーン:エンディングint型。 学生:私は推測、Nマイナス1、 またはそのような何か。 同様に、最後の要素。 JASONハーシュホーン:だからあなたが書いた、INT イコール0、セミコロン、およびINT始まる エンディングは、nマイナス1、セミコロンに相当します。 ですから、基本的に、私たちは何をやっている ここで、第1の位置0。 我々は、配列に知っているように、彼らは行っていない Nまで、彼らはに上がるNマイナス1。 だから我々は我々の配列の一部の境界を持っている。 そして、これらの初期境界はあることが起こる 我々の問題の最初の境界です。 [OK]をクリックします。 だから、いいですね。 その後、我々は、戻って次の行に進みますしばらく リストの長さは、0よりも大きい 何をする代わりに、N、はず 我々はここに入れて? 学生:マイナス先頭を終了書き込みます。 JASONハーシュホーン:マイナスを終了する一方 始まりは0よりも大きい? [OK]をクリックします。 そして、我々は我々がしたい場合は、可能性 どのような、少しよりよいことを確認 他に私たちは何ができる? 私たちは、きれいにしたい場合 このコードまで少し? どのように我々は0を取り除くことができますか? これは単なるスタイルの問題です。 それが今、正しいです。 学生:エンディングません 等しい始まり? JASONハーシュホーン:私たちは何ができるのでしょうか? [声を挟ん] 学生:エンディングは大きい? JASONハーシュホーン:うん。 終了しながら、我々だけで行うことができます 初めよりも大きい。 右。 我々は他の側に始まっ追加 そのことを、私たちは0を処分した。 だから、これは単に見える 少しクリーナー。 [OK]をクリックします。 リストの長さが0である間そう、私たちは書いた つまり、エンディングが大きいながら 当初より。 私たちは、必要に置くつもりだ 中括弧してから、最初にすること 私たちがやりたいことを見ている 小さなリストに。 あなたは? あなたは私に与えることができます - 学生:もしカッコ 値の角括弧 - JASONハーシュホーン:括弧の場合 値の角括弧。 学生:2で割っ終了する。 JASONハーシュホーン:エンディング? 学生:私はあなたに問題があることを参照してください - JASONハーシュホーン:わかりました。 さて、中を見てみましょう。 どのように我々は真ん中が何であるかを知っていますか? うん。 だから私は、そのコードを削除してみましょう。 どのように我々は真ん中が何であるかを知っていますか? 何にでも、あなたは初めを持っているとき そして最後には、どのように見つけるのですか 真ん中? 学生:あなたが平均。 学生:あなたはそれらを追加 一緒にしてから - JASONハーシュホーン:それらを追加 一緒にしてから? 学生:そして、あなたは平均的。 2で割ります。 JASONハーシュホーン:それらを追加 一緒に2で割る。 だから、int型の中間に等しい? トムは、あなたが私にそれを与えることができますか? 学生:始まりプラス終わる - JASONハーシュホーン:ビギニング プラス終了。 学生:すべて、ブラケット、2で割った。 JASONハーシュホーン:すべて、()内の、 2で割った。 だから私に真ん中を与え 何の、正しいですか? 学生:あなたはまた、それを切り上げする必要があります。 JASONハーシュホーン:あなたは何をし 意味、私はそれを切り上げする必要がありますか? [声を挟ん] 学生:ので、それは奇妙だ場合は、 数が、それはのようなものだ - JASONハーシュホーン:そうですね。 だから私はそれを切り上げ可能性があります。 それが奇数で、5の場合しかし、私がすることができます 離れて真ん中から1を取る。 あるいはそれが偶数なら、むしろ、 それは、より良いケースだ。 それが4なら、我々は唯一の4を持って、私が取ることができます 最初の「中」、引用、引用終わりか 第二の「中」1。 どちらかが二分探索のために働くだろう、 私は実際にそれを丸める必要はありません。 しかし、1他の事は私はそこにある この行を調べる必要があります。 私たちは、まだそれを実現しない可能性があります しかし、我々はそれに戻ってくる。 実際にはまだこの行理由 1他の事を必要とします。 しかし、これまでのところ、私たちは書いてきた 4行のコード。 我々は我々の始まりを持っている マーカーを終了する。 私たちは、マップする私たちのwhileループを持っている 直接私たちの擬似コードの上。 我々は、地図真ん中を見ている 直接私たちの擬似コードの上に。 私はこれが真ん中に行くと言うでしょう リストの、次のコード行。 そして、かつて私たちはの真ん中に行く リスト、我々がする必要がある次の事 私たちの価値がそこにあるかどうかを確認されている 先ほど書いた擬似コード。 私たちの価値のであれば、どのようにチェックしますか リストの中間にある? あなた。 なぜあなたはこれをしないのですか? 学生:私たちの価値のであれば 中央に等しい 我々はどのような設定 - 私は、に等しい等しい平均 - JASONハーシュホーン:それ - [OK]をクリックします。 学生:私は何か分からない 我々は見ている変数 しかしのために、ためである - [声を挟ん] 学生:[聞こえない]。 JASONハーシュホーン:その通りです。 関数の宣言ごとに、 我々は価値を探しています。 だから我々は価値を探している 値の配列中。 だから、正確に正しいです。 あなた致します、もしオープン括弧値ブラケット 真ん中は、ブラケット等号を閉じた 内部そこに価値に等しく、 我々は何をすべきかが必要なのですか? もし私たちの価値のあり、どのような 私たちが行う必要があるのですか? [声を挟ん] 学生:ゼロでない値を返します。 JASONハーシュホーン:trueを返します。 学生:trueを返します。 JASONハーシュホーン:マイケル、 この行は何をするのでしょうか? 学生:[聞こえない]プログラムが実行された そのコースは、それが終わり、 あなたは何をする必要があるかね? JASONハーシュホーン:プログラムまたは何? この場合は? 学生:機能。 JASONハーシュホーン:機能。 だから、と呼ばれる何でもして戻る それそれに真の価値を与える。 まったく正しい。 メイン。 戻り値の型は何ですか メインの、マイケル? 学生:int型の整数? JASONハーシュホーン:INT、正確に。 整数。 つまり、確実にするだけで問題だった あなたたちはその上にあった。 それは通常ならば、何を返さない すべての物事はうまく働いている? 学生:ゼロ。 JASONハーシュホーン:ゼロ。 まったく正しい。 学生:これは単なるtrueを返した場合、 与えられている情報はありません 何について - ああ、これはちょうどそのことを言っている 値は、配列の中にあります。 JASONハーシュホーン:その通りです。 このプログラムは、情報を提供されていません 正確に値がどこにあるの。 それだけで、はい、我々が発見し、言っている それか、いや、我々はそれを見つけることができませんでした。 数が見つかったのであれば、trueを返す。 さて、実際に私たちは本当にそれをした すぐにそのコード1行で。 だから私は擬似コードのその行を移動します。 学生:我々は必要としないでください 配列を変更するには? それは右、値、値ではなくすべきですか? JASONハーシュホーン:申し訳ありません。 ありがとう。 学生:うん。 JASONハーシュホーン:この行 値でなければなりません。 まったく正しい。 [OK]をクリックします。 だから我々は、中央のリストを見てきました。 番号が見つかった場合にtrueを返します。 あれば、私たちの擬似コードでログオンし続けて 真ん中が大きい、検索は左 もしそうであれば、私は、ここに持っていた数 高いほど、探索は残しました。 コンスタンティンは、あなたが与えることができます 私のコード行? 学生:真ん中の値の場合 - JASONハーシュホーン:そうであれば値 - オープン括弧値ブラケットの場合 真ん中近くにブラケット - 学生:値よりも小さい? JASONハーシュホーンは:未満です。 学生:値を下回る。 JASONハーシュホーン:値。 さて、実際に、あなたがしたい 数かどうかを確認する - 申し訳ありません。 これは少し混乱しています。 しかし、他の場合の数値 リストの中間に大きい。 学生:ああ、[OK]をクリックします。 JASONハーシュホーン:私はそれを変更します。 真ん中が高ければ、我々は、他の [OK]を、左の検索したい? そして、我々は内部で何をしますか この状態であれば? 学生:私は、小さな変更を加えることができます 場合、条件は、他にそれを変更しますか? JASONハーシュホーン:他の場合? [OK]をクリックします。 ので、このコードが実行されます ほぼ同じ。 しかし、そうでなければ、あれば使用しての良いところ 、もし場合や、他の他の場合、そうでない場合 それらの一方のみに起こっていることを意味する チェックすることがなく、それらのすべて3、 潜在的に。 そして、それはそれは少しできます のコンピュータ上でよりよい プログラムを実行している。 ので、[?コンスタンティン、?] 我々は、値があればそれ以外は、この行の中にいる ブラケット中央の閉じ括弧 値よりも大きい。 私たちがしなければならないのですか? 我々は左に検索する必要があります。 我々はそれをどのように行うのですか? 私はあなたのスタートを与えるつもりだ。 我々はと呼ばれるこれらの二つのことを持っている 開始と終了。 だから何が起こる必要がある 先頭に? あなたは左側を検索する場合 リストは、我々の現在の先頭を取得します。 我々はそれを行うには何が必要ですか? 学生:私たちは、初めに設定 中央に1を加えた。 JASONハーシュホーン:だから我々はしている場合 左をお探しですか? 学生:申し訳ありませんが、中間のマイナス - その結末は真ん中になります マイナス1と始まり - JASONハーシュホーン:そして、何 最初はどうなるのでしょうか? 学生:それは同じまま。 JASONハーシュホーン:だから 意味は同じまま。 我々は左を検索している場合は、している 同じ先頭を使用して - まったく正しい。 と終了? 申し訳ありませんが、何をしていますか 再び等しい終わる? 学生:ミドルマイナス1。 JASONハーシュホーン:中東マイナス1。 今、なぜマイナス1、中だけではなく? 学生:真ん中から外れている 絵はすでに、我々が持っていたので、 それがだと確認さ? JASONハーシュホーン:それです。 まったく正しい。 真ん中は絵の外にある。 我々はすでに中央をチェックした。 だから我々は「ミドル」、引用したくない であり続けるためには、引用終わり 我々は見ている配列。 だから、これは素晴らしいです。 それ以外の値ブラケット中央が大きい場合 等号を終了値よりも 真ん中のマイナス1。 ジェフ、どのようなこの最後の行はどうでしょうか? 学生:そうで。 値の中間の値よりも小さい? JASONハーシュホーン:私たちは、よ あなたは他に私を与えている。 あなたが私を与えていないのであれば - 学生:それでは始め 真ん中のプラス1になります。 JASONハーシュホーン:開始等号 同じもののため、もう一度真ん中に1を加え、 理由そのコンスタンティン 以前の私たちに与えた。 そして最後に、誰が与えられていません 私はまだコードの行? falseを返し、Aleha、どのような 我々はここに書きますか? 学生:falseを返します。 JASONハーシュホーン:falseを返します。 そして、我々は、それを行う必要があるためであれば、私たち それを見つけることはありません、我々は我々を言う必要がある それを見つけることができませんでした。 そして、我々は我々が戻ってするつもりだと述べ BOOLので、我々は間違いなく返す必要が ブールどこか。 それでは、このコードを実行してみましょう。 私は実際に行くよ - 私たちは、ターミナルにいる。 我々は我々のウィンドウをクリアします。 のすべてを作成してみましょう。 私たちは、1エラーがあるとわかった。 期待15行目にエラーがあります の末尾にセミコロン 宣言。 だから私は何を忘れてしまいましたか? 学生:セミコロン。 JASONハーシュホーン:セミコロン ちょうどここまで。 私はトムのコードだったと思います。 そうトム、[聞こえない]。 ほんの冗談です。 のすべてを再び確認してみましょう。 学生:何Dropboxのディレクトリ 我々はこのためにあるべき? JASONハーシュホーン:だからあなたができる ただ、このビットを監視します。 しかし、再び、あなたはこれを移動したい場合 試してみてくださいpset3ディレクトリにコード それ外、それは私がやったことだ。 ここで気づく場合 - 申し訳ありませんが、良い質問。 [? LS、?] 私はここで持っているfind.cコード 今週のディストリビューションのコードから。 私はHelpers.hにしています。 私は実際にメイクファイルを持っている これらの新しいが含まれるように少し編集した 私たちが書いているファイル。 そのコードのすべては、利用できませんになります 流通コードが、新しい ファイルを作成し、新しいHelpers.hにファイル意志 ダウンロードするオンラインで利用可能であること。 繰り返しますが、そのものがある 余分なコードは、我々は持っている。 したがって、すべての確認は、この行ごとに、見つけるなり、 バイナリ、バブルの選択 - のmake それらのすべての3とにコンパイル この実行可能コードを検索します。 だから一般的に、我々はしたくない check50にまっすぐに。 我々は我々自身にいくつかのテストを実行したい。 しかし、単に私たちは、このビットを促進することができます check50 2013 pset3.findが通過します 私の悪い - helpers.cイン。 私は今それを持っていません。 だから我々は、実際にするつもりだ 実際にコードを実行します。 Usage.find /、あなたはそれが何を意味するか知っていますか? 学生:あなたは秒を必要とする これでコマンドライン。 JASONハーシュホーン:私が必要とする 目のコマンドライン。 と仕様ごとに、私が必要とする 私たちが探しているものを入力します。 それでは、42のために見てみましょう。 私たちので、私たちは、ソートされたでそれをしておこう まだソート機能を書いていない - 42、43、44。 ·制御Dは見つけられませんでした 干し草の山の中の針。 そりゃまずい。 それは間違いなくあります。 それでは何か他のものを試してみましょう。 私が置くので、多分それはだ 先頭に。 それでは41、42、43をやってみましょう。 そこに私達は行く。 それは、それを発見した。 それでは、最後にそれを入れさせ、ただ 私たちは徹底的にすることができます - 40、41、42。 針を見つけられませんでした。 だから私はこの先に言及した。 残念ながら、私はこれを知っていた 起きようとした。 しかし、教育的な目的のために、 それを探るために良いことだ。 それは動作しません。 何らかの理由で、それはそれを見つけることができません。 我々はそこに何があるか知っているが、 我々はそれを見つけることはありません。 私たちは何ができる一つのことは通過している それを見つけるために、GDBが、誰にもないので、 GDBを経由せずに、持っている 我々はめちゃくちゃにどこ感? [? MADU? ?] 学生:私はそれが終了する可能性がある場合と思います 初めに等しく、それはだ ただ1要素のリスト。 それはだけではなく、それを無視します 実際にそれをチェックする。 JASONハーシュホーン:それです。 まったく正しい。 結末は初めに等しいとき、私たちは何 まだ我々のリストの要素を持っている? 学生:はい。 JASONハーシュホーン:はい、実際には、我々 1つだけの要素を持っている。 そして、それは最も可能性が高い場合に発生します、 我々はテストされたコードごとに、我々はである 干し草の山の、またはフロント· 干し草の山の終わり。 始まると場所です エンディングは等しいとしている 二分探索で1、。 ので、これらの2例では、動作しませんでした、 終わるためには、初めに等しかった。 しかし、終了した場合は、最初に等しく、 このwhileループが実行されません? それはしていません。 そして、我々はチェックしている可能性が その再びGDBを通して。 では、どのように、このコードを修正することができますので、 終了ながらに等しい場合 から始めて、我々はまた、これが欲しい ループの実行にしている。 だから我々は18行目に何を修正することができますか? 学生:[聞こえない]大きい イコール。 JASONハーシュホーン:まったく正しい。 終了しながら、より大きくなる または初めに等しい。 だから今、我々はそれを得るようにしてください 最後にコーナーケース。 と見てみましょう。 のは、この1のより多くの時間を実行してみましょう。 のすべてを作ってみましょう。 もう一度、あなただけの必要があるでしょう ここで一緒に従う。 41この時間を見つける。 ただそれは、一貫性の維持。 42を見つける。 それでは初めにそれを置くことができます - 42、43、44。 我々はそれを発見した。 だから、実際に変更した 我々は確認する必要がありました。 それは我々のコーディングがたくさんいた ただ、二分探索しました。 誰もが前にご質問があるん 私は、私たちが書いた行に移る 二分探索またはどのように私たちが考え出し 我々は理解しました何を? 先に進む前に、私も指すようにしたい その分、大型うち、我々は、マッピングされた 私たちの擬似コード1に 私たちのコードの上に1。 我々は、トリッキーなことをしなければならなかった で把握する 開始と終了。 しかし、あなたはあなたが、それを考え出していなかった ほとんど書かれていた 同一のコードでは、保存 これらの最初の2行。 そして、あなたは時に実現しているだろう あなたがチェックし、場合によってはそれを作ったこと あなたが何か他のものを必要としています。 だから、あなたが私たちに従っていた場合でも、 ラインへの擬似コード行は、きになる の2行が、すべて得 あなたが書くために必要なコード。 そして、私はあなたたちことを賭けることをいとわないだろう すべてのことを考え出しただろう かなり迅速に、あなたが置くために必要なこと 図のようにそこにあるマーカーのいくつかの並べ替え あなたがいた場所が不足しています。 それを再度、行うための電源である 事前に擬似コード。 だから我々は、最初のロジックを実行すると、することができます 我々は、構文を心配することができます。 我々はロジックについて混乱していた C言語でこのコードを記述しようとしながら、 我々はすべて台無しに得ているだろう。 そして、我々は約質問をすると思います ロジックと構文とメッシュ生成 一緒にそれらをすべて。 そして、我々は失われた得ているだろう 迅速になることができるものを中 非常に難しい問題。 それでは、これから移動してみましょう 選択ソートする。 我々は左の20分を持っています。 だから私は、私たちがすることはできません感じている 選択ソートのすべてを取得する そしてバブルソート。 しかし、私たちは、少なくとも試みてみましょう 選択ソートを終了します。 だから、使用して選択ソートを実装 関数宣言を次に示します。 再度、これはから取られ 問題は、仕様を設定してください。 int型の値、カッコです 整数の配列。 そしてint.nはその配列のサイズです。 選択ソートが起こっている この配列をソートするために。 選択の私達のメンタルモデルごとにそう ソートは、プル - まず、リストを最初に行く 時間は、最小の番号を見つける、 初めにそれを置く、二を見つける 最小数は、に入れて 我々がしたい場合は、2番目の位置 昇順で並べ替え。 私は、あなたが書くことが強制されないよ 今の擬似コード。 しかし、我々は、クラスのようなコードを実行する前に、 5分、我々は、書き込みしようとしている 擬似コードので、我々はいくつかの意味を持っている のどこに行っている。 だから、擬似コードを書き込もう 自分で。 して、それをオンしよう コー​​ドに擬似コード。 我々はグループとしてそれを行います 5分ぐらいのところにあります。 そしてもちろん、私に知らせた場合 何か質問があります。 学生:それですか? JASONハーシュホーン:どこまで参照してください 2分以上に得ることができます。 私はあなたがいないでしょう理解 終えることができるように。 しかし、我々はグループとして、この上に行くでしょう。 あなたはすべての[聞こえない]のでコーディングしているので、私はよ 何をやっているポーズは残念。 しかし、ここでは、グループとして、この通ししています。 そして再び、バイナリサーチは、あなたのすべてを与える コー​​ドの行以上ではないなら、私1。 そのしていただきありがとうございます。 私たちは同じことをやろうとしている ここでは、グループとして一緒にコーディングします。 だから、選択ソート - それでは書いてみましょう いくつかの簡単な擬似コード。 メンタルモデルごとに、誰かが私を与えることができます 擬似コードの最初の行、してください? 私は何をしたいのですか? 学生:ながらリスト 故障している。 JASONハーシュホーン:OK、しばらく リストには、故障している。 そして、あなたは「順不同? "何を意味するのか 学生:ながら[聞こえない] ソートされていません。 JASONハーシュホーンます。whileリスト 故障している、我々は何をしますか? 私に二行目を付け、 マーカスでお願いします。 学生:だから次を検索 最小数。 これはインデントされます。 JASONハーシュホーン:だから見つける 次の最小数。 して、他の誰か? 我々は次に小さいが見つかったら 数、我々は何をしますか? 私が見つけると言うつもりです 最小数。 それは我々が何をしたいのです。 だから、最小の番号を見つける。 その後、我々は何をしますか? 学生:[聞こえない]先頭に。 JASONハーシュホーン:申し訳ありませんが? 学生:それを置きます リストの先頭。 JASONハーシュホーン:だからに入れてください リストの先頭。 そして、私たちはものに何をしますか それが始まりだった リストの、右? 私たちは、何かを上書きしています。 だからここで我々はそれを置くのですか? ええ、アンナ? 学生:最小 数がでしたか? JASONハーシュホーン:だから始まりを置く ここで、リストの 最小の数があった。 リストには、故障しているので、一方、見つける 最小数、に入れてください リストの先頭には、置く ここで、リストの先頭 最小の数があった。 マーカス、この行を言い換えることができます リストには、故障している間に? 学生:数字ながら ソートされていない? JASONハーシュホーン:OK、そうするためには 番号がなかったことを知っている 並べ替え、私たちは何をする必要がありますか? 我々は、どれだけの必要なのですか このリストを行く? 学生:だから私は、forループを推測したり、 一方、番号がチェックながら以下である リストの長さよりも? JASONハーシュホーン:OK、それはいいですね。 私はmisphrased思う 私の質問が不十分。 私はただで取得しようとしていた 私達は行く必要があるとしている リスト全体を通して。 リストには、故障している最中に、 私のために、上の地図のは難しいです。 しかし、基本的に、それは方法です 私はこれを考えてみてください。 見つけ、リスト全体を経る 最小数、に入れてください 始まる - 実際に、あなたは正しい。 それでは、それらの両方を入れてみましょう。 リストには、故障しているので、一方、私たち リスト全体を通過する必要が 一度、最小数、場所を見つける そのリストの先頭に、置く どこで、リストの先頭 場合は、最小の数は、その後で、 リストには、私たちがした、故障してまだある この経るようになった プロセスを再度、右? だからこそ、選択ソート、ビッグオーランタイムの 選択ソートのは、誰? 学生:N乗。 JASONハーシュホーン:N乗。 マーカスと私は実現好きだから ここでは、する必要があるとしている リスト一覧を経る 回数。 そうのようなものを経由 長さnのn回の数 実際には、n乗。 だから、これは私たちの擬似コードである。 これは非常によさそうだ。 誰もが疑問を持っていますか 擬似コードはどうでしょうか? 実際に選択ソートがなければならないので おそらく、1からコードを1に来る 擬似コード。 そんなにご質問 擬似コードのロジック? 今すぐお問い合わせください。 選択ソート - リストが出ている間 オーダー、我々はそれを通過しようとしている 最小毎回見つける そして前に置きます。 リストには、故障している最中に、することができます 誰かが私に誰がそのコード行を与える 私にラインを与えていません してください、まだコードの? それは何のように聞こえる? 学生:それはforループです。 JASONハーシュホーン:それが鳴ります forループのような。 [OK]を、あなたは私に、forループを与えることができますか? のための - 学生:私は0に等しくなります。 JASONハーシュホーン:iまたは - 我々は何が不足している? 何が右ここに? 学生:INT。 JASONハーシュホーン:その通りです。 (I = 0 int型; - 学生:私はN <; I + +)。 JASONハーシュホーン:ジェフ、それを釘付け。 我々は正しい、リストをつもりだ? 我々は前にそのコードを見てきました。 完璧。 それでは、ここで我々の中括弧を入れてみましょう。 私はいくつかを置くつもりだ ここに中括弧。 それは0ですながらそこで、我々は行く必要がある リスト全体を通して。 我々はリストを介して進行ので、各時間 私たちは、追跡するために何をしたいですか? 学生:任意のスワップが行われた場合。 JASONハーシュホーン:見つける 最小数。 だから我々は、おそらくを追跡する必要があります 最小数毎回。 だから、私はラインを把握するために行うことができます 最小数の? Aleha、どのように維持することができます 何かのトラック? 学生:新しい変数を起動します。 JASONハーシュホーン:新しい変数を起動します。 それでは、変数を作成してみましょう。 どのタイプ? 学生:INT。 JASONハーシュホーン:INT。 の最小と呼ぶことにしましょう​​。 いつ、それは何と等しくない 私達はちょうど出始めている? 我々はまだリストを行っていない。 私たちは、最初の部分にいる を通して私たちの最初の時間を示します。 それが等しい何を、 最小数? 学生:値I。 JASONハーシュホーン:値I。 その通り、正確に右に聞こえる? 先頭の最小数 私たちがどこにいるかである。 だから今我々は我々の最小を持っており、我々は必要とする リスト全体を通過して、 この最小の比較 他のすべての。 だから我々は再びリストを行くのですか? マイケル? 学生:あなたが作る必要がある ループのための別の。 JASONハーシュホーン:ループのもう一つ。 やってみましょう。 私にいくつかのコードを与える。 学生:Forループ - 最小のための - ちょうどあなたが言うことができ、J int型? = 0;よう - JASONハーシュホーン:まあ、私たちが望む場合は、 リスト全体を通過するために - 学生:J