[音楽再生] DAVID Jマラン:すべての権利、 CS50に戻る歓迎。 これは、週2の始まりです。 私たちの1つからの一言 キャンパスの友人 - あなたが興味を持っている場合は、おそらく、どちらか 現在または将来的には でも、かつてより快適、教育 中学生を少し コンピュータ科学について何か、 そのURLに頭を行う。 彼らは今、特定の必要としている 教師は、あなたが持っている場合は特に コンピュータサイエンスにいくつかのエクスポージャーを持っていた。 だから、最後の時間を思い出す、私たちは、導入 少数のデータCのタイプ、および あなたを得るために始めたかもしれない これらのこれまでとの汚れた手 問題1つを設定してください。 そして、私たちは、charを持っていた。 だから、多少専門用語で、何 あなたが今日それを知っているようにchar型である? だから、文字だが、レッツ 今より正確に。 我々は、文字とはどういう意味ですか またはchar個々の? 数値以外の文字 - そうとは限りません。 それも、その偶数が判明 句読点と文字がある このデータに表される charとして知られているタイプ。 だから、必ずしもアルファベット順ではありません。 うん? だから、ASCII文字です。 だから、週ゼロに戻ってと思われる場合、時 私たちは、ボランティアの我々のバイトがありました 出てくると、どちらか自分の手を握る またはすべてではない、彼らはビットを表す。 しかし、集合的に8のグループとして、 彼らはバイトを表した。 そして、私たちは、ASCIIの概念を導入しました 単にその講演、で 数字と文字の間のマッピング。 それらの人間としておよびASCII用途 暗黙の、8ビット 文字を表現する。 だからそれに応じて、8ビットが可能であれば それぞれ2つの値の1つを取る - ゼロまたは1 - 二つの可能性があったことを意味する この人のために - ゼロまたは1 - この人のための2つ、これには2つの 人、この1のための2つ。 だから、2回の合計2回 2回2回2 - 合計ので、2つの八。 だから文字の合計数はあり 可能256あなたにできること 8ビットで表す。 さて、あなたのそれらはアジアの話す人 言語は多くのがあることを知っているかもしれません 単なる世界の文字 AsおよびBのCsとDsが。 そして実際、ASCIIはには十分ありません 世界の多くの言語。 その別の時間ではなく、もっと。 ここでは、C言語で必要に応じてことを知っている 手紙の一部を表現する 句読点、または単に何かのキャラクター 自然の中で、我々は、charを使用しています。 そしてそれは1バイトまたは8ビットです。 どのようにint型はどうでしょうか? まあ、int型は整数です。 どのように多くのビットが、ご存知の場合、 通常は整数でしたか? 誰もリコール? だから、通常は32です。 実際には、コンピュータに依存する あなたが使っていること。 しかし、アプライアンス、および多くの中 コンピュータは、32ビットまたは4つの バイト - 8回4。 と整数だけ格納するために使用されている どちらか負の数、 正、またはゼロ。 そして、あなたは32ビットで、あなたを持っている場合のみ 正の数を気に、することができます 誰球場どのように多くの可能性 コンピュータから表現できる整数 までにゼロ? だから、32には2つになりますた およそ40億です。 2、これらの力があることを行っているので、 コンピュータサイエンスの定期的なテーマ。 私たちが説明するように、彼らは非常に便利だ それはかなりではない場合でも、で動作するように 自分の頭の中で計算を行うのは簡単。 だから我々は、約4億ドルを言うよ。 さて、長い長い - あなたは、推測の種類ができます。 これは、int型よりも長いです。 何ビット? だから、64ビットまたは8バイト。 これはちょうどあなたも表すことができますを意味します 大きな数字、大きな正または 大きな負の数。 と方法についてのフロート? これは浮動小数点です 32ビットの値。 これは何か、単に実数で 小数点付き。 しかし、あなたはその代わりに多くの場所を必要としたら 小数点以下またはあなたがしたい 一部で大きな数を表す それは後の割合は、使用することができます 64ビットですダブル、。 しかし、興味深いのはそこだ ここでテイクアウト。 int型は32ビットで制限されているのであればと でも長いlong型が64で制限されている ビットは、その種の質問を頼む、 あなたが実際にカウントする場合はどうでしょう int型のための40億よりも高い? さて、あなたはただ、長い長いを使用しています。 しかし、あなたがより高いカウントしたい場合は 第64回には2つではなく、与えるか、または取る? さて、それは膨大な数です。 しかし、結局、あなたが実際に可能性がある 、値のこれらの種類を気に あなたは、データベースを使用している場合は特に そしてじゃんじゃんを収集するために開始 と大量のデータと独自の割り当て そのデータの各部分の数字。 だから私たちのような問題を抱えている。 同様に、浮動小数点で 値 - 浮動小数点または倍精度 - あなただけの有限の数を持っている場合 ビットは、どのように多くの合計数値は、あなた可能性 おそらく表す? ときまあ、それはあまり明らかだ 小数点を伴う。 しかし、それは確実に有限です。 あなたは、ビットの有限数を持っている場合、 ヒト有限数の有限 電球の数は、確かにすることができます 唯一の有限数を表す 浮動小数点値。 しかし、どのように多くの実数 彼らの世界でありますか? 無限があります。 だから、それが問題のようなものだから、私たち 無限の量を持っていない 私たちのコンピュータの内部メモリまたはRAM。 だから、いくつかの困難な事が起こる可能性があります。 それでは、先に行くと試してみましょう ここでこれを表現する。 私が先に行くと、geditのを開いてみましょう。 私が先に行くと、ファイルを保存するつもり だけであることが "floats0.c"と呼ばれる ある例と一致して ご希望の場合はオンラインで入手可能。 そして、私は先に行くつもりだと 次のように定義する - 私はint型、先に行くと言うつもりです メイン空間、私たちはしばしばそうであるように。 そして、このプログラムでは、私はするつもりです フロートので、32ビットの自分自身を宣言する 変数は任意に、Fと呼ばれる。 そして私はそれに格納するつもり 私は、十分の一なので、0.1を知らない。 だから私は一人としてあることを表明するつもりだ 完全である10で割っ Cの正当 そして2行目に、私は単に その値をプリントアウトしたい。 だから私たちが使用できることを思い出してください おなじみのprintf。 私たちは、int型のために%Iを使用したくない。 我々はフロートに対して%fを使用​​したい。 そして私は、バックスラッシュnはするつもりです 近い引用、コンマ、fは、セミコロン。 だからここに私のプログラムです。 1バグがすでにあります。 これは誰かをクリックしたん誰のため すでに少なくとも指摘しておきたい 私が作った1バグ? うん? うん。 私はに "#インクルード"を忘れてしまった 私がしようとするとそのうちのトップ、それらの症状 コンパイルし、これがあることになるだろう コンパイラは、私に叫ぶために起こっている 未定義シンボルを言ったり、 その旨を何か。 それは何かを理解していない printfのが好きです。 だから私は、の#include "するつもりです "、ファイルを保存します。 そして今、それは良い形でだ。 しかし、私はまた指摘するつもりです 外に一つの新しいディテール今日。 場所を指定することに加えて %fは%I%sのような者は、次のことができます たまに行動に影響を及ぼす そのプレースホルダの。 例えば、浮動小数点の場合 ポイント値、私だけしたい場合 後一小数点を表示するには 期間は、私は実際に0.1Fを行うことができます。 だから、他の言葉で、私はFを分離し、 ただ0.1とパーセント記号、 printfを伝えるには、全体を持っているかもしれません 小数点以下の数字の束 私のためのポイント。 しかし、私は唯一のそれらのいずれかを見てみたい。 だから私は今、先に行くし、保存するつもり このプログラムは、私の端末に入る ウィンドウ、私は先に行くつもりです とタイプはフロート0は、次のように入力してください。 私はやや不可解な行が表示されている 我々として、より多くの意味を作るために開始されます 今週と次のそれを離れていじめる。 今、私は先に行くつもりです とフロートゼロを実行します。 と、いまいましい。 だから、別のバグがあり ここにいくつかの理由。 私はその十分の一をかなり確信して、または 10で割った1は、0.0ではありません。 たぶん私はただ見ていないよ 十分な数字で。 では、なぜ私は2を参照するために2つの0.2を言うことはありません 小数点以下の桁だけではなく、1。 私は私の端末ウィンドウに戻りましょう あちこちに数回を打つ 私の歴史を参照してください。 再びゼロフロート作るのですか、 その後再びアップ。 そして今、入力してください。 そして今、私はこれは間違っているかなり確信している。 そして、私は3と4を​​行うことができ、私はよ おそらくゼロを見て維持するつもり。 だからバグがどこにあるのでしょうか? 10で割った一つは、0.1である必要があります。 誰かが何かで刺しを取りたい 根本的な問題がある? うん? 彼らは両方の整数です。 だから何? それでは、10で割った1、と 私は算数で何をすべきか。 そして、私は0.1を得る。 うん。 そしてそれは確かにその問題です。 あなたは、コンピュータの整数を取るとき そして、あなたは別の整数で割り、 デフォルトでは、コンピュータがに行っている あなたは整数にしたいと仮定します。 しかし問題は、もちろん、 0.1は整数ではないことを。 それは実数です。 そしてどんなコンピュータがでない デフォルトでは、それだけで捨てている 小数点以下すべて。 それはそれ自体が切り捨てまたは最大ません。 それだけで、すべてを捨て 小数点以下。 そして今、理にかなっている。 今、我々は明らかにしているので、 ゼロのままに。 しかし、ちょっと待って。 私はint型にゼロを見ていないよ。 私は実際に0.00を見ている。 それでは、どのように私は今、これを調整するのですか? 10で割った1はゼロですが、私がいたら それはなっている0.00を見 実数に変換? うん。 まさに。 だからここまでの行5、I実際に 店舗その後つまり0.1、 、フロートの中、ゼロに切り捨て に効果的に同等だ intとしてそれをしない保存するけど、 確かに、floatとして。 また、私はその後にprintfを使用しています 明示的に2台にその番号を印刷 小数点以下にもかかわらず、そこに 実際にではないかもしれません。 右、吸い、この種のは、だから? どうやらあなたは、数学を行うことはできません 少なくともこのレベルの時 コンピューターで精密、。 しかし、確かに解決策はあります。 我々は多分できた最も簡単な修正は何ですか ただ直感的にここにあっても、ために行う この問題を解決? うん? 整数に変わる - うん。 私は何全く分からない場合でも、 それあれば本当に、ここで起こって 根本的に、これらの両方に関係しています int型であること、よく、なぜ私にはありません 10.0、これを行うことを確認 1.0は、ファイルを保存し直し。 私に戻ってダウンして行ってみよう ボトムと再コンパイル。 私は今、再実行しましょう​​。 そしてそこに - 今、私は10分の1持っている 0.10として表現。 わかりました。 だから悪くはない。 そして、私はもう一つの方法を指摘してみましょう 我々はこれを解決したかもしれない。 私は実際に時間にロールバックしましょう 我々は一人としてこれを持っていたときに 第十一瞬前。 そして、私が先に行くと、このファイルを保存し直してみましょう だけに別のファイル名、など 少しチェックポイントを持っている。 だからバージョンだった。 そして今、私が先に行くと、う 複数のバージョンを実行します。 私たちは、このバージョンを呼ぶことにします 2ゼロがインデックス化。 そして、私の代わりにするつもりです この - あなたは何を知っていますか? この場合のドットゼロ作品を追加。 しかし、一つは可変であったとします。 想定10は可変だった。 言い換えれば、私はできなかったと仮定し 最後にただハードコード.0 この算術式の。 まあ、私は実際に何かを行うことができます 括弧内に鋳造と呼ばれる。 私は、フロートにその整数10をキャストすることができます と私にその整数1をキャストすることができます 浮くだけでなく、。 次に行うことになるだろう数学 効果的に、10.0で割った1.0です なり、その結果 以前のようにFである。 私はこれをコンパイルするのであればのように山車を作る 2、今2を浮かぶ、私は同じを得る 同様に、答えてください。 だから、これは、かなり不自然な例です この問題を解決するために キャストを導入することにより。 しかし、一般的に、キャスティングになるだろう 特にのための強力なもの、 問題は、時、週の時間に2を設定 あなたは、あるデータ型を変換する もうその日の終わりに 同じように表現される。 一日の終わりには、一つ一つの 我々はこれまでの話した事がある ボンネットの下にただのint。 またはあまりにも低レベルだ場合 あなた、彼らはただの数字だ ボンネットの下に。 でも、文字は、再び、リコール 週間のゼロから、番号は ボンネットの下に。 と言うことである、私たちの間で変換することができます 数字異なるタイプの場合 彼らはただのビットです。 私たちは、番号の間に変換することができます と文字彼らはただなら ビットであり、逆もまた同様である。 そして、このようにキャストするメカニズムです プログラミングで、それは強制的にすることができます 別のデータ型を変更。 残念ながら、そうでないような 私が言っていたかもしれないほど簡単。 私は山車に戻っ行くつもりです 、よりシンプルだった1、 と簡単な1 .0はそれぞれにに追加された。 そして、ちょうど素早く復習として、 私が先に行くと、再コンパイルせ これは、山車を作る2 - 申し訳ありませんが、これは山車1にすることです。 そして今、フロート1を実行してみましょう。 そして底に、気付く 私は確かに0.1を取得していること。 だから、問題は解決しました。 しかし、まだ。 私は今、少し好奇心を取得するつもりだ 、私は私に戻って行くつもりです printf文と と言う、あなたは何を知っていますか? 私はこのことを確認したいのですが 本当に10分の1。 そして、私はこれを見たいと思ってするつもりだ 小数点以下5桁、言う、へ。 それは問題ありません。 私は、五から二を変更 私が作るとコンパイル。 1を浮かぶように私はそれを再実行します。 かなり格好良い。 私のサニティチェックが終わるかもしれませんが 私はもう少し冒険取得しています。 私は0.10から0.5に変更するつもりです。 私は後に10桁の数字を見てみたい 小数点。 そして、私は先に行くと再コンパイルするつもりだ これと再実行山車1。 後悔のI種はこれをテストした さらに私の数学はそうではないので もう訂正し、それはそうです。 しかし、多分、ちょっと待って それはただのまぐれだ。 たぶん、コンピュータが動作している 少し奇妙。 私が先に行くと、20進数のポイントをやってみましょう と私が知っている自分自身を安心させる 数学を行う方法。 私がプログラミングする方法を知っています。 山車1、再コンパイルを行い、畜生。 それは、本当になっている 遠くマークから。 だから、ここで何が起こっているの? 直感的には、我々の仮定に基づいて 以前のデータ型のサイズについて、 ここで何が起こっている必要があり ボンネットの下に? うん? まさに。 このくらいの精度が必要な場合は、と それは精度の多くの一体だ - 小数点以下20の数字。 あなたはおそらく表現できない あなたが持っている限り、任意の数の 任意のビット数。 しかし、我々はしないでください。 フロートの場合、我々は唯一の32ビットがあります。 32ビットのみに入れ替えできるようにする場合 道 - ちょうど私たちの人間のように、段階 手を上下に - 有限数で 方法は、有限個しかありませ 実数では表すことができます これらのビットで。 そして最終的にコンピュータ に持っているために起こっている 手抜きを開始します。 コンピュータは、これらの詳細を隠すことができます 少し時間のために私たちから。 しかし、我々は数字で突っつい開始した場合 そしてより遠くを見て 全体の数字の末尾の数字、 そして我々はそれがあることがわかり始める 実際に近似 十分の一のアイデア。 そしてそれは結局、悲劇的に、そこ 数字の数が無限 我々は正確に表すことができません 少なくとも有限の持つコンピュータ、 ビット数は有限 RAMの量。 さて、残念ながら、この時々 現実世界の影響を持っています。 人々は非常にこのことを理解していない場合 またはソートの付与という事実を取る 自分のコンピュータは何をするだけという 彼らが行うとしないためにそれを教えてくれ これらの基礎を理解する 表現の詳細 - 率直に言って、いくつかの言語であり、これ Cとは異なり、ユーザから隠さ - いくつかの悪いことが起こる可能性があります。 と私は、我々がやるだろうと思っていた ステップを取り戻すさ。 そして、これは約 8分間のビデオ。 それは数年前に放送され、それが与える 行くことができ、実際にどのような洞察 間違ったあなたは、これらを過小に感謝するとき 非常にすべてあまりににおける細部の種類 現実の世界。 私たちは薄暗いライトができれば 数分間。 SPEAKER 1:我々は今、工学に戻る 現代の驚異で災害。 コンピュータ - 我々はすべて受け入れるようになってきた 頻繁にイライラする問題 それは彼らと一緒に行く。 バグ、ウイルス、ソフトウェアの不具合 支払うために小さな価格は 利便性。 しかし、ハイテク、高速で 軍事、宇宙計画 アプリケーションでは、最小の問題 災​​害に拡大することができます。 1996年6月4日に、科学者たちは準備に 無人のアリアン5ロケットを打ち上げる。 これは、科学衛星を運んでいた 正確にどのように確立するために設計された 地球の磁界は、相互作用する 太陽風と。 ロケットは、欧州のために建てられた 宇宙庁とそのからリフトオフ 海岸の施設 仏領ギアナの。 JACK GANSSLE:約37秒にAT 飛行は、彼らが最初に気づいた 何かが間違っていた。 ノズルに旋回された の方法は、彼らは本当にすべきでない。 約40秒で飛行中に、 明らかに車両がトラブルにあった。 彼らが作ったときに、それはだ それを破壊することを決定。 と範囲の安全担当、 ボタンを押された途方もない根性、、 それができる前にロケットを爆破 公共の安全に危険になる。 SPEAKER 1:これは、処女航海だった アリアン5、その破壊の 欠陥の埋め込みため開催されました ロケットのソフトウェアである。 JACK GANSSLE:アリアン上の問題 数があったということでした その必要な64ビットで表現する。 そして彼らは、変換したい 16ビットの番号へ。 彼らは数がなかったと仮定し ほとんどのことを、非常に大きなことになるだろう 64ビットのもの桁 数はゼロだった。 彼らは間違っていた。 SPEAKER:1つのソフトウェアの無力 種類のを受け入れるようにプログラム 別によって生成された番号だった 障害の根本にある。 ソフトウェア開発は非常になっていた 新技術のコストがかかる部分。 アリアン4ロケットは非常にされていた ソフトウェアを正常に、そんなに それはまたあったために作成さ アリアン5で使用。 PHILIPコイル:基本的な問題があった アリアン5は、速かったこと 速く加速した。 とソフトウェアではありませんでした それを占めた。 SPEAKER 1:ロケットの破壊 、巨大な金融災害だった 微小なソフトウェアエラーが発生したため、すべて。 しかし、これは初めてのデータではありませんでした 変換の問題は、現代苦しめた ロケット技術。 JACK GANSSLE:1991年、スタートして 第一次湾岸戦争、パトリオットの ミサイルは、似たような種類を経験した 数変換の問題。 その結果、28のアメリカの兵士であった 殺され、約100他の人が負傷 ときになっていたパトリオット、 着信スカッドから保護するため、 ミサイルを発射することができませんでした。 SPEAKER 1:イラクがクウェートに侵攻し、 アメリカの砂漠の嵐作戦を開始しました 初期の1991年、パトリオットミサイル電池 サウジアラビアを守るために配備された イラクのスカッドからとイスラエル ミサイル攻撃。 パトリオットは米国の中距離です 製の地対空システム レイセオン社。 THEODORE POSTOL:パトリオットのサイズ インターセプター自体は大体です 20フィートの長さ。 そしてそれは、約2000ポンドの重量を量る。 そしてそれは程度の弾頭を運ぶ - 私はそれが大体150ポンドだと思います。 そして弾頭自体はある い高性能爆薬 その周りの断片。 弾頭のケーシングは設計されています 散弾のよ​​うに行動する。 SPEAKER 1:ミサイルは4を運ばれる コンテナあたりと輸送される セミトレーラーで。 PHILIPコイル:パトリオット対ミサイル システムがでさかのぼる 少なくとも今20歳。 もともととして設計されました 防空ミサイルへ 敵の飛行機を撃墜。 第一次湾岸戦争では、ときに戦争 一緒に来て、軍はそれを使用したい スカッドはなく、飛行機を撃墜する。 イラク空軍ではなかった そんなに問題。 しかし、軍がスカッド心配していた。 そして彼らは、アップグレードしようとした パトリオット。 SPEAKER 1:敵のミサイルをインターセプト マッハ5で移動することはあった 十分に挑戦するつもり。 しかしパトリオットはに突入したときに サービスは、陸軍は認識していなかった 自分を作ったイラクの変更 ヒットすることはほぼ不可能スカッド。 THEODORE POSTOL:何が起こった あったスカッドです 入ってくると、不安定であった。 彼らはウォブリングた。 この理由はで、イラク人だった のうち600キロを取得するために かかった300キロの範囲でミサイル、 フロント弾頭外重量。 彼らは、弾頭を軽量化。 だから今パトリオットはしようとしている スカッドで来ています。 とほとんどの時間、圧倒的な 時間の大半は、それだけだろう スカッドで飛ぶ。 SPEAKER 1:一度パトリオットシステム オペレータはパトリオットが見逃し実現 そのターゲットに、彼らはペイトリオッツを爆発 可能性を避けるために弾頭 それが許可された場合の死傷者 地面に落ちるように。 THEODORE POSTOL:何ほとんどだった 人々は空に大きな火の玉として見 とインターセプトと誤解 スカッドの弾頭の。 SPEAKER 1:夜空の形態では ペイトリオッツは、正常であるように見えた そこダーランで、スカッドを破壊 そのについては間違いであることができなかった パフォーマンス。 そこでは、パトリオットのレーダーシステムが失われた 着信スカッド、決してのトラック ソフトウェアの欠陥が原因で立ち上げました。 これは、最初に発見されていたイスラエル人 そのシステム長い 、長い時間の不一致にあった クロックのためになりました システムのコンピュータに埋め込まれた。 JACK GANSSLE:約2週間前 ダーラン、イスラエルで悲劇 国防総省に報告 システムは、時間を失ったこと。 実行中の約8時間後に、 彼らは、システムがあることに気づい 著しくあまり正確になりつつ。 国防総省は、によって答え パトリオット電池のすべてを伝える システムのままにしないように 長い時間のために。 彼らは長い時間が何であったか言ったことはない。 八時間? 10時間? 1,000時間? 誰も知りませんでした。 SPEAKER 1:駐留パトリオット電池 ダーランで兵舎で その欠陥内部クロックがあった の夜に100時間以上に 2月25日。 JACK GANSSLE:それは時間を追跡 10分の1秒程度の精度。 さて、10分の1秒です それができないので、興味深い数 つまり、正確にバイナリで表現 それは正確で表現できない どんな現代のデジタルコンピュータ。 それは信じがたいですが、 例としてこれを使用しています。 のは、番号の三分の一を見てみましょう。 3分の1が表現できない 正確に小数である。 三分の一は、0.333起こっている 無限大のために。 とそれを行う方法はありません 進数で絶対精度。 それはまさに問題の同じようなものだ それはパトリオットで起こった。 もはやこのシステムは、走った 最悪時エラーになりました。 SPEAKER 1:操​​作の100時間後、 時間の誤差だけだった 第二の約3分の1。 しかし、ミサイルを標的の面で マッハ5で移動し、それがもたらした 以上600メートルのトラッキングエラー。 それはのために致命的なエラーになります ダーランで兵士。 THEODORE POSTOL:何が起こっている スカッド打ち上げは早期により検出された 警戒衛星。 そして、彼らはスカッドが来ていたことを知っていた 彼らの一般的な方向である。 彼らはそれが来ていたか分からなかった。 SPEAKER 1:これは、レーダーまですぐだった パトリオットシステムの構成要素 見つけて維持するダーランを擁護 入ってくる敵のミサイルを追跡。 JACK GANSSLE:レーダー 非常にスマートだった。 これは、実際の位置を追跡するだろ どこにスカッドその後を予測 おそらく次回だろう レーダーパルスを送った。 それはレンジゲートと呼ばれていました。 THEODORE POSTOL:その後パトリオット一度 十分な時間が行くことに合格していることを決定 背中との次の場所を確認 この検出されたオブジェクトは、それが戻って行く。 だから、それが間違ってに戻ったとき 場所は、それはその後にオブジェクトを見ていません。 それは、どのオブジェクトがなかったと判断した それは誤検出だった、と トラックを削除します。 SPEAKER 1:受信スカッドが消えた レーダー画面から、と 数秒後には非難 兵舎に。 スカッドは28を殺し、最後の一つでした 最初の湾岸戦争時に解雇した。 悲劇的に、更新されたソフトウェアが到着 ダーランで翌日。 ソフトウェアの欠陥が修正されていた、 問題を抱えた内の1つの章を閉じる パトリオットミサイルの歴史。 パトリオットは、実際には頭字語です フェイズドアレイ追跡するため ターゲットの切片。 DAVID Jマラン:すべての権利、そう 確かに、例をありのまま。 そして幸いにも、これらの低レベル バグは、我々はよ何かではありません 通常、確かに、感謝しなければならない はなく、私たちの一部と プログラムの初期。 むしろ、バグのほとんどはあなたよ 出会いは、自然の中で論理的になります 自然の中で統語それによって コー​​ドはちょうど動作しません。 そして、あなたはそれがかなり速いね。 しかし、我々に着く場合は特に 学期の終わりには、に起こっている への可能性をますますなる 本当にデザインについて真剣に考える あなたのプログラムの基礎となるの 表現 そこにも、データを。 例えば、我々は、MySQLの紹介 これは、一般的なデータベース·エンジンです あなたはにウェブサイトと使用できる バックエンドにデータを保存。 そして、あなたはで決定を開始する必要があります 学期末だけでなく、どのような 使用するためにこれらの線に沿ってデータの種類 しかし、使用するには、正確にどのように多くのビット、 あなたは、日付を格納するかどうか 日付や時刻などの時間、また、 あなたはどのように大きなたいようなもの 、のためであると言って一意のID、ユーザ あなたのデータベースである。 実際には、あなた方の何人かが持っていた場合 Facebookは、かなりの時間を占めている そしてあなたは、アクセスを取得する方法を知っている - ユーザーIDに 時々あなたに表示される あなたが選択した場合を除き、プロファイルのURL URLのニックネーム、またはあなたがしている場合 FacebookのグラフAPI、使用 によってあなた公的に利用可能なAPI 生データのためにFacebookを利用して求めることができます - あなたの数値IDが何であるかを見ることができます。 そして何年か前に、Facebookの本質 使用してから変更しなければならなかった 長く使用するintの同等 長い時間をかけてユーザーが来るとので と行くとアカウントの多くを作成し、 偽アカウントも、彼らは非常に簡単に 4のようなものを排出することができました int型のような億可能な値。 問題のこれらの種類に関するので、より多くの 道だけでなく、。 キャスティングされたように、すべての権利、。 それが不正確だった。 迅速な発表のカップル。 だからセクションでは、正式にこれが来始める 日曜日、月曜日、火曜日。 あなたは、今週後半に電子メールを介して聞くことができます あなたのセクションの割り当てに関して。 そして、あなたはどのように、その時点でもここよ あなたの場合は、セクションを変更する スケジュールは今変更したりしている 快適さのレベルは現在変更されています。 1である一方、P-セット1とハッカー のオプションを使用して、この木曜日のため 当たりその期限を延長 金曜日までの仕様 典型的な方法である。 問題に含まれていることを認識 セットの仕様は上の命令である CS50アプライアンスを使用する方法、メイク、 だけでなく、いくつかのCS50特定のツール を提供することができますスタイル50、のような 上に動的にフィードバックを あなたのコードスタイルの質とも あなたが提供することができ50をチェック あなたのような動的なフィードバック コー​​ドの正しさ。 我々はまだ備わっていることを許す チェック50といくつかのねじれ外。 始めたのはクラスメート数 4の周りには、金曜日の夜の午前時 仕様では、それ以来、気づいて上がった 私たちが作業していることをいくつかのバグ を通じて、そしてだれでものための謝罪 過度の欲求不満を経験している。 障害は私のものです。 しかし、我々はCS50をフォローアップします それが解決されたときについて説明します。 スコア自体に単語だから。 だから、それはあなたの前の週または2つになるでしょう 問題セットのフィードバックを得るために開始 あなたはまだ持っていないので、 教育仲間。 そしてその時でさえ、私たちは、評価するために開始されます C言語の問題は、我々の前に設定し 戻ってスクラッチそう評価する あなたは、より関連性の高い得ること より迅速にフィードバック。 しかし、シラバスあたり一般的には、CS50 問題セットが沿って評価される - 4つの軸に続く スコープ、正確性、デザイン、そしてスタイル。 スコープは通常、数字になるだろう そのゼロの間で、5 のどれだけをキャプチャ あなたがオフに噛んという作品。 通常は、これが5になりたい。 少なくとも、すべてのものを試してみました。 そして、それは倍数因子のお知らせ だからの一部だけをやって 問題セットは、最善の戦略ではありません。 一方、より明白である 正しさの重要性 - ただあなたのプログラムがで正しいです 仕様に関して? これは意図的にもっと加重さ 重くすることによって、他二つの軸より 3倍に我々は認識しているため 通常は費やすつもりだという 多くの時間は、いくつかのバグを追いかけ、 あなたのコードが動作するようになって、その後、 それをインデントし、選択している 適切な変数名と 好き、これは、もう一方の端にある スタイルのスペクトルの。 それはスタイルではないと言うことはありません 重要であり、我々はそれを上に説くだろう 講義とセクションの両方で時間。 スタイルは美学を指し コー​​ドの。 あなたはよく名前の変数を選択した 短いが多少あること わかりやすい? あなたが見てきたようにコードがインデントされて 講義と一貫した方法で スタイル50は? 最後に右のデザインです そこに真ん中である。 デザインは、置くことが難しいものです それははるかだから上の指 主観的。 しかし、それは、おそらく最も重要なの 教育の観点から3つの軸 時間をかけて、その値はこれは次のようになります 教育仲間の機会に あなたには、定性的なフィードバックを提供します。 実際、CS50に我々は持っているにもかかわらず 最後にこれらの式とスコア、 日のこれらは、非常に意図的です 非常に小さなバケツ - ポイント値 ゼロと3の間に とゼロと5。 我々は非常に粗い線を描画しようとしないでください 問題セット間の間、または 学生ではなく、むしろできるだけ焦点 我々は、定性的に、手書きすることができます からのフィードバック、どちら型付けまたは口頭 あなたの特定の教授仲間、 あなたは非常によく知るようになるでしょう。 しかし、一般的に、それらは重みがある さまざまな軸は必要があること。 一方、あまりにも、それがで保つ価値がある あなたはその仮定すべきではないということを覚え 5のうち、3人が60%と したがって、大体失敗。 3つの意図的であることを意味し 良い道路の真ん中のようなもの。 あなたはでスリーを取得している場合 学期の始まり、それはだ 確かに良いことを意図 開始する場所。 あなたが補数、見本市を取得している場合は、そこ 少しを支払うことを間違いなくいくつかの作業 活用するために多くの注意、 セクションと営業時間の。 あなたは四つんばいを取得している場合 とファイブ、素晴らしい。 しかし、実際、我々は軌道を見てほしい 学生の間で - 非常に 学生ごとに個別化が、開始 一種の中でここに学期 3の範囲には2つですが終了 ここまで四から五の範囲である。 それは我々が本当に探しているものだ。 そして、私たちは心にデルタのことを続けるのですか あなたは週にゼロと週の間で展示 私はグレードをやって12。 それは絶対にどのように私たちには関係ありません あなたの場合初めに公正あなた 軌道は確かです 上向きと強い。 アカデミック正直 - ので、私は私に入れさせ ちょっと、より深刻な声。 だから、このコースでは、の区別を持っている 他よりも多くの学生を送信 広告ボードに歴史の中で、私は信じています。 我々はこれで失わカウントのようなものを持っている これが起こる頻度の点。 そして、それは50の学生ではありませんので、 いずれは、彼らよりも不誠実である 他の場所でクラスメート。 しかし、我々は非常に良好であることも、実現する この種のことを検出で。 そして、それは利点である コンピュータサイエンスのクラスが持っている中で、私たち そして我々はすべての学生を比較することができない 問題は、すべてに対してペアワイズセット その他、今年だけでなく、 しかし、すべて過年度。 我々の学生のように、能力を持っている Googleやコードを見つけるためにクラス、 githubのようなサイトとオン ディスカッションフォーラム。 CS50のに絶対に解決策があります そこに漂っpは、設定されます。 しかし、あなたはそれらを見つけることができれば、 我々はそれらを見つけることができます。 そして、これのすべては非常に自動化されている そして私たちが見つけやすいと悲しい。 しかし、私は、あまりにも、強調しておきたいこと 当然の学術正直ポリシーです 非常に大変であることを意味 その精神の反対。 確かに、今年の我々は物事を言い換えました このなるようにシラバスに、ドット 詳細ドットドット、 シラバスである。 しかし、コース内の包括的なテーマ 本当に合理的であることです。 我々は、有意性があることを認識する 教育の量 ある程度まで、コラボレーションの値、 クラスメートと、それによってあなた 2または3かそれ以上である ホワイトボードに立って そうにホワイトボード、 、あなたのアイデアを話す - 写真で擬似コードを書いて、 ばマリオはどうあるべきかを図式化 あなたはそれを最初に書くことがあった 擬似コードである。 何が貪欲アルゴリズムべき - あたりどのように振る舞うべき 問題は、1を設定します? そしてその動作を実現 我々は非常にあることを奨励 これらの線に沿ってずっと。 とシラバスには、表示されます 下の弾丸の全体の束 合理的なカテゴリと合理的ではない 私たちは助けて助けカテゴリ あなたの心をどこに包み込む 私たちは、その線を引くん。 親指の一般的に、まともなルール あなたが解決するために苦労している場合ということです いくつかのバグとあなたの友人や同級生 それは、あなたの隣にされて座っている あなたは彼を表示するための合理的または彼女 あなたのコードとねえ、あなたは助けることができる、と言う 私はここで間違って何が起こっているかを把握? 我々は一般的に採用しないでください 反対側。 それはあなたのために正しい応答ではない と言ってここに友人や同級生、ああ、 ただ鉱山と姿を見て それから、それから。 それは無理のようなものです。 しかし、他の誰か、別の脳を有する 目の別のペアを見て あなたのコードをあなたのスクリーンまたはルック と言う、あなたはよろしいです ここでループを持っている? それともあなたはよろしいです ここでそのセミコロン? またはああ、そのエラーメッセージとは、このことを意味します。 それらは非常に合理的であり、 奨励行動。 私はをほのめかしていたように例 以前の学生があるときに煮詰める 夜遅く悪い判断を行う 決定とに自分のコードを電子メールで送信 elseまたは単に誰かが言って、 ここで、それはDropboxの中ですか 夜遅くグーグル。 そして私は、奨励し、あなたのことを頼むでしょう あなたはそれらの不可避を持ってない場合 ストレスの瞬間は、最大突沸している 締め切りに対して、あなたは遅れていません それはその時点で既に金曜日の日から ポイントは、もちろんの頭に電子メールを送るか、または 直接自分。 聞く、言う、私は私でよ ここでのポイントを壊す。 会話を持ってみましょう そしてそれを把握。 Webや他のいくつかのではないに頼る 合理的な振る舞いは決してありません あなたの解決策、そして多すぎる クラスメートは、もはやここでません なぜならその貧しい判断のキャンパス。 しかし、それはその行をスカートは非常に簡単です。 そして、ここで応援する小さな画像です あなたが貼りからそのようになりました すべてがOKになります。 クイック復習だから、その後、 我々は、中断したところの。 だから先週は、我々が導入したことを思い出し スクラッチでの条件ではなく、 しかし、C言語で、この時間。 そして、いくつかの新しい構文がありましたが、 それ自体は実際には新しいアイデアはありません。 我々は可能性がブール式がありました または一緒に縦2 2とバーやと一緒に アンパサンド、左両方のことを言っ 右が真でなければならない これを実行するため。 その後、我々は見てのスイッチを持っていた 簡潔に、しかし、私は本当にしている提案 達成するためだけ異なる構文 あなたは目標の同じ種類で知っていれば 何をあなたのケース進める になるだろうしている。 私たちは、ループを見た。 forループは、おそらく最も一般的です または少なくとも一つのその人 一般的に本能的に手を伸ばす。 それは少し不可解に見えるにもかかわらず、 この、多くの、多くの例を見ることができます ずっと前に、あなたが持っている すでに先週末。 ループは同様にすることができますが 同じことを実現する。 しかし、あなたは、任意のインクリメントを行いたい場合 またはの更新 変数の値は、その必要はあり 以上手動でなく、それを行う forループの前になります。 そしてDO-whil​​eループは、そこ 私たちで何かをすることを可能にする 少なくともたまに何か それ以外はtrueです。 そして、これはのために特に適しています したいプログラムやゲームのための 何かのためにユーザーにプロンプ​​トを表示する 少なくとも一度。 そして彼または彼女は、協力しない場合 あなたはそれをしたいと思うかもしれません 何度も何度も。 変数を使用すると、その間、我々はラインを持っていた このようなコードは、その可能性 二行である。 あなたが呼ばれるint型を宣言することができ カウンター、セミコロン。 それとも、ただ宣言することができます いわば、それを定義します。 それに同時に値を与えます。 そして最後に、我々は話を 関数について。 そして、これは良い例であった それが示しているという意味 機能の2つのタイプ。 一つは、GetStringメソッド()であり、その、再び、 ユーザーからの文字列を取得します。 しかし、GetStringメソッド()は、興味深いの一種である これまでのところ、我々はそれを使用してきたように、 我々は常にそれを使用しましたので、 の左側に何か 等号。 それはそのGetStringメソッドを()と言うことです 値を返します。 それは、もちろん、文字列を返します。 そして左側に、我々はしている 単に内部でその文字列を保存する 変数名と呼ばれる。 このことは、ある意味で、とは異なる printf関数printfのため、少なくとも我々の中で ここで使用法は、何も返しません。 余談ですが、それが何かを返しません。 私達はちょうどそれが何であるかを気にしない。 しかし、それは何がありますか 副作用と呼ばれる。 そして、すべてのその副作用は何ですか 我々はこれまで見てきた場合? printfは何をしますか? それは、画面に何かを出力します テキストまたは数値か何かが表示されます 画面上で。 そして、それはただの副作用と考えられてい それは実際に手渡しではないので それは私に戻って。 それは内部の答えではありません 私はそれからできることブラックボックス に達するとつかむ。 それはちょうど、自分自身でずっとそれをやっている コルトンこれに差し込まれていたように ブラックボックス先週、彼何とか 魔法のようにボードに描いていた 私なしで実際に関与。 すなわち、副作用であろう。 しかし、私は実際に戻って到達しなければならない場合 ここと、ああ、ここに文字列である、と言う ユーザから、それはでしょう 戻り値である。 そして、これまで私たちは、関数のみを使用してきました 他の人が書かれていること。 しかし、我々は実際にこれらを行うことができます 自分自身のものの種類。 だから私はに行くつもりです 再びCS50アプライアンス。 私は我々というタブを閉じてみましょう 一瞬前に開いていた。 そして、私が先に行くとう 新しいファイルを作成します。 そして、私は先に行くつもりだと この1 positive.cを呼び出します。 だから私は、と何かをしたい ここで正の数。 だから私は先に行くとintするつもりです - 申し訳ありません - #含まれています。 それが同じで作ってないようにしましょう 以前のように間違い。 int型メイン(ボイド)、オープン中括弧 ブレース、中括弧を閉じた。 そして今、私は次のことをやってみたい。 私はプログラムを書きたいこと ユーザが与えると主張 私に正の整数。 だから全くGetPositiveInt機能がありません CS50ライブラリである。 唯一の場合、getInt()があります。 私が持っているので、しかし、それはOKです 私が課すことのできる構文 その値にもう少し制約。 私はこのような何かを行うことができます。 だからint型のnを - あなたに沿って入力している場合と、単に実現 私は戻って行くつもりだと 瞬間にいくつかのことを変更する - そのint型nは場合、getInt()を等しい。 そして、それは置くために起こっている n個のintの内部。 そして、私は、よりわかりやすいとする。 私はそれを要求するように私が何かを言ってみましょう あなたは私に正の整数を与える。 わかりました。 だから命令の少しだけ。 そして今、私は何ができますか? まあ、私はすでに私の単純なものから知る ちょうど私のような条件や枝、 スクラッチで持っていた、私が何かを言うことができる nは以下に等しい場合、タグ ゼロ、私は何かをしたい 好き、それはポジティブではありません。 そして私は行うことができます - [OK]を、私は本当にそのint型を取得したい。 だから私はここに行くことができると私は一種でし のは、これをコピーし、これをインデント。 そして、[OK]をクリックします。 nは、以下であるのであれば ゼロに等しいが、これを行う。 さて、どのような場合に、ユーザー 協力しない? さて、その後、私はするつもりです ここでこれを借りる。 そして、私はここに行く とこことここ。 だから、これは明らかではない 解決策は、右? 視界には終わりはありませんので。 私は、ユーザーが与えることを要求したい場合 私を正の整数、私がすることができます 実際にint型を取得します。 私は、そのint型を確認することができます。 しかし、その後、私は再びそれをチェックしたいと 再びそれを確認して、もう一度それを確認してください。 だから、明らかに、何が良いでしょう ここで使用されるように構築する? すべての権利は​​、ループのようにいくつかの種類。 だから私は取り除くつもりです これのほとんどすべての。 そして、私はこれを取得したい 少なくとも一度int型。 だから私は何を言うつもりです - と私はに戻ってくるだろう 一瞬にしながら - 今、何をすべきか? 私は、int型のnを取得する場合、getInt()を実行するつもりです。 OK。 だからかなり良いです。 そして今、どのくらいの頻度で行う 私はこれをやってみたい? 私はループのprintfの内部を入れてみましょう ので、私は、何度も何度も要求することができ 必要であれば。 そして、私はこれは何をしたいですか 条件が行うにしながら? 私はこれをやっておきたい しばらくケースは何ですか? うん。 Nがゼロ以下である。 だから、すでに、私たちはかなりしました このコードをクリーンアップ。 我々は非常にシンプルな構造を借りてきた - DO-whil​​eループ。 私はちょうど重要な行を盗んた 私はコピーして開始されたコードの 貼り付け、それは賢明ではありませんでした。 そして今、私は実際に貼り付けるつもりです それはこことばかりに一度それを行う。 そして今、私がやりたい何 このプログラムの非常に終わり? 私はちょうど何かが簡単言うよ のおかげで、のような - と 私は、int型のためにI%をやる - バックスラッシュnは、コンマ、その後 nは、セミコロンのプラグイン。 わかりました。 だから今何が起こるか見てみましょう 私はこのプログラムを実行すると。 私が先に行くつもりだと 正作るのですか。 くそ。 いくつかのエラー。 だから私は最初に戻って上にスクロールすることができます。 後方にそれらを介して動作しません。 トップダウンからのそれらを介して動作 LESTそれらカスケードとのみ 一つのことが間違っている可能性が。 の暗黙の宣言 関数場合、getInt()。 うん。 だから、それだけでは十分ではなかった。 私は種類の同じ間違いをしたが、 少し違う今回。 私はstdio.hに含まれていませする必要があるが、 含まれていますまたcs50.h、 その取得int型のいわゆる宣言 アプライアンスを教えるか、教えて Cどの場合、getInt()がある。 だから私は保存し直してみましょう。 私は、他のエラーを無視するつもりです 私は、彼らがしていることを願ってするつもりですので、 何とかエラーに関連 私はすでに修正されました。 だから私は先に行くと、再コンパイルしてみましょう 肯定すると、入力してください。 くそ。 3つのエラー、まだ。 私が最初までスクロールしてみましょう。 未使用変数n。 我々は前にこれを見ていませんでした。 そして、これは、あまりにも、ちょっと不可解です。 これは、コンパイラの出力である。 そして、何その強調表示された行 そこ - positive.c :9:13 - 言っている、それはライン9に言っている positive.c、13文字で、 13列は、このミスを犯した。 特に、それは言っている 私に使用されていない変数n。 それでは見てみましょう - 行9。 私はその意味ではn個を使用しています 私はそれに価値を与えている。 しかし、どのようなコンパイラは好きではないことである 私は一見、それを使用していないこと。 しかし、私はそれを使用しています、ちょっと待って。 11行目では、私はここでそれを使用しています。 しかし、私はさらに下にスクロールしている場合 positive.c :11で - そのライン11、文字12、で コンパイラは、の使用を私に言っています 未宣言の識別子N。 私が持っているので、宣言されていない手段 としてそれを指定されていない データ型の変数。 しかし、ちょっと待って。 私は正確にそれをしたライン9インチ だから、誰かが本当にここに混乱している。 これは、いずれかの私やなぜなら、コンパイラの 行9で、再び、私は宣言しています int型のnと、私はそれを代入しています 場合、getInt()の値を返す。 それから私はラインでその変数nを使用しています 11と、その値より少ないかどうかをチェックする よりまたはゼロに等しい。 しかし、これは明らかである 悪いと壊れた理由は? 再びそれを言う? ああ、私は前にNを宣言する必要が ループに入る。 しかし、なぜですか? 私が意味する、私達はちょうど少し前のことを提案した それは、変数を宣言する大丈夫です すべて1行で、その後 それらのいくつかの値を割り当てます。 グローバル変数 - のが戻って来るように 一瞬でそのアイデアに。 なぜあなたは私が入れたいん ループの外にそれ? それがある。 まさに。 だから、やや直感に反する、とはいえ、 私がまとめてみましょう。 あなたは、内部Nを宣言する場合 そこdoブロックの - 特に内部の それらの中括弧 - その変数nは何がある スコープと呼ばれる - 当社のスコアリングシステムとは無関係 もちろん - でものスコープを持っている それらの中括弧に限る。 言い換えれば、通常は、宣言した場合 一連の内部変数 中括弧、その変数にのみ存在 それらの中括弧の内側。 だから一人でそのロジックによって、たとえ 私はライン9におけるn、それを宣言した 本質的に、スコープから消える 、いわば、メモリから消える 時間によって私は、11行目を打った。 11行目は、残念ながら、であるため それらの中括弧の外。 だから私は、残念なことで、これを修正することはできません 私は前に何をしたかに戻って。 あなたが最初にこれを行うことがあります。 しかし、あなたは今何ではありません 周期的にやって? あなたは明らかに取得していない 周期的にint型。 だから場合、getInt()を残して、私たちができる 内部の場合、getInt()を残すべき それは我々がしたいものだループため 何度も何度もするためのユーザをせがむ。 しかし、それは行くために十分でない ラインアップには、6と言う。 int型のnを、セミコロン。 まだそれに価値を与えてはいけない理由 あなただけまだする必要はありません。 しかし、今、ここでダウン、通知 - この 非常に簡単な間違いである。 私は私の以前のをシャドウにしたくない n個の宣言。 私は、nを使用すること 実際に存在する。 そして今、10行目で、 私は値をn個割り当てる。 しかし、ライン6で、私は、nを宣言します。 そして、私は缶または私はできません 今、12行目でそれを使うのか? 私は可能性があるため、それらの間の巻き 括弧nは今宣言されている? ここまで5行目に1つ。 ここに14行に1つに。 私は今、ズームアウトであれば、行って、このファイルを保存 背面にと、肯定的なメイク、それを実行 この時間をコンパイル。 だから、すでに進行だ。 スラッシュ。 。/ポジティブ、入力します。 私はあなたが私を与えることを要求 正の整数。 1負。 2負。 3負。 ゼロ。 One。 そして、もう一つのおかげです 今印刷しているか。 私は、何か他のものを試してみましょう 好奇心の外に。 私は入力整数に言われています。 しかし、私が代わりに子羊を入力する場合はどうでしょうか。 だから、今、別のプロンプトが表示されます - 再試行してください。 しかし、どこにも私のコードで 私は、再試行を書きました。 だからここで、おそらく、これは再試行され から来るプロンプト、あなたが言うでしょうか? うん、場合、getInt()自体から。 だからCS50のスタッフが行うものの一つ あなたのために、少なくともこれらの最初の数で 数週間、我々はいくつかの量を書かれているされて 確実にするためにエラーチェックのことなら あなたは場合、getInt()を呼び出すには、少なくとも意志 ユーザーからint型を取り戻す。 あなたは、文字列を取得することはできません。 あなたは、charを得ることはありません。 あなたが何かを得ることはありません 他の完全に。 あなたは、int型を取得します。 さて、それは肯定的ではないかもしれません。 それは負ではないかもしれません。 私たちは、その周囲に何の保証も行いません。 しかし、我々は、再試行するようにユーザにせがむます 彼または彼女は、実際にされるまでリトライ、リトライ 協力しています。 同様に、私は1.23を行う場合、 つまり、int型ではありません。 しかし、私は50と言う、を入力しない場合、その 私が欲しかった値を与える。 わかりました。 そんなに悪くない。 我々は単に何をやったかの質問? キー持ち帰りは、明確にすること、しないこと 我々は見てきたそんなにループ、 私たちは本当にいないにもかかわらず、前 それを使用しましたが、スコープの問題、どこ 変数のみのみ使用したりすることができ いくつかの指定された範囲内である。 すべての権利、私は提案に対処させて あなたはのことを、以前に作られた グローバル変数。 余談としては、別のことが判明 この問題に対する解決策が、 一般的に間違った溶液または 不完全に設計されたソリューションは、することです 何として変数を宣言 グローバル変数と呼ばれる。 さて、私の定義に違反したようなものだ スコープがあるので 非常に上部にない中括弧ません 、ファイルの一番下。 しかし、それの含意 それが、今では4行目にある nはグローバル変数です。 名前が示すようにと、それはだ どこでもアクセス可能なだけ。 スクラッチは、実際にこれらを持っています。 変数を使用した場合は、思い出すかもしれません あなたはそれのためだかどうかを選択しなければならなかった このスプライトまたはすべてのスプライトのために。 まあ、すべてのスプライトは、単に明確になり グローバルな言い方。 うん? ああ、本当に良い質問。 だから、非常に最初のバージョンでのことを思い出す 私のコードの、ときに私が誤っ 行9で宣言され、定義されたN - 私は、それを変数として宣言 そして私はそれを使用して値を与えた 代入演算子 - これは私の2つのエラーを与えた。 One、nを使用しなかったという事実は、 二、その中で11行 それだけで宣言されていません。 私はしませんでしたので、最初のもの 当時のアドレス。 それは厳密に宣言するエラーではありません それを使用する変数はありません。 我々がやったことのしかし1 CS50アプライアンス、意図的に、 教育学、我々は、最大クランクたさ 作成するコンパイラの期待 あなただけのことをしないやっていることを確認して 正しく本当に正しく。 なぜならあなたは、変数を宣言している場合 nおよびそれを使用していない、またはそれを使用したこと等 正しく、次に何 そこにやっている? それは本当に目的を達成しません。 あれば、それは、時間をかけて非常に簡単ですあなた に自分のコンピュータを構成しないでください ただ持つコードを持っているために、この方法では、 ここで少しの残党、そこの残党。 そして数ヶ月後には、振り返ると あなたが似ている、なぜこのラインがある そこにコード? と正当な理由がない場合は、それ あなたやあなたの同僚の利益はありません 道をする必要があるとし 次にその上につまずく。 余談ですが、どこにあるの それから来る? まあ、我々はコンパイルするたびにことを思い出してください プログラムは、このようなもののすべてがある 印刷される。 だから私たちはこれに戻ってくる。 しかし、再び、というユーティリティであることを確認 によってコンパイルのプロセスを自動化 実際のコンパイラを実行 打ち鳴らすと呼ばれる。 この事は、我々は最終的に表示されます、い 特殊とデバッグに行う プログラムは、デバッガと呼ばれる。 これは、最適化に関係しています コー​​ド - 将来的にはその上でより多くの。 STD = C99 - これはちょうど1999年のバージョンを使用することを意味 C. Cはよりも長いの周りされている それが、彼らはいくつかの素晴らしいを作った 変更を加えた数年前に10。 そしてここでは、関連するものだ。 我々は何をすると言っていること 以前に警告だったでしょう 学生を防ぐエラー コンパイルから。 と壁手段のためにそれを行う 物事の全体の束ではなく、 単に変数に関連していた。 そして私にスクロールさせて この行の終わり。 そして、これは、あまりにも、我々は、最終的によ に戻ってくる。 これは明らかにの名前です 私がコンパイルしているファイル。 これは、ファイル名をリコール 私は名前として出力しています 私の実行可能プログラムの。 この-lcs50は単にCS50を使用することを意味します ライブラリ、および任意の0と1という スタッフが書いた以前のコンパイル 今年、統合 私のプログラムにそれら。 と誰もが-LMとは何か知っている? それは数学ライブラリ、だ ちょうどそこにあなたがいる場合でも 任意の数学をやっていない。 それは、単に自動的に提供い 私たちに作ることによって。 まあ、私はもう一つの例を実行してみましょう ここに新しいファイルを開くことによって。 と私はstring.cとしてこれを保存してみましょう。 それは、我々はデータの話としてことが判明 種類は本日、さらにそこ ボンネットの下で起こって 我々はこれまで見てきたよりも。 だから私はすぐに迅速なプログラムを実行してみましょう。 stdio.hに含まれています。 そして、私はそれを保存します。 そして、あなたは知っている、私が作ることないようにしましょう 何度も何度も同じ間違い。 cs50.h.を含め そして今、私は先に行かせて と(ボイド)int型メイン行う。 そして今、私は単にプログラムをやってみたい これを行うこと - 文字列を宣言する Sと呼ばれる文字列を取得 ユーザーから。 そして、私は少しをやらせる ここに指示 - そう - 私の文字列を記入してください ユーザーが何をすべきか知っています。 そして、ダウンここでこの下に、 私は次のことをやってみたい - int型のために私はゼロを取得します。 繰り返しになりますが、コンピュータ科学者は、一般的 ゼロからカウントを開始するが、我々は可能性 私たちが本当に望んでいる場合、そのいずれかを行う。 今私はするつもりです私は小さい Sの文字列の長さよりも。 だからstrlenは - S-T-R-L-E-N - それは簡単ですので、再び、それは簡潔だ それはあっても、入力する 少し不可解。 それは我々が使用されていませんでした機能です 前が、文字通りないこと - 私に表す数値を返す 文字列の長さ ユーザーが入力した。 それらがhelloで入力した場合は、戻ってくる 5 5があるので、 こんにちはの文字。 次に、それぞれの繰り返しで このループは、iのプラスプラス。 だからもう一度、標準では、たとえ建設 あなたはかなりあまりに快適じゃないか まだそれに慣れ。 しかし、今、このループの各反復で、 私がやろうとしているものに気づく。 私が先に行くと印刷したい 単一の文字出 - 新しい行にそう%のCバックスラッシュnを。 そして、あなたは私が何をしたいのか知っている? 単語は、ユーザーがタイプすることであるものは何でも で、こんにちはように、私は印刷したい H-E-L-L-O、1行に1つの文字。 言い換えれば、私はで取得したい 文字列内の個々の文字、 それによって、最大文字列はただ持って今まで 文字のシーケンスであっ。 私はS、ブラケットを行うことができますアウトと、それは、変わり 私は、閉じ括弧は、閉じ 括弧、セミコロン。 そして、私はもう一つのことをしなければならない。 それはstring.hで呼ばれるファイルにだ strlen関数が宣言されている。 だから私は、その関数を使用したい場合は、 私は、コンパイラに指示する必要があります それを使用することを期待しています。 今私は先に行くとしてみましょう プログラムは、文字列と呼ばれる。 ドット、スラッシュ、文字列を指定します。 私の文字列を教えてください。 私が先に行くし、それを入力します。 こんにちは、すべて大文字で入力します。 そして今、私はこれを印刷してきた気付く 他の後に1文字。 だからここに新しいディテールは、その文字列である 一日の終わりに、することができ その個々の方法によってアクセス 広場を導入することにより、文字 ブラケット表記。 そして、それはだ文字列の下にあるため フードは確かのシーケンスです 文字。 しかし、それらについてのきちんとしたのは、ある コンピュータのRAMに - それが何であれMac、Windowsパソコン、 - 彼らはしている 文字通り背中合わせにバックアップする - H-E-L-L-O - 個々で、隣接 メモリ内のバイト。 ですから、八などで取得したい場合 このループであろうバイト、 ブラケットゼロ、ブラケット1、ブラケット2、 ブラケット3、ブラケット4 - それは5までインデックスさゼロだ - それは、H-E-L-L-O出力します 独自のライン上。 さて、ティーザーとして、私はあなたにお見せしましょう あなたが最終的になるだろう物事の種類 少なくとも、理解することができ いくつかの近くで探して。 一つは、我々は、今日の内に何が含まれている あなたが好きな場合の例は、実際には 非常に最初のjailbreaksの一つ iPhoneのために。 脱獄は、携帯電話をクラッキング意味 だから、実際にそれを使用することができ 異なるキャリアまたはインストール 独自のソフトウェア。 そして、あなたは、これが完全に見えることがわかります 不可解な、最も可能性が高い。 しかし、これを見てください。 iPhoneが明らかに割れた forループは、もし条件、他 状態、機能の束 我々は見ていませんでした。 そして再び、あなたはではないでしょう おそらく一見 これが動作している方法を理解しています。 しかし、我々は一種の取ることすべて 私たちの現代の生活の中で当然の 実際に、いくつかに対しても低下する傾向にある これらのファンダメンタルズの私たちはしてきた を見て。 私が先に行くと1を開いてみましょう 他のプログラム、holloway.c。 だから、これは、あまりにも、何かはあなたです 本当に知っているべきではありません。 でも、スタッフのどれか私ができた おそらく見ることによって、これを見つけ出す それは、これは誰かのコードだったので、 それは何に提出されました 歴史的に難読化されたCとして知られている あなたがプログラムを書くコンテスト、 コンパイルして実行されますが、そう気である 不可解な人間の何が何を理解することはできません までそれを行うために起こっている 彼らは実際にそれを実行してください。 だから、確かに、この見れば コー​​ドは、私がスイッチを参照してください。 私はメインを参照してください。 私は、これらの角括弧が示唆見 配列のいくつかの種類。 誰もが推測したくないのか 実際にこのプログラム 私はホロウェイを実行した場合でしょうか? はい。 OK。 よくやった。 だから、唯一のスタッフと私は理解することはできません これらの事は何かを。 そして今、最後に、私が先に行かせて そしてもう一つのプログラムを開く。 この1 - 再び、我々は、ソースコードをあげる オンラインで利用できる - これ一つだけだ を見て、かなりの種類。 彼らがしたすべては、ヒットした スペースバーかなり。 しかし、これは本当のコードです。 あなたはかなり、場合だと思うのであれば、私たち 実際には、プロンプトでこれを実行する 最終的にあなたはどのように我々がわかります このようなことを行う可能性があります。 だから私たちはそのノートであなたを残しておきます そして水曜日にあなたを参照してください。 [音楽再生] SPEAKER 2:次のCS50で、 のTFは反乱を上演。 SPEAKER 3:そこに彼がいます。 やっちまえ! [音楽再生]