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, і гэта гэта пачатак другога тыдня. 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 Гэтая праграма тут, што I кінулі разам у загадзя, 12 00:00:32,189 --> 00:00:37,280 і я сцвярджаю, што гэта павінна надрукаваць 10 зоркі на экране, выкарыстоўваючы Printf, 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 Так што гэта не зусім па адной памылкі, і што вы маеце на ўвазе? 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 Так мы вызначылі пачаць нулявое значэнне для I, 23 00:01:13,930 --> 00:01:18,399 і мы паказалі н значэнне 10, але мы выкарыстоўвалі менш або роўна. 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 >> Ну, як аб гэтай памылцы тут? 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 Як адзін з тых жоўтага драпін галаваломкі шт зноў і зноў і зноў. 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 кіраўніцтва па стылі, 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, было зрабіў трохі памылкай у абодвух прашыўкай, 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 І пасля гэтага, Apple паабяцаў выправіць гэтую памылку, 128 00:05:41,120 --> 00:05:45,950 і вельмі хутка зрабіў гэта выправіць у прашыўкай, але потым у канчатковым выніку ўсталявалі яго ў 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, Secure Sockets Layer. 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 наведаць URL, які пачынаецца з HTTPS, што тады можа 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 >> Але Карацей, Apple некаторы час таму зрабіў памылку 141 00:06:22,200 --> 00:06:25,970 у іх рэалізацыі SSL, у праграмнае забеспячэнне, якое ў канчатковым рахунку, рэалізуе 142 00:06:25,970 --> 00:06:30,120 URL-адрасы, як 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 >> Зараз 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 Існуе літаральна адзін радок кода, які быў багі 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 але калі вам засяродзіцца на кодзе ўнутры гэтага TOPMOST 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 >> Так, я не вельмі люблю Погляд з двух Гото не атрымоўваецца. 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 >> Так шмат кода ад 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 што няма ніякіх фігурныя дужкі, што Apple, сапраўды напісаў быў код, які выглядае 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 рабіць, ведаю, што кожны з іх 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 Так GOTOS, як правіла, з неадабрэннем па прычынах, мы не будзем сапраўды ўваходзяць у, 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 вынікам Магчыма хто скапіяваць і ўставіць адзін таксама 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 Пакуль Apple, нарэшце, не зафіксаваў гэта. 200 00:09:19,940 --> 00:09:23,100 >> Зараз, калі некаторыя з вас на самай справе працуе старыя версіі прашыўкай ці 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 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 І ў лекцыі і секцыі, мы пастараемся пазначыць 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 або E. 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 Мне трэба 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 была больш апошнія сем гадоў. 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 што мы 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 >> Мы таксама ведаю, як 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 Супрацоўнікі зрабіўшы ход, як гэта, ці гэта само па сабе адзін з цягам часу, 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. малая: Добра, так як у тым, што для 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 Такім чынам, вы бачылі ў пустым, і ў цябе бачыў, магчыма, ужо ў pset1 з C 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 зразумець, што 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 А тут яшчэ гэты рэч здесь-- 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 >> Таму што ў лініі 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 Тып, які з'яўляецца радком. 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 Гэтак жа, як аднаго радка кода для Е, але, мабыць, яго 412 00:19:45,390 --> 00:19:47,950 друкуе "Hello," так і так. 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 Калі я хачу стварыць паззл, або, калі 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 агульны як С. і несапраўднымі, на дадзены момант, проста азначае, 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-- Invoke 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 Большая частка гэтай галоўнай функцыі Е. 447 00:21:26,330 --> 00:21:30,360 Я спачатку адвольна ініцыялізацыі зменная з імем х да ліку 2. 448 00:21:30,360 --> 00:21:34,110 Я затым раздрукаваць "х цяпер % Я "праходжання ў значэнні х. 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 Шукаю кубатуры, што значэнне х, і я робіць гэта шляхам выкліку функцыі 452 00:21:42,050 --> 00:21:45,590 называецца куб праходжанне у х у якасці аргументу, 453 00:21:45,590 --> 00:21:49,300 а затым захаваць выхад У самой зменнай, х. 454 00:21:49,300 --> 00:21:51,340 Так што я выдаліўшы значэнне х. 455 00:21:51,340 --> 00:21:53,380 Я пераазначэння значэнне х з любой 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 На гэты раз яна завецца п замест імя, але я мог называць яго інакш я хачу. 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 Зараз гэта відавочна, унутр. 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 Ну, проста п раз п раз п як я мог куб значэнне. 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 атрымаць станоўчы Int, і я кажуць, што гэта больш пераканаўчым 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 і захаваць яго ў п, 503 00:23:51,860 --> 00:23:55,760 і працягваць рабіць гэта зноў і зноў, і зноў, пакуль п менш аднаго. 504 00:23:55,760 --> 00:23:58,720 >> Так н збіраецца быць менш за адзін толькі калі чалавек не супрацоўнічае. 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 н, вы думаеце, на лініі 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 Не іншыя функцыі, таму што н-ранейшаму ўнутры гэтых павойных 530 00:25:05,400 --> 00:25:06,470 падцяжкі тут. 531 00:25:06,470 --> 00:25:07,940 Так што-ўпэўнены. 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 Калі мы замест заявіў н прама тут, на лініі 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 Выкарыстанне неаб'яўленай ідэнтыфікатар п на лініі 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 >> Так кампілятар, Clang, будзе заўважыць, што яго проста 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 Remake гэты файл. 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-- і больш канкрэтна 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 Sharp ўключае файлаў загалоўка уключэнняў. 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 >> Але вы маглі б вельмі лёгка прыдумаць сцэнар, у якім трэба выклікаць 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-- нявыкарыстаны пераменная н. 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-- ігнараваць гэтую канкрэтную памылку 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 Сімвал, або сімвал, які адбываецца каб быць адзін байт ці восем бітаў агульнай. 691 00:32:36,030 --> 00:32:40,060 І гэта азначае, што памер з паўкокс толькі адзін байт. 692 00:32:40,060 --> 00:32:45,370 Байт восем бітаў, такім чынам, гэта азначае, што мы можам ўявіць, як шмат знакаў. 693 00:32:45,370 --> 00:32:47,320 Колькі лістоў або Сімвалы на клавіятуры 694 00:32:47,320 --> 00:32:49,210 калі ў нас ёсць адзін байт ці восем біт. 695 00:32:49,210 --> 00:32:51,546 Ўспомніце нулявы тыдні. 696 00:32:51,546 --> 00:32:53,420 Калі ў вас ёсць восем біт, колькі ўсяго значэння 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 >> Але на бягучы момант у С, па змаўчанні толькі адзін байт ці восем бітаў. 711 00:33:34,210 --> 00:33:38,195 Цэлае, тым часам, чатыры байт, інакш вядомы як 32 біт. 712 00:33:38,195 --> 00:33:41,320 А гэта значыць, што як мага большую лік можна ўявіць з міжнар 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 на them-- 731 00:34:21,780 --> 00:34:24,110 могуць разлічваць толькі вышэй, чым чатыры мільярды плюс-мінус, 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 у С, што дае вам восем байт, што з'яўляецца спосаб больш магчымых структур нулёў 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-- Таксама васьмі байт, або 64 бітаў, 748 00:35:05,640 --> 00:35:10,260 і гэта ўдвая больш, чым у Int, і гэта на працягу доўгага цэлага значэння. 749 00:35:10,260 --> 00:35:15,655 >> Fun fact-- калі Int чатыры байта, як доўга гэта доўга ў C звычайна? 750 00:35:15,655 --> 00:35:18,290 751 00:35:18,290 --> 00:35:21,560 Таксама чатыры байта, але доўга доўга восем байт, 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 Не толькі ў С, але ў кампутары ў цэлым. 760 00:35:39,780 --> 00:35:42,590 Напрыклад, калі ў гэтым гэта байт варта bit-- 761 00:35:42,590 --> 00:35:45,120 так што калі гэта восем 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 выкарыстоўвае ўсяго восем біт калі я хачу, каб павялічыць яго. 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-- не ў Int, але адзін байт разлічваць цэлыя 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. 789 00:37:10,000 --> 00:37:12,430 Я ўпэўнены, захоўваць адказ ў зменнай называецца е. 790 00:37:12,430 --> 00:37:15,850 Гэтая пераменная мае тып паплаўка, які гэта ключавое слова, я проста прапанаваў існавала. 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 толькі таму, што я настойваў на тым, Е паказаць мне адну дзесятковую кропку. 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 [Неразборліва] 27 нулёў пасля гэтага 0,1. 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 фінансавага праграмнага забеспячэння, ваенны 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 На самай справе, і адной з прычын мы выкарыстоўваем 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 атрымаў з 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 >> 4 чэрвеня 1996 года, навукоўцы гатовыя запусціць беспілотны ракета Арыян 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 секунд у палёт, яны ўпершыню 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 >> -гэта Быў дзявочае Падарожжа з Ariane 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 Даследаваны праблемы на Ariane было тое, што 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 >> Даследаваны няздольнасць аднаго праграма, каб прыняць 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 Ariane 4 ракеты былі быў вельмі паспяховым. 929 00:43:57,060 --> 00:44:01,600 Так што большая частка праграмнага забеспячэння, створанага для ён быў таксама выкарыстаны ў Ariane 5. 930 00:44:01,600 --> 00:44:04,790 >> Даследаваны асноўная праблема было тое, што Ariane 5. 931 00:44:04,790 --> 00:44:11,200 Быў faster-- паскараецца хутчэй, і праграмнае забеспячэнне не даводзілася, што. 932 00:44:11,200 --> 00:44:14,910 >> Даследаваны знішчэнне ракеты была велізарная фінансавая катастрофа. 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 ракета Patriot выпрабаваў падобны выгляд 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 Калі Patriot, які павінен быў для абароны ад ўваходзяць Скадо, 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 Patriot ракетныя батарэі былі разгорнутыя абараніць Саудаўскую Аравію і Ізраіль 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 вытворчасці кампаніі Raytheon. 948 00:45:06,530 --> 00:45:09,500 >> -Размер Патрыётаў перахопнік у тым: 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 >> Даследаваны ракеты ажыццяўляецца чатыры за кантэйнер, 955 00:45:34,040 --> 00:45:37,170 і транспартуюцца паўпрычэпа. 956 00:45:37,170 --> 00:45:44,880 >> Даследаваны Patriot супрацьракетная сістэма ўзыходзіць па крайняй меры, 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 І такім чынам яны спрабавалі абнавіць Patriot. 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 Але калі Patriot быў дастаўлены ў эксплуатацыю, 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 Так што цяпер Patriot спрабуе прыйсці на Скад, і вялікую частку time-- 975 00:46:48,490 --> 00:46:52,880 пераважная большасць time-- было б проста лётаць на Скад. 976 00:46:52,880 --> 00:46:57,120 >> -пасля Сістэмных аператараў Patriot зразумеў Patriot міма варот, 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 Праз 08:00 бегу, яны заўважылі, 993 00:47:54,410 --> 00:47:57,690 што сістэма становіцца прыкметна менш дакладным. 994 00:47:57,690 --> 00:48:01,850 Міністэрства абароны адказаў, распавядаць усё батарэйкі Patriot 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 08:00, 10 гадзін, у тысячу гадзін. 998 00:48:09,140 --> 00:48:11,300 Ніхто не ведаў. 999 00:48:11,300 --> 00:48:13,320 >> -аккумуляторную Батарэю Patriot размешчаны ў казармах 1000 00:48:13,320 --> 00:48:18,310 у Дахране і яго недахопы ўнутранага Гадзіны былі на працягу больш за 100 гадзін 1001 00:48:18,310 --> 00:48:21,520 у ноч на 25 лютага. 1002 00:48:21,520 --> 00:48:25,792 >> -It Адсочваць час з дакладнасцю каля адной дзесятай долі секунды. 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 Гэта менавіта тое, праблемы што здарылася ў Patriot. 1012 00:48:59,530 --> 00:49:04,040 Чым даўжэй сістэма зарабіла, горш памылка часу стаў. 1013 00:49:04,040 --> 00:49:08,840 >> -пасля 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 Цяпер настаў час, каб радара кампанент сістэмы Patriot 1022 00:49:38,210 --> 00:49:43,150 абараняючы Dhahran, каб знайсці і захаваць трэк надыходзячай ракеты праціўніка. 1023 00:49:43,150 --> 00:49:44,561 >> Даследаваны радар быў вельмі разумны. 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 >> Даследаваны які ўваходзіць Скад знік з экрана радара, 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 адзін раздзел у праблемных Гісторыя ракеты Patriot. 1041 00:50:39,150 --> 00:50:40,030 >> [END ВИДЕОВОСПРОИЗВЕДЕНИЕ] 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