>> [音楽再生]
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は終わりです。
私たちは、水曜日にお会いします。
>> [音楽再生]