[音楽再生] DAVID J.マラン:すべての権利。 これはCS50であり、この 週2の開始である。 だから、私たちはバグで今日から始めましょう。 バグは、もちろん、aは プログラムの誤り、 そしてあなたは非常に買ってあげる この概念に精通している あなたがプログラムされたことがない場合は、 前。 PSET0そして今PSET1。 しかし、ここで何かを考えてみましょう 最初は少しシンプル。 ここで、このプログラムはそのI 事前に一緒に投げた、 そして私は、これは印刷する必要があると主張 printfのを使用して画面上の10星、 それは、明らかに何らかの方法でバギーだ。 

その仕様を考えると、その それは10星を印刷する必要があり、 それは何を、明らかにしません バグは、あなたが主張するだろうか? うん? だから、1のエラーではオフですが、 そしてあなたはそのことで何を意味するのですか? [OK]をクリックします。 優秀。 そこで、指定した 私のためにゼロの値を開始し、 私たちは、10のnの値を指定した 私たちは以下に等しいを使用しました。 このことの理由は2である 文字だけではなく、一つのシンボル、 数学の本と同様に、 あなたが持っていないということです 表現する手段 1文字に相当。 

だから、より少ないことを意味するが、 あなたはゼロからカウントを開始した場合、 しかし、あなたはすべての道を数える 10に至るまでと同じ、 あなたがしようとして当然のことだ 全部で11ものを数える。 だからあなたは11つ星を印刷しようとしている。 それでは、このための修正でしょうか? うん? 

だから未満に調整 または単に未満であると等しく、 そしておそらく、私が主張する、あります あまりにも別のソリューション、。 他には何をするのでしょうか? うん? 

だから、これを1に等しい開始し、 以下に等しいままにしておきます。 そして、率直に言って、私は主張だろう その、典型的な人間のために、 これはおそらく、より簡単です。 1からカウントを開始し、 10をカウントアップ。 基本的に何を意味いたします。 

しかし、現実はである プログラミング、私たちが見てきたように、 コンピュータ科学者やプログラマー 一般的にはゼロからカウントを開始します。 だからそれは、かつていいのよ あなたはそれに慣れる。 あなたの条件は一般的になります 未満のようなものになる。 だから、単に論理的 エラー私たちが今できること 修正し、最終的には再コンパイル このわずか10を得る。 

さてどのようにここでは、このバグはどうですか? ここで、再び、私は私が持っていると主張している 10 stars--を印刷することを目標 1行に1つずつ、今回が、それはしません。 私たちは何を提案する前に、 修正は、これを何、である 私がコンパイルした場合、視覚的に印刷する あなたがこのプログラムを実行すると思いますか? うん? 

スター。 上のだからすべての星 同じ行は、私が聞いたものである、 した後、改行文字。 それでは、それを試してみましょう。 だからバギー-1は、入射させる、 と私は打ち鳴らすコマンドを参照してください 私たちは前回の話という。 ./buggy-1、そして実際に私はすべての10星を見る 私が主張するにもかかわらず、同じ行に 私の仕様では単にコメント頂上 私は1つあたりを行うことを意図したコード ライン。 しかし、これは右に見えます。 

私はのように今、15行目に見える スターを印刷し、その後、16行目 私は印刷だように見えます 改行文字、 彼らは両方ともそのように字下げしています 私ははっきりループの内側にね。 だから私は、新しい星を、やってはいけません ライン、スター、新ライン、スター、新ライン? はい? 

のような言語とは異なり、うん Pythonで、あなたが精通している場合には、 インデントにはありません コンピュータには関係。 それは、人間だけに問題になります。 だからここのに対し、私はラインを発明しました 15と美しく見える16--、 しかしコンピュータは気にしません。 コンピュータが気に 実際に中括弧を持つ これらのコード行の周り。 

ように、それだけのようclear--だ Scratch--コードの2行、その 実行する必要があります。 これらの黄色のスクラッチパズルのような ピース何度も何度も何度も。 

私があればだから今、これを再実行 program-- ./buggy-2  - フム。 私は今、エラーが発生している。 私は何をするのを忘れたのか? ええ、私はそれをコンパイルしませんでした。 だからバギー-2にする。 そのようなファイル私はしませんでしたので、 実際に第二のバージョンをコンパイル。 だから今面白い 宣言されていないvariable--ません2。 私たちは、1をやっている。 今バギー-1-- ./buggy-1--を作成し、 それらのそれぞれが同一線上にある。 

今は例外があります 私のこの想定主張 というあなたは、これらの中括弧が必要です。 ときにあなたがしている場合は、それが実際にOK--です セクションまたはtextbooks--に気づいた 中括弧を省略するには? うん? 

その通り。 一つだけがあるとき そのあなたのコード行 に関連付ける 私たちの最初の例のようにループ。 それは完全に正当なものである 中括弧を省略すること 単に利便性の一種である コンパイラからあなたに。 うん? 良い質問。 それは風の誤差と考えられるであろう? 私たちは、CS50のようpromote--う スタイルガイド、のURL その常にpset1--にあり 中括弧を使用しています。 確かにあなたがプログラミングに新しいしている場合。 現実は私たちがわからないです あなたを禁止しようとして これらの便利さをしているから。 しかし、あなたはただ取得している場合は、 物事のスイングに、 絶対にただいつもカーリーを使用 あなたはそれのこつを得るまで、ブレース。 良い質問。 

かしこまりました。 だから、次にバグがあった。 かなり単純なものでは少なくとも。 それなのにあなたはこれを考えるかもしれない 右、かなり初歩的なのですか? これは最初の週のようなものです 言語を見ての のような、その中にあなたのバグを参照してください。 しかし、現実には、これらは、 実際に代表 いくつかの非常に恐ろしい問題に それは現実の世界で発生する可能性があります。 

だから、あなたのいくつかは思い出すかもしれません あなたはハイテクのニュースに従うならば、 または多分キャッチ 月にこれの風 Appleは持っていたこの一年の 、両方のiOSでのミスを少し​​行っ オペレーティングシステム上 また、それらの電話、 Mac OSでは、オペレーティングシステム 自分のデスクトップやラップトップ上で。 そして、あなたはこのような見出しを見た。 その後、アップル このバグを修正することを約束し、 非常に迅速に、iOSの中でそれを修正しました しかし、最終的には、Mac OSでそれを固定 同様に。 

今、これらの見出しのいずれも単独で本当に 根本的な問題が何であったか明らかにし、 しかしバグが最終的にまで減少した SSL、セキュア·ソケット·レイヤーのバグ。 そして、長い話を短く、 これはソフトウェアである その私たちのブラウザや他の ソフトウェアは何をするために使用? 

私は、SSLであると言った場合には 関与、たび 、HTTPSで始まるURLにアクセスしてください その後何SSLはに関連しているのでしょうか? 暗号化。 だから私たちはについて話します 今後数日間は、この。 暗号化、の芸術 情報をスクランブル。 

しかし、長い話を短く、アップル いつか前にミスを犯していた SSLの彼らの実装では、 最終的に実現するソフトウェア HTTPSまたは最大のようなURL あまりにもそこに接続が。 の結果はということで、あなたの 接続は、潜在的可能性 インターセプトされる。 そして、あなたの接続があった 必ずしも暗号化されていません あなたは、間にいくつかの悪いやつがあったら あなたと送信先のウェブサイト これを利用する方法を知っていた。 

