[Powered by Google Translate] [第3項] [あまり快適]
>> [ネイトHardison] [ハーバード大学]
>> [これはCS50です。] [CS50.TV]
>> すべての権利は​​、始めましょう。
CS50の4週目へようこそ。
君たちは、Webブラウザを開いて、PSET 3を開くと、
CS50とスクランブル、我々は行く開始するつもりだ
そこに質問のセクションを通る。
ちょうど先週のように、我々は、CS50 Spacesでの作業になります
あなたも同様にそれを引き上げてあげるなら、
そしてあなたが先に行くと、私がトップでここまで持っていることは、このリンクを訪問した場合。
それが始める時です。
私たちはここで私たちの小さなハイテクのプログラムを持っている。クレイジー何もない。
私は今日皆さんに最初にしたいことの一つは、いくつかの解決策を越えるです
問題セット1、例ソリューションの種類に
ちょうどそうあなたが書いているコードのスタッフのどのような種類の感触を得ることができます
コー​​ドは、他の学生の種類が書いているのか、
私はそれは奇妙なことだと知っているので、持っているあなたはそれを見てみましょう
あなたは、問題のセットに解決策を提出して、コメントを取得するとき
独自のバージョンで、時にはそれが、他の人がやった方法を参照すると便利です
見ていいです特にもの。
ほとんどの部分については、私は本当にあなたたちが製作したソリューションに感銘を受けました。
、私はまだあなたの問題セット2Sを見始めていませんが、彼らは最初のようなものなら
それは何も良いことを意味しません。
>> あなたは私のリビジョンを見れば、リビジョン1にすべての方法を開始してみましょう、
そして我々はマリオ·ソリューションを簡単に見ていくつもりです。
このプルアップした場合、我々が提示しようとしているこれらのプログラムが正しいことを確認します。
、そこにこれらの問題を持つ正当性の問題はありませんでしたが、むしろ
我々はさまざまな設計上の問題について少しお話したいと思います
その方法はここでは使用されていた。
ソリューションについて興味深かったことの一つ
、それは定義ポンドと呼ばれるこの新しい構文を使用したことである
時にはまた、ハッシュは定義と呼ばれます。
私はここでそれにズームインすることができます。
＃defineをあなたのプログラムにこれらの番号に名前を付けることができます。
マリオのピラミッドのこのケースでは、最大の高さ
23というよりは、私には23を入れていたコード
我々は、ハードコーディング23としてその参照することになり -
代わりに、これは、その数に名前MAX_HEIGHTを与える
ので、ダウンここに私の中でdo-whil​​eループ
あなたが実際にMAX_HEIGHTを参照することができます
数字の代わりに23インチ入れて
[学生]ということの利点は何ですか？
それは素晴らしい質問です。
一つは、読みやすさです。
これは＃defineを使用することの利点は、読みやすさです。
私はこのコードを読んでいるとき、私は何が起こっているかを見ることができます。
>> 私は我々がテストしていることをここでは、この状態で見ることができます
高さのため、我々はまた、定義されている可能性が<0であること
高さの最小値または最小の高さであること。
他の利点は、私がして見て行の残りの部分を読むことができるということです
我々はまた、高さが最大高さを超えていないことを確認するためにチェックしていること
私たちは高さが最大高さよりも大きいながら続けていくつもりですので。
他の利点は、場合、私は少しズームアウトヒア
私はこのプログラムを実行し、私は、今23と、言って、それを実行する場合
それはちょうどそのように、すべての23行を出力します。
しかし、私は最大の高さを変更したいとしよう。
そして今、私はピラミッドの高さの最大値を制限したい
ファンキーだっただけと言う人で、することができます。
＃を含む、＃、MAX_HEIGHT定義
としてみましょう、我々は10に等しいそれを設定したいとしましょう​​。
今、この時点で、私がしなければならなかったすべてはこの1場所でそれを変更しました。
私は、コードを再コンパイルして、今私がしようとした場合、12を入力することができます
それが再び私を求めるプロンプトが表示されます。
この場合において、我々は一度だけMAX_HEIGHTを使用しています。
それはに行く手間の大ではありません
あなたがする必要がある場合、whileループでそれを変更してください。
しかし、あなたが同じマジックナンバーを参照しているプログラムで
何度も何度も、これは＃メカニズムを定義すると、本当に便利です
あなただけの一番上にそれを1つの時刻を変更するためのファイル、それはあなたがそれらをどこに置いたか、典型的だ
及び変更は、ファイルの残りの部分を通って浸透し。
>> 私は思った、この割当てに注意したかった他のものは、本当にいい感じ
1は、変数の命名だった。
あなたは、私たちは、行と高さと呼ばれるいわゆる整数型の変数を持っていることはここを参照してください。
スペース、ハッシュ、それは、コードがもう少し読みやすく
実際に何が起こっているのか、もう少し理解ができます。
これは、使用して対照的である、ランダムな文字列になって言う
完全にまたは単に無意味な言葉。
私が指摘しておき最終的なものでは、forループ内のことです
しばしば、これらの反復子変数は、forループを自分で使用するこれらのカウンタ、
それは私、次に次にjとkのいずれかでそれらを開始するために、標準と従来の
そしてあなたがより多くの変数が必要な場合は、そこから上に行く、
そして、これはただの慣習です。
規則がたくさんあり​​ます。
それはあなたが使用しているプログラミング言語に依存します。
しかし、C言語では、我々は通常、Iで始まる。
それは、aまたはbと言う、使用しても意味がありません
状況に応じて。
それはこの1つのことです。
あなたは今リビジョン2をプルアップした場合は、別のマリオが表示されます
そしてこの1つは、我々だけで見たことを他のものと似ています
それはクールなの何か一種を行います。
我々は、内側のforループの内側で右ここにこのセクションを見れば、
彼らは右のこの行で、ここでいくつかのクレイジー探しの構文を使用しています。
これは、三項演算子と呼ばれています。
それは1つの行に凝縮IF ELSEステートメントです。
条件は括弧内のこの部分です。
I - 1 - それは、j <高さと言っている場合と同等です。
し、その内容ブロックがあるならば、スペースは何です
そして次に何か他の内容は、＃このアールであろう。
それは本質的には、この変数に領域を割り当てている。
それは、ブロック変数の内容にスペースを入れている
この条件が満たされた場合、条件が満たされない場合は、
その後ブロック変数は＃これを取得します。
そして、もちろん、その代わりに、文字列全体を造り上げる
時と終了時にすべてのものをプリントアウトし、このソリューションでは、一度に1つの文字を、それをプリントアウトします。
かなりクール。
>> 見て物事の別のカップル。私たちは、貪欲へと移っていきます。
今、私たちは、貪欲、この最初の解を見れば
＃かなりの定義これらを使用しています。
我々は、このプログラムでは異なる番号ごとに定義された定数1を持っている。
我々は、ドル当たり1セントのため、四半期、ダイム、ニッケル、そしてペニーのための1つを持っている
そして今我々は、下にスクロールしてコードを読み取る場合
我々は、標準は、do-whil​​eループの印刷すべてを見ることができます。
この問題の核心の種類があることを実現しました
あなたは整数にユーザからで読んだフロートを変換するために必要な
正確に計算を行う、これがためであるために
浮動小数点数を持つ、我々は簡単に講義で話しように、
それは正確に数直線上のすべての単一値を表すことはできません
3の間と言う、多くの値が3.1であっても無限に存在するからである。
あなたは、3.01と3.001と3.0001を持つことができ、あなたは続けることができます。
あなたがお金で作業しているときはいつも、それは結局のところ、あなたは、多くの場合、それを変換したい
整数フォーマットになるようにあなたは小銭やもののようなものを失っていない。
ことをやって、丸め処理が鍵であった。
このソリューションは、完全に単純な、偉大なアルゴリズムを使用
これは、第1四半期では、残りのセントの数をデクリメント
次にダイムで、その後硬貨によって、その後ペニーによって、
とコインの数に毎回追加。
>> 私はズームアウトしてリビジョン4に行くと我々は、表示されますことを、別の解決策、
非常に類似し始めていたが、代わりにdivとmodを使用
右こっちセントの数を計算することができます。
これは、四半期の数は、25で割ったセントの数に等しくなります
我々は整数の除算をやっているので、これが動作する理由は、ある
ので、それはすべて破棄し、残りです。
[学生]我々は、検索をコメントする必要がありますか？
それは本当に異なります。
[学生]あなたはちょうどここにコードよりもコメントしている。
うん、そう、これに哲学を変えるの束があります。
私の個人的な哲学は、あなたのコードは本当に真実であるということです
あなたのコードのように、実際にコンピュータ上で実行されるものです
ので、あなたのコードは、多くのコメントとして必要としないためにできるだけ読み取り可能でなければなりません。
あなたが数学的にトリッキーなの一種であることをやっているときに、そうは言っても
あなたができるように、またはアルゴリズム、それはそれらのコメントは良いことだ
あなたのコードを読んでいる人には誰に余分な次元、余分なレイヤを追加します。
これらのソリューションには、多くの場合、それらは、より重く理由だけでコメントアウトされています
我々はそれらを配布できるようにしたいと人々がそれらをピックアップしている
とかなり簡単にそれらを読んでください。
しかし、間違いなく、私はこれが重いということに同意するだろう。
[学生]しかし、疑問がある場合は、重い行くとき？
疑問がある場合は、重い行く。
一部の人々は時々、戻り0またはそのような何かを言うだろう。
私はばかげたコメントだと思う。
明らかにすることは、何が起こっているかだ。
私は私をことを伝えるために英語は必要ありません。
時には人々のようなものを書きます "kthxbaiを！"
それがかわいいのようなものだが、また非
それはコメントのポイントかどうかの違いを作ることはない。
これらの種類のコメントがちょうどヘクタール、ヘクタールです。
クール。
>> この時点で、質問の3セクションを設定して問題に取り組んでみましょう。
君たちは再びこれをプルアップした場合、
先週と同じように、私たちはこのセクションでショートパンツを見に行くわけではありません。
私たちは、あなたたちは自分の時間にそれをやらせると質問について話します。
しかし今、このセクションで、私たちは少しより多くの時間を過ごすつもりだ
コー​​ディングの基礎未満の話
我々は先週やったように、その代わりに、我々はに集中するつもりだ
理論のもう少しなので、二分探索の話をしてから、並べ替え。
講義と一緒に従ってきたあなたの人々から、
誰かが私に違いはあるものの要約を与えることができます
二分探索と線形探索の間に？
どうなってるの？かしこまりました。
ソートされたリスト内のすべての要素を通して線形探索検索
一つ一つによって一つずつ、
とバイナリ検索では、2つのグループにリストを分割
チェックあなたが探していることをキー値より大きいか、または中間値未満である場合
あなただけの発見、そしてそれはより小さいなら、それは下のリストに行くこと
そして、その後、再び、同じ機能を行うことを分割
ずっとダウンして値自体に等しくなるように中間点を見つけるまで。
右。
>> なぜ我々は気にしない？
なぜ我々はバイナリ検索対線形探索について話しますか？
うん。
バイナリは、問題のサイズを倍にそうだとすれば、はるかに高速である
それはもう一歩ではなく、倍の数をとります。
その通りです。
それは素晴らしい答えだ。
線形探索は非常に多く、一度に1つの要素をチェックしている
そして我々は講演の非常に最初の日に見たように
ダビデは、電話帳の例を挙げて行ったとき
と一度電話帳の1ページをごリッピング
と、何度も何度も何度もそれをやり続け
それは、彼に電話帳の誰かを見つけるには本当に長い時間がかかるために起こっている
もちろん、しない限り、彼はアルファベットの冒頭に誰かを探していました。
バイナリ検索を使用すると、かなり速く行くことができます
そしてそれはちょうど2倍の速または3倍速いか4倍の速さほどではありません。
しかし、問題はより小さく、より小さく、より速くはるかに小さくなります。
これを説明するために、我々は何が起こっているかについて話し始めるよ
我々はバイナリサーチを書くとき。
当面の問題は、私は数字の配列を持っている場合ということです
発言、1、2、3、5、7、23、45、78、12323、
それ以降0のトンと、その後9日
中に何があるか、私たちは本当に迅速に把握することができるようにしたい
この数値の配列。
私は、これはちょっとアホと少し不自然なようだ知っている
今それがあるためです。
我々は、その中に非常に多くの要素を持っていない配列を持っている
と私はあなたのいずれかを頼むかどうかを把握するかどうか
23が配列されている、あなたはかなり迅速にそれを行うことができる
ただこれをちらっと見てと、yesまたはnoを私に言っていないで。
これがあったかを検討するために、アナログは、言う、想像されている
10,000行、20,000行を使用してExcelスプレッドシート。
もちろん、あなたがコマンドFまたはコントロールFを実行して、何かを調べることができます。
また、フィルタと検索のものを使用することができます
しかし、あなたはライン毎にすることによって、そのファイルの行に目を通す必要があった場合、
それはそれを見つけるためにあなたに長い時間がかかるだろう。
それは、あまりにも、電話帳の例のような種類の場所だ
誰もが一度電話帳1ページに目を通していません。
通常、これらは、中央にそれを開くか
または電話帳や辞書の多くの場合には
あなたが実際にそれは、最初の文字をキーにしています
あなたはその最初の文字を反転させると開いて、そこを通過し始める。
>> もう一度お名前を思い出します。>>サムが。
サム。
サムが言ったように、その線形探索プロセスは、非常に遅くなるだろう
そして代わりに、バイナリ検索で、この作品の方法は、つまり
我々は探索アルゴリズムの繰り返しで行くたびに、
我々は、本質的に、半分にリストを分割するつもりだ
2、小さいリストに。
そして、ループの次の反復では、我々は再びそれを分割します
他の小さいリストに。
あなたが見ることができるように、問題は小さくなり続け
私たちは、毎回リストの破棄半分を保つためです。
これはどのように作業を破棄しますか？
我々はコンピュータだったらちょうどメモとして、私たちは何やろうとしている
そして我々は、このリスト内の5番を探して、言うた
私たちは真ん中の数字を選ぶだろうということです。
このリストの途中で、1、2、3、4、5、6、7、8、9、10の数字は、あるので、
我々は、第四の位置または5位のいずれかで数字を選ぶだろう
そして私達は私達のリストの中間という呼びたい。
途中で数字を選ぶ。
その数が等しい場合はその後、サムが言ったように、我々は見てテストします
我々が取得したい番号または私達の希望の番号に変更します。
それは平等だなら、私たちはそれを見つけた。我々は勝つ。
それが等しくない場合は、例がいくつかあります。
2例はいずれかである数は、我々が見ている数よりも大きくなければならない、
またはそれはより小さいです。
それがより大きいのであれば、我々は右に移動します。
それが少ないのなら、私達は左に移動します。
そして、我々は再び、全体のプロセスを繰り返す
右半分またはリストの左半分のどちらかで。
>> 今日のセクションの最初の問題は把握することです
どのように我々は、実際にはCコードでこれを表現するために始めることができます。
我々はここで擬似コードを持っている。
である我々がやって始めましょう私は、真新しい空間を引き上げます
私たちは後でこれらのノートを持っているように、このリビジョンを保存
我々は、このすべてを削除してから、コピーして、問題セットから貼り付けます
私達のスペースにこの情報が、うまくいけば、これはブレークしません。
パーフェクト。
あなたたちはすべてのことを行う場合、あなたの新しい空間にこのコードをコピーして貼り付ける
空白の1に。
ダニエルを試してみましょう。あなたがこのプログラムをコンパイルして実行する場合、それは動作しますか？
いいえ>>それは何を言ってるの？
それは、コントロールが非void関数の終りに到達したと言います。
ええ、そう私はそれを実行してみましょう。
君たちは前にこれを見たことがありますか？あなたは、これが何を意味するか知っていますか？
さて、のはこの少しを解剖しましょう​​。
それは、あなたが言ったのと同じように、1列目は、我々はエラーを持って、9行目でfile.cを言っている
そしてそれは、エラー、警告および戻り値の型の警告に由来だという。
何かが理にかなっている戻り値の型、で何が行われているように見えます。
我々は、非void関数を持っている、それは我々が機能を持っていることを意味します
それは、voidを返すことはありません。
void関数は次のように見えるものです：
ます。void foo（）、および戻り値の型がvoidであるため、それはvoidですが、
これはつまり、我々はここで何かを持っていた場合
1を返すように、我々はこのためのコンパイラエラーを取得したい。
しかし、我々は非void関数を持っています。
この場合の当社の非void関数は、Googleの検索機能です
それはブール値の戻り値の型を持っているためです。
それは、コントロールが非void関数の終りに到達したことを言っているときは、
検索は、return文を持っていないため、それは。
それは、bool型の何かを返すわけではありません。
>> 我々はそれを修正することができます、そしてあなたたちはどう思いますか
検索はデフォルトで返すべきでしょうか？
何が検索のデフォルトの戻り値である必要があります？
それは我々が終わりに置くことができるものだからです。
シャーロットは、次のものがない任意の - ？
trueまたはfalse？>> trueまたはfalse。
どれ？
falseを指定します。知りません。
偽？それを試してみましょう。
なぜあなたは、falseを返すと思いますか？それは素晴らしい直感だ。
[シャルロット]私は知らない。
我々は、これが私たちのデフォルトになりますので、この場合にはfalseを返すつもりだ
何らかの理由でリストが空であるか、針の場合
我々が探していることは存在しません。
それから一番最後に、我々は以前、この関数でtrueを返していない場合、
私たちは常にこの関数はいや、それが配列ではないと言うことを知っている。
それは干し草の山ではありません。
我々はコンパイルして実行する場合、今我々はそれをプルアップすることができますので、私はこれを保存するには、-letが。
我々は我々のプログラムをコンパイルして実行する場合、今、それが構築されています。
私たちは、私たちの小さなプロンプトが表示されました。
私がヒットした場合、4 - おっと。
それは何かをプリントアウトしませんでした。すべてが正常に終了したように見えます。
我々はこれを記入するんだ
私たちは、少し前に擬似コードでアルゴリズムについて話しました。
どれどれ、これを保存する
そして私は再びそのアルゴリズムをプルアップします。
この男を襲ってみましょう。いや。
そこにそれがある。
どのように我々はこれを行うのですか？
何がこのコードをオフに開始するための良い戦略でしょうか？
あなたが途中で番号を選択する必要があります。
どのように我々は、配列の途中で数字を選ぶのですか？
任意の提案ですか？
[生徒] 2で割っstrlenを。
strlenは、2で割ったものである。それは素晴らしいものだ。
配列の特別な種類のstrlenの作品。
配列のどのような種類？
文字列配列、文字配列。
それは、我々が適用することをコンセプトと同じようなものだ
我々は文字の配列を持っていないので、私たちはstrlenを使用することはできません。
我々は、intの配列を持っている。
しかし、strlenは、私たちのために何を得るのでしょうか？
あなたはそれが私たちのためになるか知っていますか？
[学生] strlenは、私たちに長さを取得します。
まさに、それが我々の長さを取得します。
strlenは、私たちのために、配列の長さを取得します。
>> どのように我々は我々のバイナリ検索プログラムでそれを取得するのですか？
どのように配列の長さになるだろう？
[学生] STRLEN？
あなたはstrlenで正しくフォーマットされたC文字列の配列の長さを取得することができます。
問題は、しかし、我々は文字列配列を持っていないということです。
私たちはこのコードを振り返ってみると、我々は、この整数の配列を持っています。
どのように我々はそれがどのくらい知っていますか？
[学生]はint型リットルまたは何かのように、エンドポイントのためにそこに相当するものか？
これは、実際には存在しないと判明、などの方法で、これは
C言語について知っておくだけで良いものの一つ、
配列の長さを取得する方法はありませんことを
私はあなたを与えるすべてが配列である場合。
それが文字列で動作理由、理由はstrlen作品、
ある文字列が正しくフォーマットされている場合があるため、
それが最後の最後で、その特別な\ 0文字を持つことになります。
>> あなたが不適切にフォーマットされた文字列を持っている場合も、想像することができます
ず、\ 0文字がありませんし、全部が動作しません。
[学生]あなたは '\ 0'を追加できますか？
我々は、このケースでは可能性があります。
我々は\ 0のいくつかの並べ替えを追加することができます
またはその文字を意味するとのいくつかの並べ替えは、それを使用して下さい。
しかし、それは非常に仕事に行くのではない
\ 0はchar型を対象としているため、
そしてここでは、intを持っている。
我々は特別な値を使用した場合、他の事はある
-1のように、配列の末尾をマークする
その後、我々は我々の整数配列に-1を格納することができませんでした。
私たちは身動きが取れないと思います。
それは、長さを取得する唯一の方法が判明
Cの配列の実際にそれを覚えている
あなたはそれを設定し、配列を使って周りに渡すとき
ので、私はいくつかの作業を行うために起こっている機能を持っているときはいつでも
整数や浮動小数点の配列上またはダブルスまたは何を持っている、
私はまた、関数に配列の長さを与える必要がある
そしてそれは我々が検索機能でここにやったことがまさにそれだ。
あなたは私たちがここで我々の配列を渡すときに我々は、何をやったか、見てみると
我々はまた、長さ、サイズを渡します。
それはちょうど、私たちがここでは、この変数を求めていることが起こる
このパラメーターまたは引数。
これは、関数の引数リストまたはパラメータ·リストと呼ばれ、
これらはまた、引数またはパラメータと呼ばれます。
人々は、異なる時間に異なる用語を使用します。
私は時々、それらを自分で交換する。
それはちょうどので、ここでは、この変数が同様に命名されていることが起こる
これに＃ここまで定義。
しかし、彼らは同じことじゃない。
大文字と小文字は区別されません。
>> ここで何が起こるかを見てみると、我々は宣言する
我々は数字と呼んでいた私たちのint配列、。
我々はそれに私達の＃上部にまで定義に対応する私たちの大きさを、与えてくれた。
これは8になるだろう。
そして、我々はその後、下方に、Googleの検索機能を呼び出すときに、
我々はプロンプトが表示されてきた我々が検索したい番号に渡す
ユーザーから頂いた。
我々は、この配列に数値を渡す
その後、我々はまた、配列のサイズを渡す必要があります
その後サイズ8の値が格納される
またはサイズと呼ばれるこの整数型の変数に渡されます。
我々は、配列の大きさを持っています。
今、我々は我々が以前話していたものに戻ってしまったら、
私はミッシーが、私たちが行うために必要なことは、配列の長さを取得するという点を育てたと思う
そしてそれを2で割って、それは私達に中間点を与える。
見てみましょう。
私は誰かがこれを書いているとその領域に保存することはできますか？
どのようにレイラはどうですか？
私はあなたがこれをで書くことはできますか？
あなたは配列の長さを取ると中点を取得する最初の行を書く
と新しい変数に格納します。
私はあなたに数秒を与えるでしょう。準備できてるの？
[聞き取れない生徒]
確かに、私は中間点を計算することができた
検索機能の内部haystackの配列の
サイズ可変であるhaystackの配列の長さを使用していますか？
ここでトリッキーなものがありません。
[レイラ]ジャストサイズ/ 2およびジャストイン
そして、それを保存し、上部にここまで保存]ボタンを押す
そして我々はそれをプルアップします。
パーフェクト。
そうしよう。恐ろしい。
>> であるように、これはコンパイルのだろうか？
[レイラ]いいえ、それは高くする必要がある。
[ネイト]ええ、私たちは何をする必要がありますか？
[レイラ】int中点か何かのように。
恐ろしい。ええ、それは、int中点=サイズ行いましょう。
これはコンパイルされます？
このコメントを削除して、邪魔にならないましょう。
これについてどのようにコンパイルされません？
我々は、整数を使って何をやっていない
ので、我々は、またはそのような何かを印刷する必要があります。
ええ、その通りです。
我々は、未使用の変数を取得します。
ほかに何かこのことについて仕事に行くのではないでしょうか？
私はあなたが何か、サムが言ったと思う。セミコロン。
ええ、私はそれらのセミコロンが欠けている。
それは、長期の経過を通じて一定のものになるだろう。
私がやる最後のことは、私はどちらかの側にいくつかの空白を置くことにしましょう​​です
ここで、我々はそれを行う方法を一般的にだから、この演算子の
私たちのスタイルガイドによる。
我々は、配列の中間点を持っている。
今、我々は我々のアルゴリズムに戻って覚えていれば、
我々は中間点を持っていたら、我々がしなければならなかったことを第二のステップは何でしたか？
[学生]が大きいなら[聞こえない]。
ええ、そう、我々は比較のいくつかの並べ替えを行う必要があり、我々はここで何を比較している？
あなたはそれがより大きい場合に言いました。を参照して、その文の中で、それは何ですか？
それは中間点よりも大きい場合の来る数は、その配列に上がる？
正確なので、その数がアップしたときに我々 -
針なので、針に比較している、
と私たちは針との比較ですか？
針は、我々が探しているものだからです。
我々は、中間点に到達するために、それを比較しています。
>> しかし、それはどうかを確認しても意味がありません
針=中間点かな？
お分かりでしょうか？
誰もが同意していますか？
（針が==中点）した場合には、試してそれを与えるてみましょう。
[学生]はprintfのあなたはそれを発見してください。
[ネイト]のprintf（ "我々はそれを発見します\ n"）;
それ以外の場合は - 私はここで何か違うことをやって起動するつもり。
私はすべての時間if文の周りにカッコを置く作業を開始するつもりだ
ちょうどその時、我々はより多くのものを追加した場合は理由
我々は、コンパイラを得ることはありません。
うん、サム。あなたはポイントを持っている。
問題は、中点が配列内の位置を表していることである
しかし、あなたはそれが配列のその位置の値を表現するために得ることができます。
それが大きなポイントだ。
皆はサムが言ったことを聞きましたか？
彼は、その中点をそのまま言った
配列内だけでの位置を表しますが、それは配列の実際の要素ではありません。
あなたは今、書かれたようなコードを考える場合、
、我々はここで、この配列を見下ろしてみると、その中の8つの要素を持っている
この関数であることを行って中間の値は何ですか？
[学生] 4。
[ネイト] 4。
我々は数字の4を探している場合 -
私達はちょうどこのコードを実行し、ここで少し悲しい顔を置くことができます
我々はそれをした場合は見つかりませんでしたので、我々はこのコードを実行する
今あるように、建物、それをアップロード、私は下にスクロールしてみましょう、
そして我々は数字の4を探している場合、
我々はそれを見つけましたが、我々は、printf yesにこれを取得できませんでした。
理由の一つは、我々は、trueを返していなかったということです
しかし、我々は本当に番号4を見つけたのですか？
とサムは言っていません。
我々は何を見つけたのですか？
私たちは本当に我々がダウンしてここに配列を見れば中間点を、発見
それは我々が見ていることインデックス4に要素になるだろう、
これは、23です。
>> どのように我々は、実際には中間点で、その要素を取得するのですか
だけではなく、中間点自体？
[学生]私たちは、charまたは何か入力してくださいだろうか？
そのただ好奇心から、何をするでしょうか？
もう少し手の込んだことはできますか？
あなたは、数字に位置を変換する必要があります
ので、それはcharだと思うが、それはないかもしれないいくつかの私は、接続を確立するために持っている。
ええ、それは良い点だ。
我々は、文字にこれらの文字を変換するこのポジションをたくさんやってきましたが、
最初の二つの問題セットインチ
それはここで、これはほぼ同様であることが判明
それが理にかなっている場合、文字列内のi番目の文字にアクセスする。
ここでは、中間の要素にアクセスしたいと思います。
どのように我々はそれを行うのですか？
ケビンは、あなたは私たちがやるかもしれないか何か提案はありますか？
あなたは、haystackの半ば、閉じブラケットを開いたブラケットを行うことができます。
あなたは私たちのためにそれを書くことができますか？
ここでそれを保存して、我々はそれをプルアップします。
我々は、この9行目で見ている、
そして我々は、我々は中間点に針を比較しないことを実現している
その代わりに、我々は、針を比較したい
私たちのhaystackの配列内の位置の中間点にある要素に。
クール。
そうしよう。
ええ、それはかなりよさそうだ、もし（針== haystackの[中点]）。
我々はそれを発見した。
今、私たちは少しアップコード-we'llバックを実行する場合
それは、我々は4のために見ればすぐにコンパイルし、それが実行され、
今、私たちは、実際に番号23を取得しているので、我々はそれを見つけることができませんでした。
我々は、値23を取得している、そしてそれは私達が私達の針と比較しているものです。
しかし、それは良いことだ。それは正しい方向への第一歩だ。
>> それは我々がやろうとしているものです。
我々は、配列内の位置に対して針を比較しようとしていない
むしろ配列の実際の要素に対して。
我々は我々のアルゴリズムの次のステップで、今再び振り返ってみると、
次のステップは何ですか？
レイラはすでに簡単にそれを述べた。
[学生]それはより大きいか、小さいのかどうかを確認してから移動するかを決定する方法。
[ネイトは]ええので、どのようにすることを私たちはしますか？
このリビジョンを保存し、いくつかの-I'llに置くことができ、
その後あなたはそれを行うことになるいくつかの行に入れます。
うん、シャーロット。>>私は疑問を持っています。
最初のものであるため、1 - それは中間点であってはならない
それは実際に我々が探している文字ではありませんだと、我々は4を入れそうだとすれば、インデックス0の？
はい、そしてもう一つの問題は-
何がおそらく起こってしまうために起こっているので、それは、偉大なキャッチだ
我々は動かし続けるとした場合、我々はこれまでに、当初は調整しません？
私がアクセスしようとしている我々がやって終わるかもしれないかを推測
配列の8番目の位置にある要素、
このケースではそれは存在しません。
我々は実際の会計処理のいくつかの並べ替えを行うことになるでしょう
我々はいくつかのゼロインデックスを持っていること。
角カッコ内に1 - [シャルロット]は申し訳ありませんが、私は中間点を意味していた。
我々はそれを行うことができる。
我々は少しだけで、この問題に戻るでしょう。
かつて我々は、実際のループに到達するために開始
それは我々が本当にこれが遊びに来たときに表示されますです。
当分の間、我々はこれを行うことができますが、あなたは完全に正しい。
ゼロのインデックス作成は、我々が考慮する必要という効果を持つことになります。
見てみましょう。
>> より大きく、より少ない方法であるよりも？
[学生]私はより大きく、より小さい部分を実行する方法を取得します。
私はちょうどあなたがそれは干し草の山の中間点より小さいか、であることが判明した場合は印刷する内容がわからなかった。
ここで私は保存することができます何I've-
[ネイト]ええ、あなたが持っているものを保存して、我々はそれをプルアップする場合があります。
そうしよう。
[学生]そして私は私が知らなかった何のために疑問符を置く。
[ネイト]偉大に見えること。
我々はまだわからないので、ここでは、疑問符を持っている
我々は非常にまだやろうとしている。
私たちがdo-おっと、我々はいくつかの私たちのすべての括弧ファンキーを持ってしたいと思います。
我々は、これらの括弧を修正します。
そうしよう。
それで我々は、我々のアルゴリズムによると、何をすべきかをしたいですか
我々は、針が見つからない場合はどうなりますか？
針は我々が探しているものを以下の場合で言う。ケビン。
左半分だけを見てみましょう。
右ので、私たちは言うここでコメント出してあげる "左半分を見て。"
針が中間点で干し草の山よりも大きい場合に、我々は何をすべきかをしたいですか？
[学生]次に、右半分を見てみましょう。
右半分を見て、 "右半分を見てみましょう。"
あまりにも粗末ではない。
わかりましたので、この時点では、物事はかなり良い探しています。
として書かれたコードの問題点は何ですか？
[学生]あなたは半分のエンドポイントを持っていない。
右、私たちは半分のエンドポイントを持っていない。
また、これだけ一度通過するつもりです。
我々は1つだけの中間点で見ていくつもりです。
いずれかの要素があるか、そうではありません。
これを完了するために、我々は繰り返しのいくつかの並べ替えを行う必要があります。
我々は、我々が見つけるまで繰り返し続ける必要があり、その
我々は、最終的に絞り込まれ、それを見つけたので、どちらかの要素がそこにある
またはそれは、我々は物事のすべてに目を通してきたので、そこにはありません
配列の適切な半分にしても何もそこにいないことがわかった。
>> 我々は、この繰り返しが起こってしまった時はいつでも、私たちは何に使用するつもりですか？
[学生]ループ。
ループのいくつかの並べ替え。はい。
[学生]我々はこれは、do-whil​​eループを行うことができますし、それがその、その後ながら行うた
針は私はそれで使っていた場所に等しいは - 私がわからないことはありません。
しかし、希望のようなものは、それが値を等しくしない限り、ユーザー入力にそれを行う。
ええ、そう見てみましょう、これはどのように自分自身を書くのでしょうか？
あなたがのはdo-whil​​eループを使用してみましょうと述べた。
スタートをどこで行うのですか？
右のサイズ/ 2後[学生]。
[ネイト]さて、私たちは何をするつもりですか？
我々は、後でしばらく埋めるでしょう。
我々は何をするつもりですか？
[学生]我々は我々がIF部で持っているすべてのものを行うにはしたくない？
[ネイト]このすべてのものを行い、素晴らしい。
コピーして貼り付けます。
ああ、男。
我々はこのタブ上に、可能であれば、この作品かどうかを確認してみましょう。
美しい。
君たちはそれを持っているので、大丈夫、私たちはこれを保存する。
すべての権利、私たちはこれをやろうとしている一方、
あなたが後にあったwhile条件は何でしたか？
[学生]針が等しいわけではありませんが、そう感嘆符のような。
しかし、私はそれはまだ正確にはよく分からない。
[ネイト]うん、これはそれを行うための一つの方法です。
サムは、あなたがコメントを持っていますか？
[サム]私はビデオを見た時、私は思い出した、
我々はそれのための擬似コードをやったとき、私は、のような一つのスクリーンショットを取った
maxとminの間に何らかの関係があった。
私はそれがmaxがminより小さければ、これまでのようなものだったと思います。
それを得た。
[SAM]またはMaxがそのような分、または何かを下回らないときなど、
それはあなたがすべてのものを検索したことを意味するものであろうからである。
>> うん、だから何それがmaxとminが言及したように聞こえるのでしょうか？
[SAM]に変更しようとしている値が、-整数
我々は中間点を置く場所に相対的。
その通りです。
[サム]がその時点で、それは[聞こえない] maxとminを計算するために起こっている。
中点はこのmaxとminの考えです。
それは人々に意味があるか？
我々は、この繰り返しをやろうとしている方法を見て起動した場合、
あなたは私たちがdo-whil​​eループのいくつかの並べ替えを使用することを完全に正しい。
我々は、この配列の現場で何が起こっているかを覚えているのであれば私は推測する
と実際に起こっては - 私以上書こうとしているここで、
バイナリサーチの非常に最初の繰り返しで、我々は持っている -
私は始まりを表すためにBとEを使用するつもりだ。
そして、我々の配列の終わり。
私たちは、初めはこっち4右側にあることを知っている
そして我々は終わりが108であることを知っています。
我々は15番を探していると言う。
我々はこれを行うのは初めてのように我々は、前に見た
中間点は16または23であることを行っている
我々は物事をどのように計算するかによって異なります。
均等に分割するので、途中で私たちは、この空間を与えるだろう
16と23の間に、我々は均等に分割することはできません
またはそれを分割し、真の中間点で取得します。
我々は、16を見てみましょう。
私たちは、 "我々が探していることをねえ、16> 15。"に気づくでしょう
次に、配列の左半分を見て
私たちがやってしまいますと、捨てることです
この全体の上部
と "さて、私たちのエンドポイントはここになるだろう"と言っ
私たちのループの次の反復では、我々は今、この配列を見ている、
今ので、効果的にこの部分を捨てた
我々は、始まりと終わりの間に違いが中間点を取っている場合、
我々は、我々の中点が8であることがわかりました
その我々が、それは我々が探している番号から見てどこにあるかを見るために8をテストすることができ、
15、15の方が大きいことがわかり、
ので、我々は、リストの右側の部分に移動する必要があります
我々は人間だ、と我々はそれを見ることができるので、その我々は知っている。
我々は、右の部分は、我々はそれを見つける場所であることを行っていることを知っている
しかし、コンピュータは私たちが何をしようが、我々は実際によあることを知りません
これは上がるし、今始まりと終わりました
同じ場所ですが、、中間点はその時点でリスト内の唯一の番号となりますので、
これは15であり、我々はそれを見つけた。
それは、この全体のmaxとminの表記がどこに行っているかいくつかの光を当てるん
把握するために、配列のエンドポイントを追跡する
物事を絞り込むためにどのように？
>> これは現在は15に等しくなかった場合、何が起こるでしょうか？
我々が代わりに15と、探していた場合、この番号は16でしたか？
私たちは、ああ、それは大きいです "、と言うと思います。
我々は左に戻りたい。 "
そして、我々は、右に当社の電子を移動したい
その時点で我々は、競合となるエンドポイントを持っています。
これは、任意の複数の要素を検索することはできないでしょう
今、我々は、エンドポイントと私たちの始点を、持っているので、
私たちのmaxとminは私たちの、今では反転しています。
我々は、全体の配列を検索。我々は何かを見つけることができません。
それは我々がわかりました、我々はこのアルゴリズムを停止するつもりだ "と言いたいと思いますした時点です。
我々は何も見つかっていない。我々は、それがここではないと知っている。 "
これはどのように起こっている？
[学生]どのように正確にコンピュータが終わりを切り替えるのですか？
どのように終わりは始まる前に終わるのでしょうか？
終わりは始まる前に終わる
なぜなら我々はこれを行うたびにやろうとしていることを数学の。
我々は交換する方法は、非常に最初の時間を見れば、我々はこのスワップを行うことである
我々は4時に始まりと終わりがどこに
すべての108でダウンの方法、当社の中間点は、16歳の時、と言う -
私は、我々は15を探しているなら15にこのバックをリセットするつもりだ、
我々は16をチェックしたときに我々が何をしたことを知っていたし、それが大きかったことを見た
と、リスト全体の右部分を破棄したかった
我々は我々がやりたいことは右ここでは、この電子を移動されていることを見た。
効果的に、eは中間点の前に1に移動してしまった。
同様に、我々はアルゴリズムの反復をしたとき
と中間点は、8時だった
我々は8 <15は、私たちはBを移動したかったことがわかった
中点過去1。
さて、最初と最後は、この15で一緒に両方です。
>> 我々はいくつかの他の値ではなく、15を探すために起こっていたい場合は、
または、この15は代わりに16日に行われた場合、
我々は、電子は、我々は中間前に1つを移動することがわかっていただろう。
今すぐeはb未満が反転することになります。
私たちが実際にこのアルゴリズムをコーディング終わる方法をウォークスルーしてみましょう。
私たちは、この中点の計算をしたいことを知っています。
我々は、我々が最初と配列の末尾を追跡することも知っている
私たちの現在の配列の我々が把握できるように
このリストの左半分であり、リストの右半分がどこにあるか。場所
我々は、いずれか、beginとendを使用して行うこと
または我々は彼らminとmaxを呼び出すことができます。
私はこの時間を開始および終了に使用します。
私たちはここで私たちの例でダウンを振り返る時期になりましたら、場合には、
私たちの始まりは自然なように、配列の先頭に設定されていました。
これはどのような指標だったのですか？私たちのことが何を始めるべきでしょうか？
ダニエル。
[ダニエル]ヘイ[0]。
[ネイトは]ええ、私たちは干し草の山[0]に等しく、それを設定することができます。
問題は、しかし、これは私たちの最初の要素の位置を与えることではないです。
それは私達の最初の要素のインデックスか、その最初の位置で実際の値を与える。
[学生] 0.20に変換されますね？
これが何をするのか[ネイト]は-まあ、それは、任意のA変換を行うことはありません。
それは何を行いますと、それは始まりに4を格納しますです
そして、次に、それは始まるに対して比較を行うことは難しいことでしょう。
beginは、4の値を保持されるため、
これは、我々の配列の先頭です
しかし、我々は、配列内のインデックスを追跡したい
のような値に反対した。
私たちは、実際にそのように、0を使用します。
アレイ·シャーロットの終わりのために少し早くこれを持って来ました。
我々が考慮ゼロインデックスを取るところです。
>> シャーロット、配列の終わりは何ですか？
終わりのインデックスとは何ですか？
[シャルロット]サイズ - 1。
ええ、私たちはどのサイズを使うべきでしょうか？
私たちは、資本金規模または小文字サイズを使うべきでしょうか？
資本金規模。
この場合において、我々は資本の大きさを使用することができます。
我々は、この関数は移植可能にしたい場合
と、他のプログラムでこの関数を使用する
私たちは実際には小文字サイズを使用することができます。
それはあまりにも大丈夫です。
1 - しかし、シャーロットは、我々は大きさを持たせたい完全に右です。
このポイントで
[学生]それはあなたが大文字の大きさを使用することができますどうですか？
それは我々が大文字の大きさを使用することができることをどうですか？
それは、これらの＃defineを実際にあることが判明
ボンネットの下に、検索と置換のようなテキスト、理にかなっている場合。
あなたのコードをコンパイルし、前処理フェーズ
コンパイラでは、ファイルを経由する
そしてそれは、どこに資本金規模を書いてきたことを探し
そして、それはちょうどそのように、8と文字通りそのテキストを置き換えます。
その意味で、これは変数と非常に異なっている。
これは、メモリ内の任意のスペースを取りません。
それは、単純なテキスト置換トリックです。
この場合において、我々はサイズを使用するつもりです。
ここからは繰り返しのいくつかの並べ替えをやってみたいですか、
そして我々は、do-whil​​eループで正しい軌道に乗っている。
条件はもはや成立しないまで、我々は何かをしたい、
我々は前に見たようにと、私たちは、その状態を見た
我々は終わりを望んでいないことを確かにあった
開始未満であること。
>> これは我々の停止条件である。
この問題が発生した場合、我々は、同じように停止して宣言したい "ねえ、私たちは何も見つかっていない。"
これを表現するために、我々はループのいくつかの並べ替えを使用したいです。
この場合、それは、forループ、whileループ、do-whil​​eループでしょうか？
我々はここでdo-whil​​eループを持っています。
あなたはそのアプローチのような連中か？
あなたは、我々は別のアプローチを試みるべきだと思いますか？
ケビン、任意の考え？
私たちは最大のを知っているので、我々は、whileループを及ぼす可能性があります
スタートとにかくアットminより大きいだろう。
ええ、そう起こる必要がない初期化はありません。
あなたが何かを初期化する必要がある場合、それらは、do-whil​​eループは素晴らしいです
次にここのに対し、テストする前に
我々は両方の開始と終了を再初期化しておくつもりはないことを知っている
ループのすべてのラウンド。
我々は、我々がそれらを初期化することを知っているし、私たちの状態を確認してください。
この場合、私は実際には単純なwhileループで行くつもりです。
これはこれは、do-whil​​eループはかなり頻繁に使用されないことが判明した。
ループしながら多くの場所でもない教えていない。
彼らは、ユーザー入力を処理するための良いしているので、我々はこれまで、それらの多くを見てきました。
しかし、通常の場合、ループは、より多くの共通している間。
それは、この条件が書かれているとおりと判明
本当に私達にはるかに良いを行い、その理由ではないだろうか？
ごめんなさい、私はあなたの名前を知りません。
私はジェリーだ。>>申し訳ありませんが？
これは、B-O-R-U-Iです。
ああ、大丈夫。
私は私のリストにあなたが表示されません。
ああ、それは理にかなっているので、ああ、それだ。
あなたは、意図したとおり、このwhileループは動作しない可能性があります理由のアイデアを持っていますか
条件で書かれたように？
あなたにもそれ以降のすべてのものにしたいように[ジェリー]あなたが平均？
うん、だからそれは一つだ。
我々は完全に真であるwhileループ、中にこのようなもののすべてを置く必要があるかもしれません。
もう少し問題だ他のことは、しかし、この状態は動作しないということです。
[学生]あなたはそれを反転する必要があります。
右ので、この条件は、これまで最初に我々はそれについて話した方法は必ずしも当てはまりません。
我々は最後まで何かをしたい、<開始
しかし、我々はしばらくの間何かをしたい
≤終了を開始します。
>> そこに論理のその逆転があります。
私はそれらのミスはすべての時間を作るの罪を犯したんだ。
[学生]なぜそれより小さいか等しくなるように持っていますか？
あなたは我々が得たことを覚えている場合ではないので
ここで、一つしか要素があって、我々は減少しました
と我々の配列内のわずか15を見ていた？
そして、我々の始まりと私たちの終わりは、同じ要素であった。
我々は、我々がそのケースを扱うことを確認したい。
我々は、よりストレート未満を行った場合は、
我々は唯一の2つの要素を持つ配列に取り掛かることができるだろう。
かつて我々はそれが我々の要素であるならば、我々はそれを見つけることは決してないだろうが、その最後の要素に降りた。
今ここに、我々はあなたが言っていたのと全く同じように行うことができます。
我々は右の私達のwhileループの真ん中にものをplopping開始することができます。
私達は私達の中点でウンチすることができます。
文の場合我々は、これらのすべてを取ることができます
それらをこのdo-whil​​eループからの撤退、
ウンチそれらで、
、少し物事をきれいにする
と私は先に行くと、このリビジョンを保存します。
この時点で、我々はかなり近づいた。
サム。
1月2日 - 私はあなたにもint型中点=サイズを持っていると思います。
1月2日 - それは、大きさになった。
我々は、その行については変更する必要がある他に何かありますか？
それは大漁だった。
>> サイズは何をしますか？我々はこれまでに大きさを変えていますか？
このようなラインを保つために、我々は、サイズを変更する必要があります。
我々は大きさに私達が、forループを回るたびに変更する必要があります。
しかし、私たちはほんの少し前の私たちの例を通過したときに覚えている
そして我々は4で始めていた
およびエンド108の上のすべての方法は？
どのように我々は中間点を計算したのですか？
私達はサイズを使用していましたか？
あるいは、我々が開始し、代わりにエンドを使用していましたか？
それは、終わりと始まりの間の差です。
正確に、そして正確にどのように私はシャーロット、次のことを書くべきでしょうか？
ちょうど終了 - 開始。
1 - あなたが行う必要がありません
1末尾に含まれており、すでに開始されていたので - 。
[ネイト]グレート、あなたは完全に正しい。
そのため、1 - 1 - が含まれている我々は実行する必要はありません
そして我々は最後の変数を初期化したときに占めています。
>> 私は、この行が意味をなす持って文法的に行う必要がある他に何かありますか？
[学生]プラスを開始します。>>プラス始まる？
終わりに、[学生]。
それが唯一の半分の長さを計算しているからだ。
あなたが開始を追加する必要があります。
[ネイト]これが私たちのために何を計算するか？
我々はループのこの非常に最初の反復で終了を考えると、
エンド位置index 7であることを行っている。
開始位置は0になっています。
覚えておいて、我々のいずれかを探している
3位又は4位に。
我々はこの数学を見れば、それはもう少し具体的にするために、
ここにいくつかの数字を入れて、私たちは、7,0を持っている
そう7から0、次に/ 2
整数の除算で3であり、それはです。
それから私達は、私達の開始を再度追加する必要がありますか？
我々は、このケースではありません。
開始が0であるため、非常に最初の繰り返しで、それがうまくいくでしょう。
しかし、我々の進歩として、我々は必要なすべての本当にやる
終了 - 開始/ 2。
そこにもう一つのトリックはここにある、そして、それはすなわち、優先順位の一つです。
[学生]私たちは、括弧は必要ですか？
正確には、[ネイト]そして我々は、これらの括弧を入れていない場合ですので、
この行ではなく、解釈されます
（終わり）と - （開始/ 2）、我々は間違いたくない。
それらの優先順位規則に気をつけろ。
[学生]なぜそれが終わりではありません+ +始める？
なぜそれが終わりではありません+ +始める？
[学生]なぜそれがあることではないのですか？
なぜそれが+でしょうか？
私はあなたが正しいと思います。
[学生]それは平均だから？
[ネイト] END +開始、あなたは完全に正しい。
うわー、私は全くgoofed。あなたは正しいです。
我々はマイナスをやっていたなら、私たちはピンを見るには開始を追加したいと思う
このケースでは、我々は2つ​​の平均を取りたいことは非常に正しい、
ので、我々は彼らを減算するとは対照的に、それらを追加したいです。
[学生]は終了しました場合にも動作するだろう - 開始/ 2 +を開始します。
私たちは、私はそう信じていた場合、それはそうするでしょう。
>> 例えば、我々が始まる見ていた場合、
そして我々はそれをここにシフト
15〜。
位置は2になり今始まる。
終わりは7位になります。
我々はそれらを引くと、我々は5を取得します。
2であることを分割する、我々は2を取得します。
そして、我々は、後ろに2を追加
それは、第四の位置に私たちを取得
これは、中間点である、まさにここです。
[学生]私たちは包装の世話をする必要がありますか？
どのような意味で私たちは包装の世話をする必要がありますか？
もし和や違い
我々はそれを行う方法に応じて、偶数番号ではありません。
その後、コンピュータはそれが2.5の時かどうか混乱してしまいます;
あなたが左にまたは中点であるかを決定する権利へ移動するのですか？
それを得た。
それは、その整数の割り算と判明
我々はこれまで、これらの浮動小数点数を得ることはありません。
我々は、小数を取得することはありません。
それは完全に破棄されている。
コンピュータは、2つのint型の変数を分割している場合
そして、1は7であり、もう一つは2です
あなたは、結果として3.5を取得することはありません。
それは、3つを取得します。
残りは破棄されますので、それは事実上の丸め
君たちは数学のそれに精通している場合ではないラウンドではなくフロア、
どこであなたは完全に、小数を破棄
ので、あなたは本質的に最も近いにそれを切り捨てている
最も近い整数に全体の位置。
[学生]は、7つの要素の配列を持っている場合ので、しかし、その後、それは問題だ
その替わりに自動的に第四の中間点の第三の要素を取り出す。
どのように我々はそれに対処するのですか？
それが問題だから我々は7の配列を持っていた場合、
それは代わりに第四の第三を選ぶだろう。
あなたは、もう少し説明してもらえますか？
あなたは、7つの要素第四の要素を持っている場合があるため[学生]
中点、右でしょうか？
しかし、インデックスがゼロであることについてあなたのコメントを覚えています。
[学生]ええ、そう位置3インチそれは中間点であろう。
うん。
ああ、大丈夫。私はあなたが何を意味するかを参照してください。
それは、我々は、この全体の概念に慣れるように、奇妙なものだ
小数を取り払うこと。
それが大きなポイントだ。
このセットアップを終了してみましょう。
私達は私達の中点を計算した。
>> 私達は私達の針が中央値に等しいかどうかを確認するためにテストしている。
私達は私達がそれを見つけたことを印刷しているが、実際、我々はこのような状況で何をすべきかをしたいですか？
私たちはそれを見つけたので、呼び出し側は、我々はそれを見つけたことを知らせたい。
我々は、boolean型指定された関数の機能を持っている。
我々は移動する準備が整いましたことを我々は関数の呼び出し元に知らせる方法
私たちは "ねえ、これが本当である"と言うさ
どのように我々は、ケビンがそれを行うだろうか？
あなたの頭をうなずいています。>> [ケビン]追加trueを返します。
[ネイト]正確には、trueを返します。
さて、それが等しくない場合、どのように我々は左半分に見えるのでしょうか？
任意のアイデア？
ステラ、任意のアイデア？
あなたは最後の新しい位置を設定する必要があります。
うん。
エンド - だから私たちは中間点の位置を行う必要があります。
グレート。
私たちは終わりのための新しい位置を設定する必要が
左半分を見て。
これは、我々がどこに前の話だったもの
私は、この例に戻って続ける。
私はここから始まりましたし、私は終わりにこっちにすべての方法を持っています。
>> 再び、我々は15を探している、と私たちの中点が16である場合、
そして我々はおっと、16の方が大きい "、実現しています。
我々は左半分に移動したい。 "
次に、私たちは15に端を移動する
そして我々は途中から1を奪うことによってそれを行う
その私たちの新しいエンドとして設定。
同様に、我々は右半分を見たい場合、どのように我々はそれをするでしょうか？
あなたのアイデアを持っていますか？
[学生]あなただけの+1の中点を開始に設定します。
[ネイト]グレート。
そして今、我々が何かを見つけていないという場合には、
それは、私たちにとっての世話を取得するのですか？
ダニエルは、その私たちのための世話をするのでしょうか。
[ダニエル]いいえ
[ネイト]我々は、配列全体を介してそれを作ると私達が何も見つからない場合は、
どこでそれが世話をされるであろう、あるいは、我々はそれの世話をする必要がありますか？
[ダニエル] while条件。
[ネイト]ええ、while条件、その通りです。
我々が何かを見つけていないなら、それは全体の配列を通過するの世話をします。
このwhileループが終了します。
我々は、この状況に遭遇したことはなかったでしょう
そして我々はfalseを返すことができます。
このような場合は、ここで我々はまた、このままにしておくことができ
この文の場合はtrueですなぜならもし、
我々の関数は、戻ります
それで我々はこの時点で中止この機能本質的によ
我々は、trueを返したとき。
しかし、何がここでこの構造はどうなるのでしょうか？
これは完全に動作し、またはそこにいくつかの論理的な欠陥があるのだろうか？
>> そこにいくつかの論理的な欠陥は、それが設定されている方法で、あります。
それは何になるのでしょうか？
[学生]なぜあなたが必要ない - と+ 1S？
それは私たちの新しい左半分と右半分になるように私たちの配列を設定します。
[学生]しかし、なぜあなたなしでそれを行うことができませんでした - 1Sと+ 1S？
[ネイト]我々は、中間点に等しく、それを設定することができます？
何がそれについて問題があるのでしょうか？
[学生]私はあなたが既にチェックインされている値をチェックしているので、それは非効率的だと思う。
[ネイト]正確なので、サムは完全に右です。
あなたが最後に設定し、中間点に等しいから始める場合
代わりに - 1と反射的に+ 1
将来のある時点で我々は再び中間点をチェックしてしまいます。
[学生]私はpsetを開始し、その後、私はそのような何かを持っていた
ここで私は、+ 1を忘れて、それが無限ループに捕まってしまった。
右の、ある時点で作業を開始を取得し、終了するつもりはありませんしているので、
実際にオーバーラップする。
クール。
そこにもう一つの論理的な欠陥だし、それは、これは間違いであるべきであるということです
他の場合。
なぜ、そうなのでしょうか？
>> それはあなたがそれをなかったかどうか、他ではない場合の理由は、ケビンですか？
[ケビン]ええ、あなたはエンドポイントを変更しているので。
[ネイト]その通りです。
我々は、エンドポイントを変更している
それがこの、we'llのように書かれている場合は、間にスペースを作る -
それはこのケースをチェックします。
それが成功した場合この場合は、機能の中断タイムアウトになります。
それは、この次のケースをチェックします
これが成功した場合、それは、エンドポイントを調整します
そして、次に、それは上に続行し、このケースをチェックします。
しかし、この時点で、我々はそれがチェックを継続する必要はありません。
幸いなことに、我々は、ここで中間点をリセットしていない
そして我々はこのケースが成功しないことを知っています。
しかし、我々は間違いなく、そこにあれば、他のを入れたい
でも、その可能性がある - この場合
我々は中間点を調整していないので、その違いを生むだろうか？
いいえ、これらの例はすべて排他的であるためです。
繰り返しますが、私の悪い。
我々は、私が思うに、この他の場合は必要ありません。
我々は試してみて、それを実行し、何が起こるか見てそれを与えることができる。
建物は、エラーが発生しました。
私はここで、これらのbとeのを残したので、それはおそらくです。
私は一番上にそれらの任意のより多くを持っていますか？
それはそれのように見えるものではありません。
我々は、ズームアウト、ビルド、
そこにそれが行くので、今、私たちは、15を検索する場合
はい。
私はズームインしましょう
15、はい。我々は再びそれを実行することができます。
実行、構築、ソースコードをアップロードする。
私たちは、13のような何かを検索することができます
私たちはプリントアウトは何も取得しないとので、それは私たちのためにあることを見つけていない。
それが私たちのリストにないので、それは素晴らしいことだ。
>> 我々は時間のうち今ある。
今週はこれそれになるだろう。
参加のおかげで、後でお会いしましょう​​。
>> [CS50.TV]