[Powered by Google Translate] デイヴィッドJ.マラン：全ての権利は​​、これはCS50であり、これは
週2の開始。
ありがとう。
私たちは電話と一緒にここから始めましょう。
617-BUG-CS50をダイヤルするように私は約です。
CS50：これはCS50です。
シャトルの男の子のためには、1を押します。
最初からやり直すには、9を押します。
デイヴィッドJ.マラン：だから彼はシャトルボーイの場合は1を押してくださいと述べた。
だから我々は1を押してするつもりです。
CS50：あなたの原点とは何ですか？
クワッドは1を押してください。
メイザー、2を押します。
ボイルストン、3を押します。
ラモントは、[4]を押し。
Memのホールは、5キーを押します。
最初からやり直すには、0を押してください。
デイヴィッドJ.マラン：我々は、クワッドの場合は1を押します。
CS50：次のシャトルは13:10で、この非常に分を残して、
その後、13:20、13:30、13:40時。
これはCS50です。
>> デイヴィッドJ.マラン：だからこれはCS50の声です。
そして、それはのために、最終的なプロジェクトの種類の例です
インスタンスには、向かって噛み切ることができます
学期の終わり。
例えば、そのshuttleboy.cs50.netが存在します -
私が最初にCS51を取った後に書いた、実際にプロジェクト
バック私は学部だった。
そして、ここでのインスピレーションは、当時、彼らが持っていたすべてだった
印刷されたシャトルバスのスケジュール、およびそこにはなかった
オンラインで物事を見ることの概念。
そして、私は1週末に鳩のソートは、通って注ぎ
スケジュールを印刷し、コンピュータプログラムにそれを移植しました。
当時、コンピュータ·プログラムが書かれたことが起こっ
C言語でそして、あなたは、実際にシャトルボーイを入力して、それを実行しました
我々がこれまで行ってきたように点滅するプロンプトが表示されます。
しかし、長年にわたって、それはインスタントへと進化している
メッセージングボット。
それは中に、このウェブサイトに最近になって進化している
SMSベースのツールと​​同様に、この音声ベースのツールに。
あなたができること、これは物事の種類をほのめかすことである
学期の終わりまで自分のためにやる。
>> 例えば、そこに、シャトルボーイのバージョンのSMSが起こる
次のように動作します。
あなたの携帯電話では、41411にテキストメッセージを送信した場合、および
その後、シャトルボーイのために、特別なシンボルsboyを送る
と原点とBであるA、B、続いて
デスティネーション -
例えば、ボイルストンスペースクワッド -
何が数秒以内に戻って取得する必要がありますと、テキストです
正確にあなたに言っシャトルボーイからのメッセージ
次のいくつかのシャトルは、その時点から、そのつもりです
ポイントB
そして、これはとして知られているものの、より一般的な例です。
APIを使用した。
>> だから例えば、これは、ここだけですshuttleboy.cs50.net
これの実際のWebベースの化身。
しかし、これと他のアプリを強調してそのデータをCS50
開発したすべての形式でここで皆に晒されています
APIの、アプリケーション·プログラミング·インターフェース。
そして、それはちょうど人々が私たちを好きでしゃれた言い方だ
インターネットや他の人が作成するいくつかの時間を費やしてきました
あなたは私たちからデータを取得するために使用できるソフトウェアと
その上に独自のアプリケーションを構築
そのデータ·セットの。
だから例えば、ここでこのシャトルボーイAPIページは、どの
本質的にCS50マニュアル、文書であることを起こる
どのようにデータ用CS50サーバを求めて行くことができます。
例えば、あなたは、CSVファイルは、カンマに精通している場合
値が区切られて、これらは、迅速かつ汚れのちょうどソートアール
Excelライクなファイル。
それで、あなたは、すべての上のすべてのデータのためのシャトルボーイに頼むことができる
家屋とそのGPS座標、あなたは買ってあげる
背中、本質的に、そのようなスプレッドシート
あなたは次にして、独自のプログラムに読み込むことができ
シャトルボーイそのもののような結果を生成し、
やっていることを起こる。
それらのより身近な、より近代的なデータ表現のために
JSONは、JavaScriptオブジェクト表記法が含まれています。
何かに向かってあなたに戻って来る
学期の終わり。
>> しかし、再び、これは単にCS50自身のAPIのいくつかの一つです。
そしてエキサイティングなことは、今ではFacebook、これらの日であり、
Twitterと​​Googleとほとんどすべての人気のあるウェブサイトから
あなたが読めば意味APIのいくつかの並べ替えを、そこに持って
彼らのウェブサイト上の文書には、サインアップする
アカウントは、その後の上にソフトウェアを書き始めることができます
どのようなツールや会社があるが、提供されたデータ。
数年戻って私たち自身の教育フェローなど1
これのMac版を書きました。
だから左上のここにマックというリンクで、あなたが実際にすることができます
行う独自のMac上で実行されるMac OSのウィジェットをダウンロード
物事の同じ種類。
だからそれはすべてのこれらのようなデータセットの上に構築についてです。
学期の終わりに向かって、その上でしかし、もっと。
>> ちょうど得るの種類にバグにリアルタイムで迅速だからレッツダイビング、
物事は今日まで温め、一部の上に戻って考える
我々は先週見たもの。
具体的には、たとえば、私が先に行くと、プルアップさせ
ここでは、この例を示します。
Buggy1.c、ご希望の場合、これは当然のウェブサイトで提供されています
それをダウンロードして自分で周りをウロウロするのが好きです。
しかしみましょうこれはかなり短いプログラムでここでズーム、ちょうど
その基本的なビルディング·ブロックの一部の超高速総集編
私たちは本当にただ当たり前の服用を開始する予定です。
>> 青いものので、9行目1で、ちょうどアール
ソフトボールの質問。
だから、これらは単なるコメントです。
彼らは機能的な意味を持っていません。
しかし、彼らはノートだという意味でコメントしていること
私は、人間は、その講演の中で自分と後のように行われた
講義では、私は実際に何をこのプログラムを覚えることができる
それを介して行ずつ読み込むことなく行い、
私の心の中で歴史を再現。
また、私のような誰かにこのプログラムを渡した場合
あなたは、それがためにこのようなコメントで、あなたにずっときれいだ
プログラムが実際に何をして、または少なくとも何
プログラムがやっていることになっている。
それが正しいかどうかは、全く別の問題です。
さて、C言語では、複数行のコメントと、行にあることを思い出す
1ここで​​は/ *、マジックシンボルです。
それは、コメントの開始をここに来ることを意味します。
あなたが最後に到達するまで、ターミネーターと他には何も、重要ではない
* /、反対はどれですか。
だから私はここから80いくつかの奇妙な星を持っているという事実
左から右へと、本当にただ美的詳細です。
それは機能的な意味を持っていません。
>> 今どのようにラインを約11？
これは普通の言葉で何をしますか？
それは何？
読者：標準が含まれています。
デイヴィッドJ.マラン：[OK]を、良い。
だからそれはstdio.hライブラリが含まれています。
だからそれは何を意味するのでしょうか？
まあ、そのファイル内に、stdio.hは、全体の集まりです
関数宣言 -
それは、他の誰かが書いたコードです。
で宣言された関数との完璧な例
stdio.hはある -
今ではどちら好き？
だからprintfは、最も一般的なものの一つは、確かに、使用する
早い段階で、そのライブラリからあります。
私はそのコード行を除外した場合、Clangのは叫ぶために起こっている
宣言されていないシンボルの使用について私に何か。
宣言されていない何かがあるので、おそらくキーワードです
我々は、printfに見えるかをコンパイラに通知していない
我々は、その行を含めない限り、好きです。
そして、もっとダウン地球へ、本当に、何その行が言っていることです
それは、サーバーの上にあるどこにそのファイル、stdio.hを、開く
ハードドライブ、またはアプライアンスのハードドライブ、コピー＆ペーストそれ
右が私のファイルには、私なし
手動で行う必要がなくなります。
>> さて、かつて私たちは、ずっと前から私たちは始めます、主にここで降りる
ボイドが何であるかintと何離れてからかう。
しかし、今のところ、3行を見てみましょう
内の15〜17。
これは、ここで私はバギーとして主張している。
私のコメントで7行目は、 "10が出力されるでしょうと言う
アスタリスクのではなく、 "なぜ、これが、実際には印刷されません
10そのような星評価を行うか？
読者：[聞こえない]。
デイヴィッドJ.マラン：その通りです。
だから我々は0からカウントを開始していることに気づく。
そして、これは実際にはプログラミングの慣例であり、
数え始め、より一般的に、コンピュータサイエンス、
0からではなく、1。
そして、これは本当にただのための事実に由来する
例えば、私たちはステージ上で8人を持っていたとき、時
誰も手を上げなかったが、彼らがいた
すべての事実上のゼロ。
そしてそれは、コンピュータの大会だけの種類ですので、
したがって、0からカウントを開始します。
それは最低の数字だ場合は、バイナリで表すことができます。
>> そこでここでは0にiを初期化し始めました。
我々は0〜iが等しくなるように設定しました。
しかし、その後、私は、私は以下であると言って、ここでこのミスを犯した
10に等しい。
しかし、あなたは私がして、0から開始し、場合によって、私は行くと思われる場合
最大1、2、3、4、5、6、7、8、9、10に、私は実際に行ってきます
私が上がってきたので、画面に11星をプリントアウト
へと10に等しい。
だからここに簡単な修正方法は、次に何ですか？
読者：[聞こえない]。
デイヴィッドJ.マラン：ちょうどそれ未満に変更します。
あなたが本当にしたい場合は、これを行うことができます。
しかし、一般的には、それは眉をひそめている。
それで、0からカウントを開始すると、ちょうどあなたがしなければならない何かです
典型的に慣れる。
さて、それ自体では、この構造全体についてはどうですか？
このforループで15行demarks。
そこらのためには関数ではありません。
それはちょうど文です。
我々がスクラッチで見たようにそれは、ループ構造です。
そして、それは3つの部分があります。
への最初の部分があることに注意してください
セミコロンの左側。
2つのセミコロンの間の中間部分があります。
そして、右側の部分が右側にあり
第二セミコロンの。
さて、これらの最初は何をするのでしょうか？
読者：[聞こえない]。
デイヴィッドJ.マラン：バックありますか？
うん？
対象者：初期化。
>> デイヴィッドJ.マラン：初期化。
だから、これは何を意味するのですか？
我々は、iという変数を宣言しています。
私はint iを指定したので、それはint型です。
そして、私は0の値にiを初期化しています。
だから、これは本当に何言ってるの？
それは効果的に十分に私を与える、ちょっとコンピュータに言っている
メモリ、十分なRAMが、数に合わせ、次に置く
RAMは、そのチャンクの番号0。
そして余談ですが、少なくとも一般的に内部のintは、どのくらいの大きさです
アプライアンスの？
読者：32ビット。
デイヴィッドJ.マラン：32ビット。
だから、私にそうでなければ4バイトとして知られている32ビットを、与えることを意味し、
とかなり容易であるが、その中に値0を置くので、
それだけで、すべてのビットが0に設定を意味します。
>> だから今、ここで第二部は条件です。
と条件は、その名前が示すように、チェックされているものです
何度も何度もそれが真か偽だかどうかについて。
だから、これは単に、次のコード行を実行すると言っている -
すなわち16行、インデントだけの処理になるため、
下 -
長い間、私は10未満であるとして。
そして、このループの各繰り返しの後に、やる
この場合では、増​​分、i + +は。
さて、それは私である必要はありません+ +。
それは私かもしれない - 。
私はこれをしなかったなら、何の動作は起こっている
このプログラムのことですか？
読者：それは無限ループになるだろう。
デイヴィッドJ.マラン：それは無限ループのいくつかの種類になるだろう、
我々は負20億かそこら後に幸運を得る場合を除きます。
たぶん物事が有限の性質によって、折り返され
我々はint型のために割り当てられていることをビット数。
しかし、それは確かに10よりもはるかに多くを反復するために起こっていると
確かにここ以上の11倍。
>> そして今、同じように余談ですが、実現することが私+ +やi -
実際には単なる構文糖です。
それはちょうど少しより多くの何のための簡単​​な表記法です
明示的に次のように書かれて：
I = I + 1。
私と同じであること+ +。
それだけの種類の私に言ってもきれいに見えます+。
それは、より読みやすく、より簡潔です。
ので、ほとんどの人が代わりにそれを行う。
しかし、これは機能的に同じです
我々だけで何を見たか。
だから簡単に言えば、ここでクイックフィックスはちょうど私を繰り返すと言うことです
すべての方法を0から10未満に。
そして、我々は確かに10個の星を得るでしょう。
>> それでは、これを試してみましょう。
私は一番下に端末を開いてみましょう。
これはインチであることを私はディレクトリに行ってみよう
そして、私は今のところClangのを使って手動でコンパイルするつもりです。
そして、私は入力して、buggy1.cとしてコンパイルするつもりです。
そして今buggy1、なぜそのようなファイルまたはディレクトリがありません
buggy1と呼ばれる？
読者：[聞こえない]。
デイヴィッドJ.マラン：うん。
だからそれは、実際にはa.outと呼ばれています。
Clangのがどこにあるかだけ、Clangのを実行した場合だからリコール
コンパイラ、あなたがしたい名前を指定しない
あなたのプログラムに与える、それはa.outにデフォルトになるだろう。
だから、確かに私は、lsを実行した場合 -
おっと。
そして、私はdidn't - 黒と白の問題をいくつかの
あなたは、修正されています直面していました。
しかし、私はこれを行うことができます。
そこに我々はそこに左側にa.outを持っています。
だから我々はbuggy1の代わりa.outを実行する必要があります。
>> だから私は先に行くとこれを行うことができます。
。/ a.outの場合、入力します。
そして、私は明らかに何もしませんでした？
読者：保存します。
デイヴィッドJ.マラン：私のファイルを保存します。
そう簡単にコントロールSを打つか、に行くことによって解決されている
ファイルは、ほとんどのプログラムのように、保存します。
私がここに行ってみよう、画面をクリアし、再度実行します。
そしてバグがまだあります。
だから何が起こっている -
読者：あなたはコンパイルされませんでした。
デイヴィッドJ.マラン：ああ、良い。
私はそれをコンパイルされませんでした。
馬鹿みたいに、私が間違っているかを確認するコードを探しています。
だからカーンという音buggy1.c、今のa.out。
やれやれとは、保存された。
>> 全く新しいラインがないので、だからそれは少し醜い
プログラムのどこインチ
しかし、再び、それは単に美的ディテールです。
我々はそれらをカウントする場合、少なくとも、我々はすべき
現在、10のような星を参照してください。
さて、この第二のウォームアップの例についてはどうですか？
だからbuggy2で、私はこのバージョンは、あまりにも、印刷されていると主張
10個の星は、1行に1つずつ。
今回ので、私はちょうどように、改行文字を持っている
少しきれいなもの。
しかし、代わりに私が何を得るこれです。
だから私はカーンという音buggy2.cをさせて、入力します。
今では再びa.outのと呼ばれています。
入力します。
私は1つだけ新しい行、唯一の非常に最後に新しい行が表示されることを
次の行に私のプロンプトに移動します。
そして、まだはっきりと私は、その後、新しい行を*を印刷してきた
*は、新しいライン。
しかし、ここでバグは何ですか？
うん？
読者：[聞こえない]。
>> デイヴィッドJ.マラン：その通りです。
ので、Python、インデントなどの一部の言語とは異なり、
実際に、機能的な意味を持っています
Cのようなプログラミング言語 -
これから見るように、PHP、Javaスクリプト -
インデントは人間の利益のためだけでは本当にです。
だから私は、ライン16および17を下げてきたという事実は偉大に見える、
しかし、それはここでは機能的な意味を持っていません。
私は両方の回線がためにの一部として実行したい場合
ループは、その後、私はこれを行うことによって、中括弧で囲む必要があります。
場合にのみ、その角をカットし、中括弧を省略することができます
ケースは何ですか？
読者：1行だけ。
デイヴィッドJ.マラン：ちょうど1行。
だからそのような構文の詳細の素敵な種のわずかなものだ
あなたは、そのうちの2つ、3行を書く時間を無駄にしない
中括弧は、わずか一行のコードを書き込むことができます。
しかし、あなたは、2つ以上の行を持っているならば、我々
確かにこれを行う必要があります。
>> だから今、私はこれを保存しておきましょう。
私が先に行くと再実行Clangのみましょう。
その後、私はa.outを再実行してみましょう、そして今、私はそれらを1行に1つずつ取得します。
さて、a.outは再びプログラムのダム名の一種である。
どのように私は実際に私にファイル名を与えるためにClangのを伝えることができます
それはbuggy2自体のように、よりユーザーフレンドリーにするためですか？
もう少し明らかに？
読者：[聞こえない]。
デイヴィッドJ.マラン：[OK]を、ので、私は実際には非常に取ることができる
ユーザーフレンドリーなショートカットとちょうどbuggy2を作る書き込む。
私はこのケースインチcを指定して、Enterキーを押さないでください。
とものを作ること、それが私のためにbuggy2.cによってコンパイルされません
それを行うにはClangのを求める。
具体的には、Clangのを呼び出して、それは方法の詳細を使用してClangのを実行
私は実際には必要以上のコマンドライン引数またはスイッチ。
時間では、これらの様々のものをすべてに戻ってくる
不可解なハイフン付きの表現を意味します。
しかし今のところ、それはちょうど私の手間を省くことだ
覚えていなくて、それらののすべてを入力しなくて
様々な表現をハイフンでつないだ。
そして、それの利点は、最終的にある
今私はbuggy2を持っていること。
私はこれを手動で行いたい場合は、しかし、私
代わりにこれを行うことができます -
カーンという音は、-o buggy2その後buggy2.c。
そして、それは同様に私にbuggy2というファイルを与えるだろう。
>> だから要するに、Clangのはコンパイラだ。
メイクはちょうど私達がより多くのを使用するようになると使いやすいツールです
多くの、それだけのために開始されるため
私たちのために物事を単純化します。
そして、我々は最後には0を返す。
今のところ、ちょうどので、私たちはその部分をからかい始めましょう
今日、水曜日に。
これに対して何か質問はありますか？
うん？
読者：[聞こえない]
そこに引用符で囲まれたlsの？
デイヴィッドJ.マラン：[OK]をクリックします。
私は、私はいくつかのマジックをやっていた引用符でlsコマンドを入力したとき
バグを修正するための舞台裏。
私たちはあなたの多くを語ってきたように私は、忘れてしまった
行うための掲示板、 -
sudoをyumの-yを更新appliance50 - 私たちはこの今をやる。
おぉー、右スペルだという。
だからアプライアンスには、オペレーティングシステムのようなものです。
これは、Fedoraと呼ばれるこのオペレーティングシステムを実行している。
そして今、私のためにインターネットの接続速度が遅い、私はしました
本当にまずいことになって。
私たちが行うことを教えてくれように、sudo yumのアップデートを実行している
問題セットは、基本的に自動アップデートを実行しているようなものだ
Mac OSまたはWindowsインチ
と、非常に開始時にこれを実行している理由
なぜなら我々は、アプライアンスを作成し、私は問題の集合である
めちゃくちゃ、私は誤って、全てのプログラムが見えた
あなたがそれらを見ていないされている理由黒い画面上に黒
デフォルトでは。
しかし、アプライアンスの最新バージョンは、この問題を修正。
私はインターネットを持っていたら、私は休憩中にそれを修正します
接続。
>> 引用符は、ただ、非常に慎重に、私のミスを隠してそう
明らかに。
その他の質問は？
はい？
読者：作るから来るのでしょうか？
[聞こえない]
デイヴィッドJ.マラン：良い質問です。
作るどこから来たのか？
それは長い間、何年も前から存在しているLinuxのプログラムです
CS50前。
そしてそれは、Fedoraのようなオペレーティングシステムが付属しています。
それはCS50ライブラリからのものではありません。
実際には、CS50ライブラリから来るだけのもの
これまで、我々が見てきたことは、GetString、getIntは、すべてのもの
それらは、関数、ワード文字列を取得し、そしていくつかに
程度は、bool単語。
我々はCS50に飛び込むときにしかし、我々はその離れていじめるよ
アプライアンス自体。
>> そうです、ここにもう一つ質問。
読者：あなたはどのようにして、バギー次に作ると言った
コンピュータが[聞き取れない]を知っていますか？
デイヴィッドJ.マラン：良い質問です。
だから、あなたがどれだけ、buggy1を作るか、またはbuggy2をmakeを実行すると
知っていることでしょうか？
あなたはbuggy1を作ると入力した場合ので、デフォルトでは、のためにルックスを作る
ファイルがbuggy1.c呼ばれる。
そしてそれは、適切なClangのコマンドを実行
これにより、a.outというデフォルトの出力ファイルを上書きします。
実際には、我々が作るものを見れば、何を -
これを終了してみましょう。
私たちが実際にやっていたし何を見てみると、、buggy2を作る
それは既に最新です。
だから、私は、rmコマンドを削除してみましょう
プログラムは私が前に書いた。
私はそれを削除することを確認するには、Y-E-Sと入力。
私は今、この非常に長い行でそれを気づく、作る行う場合
この最後のものはここには、-o buggy2あり。
すべてのmakeがやっていることに、いわば、その引数を渡している
私はそれを自分自身を入力する必要がないように打ち鳴らす。
>> ので、すべての権利、行政の迅速なカップル
アナウンス。
だから、公式にこれが来始めたセクションのために
日曜日、あなたは常に場合は、持参したいと思う
あなたは、1つ、ノートパソコンを持っている。
ノートパソコンをお持ちでない場合は、で私に手を差し伸べるん
私にメールをドロップします。
そして、我々は、ワークフローを考え出すだろう。
何が一般的にはセクションで見つけることができます、彼らは一部だということです
概念、一部ハンズオン。
我々は、具体的に質問のセクションの一部を使用します
今週の問題セットの一部を通って歩く
講義から概念的な材料。
そして、それは現在の問題·セット内のすべてのです。
そして、我々はまた、時々、いくつかの実践的な活動に飛び込むよ
時々、提出することが要求されるの
それはないだろう。
たとえば、この最初の週に、彼らは同じように意図している
ウォームアップエクササイズ。
そして、あなたはそれらの問題がまさにそれ実際にあることがわかります。
それらは必ずしもかなり小さくなるためのものではなく、していない
必ずしもではありません書き込むための自明なプログラム、
自分自身とのエキサイティングなこれらに良い機会です
の快適な空間の中で、新しい機能を備えた、構文と一緒に練習
あなたはクラスメートのいくつかを持っているセクションは次のように提示
あなたのTF同様。
>> と私たちは時間をかけてやると、CS50空間と呼ばれるツールを使用している
それによってだけではなく、あなたが、CS50 Applianceを使用しますの
代わりに、あなたができるようになりますブラウザのWebページに移動
セクション中にブラウザウィンドウ内のコードを記述する。
あなたがオプトインした場合、その後、あなたの指導員は、次に示すことができる
それはあなたがお使いのブラウザで、画面に入力しているが何であれ
または匿名かどうかをクラス全員の前でポップアップウィンドウが、
公に、彼または彼女はその後でウォークスルーすることができ
クラスメートはあなたがよくやった、あなたにも何もしませんでした。
そして再び、残りの部分は、このすべてがきれいに匿名化することができますのでご安心ください。
しかし、それははるかにのための良い機会になるでしょう
講義のようなものよりも双方向性ができます。
>> 一方で、我々はこれらの事はスーパーと呼ばれる必要があります
オプションですが、中に誰にでも開かれているセクション、
あなたがより多くの総称これを行うことができるようにクラス、
問題は1を設定します。
ここにスケジュールがあります。
これはまたcs50.netでホームページに掲載されています。
ハッカー固有のがあるだろうことに注意してください
1明日の午後。
そして、我々は1今日と明日1を撮影し、それらを掲示します
24時間以内にオンライン。
あなたは、これらの時間のいずれかを行うことができないならなくても心配しない。
そして再び、スケジュールがcs50.netでオンラインになりました。
>> 自体を区画の面では、あなたは得ている必要があります
あなたは見つけるためにコースのホームページにアクセスするように指示する電子メール
自分のセクション外。
、人生は変わりました、あなたのセクションを変更する必要がある場合
問題ではありません。
同じURL、cs50.net/section、単数形に戻り、
あなたができるように、あなたは同様のフォームに必要事項を記入します
その後、私達にあなたの好みを与える。
そして、我々は我々ができるものとして、今週の終わりまでにフォローアップします
収容する。
先週は、私たちが議論CS50用いることを提案したことを思い出し、
講義の中で当然の議論ツール。
だから我々は尋ねたとした40の質問がありました
講義中に答えた。
だから、うまく動作するように見えたので、私たちは続けていきます
これを行うにしよう。
講義中に、あなただけの快適な調達を感じていない場合
あなたの手ではなく、問題を修正しました。
cs50.net/discussに進み、そこに投稿し、私たちの教育の1
フェローは、電子的にそれに答えるか、またはそれらのいずれかが発生します
応じて、聞いて匿名であなたに代わって手
質問の性質に依存する。
とフィードバックの観点から、一般のpsetは次のようになります
一週間以内に返品。
のセクションでは実現することは非常に少し時間がかかるので、
平衡、第一PSET、0と1は、少しになります
物事が落ち着くように遅らせた。
しかし、来て数週間でそれをお楽しみに。
>> すべての権利は​​、ので、私は私の深刻な上に置くことができ
ちょっと声。
だから、これは実際になるように興味深い気候です
この議論を有し、他にどのような物事のすべてを持つ
キャンパスそれに関連する上で起こっている。
しかし、CS50は確かにこの特定の歴史を持っていた
多くの人にとって、このコースは、毎年できるだけ多くのトピック、
年、クラスの約3％のAd-ボード。
この直近の年、2011年、CS50のAd-乗り込んだ35名の学生。
これは、私が思うに、明確性の欠如によるものではない。
コー​​スのシラバスに、のページがあることに気付く
ラインが​​どこにあるかを説明文。
同じ文が一人一人に繰り返されていること
問題は、ページ1に設定します。
>> だから、僕は本当にこのように今日言及
この点を留意し人々。
そして、我々は様々なものを試してみた。
そして、私は我々が今日やろうと思っただけで何に時間を割いている
実際に出ている過去の例をいくつか見て。
のではなく、実際に、これらのような汚い小さな秘密を守る
学生がやっていることを、我々が検出したかを指摘する
それは、本当に包括的な動機が何であるか
でも、この会話をしている。
そうは言ってもだから、ラインは基本的にこれです -
シラバスごとに、あなたを歓迎し、あなたがして、奨励されている
クラスメートと話す。
それは、これらの共同を持っていることの全体の目的だ
オフィスアネンバーグにおける時間と人々のために奨励
一緒に動作するように最終的なプロジェクト。
それが実際に書くのに時間来るとき、線が描かれている
あなたの最終的な解決策。
擬似コードで言えば、元気はつらつで、英語で言えば、
元気はつらつで。
同級生を電子メールで送信おPSET、彼らが目を通すせる
手が続けて入力として画面、
ラインの上にも。
特定のラインのためのシラバスに目を向けるようにしてください。
>> しかし、ただ、これは残念なことであるかの絵を描くために
現実には、ウェブサイトがそこにあることを認識し、その
このクラスと他の多くのクラスからのソリューションを持っています。
あなたやあなたの約3％は、これが存在することを知っているという事実
私たちは、これが存在することを知っていることを意味します。
ウェブサイトでは、このようにそこにあるという事実
実際にあなたの問題セットを行うために誰かを支払うことができる - これがあった
昨年思いついた実際のケース。
これはodesk.com呼ばれるサイトです。
そしてティムは上に掲載されましたここの人の名前だった
このウェブサイトおよび彼のPSET 7を実行するために誰かを尋ねた
この特定のケース。
まあ、odesk.comは非常グーグル可能であり、我々はあまりにアール
グーグルで非常に良い。
ここでは、あまりにも、サイトがあります - そしてこれはむしろだ
率直に言って、凶悪。
[笑い]
デイヴィッドJ.マラン：このサイトについてのおかしい事はあるか
あなたはについてのページを読んで、彼らは彼らの企業の話
文化とどのように顧客サービスは彼らのナンバーワンである
あなたの割り当てが得ることを確認するために優先度、
定刻になりました。
>> しかし、本気で、再び、事実、これらのサイト
存在しても、我々が実現、を認識している
サイトのこれらの種類の。
そしてあなたに、一般的にこれを形成しているものの意味を与えるために
かかり、我々は一般的に大きなスキャンダルを持っていない人
大規模な任意の種類のコラボレーションではなく、アール
それはあなたのように持っている弱さのこれらの深夜瞬間、だ
やらねばならないことが多く、それは4:00 AMです、あなたが消耗していて、あなた
自分自身に思う、まあ、私はちょうど私を見てみましょう
ルームメイトのか、私の友人のコードなど。
そして、これの症状は残念ながら学生が関与
これと学生Bの提出のような何か提出
コンピュータでこのようなものは、確かに、
理科の授業では、コンピュータ科学者のために非常に簡単です
ソフトウェアを使用して検出することができます。
これは、一種のをしました別の一般的なパラダイムであり、
多分で話して、誰かと一緒の仕事をして
英語、うまく、擬似コード。
しかし、それは実際に提出する時間が来ると、psetを
ちょうど電子メールやDropboxの等を介して交換される。
しかし、これがあると、それが目立たなくしようとする試みで
何が起こったのか、これが提出されているものです。
これは、あまりにも、揚げ足を取るのよく書かれた作品をしない
私たちが実際に検出しなければならないようなソフトウェア
物事のこれらの種類の。
そして実際、我々がやっていることのすべてを比較してソフトウェアを実行している
過去一年間のすべてのに対して、今年の応募
提出物は、すべてのものに対して、我々は上にある
そこにすべてのジョブサイトに対するインターネット、。
それはすべての非常に自動化されたのです。
それで我々は97％に偉大な公平に実際にこれを行う人
本当にこれで、他の中でそのロバをオフに取り組んでいます
クラスとその努力のすべてを入れないように作業
彼らは最終的に提出し、自分のです。
そして、私は年齢のために行くことができます。
>> これらは、昨年の例ほんの一握りです。
少数の学生は、psetの2のために同様に、これらのファイルを提出
PSET 3、PSET 4、PSET 5、PSET 6、PSET 9。
このケースでは、これはクイズ0、昨年においては、二つあった
多くの間で同じようにこの文を提出した学生
他、 "タイプの要求 - "ドット、ドット、ドット。
そうであっても600のクラスで、我々はこれを検出しなかった
上のクイズを提出した。
だから要するに、これは - 率直に言って、私はこの種のを持って嫌い
会話 - しかし、これは本当に意図的な努力である
今年はその数を削減しようとする。
なぜなら我々は言うにもかかわらず、物事のこれらの種類ごとに
今年、私はいくつかのためにそれに宿ったという現実を考える
いつもより秒数と実際にちょうど指摘
何は、少なくとも、そのような大したことではありません、ええ、のように思えるかもしれないことを
両方に公平に見て、この特定の瞬間に戻って考える
ここにあなた自身およびあなたのクラスメートに。
あなたは今までのようにご質問があるので、もしどこに行
ですが、ただ個人的に私に手を差し伸べてください。
しかし答えは、常に完全に強調されている
最後の分、後半日で現金。
またはそれはどんな遅く日がないという問題だ場合、
正直なところ、個人的に私にメールして。
我々は何かを考え出すだろう。
危険にさらされてハーバード大学でここにあなたの時間をかけないでください。
>> さて、私たちは気分を明るくするべきだと思ったので、私
次のスライドとしてこれを含んでいた。
[笑い]
デイヴィッドJ.マラン：当サイトは偉大だった。
私は実際には少し気を取られました。
この1つはあります。
そして、この1つは驚くべきものだった。
作るときわかりましたので、深夜にその子猫を考える
それらの決定。
ので、戻ってより楽しく、それほど深刻なものに対するすべての権利、、のような
条件。
>> すべての権利は​​、私たちは、これらについて簡単に話をしました。
これはおそらくからかなり馴染みのものです
スクラッチの世界。
とスクラッチの世界では、我々は時々にこのようなニーズを持っている
道路でフォークを作る行く。
どちらかここにあれかこれか、またはこの他のことを行う。
そして、我々はこれを行うにしたいとき、私たちは、この場合、C言語で今、使用することができます
else構造。
そして、ここで我々はブール式を持っています。
例えば、ここにブール式は、CANまたは
我々はこの条件を持っているかという意味で、一緒に、
その条件。
我々は、ことができますし、我々がしたいという意味で、一緒に、
この条件と、その条件を確認してください。
そしてここで我々はそうではありません、これ今switch文を持っている
条件のそれらの種類と構文的に類似していますが、それ
他のそうでなければ、他の場合、もし、私たちがもし同等のものを行うことができます
場合、単にそれらのケースバイケースのように列挙することにより、
ケースバイケースで。
だから我々はそれらの最後の時間を見ました。
そして、我々はループのようなものにも触れ始めた。
私たちは、ちょっと前に、これらのいずれかを見た。
しかし、これらの他のループ構文があります。
>> 例えば、ここでは、この1。
（条件）しながらだから、何度も何度もこのことを行う。
だから基本的に、この間で異なると思われるもの
ループと、このwhileループのここですか？
ループと、このwhileループのこの。
うん？
それは何？
読者：[聞こえない]。
デイヴィッドJ.マラン：良い。
だから、ループ条件用のに対し、明確にあり
以上の構文。
この初期化があり、この更新プログラムは、そこだ。
whileループでは、この条件はすでにある。
だから、それがために対ダウン比べ少しだと思われる
我々は、変数を持つようにしたいと私たちが望む場合にループを意味し、
インクリメントを持って、私たちは実際に持っている
この事は私達自身を行う。
>> だから私は先に行くと、geditを開いてみましょう。
私には、アプライアンスに切り替えてみましょう。
そして、ちょうど小さなクイックたとえばそのためにしてみましょう
他からこれらのいずれかが区別されます。
そして、ここに私の心の奥に、私は一つのことを言う必要があります。
私は具体的に名前ティムに言及した。
ティムは、実際に学生が何を見つけることを試みている人だった
彼らのために彼らの宿題。
我々は、特定のセクションに何ティムがありませんでした。
だから私は、学生に開示されているといけないので、それは学生ではなかったが、実現しています。
それは、物事を行うインターネット上のランダムな人だった
プロキシ昨年によって。
だから我々はあまりにも、それを見つける。
そこでここでは、この場合、私は先に行きましょうと
新規ファイルを開く。
ファイル、新規作成。
これは、ここで私にタブを提供します。
私が先に行くし、それを保存しておきましょうloop.c.
私が行って、[保存]をクリックしてみましょう。
そして、ダウンここで、先に進み、書き込みを開始しましょう
＃を含む。
私はズームインしましょう
今、私たちは、int型のmain（void）をやる。
今の私が先に行くと対応させてint型私= 0（のは、i <
ああ、10; i + +は）。
そして今、私は先に行くと、私はあの星をプリントするつもりです
以前行った。
そして、このプログラムの最後に、私達はちょうどに行くんだ
ちょうどので、私の指示に従って、新しい行を印刷
すべて乱雑に見えるものではありません。
0を返す。
構文的には正しいように見える？
今のところ。
それでは見てみましょう。
>> だから、私の端末ウィンドウに移動し、私はズームアウトしてみましょう。
私はこれを呼び出したためと、私が先に行くと、ループを実行してみましょう
事loop.c.
だから、ループを作る。
[OK]をコンパイルしているようだ。
私はループを実行し、現在入力してみましょう。
そして、それは10個の星をプリントしているようだ。
だから、whileループに変換して、何を見てみましょう
問題の種類私たちは旅の上。
これに代えて、だから、私はここに行くと、私がいる間に言わせて
10未満 -
私はforループを取り除くことができます。
[OK]を、我々はすでにいくつかの問題を持っています。
だから条件は同じですが、私は明らかに不足している
初期化。
私はインクリメントをしないのです。
私がしようとすると、コンパイラは、お​​そらく私に何を教えてください
このプログラムをコンパイル？
うん？
読者：[聞こえない]。
>> デイヴィッドJ.マラン：良い。
だから、宣言されていないような何かを言おうとしている - これに
場合は、変数iが。
そして実際、宣言されていない識別子のiを使用しています。
それで、これはPHPのような言語とは対照的であると
PythonとRubyは、これであなたのいくつかは、見覚えがあるかもしれません
あなただけの種類の変数を使用し始めることができる場所
行き当たりばったりではなく、それらを宣言することを心配する必要はあり
明示的に常に。
C言語では、JavaやCのような言語で+ +である必要はあり
明示的なスーパー。
あなたは、iという変数が必要な場合と、あなたは私を伝える必要があります
変数の種類は、それはです。
だから我々は次のようにこれを修正する必要があるとしている。
私はここまで行くとint iを入力する必要がありますするつもりですので、
私は、iという変数を宣言しています。
今、私は一歩を飛ばしてきました。
私は明らかにそれを初期化していないけど、見てみましょうということであれば
最低はClangのは文句を言うのをやめることができます。
だから私は、このプログラムを作り直してみましょう。
>> すべての権利は​​、今やそれだけで文句を言っている
別の理由がある。
"ここで使用されたときに変数 'i'は初期化されていません。"すべての権利は​​、そう
それはかなり明白だ。
初期化は、単に値と等しい値に設定することを意味します。
そして、我々はそれをしなかったので、私は0に等しい試してみましょう。
それでは、再びこれを試してみましょうと再実行Clangの。
この時間をまとめた。
そして、私はそれを実行しようと思います。
しかし、大きな古い無限ループは、私がやったので、
初期化は、私は条件をやってきましたが、私はやったことがない
インクリメントの任意の種類。
だからどうすればインクリメントを行うことができますか？
私が持っているつもりのようまあ、whileループの中で、それは感じている
なぜなら多くの最初のように、ループの中にそれを行うには
とのようなループ構造をしているの週の例では、
靴下と自己カウントで、我々はしなければならなかった
最後の最後で何かが、次の行に戻って好きです。
私が先に行くとこれを行う場合、何i + +はここですか？
のも、これをコンパイルしないようにしましょう​​。
すでに私をキャッチ。
ここで何が悪いのでしょうか？
読者：[聞こえない]。
>> デイヴィッドJ.マラン：だからそれは間違いなくint型ではありません。
それは私です。
前のように、中括弧、
インデントは十分ではありません。
だから今は、この構造を持っています。
iが10未満の間、そう、スターをプリント
次にiをインクリメントします。
ループ作品はあなたが打つとすぐにということである一方、道
このケースでは10行目のように見えるループの下端、
それはその時点では、6行目に戻ってになるだろう
条件は、再度チェックされます。
私はまだ10未満であるなら、私達はライン8をやると
その後9、次に我々は10を打つだろう、と6に戻って、もう一度、
何度も何度も、そう長くiは10未満であるとして。
だから再実行ここで行ってみましょう。
>> さて、私たちは大丈夫まとめました。
再実行してループさせて頂いております。
そして今、それは実際に動作しているようです。
ここだから損得勘定？
さて、これまでのところPLOの全体が、実際にそこにはない -
とてもかわいい。
よし、だった - ああ、事故だった。
よし、それでは、forループに戻りましょう。
彼らはスーパー明示しているためこのようにforループいいです。
そして、彼らは書くことが少し不格好いるにもかかわらず、それはだ
非常に強力であり、それはあなたが行うことができます
一度に複数の事。
ループは値だけの膨大な量を持っているように思えませんが
まだ、私達はちょうどより多くの作業を行う必要があるようにそれは感じているので。
我々は、ここで初期化を我慢する必要があります
ここに更新して、我々はすべてのことを行うために覚えておく必要があります。
だから我々は、whileループが実際に貸すことを時間で表示されます
自分自身だけで異なった文脈に、異なるデータ
リストやハッシュテーブルのような構造が、我々が買ってあげるもの
学期の途中で。
しかし、今のところ、として知られているこの第三のタイプがあることを知っていますか -
whileループ。
そして、我々は、この簡単に見てきました。
そして、これは、pset 1と超便利かもしれません。
あなたがいるかどうかを確認後、何かをしたい任意の時間
ユーザーが協力して、彼らは、再びそれをしなかった場合、ドゥー
ループは、論理のようなものに向いている。
ここで上から下への順序が示唆するようにだって、
文字通り、これを行うことを意味しな​​い。
と何度も何度もこれを行うには、それが何になるのでしょうか？
たぶんそれは、呼び出し元の場合、getIntまたはGetStringを意味し、
場合、getIntまたはGetStringの値をチェックしてから叫んで
ユーザーでそれらを求めることによって、協力していない場合
何度も何度も。
一度何かをしたい場合には、
その後いくつかの状態を確認してください。
>> それでは、これを試してみましょう。
私は実際にdo-whil​​eループにすぐにこれを変更してみましょう。
そして、私は先に行くと、次の操作を実行するつもりです。
だから、次の手順を実行します。
int型私= getInt（）を実行してみましょう、しかし、最初のユーザを教えてみましょう
何をすべきか。
ちょっと違う今回だから。
"私にはintを与える"。
だから、私はそのためにprintfを使用します。
そして今、私はここに行くつもりです、と私はこれをするつもりです
私がいる間、より大きい、としましょう​​ -
見てみましょう、iは、0より小さい、としましょう​​か、私はある
10より大きい。
言い換えれば、私はただ、1から9までの数字が欲しい
任意。
だから私はここに結合されたブール式を使用しています
私は、10未満0以上であることを確認している中で
場合、私は再びここにこのループを行います。
だから、もう一度、これを行う -
私がいる間に0未満またはiが10以上である。
>> それでは先に進み、我々はそれをやったら、これを行うことができます。
だけで簡単に一応の確認をすることができましょう。
のprintf（ "おかげで、私は％dです"、i）である。
この単純なプログラムでは、int型の入力をユーザーに要求しますので、
それはいくつかの範囲は、1〜9まで、内のを確認します
その後、彼らはちょうど彼らに何を思い出させることによって、ユーザーに感謝
ほんの少しのサニティ·チェックとして、で入力した。
しかし、これは意図したとおりに動作するかどうかを見てみましょう。
私はここで頭を下に移動して、再実行してループを作ってみましょう。
うーん。
"宣言されていない識別子 'i'の使用"を参照してください。それが不思議だ。
私は我々がすることを決意し、と思った。
同じ症状が異なるコード。
うん？
読者：[聞こえない]は、2つの内部で、私たちがしなければならない
[聞こえない]。
>> デイヴィッドJ.マラン：その通りです。
だから、これは実際には、スコープとして知られているトピックに私たちをリードしています。
これは、Cは、再び、それは本当に文字通りあなたを取ることがわかった。
あなたはこのような何かをしている場合、あなたはint型を宣言する場所
し、それにいくつかの値を代入する、しかし、あなたは、その内部を行う
波括弧の中に、どのようなC言語のしていることはあなたということを前提としている
唯一私が内に存在するとして知られているものを32ビットにしたい
行のコンテキスト内でそれらの中括弧の文脈では、
6〜9。だから私が宣言され、それが割り当てられて
8行目の値が、できるだけ早くあなたがの外に出るように
中括弧の下の9行目は、私がされなくなった
スコープ、いわば。
S-C-O-P-E。それは右の文脈ではもはやない。
だから今は私にはないので、私たちもしていなかったかのようにそうではあり
すべてでそれを宣言した。
>> もしそうであれば修正は、このような何かのために次に何
理由は、私が中括弧内で宣言されていることである
明らかに悪いですか？
ここですか？
読者：[聞こえない]。
デイヴィッドJ.マラン：うん。
だから我々はそれを外で初期化することができます。
だから私は先に行くと宣言することにより部品を削除させ
私は、タイプを​​指定して、私はここでそれをやらせる。
だから、5行目で、それが今では "私にはintを与えます"と言うそれは私が呼んでいます。
9行目に注目してください、私はこれを行うにはしたくない、なぜなら私は
すでに32ビットがあります。
私はのためにコンピュータをお願いしたくない
別の32ビット。
私はそれらの同じ32ビットを使用したいと思います。
そして今、私は、5行目で宣言されているため、それはまだ合法だ
11行目と12行目でそれを使用する。
>> だから私はこれをコンパイルしようと見てみましょう
Clangのが停止した場合に叫んで。
ループを作る。
だから今は、 "関数の暗黙の宣言です
'getIntは "C99には無効です。"それは何ですか？
うん？
読者：[聞こえない]。
デイヴィッドJ.マラン：うん。
だから今、私は実際にgetIntを使用していること、これはものではありません
ちょうどC.この付属しているCS50から来ている。
だから我々はここでは必要となります。
と私がダウンしてプロンプトに戻りましょう
ここで、再実行してください。
さて、最後に。
今、私たちはあることと、他のエラーが解決した。
私は今ではループを実行すると何が起こるか見てみましょう。
"私にはintを与えます。"私はそれを11を与えるでしょう。
私はそれを-1を与えるでしょう。
私はそれをfooを与えるでしょう。
私はそれを5を与えるでしょう。
そして今、それは確かに動作します。
しかし、プロンプトがここに理由で変更。
なぜそれが、これらの時間のいずれかを再試行と言うが、私に与えました
他の三倍をint？
なぜその動作が違うのですか？
聴衆は：それは文字列を与えた。
デイヴィッドJ.マラン：申し訳ありませんが？
読者：あなたはそれを文字列を与えた。
デイヴィッドJ.マラン：うん。
だから我々は、それをこの3回目の試みで文字列を与えた
私は、fooを入力したとき。
fooは文字列です。
それは明らかにint型ではありません。
とCS50はgetIntを実装している方法であることを我々
何かだかどうかをチェックしない10未満0以上
どのように我々はどのような事前に知っていないため、あなたのために
あなたが望むint型？
しかし、我々は最低限必要なのを確認することができ、少なくともユーザでし
整数を入力？
そして、彼らがいなかったならば、我々は上に "再試行"と入力して、ユーザーを怒鳴りつける
画面が表示されます。
>> だから今我々はループしているプログラムがあります。オーケー。
さて、これらのどれが良いの構築物の一種ですか？
だから、これは、物事が少し面倒な仕事をし始めるところです
ここで変数を宣言するために覚えておかなければならないという事実
あなたには、いくつかの中にそれを使用したい場合
中括弧と外。
しかし、これは最初は少し不可解なように見えても
視線が、もう一度だけ、シンプルなロジックを覚えています。
C言語で何かを使用するためには、それが機能だかどうかを
それは可変です、あなたはそれが関数であればそれを含める必要が
いくつかのライブラリで、またはあなたはそれを宣言する必要があります。
しかし、今ではその事実を余分に注意する必要があり
あなたは適切なスコープで宣言している。
かっこの中にきつくそれを入れていない。
>> だから私は、実際にロールバックすることができます。
私たちは以前から、例えば私たちのに戻って、私が行けば
背中にintのデータ型はint i = 0のときは、i <10; i + +は、私
今、このようなprintfの星、、[閉じる括弧を行い、
printfの私は今です -
私がしようとしたときと同じロジックによると、何が起こるだろう
このプログラムをコンパイル？
読者：無効な識別子です。
デイヴィッドJ.マラン：だからそれは別の無効な識別子ですが、
定義されていない識別子です。
さて、その理由は少し違う。
そこには、中括弧は、ここで明らかにありま​​せんが、同じ
アイデアは、同じ有効範囲の物語が適用されます。
あなたは、私の内側のような変数を宣言した場合
forループは、明示的にカーリーを書いていない場合でも、
中括弧は、まだそこにいるように精神的にそれらを考えている
ケースiはforループの内側でのみ有効です。
あなたがた、次の行に得れば、それは有効ではありません
この場合は今10です。
だからスコープなどのほんのいくつかの問題。
すべての権利は​​、何か質問？
>> すべての権利は​​、これは、些細な小さなプログラムの一種です
ほんの少し星をプリント。
しかし、あなたはここでこの歌を覚えていれば見てみましょう。
これは、子供が上に歌って信じられないほど迷惑な歌です
スクールバス等が挙げられる。
しかし、何それについて素晴らしいのは、それがこの周期性を持っているということです
それによって、それは、 "壁にビールの99瓶だ
ビールの99本。
、1を降ろして受け渡し、上の98ボトルのビール
壁。 "そして歌はその後、その後、97、96を繰り返し
95、次に94、すべての方法あなたが実際に得た場合は0までその
遠くバス上。
だから、これは私のために、道具のソートするための素晴らしいプログラムです
神よ、あなたはわずか数でこれを実装することができれば
コー​​ドの行では、あなたはこれに全体の歌詞を吐き出すことができる
非常に迅速に歌。
しかし、道に沿って、我々は現在、いくつかを離れていじめるために始めることができます
現在、これらの基本的なループ構造ともの
我々は自分自身を記述する関数を紹介し、値を返す
私たちの周りに渡すこと。
しかし、最初に、なぜ我々は先に行くと、私たちの5分を取ることはありません
ここで破る？
そして、私たちが帰ったら、私たちはこの歌を歌います。
>> すべての権利は​​、私たちは戻ってきた。
そして、私は我々が今この歌を歌ってくれると言うとき、私は意味
プログラムではなく、口頭で。
そこでここではその一実装ですbeer1.cを持って
特定の曲。
そして、ちょうど何に慣れていない人のために、明確にすること
このことは、同じように、私が先に行くように見える
と入力し、beer1を作る。
今私はbeer1を実行してみましょう、と我々が表示されますか - どのように多くのボトル
ビールがあるでしょう？
歌が言うように私は、99を入力します。
入力します。
そして今、我々はスクロールした場合 -
おっと - 私たちは、このすべてをスクロールする場合、我々が表示されますその
これは確かに全体の歌を歌うんでした。
ちょっと待ってください。
私のスクロールバーが少し台無しだ。
大きいウィンドウを使用してみましょう。
beer1、99だから、そこに私達は行く。
そこでここでは、はるかに高速で全体曲歌った
それは我々がされている可能性よりも、コンピュータ。
そこでここでは、しかし、周期的な性質に注目してください。
次に "それを渡し、1テイクダウン、99その後、99それ言う
周りに、 "後、98。
そして今、それは何度も何度も繰り返されます。
>> だから、これは実際にいくつかの種類のための絶好の機会です
構築ルーピング。
私はここのコーナーをカットするようなものだということに注意してください。
私は壁に "ビールの98ボトルを言っていることに注意してください、
97壁にはビールのボトル、 "それはちょうどそうだった
我々はビールの1ボトルに到達したとき、私は持っていないこと
英語の文法を心配する。
しかし、もし我々はまた、少しでこの問題を解決することができ
条件、多分。
この数が単数である場合は、先に行くと "ボトル"と言う
それが複数あれば、それ以外の場合は "ボトル"と言う。
しかし、今のところ、私は完全にその角をカットしています。
だから我々はここに持っているものを見てみましょう。
だから我々は、上部にいくつかのコメントを持っている。
私としては、これら2つのライブラリを含むよ
我々は一般的にしてきた。
そして今、私が最初にスクロールダウンしてみましょう
実際のコード行。
17行目は、メインキックオフ。
ライン21と20は、そこにどのように多くのボトルビールのでしょう持って？
そして私はgetIntを呼び出す。
そして今、私は、健全性チェックのビットを持っている。
>> だから、これは私たちが今まで採用し始めましょうという規則です
より厳密にユーザーの入力を確認してください。
時にはあなただけそれらを再度要求したくない
と何度も何度も。
ユーザーはねじアップいただくと、罰金は協力しません。
終了し、ちょうどそれらに対処しない。
となるように、私はここでやってるのよ。
nが1未満である場合、私はちょうど、ユーザーで叫ぶつもりです
"申し訳ありませんが、それは意味がありません。"そして私はに行くよ
任意に1を返します。
だから、もう一度、これは単に慣れるための慣習です。
今のところは、信仰にそれを取る。
しかし、今まで、私たちは常にあるので、0を返してきた
我々は、0のとき何を返すと言っている？
聴衆：成功。
デイヴィッドJ.マラン：成功、すべてです。
だから今我々は最終的に考えるように開始している
非成功 -
- つまり、コーナーケース、エラー条件で
今、私は無限の供給を持っている、または少なくとも40億
私のプログラムで間違って行くことが可能なもの。
そして、私はそれらの個々の数字の割り当てを開始することができます。
さて、一般的にはそれだけで返すようにすればよい
0以外の値。
だから我々は、単に今のところ1を返すつもりだ。
しかし、1を返す理由は、できるだけ早く返すようです
1は、プログラムの残りの部分に何が起こるかと思う？
それは停止します。
それはそれだ。
だから私は1を返すんだという事実が効果的です
ように、このプログラムの実行を短絡
27行目以下には何も実行は継続されません。
早くメイン戻ると、それはそれです。
>> ユーザーが協力し、我々は30行目に到達しない場合ので、すべての権利は​​、
彼らは合法的な数字で入力しているため、ここでは私です
この曲の実装。
だから私は最初だけでは、改行文字をプリントアウト
美学。
私は今、forループを持っています。
そして、私は少しで物事をやって気付く
異なる方向の。
私は未満を行う必要はありません、私は、+ +を行う必要はありません。
私の代わりにそれが等しくなるように設定、変数iを初期化すると言うことができます
nは、ユーザが入力した数字は、そのように、次の操作を行います。
iが0より大きい場合に限り、次にi -
一度は、このループの1回の反復を終了しました。
だから我々は、同様に、forループを使ってカウントダウンすることができます。
さて、これはprintfで、1のもの今やほとんどの週である。
だからプリント "壁にビールの％d個のボトル。"プリントは "％d
ビールの瓶。 ""それを周りに渡す、1を押してください。 "プリント
"壁にはビールの％d個のボトル。"だからそれはまだ％dのだが、
printfへの引数が変更されていることに注意してください。
私は99を言いたいので、カンマの後に、私は、私を持っています。
私は99を言いたいので、このカンマの後に、私は、私を持っています。
このカンマの後に、私は私を持っている - 1、私は98を言いたいので、
この最初の反復など。
そして今、ここでダウン、私はいくつかの愚かな少し発言を持っています。
そして、42行目、私は慣例により0を返すことを意味
すべてのものは大丈夫です。
>> 私はgoofedだから何たら？
ここでよくある間違いは何になるのでしょうか？
まあ、私は偶然にうまく言った場合、私はカウントしたい
0まで、私は壁にビールの0瓶をしたいですか？
だから、私は0以上である、と言う。
私は、再コンパイルした場合、私が今見ている現象であることが何が起こっているのか
beer1とそれを実行するのですか？
読者：陰性。
デイヴィッドJ.マラン：うん、それは否定的な行くつもりだ。
これは信じられないほど、off-by-oneエラーです
作るよくある間違い。
レッツは、実際に端末ウィンドウに戻り、それを行う
ここで、私たちは一度に多くを見ることができます。
、ビールのボトル99を入力します。
閉じるが、我々はあまりに遠いので、少しこれまで行ってきました。
我々は今、ヒットするような、あまりにも遠くダウン歌を歌った
負の数。
だから、それは非常に動作しません。
>> すべての権利、私たちは簡単に戻っていることを解決することができます
それはかつてあった道。
しかし、いくつかの機会がために今何ですか
改善？
まあ、私はbeer2.cを開き、ここで下にスクロールしてみましょう
このバージョンを見てみましょう。
何が異なったとしてあなたに飛び出し最初のことだ
このバージョンではここですか？
読者：[聞こえない]。
デイヴィッドJ.マラン：ええ、そうもう私、それが発生したために
私にあなたが私はn個の入力をユーザーに求めているのか、知っていて、その後私は
nとiが等しく設定し、私は私を変えるんだけど、私はないよ
触れてから、もう一度N。
だから、一体、あなたは別の32を配分する点だったか
ビットは、私が別の変数を持つことができるだけのように私が呼ばれる？
したがって、このケースでは、私は種の認識、不必要な
デザインの特徴。
と私は今ここで、nは0より大きい間、行くと言うつもりです
アヘッドとprintfのようにnを渡して、同じ曲をプリント
第二引数、およびn - ここに第二引数として1。
そして、このループの繰り返しごとに、先に行くと、ちょうど
nをデクリメントそのもの。
さて、機能的には、このプログラム
同じことを行っている。
私は99を入力した場合、nは99から始まります。
私はデクリメント、デクリメント、デクリメント、デクリメント。
私が上でビール1本 "にすべての方法を取得するつもりです
壁、ビールを一瓶。
それを周りに渡す、1を押してください。
壁にはビールのびん0。 "結局、私はなかったので、
正しい状態を取得します。
それが0より大きいです。
私はこの間違いを犯していませんでした。
>> だからこれは、バージョン1またはバージョン2は、良いですか？
だから私は2のために不平をたくさん聞いた。
なぜ2つ？
それは何？
読者：[聞こえない]。
デイヴィッドJ.マラン：ああ、大丈夫。
だからそれは、バージョン1で、0を下回るが、覚えていないでしょう
元の正しいバージョンは、0を下回らなかった。
だから、これが正しいバージョンであることを覚えておいてください。
だから、少なくとも2つの正しいバージョンを比較してみましょう。
バージョンに賛成の引数は何ですか
2つは、うーん、良い？
うん？
読者：それはより少ないスペースを使用しています。
デイヴィッドJ.マラン：わかりましたので、それが正しい、より少ないスペースを使用して？
バージョン1は、32 nのビット、次に別のものを使用し、一方
私のための32ビット。
バージョン2はnのために32ビットを使用し、そのため
プラスになると思われる。
他の思考？
誰もが1の賛成で主張したいのでしょうか？
うん？
読者：nにコードの余分な行を使用する必要があります - 。
>> デイヴィッドJ.マラン：じゃあ、確認してください。
だからそれは公正だ。
ただ、少なくとも私にはそうでは -
私はその事実、これは実際には少し乱雑を感じ、意味
私は、1つに私のすべてのロジックをカプセル化するのソートすることはできません
美しいライン、forループ、forループができますように。
ここでは、私は同じ種類で、このnにタックする必要があります -
ループの終わりに、なぜなら
それは論理的に必要だ。
しかし、それは一種の私に間違った方法をこすり、それだけのために
、にもかかわらず、ここまでのロジックとは別に思える
再び、それは必要だ。
他の思考？
うん？
読者：[聞こえない]。
>> デイヴィッドJ.マラン：うん。
あなたではなく、曲の終わりに、したかったので、どのような場合
再び曲の名前をプリントアウト？
"ビールの99ボトルを再生してくれてありがとうございました"のような、または何か
そのような愚かな？
しかし、ポイントは、元の値へのアクセスを望まれている。
あなたはすべての上にnを変異または変更されたという事実
繰り返し、したがって、その元の値を破壊してきた
あなただけの終わりにそんなことはできないことを意味します。
今、間違いなく、我々は明らかにしたくない
このプログラムのその。
だから、誰も気にしない？
しかし、それは非常に有効なポイントだ。
と正直に言うと、誰も実際にありません
右ここで答える。
彼らは両方とも均等に正しいよ。
私はどちらの道を確信することができます。
私は一般的に、それはあなたの場合は良いの原則だ、と言うだろう
いくつかの値の入力をユーザーに尋ねるとは、変数に格納されて
ソート原理上のnのように、ただ、それはおそらく良いことだ
その周りに保ちます。
あなたが何度も何度も変異したい任意のデータだけ
ちょうどので、自分でその変数のコピーを渡しているあなた
元にアクセスすることができます。
あなたは、32ビット以上を費やしているが、現実はこれです
コンピュータは、これらの日のRAM 2ギガバイトのように、持って
そして我々は、32ビット以上の言い逃れしている？
本当にそのような大したことではない。
と半分もギグやとここでは、このデバイス上
ギガバイトのRAM、64ビットと32ビット、
しないような大きな問題。
確かに今日、それは大きさに圧倒される方法になるだろう
数百人であることを行っているプログラム自体の
キロバイト、そうでない場合は、数メガバイト、これらの日。
>> だから合理的な懸念は、誰も正しい答え。
しかし、少なくとも、それらはに開始する必要があります考えです
あなたの心を通って行くか？
PSET 0であるため、我々は本当に唯一の予想にもかかわらず、
正しさ、あるいは少なくともその様々なバグを放棄
我々が前進するようにあなたは、遭遇しているかもしれませんが、デザインがある
別の重要な側面であることを行って、両方のコードを書く
また、私たちは、コードを評価する。
それで、少なくともこのようなものに思って与える。
そして、ちょうど何かの作品は、それが良いというわけではありませんので、
それがうまく設計されたというわけではありません。
そして、それは教育フェローものの一つだと
問題セットは、私たちは時間をかけて一部をいじめるのに役立ちます。
>> さて、ここで、このバージョンの言うほど何を聞かせて？
私は一瞬にしてここで少しセクシーな何かをやってみましょう。
最初に私はこれを取り除くことができます。
そして今のこの文法的な問題を修正しましょう​​。
だから、このバージョンでは、私はそのように文法を修正したい、
だけではなく、括弧でくくられたsが "ボトル"のように、言う
または "ボトル" -
私がその角をカットする必要はありません -
私はまた、動的に単語 "びん"をプリントアウトしたい
これにより、今日、これらの％sプレースホルダを使用するか、 "ボトル"、。
だから私は、条件付きで、iの値が何であるかを確認する必要があります。
それが1だとした場合、私は "ボトル"と言いたいし、それがどちらかといえば
そうでなければ、私は "ボトル"を言いたい。だから、これをやろうとしてみましょう。
すなわちi == 1の場合はそうだとすれば、私が先に行くと宣言してみましょう -
私は、文字列が必要なので、それはだから、私は、文字列s1をやらせる
最初の文字列は、私が今気になります。
私は "ボトル"と言うつもりです。そして、文字列、見てみましょう
S2 - と私は一瞬にして行くよどこに私が説明しましょう​​ -
"瓶"。だから、この曲では、我々はできるようにする必要があることを思い出してください
潜在的なもの、2つの異なる単語を印刷します。
我々はここに戻って見ればそれで、我々が得るときことに気付く
ここでは、この例では、 "壁にビールを2本、
ビールを2本には、1を切り、私がしたい "それを周りに渡す
これからビールの "1瓶を言うために、この四行
壁にボトルを "だから私は決定する必要があり、私が言いたいのか" "または
"ボトル"？だから私は、勝手に言って、すべての権利を行くよ、
私は今という変数s1に、文字列を宣言するつもりだ
ここ、ここともにプラグインを得るために起こっている1、
それらの言葉はいつも同じですが、理由だけのために
歌の本質。
そして私は私がしたいもの単語S2呼ぶつもりです
最終的にここに表示されます。
さて、文字通り、100のうち99回、それはなるだろう
3は複数あるので、それらの例の両方で同じ、2は
複数、4は複数形です。
しかし、このコーナーケースでは、我々はここで2を取得してから1、または
でも1とし、0、私はこのロジックを必要としています。
だから私は、その権利を取得して、私のコードのいくつかの時間を費やす必要があります。
私はこれを行うのであれば、 "ボトル"と等しくなるように設定s1はその後、私は== 1の場合
これは1になりますので、 "ペットボトル"に等しく、s2と
ボトル、これは0ボトルになります。
そして、ここで、これは、これは何を表すのでしょうか？
ただ明確にすること。
これはただのコメントです。
ですから、単一行コメントを持つことができるという事実は、あなたを意味
あなたのこのようなコードが、別の一般的なコメントをすることができます
パラダイムは、あまりにも、つまりあなたは超短いフレーズを持っている場合、その
あなた自身を置きたいと思う、それは置くだけで読みやすい
それは右のコードの行の末尾に、次のことができます
絶対にこのような何かを行う。
>> だから今私はこれを行う場合はどうなりますか？他の私は1に等しくない場合。
だからビッグバンは等しい -
感嘆符は、 "ビッグバン"と呼ばれています。
= 1のビッグバンはそう。
iは1に等しくない場合だから、私は代わりに何をしたいのですか？
まあ、私は何になりたい最初の単語？
だから、文字列1は、複数のボトルの "ボトル"にする必要があります
そして、これは今のところだけでなく、複数の "ボトル"となります。
これは実際に私たちを取得する場合と我々が表示されます
我々はどこに行きたいか。
だから今、私はここで下にスクロールした場合、私が差し込むてることに気付く
私が、S1だけでなく。
私は、私とs1に差し込んだ。
そして、ダウンここで、私は同じですから1を引いた値を、よ
前ですが、S2。
言い換えれば、私は基づいて変更する英語の単語をしたい
このロジックで。
さて、このコードにはいくつかの問題がすでにある。
ここで何がゲートからすでに壊れている？
うん？
読者：[聞こえない]。
>> デイヴィッドJ.マラン：その通りです。
だから私はすでにスコープのレッスンに違反しました。
だから私は、s1とs2に宣言しましたが、私は内部でそれをやった
ええ、このコードは、最大動作することを意味し、中括弧、
42行目までが、できるだけ早く私は43行を打つように、どんな推測しない
もはや存在？
S1またはS2のどちらも - まあ、スコープにはもはや何んと思います。
だから我々はこの問題を解決する必要があります。
だから私は宣言を削除してみましょう。
そして、私はここに変数名を残して、これを削除します
そしてここで、これを削除します。
そして、何行で私は本当にこれらの事を宣言する必要がありますか？
読者：[聞こえない]。
デイヴィッドJ.マラン：ええ、そうでしょう
右ここまで、33っぽい。
文字列s1と文字列s2はその後そう。
そしてそれは結局のところ、私はこれを行うことができます。
あなたは、同じ型の2つの変数を宣言している場合は、
あなたは実際にちょうどコンマを使用して、すべてのC言語でそれを行うことができる
右、今私は、二つの変数を持っている -
s1とs2。
私は彼らにこれらの値を代入しています
ここでの条件、またはここインチ
そして私は下にダウン使用しています。
どれだけこれは今仕事に行くのですか？
>> まあ、それはまだ少しバギーですが、少なくとも見てみましょうです
どこまで私たちはやってきたのです。
だから私は先に行くとbeer3を作ってみましょう。
このbeer3ですか？
うん、これはbeer3です。
そして今、私が先に行くとbeer3を実行してみましょう。
399 99。
我々は、おそらくそれらのほとんどをスキップすることができます。
とダウンここ、それを見て。
"壁にビール1本、ビール1瓶は、かかる
ダウン1、壁に、ビールのボトルを0、それを周りに渡す。 "
しかし、私は解決策の半分だけに注目を集めています。
ここでしくじっの一種。
だから、それは私が等しいとき、コーナーケースが発生していると思われるもの
二つの値？
読者：2、1。
デイヴィッドJ.マラン：2と1。
これは、1と1ではないではありません。
それは本当にこの歌のちょうどこれらの最後の2つのスタンザです。
だから私は、代わりに何をしたいのですか？
だから私は、私は==〜1である場合のケースをキャッチしているように見える
その後、最初の単語は "ボトル"が、2番目の単語である
"ボトル"です。しかし、ここで、私はこれは== 2となるように変更したい。
これが事実であるならば、私は何をしたいですか
された最初の言葉は？
読者： "びん"。
デイヴィッドJ.マラン：ので、2つのびんのための "ボトル"、。
そして、ここでこの言葉がなければなりません -
読者： "びん"。
デイビッドJ.マラン： "ボトル"、単数。
>> すべての権利、のは再実行し、こっち戻って、ズームアウトしてみましょう、
再実行beer3、再びタイプ99。
さて、 "セグメンテーションフォールト（コアダンプ）。"
私は何が間違ってやっていますか？
読者：あなたが値を持っていない[聞こえない]。
デイヴィッドJ.マラン：ああ、優れた点。
すべての権利は​​、ので、ここで何が問題なのでしょう？
セグメンテーションフォールトので、我々は実際に見ることになる
この将来的にかなりの数回、故意に。
しかし今のところ、これは実際に何を意味するのか？
セグメンテーションフォールトはほとんど常にあなたが持っていることを意味
どうにかして、あなたのコンピュータのメモリ、RAMをアクセスしようとしました
あなたが実際に求めていなかったので、自分が所有していない
用のオペレーティングシステム。
したがって、この例の場合、である、私が何をやったかに気付く
私のロジックに欠陥がある。
iは1に等しい場合、私は、s1とs2の値が割り当てられています。
iは2に等しい場合、私はまたことをやった。
しかし、私は他の数が無限でそれを行っていない
可能性 -
具体的には、3または4またはドット、ドット、ドット、99。
だから、これのために1修正は、ちょうどレッツかもしれない
else条件を持っています。
そして、私はここに行くとs1は等しいとしましょう​​ -
それはここで何をすべきですか？
読者：[聞こえない]。
>> デイヴィッドJ.マラン：一般的なケースであるため、 "ボトル"、
それはちょうど同じことだ。
だから引用、引用終わり、 "ボトルが。"と等しいだから複数形
ボトル、その後ここまで、複数のボトル用。
さて、今、私は私の端末ウィンドウに戻りましょう
再コンパイルし、それを再実行してください。
99。
やれやれ。
かつ迅速な健全性チェックを行いましょう。
技術的には、我々は確認するために、これらのすべてを読みたいと思います
彼らは正しいだが、見てみましょう
少なくとも知られている犯人。
3本、2本、2本、1
ボトル、ボトル1本、0本。
我々は、少なくとも今のところはそれを修正しているように見える。
しかし、ここでキャッチは何神ひどい混乱は、これがあるということです
ただ愚かを解決するために
1文字の文法的なディテール。
だから私はこのコーナーをカットした理由のようなものはあり
以前、それはする必要があるためだけに完全に迷惑だから
これだけのコードを記述します。
しかし、それは、もう少し洗練された方法があることが判明
まったく同じことを表現する。
そして、我々は次のようにこれを行うことができます。
>> 私はしばらくの間画面上にこれを残してみようと
三項演算子と呼ばれるものを紹介します。
これは、弊社を作るために作られたサービスだワンライナーの一種である
約束通り、少しセクシーに住んでいます。
そして、私は次のようにこれを行うつもりです。
私にS1と呼ばれる文字列を付けて、私を聞かせて
それは次のように割り当てる。
（ⅰ== 1）？
"ボトル"、それ以外の場合は "瓶"。文字列s2は、（i == 2）を取得します？
"ボトル"、それ以外の場合は "瓶"。
だからここでの違いは、次に何ですか？
次の2行のコードは、私は主張することができます
この全体の混乱を交換してください。
だから私は、それは一種の私こすりという理由だけで、それは混乱呼ぶ
それはコードのように多くの行だという間違った方法。
間違ってはいない。
それは悪いデザインではありません。
同様に、これは完全に正しいとまったく問題ありません。
そんなに自分を表現しなければならない場合でも、コーディングが面倒な取得
何度も何度もシンプルと特異的にいまいましい
このようなシナリオ。
だからCはこのように、いくつかのショートカットが用意されています。
だから、これは本質的にはS1と呼ばれる文字列を宣言して言っている
この値またはi ==である場合は、この値のいずれかを割り当て -
申し訳ありませんが、私はより明確にこれを言うべきである。
これがtrueの場合は変数s1を宣言し、それをこの値を代入します。
それ以外の場合、この値を割り当てます。
だから、他の言葉で、これはの一行方法の一種である
IF ELSE言ってますが、道に沿って割り当てを行う。
iが1であればそうだとすれば、先に行くと、この "ボトル"と呼びます。と
その後、他のこれは、それを "ボトル"と呼びます。一方、S2、
iは2に等しい場合、我々は、定義する必要がある二番目の単語、我々はよ
"ボトル"にs2を設定します。それ以外の場合は、 "ペットボトル"に設定します。そして、何
これは私がこれを通過すると、すべての削除を行うことができている今では意味
これらのコード行。
と私が言うとき、やや途方もなく、これは今であることを
セクシー、それは文体の意味の一種でセクシーだ。
機能的には、このコードが実際に起こっているという事実
全く同じことを行う。
そして、それは最初は少し不可解に見えるかもしれませんが
一目では、我々の前に、この構成を見ていないので、私がほしいのです
それは究極的にはそんなに多くのことになるだろうと主張している
読みやすいと私たち人間はソートするために、そんなに簡単に
今、あなただけ読み取ることができるため、理解
すべて1行のコード。
これがどこにあるか、それは、まだあればその精神においては似ている
条件と、これはいただくと、この内側の内容です
他の中身です。
しかし、我々ははるかにエレガントなだけでこれを行うことができます。
>> そして、私は今、私の端末に戻ってしまったら、すべてを削除した
これらの行の、ちょうどそれらの2で置き換え、
99でコンパイルしなおして、ビールの再実行のボトルは、私のことを予告
文法は、実際には、今でも正しいです。
だから、もう一度、何かが開始します。
ビール2本、ビール1瓶。
右に見えます。
うん。
だから我々は、はるかに簡潔なソリューションを持っている。
あまりにも、これは、だから、あなたは、Cとより快適になるように、ではない
しかし、最初のpsetまたは偶数秒と必ずしも
これらの構築物は、私たちはこれまでのことを行うことができることを認識
よりエレガントに。
今ここにもう一つの事をしてみましょう。
私が先に行くとreturn1.cを開いてみましょう。
さてその方法で別の問題を解決するために始めましょう
私たちは、より洗練されたコードを記述することができます。
>> そこでここでは、その目的は生活の中で簡単な小さなプログラムです
値を増加することです。
そして実際に、のは一歩下がってみましょう。
私はこれを手動でやってみましょう。
私はメイン（void）を含めるとINTやってみましょう。
そして私は、このincrement.cを呼ぶことにしましょう​​。
そして、私は何をすべきかをしたいですか？
私は先に行くと何かのように言うつもりだ -
我々は、数字を同じに呼び出します -
int型xになります。
だからint型のxは2を取得し、printf関数xは％dは、新しい行、xである。
だから私は、今では高速ですが、見慣れたもののようなものを入力している。
それから私は、X + +をするつもりです。
その後、私は再びその同じ文章を印刷したいと思います。
そして私はちょうどプログラムを終了するには0を返すつもりです。
すべての権利は​​、これはそのプログラムです
刻み数。
これは、最初の2に何かを初期化するために起こっている、そして、次に、それはだ
それを増加して、もう一度それを印刷しよう。
>> だからレッツは、信じられないほど簡単なプログラムをインクリメントを実行します。
しかし、今、私はキューブの値をする必要があるとし、そうする
多少恣意何か。
そして、私は実際にxがそれのキューブを取得したい。
だから私は、pow関数と呼ばれるものを使うこともできますが、私はしないでください
それはまだここで本当に知っています。
だから私はこの昔ながらの方法をするつもりです。
x倍は、このx回×回×等しい。
だから私は再び自分自身を掛けて、値をキュービングだ
と何度も何度も、私たちがパワーを得られるように
この場合は3。
だから今、私は印刷する必要があります数字は、我々がわかるように、あるべき
ここに - インクリメントを作るので、それは実際に実際には増加しませう
もう、私たちは名前だけを残しておきます -
次に2と8。
今、私たちは、改良のための機会の始まりを持っている
ここで、それによって数を掛け合わせたこのキュービング事
それだけで、それ自体で単独でこのように感じているだけであるかもしれない
誰かが決めたのと同じように、関数としてあると便利
数年前に - 私たちのいずれかが座った場合、有益な一種の、知っている
とは、世界の残りの部分はそれを使用できるようにprintfを書き込み、
なぜ私たちは座って、キューブと呼ばれる関数を記述しないでください
私たちのためにこのキュービングを行うので、我々は手動でする必要がないこと
ここで値をキュービングの概念を実装する？
>> 簡単な例はそうですが、先に進み、これを使用させることのようになります。
私たち自身の関数を書く機会。
だからこれまで、我々は唯一のメイン使用してきました、そして我々は、他の使用してきました
人々の機能が、我々は我々自身を書いていない。
だからここに私達は行く。
私が先に行くと、キューブと呼ばれる関数を記述するつもりです。
そして、私はそれが入力されてもらうつもりです。
だから、その入力が整数であることを行っている。
そしてそれは何をするつもりですか？
それはint出力=入力回数の入力を宣言するために起こっている
回入力。
そしてそれは、その出力を返すようになるだろう。
そして私は今、具体的にする必要があります。
この関数はintを返すために起こっている。
だからここに、あなたはあなた自身の関数を書くだろうかということです。
最初にあなたの名前は何かを決定
関数があることを行って。
そして一般的には、何か説明が良いですので、私はよ
それキューブと呼ぶ。
その後、あなたはそれが返すために何が起こっているのかを指定する必要があり、何
その出力になるだろう。
そして、我々はまだその多くのオプションを持っていない。
int型、char型、float型、ブール値、文字列。
私はそれをしたいので、今のところ、私は、int型に固執するつもりだ
整数を返すことができます。
次に、あなたは、その入力があれば、それが何であるかを指定する必要があります。
そしてキューブが引数をとる場合、間に何かを取り
括弧は、その引数に名前を付ける必要があるように
あなたが実装するか書いているように、あなたはそれに何かを呼び出すことができます
この機能、そして、あなたはそれに型を与えるために持っているこの中で
場合はintになるだろう。
だから要するに、キューブは、整数を取る関数である
入力として、出力として整数を返します。
>> だから、その入力に何をするのでしょうか？
さて、14行目では、私は変数と呼ばれる出力を宣言し、私
それに値、入力回入力回入力を割り当てる。
そして私は出力を返します。
それでは、どのように私はその後、これを使うのですか？
私はラインでこれらの強調された文字は何を変更するのですか
なるように7、あなたは思いますか？
読者：[聞こえない]。
デイヴィッドJ.マラン：ええ、そう、xの立方体。
だから、xは、それがいくつかの値を保持することを意味変数です。
幸いなことに、それは整数型です。
xがint型であるため、そして、それは私がキューブにそれを渡すことができることを意味します。
そして、私は値とxの値をオーバーライドしているにもかかわらず、
これまでそうであったように立方体のx、、いつでもあなたの
等号とコード行は、右のものを持っている
実行されると、その後に割り当てられます
左側の値。
だから操作の順序は、我々が望んでいるだろうとしてである。
これはそうするように動作しますか？
まあ、私がここに行くことができます。
私は私の端末ウィンドウを開いてみましょう。
私は入力して、増分を作ってみませんましょう。
関数 'キューブ'の "暗黙の宣言が無効です
それがあったとして、C99 "余談ですが、C99は、言語Cを指し
からバージョンよりアップデートだった1999年に定義されている
元よりアップデートされ、1989年。
だからそれはすべてその手段だ。
>> だから、その "暗黙の宣言の何を意味するのでしょうか
関数 'キューブ'は無効ですか？ "それはまさにここです。
これは、12行目ですぐそこです。
読者：[聞こえない]。
デイヴィッドJ.マラン：それは何ですか？
読者：それは前にありません。
デイヴィッドJ.マラン：それは前にありません。
だから、これはものです。
Cは愚かなの一種である愚かな、またはCコンパイラの一種である。
彼らは本当に唯一あなたが彼らが何を言う何をすべきか。
そして、彼らは特に、のみ、一番下にあなたのコードの先頭を読んで
左から右へ。
コンパイラ、Clangのは、あなたのコードを読んでいるのであれば、1行目、それ
これを行う方法を割り出し。
ああ、ここでの主な付属しています。
さて、私が先に行くと、変数xを宣言しましょう​​。
私が何かを印刷してみましょう。
7行目は、一体、キューブは何ですか？
それは、stdio.hで宣言されていないだ。
それは私が何をすべきか見当がつかないでは付属していません。
そしてそうClangのはちょうど終って、そのエラーメッセージを表示して終了します。
だから我々はいくつかの方法でこの問題を解決することができます。
我々はキューブがちょうどどこに移動させることであるClangの何を教えることができます
宣言です。
だから私は、メインの上にそれをカットして貼り付ける。
今メインが最初もはや理由だけで、それが実現することを
まだデフォルトで実行される。
メインがメインです。
これは、デフォルトの関数名です。
それがファイルのどこにあるかは関係ありません。
私はそれを使用する前に、しかし、少なくとも今Clangのは、キューブを見ている。
だからClangのが今幸せであるかどうかを確認してみましょう。
増分を作る、それはこの時間をコンパイルしなかった。
>> 私はインクリメントを実行してみましょう。
そして実際、それが動作しているようだ。
さて、あなたは最終的にどこのシナリオを考え出すことができる
それは、すべての関数を置くことは現実的ではありません
他のすべての関数の上。
あなたは、現実にはこの無限ループに陥る場合があります
この男はここになりたがっているが、この場所
男が存在している必要があります。
だからそれは常に動作しません。
だから、ありがたいことに、Cはよりエレガントな解決策を持っています。
それがどこにあったか、私はこのバックを置くつもりだ、という理由だけで私は
原則として、好む、そのメインは常にある
上部には、それは何、このプログラムを参照するだけでいいですので、
デフォルトではありません。
と私はここにアップするつもりですと呼ばれるものを宣言している
プロトタイプ。
私は文字通りによって私のキューブ関数を再宣言するつもりだ
コピーして貼り付ける。
実際のところ、それは文字通りではありません。
だから、文字通り15行をコピー＆ペーストする
6行目の上まで。
これが上で終わる何行も問題ありません。
これは4行目であることを起こる。
しかし、それは前のメインである必要はありません。
しかし、違いに気付く。
ちょっと意味セミコロンと4行目が終了すると、
Clangのは、関数が存在するとそれは私の言葉を取る
int型をとり、intを返しキューブと呼ばれる。
しかし、私はそれがまだあることを教えてつもりはないよ。
ちょうど私が最終的にあなたを伝えることを約束していることを知っています。
そして実際、今ではこれは下にダウンしていること大丈夫です。
>> だから、これはその後の最上部にあるので、一般的に優れている
あなたのファイルは、あなただけで、連射、1行をスラスラと言うことができます
それぞれ、あなたの関数の名前が何であるか、どのような彼らの
入力は、その出力が何であるか、である。
そして、より明確にするために、入力は一般的に引数を意味するか、
パラメータは、同義。
出力には、それを何をするか、戻り値を意味
私に戻って手。
そこでここでは、この場合に、キューブが先頭で宣言されていますが、
実装として定義され、そうでない場合は一番下に、知られている。
だから、今度はここに戻って、これを再実行してみましょう。
だから今再実行インクリメント、私が先に行くと、再実行してみましょう。
そして、それは今では問題なく動作しているようだ。
だから今我々は先に行くと、のようなものをくくり出すことができます
この第4版にビールの例。
だから私はここで下にスクロールしてみましょう。
そして、私は一種のちょうど今の心にこのレッスンを取っていることがわかります。
私は再び同じスタンザを歌っていたという事実と
何度も何度も、歌の中で同じコーラスラインは、フェルト
なぜ私は、関数にその要因になることはありません、気に入りましたか？
そして実際、これが動機の一つであるべきである。
世界でも他の誰かが欲しいかもしれないという事実に加え
キューブ関数を使用するには -
それは何かを睨むとあなたを記述するための十分な理由だ
独自のカスタム関数 -
単になり、プログラム内のコードの塊がある場合。
あなたの種類はそれを与えたい概念的な感覚、
名前 - この場合には、コーラスのような -
その後、同様に独立した関数としてそれを書くことができます。
あなたはそれをした場合、メインですべてを記述する必要はありません
それを分離し、それに名前を与えるためにクリーナーと感じている。
>> そこでここではこのケースでは、私が上にコメントが含まれていることがわかり
ちょうど約歌うこの機能
ボトルの指定した番号。
私はこれらを呼び出す必要はありませんことをここに注意してください
物事は、入力と出力。
実際には、この時間は、私はちょうどびんのための私の入力bと呼ばれる。
そしてここで気づく、ボイドは何を示唆している？
そのコーラス -
読者：それを返しません。
デイヴィッドJ.マラン：値を返しません。
そして実際、関数は値を返す必要はありません。
彼らはただ何かを行うことができます。
彼らは、副作用と呼ばれるものを持つことができ、この中に
場合は、画面上だけで印刷の全体の束です。
そこでここでは、このコードは、私は文字通りから盗んだことに気付く
前の例。
唯一の違いはなく、私のようにiを使用してのものである
変数は、私は今私の変数としてbを使用しています。
だから私はここにbを持って、私がここにbを持って、私はbを持っている
ここでマイナス​​1ダウン。
しかし、コードはまったく同じです。
しかし、単に我々がこれを使用することができますどのようにすることを示すためだけに、私を行かせ
先に、実際にforループであるためにこれを変更してください。
（I;; i> nであるint型のi = nで - ）のため。
>> だから私は、その前の例から盗まれました。
以前は、それは私が始めているだろうと37行にだ
この迷惑な歌を歌って。
しかし、その代わりに、私はちょうど今私のコーラスを呼ぶつもりです。
完了しました。
だから今、このループを繰り返すたびに、私はこのお互いを呼び出す
私は書き込みが発生した関数、コーラス、。
それは数年前に他の誰かによって書かれていませんでした。
しかしコーラスは、一方で、印刷するためにprintfを使用してい
これらの4つのラインのうち。
しかし、私は何度も何度もコーラスを呼んでいるという事実
ループは、一番最後に、私が手にするつもりだということです
私がこれまで持っているとまったく同じ曲。
だから要するに、今私は私のコードを振り返ってみると、たとえ
機能的に、これは同等ですが、それがあることに気付く
さらに読みを取得し始めて。
私は正確にはわからない方法場合、getInt
実装されています。
率直に言って、私はコーラスが実装されているのか分からない。
しかし、それは私には関係ない。
今、私は並べ替えることができますので、私は読んで、人間のように、気にしない
上から下へこの。
と関数がどのような彼らに従って命名されているので、
行うには、私のコードはますます読みやすくなります。
そして、我々のプログラムは、はるかに複雑なものになるように -
学期の終わりまでには、数百行を書きます
PHPやJavaScriptなどのような言語でのコード -
あなたはそれがそんなに簡単かを追跡するよりも、ということでしょう
あなたは何をやったか。
そして、あなたが起動したときに友達と協力したり
パートナーや同僚は、あなたは多くを書くことができるでしょう
これらの基本的な力を行使するために開始することにより、大規模なプログラム
ビルディングブロック。
>> そうは言ってもそう、なぜ我々はそれで終わりにしないのですか？
そして、我々は水曜日にお会いしましょう​​。
[拍手]