今、Appleは最終的に掲示 このための修正、最後に、 と説明 その修正のこれだった。 セキュアトランスポートは、検証に失敗しました。 接続の真偽。 問題が取り上げられた 欠落した検証ステップを復元する。 

だから、これは非常に手の波状説明です 単に私たちはめちゃくちゃと言っている。 文字通り1あり バギーたコード行 彼らのSSLの実装、および中 あなたがオンラインに行くと、この検索した場合 あなたが実際に見つけることができます 元のソースコード。 例えば、これはのスクリーンショットである かなり大規模なファイルの一部だけ、 しかし、これは明らかに呼び出された関数である SSLは、署名サーバの主要な交換を検証します。 そしてそれはの束を取り 引数と入力。 そして、私たちは集中するつもりはない そこに特徴点にあまりにも多く、 しかし、あなたは内のコードに焦点を当てた場合 してみましょうfunction--その一番上の その上でズームイン。 あなたは既に疑うかもしれません どのようなエラーがかもしれない あなたは見当がつかない場合でもなる 最終的にはあなたが見ているものを。 異常の種類があります ここで、これは何ですか? 

ええ、私は本当に好きではない 2後藤の​​外観は失敗します。 率直に言って、私は本当に知らないこと後藤 手段は失敗するが、それらのうちの2つを有する 背中合わせに。 それはちょうど一種の私をこすり 知的に間違った方法、 私たちは上ズームイン確かにあれば ただ、それらの行は、これはCである。 

だから、Appleのコードの多く 自体は、C言語で書かれている、 この明らかに 本当にequivalent--です ていないことをきれいに字下げする バージョンが、あなたは事実を認識している場合 ない中括弧、ありませんことを何 アップルは本当にようなコードだった書いた このように。 だから私は、ズームアウトしたし、ちょうど私 意味でのインデントを修正 何中括弧がない場合は、そのこと 第二後藤はそれが黄色での失敗 何に関係なく実行しようとしている。 それに関連付けられていないだ その上if条件。 

そうであっても、もう一度、あなたがしなければなく、かなり これは、おそらく可能性を理解する これらの各ことを知って、やっている これらの行のそれぞれをconditions-- 非常に重要なステップです チェックの過程で あなたのデータは、実際には暗号化されている場合。 したがって、これらのいずれかをスキップする 手順ではなく、最高のアイデア。 

しかし、私たちはこれを持っているので、 第二後藤、黄色で失敗する そしてなぜなら、私たちに一度 審美的に、一種の それを左に移動します 論理的にどのような瞬間になる これは、ラインのために意味があるの その第二の後藤以下のコードの あなたが思うだろうが失敗? それは、常にスキップさになるだろう。 だからgotoが、一般的には眉をひそめている 理由のために私たちは本当にに行くことはありません、 実際CS50年にはない傾向がある この文後藤を教えるために、 しかし、あなたは後藤と考えることができます 意味行くジャンプとして失敗 コー​​ドの他の部分へ。 

言い換えれば飛び越える 完全にこの最後の行、 ので、この愚かな結果 ただ単純なミスだった おそらく誰かの結果 コピーとあまりにも1を貼り付ける 何度も全体のことであった iOSとMac OSのセキュリティ 盗聴に対して脆弱だった かなりの時間のために悪者による。 アップルまでは最終的にこれを修正しました。 

今、あなたのいくつかは実際にある場合 iOSのまたはMac OSの古いバージョンを実行している、 あなたはgotofail.comに行くことができている 誰かが設定されていることをウェブサイトがある 本質的に決定する プログラムで お使いのコンピュータは依然として脆弱であるか。 そして、率直に言って、それであれば、 それはおそらく良いアイデアです お使いの携帯電話を更新するか、 この時点で、お使いのMac。 しかし、そこにどれだけわずか証 これらの下位レベルの鑑賞 かなり詳細と シンプルなアイデアが本当に缶 意思決定につながる 問題その このcase--にaffected-- 何百万人もの人。 

今行政上の言葉。 セクションは、今度の日曜日に開始されます。 次の方法でメールが届きます セクションの週末、ポイントで 切除プロセス あなたがしている場合は開始されます あなたが今持って実現 いくつかの新しい競合しています。 だから、これは毎年発生し、私たち 来る日で対応します。 

オフィスhours--キープください ここで、このスケジュールに目。 今週の少し変更し、 特に開始時間 と場所は、とてもご相談ください その営業時間に向かう前に、 次の4泊のいずれか。 そして今、評価に関する言葉、 特に問題に飛び込むように 1以降に設定します。 

仕様ではそう、 これらは、一般に に沿って、軸 私たちはあなたの仕事を評価します。 適用範囲は何を意味し ある程度のコードを実装 特徴は、必要 当社指定による。 換言すれば、どのくらいの 点セットを使用すると、オフにかましました。 あなたはそれの3分の1を実行しましたか、 その半分、それを100%。 それが正しいではないとしても、 あなたはどのくらいを試みたのですか? だからレベルを取り込み 努力と金額の これまであなたがオフビット 問題セットの問題。 

この1 Correctness--へ どの程度、あなたのコードである 私たちと一致して 仕様とバグ無料。 だから、正しく動作しますか? 私たちはそれにいくつかの入力を与えると、それはありません 私たちが期待する出力を与えるか? Design--は今これが最初である 特に質的なもの、 または人間の判断を必要とするもの。 私たちはスタッフを持っている理由そして実際、これは 非常に多くの指導の仲間とコース アシスタント。 どの程度あなたです コー​​ドがよく書かれて? 

そして再び、これは非常にある 定性的評価 それが上のために動作します 今後数週間で双方向に。 そのだからではない取得するとき 数字だけのスコアだけでなく、 書かれたスコア、または型指定されたフィードバック、 または英語の言葉で意見を書か。 つまり、私たちはあなたを駆動するために使用します何 実際に、より良いコードを書くに向けて。 そして、講義とセクションで、私たちは試してみます できるだけ頻繁に私達がcan--としてゆうパック指すように どのようなプログラムを作るだけでなく、 正しいと機能的に優れた、 だけでなく、うまく設計された。 それができる最も効率的な、または それができるも、最も美しい。 

どのスタイルに私たちをリードしています。 スタイルは、最終的にはある 美的判断。 あなたは良い選択しましたか あなたの変数の名前? あなたが適切にあなたのコードをインデントしたことがありますか? それはよく見るので、ん、 それは別の人間のために簡単です。 あなたのそれぞれを読み取る その正しさ。 

さて、一般的にシラバスあたり、私たちは得点 5点満点でこれらの事。 そして、私が家にポイントをハンマーしましょう 3という確かに良いです。 皆さんを非常に迅速に行う 算術を始める。 彼らは外に3を取得すると いくつかのpset用正しさの5つの 彼らはいまいましいと思う、私は60%に行く 本質的にDまたはEである。 

それは方法ではない私たち これらの数を考える。 3は確かに良好であり、私たち 一般的に先頭に期待 言葉のあなたが取得している場合は、ということです 多分three's--の束カップル フェア、fours--のカップルや カップル補数、fours--のカップル それは開始するには良い場所だ。 そして、私たちは限り見るように 時間をかけて上向きの軌道、 あなたが特に良い場所にいる。 

