1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID J MALAN: Toate dreapta, astfel încât acesta este CS50. 3 00:00:13,060 --> 00:00:15,040 Și aceasta este în mod clar o zi de vineri. 4 00:00:15,040 --> 00:00:16,850 Și acesta este sfârșitul săptămânii o. 5 00:00:16,850 --> 00:00:21,020 Deci s-ar putea aminti că am rămas, ultima dată, cu o cliffhanger de felul. 6 00:00:21,020 --> 00:00:25,020 Prin care ne-am expune această minciună, că nu indiferent de ce ai fost învățat în creștere 7 00:00:25,020 --> 00:00:31,610 up, 1 împărțit la 10, nu este, în De fapt, 0.1 sau 0.100 sau 0.10000. 8 00:00:31,610 --> 00:00:35,270 De fapt, dacă ne-am compila acest Programul, așa cum am făcut ieri, cu, 9 00:00:35,270 --> 00:00:39,770 face imprecizie, și apoi face punct, slash, imprecizie, 10 00:00:39,770 --> 00:00:43,600 am aflat că aceasta este ceea ce este 1 împărțit la 10 este de fapt. 11 00:00:43,600 --> 00:00:46,140 Așa că nu e într-adevăr destul cazul. 12 00:00:46,140 --> 00:00:49,014 Dar acest lucru nu aluzie la un limitare fundamentală de calculatoare. 13 00:00:49,014 --> 00:00:50,930 Și într-adevăr, printre lucruri pe care le de gând să faci 14 00:00:50,930 --> 00:00:55,130 astăzi este aruncăm o privire la ce are acest sa întâmplat, ce implicații are acest lucru, 15 00:00:55,130 --> 00:00:58,430 cum umanitatea nu a reușit pentru a înțelege acest lucru în unele foarte 16 00:00:58,430 --> 00:01:00,410 situations-- gravă rezultatul pe care 17 00:01:00,410 --> 00:01:03,141 a fost destul de tragice și, de asemenea, și expensive-- 18 00:01:03,141 --> 00:01:04,849 aruncăm o privire la modul în care poate apăra de fapt 19 00:01:04,849 --> 00:01:06,530 împotriva acestor tipuri de limitari. 20 00:01:06,530 --> 00:01:10,940 Deci intuitiv, probabil, de ce este 1 împărțit la 10, 21 00:01:10,940 --> 00:01:15,480 în conformitate cu computerul meu aici, nu doar 1/10, 0,10? 22 00:01:15,480 --> 00:01:15,980 Da. 23 00:01:15,980 --> 00:01:16,530 Ce crezi? 24 00:01:16,530 --> 00:01:17,860 >> AUDIENTA MEMBRU: radix este diferit? 25 00:01:17,860 --> 00:01:18,550 >> DAVID J MALAN: a ceea ce este? 26 00:01:18,550 --> 00:01:19,730 Oh, radix este diferit? 27 00:01:19,730 --> 00:01:20,720 Deci, nu destul. 28 00:01:20,720 --> 00:01:23,200 Este de fapt mai mult fundamentală pentru hardware-ul. 29 00:01:23,200 --> 00:01:23,980 Alte gânduri? 30 00:01:23,980 --> 00:01:24,584 Da. 31 00:01:24,584 --> 00:01:26,750 AUDIENTA MEMBRU: Ei reprezintă numere diferit? 32 00:01:26,750 --> 00:01:27,880 DAVID J MALAN: Deci they-- dreapta. 33 00:01:27,880 --> 00:01:29,338 Aceștia reprezintă un număr diferit. 34 00:01:29,338 --> 00:01:30,700 Inexact, aparent. 35 00:01:30,700 --> 00:01:33,190 Astfel încât este-- Ei bine, diferit de ceea ce? 36 00:01:33,190 --> 00:01:34,490 Sau de la cine? 37 00:01:34,490 --> 00:01:35,050 De la noi? 38 00:01:35,050 --> 00:01:35,966 AUDIENTA MEMBRU: Da. 39 00:01:35,966 --> 00:01:38,930 Ei nu folosesc zecimal sistem de [neauzit]. 40 00:01:38,930 --> 00:01:39,680 DAVID J MALAN: OK. 41 00:01:39,680 --> 00:01:41,560 Deci, într-un sens, ei nu folositi sistemul zecimal. 42 00:01:41,560 --> 00:01:43,720 Sub capota, totul este, într-adevăr, binar, 43 00:01:43,720 --> 00:01:45,510 si asta e relevant, de fapt. 44 00:01:45,510 --> 00:01:48,135 Dar este chiar un simplu explicație decât că. 45 00:01:48,135 --> 00:01:48,635 Da. 46 00:01:48,635 --> 00:01:49,970 >> AUDIENTA MEMBRU: Ei doar atât de multe de biți. 47 00:01:49,970 --> 00:01:52,370 Ele pot stoca doar până la o anumită măsură, cum ar fi cu zecimale. 48 00:01:52,370 --> 00:01:52,780 >> DAVID J MALAN: Da. 49 00:01:52,780 --> 00:01:54,420 Aceasta este ceea ce adevărat obtinerea la ea. 50 00:01:54,420 --> 00:01:57,180 Se pare că de calculatoare de obicei, întotdeauna va numai 51 00:01:57,180 --> 00:01:59,690 utilizați o cantitate finită de informație pentru a reprezenta ceva. 52 00:01:59,690 --> 00:01:59,870 Corect? 53 00:01:59,870 --> 00:02:02,110 La urma urmei, avem doar un fix cantitate de spațiu pe hard disk. 54 00:02:02,110 --> 00:02:04,210 Avem doar o sumă fixă de RAM, sau memoria unui calculator. 55 00:02:04,210 --> 00:02:06,251 Și, dacă aveți doar un sumă fixă ​​de ceva, 56 00:02:06,251 --> 00:02:09,611 cu siguranță nu se poate conta de fapt, la infinit sau orice număr pe care doriți. 57 00:02:09,611 --> 00:02:11,610 Tu, un fel de, trebuie să alege și alege ceea ce gamă 58 00:02:11,610 --> 00:02:13,220 de valori ai de gând să sprijine. 59 00:02:13,220 --> 00:02:18,100 >> Și astfel, de exemplu, o săptămână sau două Acum, când am vorbit despre ASCII, 60 00:02:18,100 --> 00:02:21,610 si am vorbit aproximativ 8 biți, sau un octet, ca să spunem așa, 61 00:02:21,610 --> 00:02:26,360 cel mai mare număr am putut reprezintă cu 8 biți a fost ce? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 Și putem reprezenta 256 de valori totale dar nu în cazul în care ne petrecem una dintre ele 64 00:02:31,850 --> 00:02:34,190 pe 0-- Ei bine, dar dacă petrece una dintre ele pe 0, 65 00:02:34,190 --> 00:02:36,830 apoi cel mai mare număr este, desigur, 255. 66 00:02:36,830 --> 00:02:39,410 >> Deci, se dovedește, că acest lucru este cazul de asemenea, în acest context. 67 00:02:39,410 --> 00:02:42,350 Am început să vorbim, ultima dată, despre numere în virgulă mobilă, care 68 00:02:42,350 --> 00:02:44,640 sunt diferite de numere întregi, în că au un punct zecimal 69 00:02:44,640 --> 00:02:47,056 și, să sperăm, unele numere după aceea, dar ele sunt prea. 70 00:02:47,056 --> 00:02:51,730 Un computer este doar de obicei merge de a utiliza 32 de biți, poate 64 biți 71 00:02:51,730 --> 00:02:53,497 pentru a reprezenta o valoare în virgulă mobilă. 72 00:02:53,497 --> 00:02:56,080 Deci, chiar dacă ne-am crescut matematica de învățare și cunoscând 73 00:02:56,080 --> 00:02:58,750 pe care le puteți avea absolut un număr infinit de numere 74 00:02:58,750 --> 00:03:01,650 după virgulă, nu dacă aveți memorie finită. 75 00:03:01,650 --> 00:03:03,930 Tu, un fel de, trebuie să rotund, sau alege și alegeți care 76 00:03:03,930 --> 00:03:05,346 Numerele ai de gând să reprezinte. 77 00:03:05,346 --> 00:03:08,710 Și astfel vă puteți gândi, într-un sens, aceasta fiind apropiată calculatorului 78 00:03:08,710 --> 00:03:14,050 aproximare a valorii 1/10 care se poate obține, cu doar 32 de biți sau cam asa ceva. 79 00:03:14,050 --> 00:03:15,300 Și nu este vorba doar 1/10. 80 00:03:15,300 --> 00:03:19,820 >> De exemplu, dacă am schimba acest lucru 1/3, care noi credem ca este chiar simplu. 81 00:03:19,820 --> 00:03:21,300 Deci, 1 împărțit la 3. 82 00:03:21,300 --> 00:03:22,355 Permiteți-mi să salvați fișierul. 83 00:03:22,355 --> 00:03:24,680 Lasă-mă să merg mai departe și recompilați-l. 84 00:03:24,680 --> 00:03:25,820 Și lasă-mă să re-a alerga it. 85 00:03:25,820 --> 00:03:30,000 Aici de asemenea, se pare, nu este de 0,3 1/3 și apoi un număr infinit de 3 lui 86 00:03:30,000 --> 00:03:30,770 după aceea. 87 00:03:30,770 --> 00:03:32,540 Aveți această imprecizie la sfârșitul anului. 88 00:03:32,540 --> 00:03:35,544 Deci, noi, oamenii, sunt corecte, și ceea ce ai învățat este, de fapt, corect, 89 00:03:35,544 --> 00:03:37,460 dar suntem lovire până împotriva unele limitări. 90 00:03:37,460 --> 00:03:39,420 >> Și ce m-am gândit am face astăzi, este începe 91 00:03:39,420 --> 00:03:42,190 uitandu-se la, sincer, The consecințe tragice ale acestui 92 00:03:42,190 --> 00:03:45,490 uneori, atunci când omenirea nu destul de punerea în aplicare a 93 00:03:45,490 --> 00:03:48,460 pentru această realitate, iar aceste limitări. 94 00:03:48,460 --> 00:03:52,360 Și vom vedea o serie de viniete de la Canalul History care are 95 00:03:52,360 --> 00:03:53,950 o privire la modul lucrurile au mers prost. 96 00:03:53,950 --> 00:03:56,340 Este de aproximativ 8 minute, și vom reveni după acest 97 00:03:56,340 --> 00:03:59,439 și să ia o privire la exact ce altceva poate merge prost. 98 00:03:59,439 --> 00:04:00,605 Dacă am putea dim lights-- 99 00:04:00,605 --> 00:04:02,350 >> [VIDEO PLAYBACK] 100 00:04:02,350 --> 00:04:06,310 >> -Computers, Am ajuns toți să accepte problemele de multe ori frustrant că 101 00:04:06,310 --> 00:04:07,750 du-te cu ei. 102 00:04:07,750 --> 00:04:11,370 Bug-uri, viruși, și software-ul glitches sunt preturi mici 103 00:04:11,370 --> 00:04:13,230 să plătească pentru comoditatea. 104 00:04:13,230 --> 00:04:17,519 Dar, în high-tech și de mare viteză aplicatii de program spațiu militare și, 105 00:04:17,519 --> 00:04:22,130 cea mai mică problemă poate fi amplificat în caz de dezastru. 106 00:04:22,130 --> 00:04:27,750 Pe 4 iunie, 1996, oamenii de stiinta pregătit pentru a lansa o racheta fara pilot Ariane 5. 107 00:04:27,750 --> 00:04:29,890 Acesta a fost transportă științifice sateliți proiectat 108 00:04:29,890 --> 00:04:33,030 pentru a stabili precis cum Interacționează campul magnetic al Pamantului 109 00:04:33,030 --> 00:04:35,600 cu vânturi solare. 110 00:04:35,600 --> 00:04:37,930 Racheta a fost construit pentru Agenția Spațială Europeană 111 00:04:37,930 --> 00:04:41,620 și a ridicat off de la facilitatea de pe coasta Guyanei Franceze. 112 00:04:41,620 --> 00:04:44,924 >> -Si Aproximativ 30 de secunde în zborul, ei mai întâi 113 00:04:44,924 --> 00:04:46,340 observat ceva mergea prost. 114 00:04:46,340 --> 00:04:49,280 Că duzele au fost rotativ într-un mod care într-adevăr nu ar trebui. 115 00:04:49,280 --> 00:04:53,042 În jurul valorii de 40 de secunde în zbor, în mod clar vehiculul a fost în necaz, 116 00:04:53,042 --> 00:04:55,250 și că este atunci când au făcut decizia să-l distrugă. 117 00:04:55,250 --> 00:04:58,970 Range Officer de siguranță cu curaj extraordinare apăsat butonul, 118 00:04:58,970 --> 00:05:03,940 aruncat în aer racheta înainte de a putea deveni un pericol pentru siguranța publică. 119 00:05:03,940 --> 00:05:06,600 >> -Asta A fost fecioara călătorie de Ariane 5, 120 00:05:06,600 --> 00:05:09,270 și distrugerea ei a luat loc din cauza unui defect 121 00:05:09,270 --> 00:05:10,992 încorporat în software-ul racheta lui. 122 00:05:10,992 --> 00:05:12,700 -cele Problemă cu privire la Ariane a fost că nu există 123 00:05:12,700 --> 00:05:15,370 a fost un număr care este necesar 64 de biți pentru a exprima, 124 00:05:15,370 --> 00:05:18,150 și a vrut să transforme l la un număr de 16 biți. 125 00:05:18,150 --> 00:05:21,160 Ei au presupus că numărul nu a fost niciodată de gând să fie foarte mare, 126 00:05:21,160 --> 00:05:25,020 că cele mai multe dintre aceste cifre în numărul 64 biți au fost de 0 lui. 127 00:05:25,020 --> 00:05:26,310 Ei au fost greșit. 128 00:05:26,310 --> 00:05:28,680 >> -cele Incapacitatea de o program software pentru a accepta 129 00:05:28,680 --> 00:05:32,820 tipul de număr generat de alta a fost la originea eșecului. 130 00:05:32,820 --> 00:05:37,190 Dezvoltare de software a devenit o parte foarte costisitoare de noi tehnologii. 131 00:05:37,190 --> 00:05:40,760 Ariane 4 Racheta a fost foarte de succes, atât de mult a software-ului 132 00:05:40,760 --> 00:05:43,990 creat pentru ea a fost de asemenea folosit pe Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -cele Problemă de bază a fost că Ariane 5 a fost mai rapid, accelerat rapid. 134 00:05:49,750 --> 00:05:53,000 Și software-ul nu a avut a reprezentat pentru asta. 135 00:05:53,000 --> 00:05:56,330 >> -cele Distrugerea rachetei a fost un dezastru financiar imens, 136 00:05:56,330 --> 00:05:59,670 toate din cauza unei erori de software minut. 137 00:05:59,670 --> 00:06:01,990 Dar acest lucru nu a fost primul Probleme de conversie a datelor în timp 138 00:06:01,990 --> 00:06:05,310 a afectat tehnologiei moderne de rachete. 139 00:06:05,310 --> 00:06:08,300 >> -În 1991, cu începutul din primul război din Golf, 140 00:06:08,300 --> 00:06:10,650 de rachete Patriot experimentat un fel similară 141 00:06:10,650 --> 00:06:12,650 de probleme de conversie număr. 142 00:06:12,650 --> 00:06:15,620 Ca urmare, 28 de persoane, 28 soldați americani 143 00:06:15,620 --> 00:06:18,440 au fost ucise și aproximativ 100 alții răniți, 144 00:06:18,440 --> 00:06:21,900 în cazul în care Patriot, care trebuia pentru a proteja împotriva scuds primite, 145 00:06:21,900 --> 00:06:24,630 nu a reușit să tragă o rachetă. 146 00:06:24,630 --> 00:06:29,440 >> -Când Irakul a invadat Kuweitul și America lansat Desert Storm, la începutul anului 1991, 147 00:06:29,440 --> 00:06:33,800 Baterii de rachete Patriot au fost dislocate pentru a proteja Arabia Saudită și Israel 148 00:06:33,800 --> 00:06:37,000 de atacuri cu rachete irakiene Scud. 149 00:06:37,000 --> 00:06:40,610 Patriot este un mediu-gama de SUA sol-aer sistem 150 00:06:40,610 --> 00:06:43,010 fabricat de compania Raytheon. 151 00:06:43,010 --> 00:06:49,080 >> -cele Dimensiunea separatorului Patriot, în sine, este de aproximativ, aproximativ 20 de picioare lungime. 152 00:06:49,080 --> 00:06:51,250 Si cantareste aproximativ 2000 de lire sterline. 153 00:06:51,250 --> 00:06:55,195 Și-l poartă un focos de about-- Cred că e cam 150 de lire sterline. 154 00:06:55,195 --> 00:06:59,500 Și focosul, în sine, este un exploziv de mare, 155 00:06:59,500 --> 00:07:02,570 care are fragmente din jurul ei. 156 00:07:02,570 --> 00:07:06,890 Carcasa de focosul este concepute pentru a acționa ca alice. 157 00:07:06,890 --> 00:07:09,130 >> -cele Rachete sunt transportate, 4 per container, 158 00:07:09,130 --> 00:07:12,080 și sunt transportate de o semi-remorcă. 159 00:07:12,080 --> 00:07:19,100 >> -Sistemul De rachete anti Patriot datează de cel puțin 20 de ani acum. 160 00:07:19,100 --> 00:07:22,320 Acesta a fost proiectat inițial ca o rachetă de apărare aeriană 161 00:07:22,320 --> 00:07:24,180 pentru a trage în jos avioane inamice. 162 00:07:24,180 --> 00:07:27,860 În primul război din Golf, în momentul în care războiul a venit de-a lungul, 163 00:07:27,860 --> 00:07:32,745 Armata a vrut să-l folosească pentru a trage în jos scuds, nu avioane. 164 00:07:32,745 --> 00:07:36,150 Forța irakian nu a fost atât de mult de o problemă, 165 00:07:36,150 --> 00:07:39,110 dar armata a fost îngrijorat scuds. 166 00:07:39,110 --> 00:07:42,340 Și astfel au încercat să upgrade de Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Un dușman rachetă care călătoresc la cinci următor 168 00:07:44,760 --> 00:07:47,250 a fost de gând să fie o provocare destul. 169 00:07:47,250 --> 00:07:50,000 Dar când Patriot a fost grăbit în funcțiune, 170 00:07:50,000 --> 00:07:54,030 Armata nu a fost conștient de un Modificarea irakian care a făcut 171 00:07:54,030 --> 00:07:56,840 scuds lor aproape imposibil de a lovi. 172 00:07:56,840 --> 00:08:01,020 >> Ce sa întâmplat, este scuds care veneau în, au fost instabile, 173 00:08:01,020 --> 00:08:02,310 au fost deteriorate. 174 00:08:02,310 --> 00:08:05,140 Motivul pentru aceasta, a fost irakienii, pentru 175 00:08:05,140 --> 00:08:09,450 pentru a obține 600 de kilometri de o gamă de rachete 300 km, 176 00:08:09,450 --> 00:08:12,930 a luat în greutate din focosul față și a făcut focosul brichetă. 177 00:08:12,930 --> 00:08:17,710 Deci, acum, lui Patriot încearcă să vină la Scud, și cele mai multe ori, 178 00:08:17,710 --> 00:08:21,700 marea majoritate a timp, s-ar zbura doar de Scud. 179 00:08:21,700 --> 00:08:25,700 >> -După Operatorii de sisteme Patriot realizat Patriot ratat ținta, 180 00:08:25,700 --> 00:08:29,790 au detonat focos Patriot, a pentru a evita posibilele victime dacă ea 181 00:08:29,790 --> 00:08:32,380 a fost lăsat să cadă la pământ. 182 00:08:32,380 --> 00:08:36,340 >> Asta a fost ceea ce a văzut mai mulți oameni, aceste mingi de foc mari de pe cer, 183 00:08:36,340 --> 00:08:41,289 și înțeleasă greșit ca interceptări de focoase Scud. 184 00:08:41,289 --> 00:08:43,590 Deși în noaptea Cer, Patriots a apărut 185 00:08:43,590 --> 00:08:47,020 pentru a fi cu succes distrugerea scuds, la Dhahran, 186 00:08:47,020 --> 00:08:49,730 ar putea exista nici o greșeală despre performanțele sale. 187 00:08:49,730 --> 00:08:53,990 Există, sistem radar Patriot de pierdut urma unui Scud de intrare, 188 00:08:53,990 --> 00:08:56,650 și niciodată nu a lansat, din cauza unui defect de software. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Acesta a fost israelienii care au descoperit primul că mai era sistemul pe, 191 00:09:04,100 --> 00:09:07,510 cea mai mare de timp diferența devenit, datorită un ceas încorporat 192 00:09:07,510 --> 00:09:09,490 în calculatorul sistemului. 193 00:09:09,490 --> 00:09:12,670 >> -Despre Două săptămâni înainte de tragedia din Dhahran, 194 00:09:12,670 --> 00:09:15,010 israelienii au raportat la Departamentul Apararii, 195 00:09:15,010 --> 00:09:17,940 că sistemul a fost pierdut timp, că după aproximativ 8 ore de funcționare, 196 00:09:17,940 --> 00:09:21,410 au observat că sistemul a fost devenind vizibil mai puțin precisă. 197 00:09:21,410 --> 00:09:25,290 Departamentul de Apărare a răspuns prin spune toate bateriile Patriot 198 00:09:25,290 --> 00:09:28,070 să nu părăsească sistemele pe de o lungă perioadă de timp. 199 00:09:28,070 --> 00:09:29,960 Ei nu au spus ceea ce a fost de mult timp. 200 00:09:29,960 --> 00:09:30,460 8 ore? 201 00:09:30,460 --> 00:09:30,960 10 oră? 202 00:09:30,960 --> 00:09:31,870 1000 ore? 203 00:09:31,870 --> 00:09:33,734 Nimeni nu știa. 204 00:09:33,734 --> 00:09:35,650 -cele Baterie Patriot staționate la cazarma 205 00:09:35,650 --> 00:09:40,410 la Dhahran, și defecte interne de ceas, fusese pe peste 100 de ore 206 00:09:40,410 --> 00:09:43,041 în noaptea din 25 februarie. 207 00:09:43,041 --> 00:09:47,416 >> -Este Timpul urmarite cu o acuratețe de aproximativ 1/10 dintr-o secundă. 208 00:09:47,416 --> 00:09:49,290 Acum 1/10 dintr-o secundă este un număr de interesant 209 00:09:49,290 --> 00:09:52,700 deoarece nu poate fi exprimată în binar, exact. 210 00:09:52,700 --> 00:09:54,820 Ceea ce înseamnă, nu se poate se exprimă, exact, 211 00:09:54,820 --> 00:09:57,420 în orice computer digitale moderne. 212 00:09:57,420 --> 00:10:01,460 E greu de crezut, dar folosi acest lucru ca un exemplu. 213 00:10:01,460 --> 00:10:03,520 Să luăm numărul, 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 nu poate fi exprimat în zecimal, exact. 215 00:10:07,110 --> 00:10:11,490 1/3 este 0.333 întâmplă pentru infinit. 216 00:10:11,490 --> 00:10:15,486 Nu există nici o modalitate de a face acest lucru, cu precizie absolută, în zecimal. 217 00:10:15,486 --> 00:10:18,360 Asta e exact același tip de problemă care sa întâmplat în Patriot. 218 00:10:18,360 --> 00:10:22,510 Cu cât sistemul a fugit, The mai rău eroarea de timp a devenit. 219 00:10:22,510 --> 00:10:28,420 >> -După 100 de ore de funcționare, eroarea în timp a fost doar aproximativ 1/3 de secundă. 220 00:10:28,420 --> 00:10:31,830 Dar, în ceea ce privește o direcționare rachetă care călătoresc la mach 5, 221 00:10:31,830 --> 00:10:35,890 aceasta a dus la o urmărire eroare de peste 600 de metri. 222 00:10:35,890 --> 00:10:38,970 Ar fi o eroare fatală pentru soldații de la Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> Ce sa întâmplat, este o lansare Scud fost detectat de sateliți de avertizare timpurie, 224 00:10:45,035 --> 00:10:48,930 și ei noi că a fost Scud venind în direcția lor generală. 225 00:10:48,930 --> 00:10:51,170 Ei nu știu de unde venea. 226 00:10:51,170 --> 00:10:53,990 >> -A Fost acum până la radar componentă a sistemului Patriot, 227 00:10:53,990 --> 00:10:58,520 apărarea Dhahran, pentru a localiza și să păstreze evidența rachete inamice primite. 228 00:10:58,520 --> 00:10:59,690 >> -cele Radar a fost foarte inteligent. 229 00:10:59,690 --> 00:11:01,710 Aceasta ar urmări de fapt poziția Scud 230 00:11:01,710 --> 00:11:04,040 și apoi prezice unde probabil ar fi, 231 00:11:04,040 --> 00:11:06,140 data viitoare, radar a trimis un puls afară. 232 00:11:06,140 --> 00:11:07,660 Care a fost numit poarta gama. 233 00:11:07,660 --> 00:11:11,870 >> -Atunci, Odată Patriot decide suficient timp are 234 00:11:11,870 --> 00:11:16,280 trecut să se întoarcă și să verifice următoarea locație pentru acest obiect detectat, 235 00:11:16,280 --> 00:11:17,280 merge înapoi. 236 00:11:17,280 --> 00:11:21,690 Deci, atunci când s-au întors la greșit loc, se vede atunci nici un obiect 237 00:11:21,690 --> 00:11:25,230 și se decide că nu a existat nici obiect, a fost o detectare falsă, 238 00:11:25,230 --> 00:11:26,650 și picături pista. 239 00:11:26,650 --> 00:11:29,690 Viitorul Scud dispărut Din ecranul radar, 240 00:11:29,690 --> 00:11:32,670 și secunde mai târziu, ea trântit în barăci. 241 00:11:32,670 --> 00:11:38,100 Scud ucis 28 și a fost ultima unul a tras în timpul Primului Război din Golf. 242 00:11:38,100 --> 00:11:43,460 Tragic, software-ul actualizat a ajuns la Dhahran în ziua următoare. 243 00:11:43,460 --> 00:11:46,150 Defect de software a avut fost determinată, de închidere 244 00:11:46,150 --> 00:11:48,940 un capitol în tulbure istoria de rachete Patriot. 245 00:11:48,940 --> 00:11:50,220 >> [END PLAYBACK] 246 00:11:50,220 --> 00:11:54,340 >> DAVID J MALAN: Deci, vom arunca o privire la unele limitări similare în doar un pic. 247 00:11:54,340 --> 00:11:58,470 Dar, mai întâi, să trecerea la câteva FYI e. 248 00:11:58,470 --> 00:12:01,575 Deci Unu acest weekend, acolo va fi super secțiuni, 249 00:12:01,575 --> 00:12:04,200 care sunt menite să înlocuiască secțiuni programate regulat, care 250 00:12:04,200 --> 00:12:05,460 va începe o săptămână de aici. 251 00:12:05,460 --> 00:12:08,204 Uitați-vă la site-ul de CS50 pentru mai multe informații cu privire la acestea. 252 00:12:08,204 --> 00:12:11,120 Acestea vor fi, de asemenea, filmat și difuzat traiesc pentru cei care nu pot participa. 253 00:12:11,120 --> 00:12:12,980 Problema set 1 este pe site-ul cursului deja, 254 00:12:12,980 --> 00:12:15,105 și vom arunca o privire la că, în doar un pic. 255 00:12:15,105 --> 00:12:18,350 Și ore de birou de asemenea, va lua plasa acest luni până joi. 256 00:12:18,350 --> 00:12:20,960 >> Deci aceasta a fost cea mai canonice Programul ne-am uitat la ultima dată. 257 00:12:20,960 --> 00:12:23,590 E ca și cum cel mai simplu program puteți scrie în C, 258 00:12:23,590 --> 00:12:25,250 și chiar că este un pic de o cerere îndrăzneață. 259 00:12:25,250 --> 00:12:25,750 Corect? 260 00:12:25,750 --> 00:12:28,070 Pentru că există o mulțime de părând complexitate la acest lucru. 261 00:12:28,070 --> 00:12:30,445 Deci, haideți să aruncăm o privire rapidă la ce unele dintre aceste elemente 262 00:12:30,445 --> 00:12:33,080 au fost și apoi încercați să furnizeze un model mental pentru modul 263 00:12:33,080 --> 00:12:35,710 acestea mai simplă de programe de lucru, iar apoi vom începe 264 00:12:35,710 --> 00:12:38,050 privi lucrurile tot mai complexe. 265 00:12:38,050 --> 00:12:41,280 Deci, această linie de aici, a subliniat acum, în galben, ceea ce a spunem, ultima dată, 266 00:12:41,280 --> 00:12:43,200 că acest lucru nu pentru noi? 267 00:12:43,200 --> 00:12:45,220 Care este scopul servește? 268 00:12:45,220 --> 00:12:46,984 Oricine de la mai departe înapoi? 269 00:12:46,984 --> 00:12:47,483 Da. 270 00:12:47,483 --> 00:12:48,649 >> AUDIENTA MEMBRU: [inaudibil] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID J MALAN: Bine. 273 00:12:51,704 --> 00:12:53,537 Așa că vă oferă acces la comenzi, sau să 274 00:12:53,537 --> 00:12:56,750 le numesc funcții, că cineva altceva scris, care sunt declarate, 275 00:12:56,750 --> 00:12:58,350 ca să spunem așa, într-un alt dosar. 276 00:12:58,350 --> 00:13:02,370 Deci, vom vedea exact ceea ce un fișier .h este versus un fișier .c, în cele din urmă. 277 00:13:02,370 --> 00:13:04,710 Dar pentru moment, doar știu care printf, de exemplu, 278 00:13:04,710 --> 00:13:08,370 este printre funcțiile care au fost a declarat într-un alt fișier, undeva 279 00:13:08,370 --> 00:13:12,930 altceva de pe hard disk nor de care ne permite să acceseze printf și de a folosi 280 00:13:12,930 --> 00:13:15,240 fără a fi nevoie să reinventeze că noi roți. 281 00:13:15,240 --> 00:13:16,930 Între timp, principala. 282 00:13:16,930 --> 00:13:19,690 Care a fost analogul de principal săptămâni, trecută? 283 00:13:19,690 --> 00:13:20,190 Da. 284 00:13:20,190 --> 00:13:21,460 >> AUDIENTA MEMBRU: pavilion verde se face clic. 285 00:13:21,460 --> 00:13:21,740 >> DAVID J MALAN: Da. 286 00:13:21,740 --> 00:13:23,490 Scratch lui, atunci când steagul verde clic. 287 00:13:23,490 --> 00:13:25,560 E ca și cum piesa de puzzle care începe things off. 288 00:13:25,560 --> 00:13:28,306 Și așa în mod similar, a făcut lumea a decis câțiva ani în urmă că în C, 289 00:13:28,306 --> 00:13:30,930 și o grămadă de alte limbi, dacă doriți să scrie un program, 290 00:13:30,930 --> 00:13:33,410 prima funcția trebuie să fie numit, principal. 291 00:13:33,410 --> 00:13:34,641 Și trebuie să arate ca aceasta. 292 00:13:34,641 --> 00:13:36,640 Dar ne vom întoarce, un alt timp, ceea ce, Int, 293 00:13:36,640 --> 00:13:38,690 și, gol, înseamnă în acest context. 294 00:13:38,690 --> 00:13:42,860 Pentru moment, acolade sunt un fel de ca formă piesa de puzzle Scratch lui 295 00:13:42,860 --> 00:13:45,080 care încapsulează un numar de linii. 296 00:13:45,080 --> 00:13:47,070 Și printre pe liniile aici, este cel de aici. 297 00:13:47,070 --> 00:13:51,610 printf este o funcție al cărei scop în viață este de a imprima un șir formatat. 298 00:13:51,610 --> 00:13:55,010 Și de formatat, vă spun pot conecta în valori substituent, 299 00:13:55,010 --> 00:13:58,360 și puteți să specificați cât de multe zecimal puncte, câte numere pentru a imprima 300 00:13:58,360 --> 00:14:00,040 după un punct zecimal și altele asemenea. 301 00:14:00,040 --> 00:14:05,040 Și printf, desigur, ia unul sau mai multe argumente sau parametri, 302 00:14:05,040 --> 00:14:06,770 altfel cunoscut, mai simplu, ca intrări. 303 00:14:06,770 --> 00:14:09,230 >> Deci printf, ca o mulțime de funcții, ia intrări. 304 00:14:09,230 --> 00:14:12,730 Și aceste intrări sunt îmbrățișat de cele două paranteze aici. 305 00:14:12,730 --> 00:14:15,180 Si in interior dintre acestea este o intrare. 306 00:14:15,180 --> 00:14:18,600 Este un șir de caractere, așa cum l-am numit, care este doar o secvență de caractere, 307 00:14:18,600 --> 00:14:22,310 ca un cuvânt, sau o frază, sau un întreg eseu chiar, între ghilimele duble. 308 00:14:22,310 --> 00:14:25,712 Și asta e ceea ce se întâmplă la influența Comportamentul de printf cauza, desigur, 309 00:14:25,712 --> 00:14:27,170 e doar o funcție de imprimare generic. 310 00:14:27,170 --> 00:14:29,600 Nu va ști ce să pentru a imprima, dacă nu-l spun. 311 00:14:29,600 --> 00:14:31,000 Și apoi, unii punctelor caracteristice. 312 00:14:31,000 --> 00:14:34,056 Ce am spus acest lucru ciudat secvență de simboluri este? 313 00:14:34,056 --> 00:14:34,556 Da. 314 00:14:34,556 --> 00:14:35,410 >> AUDIENTA MEMBRU: linie nouă. 315 00:14:35,410 --> 00:14:35,990 >> DAVID J MALAN: linie nouă. 316 00:14:35,990 --> 00:14:39,340 Deci, se dovedește, nu poți pur și simplu lovit, intra, atunci când scrii programului. 317 00:14:39,340 --> 00:14:42,590 În general, compilatorul este mergi la a lua un pic confuz cu privire la ceea ce vrei să spui. 318 00:14:42,590 --> 00:14:45,340 Mai degrabă, trebuie să literalmente spun, da-mi o nouă linie aici. 319 00:14:45,340 --> 00:14:49,506 Și așa / n, în general, este ceea ce am apela un caracter de evacuare. 320 00:14:49,506 --> 00:14:50,870 Deci n, pentru noua linie. 321 00:14:50,870 --> 00:14:53,810 Și compilatorul stie că, atunci când vede / n, 322 00:14:53,810 --> 00:14:57,420 aceasta ar trebui să inducă fapt calculator, în cele din urmă, sau printf, în acest caz, 323 00:14:57,420 --> 00:15:00,260 pentru a imprima un nou real line, cum ar fi lovind, intra, 324 00:15:00,260 --> 00:15:01,480 tastă de pe tastatură. 325 00:15:01,480 --> 00:15:05,620 Și, în fine, ceea ce a făcut spunem această bucată de sintaxă este pentru? 326 00:15:05,620 --> 00:15:06,591 Ce nu-l reprezintă? 327 00:15:06,591 --> 00:15:07,090 Da. 328 00:15:07,090 --> 00:15:07,490 >> AUDIENTA MEMBRU: [inaudibil] 329 00:15:07,490 --> 00:15:08,660 >> DAVID J MALAN: E doar capătul liniei. 330 00:15:08,660 --> 00:15:09,909 Este sfarsitul declarația. 331 00:15:09,909 --> 00:15:11,890 Și să realizeze că noi nu le-a pus peste tot. 332 00:15:11,890 --> 00:15:13,900 Noi cu siguranță nu le-a pus la capetele de fiecare linie. 333 00:15:13,900 --> 00:15:16,680 De exemplu, există nimeni cu privire la de prima linie, nu e nimeni pe linie 334 00:15:16,680 --> 00:15:18,680 cu, principala, nu e nici unul după acolade, 335 00:15:18,680 --> 00:15:21,740 dar veți începe să vedeți și de a lua familiarizat cu unde este solicitat. 336 00:15:21,740 --> 00:15:26,014 Și e aproape întotdeauna după o funcție apel sau o declarație, o acțiune 337 00:15:26,014 --> 00:15:27,180 că sunteți de fapt luați. 338 00:15:27,180 --> 00:15:29,520 >> Și știu acum, mai ales dacă printre cei mai puțin confortabil, 339 00:15:29,520 --> 00:15:32,540 Acestea sunt tipurile de lucruri stupide că veți termina trage accidental 340 00:15:32,540 --> 00:15:33,873 capul de perete de peste. 341 00:15:33,873 --> 00:15:36,107 Pentru că vei putea logic încrezător în unele probleme 342 00:15:36,107 --> 00:15:38,440 ai rezolvat o problemă pentru set, și al naibii lucru doar 343 00:15:38,440 --> 00:15:40,187 nu va compila sau chiar executați. 344 00:15:40,187 --> 00:15:43,270 Și atât de des, de timpuriu, o să fie pentru că ai ratat o paranteză, 345 00:15:43,270 --> 00:15:44,455 sau ai ratat un punct și virgulă. 346 00:15:44,455 --> 00:15:46,547 Și așa doar să fie conștient din aceste tipuri de lucruri, 347 00:15:46,547 --> 00:15:49,380 și încercați să nu pentru a obține frustrat de ei, deoarece foarte repede face acest lucru 348 00:15:49,380 --> 00:15:50,640 devin pălărie vechi. 349 00:15:50,640 --> 00:15:53,910 Dar este foarte ușor pentru a obține frustrat timpuriu, ca un rezultat. 350 00:15:53,910 --> 00:15:57,020 >> Deci, acum, haideți să aruncăm o privire la modul în care această linie este, de fapt de lucru 351 00:15:57,020 --> 00:15:59,170 și apoi uita-te la un ușor unul mai complicat. 352 00:15:59,170 --> 00:16:02,017 Deci, avem peste Aici, capacitatea de a se bazeze pe acest ecran. 353 00:16:02,017 --> 00:16:04,100 Și să presupunem că acest lucru este ecranul computerului meu, 354 00:16:04,100 --> 00:16:08,589 dar am scris, salut programul, și nu au pus în aplicare, printf. 355 00:16:08,589 --> 00:16:10,130 Altcineva a pus în aplicare, printf. 356 00:16:10,130 --> 00:16:12,420 Cine ar dori să pretindă la au pus în aplicare, printf? 357 00:16:12,420 --> 00:16:12,920 Dacă am putea? 358 00:16:12,920 --> 00:16:13,830 Bine, care e numele tău? 359 00:16:13,830 --> 00:16:14,155 >> STUDENT 1: [? Copal. ?] 360 00:16:14,155 --> 00:16:15,529 >> DAVID J MALAN: Copal, haide sus. 361 00:16:15,529 --> 00:16:16,430 Haide sus. 362 00:16:16,430 --> 00:16:17,070 In regula. 363 00:16:17,070 --> 00:16:22,260 Deci avem, aici, unele etichete de nume, din moment ce vom face un mic joc de acest lucru. 364 00:16:22,260 --> 00:16:26,270 Și vă vom suna, printf. 365 00:16:26,270 --> 00:16:30,170 Și dacă vrei să vii aici, ceea ce tocmai am desenat pe ecran, 366 00:16:30,170 --> 00:16:32,340 este destul de simplu, nu sunt eu, asta. 367 00:16:32,340 --> 00:16:35,550 >> Bine, deci, Buna ziua numele meu este, printf, dacă doriți pentru a pune asta pe. 368 00:16:35,550 --> 00:16:35,740 In regula. 369 00:16:35,740 --> 00:16:37,360 Și dacă puteți merge suport de pe ecranul computerului 370 00:16:37,360 --> 00:16:39,730 ca și cum sunteți funcția pe care a venit cu acest sistem informatic. 371 00:16:39,730 --> 00:16:42,063 Și scopul tău în viață este pentru a imprima de fapt ceva. 372 00:16:42,063 --> 00:16:44,560 Dar la fel ca programul ne a avut doar pe ecran, aici, 373 00:16:44,560 --> 00:16:47,060 vom trebui să de fapt, vă dau câteva intrare. 374 00:16:47,060 --> 00:16:51,810 >> Și astfel, în cazul în care de intrare meu, aici, este aparent, ceea ce este trecut la printf, 375 00:16:51,810 --> 00:16:53,730 hai fel de ea bate joc așa. 376 00:16:53,730 --> 00:16:58,720 Am de gând să scrie literalmente pe o bucată de hârtie, "Bună ziua, lume," 377 00:16:58,720 --> 00:17:03,020 backslash N. Și să fie clar, ceea ce Tocmai am desenat pe această bucată de hârtie, 378 00:17:03,020 --> 00:17:04,020 arata ca acest lucru. 379 00:17:04,020 --> 00:17:08,730 Așa că atunci când am rula acest program, iar acest lucru linie de cod galben este executat, 380 00:17:08,730 --> 00:17:12,970 e ca și cum I, programul salut, Sunt predarea unele de intrare pe la o funcție 381 00:17:12,970 --> 00:17:13,970 că altcineva a scris. 382 00:17:13,970 --> 00:17:16,595 >> Și dacă, cu degetul, ar putea, de fapt, cu degetul, 383 00:17:16,595 --> 00:17:21,520 desena pe ecran, indiferent de este ați fost înmânat, 384 00:17:21,520 --> 00:17:27,465 efectul, în cele din urmă, este de a vedea exact care, pe ecran. 385 00:17:27,465 --> 00:17:29,140 Și un caz mic colt aici. 386 00:17:29,140 --> 00:17:31,540 Si bine, noi nu ar trebui să vedeți , linia noua, în acest moment. 387 00:17:31,540 --> 00:17:33,900 Ar fi incorect pentru tine să atragă în mod explicit newline. 388 00:17:33,900 --> 00:17:36,810 Dar dacă ne-am păstrat scris cuvinte pe ecran, s-ar ajunge mai jos care. 389 00:17:36,810 --> 00:17:39,560 >> Așa că vă mulțumesc foarte mult, dar stick în jurul valorii de aici pentru doar un moment. 390 00:17:39,560 --> 00:17:42,860 Avem nevoie acum un alt voluntar, dacă am putea, 391 00:17:42,860 --> 00:17:46,830 care va trebui să joace rolul de-- E doar oameni din orchestra 392 00:17:46,830 --> 00:17:47,355 acum. 393 00:17:47,355 --> 00:17:47,980 Cum about-- OK. 394 00:17:47,980 --> 00:17:48,480 Chiar aici. 395 00:17:48,480 --> 00:17:49,180 Haide sus. 396 00:17:49,180 --> 00:17:49,955 Care e numele tău? 397 00:17:49,955 --> 00:17:50,922 >> STUDENT 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID J MALAN: Ne pare rău? 399 00:17:51,796 --> 00:17:52,990 STUDENT 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 DAVID J MALAN: Ethan, haide sus. 401 00:17:55,320 --> 00:17:55,820 Nu? 402 00:17:55,820 --> 00:17:58,390 Am primit asta greșit, chiar după ce ai spus de două ori? 403 00:17:58,390 --> 00:17:58,890 Haide sus. 404 00:17:58,890 --> 00:18:00,030 E greu să auzi aici. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 BINE. 407 00:18:05,740 --> 00:18:07,190 Și îmi pare rău, care e numele tău? 408 00:18:07,190 --> 00:18:07,680 >> STUDENT 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? DAVID J MALAN: Ivay. ?] BINE. 410 00:18:08,790 --> 00:18:10,430 Pentru moment, dacă nu minte, ești getString. 411 00:18:10,430 --> 00:18:11,013 >> STUDENT 2: OK. 412 00:18:11,013 --> 00:18:11,797 Misto. 413 00:18:11,797 --> 00:18:14,630 DAVID J MALAN: Deci, dacă doriți să stea aici pentru o clipă, 414 00:18:14,630 --> 00:18:17,100 haideți să aruncăm o privire la o ușoară Programul mai complex, care 415 00:18:17,100 --> 00:18:18,670 are acum trei linii de cod. 416 00:18:18,670 --> 00:18:24,080 Deci avem, o, afirma numele dvs. folosind printf; doi, un apel la getString, 417 00:18:24,080 --> 00:18:28,060 urmată de o misiune într-o variabilă numită, string s, sau numit s; 418 00:18:28,060 --> 00:18:31,260 și apoi un alt apel la, printf, dar de data aceasta cu două intrări. 419 00:18:31,260 --> 00:18:33,646 >> Stat așa că am făcut deja numele dvs., sau, mai degrabă, ne-am 420 00:18:33,646 --> 00:18:34,770 deja făcut un apel printf. 421 00:18:34,770 --> 00:18:38,960 Deci, am de gând să scrie, de stat numele tau. 422 00:18:38,960 --> 00:18:42,089 Și astfel, ce am de gând să trece, printf, într-o clipă, 423 00:18:42,089 --> 00:18:43,005 este destul de simplu, acest lucru. 424 00:18:43,005 --> 00:18:47,760 Deci, dacă vrei să mergi mai departe și să acest pe ecran, care este de intrare dumneavoastră acum. 425 00:18:47,760 --> 00:18:48,260 In regula. 426 00:18:48,260 --> 00:18:51,160 Și uita șir, acum avem propria noastră linie de cod aici. 427 00:18:51,160 --> 00:18:54,470 Deci, în, getString, avem nevoie de pentru a apela de fapt, getString. 428 00:18:54,470 --> 00:18:57,920 Deci, scopul tău în viață este de a merge doar afară, în orchestra, dacă ai putea, 429 00:18:57,920 --> 00:18:58,980 și de a lua numele cuiva. 430 00:18:58,980 --> 00:19:00,860 Dar să vă dau ceva să-l puneți pe. 431 00:19:00,860 --> 00:19:02,908 Dacă doriți să, du-te înainte și a obține un șir de caractere, 432 00:19:02,908 --> 00:19:05,241 obține numele cuiva pe care bucată de hârtie, dacă ai putea. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> In regula. 435 00:19:13,530 --> 00:19:15,250 Și vom vedea, într-o clipă, al cărui nume ne apropiem. 436 00:19:15,250 --> 00:19:17,630 Între timp, ceea ce am de gând să au pregătit, este o piesă goală 437 00:19:17,630 --> 00:19:21,340 de hârtie, în care, am de gând pentru a stoca orice valoare se 438 00:19:21,340 --> 00:19:25,752 este că getString se întoarce la mine, I, fiind o variabilă string numit, s. 439 00:19:25,752 --> 00:19:26,252 In regula. 440 00:19:26,252 --> 00:19:27,293 Deci, ce ai aici? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 In regula. 443 00:19:28,450 --> 00:19:30,910 Deci avem numele lui Nik aici. 444 00:19:30,910 --> 00:19:33,750 Deci, asta este ceea ce literalmente a fost returnat 445 00:19:33,750 --> 00:19:35,810 pentru mine, ca să spunem așa, de getString. 446 00:19:35,810 --> 00:19:38,720 >> Eu, acum, am de gând să executa partea stângă 447 00:19:38,720 --> 00:19:43,440 de această expresie, în cazul în care pur și simplu notați, în scopuri de astăzi, Nik. 448 00:19:43,440 --> 00:19:46,470 Deci, acum, am o variabilă numit, s, stocarea numele lui Nik. 449 00:19:46,470 --> 00:19:49,520 Am dat deja la printf, un argument anterior. 450 00:19:49,520 --> 00:19:52,800 Dar, în noastră linie de a treia și ultima cod, am de fapt, să printf mână 451 00:19:52,800 --> 00:19:58,500 ceva un pic different-- "Bună ziua,% s" backslash n. 452 00:19:58,500 --> 00:20:01,510 >> Și astfel ultima linie am de gând la send-- ultimul lucru sunt 453 00:20:01,510 --> 00:20:03,060 O să scriu acum, este aceasta. 454 00:20:03,060 --> 00:20:06,310 Deci, cele două linii de cod, sau mai degrabă ultima linie de cod, 455 00:20:06,310 --> 00:20:10,690 solicită două inputs-- unul, acest, și doi, aceasta. 456 00:20:10,690 --> 00:20:13,330 Deci, dacă funcția noastră printf poate lua acum cum ar fi de intrare, 457 00:20:13,330 --> 00:20:16,000 permiteți-mi să goli ecranul pentru tine. 458 00:20:16,000 --> 00:20:17,250 De fapt nu, poti sa te duci mai departe. 459 00:20:17,250 --> 00:20:19,333 Vom lăsa în sus, din moment ce E pe același program. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Ar trebui să vedem, salut, Nik. 462 00:20:27,380 --> 00:20:27,880 In regula. 463 00:20:27,880 --> 00:20:29,670 Deci, acest lucru a fost destul de puține cercuri pentru a sari prin, doar 464 00:20:29,670 --> 00:20:31,620 pentru a scrie, starea ta numele, si, Buna, ziua, Nik. 465 00:20:31,620 --> 00:20:37,210 Dar această idee simplă de mesaj care trece, de trecere intrare și de ieșire de recepție, 466 00:20:37,210 --> 00:20:40,430 este exact modelul vom avea chiar și pentru cele mai complexe funcții. 467 00:20:40,430 --> 00:20:41,804 Așa că vă mulțumesc foarte mult pentru amândoi. 468 00:20:41,804 --> 00:20:43,730 Avem o stres minunat minge aici pentru tine. 469 00:20:43,730 --> 00:20:48,890 Și vă mulțumesc pentru getString nostru și voluntari printf deopotrivă. 470 00:20:48,890 --> 00:20:49,551 Multumesc. 471 00:20:49,551 --> 00:20:50,050 In regula. 472 00:20:50,050 --> 00:20:50,966 Vă mulțumesc pentru amândoi. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Deci am vorbit despre Până în prezent, cea mai mare parte despre siruri de caractere. 475 00:21:00,430 --> 00:21:06,550 Și se pare că C poate de fapt înțelege câteva tipuri de date diferite. 476 00:21:06,550 --> 00:21:08,860 De fapt, haideți să aruncăm o privire la aceste aici. 477 00:21:08,860 --> 00:21:12,490 Deci C, și o mulțime de limbi, înțelege lucrurile numite caractere. 478 00:21:12,490 --> 00:21:16,852 O char este, în general, o octet unic, sau opt biți. 479 00:21:16,852 --> 00:21:19,810 Și reprezintă un singur caracter, ca litera A, sau de capital 480 00:21:19,810 --> 00:21:21,990 scrisoare A, sau scrisoarea litere mici A, sau un semn de exclamare, 481 00:21:21,990 --> 00:21:25,440 sau orice caracter care aveți posibilitatea să tastați pe tastatura, și, uneori, chiar mai mult. 482 00:21:25,440 --> 00:21:26,795 De asemenea, se întâmplă să vedem flotoare. 483 00:21:26,795 --> 00:21:31,160 Un float este, în general, o 32-bit valoare, sau patru octeți 484 00:21:31,160 --> 00:21:33,660 pentru că, din nou, un octet este de opt biți. 485 00:21:33,660 --> 00:21:36,675 >> Deci, un float este o valoare în virgulă mobilă, ceva cu un punct zecimal. 486 00:21:36,675 --> 00:21:38,550 Și într-adevăr, asta e ceea ce filmul vorbea 487 00:21:38,550 --> 00:21:42,240 când au vorbit despre plutitoare Valorile de punct, un numar fix de biti 488 00:21:42,240 --> 00:21:43,940 fiind folosit pentru a reprezenta un număr real. 489 00:21:43,940 --> 00:21:45,740 Dar există, de asemenea, lucruri numite dublu. 490 00:21:45,740 --> 00:21:47,860 Acestea există în Java, dacă ați luat APCS, 491 00:21:47,860 --> 00:21:51,540 și un dublu, ca nume de fericire sugerează, este de două ori la fel de mare ca un float. 492 00:21:51,540 --> 00:21:54,540 Este încă un număr real, are doar mai mult de biți 493 00:21:54,540 --> 00:21:58,390 cu care să fie tot mai precise, sau pentru a stoca numere și mai mari. 494 00:21:58,390 --> 00:21:58,890 Int este ușor. 495 00:21:58,890 --> 00:22:00,181 Am vorbit despre asta ultima oară. 496 00:22:00,181 --> 00:22:01,160 E doar un număr întreg. 497 00:22:01,160 --> 00:22:03,980 Și este, în general, 32 biți, sau patru octeți. 498 00:22:03,980 --> 00:22:07,850 >> Și așa, dacă aveți, să vedem acum, 32 bits-- și am făcut acest lucru în săptămâna 0, 499 00:22:07,850 --> 00:22:10,820 vreodată atât de pentru scurt timp, dacă aveți 32 de biți, ceea ce este cel mai mare 500 00:22:10,820 --> 00:22:13,580 numărul pe care poate reprezenta ca un întreg? 501 00:22:13,580 --> 00:22:16,080 Dă sau ia? 502 00:22:16,080 --> 00:22:18,380 E ca și cum 4000000000, și asta doar dacă suntem 503 00:22:18,380 --> 00:22:20,690 reprezentând doar numere pozitive. 504 00:22:20,690 --> 00:22:23,930 Dacă aveți 32 de biți, și doriți să reprezintă numere negative, precum și, 505 00:22:23,930 --> 00:22:27,100 Gama este, în esență, negativ 2 miliarde la pozitiv 2000000000. 506 00:22:27,100 --> 00:22:29,250 Dar, în general, vom începe la 0 merge până la 4 miliarde. 507 00:22:29,250 --> 00:22:32,400 >> Nu trebuie să știe cu precizie, dar putem vedea acest lucru, de fapt, dacă am doar 508 00:22:32,400 --> 00:22:36,400 deschide un pic calculator, aici. 509 00:22:36,400 --> 00:22:41,070 Pot face 2 32, și care este exact cat de mare, 510 00:22:41,070 --> 00:22:43,190 cât de multe valori puteți reprezintă, cu 32 de biți. 511 00:22:43,190 --> 00:22:44,442 Și este de aproximativ 4 miliarde de euro. 512 00:22:44,442 --> 00:22:46,900 Așa că vom păstra văzând că numărul în câteva locuri diferite. 513 00:22:46,900 --> 00:22:48,890 Dar dacă ai nevoie de mai mult numere decât atât, 514 00:22:48,890 --> 00:22:51,670 se pare nu e ceva numit un lung lung. 515 00:22:51,670 --> 00:22:54,005 Și un lung lung este în general 64 de biți, care 516 00:22:54,005 --> 00:22:56,380 înseamnă că este un ordin de mărime chiar mai mare decât un int. 517 00:22:56,380 --> 00:22:59,510 >> Deci, eu nu pot pronunța cel mai mare Numărul pe care le poate reprezenta, 518 00:22:59,510 --> 00:23:01,340 dar e semnificativ mai mare. 519 00:23:01,340 --> 00:23:05,190 Acum ca parte, istoric, dacă un int este de 32 de biți, 520 00:23:05,190 --> 00:23:12,780 și o lungă lung este de 64 de biți, cum mare este un lung, nu o lungă lung? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Ai crede că e mai mult decât un int dar poate mai lung decât un lung lung, 523 00:23:20,330 --> 00:23:21,400 dar de fapt depinde. 524 00:23:21,400 --> 00:23:23,400 >> Și așa se pare că unul de frustrările de asemenea, 525 00:23:23,400 --> 00:23:26,830 cu scrierea de cod pe anumite sisteme, este faptul că nu toate aceste tipuri de date 526 00:23:26,830 --> 00:23:28,440 au valori pre-determinate. 527 00:23:28,440 --> 00:23:29,771 Uneori este atât de multe de biți. 528 00:23:29,771 --> 00:23:31,020 Uneori este că multe biți. 529 00:23:31,020 --> 00:23:32,750 Deci, va trebui de fapt să știe, uneori, ceea ce hardware 530 00:23:32,750 --> 00:23:34,083 rulați software-ul pe. 531 00:23:34,083 --> 00:23:36,960 Din fericire, alte limbi și alte tipuri de date care există în prezent, 532 00:23:36,960 --> 00:23:38,400 vă permit să fie mai precise. 533 00:23:38,400 --> 00:23:41,220 Ei bine, am văzut șir, și am văzut bool, de asemenea, 534 00:23:41,220 --> 00:23:43,960 dar se pare că cei vin numai cu biblioteca CS50. 535 00:23:43,960 --> 00:23:46,240 Deci, cei care nu sunt construite în C. Cei schimb, 536 00:23:46,240 --> 00:23:49,340 vin în acel fișier numit CS50.h, că vom în cele din urmă 537 00:23:49,340 --> 00:23:51,831 coaja înapoi straturile de. 538 00:23:51,831 --> 00:23:53,830 Dar pentru moment, acestea sunt doar Tipuri de date suplimentare. 539 00:23:53,830 --> 00:23:57,060 Un bool este un adevărat sau fals, precum și o string este o secvență de caractere, 540 00:23:57,060 --> 00:23:57,970 ca un cuvânt. 541 00:23:57,970 --> 00:24:01,690 Acum printf, am văzut, are substituenți,% s este unul. 542 00:24:01,690 --> 00:24:05,430 Și s-ar putea, de acum, deduce din aceste exemple, cum alte 543 00:24:05,430 --> 00:24:07,720 ai putea avea un substituent pentru diferite tipuri de date. 544 00:24:07,720 --> 00:24:11,150 De exemplu, să ia o presupunere, dacă a vrut să imprima o singură char folosind 545 00:24:11,150 --> 00:24:15,270 printf, substituent este, probabil,% c. 546 00:24:15,270 --> 00:24:19,650 Și dacă doriți să imprimați o întreg cu substituent,% i. 547 00:24:19,650 --> 00:24:25,150 % LLD este o valoare zecimală lung lung, dar mult timp mult timp, astfel încât hărțile la asta. 548 00:24:25,150 --> 00:24:28,640 Și apoi% f pentru plutitoare Valoarea punct sau pentru un dublu, 549 00:24:28,640 --> 00:24:31,270 astfel încât, uneori acestea sunt reutilizate în diferite contexte. 550 00:24:31,270 --> 00:24:33,350 Deci, vom vedea și de a folosi unii dintre cei lungul timpului. 551 00:24:33,350 --> 00:24:36,420 Și printf și alte funcții, de asemenea, secvențe escape altora sprijin ", 552 00:24:36,420 --> 00:24:38,080 și uneori, acestea sunt necesare. 553 00:24:38,080 --> 00:24:39,770 Deci n backslash este o noua linie. 554 00:24:39,770 --> 00:24:42,886 Backslash T, nimeni nu doresc să ia o lovitură de cuțit? 555 00:24:42,886 --> 00:24:43,760 AUDIENTA MEMBRU: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID J MALAN: Tab. 557 00:24:44,551 --> 00:24:46,810 Deci, dacă doriți de fapt pentru a imprima o filă, nu 558 00:24:46,810 --> 00:24:49,940 un număr fix de locuri de real, ci o caracter tab, nu a lovit-ul, 559 00:24:49,940 --> 00:24:53,490 fila, tastă de pe tastatură, în general, ce faci de fapt backslash T. 560 00:24:53,490 --> 00:24:57,750 Citat dublu backslash, de ce aș dori vreodată asta? 561 00:24:57,750 --> 00:24:58,250 Corect? 562 00:24:58,250 --> 00:25:00,417 De ce nu pot doar să tastați un citat dublu pe tastatura mea? 563 00:25:00,417 --> 00:25:02,124 PUBLICUL MEMBRU: Pentru că, în caz contrar, este 564 00:25:02,124 --> 00:25:04,830 O să cred că e sfârșitul de ca print-ul [? text. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID J MALAN: Exact. 566 00:25:05,420 --> 00:25:07,211 Amintiți-vă, cu nostru exemple printf, atunci când am 567 00:25:07,211 --> 00:25:10,075 treceau la printf în intrare, pe partea stângă a șir de intrare care 568 00:25:10,075 --> 00:25:12,950 și cu privire la dreptul de intrare care primăvară, desigur, a fost un citat dublu. 569 00:25:12,950 --> 00:25:16,270 În cazul în care propria intrare are un dublu citat în mijlocul care, 570 00:25:16,270 --> 00:25:18,920 calculatorul ar putea potențial obține confuz, cu privire la, 571 00:25:18,920 --> 00:25:20,760 face acest citat dublu aparțin la mijloc? 572 00:25:20,760 --> 00:25:22,150 Are parte de cea din stânga? 573 00:25:22,150 --> 00:25:23,566 Are parte de un drept? 574 00:25:23,566 --> 00:25:26,780 Și astfel, dacă doriți să-l facă super- clar, ce faci backslash citat dublu, 575 00:25:26,780 --> 00:25:30,480 astfel că este scăpat, ca să spunem așa, și nu este confundat de altceva. 576 00:25:30,480 --> 00:25:34,400 Și există alte câteva aici, R backslash, ghilimele simple, 0, 577 00:25:34,400 --> 00:25:36,510 ca să vedem în timp, precum și. 578 00:25:36,510 --> 00:25:37,760 Și acum, ce despre funcții? 579 00:25:37,760 --> 00:25:41,630 >> Deci acțiunile pe care le pot lua până acum în această limbă, C, ei bine, ne-am văzut, 580 00:25:41,630 --> 00:25:44,320 printf, desigur, și toate de celelalte de pe ecran, 581 00:25:44,320 --> 00:25:47,140 aici, că vom folosi pentru Primele doar câteva săptămâni de curs, de 582 00:25:47,140 --> 00:25:48,485 veni atunci când biblioteca CS50. 583 00:25:48,485 --> 00:25:51,850 Și ele fac mult mai ușor, în C, pentru a obține de fapt, introduse de utilizator. 584 00:25:51,850 --> 00:25:54,200 Se pare că, în C, și sincer în câteva limbi, 585 00:25:54,200 --> 00:25:57,450 este o adevarata durere în gât pentru a face ceva simplu, cum ar fi solicita utilizatorului 586 00:25:57,450 --> 00:26:01,310 pentru tastatură, pentru intrare lui sau a ei. 587 00:26:01,310 --> 00:26:03,240 Și astfel aceste funcții face mai ușor. 588 00:26:03,240 --> 00:26:05,472 >> Și are, de asemenea eroare verificarea pe tot parcursul, 589 00:26:05,472 --> 00:26:07,180 astfel încât, atunci când amintesc de miercuri, am 590 00:26:07,180 --> 00:26:09,740 a văzut, încercați din nou, de avertizare, atunci când nu a cooperat, 591 00:26:09,740 --> 00:26:11,700 și am scris un cuvânt, în loc de un număr? 592 00:26:11,700 --> 00:26:15,402 Am făcut ridicarea grele devreme pe pentru a vă asigura utilizatorului cooperează. 593 00:26:15,402 --> 00:26:17,860 Dar acestea sunt doar de formare roți pe care le vom în cele din urmă, 594 00:26:17,860 --> 00:26:19,640 și rapid, scoate. 595 00:26:19,640 --> 00:26:22,630 >> Deci, pentru a recapitulare, apoi, haideți să aruncăm o privire rapidă, 596 00:26:22,630 --> 00:26:26,620 la fel ca am facut cu Scratch, la unele construcții canonice în C. 597 00:26:26,620 --> 00:26:28,580 Acest lucru este menit să, un fel de, să fie un turneu vârtej de vânt, 598 00:26:28,580 --> 00:26:30,990 doar astfel încât să aveți o referință și care le-ați văzut lucruri la inceput. 599 00:26:30,990 --> 00:26:34,100 Dar apoi ne vom uita la codificare reală utiliza unele dintre aceste blocuri. 600 00:26:34,100 --> 00:26:36,710 Atât de mult ca în Scratch, când ne-am afirmații de genul, 601 00:26:36,710 --> 00:26:41,570 spune sau, așteptați, în C, avem funcții precum, cum ar fi printf. 602 00:26:41,570 --> 00:26:45,350 >> Dacă vrem să-și exprime o stare în C, este similară, în spirit, 603 00:26:45,350 --> 00:26:47,840 pentru că piesa de puzzle care arata ca acest lucru în Scratch. 604 00:26:47,840 --> 00:26:49,850 Dar, în loc, ne-am literalmente doar scrie, dacă. 605 00:26:49,850 --> 00:26:51,830 Și apoi, în paranteze, am pus o condiție, 606 00:26:51,830 --> 00:26:54,807 în cazul în care această condiție este ceea ce vom apel, din nou, o expresie booleană. 607 00:26:54,807 --> 00:26:56,390 Și din nou, aceasta este un fel de pseudocod. 608 00:26:56,390 --> 00:26:58,830 Și, de fapt, //, este un comentariu. 609 00:26:58,830 --> 00:27:00,550 E doar cuvinte limba engleză pentru mine. 610 00:27:00,550 --> 00:27:03,000 Dar acest lucru este general Structura unei, în cazul în care, condiție. 611 00:27:03,000 --> 00:27:05,220 Dar vom vedea beton exemple în doar un moment. 612 00:27:05,220 --> 00:27:07,960 >> Dacă doriți să aveți o în ambele sensuri furculiță în drum, 613 00:27:07,960 --> 00:27:11,740 mai mult cum am făcut cu voluntar nostru Miercuri, puteți avea o, altfel dacă. 614 00:27:11,740 --> 00:27:16,020 Și dacă doriți să aveți un al treilea și starea finală, sau situație implicit, 615 00:27:16,020 --> 00:27:19,006 puteți avea doar un bloc altceva, acolo. 616 00:27:19,006 --> 00:27:21,880 Și în mod similar, cu expresii booleene, puteți, și, împreună. 617 00:27:21,880 --> 00:27:24,296 Și am văzut miercuri, că nu este un singur ampersand, 618 00:27:24,296 --> 00:27:28,220 e doi, din motive de nivel inferior, care vom vedea în cele din urmă și să se joace cu. 619 00:27:28,220 --> 00:27:30,410 Sau ING-lucruri împreună este de 2 bare verticale. 620 00:27:30,410 --> 00:27:32,240 Pe o tastatură SUA, acest este, în general, o cheie 621 00:27:32,240 --> 00:27:35,730 cu tasta Shift de mai sus dvs. tasta Enter sau tasta RETURN. 622 00:27:35,730 --> 00:27:38,620 >> Apoi, există aceste lucruri pe care vom folosi poate o dată sau de două ori. 623 00:27:38,620 --> 00:27:42,570 Ele sunt funcțional echivalente cu ceea ce se poate face cu o, în cazul în care, în cazul în care altcineva, 624 00:27:42,570 --> 00:27:44,950 altceva în cazul în care altcineva, construi, dar se numesc un comutator. 625 00:27:44,950 --> 00:27:48,020 Acestea arata foarte diferit, dar vom a se vedea în unele din codul nostru de distribuție, 626 00:27:48,020 --> 00:27:51,890 pentru un viitor set problemă, cel mai probabil, că este, uneori, doar o frumoasa 627 00:27:51,890 --> 00:27:54,060 modalitate de exprimare ansamblu grămadă de condiții, 628 00:27:54,060 --> 00:27:57,590 fără a avea o mulțime de acolade și o mulțime de paranteze și indentare. 629 00:27:57,590 --> 00:28:01,910 Dar ne dau mai energie decât avem deja. 630 00:28:01,910 --> 00:28:02,550 Și acum bucle. 631 00:28:02,550 --> 00:28:05,020 Și aceasta, ne vom uita la un pic mai lent. 632 00:28:05,020 --> 00:28:08,470 Dar apoi, vom începe să utilizeze aceste, în special pentru cei deja familiarizați. 633 00:28:08,470 --> 00:28:13,830 Aceasta este calea canonic, în cazul în care incredibil mod de arcane, pentru a scrie o buclă în C. 634 00:28:13,830 --> 00:28:15,896 >> Acum o buclă în Scratch a fost destul de simplă. 635 00:28:15,896 --> 00:28:17,020 Aveți un, pentru totdeauna, bloc. 636 00:28:17,020 --> 00:28:19,760 Aveți un, repeta, bloc cu doar un număr, trebuie să tastați în. 637 00:28:19,760 --> 00:28:22,220 Și cu, pentru bucla, puteți pună în aplicare atât de aceste idei, 638 00:28:22,220 --> 00:28:23,595 dar e un pic mai tehnic. 639 00:28:23,595 --> 00:28:25,994 Dar sincer, e, de asemenea, relativ simplu. 640 00:28:25,994 --> 00:28:28,160 Odata ce stii ordinea de operații, vă literalmente 641 00:28:28,160 --> 00:28:30,910 sunt doar de gând să conectați în valori și spune calculatorul ce să facă. 642 00:28:30,910 --> 00:28:32,800 Deci, aici este un exemplu. 643 00:28:32,800 --> 00:28:38,040 Aceasta este o buclă care, destul de pur și simplu, contează de la un număr de până 644 00:28:38,040 --> 00:28:40,187 printr-o altă. 645 00:28:40,187 --> 00:28:42,020 Și uite de la ea, chiar dacă aveți 646 00:28:42,020 --> 00:28:44,660 nici o experiență anterioară cu această limbă, ce număr 647 00:28:44,660 --> 00:28:46,920 nu-l, probabil, începe numărarea de la? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 Și bănuiesc că e pentru că vezi că există un int și un i, 650 00:28:50,240 --> 00:28:51,073 care este o variabilă. 651 00:28:51,073 --> 00:28:52,390 Este inițializată la 0. 652 00:28:52,390 --> 00:28:55,670 >> Și apoi mai târziu, se pare ca suntem trece printf, o valoare. 653 00:28:55,670 --> 00:28:58,000 Și, de fapt, am făcut o greșeală de scriere pic aici. 654 00:28:58,000 --> 00:28:59,850 Dar asta e ușor de stabilit. 655 00:28:59,850 --> 00:29:02,390 Permiteți-mi să adăugați în, am aici. 656 00:29:02,390 --> 00:29:06,150 Avem acum printf ființă a trecut această valoare substituent. 657 00:29:06,150 --> 00:29:08,299 Și ce se întâmplă să numere până prin? 658 00:29:08,299 --> 00:29:08,840 Audiența: 50. 659 00:29:08,840 --> 00:29:09,340 50. 660 00:29:09,340 --> 00:29:10,160 49. 661 00:29:10,160 --> 00:29:10,910 DAVID J MALAN: 49. 662 00:29:10,910 --> 00:29:13,340 Deci 50, la prima vedere, pare corect. 663 00:29:13,340 --> 00:29:16,990 Dar că, se pare, va fi condiția noastră că păstrăm verificare. 664 00:29:16,990 --> 00:29:21,740 Și am de gând să se oprească odată i nu mai este mai mică de 50. 665 00:29:21,740 --> 00:29:24,920 Deci această buclă, în schimb, ar trebui să executa, atât timp cât i este mai mic de 50. 666 00:29:24,920 --> 00:29:28,891 Dar, de îndată ce acesta devine 50, sau 51, sau, mai rău, ar trebui să se oprească automat. 667 00:29:28,891 --> 00:29:29,390 In regula. 668 00:29:29,390 --> 00:29:31,200 >> Deci, ce se întâmplă de fapt aici? 669 00:29:31,200 --> 00:29:33,160 Astfel încât acesta este de ordinul a operații pentru o buclă. 670 00:29:33,160 --> 00:29:35,440 Unul, aveți așa-numitele inițializare. 671 00:29:35,440 --> 00:29:38,264 Acest bucată galben evidențiat de cod este executat în primul rând, 672 00:29:38,264 --> 00:29:40,930 și are ca efect faptul că, pe Miercuri, probabil vă imaginați. 673 00:29:40,930 --> 00:29:45,500 Se creează o variabilă i și a numit- magazine în care variabila valoarea 0. 674 00:29:45,500 --> 00:29:47,560 Deci i este 0 în acest moment în povestea. 675 00:29:47,560 --> 00:29:49,680 >> Următorul lucru pe care se întâmplă în acest construct, 676 00:29:49,680 --> 00:29:51,540 este că această condiție devine verificat. 677 00:29:51,540 --> 00:29:54,325 Asa ca am verifica imediat, este i mai mică de 50? 678 00:29:54,325 --> 00:29:57,700 Și, desigur, răspunsul pentru acum este, cu siguranță, da. 679 00:29:57,700 --> 00:30:00,710 Da, pentru că i este 0, și care este cu siguranță mai puțin de 50. 680 00:30:00,710 --> 00:30:03,866 Apoi ce se întâmplă, este faptul că această linie de cod este executat. 681 00:30:03,866 --> 00:30:06,740 Și, de fapt, în cazul în care există mai multe de linii de cod în aceste acolade, 682 00:30:06,740 --> 00:30:09,020 toate se execută una după alta. 683 00:30:09,020 --> 00:30:11,450 >> Și în efectul de aici, este aparent, să imprime 684 00:30:11,450 --> 00:30:15,365 I numărul, care este de gând să fie 0, iar apoi 1, și apoi 2. 685 00:30:15,365 --> 00:30:15,865 Dar de ce? 686 00:30:15,865 --> 00:30:17,410 De ce nu-l crește? 687 00:30:17,410 --> 00:30:20,680 Ei bine, al patrulea lucru pe care se întâmplă este că această sintaxă 688 00:30:20,680 --> 00:30:22,610 este executat, după virgulă. 689 00:30:22,610 --> 00:30:27,506 Am ++ este un mod de a spune prescurtare; ia valoarea I, și se adaugă 1 la acesta; 690 00:30:27,506 --> 00:30:30,380 și apoi data viitoare în jurul valorii de, adaugă 1 la acesta; și data viitoare în jurul valorii de, 691 00:30:30,380 --> 00:30:31,330 adăugați 1 la acesta. 692 00:30:31,330 --> 00:30:33,640 >> Deci, dacă vom păstra merge, ce se va întâmpla 693 00:30:33,640 --> 00:30:35,890 următor este ca eu nu am de gând să inițializa am vreodată. 694 00:30:35,890 --> 00:30:38,290 Dacă am păstrat inițializare i la 0, acest exemplu 695 00:30:38,290 --> 00:30:41,110 nu s-ar termina, deoarece i-ar fi blocat la 0. 696 00:30:41,110 --> 00:30:43,870 Dar ce se va întâmpla este că această condiție vor fi verificate, 697 00:30:43,870 --> 00:30:54,280 linia de cod vor fi executate, I va fi incrementat, 698 00:30:54,280 --> 00:30:56,970 condiție vor fi verificate, cod va primi executat. 699 00:30:56,970 --> 00:30:59,790 Și a ținut din nou cu bicicleta, și din nou, și din nou, 700 00:30:59,790 --> 00:31:03,340 până când am ++ induce o valoare de 50. 701 00:31:03,340 --> 00:31:05,870 >> Condiția spune apoi, este mai mică de 50 50? 702 00:31:05,870 --> 00:31:09,360 Răspunsul, desigur, nu este, și astfel încât întregul cod se oprește de executare. 703 00:31:09,360 --> 00:31:13,020 Și, dacă aveți mai mult de cod de pe ecran jos, asta e ceea ce se întâmplă în continuare. 704 00:31:13,020 --> 00:31:17,530 Se iese din aceste acolade și continuă să imprime mai după aceea. 705 00:31:17,530 --> 00:31:20,470 >> Deci, o gluma acum, de la foxtrot, care poate vei înțelege acum. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 Este intotdeauna amuzant. 708 00:31:31,560 --> 00:31:34,110 E ca Chuckles fel de pătrunde, 709 00:31:34,110 --> 00:31:38,370 și apoi îți dai seama nu ar trebui fi râs la umor ca asta. 710 00:31:38,370 --> 00:31:41,160 Dar există unele Takeaway aici, pedagogic, de asemenea. 711 00:31:41,160 --> 00:31:43,577 Deci, se dovedește că eu sunt lipsește o bucată de sintaxă, 712 00:31:43,577 --> 00:31:45,410 sau a Foxtrot lipsește o bucată de sintaxă aici. 713 00:31:45,410 --> 00:31:48,076 Ceea ce lipsește, că am avut în orice alt exemplu, până acum? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Întoarcere, este acolo, așa asta e altceva, 716 00:31:53,390 --> 00:31:54,440 că ne vom întoarce la timp, înainte de. 717 00:31:54,440 --> 00:31:55,398 Ce lipsește, totuși? 718 00:31:55,398 --> 00:31:55,908 Da. 719 00:31:55,908 --> 00:31:58,150 >> AUDIENTA membru: inițializare de [neauzit]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID J MALAN: OK. 721 00:31:58,470 --> 00:31:58,980 Deci da. 722 00:31:58,980 --> 00:32:03,210 Deci, de fapt, acest este-- Ei bine, și numărul de este initializat 723 00:32:03,210 --> 00:32:05,470 deasupra, sau, mai degrabă, a declarat deasupra. 724 00:32:05,470 --> 00:32:06,960 Deci, acesta este un alt mod de a face aceasta. 725 00:32:06,960 --> 00:32:08,685 Dar nu într-o singură linie este valabil, deși. 726 00:32:08,685 --> 00:32:09,310 Ce zici de aici? 727 00:32:09,310 --> 00:32:10,196 >> AUDIENTA MEMBRU: Este acolade? 728 00:32:10,196 --> 00:32:10,640 >> DAVID J MALAN: Da. 729 00:32:10,640 --> 00:32:12,080 Deci acolade lipsesc. 730 00:32:12,080 --> 00:32:15,495 Dar acest cod, vreau să spun, să lor de credit, este, de fapt, sintactic valabil. 731 00:32:15,495 --> 00:32:17,610 Se pare, tu nu nevoie de acolade 732 00:32:17,610 --> 00:32:21,691 dacă aveți doar o linie de cod care vrei să execute în interiorul buclei. 733 00:32:21,691 --> 00:32:24,190 Acum ne-am mereu, în clasă și în toate de cod de distributie, 734 00:32:24,190 --> 00:32:26,730 includ acolade oricum, doar de dragul lui claritate. 735 00:32:26,730 --> 00:32:29,010 Dar dau seama că în manuale și exemple on-line, 736 00:32:29,010 --> 00:32:31,300 s-ar putea vedea foarte bine ondulat bretele lipsesc uneori. 737 00:32:31,300 --> 00:32:34,850 Și asta e în regulă, dacă ceea ce au indentate și destinate 738 00:32:34,850 --> 00:32:38,650 este doar o singură linie de cod, și nu mai multe linii de cod, potențial. 739 00:32:38,650 --> 00:32:39,150 In regula. 740 00:32:39,150 --> 00:32:44,500 Deci, legate de problema imprecizie, este o problemă de preaplin, 741 00:32:44,500 --> 00:32:48,560 în sensul că, în mod similar, Nu întregi au limite pentru a le 742 00:32:48,560 --> 00:32:49,970 la fel ca valorile în virgulă mobilă? 743 00:32:49,970 --> 00:32:53,120 În lumea o virgulă mobilă valori, putem fi atât de precis numai, 744 00:32:53,120 --> 00:32:55,710 după care, uneori lucruri rele se poate întâmpla, 745 00:32:55,710 --> 00:32:57,760 și programele noastre pot fi buggy și de eroare. 746 00:32:57,760 --> 00:33:00,050 Acum, chiar și cu numere întregi, puteți rula în probleme. 747 00:33:00,050 --> 00:33:03,820 Acum un număr întreg nu are un punct zecimal sau numere după el. 748 00:33:03,820 --> 00:33:07,130 E doar un număr natural, de obicei. 749 00:33:07,130 --> 00:33:09,430 Deci, ceea ce ar putea merge în neregulă cu un int? 750 00:33:09,430 --> 00:33:12,210 Dacă eu sunt, folosind un int a Contele, ceea ce ar putea merge prost? 751 00:33:12,210 --> 00:33:13,230 Pare mult mai simplu. 752 00:33:13,230 --> 00:33:13,873 Da. 753 00:33:13,873 --> 00:33:16,240 >> AUDIENTA MEMBRU: în cazul în care Numărul devine [Inaudibil] 754 00:33:16,240 --> 00:33:17,073 >> DAVID J MALAN: Da. 755 00:33:17,073 --> 00:33:20,820 Ce se întâmplă dacă te numeri atât de mare, pe care le nu se poate exprima ca număr într-adevăr mare. 756 00:33:20,820 --> 00:33:21,320 Corect? 757 00:33:21,320 --> 00:33:23,910 La un moment dat, ai de gând să depășească limitele 758 00:33:23,910 --> 00:33:27,077 cu o valoare pe 32 de biți sau o valoare pe 64 de biți. 759 00:33:27,077 --> 00:33:29,410 Acum, din nou, eu nu sunt sigur cum se pronunță o valoare pe 64 de biți, 760 00:33:29,410 --> 00:33:32,230 dar știu cu un întreg pe 32 de biți, cea mai mare valoare poate fi, 761 00:33:32,230 --> 00:33:35,490 dacă este doar pozitiv valori, este de aproximativ 4 miliarde de euro. 762 00:33:35,490 --> 00:33:39,000 Deci, dacă am încerca să numere până la 5 miliarde de euro, ceva se va întâmpla. 763 00:33:39,000 --> 00:33:41,050 Dar să vedem ce, de fapt, se poate întâmpla. 764 00:33:41,050 --> 00:33:44,570 În lumea de număr întreg preaplin, în cazul în care, într-un sens, 765 00:33:44,570 --> 00:33:48,270 îneca capacitatea unei întreg, ce se poate întâmpla? 766 00:33:48,270 --> 00:33:51,190 >> Deci, aici e un număr binar, este o intoarcere la 0. 767 00:33:51,190 --> 00:33:54,630 Este toate 1, iar substituenții acolo, sunt puteri ale lui 2, 768 00:33:54,630 --> 00:33:55,980 astfel încât acesta este binar. 769 00:33:55,980 --> 00:33:59,416 Deci acestea sunt 8, 1 biți pe ecran. 770 00:33:59,416 --> 00:34:01,290 Și dacă vă amintiți sau faci repede matematica, 771 00:34:01,290 --> 00:34:06,074 ce valoare se reprezentat aici, cu aceste opt 1 biți? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 Și chiar dacă nu au fost destul de sigur de matematica, ai putea face afară. 774 00:34:09,260 --> 00:34:10,550 Sau ai putea pur și simplu un fel de motiv prin ea, 775 00:34:10,550 --> 00:34:12,633 Stai puțin, dacă sunt reprezentând o valoare de 8 biți, 776 00:34:12,633 --> 00:34:17,750 și am 256 de valori posibile, dar dintre care primul este 0, 777 00:34:17,750 --> 00:34:19,909 Știu că cea mai mare va fi 255, 778 00:34:19,909 --> 00:34:21,510 și asta e ceea ce ar putea fi aceasta. 779 00:34:21,510 --> 00:34:26,060 >> Deci, să presupunem că am încercați să adăugați 1 la această valoare. 780 00:34:26,060 --> 00:34:28,750 Ce ați face în clasa a școală atunci când se adaugă un 1, și 781 00:34:28,750 --> 00:34:31,139 nu se potrivește cu adevărat, deoarece trebuie să poarte 1? 782 00:34:31,139 --> 00:34:34,380 Ce este acest număr va pentru a deveni atunci când adăugați 1? 783 00:34:34,380 --> 00:34:37,030 Se va deveni 0. 784 00:34:37,030 --> 00:34:37,530 Corect? 785 00:34:37,530 --> 00:34:41,139 Pentru că dacă ai avea mai mult bits-- și voi încercați să, un fel de, tip l here-- 786 00:34:41,139 --> 00:34:44,710 dacă am fi avut mai mulți biți, ceea ce ar putea face aici este să adăugați 1, 787 00:34:44,710 --> 00:34:47,370 și apoi am obține acest lucru. 788 00:34:47,370 --> 00:34:48,739 Hopa. 789 00:34:48,739 --> 00:34:52,250 Am avea un pic de 1 tot drumul până aici. 790 00:34:52,250 --> 00:34:55,530 >> Dar dacă acest lucru este un finit valoare, e numai 8 biți, 791 00:34:55,530 --> 00:34:57,480 și asta e de pre-determinate de calculator, 792 00:34:57,480 --> 00:34:59,370 că 1 este efectiv nu acolo. 793 00:34:59,370 --> 00:35:00,980 Este doar un fel de cade de pe o stâncă. 794 00:35:00,980 --> 00:35:05,480 Și așa că, dacă adăugați 1-255, ceea ce Valoarea te aparent obține? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 Și astfel de numere accidental, și poate, în mod neintenționat, 797 00:35:09,700 --> 00:35:12,040 ajunge în jurul valorii de ambalaj ca aceasta. 798 00:35:12,040 --> 00:35:14,079 Deci, ceea ce poate fi implicațiile acestei? 799 00:35:14,079 --> 00:35:15,620 Ei bine, există câteva lucruri diferite. 800 00:35:15,620 --> 00:35:18,751 Deci unul, se ajunge în căutarea ca 0, în mod neintenționat, 801 00:35:18,751 --> 00:35:20,750 dar puteți vedea un fel de, chiar și în lumea reală, 802 00:35:20,750 --> 00:35:23,416 pentru mai bine sau pentru rău, manifestări ale acestei idei de o limită. 803 00:35:23,416 --> 00:35:26,630 De exemplu, oricare dintre voi care au jucat vreodata Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 nimeni nu se întâmplă să știu numărul maxim de monede 805 00:35:28,880 --> 00:35:32,032 puteți colecta în Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Ia-o ghici pe baza întrebări de conducere de astăzi. 807 00:35:35,640 --> 00:35:39,140 E mai mare decât 256 sau 255. 808 00:35:39,140 --> 00:35:40,330 E 4000000000. 809 00:35:40,330 --> 00:35:42,080 Deci, se dovedește, și există unele people-- 810 00:35:42,080 --> 00:35:46,080 unele googling confirmat aseară au ajuns 4 miliarde de monede de aur, 811 00:35:46,080 --> 00:35:47,730 sau fleacuri, în Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Deși aparent, nu e o modalitate de a truc de joc, 813 00:35:49,860 --> 00:35:53,222 există un bug sau o caracteristică, care vă permite să doar acumulează o mulțime și o mulțime de puncte. 814 00:35:53,222 --> 00:35:54,930 Dar cea mai mare posibil valoare, potrivit 815 00:35:54,930 --> 00:35:58,360 la această captură de ecran a cineva găsite online, este într-adevăr, 4 miliarde. 816 00:35:58,360 --> 00:35:59,240 >> Acum, de ce este asta? 817 00:35:59,240 --> 00:36:03,040 Este exact 4 miliarde, probabil pentru că cineva a decis, 818 00:36:03,040 --> 00:36:05,500 care a fost scris acest joc, că ar putea face 4 miliarde, 819 00:36:05,500 --> 00:36:07,340 ceva, ceva, ceva, ca valoarea am pus 820 00:36:07,340 --> 00:36:10,256 cu calculatorul mai devreme, dar e doar un pic mai curat pentru oameni 821 00:36:10,256 --> 00:36:12,610 să spună numărul maxim de coins-- sau periculos, 822 00:36:12,610 --> 00:36:14,860 ca ei numesc them-- pe care le poate colecta este de 4 miliarde de euro. 823 00:36:14,860 --> 00:36:16,290 Și așa, de ce este acest lucru? 824 00:36:16,290 --> 00:36:20,310 Cum este jocul LEGO de punere în aplicare contra 825 00:36:20,310 --> 00:36:23,420 care este ține evidența Numărul de monede ai? 826 00:36:23,420 --> 00:36:24,266 Ei ce folosesc? 827 00:36:24,266 --> 00:36:26,390 AUDIENTA MEMBRU: Se oprește numărare după 4 miliarde. 828 00:36:26,390 --> 00:36:27,720 DAVID J MALAN: Se oprește numărare după 4 miliarde, 829 00:36:27,720 --> 00:36:29,525 pe care le puteți inseamna deduce, ca un programator, 830 00:36:29,525 --> 00:36:31,960 că acestea sunt, probabil, folosind un număr întreg pe 32 de biți. 831 00:36:31,960 --> 00:36:35,380 Ca programator literalmente doar dactilografiate, Int, codul său, 832 00:36:35,380 --> 00:36:39,620 și asta e tipul de variabilă care că folosesc pentru a stoca cod cuiva. 833 00:36:39,620 --> 00:36:42,230 Deci nu e alte manifestări din aceste tipuri de limite. 834 00:36:42,230 --> 00:36:45,063 >> Deci, eu nu am jucat acest JOCUL_ _selectați ORA_ Privire și am fost citit pe istoria 835 00:36:45,063 --> 00:36:48,470 pentru a confirma ca much-- dar în Versiunea originală de civilizație, în cazul în care 836 00:36:48,470 --> 00:36:53,240 vă pare că interacționează cu fiecare altele și pot purta război sau au pace, 837 00:36:53,240 --> 00:36:56,590 Gandhi a fost trebuia să fie una dintre personajele cele mai pașnice, așa cum am 838 00:36:56,590 --> 00:36:59,280 înțelegem, în primul Versiunea de civilizație. 839 00:36:59,280 --> 00:37:03,250 Și, de fapt, pe o scară de la 1 la 10, agresivitatea lui a fost doar un 1. 840 00:37:03,250 --> 00:37:05,620 Deci, foarte ușor agresiv, aparent. 841 00:37:05,620 --> 00:37:11,590 >> Dar la un moment dat, se pare că puteți instala democrației în geografie ta. 842 00:37:11,590 --> 00:37:14,900 Și dacă instalați democrației în versiunea de joc, 843 00:37:14,900 --> 00:37:17,320 apoi nivelul de agresivitate se duce în jos. 844 00:37:17,320 --> 00:37:18,460 E un lucru bun. 845 00:37:18,460 --> 00:37:20,890 Oamenii sunt mult mai liniștit aparent, în această situație. 846 00:37:20,890 --> 00:37:23,190 Dar se pare că, cineva a făcut nu au o, în cazul în care, condiție 847 00:37:23,190 --> 00:37:24,780 în versiunea originală a codului. 848 00:37:24,780 --> 00:37:30,650 >> Deci, nivelul agresiunii lui Gandhi a plecat de la pozitiv 1, minus 2, la negativ 1, 849 00:37:30,650 --> 00:37:33,840 dar jocul nu înțelege numere negative. 850 00:37:33,840 --> 00:37:38,680 Deci, ce sa întâmplat a fost agresiunea lui Gandhi Nivelul a variat de la 1, la 0, la negativ 1, 851 00:37:38,680 --> 00:37:40,900 care a avut ca efect ambalaj în jurul valorii de a fi 852 00:37:40,900 --> 00:37:44,690 personajul cel mai agresiv în joc, la o valoare de 255, 853 00:37:44,690 --> 00:37:46,630 pe o scară de la 1 la 10. 854 00:37:46,630 --> 00:37:49,887 Și de atunci, nu a fost mai multe încarnări ale acestui joc, 855 00:37:49,887 --> 00:37:51,720 și le-am pastrat ca un fel de ou de Paște, 856 00:37:51,720 --> 00:37:53,870 că Gandhi este aparent așa teribil agresiv. 857 00:37:53,870 --> 00:37:56,740 Dar a fost rezultatul unei eroare de programare foarte simplu 858 00:37:56,740 --> 00:37:58,630 în această versiune foarte timpurie a jocului. 859 00:37:58,630 --> 00:38:02,860 >> Acum mai tulburator, mai mult recent, Boeing 787 860 00:38:02,860 --> 00:38:05,720 fost înregistrați ca având o bug, nu tipul de dispozitiv 861 00:38:05,720 --> 00:38:07,340 vă în special doriți să aveți un bug. 862 00:38:07,340 --> 00:38:10,130 Și simptome, pe care le voi citi aici, dintr-un articol on-line, 863 00:38:10,130 --> 00:38:13,840 a fost acest lucru, un model de 787 de avion care a fost alimentat continuu 864 00:38:13,840 --> 00:38:18,030 pentru 248 de zile poate pierde tot curent alternativ, AC, 865 00:38:18,030 --> 00:38:20,850 energie electrică, din cauza unitățile de control generator de, 866 00:38:20,850 --> 00:38:23,330 GCUs, simultan a intra în modul de de siguranță. 867 00:38:23,330 --> 00:38:26,790 Deci, acest lucru a fost un avertisment emis când a fost descoperit această problemă. 868 00:38:26,790 --> 00:38:28,750 Această condiție este cauzată de un contor de software, 869 00:38:28,750 --> 00:38:32,230 intern la GCUs, așa un număr întreg sau o variabilă, 870 00:38:32,230 --> 00:38:36,850 care se vor revărsa, după 248 zile de curent continuu. 871 00:38:36,850 --> 00:38:40,350 Boeing este în procesul de dezvoltarea unui upgrade de software care CGU 872 00:38:40,350 --> 00:38:42,350 va remedia starea nesigure. 873 00:38:42,350 --> 00:38:44,226 >> Atât de mult ca de rachete scenariu, în care 874 00:38:44,226 --> 00:38:46,850 au avut un fel de variabile care a fost de numărare, și de numărare, 875 00:38:46,850 --> 00:38:50,720 și de numărare, dar debordant treptat limitele capacității sale, 876 00:38:50,720 --> 00:38:54,890 a făcut în mod similar naibii avionul au un preaplin variabilă 877 00:38:54,890 --> 00:38:56,410 după suficient timp de funcționare. 878 00:38:56,410 --> 00:38:59,240 Și astfel modul limba-in-obraz de lucru în jurul valorii de această problemă 879 00:38:59,240 --> 00:39:04,400 este de a cu adevărat, reboot, avionul fiecare 247 de zile, astfel încât memoria devine șterse 880 00:39:04,400 --> 00:39:06,100 și variabila revine la 0. 881 00:39:06,100 --> 00:39:09,410 Dar își dau seama, acesta este un foarte încarnare mare de software, 882 00:39:09,410 --> 00:39:14,070 dar mai ales ca am auzit despre Apple sistemele de operare merge în mașini, 883 00:39:14,070 --> 00:39:18,030 și mașini de auto-conducere de la Google, și orice număr de încarnări ale software-ului 884 00:39:18,030 --> 00:39:21,000 În viața de zi cu zi noastre, televizoare și ceasuri, și mai mult, 885 00:39:21,000 --> 00:39:24,950 dau seama fost înconjurat de software, toate, care este scris de noi, oamenii. 886 00:39:24,950 --> 00:39:28,150 >> Și, după cum vom descoperi toate curând, este foarte ușor și foarte tipic 887 00:39:28,150 --> 00:39:30,250 să facă greșeli când scris software-ul. 888 00:39:30,250 --> 00:39:32,745 Și dacă nu-i prindă, unele lucruri rele se poate întâmpla. 889 00:39:32,745 --> 00:39:35,400 Acum, uneori, unele lucruri amuzante se poate întâmpla, 890 00:39:35,400 --> 00:39:38,280 sau cel puțin uneori ne știu să aștepte ceva răutate. 891 00:39:38,280 --> 00:39:41,550 Deci 0 împărțit la 0, de la clasa a scoala, este, în general un lucru rău. 892 00:39:41,550 --> 00:39:43,050 E nedefinit. 893 00:39:43,050 --> 00:39:46,440 Și se pare out-- și să vedem dacă Mic meu poate alege acest up-- că Apple 894 00:39:46,440 --> 00:39:47,790 a avut unele distractiv cu acest recent. 895 00:39:47,790 --> 00:39:48,850 Așa că am un iPhone aici. 896 00:39:48,850 --> 00:39:54,160 Mă duc să vorbesc cu Siri și de a pune pe ea să-mi dea răspunsul la 0 împărțit la 0. 897 00:39:54,160 --> 00:39:55,850 Ce este 0 împărțit de 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> Siri: Imaginați-vă că aveți 0 cookie-uri, și le împărți în mod egal 900 00:40:02,230 --> 00:40:03,540 printre 0 prieteni. 901 00:40:03,540 --> 00:40:05,810 Cât de multe cookie-uri nu fiecare persoană obține? 902 00:40:05,810 --> 00:40:06,350 Vezi? 903 00:40:06,350 --> 00:40:07,660 Nu are nici un sens. 904 00:40:07,660 --> 00:40:10,540 Și Cookie Monster este trist că nu există cookies. 905 00:40:10,540 --> 00:40:13,987 Și tu ești trist că nu ai prieteni. 906 00:40:13,987 --> 00:40:15,570 DAVID J MALAN: E un fel de neplăcut. 907 00:40:15,570 --> 00:40:17,550 Deci, aceasta este ceea ce a fost doar a spus că. 908 00:40:17,550 --> 00:40:21,380 E nedeterminată, nu este definit, Într-adevăr, multe limbaje de programare 909 00:40:21,380 --> 00:40:24,950 sau, într-adevăr, compilatoare va detecta atunci când, într-un program, 910 00:40:24,950 --> 00:40:27,050 încercați să împartă 0 cu 0. 911 00:40:27,050 --> 00:40:29,830 Mai distractiv decât acest lucru, deși, este care se pare că, Cookie Monster 912 00:40:29,830 --> 00:40:31,270 este pe Twitter in aceste zile. 913 00:40:31,270 --> 00:40:37,610 Și el a răspuns la acest lucru, cu acest lucru, care este absolut adorabil. 914 00:40:37,610 --> 00:40:40,110 Dar haideți să aruncăm o privire rapidă la un cuplu de alte constructe, 915 00:40:40,110 --> 00:40:43,459 și apoi a pus o parte din această cod pentru a utiliza, în moduri bune. 916 00:40:43,459 --> 00:40:45,250 Deci, se dovedește, pe lângă pentru bucle, nu e 917 00:40:45,250 --> 00:40:49,174 ceva numit o buclă în timp ce, ca arată diferit și este implementat 918 00:40:49,174 --> 00:40:51,590 un pic differently-- și vom vedea în cele din urmă examples-- 919 00:40:51,590 --> 00:40:53,500 dar într-un fel, e simplu, pentru că 920 00:40:53,500 --> 00:40:56,670 nu vă permite pentru a inițializa și actualiza în limita a buclei. 921 00:40:56,670 --> 00:40:57,794 Puteți să-l pună în aplicare în continuare. 922 00:40:57,794 --> 00:41:01,219 Astfel încât să puteți face aceleași lucruri exact cu o buclă în timp ce, ca și cu o buclă pentru, 923 00:41:01,219 --> 00:41:03,260 dar sintaxa, ultimately-- în cele din urmă cum vom 924 00:41:03,260 --> 00:41:04,551 see-- va fi diferit. 925 00:41:04,551 --> 00:41:07,450 Există chiar și o face în timp ce bucla, care este de fapt un pic diferit, 926 00:41:07,450 --> 00:41:09,640 în timp ce o buclă pentru și o buclă în timp ce întotdeauna 927 00:41:09,640 --> 00:41:13,005 verifica starea lor în primul rând, în cazul în care ai citit acest lucru de sus în jos, 928 00:41:13,005 --> 00:41:16,440 un fel de pare că va verifica starea E ultima pentru că este 929 00:41:16,440 --> 00:41:17,910 cu adevărat ultima linie de cod. 930 00:41:17,910 --> 00:41:20,580 Și într-adevăr, că va fi util în anumite programe pe care le scrie, 931 00:41:20,580 --> 00:41:23,746 dacă vrei să faci ceva doar orbește și, eventual, verificați starea. 932 00:41:23,746 --> 00:41:25,205 Asta nu e neapărat un lucru rău. 933 00:41:25,205 --> 00:41:27,912 Dacă vrem variabile, putem face într-un cuplu de moduri diferite. 934 00:41:27,912 --> 00:41:30,290 Și am văzut în Foxtrot desene animate, un mod de a face aceasta, 935 00:41:30,290 --> 00:41:33,400 în cazul în care declara variabila, ca Int contra virgulă, 936 00:41:33,400 --> 00:41:36,570 și apoi later-- poate următoare line, poate 10 linii later-- 937 00:41:36,570 --> 00:41:37,800 tu de fapt inițializa. 938 00:41:37,800 --> 00:41:42,230 Deci, aceste 2 linii de cod declara o variabila de tip int 939 00:41:42,230 --> 00:41:44,930 și o numesc contra, asa ca da mine suficient de biți de a organiza un int. 940 00:41:44,930 --> 00:41:48,230 Și apoi în cele din urmă, se pune valoarea 0 în care variabila. 941 00:41:48,230 --> 00:41:51,250 Acesta aranjează 0 și 1 într-un model, care stim de la săptămâna trecută, 942 00:41:51,250 --> 00:41:53,260 reprezintă numărul stim ca 0. 943 00:41:53,260 --> 00:41:56,920 Sau sincer, puteți face acest lucru mult mai succint, la fel ca aceasta. 944 00:41:56,920 --> 00:41:59,390 >> Acum avem, de asemenea, capacitatea de a apela funcțiile. 945 00:41:59,390 --> 00:42:03,070 Și, de fapt, aici e un line 2 program sau un fragment al acestuia, 946 00:42:03,070 --> 00:42:06,157 care ne permite să efectiv scrie un cod care 947 00:42:06,157 --> 00:42:08,990 devine un șir de user-- mult ca voluntar nostru un moment ago-- 948 00:42:08,990 --> 00:42:11,320 stocarea rezultatul în o variabilă numită nume, 949 00:42:11,320 --> 00:42:15,470 și then-- la fel ca cu voluntar nostru cu imprimeuri printf-- acele valori 950 00:42:15,470 --> 00:42:19,180 prin trecerea în două argumente, șir, urmat de variabila 951 00:42:19,180 --> 00:42:20,781 numit, numele, în sine. 952 00:42:20,781 --> 00:42:23,155 Deci, haideți să aruncăm o privire, înainte de ne întoarcem la Mario acolo, 953 00:42:23,155 --> 00:42:26,010 la un cuplu de pe acum, exemple în acest sens. 954 00:42:26,010 --> 00:42:30,537 >> Am de gând să merg mai departe și deschis up, să zicem, funcția-0.c. 955 00:42:30,537 --> 00:42:33,120 Și, ca întotdeauna, acest cod este disponibil pe site-ul cursului, 956 00:42:33,120 --> 00:42:35,660 astfel încât să puteți juca de-a lungul la acasă și se uite la ea mai târziu. 957 00:42:35,660 --> 00:42:40,400 Dar aici e programul în e esență, de la linia 17-22. 958 00:42:40,400 --> 00:42:43,270 Programul principal este în cazul în care Programul este întotdeauna o să înceapă. 959 00:42:43,270 --> 00:42:46,980 Acest program, se pare, va pentru a imprima numele dvs., colon. 960 00:42:46,980 --> 00:42:50,320 Se apoi merge pentru a apela getString, la fel cum am făcut cu voluntarii noștri. 961 00:42:50,320 --> 00:42:53,365 Si apoi, acest lucru este interesant, se va suna PrintName. 962 00:42:53,365 --> 00:42:56,490 Se pare, în tot acest timp, nu pare a fi o funcție numită PrintName. 963 00:42:56,490 --> 00:42:57,614 Care imprimă numele cuiva. 964 00:42:57,614 --> 00:43:01,210 Nu am nevoie pentru a utiliza printf din odinioară, există PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Dar asta e înșelătoare pentru că nu PrintName 966 00:43:03,500 --> 00:43:06,760 vin cu C. oameni nu au inventeze o acum 40 de ani sau 50 de, 967 00:43:06,760 --> 00:43:07,990 Am făcut-o, în schimb. 968 00:43:07,990 --> 00:43:10,330 Și, de fapt, dacă aș defila jos în continuare, o notificare 969 00:43:10,330 --> 00:43:14,200 cum pot scrie propria mea funcționează în C. Vom în cele din urmă 970 00:43:14,200 --> 00:43:16,319 explica de ce am mereu spun, nule, în câteva locuri, 971 00:43:16,319 --> 00:43:18,110 dar pentru ziua de azi, sa doar uita-te la numele. 972 00:43:18,110 --> 00:43:20,905 >> Pe linia 24, în cazul în care doriți să crea propriul funcție, 973 00:43:20,905 --> 00:43:22,780 vă scrieþi literalmente Numele funcției. 974 00:43:22,780 --> 00:43:24,340 Am ales PrintName. 975 00:43:24,340 --> 00:43:26,159 În paranteze, tu apoi specificați ce fel 976 00:43:26,159 --> 00:43:28,450 de intrări, și cât de multe ai doresc această funcție pentru a lua. 977 00:43:28,450 --> 00:43:31,906 În acest caz, vreau să iau 1 variabilă numită, nume, 978 00:43:31,906 --> 00:43:34,030 și va fi de tip, string, asa ca va 979 00:43:34,030 --> 00:43:35,780 să fie o secvență de caractere. 980 00:43:35,780 --> 00:43:39,170 Și apoi, această program-- la fel ca în Scratch, 981 00:43:39,170 --> 00:43:42,590 puteți avea puzzle personalizat pieces-- va avea acest comportament personalizat. 982 00:43:42,590 --> 00:43:46,760 O să sun printf trece in, salut, substituent, 983 00:43:46,760 --> 00:43:49,110 și apoi se va conecta în orice numit utilizator. 984 00:43:49,110 --> 00:43:51,450 >> Deci acesta este un exemplu de ceea ce un om de stiinta de calculator ar 985 00:43:51,450 --> 00:43:55,090 abstracție apel sau funcțional descompunere, care sunt doar 986 00:43:55,090 --> 00:43:58,110 moduri de lux de saying-- este, dacă iti place aceasta idee la nivel înalt, 987 00:43:58,110 --> 00:44:01,569 ca vreau funcționalitate că imprimă numele cuiva, absolut te 988 00:44:01,569 --> 00:44:04,360 poate scrie literalmente printf și apoi trece în argumentele pe care doriți, 989 00:44:04,360 --> 00:44:07,340 și programul va funcționa, deoarece are de miercuri. 990 00:44:07,340 --> 00:44:10,510 Dar puteți începe să abstract departe noțiunea de imprimarea unui nume. 991 00:44:10,510 --> 00:44:13,270 Puteți da un nume, ca PrintName, iar acest lucru 992 00:44:13,270 --> 00:44:15,280 este această idee de stratificare de la saptamana 0. 993 00:44:15,280 --> 00:44:19,910 >> De acum înainte, eu și nu trebuie să știi sau de îngrijire cum este pusă în aplicare PrintName. 994 00:44:19,910 --> 00:44:22,470 Da, folosește printf, poate nu, cine știe ce folosește? 995 00:44:22,470 --> 00:44:23,410 Cui îi pasă? 996 00:44:23,410 --> 00:44:26,034 Acum vorbesc aici, în loc de aici. 997 00:44:26,034 --> 00:44:28,700 Și într-adevăr, așa cum programele noastre minim mai avansate și sofisticate, 998 00:44:28,700 --> 00:44:32,550 vom să continuați să luați de la sine că există piese de puzzle nivel inferior. 999 00:44:32,550 --> 00:44:34,780 Pentru că le-am scris sau altcineva a făcut, astfel încât 1000 00:44:34,780 --> 00:44:36,910 că putem construi apoi pe partea de sus a ei. 1001 00:44:36,910 --> 00:44:39,430 Să aruncăm o privire la acest variantă, funcționează o. 1002 00:44:39,430 --> 00:44:41,780 >> Deci asta e un pic mai mult avansat, dar se pare 1003 00:44:41,780 --> 00:44:44,570 că în biblioteca lui CS50, există doar o funcție getint. 1004 00:44:44,570 --> 00:44:47,720 Noi nu cred că, cu ani în urmă, pentru a pune în aplicare o funcție GetPositiveInt. 1005 00:44:47,720 --> 00:44:50,970 Și asta e un pic enervant pentru că dacă voi scriu un program în care 1006 00:44:50,970 --> 00:44:53,325 doriți să obțineți un rezultat pozitiv număr întreg de la utilizator, 1007 00:44:53,325 --> 00:44:55,010 puteți folosi absolut getint. 1008 00:44:55,010 --> 00:44:57,840 Și puteți verifica absolut cu starea și poate o buclă 1009 00:44:57,840 --> 00:45:00,320 dacă este mai mare Int decât 0 și țipi la utilizatorul 1010 00:45:00,320 --> 00:45:02,699 dacă el sau ea nu da ai un număr pozitiv. 1011 00:45:02,699 --> 00:45:04,740 Dar să construiască această Building Block noi înșine, o, 1012 00:45:04,740 --> 00:45:06,555 bucată Scratch personalizat, dacă vreți. 1013 00:45:06,555 --> 00:45:08,680 Am de gând să aibă un program de aici că în cele din urmă, m-am 1014 00:45:08,680 --> 00:45:11,780 doresc să fie în măsură să sun GetPositiveInt, și eu vreau să fiu 1015 00:45:11,780 --> 00:45:14,200 posibilitatea de a imprima orice ar Int este. 1016 00:45:14,200 --> 00:45:16,240 Dar acest lucru este captată departe acum. 1017 00:45:16,240 --> 00:45:19,050 Este tocmai a fost dat un nivel ridicat Numele care spune ceea ce face, 1018 00:45:19,050 --> 00:45:21,780 care este minunat, deoarece este foarte intuitiv acum pentru a citi. 1019 00:45:21,780 --> 00:45:24,710 Și dacă-mi pasă ce e dedesubt capota, lasă-mă să defilați în jos. 1020 00:45:24,710 --> 00:45:27,140 Și e un pic de intimidare la prima, în special 1021 00:45:27,140 --> 00:45:29,470 dacă aceasta este prima ta programului, dar să aruncăm o privire. 1022 00:45:29,470 --> 00:45:32,860 >> Eu nu mai spun, gol, pentru că se pare funcții, 1023 00:45:32,860 --> 00:45:34,777 la fel ca getString, poate returnează o valoare pentru mine. 1024 00:45:34,777 --> 00:45:36,610 Ei nu doar au pentru a imprima pe ecran, 1025 00:45:36,610 --> 00:45:38,410 ei pot depune de fapt mi ceva înapoi. 1026 00:45:38,410 --> 00:45:41,535 Și întrucât înainte de PrintName, Nu am nevoie de nimic înapoi. 1027 00:45:41,535 --> 00:45:44,160 Am nevoie de efectul secundar al ceva care arată pe ecran, 1028 00:45:44,160 --> 00:45:46,570 dar nu am nevoie de un om să-mi dai ceva înapoi. 1029 00:45:46,570 --> 00:45:48,840 Aici, cu GetPositiveInt, cum ar fi cu getint, 1030 00:45:48,840 --> 00:45:50,640 Vreau să fiu dat ceva înapoi. 1031 00:45:50,640 --> 00:45:53,220 Deci, eu spun nu, gol, pe linia 23, dar Int, 1032 00:45:53,220 --> 00:45:55,570 care spune, această funcție că scriu, 1033 00:45:55,570 --> 00:45:58,860 numit GetPositiveInt este de gând să dă-mi înapoi un număr întreg, nu nimic, 1034 00:45:58,860 --> 00:45:59,890 nu nule. 1035 00:45:59,890 --> 00:46:03,280 >> Între timp, se va lua nici o intrări, așa că am, un fel de, ea inversat. 1036 00:46:03,280 --> 00:46:08,280 Nu dau nici un GetPositiveInt de intrare, vreau să-mi dea producția sa. 1037 00:46:08,280 --> 00:46:09,800 Și apoi ce se întâmplă acum? 1038 00:46:09,800 --> 00:46:11,640 Deci, iată cum pot declara o variabilă. 1039 00:46:11,640 --> 00:46:15,090 Am făcut în afara buclei, din motive vom vedea în cele din urmă, 1040 00:46:15,090 --> 00:46:17,700 dar acest lucru dă doar ma sunat 32 de biți, n, 1041 00:46:17,700 --> 00:46:20,952 Și am pre-determinare le pentru a stoca număr întreg. 1042 00:46:20,952 --> 00:46:23,660 Și aici este că, în timp ce face construct, și de aceea este util. 1043 00:46:23,660 --> 00:46:26,700 Literalmente face acest lucru, în timp ce n este mai mic de 1. 1044 00:46:26,700 --> 00:46:28,030 Deci, haideți să vedem ce se întâmplă. 1045 00:46:28,030 --> 00:46:30,760 Am imprima, vă rugăm să da-mi un Int pozitiv. 1046 00:46:30,760 --> 00:46:34,300 Apoi am obține un int, folosind CS50 lui funcționează și depozitate în n. 1047 00:46:34,300 --> 00:46:38,990 >> Și apoi, ce linie de cod, probabil, este executat următor, în mod logic? 1048 00:46:38,990 --> 00:46:41,890 Care linie numărul? 1049 00:46:41,890 --> 00:46:42,571 Da, așa 31. 1050 00:46:42,571 --> 00:46:45,320 Tu nu ar ști acest lucru până când nu ați sa spus sau un fel de ea deduce, 1051 00:46:45,320 --> 00:46:45,986 dar e adevărat. 1052 00:46:45,986 --> 00:46:48,280 Se merge de sus în jos și apoi se repetă. 1053 00:46:48,280 --> 00:46:55,840 Deci, dacă am scris în zicem, numărul negativ 1, este n mai puțin de 1 negativ? 1054 00:46:55,840 --> 00:46:56,340 Da. 1055 00:46:56,340 --> 00:46:58,470 Deoarece negativ 1 este mai mică de 1. 1056 00:46:58,470 --> 00:46:59,510 Deci, ce ar trebui să se întâmple? 1057 00:46:59,510 --> 00:47:03,260 Am de gând să facă acest lucru în timp ce n este mai mic de 1, 1058 00:47:03,260 --> 00:47:05,760 așa că am de gând să mă întorc la linia 28. 1059 00:47:05,760 --> 00:47:09,530 >> Și fiecare time-- și să ruleze astea-- face funcția 1 pentru a compila, 1060 00:47:09,530 --> 00:47:11,340 și acum dot funcția 1 slash. 1061 00:47:11,340 --> 00:47:14,280 Dacă aș tip negativ 1, este continua să urle la mine 1062 00:47:14,280 --> 00:47:17,530 până când am să coopereze pentru că fiecare de intrări mele este mai mică de 1 1063 00:47:17,530 --> 00:47:20,070 și dacă e vreme mai puțin de 1, Am de gând să face asta. 1064 00:47:20,070 --> 00:47:24,240 Dacă în cele din urmă dau un număr ca 50, Din fericire, se spune, mulțumesc pentru 50. 1065 00:47:24,240 --> 00:47:24,970 Ce? 1066 00:47:24,970 --> 00:47:30,640 Deoarece de îndată ce n nu este mai mică de 1, ma opresc obtinerea blocat în această buclă, 1067 00:47:30,640 --> 00:47:33,840 și acest cuvânt cheie nou astăzi, întoarcere, literalmente face asta. 1068 00:47:33,840 --> 00:47:36,800 Așa că tocmai am implementat, într-un sens, echivalentul a getString, 1069 00:47:36,800 --> 00:47:40,590 în cazul în care mă întorc la predarea oricine folosește-mă, o anumită valoare. 1070 00:47:40,590 --> 00:47:42,820 Aceasta nu trebuie să fie un șir, e un întreg. 1071 00:47:42,820 --> 00:47:44,990 Deci un simplu, rapid exemplu, dar vom în curând 1072 00:47:44,990 --> 00:47:47,930 vedea unele mai sofisticate Versiunile încă. 1073 00:47:47,930 --> 00:47:53,882 De fapt, haideți să aruncăm o privire la o o numeric, care se numește return.c. 1074 00:47:53,882 --> 00:47:55,590 Și asta este de fapt un pic mai simplu. 1075 00:47:55,590 --> 00:47:59,010 Deci, scopul acestui program în life-- să compila și rulați-l, 1076 00:47:59,010 --> 00:48:03,090 asa ca întoarcere, dot slash, aviz return-- 1077 00:48:03,090 --> 00:48:05,530 programul pur și simplu cuburi valoarea 2. 1078 00:48:05,530 --> 00:48:08,410 E destul de stupid, e greu cod, nu ia nici o intrare, 1079 00:48:08,410 --> 00:48:12,220 dar nu demonstrează un alt funcție care M-am scris. 1080 00:48:12,220 --> 00:48:15,760 Deci, aici, am declarat o variabilă, numit X, de tip int, 1081 00:48:15,760 --> 00:48:17,840 egal cu numărul 2, complet arbitrară. 1082 00:48:17,840 --> 00:48:19,530 Aceasta este doar o imprimare pufos. 1083 00:48:19,530 --> 00:48:23,070 Se spune x este acum, cum și astfel, cubaj punct punct punct. 1084 00:48:23,070 --> 00:48:26,390 Și magia este aparent în linie 21. 1085 00:48:26,390 --> 00:48:30,120 Sun-o funcție numită, cub, Am predarea acestuia o foaie de hârtie 1086 00:48:30,120 --> 00:48:32,890 cu numărul 2 scris pe ea, și ce valoare, matematic, 1087 00:48:32,890 --> 00:48:34,860 vreau să ies din ea? 1088 00:48:34,860 --> 00:48:36,570 Doar ca o verificare bun-simț? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Corect? 1091 00:48:37,570 --> 00:48:40,160 Vreau 2 tocata înapoi, 2 la puterea de 3, așa 8 spate. 1092 00:48:40,160 --> 00:48:42,570 >> Deci, în cazul în care este pus în aplicare cub? 1093 00:48:42,570 --> 00:48:44,349 Ei bine, observați că este pus în aplicare aici. 1094 00:48:44,349 --> 00:48:47,140 Și la fel ca înainte, în mod logic, chiar dacă sintaxa este, probabil, 1095 00:48:47,140 --> 00:48:49,320 foarte nou pentru mulți dintre voi, Vreau aceasta functie 1096 00:48:49,320 --> 00:48:51,780 să-mi dai înapoi o foaie de hârtie cu un întreg pe ea. 1097 00:48:51,780 --> 00:48:53,990 Deci, am o int, The Numele este arbitrar, 1098 00:48:53,990 --> 00:48:55,530 dar convenabil numit cub. 1099 00:48:55,530 --> 00:48:58,430 Intrarea la aceasta, este n de tip întreg, așa că e 1100 00:48:58,430 --> 00:49:00,800 cum pot trece în numărul 2 pe o foaie de hârtie. 1101 00:49:00,800 --> 00:49:03,910 Și apoi se dovedește C suporturi matematica, astfel încât să nu aveți x lui pentru ori, 1102 00:49:03,910 --> 00:49:06,680 utilizați doar asteriscul pentru multiplicare. 1103 00:49:06,680 --> 00:49:11,070 Și aceasta se întoarce de n ori n ori n, care este pur și simplu o valoare tocata. 1104 00:49:11,070 --> 00:49:12,840 >> Deci, unde mergem cu toate astea? 1105 00:49:12,840 --> 00:49:14,570 Aceasta este cu siguranta un tur vârtej de vânt, fiți siguri, 1106 00:49:14,570 --> 00:49:16,410 că în super secțiunile și în problema set 1, 1107 00:49:16,410 --> 00:49:18,368 veți fi plimbat prin Toate acestea și mai mult. 1108 00:49:18,368 --> 00:49:22,490 Și în problema set 1, vom tranziție din lumea grafică a Scratch 1109 00:49:22,490 --> 00:49:25,640 la ceva mai mult de linie de comandă în C. Dar vom inspira 1110 00:49:25,640 --> 00:49:27,680 din acest joc aici de la odinioară, în care 1111 00:49:27,680 --> 00:49:31,591 folosind C și ediția standard a p set vei pune în aplicare piramida lui Mario. 1112 00:49:31,591 --> 00:49:34,340 Și în hacker-a ediție a p set, dacă alegeți ca să aleagă, 1113 00:49:34,340 --> 00:49:38,280 vă va pune în aplicare un pic mai mult provocatoare piramidă cu două vârfuri. 1114 00:49:38,280 --> 00:49:41,239 Veți pune în aplicare, de asemenea, un algoritm, un algoritm lacom. 1115 00:49:41,239 --> 00:49:43,030 Se pare nu e unele logica interesant 1116 00:49:43,030 --> 00:49:45,640 în spatele procesului de rulează stație un casier de 1117 00:49:45,640 --> 00:49:47,410 și de fapt, predarea cineva schimba înapoi. 1118 00:49:47,410 --> 00:49:50,410 Există un algoritm care este destul de simplu, că s-ar putea chiar 1119 00:49:50,410 --> 00:49:53,576 înțeles intuitiv atunci când ai citit prima it-- seama că este ceea ce am mereu 1120 00:49:53,576 --> 00:49:57,110 făcut orice moment m-am dat pe cineva unele back-- bani care vă permite să întotdeauna 1121 00:49:57,110 --> 00:50:00,679 reduce numărul de Note de hârtie sau monede metalice 1122 00:50:00,679 --> 00:50:02,220 ca esti predarea înapoi la utilizator. 1123 00:50:02,220 --> 00:50:04,610 Și aceasta, desigur, este convingătoare pentru că dacă te duci la CVS sau fleacuri, 1124 00:50:04,610 --> 00:50:06,430 nu vrei să fi predat o grămadă de cele 1125 00:50:06,430 --> 00:50:07,596 sau o grămadă de mărunțiș. 1126 00:50:07,596 --> 00:50:10,120 Vrei cele mai puține monede, probabil, posibil. 1127 00:50:10,120 --> 00:50:13,070 >> În cele din urmă, veți fi, de asemenea, contestate la dabble în lumea de apă 1128 00:50:13,070 --> 00:50:17,220 și obține de fapt, o apreciere pentru o mapare între ratele de curgere, 1129 00:50:17,220 --> 00:50:19,890 de ca, într-o cabină de duș cu apă, cat de mult se folosește apa. 1130 00:50:19,890 --> 00:50:22,640 Și aluzia aceasta, va fi acest clip aici, 1131 00:50:22,640 --> 00:50:24,840 care vom termina pe de doar 60 de secunde, în care 1132 00:50:24,840 --> 00:50:29,070 vopsele o imagine de -flux redus de duș. capete 1133 00:50:29,070 --> 00:50:30,886 >> [VIDEO PLAYBACK] 1134 00:50:30,886 --> 00:50:31,385 -In regula. 1135 00:50:31,385 --> 00:50:32,774 Am totul aici. 1136 00:50:32,774 --> 00:50:35,800 Am Cyclone F Series, Hydra, Jetflow, Stockholm 1137 00:50:35,800 --> 00:50:37,660 Supersteam, îl nume. 1138 00:50:37,660 --> 00:50:39,265 >> -Si Ce ai recomanda? 1139 00:50:39,265 --> 00:50:40,460 >> -Ce căutați? 1140 00:50:40,460 --> 00:50:41,300 >> Om Power. 1141 00:50:41,300 --> 00:50:42,285 Putere. 1142 00:50:42,285 --> 00:50:42,910 -cum Ar fi Silkwood. 1143 00:50:42,910 --> 00:50:44,520 Asta e pentru radiații. 1144 00:50:44,520 --> 00:50:46,335 -Asa este. 1145 00:50:46,335 --> 00:50:48,275 -Acum Ce e asta? 1146 00:50:48,275 --> 00:50:49,704 Asta e Commando 450. 1147 00:50:49,704 --> 00:50:50,620 Eu nu vând ca unul. 1148 00:50:50,620 --> 00:50:51,700 >> Dar asta e ceea ce ne dorim. 1149 00:50:51,700 --> 00:50:52,680 Este un comando 450. 1150 00:50:52,680 --> 00:50:53,882 >> -Nu Mă crezi. 1151 00:50:53,882 --> 00:50:55,090 Este folosit doar în circ. 1152 00:50:55,090 --> 00:50:56,512 E pentru elefanți. 1153 00:50:56,512 --> 00:50:59,356 >> -Voi Plăti nimic. 1154 00:50:59,356 --> 00:51:01,252 >> Ce despre Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -El Nu a putut face asta. 1156 00:51:02,760 --> 00:51:04,910 E delicat. 1157 00:51:04,910 --> 00:51:05,750 Oh da. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [END PLAYBACK] 1160 00:51:37,320 --> 00:51:37,700 DAVID J MALAN: Bine. 1161 00:51:37,700 --> 00:51:38,820 Asta dacă pentru CS50. 1162 00:51:38,820 --> 00:51:40,050 Ne vedem săptămâna viitoare. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> SPEAKER 1: [? Scully?], [? Ian,?] în măsura în care acest proiect outro, 1165 00:51:49,029 --> 00:51:50,362 ce-ai venit cu voi? 1166 00:51:50,362 --> 00:51:51,990 >> SPEAKER 2: Ei bine, ne-am dat un soi de gândire, 1167 00:51:51,990 --> 00:51:53,250 și credem că cel mai bun mod sa-- 1168 00:51:53,250 --> 00:51:53,660 >> SPEAKER 3: Mai am? 1169 00:51:53,660 --> 00:51:54,326 >> SPEAKER 2: Da. 1170 00:51:54,326 --> 00:51:56,360 Prin toate mijloacele, de fapt. 1171 00:51:56,360 --> 00:51:59,425 >> SPEAKER 3: Deci, eu cred ne putem rezuma ideea noastră 1172 00:51:59,425 --> 00:52:05,450 pentru Outros cu un nimic word--. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID J MALAN: Nimic? 1175 00:52:10,409 --> 00:52:11,200 SPEAKER 3: Nimic. 1176 00:52:11,200 --> 00:52:12,990 DAVID J MALAN: Ce înseamnă asta? 1177 00:52:12,990 --> 00:52:16,260 SPEAKER 3: Outros sunt despre nimic. 1178 00:52:16,260 --> 00:52:21,720 SPEAKER 2: Ei bine, vreau să spun, în filosofie, Adică, nimic nu este întotdeauna ceva. 1179 00:52:21,720 --> 00:52:24,200 SPEAKER 1: Deci what's-- ceea ce este premisa? 1180 00:52:24,200 --> 00:52:25,720 SPEAKER 3: Deci, e ca și cum viața. 1181 00:52:25,720 --> 00:52:26,680 BINE. 1182 00:52:26,680 --> 00:52:28,294 Ce ai facut astazi? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID J MALAN: m-am trezit, a avut micul dejun, și a venit la locul de muncă. 1184 00:52:31,811 --> 00:52:34,056 >> SPEAKER 3: Asta e un outro. 1185 00:52:34,056 --> 00:52:36,806 SPEAKER 2: Dar, vreau sa spun, nu ar trebui ceva se întâmplă să-l pe the-- 1186 00:52:36,806 --> 00:52:37,889 SPEAKER 3: Nu, nu, nu, nu. 1187 00:52:37,889 --> 00:52:40,220 Nimic nu se intampla. 1188 00:52:40,220 --> 00:52:42,910 >> SPEAKER 1: Deci, de ce ne uitam? 1189 00:52:42,910 --> 00:52:46,956 >> SPEAKER 3: Deoarece este un outro pentru CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID J MALAN: Nu încă. 1191 00:52:48,652 --> 00:52:49,151