>> [音楽再生]
>> 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：そこに彼がいます。
やっちまえ！
>> [音楽再生]