私たちが使用して式 重量のものは、本質的である シラバスあたりこの、 これだけで、私たちことを意味します 正確さに多くの重量を与える。 それは非常に多くの場合、正当なので それは、ほとんどの時間がかかります。 今私を信頼します。 あなたは、少なくともfind--ます そのお1 pset--中 あなたの時間の90%を費やす 問題の10%に取り組んで。 

作品の、すべての並べ替え 1つまたは2つのバグを除いて、 それらはバグがあること 夜遅くあなたを保つ。 業者は、ものです 一種のあなたを逃れる。 しかし、それで寝た後、 または営業時間に出席 または、オンラインの質問がされている尋ねる あなたがその100%の目標に到達するとき、 それはなぜ体重だ ほとんどの正しさ。 少し少なめに設計し、 それより少し少なめのスタイル。 しかしmind--スタイルを保つ おそらく最も簡単です かみ切るために、これらの スタイルガイドに従って。 

そして今、より深刻 学術正直に注意してください。 CS50は不幸な区別を持って 広告ボードの最大の生産国であること ほぼ毎年、歴史的に例。 学生がでカンニングするためではありません CS50もはやので、任意の他のクラスよりも、 しかしので仕事の性質上、 それは電子だという事実は、 私たちはそれを見ているという事実、および 実は私たちはコンピュータ科学者であり、 私たちは、残念ながらと言うことができます それを検出するのに非常に良い。 

だから、これは実質ベースで何を意味するのでしょうか? それだから、シラバスあたり、 もちろんの哲学 本当に合理的であると煮詰めるん。 この行の間があります 自分で自分の仕事をして との少しを取得 友人から合理的な援助、 そしてあからさまなあなたのためにその仕事をしている 友人、または彼または彼女あなたのコードを送信 彼または彼女が単にできるように 右のそれを取るか、借りる。 そして、それは線を越える 私たちは、クラスで描かれていること。 

、シラバスを参照してください 最終的にはライン用 私たちは、合理的なものとして描くこと 不合理な行動、 それは本当に沸騰を行います 本質にダウン あなたの仕事はする必要の 最終的には自分自身である。 今、そうは言って、 ヒューリスティックが存在する。 あなたがimagine--可能性があるためため、 営業時間とビジュアルから そして、私たちがした動画は こうしてfar-- CS50示す 確かに協力的なようであることを意味する として協同組合や社会的など 可能な限り。 コラボレーティブとして、それは厳しいからである。 

しかし、これは言って、ヒューリスティック、 あなたはシラバスに表示されますように、 あなたには、いくつかの問題を抱えているときということです。 あなたのコード内のいくつかのバグを持っていることを それはあなたのために合理的で、解決することはできません 他の誰かにあなたのコードを表示します。 でも、クラスの友人、友人 営業時間であなたの隣に座って、 やスタッフの一員。 しかし、彼らはあなたに自分のコードが表示されない場合があります。 

換言すれば、 あなたのquestion--に答える 私はhelp--ああ、ここに私のコードですされていませんが必要です。 これを見てくださいと 何をでしょう、そこから推測する。 さて、もちろん、あります 道を明確にゲームに 私はあなたを紹介することにより、このシステム を持ってご質問の前に私のコード。 あなたは私に私のあなたのコードを表示 を持ってご質問の前に。 しかし、再びシラバスを参照してください このラインがどこにあるの細かい詳細。 

ちょうど今絵を描くようにして として透過的に可能な限り共有する 私たちは、近年にある場合に、 これは、広告ボードケースの数です。 そのCS50は終わってきた 過去7年間。 14例、この最新の秋と。 関連する学生の面では、 それは20いくつかの奇妙な学生だった この過去の秋。 33のピークがあった 数年前の学生。 人の多くは、残念ながらあり もはやここキャンパスで。 

の割合として関与学生 クラスは、歴史的に0%の範囲であっています 言うことだけである5.3%に これは毎年の課題です。 そして、その端部に向かって、どのような 私たちは何をしたいかを伝えるです 私たちはFYI--で比較dd--こと 人の学生に公平性 それに応じて行を以下の通りです。 私たちは、現在のすべての比較を行う 過去のすべてのミッションに対して提出 過去何年もの。 

私たちは、周りにGoogleにすぎ方法を知っている とコードのリポジトリを検索する オンラインディスカッションフォーラム オンラインオンライン、求人サイト。 学生はそれを見つけることができれば、私たちは確かにすることができます それは同じくらい私たちは残念そうであるように見つける。 だから、何をシラバスに表示されます しかし、この後悔節がある。 私は確かにすることができます 感謝し、私たちは皆持って スタッフは次のようにコースを行った 時間をかけてこのか、この1自体、 確かにそれは時にどのようなものか知っている 人生はあなたが持って邪魔になる いくつかの夜遅くdeadline-- このクラスだけでなく、 しかし、あなたはanother--いるとき 完全に疲れ、ストレスがたまって、 法外な番号を持っている 他のことをすることができません。 あなたは、どこかの時点で行います 確かに悪い、おそらく晩年 夜の決定。 

シラバスあたりだから、 この句があり、 作るようであれば72時間以内 いくつかの貧弱な決定は、あなたはそれまで所有している 私に手を差し伸べ、 もちろんの頭の一つ 私たちは会話を持つことになります。 私たちは、物事を処理します 内部的に期待して それはより多くなることを 瞬間や人生の教訓を教え、 ではない何か 特に大幅な波及効果 あなたはここでこれらのチャートに表示されることがありますように。 

だから、非常に深刻な口調だ。 私たちは、わずか数のために一時停止してみましょう 秒緊張を破壊する。 

[音楽再生] 

DAVID J.マラン:すべての権利、 ので、どのようにセグエのためにということでした? 今日の主なトピックへ。 そのうちの第一は、抽象化したものです。 これのもう一つは、になるだろう データの表現、率直に どのように私たちができるというのが本当に乾燥方法である 問題を解決すると思ってついて行く 問題を解決するでしょうか? だから、スクラッチで見てきた、あなたがした C言語でPSET1におそらくすでに見 あなただけでなく、使用することができます printfのような関数、 そのほかの人にある 過去数年は、あなたのために書いた。 また、独自の関数を書くことができます。 

そして、あなたは持っていない可能性があっても、 PSET1に率直にC言語でこれを行って、 あなたは本当にあなたを記述する必要はありません problem--ため独自の関数 で、おそらく困難ながら 最初に表示されますglance-- 最終的に解決することができる コー​​ドのすべてのその多くはない行。 しかし、それは用語で、言って 独自の関数を書いて、 与えるCがないことを認識 あなたはこの機能。 

私は、今日のソースコードに行くつもりです これは、すでにオンラインで入手できます と私は先にオープンに行くつもりです 機能0.Cと呼ばれるプログラムまで、 および機能はゼロ 私たちはいくつかのことが表示されます。 最初の行では、18を経て 23は私の主な機能である。 そして今、私たちは読み始めていること 私たちはその場で書いていないコードで、 その代わりに、私は事前に書いた または問題では、設定されていること 持つ受け取る可能性があります 予め書き込まれて。 開始するには良い方法 誰か他の人のコードを読む 主な機能を探している。 どこでそのエントリを把握 ポイントは、プログラムを実行する場合、 、そこから論理的にそれに従ってください。 

