1 00:00:00,000 --> 00:00:00,940 2 00:00:00,940 --> 00:00:05,440 >> [音楽再生] 3 00:00:05,440 --> 00:00:11,577 4 00:00:11,577 --> 00:00:12,660 DAVID J.マラン:すべての権利。 5 00:00:12,660 --> 00:00:15,590 これはCS50であり、この 週2の開始である。 6 00:00:15,590 --> 00:00:19,120 だから、私たちはバグで今日から始めましょう。 7 00:00:19,120 --> 00:00:20,974 バグは、もちろん、aは プログラムの誤り、 8 00:00:20,974 --> 00:00:22,890 そしてあなたは非常に買ってあげる この概念に精通している 9 00:00:22,890 --> 00:00:26,050 あなたがプログラムされたことがない場合は、 前。 PSET0そして今PSET1。 10 00:00:26,050 --> 00:00:29,280 しかし、ここで何かを考えてみましょう 最初は少しシンプル。 11 00:00:29,280 --> 00:00:32,189 ここで、このプログラムはそのI 事前に一緒に投げた、 12 00:00:32,189 --> 00:00:37,280 そして私は、これは印刷する必要があると主張 printfのを使用して画面上の10星、 13 00:00:37,280 --> 00:00:41,020 それは、明らかに何らかの方法でバギーだ。 14 00:00:41,020 --> 00:00:45,370 >> その仕様を考えると、その それは10星を印刷する必要があり、 15 00:00:45,370 --> 00:00:50,230 それは何を、明らかにしません バグは、あなたが主張するだろうか? 16 00:00:50,230 --> 00:00:52,004 うん? 17 00:00:52,004 --> 00:00:54,420 だから、1のエラーではオフですが、 そしてあなたはそのことで何を意味するのですか? 18 00:00:54,420 --> 00:01:00,991 19 00:01:00,991 --> 00:01:01,490 [OK]をクリックします。 20 00:01:01,490 --> 00:01:09,820 21 00:01:09,820 --> 00:01:10,410 優秀。 22 00:01:10,410 --> 00:01:13,930 そこで、指定した 私のためにゼロの値を開始し、 23 00:01:13,930 --> 00:01:18,399 私たちは、10のnの値を指定した 私たちは以下に等しいを使用しました。 24 00:01:18,399 --> 00:01:21,190 このことの理由は2である 文字だけではなく、一つのシンボル、 25 00:01:21,190 --> 00:01:22,630 数学の本と同様に、 あなたが持っていないということです 26 00:01:22,630 --> 00:01:24,880 表現する手段 1文字に相当。 27 00:01:24,880 --> 00:01:28,450 >> だから、より少ないことを意味するが、 あなたはゼロからカウントを開始した場合、 28 00:01:28,450 --> 00:01:31,690 しかし、あなたはすべての道を数える 10に至るまでと同じ、 29 00:01:31,690 --> 00:01:34,170 あなたがしようとして当然のことだ 全部で11ものを数える。 30 00:01:34,170 --> 00:01:35,900 だからあなたは11つ星を印刷しようとしている。 31 00:01:35,900 --> 00:01:37,990 それでは、このための修正でしょうか? 32 00:01:37,990 --> 00:01:39,970 うん? 33 00:01:39,970 --> 00:01:43,980 >> だから未満に調整 または単に未満であると等しく、 34 00:01:43,980 --> 00:01:46,250 そしておそらく、私が主張する、あります あまりにも別のソリューション、。 35 00:01:46,250 --> 00:01:47,210 他には何をするのでしょうか? 36 00:01:47,210 --> 00:01:48,590 うん? 37 00:01:48,590 --> 00:01:53,660 >> だから、これを1に等しい開始し、 以下に等しいままにしておきます。 38 00:01:53,660 --> 00:01:56,187 そして、率直に言って、私は主張だろう その、典型的な人間のために、 39 00:01:56,187 --> 00:01:57,770 これはおそらく、より簡単です。 40 00:01:57,770 --> 00:02:00,280 1からカウントを開始し、 10をカウントアップ。 41 00:02:00,280 --> 00:02:01,690 基本的に何を意味いたします。 42 00:02:01,690 --> 00:02:04,010 >> しかし、現実はである プログラミング、私たちが見てきたように、 43 00:02:04,010 --> 00:02:07,598 コンピュータ科学者やプログラマー 一般的にはゼロからカウントを開始します。 44 00:02:07,598 --> 00:02:09,389 だからそれは、かつていいのよ あなたはそれに慣れる。 45 00:02:09,389 --> 00:02:12,640 あなたの条件は一般的になります 未満のようなものになる。 46 00:02:12,640 --> 00:02:14,910 だから、単に論理的 エラー私たちが今できること 47 00:02:14,910 --> 00:02:17,990 修正し、最終的には再コンパイル このわずか10を得る。 48 00:02:17,990 --> 00:02:19,610 >> さてどのようにここでは、このバグはどうですか? 49 00:02:19,610 --> 00:02:24,200 ここで、再び、私は私が持っていると主張している 10 stars--を印刷することを目標 50 00:02:24,200 --> 00:02:28,140 1行に1つずつ、今回が、それはしません。 51 00:02:28,140 --> 00:02:30,940 私たちは何を提案する前に、 修正は、これを何、である 52 00:02:30,940 --> 00:02:34,640 私がコンパイルした場合、視覚的に印刷する あなたがこのプログラムを実行すると思いますか? 53 00:02:34,640 --> 00:02:35,140 うん? 54 00:02:35,140 --> 00:02:38,360 55 00:02:38,360 --> 00:02:38,860 >> スター。 56 00:02:38,860 --> 00:02:41,690 上のだからすべての星 同じ行は、私が聞いたものである、 57 00:02:41,690 --> 00:02:43,391 した後、改行文字。 58 00:02:43,391 --> 00:02:44,140 それでは、それを試してみましょう。 59 00:02:44,140 --> 00:02:48,710 だからバギー-1は、入射させる、 と私は打ち鳴らすコマンドを参照してください 60 00:02:48,710 --> 00:02:50,090 私たちは前回の話という。 61 00:02:50,090 --> 00:02:55,180 ./buggy-1、そして実際に私はすべての10星を見る 私が主張するにもかかわらず、同じ行に 62 00:02:55,180 --> 00:02:58,690 私の仕様では単にコメント頂上 私は1つあたりを行うことを意図したコード 63 00:02:58,690 --> 00:02:59,230 ライン。 64 00:02:59,230 --> 00:03:00,580 しかし、これは右に見えます。 65 00:03:00,580 --> 00:03:04,620 >> 私はのように今、15行目に見える スターを印刷し、その後、16行目 66 00:03:04,620 --> 00:03:06,620 私は印刷だように見えます 改行文字、 67 00:03:06,620 --> 00:03:09,560 彼らは両方ともそのように字下げしています 私ははっきりループの内側にね。 68 00:03:09,560 --> 00:03:13,610 だから私は、新しい星を、やってはいけません ライン、スター、新ライン、スター、新ライン? 69 00:03:13,610 --> 00:03:14,110 はい? 70 00:03:14,110 --> 00:03:18,430 71 00:03:18,430 --> 00:03:21,240 >> のような言語とは異なり、うん Pythonで、あなたが精通している場合には、 72 00:03:21,240 --> 00:03:23,540 インデントにはありません コンピュータには関係。 73 00:03:23,540 --> 00:03:25,280 それは、人間だけに問題になります。 74 00:03:25,280 --> 00:03:29,860 だからここのに対し、私はラインを発明しました 15と美しく見える16--、 75 00:03:29,860 --> 00:03:31,330 しかしコンピュータは気にしません。 76 00:03:31,330 --> 00:03:34,640 コンピュータが気に 実際に中括弧を持つ 77 00:03:34,640 --> 00:03:36,310 これらのコード行の周り。 78 00:03:36,310 --> 00:03:39,520 >> ように、それだけのようclear--だ Scratch--コードの2行、その 79 00:03:39,520 --> 00:03:40,450 実行する必要があります。 80 00:03:40,450 --> 00:03:44,390 これらの黄色のスクラッチパズルのような ピース何度も何度も何度も。 81 00:03:44,390 --> 00:03:50,920 >> 私があればだから今、これを再実行 program-- ./buggy-2 - フム。 82 00:03:50,920 --> 00:03:51,770 私は今、エラーが発生している。 83 00:03:51,770 --> 00:03:54,212 私は何をするのを忘れたのか? 84 00:03:54,212 --> 00:03:55,420 ええ、私はそれをコンパイルしませんでした。 85 00:03:55,420 --> 00:03:56,740 だからバギー-2にする。 86 00:03:56,740 --> 00:03:59,840 そのようなファイル私はしませんでしたので、 実際に第二のバージョンをコンパイル。 87 00:03:59,840 --> 00:04:04,860 だから今面白い 宣言されていないvariable--ません2。 88 00:04:04,860 --> 00:04:05,510 私たちは、1をやっている。 89 00:04:05,510 --> 00:04:11,050 今バギー-1-- ./buggy-1--を作成し、 それらのそれぞれが同一線上にある。 90 00:04:11,050 --> 00:04:13,880 >> 今は例外があります 私のこの想定主張 91 00:04:13,880 --> 00:04:15,520 というあなたは、これらの中括弧が必要です。 92 00:04:15,520 --> 00:04:20,160 ときにあなたがしている場合は、それが実際にOK--です セクションまたはtextbooks--に気づいた 93 00:04:20,160 --> 00:04:22,130 中括弧を省略するには? 94 00:04:22,130 --> 00:04:22,630 うん? 95 00:04:22,630 --> 00:04:26,290 96 00:04:26,290 --> 00:04:26,870 >> その通り。 97 00:04:26,870 --> 00:04:28,940 一つだけがあるとき そのあなたのコード行 98 00:04:28,940 --> 00:04:32,830 に関連付ける 私たちの最初の例のようにループ。 99 00:04:32,830 --> 00:04:36,380 それは完全に正当なものである 中括弧を省略すること 100 00:04:36,380 --> 00:04:40,310 単に利便性の一種である コンパイラからあなたに。 101 00:04:40,310 --> 00:04:40,810 うん? 102 00:04:40,810 --> 00:04:43,347 103 00:04:43,347 --> 00:04:43,930 良い質問。 104 00:04:43,930 --> 00:04:45,500 それは風の誤差と考えられるであろう? 105 00:04:45,500 --> 00:04:49,340 私たちは、CS50のようpromote--う スタイルガイド、のURL 106 00:04:49,340 --> 00:04:51,926 その常にpset1--にあり 中括弧を使用しています。 107 00:04:51,926 --> 00:04:53,550 確かにあなたがプログラミングに新しいしている場合。 108 00:04:53,550 --> 00:04:56,800 現実は私たちがわからないです あなたを禁止しようとして 109 00:04:56,800 --> 00:04:58,680 これらの便利さをしているから。 110 00:04:58,680 --> 00:05:00,846 しかし、あなたはただ取得している場合は、 物事のスイングに、 111 00:05:00,846 --> 00:05:04,020 絶対にただいつもカーリーを使用 あなたはそれのこつを得るまで、ブレース。 112 00:05:04,020 --> 00:05:04,640 良い質問。 113 00:05:04,640 --> 00:05:05,320 >> かしこまりました。 114 00:05:05,320 --> 00:05:07,660 だから、次にバグがあった。 115 00:05:07,660 --> 00:05:09,190 かなり単純なものでは少なくとも。 116 00:05:09,190 --> 00:05:11,260 それなのにあなたはこれを考えるかもしれない 右、かなり初歩的なのですか? 117 00:05:11,260 --> 00:05:13,635 これは最初の週のようなものです 言語を見ての 118 00:05:13,635 --> 00:05:14,890 のような、その中にあなたのバグを参照してください。 119 00:05:14,890 --> 00:05:17,250 しかし、現実には、これらは、 実際に代表 120 00:05:17,250 --> 00:05:20,310 いくつかの非常に恐ろしい問題に それは現実の世界で発生する可能性があります。 121 00:05:20,310 --> 00:05:23,530 >> だから、あなたのいくつかは思い出すかもしれません あなたはハイテクのニュースに従うならば、 122 00:05:23,530 --> 00:05:25,740 または多分キャッチ 月にこれの風 123 00:05:25,740 --> 00:05:29,434 Appleは持っていたこの一年の 、両方のiOSでのミスを少し​​行っ 124 00:05:29,434 --> 00:05:31,350 オペレーティングシステム上 また、それらの電話、 125 00:05:31,350 --> 00:05:34,220 Mac OSでは、オペレーティングシステム 自分のデスクトップやラップトップ上で。 126 00:05:34,220 --> 00:05:36,480 そして、あなたはこのような見出しを見た。 127 00:05:36,480 --> 00:05:41,120 その後、アップル このバグを修正することを約束し、 128 00:05:41,120 --> 00:05:45,950 非常に迅速に、iOSの中でそれを修正しました しかし、最終的には、Mac OSでそれを固定 129 00:05:45,950 --> 00:05:46,810 同様に。 130 00:05:46,810 --> 00:05:50,370 >> 今、これらの見出しのいずれも単独で本当に 根本的な問題が何であったか明らかにし、 131 00:05:50,370 --> 00:05:55,640 しかしバグが最終的にまで減少した SSL、セキュア·ソケット·レイヤーのバグ。 132 00:05:55,640 --> 00:05:57,390 そして、長い話を短く、 これはソフトウェアである 133 00:05:57,390 --> 00:06:01,030 その私たちのブラウザや他の ソフトウェアは何をするために使用? 134 00:06:01,030 --> 00:06:04,090 135 00:06:04,090 --> 00:06:06,860 >> 私は、SSLであると言った場合には 関与、たび 136 00:06:06,860 --> 00:06:13,920 、HTTPSで始まるURLにアクセスしてください その後何SSLはに関連しているのでしょうか? 137 00:06:13,920 --> 00:06:14,580 暗号化。 138 00:06:14,580 --> 00:06:16,470 だから私たちはについて話します 今後数日間は、この。 139 00:06:16,470 --> 00:06:18,750 暗号化、の芸術 情報をスクランブル。 140 00:06:18,750 --> 00:06:22,200 >> しかし、長い話を短く、アップル いつか前にミスを犯していた 141 00:06:22,200 --> 00:06:25,970 SSLの彼らの実装では、 最終的に実現するソフトウェア 142 00:06:25,970 --> 00:06:30,120 HTTPSまたは最大のようなURL あまりにもそこに接続が。 143 00:06:30,120 --> 00:06:32,850 の結果はということで、あなたの 接続は、潜在的可能性 144 00:06:32,850 --> 00:06:33,920 インターセプトされる。 145 00:06:33,920 --> 00:06:37,130 そして、あなたの接続があった 必ずしも暗号化されていません 146 00:06:37,130 --> 00:06:40,350 あなたは、間にいくつかの悪いやつがあったら あなたと送信先のウェブサイト 147 00:06:40,350 --> 00:06:42,170 これを利用する方法を知っていた。 148 00:06:42,170 --> 00:06:45,090 >> 今、Appleは最終的に掲示 このための修正、最後に、 149 00:06:45,090 --> 00:06:46,920 と説明 その修正のこれだった。 150 00:06:46,920 --> 00:06:49,878 セキュアトランスポートは、検証に失敗しました。 接続の真偽。 151 00:06:49,878 --> 00:06:52,920 問題が取り上げられた 欠落した検証ステップを復元する。 152 00:06:52,920 --> 00:06:57,250 >> だから、これは非常に手の波状説明です 単に私たちはめちゃくちゃと言っている。 153 00:06:57,250 --> 00:07:00,920 文字通り1あり バギーたコード行 154 00:07:00,920 --> 00:07:05,130 彼らのSSLの実装、および中 あなたがオンラインに行くと、この検索した場合 155 00:07:05,130 --> 00:07:07,210 あなたが実際に見つけることができます 元のソースコード。 156 00:07:07,210 --> 00:07:11,960 例えば、これはのスクリーンショットである かなり大規模なファイルの一部だけ、 157 00:07:11,960 --> 00:07:15,965 しかし、これは明らかに呼び出された関数である SSLは、署名サーバの主要な交換を検証します。 158 00:07:15,965 --> 00:07:17,840 そしてそれはの束を取り 引数と入力。 159 00:07:17,840 --> 00:07:20,298 そして、私たちは集中するつもりはない そこに特徴点にあまりにも多く、 160 00:07:20,298 --> 00:07:24,390 しかし、あなたは内のコードに焦点を当てた場合 してみましょうfunction--その一番上の 161 00:07:24,390 --> 00:07:25,590 その上でズームイン。 162 00:07:25,590 --> 00:07:28,140 あなたは既に疑うかもしれません どのようなエラーがかもしれない 163 00:07:28,140 --> 00:07:31,230 あなたは見当がつかない場合でもなる 最終的にはあなたが見ているものを。 164 00:07:31,230 --> 00:07:35,924 異常の種類があります ここで、これは何ですか? 165 00:07:35,924 --> 00:07:38,940 >> ええ、私は本当に好きではない 2後藤の​​外観は失敗します。 166 00:07:38,940 --> 00:07:42,060 率直に言って、私は本当に知らないこと後藤 手段は失敗するが、それらのうちの2つを有する 167 00:07:42,060 --> 00:07:42,810 背中合わせに。 168 00:07:42,810 --> 00:07:45,290 それはちょうど一種の私をこすり 知的に間違った方法、 169 00:07:45,290 --> 00:07:48,910 私たちは上ズームイン確かにあれば ただ、それらの行は、これはCである。 170 00:07:48,910 --> 00:07:52,220 >> だから、Appleのコードの多く 自体は、C言語で書かれている、 171 00:07:52,220 --> 00:07:55,780 この明らかに 本当にequivalent--です 172 00:07:55,780 --> 00:07:59,060 ていないことをきれいに字下げする バージョンが、あなたは事実を認識している場合 173 00:07:59,060 --> 00:08:02,560 ない中括弧、ありませんことを何 アップルは本当にようなコードだった書いた 174 00:08:02,560 --> 00:08:03,540 このように。 175 00:08:03,540 --> 00:08:07,080 だから私は、ズームアウトしたし、ちょうど私 意味でのインデントを修正 176 00:08:07,080 --> 00:08:10,690 何中括弧がない場合は、そのこと 第二後藤はそれが黄色での失敗 177 00:08:10,690 --> 00:08:12,500 何に関係なく実行しようとしている。 178 00:08:12,500 --> 00:08:15,540 それに関連付けられていないだ その上if条件。 179 00:08:15,540 --> 00:08:19,590 >> そうであっても、もう一度、あなたがしなければなく、かなり これは、おそらく可能性を理解する 180 00:08:19,590 --> 00:08:23,230 これらの各ことを知って、やっている これらの行のそれぞれをconditions-- 181 00:08:23,230 --> 00:08:26,180 非常に重要なステップです チェックの過程で 182 00:08:26,180 --> 00:08:28,350 あなたのデータは、実際には暗号化されている場合。 183 00:08:28,350 --> 00:08:31,710 したがって、これらのいずれかをスキップする 手順ではなく、最高のアイデア。 184 00:08:31,710 --> 00:08:34,840 >> しかし、私たちはこれを持っているので、 第二後藤、黄色で失敗する 185 00:08:34,840 --> 00:08:36,840 そしてなぜなら、私たちに一度 審美的に、一種の 186 00:08:36,840 --> 00:08:40,480 それを左に移動します 論理的にどのような瞬間になる 187 00:08:40,480 --> 00:08:43,230 これは、ラインのために意味があるの その第二の後藤以下のコードの 188 00:08:43,230 --> 00:08:46,480 あなたが思うだろうが失敗? 189 00:08:46,480 --> 00:08:48,860 それは、常にスキップさになるだろう。 190 00:08:48,860 --> 00:08:52,100 だからgotoが、一般的には眉をひそめている 理由のために私たちは本当にに行くことはありません、 191 00:08:52,100 --> 00:08:54,940 実際CS50年にはない傾向がある この文後藤を教えるために、 192 00:08:54,940 --> 00:08:58,130 しかし、あなたは後藤と考えることができます 意味行くジャンプとして失敗 193 00:08:58,130 --> 00:08:59,600 コー​​ドの他の部分へ。 194 00:08:59,600 --> 00:09:03,120 >> 言い換えれば飛び越える 完全にこの最後の行、 195 00:09:03,120 --> 00:09:07,420 ので、この愚かな結果 ただ単純なミスだった 196 00:09:07,420 --> 00:09:10,330 おそらく誰かの結果 コピーとあまりにも1を貼り付ける 197 00:09:10,330 --> 00:09:14,150 何度も全体のことであった iOSとMac OSのセキュリティ 198 00:09:14,150 --> 00:09:18,240 盗聴に対して脆弱だった かなりの時間のために悪者による。 199 00:09:18,240 --> 00:09:19,940 アップルまでは最終的にこれを修正しました。 200 00:09:19,940 --> 00:09:23,100 >> 今、あなたのいくつかは実際にある場合 iOSのまたはMac OSの古いバージョンを実行している、 201 00:09:23,100 --> 00:09:27,250 あなたはgotofail.comに行くことができている 誰かが設定されていることをウェブサイトがある 202 00:09:27,250 --> 00:09:29,190 本質的に決定する プログラムで 203 00:09:29,190 --> 00:09:30,980 お使いのコンピュータは依然として脆弱であるか。 204 00:09:30,980 --> 00:09:33,600 そして、率直に言って、それであれば、 それはおそらく良いアイデアです 205 00:09:33,600 --> 00:09:36,870 お使いの携帯電話を更新するか、 この時点で、お使いのMac。 206 00:09:36,870 --> 00:09:40,120 しかし、そこにどれだけわずか証 これらの下位レベルの鑑賞 207 00:09:40,120 --> 00:09:42,400 かなり詳細と シンプルなアイデアが本当に缶 208 00:09:42,400 --> 00:09:44,590 意思決定につながる 問題その 209 00:09:44,590 --> 00:09:47,320 このcase--にaffected-- 何百万人もの人。 210 00:09:47,320 --> 00:09:49,107 >> 今行政上の言葉。 211 00:09:49,107 --> 00:09:50,690 セクションは、今度の日曜日に開始されます。 212 00:09:50,690 --> 00:09:53,360 次の方法でメールが届きます セクションの週末、ポイントで 213 00:09:53,360 --> 00:09:55,290 切除プロセス あなたがしている場合は開始されます 214 00:09:55,290 --> 00:09:56,998 あなたが今持って実現 いくつかの新しい競合しています。 215 00:09:56,998 --> 00:10:00,180 だから、これは毎年発生し、私たち 来る日で対応します。 216 00:10:00,180 --> 00:10:02,430 >> オフィスhours--キープください ここで、このスケジュールに目。 217 00:10:02,430 --> 00:10:05,100 今週の少し変更し、 特に開始時間 218 00:10:05,100 --> 00:10:08,180 と場所は、とてもご相談ください その営業時間に向かう前に、 219 00:10:08,180 --> 00:10:09,520 次の4泊のいずれか。 220 00:10:09,520 --> 00:10:12,680 そして今、評価に関する言葉、 特に問題に飛び込むように 221 00:10:12,680 --> 00:10:14,350 1以降に設定します。 222 00:10:14,350 --> 00:10:17,070 >> 仕様ではそう、 これらは、一般に 223 00:10:17,070 --> 00:10:20,360 に沿って、軸 私たちはあなたの仕事を評価します。 224 00:10:20,360 --> 00:10:23,170 適用範囲は何を意味し ある程度のコードを実装 225 00:10:23,170 --> 00:10:25,690 特徴は、必要 当社指定による。 226 00:10:25,690 --> 00:10:28,290 換言すれば、どのくらいの 点セットを使用すると、オフにかましました。 227 00:10:28,290 --> 00:10:30,440 あなたはそれの3分の1を実行しましたか、 その半分、それを100%。 228 00:10:30,440 --> 00:10:33,000 それが正しいではないとしても、 あなたはどのくらいを試みたのですか? 229 00:10:33,000 --> 00:10:35,290 だからレベルを取り込み 努力と金額の 230 00:10:35,290 --> 00:10:38,260 これまであなたがオフビット 問題セットの問題。 231 00:10:38,260 --> 00:10:40,690 >> この1 Correctness--へ どの程度、あなたのコードである 232 00:10:40,690 --> 00:10:43,150 私たちと一致して 仕様とバグ無料。 233 00:10:43,150 --> 00:10:44,770 だから、正しく動作しますか? 234 00:10:44,770 --> 00:10:48,700 私たちはそれにいくつかの入力を与えると、それはありません 私たちが期待する出力を与えるか? 235 00:10:48,700 --> 00:10:52,570 Design--は今これが最初である 特に質的なもの、 236 00:10:52,570 --> 00:10:56,180 または人間の判断を必要とするもの。 237 00:10:56,180 --> 00:10:59,690 私たちはスタッフを持っている理由そして実際、これは 非常に多くの指導の仲間とコース 238 00:10:59,690 --> 00:11:00,350 アシスタント。 239 00:11:00,350 --> 00:11:03,480 どの程度あなたです コー​​ドがよく書かれて? 240 00:11:03,480 --> 00:11:05,810 >> そして再び、これは非常にある 定性的評価 241 00:11:05,810 --> 00:11:09,100 それが上のために動作します 今後数週間で双方向に。 242 00:11:09,100 --> 00:11:12,060 そのだからではない取得するとき 数字だけのスコアだけでなく、 243 00:11:12,060 --> 00:11:16,682 書かれたスコア、または型指定されたフィードバック、 または英語の言葉で意見を書か。 244 00:11:16,682 --> 00:11:19,640 つまり、私たちはあなたを駆動するために使用します何 実際に、より良いコードを書くに向けて。 245 00:11:19,640 --> 00:11:23,320 そして、講義とセクションで、私たちは試してみます できるだけ頻繁に私達がcan--としてゆうパック指すように 246 00:11:23,320 --> 00:11:26,420 どのようなプログラムを作るだけでなく、 正しいと機能的に優れた、 247 00:11:26,420 --> 00:11:28,200 だけでなく、うまく設計された。 248 00:11:28,200 --> 00:11:31,850 それができる最も効率的な、または それができるも、最も美しい。 249 00:11:31,850 --> 00:11:33,100 >> どのスタイルに私たちをリードしています。 250 00:11:33,100 --> 00:11:36,876 スタイルは、最終的にはある 美的判断。 251 00:11:36,876 --> 00:11:38,750 あなたは良い選択しましたか あなたの変数の名前? 252 00:11:38,750 --> 00:11:40,330 あなたが適切にあなたのコードをインデントしたことがありますか? 253 00:11:40,330 --> 00:11:44,010 それはよく見るので、ん、 それは別の人間のために簡単です。 254 00:11:44,010 --> 00:11:46,550 あなたのそれぞれを読み取る その正しさ。 255 00:11:46,550 --> 00:11:50,300 >> さて、一般的にシラバスあたり、私たちは得点 5点満点でこれらの事。 256 00:11:50,300 --> 00:11:53,640 そして、私が家にポイントをハンマーしましょう 3という確かに良いです。 257 00:11:53,640 --> 00:11:55,550 皆さんを非常に迅速に行う 算術を始める。 258 00:11:55,550 --> 00:11:58,133 彼らは外に3を取得すると いくつかのpset用正しさの5つの 259 00:11:58,133 --> 00:12:02,040 彼らはいまいましいと思う、私は60%に行く 本質的にDまたはEである。 260 00:12:02,040 --> 00:12:03,980 >> それは方法ではない私たち これらの数を考える。 261 00:12:03,980 --> 00:12:06,880 3は確かに良好であり、私たち 一般的に先頭に期待 262 00:12:06,880 --> 00:12:09,820 言葉のあなたが取得している場合は、ということです 多分three's--の束カップル 263 00:12:09,820 --> 00:12:12,540 フェア、fours--のカップルや カップル補数、fours--のカップル 264 00:12:12,540 --> 00:12:13,748 それは開始するには良い場所だ。 265 00:12:13,748 --> 00:12:16,320 そして、私たちは限り見るように 時間をかけて上向きの軌道、 266 00:12:16,320 --> 00:12:18,540 あなたが特に良い場所にいる。 267 00:12:18,540 --> 00:12:20,752 >> 私たちが使用して式 重量のものは、本質的である 268 00:12:20,752 --> 00:12:22,710 シラバスあたりこの、 これだけで、私たちことを意味します 269 00:12:22,710 --> 00:12:24,750 正確さに多くの重量を与える。 270 00:12:24,750 --> 00:12:27,930 それは非常に多くの場合、正当なので それは、ほとんどの時間がかかります。 271 00:12:27,930 --> 00:12:28,760 今私を信頼します。 272 00:12:28,760 --> 00:12:31,190 あなたは、少なくともfind--ます そのお1 pset--中 273 00:12:31,190 --> 00:12:36,790 あなたの時間の90%を費やす 問題の10%に取り組んで。 274 00:12:36,790 --> 00:12:39,320 >> 作品の、すべての並べ替え 1つまたは2つのバグを除いて、 275 00:12:39,320 --> 00:12:41,570 それらはバグがあること 夜遅くあなたを保つ。 276 00:12:41,570 --> 00:12:43,380 業者は、ものです 一種のあなたを逃れる。 277 00:12:43,380 --> 00:12:45,560 しかし、それで寝た後、 または営業時間に出席 278 00:12:45,560 --> 00:12:48,844 または、オンラインの質問がされている尋ねる あなたがその100%の目標に到達するとき、 279 00:12:48,844 --> 00:12:50,760 それはなぜ体重だ ほとんどの正しさ。 280 00:12:50,760 --> 00:12:54,102 少し少なめに設計し、 それより少し少なめのスタイル。 281 00:12:54,102 --> 00:12:56,060 しかしmind--スタイルを保つ おそらく最も簡単です 282 00:12:56,060 --> 00:12:58,890 かみ切るために、これらの スタイルガイドに従って。 283 00:12:58,890 --> 00:13:01,580 >> そして今、より深刻 学術正直に注意してください。 284 00:13:01,580 --> 00:13:05,000 CS50は不幸な区別を持って 広告ボードの最大の生産国であること 285 00:13:05,000 --> 00:13:07,330 ほぼ毎年、歴史的に例。 286 00:13:07,330 --> 00:13:11,012 学生がでカンニングするためではありません CS50もはやので、任意の他のクラスよりも、 287 00:13:11,012 --> 00:13:13,720 しかしので仕事の性質上、 それは電子だという事実は、 288 00:13:13,720 --> 00:13:16,636 私たちはそれを見ているという事実、および 実は私たちはコンピュータ科学者であり、 289 00:13:16,636 --> 00:13:20,570 私たちは、残念ながらと言うことができます それを検出するのに非常に良い。 290 00:13:20,570 --> 00:13:22,710 >> だから、これは実質ベースで何を意味するのでしょうか? 291 00:13:22,710 --> 00:13:24,820 それだから、シラバスあたり、 もちろんの哲学 292 00:13:24,820 --> 00:13:28,090 本当に合理的であると煮詰めるん。 293 00:13:28,090 --> 00:13:31,684 この行の間があります 自分で自分の仕事をして 294 00:13:31,684 --> 00:13:34,100 との少しを取得 友人から合理的な援助、 295 00:13:34,100 --> 00:13:38,020 そしてあからさまなあなたのためにその仕事をしている 友人、または彼または彼女あなたのコードを送信 296 00:13:38,020 --> 00:13:41,080 彼または彼女が単にできるように 右のそれを取るか、借りる。 297 00:13:41,080 --> 00:13:43,580 そして、それは線を越える 私たちは、クラスで描かれていること。 298 00:13:43,580 --> 00:13:45,410 >> 、シラバスを参照してください 最終的にはライン用 299 00:13:45,410 --> 00:13:48,209 私たちは、合理的なものとして描くこと 不合理な行動、 300 00:13:48,209 --> 00:13:50,000 それは本当に沸騰を行います 本質にダウン 301 00:13:50,000 --> 00:13:53,980 あなたの仕事はする必要の 最終的には自分自身である。 302 00:13:53,980 --> 00:13:56,230 今、そうは言って、 ヒューリスティックが存在する。 303 00:13:56,230 --> 00:13:58,980 あなたがimagine--可能性があるためため、 営業時間とビジュアルから 304 00:13:58,980 --> 00:14:01,060 そして、私たちがした動画は こうしてfar-- CS50示す 305 00:14:01,060 --> 00:14:04,530 確かに協力的なようであることを意味する として協同組合や社会的など 306 00:14:04,530 --> 00:14:06,450 可能な限り。 307 00:14:06,450 --> 00:14:08,570 コラボレーティブとして、それは厳しいからである。 308 00:14:08,570 --> 00:14:11,314 >> しかし、これは言って、ヒューリスティック、 あなたはシラバスに表示されますように、 309 00:14:11,314 --> 00:14:12,980 あなたには、いくつかの問題を抱えているときということです。 310 00:14:12,980 --> 00:14:16,470 あなたのコード内のいくつかのバグを持っていることを それはあなたのために合理的で、解決することはできません 311 00:14:16,470 --> 00:14:18,039 他の誰かにあなたのコードを表示します。 312 00:14:18,039 --> 00:14:21,080 でも、クラスの友人、友人 営業時間であなたの隣に座って、 313 00:14:21,080 --> 00:14:22,680 やスタッフの一員。 314 00:14:22,680 --> 00:14:25,810 しかし、彼らはあなたに自分のコードが表示されない場合があります。 315 00:14:25,810 --> 00:14:27,710 >> 換言すれば、 あなたのquestion--に答える 316 00:14:27,710 --> 00:14:29,940 私はhelp--ああ、ここに私のコードですされていませんが必要です。 317 00:14:29,940 --> 00:14:32,440 これを見てくださいと 何をでしょう、そこから推測する。 318 00:14:32,440 --> 00:14:34,580 さて、もちろん、あります 道を明確にゲームに 319 00:14:34,580 --> 00:14:37,760 私はあなたを紹介することにより、このシステム を持ってご質問の前に私のコード。 320 00:14:37,760 --> 00:14:40,150 あなたは私に私のあなたのコードを表示 を持ってご質問の前に。 321 00:14:40,150 --> 00:14:45,870 しかし、再びシラバスを参照してください このラインがどこにあるの細かい詳細。 322 00:14:45,870 --> 00:14:50,606 >> ちょうど今絵を描くようにして として透過的に可能な限り共有する 323 00:14:50,606 --> 00:14:53,480 私たちは、近年にある場合に、 これは、広告ボードケースの数です。 324 00:14:53,480 --> 00:14:56,260 そのCS50は終わってきた 過去7年間。 325 00:14:56,260 --> 00:14:58,717 14例、この最新の秋と。 326 00:14:58,717 --> 00:15:01,300 関連する学生の面では、 それは20いくつかの奇妙な学生だった 327 00:15:01,300 --> 00:15:02,490 この過去の秋。 328 00:15:02,490 --> 00:15:05,670 33のピークがあった 数年前の学生。 329 00:15:05,670 --> 00:15:08,830 人の多くは、残念ながらあり もはやここキャンパスで。 330 00:15:08,830 --> 00:15:13,100 >> の割合として関与学生 クラスは、歴史的に0%の範囲であっています 331 00:15:13,100 --> 00:15:17,300 言うことだけである5.3%に これは毎年の課題です。 332 00:15:17,300 --> 00:15:20,390 そして、その端部に向かって、どのような 私たちは何をしたいかを伝えるです 333 00:15:20,390 --> 00:15:24,310 私たちはFYI--で比較dd--こと 人の学生に公平性 334 00:15:24,310 --> 00:15:26,520 それに応じて行を以下の通りです。 335 00:15:26,520 --> 00:15:29,620 私たちは、現在のすべての比較を行う 過去のすべてのミッションに対して提出 336 00:15:29,620 --> 00:15:30,840 過去何年もの。 337 00:15:30,840 --> 00:15:33,620 >> 私たちは、周りにGoogleにすぎ方法を知っている とコードのリポジトリを検索する 338 00:15:33,620 --> 00:15:36,360 オンラインディスカッションフォーラム オンラインオンライン、求人サイト。 339 00:15:36,360 --> 00:15:41,580 学生はそれを見つけることができれば、私たちは確かにすることができます それは同じくらい私たちは残念そうであるように見つける。 340 00:15:41,580 --> 00:15:45,330 だから、何をシラバスに表示されます しかし、この後悔節がある。 341 00:15:45,330 --> 00:15:47,500 私は確かにすることができます 感謝し、私たちは皆持って 342 00:15:47,500 --> 00:15:50,870 スタッフは次のようにコースを行った 時間をかけてこのか、この1自体、 343 00:15:50,870 --> 00:15:53,997 確かにそれは時にどのようなものか知っている 人生はあなたが持って邪魔になる 344 00:15:53,997 --> 00:15:56,080 いくつかの夜遅くdeadline-- このクラスだけでなく、 345 00:15:56,080 --> 00:15:58,660 しかし、あなたはanother--いるとき 完全に疲れ、ストレスがたまって、 346 00:15:58,660 --> 00:16:00,659 法外な番号を持っている 他のことをすることができません。 347 00:16:00,659 --> 00:16:03,660 あなたは、どこかの時点で行います 確かに悪い、おそらく晩年 348 00:16:03,660 --> 00:16:04,620 夜の決定。 349 00:16:04,620 --> 00:16:06,520 >> シラバスあたりだから、 この句があり、 350 00:16:06,520 --> 00:16:10,629 作るようであれば72時間以内 いくつかの貧弱な決定は、あなたはそれまで所有している 351 00:16:10,629 --> 00:16:12,670 私に手を差し伸べ、 もちろんの頭の一つ 352 00:16:12,670 --> 00:16:14,300 私たちは会話を持つことになります。 353 00:16:14,300 --> 00:16:16,220 私たちは、物事を処理します 内部的に期待して 354 00:16:16,220 --> 00:16:18,770 それはより多くなることを 瞬間や人生の教訓を教え、 355 00:16:18,770 --> 00:16:22,120 ではない何か 特に大幅な波及効果 356 00:16:22,120 --> 00:16:24,570 あなたはここでこれらのチャートに表示されることがありますように。 357 00:16:24,570 --> 00:16:26,540 >> だから、非常に深刻な口調だ。 358 00:16:26,540 --> 00:16:29,960 私たちは、わずか数のために一時停止してみましょう 秒緊張を破壊する。 359 00:16:29,960 --> 00:16:34,442 >> [音楽再生] 360 00:16:34,442 --> 00:17:17,768 361 00:17:17,768 --> 00:17:20,250 >> DAVID J.マラン:すべての権利、 ので、どのようにセグエのためにということでした? 362 00:17:20,250 --> 00:17:22,059 今日の主なトピックへ。 363 00:17:22,059 --> 00:17:23,859 そのうちの第一は、抽象化したものです。 364 00:17:23,859 --> 00:17:26,900 これのもう一つは、になるだろう データの表現、率直に 365 00:17:26,900 --> 00:17:31,640 どのように私たちができるというのが本当に乾燥方法である 問題を解決すると思ってついて行く 366 00:17:31,640 --> 00:17:33,250 問題を解決するでしょうか? 367 00:17:33,250 --> 00:17:37,285 だから、スクラッチで見てきた、あなたがした C言語でPSET1におそらくすでに見 368 00:17:37,285 --> 00:17:39,930 あなただけでなく、使用することができます printfのような関数、 369 00:17:39,930 --> 00:17:42,770 そのほかの人にある 過去数年は、あなたのために書いた。 370 00:17:42,770 --> 00:17:45,340 また、独自の関数を書くことができます。 371 00:17:45,340 --> 00:17:48,440 >> そして、あなたは持っていない可能性があっても、 PSET1に率直にC言語でこれを行って、 372 00:17:48,440 --> 00:17:51,866 あなたは本当にあなたを記述する必要はありません problem--ため独自の関数 373 00:17:51,866 --> 00:17:53,990 で、おそらく困難ながら 最初に表示されますglance-- 374 00:17:53,990 --> 00:17:57,910 最終的に解決することができる コー​​ドのすべてのその多くはない行。 375 00:17:57,910 --> 00:18:01,140 しかし、それは用語で、言って 独自の関数を書いて、 376 00:18:01,140 --> 00:18:03,570 与えるCがないことを認識 あなたはこの機能。 377 00:18:03,570 --> 00:18:06,940 >> 私は、今日のソースコードに行くつもりです これは、すでにオンラインで入手できます 378 00:18:06,940 --> 00:18:10,900 と私は先にオープンに行くつもりです 機能0.Cと呼ばれるプログラムまで、 379 00:18:10,900 --> 00:18:14,620 および機能はゼロ 私たちはいくつかのことが表示されます。 380 00:18:14,620 --> 00:18:19,160 最初の行では、18を経て 23は私の主な機能である。 381 00:18:19,160 --> 00:18:22,414 そして今、私たちは読み始めていること 私たちはその場で書いていないコードで、 382 00:18:22,414 --> 00:18:25,080 その代わりに、私は事前に書いた または問題では、設定されていること 383 00:18:25,080 --> 00:18:27,910 持つ受け取る可能性があります 予め書き込まれて。 384 00:18:27,910 --> 00:18:30,040 開始するには良い方法 誰か他の人のコードを読む 385 00:18:30,040 --> 00:18:31,400 主な機能を探している。 386 00:18:31,400 --> 00:18:34,420 どこでそのエントリを把握 ポイントは、プログラムを実行する場合、 387 00:18:34,420 --> 00:18:36,580 、そこから論理的にそれに従ってください。 388 00:18:36,580 --> 00:18:40,190 >> したがって、このプログラムは、明らかにプリント あなたの名前はコロンが続く。 389 00:18:40,190 --> 00:18:42,490 私たちは、その後のGetStringを使用 CS50ライブラリから 390 00:18:42,490 --> 00:18:46,050 文字列、または語句を取得する キーボードでのユーザから。 391 00:18:46,050 --> 00:18:48,390 そして、これがあります 事here-- PrintNameに。 392 00:18:48,390 --> 00:18:51,420 >> 今PrintNameにはありません C.付属しています機能 393 00:18:51,420 --> 00:18:52,970 これは、標準的なio.h.ではありません 394 00:18:52,970 --> 00:18:55,570 それはCS50.h.ではありません 395 00:18:55,570 --> 00:18:57,880 これは、同じファイル内ではなくです。 396 00:18:57,880 --> 00:19:01,000 私は下にスクロールした場合に注意してください bit--線25 27--へ 397 00:19:01,000 --> 00:19:05,330 それは、コメントだけのかなりの方法です 星やスラッシュを使用してコード。 398 00:19:05,330 --> 00:19:07,320 これは複数行である コメント、これはただである 399 00:19:07,320 --> 00:19:10,570 の青の私の記述 この関数は何をするか。 400 00:19:10,570 --> 00:19:14,530 >> 〜31株中28ため、 私は超簡単な関数を書きました 401 00:19:14,530 --> 00:19:16,280 名前がPrintNameにある。 402 00:19:16,280 --> 00:19:19,560 それはどのように多く取り 引数はあなたが言うでしょうか? 403 00:19:19,560 --> 00:19:25,120 したがって、1つargument--つがありますので、 かっこ内の引数リストされている。 404 00:19:25,120 --> 00:19:27,000 の型はStringです。 405 00:19:27,000 --> 00:19:30,240 どちらがPrintNameに言うことです このブラックボックスのようなものです 406 00:19:30,240 --> 00:19:32,910 取りまたは関数 文字列を入力として。 407 00:19:32,910 --> 00:19:35,730 >> その文字列の名前 便利な名前になります。 408 00:19:35,730 --> 00:19:37,840 じゃない、ではないN、しかし名前。 409 00:19:37,840 --> 00:19:41,090 だからPrintNameには何をするのでしょうか? 410 00:19:41,090 --> 00:19:42,210 それは素敵な簡単です。 411 00:19:42,210 --> 00:19:45,390 ただのためのコードを1行として printfのが、どうやらそれを 412 00:19:45,390 --> 00:19:47,950 プリントアウト "こんにちは、"そのようにしてそう。 413 00:19:47,950 --> 00:19:50,070 どこでそのようにしてそう 引数から来ている。 414 00:19:50,070 --> 00:19:52,300 >> さて、これはここに巨大な技術革新ではありません。 415 00:19:52,300 --> 00:19:56,710 本当に、私はできたプログラムを撮影した コー​​ドを1行で書かれている 416 00:19:56,710 --> 00:20:00,190 ここにこれを置くことによって、 とのものに変更すること 417 00:20:00,190 --> 00:20:04,920 それはいくつかの6,7かそこらを伴う ダウンここにコードの行のすべての方法。 418 00:20:04,920 --> 00:20:08,190 >> しかし、それは練習だ 抽象化として知られている原理。 419 00:20:08,190 --> 00:20:12,550 新しい内部のカプセル化の種類 名前を持つ関数、より良い 420 00:20:12,550 --> 00:20:14,590 文字通りまだその名前 それが何を言う。 421 00:20:14,590 --> 00:20:16,880 私はそれがありませんprintf--意味 特に記述。 422 00:20:16,880 --> 00:20:18,932 私が作成したい場合 パズルピース、またはIの場合 423 00:20:18,932 --> 00:20:21,140 関数を作成したい それが誰かの名前を出力し、 424 00:20:21,140 --> 00:20:23,230 これを行うための美しさ 私が実際にできることです 425 00:20:23,230 --> 00:20:27,170 その関数に名前を付けて それはそれが何をするかを説明します。 426 00:20:27,170 --> 00:20:29,844 >> 今では、入力を取り込み、その 私は、任意の名前と呼んでいる、 427 00:20:29,844 --> 00:20:32,760 それはあまりにも素晴らしく記述的である 代わりに、もう少しという 428 00:20:32,760 --> 00:20:36,140 S.とのような一般的 ボイド、今の、ちょうど手段 429 00:20:36,140 --> 00:20:38,330 この関数はないこと 何も私をバック渡す。 430 00:20:38,330 --> 00:20:41,127 それは、ことのGetStringのようではありません 文字通りの文字列を私に戻って手 431 00:20:41,127 --> 00:20:43,960 私たちは、紙の破片で行ったように 先週あなたのクラスメートと、 432 00:20:43,960 --> 00:20:45,990 むしろそれは単に副作用を有している。 433 00:20:45,990 --> 00:20:48,080 これは、画面に何かを出力します。 434 00:20:48,080 --> 00:20:53,880 >> 一日の終わりに、もしそうであれば、私 作るか、機能0、./function-0、 435 00:20:53,880 --> 00:20:55,450 私たちは、それが私の名前を尋ねていることがわかります。 436 00:20:55,450 --> 00:20:58,150 私は私の名前から型をデビッドを入力し、それ。 437 00:20:58,150 --> 00:21:01,080 私はロブで再びそれを行う場合は、 それは言うために起こっている「こんにちは、ロブを。 " 438 00:21:01,080 --> 00:21:04,280 だからシンプルなアイデアが、おそらく この精神から外挿する 439 00:21:04,280 --> 00:21:06,750 あなたのプログラムが得るようにすること もう少し複雑、 440 00:21:06,750 --> 00:21:10,290 あなたがのチャンクを書きたい コー​​ドとコールcode--呼び出し 441 00:21:10,290 --> 00:21:13,270 いくつかの記述によってそのcode-- PrintNameにのような名前、 442 00:21:13,270 --> 00:21:15,600 Cは、私たちに、この機能を与えるん。 443 00:21:15,600 --> 00:21:17,660 >> ここでは別の単純な例です。 444 00:21:17,660 --> 00:21:22,940 例えば、私は開いている場合 本日からファイルをreturn.cと呼ばれる、 445 00:21:22,940 --> 00:21:24,270 私がここで何をやったかがわかります。 446 00:21:24,270 --> 00:21:26,330 この主な機能のほとんどは、printfのです。 447 00:21:26,330 --> 00:21:30,360 私が最初に任意に初期化する 数2にxを呼ばれる変数。 448 00:21:30,360 --> 00:21:34,110 私はその後、xが、今は「プリントアウト %iは「xの値を渡す。 449 00:21:34,110 --> 00:21:35,500 だから、僕はそれが何であるか言っている。 450 00:21:35,500 --> 00:21:37,208 >> 今、私はちょうど大胆によ printfのと主張。 451 00:21:37,208 --> 00:21:42,050 私は、その値xを乗する、と私は今 関数を呼び出すことにより、このようにすること 452 00:21:42,050 --> 00:21:45,590 と呼ばれる立方体の受け渡し 引数として、xの、 453 00:21:45,590 --> 00:21:49,300 して出力を保存 変数自体では、x。 454 00:21:49,300 --> 00:21:51,340 だから私は、xの値をつかうんだ。 455 00:21:51,340 --> 00:21:53,380 私はオーバーライドよ 何とxの値 456 00:21:53,380 --> 00:21:56,510 呼び出しの結果 このキューブ関数である。 457 00:21:56,510 --> 00:21:59,530 そして、私はいくつかをプリントアウト ふわふわのものは、ここで私がやったと言って。 458 00:21:59,530 --> 00:22:01,600 >> それではキューブは何ですか? 459 00:22:01,600 --> 00:22:03,510 基本的に何に注意してください ここでは異なる。 460 00:22:03,510 --> 00:22:05,540 私は機能を与えてくれた 以前と名前。 461 00:22:05,540 --> 00:22:08,270 私は、引数に名前を変更している。 462 00:22:08,270 --> 00:22:11,650 この時間は、それがn個、名前の代わりに呼ばれて、 私は私が欲しいもの、それを呼び出すことができます。 463 00:22:11,650 --> 00:22:12,650 しかし、これは異なっている。 464 00:22:12,650 --> 00:22:14,080 左のこの事。 465 00:22:14,080 --> 00:22:16,290 以前は、どのようなキーワードがでしたか? 466 00:22:16,290 --> 00:22:16,870 ボーイズ。 467 00:22:16,870 --> 00:22:18,580 今では明らかにint型です。 468 00:22:18,580 --> 00:22:20,630 >> だから奪うおそらく何ですか? 469 00:22:20,630 --> 00:22:24,090 ソートの空隙が意味するのに対し 無、それはそうであった。 470 00:22:24,090 --> 00:22:25,970 PrintNameには何も返されません。 471 00:22:25,970 --> 00:22:27,942 それは何かをしたが、 それは私を渡しませんでした 472 00:22:27,942 --> 00:22:30,650 私は置くことができるもの 等号の左辺 473 00:22:30,650 --> 00:22:32,460 私は22行目でここにやったように。 474 00:22:32,460 --> 00:22:36,780 >> だから私は、ライン30上に言えば、 何は、おそらく暗示していることだ 475 00:22:36,780 --> 00:22:38,610 私のために何をするかキューブはどうですか? 476 00:22:38,610 --> 00:22:41,110 うん? 477 00:22:41,110 --> 00:22:42,310 これは、整数を返します。 478 00:22:42,310 --> 00:22:44,590 だから、のために、私を手 紙のインスタンス、一片 479 00:22:44,590 --> 00:22:46,580 その上に、それは答えを書いています。 480 00:22:46,580 --> 00:22:50,130 2乗または3乗、または4 どんなcubed--私は、渡された 481 00:22:50,130 --> 00:22:51,540 そしてどのように私はこれを実装しましたか? 482 00:22:51,540 --> 00:22:54,810 まあ、ただのn倍のn倍のn 私は値を3乗する方法である。 483 00:22:54,810 --> 00:22:57,110 だからもう一度、超簡単 アイデアが実証 484 00:22:57,110 --> 00:23:00,100 今、私たちは、関数を記述できるか それは実際に私達に戻っていた 485 00:23:00,100 --> 00:23:02,380 興味があるかもしれない値。 486 00:23:02,380 --> 00:23:05,740 >> それでは最後の例を見てみましょう ここでは関数1と呼ばれる。 487 00:23:05,740 --> 00:23:08,530 この例では、開始 より魅力的な取得します。 488 00:23:08,530 --> 00:23:12,400 これは、関数のいずれかでそう program--予告最終的に 489 00:23:12,400 --> 00:23:14,920 GetPositiveIntという関数を呼び出します。 490 00:23:14,920 --> 00:23:17,800 GetPositiveIntではありません CS50ライブラリ内の関数、 491 00:23:17,800 --> 00:23:20,400 私たちは、私たちが決めた それが存在したいと思います。 492 00:23:20,400 --> 00:23:24,550 >> だから、私たちはそれ以降のファイルに下にスクロールすると、 私が実装を歩き回った様子がわかり 493 00:23:24,550 --> 00:23:26,560 正の整数を取得し、私 それがより魅力的だと言う 494 00:23:26,560 --> 00:23:28,992 これは、まともなので、 コー​​ドの行数。 495 00:23:28,992 --> 00:23:30,700 それはちょうど愚かではありません 小さなおもちゃのプログラム。 496 00:23:30,700 --> 00:23:33,870 これは、実際にいくつかのエラーチェックを持っている より有益な何かをしている。 497 00:23:33,870 --> 00:23:38,470 >> だから、チュートリアルを見ていないてしまった場合 私たちはPSET1に埋め込まれているビデオ、 498 00:23:38,470 --> 00:23:42,350 これは一種であることを知っている その精神においては似たCループ、 499 00:23:42,350 --> 00:23:44,270 スクラッチができることの種類の。 500 00:23:44,270 --> 00:23:46,320 そして、これを行うのですかと言います。 501 00:23:46,320 --> 00:23:47,500 これを印刷してください。 502 00:23:47,500 --> 00:23:51,860 その後、先に行くとN--取得 int型を取得し、n個に格納し、 503 00:23:51,860 --> 00:23:55,760 そして何度も何度もこれをやり続けると 再び限り、nが1未満である。 504 00:23:55,760 --> 00:23:58,720 >> だから、nは1未満になるだろう 人間が協力しない場合のみ。 505 00:23:58,720 --> 00:24:01,980 彼または彼女のように入力された場合 0または-1または-50において、 506 00:24:01,980 --> 00:24:04,790 このループは維持しようとしている 何度も何度も実行する。 507 00:24:04,790 --> 00:24:07,549 そして最終的に、I気付く 単に値を返す。 508 00:24:07,549 --> 00:24:09,590 だから今、私たちは、機能を持っている それは素晴らしいしてきただろう 509 00:24:09,590 --> 00:24:14,040 CS50は内実装した場合 あなたのためのCS50.hとCS50.c、 510 00:24:14,040 --> 00:24:16,520 が、ここではできるようになりまし この自分自身を実装します。 511 00:24:16,520 --> 00:24:19,230 >> しかし、いくつかの重要な詳細に関する2つのコメント。 512 00:24:19,230 --> 00:24:24,390 私はint型を宣言しなかった理由選ぶ - nは、ライン29上で、あなたは思いますか 513 00:24:24,390 --> 00:24:27,139 だけではなく行うための ここで、これは、これは、 514 00:24:27,139 --> 00:24:28,930 とより一致 私たちは先週やった? 515 00:24:28,930 --> 00:24:29,430 うん? 516 00:24:29,430 --> 00:24:34,485 517 00:24:34,485 --> 00:24:35,110 よくお考え。 518 00:24:35,110 --> 00:24:37,080 だから、私たちはそれを置くした場合 ここで、私たちと同じようにだ 519 00:24:37,080 --> 00:24:39,110 何度も何度もそれを宣言しておく。 520 00:24:39,110 --> 00:24:42,000 それ自体はつまり 問題ではない、それ自体、 521 00:24:42,000 --> 00:24:43,940 私たちが唯一の必要があるため 一度、値 522 00:24:43,940 --> 00:24:45,330 私たちはとにかく新しいものを取得するつもりだ。 523 00:24:45,330 --> 00:24:45,940 しかし、よく考えて。 524 00:24:45,940 --> 00:24:46,440 うん? 525 00:24:46,440 --> 00:24:52,770 526 00:24:52,770 --> 00:24:53,330 >> 閉じる。 527 00:24:53,330 --> 00:24:59,030 だから私は、n上で宣言されたので ライン29のループの外に、 528 00:24:59,030 --> 00:25:01,390 それは全体でアクセス可能です この全体の機能。 529 00:25:01,390 --> 00:25:05,400 なぜなら、他の機能はありません nは、これらの巻き毛の内部に残っている 530 00:25:05,400 --> 00:25:06,470 ここにブレース。 531 00:25:06,470 --> 00:25:07,940 必ずSo--。 532 00:25:07,940 --> 00:25:12,430 533 00:25:12,430 --> 00:25:12,940 >> その通り。 534 00:25:12,940 --> 00:25:14,356 だから、これはさらにポイントまでです。 535 00:25:14,356 --> 00:25:18,600 私たちは代わりに宣言された場合 nは右ここにライン32上の、 536 00:25:18,600 --> 00:25:22,340 推測ので、それは問題だ 他にどこ私はそれにアクセスする必要がありますか? 537 00:25:22,340 --> 00:25:25,620 ライン34、およびオン 親指の簡単なルールがある 538 00:25:25,620 --> 00:25:30,060 あなただけの変数を使用することができます 最も最近の中括弧の内側 539 00:25:30,060 --> 00:25:31,420 これであなたはそれを宣言した。 540 00:25:31,420 --> 00:25:35,230 >> 残念ながら、34行 一行は、遅すぎる 541 00:25:35,230 --> 00:25:38,560 私はすでに閉じられてきたので、 ライン33上の中かっこ 542 00:25:38,560 --> 00:25:41,220 すなわち、に対応 ライン30上の中カッコ。 543 00:25:41,220 --> 00:25:44,180 そして、これは言っての方法です この変数intは、スコープされていることを、 544 00:25:44,180 --> 00:25:46,970 これだけ内側に、話す これらの中括弧の。 545 00:25:46,970 --> 00:25:48,910 それはちょうどそれらの外側には存在しません。 546 00:25:48,910 --> 00:25:51,580 >> だから確かに、私はこれを行う場合は、 間違って、私はコードを保存しましょう 547 00:25:51,580 --> 00:25:53,530 それが間違って書かれis--として。 548 00:25:53,530 --> 00:25:57,990 私が先に行くと確認してみましょう 機能1、およびnotice--エラー。 549 00:25:57,990 --> 00:26:03,502 未宣言の識別子nの利用 右ここでライン35、上。 550 00:26:03,502 --> 00:26:05,210 そして、私たちは上にスクロールした場合 さらに、別の1。 551 00:26:05,210 --> 00:26:08,750 未申告の使用 ライン34上の識別子nを。 552 00:26:08,750 --> 00:26:11,200 >> だから、コンパイラ、クラング、 ただそれに気づいていることをされている 553 00:26:11,200 --> 00:26:13,720 にもかかわらず、存在しません 明らかにそれが視覚的にあります。 554 00:26:13,720 --> 00:26:16,090 だから、簡単な修正ではそこに宣言されている。 555 00:26:16,090 --> 00:26:18,790 >> 今、私はにスクロールしてみましょう ファイルの先頭。 556 00:26:18,790 --> 00:26:21,080 何としてあなたに飛び出す 少し異なっている 557 00:26:21,080 --> 00:26:23,070 スタッフから私たちは、先週見? 558 00:26:23,070 --> 00:26:26,990 私だけではなく、名前を持っているんだけでなく、 私は、いくつかの鋭いがトップアップが含まれている 559 00:26:26,990 --> 00:26:29,340 私は私は何かを持っている プロトタイプを呼び出す。 560 00:26:29,340 --> 00:26:36,100 今ではと非常に類似して見えるもの 私たちは27行に先ほど見ました。 561 00:26:36,100 --> 00:26:39,230 >> それでは、異なるから推測しましょう エラーメッセージは、なぜ私はこれをやった。 562 00:26:39,230 --> 00:26:42,050 私は先に行ってみようと そこにこれらの行を削除してください。 563 00:26:42,050 --> 00:26:44,240 そして、私たちは、プロトタイプについて何も知らない。 564 00:26:44,240 --> 00:26:45,430 このファイルをリメイク。 565 00:26:45,430 --> 00:26:46,890 機能1を加えます。 566 00:26:46,890 --> 00:26:48,090 そして今、いまいましい、4のエラー。 567 00:26:48,090 --> 00:26:50,220 まずは1までスクロールしてみましょう。 568 00:26:50,220 --> 00:26:55,070 >> 関数の暗黙的な宣言 正の整数を取得し、C99には無効です。 569 00:26:55,070 --> 00:26:57,780 C99はちょうど1999年を意味し、 言語のバージョン 570 00:26:57,780 --> 00:26:59,710 私たちが実際に使用しているものは、C、。 571 00:26:59,710 --> 00:27:01,050 だから、これは何を意味するのでしょうか? 572 00:27:01,050 --> 00:27:05,250 さてC--、より具体的には、C compilers--はかなりダムプログラムです。 573 00:27:05,250 --> 00:27:07,420 彼らはあなたがしたか知っている 彼らに言った、それはだ 574 00:27:07,420 --> 00:27:08,960 先週から、実際のテーマ。 575 00:27:08,960 --> 00:27:12,910 >> 問題があれば私は行くことです ここに名前を実装について、 576 00:27:12,910 --> 00:27:17,640 と私は呼び出された関数を呼び出す 20行目でここにGetPositiveInt 577 00:27:17,640 --> 00:27:22,520 その機能は、技術的にはしません コンパイラはライン27を見るまで存在しています。 578 00:27:22,520 --> 00:27:25,450 残念ながら、コンパイラがある トップ、下、右、左をやって、 579 00:27:25,450 --> 00:27:29,580 それが見ていないので、そのように GetPositiveIntの実施、 580 00:27:29,580 --> 00:27:32,400 それはあなたがしようとして見ている ここでそれを使用するには、 581 00:27:32,400 --> 00:27:35,810 それだけで叫ぶbail--になるだろう エラーのあるあなたは、おそらくmessage-- 582 00:27:35,810 --> 00:27:38,440 不可解ではなく、実際に ファイルをコンパイルします。 583 00:27:38,440 --> 00:27:41,940 >> だから、いわゆるプロトタイプアップ ここで明らかに冗長である。 584 00:27:41,940 --> 00:27:47,870 文字通り、私はここでダウンしたと私はコピーされた これを貼り付けた、と私はここでそれを置く。 585 00:27:47,870 --> 00:27:51,020 ボイドがより適切であるように、私たちはよ 文字通りコピーしてこの時間を貼り付けます。 586 00:27:51,020 --> 00:27:52,854 私は文字通りコピーし、それを貼り付けた。 587 00:27:52,854 --> 00:27:54,270 本当にただパン粉など。 588 00:27:54,270 --> 00:27:56,260 >> コンパイラにはほとんど手掛かり。 589 00:27:56,260 --> 00:27:58,860 私はこれが何をするか分からない まだ、私はあなたに約束しています 590 00:27:58,860 --> 00:28:00,260 それは最終的に存在すること。 591 00:28:00,260 --> 00:28:04,010 これがline--だからこそです セミコロンで終わる16--ライン。 592 00:28:04,010 --> 00:28:05,486 これは、設計上冗長である。 593 00:28:05,486 --> 00:28:05,986 はい? 594 00:28:05,986 --> 00:28:11,340 595 00:28:11,340 --> 00:28:14,360 >> あなたはあなたのライブラリをリンクしていない場合 ああ、良い質問をthe--する。 596 00:28:14,360 --> 00:28:17,350 シャープは、ヘッダファイルのインクルードが含まれています。 597 00:28:17,350 --> 00:28:20,040 be--する必要がほとんどべき 常に一番上にあること 598 00:28:20,040 --> 00:28:23,270 用similar--用のファイルの まったく同じ理由で、はい。 599 00:28:23,270 --> 00:28:26,430 規格であるため io.hは文字通り行です 600 00:28:26,430 --> 00:28:30,560 このように、という言葉のprintfで、かつ その引数と戻り値の型を持つ。 601 00:28:30,560 --> 00:28:33,310 だから鋭いを行うことによって含まれる ここで、あなたは、文字通り何をやっている 602 00:28:33,310 --> 00:28:36,380 内容をコピーして貼り付けている 誰か他の人のトップを書きました。 603 00:28:36,380 --> 00:28:39,660 これによりまでにコードをcluing それらの関数が存在しないという事実。 604 00:28:39,660 --> 00:28:40,160 うん? 605 00:28:40,160 --> 00:28:47,520 606 00:28:47,520 --> 00:28:48,260 >> もちろんです。 607 00:28:48,260 --> 00:28:51,690 だから、非常に巧妙な、正しい 解決策は次のようになり、あなたは何を知っていますか? 608 00:28:51,690 --> 00:28:53,760 私は知らないものをA 試作品ですが、私は知っている 609 00:28:53,760 --> 00:28:56,390 私はCだけであることを理解していれば ダムと下へrethinks。 610 00:28:56,390 --> 00:28:57,820 さてそれでは、それが何を望んで、それを与えてみましょう。 611 00:28:57,820 --> 00:29:01,650 それを貼り付け、のはそのコードをカットしてみましょう トップ、そして今ダウン以下の主なプッシュ。 612 00:29:01,650 --> 00:29:03,470 これも、問題を解決するだろう。 613 00:29:03,470 --> 00:29:07,409 >> しかし、あなたは非常に簡単に思い付くことができ AがBを呼び出す必要がするシナリオ、 614 00:29:07,409 --> 00:29:10,075 多分BはA.これにコールバックします 再帰と呼ばれるものであり、 615 00:29:10,075 --> 00:29:11,370 私たちは戻ってそれに来る。 616 00:29:11,370 --> 00:29:13,911 そしてそれは良いかであってもなくてもよい 事が、あなたは間違いなくできます 617 00:29:13,911 --> 00:29:15,110 このソリューションを破る。 618 00:29:15,110 --> 00:29:17,690 >> しかも、私はだろう 文体主張、 619 00:29:17,690 --> 00:29:20,760 特にあなたのプログラム これが長いと、この長くなる、 620 00:29:20,760 --> 00:29:23,064 それだけで、超便利です 上部のメイン置くために 621 00:29:23,064 --> 00:29:25,730 なぜならそれは、ほとんどのことだ プログラマは気にしようとしている。 622 00:29:25,730 --> 00:29:28,150 そしてそれは少しクリーナーですが、 ほぼ間違いなく、それを道を行うには 623 00:29:28,150 --> 00:29:30,380 私はもともとそれをやった プロトタイプでさえ 624 00:29:30,380 --> 00:29:33,396 それが少し見えますが 一見冗長。 625 00:29:33,396 --> 00:29:33,895 うん? 626 00:29:33,895 --> 00:29:36,472 627 00:29:36,472 --> 00:29:37,680 申し訳ありませんが、あなたはそれを大声で言うことができますか? 628 00:29:37,680 --> 00:29:45,650 629 00:29:45,650 --> 00:29:49,580 >> あなたはの位置を切り替えると 実装とプロトタイプ? 630 00:29:49,580 --> 00:29:51,270 だから、それは良い質問ですね。 631 00:29:51,270 --> 00:29:53,780 もしあれば、このダウンを再宣言 ここで、何が起こるか見てみましょう。 632 00:29:53,780 --> 00:29:55,530 だから私はこのダウンを入れている場合 ここに、あなたが言っている。 633 00:29:55,530 --> 00:29:57,860 634 00:29:57,860 --> 00:29:58,360 あ、ごめん。 635 00:29:58,360 --> 00:29:58,859 大声? 636 00:29:58,859 --> 00:30:02,000 637 00:30:02,000 --> 00:30:04,011 でも大きな声。 638 00:30:04,011 --> 00:30:04,760 ああ、良い質問。 639 00:30:04,760 --> 00:30:05,860 それは機能を無効にするか? 640 00:30:05,860 --> 00:30:08,901 あなたは、私は、これらすべての年後に、知っている その後、プロトタイプを入れたことがありません。 641 00:30:08,901 --> 00:30:13,810 それでは、関数-1を作るやらせる それをやった。 642 00:30:13,810 --> 00:30:15,279 >> [つぶやき] 643 00:30:15,279 --> 00:30:16,320 DAVID J.マラン:ああ、待ってください。 644 00:30:16,320 --> 00:30:17,944 私たちはまだトップにすべてを我慢する必要があります。 645 00:30:17,944 --> 00:30:21,400 私がいたらそれでは、ここにこれをやらせる 正しくあなたの質問を理解する。 646 00:30:21,400 --> 00:30:24,700 私には、すべてのものを入れている 主上記の試作品、 647 00:30:24,700 --> 00:30:28,180 しかし、私はプロトタイプを入れている 実装以下に。 648 00:30:28,180 --> 00:30:33,190 >> 私はものを作るのであれば、私が得ている バックerror--未使用変数n。 649 00:30:33,190 --> 00:30:37,280 650 00:30:37,280 --> 00:30:37,860 ああ、そこ。 651 00:30:37,860 --> 00:30:38,360 ありがとう。 652 00:30:38,360 --> 00:30:39,430 見てみましょう、私たちはこのを取り除く。 653 00:30:39,430 --> 00:30:41,304 つまり、別のバグです それでは、それを無視してみましょう。 654 00:30:41,304 --> 00:30:43,910 本当にすぐにこれをリメイクしてみましょう。 655 00:30:43,910 --> 00:30:48,100 >> [OK]を、ので、データの引数ではありません フォーマット文字列で使用される 656 00:30:48,100 --> 00:30:52,310 N--ああ、それはあるためです 私はここで、これらに変更されました。 657 00:30:52,310 --> 00:30:55,885 すべての権利、私たちはどのような答えを知っている to--大丈夫だろう、ここに私達は行く。 658 00:30:55,885 --> 00:31:00,560 ああ、ポジティブに感謝。 659 00:31:00,560 --> 00:31:03,430 すべての権利、私はこのコードを修正する after--この特定のバグを無視 660 00:31:03,430 --> 00:31:08,300 これは、それが動作するwas--以来答えです。 661 00:31:08,300 --> 00:31:11,560 >> だから、上書きされることはありません 何あなただけやった。 662 00:31:11,560 --> 00:31:14,800 私は、コンパイラを疑う そのような方法で書かれている 663 00:31:14,800 --> 00:31:18,420 それはあなたのプロトタイプを無視していること ボディので、いわば、 664 00:31:18,420 --> 00:31:20,922 機能については既に持って 高アップを実現されて。 665 00:31:20,922 --> 00:31:23,380 私は実際に相談しなければならないでしょう コンパイラのマニュアル 666 00:31:23,380 --> 00:31:26,171 他のがあるかどう理解する 含意が、一目見ただけで 667 00:31:26,171 --> 00:31:29,290 ちょうどしようと実験することで、 は影響はなさそうです。 668 00:31:29,290 --> 00:31:30,730 良い質問。 669 00:31:30,730 --> 00:31:33,660 >> それでは、今押し進める動いてみましょう 離れた副作用からの 670 00:31:33,660 --> 00:31:36,660 のような何かをする関数です 視覚的にはprintfを使って、画面に、 671 00:31:36,660 --> 00:31:38,090 が、値を返さない。 672 00:31:38,090 --> 00:31:41,550 とリターンを持つ関数 私たちのような値だけをいくつか見ました。 673 00:31:41,550 --> 00:31:45,350 私たちはすでに、スコープのこの概念を見た 私たちは何度も何度も、これを表示されます。 674 00:31:45,350 --> 00:31:47,210 しかし、今のために、再び、 経験則を使用 675 00:31:47,210 --> 00:31:51,410 変数は、使用することができること 最近開いた内部 676 00:31:51,410 --> 00:31:54,350 そして、私たちのように中括弧を閉じた その特定の例で見た。 677 00:31:54,350 --> 00:31:56,910 >> そして、あなたは、指摘したように ability--があります 678 00:31:56,910 --> 00:32:00,040 これらの問題のいくつかを解決することができ グローバル変数を置くことによって、 679 00:32:00,040 --> 00:32:01,290 ファイルの最上部で。 680 00:32:01,290 --> 00:32:03,630 しかし、ほとんどすべての場合において 私たちはその上に難色を示すだろう、 681 00:32:03,630 --> 00:32:06,170 実際にさえ行かない 今のところ、その溶液中に。 682 00:32:06,170 --> 00:32:09,890 だから今のために、お持ち帰りはということです 変数は、スコープのこの概念を持っている。 683 00:32:09,890 --> 00:32:13,430 >> しかし、今のは、別のを見てみましょう 実際に見ての乾燥方法 684 00:32:13,430 --> 00:32:15,810 いくつかの非常に興味深いで 実装の詳細。 685 00:32:15,810 --> 00:32:17,810 どのように情報を表すことがあります。 686 00:32:17,810 --> 00:32:20,370 そして、私たちはすでにこれを見た クラスの最初の週に。 687 00:32:20,370 --> 00:32:23,320 バイナリを見ると、と 小数の自分を思い出させて。 688 00:32:23,320 --> 00:32:28,310 >> しかし、Cが持っていることを先週からリコール 複数の異なるデータ型と房、 689 00:32:28,310 --> 00:32:30,600 しかし最も有用なもの 今のところこれらの可能性があります。 690 00:32:30,600 --> 00:32:36,030 char型、または文字、どうなる 1バイト、または8ビットの合計であると。 691 00:32:36,030 --> 00:32:40,060 そして、それは大きさと言うことだ char型のちょうど1バイトです。 692 00:32:40,060 --> 00:32:45,370 バイトは8ビットであるので、これはあることを意味 私たちはどのように多くの文字を表現することができます。 693 00:32:45,370 --> 00:32:47,320 どのように多くの文字や キーボード上の記号 694 00:32:47,320 --> 00:32:49,210 私たちは1バイトまたは8ビットを持っている場合。 695 00:32:49,210 --> 00:32:51,546 戻っ週ゼロに考えてみてください。 696 00:32:51,546 --> 00:32:53,420 あなたが8ビットを持っている場合は、 どのように多くの合計値 697 00:32:53,420 --> 00:32:55,503 あなたは表すことができます 0と1のパターンは? 698 00:32:55,503 --> 00:32:58,170 699 00:32:58,170 --> 00:33:00,260 それよりひとつ選ぶ。 700 00:33:00,260 --> 00:33:03,490 だから、256総よろしければ ゼロからカウントを開始。 701 00:33:03,490 --> 00:33:07,120 だから、8 bits--のでもし持っている場合 、再びここに私たちのバイナリ球根を持っていた 702 00:33:07,120 --> 00:33:12,180 私たちは上の電球を回すことができる 256ユニークなパターンのいずれかでのオフ。 703 00:33:12,180 --> 00:33:13,640 >> さて、これは少し問題がある。 704 00:33:13,640 --> 00:33:16,857 英語の場合ほどではないと ロマンス言語が、確かに 705 00:33:16,857 --> 00:33:19,190 あなたが紹介したときに、用 インスタンス、アジア言語、どの 706 00:33:19,190 --> 00:33:22,580 のようなよりもはるかに多くのシンボルを持っている アルファベットの26文字。 707 00:33:22,580 --> 00:33:24,390 私たちは、実際に必要になる場合があります 1バイトを超える。 708 00:33:24,390 --> 00:33:28,240 そしてありがたいことにある 近年の社会を持ってい 709 00:33:28,240 --> 00:33:31,040 使用する他の基準を採用し 充電あたり1バイトを超える。 710 00:33:31,040 --> 00:33:34,210 >> しかし、今C言語で、デフォルトは ちょうど1バイトまたは8ビットである。 711 00:33:34,210 --> 00:33:38,195 整数は、一方、4です バイトは、それ以外の場合は32ビットとして知られている。 712 00:33:38,195 --> 00:33:41,320 どちらが可能な限り最大何を意味し 私たちはint型で表すことができ数 713 00:33:41,320 --> 00:33:41,820 どうやら? 714 00:33:41,820 --> 00:33:44,426 715 00:33:44,426 --> 00:33:45,050 億。 716 00:33:45,050 --> 00:33:46,760 だから、40億与えるか、または取ることです。 717 00:33:46,760 --> 00:33:49,840 2第32回パワーに、私たちの場合 負の数値を負いません 718 00:33:49,840 --> 00:33:52,530 ちょうどすべての肯定を使用 数字は、それが40億だ 719 00:33:52,530 --> 00:33:53,730 可能性を与えるか、または取る。 720 00:33:53,730 --> 00:33:57,890 フロートは、一方、異なるタイプである それはまだ多数のC.データ型の、 721 00:33:57,890 --> 00:33:58,990 それは実数です。 722 00:33:58,990 --> 00:34:00,660 小数点を何か。 723 00:34:00,660 --> 00:34:03,000 そして、それはことが判明 Cも4バイトを使用しています 724 00:34:03,000 --> 00:34:05,340 浮動小数点値を表します。 725 00:34:05,340 --> 00:34:09,420 >> 残念ながら、どのように多くの浮動 ポイント値が世界にありますか? 726 00:34:09,420 --> 00:34:11,582 どのように多くの実数がありますか? 727 00:34:11,582 --> 00:34:13,540 無限があります 数、そのことについては 728 00:34:13,540 --> 00:34:15,164 整数の無限の数があります。 729 00:34:15,164 --> 00:34:18,070 だから私たちは一種の既にしている ここに自分の穴を掘る。 730 00:34:18,070 --> 00:34:21,780 これにより明らかにcomputers--中 them--にC言語で書かれたプログラム以上 731 00:34:21,780 --> 00:34:24,110 のみと高く数えることができます 40億与えるか、または取る、 732 00:34:24,110 --> 00:34:26,260 浮動小数点値 唯一明らかにすることができます 733 00:34:26,260 --> 00:34:28,330 精度のある有限量を持っている。 734 00:34:28,330 --> 00:34:30,810 非常に多くの数字の後にのみ 彼らの小数点以下。 735 00:34:30,810 --> 00:34:32,822 >> もちろん、もし、なぜなら あなただけの32ビットを有する、 736 00:34:32,822 --> 00:34:36,030 私たちはついて行くつもりだかわからない おそらく本当numbers--を表す 737 00:34:36,030 --> 00:34:37,409 パターンの異なるタイプ。 738 00:34:37,409 --> 00:34:40,030 しかし、有限のは確かにありま​​す このようなパターンの数は、 739 00:34:40,030 --> 00:34:41,830 従ってここでも、これは問題がある。 740 00:34:41,830 --> 00:34:43,710 >> 今、私たちは少し問題を回避することができる。 741 00:34:43,710 --> 00:34:45,710 あなたはフロートを使用しない場合は、 あなたは二重を使用することができます 742 00:34:45,710 --> 00:34:50,230 C言語で、これはあなたに8バイトを与える ゼロのやり方より可能なパターンである 743 00:34:50,230 --> 00:34:50,730 ともの。 744 00:34:50,730 --> 00:34:55,199 しかし、それは起こっている、これはまだ有限だ あなたがソフトウェアを書く場合には問題があることが 745 00:34:55,199 --> 00:34:57,670 グラフィックスのための、または空想のために 数式。 746 00:34:57,670 --> 00:35:00,410 だから、実際にはお勧めします それよりも大きなカウントアップします。 747 00:35:00,410 --> 00:35:05,640 長いlong--愚かnamed-- また、8バイト、または64ビットであり、 748 00:35:05,640 --> 00:35:10,260 これは、intとして2倍の長さ そしてそれは、長い整数値のためです。 749 00:35:10,260 --> 00:35:15,655 >> 楽しいfact-- intは4バイトであるかの ロングは、一般的にC言語でどのくらいですか? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 また、4バイトが、 長い長い、8バイトである 752 00:35:21,560 --> 00:35:23,050 これは歴史的な理由である。 753 00:35:23,050 --> 00:35:26,450 >> しかし、今持ち帰り ただ、そのデータが持っているである 754 00:35:26,450 --> 00:35:29,625 だcomputer--で表現される 電気と物理デバイス、 755 00:35:29,625 --> 00:35:32,190 それは一般的に運転している これらの零点とones-- 756 00:35:32,190 --> 00:35:34,320 精度の有限量の。 757 00:35:34,320 --> 00:35:35,620 だから問題は、その後何ですか? 758 00:35:35,620 --> 00:35:37,480 >> さて問題があります 整数オーバーフロー。 759 00:35:37,480 --> 00:35:39,780 C言語ではなくだけではなく 一般のコンピュータ。 760 00:35:39,780 --> 00:35:42,590 例えば、この場合 バイトはbit--価値がある 761 00:35:42,590 --> 00:35:45,120 これは、すべての8 bit--ある場合 そのうちのナンバーワンである。 762 00:35:45,120 --> 00:35:47,300 これは何番です 私たちが想定した場合に相当 763 00:35:47,300 --> 00:35:50,730 それは、バイナリ内のすべての正の値ですか? 764 00:35:50,730 --> 00:35:54,410 >> 255、それは256から、ではない ゼロが最も低い数字です。 765 00:35:54,410 --> 00:35:56,760 だから、255が最も高い 1が、問題 766 00:35:56,760 --> 00:36:00,330 私がしたかったとしている この変数をインクリメントすること 767 00:36:00,330 --> 00:36:04,030 合計8ビットを使用している 私はそれをインクリメントしたい場合。 768 00:36:04,030 --> 00:36:07,160 >> さて私は追加や否や これらのもののすべてに1、 769 00:36:07,160 --> 00:36:10,500 あなたはおそらくちょうどvisually--想像することができます decimals--用いたものを運ぶような 770 00:36:10,500 --> 00:36:12,300 何かが左に流れるようになるだろう。 771 00:36:12,300 --> 00:36:15,590 そして実際、私は番号を追加した場合 バイナリーで何が起こるか、これに1、 772 00:36:15,590 --> 00:36:17,670 それがゼロに戻るオーバーフローするということです。 773 00:36:17,670 --> 00:36:21,730 >> だから、唯一のint型ではないuse--場合、 単一のバイトは整数をカウントする 774 00:36:21,730 --> 00:36:27,170 プログラム中、できるだけ早くdefault--による あなたは、250に到達する251、252、253、254、 775 00:36:27,170 --> 00:36:32,710 255-- 0は、255の後に来る おそらく何これはありません 776 00:36:32,710 --> 00:36:34,790 ユーザーが期待するようになるだろう。 777 00:36:34,790 --> 00:36:39,620 >> さて一方の点の世界を浮遊中、 あなたも同じような問題を抱えている。 778 00:36:39,620 --> 00:36:42,670 最大のnumber--とそんなにはありません が、それはまだ問題です。 779 00:36:42,670 --> 00:36:45,360 しかし、精度の量 あなたが表現することができます。 780 00:36:45,360 --> 00:36:49,490 それでは、この例を見てみましょう ここにも、今日のソースcode--から 781 00:36:49,490 --> 00:36:52,070 フロート0.c。 782 00:36:52,070 --> 00:36:54,280 >> そして、それはスーパーだ気付く 簡単なプログラムという 783 00:36:54,280 --> 00:36:56,580 明らかにどのような値をプリントアウトする必要があり? 784 00:36:56,580 --> 00:37:00,777 785 00:37:00,777 --> 00:37:04,110 これが印刷しようとしている賭け何をすべきか 新しい構文のビットがありますにもかかわらず、 786 00:37:04,110 --> 00:37:05,540 ここに? 787 00:37:05,540 --> 00:37:06,700 だから、うまくいけば0.1。 788 00:37:06,700 --> 00:37:10,000 したがって、1つの10分に相当 私は10で割った1をやっているので。 789 00:37:10,000 --> 00:37:12,430 私は答えを格納しています Fと呼ばれる変数に。 790 00:37:12,430 --> 00:37:15,850 この変数は、float型のどちらである 私は提案されたキーワードが存在している。 791 00:37:15,850 --> 00:37:18,910 >> 私たちは前にこれを見たが、いませんでした これはprintfの中できちんとした方法の一種である 792 00:37:18,910 --> 00:37:22,110 何桁を指定するよう 小数点の後に見てみたい。 793 00:37:22,110 --> 00:37:25,020 だから、この表記はただ意味 そのここにプレースホルダです。 794 00:37:25,020 --> 00:37:27,900 これは、浮動小数点のためだ 値、ああ、ところで、 795 00:37:27,900 --> 00:37:31,389 小数点がでそれを表示 小数点以下1番号。 796 00:37:31,389 --> 00:37:33,180 だから、数だ 有効桁数、 797 00:37:33,180 --> 00:37:34,650 そうしたいかもしれないと、話す。 798 00:37:34,650 --> 00:37:40,450 >> だから私が先に行くとやらせる ./float-0、浮動0にする、 799 00:37:40,450 --> 00:37:46,660 どうやら1 10で除した0.0です。 800 00:37:46,660 --> 00:37:47,760 さて、なぜなのでしょうか? 801 00:37:47,760 --> 00:37:51,380 >> さて、もう一度、コンピュータが取っている 文字通り私、私は書かれている1 802 00:37:51,380 --> 00:37:56,680 と私は10を書き込まれ、どのような推測を取る これら二つの場合に想定データ型です 803 00:37:56,680 --> 00:37:58,440 値は? 804 00:37:58,440 --> 00:38:00,970 int型は、それが技術的にだ 少し違った。 805 00:38:00,970 --> 00:38:04,150 それは、典型的には長いですが、それはだ 最終的には、積分値。 806 00:38:04,150 --> 00:38:06,030 未浮動小数点値。 807 00:38:06,030 --> 00:38:09,456 >> この場合ということである int型であり、これはintで、 808 00:38:09,456 --> 00:38:11,830 問題は、コンピュータということです 機能がありません 809 00:38:11,830 --> 00:38:13,680 でも、その小数点を格納する。 810 00:38:13,680 --> 00:38:16,430 だから、あなたは1分けない場合 10で整数を使用 811 00:38:16,430 --> 00:38:20,950 と分母の両方に 分母は、答えは0.1である必要があります。 812 00:38:20,950 --> 00:38:24,930 しかしcomputer--理由 これらはintegers--です 813 00:38:24,930 --> 00:38:27,430 0.1で何をすべきか分かっていない。 814 00:38:27,430 --> 00:38:30,010 >> だから、はっきりと何をしているのですか? 815 00:38:30,010 --> 00:38:33,120 それはちょうど、それを捨てるだ と私は最終的に何を見ている 816 00:38:33,120 --> 00:38:38,830 私はあることを主張したという理由だけで0.0です printfのは私の小数点が表示されます。 817 00:38:38,830 --> 00:38:41,740 しかし、問題はもしあなたということです 整数整数を分割、 818 00:38:41,740 --> 00:38:44,347 あなたは定義によりget--ます の整数をC--。 819 00:38:44,347 --> 00:38:46,680 そして、それは何をするつもりはない 素敵で便利なもの 820 00:38:46,680 --> 00:38:49,040 それラウンドまでの様 1上下に最も近い。 821 00:38:49,040 --> 00:38:51,860 それは、切り捨てるために起こっている 小数点以下はすべて。 822 00:38:51,860 --> 00:38:54,030 >> だから直感的に、 おそらく修正何ですか? 823 00:38:54,030 --> 00:38:55,351 ここで最も簡単な修正は何ですか? 824 00:38:55,351 --> 00:38:55,850 うん? 825 00:38:55,850 --> 00:39:00,570 826 00:39:00,570 --> 00:39:01,100 その通り。 827 00:39:01,100 --> 00:39:04,200 なぜ私たちは、これらを扱わない 効果的に浮動小数点値 828 00:39:04,200 --> 00:39:05,860 山車やダブルスにしてしまう。 829 00:39:05,860 --> 00:39:10,500 そして今、私が作る行うと山車-0、 または私は山車-1をコンパイルした場合、 830 00:39:10,500 --> 00:39:12,570 と同一である だけで何を提案した。 831 00:39:12,570 --> 00:39:16,400 そして今、私は今、私は私の0.1を取得し、山車-0を実行します。 832 00:39:16,400 --> 00:39:17,234 >> さて、これは素晴らしいです。 833 00:39:17,234 --> 00:39:19,441 しかし、今私は何をするつもりです 少し違った。 834 00:39:19,441 --> 00:39:22,280 私は実際に何を見て興味 ボンネットの下に起こって、 835 00:39:22,280 --> 00:39:26,050 そして私はこれを印刷するつもりです アウト28小数点以下の桁。 836 00:39:26,050 --> 00:39:29,730 私は実際に見てみたい 0.1000-- infinite-- 837 00:39:29,730 --> 00:39:32,710 その0.1の後に[聞こえない] 27ゼロ。 838 00:39:32,710 --> 00:39:34,740 >> まあそれはだかどうかを見てみましょう 私は実際に何を得る。 839 00:39:34,740 --> 00:39:39,430 山車-0、同じファイルを作成します。 840 00:39:39,430 --> 00:39:41,150 ./floats-0。 841 00:39:41,150 --> 00:39:44,380 それでは劇的な答えをズームインしてみましょう。 842 00:39:44,380 --> 00:39:49,980 すべてのこの時間は、あなたが考えてきた 10で割って1は10%、または0.1である。 843 00:39:49,980 --> 00:39:50,810 そうではありません。 844 00:39:50,810 --> 00:39:53,210 少なくともこれまでのように コンピュータの心配。 845 00:39:53,210 --> 00:39:57,060 >> [OK]をwhy--さて、それは完全だ 10で割った嘘1は0.1である。 846 00:39:57,060 --> 00:39:59,710 しかし、それはありませんwhy-- 持ち帰り今日。 847 00:39:59,710 --> 00:40:04,010 では、なぜコンピュータは、考えていない 客室内に私たちのすべてとは異なり、 848 00:40:04,010 --> 00:40:06,870 10で割った値1は、その 実際にその狂気値はありますか? 849 00:40:06,870 --> 00:40:10,620 どうやら何コンピューターは何ですか? 850 00:40:10,620 --> 00:40:12,490 なにそれ? 851 00:40:12,490 --> 00:40:13,785 >> それは、それ自体が、オーバーフローではありません。 852 00:40:13,785 --> 00:40:15,910 オーバーフロー時に、典型的には、 あなたが値を包み込む。 853 00:40:15,910 --> 00:40:18,970 これは、不正確、この問題だ 浮動小数点値の 854 00:40:18,970 --> 00:40:22,220 あなただけの32を持っている場合、 または多分64ビット。 855 00:40:22,220 --> 00:40:25,230 しかし、無限があるかどうか 本当numbers--数 856 00:40:25,230 --> 00:40:27,940 小数点付き数字 と数字は確かにthereafter-- 857 00:40:27,940 --> 00:40:29,380 あなたはそれらのすべてを表すことはできません。 858 00:40:29,380 --> 00:40:32,870 だから、コンピュータが与えている 私達最も近い一致 859 00:40:32,870 --> 00:40:37,090 値には、それを使用して表すことができ 私は実際に必要な値に多くのビット、 860 00:40:37,090 --> 00:40:38,690 これ0.1である。 861 00:40:38,690 --> 00:40:40,685 >> 残念ながら、あなたの場合 数学をやって起動するか、または 862 00:40:40,685 --> 00:40:44,360 フローティングこれらの種類を含む開始 重要なprograms--におけるポイント値 863 00:40:44,360 --> 00:40:46,770 金融ソフトウェア、 軍事software--何でも 864 00:40:46,770 --> 00:40:49,090 ここで、認識がある おそらくかなり重要な。 865 00:40:49,090 --> 00:40:51,520 そして、あなたは追加を開始 このような数字、および開始 866 00:40:51,520 --> 00:40:54,050 そのソフトウェアを実行している 本当に大規模な入力を持つ 867 00:40:54,050 --> 00:40:56,890 または数時間またはロットのロットについて 年の日またはロットの、 868 00:40:56,890 --> 00:41:01,060 これらの小さな小さなミス 確かに時間をかけてまで追加することができます。 869 00:41:01,060 --> 00:41:04,252 >> さて余談として、あなたがしている場合は、これまで スーパーマン3またはオフィススペース見 870 00:41:04,252 --> 00:41:05,960 あなたが思い出すかもしれません どのようにそれらの人が盗んだ 871 00:41:05,960 --> 00:41:08,668 自分のコンピュータからのたくさんのお金 浮動小数点値を用いて 872 00:41:08,668 --> 00:41:11,290 と少し足し 余り、うまくいけば、その映画 873 00:41:11,290 --> 00:41:12,390 今より理にかなっています。 874 00:41:12,390 --> 00:41:14,930 これは、彼らが何であったかである その映画の中をほのめかして。 875 00:41:14,930 --> 00:41:16,710 そのほとんどの事実 企業は見ていないだろう 876 00:41:16,710 --> 00:41:18,600 特定の番号の後に 小数点以下の桁、 877 00:41:18,600 --> 00:41:20,009 が、これらは、セントの画分である。 878 00:41:20,009 --> 00:41:22,550 だから、それらを追加を開始 あなたはたくさんのお金を作り始める 879 00:41:22,550 --> 00:41:23,424 あなたの銀行口座にある。 880 00:41:23,424 --> 00:41:25,160 だから、オフィススペースを説明だ。 881 00:41:25,160 --> 00:41:28,220 >> 今、残念ながら越えて そこにオフィススペース、 882 00:41:28,220 --> 00:41:31,794 いくつかの合法的に厄介である そして重大な影響 883 00:41:31,794 --> 00:41:33,710 これらの種類の 設計上の決定の基礎となる、 884 00:41:33,710 --> 00:41:35,990 理由の実際1 私たちは途中でCを使う 885 00:41:35,990 --> 00:41:39,640 あなたが本当にこの地になるようです。 コンピュータがどのように機能するかを理解するまで、 886 00:41:39,640 --> 00:41:42,440 どのようにソフトウェアの仕組みと、そうでない 当然の何かを取る。 887 00:41:42,440 --> 00:41:45,820 >> そして実際、残念ながら、でも、と その基本的理解、 888 00:41:45,820 --> 00:41:47,370 私たち人間は間違いを犯す。 889 00:41:47,370 --> 00:41:51,310 そして、私は私が共有したいと思ったことはある この8分間のビデオは、ここで撮影 890 00:41:51,310 --> 00:41:56,980 ある現代の驚異のエピソードから、 物事の仕組みに関する教育ショー 891 00:41:56,980 --> 00:42:00,370 それは二つの絵を描く の際に不適切な使用 892 00:42:00,370 --> 00:42:02,540 との理解 浮動小数点値 893 00:42:02,540 --> 00:42:05,610 いくつかの重要なにつながった 残念な結果。 894 00:42:05,610 --> 00:42:06,363 それでは見てみましょう。 895 00:42:06,363 --> 00:42:07,029 [ビデオ再生] 896 00:42:07,029 --> 00:42:11,290 - 私たちは現在、エンジニアリング」に戻る 現代の驚異上の災害」。 897 00:42:11,290 --> 00:42:12,940 コンピュータ。 898 00:42:12,940 --> 00:42:15,580 私たちは、すべて受け入れるようになってきた 頻繁にイライラする問題という 899 00:42:15,580 --> 00:42:20,960 them--バグ、ウイルスを持って、 小規模な価格のためのソフトウェアglitches-- 900 00:42:20,960 --> 00:42:23,100 便宜のために支払う。 901 00:42:23,100 --> 00:42:27,770 しかし、ハイテクとハイスピー​​ド 軍事·宇宙計画アプリケーション、 902 00:42:27,770 --> 00:42:32,780 できる最小の問題 災​​害に拡大される。 903 00:42:32,780 --> 00:42:38,880 >> 1996年6月4日には、科学者が用意 無人のアリアン5ロケットを起動します。 904 00:42:38,880 --> 00:42:41,190 それは科学的運んでいた 設計された人工衛星 905 00:42:41,190 --> 00:42:44,570 正確にどのように確立する 地球の磁場の相互作用 906 00:42:44,570 --> 00:42:47,380 太陽風と。 907 00:42:47,380 --> 00:42:50,580 ロケットのために建てられた 欧州宇宙機関、 908 00:42:50,580 --> 00:42:54,400 その施設からリフトオフ フランス領ギアナの海岸に。 909 00:42:54,400 --> 00:42:57,520 >> 約37秒-Atへ 飛行、まず彼ら 910 00:42:57,520 --> 00:42:59,070 気づいた何かが間違っているつもりだった。 911 00:42:59,070 --> 00:43:02,240 ノズルは、旋回されたことを ようにして、彼らは本当にいけない。 912 00:43:02,240 --> 00:43:06,550 飛行中に40秒の周囲には、 明らかに車両がトラブルにあった、 913 00:43:06,550 --> 00:43:08,820 彼らが作ったとき、それはだ それを破壊することを決定。 914 00:43:08,820 --> 00:43:12,370 レンジ安全管理者、と 途方もないガッツは、ボタンを押した 915 00:43:12,370 --> 00:43:18,030 それができる前に、ロケットを爆破 公共の安全に危険になる。 916 00:43:18,030 --> 00:43:21,010 >> - これは処女だった アリアン5の航海、 917 00:43:21,010 --> 00:43:23,920 そしてその破壊がかかった なぜなら傷の場所 918 00:43:23,920 --> 00:43:25,932 ロケットのソフトウェアに組み込まれ。 919 00:43:25,932 --> 00:43:27,640 上-The問題 アリアンはありました 920 00:43:27,640 --> 00:43:30,500 必要な数であった 表現する64ビット、 921 00:43:30,500 --> 00:43:33,560 彼らは変換したい 16ビット数のこと。 922 00:43:33,560 --> 00:43:36,820 彼らは数を想定 非常に大きなことになるだろうことはなかった。 923 00:43:36,820 --> 00:43:40,940 その中で、これらの数字の最も 64ビットの数値はゼロだった。 924 00:43:40,940 --> 00:43:42,450 彼らは間違っていた。 925 00:43:42,450 --> 00:43:45,000 >> 1の-Theできないこと 受け入れるソフトウェアプログラム 926 00:43:45,000 --> 00:43:49,460 によって生成された番号の種類 別の障害の根本にあった。 927 00:43:49,460 --> 00:43:54,260 ソフトウェア開発はなっていた 新技術の非常に高価な部品。 928 00:43:54,260 --> 00:43:57,060 アリアン4ロケットは持っていた 非常に成功して。 929 00:43:57,060 --> 00:44:01,600 用に作成したソフトウェアのそんなに それはまた、アリアン5で使用した。 930 00:44:01,600 --> 00:44:04,790 >> -The基本的な問題 ことは、アリアン5であった。 931 00:44:04,790 --> 00:44:11,200 faster--、より高速に加速され、 ソフトウェアは、その会計処理していなかった。 932 00:44:11,200 --> 00:44:14,910 >> ロケットの-The破壊 巨大な財政の災害だった。 933 00:44:14,910 --> 00:44:18,630 微小なソフトウェアエラーが原因のすべて。 934 00:44:18,630 --> 00:44:21,160 しかし、これは最初ではなかった 時間データ変換の問題 935 00:44:21,160 --> 00:44:24,770 現代のロケット技術を悩ませていた。 936 00:44:24,770 --> 00:44:28,020 >> 開始と1991 -In 第一次湾岸戦争の、 937 00:44:28,020 --> 00:44:30,540 パトリオット·ミサイル 似たような種類を経験した 938 00:44:30,540 --> 00:44:32,465 番号変換の問題。 939 00:44:32,465 --> 00:44:36,760 その結果、28 people-- 28 アメリカンsoldiers--が殺された、 940 00:44:36,760 --> 00:44:39,010 約百他は負傷。 941 00:44:39,010 --> 00:44:42,830 ときになっていたパトリオット、 着信スカッドから保護するために、 942 00:44:42,830 --> 00:44:45,780 ミサイルを発射することができなかった。 943 00:44:45,780 --> 00:44:51,610 >> 毎期イラクはクウェート、アメリカを侵略 初期の1991年に砂漠の嵐を立ち上げ、 944 00:44:51,610 --> 00:44:55,720 パトリオットミサイル電池が配備されました サウジアラビアとイスラエルを守るために 945 00:44:55,720 --> 00:44:59,180 イラクのスカッドミサイル攻撃から。 946 00:44:59,180 --> 00:45:03,080 パトリオットは、米国の中​​距離である 対空システム 947 00:45:03,080 --> 00:45:06,530 レイセオン社製。 948 00:45:06,530 --> 00:45:09,500 >> パトリオットの-Theサイズ インターセプターitself-- 949 00:45:09,500 --> 00:45:14,705 それは約約20フィートの長さですが、 それは約2000ポンドの重量を量る。 950 00:45:14,705 --> 00:45:19,090 そしてそれは、約の弾頭を運ぶ 私はそれがおよそ150ポンドだと思います。 951 00:45:19,090 --> 00:45:23,880 そして弾頭自体はある 高性能爆薬、どの 952 00:45:23,880 --> 00:45:26,700 彼の周りの断片を持っています。 953 00:45:26,700 --> 00:45:31,630 だから、弾頭​​のケーシングは、 散弾のよ​​うに機能するように設計されています。 954 00:45:31,630 --> 00:45:34,040 >> -Theミサイルを搭載しています コンテナごとに4つ、 955 00:45:34,040 --> 00:45:37,170 そしてセミトレーラーによって輸送される。 956 00:45:37,170 --> 00:45:44,880 >> -Theパトリオットアンチミサイルシステム 今は、少なくとも20年以上さかのぼる。 957 00:45:44,880 --> 00:45:48,380 もともとは設計されました 防空ミサイルなど 958 00:45:48,380 --> 00:45:50,810 敵の飛行機を撃墜する。 959 00:45:50,810 --> 00:45:54,410 第一次湾岸戦争で その戦争が上に来たとき、 960 00:45:54,410 --> 00:45:59,650 陸軍は、それを使用したい スカッドではなく、飛行機を撃墜。 961 00:45:59,650 --> 00:46:03,580 イラク空軍はあった 問題のあまりいない、 962 00:46:03,580 --> 00:46:06,590 しかし陸軍はスカッドを心配していた。 963 00:46:06,590 --> 00:46:10,120 だから、彼らはしみました パトリオットをアップグレードしてください。 964 00:46:10,120 --> 00:46:12,740 >> 敵を-Intercepting マッハ5で走行ミサイル 965 00:46:12,740 --> 00:46:15,670 十分に挑戦するつもりだった。 966 00:46:15,670 --> 00:46:18,440 しかし、ときパトリオット サービスに突入し、 967 00:46:18,440 --> 00:46:22,580 陸軍は知らなかった イラクの変更その 968 00:46:22,580 --> 00:46:25,880 ほぼ自分のスカッドを作った それまでは不可能。 969 00:46:25,880 --> 00:46:30,690 >> スカッドは - 何が起こっている 不安定であった中で来ていた。 970 00:46:30,690 --> 00:46:32,000 彼らはグラグラだった。 971 00:46:32,000 --> 00:46:37,210 この理由は、Iraqis--た 600キロ出得るために 972 00:46:37,210 --> 00:46:41,680 300キロの範囲のmissile-- フロント弾頭から体重を取った、 973 00:46:41,680 --> 00:46:43,340 そして弾頭を軽量化。 974 00:46:43,340 --> 00:46:48,490 だから今パトリオットのが来てしようとしている スカッドで、time--の最も 975 00:46:48,490 --> 00:46:52,880 の圧倒的多数 time--それだけでスカッドによって飛んでいくのだ。 976 00:46:52,880 --> 00:46:57,120 >> パトリオットシステムオペレータ-once パトリオットは、そのターゲットを逃したが実現、 977 00:46:57,120 --> 00:47:01,630 彼らはパトリオットの弾頭を爆発させた それ可能であれば死傷者を避けるために 978 00:47:01,630 --> 00:47:04,440 地面に落下させた。 979 00:47:04,440 --> 00:47:08,700 >> - すなわち、ほとんどの人が見たものだった 空には大きな火の玉のような、 980 00:47:08,700 --> 00:47:14,180 とと誤解 スカッドの弾頭の切片。 981 00:47:14,180 --> 00:47:18,020 >> 夜空での-Although、ペイトリオッツ 正常に破壊されるようで 982 00:47:18,020 --> 00:47:23,280 スカッドは、ダーランである可能性があり そのパフォーマンスについては間違いありません。 983 00:47:23,280 --> 00:47:27,930 ありパトリオットのレーダーシステム 着信スカッドのトラックを失った 984 00:47:27,930 --> 00:47:30,260 起因発売したことがない ソフトウェアの欠陥に。 985 00:47:30,260 --> 00:47:34,060 986 00:47:34,060 --> 00:47:38,880 >> それは、最初に発見イスラエルだった 長いシステムがオンであったこと、 987 00:47:38,880 --> 00:47:41,130 長い時間の不一致がなりました。 988 00:47:41,130 --> 00:47:44,770 エンベデッド·クロックのために システムのコンピュータ内の。 989 00:47:44,770 --> 00:47:48,190 >> - 約2週間前 ダーランにおける悲劇、 990 00:47:48,190 --> 00:47:50,720 イスラエル人に報告 国防総省 991 00:47:50,720 --> 00:47:52,410 というシステムは、時間を失っていた。 992 00:47:52,410 --> 00:47:54,410 約8時間後 実行している、彼らは気づいた 993 00:47:54,410 --> 00:47:57,690 システムのとなっておりますことを 著しく精度が低い。 994 00:47:57,690 --> 00:48:01,850 国防総省は、ことで対応 パトリオット電池のすべてを伝える 995 00:48:01,850 --> 00:48:04,800 システムのままにしないように 長い時間のため。 996 00:48:04,800 --> 00:48:06,980 彼らは長い時間が何であったか言ったことはありません。 997 00:48:06,980 --> 00:48:09,140 8時間、10時間、数千時間。 998 00:48:09,140 --> 00:48:11,300 誰も知らなかった。 999 00:48:11,300 --> 00:48:13,320 >> -Theパトリオットバッテリー 兵舎に駐屯 1000 00:48:13,320 --> 00:48:18,310 ダーランとその欠陥のある内部で クロックは、100時間以上にあった 1001 00:48:18,310 --> 00:48:21,520 2月25日夜。 1002 00:48:21,520 --> 00:48:25,792 >> - それは、正確さに時間を追跡 の10分の1秒程度。 1003 00:48:25,792 --> 00:48:27,950 第二の今十 興味深い数値です 1004 00:48:27,950 --> 00:48:31,850 それは表現できないため、 バイナリ形式で正確に、どの 1005 00:48:31,850 --> 00:48:36,500 それが正確に表現できないことを意味 あらゆる現代のデジタルコンピュータ内。 1006 00:48:36,500 --> 00:48:41,070 それは信じがたいですが、 例としてこれを使用しています。 1007 00:48:41,070 --> 00:48:43,420 >> それでは数三分の一を見てみましょう。 1008 00:48:43,420 --> 00:48:47,330 三分の一にすることはできません 正確に10進数で表記された。 1009 00:48:47,330 --> 00:48:52,060 三分の一は0.333である 無限大のために起こっている。 1010 00:48:52,060 --> 00:48:56,420 でそれをする方法はありません 進数で絶対精度。 1011 00:48:56,420 --> 00:48:59,530 それはまさに問題のようなものだ それは愛国者で起こった。 1012 00:48:59,530 --> 00:49:04,040 長いシステムが実行された、 さらに悪い時エラーがなりました。 1013 00:49:04,040 --> 00:49:08,840 >> 動作100時間、-after 時間の誤差はわずか約三分の一だった 1014 00:49:08,840 --> 00:49:10,440 第二の。 1015 00:49:10,440 --> 00:49:14,150 しかし、ターゲットとの観点から マッハ5で走行ミサイル、 1016 00:49:14,150 --> 00:49:18,560 それはトラッキングをもたらした 600メートル以上のエラーが発生しました。 1017 00:49:18,560 --> 00:49:21,870 それは致命的なエラーになります ダーランで兵士のため。 1018 00:49:21,870 --> 00:49:28,455 >> スカッド発射だったされている - 何が起こった 早期警戒衛星によって検出され、 1019 00:49:28,455 --> 00:49:32,710 彼らはスカッドが来ていた知っていた 彼らの一般的な方向に。 1020 00:49:32,710 --> 00:49:35,150 それは来ていたところ彼らは知りませんでした。 1021 00:49:35,150 --> 00:49:38,210 これは、レーダーまで今だった パトリオットシステムのコンポーネント 1022 00:49:38,210 --> 00:49:43,150 探して保つためにダーランを擁護 入ってくる敵のミサイルを追跡。 1023 00:49:43,150 --> 00:49:44,561 >> -Theレーダーは非常にスマートだった。 1024 00:49:44,561 --> 00:49:46,560 それは実際に追跡するだろう スカッドの位置 1025 00:49:46,560 --> 00:49:48,930 した後、場所を予測 それはおそらくだろう 1026 00:49:48,930 --> 00:49:51,380 次回 レーダーはアウトパルスを送った。 1027 00:49:51,380 --> 00:49:53,040 つまりレンジゲートと呼ばれていました。 1028 00:49:53,040 --> 00:49:57,620 >> パトリオット一度-Then 十分な時間を決定しています 1029 00:49:57,620 --> 00:50:02,400 戻って、次のをチェックするために渡された この検出された物体の場所 1030 00:50:02,400 --> 00:50:03,550 それが戻って行く。 1031 00:50:03,550 --> 00:50:07,820 だから、間違ったに戻ったとき、 場所は、次にどのオブジェクトを見ない。 1032 00:50:07,820 --> 00:50:10,360 そしてそれは物体がなかったと判断する。 1033 00:50:10,360 --> 00:50:13,630 誤検出があったことを そしてそれはトラックをドロップします。 1034 00:50:13,630 --> 00:50:16,970 >> -The着信スカッドが消えてしまった レーダー画面から、 1035 00:50:16,970 --> 00:50:20,200 数秒後に、それを 兵舎に激突。 1036 00:50:20,200 --> 00:50:22,570 スカッドは28を殺した。 1037 00:50:22,570 --> 00:50:26,110 それは、最後のものは解雇された 第一次湾岸戦争中。 1038 00:50:26,110 --> 00:50:31,920 悲劇的に、更新されたソフトウェア 翌日未明に到着した。 1039 00:50:31,920 --> 00:50:34,870 ソフトウェアの欠陥があった 、閉鎖を修正されて 1040 00:50:34,870 --> 00:50:39,150 問題を抱えた中で一つの章 パトリオットミサイルの歴史。 1041 00:50:39,150 --> 00:50:40,030 >> [END VIDEO再生] 1042 00:50:40,030 --> 00:50:41,488 >> DAVID J.マラン:それはCS50は終わりです。 1043 00:50:41,488 --> 00:50:42,820 私たちは、水曜日にお会いします。 1044 00:50:42,820 --> 00:50:46,420 1045 00:50:46,420 --> 00:50:50,370 >> [音楽再生] 1046 00:50:50,370 --> 00:54:23,446