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 戴維·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 當然是一個錯誤,是一個 錯誤的程序, 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 這個程序在這裡,我 扔一塊兒了, 12 00:00:32,189 --> 00:00:37,280 我說這應該打印 10星用printf在屏幕上, 13 00:00:37,280 --> 00:00:41,020 但它顯然Buggy在某種方式。 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 所以,這是一個關閉一個錯誤, 和你是什麼意思? 18 00:00:54,420 --> 00:01:00,991 19 00:01:00,991 --> 00:01:01,490 行。 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 其原因,這是二 字符,並且不只是一個符號 25 00:01:21,190 --> 00:01:22,630 就像在數學書, 是你沒有 26 00:01:22,630 --> 00:01:24,880 表達的一種方式 一個字符等效的。 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 >> 以及怎麼樣在這裡這個bug? 49 00:02:19,610 --> 00:02:24,200 在這裡,再一次,我要求我有 打印10 stars--的目標 50 00:02:24,200 --> 00:02:28,140 每行這段時間的,但事實並非如此。 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 在我的標準只是一個註釋之上 我打算做一元的代碼 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--那些兩行代碼 79 00:03:39,520 --> 00:03:40,450 應該被執行。 80 00:03:40,450 --> 00:03:44,390 像那些黃色的划痕難題1 件再,再而三。 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 所以,現在有趣 未聲明的變量 - 不是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 我們會promote--在CS50 風格指南,網址為這 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 過去這一年,蘋果已經對 在內部監督辦公室做了一點錯誤, 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 此後,蘋果 答應來修復這個bug, 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中的一個bug,安全套接字層。 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或最大的網址 連接也有。 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 >> 現在,蘋果最終發布 一種用於此修復最後, 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 那是bug的代碼行 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 但如果你專注於裡面的代碼 在最上面的函數 - 讓我們的 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 >> 是的,我真的不喜歡 兩轉到了一下失敗。 166 00:07:38,940 --> 00:07:42,060 坦白說,我真的不知道該怎麼轉到 失敗的方法,但有兩個人 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 >> 所以很多蘋果的代碼 本身是用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 它沒有關聯 如果條件上面。 179 00:08:15,540 --> 00:08:19,590 >> 因此,即使再次,如果你不是很 明白這可能可能 180 00:08:19,590 --> 00:08:23,230 是幹什麼的,知道每種 條件 - 每個行 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 >> 但是因為我們有這個 黃第二的goto失敗, 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 affected--在這個case-- 數以百萬計的人。 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 任何在未來四年夜。 220 00:10:09,520 --> 00:10:12,680 現在就評估一個字, 特別是當你潛入問題 221 00:10:12,680 --> 00:10:14,350 設置一個和超越。 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 你做了它的三分之一, 半吧,它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 >> 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 設計 - 現在,這是第 特別是在定性的人, 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 並在演講和節中,我們將嘗試 來點out--因為我們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 >> 現在一般按教學大綱,我們得分 這些東西對一個五點量表。 256 00:11:50,300 --> 00:11:53,640 讓我費盡心思點 這三個確實是不錯的。 257 00:11:53,640 --> 00:11:55,550 很快做伙計 開始做算術。 258 00:11:55,550 --> 00:11:58,133 當他們得到四分之三的 五張正確性一些PSET 259 00:11:58,133 --> 00:12:02,040 他們認為該死的,我要60% 它本質上是一個D或大腸 260 00:12:02,040 --> 00:12:03,980 >> 這是沒有辦法的辦法,我們 認為這些數字。 261 00:12:03,980 --> 00:12:06,880 一個三確實不錯,而我們 普遍預期在開始 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--至少 在一個pset--你 273 00:12:31,190 --> 00:12:36,790 花90%的時間 處理問題的10%。 274 00:12:36,790 --> 00:12:39,320 >> 和一切形式的作品 除了一個或兩個錯誤, 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擁有的不幸區別 是AD板的最大生產國 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 我需要幫助 - 是不是哦,這是我的代碼。 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 在這裡我們是在近年來 這是AD板的個案數目 324 00:14:53,480 --> 00:14:56,260 該CS50擁有超過 在過去的七年。 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 而為了實現這一目標,有什麼 我們想要做的是傳達1 333 00:15:20,390 --> 00:15:24,310 我們dd--只是FYI--在比較 公平性,以誰的學生 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 >> 我們也知道如何圍繞谷歌 並找到代碼庫 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 工作人員已經做了類似課程 這一點,或者這個本身隨著時間的推移, 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 >> 戴維·J·馬蘭:好吧, 因此,如何是一個SEGUE? 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 >> 而且即使你可能沒有 C語言中PSET1做到了這一點,並坦言 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 意識到ç確實給 你這種能力。 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 再有就是這個 事情這裡 - PrintName。 392 00:18:48,390 --> 00:18:51,420 >> 現在PrintName不是 功能自帶的三 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 >> 由於線28到31, 我寫了一個超級簡單的功能 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 因此,人們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 不是S,而不是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 正如一行代碼 中的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 說真的,我已經採取了一個程序,可以 已被寫入同一個代碼行 416 00:19:56,710 --> 00:20:00,190 通過把這個在這裡, 並改變了它的東西 417 00:20:00,190 --> 00:20:04,920 這涉及到一些六,七左右 代碼行一路下來這裡。 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 如果我想創建一個 拼圖,或者如果我 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 I型大衛,這類型的我的名字。 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 你想寫一大塊 代碼和調用代碼 - 調用 441 00:21:10,290 --> 00:21:13,270 該代碼 - 一些描述 名稱如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 我第一次隨意初始化 變量名為x為數字2。 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次Ñ 就是我怎麼可能多維數據集中的值。 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 >> 讓我們來看看最後一個例子 這裡所謂的功能之一。 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-- 得到一個整數,並將其存儲在N, 503 00:23:51,860 --> 00:23:55,760 並保持一而再,再而這樣做 再次,只要n是小於1。 504 00:23:55,760 --> 00:23:58,720 >> 因此n是將要小於一 只有在人的不配合。 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 最終發現,我 簡單的返回值。 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 >> 但在一些關鍵的細節兩點意見。 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 所以,因為我已​​經聲明氮對 第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 如果我們向上滾動 進一步,另一個。 551 00:26:05,210 --> 00:26:08,750 使用未申報 標識符氮對線34。 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 使功能之一。 566 00:26:46,890 --> 00:26:48,090 而現在,該死的,四個錯誤。 567 00:26:48,090 --> 00:26:50,220 讓我們向上滾動到第一個。 568 00:26:50,220 --> 00:26:55,070 >> 函數隱式聲明 得到肯定int是在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--更具體ç 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 而我所說的被調用的函數 GetPositiveInt這裡線20條, 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 我不知道什麼是 原型是的,但我知道 609 00:28:53,760 --> 00:28:56,390 如果我知道,C是剛 啞和反思從上到下。 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調用回答:這 一些所謂的遞歸, 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 戴維·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 >> 好了,數據的說法不 使用格式字符串 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--忽視這個特殊的bug 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或字符,這恰好 是一個字節或8位總。 691 00:32:36,030 --> 00:32:40,060 這就是說,尺寸 一個char的僅僅是一個字節。 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 如果我們有一個字節或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 可以代表與 零和一的模式? 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 所以,如果你有八個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 實際上,我們可能需要 大於一個字節以上。 708 00:33:24,390 --> 00:33:28,240 幸好在 近年來社會 709 00:33:28,240 --> 00:33:31,040 使用採用了其它標準 每次充電多於一個字節。 710 00:33:31,040 --> 00:33:34,210 >> 不過,現在在C中,默認 僅僅是一個字節或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 所以它的四大十億給予或採取。 717 00:33:46,760 --> 00:33:49,840 2至第32的功率,如果我們 不承擔任何負數 718 00:33:49,840 --> 00:33:52,530 而只使用一切積極 號,這四個十億 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也可以用四個字節 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--在 用C寫的關於他們 - 至少計劃 731 00:34:21,780 --> 00:34:24,110 只能算作高 four十億而奮鬥, 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中,它給你八個字節,這 是零的方式更可能的模式 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, 它是一個長整型值。 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 另外四個字節,但 長長的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是最高的 之一,但問題 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 >> 好吧,只要我添加 一到所有的這些的, 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 事實上,如果我加號 一到這一點,什麼在二進制情況 772 00:36:15,590 --> 00:36:17,670 是,它溢出回零。 773 00:36:17,670 --> 00:36:21,730 >> 所以,如果你只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 因此,讓我們來看看這個例子 這裡也從今天的源代碼 - 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。 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 小數點與表現出來 小數點後一個數字。 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 >> 因此,讓我繼續做 使浮球-0,./float-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 像圓起來的 最近的一個向上或向下。 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,現在我得到我的0.1。 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 這一切的時候,你一直在思考 1除以10為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 >> 現在why--確定,這是完整的 謊言1除以10是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 即1除以10是 實際上是瘋狂的價值? 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 財務軟件, 軍用軟件 - 什麼 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 而我想我會分享的是 這八年分​​鐘的視頻在這裡拍攝 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 得到了他們 - 臭蟲,病毒和 小型軟件價格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 >> -at約37秒進入 飛行中,他們首先 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 >> 一-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年的開始 第一次海灣戰爭中, 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 所以,現在愛國者的苦思 在飛毛腿,而大部分的時間 - 的 975 00:46:48,490 --> 00:46:52,880 絕大多數的 時間 - 它只是由飛毛腿飛。 976 00:46:52,880 --> 00:46:57,120 >> - 一旦愛國者系統運營商 實現了愛國者錯過了目標, 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 >> - 雖然在夜晚的天空,愛國者 似乎是成功地破壞 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 >> - 關於前兩週 悲劇發生在宰赫蘭, 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 經過大約八個小時 磨合,他們發現 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 >> - 它跟踪的時間精度 的約十分之一秒。 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 三分之一不能 正是以十進制表示。 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 >> -after運行100小時後, 在錯誤的時間只有大約三分之一 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 >> - 那麼一旦愛國者 決定有足夠的時間具有 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 >> [完視頻回放] 1042 00:50:40,030 --> 00:50:41,488 >> 戴維·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