したがって、このプログラムは、明らかにプリント あなたの名前はコロンが続く。 私たちは、その後のGetStringを使用 CS50ライブラリから 文字列、または語句を取得する キーボードでのユーザから。 そして、これがあります 事here-- PrintNameに。 

今PrintNameにはありません C.付属しています機能 これは、標準的なio.h.ではありません それはCS50.h.ではありません これは、同じファイル内ではなくです。 私は下にスクロールした場合に注意してください bit--線25 27--へ それは、コメントだけのかなりの方法です 星やスラッシュを使用してコード。 これは複数行である コメント、これはただである の青の私の記述 この関数は何をするか。 

〜31株中28ため、 私は超簡単な関数を書きました 名前がPrintNameにある。 それはどのように多く取り 引数はあなたが言うでしょうか? したがって、1つargument--つがありますので、 かっこ内の引数リストされている。 の型はStringです。 どちらがPrintNameに言うことです このブラックボックスのようなものです 取りまたは関数 文字列を入力として。 

その文字列の名前 便利な名前になります。 じゃない、ではないN、しかし名前。 だからPrintNameには何をするのでしょうか? それは素敵な簡単です。 ただのためのコードを1行として printfのが、どうやらそれを プリントアウト "こんにちは、"そのようにしてそう。 どこでそのようにしてそう 引数から来ている。 

さて、これはここに巨大な技術革新ではありません。 本当に、私はできたプログラムを撮影した コー​​ドを1行で書かれている ここにこれを置くことによって、 とのものに変更すること それはいくつかの6,7かそこらを伴う ダウンここにコードの行のすべての方法。 

しかし、それは練習だ 抽象化として知られている原理。 新しい内部のカプセル化の種類 名前を持つ関数、より良い 文字通りまだその名前 それが何を言う。 私はそれがありませんprintf--意味 特に記述。 私が作成したい場合 パズルピース、またはIの場合 関数を作成したい それが誰かの名前を出力し、 これを行うための美しさ 私が実際にできることです その関数に名前を付けて それはそれが何をするかを説明します。 

今では、入力を取り込み、その 私は、任意の名前と呼んでいる、 それはあまりにも素晴らしく記述的である 代わりに、もう少しという S.とのような一般的 ボイド、今の、ちょうど手段 この関数はないこと 何も私をバック渡す。 それは、ことのGetStringのようではありません 文字通りの文字列を私に戻って手 私たちは、紙の破片で行ったように 先週あなたのクラスメートと、 むしろそれは単に副作用を有している。 これは、画面に何かを出力します。 

一日の終わりに、もしそうであれば、私 作るか、機能0、./function-0、 私たちは、それが私の名前を尋ねていることがわかります。 私は私の名前から型をデビッドを入力し、それ。 私はロブで再びそれを行う場合は、 それは言うために起こっている「こんにちは、ロブを。 " だからシンプルなアイデアが、おそらく この精神から外挿する あなたのプログラムが得るようにすること もう少し複雑、 あなたがのチャンクを書きたい コー​​ドとコールcode--呼び出し いくつかの記述によってそのcode-- PrintNameにのような名前、 Cは、私たちに、この機能を与えるん。 

ここでは別の単純な例です。 例えば、私は開いている場合 本日からファイルをreturn.cと呼ばれる、 私がここで何をやったかがわかります。 この主な機能のほとんどは、printfのです。 私が最初に任意に初期化する 数2にxを呼ばれる変数。 私はその後、xが、今は「プリントアウト %iは「xの値を渡す。 だから、僕はそれが何であるか言っている。 

今、私はちょうど大胆によ printfのと主張。 私は、その値xを乗する、と私は今 関数を呼び出すことにより、このようにすること と呼ばれる立方体の受け渡し 引数として、xの、 して出力を保存 変数自体では、x。 だから私は、xの値をつかうんだ。 私はオーバーライドよ 何とxの値 呼び出しの結果 このキューブ関数である。 そして、私はいくつかをプリントアウト ふわふわのものは、ここで私がやったと言って。 

それではキューブは何ですか? 基本的に何に注意してください ここでは異なる。 私は機能を与えてくれた 以前と名前。 私は、引数に名前を変更している。 この時間は、それがn個、名前の代わりに呼ばれて、 私は私が欲しいもの、それを呼び出すことができます。 しかし、これは異なっている。 左のこの事。 以前は、どのようなキーワードがでしたか? ボーイズ。 今では明らかにint型です。 

だから奪うおそらく何ですか? ソートの空隙が意味するのに対し 無、それはそうであった。 PrintNameには何も返されません。 それは何かをしたが、 それは私を渡しませんでした 私は置くことができるもの 等号の左辺 私は22行目でここにやったように。 

だから私は、ライン30上に言えば、 何は、おそらく暗示していることだ 私のために何をするかキューブはどうですか? うん? これは、整数を返します。 だから、のために、私を手 紙のインスタンス、一片 その上に、それは答えを書いています。 2乗または3乗、または4 どんなcubed--私は、渡された そしてどのように私はこれを実装しましたか? まあ、ただのn倍のn倍のn 私は値を3乗する方法である。 だからもう一度、超簡単 アイデアが実証 今、私たちは、関数を記述できるか それは実際に私達に戻っていた 興味があるかもしれない値。 

それでは最後の例を見てみましょう ここでは関数1と呼ばれる。 この例では、開始 より魅力的な取得します。 これは、関数のいずれかでそう program--予告最終的に GetPositiveIntという関数を呼び出します。 GetPositiveIntではありません CS50ライブラリ内の関数、 私たちは、私たちが決めた それが存在したいと思います。 

だから、私たちはそれ以降のファイルに下にスクロールすると、 私が実装を歩き回った様子がわかり 正の整数を取得し、私 それがより魅力的だと言う これは、まともなので、 コー​​ドの行数。 それはちょうど愚かではありません 小さなおもちゃのプログラム。 これは、実際にいくつかのエラーチェックを持っている より有益な何かをしている。 

だから、チュートリアルを見ていないてしまった場合 私たちはPSET1に埋め込まれているビデオ、 これは一種であることを知っている その精神においては似たCループ、 スクラッチができることの種類の。 そして、これを行うのですかと言います。 これを印刷してください。 その後、先に行くとN--取得 int型を取得し、n個に格納し、 そして何度も何度もこれをやり続けると 再び限り、nが1未満である。 

だから、nは1未満になるだろう 人間が協力しない場合のみ。 彼または彼女のように入力された場合 0または-1または-50において、 このループは維持しようとしている 何度も何度も実行する。 そして最終的に、I気付く 単に値を返す。 だから今、私たちは、機能を持っている それは素晴らしいしてきただろう CS50は内実装した場合 あなたのためのCS50.hとCS50.c、 が、ここではできるようになりまし この自分自身を実装します。 

