SPEAKER 1:すべての権利。 お帰りなさい。 これはCS50の週二であり、我々は持っている これまでの機能を使っていますが、 当然の大部分は、それらを撮影。 我々は持っているprintfの使用してきました 印刷の副作用 画面上のもの。 我々は、Get-int型、float型を取得使用しました。 しかし、あなたが実際に作成したい場合 の一部として独自の関数、 すでに始めているかもしれません けれども、問題のセットOneのために行う 必須ではありませんか? まあ、それの先に行くと再訪せ だけをユーザーに尋ねるの問題 上に自分の名前と印刷は何か 画面が、いくつかを考慮しよう 私たちがしたことを共通の これまで我々のコードで見られる。 だからそのことで、私は次のことを意味します。 私が先に行くと、作成するつもりです 新しいプログラムでは、単に呼び出す それは、いつものようにhello.cを。 私が先に行くと、自分自身を与えるつもりだ 上部に標準io.hのが含まれています。 私はまた、自分自身を与えるつもりだ 先制CS50ライブラリよう 私は、コンパイラによって怒鳴られません。 そして今、私は先に行くつもりです とint、メイン、無効を宣言します。 私がしたい場所と、ここでは、これは に機能を委託する開始する 私自身は思っているいくつかの他の機能 書こうが、それはしません 現在存在している。 例えば、私がしたいと仮定し 私がすることができます関数を書く こんにちは、カンマをプリントアウトし、 その後いくつかのユーザーの名前。 printfの行う継続するのではなく こんにちは、%sは、それがあればいいことではないでしょう 呼び出された関数は、ただそこにあった printf関数が、印刷名ではありません? だから、他の言葉で、私ができるようにしたい 少しを行うプログラムを書く このような何か。 まず、私はあなたのprintfの言うつもり 名前は、それによって、ユーザを促す 私はその後、私に彼または彼女の名前を与え、 に馴染みの文字列sを使用するつもり 文字列を宣言します。 私の文字列型の変数を与え、 それの呼び出し、その中に格納する 文字列を取得する呼び出しの結果。 しかし、今、過去数週間で、私が持っているでしょう ややうんざりするほど行わこんにちは、%S / N。 そして換言すれば、我々はこれを見てきた 例倍の束、そしてそれは ただ1があるので、例えば些細 コー​​ドの行それは本当にありませんので、 再度入力して保つために大したこと。 しかし、仮定そのコード行 実際に負担になっていた、と それは1行のコードではありませんが、それは10だ コー​​ドの行今から数週間、 とするだけで疲れて取得している コピーと貼り付けまたは その同じコードを再入力。 それは素晴らしいことではなく、やっていないでしょう printfのこんにちは、%sのなど、 ちょうどそこにあった場合、それは素晴らしいことではないでしょう プリント名その呼び出される関数 引数を取る - 換言すれば、入力を受け取り - その後セミコロン。 だから、その関数は、それではないでしょう それが存在していればいいだろ? それから私は心配する必要はないであろう printf関数とは何か、何の%sとのすべて これらの複雑さ すべてが面白くない。 彼らは便利です。 だからプリント名は、残念ながら、ありませんでした いくつかの40年以上前に発明した。 誰もそれを書くために考えていません。 しかし、それは持っていることの美しさだ だけのようなプログラミング言語、 スクラッチあなたはそう、カスタムブロックを定義することができます Cとほとんどの任意の言語では、次のことができます することができ、独自の機能を定義する あなた独自の関数を定義します。 我々は主によって得るだからにもかかわらず 自動的に自由のために、我々は宣言することができます 当社独自の機能。 だから私はここにいくつかの部屋を作るつもりです トップまで、私は私のを宣言するつもりだ 見に行くの独自機能 少し最初は奇妙なしかし我々は来る バックこの前長いへ。 私はそれによって、無効と言うつもりです この機能を示すことはありません 何かが、副作用を有するが、それ で私に何かを返しません int型を取得したり、同じように 自体がない文字列を取得します。 そして私は、この関数を与えるつもりだ プリント名の名前、私はするつもりです この男がかかるとしていることを指定 文字列、そして私はそれを呼び出すつもりだ 文字列名。 私はそれを私が欲しいものを呼び出しますが、私でした 私のコードは自己文書になりたい。 言い換えれば、あなたの場合は、1にあった このファイルを開いて、それを読んで、あなたは可能性 その名前から推測の一種 それは演奏することになってどのような役割を入力。 そして今、その下に、私が開くつもりです 中括弧と閉じ中括弧、 ので、私は同じに従っているに気づく 線として4〜7上のパターン 私は良い週プラスについては、次のしてきた 今ライン9と、言う間に メイン作曲14。 換言すれば、表示名 別の関数である。 さて、コンパイラは知っているつもりはない 自動的にこの事をコールする 私は文字通りそれを発明したので、 それはまだメイン呼び出すために知っているだろう 自動的に、その後のコースの 13行目、私は自分自身の関数を呼び出しています。 そして、私は、その関数を宣言してきたので、 、メインの前に4つのライン上にアップする これは、コンパイラを教えるために起こっている 何の引用、引用終わり、 "印刷名" を意味し、それは何をすべきか。 だから私はそれを新しいカスタムを与える一種のだ スクラッチ、言う、のコンテキストでブロックします。 だからここでは、私は非常に一般的に置くことができ 私はキープコードの繰り返しパターンや クラスで書き込み、printfの %sはこんにちは、%S / N "、 - 私はここに入れて何をしたいですか? S? だから私はこの文脈で名前を載せていきたいと思います。 だからここに二分法のビットに気づく。 私は自分自身の関数を宣言していますので、 と私は、やや恣意的と呼ばれています それは、名前を印刷し、私がきたので、 括弧内に指定され、この 関数は、1つの引数の型を取る これは文字列です - ので、それは言葉だ またはフレーズか何かのような - と 私はそれを、その引数名を呼んでいる で唯一の変数を意味します スコープは、いわば、名前です。 Sは何2の間に存在する 中括弧は、もちろん? 本当にまあ、ただライン〜10のような 月曜日にこれだけのような14は、使用できません Sですが、何を私が行うことができますが合格されて プリント名にS。 印刷名はちょうどので、それを与えるために起こる 別名、同義語、ニックネーム、 今名前を呼び出し、 このラインで使用する。 だから今はズームアウト、私はこれを保存することができます。 私が先に行くと挨拶してみましょう。 よさそうだ。 すべてのエラーを吐き出すしませんでした。 。/こんにちは入力してください。 私の名前は何ですか? デビッド。 とデビッドこんにちは。 だから、すべてがエキサイティングではない、 しかし、ちょうど今だと思います。 あなたは今、同じ成分を持っている 我々はにスクラッチで行ったように 私たち自身の関数を作る。 しかし、落とし穴のビットがあります。 私は本当に考えていなかったと仮定する これを通じて、私実際になし 本当にそれについて考えて書いている そのここでダウン機能。 完全に合理的に感じている。 スクラッチではないという概念はありません スクリプト内の場所の。 は、1つは、ここで、ここで1つを出すことができ ここで1点、それが起動するかもしれません そうでない場合は少し厄介に見えるように それをきれいにレイアウトし、それはしません どこに物理的にスクリプトは関係 画面上にあった。 残念ながらCで - これはとは違っている JavaやPythonのような言語 あなたが精通しているかもしれないことを他人 残念ながらC言語では、順序がありません - と 時計は何だから問題で 今起きよう。 起こっているデフォルトの関数 実行するためには、もちろん、主である。 メインは上の印刷の名前を呼ぶために起こっている ライン8、残念ながら、 コンパイラも、プリント名を知ることができません それは11行目に到達するまで、存在 これは残念なことにある 手遅れになるだろう。 だからこんにちは作って頂きます。 そして今いまいましい、2つのエラーが生成された。 だから今私は非常にまでスクロールさせて 最初に、我々は常に行うべきであるように、と それは私に叫んでいることがわかり、 関数の "暗黙の宣言 名前を印刷します。 " だから我々は、このメッセージの前に見てきた、 関数の暗黙の宣言。 ときに我々は、エラーのようなものを見たことがありますか? 私はライブラリが含まれていなかったとき。 私はcs50.h忘れて、私はなるだろう場合 文字列を取得したり、intの取得のために怒鳴ら。 しかし、この場合には、この関数の印刷物 名前は右、ライブラリにありませんか? それはとても、このファイルに文字通りだ 実際には問題は何ですか? まあ残念ながらC言語では、それはあなたを取る 信じられないほど、文字通りその場合 プリント名に呼び出される関数にしたい 存在し、次のいずれかを実装する必要が あなたの最上部にその関数 コー​​ドは、それが減少したことからアクセスだそう 機能しますが、率直に言って、となります 非常に迅速にずさん。 個人的に、私は最初にメイン置くようなもの なぜなら、それは非常に明確な何これ プログラムは、一見します。 とプラス、あなたは奇妙なコーナーに入ることができる xが呼び出すしたい場合のケース Yが、yがただX、あなたを呼ぶかもしれない 物理的に、実際にものを置くことができない その他上記の。 しかし、それは我々は、C言語ですることができます判明 非常に簡単にこの問題を解決。 私は、スペースを少し置くつもりです ここまで、と私はちょうどに行くよ 先制、多少とはいえ 重複し、教えるつもり 関数が存在することをコンパイラ プリント名を呼ばれ、それは、文字列を取り と私は呼ぶつもりです それは、セミコロンを付けます。 これはだから今ライン4で、その我々 前に見たことがない、宣言である ファンクションプリント名が、それだけだ この機能はことをお約束 最終的には最終的に、定義される 実装される。 これは、今私は一人で残すことができますので、 さて、これは、定義である ラストマイルの実装、ソート 本実施の 特定の関数。 だから率直に、それは愚かだ、それは迷惑なんだ これはCである方法であり、それはだ それは非常に文字通りあなたがかかるので そして、コンピュータは率直に必要として、 唯一のあなたはそれをするために教えてくれないかを正確に 行う、などの順序が重要であること。 だから、心にして、もう一度、に開始することを保つ パターンの再発に気づく。 あなたが持っていなければオッズは、あなたが意志である 既に、メッセージに遭遇し始める このように一見思えること 完全に謎めいていますが、起動した場合 のように、これらのキーワードを探すために の "暗黙の宣言"に言及 この場合の機能 - と率直に言って、あなた 時には小さな緑を得る あなたに伝えニンジンシンボル 問題は、おそらくです - あなたはを通してあなたの方法を作業を開始することができます まだ目に見えないエラーメッセージ。 書面上の任意のNHR このように独自の関数? の何かをしてみましょう もう少し説得力のある。 持って何かをするだけではなく、 印刷の副作用、私は手放す 先に、新しいファイルを保存し、我々はよ それはあっても、このpositive.cを呼び出す 少し異なることになるだろう 前回対。 そしてこの時間は、私が再実装したい 前回のpositive.C例えば、どの ユーザが提供することを強制される 私に正の整数。 しかし、私はint型の最後の時間を取得し使用する必要がありました。 があった場合、それはいいされなかったであろう この関数は、正の整数を得ると呼ばれる 私はちょうどこれを外部委託すること への機能の一部? だからここでの違いは、我々はよです 正の整数を取得する実装が、違って 副作用を持っていた名前を印刷すること - それを のように私に何かを返していませんでした 数値または文字列 - 正の整数は、もちろん、としている取得 、うまくいけば、正の整数を返します。 だから、これを行うてみましょう。 cs50.hを含め、標準io.h.を含め メイン、voidをintです。 そして今ここで、私が先に行くつもりです とのがintとしましょう​​、それはnを、等しく呼び出し 正の整数を取得します。 そして、ちょうどのようなint型がすでに存在している取得 スタッフがそれを書いたので、私は行くよ 得る瞬間を想定する 正のint型が存在し、今では私が行くよ 先に行くと、printfを言うためには、 %I / N "、nのおかげ。 だから今、私はこのプログラムをコンパイルする場合、どのような 私の端末で起こるために起こっている 画面下部のウィンドウ? 私はおそらくそれを取得するつもりだ 前と同じエラーが発生しました。 それでは、これを試してみましょう。 肯定的なことを確認します。 そして再び、暗黙の宣言 機能の、正のint型を取得します。 だから私たちは、これを解決することができます いくつかの方法。 私はそれが簡単で維持するつもりだ ここに私の宣言を入れてもらう 正の整数。 私は、いわゆる署名を必要とする。 署名だけで指し の美学へ プログラムの最初の行。 だから何が正を取得する必要があります リターンint型? だからint型。 私は理想的に意味、それが戻ってくる 正のint型ですが、そのような何か 存在しません。 私たちは、データ間のことを見ていませんでした タイプので、我々は対処しなければならない 我々は非常にいくつか持っているという事実 データ型は、で動作するように。 しかし、我々は単にint型とを返すことができます それが肯定されることを信頼しています。 それは呼ばれるようになるだろう 正の整数を取得します。 そして今、どのように、その引数はどうでしょうか? それは、任意の入力がかかりますか? それは、任意の入力を必要としていますか? だから、知っている必要はありません 事前に何でもした。 文字列は、int型はしない取得していません入手してください。 printfを行う - それはいくつかを持っている必要が 入力は、それに渡された - と印刷名 いくつかの入力を必要としますが、取得 正のint型にはありません。 だから私は、明示的に行くよ コンパイラはvoidを教えてください。 ボイドが何かの欠如である。 だからボイド意味は何も内部で起こっていません これらの括弧、セミコロン。 そして今、私のファイルの下部にある - と 再び、私は肛門のちょうどというようなものだ ここで上部のメインを入れて、どの お勧めは、この方法であるためです。 あなたや他の誰かでも あなたのファイルを開き、 機能はすぐそこです。 あなたは、振り出しからに潜ることができる。 だから今、私は、これを複製するつもりです 正のint型はvoidを得るが、私はないんだけど 今セミコロンを打つつもり。 私は、中括弧を開くつもりです そして今私は借りる必要 月曜日からいくつかのアイデア。 ご存知のように、我々は何かをした 次のことをしながら行うように 何かが本当だった。 そして、私は何をしましたか? 私が与えるようなものをやった 私を正の整数、 プロンプトを少し。 私が好きな言葉を使用することができます。 そして私は何を使用? int型のnは、int型の取得に等しい それへの引数はない。 と違いに気付く。 あなたが使用するときには、関数を呼び出すときに この関数は、あなたが空間に入れていません。 宣言するときは、そのを行う 機能、コンパイラを教えて何 それは期待するべきである。 だから、配置する必要はありません そこに自分自身を失う。 そして今、私の条件何でしたか? さて、nは、正と等しくない それはただの擬似コードだ。 だから私は、もっときれいに、これをどのように表現するのですか? そうゼロ以下。 だから、もう一度、あなたが行うことができます気付く より小さいか等しい。 それは独立した2のにもかかわらず シンボルは、あなたはそれを行うことができます など、あなたのキーボード。 しかし、そのバグはまだあり 私も最後の時間を台無しに。 私は宣言する必要があります - まさに。 私は外で宣言する必要がn個 ループの。 だから私はここにnを配置する必要がありますし、私はしないでください ここでそれを再宣言したい 私は、新しい変数を取得しないように。 私はちょうどここに値を割り当てる。 そして今、私はかなりここで行っていないよ。 私は先に自分の取得してみましょう と私は終わりだふり。 肯定的なことを確認し、今 新しいエラーがあります。 コントロールは、端部に達する void以外の機能。 新しいエラーメッセージだから、しかし、もしあなたの種類 言葉のそれぞれを離れていじめる、それの おそらく間違っているかでヒント。 コントロール。 制御はちょうど順序に意味 プログラムでの操作の。 コンピュータのコントロールでと 何かが間違っていた。 だからの最後に達する void以外の機能。 それは明らかに何関数です を参照する? void以外何関数です? だから正int型を取得し、少し そのウェル内に混乱、 それは空間のようなものだ。 それは、そのための空間の仕様を持っている 引数が、その出力がために起こっている タイプnのこと。 だから左の言葉です いわゆる戻り値の型。 ここで内部の言葉です ゼロ個以上の引数 という関数がかかります。 だから私は何をすべきかが必要なのでしょうか? 私のコードでは、この点を、21行目で 今、私はある点滅プロンプト 正のint型の内側を持っている Nと呼ばれる変数の。 どのように私はメインに戻ってそれを与えるか? 文字通り。 n個のセミコロンを返します。 だから同じようにコルトンの一部を返す ドロップして、私に答えた紙 小さな黒いでその紙切れ でそれを行うためのテーブルの上の箱、 コー​​ドには、文字通り戻り、書き込み nと、しかしコルトンあったように、それはだ 私に何か物理的なバックを渡す。 このケースでは、何が起こって取得することです 正の整数は、手の甲に起こっている おそらく正何 誰に整数? その値はどこに終わるのでしょうか? つまり、この変数にn個を終了し、 次に我々はライン9に進みます。 だから、他の言葉で、の順に 操作は、このプログラムが開始 、実行、コンパイラが実現 ああ、あなたはライブラリをしたいですか? 私はその内部のどんなグラブを手放す。 ああ、あなたは標準IO​​ライブラリをしたいですか? 私はその内部のどんなグラブを手放す。 コンパイラは、自分自身に何を言うん それはライン4に当たったとき? ああ、あなたは実装することを約束 この関数は、正の取得と呼ばれますが、 我々は、後でそれに戻りましょう これらの線に沿って何か。 int型メインボイドがちょうどここにあることを意味 私のプログラムの根性。 ライン7は単なる中カッコです。 ライン8は与える、左側に言っている 整数のための私の32ビットは、それはnを呼び出す。 右側には、周辺 正の整数を得ると言う。 今ので今休止その話てみましょう 私はカーソルを下に移動し保管しない。 私のカーソルが今ここにダウンした理由 今正int型が実行得る。 int型のnが宣言されています。 次の手順を実行します。 printfの私に正の整数を与えます。 はnに格納し、ユーザからの整数を取得 と、おそらく何度も何度もこれを行う。 このループは、このコードは可能性があることを意味 再びこのようなセットアップ実行し、ダウン そして再び、しかし時ようやくユーザー 協力して、私達に正を与える int型、私はその時点で、21行目にヒット 番号は返還し、どちらさ 私は今、強調する必要がありますか? ナイン。 制御、いわば、返品 行9へ。 担当して今のラインがそれだ。 だからすべてが起こってきているものだ ボンネットの下に、この時間が、 私たちは、printfのような関数を使用してきましたとき あるいは他の誰か、その文字列を取得する 制御が渡されていた、あなたのために書いた オフに他人のコード行 行ずつで。 それはちょうど我々はそれと我々を見ることができなかっただ 本当にこれでそれを描くことができなかった プログラムには、いくつかの他のだから ハードドライブ上のファイル 私たちに知られていない。 だから、実際にコンパイルしてみましょう そして今、これを実行してください。 肯定的なことを確認します。 コンパイル、進歩だ。 。/ポジティブ。 私に正の整数を与える。 難しいかもましょう。 1負。 ゼロ。 それに50を与えてみましょう。 50のおかげで、とに制御 今戻ってきた。 どの質問でも、その後、その上に? うん? [聞こえない]。 もう一度言う。 ああ、良い質問。 だから、ここで並列に気づくかもしれない 私は上の角を切断するようなものだ。 12行目では、私が言っている、肯定的なint型を得る しかし、その同じことで、intを返します ロジックは、今という点で理にかなっている ライン6は、私が言っていることを主な戻り int型ですが、私たちは決して持っている 我々のプログラムのいずれかで持っていた? 我々の言及があったことがない このキーワードリターン。 だから、少なくとも、C言語でそれが判明 私たちが使用しているそれのバージョン 、技術的には、1999年にこれがされて作られた 自動的に起こって。 いつでもあなたは、プログラムを実装して、 、主と呼ばれる機能を実装 その関数は、でゼロを返します あなたがそうでなければ言うことはありません場合は、デフォルト、 そしてゼロはただの慣習です。 世界はそれによって、ゼロを返します。 すべてが順調であることを示す、 効果的に私たちを残して40億 行くことが可能なもの 間違ったように、我々は1を返す場合、その このことを意味するコードを意味するかもしれない 事は間違っていた。 私たちはつまり、2を返すことができます この他の事は間違っていた。 我々は、40億を返す可能性がある この他の事が間違っていたことを意味します。 そして、あなたは今あなた自身の考えてみれば PCやMac、あなたは思い出すかもしれない ときには不可解なエラーメッセージを取得 あなたがしていることをソフトウェアからの 使用していて、時にはそれが人間を持っている わかりやすい説明が、そこだ しばしばコードまたは番号 画面上に? これは心に来ていない場合は、 ちょうどそれのために目を光らせる。 それは一般的に何これら コー​​ドを参照している。 彼らは、Microsoft Wordに含まれていると 他のプログラムその場合は、ファイルという 会社とのバグレポートには、次のことができます それらを教えて、ああ、私はエラー番号45を得た。 会社に戻ってそして、いくつかのプログラマ 彼または彼女のことを調べることができます コー​​ドとああ、言う、私が作ったからだ このバグとだからこそユーザー このメッセージが表示されました。 しかし、率直に言って、それはほんの少しだ 邪魔とは少し退屈 少なくとも我々には、そのを締結 最初のいくつかのプログラムは、我々はしましたので、 それを省いてき。 しかし、このすべての時間あなたの一人一人 主が密かにこれを持っていた機能 ラインは自動的にあなたのために追加された 単に慣例によりコンパイラに あなたにいくつかの時間を節約できます。 [聞こえない]。 あなたがメインでそれを含める必要はありません。 それは大丈夫です。 あなたがいた場合、それを含める必要がない このような機能を実現する。 フラットさもなければ機能 うまくいかないであろう。 しかし、主に、それは必要ありません。 週または2つでは、取得を開始します その癖にかつて我々は開始したい エラーを意味する。 質問本当に良い。 のことを言及するので、迅速口頭ブレーク 今週の金曜日、私たちは昼食を持ってされることはありません と自体が、私たちは夕食を食べていることでしょう 学生やスタッフの一部。 あなたは私たちに参加したい場合は、感じる cs50.net/rsvpに行く場合、無料です。 今週の金曜日午後6時。 スペースは、いつものように、限られているが、我々はよ 近くでこれらをやっていき スペースあれば毎週 今週なくなる。 だから我々はオフに左という接戦 月曜日は、文字列が実際にすることができました ただあなたを意味する、にインデックスを作成する 、最初の文字を取得することができます 二文字、三文字 など、あなたは可能性があるため 効果のように、文字列を考える この場合は5にあるように、ハロー 箱の内側に文字。 そして、あなたはそれらのそれぞれで取得することができます 我々が何をしたかの構文を使用してボックス 月曜日に紹介? それらの角括弧 キーボードの。 それはちょうど場所ゼロに行く意味。 我々はゼロからカウントを開始しますので、ブラケット ゼロ時間、ブラケットいずれかを意味する など、電子を意味します。 我々がしてきたので、すべての時間 "こんにちは"の文字列を使用して入力する と "世界"と他のものに 画面は、それが記憶されている このような箱である。 と推測を取る。 各ボックスには、物理​​的に何を表している お使いのコンピュータの内側? [聞こえない]。 申し訳ありませんが? 文字。 確かにケース内の文字は、そう 文字列の、文字だけである 8ビットまたは1バイト。 だから、あなたはおそらく、少なくとも漠然とです あなたのその事実を熟知 コンピュータメモリを有する。 それは2種類のメモリ少なくともを持っています。 一つは、あなたが保存ハードディスクです 恒久的に詰め込むと、そのう あなたは映画を持つことができるので、一般的に大きな や音楽など。 次に、メモリの別のタイプを持ってい ランダムアクセス、R-A-M、RAMと呼ばれる メモリと、このメモリの一種である お使いのコンピュータがある場合に使用されている 実行しますが、力を失うか、あなたの場合 バッテリーダイス、保存されている何 電源を失った場合、RAMに消える そうではありませんので、完全に しつこい。 通常は、これらの日、持っている それのギグ、多分それ以上の2ギグ、。 RAMの利点は、それがはるか​​にあるということです ハードディスクよりもはるかに、はるかに高速 あるいは固体状態は、これらの日のドライブ しかし、それは一般的に高価ですので、 あなたはそれの少ないを持っている。 だから、今日の会話は本当に指し RAM、メモリの種類と パワーがある間だけ存在します お使いのコンピュータに供給される。 だから、H-E-L-L-Oを入力すると、上でEnter キーボード、Hは一つになるだろう RAMのバイトは、Eがで起こっている であるように、RAMの別のバイト、 単語の残りの部分。 だから我々ができました何思い出す 最後の時間を行うことは、このでした。 私が先に行くと、ファイルを開くましょう 我々はstring.cと呼ばれ、思い出すこと それが少し見えた このような何か。 私が実際にロールバックして変更しましょう それは、それはのように見えたかを正確に Sの文字列の長さ。 だからここにプログラムを見てください。 我々はそうCS50ライブラリを含める 私たちは、文字列を取得使用することができます。 我々は標準io.hのを含める ので、printfを使用することができます。 なぜ我々はstring.hでインクルードしましたか? これは月曜日に新しいものでした。 だから我々は、文字列の長さを求めていました。 strのレン。 人々は、数年前に決定した ただ簡潔になるみましょう。 その代わりに、 "文字列の長さ、"呼び出しの それは "STRレン"と呼ぶとさせてみましょう 世界フィギュア出ている、などの 我々はstring.hでとへのアクセスを得るもの。 これはよく知られている。 これはよく知られている。 これはよく知られている。 これは少し新しいです。 22行目で - 私たちは戻ってくる これまでが、今知っているために - とだけ持っていることから、これを知っているだろう ドキュメントを読む場合や、 すでにCを知っていた - 文字列は時々台無しにすることができ得る。 ユーザーが本当に敵対である場合、または 非協力的な彼または彼女だけ キーボードで何も入力しない場合、または キーボードでそんなに種類その それは、コンピュータのメモリを圧倒 理論的には、文字列を返す可能性があり得る 以外のもの 文字列。 それはと呼ばれる特別な値を返すことができます すべて大文字、N-U-L-L、これはNULLである ただ、いわゆるセンチネル値。 それは意味特殊な値です 何か悪いことは、このケースで起こった。 それは文字列がないことである。 だから、私は単純に、そのためにチェックしているヌル 長い話を短く、strのレンと Cに付属の他の機能であれば 彼らは文字列を期待していますが、それらを渡す 渡す場合は、文字列が存在しない場合、 それらNULL、コンピュータまたはプログラム ただあからさまなクラッシュしてしまいます。 これはハングします。 これは、いくつかのエラーメッセージをスローします。 悪いことが起こるでしょう。 だから、これはまだであっても よく定義されていません - この一週間でより多くの意味をなさないでしょうか 二人は - 22行目では、これはただです 自己防御的なエラーチェックの例 念のため1時間のうち 百何かで、うまくいかない 少なくとも私のプログラムがクラッシュすることはありません。 sが何か悪いことに等しいしないのであれば、 私はループで、このを持っており、これがあった 我々は他のを持っていたところ 構文の新しい部分。 私はから反復ループのために持っている ゼロsの長さまでに。 そしてここで、私はSプリントアウトだった ブラケット私が、なぜ私はすべての%cを使用しました 代わりに%sの突然のさえ sが文字列ですが? それは右、文字の? Sは、文字列ですが、Sブラケット何か iがゼロであるのブラケットI 個々の1つまたは2つ 文字列内の文字などのために printfのことを知らされる必要があること、 それは確かに期待する文字です。 そして、これをやった、思い出す プログラムは、実際に行う? 列でそれをプリントアウト。 うん、まさに。 それはちょうど私が入力した単語を印刷 列、1行に1つの文字。 だから、もう一度これを見てみましょう。 だから文字列を作る。 [OK]をコンパイル。 。/文字列。 私はH-E-L-L-Oを入力しましょう​​、と入力し、 確かに私は、1行に1つずつそれを得る。 だから私はここに1の最適化を行うことができます。 あなたは、特に場合は、考えてみれば あなたが前にプログラムしましたが、そこ 24行目で間違いなく非効率。 換言すれば、必ずしもではない 最高のデザイン。 少なくともあなた一回、簡単な STRレンが何であるかを覚えて、それはだ 潜在的にダムに何かをやって。 それは何でしょうか? [聞こえない]。 まさに。 これは、sの長さをチェックしている 一つ一つの時間にもかかわらず、 H-E-L-L-Oは常に起こっている 5文字であることが。 このループを通過するたびに、 5は変化していません。 私は、私をインクリメントするが、何かもしれません すべての上のsの長さである このループの繰り返し? それは5、それは、それは5だ、5だと まだ私はそれにもかかわらず、これをお願いしております 何度も何度も何度も質問。 今、率直に言って、コンピュータはそういまいましいです 速い、誰も気づかつもりないだ この場合の差が、これらの種類 貧弱な設計上の決定ができ​​ます コンパイラ自体があれば加算を開始 あなたのためにこれを修正しようとしない それは典型的には、ないでしょう アプライアンスには少なくとも。 だから私はこれを行うつもりです。 私の後にコンマを追加するつもりだ 私の最初の変数は、私。 私は自分自身の別のものを与えるつもりだ だけで、それを呼び出して変数n、 番号の規則、そして私は私 文字列の値をnに割り当てるつもり sの長さ。 そして私は変更するつもりです 私の条件はどのようなことですか? 私は自分の状態を変更するつもりです iがn未満であるときである。 だから今、私は何回午前 sの長さをチェック? 一度、それは私に対してチェックすることもOKです nは、何度も何度もそれらの今理由 値は、実際には変更しない。 さて、今のところ、ただ知っているあなたでも 関数を呼び出す、のビットがあり オーバーヘッドではなく、あなたを落胆するのに十分 本当に今までの関数を使用してからではなく、 確かにコードの行があるとき そのような - とラインが得られます 長い前にもっと面白い - どこ 私はあれば考える機会が、あり このコードを入力し、どのように多くの それは回を実行します? あなたが時間をかけて見ることから始めましょう あなたのプログラムのパフォーマンスができます 確かに変更します。 実際には、問題の一つは、我々が設定した 過去伴う年間に行わ あなたから思い出す可能性があるので、実装 週ゼロ、スペルチェッカーが、 サポートするように設計されてチェッカーを綴る 150,000辞書プラス 我々は君たちを与えた言葉。 あなたはその負荷のコードを記述しなければならないでしょう RAMにそれらの単語なので、中に 我々のようなボックスが画面上に瞬間を見た あなたのように前にしてから、できるだけ速く ことができ、あなたは答えることができるようにする必要があります フォームの問題は、この言葉です スペルミス? この言葉は間違っている? この言葉は間違っている? そして、我々はしたのかそのような何かで 過去数年間に行われ、それがになっている オプトインオプションベースではあるが、 一種の競争、それによって 少ないRAMとあまり使う学生 時間、より少ないCPUサイクルは、結局 少しの頂上までバブリング リーダーボードや、我々は上に置くことをランキング 私たちがしたように当然のホームページ 過去数年間に行わ。 だから、再び、全く任意ですが、この 設計の機会に話す 一度先に我々はスタートであること これらのいくつかの上に建物 基本的なビルディング·ブロック。 だから私は、この図に戻ってみましょう ほんの一瞬、少しを明らか もっと何か。 これは確かに文字列であり、我々は、撮影した いくつかのライブラリの利点、 持つ標準io.hの - printfの。 printfは、他のものの間で。 int型を取得し、文字列を取得しているcs50.h、 など、string.hで、どの strのレンを持っていた。 さらに別のそこうちしかし、それは変わります。 率直に言って、たくさんの、ヘッダがたくさんあり 関数を宣言するファイル ライブラリで、これctype.hです 実際に幾分になるだろう 私は行くよので有利 先に行くと1を実装する ここに他のプログラム。 私が先に行くと何かを開いてみましょう 私はと呼ばれる、事前に書いた capitalize.c、とのは、みましょう どのようにこの作品を見て。 私は、このバージョンでは、使用していることに注意してください それを、3おなじみのファイル。 18行目では、私がいることに注意してください テキストの行を取得する。 21行目に注意、私はそれを主張しています 次のコードは、に起こっている ユーザが入力したものは何でも、Sを大文字 で、どのように私はそれをやっている? まあ、私は取っている - 前回から学んだ教訓 - 私は私とnを宣言し、反復している 文字列内の文字の上に。 その後のこのブロックは何ですか 〜27行24のコード 普通の言葉で何を? 背中の文字を小文字の。 まさに。 もしSブラケットI - もしそうであれば、i番目 固有であるSの文字、 文字列のchar、より大きい または同等の小文字とする - その二重アンパサンドを思い出す 意味すると - と同じ文字、Sブラケットiが、ある より小さいか等しいzは小文字に、 それはaまたはbまたはcまたはであることを意味している ドット、ドット、ドット、またはzの手段、 それは小文字です。 私は、そのような場合に何をすべきかをしたいですか? まあ、私は若干これを行うことができます ひそかが、 別にこれをいじめるてみましょう。 私はprintfを呼ぶつもりです、%cが出力されます 私はこれを転載したいので 画面上の文字。 私はその後のブラケット私、取るつもり i番目はSの文字、そして、なぜ 私はここでこの小さなトリックをやっている、 マイナス資本Aを小文字? どんなことが与えるために起こっている 私は、一般的に言えば? [聞こえない]。 まさに。 私は本当に覚えていない - それが資本Aの65だった私は本当にしないでください 、何の小文字であることを覚えて しかし、どんなに。 コンピュータが知っている。 だからと言って、マイナスを小文字 資本は、それがあることが奇妙なことだ から別のcharを引いたが、 ボンネットの下に文字は何ですか? 彼らはただの数字だ。 それらの番号はどんなので、 コンピュータはそれを覚えてみましょう むしろ私よりも人間。 そうですマイナス資本を小文字 私に違いを与えるつもり。 それは32であることを起こる、それはなり 小文字のbおよび資本Bの場合 などが挙げられる。 それはありがたいことに、一貫したままになります。 だから私は基本的に取ること、言っている 小文字、というオフ減算 標準差、およびその 効果的に変更のブラケットIから 、もちろん、に大文字小文字の 私は本当に考えることなく 約または覚えて、それらの何だった 8について私たちが話をした数字 ボランティアがステージに上がってきた? さて一方、それ以外で、そうではありません場合、 決定として小文字 24行目で、それをプリントアウト。 私は触れたい あった文字 実はもともと小文字。 それでは、これを見てみましょう。 活用してください。 コンパイルされ、[OK]をクリックします。 。/生かす。 そして、私は、H-E-L-L-Oを入力してみましょう 小文字で入力します。 そしてそれが変換されていることに気付く 大文字に変換します。 私は、再びこれをやってみましょう 別の単語。 どのように最初のDとD-A-V-I-Dについて 一般的な名前として資産? 入力します。 それはまだ正しいの通知。 それはちょうど、最初のD変わらず出力 そのelse構文経由。 だから、その後、心に留めておく ここで物事のカップル。 あなたがこれまでに2をチェックしたい場合は、1つの、 一度の条件は、次のことができ、それら 一緒に私たちが予測さ。 あなたは、このように文字を比較することができます かつ効果的に文字として扱う 数字が、率直に言って、これはそういまいましいです 不可解な私が覚えているだろうことはありませんよ スクラッチからこの思い付く方法 非常にためにそれを介して推論なし 少しの時間。 誰かがあれば素敵な、それをされなかったであろう と呼ばれる機能をそこに書いて それが本当か私に答えることができる下げる falseの場合、この文字は小文字です? まあありがたいことに、誰でも書いた ctype.hは、まさにそれをやった。 私はここに行くとC CTYPEを追加してみましょう タイプ、そして今私がここでダウンして手放すと この行は次のように書き換える。 だから、それを呼び出している場合、私は主張する、S低い ブラケット私は、その後、私は削除するつもりです 完全にこれらの二行。 だから今は他の誰かが、私は願って、書いた 呼び出される関数は低く、それ 彼らがしたし、彼らが宣言判明 それctype.hの内側。 そして今、私は27行を残すつもりだ 一人で、私は31行を残すつもりだ 一人で、私がしたいくら気付く 私のコードを締める。 それは今クリーナーです。 それは目を通すように小さいのは難しい 現在関数は、さらに、あるため とても素晴らしく、それだけという それは言うことありません。 だから今私はこれを保存するつもりです。 私はズームアウトするつもりです。 そして、あなたが持っている可能性が単にスクラッチのように ブール値、ブール値trueまたは falseの場合、それは何ですかまさに 効果的に利益を下げます。 私は再コンパイルしてみましょう。 私を再実行してみましょう。 そして今、のは再びそれを試してみましょう H-E-L-L-O、入力します。 これはかなり良いことだ。 そして再びそれを試して、私は確認してください 何かを台無しにしませんでした。 これも同様に計上されています。 しかし、これでは十分ではありませんので、 私はに行くことはないんだことを他の事 私は本当にそれを介して動作しない限り覚えている 慎重に、と言う、紙です このいまいましいライン。 があった場合、それは素晴らしいと思いません アッパーに呼び出される関数? まあそれはそこになります 同様ctype.hにある。 私が先に行くと入力するつもりだ - 私はそのラインを持ち帰ることができます。 代わりに、このここから、私は先に行かせて と%Cの代わりに、言う この関数を呼び出した結果 複数のi番目の文字の上限。 そして今、それはなってきているに気づく 少しバランス。 私はどのように多くを追跡する必要があります 私は、開いたり閉じた括弧。 だから今はそれもクリーナーです。 今、このプログラムは、より良いとなっている それだから良い間違いなく設計 はるかに、はるかに読みやすいけど それはのは、訂正させていないだ。 活用してください。 。/生かす。 H-E-L-L-O。レッツは、再びそれを実行 D--V-I-D。 [OK]を、私たちは、まだだ 形状はかなり良い。 しかし、今はアッパーに。 私は、もう一つがあることを提案 我々はそれは次のようになります作ることができる洗練された 本当に素晴らしい、本当に締めでした このコードまで、本当に私たちの5つを与える 例えば、設計のための5つの、外。 を取り除くためにいいだろうか? さて、どのようにいまいましい長いこのブロックの見える コー​​ドは単純な何かを行うことです。 さて余談ですが、あなたが持つかもしれないほど この過去のスーパーセクションで見られる 週末には、厳密には必要ありません 中括弧あなただけのものを持っている 我々が提案していてもコードの行、 それがはるか​​になるようにそれらを維持 スクラッチのU字型のように、より明確に ブロック、支店の中何。 アッパーにあれば、それは素晴らしいことではないでしょう その入力が与えられたときに、それになって そうでない場合、大文字、と何だろう 逆の場合には、素晴らしいことであれば すでに大文字の? ちょうどそれを通過 単独でそれを残す。 だから多分それはそれを行います。 私が試してみて、ただ望むことができる それが、私を聞かせていないこと もうひとつご紹介します。 代わりに、このビルトイン端末を使用する ダウンここでウィンドウは、あることを思い出す この正方形の黒いアイコンがあなたに与える 私は完全なことができる大きなターミナルウィンドウ 画面私はどうすればよいでしょうか。 だから、彼らは一種の妙だ判明 名前が、呼ばれるこれらのものはあり manページ、マニュアルページ、短いのマニュアル、 と私は、これらのことによってアクセスすることができます タイピングの男 - 私は何を入力したいのですか? アッパーに男。 が存在する場合、今気付く におけるコンピュータの機能の中では、 この場合だけであるアプライアンス、 オペレーティングシステムのLinux、それが起こっている 私のやや不可解なセットを与えるために 出力されますが、時間をかけていることを見つけることができます それは、常にかなりのフォーマットされて 同じように、あなたはそれに慣れ始める。 アッパーに上部に気付くと、 明らかに同じドキュメントがある 下げるために。 誰それはいくつかを切断しました書いた コー​​ナーとは、1ページにすべてを置く。 これらのことは '目的で 人生は変換することです 大文字または小文字への手紙。 manページ、概要の下にそのことに注意してください 私が持っているどのファイルを私に教えている この事を使用することを含めることができます。 それは私にこれらのための署名を与えている 関数、それらの両方であっても 私たちは今でも唯一 1気に。 今ここの説明である。 アッパーに手紙を変換 可能であれば大文字にC。 まだ有益ですが、私にさせないこと 今、戻り値の下にものを見て それは戻って手渡している。 だから、返される値は、ということです 変換後の文字またはCの場合 変換はできませんでした。 Cとは何ですか? オリジナルキャラクター。 オリジナルキャラクターと私たちは知っている で、再び、まで行くこと 概要、そして誰でも、これを書いている 機能だけで決めた入力 へのアッパーに、下にだけある 任意に、Cと呼ばれるようにしよう。 彼らはそれがほとんど何も呼ばれたかもしれない 彼らはしたいが、彼らはそれを保っ Cのような単純な。 だから私は、マニュアルページを相談してきました。 この文は私を安心させる、もし それが小文字ではないですが、それは ただ戻ってCを、私を与えるつもり 私がを取り除くことができることを意味完璧、 私のelse条件。 だから私はgeditのに戻ってみましょう、と 今の私はただ、これを行うことができます。 私はprintf文をコピーするつもりです。 私は先に、右内側に行くつもりです その外にループ印刷用、およびget 構築する場合は、ここで、この全体を取り除く。 悪いアイデアではなかった、そしてそれは非常にあった ずっと正しいと一貫 私たちが宣べ伝えてきたすべてのもの、 しかしちょうど必要ではない。 とすぐにいくつかのライブラリを実現するように この関数は、他の誰かが存在 書いている、または多分あなたは他の場所で書いた ファイルには、あなたは本当にそれを使用することができ コー​​ドを締め始める。 そして、私は良いスタイルのようなものを言うとき、 この人が呼ばれているという事実 アッパーに関数、または以前にある 下段は素晴らしく便利ですので、 彼らは非常にわかりやすいです。 あなたの関数を呼び出すのは嫌だ 有し、xおよびy及びz、 はるかに、はるかに少ないという意味。 そのシリーズの質問 改良の? だからのいずれかと言えば十分である 持ち帰りも、あなた自身の問題としてです セット - 多分問題セット1が、 確かにPはさえ2以降を設定 彼らは必ずしも正しくありませんしているとき 彼らは完璧であるという意味 まだか、特によく設計。 それはへの他の軸だ について考え始める。 だから、これはあなたの内側に文字列だった コンピュータのメモリが、あなたが持っている場合 H-E-L-L-Oのような文字の全体の束 RAMの内側、と仮定 あなたのプログラムの中で文字列を取得呼んでいる そのようなあなた、複数回 あなたはその後、一度文字列を取得する呼び出し 再び文字列を取得する呼び出し。 まあ、何になるだろう 時間をかけて起こる? 言い換えれば、あなたがラインを持っている場合 コンテキストの外とはいえコード、、のような 文字列sを取得します - これを行うてみましょう。 列名は、文字列を取得等しい。 だから、コードの行を意味していると仮定 彼または彼女の名前をユーザーに依頼する。 このコードの次の行が求めることを意図している 彼または彼女の学校のためのユーザ、および この次のラインなどが挙げられる。 私たちが求め続けると仮定 別のユーザーと もう一つ、別の文字列。 彼らは、メモリ内に滞在するつもりだ 同時に。 一方が他方を壊しするつもりはない。 学校は他に上書きされていません。 しかし、彼らはすべてどこにやる メモリに終わる? さて、私たちは画面に描画するために開始した場合、 我々はこの事を使用できる ここで黒板のように、この黒い場合 矩形は、私のコンピュータのを表して メモリ、私は任意に開始するつもりだ 少し正方形にそれを分割、 それぞれ表しているの メモリの1バイト。 率直に言って、あなたは、RAMのギガバイトを持っている場合 これらの日、あなたは億バイトを持っている お使いのコンピュータのメモリなので、 これらの正方形の億円となりました。 だから、これは、それを言えば十分 スケールには本当にありません。 しかし、我々はこれらのすべてを描き続けることができ はっきり正方形、これを拡張しないように 集合的に表し 私のコンピュータのメモリ。 今、私たちは、ドット、ドット、ドットをやるだけでしょう。 だから、他の言葉で、私は今求められたとき 文字列は私を与えるために取得を持つユーザ 文字列、何が起こる? "こんにちは、"終了で、ユーザーがタイプした場合 アップでH-E-L-L-O。しかし、仮定 のユーザーは、その後のタイプ - 実際に、私が行っているべきではありません こんにちは私たちは求めているので、 自分の名前のためにそれら。 だから私はこれを行うことができればのに戻ってみましょう。 私は私の名前のためにD-A-V-I-Dで入力するのであれば、 しかし思い出してその二行目 コー​​ドは、再び文字列を取得しました 自分の学校を取得します。 その単語はどこです、そのユーザ 次行くの型? まあ、多分それは入るだろう H-A-R-V-A-R-D。私がしたそうにもかかわらず つの行としてそれを引か、これはただです あなたのバイトの全体の束 コンピュータのRAM。 今ので、私は場合は、問題が存在することになります この非常に合理的にRAMを使用して しかし、素朴な方法のようなもの、何かことができます 明らかに区別しませんか? 1が開始され、どこ 一端、右? 彼らは一緒にぼかしのようなものです。 だから、コンピュータが判明 これを行うことはありません。 私は実際に時間に戻ってスクロールしてみましょう いくつかの文字、そしてその代わりにハーバード大学の ユーザーの名前の直後に起こって、 ユーザーが実際に後ろに取得します シーン、特殊文字 によって挿入 彼または彼女のためのコンピュータ。 / 0、そうでなければNUL文字として知られている N-U-Lと呼ばうるさくなく、 N-U-L-Lが、あなたはそれ/ 0のように書いてください。 これは、すべてのビットがゼロでマーカーであるだけだ 最初の単語の間に、そのユーザの 入力された第二。 ハーバード大学は、実際には今まで終わるよう この文字列として そしてもう一つの/ 0。 そう換言すれば、これらを有することにより センチネル値、8連続したゼロ ビットは、あなたは今、区別するために始めることができます から別の文字。 だから、 "こんにちは"でいたものすべてのこの時間 実際には "こんにちは" / 0とし、 一方、そこに可能性のある非常によく かなり多くのRAMである コンピュータの内部。 私は今ではもう一つのことをやってみましょう。 それは、これらの正方形のすべてのことが判明 我々は、彼らは、はい、描画されてきた より一般的には文字列が、 これらの事は配列です。 アレイは、単にメモリの塊です 背中合わせに背中合わせにそれだ、 そして、あなたは、通常の方法で配列を使用 この角括弧表記。 だから私たちは、これらのかなりのビットを参照するつもりだ 時間をかけて、しかし、私が先に行くとう 開く、のはそれ年齢と呼ぶことにしましょう​​。 そして、我々が何ができるかに気づく これらの同じトリック、少し ここでもう少し構文。 したがって、このプログラムの17行で - 実際に、私が最初にプログラムを実行してみましょう ので、このことが何を見ることができます。 私に年齢を加えると呼ぶことにしましょう このプログラムをコンパイルします。 。/年齢。 部屋には何人います? それは3コール。 最初の人の年齢? 18,19、および20。 そして今やや途方もなく、私はただ プログラムそれが年齢のものを作った 三人。 だから機会が明らかにあり ここでいくつかの楽しみのために算術。 ありがたいことに、数学は正しいです。 18は行って19、19に行ってきました 20等が挙げられる。 しかし、何が本当にあることを意味している 実例ここでは保存している方法です これら3人の年齢。 私が何時にズームしましょう ここで起こって。 だから最初に、これらの最初の数行はすべき かなり慣れること。 私はちょうどのためにユーザーにプロンプ​​トを表示しています 部屋の中で人々の数。 にしながら、私はint型を取得し、実行し使用しています 何度も何度も何度もこれを行う。 我々は前にそのパターンを見てきましたが、 27行目では、新しいと実際にはかなりある 有用となるであろう ますます便利。 何が27行目で違うことに注意してください 私は宣言されているように見えるということです int型は、年齢と呼ばれるが、待つ。 それだけではi​​nt型の年齢ではありません。 これらの角括弧は、あります 内はnです。 この文脈でそうブラケットN、ではない しかし、ここでprintf文の内側 この唯一の27行で、この行はです 私nは整数を与えると言って、それぞれの int型です。 だから、これはの、いわば、バケツで、 この場合、3つの整数に戻る 背中合わせになるように私は効果的に 3つの変数を持っている。 代替案は、することが 明確な、これだろう。 私が欲しかった場合は、最初の生徒の 年齢は、私はこれを行うことがあります。 私が欲しかった場合、2番目の生徒の 年齢は私はこれを行うことがあります。 私が欲しかった場合は第三の生徒の 年齢は、私はこれを行うことがあります。 と禁じる神たちは皆のを必要とする この部屋での年齢 - 私は意味、これはコピーの多くの一体であり、 もう一度、もう一度、もう一度貼り付けます。 そして、プラス、かつて私は、このプログラムをコンパイル 他の生徒が出てかけて歩く場合 そのドアの、今では私の電話番号 変数が正しくありません。 それでは配列のいいのはあるとして あなた自身を感じ始めるとすぐに コピーと貼り付け、オッズはだということです しない最良のアプローチ。 配列は、潜在的に動的です。 私は事前にどのように多くの人々には知らない 部屋にしようとしている、 しかし、私はそれらのn個必要知って、私はよ 時が来れば、Nを把握。 このコード行は、現在を意味、私に与える このようになり、メモリのチャンク どこで、画面上の箱の数 nの上に完全に依存していること ユーザーが入力したログイン だから今、このプログラムの残りの部分です 私たちに、実際にはかなり似て ただ文字でやった。 私はループのために持って気付く 30行目から始まる。 私は配列を取得するので、右の後、私 Yからの反復は、最大nまでにゼロに等しい。 私はこの有益なのprintfを持って ちょうど私の年齢を与える、というメッセージ 人の#%iのため、ナンバーワン、 ナンバー2、ナンバー3。 そして、なぜ私はこれをやったの? 率直に言って、人間は1からカウントすることを好む コンピュータ科学者に対し、最大で、 までにゼロ。 コンピュータ科学者は、するつもりはありません この種のプログラムを使用するため、我々はしている ただカウントを開始する予定 普通の人のようなもので。 そして今、33行目では、わずかに気付く 構文の異なる作品。 ジャンルその変数のi番目の年齢 配列のデータ型はintを取得する予定です。 そして今、最後に、これはただです ここに算術ダウン。 私が主張するために別のループで決めた いくつかの時間が経過し、今ではこの中 独立したループは、これらの行が実行されます。 今から今年、私はなり人 歳が、これではありません気づく 変数i。 これが今ではint型のために%Iです。 そして、私は、最初のプレースホルダとして気づく 私はプラス1でプラグインなので、我々は次のようにカウント 普通の人。 そして、自分の年齢の値を、用 歳の私、私は年齢のブラケットを取る I - と、なぜ私はここに1を加えているのですか? 彼らはただ歳。 それはプログラムの私の愚かな選択だ。 彼らは、ちょうど1年歳。 私は、任意の数の点で、入力することができ 私は実際にそこにしたい。 それでは、実際には、すべてのです ここに関連性? まあ、私は実際に戻ってスクロールしてみましょう こっちと絵を描く 待ち受けているのかの。 我々は我々の次で何をやっているだろう 問題セット二人に手を染めている 暗号の世界。 だから、これは文字列ですので、 複数文字のシーケンス、そして何 これは言っていますか? これは、オンライン版ではありません スライドの。 だから私は、これはこれと等しいことを主張する 長年から愚か広告 前に実際に思い出すかもしれない その起源の一つ。 だから、これは暗号化の例です。 または暗号。 それはあなたがしたい場合ことが判明 実際に情報または共有を送る 確実に誰か、との情報 このようなメッセージのように、次のことができます 文字をスクランブル。 しかし、一般的に、言葉はある ランダムにスクランブルされていない。 彼らはいくつかの方法で入れ替えたり、変更している そのため、何らかの方法で - おっと。 それは次回のための楽しいスポイラーです。 だから、明らかに何かマッピングすることができます そのラインアップB. NoticeをO 総額が賢明。 どうやらRは、電子になる。 どうやらF-H-E-Rは、S-U-R-Eになります。そう それは、マッピングがあると判明し、内 この場合はかなり愚かなあり 誰もがそれを考え出した場合にマッピング? これはと呼ばれるものです。 腐れ13、回転13。 それは暗号化の最も愚かである そのためのメカニズム文字通り 、手紙のひとつひとつに13を加算し あなたならちょうどその意味で愚か あなたの手で自由な時間のビットを持って と鉛筆、またはあなたはそれだと思う あなたの頭の中を通って、あなたは試みることができる すべての可能な追加 - 一、二、 3つのドット、ドット、ドット、ちょうど25 全体のアルファベットを回転させ、 結局、あなたは見つけ出すよ このメッセージは何ですか。 あなたは、このような何かをしたのであれば あなたへのメッセージを渡す小学校 親友、あなたの小学校であれば 先生は単に通読 メッセージとブルートは、ソリューションを強制 あなたが得ているかもしれません それによって答え。 さてもちろん、現実の世界では、 暗号化は、より洗練されています。 これはからのテキストの抜粋です ユーザ名とされているコンピュータシステム パスワードは、ほぼすべての私達のものはそうであるように、と これはどのようなパスワードがあるかもしれない ハードディスクに保存されている場合のように見える しかし、暗号化された形式で駆動します。 これは、単に文字の回転ではない BとBがCこれですです はるかに洗練され、それが使用されます 一般的には秘密鍵として知られているもの 暗号。 この写真は、次のを伝え 少数のアイコンの話。 左では、我々は持っているもの 我々は、プレーンテキストと呼ぶことにします。 暗号化、平野の世界では テキストは単に元のメッセージです 英語やフランス語で書かれた またはいかなる言語。 あなたはそれを暗号化したい場合、我々は合格でしょう それは絵で南京錠を通して、そう アルゴリズムのいくつかの種類、いくつかの機能 誰かが書いたか、プログラム そのスクランブルできれば手紙 もっと複雑にわずか13を追加するよりも それらの各々に関する。 あなたは、で、そのプロセスから抜け出す何 真ん中そこは暗号文と呼ばれています。 セクシーな単語のとても親切。 それはちょうどそれが暗号化されたことを意味 プレーンテキストのバージョン。 そして、あなたはその同じ秘密を持っている場合にのみ、 13またはマイナス13、あなたはすることができます 解読するそのようなメッセージが表示されます。 だから問題にとりわけ、二つを設定 あなたは、ハッカーであればやる Editionは、あなたがにコードを記述する必要があります 考え出す、これらのパスワードをクラック 彼らは何だったとどのように彼らがいた 暗号化され、私達は少しを与える行うものの 道に沿っての指導。 スタンダード版では、ご紹介 暗号のカップルは、暗号化 メカニズムは、シーザーと呼ばれる1つ、1 ヴィジュネルと呼ばれる、それはまだです なり回転暗号 何か、Bが何かになりますが、 あなたは、プログラムでそれをしなければならない 確かに秘密があるだろうので、 通常は数であるキー関与 またはキーワードだけ 送信者と受信者これらの メッセージが理解しておく必要があります。 さて、これは実際に化身を持っている 現実の世界である。 これは、例えば、少しオーファンである アニーの秘密のデコーダリング、そしてあなた 実際にこれらを実装することができます 回転暗号 - 何となり、Bとなり 何か - 車輪のカップルと、 外側に1つ、内側に1 その結果、あなたは、ホイールを回転させる場合、または リングは、あなたが実際に並べることができます 異なる文字で手紙、 シークレットコードを取得。 そして今日は接戦として、 私は私は何だろうと思っていたことのビットです あなたがテレビをオンにした場合という先祖返り 12月24日、あなたは見ることができます のムービー広告nauseum 連続で24時間。 しかし、今日のために、私はここでそれを開くよ と私達にのわずか2分を与える 教育学関連のクリスマス·ストーリー Ralphieの名前少し仲間と。 [ビデオの再生] それをすべてに知られており、その雑貨-BE ラルフパーカーは、ここに任命される リトル孤児アニー秘密のメンバー サークルとは、すべての権利がある 栄誉とメリット そこに発生する。 署名付き、リトル孤児アニー。 インクで、ピエール·アンドレが副署。 すでに番組とメリット 9歳の時。 [ラジオで叫ぶ] さあ、それに乗ってみましょう。 私は約すべてのそのジャズを必要としない 密輸や海賊。 のため明日の夜 - 聞く 黒の締結冒険 海賊船。 さて、それはアニーの秘密の時間です あなたのメンバーへのメッセージ 秘密サークル。 、子供たちを覚えています。 アニーの秘密のサークルのメンバーだけ アニーの秘密のメッセージをデコードすることができます。 覚えておいて、アニーはあなたに依存している。 B2にあなたのピンを設定します。 ここにメッセージがある。 12、11、2 - - 私は私の最初の秘密会議で午前。 -25、14、11、18、16 - ピエールは素晴らしい声今夜だった。 私は今夜​​のメッセージを伝えることができ 本当に重要だった。 -3、25。 それはアニー彼女自身からのメッセージです。 誰にも教えていない、覚えておいてください。 -90秒後、私は部屋にいるよ 家の中でどこに9の少年 プライバシーとデコードに座ることができます。 なるほど、B.私は次に行きました。 E.最初の言葉は "である"である。 S. それは今では簡単に来ていた。 U. 25。 それはのR. Ralphieの、オン来る。 私は行かなきゃ。 - 私は、右下の馬である。 ジー達人。 -T。 Oをしてください。 何にしてください? リトル孤児は何だった アニーは言おうとして? 何にしてください? -Ralphieの、ランディが行くようになっています。 あなたが出て来てくださいますか? - すべての権利、馬。 私は右の外になります。 -Iに近い今になっていた。 緊張がひどかった。 それは何でしたか? 惑星の運命月 バランスでハングアップ。 -Ralphieの、ランディのお奨めは行く。 - 私はのために右の外に 大声で泣いている。 - ほとんどそこ。 私の指が飛んだ。 私の心は鋼の罠だった。 すべての細孔は、振動。 それはほとんど明らかになった。 はい、はい、はい、はい、はい。 あなたのオヴァルを飲むようにしてください-BE。 オヴァル? 安っぽく商業? 雌犬の息子。 [ENDビデオ再生] SPEAKER 1:これはCS50であり、その 問題のセット二つになります。 来週お会いしましょう​​。 SPEAKER 2:次の時 CS50は、これが起こる。 SPEAKER 1:我々はいないしたがって、1つのトピック これまでで見た 関数ポインタのこと。 さて、関数ポインタだけである 公共のアドレス 機能が、はるかのような - の息子 -