しかし、いくつかの重要な詳細に関する2つのコメント。 私はint型を宣言しなかった理由選ぶ -  nは、ライン29上で、あなたは思いますか だけではなく行うための ここで、これは、これは、 とより一致 私たちは先週やった? うん? よくお考え。 だから、私たちはそれを置くした場合 ここで、私たちと同じようにだ 何度も何度もそれを宣言しておく。 それ自体はつまり 問題ではない、それ自体、 私たちが唯一の必要があるため 一度、値 私たちはとにかく新しいものを取得するつもりだ。 しかし、よく考えて。 うん? 

閉じる。 だから私は、n上で宣言されたので ライン29のループの外に、 それは全体でアクセス可能です この全体の機能。 なぜなら、他の機能はありません nは、これらの巻き毛の内部に残っている ここにブレース。 必ずSo--。 

その通り。 だから、これはさらにポイントまでです。 私たちは代わりに宣言された場合 nは右ここにライン32上の、 推測ので、それは問題だ 他にどこ私はそれにアクセスする必要がありますか? ライン34、およびオン 親指の簡単なルールがある あなただけの変数を使用することができます 最も最近の中括弧の内側 これであなたはそれを宣言した。 

残念ながら、34行 一行は、遅すぎる 私はすでに閉じられてきたので、 ライン33上の中かっこ すなわち、に対応 ライン30上の中カッコ。 そして、これは言っての方法です この変数intは、スコープされていることを、 これだけ内側に、話す これらの中括弧の。 それはちょうどそれらの外側には存在しません。 

だから確かに、私はこれを行う場合は、 間違って、私はコードを保存しましょう それが間違って書かれis--として。 私が先に行くと確認してみましょう 機能1、およびnotice--エラー。 未宣言の識別子nの利用 右ここでライン35、上。 そして、私たちは上にスクロールした場合 さらに、別の1。 未申告の使用 ライン34上の識別子nを。 

だから、コンパイラ、クラング、 ただそれに気づいていることをされている にもかかわらず、存在しません 明らかにそれが視覚的にあります。 だから、簡単な修正ではそこに宣言されている。 

今、私はにスクロールしてみましょう ファイルの先頭。 何としてあなたに飛び出す 少し異なっている スタッフから私たちは、先週見? 私だけではなく、名前を持っているんだけでなく、 私は、いくつかの鋭いがトップアップが含まれている 私は私は何かを持っている プロトタイプを呼び出す。 今ではと非常に類似して見えるもの 私たちは27行に先ほど見ました。 

それでは、異なるから推測しましょう エラーメッセージは、なぜ私はこれをやった。 私は先に行ってみようと そこにこれらの行を削除してください。 そして、私たちは、プロトタイプについて何も知らない。 このファイルをリメイク。 機能1を加えます。 そして今、いまいましい、4のエラー。 まずは1までスクロールしてみましょう。 

関数の暗黙的な宣言 正の整数を取得し、C99には無効です。 C99はちょうど1999年を意味し、 言語のバージョン 私たちが実際に使用しているものは、C、。 だから、これは何を意味するのでしょうか? さてC--、より具体的には、C compilers--はかなりダムプログラムです。 彼らはあなたがしたか知っている 彼らに言った、それはだ 先週から、実際のテーマ。 

問題があれば私は行くことです ここに名前を実装について、 と私は呼び出された関数を呼び出す 20行目でここにGetPositiveInt その機能は、技術的にはしません コンパイラはライン27を見るまで存在しています。 残念ながら、コンパイラがある トップ、下、右、左をやって、 それが見ていないので、そのように GetPositiveIntの実施、 それはあなたがしようとして見ている ここでそれを使用するには、 それだけで叫ぶbail--になるだろう エラーのあるあなたは、おそらくmessage-- 不可解ではなく、実際に ファイルをコンパイルします。 

だから、いわゆるプロトタイプアップ ここで明らかに冗長である。 文字通り、私はここでダウンしたと私はコピーされた これを貼り付けた、と私はここでそれを置く。 ボイドがより適切であるように、私たちはよ 文字通りコピーしてこの時間を貼り付けます。 私は文字通りコピーし、それを貼り付けた。 本当にただパン粉など。 

コンパイラにはほとんど手掛かり。 私はこれが何をするか分からない まだ、私はあなたに約束しています それは最終的に存在すること。 これがline--だからこそです セミコロンで終わる16--ライン。 これは、設計上冗長である。 はい? 

あなたはあなたのライブラリをリンクしていない場合 ああ、良い質問をthe--する。 シャープは、ヘッダファイルのインクルードが含まれています。 be--する必要がほとんどべき 常に一番上にあること 用similar--用のファイルの まったく同じ理由で、はい。 規格であるため io.hは文字通り行です このように、という言葉のprintfで、かつ その引数と戻り値の型を持つ。 だから鋭いを行うことによって含まれる ここで、あなたは、文字通り何をやっている 内容をコピーして貼り付けている 誰か他の人のトップを書きました。 これによりまでにコードをcluing それらの関数が存在しないという事実。 うん? 

もちろんです。 だから、非常に巧妙な、正しい 解決策は次のようになり、あなたは何を知っていますか? 私は知らないものをA 試作品ですが、私は知っている 私はCだけであることを理解していれば ダムと下へrethinks。 さてそれでは、それが何を望んで、それを与えてみましょう。 それを貼り付け、のはそのコードをカットしてみましょう トップ、そして今ダウン以下の主なプッシュ。 これも、問題を解決するだろう。 

しかし、あなたは非常に簡単に思い付くことができ AがBを呼び出す必要がするシナリオ、 多分BはA.これにコールバックします 再帰と呼ばれるものであり、 私たちは戻ってそれに来る。 そしてそれは良いかであってもなくてもよい 事が、あなたは間違いなくできます このソリューションを破る。 

しかも、私はだろう 文体主張、 特にあなたのプログラム これが長いと、この長くなる、 それだけで、超便利です 上部のメイン置くために なぜならそれは、ほとんどのことだ プログラマは気にしようとしている。 そしてそれは少しクリーナーですが、 ほぼ間違いなく、それを道を行うには 私はもともとそれをやった プロトタイプでさえ それが少し見えますが 一見冗長。 うん? 申し訳ありませんが、あなたはそれを大声で言うことができますか? 

あなたはの位置を切り替えると 実装とプロトタイプ? だから、それは良い質問ですね。 もしあれば、このダウンを再宣言 ここで、何が起こるか見てみましょう。 だから私はこのダウンを入れている場合 ここに、あなたが言っている。 あ、ごめん。 大声? でも大きな声。 ああ、良い質問。 それは機能を無効にするか? あなたは、私は、これらすべての年後に、知っている その後、プロトタイプを入れたことがありません。 それでは、関数-1を作るやらせる それをやった。 

[つぶやき] DAVID J.マラン:ああ、待ってください。 私たちはまだトップにすべてを我慢する必要があります。 私がいたらそれでは、ここにこれをやらせる 正しくあなたの質問を理解する。 私には、すべてのものを入れている 主上記の試作品、 しかし、私はプロトタイプを入れている 実装以下に。 

私はものを作るのであれば、私が得ている バックerror--未使用変数n。 ああ、そこ。 ありがとう。 見てみましょう、私たちはこのを取り除く。 つまり、別のバグです それでは、それを無視してみましょう。 本当にすぐにこれをリメイクしてみましょう。 

[OK]を、ので、データの引数ではありません フォーマット文字列で使用される N--ああ、それはあるためです 私はここで、これらに変更されました。 すべての権利、私たちはどのような答えを知っている to--大丈夫だろう、ここに私達は行く。 ああ、ポジティブに感謝。 すべての権利、私はこのコードを修正する after--この特定のバグを無視 これは、それが動作するwas--以来答えです。 

だから、上書きされることはありません 何あなただけやった。 私は、コンパイラを疑う そのような方法で書かれている それはあなたのプロトタイプを無視していること ボディので、いわば、 機能については既に持って 高アップを実現されて。 私は実際に相談しなければならないでしょう コンパイラのマニュアル 他のがあるかどう理解する 含意が、一目見ただけで ちょうどしようと実験することで、 は影響はなさそうです。 良い質問。 

それでは、今押し進める動いてみましょう 離れた副作用からの のような何かをする関数です 視覚的にはprintfを使って、画面に、 が、値を返さない。 とリターンを持つ関数 私たちのような値だけをいくつか見ました。 私たちはすでに、スコープのこの概念を見た 私たちは何度も何度も、これを表示されます。 しかし、今のために、再び、 経験則を使用 変数は、使用することができること 最近開いた内部 そして、私たちのように中括弧を閉じた その特定の例で見た。 

そして、あなたは、指摘したように ability--があります これらの問題のいくつかを解決することができ グローバル変数を置くことによって、 ファイルの最上部で。 しかし、ほとんどすべての場合において 私たちはその上に難色を示すだろう、 実際にさえ行かない 今のところ、その溶液中に。 だから今のために、お持ち帰りはということです 変数は、スコープのこの概念を持っている。 

しかし、今のは、別のを見てみましょう 実際に見ての乾燥方法 いくつかの非常に興味深いで 実装の詳細。 どのように情報を表すことがあります。 そして、私たちはすでにこれを見た クラスの最初の週に。 バイナリを見ると、と 小数の自分を思い出させて。 

しかし、Cが持っていることを先週からリコール 複数の異なるデータ型と房、 しかし最も有用なもの 今のところこれらの可能性があります。 char型、または文字、どうなる 1バイト、または8ビットの合計であると。 そして、それは大きさと言うことだ char型のちょうど1バイトです。 バイトは8ビットであるので、これはあることを意味 私たちはどのように多くの文字を表現することができます。 どのように多くの文字や キーボード上の記号 私たちは1バイトまたは8ビットを持っている場合。 戻っ週ゼロに考えてみてください。 あなたが8ビットを持っている場合は、 どのように多くの合計値 あなたは表すことができます 0と1のパターンは? それよりひとつ選ぶ。 だから、256総よろしければ ゼロからカウントを開始。 だから、8 bits--のでもし持っている場合 、再びここに私たちのバイナリ球根を持っていた 私たちは上の電球を回すことができる 256ユニークなパターンのいずれかでのオフ。 

さて、これは少し問題がある。 英語の場合ほどではないと ロマンス言語が、確かに あなたが紹介したときに、用 インスタンス、アジア言語、どの のようなよりもはるかに多くのシンボルを持っている アルファベットの26文字。 私たちは、実際に必要になる場合があります 1バイトを超える。 そしてありがたいことにある 近年の社会を持ってい 使用する他の基準を採用し 充電あたり1バイトを超える。 

しかし、今C言語で、デフォルトは ちょうど1バイトまたは8ビットである。 整数は、一方、4です バイトは、それ以外の場合は32ビットとして知られている。 どちらが可能な限り最大何を意味し 私たちはint型で表すことができ数 どうやら? 億。 だから、40億与えるか、または取ることです。 2第32回パワーに、私たちの場合 負の数値を負いません ちょうどすべての肯定を使用 数字は、それが40億だ 可能性を与えるか、または取る。 フロートは、一方、異なるタイプである それはまだ多数のC.データ型の、 それは実数です。 小数点を何か。 そして、それはことが判明 Cも4バイトを使用しています 浮動小数点値を表します。 

残念ながら、どのように多くの浮動 ポイント値が世界にありますか? どのように多くの実数がありますか? 無限があります 数、そのことについては 整数の無限の数があります。 だから私たちは一種の既にしている ここに自分の穴を掘る。 これにより明らかにcomputers--中 them--にC言語で書かれたプログラム以上 のみと高く数えることができます 40億与えるか、または取る、 浮動小数点値 唯一明らかにすることができます 精度のある有限量を持っている。 非常に多くの数字の後にのみ 彼らの小数点以下。 

もちろん、もし、なぜなら あなただけの32ビットを有する、 私たちはついて行くつもりだかわからない おそらく本当numbers--を表す パターンの異なるタイプ。 しかし、有限のは確かにありま​​す このようなパターンの数は、 従ってここでも、これは問題がある。 

今、私たちは少し問題を回避することができる。 あなたはフロートを使用しない場合は、 あなたは二重を使用することができます C言語で、これはあなたに8バイトを与える ゼロのやり方より可能なパターンである ともの。 しかし、それは起こっている、これはまだ有限だ あなたがソフトウェアを書く場合には問題があることが グラフィックスのための、または空想のために 数式。 だから、実際にはお勧めします それよりも大きなカウントアップします。 長いlong--愚かnamed-- また、8バイト、または64ビットであり、 これは、intとして2倍の長さ そしてそれは、長い整数値のためです。 

楽しいfact-- intは4バイトであるかの ロングは、一般的にC言語でどのくらいですか? また、4バイトが、 長い長い、8バイトである これは歴史的な理由である。 

しかし、今持ち帰り ただ、そのデータが持っているである だcomputer--で表現される 電気と物理デバイス、 それは一般的に運転している これらの零点とones-- 精度の有限量の。 だから問題は、その後何ですか? 

さて問題があります 整数オーバーフロー。 C言語ではなくだけではなく 一般のコンピュータ。 例えば、この場合 バイトはbit--価値がある これは、すべての8 bit--ある場合 そのうちのナンバーワンである。 これは何番です 私たちが想定した場合に相当 それは、バイナリ内のすべての正の値ですか? 

255、それは256から、ではない ゼロが最も低い数字です。 だから、255が最も高い 1が、問題 私がしたかったとしている この変数をインクリメントすること 合計8ビットを使用している 私はそれをインクリメントしたい場合。 

さて私は追加や否や これらのもののすべてに1、 あなたはおそらくちょうどvisually--想像することができます decimals--用いたものを運ぶような 何かが左に流れるようになるだろう。 そして実際、私は番号を追加した場合 バイナリーで何が起こるか、これに1、 それがゼロに戻るオーバーフローするということです。 

だから、唯一のint型ではないuse--場合、 単一のバイトは整数をカウントする プログラム中、できるだけ早くdefault--による あなたは、250に到達する251、252、253、254、 255-- 0は、255の後に来る おそらく何これはありません ユーザーが期待するようになるだろう。 

さて一方の点の世界を浮遊中、 あなたも同じような問題を抱えている。 最大のnumber--とそんなにはありません が、それはまだ問題です。 しかし、精度の量 あなたが表現することができます。 それでは、この例を見てみましょう ここにも、今日のソースcode--から フロート0.c。 

そして、それはスーパーだ気付く 簡単なプログラムという 明らかにどのような値をプリントアウトする必要があり? これが印刷しようとしている賭け何をすべきか 新しい構文のビットがありますにもかかわらず、 ここに? だから、うまくいけば0.1。 したがって、1つの10分に相当 私は10で割った1をやっているので。 私は答えを格納しています Fと呼ばれる変数に。 この変数は、float型のどちらである 私は提案されたキーワードが存在している。 

私たちは前にこれを見たが、いませんでした これはprintfの中できちんとした方法の一種である 何桁を指定するよう 小数点の後に見てみたい。 だから、この表記はただ意味 そのここにプレースホルダです。 これは、浮動小数点のためだ 値、ああ、ところで、 小数点がでそれを表示 小数点以下1番号。 だから、数だ 有効桁数、 そうしたいかもしれないと、話す。 

だから私が先に行くとやらせる ./float-0、浮動0にする、 どうやら1 10で除した0.0です。 さて、なぜなのでしょうか? 

さて、もう一度、コンピュータが取っている 文字通り私、私は書かれている1 と私は10を書き込まれ、どのような推測を取る これら二つの場合に想定データ型です 値は? int型は、それが技術的にだ 少し違った。 それは、典型的には長いですが、それはだ 最終的には、積分値。 未浮動小数点値。 

この場合ということである int型であり、これはintで、 問題は、コンピュータということです 機能がありません でも、その小数点を格納する。 だから、あなたは1分けない場合 10で整数を使用 と分母の両方に 分母は、答えは0.1である必要があります。 しかしcomputer--理由 これらはintegers--です 0.1で何をすべきか分かっていない。 

だから、はっきりと何をしているのですか? それはちょうど、それを捨てるだ と私は最終的に何を見ている 私はあることを主張したという理由だけで0.0です printfのは私の小数点が表示されます。 しかし、問題はもしあなたということです 整数整数を分割、 あなたは定義によりget--ます の整数をC--。 そして、それは何をするつもりはない 素敵で便利なもの それラウンドまでの様 1上下に最も近い。 それは、切り捨てるために起こっている 小数点以下はすべて。 

だから直感的に、 おそらく修正何ですか? ここで最も簡単な修正は何ですか? うん? その通り。 なぜ私たちは、これらを扱わない 効果的に浮動小数点値 山車やダブルスにしてしまう。 そして今、私が作る行うと山車-0、 または私は山車-1をコンパイルした場合、 と同一である だけで何を提案した。 そして今、私は今、私は私の0.1を取得し、山車-0を実行します。 

さて、これは素晴らしいです。 しかし、今私は何をするつもりです 少し違った。 私は実際に何を見て興味 ボンネットの下に起こって、 そして私はこれを印刷するつもりです アウト28小数点以下の桁。 私は実際に見てみたい 0.1000-- infinite-- その0.1の後に[聞こえない] 27ゼロ。 

まあそれはだかどうかを見てみましょう 私は実際に何を得る。 山車-0、同じファイルを作成します。 ./floats-0。 それでは劇的な答えをズームインしてみましょう。 すべてのこの時間は、あなたが考えてきた 10で割って1は10%、または0.1である。 そうではありません。 少なくともこれまでのように コンピュータの心配。 

[OK]をwhy--さて、それは完全だ 10で割った嘘1は0.1である。 しかし、それはありませんwhy-- 持ち帰り今日。 では、なぜコンピュータは、考えていない 客室内に私たちのすべてとは異なり、 10で割った値1は、その 実際にその狂気値はありますか? どうやら何コンピューターは何ですか? なにそれ? 

それは、それ自体が、オーバーフローではありません。 オーバーフロー時に、典型的には、 あなたが値を包み込む。 これは、不正確、この問題だ 浮動小数点値の あなただけの32を持っている場合、 または多分64ビット。 しかし、無限があるかどうか 本当numbers--数 小数点付き数字 と数字は確かにthereafter-- あなたはそれらのすべてを表すことはできません。 だから、コンピュータが与えている 私達最も近い一致 値には、それを使用して表すことができ 私は実際に必要な値に多くのビット、 これ0.1である。 

残念ながら、あなたの場合 数学をやって起動するか、または フローティングこれらの種類を含む開始 重要なprograms--におけるポイント値 金融ソフトウェア、 軍事software--何でも ここで、認識がある おそらくかなり重要な。 そして、あなたは追加を開始 このような数字、および開始 そのソフトウェアを実行している 本当に大規模な入力を持つ または数時間またはロットのロットについて 年の日またはロットの、 これらの小さな小さなミス 確かに時間をかけてまで追加することができます。 

さて余談として、あなたがしている場合は、これまで スーパーマン3またはオフィススペース見 あなたが思い出すかもしれません どのようにそれらの人が盗んだ 自分のコンピュータからのたくさんのお金 浮動小数点値を用いて と少し足し 余り、うまくいけば、その映画 今より理にかなっています。 これは、彼らが何であったかである その映画の中をほのめかして。 そのほとんどの事実 企業は見ていないだろう 特定の番号の後に 小数点以下の桁、 が、これらは、セントの画分である。 だから、それらを追加を開始 あなたはたくさんのお金を作り始める あなたの銀行口座にある。 だから、オフィススペースを説明だ。 

今、残念ながら越えて そこにオフィススペース、 いくつかの合法的に厄介である そして重大な影響 これらの種類の 設計上の決定の基礎となる、 理由の実際1 私たちは途中でCを使う あなたが本当にこの地になるようです。 コンピュータがどのように機能するかを理解するまで、 どのようにソフトウェアの仕組みと、そうでない 当然の何かを取る。 

そして実際、残念ながら、でも、と その基本的理解、 私たち人間は間違いを犯す。 そして、私は私が共有したいと思ったことはある この8分間のビデオは、ここで撮影 ある現代の驚異のエピソードから、 物事の仕組みに関する教育ショー それは二つの絵を描く の際に不適切な使用 との理解 浮動小数点値 いくつかの重要なにつながった 残念な結果。 それでは見てみましょう。 [ビデオ再生]  - 私たちは現在、エンジニアリング」に戻る 現代の驚異上の災害」。 コンピュータ。 私たちは、すべて受け入れるようになってきた 頻繁にイライラする問題という them--バグ、ウイルスを持って、 小規模な価格のためのソフトウェアglitches-- 便宜のために支払う。 しかし、ハイテクとハイスピー​​ド 軍事·宇宙計画アプリケーション、 できる最小の問題 災​​害に拡大される。 

1996年6月4日には、科学者が用意 無人のアリアン5ロケットを起動します。 それは科学的運んでいた 設計された人工衛星 正確にどのように確立する 地球の磁場の相互作用 太陽風と。 ロケットのために建てられた 欧州宇宙機関、 その施設からリフトオフ フランス領ギアナの海岸に。 

約37秒-Atへ 飛行、まず彼ら 気づいた何かが間違っているつもりだった。 ノズルは、旋回されたことを ようにして、彼らは本当にいけない。 飛行中に40秒の周囲には、 明らかに車両がトラブルにあった、 彼らが作ったとき、それはだ それを破壊することを決定。 レンジ安全管理者、と 途方もないガッツは、ボタンを押した それができる前に、ロケットを爆破 公共の安全に危険になる。 

 - これは処女だった アリアン5の航海、 そしてその破壊がかかった なぜなら傷の場所 ロケットのソフトウェアに組み込まれ。 上-The問題 アリアンはありました 必要な数であった 表現する64ビット、 彼らは変換したい 16ビット数のこと。 彼らは数を想定 非常に大きなことになるだろうことはなかった。 その中で、これらの数字の最も 64ビットの数値はゼロだった。 彼らは間違っていた。 

1の-Theできないこと 受け入れるソフトウェアプログラム によって生成された番号の種類 別の障害の根本にあった。 ソフトウェア開発はなっていた 新技術の非常に高価な部品。 アリアン4ロケットは持っていた 非常に成功して。 用に作成したソフトウェアのそんなに それはまた、アリアン5で使用した。 

-The基本的な問題 ことは、アリアン5であった。 faster--、より高速に加速され、 ソフトウェアは、その会計処理していなかった。 

ロケットの-The破壊 巨大な財政の災害だった。 微小なソフトウェアエラーが原因のすべて。 しかし、これは最初ではなかった 時間データ変換の問題 現代のロケット技術を悩ませていた。 

開始と1991 -In 第一次湾岸戦争の、 パトリオット·ミサイル 似たような種類を経験した 番号変換の問題。 その結果、28 people-- 28 アメリカンsoldiers--が殺された、 約百他は負傷。 ときになっていたパトリオット、 着信スカッドから保護するために、 ミサイルを発射することができなかった。 

毎期イラクはクウェート、アメリカを侵略 初期の1991年に砂漠の嵐を立ち上げ、 パトリオットミサイル電池が配備されました サウジアラビアとイスラエルを守るために イラクのスカッドミサイル攻撃から。 パトリオットは、米国の中​​距離である 対空システム レイセオン社製。 

パトリオットの-Theサイズ インターセプターitself-- それは約約20フィートの長さですが、 それは約2000ポンドの重量を量る。 そしてそれは、約の弾頭を運ぶ 私はそれがおよそ150ポンドだと思います。 そして弾頭自体はある 高性能爆薬、どの 彼の周りの断片を持っています。 だから、弾頭​​のケーシングは、 散弾のよ​​うに機能するように設計されています。 

-Theミサイルを搭載しています コンテナごとに4つ、 そしてセミトレーラーによって輸送される。 

-Theパトリオットアンチミサイルシステム 今は、少なくとも20年以上さかのぼる。 もともとは設計されました 防空ミサイルなど 敵の飛行機を撃墜する。 第一次湾岸戦争で その戦争が上に来たとき、 陸軍は、それを使用したい スカッドではなく、飛行機を撃墜。 イラク空軍はあった 問題のあまりいない、 しかし陸軍はスカッドを心配していた。 だから、彼らはしみました パトリオットをアップグレードしてください。 

敵を-Intercepting マッハ5で走行ミサイル 十分に挑戦するつもりだった。 しかし、ときパトリオット サービスに突入し、 陸軍は知らなかった イラクの変更その ほぼ自分のスカッドを作った それまでは不可能。 

スカッドは - 何が起こっている 不安定であった中で来ていた。 彼らはグラグラだった。 この理由は、Iraqis--た 600キロ出得るために 300キロの範囲のmissile-- フロント弾頭から体重を取った、 そして弾頭を軽量化。 だから今パトリオットのが来てしようとしている スカッドで、time--の最も の圧倒的多数 time--それだけでスカッドによって飛んでいくのだ。 

パトリオットシステムオペレータ-once パトリオットは、そのターゲットを逃したが実現、 彼らはパトリオットの弾頭を爆発させた それ可能であれば死傷者を避けるために 地面に落下させた。 

 - すなわち、ほとんどの人が見たものだった 空には大きな火の玉のような、 とと誤解 スカッドの弾頭の切片。 

夜空での-Although、ペイトリオッツ 正常に破壊されるようで スカッドは、ダーランである可能性があり そのパフォーマンスについては間違いありません。 ありパトリオットのレーダーシステム 着信スカッドのトラックを失った 起因発売したことがない ソフトウェアの欠陥に。 

それは、最初に発見イスラエルだった 長いシステムがオンであったこと、 長い時間の不一致がなりました。 エンベデッド·クロックのために システムのコンピュータ内の。 

 - 約2週間前 ダーランにおける悲劇、 イスラエル人に報告 国防総省 というシステムは、時間を失っていた。 約8時間後 実行している、彼らは気づいた システムのとなっておりますことを 著しく精度が低い。 国防総省は、ことで対応 パトリオット電池のすべてを伝える システムのままにしないように 長い時間のため。 彼らは長い時間が何であったか言ったことはありません。 8時間、10時間、数千時間。 誰も知らなかった。 

-Theパトリオットバッテリー 兵舎に駐屯 ダーランとその欠陥のある内部で クロックは、100時間以上にあった 2月25日夜。 

 - それは、正確さに時間を追跡 の10分の1秒程度。 第二の今十 興味深い数値です それは表現できないため、 バイナリ形式で正確に、どの それが正確に表現できないことを意味 あらゆる現代のデジタルコンピュータ内。 それは信じがたいですが、 例としてこれを使用しています。 

それでは数三分の一を見てみましょう。 三分の一にすることはできません 正確に10進数で表記された。 三分の一は0.333である 無限大のために起こっている。 でそれをする方法はありません 進数で絶対精度。 それはまさに問題のようなものだ それは愛国者で起こった。 長いシステムが実行された、 さらに悪い時エラーがなりました。 

動作100時間、-after 時間の誤差はわずか約三分の一だった 第二の。 しかし、ターゲットとの観点から マッハ5で走行ミサイル、 それはトラッキングをもたらした 600メートル以上のエラーが発生しました。 それは致命的なエラーになります ダーランで兵士のため。 

スカッド発射だったされている - 何が起こった 早期警戒衛星によって検出され、 彼らはスカッドが来ていた知っていた 彼らの一般的な方向に。 それは来ていたところ彼らは知りませんでした。 これは、レーダーまで今だった パトリオットシステムのコンポーネント 探して保つためにダーランを擁護 入ってくる敵のミサイルを追跡。 

-Theレーダーは非常にスマートだった。 それは実際に追跡するだろう スカッドの位置 した後、場所を予測 それはおそらくだろう 次回 レーダーはアウトパルスを送った。 つまりレンジゲートと呼ばれていました。 

パトリオット一度-Then 十分な時間を決定しています 戻って、次のをチェックするために渡された この検出された物体の場所 それが戻って行く。 だから、間違ったに戻ったとき、 場所は、次にどのオブジェクトを見ない。 そしてそれは物体がなかったと判断する。 誤検出があったことを そしてそれはトラックをドロップします。 

-The着信スカッドが消えてしまった レーダー画面から、 数秒後に、それを 兵舎に激突。 スカッドは28を殺した。 それは、最後のものは解雇された 第一次湾岸戦争中。 悲劇的に、更新されたソフトウェア 翌日未明に到着した。 ソフトウェアの欠陥があった 、閉鎖を修正されて 問題を抱えた中で一つの章 パトリオットミサイルの歴史。 

[END VIDEO再生] 

DAVID J.マラン:それはCS50は終わりです。 私たちは、水曜日にお会いします。 

[音楽再生]