1 00:00:07,590 --> 00:00:09,920 [Powered by Google Translate] David J. MALAN: Bine, acest lucru este CS50 și acest lucru este 2 00:00:09,920 --> 00:00:15,250 sfârșitul săptămânii 1, astfel încât cardurile de studiu sunt în și numărul total de 3 00:00:15,250 --> 00:00:18,640 colegii de clasă pe care le au în acest an este de 745. 4 00:00:18,640 --> 00:00:20,920 Și suntem atât de încântați să aibă atât de mulți dintre voi în cursul 5 00:00:20,920 --> 00:00:23,680 acest semestru, dar chiar dacă acest curs este atât de mare, 6 00:00:23,680 --> 00:00:26,090 dau seama că e ca și cum aceste lucruri prânzuri vineri, la fel ca 7 00:00:26,090 --> 00:00:29,020 orele de birou, 15-persoană secțiuni, și așa mai departe, care 8 00:00:29,020 --> 00:00:30,590 sunt într-adevăr menite să creeze acest lucru mai intim 9 00:00:30,590 --> 00:00:31,140 mediu. 10 00:00:31,140 --> 00:00:34,070 Deci, chiar dacă am putea aduna o dată sau de două ori pe săptămână, aici, în 11 00:00:34,070 --> 00:00:36,420 Sanders, știu că o mare parte din experiența dumneavoastră în acest curs 12 00:00:36,420 --> 00:00:39,330 va fi foarte mult hands-on cu privire alături de colegii dvs. 13 00:00:39,330 --> 00:00:40,730 și cadrelor didactice. 14 00:00:40,730 --> 00:00:43,960 >> Deci, aici vom merge, Fall 2012. 15 00:00:43,960 --> 00:00:47,530 Reamintim astfel că ultima oară când am încheiat într-o notă de 16 00:00:47,530 --> 00:00:50,460 imprecizie, vorbind despre reprezentarea numerelor. 17 00:00:50,460 --> 00:00:52,950 Și ne-am uitat la unul dintre eșecurile care au avut loc, în 18 00:00:52,950 --> 00:00:54,920 lumea reală, atunci când a venit la neînțelegeri 19 00:00:54,920 --> 00:00:55,890 cum funcționează computerele. 20 00:00:55,890 --> 00:00:58,590 Ei bine, azi vom revizui un alt una dintre acele idei ca 21 00:00:58,590 --> 00:01:01,410 și continua discuția noastră a clientului CS50 22 00:01:01,410 --> 00:01:04,090 și C și ce înseamnă cu adevărat la program. 23 00:01:04,090 --> 00:01:06,430 Dar mai întâi, doar o pereche de anunțuri vârtej. 24 00:01:06,430 --> 00:01:08,930 >> Secțiuni începe această duminică, iar prima săptămână este întotdeauna un 25 00:01:08,930 --> 00:01:11,030 bit de un start rapid, pentru că tocmai am ajuns în 26 00:01:11,030 --> 00:01:12,620 formularele secțiune. 27 00:01:12,620 --> 00:01:14,450 Facem același, acum, cu semenii didactice, acum 28 00:01:14,450 --> 00:01:16,410 că ei știu programele lor, așa că scopul, prin 29 00:01:16,410 --> 00:01:19,380 Sâmbătă dimineața, pentru a urmări cu tine, cu secțiunea dvs. 30 00:01:19,380 --> 00:01:20,760 de atribuire și de TF. 31 00:01:20,760 --> 00:01:22,770 Dau seama că acestea vor începe a doua zi, duminică 32 00:01:22,770 --> 00:01:24,510 sau luni sau marți. 33 00:01:24,510 --> 00:01:27,730 Și apoi vom potrivi cu modificările secțiune în care acestea apar 34 00:01:27,730 --> 00:01:28,690 în zilele următoare. 35 00:01:28,690 --> 00:01:31,590 Orelor de lucru, între timp, sunt, din nou, în seara asta, 20 la 11, în 36 00:01:31,590 --> 00:01:33,740 Annenberg, precum și mâine seară. 37 00:01:33,740 --> 00:01:36,150 Chiar dacă seturi de probleme sunt, în general datorate în zilele de joi 38 00:01:36,150 --> 00:01:39,020 la prânz, dat seama că avea până la cinci zile întârziere să-și petreacă, 39 00:01:39,020 --> 00:01:42,430 prin urmare, disponibilitatea de ore de birou în zilele de joi, dacă 40 00:01:42,430 --> 00:01:45,930 te de numerar într-una din acele zile întârziere și, prin urmare, prezintă 41 00:01:45,930 --> 00:01:47,070 ceva vineri. 42 00:01:47,070 --> 00:01:50,850 Permiteți-mi să sugerez faptul că Scratch este printre mult mai distractiv, printre 43 00:01:50,850 --> 00:01:52,390 mai multe seturi de low-cheie problemă. 44 00:01:52,390 --> 00:01:55,160 Și aș atârna pe acele zile întârziere, strategic, doar 45 00:01:55,160 --> 00:01:57,380 pentru mai târziu în semestrul atunci când viața începe să stea în calea 46 00:01:57,380 --> 00:01:59,470 cu examene și alte clase. 47 00:01:59,470 --> 00:02:01,580 Set Problema 1, între timp, ar fi postate pe cursul de 48 00:02:01,580 --> 00:02:06,080 site-ul în această vineri, ca va fi la plimbare cursului 49 00:02:06,080 --> 00:02:08,789 prin video, care va fi filmat la 2:30 pm vineri 50 00:02:08,789 --> 00:02:11,890 și apoi postat on-line de zi. 51 00:02:11,890 --> 00:02:13,880 >> Așa că am încheiat luni. 52 00:02:13,880 --> 00:02:15,450 Vreau sa - de fapt, o notă aici. 53 00:02:15,450 --> 00:02:18,870 Deoarece clasele - pentru că Sanders nu împrumuta exact 54 00:02:18,870 --> 00:02:22,220 se la casual Q & A înainte și înapoi teribil de bine, suntem 55 00:02:22,220 --> 00:02:24,030 O să încerc ceva un pic mai nou in acest an, prin care 56 00:02:24,030 --> 00:02:26,160 dacă nu sunteți confortabil ridica mâna sau pur si simplu 57 00:02:26,160 --> 00:02:28,800 nu s-ar ridica mai degrabă mâna într-o cameră ca asta, 58 00:02:28,800 --> 00:02:30,710 vom avea unele dintre semenii didactice și CAS 59 00:02:30,710 --> 00:02:33,260 manevrarea cs50.net/discuss în timpul prelegerii. 60 00:02:33,260 --> 00:02:35,440 Deci, dacă aveți o întrebare pentru că am fost complet 61 00:02:35,440 --> 00:02:37,510 neclar despre ceva sau esti curios despre unele 62 00:02:37,510 --> 00:02:39,640 subiect, încercați să postați acolo. 63 00:02:39,640 --> 00:02:42,670 Etichetați-l cu o etichetă de Lectura, iar noi vom face tot posibilul 64 00:02:42,670 --> 00:02:45,430 de azi si saptamana viitoare - Vom încerca acest lucru - pentru domeniul IT 65 00:02:45,430 --> 00:02:47,990 fie electronic, on-line, sau în cazul în care se simte ca și cum ar trebui să ne 66 00:02:47,990 --> 00:02:50,430 într-adevăr i se adreseze în masă, unul dintre cele semenii didactice sau 67 00:02:50,430 --> 00:02:52,080 AC va ridica mâna lor și să ceară 68 00:02:52,080 --> 00:02:53,480 anonim în numele dumneavoastră. 69 00:02:53,480 --> 00:02:55,650 Deci, vom da un try această și a vedea cât de bine functioneaza. 70 00:02:55,650 --> 00:02:58,540 Dar, prin toate mijloacele, să continue să ridice mâinile ca și cum ați dori. 71 00:02:58,540 --> 00:03:11,420 >> Deci, ultima dată când am arătat că 10% sau de o zecime nu este, în 72 00:03:11,420 --> 00:03:13,840 fapt, 0,1, la fel ca ai fost învățat mulți ani în urmă. 73 00:03:13,840 --> 00:03:15,390 Este, de fapt, o valoare de genul asta. 74 00:03:15,390 --> 00:03:16,970 Dar asta nu e în întregime adevărat, nu? 75 00:03:16,970 --> 00:03:19,585 Noi avem doar această constrângere în computere prin care, dacă 76 00:03:19,585 --> 00:03:22,450 au doar o cantitate finită de memorie, RAM, sau mai mult 77 00:03:22,450 --> 00:03:25,220 în special biți, ei bine, nu e numai un număr finit 78 00:03:25,220 --> 00:03:26,980 de lucruri pe care le poate reprezenta. 79 00:03:26,980 --> 00:03:29,780 De exemplu, dacă avem numărul zero, și dorim să 80 00:03:29,780 --> 00:03:32,790 reprezintă în binar, folosind opt biți, în cazul în care un pic, 81 00:03:32,790 --> 00:03:34,710 din nou, este un zero sau unul, am putea 82 00:03:34,710 --> 00:03:39,240 reprezintă o ca 00000000. 83 00:03:39,240 --> 00:03:41,160 Și asta e un pic inutil verbose. 84 00:03:41,160 --> 00:03:43,700 La fel ca în sistemul zecimal în lumea reală, 85 00:03:43,700 --> 00:03:47,040 în general, în cazul în care doriți să scrieți numărul 123, am 86 00:03:47,040 --> 00:03:52,240 oameni, probabil, nu scrieți 00000123, chiar dacă, 87 00:03:52,240 --> 00:03:53,940 funcțional, care e numărul exact acelasi. 88 00:03:53,940 --> 00:03:56,580 Noi doar picătură zerouri, ca să spunem așa. 89 00:03:56,580 --> 00:03:58,270 >> În binar, putem face același lucru. 90 00:03:58,270 --> 00:04:01,440 Binar și de zero, zero și binar este doar de zero. 91 00:04:01,440 --> 00:04:02,870 Ai nevoie doar de un singur bit. 92 00:04:02,870 --> 00:04:05,020 Dar, din nou, unitatea cea mai comună a măsurii în lume 93 00:04:05,020 --> 00:04:07,820 de calcul este de octeți, opt biți. 94 00:04:07,820 --> 00:04:09,720 Doar pentru că un pic, destul de inutil. 95 00:04:09,720 --> 00:04:12,020 Opt biți, nu foarte utile, dar cel puțin e mai mult 96 00:04:12,020 --> 00:04:14,280 utilă decât o singură unitate de măsură. 97 00:04:14,280 --> 00:04:17,100 Deci, cu opt biți, vom reprezenta de obicei binar. 98 00:04:17,100 --> 00:04:20,459 Deci, aici avem numerele de la zero, unu, doi, și apoi, în calitate de 99 00:04:20,459 --> 00:04:24,200 Nate făcut-o în videoclipul nostru de miercurea trecută, putem continua 100 00:04:24,200 --> 00:04:25,940 de numărare până la șapte, la opt. 101 00:04:25,940 --> 00:04:27,860 Și apoi, dacă vom folosi mai multi biti si mai mult, am 102 00:04:27,860 --> 00:04:29,880 poate conta până la infinit. 103 00:04:29,880 --> 00:04:32,800 Dar dacă aveți doar un număr finit de biți aceste, așa cum este 104 00:04:32,800 --> 00:04:35,030 cazul în orice sistem de calculator, sau chiar rachete 105 00:04:35,030 --> 00:04:36,670 sistem, ei bine, într-adevăr, aveți doar o 106 00:04:36,670 --> 00:04:37,900 cantitate finită de precizie. 107 00:04:37,900 --> 00:04:41,290 Deci, dacă doriți să reprezinte numărul ca 0.1, ei bine, 108 00:04:41,290 --> 00:04:43,410 computerul trebuie să aleagă și să aleagă. 109 00:04:43,410 --> 00:04:45,970 Și dacă are numai un număr finit de numere se poate 110 00:04:45,970 --> 00:04:50,490 reprezintă, ea poate veni aproape de 0,1 pentru tine, dar nu poate 111 00:04:50,490 --> 00:04:53,730 neapărat a vă oferi exact valoarea pe care o doriți. 112 00:04:53,730 --> 00:04:55,660 Și aceasta este doar una dintre provocările de calculatoare, 113 00:04:55,660 --> 00:04:57,090 sub capota, din fericire. 114 00:04:57,090 --> 00:04:59,110 >> Așa cum ne mișcăm mai departe în semestrul, aceste nivel mai redus 115 00:04:59,110 --> 00:05:02,310 Detalii deveni mult mai puțin interesant, dar cu siguranță 116 00:05:02,310 --> 00:05:05,700 de aplicare a acestor idei poate avea unele lumea foarte real 117 00:05:05,700 --> 00:05:06,760 ramificații. 118 00:05:06,760 --> 00:05:08,190 Una dintre ele este o distracție pic. 119 00:05:08,190 --> 00:05:12,150 Câți dintre voi ați văzut uimitoare Office Space film? 120 00:05:12,150 --> 00:05:13,620 Dacă nu aveți, că e neoficial dvs. 121 00:05:13,620 --> 00:05:14,370 temele pentru săptămâna. 122 00:05:14,370 --> 00:05:16,730 Dar, în Office Space, colegii din acel film ia 123 00:05:16,730 --> 00:05:19,900 Avantajul tocmai această idee, dar ei de fapt furat 124 00:05:19,900 --> 00:05:21,270 l de la un alt film pe care le-ar putea avea 125 00:05:21,270 --> 00:05:22,760 văzut, chiar și ani înainte. 126 00:05:22,760 --> 00:05:24,920 Deci, permiteți-mi să vă dau câteva secunde de la acest trailer 127 00:05:24,920 --> 00:05:27,470 acest film uimitor și acest lucru este foarte mult 128 00:05:27,470 --> 00:05:28,340 academic relevant. 129 00:05:28,340 --> 00:05:30,310 >> [Joacă MOVIE] 130 00:05:30,310 --> 00:05:32,240 De fapt, am fost promovat. 131 00:05:32,240 --> 00:05:33,360 Pot programa un virus care va rupe că 132 00:05:33,360 --> 00:05:34,460 plasa pe mare de timp. 133 00:05:34,460 --> 00:05:35,770 Ei bine, cum functioneaza? 134 00:05:35,770 --> 00:05:37,836 De fiecare dată când există o tranzacție bancară în cazul în care dobânda este 135 00:05:37,836 --> 00:05:40,154 computerizata, există mii de o zi, calculatorul sfârșește 136 00:05:40,154 --> 00:05:41,040 cu aceste fracții de un cent. 137 00:05:41,040 --> 00:05:43,050 Dar eu nu am de gând să fac nimic ilegal. 138 00:05:43,050 --> 00:05:46,730 Ilegal? Samir, asta e America. 139 00:05:46,730 --> 00:05:48,010 Trebuie sa jur pe Dumnezeu. 140 00:05:48,010 --> 00:05:51,870 În cazul în care nimeni nu știe despre acest lucru, dar noi, bine? Nu există membri ai familiei, nu 141 00:05:51,870 --> 00:05:52,490 prietene, nimeni. 142 00:05:52,490 --> 00:05:53,882 [Neauzit]. 143 00:05:53,882 --> 00:05:57,594 Nu-ți face griji, omule, nu voi spune nimănui, fie. 144 00:05:57,594 --> 00:05:59,680 [MOVIE ENDS] 145 00:05:59,680 --> 00:06:01,900 >> Bine, asa ca poate am gasit acest film mai bun decât majoritatea 146 00:06:01,900 --> 00:06:05,530 oamenii de aici, dar, în orice caz, virusul care au fost 147 00:06:05,530 --> 00:06:06,400 încercarea de a crea - 148 00:06:06,400 --> 00:06:08,410 și în filme, oricând ei ar suna ceva de un virus, 149 00:06:08,410 --> 00:06:09,770 nu e, în general, de fapt, un virus. 150 00:06:09,770 --> 00:06:11,600 E doar un program care cineva a scris de a face ceva. 151 00:06:11,600 --> 00:06:13,800 Și în acest caz, baietii au încercat să scrie un program de 152 00:06:13,800 --> 00:06:16,610 care a avut avantajul de a companiei lor, numit de Innotech 153 00:06:16,610 --> 00:06:19,740 sistem de calcul, prin care computerele, de asemenea, chiar și atunci când 154 00:06:19,740 --> 00:06:21,350 vine vorba de bani, poate nu neapărat 155 00:06:21,350 --> 00:06:23,490 reprezintă bani cu precizie. 156 00:06:23,490 --> 00:06:27,630 Deci, chiar dacă ar putea avea 0.10 dolari în contul dvs. bancar, 157 00:06:27,630 --> 00:06:31,060 0.10, ei bine, s-ar putea crede computerul de fapt, că aveți 158 00:06:31,060 --> 00:06:33,560 acest cenți multe în contul dvs. bancar. 159 00:06:33,560 --> 00:06:35,750 Și deci ce acesti baieti au fost aspiră să facă - și ei 160 00:06:35,750 --> 00:06:38,240 a furat ideea, se pare că de la Superman III, în cazul în care 161 00:06:38,240 --> 00:06:41,210 Richard Pryor a făcut același lucru - au fost în esență, 162 00:06:41,210 --> 00:06:44,880 programe de scriere care aspiră să ia toate posterioară 163 00:06:44,880 --> 00:06:46,930 numere, toate de mici, fracțiunile mici, mici de 164 00:06:46,930 --> 00:06:50,160 mărunțiș, și sustrage cele de pe astfel că oamenii pur și simplu 165 00:06:50,160 --> 00:06:52,620 gând, oh, e doar 0.10 dolari acolo, dar toti cei 166 00:06:52,620 --> 00:06:54,410 Numerele trailing adăuga în cele din urmă. 167 00:06:54,410 --> 00:06:57,490 Deci, o idee minunată și hilar eșuat în această 168 00:06:57,490 --> 00:06:58,250 special de film. 169 00:06:58,250 --> 00:07:01,800 >> Dar în lumea reală, de asemenea, există mult mai mult în ceea ce privește 170 00:07:01,800 --> 00:07:03,190 implicații ale acestor tipuri de lucruri. 171 00:07:03,190 --> 00:07:05,450 Iar unul dintre motivele să se scufunde în domeniul calculatorului 172 00:07:05,450 --> 00:07:07,620 știința este, din nou, aplicabilitatea acesteia de a nu 173 00:07:07,620 --> 00:07:09,740 științe inginerești singur, ci doar pentru a 174 00:07:09,740 --> 00:07:10,650 alte domenii precum. 175 00:07:10,650 --> 00:07:14,760 Deci, aceasta este o privire mai lighthearted la ceea ce poate merge prost, dar 176 00:07:14,760 --> 00:07:17,630 E, de asemenea, destul de deschiderea ochilor, cred că, atunci când vine vorba de 177 00:07:17,630 --> 00:07:20,760 înțelegerea exact cum omniprezent tehnologii cum ar fi 178 00:07:20,760 --> 00:07:22,870 calculatoare și de programare sau in aceste zile, 179 00:07:22,870 --> 00:07:23,930 în formă de software. 180 00:07:23,930 --> 00:07:26,500 Deci, acest clip următor este vorba doar de șase minute, continuă 181 00:07:26,500 --> 00:07:30,320 unde am rămas data trecută, dar ne permite să privim un pic 182 00:07:30,320 --> 00:07:33,370 mai în profunzime la o astfel de aceste probleme unul. 183 00:07:33,370 --> 00:07:35,270 Lasă-mă să treceți de unde am plecat oprit, 184 00:07:35,270 --> 00:07:37,780 care a fost chiar aici. 185 00:07:37,780 --> 00:07:41,580 Și avem partea a doua a doua, pentru aproximativ șase minute aici. 186 00:07:41,580 --> 00:07:41,980 >> [PLAY MOVIE] 187 00:07:41,980 --> 00:07:45,430 Chinuit de tehnologie modernă rachetă. 188 00:07:45,430 --> 00:07:49,280 În 1991, odată cu începerea primului Război din Golf, Patriot 189 00:07:49,280 --> 00:07:51,350 rachetă experimentat un fel similar de 190 00:07:51,350 --> 00:07:52,645 Numărul de conversie problema. 191 00:07:52,645 --> 00:07:57,460 Și, ca urmare, 20 de persoane, 20 de soldați americani au fost uciși, 192 00:07:57,460 --> 00:08:01,130 și aproximativ 100 de răniți alții, atunci când Patriot, care ar fi trebuit 193 00:08:01,130 --> 00:08:03,400 pentru a proteja împotriva Scuds primite, 194 00:08:03,400 --> 00:08:06,020 nu a reușit la foc o rachetă. 195 00:08:06,020 --> 00:08:09,350 >> Atunci când Irakul a invadat Kuweitul și America a lansat un Desert 196 00:08:09,350 --> 00:08:13,530 Furtună la începutul anului 1991, au fost rachete Patriot baterii 197 00:08:13,530 --> 00:08:16,970 dislocate pentru a proteja Arabia Saudită și Israel din Irak 198 00:08:16,970 --> 00:08:19,810 Scud rachete atacuri. 199 00:08:19,810 --> 00:08:23,740 Patriot este un american cu raza medie de suprafață-aer sistem, 200 00:08:23,740 --> 00:08:26,370 fabricat de compania Raytheon. 201 00:08:26,370 --> 00:08:30,860 Dimensiunea de interceptare Patriot în sine, este vorba despre 202 00:08:30,860 --> 00:08:35,650 aproximativ 20 de metri lungime si cantareste aproximativ 2.000 de lire sterline. 203 00:08:35,650 --> 00:08:38,809 Și este poarta un focos de aproximativ - Cred că e aproape 204 00:08:38,809 --> 00:08:40,169 150 de lire sterline. 205 00:08:40,169 --> 00:08:45,820 Și focosul în sine este un exploziv de mare, care are 206 00:08:45,820 --> 00:08:48,120 fragmente din jurul ei. 207 00:08:48,120 --> 00:08:51,870 Carcasa de focos este conceput pentru a acționa ca alice mari. 208 00:08:51,870 --> 00:08:54,920 Rachetele sunt realizate patru per recipient și sunt 209 00:08:54,920 --> 00:08:57,850 transportate de către o semiremorcă. 210 00:08:57,850 --> 00:09:02,940 >> Patriot anti-rachetă sistem merge înapoi, cel puțin la 211 00:09:02,940 --> 00:09:05,530 20 de ani. 212 00:09:05,530 --> 00:09:09,150 Aceasta a fost inițial conceput ca o rachetă de apărare aeriană a 213 00:09:09,150 --> 00:09:12,920 trage în jos avioane inamice, în Războiul din Golf. 214 00:09:12,920 --> 00:09:17,700 Atunci când a venit acel război de-a lungul, Armata a vrut să-l folosească pentru a trage 215 00:09:17,700 --> 00:09:19,880 Scuds jos, nu avioane. 216 00:09:19,880 --> 00:09:24,860 Air Force irakian nu a fost atât de mult de o problemă, dar armata 217 00:09:24,860 --> 00:09:27,260 a fost îngrijorat Scuds. 218 00:09:27,260 --> 00:09:30,810 Și astfel au încercat să faceți upgrade Patriot. 219 00:09:30,810 --> 00:09:33,770 Interceptarea unei rachete inamic călătorie la Mach 5 a fost de gând 220 00:09:33,770 --> 00:09:35,790 să fie suficient de provocatoare. 221 00:09:35,790 --> 00:09:39,460 Dar când Patriot a fost grăbit în funcțiune, Armata 222 00:09:39,460 --> 00:09:43,730 nu a fost conștient de o modificare irakian care a făcut lor 223 00:09:43,730 --> 00:09:46,510 Scuds aproape imposibil pentru a lovi. 224 00:09:46,510 --> 00:09:50,040 >> Ceea ce sa întâmplat este Scuds care au fost 225 00:09:50,040 --> 00:09:51,360 venind în instabile au fost. 226 00:09:51,360 --> 00:09:52,266 Ei au fost trepideaza. 227 00:09:52,266 --> 00:09:56,300 Motivul pentru acest lucru a fost irakieni, în scopul de a obține 600 228 00:09:56,300 --> 00:10:00,650 km dintr-un rachete distanță de 300 km, a avut 229 00:10:00,650 --> 00:10:02,423 greutate din față și focos 230 00:10:02,423 --> 00:10:03,990 a făcut focos bricheta. 231 00:10:03,990 --> 00:10:08,700 Deci, acum Patriot încearcă să vină la Scud, și de cele mai multe 232 00:10:08,700 --> 00:10:11,192 timp, marea majoritate a timpului, aceasta ar 233 00:10:11,192 --> 00:10:13,450 doar bilete de Scud. 234 00:10:13,450 --> 00:10:16,300 Odată ce operatorii de sisteme de realizat Patriot Patriot 235 00:10:16,300 --> 00:10:20,160 ratat ținta, au detonat focosul Patriot. 236 00:10:20,160 --> 00:10:22,760 Pentru a evita posibilele accidente, a fost permisă 237 00:10:22,760 --> 00:10:25,100 să cadă la pământ. 238 00:10:25,100 --> 00:10:29,400 Asta a fost ceea ce majoritatea oamenilor au văzut, ca mingi de foc mari din cer, 239 00:10:29,400 --> 00:10:34,930 și înțeleasă greșit ca intercepteaza de focoase Scud. 240 00:10:34,930 --> 00:10:37,490 >> Deși, în cerul nopții, Patrioții părea să fie 241 00:10:37,490 --> 00:10:41,570 Scuds succes distruse, la Dhahran, nu ar putea exista 242 00:10:41,570 --> 00:10:43,730 greseala cu privire la performanțele sale. 243 00:10:43,730 --> 00:10:46,370 Nu, sistemul Patriot radar pierdut urma unei 244 00:10:46,370 --> 00:10:50,090 intrare Scud și niciodată nu a lansat datorită 245 00:10:50,090 --> 00:10:51,340 la un defect de software. 246 00:10:54,030 --> 00:10:57,050 Acesta a fost primul care a descoperit israelieni care mai mult 247 00:10:57,050 --> 00:11:02,000 sistemul a fost pornit, mai mare discrepanta de timp a devenit, 248 00:11:02,000 --> 00:11:05,530 din cauza un ceas încorporat în calculatorul sistemului. 249 00:11:05,530 --> 00:11:09,060 Aproximativ două săptămâni înainte de tragedia din Dhahran, 250 00:11:09,060 --> 00:11:11,730 Israelienii au raportat la Departamentul Apărării, care 251 00:11:11,730 --> 00:11:13,250 Sistemul a fost pierde timp. 252 00:11:13,250 --> 00:11:15,610 După aproximativ opt ore de funcționare, au observat că 253 00:11:15,610 --> 00:11:18,330 Sistemul a fost din ce în ce mai puțin vizibil corecte. 254 00:11:18,330 --> 00:11:20,910 Departamentul Apararii a răspuns prin a spune toate 255 00:11:20,910 --> 00:11:23,710 bateriile Patriot a nu părăsi sistemele de 256 00:11:23,710 --> 00:11:25,450 pe de o lungă perioadă de timp. 257 00:11:25,450 --> 00:11:28,010 Ei au spus niciodată ce o lungă perioadă de timp a fost de - 8 ore, 10 258 00:11:28,010 --> 00:11:29,690 ore, 1.000 de ore. 259 00:11:29,690 --> 00:11:31,940 Nimeni nu știa. 260 00:11:31,940 --> 00:11:35,020 >> Bateria Patriot staționate la cazarma de la Dhahran 261 00:11:35,020 --> 00:11:39,030 și de ceas eronată intern a fost pe peste 100 de ore pe 262 00:11:39,030 --> 00:11:42,240 noaptea de 25 februarie. 263 00:11:42,240 --> 00:11:46,580 Acesta urmarite timp cu o precizie de aproximativ o zecime de secundă. 264 00:11:46,580 --> 00:11:48,830 Acum, o zecime din al doilea este un număr de interesant, deoarece 265 00:11:48,830 --> 00:11:52,660 acesta nu poate fi exprimat în binar, exact, ceea ce înseamnă 266 00:11:52,660 --> 00:11:54,940 acesta nu poate fi exprimat exact în orice 267 00:11:54,940 --> 00:11:57,330 digital modern calculator. 268 00:11:57,330 --> 00:11:59,130 E greu de crezut. 269 00:11:59,130 --> 00:12:01,720 Dar folosesc acest lucru ca un exemplu. 270 00:12:01,720 --> 00:12:04,090 >> Să luăm numărul unu al treilea. 271 00:12:04,090 --> 00:12:07,950 O treime nu poate fi exprimat în zecimal, exact. 272 00:12:07,950 --> 00:12:12,710 Un al treilea se întâmplă 0.333 de infinit. 273 00:12:12,710 --> 00:12:17,050 Nu există nici o modalitate de a face acest lucru cu precizie absolută în zecimal. 274 00:12:17,050 --> 00:12:19,340 Asta e exact același tip de problemă care sa întâmplat în 275 00:12:19,340 --> 00:12:20,190 Patriot. 276 00:12:20,190 --> 00:12:24,680 Mai mult sistemul de alergat, mai rău eroare de timp a devenit. 277 00:12:24,680 --> 00:12:28,640 După 100 de ore de funcționare, eroarea în timp a fost de numai 278 00:12:28,640 --> 00:12:29,870 aproximativ o treime dintr-o secundă. 279 00:12:29,870 --> 00:12:34,790 Dar, în ceea ce privește direcționarea unei rachete de călătorie de la Mach 5, 280 00:12:34,790 --> 00:12:39,140 aceasta a dus la o eroare de urmărire de peste 600 de metri. 281 00:12:39,140 --> 00:12:42,510 Ar fi o eroare fatală pentru soldații de la Dhahran. 282 00:12:42,510 --> 00:12:48,680 >> Ceea ce sa întâmplat este o lansare Scud a fost detectată de avertizare timpurie 283 00:12:48,680 --> 00:12:52,440 sateliți și ei știau că Scud venea în lor 284 00:12:52,440 --> 00:12:53,350 general de direcție. 285 00:12:53,350 --> 00:12:55,470 Ei nu știu de unde venea. 286 00:12:55,470 --> 00:12:58,210 A fost acum pana la componenta de radar Patriot 287 00:12:58,210 --> 00:13:01,920 sistem, apărarea Dhahran, pentru a localiza și urmări 288 00:13:01,920 --> 00:13:03,700 sosite inamic rachete. 289 00:13:03,700 --> 00:13:05,390 Radar a fost foarte inteligent. 290 00:13:05,390 --> 00:13:07,570 Te-ar urmări de fapt, poziția de Scud și apoi 291 00:13:07,570 --> 00:13:10,340 prezice în cazul în care, probabil, ar fi data viitoare 292 00:13:10,340 --> 00:13:12,040 Radar trimis un puls afară. 293 00:13:12,040 --> 00:13:13,730 Care a fost numit poarta gama. 294 00:13:13,730 --> 00:13:18,820 Apoi, odată ce Patriot decide destul timp a trecut pentru a merge 295 00:13:18,820 --> 00:13:22,600 înapoi și să verificați următoarea locație pentru acest detectată 296 00:13:22,600 --> 00:13:24,190 obiect, merge înapoi. 297 00:13:24,190 --> 00:13:27,940 Deci, atunci când acesta a plecat înapoi la locul nepotrivit, atunci el nu vede niciun 298 00:13:27,940 --> 00:13:31,000 obiecții, și se decide că nu a existat nici un obiect. 299 00:13:31,000 --> 00:13:34,370 A fost o detectie fals și scade pista. 300 00:13:34,370 --> 00:13:37,630 >> Intrare Scud dispărut de pe ecranul radarului. 301 00:13:37,630 --> 00:13:41,300 Si secunde mai târziu, el trântit în cazarmă. Scud 302 00:13:41,300 --> 00:13:44,730 28 și a fost ucis ultima concediat în timpul 303 00:13:44,730 --> 00:13:46,450 primul război din Golf. 304 00:13:46,450 --> 00:13:50,570 În mod tragic, software-ul actualizat ajuns la Dhahran 305 00:13:50,570 --> 00:13:52,060 ziua următoare. 306 00:13:52,060 --> 00:13:56,210 Și software-ul defect a fost stabilită, închiderea unui capitol în 307 00:13:56,210 --> 00:13:58,370 zbuciumata istorie a rachetelor Patriot. 308 00:14:01,790 --> 00:14:04,990 PATRIOT este de fapt un acronim pentru "Urmărirea rețele fazate 309 00:14:04,990 --> 00:14:08,516 Interceptate de țintă. " 310 00:14:08,516 --> 00:14:13,390 >> În regulă, deci un rezultat mult mai trist de a nu destul 311 00:14:13,390 --> 00:14:14,430 înțelegerea acestei lumi. 312 00:14:14,430 --> 00:14:18,180 Și takeaway, într-adevăr, de la film este că soluția 313 00:14:18,180 --> 00:14:20,790 a fost reporniți sistemul de apărare antirachetă 314 00:14:20,790 --> 00:14:21,770 fiecare dată într-un timp. 315 00:14:21,770 --> 00:14:24,280 Și astfel, din nou, unul dintre obiectivele acestui curs, cu siguranță, 316 00:14:24,280 --> 00:14:26,900 pe o scară de mai umil decât aceste aplicații, este acela de a 317 00:14:26,900 --> 00:14:30,710 într-adevăr toată lumea deschide ochii la exact cum te duci despre 318 00:14:30,710 --> 00:14:34,380 Mașini de luare a face ceea ce vrei să faci și cum te duci 319 00:14:34,380 --> 00:14:37,180 despre a face asta în mod corect, în timp ce de-a lungul modul în care face 320 00:14:37,180 --> 00:14:38,810 ei bine, elegant, și așa mai departe. 321 00:14:38,810 --> 00:14:41,680 Și așa astăzi, să se arunca cu capul într-un pic mai mult de acest lucru, dar 322 00:14:41,680 --> 00:14:44,210 astfel încât să nu merg prea repede, în special pentru cei mai puțin 323 00:14:44,210 --> 00:14:46,590 confortabil, dar, de asemenea, astfel încât să putem păstra interesul 324 00:14:46,590 --> 00:14:49,390 cei mai confortabil, hai să începem rapid, cu un pic 325 00:14:49,390 --> 00:14:50,970 de recapitulare a unora dintre aceste idei. 326 00:14:50,970 --> 00:14:53,710 Și din nou, cere la distanță, atât în ​​persoană sau online, în cazul în care aveți 327 00:14:53,710 --> 00:14:56,320 întrebări astfel încât să putem păstra toată lumea de pe aceeași pagină. 328 00:14:56,320 --> 00:14:58,820 >> Deci, Aparatura CS50, pas rapid înapoi, este 329 00:14:58,820 --> 00:15:02,360 ceea ce, în cuvintele tale? 330 00:15:02,360 --> 00:15:06,454 E în regulă, dacă nu aveți nici o idee ce ar putea fi acele cuvinte încă. 331 00:15:06,454 --> 00:15:07,830 [Neauzit] 332 00:15:07,830 --> 00:15:10,950 Ok, deci o interfață universală pentru - 333 00:15:10,950 --> 00:15:11,900 că putem împărtășim cu toții. 334 00:15:11,900 --> 00:15:12,470 Absolut. 335 00:15:12,470 --> 00:15:14,840 Deci, am putea, de exemplu, vă spun să mergeți la unele 336 00:15:14,840 --> 00:15:16,910 site-ul, descărca acest software pentru Mac OS. 337 00:15:16,910 --> 00:15:19,140 Descarca acest software-ul pentru Windows, configura în 338 00:15:19,140 --> 00:15:20,100 în acest fel și că. 339 00:15:20,100 --> 00:15:22,370 Dar realitatea este, atunci vom rula în nenumărate tehnic 340 00:15:22,370 --> 00:15:23,200 sprijini probleme. 341 00:15:23,200 --> 00:15:26,630 Și, de asemenea în aceste zile, o mare parte din ceea ce se face partea de server, 342 00:15:26,630 --> 00:15:28,490 în lumea de calcul, mai ales atunci când vine vorba de 343 00:15:28,490 --> 00:15:31,460 dezvoltare web si aplicatii web bazate pe, este de fapt 344 00:15:31,460 --> 00:15:35,110 destul de des face pe computere Unix sau Linux, spre deosebire de 345 00:15:35,110 --> 00:15:36,800 Mac-urile sau PC-urile Windows. 346 00:15:36,800 --> 00:15:39,240 >> Deci, printre upsides, apoi, de a folosi acest lucru numit 347 00:15:39,240 --> 00:15:41,500 Aparatura este CS50 vom avea toate același mediu. 348 00:15:41,500 --> 00:15:43,670 Astfel încât toată lumea e pe aceeași pagină, indiferent de ce hardware pe care 349 00:15:43,670 --> 00:15:46,650 a venit la campus, cu dar, de asemenea, vor fi abuza de exact 350 00:15:46,650 --> 00:15:48,230 același mediu pe care le veți folosi pentru 351 00:15:48,230 --> 00:15:51,080 semestru de terminare, precum și pentru dezvoltarea web, precum și în 352 00:15:51,080 --> 00:15:53,580 viitor pentru aplicațiile reale ale acestora. 353 00:15:53,580 --> 00:15:56,350 Deci mai concret, Aparatura CS50 este o bucată gratuit 354 00:15:56,350 --> 00:15:59,400 software-ul care vă permite să rulați un alt sistem de operare, 355 00:15:59,400 --> 00:16:02,670 Linux, în acest caz, pe propriul computer, într-o fereastră. 356 00:16:02,670 --> 00:16:04,750 Acum nu mai puteți descărca doar aparatul. 357 00:16:04,750 --> 00:16:08,170 Ai nevoie de un program cu care să se joace sau a alerga aparatul. 358 00:16:08,170 --> 00:16:11,220 Și acea bucată de software-ul este, în general, cunoscut ca un 359 00:16:11,220 --> 00:16:11,520 hypervisor. 360 00:16:11,520 --> 00:16:14,050 Hypervisori vin în formă de produse, cum ar fi VMware, 361 00:16:14,050 --> 00:16:15,820 Virtual Box, Parallels. 362 00:16:15,820 --> 00:16:18,390 Tot felul de societăți fac software-ul, ambele gratuite și 363 00:16:18,390 --> 00:16:19,310 comercial, deopotrivă. 364 00:16:19,310 --> 00:16:21,480 Ceea ce veți vedea în problema Set 1 sunt instrucțiuni despre cum să 365 00:16:21,480 --> 00:16:23,440 a obține software-ul gratuit cu care să 366 00:16:23,440 --> 00:16:25,000 executați Aparatura CS50. 367 00:16:25,000 --> 00:16:28,060 Și odată ce faci, vei avea, într-o fereastră de pe Mac sau PC, 368 00:16:28,060 --> 00:16:30,710 un mediu de desktop care arata destul de în acest fel, în cazul în care 369 00:16:30,710 --> 00:16:33,100 are un meniu Start-ca lucru în 370 00:16:33,100 --> 00:16:34,510 jos colțul din stânga. 371 00:16:34,510 --> 00:16:38,030 Ea are un dosar întâmpinare, sau director de pornire, în stânga sus 372 00:16:38,030 --> 00:16:40,280 acolo, un coș de gunoi, și așa mai departe. 373 00:16:40,280 --> 00:16:43,450 Deci, vom tachineze pe langa detaliile necesare ca vom merge. 374 00:16:43,450 --> 00:16:46,430 >> Dar acum să înceapă să se scufunde în C. 375 00:16:46,430 --> 00:16:49,200 Deci C este acest limbaj de programare, similare în spirit 376 00:16:49,200 --> 00:16:52,390 Zero, dar mult mai puțin grafic, dar în mod ironic, de departe 377 00:16:52,390 --> 00:16:54,730 mai puternic odată ce te savvy cu ea. 378 00:16:54,730 --> 00:16:58,970 Deci, în C, vom scrie programe prin scrierea de cod sursă, care este 379 00:16:58,970 --> 00:17:01,640 această sintaxă engleză-ca, similar cu șosete 380 00:17:01,640 --> 00:17:05,609 demonstrarea faptului că am făcut data trecută, care vă permite să 381 00:17:05,609 --> 00:17:07,910 te exprimi destul de precis, în cazul în care 382 00:17:07,910 --> 00:17:09,760 arcanely, la calculator. 383 00:17:09,760 --> 00:17:11,960 >> Deci, ce fel de software-ul produsului nu aveți nevoie de fapt, 384 00:17:11,960 --> 00:17:15,520 pentru a scrie programe într-un limbaj ca C, în baza noastră de 385 00:17:15,520 --> 00:17:17,492 conversație luni? 386 00:17:17,492 --> 00:17:19,650 [Neauzit] 387 00:17:19,650 --> 00:17:21,079 OK, ai nevoie doar de un editor de text. 388 00:17:21,079 --> 00:17:22,890 Nu aveți nevoie de nici un software special 389 00:17:22,890 --> 00:17:24,460 în sine pentru a scrie programe. 390 00:17:24,460 --> 00:17:27,220 Ai nevoie doar de un editor de text cum ar fi Notepad, pe Windows, 391 00:17:27,220 --> 00:17:30,450 TextEdit pe Mac, sau ceva numit gedit, în lumea 392 00:17:30,450 --> 00:17:32,020 Linux, pe care le vom folosi aici. 393 00:17:32,020 --> 00:17:33,750 Și asta e tot, pentru a scrie programe. 394 00:17:33,750 --> 00:17:35,480 >> Dar scrisul e doar jumătate din ecuație. 395 00:17:35,480 --> 00:17:36,630 Va trebui apoi să le executați. 396 00:17:36,630 --> 00:17:38,320 Dar, în scopul de a rula programe - 397 00:17:38,320 --> 00:17:39,600 nu puteți rula codul sursa. 398 00:17:39,600 --> 00:17:41,500 Aveți în schimb trebuie să faci ce-l mai întâi? 399 00:17:41,500 --> 00:17:41,900 Da. 400 00:17:41,900 --> 00:17:43,200 David J. MALAN: Trebuie să vă 401 00:17:43,200 --> 00:17:44,130 compilați-l. 402 00:17:44,130 --> 00:17:49,010 Și, altcineva, compilarea codului sursă înseamnă - 403 00:17:49,010 --> 00:17:50,260 [Neauzit] 404 00:17:52,300 --> 00:17:52,700 David J. MALAN: Exact. 405 00:17:52,700 --> 00:17:54,430 Traducându-l la zero și unu. 406 00:17:54,430 --> 00:17:57,150 Pentru că toți dintre noi, în aceste zile, au computere care au procesoare, 407 00:17:57,150 --> 00:18:00,350 aproape toate din care sunt realizate de o companie numita Intel, și 408 00:18:00,350 --> 00:18:03,320 Intel Inside, înseamnă că e în interiorul creierului de dvs. 409 00:18:03,320 --> 00:18:04,990 calculator, cunoscut sub numele de CPU. 410 00:18:04,990 --> 00:18:07,570 Iar unul dintre lucrurile pe care pe care creierul nu este, ea știe 411 00:18:07,570 --> 00:18:10,390 cum să înțeleagă modelele de zero și unu. 412 00:18:10,390 --> 00:18:13,240 El stie ce model de biți reprezintă plus, ceea ce 413 00:18:13,240 --> 00:18:15,500 model reprezinta scaderi, ce model de 414 00:18:15,500 --> 00:18:18,890 biți reprezinta imprimare, precum și crearea unui sunet audibil. 415 00:18:18,890 --> 00:18:22,450 >> Deci, pe scurt, CPU, cuplat cu sistemul de operare, 416 00:18:22,450 --> 00:18:25,230 care este o bucată de software care rulează pe partea de sus a procesorului, 417 00:18:25,230 --> 00:18:26,050 ca să spunem așa. 418 00:18:26,050 --> 00:18:29,850 Împreună, aceste două piese știu cum să execute programe care 419 00:18:29,850 --> 00:18:31,070 noi, oamenii, scrie. 420 00:18:31,070 --> 00:18:34,040 >> Așa că, dacă mă duc în Appliance CS50 aici, am nevoie pentru a deschide 421 00:18:34,040 --> 00:18:35,660 un editor de text și pot accesa acest 422 00:18:35,660 --> 00:18:36,560 în câteva moduri. 423 00:18:36,560 --> 00:18:39,060 Eu pot merge la Meniu, Programare, 424 00:18:39,060 --> 00:18:40,230 și apoi pot selecta - 425 00:18:40,230 --> 00:18:40,810 nope, nu că meniul. 426 00:18:40,810 --> 00:18:43,860 Eu pot merge la Accesorii / gedit aici pentru a deschide 427 00:18:43,860 --> 00:18:45,090 editorul meu de text mic. 428 00:18:45,090 --> 00:18:48,030 Sau, mai simplu, am posibilitatea să faceți clic pe această pictogramă mică în partea de jos 429 00:18:48,030 --> 00:18:48,970 colțul din stânga. 430 00:18:48,970 --> 00:18:50,430 Și acum ajung aici acest mediu. 431 00:18:50,430 --> 00:18:52,590 E destul de amintește de un editor de text simplu, cu doar 432 00:18:52,590 --> 00:18:53,820 una sau două diferențe. 433 00:18:53,820 --> 00:18:56,420 În partea de sus, în cazul în care cursorul clipește acum, acest lucru este în cazul în care 434 00:18:56,420 --> 00:18:57,900 Pot începe să scrieți codul meu. 435 00:18:57,900 --> 00:19:00,415 În partea de jos este acest lucru numit fereastră de terminal. 436 00:19:00,415 --> 00:19:03,400 Și ce fel de lucruri pot să fac în acest 437 00:19:03,400 --> 00:19:04,960 așa-numita fereastră de terminal? 438 00:19:04,960 --> 00:19:06,680 [Neauzit] 439 00:19:06,680 --> 00:19:07,890 >> Bine, asa ca voi executa comenzi. 440 00:19:07,890 --> 00:19:10,300 Iar unele dintre comenzile Am alergat pe luni au fost un pic 441 00:19:10,300 --> 00:19:15,070 criptice la început, dar ls pentru lista, cd pentru directorul schimbare, 442 00:19:15,070 --> 00:19:16,540 rm, pentru al scoate. 443 00:19:16,540 --> 00:19:19,680 Deci e un fel de un mod vechi de-școală de navigație dvs. 444 00:19:19,680 --> 00:19:22,310 calculator, folosind doar tastatura și comenzi textuale, 445 00:19:22,310 --> 00:19:24,130 și nu, în general, cu ajutorul mouse-ului. 446 00:19:24,130 --> 00:19:25,960 Dar vom vedea, înainte de timp, acest fapt ne oferă o 447 00:19:25,960 --> 00:19:28,520 putere pic mai mult și cu o precizie pic mai mult, cu care să 448 00:19:28,520 --> 00:19:29,600 exprimă pe noi înșine. 449 00:19:29,600 --> 00:19:31,330 Și apoi aici, la stânga, suntem doar de gând să văd, 450 00:19:31,330 --> 00:19:34,360 cum vom începe software-ul scris, un rezumat mic de 451 00:19:34,360 --> 00:19:36,350 Programul pe care l-am scris in stanga sus. 452 00:19:36,350 --> 00:19:38,360 Dar vom vedea că din nou înainte de mult timp. 453 00:19:38,360 --> 00:19:40,050 >> Deci, hai sa facem ceva destul de simplu aici. 454 00:19:40,050 --> 00:19:43,440 Lasă-mă să merg mai departe și primul du-te la File, Save, iar eu sunt doar 455 00:19:43,440 --> 00:19:45,970 de gând să faceți clic pe jharvard aici, pe la stânga, și 456 00:19:45,970 --> 00:19:48,930 jharvard este, din nou, numele de folder casa mea, mea 457 00:19:48,930 --> 00:19:52,110 fișiere personale, mine, acum fiind John Harvard, ca voi toți 458 00:19:52,110 --> 00:19:54,230 va fi în curând John Harvard, în acest mediu. 459 00:19:54,230 --> 00:19:57,360 Are acest director Acasă, Documentele mele și așa mai departe, 460 00:19:57,360 --> 00:19:58,900 pe care vreau să le salvați, acum, acest fisier inch 461 00:19:58,900 --> 00:20:01,520 Așa că am de gând să-l sun hello.c. Apoi, am de gând să merg 462 00:20:01,520 --> 00:20:05,770 înainte și faceți clic pe Salvare, și acum ceea ce am aici este o filă 463 00:20:05,770 --> 00:20:09,440 numit hello.c, atât de mult ca un alt tip de editor. 464 00:20:09,440 --> 00:20:11,760 >> Asa ca lasa-ma acum mergeți mai departe și a începe scrierea unui program. 465 00:20:11,760 --> 00:20:14,440 int main (void). 466 00:20:14,440 --> 00:20:18,150 Și apoi am făcut doar ultima dată, printf, pentru print formatat, 467 00:20:18,150 --> 00:20:22,120 ("Bună ziua, lume!" 468 00:20:22,120 --> 00:20:24,500 );. 469 00:20:24,500 --> 00:20:25,630 Aproape finaliza. 470 00:20:25,630 --> 00:20:27,130 Dar Îmi lipsește o pereche de detalii. 471 00:20:27,130 --> 00:20:30,210 Ceea ce lipsește din acest program de care am nevoie pentru 472 00:20:30,210 --> 00:20:31,890 este de a compila, de fapt? 473 00:20:31,890 --> 00:20:32,130 Da. 474 00:20:32,130 --> 00:20:33,980 [Neauzit]? 475 00:20:33,980 --> 00:20:35,770 >> David J. MALAN: Da, așa că am nevoie pentru a include standardul 476 00:20:35,770 --> 00:20:36,700 I / O bibliotecă. 477 00:20:36,700 --> 00:20:39,470 Deci, acest lucru trebuie să meargă mai sus principal, așa că am de gând să 478 00:20:39,470 --> 00:20:40,790 face unele cameră pentru el acolo. 479 00:20:40,790 --> 00:20:44,420 Și am de gând să fac # include . 480 00:20:44,420 --> 00:20:46,570 Și observați paranteze unghiulare acolo. 481 00:20:46,570 --> 00:20:49,410 Și, ca o paranteză, gedit este un pic de utilizator prietenoasa, în cazul în care 482 00:20:49,410 --> 00:20:52,420 uneori, un pic confuz, în măsura în care încearcă să ajute dvs. 483 00:20:52,420 --> 00:20:54,770 Ochii observați ce linii cu ce. 484 00:20:54,770 --> 00:20:57,760 Deci, faptul că cursorul mea este chiar lângă acest unghi 485 00:20:57,760 --> 00:21:00,600 suport, observați cum se subliniază în unghi celălalt 486 00:21:00,600 --> 00:21:01,920 Suport plus aceasta. 487 00:21:01,920 --> 00:21:03,770 Si asta e doar să atrag atenția asupra mea faptul că am 488 00:21:03,770 --> 00:21:04,460 au simetrie. 489 00:21:04,460 --> 00:21:07,010 Și simetrie în programarea este, în general, un lucru bun. 490 00:21:07,010 --> 00:21:10,270 În mod similar, dacă am muta cursorul la sfârșitul meu, observați cum 491 00:21:10,270 --> 00:21:13,630 acolade linie până să demonstreze că, da, am una deschisă 492 00:21:13,630 --> 00:21:15,160 și una închisă, ca să spunem așa. 493 00:21:15,160 --> 00:21:16,640 >> Bine, și eu pot face un alt lucru. 494 00:21:16,640 --> 00:21:20,090 Nu este strict necesar, dar de bune practici, pentru a spune 495 00:21:20,090 --> 00:21:21,250 întoarce 0. 496 00:21:21,250 --> 00:21:24,140 Și 0 schimbul ce face pentru noi aici? 497 00:21:24,140 --> 00:21:25,584 Sau semnifică ce? 498 00:21:25,584 --> 00:21:27,480 [Neauzit] 499 00:21:27,480 --> 00:21:28,300 David J. MALAN: Dar nimic nu e în neregulă. 500 00:21:28,300 --> 00:21:30,280 Și, sincer, e greu pentru mai mult sa mearga prost într-o 501 00:21:30,280 --> 00:21:31,250 programa acest scurt. 502 00:21:31,250 --> 00:21:33,930 Deci, eu sunt doar a fi super-explicite ca totul este bine. 503 00:21:33,930 --> 00:21:36,740 Eu, om, atunci când am rula acest program, probabil nu va 504 00:21:36,740 --> 00:21:38,150 a se vedea că 0. 505 00:21:38,150 --> 00:21:41,070 În general, aceste numere care sunt returnate de la principal 506 00:21:41,070 --> 00:21:43,540 crească doar capetele lor la om, atunci când 507 00:21:43,540 --> 00:21:44,360 ceva nu merge bine. 508 00:21:44,360 --> 00:21:46,640 Si veti obtine un pop up pic de eroare de sistem de zis, o, 509 00:21:46,640 --> 00:21:48,760 doi, trei, sau indiferent de numărul care a fost 510 00:21:48,760 --> 00:21:50,100 a fost de fapt returnate. 511 00:21:50,100 --> 00:21:52,870 Deci, orice altceva în neregulă cu asta? 512 00:21:52,870 --> 00:21:55,300 [Neauzit] 513 00:21:55,300 --> 00:21:58,100 >> David J. MALAN: Deci, acest lucru nu este atât de mult o greșeală funcțională 514 00:21:58,100 --> 00:21:59,240 ci una estetică. 515 00:21:59,240 --> 00:22:02,340 Am ar trebui să pună, probabil, într-un caracter linie noua acolo, la 516 00:22:02,340 --> 00:22:05,240 sfârșitul acestui șir, astfel încât să ne mutăm de fapt, cursorul 517 00:22:05,240 --> 00:22:08,340 linia următoare, precum și programul de doar arata un pic mai frumoasa. 518 00:22:08,340 --> 00:22:10,340 >> Asa ca lasa-ma sa plec acum în jos la fereastra mea terminalul 519 00:22:10,340 --> 00:22:11,490 și zoom înapoi inch 520 00:22:11,490 --> 00:22:13,390 Și acest lucru aici, se numește prompt. 521 00:22:13,390 --> 00:22:16,760 E doar amintindu-mi cine sunt, jharvard @ aparat, în cazul în care 522 00:22:16,760 --> 00:22:18,850 Aparatul este numele calculatorului Sunt pe. 523 00:22:18,850 --> 00:22:22,380 În paranteze este acest tilda, simbolul squiggle, care 524 00:22:22,380 --> 00:22:24,160 reprezintă ceea ce? 525 00:22:24,160 --> 00:22:25,590 PUBLICUL: director Acasă. 526 00:22:25,590 --> 00:22:26,350 David J. MALAN: director Acasă. 527 00:22:26,350 --> 00:22:29,350 Deci, asta e doar o notație prescurtare pentru spui că sunt în 528 00:22:29,350 --> 00:22:32,780 dosarul personal în cazul în care toate fișierele merge în mod implicit. 529 00:22:32,780 --> 00:22:36,080 Deci, acum, aici, am posibilitatea să tastați ls pentru lista. 530 00:22:36,080 --> 00:22:40,020 Și singurul lucru pe care văd aici, în acest moment este hello.c. 531 00:22:40,020 --> 00:22:41,770 Și asta e bine pentru ca am scris asta. 532 00:22:41,770 --> 00:22:44,380 >> Așa că lasă-mă să merg mai departe și fac salut. 533 00:22:44,380 --> 00:22:46,830 Și observați nu mă face tastarea hello.c. 534 00:22:46,830 --> 00:22:50,300 În schimb, eu sunt tastarea doar numele de bază a fișierului, salut. 535 00:22:50,300 --> 00:22:53,690 Și fă, așa cum am văzut de luni, se va deduce doar că vreau 536 00:22:53,690 --> 00:22:54,920 c fisier.. 537 00:22:54,920 --> 00:22:56,820 Așa că acum am tastat fac salut. 538 00:22:56,820 --> 00:22:59,280 Acum văd această comandă destul de lung și va continua 539 00:22:59,280 --> 00:23:00,480 văzând asta din nou și din nou. 540 00:23:00,480 --> 00:23:03,620 Dar pentru a fi zăngănit clar,, cuvântul pe care tocmai a apărut, 541 00:23:03,620 --> 00:23:05,340 asta e compilator real. 542 00:23:05,340 --> 00:23:08,200 Asigurați-este doar un utilitar de build. 543 00:23:08,200 --> 00:23:11,900 E doar un program de utilizare mult mai prietenoasa, care mă salvează, în 544 00:23:11,900 --> 00:23:15,310 pe termen lung, de la a fi nevoie să tastați în incredibil de plictisitor lung 545 00:23:15,310 --> 00:23:17,020 comenzi, cum ar fi faptul că unul. 546 00:23:17,020 --> 00:23:18,950 Deci, ai putea fugi zăngănit manual. 547 00:23:18,950 --> 00:23:20,530 Ai putea tastați tot acel manual. 548 00:23:20,530 --> 00:23:21,580 Doar devine foarte obositor. 549 00:23:21,580 --> 00:23:24,720 Și face acest lucru este doar un program care simplifică viața noastră și 550 00:23:24,720 --> 00:23:27,120 ruleaza comenzi mai complexe pentru noi. 551 00:23:27,120 --> 00:23:29,410 >> În regulă, deci acum ce ar trebui să am fișier 552 00:23:29,410 --> 00:23:31,540 în directorul meu actual? 553 00:23:31,540 --> 00:23:36,310 Nu doar hello.c, dar, de asemenea, salut. 554 00:23:36,310 --> 00:23:39,710 Deci, dacă vreau să ruleze salut, se amintească faptul că am spus punct slash, 555 00:23:39,710 --> 00:23:42,220 în cazul în care mijloacele dot merge în folderul curent, oriunde te-ai 556 00:23:42,220 --> 00:23:46,060 sunt, și apoi executați programul numit salut, și într-adevăr, acum, 557 00:23:46,060 --> 00:23:48,080 Am Salut lume. 558 00:23:48,080 --> 00:23:51,640 În regulă, orice întrebări cu privire la fluxul de lucru sau sintaxa 559 00:23:51,640 --> 00:23:52,890 ceea ce am făcut? 560 00:23:55,380 --> 00:23:57,040 >> În regulă, deci haideți să aruncăm lucrurile la un alt nivel din nou. 561 00:23:57,040 --> 00:24:00,430 Deci, acest lucru a fost underwhelming să scrie doar un program care doar 562 00:24:00,430 --> 00:24:01,790 vreodată spune salut, lume. 563 00:24:01,790 --> 00:24:03,920 Deci, l-am schimbat, luni, să spunem, Buna, ziua, David. 564 00:24:03,920 --> 00:24:06,560 E un pic mai personal, dar la fel de greu ca și codificate 565 00:24:06,560 --> 00:24:07,410 prima versiune. 566 00:24:07,410 --> 00:24:08,780 Așa că nu tot ceea ce convingătoare. 567 00:24:08,780 --> 00:24:13,120 Dar există, în C, cu siguranță, pe lângă funcțiile de 568 00:24:13,120 --> 00:24:15,700 imprimare, funcții care vă permit să obțineți date introduse de utilizator. 569 00:24:15,700 --> 00:24:17,990 Și felul în care a făcut acest lucru, zilele trecute, a fost după cum urmează. 570 00:24:17,990 --> 00:24:21,440 Înainte de a imprima de fapt am ceva, am ajuns prima dată 571 00:24:21,440 --> 00:24:22,410 ceva de la utilizator. 572 00:24:22,410 --> 00:24:23,370 Așa că lasă-mă să fac asta din nou. 573 00:24:23,370 --> 00:24:26,580 >> String s, unde s este doar un nume arbitrar, aici, pentru o 574 00:24:26,580 --> 00:24:30,600 șir, adică getString. 575 00:24:30,600 --> 00:24:32,070 Deci, ceea ce a fost getString? 576 00:24:32,070 --> 00:24:34,630 Ea devine, evident, un șir de caractere, bazat pe numele său. 577 00:24:34,630 --> 00:24:37,560 Dar ceea ce este, mai tehnic? 578 00:24:37,560 --> 00:24:38,440 E o funcție. 579 00:24:38,440 --> 00:24:41,790 Deci, este o funcție care nu vine cu C per se. 580 00:24:41,790 --> 00:24:43,660 CS50 personal a scris acest lucru. 581 00:24:43,660 --> 00:24:46,940 Și astfel pentru a utiliza aceasta, nu puteți include doar stdio.h, 582 00:24:46,940 --> 00:24:49,630 De asemenea, trebuie să includă ce? 583 00:24:49,630 --> 00:24:50,060 Da. 584 00:24:50,060 --> 00:24:54,210 Deci cs50.h, care este doar un fisier am scris cu câțiva ani în urmă. 585 00:24:54,210 --> 00:24:57,130 Am instalat pe aparat pentru tine alături de 586 00:24:57,130 --> 00:24:58,490 toate fișierele standard. 587 00:24:58,490 --> 00:25:00,500 Și astfel, în aceste primele câteva săptămâni de clasa, vom folosi 588 00:25:00,500 --> 00:25:02,820 asta doar pentru a simplifica procesul de a face foarte de bază, 589 00:25:02,820 --> 00:25:04,600 lucrurile dori introduse de utilizator obtinerea. 590 00:25:04,600 --> 00:25:07,370 Pentru că așa cum vom vedea în câteva săptămâni, datele introduse de utilizator obținerea într-un 591 00:25:07,370 --> 00:25:10,180 limbajul C ca este de fapt surprinzator de complex, 592 00:25:10,180 --> 00:25:14,360 mai ales pentru că nu știți în avans, de obicei, cum 593 00:25:14,360 --> 00:25:17,030 multe lucruri utilizatorul este de gând să tastați inch 594 00:25:17,030 --> 00:25:20,340 Iar atunci când nu știi cât de mult să se aștepte de date, nu aveți 595 00:25:20,340 --> 00:25:22,380 Știi cât de mult de memorie pentru a aloca. 596 00:25:22,380 --> 00:25:25,480 Și dacă aveți de fapt, un utilizator contradictorie, care incearca 597 00:25:25,480 --> 00:25:28,180 să hack în sistemul dvs., blocheaza computerul, bine, 598 00:25:28,180 --> 00:25:31,600 în general, prima metodă de atac este, așa cum am făcut-o pe 599 00:25:31,600 --> 00:25:34,950 Luni, tastați o secvență întreagă de caractere aleatoare lung, 600 00:25:34,950 --> 00:25:37,020 apăsați Enter, și să vedem ce se rupe. 601 00:25:37,020 --> 00:25:40,800 Pentru că, în general, în cazul în care un program de pauze, ca aluzie la 602 00:25:40,800 --> 00:25:42,650 un defect de securitate, potențial. 603 00:25:42,650 --> 00:25:45,250 Este cu siguranță aluzie la tine, programator, care a făcut o 604 00:25:45,250 --> 00:25:49,050 greșeală, dar mai periculos, este posibil să fi făcut o 605 00:25:49,050 --> 00:25:52,430 legate de securitate greșeală, și, în general, vom vedea că 606 00:25:52,430 --> 00:25:54,840 asta e modul în care mașinile sunt compromise la această zi, atât 607 00:25:54,840 --> 00:25:56,620 în lumea de web și programe la 608 00:25:56,620 --> 00:25:58,070 linia de comandă, cum ar fi acest lucru. 609 00:25:58,070 --> 00:25:58,350 >> Bine. 610 00:25:58,350 --> 00:26:00,460 Deci sirul s este egal cu getString. 611 00:26:00,460 --> 00:26:03,380 Deci, mai concret acum, ceea ce face linia 6 face aici? 612 00:26:03,380 --> 00:26:05,640 Deci, funcția pe dreapta devine șir, 613 00:26:05,640 --> 00:26:06,890 ia câte argumente? 614 00:26:09,458 --> 00:26:09,900 Bine. 615 00:26:09,900 --> 00:26:10,400 Deci nimic. 616 00:26:10,400 --> 00:26:11,360 Un pic de bun-simț verifica. 617 00:26:11,360 --> 00:26:15,380 Un argument, din nou, este doar o intrare pentru o funcție pentru a modifica 618 00:26:15,380 --> 00:26:17,250 comportamentul său implicit într-un fel. 619 00:26:17,250 --> 00:26:19,540 Dar în acest caz, nu vreau să-și modifice 620 00:26:19,540 --> 00:26:20,650 comportamentul getString. 621 00:26:20,650 --> 00:26:22,430 Am vrut doar pentru a obține un șir. 622 00:26:22,430 --> 00:26:25,190 Așa că am pus nimic în paranteze, și apoi am pus-o 623 00:26:25,190 --> 00:26:27,550 punct și virgulă demarcată sfârșitul linie de cod. 624 00:26:27,550 --> 00:26:29,840 Acum, semnul egalității nu înseamnă egal, per se. 625 00:26:29,840 --> 00:26:32,690 Aceasta înseamnă misiune, ceea ce înseamnă că pune orice devine 626 00:26:32,690 --> 00:26:36,060 scoase pe interior dreapta de tot ce este pe stânga. 627 00:26:36,060 --> 00:26:39,400 >> Deci, pe stânga, spunem că ne-am declarat-o 628 00:26:39,400 --> 00:26:41,630 de coarde numit uri. 629 00:26:41,630 --> 00:26:44,240 Și, mai precis, am alocat de memorie în interiorul 630 00:26:44,240 --> 00:26:46,340 pe care vom pune biți care reprezintă o secvență de 631 00:26:46,340 --> 00:26:46,850 caractere. 632 00:26:46,850 --> 00:26:49,400 Dar pentru ziua de azi, am alocat 633 00:26:49,400 --> 00:26:51,450 sau declarată un șir. 634 00:26:51,450 --> 00:26:51,790 Bine. 635 00:26:51,790 --> 00:26:54,760 Deci, acum, odată ce am făcut acest lucru, vreau să conectați în valoare de 636 00:26:54,760 --> 00:26:56,535 Nu e, valoarea lui David. 637 00:26:56,535 --> 00:27:00,200 Deci asta e bine de ce? 638 00:27:03,060 --> 00:27:04,870 Deci, aceasta este doar literalmente s hard-coded. 639 00:27:04,870 --> 00:27:06,870 E a spune "Bună ziua, s," care nu este ceea ce vreau. 640 00:27:06,870 --> 00:27:07,790 Deci, eu pot face asta. 641 00:27:07,790 --> 00:27:10,330 Semnul procent este un substituent, dar acum am nevoie să 642 00:27:10,330 --> 00:27:12,520 a trece în a imprima un al doilea argument. 643 00:27:12,520 --> 00:27:15,160 Amintiti-va ca argumente pentru functii sunt separate prin 644 00:27:15,160 --> 00:27:20,300 virgule, astfel încât virgula următoarea aici, mi-am pus după acest e scrisoarea. 645 00:27:20,300 --> 00:27:23,740 Și în acest context acum, s este variabilă, și printf, 646 00:27:23,740 --> 00:27:25,550 La primirea acestor două intrări - 647 00:27:25,550 --> 00:27:29,440 șir pe stânga și numele variabilei pe dreapta - 648 00:27:29,440 --> 00:27:32,750 se va conecta în urmă fosta pentru noi, și 649 00:27:32,750 --> 00:27:34,600 doar imprima un șir frumos frumos care conțin 650 00:27:34,600 --> 00:27:36,770 orice este faptul că am tastat inch 651 00:27:36,770 --> 00:27:37,560 >> Deci, haideți să încercăm asta. 652 00:27:37,560 --> 00:27:38,860 De gând să meargă înainte și zoom out, spate 653 00:27:38,860 --> 00:27:40,250 la fereastra mea terminal. 654 00:27:40,250 --> 00:27:41,840 Măriți la partea de jos aici. 655 00:27:41,840 --> 00:27:44,070 Scrieți face salut. 656 00:27:44,070 --> 00:27:45,870 Zăngănit pare să fi fost executați din nou. 657 00:27:45,870 --> 00:27:49,280 Am de gând să tastați / salut, Enter.. 658 00:27:49,280 --> 00:27:52,145 Nimic nu pare să se întâmple încă, dar e la acest prompt 659 00:27:52,145 --> 00:27:55,700 că am posibilitatea să tastați ceva de genul Nate, Enter, și acum avem 660 00:27:55,700 --> 00:27:56,380 Bună, Nate. 661 00:27:56,380 --> 00:27:59,600 Și pot să-l fac din nou cu Rob, și așa mai departe. 662 00:27:59,600 --> 00:28:03,410 Deci, sperăm că acum acest program se comportă ca am de gând. 663 00:28:03,410 --> 00:28:05,720 >> Acum nu, tot ce user friendly. 664 00:28:05,720 --> 00:28:07,930 N-am nici o idee ce se asteapta de la mine. 665 00:28:07,930 --> 00:28:09,620 Astfel încât să putem curăța cu siguranta asta un pic. 666 00:28:09,620 --> 00:28:13,270 Lasă-mă să mă întorc aici, și în loc de doar scufundări în și 667 00:28:13,270 --> 00:28:16,480 cere utilizatorului pentru un șir, permiteți-mi să spun în mod explicit 668 00:28:16,480 --> 00:28:17,750 ghidul de ceea ce am asteptam. 669 00:28:17,750 --> 00:28:21,610 Deci printf ("Introduceți un șir:" 670 00:28:21,610 --> 00:28:24,080 ); 671 00:28:24,080 --> 00:28:25,510 Deci, nu variabile aici. 672 00:28:25,510 --> 00:28:26,750 Nu există semne de procente. 673 00:28:26,750 --> 00:28:28,550 Doar fraza simpla limba engleză. 674 00:28:28,550 --> 00:28:34,030 Lasă-mă să plec acum la partea de jos aici și executați din nou programul meu. 675 00:28:34,030 --> 00:28:35,380 Dar nimic nu pare să se fi schimbat. 676 00:28:35,380 --> 00:28:37,350 De ce? 677 00:28:37,350 --> 00:28:38,380 Trebuie să-l recompilați. 678 00:28:38,380 --> 00:28:39,570 Deci greșeală ușor de făcut. 679 00:28:39,570 --> 00:28:41,700 Dar trebuie să nu numai salvați fișierul, dar 680 00:28:41,700 --> 00:28:43,260 recompilați programului. 681 00:28:43,260 --> 00:28:46,640 Și așa, dacă am re-rulați make salut, acum zăngănit ruleaza. 682 00:28:46,640 --> 00:28:51,800 Acum, eu pot rula / salut.. Și acum văd "Introduceți un șir:". 683 00:28:51,800 --> 00:28:52,050 Bine. 684 00:28:52,050 --> 00:28:53,440 Acum e un pic mai user-friendly. 685 00:28:53,440 --> 00:28:55,850 Nate, Enter, Buna, ziua, Nate. 686 00:28:55,850 --> 00:28:57,310 >> Ei bine, hai să încercăm din nou și începe să gândesc 687 00:28:57,310 --> 00:28:58,080 despre cazurile de colț. 688 00:28:58,080 --> 00:29:00,520 Deci, la fel ca în Scratch, sunteți încurajat sau sunt în curs de 689 00:29:00,520 --> 00:29:03,180 încurajate în spec. la fel de gândească la ceea ce ar putea merge 690 00:29:03,180 --> 00:29:06,610 greșit, dacă nu anticipa totul utilizatorul ar putea face. 691 00:29:06,610 --> 00:29:08,050 Bug-uri, prin urmare, s-ar putea rezulta. 692 00:29:08,050 --> 00:29:09,710 Deci, introduceți un șir - 693 00:29:09,710 --> 00:29:11,130 ceea ce e un caz colț aici? 694 00:29:11,130 --> 00:29:13,320 Ce este un scenariu pe care eu, programator, nu ar putea avea 695 00:29:13,320 --> 00:29:16,070 anticipat? 696 00:29:16,070 --> 00:29:17,600 Da. 697 00:29:17,600 --> 00:29:17,920 Bine. 698 00:29:17,920 --> 00:29:22,060 Și ce dacă am introduce un număr ca asta? 699 00:29:22,060 --> 00:29:22,500 Bine. 700 00:29:22,500 --> 00:29:24,490 Deci, încă mai funcționează. 701 00:29:24,490 --> 00:29:25,880 Are nici un sens Gramatically. 702 00:29:25,880 --> 00:29:27,180 Dar cel puțin programul de lucrări. 703 00:29:27,180 --> 00:29:28,650 >> Ce e un alt caz colt? 704 00:29:28,650 --> 00:29:29,610 Ceva ce eu nu m-am așteptat. 705 00:29:29,610 --> 00:29:31,590 Da? 706 00:29:31,590 --> 00:29:31,940 Bine. 707 00:29:31,940 --> 00:29:34,950 Deci, am putea face ceva ca un număr foarte, foarte mare. 708 00:29:34,950 --> 00:29:37,270 Deci, hai sa facem asta aici. 709 00:29:37,270 --> 00:29:40,880 Lasă-mă să zoom out pentru o secundă, lasă-mă să evidențiați. 710 00:29:40,880 --> 00:29:42,250 Nu se poate copia și lipiți-vă aici. 711 00:29:42,250 --> 00:29:42,470 Bine. 712 00:29:42,470 --> 00:29:44,440 Deci, eu nu pot copia și lipi în această fereastră de terminal, Deci, vom 713 00:29:44,440 --> 00:29:46,950 doar simula. 714 00:29:46,950 --> 00:29:51,340 Lasă-mă să micșora, merge să-și încheie. 715 00:29:51,340 --> 00:29:52,700 Eu nu am de gând să fac asta pentru prea mult timp, pentru că nu va fi 716 00:29:52,700 --> 00:29:54,440 de fapt, rupe în acest program. 717 00:29:54,440 --> 00:29:55,260 Dar ar putea. 718 00:29:55,260 --> 00:29:55,830 Enter. 719 00:29:55,830 --> 00:29:56,580 Dar nu a făcut. 720 00:29:56,580 --> 00:29:57,050 Bine. 721 00:29:57,050 --> 00:29:58,440 Dar e un caz colt autentic. 722 00:29:58,440 --> 00:30:01,610 Și singurul motiv pentru care s-au comportat în mod corect, astfel încât să 723 00:30:01,610 --> 00:30:05,820 Vorbim, se datorează faptului că funcția de getString CS50 este de fapt 724 00:30:05,820 --> 00:30:08,040 conceput sub capota, așa cum vom vedea în câteva săptămâni, 725 00:30:08,040 --> 00:30:11,570 să aloce automat mai mult RAM și mai mult, mai mult și mai mult 726 00:30:11,570 --> 00:30:14,330 de memorie din sistemul de operare, atunci când își dă seama, wow, 727 00:30:14,330 --> 00:30:16,670 Chiar ai tastat în ceva destul de mult timp. 728 00:30:16,670 --> 00:30:18,500 Acum, acest lucru este un pic de o minciună albă. 729 00:30:18,500 --> 00:30:22,020 Dacă avem de fapt oprit pentru un timp destul și am scris în 730 00:30:22,020 --> 00:30:24,640 ceva de genul 5 miliarde de caractere de la tastatură 731 00:30:24,640 --> 00:30:28,060 aici, sau într-adevăr a lovit copy-paste destul de un pic, am destul de posibil 732 00:30:28,060 --> 00:30:29,730 ar putea cauza programului sa se prabuseasca. 733 00:30:29,730 --> 00:30:32,130 Doar un pic mai greu pentru a simula că, cu o finit 734 00:30:32,130 --> 00:30:33,740 suma de timp. 735 00:30:33,740 --> 00:30:37,320 >> Ce e un alt caz colt am putea încerca? 736 00:30:37,320 --> 00:30:38,730 Da? 737 00:30:38,730 --> 00:30:39,020 Da. 738 00:30:39,020 --> 00:30:40,360 Deci, de ce nu ne raspunde nimic? 739 00:30:40,360 --> 00:30:43,130 Așa că de fapt trebuie să ia o acțiune, pentru că în caz contrar 740 00:30:43,130 --> 00:30:45,060 Programul va sta acolo toată ziua clipească. 741 00:30:45,060 --> 00:30:46,860 Dar dacă am lovit Enter - 742 00:30:46,860 --> 00:30:48,780 OK, acum, încă arată bine. 743 00:30:48,780 --> 00:30:51,670 Nu ati accident, dar poate există acum o oportunitate de a 744 00:30:51,670 --> 00:30:54,190 începe punerea în aplicare a unui program mai riguros 745 00:30:54,190 --> 00:30:55,290 că de fapt verifică. 746 00:30:55,290 --> 00:30:57,640 Și dacă șirul, teză, cuvântul pe care am 747 00:30:57,640 --> 00:31:00,890 tastat în lungime are 0, ei bine, poate că ar trebui să țipi la 748 00:31:00,890 --> 00:31:03,770 utilizator, sau spune-i sau ea pentru a introduce un șir de caractere, din nou, astfel încât 749 00:31:03,770 --> 00:31:06,560 ajungem de fapt, ceea ce arata ca un comportament corect și nu 750 00:31:06,560 --> 00:31:08,570 Tocmai de supraveghere completă din partea mea. 751 00:31:08,570 --> 00:31:11,130 >> Întrebarea în spate? 752 00:31:11,130 --> 00:31:11,970 Zecimale număr. 753 00:31:11,970 --> 00:31:13,120 Deci, am putea încerca asta. 754 00:31:13,120 --> 00:31:16,840 1.10000005. 755 00:31:16,840 --> 00:31:19,470 Se pare ca asta va merge doar de fapt bine. 756 00:31:19,470 --> 00:31:21,160 Și că de fapt este de așteptat. 757 00:31:21,160 --> 00:31:24,550 Chiar dacă ne-am fi tastat acel număr nu există, sau o 758 00:31:24,550 --> 00:31:28,200 număr mai mare mai devreme, atunci când realizăm că suntem tastarea de utilizare 759 00:31:28,200 --> 00:31:31,070 de intrare și suntem folosind funcția getString, nu 760 00:31:31,070 --> 00:31:34,380 Indiferent dacă ceea ce am tastarea arata ca un număr. 761 00:31:34,380 --> 00:31:36,720 Reamintească faptul că în conformitate cu ASCII, totul pe dvs. 762 00:31:36,720 --> 00:31:39,920 Tastatura are o valoare numerică ce poate fi mapat la un 763 00:31:39,920 --> 00:31:41,480 caracter, un caracter. 764 00:31:41,480 --> 00:31:44,490 Deci, în acest caz, chiar dacă s-ar putea introduce un număr, 765 00:31:44,490 --> 00:31:48,190 calculator este de gând să mă gândesc, ca să zic așa, ca un șir - 766 00:31:48,190 --> 00:31:49,870 ceva care arată ca un număr, dar este 767 00:31:49,870 --> 00:31:51,090 de fapt, nu un număr. 768 00:31:51,090 --> 00:31:53,450 Dar asta e de fapt o segue perfectă, pentru că acum putem 769 00:31:53,450 --> 00:31:55,450 de fapt, trecerea la programe de scriere care 770 00:31:55,450 --> 00:31:56,730 utilizați alte tipuri de date. 771 00:31:56,730 --> 00:32:01,840 >> Deci, în afară de utilizarea de caractere, sau mai degrabă, pe lângă utilizarea siruri de caractere, 772 00:32:01,840 --> 00:32:04,510 seama că avem alte tipuri de date în C, precum și în 773 00:32:04,510 --> 00:32:05,230 alte limbi. 774 00:32:05,230 --> 00:32:08,480 O char, astfel cum sugerează și numele, este doar un singur caracter. 775 00:32:08,480 --> 00:32:12,150 Un float este o valoare în virgulă mobilă, și asta e doar o fantezie 776 00:32:12,150 --> 00:32:14,470 fel de a spune un număr real - ceva care are o zecimală 777 00:32:14,470 --> 00:32:17,410 punct în ea cu niste numere la stânga și / sau dreapta. 778 00:32:17,410 --> 00:32:21,370 Un int este un întreg, care este la doar un număr ca 123. 779 00:32:21,370 --> 00:32:24,170 Și acum mai interesant sunt lucruri cum ar fi dublu. 780 00:32:24,170 --> 00:32:28,540 Ce am spus-o dublă a fost ultima data? 781 00:32:28,540 --> 00:32:30,050 E 64, dreapta. 782 00:32:30,050 --> 00:32:33,560 Deci, întrucât de obicei, un fond de trezorerie este 32-bit - 783 00:32:33,560 --> 00:32:37,340 așa că este atât de mult în memorie, ea folosește 32 zerouri și cele pentru 784 00:32:37,340 --> 00:32:40,530 reprezintă valori - un dublu este literalmente două ori, ceea ce 785 00:32:40,530 --> 00:32:43,810 înseamnă că puteți reprezenta fie numere mai mari, sau 786 00:32:43,810 --> 00:32:45,810 vă pot reprezenta numere mai precise. 787 00:32:45,810 --> 00:32:48,690 Astfel încât să puteți avea mai multe numere, după punctul zecimal, dar 788 00:32:48,690 --> 00:32:51,520 cum colegii spus în filme, chiar ceva simplu 789 00:32:51,520 --> 00:32:55,360 conceptual ca 1/3 nu poate fi reprezentată printr-o precizie 790 00:32:55,360 --> 00:32:58,330 calculator, pentru ca în cele din urmă a alerga afară de biți, și 791 00:32:58,330 --> 00:33:02,510 Prin urmare, se poate face doar .33333333 de atâtea ori, la 792 00:33:02,510 --> 00:33:05,050 ce punct trebuie doar să spun că sunt de reprezentare 793 00:33:05,050 --> 00:33:08,120 spațiu, am să sun doar o zi și-l reprezintă 794 00:33:08,120 --> 00:33:10,200 oarecum imprecis place asta. 795 00:33:10,200 --> 00:33:11,110 Și o lungă lung - 796 00:33:11,110 --> 00:33:13,880 nume stupid, dar e pentru că e un tip de date cunoscut ca un 797 00:33:13,880 --> 00:33:19,350 lung în C, care întâmplător este de multe ori 32 de biți, la fel ca un 798 00:33:19,350 --> 00:33:21,670 int este de 32 de biți, dar o lungă lung este 799 00:33:21,670 --> 00:33:23,560 în general, 64 de biți. 800 00:33:23,560 --> 00:33:25,740 Deci, doar înseamnă că puteți reprezenta mai mare 801 00:33:25,740 --> 00:33:26,990 Numerele decât aceasta. 802 00:33:26,990 --> 00:33:27,410 >> Bine. 803 00:33:27,410 --> 00:33:29,390 Deci, dacă am de fapt, doresc să înceapă reprezentând lucruri, am 804 00:33:29,390 --> 00:33:31,030 s-ar putea avea nevoie de mai multe tipuri de sofisticate, și 805 00:33:31,030 --> 00:33:32,340 de aceea avem șir. 806 00:33:32,340 --> 00:33:36,450 Deci, în bibliotecă CS50, ca fișier numit cs50.h, ne-am 807 00:33:36,450 --> 00:33:41,110 de fapt, a declarat un tip de date, ca să spunem așa, numit string, 808 00:33:41,110 --> 00:33:42,710 dar șir nu există de fapt. 809 00:33:42,710 --> 00:33:44,780 Acest lucru este, din nou, una din aceste straturi ne vom coaja 810 00:33:44,780 --> 00:33:47,490 înapoi într-o săptămână sau două și aruncați-l, și de fapt 811 00:33:47,490 --> 00:33:49,640 uite sub capota la ceea ce este de fapt un șir de caractere, iar 812 00:33:49,640 --> 00:33:50,840 cum se reprezentat. 813 00:33:50,840 --> 00:33:53,520 Suntem, de asemenea, de gând să se uite la valori booleene. 814 00:33:53,520 --> 00:33:56,040 >> Deci, ceea ce a fost un bool, în contextul Scratch? 815 00:33:59,154 --> 00:34:00,300 E adevărat sau fals. 816 00:34:00,300 --> 00:34:03,900 Deci e doar o valoare care e adevărat sau fals, pornit sau oprit, 1 sau 817 00:34:03,900 --> 00:34:06,140 0, cu toate acestea doriți să vizualizați lume. 818 00:34:06,140 --> 00:34:09,739 Deci, în C, datorită biblioteca CS50, care, la rândul său, 819 00:34:09,739 --> 00:34:12,179 include o altă bibliotecă sub capota, avem 820 00:34:12,179 --> 00:34:14,909 acces la un tip de date care se numește bool, care va 821 00:34:14,909 --> 00:34:18,730 literalmente ne permit să atribuie valorile adevărate sau false pentru a 822 00:34:18,730 --> 00:34:20,219 lucrurile într-un program. 823 00:34:20,219 --> 00:34:23,880 >> Așa că hai să mergem mai departe aici și scrie un mic program care 824 00:34:23,880 --> 00:34:26,330 face ceva care implică numere în loc. 825 00:34:26,330 --> 00:34:29,840 Așa că lasă-mă să mă întorc la Appliance CS50, lasă-mă să merg mai departe și 826 00:34:29,840 --> 00:34:32,770 crea un nou fișier numit aici - 827 00:34:32,770 --> 00:34:35,460 hai să spunem ceva simplu, cum ar fi math.c. 828 00:34:38,270 --> 00:34:38,710 Bine. 829 00:34:38,710 --> 00:34:41,600 Și acum du-te până la partea de sus a programului meu, eu sunt 830 00:34:41,600 --> 00:34:42,510 de gând să faci de obicei - 831 00:34:42,510 --> 00:34:44,780 # Include , astfel încât să pot folosi 832 00:34:44,780 --> 00:34:46,860 printf, int main (void) - 833 00:34:46,860 --> 00:34:49,270 ne vom întoarce la, în cele din urmă, ceea ce înseamnă int 834 00:34:49,270 --> 00:34:52,389 aici, ceea ce înseamnă vid aici, dar pentru acum, știu doar că 835 00:34:52,389 --> 00:34:54,270 va trebui să înceapă programe de acest gen. 836 00:34:54,270 --> 00:34:56,280 Acum am de gând să merg mai departe și spun ceva un pic 837 00:34:56,280 --> 00:35:02,110 diferit - printf ("Dă-mi un număr de:" 838 00:35:02,110 --> 00:35:03,570 );. 839 00:35:03,570 --> 00:35:09,220 Apoi, am de gând să fac int n = GetInt, deoarece 840 00:35:09,220 --> 00:35:12,770 rotații faptul GetInt este o altă funcție în bibliotecă CS50 841 00:35:12,770 --> 00:35:14,060 în afară de getString. 842 00:35:14,060 --> 00:35:17,340 Și acum am de gând să fac ceva stupid, cum ar fi "mulțumesc 843 00:35:17,340 --> 00:35:25,760 pentru d%, "pentru intreg zecimal, iar apoi n virgulă, și 844 00:35:25,760 --> 00:35:26,620 atunci intoarce 0. 845 00:35:26,620 --> 00:35:28,940 Deci, din nou, returnați valoarea 0 nu are nimic de-a face cu numărul eu sunt 846 00:35:28,940 --> 00:35:30,080 cere utilizatorului pentru. 847 00:35:30,080 --> 00:35:33,620 Doar semnifică la sfârșitul că toți, probabil, este bine. 848 00:35:33,620 --> 00:35:36,290 >> Așa că lasă-mă să merg în jos la fereastra terminalul meu aici. 849 00:35:36,290 --> 00:35:39,590 Lasă-mă să tastați fac matematica, introduceți. 850 00:35:39,590 --> 00:35:41,360 Și ceva e în neregulă. 851 00:35:41,360 --> 00:35:44,620 Asigurați-matematica nu au de lucru. 852 00:35:44,620 --> 00:35:46,170 Iată prima mesaje de eroare noastre. 853 00:35:46,170 --> 00:35:46,570 De ce? 854 00:35:46,570 --> 00:35:49,720 Un pic de criptic, dar - 855 00:35:49,720 --> 00:35:50,060 Da. 856 00:35:50,060 --> 00:35:51,240 Deci, cs50.h. 857 00:35:51,240 --> 00:35:53,900 Deci, din nou, mai ales la început, veți scrie prima dvs. 858 00:35:53,900 --> 00:35:56,590 Programul pentru PSET 1 în secțiunile, în ore de birou, precum și 859 00:35:56,590 --> 00:35:59,050 sincer, acesta va fi copleșitoare uneori, ceea ce aceste lucruri 860 00:35:59,050 --> 00:36:00,000 sunt de fapt spun. 861 00:36:00,000 --> 00:36:01,890 Dar vă veți da seama foarte repede au început să scadă 862 00:36:01,890 --> 00:36:06,120 în compartimente prin care aceasta înseamnă că ați lăsat pe una 863 00:36:06,120 --> 00:36:08,290 a # include în partea de sus a fișierului. 864 00:36:08,290 --> 00:36:10,960 Și zăngănit, compilator, te informarea de acest lucru, 865 00:36:10,960 --> 00:36:14,090 spunând, mai degrabă fancifully, declarația implicită a 866 00:36:14,090 --> 00:36:15,990 GetInt funcție este nevalid. 867 00:36:15,990 --> 00:36:16,310 >> Bine. 868 00:36:16,310 --> 00:36:17,520 Deci, ce înseamnă asta? 869 00:36:17,520 --> 00:36:22,080 Aceasta înseamnă doar v-ați implicit declarat în GetInt 870 00:36:22,080 --> 00:36:24,850 sensul că nu ați mod explicit declarate. 871 00:36:24,850 --> 00:36:27,300 Pentru a declara în mod explicit int, va trebui să învețe 872 00:36:27,300 --> 00:36:28,740 Zăngănit că ea există. 873 00:36:28,740 --> 00:36:32,020 Și soluție foarte simplă pentru că este să-l învețe de 874 00:36:32,020 --> 00:36:34,780 inclusiv acest fișier alta, cs50.h, la 875 00:36:34,780 --> 00:36:35,850 partea de sus a fișierului. 876 00:36:35,850 --> 00:36:40,380 Pentru că literalmente, ceea ce nu este: # include ea spune zăngănit 877 00:36:40,380 --> 00:36:44,030 destul de mult pentru a merge găsi fișierul numit cs50.h, copie, 878 00:36:44,030 --> 00:36:48,150 inserați-l în mod automat în partea de sus a programului meu pentru mine, 879 00:36:48,150 --> 00:36:50,850 și de a converti apoi codul sursă pentru zero și unu. 880 00:36:50,850 --> 00:36:52,850 Dar care ar fi, evident, foarte obositor dacă noi, oamenii, au avut 881 00:36:52,850 --> 00:36:55,370 pentru a merge copierea și lipirea aceste fișiere mari tot timpul, 882 00:36:55,370 --> 00:36:58,540 astfel: # include doar face tot ceea ce în mod automat, fără 883 00:36:58,540 --> 00:37:01,550 tulburarea codul meu cu biblioteca altcuiva. 884 00:37:01,550 --> 00:37:06,370 Și o bibliotecă este doar un alt dosar cuprinzând funcții și 885 00:37:06,370 --> 00:37:08,340 alte lucruri pe care altcineva a scris, că suntem 886 00:37:08,340 --> 00:37:10,270 pârghie de dragul nostru. 887 00:37:10,270 --> 00:37:10,580 >> Bine. 888 00:37:10,580 --> 00:37:11,200 Să încercăm din nou. 889 00:37:11,200 --> 00:37:12,250 Asigurați-matematica. 890 00:37:12,250 --> 00:37:13,120 Enter. 891 00:37:13,120 --> 00:37:13,530 Bine. 892 00:37:13,530 --> 00:37:14,880 Așa că pare să fi funcționat. 893 00:37:14,880 --> 00:37:18,330 Așa că lasă-mă să ruleze, acum, matematică;. / Matematică. 894 00:37:18,330 --> 00:37:21,100 Introduceți îmi dă un număr, 123. 895 00:37:21,100 --> 00:37:22,620 Multumesc pentru 123. 896 00:37:22,620 --> 00:37:24,490 Acum, haideți să încercăm un alt caz colt. 897 00:37:24,490 --> 00:37:26,530 Un șir este destul de generos, deoarece o 898 00:37:26,530 --> 00:37:27,620 șir poate fi orice. 899 00:37:27,620 --> 00:37:28,910 Poate arata ca numere, arata ca 900 00:37:28,910 --> 00:37:30,600 caractere, arata ca cuvintele. 901 00:37:30,600 --> 00:37:31,900 Dar un int este un int. 902 00:37:31,900 --> 00:37:34,370 Deci, acum, dacă eu sunt utilizator de dificil, iar ea spune "Dă-mi 903 00:37:34,370 --> 00:37:38,730 un număr, "ce dacă am încerca să fac ceva de genul 0.1? 904 00:37:38,730 --> 00:37:41,510 Ei bine, asta e un număr, și este în concordanță cu 905 00:37:41,510 --> 00:37:44,180 gramatica am folosit aici, dar sub capota, eu sunt de 906 00:37:44,180 --> 00:37:45,610 Desigur folosind funcția GetInt. 907 00:37:45,610 --> 00:37:46,610 >> Deci, haideți să vedem ce se întâmplă. 908 00:37:46,610 --> 00:37:48,250 Introduceți, încercați din nou. 909 00:37:48,250 --> 00:37:48,560 Bine. 910 00:37:48,560 --> 00:37:50,570 Permiteți-mi să fie dificil și doar a lovit din nou Enter. 911 00:37:50,570 --> 00:37:51,700 Introduceți, Enter. 912 00:37:51,700 --> 00:37:53,890 Deci, acum se pare că GetInt este un pic mai mult 913 00:37:53,890 --> 00:37:55,240 puternică decât getString. 914 00:37:55,240 --> 00:37:58,540 Noi, personalul, pus în aplicare în așa fel încât, dacă observăm 915 00:37:58,540 --> 00:38:02,100 nu ne-au dat un int - si un int este un număr zecimal 916 00:38:02,100 --> 00:38:04,785 zerouri, care conțin cele două câte două, trei, patru labe,, cinciari, șesari, 917 00:38:04,785 --> 00:38:05,540 șeptari, optari, sau nouari. 918 00:38:05,540 --> 00:38:06,310 Și asta e tot. 919 00:38:06,310 --> 00:38:08,810 Nu există puncte zecimale, fără caractere, fără semne de punctuație. 920 00:38:08,810 --> 00:38:10,390 Se pare că avem de a coopera. 921 00:38:10,390 --> 00:38:13,680 Așa că lasă-mă să încerc patru, cinci, șase, și care ma primeste prin intermediul. 922 00:38:13,680 --> 00:38:16,760 Deci, într-adevăr, să fie anal aici, ar trebui să spun, probabil, "Dă-mi 923 00:38:16,760 --> 00:38:20,310 un întreg ", în scopul de a transmite utilizatorului 924 00:38:20,310 --> 00:38:22,620 exact ceea ce am de gând. 925 00:38:22,620 --> 00:38:24,090 >> Acum, haideți să gândim sub capota. 926 00:38:24,090 --> 00:38:27,930 Noi nu te vom uita la modul în care este pusă în aplicare cs50.h astăzi, 927 00:38:27,930 --> 00:38:29,080 acea bibliotecă. 928 00:38:29,080 --> 00:38:33,600 Dar, în cazul în care tot spune reîncercare, retry, retry, ce programare 929 00:38:33,600 --> 00:38:36,970 construi eu probabil folosind sub capota pentru a 930 00:38:36,970 --> 00:38:39,000 pună în aplicare asta? 931 00:38:39,000 --> 00:38:39,980 Deci, doar o buclă, nu? 932 00:38:39,980 --> 00:38:41,930 Una dintre cele mai simple idei pe care am văzut-o pe Scratch. 933 00:38:41,930 --> 00:38:45,050 Construi totdeauna, Repetare construi. 934 00:38:45,050 --> 00:38:47,320 Probabil, în acest program, sub capota, chiar 935 00:38:47,320 --> 00:38:49,470 deși este scris in C si nu zero, se face 936 00:38:49,470 --> 00:38:54,300 ceva numit echivalent pentru totdeauna, dacă utilizatorul nu are 937 00:38:54,300 --> 00:38:58,710 tastat într-un întreg, să zicem reîncercare, retry, retry, retry, deci 938 00:38:58,710 --> 00:39:01,220 apoi în cele din urmă atunci când vom obține un număr întreg, atunci 939 00:39:01,220 --> 00:39:02,970 izbucni din bucla. 940 00:39:02,970 --> 00:39:05,610 >> Deci, ce alte funcții putem folosi aici, în biblioteca lui CS50? 941 00:39:05,610 --> 00:39:07,880 Ei bine, un fel de cele evidente, cel puțin pe 942 00:39:07,880 --> 00:39:09,570 tipurile de date pe care le cunoaștem acum există. 943 00:39:09,570 --> 00:39:12,900 Am implementat getString, GetInt, dar de-a lungul 944 00:39:12,900 --> 00:39:15,680 primele săptămâni ale termenului, puteți utiliza, de asemenea, și GetFloat 945 00:39:15,680 --> 00:39:18,870 GetDouble și GetLongLong, în scopul de a obține exact 946 00:39:18,870 --> 00:39:20,030 tipurile de date pe care doriți. 947 00:39:20,030 --> 00:39:24,030 Deoarece detaliu cheie aici este faptul că, spre deosebire de unele limbi, 948 00:39:24,030 --> 00:39:26,630 cum ar fi Python și Ruby, în cazul în care nu trebuie neapărat să 949 00:39:26,630 --> 00:39:29,730 declare tipul de date al unei variabile - 950 00:39:29,730 --> 00:39:32,390 nu trebuie să-i spun ce fel de calculator chestii 951 00:39:32,390 --> 00:39:34,000 ai de gând să pună în variabila - 952 00:39:34,000 --> 00:39:36,640 în C, trebuie să fie vreodată atât de precis. 953 00:39:36,640 --> 00:39:40,060 Deci, dacă doriți o variabilă numită n, o bucată de stocare 954 00:39:40,060 --> 00:39:42,900 că, în acest caz, se întâmplă să fie 32 de biți, prin convenție, te 955 00:39:42,900 --> 00:39:45,660 Trebuie să-i spun de calculator ce acești biți sunt 956 00:39:45,660 --> 00:39:47,840 de gând să stocați un număr - 957 00:39:47,840 --> 00:39:50,630 nu un personaj, nu un șir de caractere, nu un fond de trezorerie. 958 00:39:50,630 --> 00:39:52,620 Și aceasta abordează problema în mod eficient ne 959 00:39:52,620 --> 00:39:53,760 a fugit în săptămâna trecută. 960 00:39:53,760 --> 00:39:57,050 Daca folosim zerouri și numere pentru a reprezenta cele nu doar 961 00:39:57,050 --> 00:40:00,770 Dar, ca și numerele B si C, cum în lume este un 962 00:40:00,770 --> 00:40:03,460 calculator de gând să știți că acest model de biți de fapt 963 00:40:03,460 --> 00:40:07,650 reprezintă numărul de 65 de ani, spre deosebire de reprezentare a 964 00:40:07,650 --> 00:40:09,860 O scrisoare, care coincidență, în conformitate cu 965 00:40:09,860 --> 00:40:13,440 ASCII, amintesc, era echivalent cu 65 de ani? 966 00:40:13,440 --> 00:40:16,550 >> Deci, aceste tipuri de date furnizează context, la calculator, așa 967 00:40:16,550 --> 00:40:18,810 că nu știe dacă aceste biți ar trebui să fie interpretată ca o 968 00:40:18,810 --> 00:40:23,660 int sau ca un șir de caractere. 969 00:40:23,660 --> 00:40:26,500 Orice întrebări, apoi, pe asta? 970 00:40:26,500 --> 00:40:28,149 Da? 971 00:40:34,780 --> 00:40:35,270 David J. MALAN: Bună întrebare. 972 00:40:35,270 --> 00:40:39,140 Dacă luăm în stdio.h, vom salva fișierul - 973 00:40:39,140 --> 00:40:44,360 lasă-mă să merg în jos la fereastră terminal și rulați make matematica, zoom 974 00:40:44,360 --> 00:40:45,530 și introduceți - 975 00:40:45,530 --> 00:40:47,700 acum am o eroare diferit, pentru că eu sunt, implicit, 976 00:40:47,700 --> 00:40:49,650 declarare a ceea ce funcționează acum? 977 00:40:49,650 --> 00:40:50,700 Printf. 978 00:40:50,700 --> 00:40:52,970 Deci, acum am creat o nouă problemă, a cărei soluție este 979 00:40:52,970 --> 00:40:53,890 în esență același. 980 00:40:53,890 --> 00:40:55,365 Am nevoie pentru a pune-o înapoi. 981 00:40:55,365 --> 00:40:56,615 PUBLICUL: [inaudibil] 982 00:41:03,534 --> 00:41:04,030 David J. MALAN: Oh. 983 00:41:04,030 --> 00:41:04,850 Deci, dacă am scoate - 984 00:41:04,850 --> 00:41:05,360 Bine, da. 985 00:41:05,360 --> 00:41:08,960 Deci, dacă am elimina includerea I / O standard bibliotecii sus 986 00:41:08,960 --> 00:41:12,020 aici, și apoi spui că dacă aș scăpa de printf, pentru a primi 987 00:41:12,020 --> 00:41:13,450 scăpa de printf? 988 00:41:13,450 --> 00:41:13,810 Da. 989 00:41:13,810 --> 00:41:18,450 Acest lucru ar trebui să funcționeze, pentru că eu nu mai sunt folosind orice - Ups. 990 00:41:18,450 --> 00:41:20,110 Credeți mint pur și simplu? 991 00:41:20,110 --> 00:41:21,650 Oh, bine. 992 00:41:21,650 --> 00:41:25,640 Acest lucru nu va funcționa, din cauza unei erori de noi ne-am introdus. 993 00:41:25,640 --> 00:41:28,390 Și aceasta este un pic mai mult de auto-explicativ. 994 00:41:28,390 --> 00:41:29,440 >> Care e problema? 995 00:41:29,440 --> 00:41:30,680 Neutilizate n variabile. 996 00:41:30,680 --> 00:41:34,040 Deci, această eroare este rezultatul faptului că am configurat 997 00:41:34,040 --> 00:41:36,640 aparatul să fie deosebit de pedant, să țipe într-adevăr la 998 00:41:36,640 --> 00:41:39,060 multumim pentru fiecare greșeală este posibil, chiar dacă e un fel de 999 00:41:39,060 --> 00:41:41,950 o greșeală, non-fatale ca aceasta - este într-adevăr o astfel de mare 1000 00:41:41,950 --> 00:41:44,820 face că am alocat un int, a pus un număr în ea, și apoi 1001 00:41:44,820 --> 00:41:46,030 doar nu a făcut nimic cu ea? 1002 00:41:46,030 --> 00:41:47,020 Deci funcțional, nr. 1003 00:41:47,020 --> 00:41:50,410 Asta nu se va rupe programului. 1004 00:41:50,410 --> 00:41:51,490 E doar un fel de prost, nu? 1005 00:41:51,490 --> 00:41:54,220 Nu există nici o valoare pentru care au cerut acest număr, stocate 1006 00:41:54,220 --> 00:41:56,370 într-o variabilă, dacă nu sunteți niciodată de gând să faci nimic 1007 00:41:56,370 --> 00:41:58,000 cu el, dacă acesta imprima sau salva. 1008 00:41:58,000 --> 00:42:00,270 Deci, în acest caz, este zăngănit recunoaște la fel de mult, și 1009 00:42:00,270 --> 00:42:02,010 se spune n variabile neutilizate. 1010 00:42:02,010 --> 00:42:05,380 >> Astfel încât să putem rezolva acest lucru, dacă ne dorim cu adevărat. 1011 00:42:05,380 --> 00:42:07,250 Dar, din nou, acest lucru nu este de programare bine acum. 1012 00:42:07,250 --> 00:42:09,310 Asa ca am putut face acest lucru - 1013 00:42:09,310 --> 00:42:12,060 du-te aici, lasă-mă să goli ecranul, fac matematica. 1014 00:42:12,060 --> 00:42:13,090 Care funcționează. 1015 00:42:13,090 --> 00:42:18,110 Acum, eu pot rula programul meu de matematica, ia de intrare - 1016 00:42:18,110 --> 00:42:18,700 Ei bine, asta a fost rău. 1017 00:42:18,700 --> 00:42:23,450 Ia de intrare, și că este tot ce face, în acest caz. 1018 00:42:23,450 --> 00:42:25,220 >> Deci, de fapt, să încercăm un caz alt colț pe care le 1019 00:42:25,220 --> 00:42:26,300 Nu m-am gândit de mai devreme. 1020 00:42:26,300 --> 00:42:28,220 În acest caz - aici, sa ne intoarcem la una care e un 1021 00:42:28,220 --> 00:42:29,500 puțin mai user-friendly. 1022 00:42:29,500 --> 00:42:32,580 Lasă-mă să mă întorc aici și rulați make matematica din nou. 1023 00:42:32,580 --> 00:42:34,190 Hopa, ce am gresit? 1024 00:42:34,190 --> 00:42:35,400 Trebuie să se rostogolească înapoi în continuare. 1025 00:42:35,400 --> 00:42:36,390 Bine. 1026 00:42:36,390 --> 00:42:38,490 Acum ne-am întors în starea inițială, în cazul în care toate 1027 00:42:38,490 --> 00:42:39,990 este, sperăm, bine. 1028 00:42:39,990 --> 00:42:43,360 Și acum, dacă am alerga matematica, 123 pare să funcționeze. 1029 00:42:43,360 --> 00:42:46,010 Dar acest lucru nu este cu adevărat o dovadă efectivă, doar pentru a spune 1030 00:42:46,010 --> 00:42:47,930 ok, care funcționează. 1031 00:42:47,930 --> 00:42:49,120 789, care funcționează. 1032 00:42:49,120 --> 00:42:50,100 E timpul să trimiteți. 1033 00:42:50,100 --> 00:42:51,870 Pentru că nu e colț alte cazuri aici. 1034 00:42:51,870 --> 00:42:55,040 Un șir nu a dat într-adevăr ne-necazuri prin tastarea într-un 1035 00:42:55,040 --> 00:42:56,510 mulțime de caractere. 1036 00:42:56,510 --> 00:42:59,580 Dar ce se întâmplă dacă am tip în asta? 1037 00:42:59,580 --> 00:43:04,850 Lovirea numărul 1 un întreg lot, mulțime aici - 1038 00:43:04,850 --> 00:43:06,300 regulă, se face un pic plictisitor, așa că am de gând să 1039 00:43:06,300 --> 00:43:10,040 opri aici, și am de gând să lovi Enter. 1040 00:43:10,040 --> 00:43:11,290 >> Ce naiba sa întâmplat? 1041 00:43:14,110 --> 00:43:17,680 Deci, acest lucru poate fi explicat de fapt. 1042 00:43:17,680 --> 00:43:18,920 Deci, l-am luați-o ca un binar? 1043 00:43:18,920 --> 00:43:21,130 Un gând bun, dar nu, nu e faptul că ea a luat 1044 00:43:21,130 --> 00:43:22,815 ca un binar, deoarece, într-adevăr, faptul că a fost doar un fel de 1045 00:43:22,815 --> 00:43:23,080 coincidență. 1046 00:43:23,080 --> 00:43:23,930 Putem face asta din nou. 1047 00:43:23,930 --> 00:43:26,530 Deci nu e nici 2 în sistem binar, asta e 1048 00:43:26,530 --> 00:43:27,420 oricum, probabil, suficient. 1049 00:43:27,420 --> 00:43:28,780 Enter. 1050 00:43:28,780 --> 00:43:30,140 Așa că nu a fost problema. 1051 00:43:30,140 --> 00:43:31,390 Ce altceva? 1052 00:43:34,650 --> 00:43:35,400 Exact. 1053 00:43:35,400 --> 00:43:37,830 >> Deci, cred că înapoi la ceea ce este de fapt un int. 1054 00:43:37,830 --> 00:43:40,970 E 32 de biți, care sunt interpretate în mod colectiv 1055 00:43:40,970 --> 00:43:42,090 ca număr. 1056 00:43:42,090 --> 00:43:44,730 Dacă aveți 32 de biți, ceea ce înseamnă fiecare dintre biți pot fi 1057 00:43:44,730 --> 00:43:46,690 un 0 sau un. 1, 0 sau 1 1058 00:43:46,690 --> 00:43:49,090 Deci asta înseamnă că e două posibilități pentru acest bit, 1059 00:43:49,090 --> 00:43:51,140 două posibilități pentru aceasta, două posibilități pentru aceasta 1060 00:43:51,140 --> 00:43:52,570 bit - așa că e de 2 ori de 2 ori - 1061 00:43:52,570 --> 00:43:55,480 asa ca asta e 2 la puterea 32 este numărul total de 1062 00:43:55,480 --> 00:43:58,960 permutări de zero și unu, dacă aveți 32 1063 00:43:58,960 --> 00:44:01,400 substituenți, sau cele zerouri, în fața ta. 1064 00:44:01,400 --> 00:44:04,250 Deci, dacă am 2 la 32, matematic, asta e ceea ce? 1065 00:44:07,080 --> 00:44:07,840 Deci, este foarte mult. 1066 00:44:07,840 --> 00:44:09,910 E 4 miliarde dolari, da sau de a lua. 1067 00:44:09,910 --> 00:44:13,510 Și 4 miliarde nu pare a fi ceea ce a fost tipărită aici. 1068 00:44:13,510 --> 00:44:16,290 De fapt, acest lucru pare mai aproape de la 2 miliarde de euro. 1069 00:44:16,290 --> 00:44:17,970 Dar aceasta nu este o coincidență. 1070 00:44:17,970 --> 00:44:21,590 Faptul că computerul a interpretat greșit numărul meu imens, 1071 00:44:21,590 --> 00:44:24,260 mea secvență uriașă de unu și apoi secventa mea foarte mare de câte doi, 1072 00:44:24,260 --> 00:44:26,880 ca aproximativ 2 miliarde de euro, se explică cum? 1073 00:44:30,250 --> 00:44:32,180 E un capac pe int. 1074 00:44:32,180 --> 00:44:34,970 Există o siguranță de o valoare maximă pe care îl poate reprezenta. 1075 00:44:34,970 --> 00:44:36,370 Dar e de obicei 4 miliarde de euro, nu? 1076 00:44:36,370 --> 00:44:39,100 Dacă 2 la 32 este de aproximativ 4 miliarde de euro, care pare ca 1077 00:44:39,100 --> 00:44:40,350 asta e cel mai mare număr. 1078 00:44:42,420 --> 00:44:45,240 Deci, nu un rest, dar un gand bun. 1079 00:44:45,240 --> 00:44:46,340 Numere negative. 1080 00:44:46,340 --> 00:44:49,570 Deci, dacă aveți 4 miliarde lucruri posibile poți 1081 00:44:49,570 --> 00:44:52,970 reprezintă cu aceste permutări diferite de 32 0s și 1082 00:44:52,970 --> 00:44:55,600 1s, ei bine, este evident motivul pentru care noi, oamenii, ar putea dori să 1083 00:44:55,600 --> 00:44:57,110 reprezintă nu doar numere întregi pozitive 1084 00:44:57,110 --> 00:44:58,240 dar întregi negative. 1085 00:44:58,240 --> 00:45:00,410 Și într-adevăr, asta e presupunerea că C face. 1086 00:45:00,410 --> 00:45:03,550 Deci, cu 32 de biți, puteți reprezenta aproximativ 2 negativ 1087 00:45:03,550 --> 00:45:06,630 miliarde de euro tot drumul până la pozitivă 2 miliarde de euro. 1088 00:45:06,630 --> 00:45:08,750 Și astfel, în acest caz, ceea ce sunteți cu adevărat vedem este doar 1089 00:45:08,750 --> 00:45:13,600 franjuri de capacitatea noastră de întreg, și avem, astfel încât 1090 00:45:13,600 --> 00:45:15,860 de a vorbi, au umplut un număr întreg. 1091 00:45:15,860 --> 00:45:19,180 Am încercat să se ghiftui mai multi biti în ea decât poate potrivi de fapt. 1092 00:45:19,180 --> 00:45:22,960 Deci, rezultatul final este, în esență, avem toate cele 1 biți. 1093 00:45:22,960 --> 00:45:25,280 Ne-am intors tot de biți noastre pe, am încercat să reprezinte 1094 00:45:25,280 --> 00:45:27,630 cel mai mare număr posibil, dar nu e clar de aproape 1095 00:45:27,630 --> 00:45:30,960 suficient de mare pentru a reprezenta cele două lucruri tocmai am tastate inch 1096 00:45:30,960 --> 00:45:31,730 Da? 1097 00:45:31,730 --> 00:45:32,980 PUBLICUL: [inaudibil] 1098 00:45:37,230 --> 00:45:37,830 >> David J. MALAN: Bună întrebare. 1099 00:45:37,830 --> 00:45:40,080 De ce nu putem pur și simplu că reprezenta negativ 1100 00:45:40,080 --> 00:45:41,500 semneze ca doar un personaj? 1101 00:45:41,500 --> 00:45:44,200 Așa că am absolut putut, și am putea salva atunci 1102 00:45:44,200 --> 00:45:45,470 o suplimentare de biți. 1103 00:45:45,470 --> 00:45:49,100 Dar tu ești încă va trebui să reprezinte acea linie, și 1104 00:45:49,100 --> 00:45:50,700 care va costa cel puțin ceva, 1105 00:45:50,700 --> 00:45:52,220 probabil un pic. 1106 00:45:52,220 --> 00:45:55,610 Deci da, am putea avea 32 de biți utilizate pentru numărul nostru, dar acum 1107 00:45:55,610 --> 00:45:57,610 avem nevoie de un alt biți folosit pentru bord nostru 1108 00:45:57,610 --> 00:45:58,810 simbol, semnul minus. 1109 00:45:58,810 --> 00:46:01,470 Deci, acum avem 33 de biți, valori pe care le-ar putea face, dar e 1110 00:46:01,470 --> 00:46:02,570 Pur și simplu nu se face felul. 1111 00:46:02,570 --> 00:46:05,140 Am făcut-o hotărâre ani în urmă apel, 32 biți este un fel de 1112 00:46:05,140 --> 00:46:06,170 unitate de măsură aici. 1113 00:46:06,170 --> 00:46:08,120 Deci, vom folosi una dintre aceste biți în mod eficient la 1114 00:46:08,120 --> 00:46:12,950 reprezintă negativitate, și 31 biți pentru a reprezenta numărul. 1115 00:46:12,950 --> 00:46:15,550 Alte întrebări? 1116 00:46:15,550 --> 00:46:15,670 Bine. 1117 00:46:15,670 --> 00:46:16,030 Asta e mult. 1118 00:46:16,030 --> 00:46:17,930 De ce nu mergem mai departe și să ia noastră de cinci minute pauză aici? 1119 00:46:23,580 --> 00:46:24,270 >> Bine. 1120 00:46:24,270 --> 00:46:31,250 Deci, din nou, nu de a sublinia exagerat aplicațiile matematice 1121 00:46:31,250 --> 00:46:33,840 de programare, hai să smulgă chiar lângă acest exemplu, o 1122 00:46:33,840 --> 00:46:36,590 înainte de a ne muta în alte constructe, doar pentru că 1123 00:46:36,590 --> 00:46:39,430 va ilustra câteva puncte comune obstacole pe unele dintre 1124 00:46:39,430 --> 00:46:41,520 elementele de bază atunci când vine vorba de programe de scris. 1125 00:46:41,520 --> 00:46:44,360 În acest caz, face expresii aritmetice, care au unele 1126 00:46:44,360 --> 00:46:48,010 relevanță interesant de sintaxa. 1127 00:46:48,010 --> 00:46:50,430 >> Deci, aceasta este doar o formulă cu care putem converti 1128 00:46:50,430 --> 00:46:52,690 temperaturi de la Fahrenheit în grade Celsius. 1129 00:46:52,690 --> 00:46:54,600 Dacă nu-mi aduc aminte, aceasta este doar formula. 1130 00:46:54,600 --> 00:46:58,870 Deci, dacă am conectați în grade Fahrenheit valoare de 32 de grade, ceea ce este 1131 00:46:58,870 --> 00:47:02,850 congelare, care va fi de 32 la minus 32 este 0, și, într-adevăr, 1132 00:47:02,850 --> 00:47:05,130 0 în Celsius este de asemenea congelare. 1133 00:47:05,130 --> 00:47:08,210 Deci, bun-simț rapidă verifica acolo - asta e formula familiar. 1134 00:47:08,210 --> 00:47:10,880 Lasă-mă să merg pe la aparat, însă, și începe 1135 00:47:10,880 --> 00:47:13,920 scrie un program numit, cum ar fi, f2c; "Fahrenheit la 1136 00:47:13,920 --> 00:47:15,920 Celsius dot C ". 1137 00:47:15,920 --> 00:47:18,930 Și până la partea de sus aici, am de gând încep cu # include 1138 00:47:18,930 --> 00:47:22,190 stdio.h, și am de gând să fac int main (void), si 1139 00:47:22,190 --> 00:47:24,680 din nou, ne vom întoarce în viitor, la ceea ce înseamnă int 1140 00:47:24,680 --> 00:47:26,820 acolo și ce înseamnă că nu există vid. 1141 00:47:26,820 --> 00:47:28,770 Și acum să-mi merge mai departe și să implementeze un program care 1142 00:47:28,770 --> 00:47:31,170 în esență, face acest lucru de conversie pentru noi. 1143 00:47:31,170 --> 00:47:36,830 >> Deci printf, să zicem, temperatura în grade Fahrenheit. 1144 00:47:36,830 --> 00:47:40,140 Și atunci să-mi merge mai departe și să obțină valoare din ghidul. 1145 00:47:40,140 --> 00:47:43,120 Ce fel de valoare ar trebui să I a lua de la utilizatorul daca vreau 1146 00:47:43,120 --> 00:47:45,620 le să-mi dea o temperatură în grade Fahrenheit? 1147 00:47:45,620 --> 00:47:48,090 Da? 1148 00:47:48,090 --> 00:47:50,090 Ce ti-ar propune? 1149 00:47:50,090 --> 00:47:50,410 Da. 1150 00:47:50,410 --> 00:47:51,960 Deci, float se simte destul de rezonabil. 1151 00:47:51,960 --> 00:47:53,950 Avem, din nou, la doar câteva opțiuni care 1152 00:47:53,950 --> 00:47:55,310 am văzut până acum. 1153 00:47:55,310 --> 00:48:00,100 Avem lucruri, cum ar fi char, float double,, int, lung lung, 1154 00:48:00,100 --> 00:48:01,150 bool, string. 1155 00:48:01,150 --> 00:48:03,510 Deci acestea, float se simte destul de rezonabil. 1156 00:48:03,510 --> 00:48:06,340 Am putea folosi un drept dublu, pentru că, dacă vrem cu adevărat să 1157 00:48:06,340 --> 00:48:07,580 reprezintă temperatura unui om - 1158 00:48:07,580 --> 00:48:10,730 98.60000 - 1159 00:48:10,730 --> 00:48:12,990 am putea folosi pe 64 de biți pentru a face acest lucru, dar se simte ca 1160 00:48:12,990 --> 00:48:14,200 nejustificată pentru temperatura. 1161 00:48:14,200 --> 00:48:16,380 Așa că hai să mergem cu flotor. 1162 00:48:16,380 --> 00:48:18,100 Acum am nevoie de o variabilă. 1163 00:48:18,100 --> 00:48:20,500 Doar pentru a menține lucrurile simple, am de gând să-l sun f, dar am 1164 00:48:20,500 --> 00:48:23,370 ar putea numi la fel de corect, temperatura, 1165 00:48:23,370 --> 00:48:24,600 dar, fie este bine. 1166 00:48:24,600 --> 00:48:27,610 Deci, float f = GetFloat. 1167 00:48:27,610 --> 00:48:30,220 De îndată ce am acum au decis să utilizeze GetFloat, deși, am 1168 00:48:30,220 --> 00:48:33,340 trebuie să facă o corecție. 1169 00:48:33,340 --> 00:48:33,720 Da. 1170 00:48:33,720 --> 00:48:37,460 Deci, avem nevoie de a include # , în caz contrar compilatorul este 1171 00:48:37,460 --> 00:48:39,000 de gând să țipi la noi. 1172 00:48:39,000 --> 00:48:41,720 Acum, că am un flotor, lasă-mă să mergeți mai departe și de a face 1173 00:48:41,720 --> 00:48:42,460 de conversie. 1174 00:48:42,460 --> 00:48:44,980 >> Deci în primul rând, permiteți-mi să obține, de asemenea în obiceiul de aici 1175 00:48:44,980 --> 00:48:46,310 comentând codul meu. 1176 00:48:46,310 --> 00:48:49,820 Deci, din nou, un comentariu este doar o notație a omului care este 1177 00:48:49,820 --> 00:48:52,600 nu fac parte din programul în sine, ci unul, vă ajută să 1178 00:48:52,600 --> 00:48:55,010 înțeleg ce ai făcut în dimineața următoare, sau următoare 1179 00:48:55,010 --> 00:48:57,570 luni, ajută colegii dumneavoastră de predare înțeleg ce-ai făcut 1180 00:48:57,570 --> 00:48:59,230 sau ceea ce ați intenționat să facă, așa că e 1181 00:48:59,230 --> 00:49:00,950 în general, foarte bune practici. 1182 00:49:00,950 --> 00:49:02,940 La fiecare câteva linii de cod, scrie un comentariu la 1183 00:49:02,940 --> 00:49:04,490 te sau coleg. 1184 00:49:04,490 --> 00:49:08,460 Deci, aici, am de gând să spun, "Cere de utilizare pentru temperatura." 1185 00:49:08,460 --> 00:49:10,890 Nu trebuie să fie o propoziție completă, doar o frază scurtă. 1186 00:49:10,890 --> 00:49:14,270 Dar ideea din spatele comentând în C este faptul că fiecare dintre dvs. 1187 00:49:14,270 --> 00:49:17,980 comentariile ar trebui sa imputernici - sau, să zicem, un TF sau unui coleg - 1188 00:49:17,980 --> 00:49:21,290 să răsfoiesc programul dvs. și să știu exact ce face, prin faptul că nu 1189 00:49:21,290 --> 00:49:24,650 atât de mult citirea codului, dar citind comentariile, care 1190 00:49:24,650 --> 00:49:26,220 ar trebui să fie succint și clar. 1191 00:49:26,220 --> 00:49:29,030 În regulă, asa ca lasa-ma acum merge mai departe și spune, "Conversia 1192 00:49:29,030 --> 00:49:32,660 Fahrenheit în grade Celsius. "Așa că am de gând să merg mai departe și de a face, 1193 00:49:32,660 --> 00:49:34,340 să zicem, float c. 1194 00:49:34,340 --> 00:49:36,610 Vom păstra grade Celsius ca o valoare în virgulă mobilă. 1195 00:49:36,610 --> 00:49:37,630 >> Și lasă-mă să iau o lovitură de cuțit la asta. 1196 00:49:37,630 --> 00:49:40,350 Formula este, din nou, aici. 1197 00:49:40,350 --> 00:49:45,510 Ca 5/9 ori F minus 32. 1198 00:49:45,510 --> 00:49:46,360 Deci, hai sa facem asta. 1199 00:49:46,360 --> 00:49:50,450 Deci, 5 împărțit la 9, minus - 1200 00:49:50,450 --> 00:49:52,330 Ne pare rău, am incurcat deja. 1201 00:49:52,330 --> 00:49:53,070 Ori. 1202 00:49:53,070 --> 00:49:56,550 Deci, 5/9 ori F minus 32. 1203 00:49:56,550 --> 00:49:59,650 Deci, F minus 32, punct și virgulă. 1204 00:49:59,650 --> 00:50:02,000 Și acum, aici, am de gând să merg mai departe 1205 00:50:02,000 --> 00:50:03,220 și spun, imprimați rezultat. 1206 00:50:03,220 --> 00:50:05,160 Și această parte e ușor. Printf. 1207 00:50:05,160 --> 00:50:07,980 Cum pot să merg despre imprimarea asta? 1208 00:50:07,980 --> 00:50:16,890 Ei bine, am putea spune "Acest număr este în Celsius% f \ n", 1209 00:50:16,890 --> 00:50:18,060 doar pentru unele estetica. 1210 00:50:18,060 --> 00:50:20,450 Și apoi ce valoare vreau să conectați aici ca a lui printf 1211 00:50:20,450 --> 00:50:21,360 al doilea argument? 1212 00:50:21,360 --> 00:50:21,650 Bine. 1213 00:50:21,650 --> 00:50:22,540 Deci, doar c. 1214 00:50:22,540 --> 00:50:24,760 Deci, vom începe cu acest lucru și apoi să se întoarcă doar 0. 1215 00:50:24,760 --> 00:50:25,960 Din nou, nu are nimic de-a face cu matematica. 1216 00:50:25,960 --> 00:50:27,610 Aceasta înseamnă doar totul este bine. 1217 00:50:27,610 --> 00:50:31,210 >> Acum, este acest corectă, acest program? 1218 00:50:31,210 --> 00:50:31,520 Bine. 1219 00:50:31,520 --> 00:50:33,630 Așa că am făcut unele greșeli. 1220 00:50:33,630 --> 00:50:35,980 Chiar dacă nu aveți nici o idee despre ceea ce este de programare, aveți posibilitatea să sortați 1221 00:50:35,980 --> 00:50:37,120 de spate deduc la scoala clasa a ceea ce 1222 00:50:37,120 --> 00:50:38,740 Greșeli de aici s-ar putea să fie. 1223 00:50:38,740 --> 00:50:40,050 Care este unul din prima? 1224 00:50:40,050 --> 00:50:41,256 PUBLICUL: [inaudibil] 1225 00:50:41,256 --> 00:50:41,660 David J. MALAN: Da. 1226 00:50:41,660 --> 00:50:42,940 Deci ne lipsește paranteze. 1227 00:50:42,940 --> 00:50:45,420 Acesta a fost în mod deliberat că am făcut-o în paranteze keynote 1228 00:50:45,420 --> 00:50:48,130 glisați aici, pentru că de fapt această noțiune de ordine 1229 00:50:48,130 --> 00:50:51,590 operațiunilor, sau prioritate, prin care anumite operațiuni - 1230 00:50:51,590 --> 00:50:52,890 multiplicare - 1231 00:50:52,890 --> 00:50:56,000 au caracter obligatoriu mai mare, au prioritate mai mare, decât lucruri 1232 00:50:56,000 --> 00:50:58,050 cum ar fi adunarea sau scăderea. 1233 00:50:58,050 --> 00:51:00,550 Deci, am făcut asta de ani de zile doar pentru a face clar exact 1234 00:51:00,550 --> 00:51:02,840 ce operații matematice ar trebui să se facă mai întâi. 1235 00:51:02,840 --> 00:51:05,010 Deci ar trebui, probabil, imita exact acest lucru. 1236 00:51:05,010 --> 00:51:08,990 În caz contrar, computerul este probabil de gând să încercați să faceți 1237 00:51:08,990 --> 00:51:13,090 ceva de genul decalajul 5 până la 9, apoi înmulțiți F, apoi scade 1238 00:51:13,090 --> 00:51:14,850 32 din totul. 1239 00:51:14,850 --> 00:51:16,480 Care nu este, de fapt, ceea ce vrem să facem. 1240 00:51:16,480 --> 00:51:17,340 Deci, haideți să o paranteză. 1241 00:51:17,340 --> 00:51:20,860 Să adăugăm paranteze mea aici, aici paranteze. 1242 00:51:20,860 --> 00:51:22,670 Să pun asta aici. 1243 00:51:22,670 --> 00:51:25,130 Aici, am observat doar o alta greseala am facut de-a lungul drum. 1244 00:51:25,130 --> 00:51:25,680 Da? 1245 00:51:25,680 --> 00:51:26,930 PUBLICUL: [inaudibil] 1246 00:51:29,632 --> 00:51:30,130 >> David J. MALAN: Ah. 1247 00:51:30,130 --> 00:51:30,470 Bine. 1248 00:51:30,470 --> 00:51:32,400 Deci, avem de fapt, întreg același 1249 00:51:32,400 --> 00:51:34,020 problemă divizia de dinainte. 1250 00:51:34,020 --> 00:51:35,800 Am corecta că, să vedem ce este simptom. 1251 00:51:35,800 --> 00:51:36,990 Dar vom avea pentru a corecta o 1252 00:51:36,990 --> 00:51:37,680 greșeală altă aici. 1253 00:51:37,680 --> 00:51:38,015 Da? 1254 00:51:38,015 --> 00:51:39,540 PUBLICUL: [inaudibil] 1255 00:51:39,540 --> 00:51:40,070 David J. MALAN: Da. 1256 00:51:40,070 --> 00:51:43,130 Deci, am facut greseala stupida, dar incredibil de important. 1257 00:51:43,130 --> 00:51:45,870 Computerul nu este de gând să transforme doar un ochi orb și să 1258 00:51:45,870 --> 00:51:48,770 mă folosesc de capital F, atunci când am declarat, de fapt variabila 1259 00:51:48,770 --> 00:51:51,360 ca un f mici aici, în linia 8. 1260 00:51:51,360 --> 00:51:54,470 Așa că am nevoie pentru a corecta linia 11, în mea de capitalizare, pe care o 1261 00:51:54,470 --> 00:51:56,820 moment în urmă a fost un F de capital din greșeală. 1262 00:51:56,820 --> 00:51:57,610 Ce zici de aici? 1263 00:51:57,610 --> 00:51:59,980 Acest lucru ar fi cu litere mici, precum și? 1264 00:51:59,980 --> 00:52:02,260 Ar trebui să fie, dar asta eo coincidență. 1265 00:52:02,260 --> 00:52:05,070 Asta nu are nimic de f% de a face cu variabila. 1266 00:52:05,070 --> 00:52:07,980 Deci, doar pentru a fi super clar aici, lasă-mă să merg mai departe și 1267 00:52:07,980 --> 00:52:10,710 redenumi acest lucru, pe scurt, "temperatura". Lasă-mă să redenumiți 1268 00:52:10,710 --> 00:52:15,050 acest "temperatură". Permiteți-mi să nu redenumi asta. 1269 00:52:15,050 --> 00:52:18,180 Pentru că, din nou, f% la nivel global înseamnă, "plutind valoarea punctului." 1270 00:52:18,180 --> 00:52:19,950 Nu are nimic de-a face cu variabila mea. 1271 00:52:19,950 --> 00:52:23,080 Dar "temperatura" peste tot locul este doar un pic prolix, 1272 00:52:23,080 --> 00:52:25,370 așa că am de gând să mă întorc pentru a-mi cu litere mici "f" e. 1273 00:52:25,370 --> 00:52:27,890 >> Acum, lasă-mă să merg mai departe în jos la fereastra mea aici. 1274 00:52:27,890 --> 00:52:29,190 Asigurați-f2c - 1275 00:52:29,190 --> 00:52:31,200 care a fost, din nou, numele arbitrar I 1276 00:52:31,200 --> 00:52:32,590 a dat acest fișier. 1277 00:52:32,590 --> 00:52:33,690 Pare să fi compilat. 1278 00:52:33,690 --> 00:52:35,080 Lasă-mă să fugi f2c. 1279 00:52:35,080 --> 00:52:35,780 Enter. 1280 00:52:35,780 --> 00:52:37,786 Temperatura în grade Fahrenheit - hai sa facem una usoara. 1281 00:52:37,786 --> 00:52:39,370 32. 1282 00:52:39,370 --> 00:52:40,910 OK, corecta. 1283 00:52:40,910 --> 00:52:45,910 Dar, dacă eu fac acum 212 de fierbere - 1284 00:52:45,910 --> 00:52:46,630 al naibii. 1285 00:52:46,630 --> 00:52:47,030 Bine. 1286 00:52:47,030 --> 00:52:50,780 Deci, nu este corect în mod clar, în cazul în care TF dumneavoastră încearcă 1287 00:52:50,780 --> 00:52:51,800 cel puțin două valori. 1288 00:52:51,800 --> 00:52:53,340 Deci, care e problema aici? 1289 00:52:53,340 --> 00:52:55,970 Ei bine, ai pus deja degetul pe ceea ce este problema. 1290 00:52:55,970 --> 00:52:57,600 Dar de ce este că acest caz? 1291 00:52:57,600 --> 00:53:00,630 Până aici, atunci când fac matematica din 5 împărțit la 9. 1292 00:53:00,630 --> 00:53:02,190 Deci conceptual, asta e perfect corect. 1293 00:53:02,190 --> 00:53:03,690 În totalitate în conformitate cu formula. 1294 00:53:03,690 --> 00:53:05,940 Dar computerele doar fac exact ceea ce 1295 00:53:05,940 --> 00:53:06,760 spune-le sa faca. 1296 00:53:06,760 --> 00:53:08,940 Și ceea ce ne spune în mod eficient computerul este aici 1297 00:53:08,940 --> 00:53:12,320 împărți întreg de 5 intreg 9 1298 00:53:12,320 --> 00:53:13,670 și dă-mi rezultatul. 1299 00:53:13,670 --> 00:53:16,230 Problema este, însă, atunci când veți face folosind datele de diviziune 1300 00:53:16,230 --> 00:53:20,220 tipuri, de ieșire este aceeași ca și tipul de date intrări. 1301 00:53:20,220 --> 00:53:23,670 Și astfel, dacă cele două intrări sunt ambele Ints, de ieșire se întâmplă 1302 00:53:23,670 --> 00:53:25,110 să fie un int. 1303 00:53:25,110 --> 00:53:28,770 Și astfel 5 împărțit cu 9 puncte este ceva. 1304 00:53:28,770 --> 00:53:32,320 Dar ceea ce este cel mai apropiat număr întreg de la punctul ceva? 1305 00:53:32,320 --> 00:53:33,630 Deci, e de fapt 0. 1306 00:53:33,630 --> 00:53:36,620 Deci, așa cum am discutat, luni, totul după zecimală 1307 00:53:36,620 --> 00:53:37,940 punctul devine trunchiat. 1308 00:53:37,940 --> 00:53:39,495 Pur și simplu se aruncă. 1309 00:53:39,495 --> 00:53:42,760 Deci, aceasta este o greșeală completă, pentru că am putea la fel de bine doar 1310 00:53:42,760 --> 00:53:44,700 înmulțiți totul cu 0 aici. 1311 00:53:44,700 --> 00:53:46,550 >> Acum, eu pot rezolva acest lucru în câteva moduri. 1312 00:53:46,550 --> 00:53:48,080 Am putea face asta. 1313 00:53:48,080 --> 00:53:50,490 5.0 împărțit la 9,0. 1314 00:53:50,490 --> 00:53:52,110 Punct de vedere tehnic, nu am nevoie chiar de a face acest lucru. 1315 00:53:52,110 --> 00:53:55,780 Acesta este suficient pentru a face doar unul dintre numerele de un flotor - 1316 00:53:55,780 --> 00:53:58,290 sau dublu - prin punerea la punctul zecimal aici. 1317 00:53:58,290 --> 00:54:01,740 Pentru că ceea ce se întâmplă acum este atunci când diviza un întreg de 1318 00:54:01,740 --> 00:54:04,670 un flotor, sau un dublu, computerul va realiza 1319 00:54:04,670 --> 00:54:06,830 oh, unul dintre acestea este mai precisă. 1320 00:54:06,830 --> 00:54:09,420 Permiteți-mi să greșească pe partea laterală a oferindu-vă mai multă precizie decât 1321 00:54:09,420 --> 00:54:10,310 ați intenționat. 1322 00:54:10,310 --> 00:54:12,700 Deci, aceasta va converti rezultatul - 1323 00:54:12,700 --> 00:54:16,240 acesta va returna rezultatul ca valoare în virgulă mobilă, de asemenea. 1324 00:54:16,240 --> 00:54:17,330 Deci, care ar funcționa. 1325 00:54:17,330 --> 00:54:18,060 Acest lucru ar funcționa. 1326 00:54:18,060 --> 00:54:20,010 Și mai există un alt mecanism pe care le veți vedea în 1327 00:54:20,010 --> 00:54:21,390 mai multe detalii săptămâna viitoare. 1328 00:54:21,390 --> 00:54:24,690 Puteți, de fapt, ca programator, spune calculatorul 1329 00:54:24,690 --> 00:54:27,930 pentru a trata de fapt, un tip de date ca 1330 00:54:27,930 --> 00:54:29,260 ar fi fost alta. 1331 00:54:29,260 --> 00:54:30,990 >> Așa că am putea face de fapt acest lucru. 1332 00:54:30,990 --> 00:54:35,280 În paranteze, pot spune ceva de genul (float), deschis 1333 00:54:35,280 --> 00:54:36,350 paren, paren aproape. 1334 00:54:36,350 --> 00:54:39,050 Și aceasta este ceea ce se numește "casting". Din nou, mai mult 1335 00:54:39,050 --> 00:54:39,940 pe această săptămâna viitoare. 1336 00:54:39,940 --> 00:54:42,280 Dar aceasta este doar modul programatic de a spune 1337 00:54:42,280 --> 00:54:45,910 calculatorul, da eu știu 9 este un număr întreg sau un lung. 1338 00:54:45,910 --> 00:54:47,700 Știu că nu este o valoare în virgulă mobilă. 1339 00:54:47,700 --> 00:54:49,420 Dar l trateze ca atare oricum. 1340 00:54:49,420 --> 00:54:52,000 Deci, pentru a arunca un tip de date înseamnă a converti 1341 00:54:52,000 --> 00:54:53,310 de la unul la altul. 1342 00:54:53,310 --> 00:54:55,790 Sincer, aceasta este doar un pic urât, așa că propun să mergem 1343 00:54:55,790 --> 00:54:58,830 Înapoi la sugestia inițială de doar conversie 1344 00:54:58,830 --> 00:55:00,770 aceste lucruri să plutesc valorile punctelor manual. 1345 00:55:00,770 --> 00:55:02,890 Pentru că acum e doar foarte clar ce se întâmplă, și 1346 00:55:02,890 --> 00:55:04,280 nu e tot ceea ce distrage atenția. 1347 00:55:04,280 --> 00:55:06,710 >> Așa că hai să mergem acum înapoi în fereastra terminalul meu. 1348 00:55:06,710 --> 00:55:07,990 Asigurați-f2c. 1349 00:55:07,990 --> 00:55:09,430 Lasă-mă să mergeți mai departe și a alerga acest lucru. 1350 00:55:09,430 --> 00:55:12,340 Și, ca o paranteză, te plictisesti tastarea aceste comenzi 1351 00:55:12,340 --> 00:55:14,910 din nou și din nou, că dai seama calculatoare, cum ar fi Linux aici, 1352 00:55:14,910 --> 00:55:16,010 tind să fie destul de inteligent. 1353 00:55:16,010 --> 00:55:18,890 Și dacă m-am lovit de Sus, putem merge prin istoria mea toată 1354 00:55:18,890 --> 00:55:20,380 comenzi, sus și jos. 1355 00:55:20,380 --> 00:55:23,840 Deci, în acest caz aici, eu pot merge doar până la a face rula f2c. 1356 00:55:23,840 --> 00:55:25,830 Am fost strigat la, pentru că tocmai am făcut-o o secundă în urmă. 1357 00:55:25,830 --> 00:55:27,030 E deja până la data de. 1358 00:55:27,030 --> 00:55:30,720 Asa ca acum pot rula f2c din nou. 1359 00:55:30,720 --> 00:55:33,260 Să încercăm 32 Fahrenheit. 1360 00:55:33,260 --> 00:55:36,720 Acum, haideți să încercăm 212 Fahrenheit. 1361 00:55:36,720 --> 00:55:37,250 >> Pfiu. 1362 00:55:37,250 --> 00:55:38,250 Pare să funcționeze. 1363 00:55:38,250 --> 00:55:41,760 Acum, acest lucru este bun, dar se simte un pic arbitrar, care 1364 00:55:41,760 --> 00:55:44,890 Eu arăt șase numere după zecimale. 1365 00:55:44,890 --> 00:55:45,070 Corect? 1366 00:55:45,070 --> 00:55:47,830 Daca esti persoana meteo la TV, tu ești un fel de babalaule 1367 00:55:47,830 --> 00:55:49,150 dacă sunteți de lectură a temperaturii 1368 00:55:49,150 --> 00:55:50,070 acest grad de precizie. 1369 00:55:50,070 --> 00:55:51,270 Deci, haideți să simplifica acest lucru. 1370 00:55:51,270 --> 00:55:53,880 Așa că hai să mergem de fapt, până aici, la printf mea. 1371 00:55:53,880 --> 00:55:55,490 Și da, vreau să plutească. 1372 00:55:55,490 --> 00:55:57,570 Dar vreau să specificați acum de precizie. 1373 00:55:57,570 --> 00:55:59,070 Și am de gând să fie un pic succint. 1374 00:55:59,070 --> 00:56:03,090 Mă duc să spun, da-mi un punct după zecimală. 1375 00:56:03,090 --> 00:56:07,590 Deci, mai degrabă decât, să spunem f%, am de gând să spun% .1 f. 1376 00:56:07,590 --> 00:56:09,760 Și asta înseamnă doar da-mi-o singură poziție 1377 00:56:09,760 --> 00:56:11,410 după punctul zecimal. 1378 00:56:11,410 --> 00:56:11,700 Bine. 1379 00:56:11,700 --> 00:56:12,570 Să mai încercăm o dată. 1380 00:56:12,570 --> 00:56:15,590 Lasă-mă să-l re-rula după compilare. 1381 00:56:15,590 --> 00:56:18,160 Și acum am tip în 32, și mă întorc un 1382 00:56:18,160 --> 00:56:19,310 mai succint valoare. 1383 00:56:19,310 --> 00:56:22,480 Și am posibilitatea să tastați în, acum, 212, și de a lua înapoi o mai succintă 1384 00:56:22,480 --> 00:56:23,260 valoare, de asemenea. 1385 00:56:23,260 --> 00:56:25,190 Și nu există alte lucruri care le puteți face cu printf. 1386 00:56:25,190 --> 00:56:27,950 Puteți specifica de fapt, cât de mare ar trebui să fie numărul. 1387 00:56:27,950 --> 00:56:30,900 Dacă doriți să aveți padding pe el, astfel încât să puteți alinia la dreapta sau 1388 00:56:30,900 --> 00:56:32,360 stânga-align toate numerele dumneavoastră sau 1389 00:56:32,360 --> 00:56:33,400 încercați să lucruri centru. 1390 00:56:33,400 --> 00:56:35,340 Deci dau seama, există mici trucuri care le puteți face acolo. 1391 00:56:35,340 --> 00:56:38,420 Dar ei se fierbe doar până la codurile de format, 1392 00:56:38,420 --> 00:56:39,600 ca și cum avem acolo. 1393 00:56:39,600 --> 00:56:41,090 >> Deci, în ceea ce privește această chestiune de prioritate. 1394 00:56:41,090 --> 00:56:43,820 Acesta este un tabel foarte plictisitor să treacă prin metodic. 1395 00:56:43,820 --> 00:56:46,780 Dar seama că autorii C au venit cu 1396 00:56:46,780 --> 00:56:50,190 norme care specifică pe care operatorii au mai mare 1397 00:56:50,190 --> 00:56:53,680 prioritate, mai multa putere obligatorie, decât altele. 1398 00:56:53,680 --> 00:56:55,890 Deci, întrucât, în școala primară, în general, am știut că aceasta a fost 1399 00:56:55,890 --> 00:56:58,930 înmulțire și împărțire, apoi adunarea și scăderea, 1400 00:56:58,930 --> 00:56:59,950 apoi alte chestii. 1401 00:56:59,950 --> 00:57:01,720 Într-o lume de programare, există o mult mai 1402 00:57:01,720 --> 00:57:03,360 listă mai lungă de lucruri. 1403 00:57:03,360 --> 00:57:05,150 Și acest lucru nu este ceva ce merita memorarea acum. 1404 00:57:05,150 --> 00:57:07,310 Veți fi aclimatizarea la aceasta înainte de mult timp. 1405 00:57:07,310 --> 00:57:10,690 Dar, la fel ca în școala primară, în general, între paranteze rezolva 1406 00:57:10,690 --> 00:57:12,990 problemele de prioritate, prin realizarea de super-clar 1407 00:57:12,990 --> 00:57:15,620 calculator și umane, cât ceea ce este destinat. 1408 00:57:15,620 --> 00:57:17,770 Deci luați în considerare aceasta doar o foaie de ieftin pic acolo. 1409 00:57:17,770 --> 00:57:21,690 Dar cele mai multe dintre aceste detalii nu vom ajunge la timp pentru ceva. 1410 00:57:21,690 --> 00:57:21,900 >> Bine. 1411 00:57:21,900 --> 00:57:24,120 Acum, hai să construim și să se mute departe de aceste mici prostie 1412 00:57:24,120 --> 00:57:25,460 exemple matematice. 1413 00:57:25,460 --> 00:57:27,500 Încă mai folosesc fundamentele aceleași, dar începe 1414 00:57:27,500 --> 00:57:29,960 exprimându-ne un pic mai mult ca Scratch. 1415 00:57:29,960 --> 00:57:31,660 Deci, în Scratch, am avut aceste expresii booleene. 1416 00:57:31,660 --> 00:57:34,890 Și în limba engleză, o expresie booleană este ceea ce? 1417 00:57:34,890 --> 00:57:35,580 Adevărat sau fals. 1418 00:57:35,580 --> 00:57:38,300 E ceva ce se evaluează la true sau false. 1419 00:57:38,300 --> 00:57:39,060 1 sau 0. 1420 00:57:39,060 --> 00:57:39,870 ON sau OFF. 1421 00:57:39,870 --> 00:57:41,000 Orice ai vrea să-l sun. 1422 00:57:41,000 --> 00:57:43,210 Acum in Scratch, piesele puzzle-ului arata ca aceasta. 1423 00:57:43,210 --> 00:57:45,850 Și asta e combinația, pe partea de jos acolo, de trei 1424 00:57:45,850 --> 00:57:47,980 puzzle piese. 1425 00:57:47,980 --> 00:57:48,980 Un coroborat - 1426 00:57:48,980 --> 00:57:51,710 ceva care are martor și gol. 1427 00:57:51,710 --> 00:57:53,970 Și apoi două expresii booleene în interiorul de ea. 1428 00:57:53,970 --> 00:57:56,460 Deci, poți expresii booleene cuib pentru a obține mai mult 1429 00:57:56,460 --> 00:57:59,360 complicat expresii booleene. 1430 00:57:59,360 --> 00:58:03,930 De exemplu, în cazul în care e sâmbătă, și este frumos 1431 00:58:03,930 --> 00:58:06,180 vremea, du-te apoi afara. 1432 00:58:06,180 --> 00:58:07,500 Sau arbitrare așa ceva. 1433 00:58:07,500 --> 00:58:10,090 Deci, vă puteți alătura expresii booleene de a veni cu un 1434 00:58:10,090 --> 00:58:12,780 valoare de adevăr mai mare, a cărui răspuns se bazează 1435 00:58:12,780 --> 00:58:13,800 pe cele mai mici. 1436 00:58:13,800 --> 00:58:15,770 >> Acum, în C, din fericire, aceasta este de cartografiere 1437 00:58:15,770 --> 00:58:16,720 de fapt destul de simplu. 1438 00:58:16,720 --> 00:58:18,820 Parantezele ajuta la a face lucrurile clar aici. 1439 00:58:18,820 --> 00:58:21,700 && Este ceea ce înseamnă "și". Deci asta e modul în care 1440 00:58:21,700 --> 00:58:24,700 am de gând să transforme aceste blocuri de la zero la C. 1441 00:58:24,700 --> 00:58:27,590 Și pentru condițiile am văzut în Scratch, pe mâna stângă 1442 00:58:27,590 --> 00:58:31,150 Partea acolo, eu le pot stivui în mod similar în C. Dacă x este mai puțin 1443 00:58:31,150 --> 00:58:32,970 decât y, atunci fac asta. 1444 00:58:32,970 --> 00:58:35,100 Altfel daca x este mai mare decât y, atunci fac asta. 1445 00:58:35,100 --> 00:58:38,030 Altele logic, acestea trebuie să fie egal, așa spun 1446 00:58:38,030 --> 00:58:39,140 că ele sunt egale. 1447 00:58:39,140 --> 00:58:41,210 Deci, putem începe acum pentru a construi aceste lucruri. 1448 00:58:41,210 --> 00:58:42,170 >> Deci, hai sa facem un exemplu. 1449 00:58:42,170 --> 00:58:45,550 Lasă-mă să deschid un fișier care este pe site-ul cursului, care 1450 00:58:45,550 --> 00:58:47,270 Am scris în prealabil. 1451 00:58:47,270 --> 00:58:50,540 Asta se numește nonswitch.c. 1452 00:58:50,540 --> 00:58:52,270 Și vom vedea de ce într-o clipă. 1453 00:58:52,270 --> 00:58:54,770 Deci, în acest dosar - nonswitch.c-- 1454 00:58:54,770 --> 00:58:56,830 prima dat seama că există o grămadă de 1455 00:58:56,830 --> 00:58:58,460 comentariile de la partea de sus. 1456 00:58:58,460 --> 00:59:00,110 Asta explică doar numele fișierului, ceea ce 1457 00:59:00,110 --> 00:59:01,260 face, și așa mai departe. 1458 00:59:01,260 --> 00:59:04,390 Și aceasta demonstrează aparent utilizarea de Boolean AND-ING - 1459 00:59:04,390 --> 00:59:06,220 conjoining două expresii. 1460 00:59:06,220 --> 00:59:07,670 >> Deci, hai sa vedem cum functioneaza acest program. 1461 00:59:07,670 --> 00:59:10,840 Am inclus mele două fișiere, cs50.h și stdio.h. 1462 00:59:10,840 --> 00:59:13,180 Dacă aș defila în jos, acum, la programul, e un pic mai mult 1463 00:59:13,180 --> 00:59:15,730 decât am scris înainte, dar destul de ușor de citit. 1464 00:59:15,730 --> 00:59:18,360 Așa că am imprima primul utilizator, pe linia 18, 1465 00:59:18,360 --> 00:59:20,460 "Dă-mi un număr întreg între 1 și 10." Astfel 1466 00:59:20,460 --> 00:59:21,530 asta e chiar acolo. 1467 00:59:21,530 --> 00:59:23,410 Acum am să număr întreg. 1468 00:59:23,410 --> 00:59:25,380 Dar dau seama că GetInt - destul de simplu. 1469 00:59:25,380 --> 00:59:26,510 Este doar mergi la a lua un int. 1470 00:59:26,510 --> 00:59:28,830 Se va asigura că se obține un int și nu o 1471 00:59:28,830 --> 00:59:30,060 șir sau un flotor. 1472 00:59:30,060 --> 00:59:32,390 Dar nu va face nici un fel de verificare frontierei. 1473 00:59:32,390 --> 00:59:34,750 Acesta nu va filtra numerele să fie între un 1474 00:59:34,750 --> 00:59:35,630 anumită gamă. 1475 00:59:35,630 --> 00:59:37,730 Așa că trebuie să pună în aplicare acea noi înșine. 1476 00:59:37,730 --> 00:59:40,680 Deci, la fel ca în Scratch, unde am putea face o conjuncție de 1477 00:59:40,680 --> 00:59:43,560 două expresii, pot să fac asta în C, după cum urmează. 1478 00:59:43,560 --> 00:59:48,660 Daca n este mai mare sau egală cu 1, iar n este mai puțin decât și 1479 00:59:48,660 --> 00:59:52,220 sau egal cu 3, am de gând să decretăm că foarte arbitrar 1480 00:59:52,220 --> 00:59:53,830 număr să fie un număr mic. 1481 00:59:53,830 --> 00:59:56,730 Doar de dragul de a o declarație. 1482 00:59:56,730 --> 01:00:00,210 Altfel, dacă n este între 4 și 6, de imprimare "Ai ales un mediu 1483 01:00:00,210 --> 01:00:03,440 numărul. "Altele în cazul în care n este între 7 și 10, de imprimare" Ai ales un 1484 01:00:03,440 --> 01:00:06,390 Numărul mare. "Altele tipărarea" Tu alegi un numar invalid. " 1485 01:00:06,390 --> 01:00:07,900 Pentru că în mod logic, care urmează dacă am 1486 01:00:07,900 --> 01:00:09,230 epuizat gama noastră. 1487 01:00:09,230 --> 01:00:12,400 >> Deci realiza acest lucru nu este destul de modul în care vom scrie mai mare sau 1488 01:00:12,400 --> 01:00:15,000 egal la o clasă de matematică. 1489 01:00:15,000 --> 01:00:15,160 Corect? 1490 01:00:15,160 --> 01:00:17,430 Tu trage de obicei ca aceasta, cu linia de sub ea. 1491 01:00:17,430 --> 01:00:19,250 Dar nu există nici o cheie de pe tastatură, cum ar mea. 1492 01:00:19,250 --> 01:00:22,390 Deci, simbolul în C pentru exprimarea de mai mare sau 1493 01:00:22,390 --> 01:00:25,770 este egală cu două caractere, și simbolul de mai puțin de 1494 01:00:25,770 --> 01:00:29,100 sau egală cu două caractere este la fel de bine. 1495 01:00:29,100 --> 01:00:29,330 Bine. 1496 01:00:29,330 --> 01:00:31,910 Deci, dacă am rula acest program, puteți ghici, probabil, ceea ce e 1497 01:00:31,910 --> 01:00:32,650 de gând să faci. 1498 01:00:32,650 --> 01:00:36,180 Dacă aș merge mai departe și de a face nonswitch, Enter. 1499 01:00:36,180 --> 01:00:38,130 Și apoi executați nonswitch. 1500 01:00:38,130 --> 01:00:39,530 Dă-mi un număr între 1 și 10. 1501 01:00:39,530 --> 01:00:40,870 Am de gând să-i dea 11. 1502 01:00:40,870 --> 01:00:42,280 Am ales un număr nevalid. 1503 01:00:42,280 --> 01:00:44,090 Lasă-mă să încerc numărul 3. 1504 01:00:44,090 --> 01:00:45,990 Am ales un număr mic. 1505 01:00:45,990 --> 01:00:48,360 Deci, destul de simplă acolo. 1506 01:00:48,360 --> 01:00:52,230 >> Ce se întâmplă dacă doriți să schimbați comportamentul acestui program și 1507 01:00:52,230 --> 01:00:54,250 face ceva un pic diferit în schimb? 1508 01:00:54,250 --> 01:00:57,620 Lasă-mă să mergeți mai departe și spun acest lucru. 1509 01:00:57,620 --> 01:00:59,480 Lasă-mă să scap de toate astea. 1510 01:00:59,480 --> 01:01:03,780 Și permiteți-mi să spun că dacă (n == 42). 1511 01:01:03,780 --> 01:01:08,730 Și apoi am de gând să merg mai departe și spun print "Ai ales 1512 01:01:08,730 --> 01:01:16,340 răspunsul corect. "Altele vom merge mai departe și spune, 1513 01:01:16,340 --> 01:01:18,460 printf ("Ai ales 1514 01:01:18,460 --> 01:01:21,170 răspuns greșit ");. Bine. 1515 01:01:21,170 --> 01:01:22,040 Doar pentru ca. 1516 01:01:22,040 --> 01:01:23,890 >> Acum, câteva puncte putem face aici. 1517 01:01:23,890 --> 01:01:26,570 Unu, nu am tastați simbolul pe care ar trebui să cred este 1518 01:01:26,570 --> 01:01:27,390 cea mai rezonabilă. 1519 01:01:27,390 --> 01:01:30,110 Când vreau să verifice egalitatea, se dovedește că nu utilizați 1520 01:01:30,110 --> 01:01:30,910 egală semn. 1521 01:01:30,910 --> 01:01:34,000 Puteți utiliza în schimb semnul egal egal. 1522 01:01:34,000 --> 01:01:36,440 Și de ce s-ar putea fi asta, pur și simplu intuitiv? 1523 01:01:36,440 --> 01:01:37,030 Da. 1524 01:01:37,030 --> 01:01:39,330 PUBLICUL: [inaudibil] 1525 01:01:39,330 --> 01:01:39,615 David J. MALAN: Corect. 1526 01:01:39,615 --> 01:01:41,630 Semnul egal este deja folosit pentru misiune. 1527 01:01:41,630 --> 01:01:43,020 Cineva nu cred cu adevărat la asta. 1528 01:01:43,020 --> 01:01:45,820 Și acum, când vine vorba de testarea egalității, trebuie să ne 1529 01:01:45,820 --> 01:01:48,850 fi mai explicit, și spune egal egal. 1530 01:01:48,850 --> 01:01:52,110 O greșeală foarte comună este de a face acest lucru. 1531 01:01:52,110 --> 01:01:54,800 Și, în cazul în care în ore de birou sau de săptămâna viitoare cândva sau în 1532 01:01:54,800 --> 01:01:58,340 următoarele două săptămâni să faci ceva de genul asta si apoi 1533 01:01:58,340 --> 01:02:00,920 lupta cu ea timp de 10, 20 de minute încercând să dau seama 1534 01:02:00,920 --> 01:02:03,330 ceea ce este al naibii de bug-ul, dai seama că ești unul dintre cei 1535 01:02:03,330 --> 01:02:04,470 oameni care au făcut această greșeală. 1536 01:02:04,470 --> 01:02:06,030 Deci, super simplu de a face. 1537 01:02:06,030 --> 01:02:08,240 Dar acum este scopul de a îndepărta această greșeală. 1538 01:02:08,240 --> 01:02:11,840 Acest lucru ar putea evalua, pentru că ceea ce se spune acest adevăr? 1539 01:02:11,840 --> 01:02:15,010 Dacă n devine 42. 1540 01:02:15,010 --> 01:02:18,250 Deci, oamenii folosesc verbul, verbal, pentru a exprima 1541 01:02:18,250 --> 01:02:21,800 Noțiunea de atribuire este "devine". Deci, dacă n devine 42. 1542 01:02:21,800 --> 01:02:24,060 Deci asta înseamnă atribuie 42 la nr. 1543 01:02:24,060 --> 01:02:26,250 Acum am o expresie booleană, în paranteze, 1544 01:02:26,250 --> 01:02:30,230 în interiorul acestei condiții, a căror valoare este de 42. 1545 01:02:30,230 --> 01:02:30,390 Corect? 1546 01:02:30,390 --> 01:02:32,690 Pentru că dacă l-ați evalua de la interior spre exterior, totalul 1547 01:02:32,690 --> 01:02:34,100 Răspunsul, acum, este de 42. 1548 01:02:34,100 --> 01:02:37,360 >> Deci, dacă te-am întrebat întrebarea, "în cazul în care (42)," ceea ce este 1549 01:02:37,360 --> 01:02:38,410 că într-adevăr spui? 1550 01:02:38,410 --> 01:02:40,990 Ei bine, expresii booleene pot fi doar adevărate sau false. 1551 01:02:40,990 --> 01:02:42,010 1 sau 0. 1552 01:02:42,010 --> 01:02:43,010 ON sau OFF. 1553 01:02:43,010 --> 01:02:45,240 Deci, se pare că avem un caz colț aici, prin care toate dintr-o 1554 01:02:45,240 --> 01:02:50,060 bruscă, eu spun "dacă (42)". Asta nu este o valoare booleană. 1555 01:02:50,060 --> 01:02:54,500 Deci, ceea ce computerele fac, deși, este în esență echivalează 1556 01:02:54,500 --> 01:02:58,620 ceva care nu e 0 este interpretată ca sa fie adevarat. 1557 01:02:58,620 --> 01:02:59,340 1. 1558 01:02:59,340 --> 01:02:59,690 La data de. 1559 01:02:59,690 --> 01:03:01,510 Sunt toate echivalentă funcțional. 1560 01:03:01,510 --> 01:03:05,070 Numai valoarea 0, sau cuvântul cheie falsă, după cum vom 1561 01:03:05,070 --> 01:03:07,860 în cele din urmă a se vedea, este de fapt falsă. 1562 01:03:07,860 --> 01:03:15,040 Deci, "în cazul în care (42)" ar fi de fapt adevărat, pentru că este non-zero. 1563 01:03:15,040 --> 01:03:18,620 Deci, pentru a fi mai exact aici, o valoare booleană este într-adevăr nu atât de 1564 01:03:18,620 --> 01:03:20,680 mult mai adevărat sau fals, dar pentru aceasta 1565 01:03:20,680 --> 01:03:24,650 caz, în cazul în care este 0 sau non-zero. 1566 01:03:24,650 --> 01:03:26,330 Deci, false sau nu false. 1567 01:03:26,330 --> 01:03:28,640 Și care ne permite să cuprindă toate mai mult 1568 01:03:28,640 --> 01:03:30,980 Posibilitățile de expresie în paranteză. 1569 01:03:30,980 --> 01:03:33,840 Deci, avem nevoie să, tot atât de atent, spun acest lucru - 1570 01:03:33,840 --> 01:03:35,620 în cazul în care (n == 42). 1571 01:03:35,620 --> 01:03:39,100 Pur și simplu pentru că avem nevoie de a specifica un test de egalitate, 1572 01:03:39,100 --> 01:03:40,930 nu o cesiune de o valoare. 1573 01:03:40,930 --> 01:03:42,830 >> Ce altceva este demn de remarcat aici? 1574 01:03:42,830 --> 01:03:46,030 Aceste acolade nu sunt de fapt necesare. 1575 01:03:46,030 --> 01:03:48,650 Am fost le faci doar pentru a fi NIT-pretentios aici. 1576 01:03:48,650 --> 01:03:51,350 Dar atunci când aveți o afecțiune care are doar o linie de 1577 01:03:51,350 --> 01:03:55,100 cod, ca o comoditate, programatorii nu trebuie să utilizați 1578 01:03:55,100 --> 01:03:56,030 de acolade. 1579 01:03:56,030 --> 01:03:59,370 Este suficient să se doar liniuță, din motive estetice, și 1580 01:03:59,370 --> 01:04:01,050 apoi scrie linia de cod. 1581 01:04:01,050 --> 01:04:04,160 Numai atunci când doriți să scrieți două linii de cod - pentru 1582 01:04:04,160 --> 01:04:08,230 exemplu, else printf ("La revedere!"). Dacă doriți să faceți 1583 01:04:08,230 --> 01:04:09,540 faptul că, acest lucru este rupt. 1584 01:04:09,540 --> 01:04:11,700 Puteți liniuță tot ce vrei, dar faptul că aveți 1585 01:04:11,700 --> 01:04:14,600 tastat două linii de cod, fără a utiliza acolade 1586 01:04:14,600 --> 01:04:16,860 înseamnă că acest program nu ar fi corect sau ar putea 1587 01:04:16,860 --> 01:04:18,530 nu compila chiar corect. 1588 01:04:18,530 --> 01:04:21,040 Deci, de acum, să fiu sincer, cred că cel mai bun obicei este doar 1589 01:04:21,040 --> 01:04:24,460 utiliza acolade, și veți găsi că acestea fac 1590 01:04:24,460 --> 01:04:25,750 super-clar ce se întâmplă. 1591 01:04:25,750 --> 01:04:29,410 >> De asemenea, ca o parte - mai ales daca esti printre cei care folosesc 1592 01:04:29,410 --> 01:04:31,700 cărțile recomandate sau resurse online - 1593 01:04:31,700 --> 01:04:33,480 dau seama că există această noțiune de stil în 1594 01:04:33,480 --> 01:04:34,130 de programare. 1595 01:04:34,130 --> 01:04:37,280 Și de fapt, unii oameni preferă să afișezi bretele cret 1596 01:04:37,280 --> 01:04:38,720 aici pe o linie. 1597 01:04:38,720 --> 01:04:41,520 Unii oameni preferă să facă lucruri ridicole, 1598 01:04:41,520 --> 01:04:43,830 Vrei pune-le aici. 1599 01:04:43,830 --> 01:04:45,140 Nu e nici un răspuns greșit atunci când vine vorba de 1600 01:04:45,140 --> 01:04:46,710 stil, dar acest lucru este greșit. 1601 01:04:46,710 --> 01:04:47,700 Dar unii oameni o fac. 1602 01:04:47,700 --> 01:04:49,160 [Râsete] 1603 01:04:49,160 --> 01:04:51,760 David J. MALAN: Deci, am spus acest lucru acum, pur și simplu pentru că așa cum 1604 01:04:51,760 --> 01:04:54,400 ai citit pe lucruri în cărți sau on-line, ai de gând să obțineți 1605 01:04:54,400 --> 01:04:55,990 diferite mesaje de la profesori diferite și 1606 01:04:55,990 --> 01:04:56,730 autori diferiți. 1607 01:04:56,730 --> 01:04:58,640 Și dau seama doar că, funcțional, ele sunt 1608 01:04:58,640 --> 01:05:00,740 în general, echivalent, dar să fie în concordanță. 1609 01:05:00,740 --> 01:05:02,850 Deci, în acest caz, vom standardiza pe cret 1610 01:05:02,850 --> 01:05:04,650 bretele alinierea aici, pe stânga. 1611 01:05:04,650 --> 01:05:04,910 >> Bine. 1612 01:05:04,910 --> 01:05:07,040 Așa că hai să mergem mai departe acum și a alerga acest lucru, și să vedem ce se întâmplă 1613 01:05:07,040 --> 01:05:07,780 cu acest program. 1614 01:05:07,780 --> 01:05:09,970 Asigurați-nonswitch. 1615 01:05:09,970 --> 01:05:11,040 Apoi rulați nonswitch. 1616 01:05:11,040 --> 01:05:13,900 Dă-mi un număr întreg între 0 și - astfel încât nu este relevant 1617 01:05:13,900 --> 01:05:16,480 mai, dar eu doar de gând să spun arbitrar 42. 1618 01:05:16,480 --> 01:05:17,850 Și am ales răspunsul corect. 1619 01:05:17,850 --> 01:05:20,430 Ei bine, acum, să luăm de fapt, această într-o direcție diferită. 1620 01:05:20,430 --> 01:05:22,070 Se pare că există unele sintaxă alte noi 1621 01:05:22,070 --> 01:05:23,480 poate folosi într-un program. 1622 01:05:23,480 --> 01:05:27,310 Iata o noua piesa de sintaxă, care este funcțional aceeași, 1623 01:05:27,310 --> 01:05:30,680 ci doar introduce un alt mod de a exprima noi înșine. 1624 01:05:30,680 --> 01:05:32,830 Deci, asta este ceea ce se numește o "declarație comutator." Și o 1625 01:05:32,830 --> 01:05:34,820 switch funcționează după cum urmează. 1626 01:05:34,820 --> 01:05:37,580 Este nevoie de, în paranteze, o valoare pe care doriți să o 1627 01:05:37,580 --> 01:05:38,860 "Comutator" pe. 1628 01:05:38,860 --> 01:05:41,490 Doriți să se comporte diferit bazat pe valoarea sa. 1629 01:05:41,490 --> 01:05:44,360 Deci, aceasta înseamnă comutator pe valoarea n. 1630 01:05:44,360 --> 01:05:45,480 Și ce înseamnă? 1631 01:05:45,480 --> 01:05:50,530 Ei bine, în cazul în care n este 1 sau 2 sau 3, mergeți mai departe și tipări "Tu 1632 01:05:50,530 --> 01:05:52,680 ales un număr mare "și apoi rupe. 1633 01:05:52,680 --> 01:05:55,720 Motivul pentru pauza este faptul că modul în care funcționează C este la fel de 1634 01:05:55,720 --> 01:05:59,790 îndată ce constată un caz care se potrivește, începe de executare 1635 01:05:59,790 --> 01:06:01,610 toate codul de mai jos ea. 1636 01:06:01,610 --> 01:06:04,580 Deci, dacă am avea o linie de cod, așa cum fac eu aici, pe linia 27, 1637 01:06:04,580 --> 01:06:05,360 este executat. 1638 01:06:05,360 --> 01:06:07,520 Dacă am adăuga o altă linie aici, este executat. 1639 01:06:07,520 --> 01:06:09,350 O altă linie aici, este executat. 1640 01:06:09,350 --> 01:06:12,460 Programul se oprește doar ce e mai jos in functie de executare 1641 01:06:12,460 --> 01:06:14,680 Declarație de caz se aplică atunci când I specifică explicit 1642 01:06:14,680 --> 01:06:17,210 spun "pauză". Atât de greșit. 1643 01:06:17,210 --> 01:06:19,220 Corect, în acest caz, ca un rezultat. 1644 01:06:19,220 --> 01:06:22,130 Cazul 4 sau 5 sau 6, în mod similar, se va 1645 01:06:22,130 --> 01:06:23,160 pentru a imprima un mesaj. 1646 01:06:23,160 --> 01:06:24,410 În acest caz, numărul mediu. 1647 01:06:24,410 --> 01:06:25,200 Break. 1648 01:06:25,200 --> 01:06:28,160 Cazul 7, 8, 9, 10, se va imprima "Ai ales un mare 1649 01:06:28,160 --> 01:06:28,950 Numărul "Break.. 1650 01:06:28,950 --> 01:06:31,290 Și apoi există literalmente un cuvânt cheie numit "default" 1651 01:06:31,290 --> 01:06:34,090 asta e efectiv ca "altceva" construi. 1652 01:06:34,090 --> 01:06:36,010 Deci noua sintaxă, dar intelectual, 1653 01:06:36,010 --> 01:06:37,060 nimic nou aici. 1654 01:06:37,060 --> 01:06:38,280 E la fel ca Scratch. 1655 01:06:38,280 --> 01:06:41,040 În cazul în care, în cazul în care altcineva, altceva în cazul în care, un fel de bloc. 1656 01:06:41,040 --> 01:06:44,560 >> Deci, asta e versiunea pornit a acestui program. 1657 01:06:44,560 --> 01:06:46,280 Dar observați că am făcut-o cu numere aici. 1658 01:06:46,280 --> 01:06:49,040 Lasă-mă să deschid o a doua versiune, doar pentru a vedea 1659 01:06:49,040 --> 01:06:50,670 un pic mai mult ceva concret. 1660 01:06:50,670 --> 01:06:52,840 Deci, aici avem clase în loc. 1661 01:06:52,840 --> 01:06:55,540 Se pare că aveți posibilitatea să utilizați comutatoare nu doar pe numere întregi, ci pe 1662 01:06:55,540 --> 01:06:56,340 caractere. 1663 01:06:56,340 --> 01:06:58,930 Nu în toate tipurile de date, dar cel puțin în caractere. 1664 01:06:58,930 --> 01:07:02,670 Deci, aici, am putea face ceva de genul, dacă valoarea de C, care 1665 01:07:02,670 --> 01:07:06,230 utilizatorul tastat în, în linia 19, prin utilizarea funcției getchar, 1666 01:07:06,230 --> 01:07:09,410 este capitalul A sau litere mici o, hai să-l interpreteze ca un grad, 1667 01:07:09,410 --> 01:07:11,340 și spun au ales un grad excelent. 1668 01:07:11,340 --> 01:07:14,690 Și în jos de-a lungul declarația comutatorul, nu avem altă 1669 01:07:14,690 --> 01:07:17,950 cazuri pentru "B" s si "C", și așa mai departe. 1670 01:07:17,950 --> 01:07:19,780 Dar hai să rotunjească acum afară un alt lucru. 1671 01:07:19,780 --> 01:07:21,130 Și din nou, un fel de zbor, prin 1672 01:07:21,130 --> 01:07:22,200 unele dintre aceste exemple. 1673 01:07:22,200 --> 01:07:26,990 Dar e într-adevăr, astfel încât să le putem aplica, acum - 1674 01:07:26,990 --> 01:07:28,880 sau într-adevăr, să traducem doar le acum - 1675 01:07:28,880 --> 01:07:32,220 la C. 1676 01:07:32,220 --> 01:07:33,310 >> Așa că lasă-mă să mergeți mai departe și de a face acest lucru. 1677 01:07:33,310 --> 01:07:34,830 Am de gând să deschidă un fișier nou. 1678 01:07:34,830 --> 01:07:39,430 Și am de gând să fac include . 1679 01:07:39,430 --> 01:07:42,770 Și apoi m-am de gând să fac int main (void). 1680 01:07:42,770 --> 01:07:46,390 Lasă-mă să salvați acest fișier ca un loop.c. 1681 01:07:46,390 --> 01:07:48,280 Doar ca un exemplu. 1682 01:07:48,280 --> 01:07:49,910 Și am de gând să merg mai departe și procedați în felul următor. 1683 01:07:49,910 --> 01:07:54,180 Vreau să scriu un program foarte obositor. 1684 01:07:54,180 --> 01:07:56,170 Deci, 10. 1685 01:07:56,170 --> 01:07:58,862 Hai să facem asta. 1686 01:07:58,862 --> 01:07:59,320 9. 1687 01:07:59,320 --> 01:08:00,360 Bine. 1688 01:08:00,360 --> 01:08:02,120 De îndată ce ați începe să faci acest lucru în programare, ești 1689 01:08:02,120 --> 01:08:03,490 face, probabil, ceva în neregulă. 1690 01:08:03,490 --> 01:08:04,950 Dar vom începe acolo oricum. 1691 01:08:04,950 --> 01:08:05,430 Hopa. 1692 01:08:05,430 --> 01:08:06,950 Asta este de fapt greșit. 1693 01:08:06,950 --> 01:08:08,230 7. 1694 01:08:08,230 --> 01:08:09,440 6. 1695 01:08:09,440 --> 01:08:10,750 5. 1696 01:08:10,750 --> 01:08:11,200 4. 1697 01:08:11,200 --> 01:08:12,450 Nimic nu se va întâmpla când vom ajunge la 0. 1698 01:08:12,450 --> 01:08:13,290 3. 1699 01:08:13,290 --> 01:08:14,590 2. 1700 01:08:14,590 --> 01:08:15,630 1. 1701 01:08:15,630 --> 01:08:16,020 Bine. 1702 01:08:16,020 --> 01:08:17,560 0. 1703 01:08:17,560 --> 01:08:18,689 Ștergeți. 1704 01:08:18,689 --> 01:08:19,029 >> Bine. 1705 01:08:19,029 --> 01:08:20,029 A reveni astfel încât cifra 0. 1706 01:08:20,029 --> 01:08:22,010 Deci, acest program se va face în mod evident ceea ce este foarte 1707 01:08:22,010 --> 01:08:23,310 plictisitor spune că va face. 1708 01:08:23,310 --> 01:08:24,060 Se va imprima tuturor celor 1709 01:08:24,060 --> 01:08:25,290 valori, de sus în jos. 1710 01:08:25,290 --> 01:08:27,140 Așa că lasă-mă să fac fac bucla. 1711 01:08:27,140 --> 01:08:28,640 Și apoi - Ups. 1712 01:08:28,640 --> 01:08:29,700 Asigurați-bucla. 1713 01:08:29,700 --> 01:08:31,479 Am fost în directorul greșit. 1714 01:08:31,479 --> 01:08:33,300 Și acum să-mi alerga bucla. 1715 01:08:33,300 --> 01:08:34,140 Enter. 1716 01:08:34,140 --> 01:08:34,620 Woohoo. 1717 01:08:34,620 --> 01:08:35,270 Foarte frumos. 1718 01:08:35,270 --> 01:08:36,279 Frumos, lung program. 1719 01:08:36,279 --> 01:08:38,109 >> În regulă, dar acum să facem acest lucru mai bine. 1720 01:08:38,109 --> 01:08:40,810 La fel ca în Scratch, atunci când au inceput sa foloseasca un looping 1721 01:08:40,810 --> 01:08:43,149 construi, în loc de doar copierea și lipirea toate 1722 01:08:43,149 --> 01:08:45,580 piese de puzzle, permiteți-mi să introducă acest lucru. 1723 01:08:45,580 --> 01:08:48,609 Deci, în C, există diverse constructe buclă, 1724 01:08:48,609 --> 01:08:50,540 dintre care unul arata ca acest lucru. 1725 01:08:50,540 --> 01:08:55,069 O "pentru" buclă are trei lucruri, separate prin două semne punct și virgulă. 1726 01:08:55,069 --> 01:08:57,770 Și apoi, în interiorul corpului a buclei, ca să spunem așa - 1727 01:08:57,770 --> 01:08:59,390 în interiorul aparatului de lucru al acolade - 1728 01:08:59,390 --> 01:09:01,010 putem face ceva nou și din nou. 1729 01:09:01,010 --> 01:09:02,310 Deci, ceea ce am aici, pe ecran, acest lucru este 1730 01:09:02,310 --> 01:09:03,300 literalmente doar un comentariu. 1731 01:09:03,300 --> 01:09:05,380 / / Se înțelege aici vine un comentariu. 1732 01:09:05,380 --> 01:09:06,180 Acest lucru nu este cod. 1733 01:09:06,180 --> 01:09:08,890 Acest lucru este pur și simplu descriere engleza, pentru mine, uman. 1734 01:09:08,890 --> 01:09:11,300 >> Inițializări Deci, condițiile și actualizări. 1735 01:09:11,300 --> 01:09:12,770 Ei bine, hai să vedem cum funcționează. 1736 01:09:12,770 --> 01:09:15,520 Acest lucru permite-mi să rescrie acest program, după cum urmează. 1737 01:09:15,520 --> 01:09:16,399 Pentru - 1738 01:09:16,399 --> 01:09:18,029 deci aici vine buclă mea - 1739 01:09:18,029 --> 01:09:19,439 int i - 1740 01:09:19,439 --> 01:09:21,330 aici vine o variabilă numită "i" - 1741 01:09:21,330 --> 01:09:23,140 ajunge la 10 inițializate. 1742 01:09:23,140 --> 01:09:25,260 Deci, nu este de inițializare mea. 1743 01:09:25,260 --> 01:09:29,450 Vreau să fac asta bucla atât timp cât "i" este mai mare sau 1744 01:09:29,450 --> 01:09:30,899 egal cu 0. 1745 01:09:30,899 --> 01:09:32,880 Și pe fiecare iterație a buclei acest, vreau 1746 01:09:32,880 --> 01:09:34,979 să i do -. 1747 01:09:34,979 --> 01:09:36,310 Deci, am văzut + + luni. 1748 01:09:36,310 --> 01:09:37,660 - Este opusul. 1749 01:09:37,660 --> 01:09:39,410 Ea diminuări valoarea de 1. 1750 01:09:39,410 --> 01:09:43,319 În interiorul acestui bucla, vreau să fac ceva, de fapt. 1751 01:09:43,319 --> 01:09:46,390 Așa că am de gând să spun ceva de genul printf. 1752 01:09:46,390 --> 01:09:48,939 Nu vreau să spun 10 acum, pentru că în mod evident este doar 1753 01:09:48,939 --> 01:09:50,000 O să imprimați aceeași valoare. 1754 01:09:50,000 --> 01:09:52,246 Ce vreau să imprimați în schimb, probabil? 1755 01:09:52,246 --> 01:09:52,590 Da. 1756 01:09:52,590 --> 01:09:55,270 Deci, "i". Deci d%, am. 1757 01:09:55,270 --> 01:09:57,340 >> Așa că am de gând să fur una dintre acele idei de la mai devreme - 1758 01:09:57,340 --> 01:09:59,640 această substituire pentru codurile de format - 1759 01:09:59,640 --> 01:10:01,620 și apoi aici, în partea de jos, mă voi întoarce 0, doar 1760 01:10:01,620 --> 01:10:02,710 pentru o bună măsură. 1761 01:10:02,710 --> 01:10:04,740 Dar acum, am un program mai succintă. 1762 01:10:04,740 --> 01:10:07,490 E doar câteva linii, și nu unele 10 sau 11 de linii. 1763 01:10:07,490 --> 01:10:09,440 Lasă-mă să merg la promptul mea aici jos. 1764 01:10:09,440 --> 01:10:10,630 Remake buclă. 1765 01:10:10,630 --> 01:10:12,140 Rulați din nou bucla. 1766 01:10:12,140 --> 01:10:13,570 Și acesta pare să fie la fel. 1767 01:10:13,570 --> 01:10:15,550 Acum, programul nu mai e interesant. 1768 01:10:15,550 --> 01:10:17,180 Dar acum am posibilitatea să tastați ceva de genul asta. 1769 01:10:17,180 --> 01:10:18,970 Pot schimba asta la 100. 1770 01:10:18,970 --> 01:10:21,400 Pot recompila apoi programul meu. 1771 01:10:21,400 --> 01:10:23,360 Și atunci pot re-rula programul meu. 1772 01:10:23,360 --> 01:10:26,390 Și acum merge super-rapid pe calculatoarele din ziua de azi. 1773 01:10:26,390 --> 01:10:27,820 Dar nu am - 1774 01:10:27,820 --> 01:10:29,620 si de fapt, tampon mea scrollback nu 1775 01:10:29,620 --> 01:10:30,890 chiar merge atât de departe. 1776 01:10:30,890 --> 01:10:31,680 Acolo mergem. 1777 01:10:31,680 --> 01:10:34,090 Deci nu toti avem 100. 1778 01:10:34,090 --> 01:10:35,880 Dar e ușor să faci greșeli aici. 1779 01:10:35,880 --> 01:10:37,920 Ce se va fi comportamentul asteptat daca am 1780 01:10:37,920 --> 01:10:41,150 face accidental asta? 1781 01:10:41,150 --> 01:10:42,550 Deci, se simte ca infinit. 1782 01:10:42,550 --> 01:10:44,670 Deci, să vedem dacă computerul se comportă. 1783 01:10:44,670 --> 01:10:47,020 >> Așa că lasă-mă să mergeți mai departe și să facă buclă. 1784 01:10:47,020 --> 01:10:48,355 Și lasă-mă să ruleze buclă. 1785 01:10:53,590 --> 01:10:55,210 Așa că haideți să ne întoarcem la faptul că într-o clipă. 1786 01:10:55,210 --> 01:10:56,720 Vom lăsa ca termen. 1787 01:10:56,720 --> 01:10:59,520 Pentru că ceea ce ar trebui să ne bazăm până la, minim? 1788 01:10:59,520 --> 01:11:02,200 Probabil cel puțin 2 miliarde de euro, în cazul în care avem ca multi biti, și 1789 01:11:02,200 --> 01:11:03,660 suntem cu valori pozitive. 1790 01:11:03,660 --> 01:11:04,890 Deci, haideți să sari înapoi aici. 1791 01:11:04,890 --> 01:11:07,810 Pe lângă aceste tipuri de bucle, avem ceea ce se numește în timp ce 1792 01:11:07,810 --> 01:11:09,430 bucle. Deci, la fel ca în Scratch, ai avut totdeauna 1793 01:11:09,430 --> 01:11:11,240 blocuri, și le-ai avut blocuri Repetați. 1794 01:11:11,240 --> 01:11:13,270 În mod similar, în C, ai doar alte moduri 1795 01:11:13,270 --> 01:11:14,260 de a te exprima. 1796 01:11:14,260 --> 01:11:17,110 Deci, aveți această noțiune de o buclă în timp ce vă permite să 1797 01:11:17,110 --> 01:11:18,860 exprimă-te un pic diferit. 1798 01:11:18,860 --> 01:11:21,490 Și apoi ai ceva numit o bucla do-timp, 1799 01:11:21,490 --> 01:11:24,200 care funcționează ușor diferit, de asemenea. 1800 01:11:24,200 --> 01:11:25,320 Și vom tachineze acestea în afară în timp. 1801 01:11:25,320 --> 01:11:28,630 >> Dar haideți să aruncăm o privire la aceasta ultima aici. 1802 01:11:28,630 --> 01:11:30,160 Dacă vom merge în - 1803 01:11:30,160 --> 01:11:31,466 rulează în continuare. 1804 01:11:31,466 --> 01:11:32,770 E destul de infinit. 1805 01:11:32,770 --> 01:11:36,870 Așa că lasă-mă să intru în pozitiv, și arată cum putem de fapt, 1806 01:11:36,870 --> 01:11:39,410 reglementează datele introduse de utilizator un pic mai eficient. 1807 01:11:39,410 --> 01:11:40,910 Este un program destul de scurt. 1808 01:11:40,910 --> 01:11:43,730 Și aici avem, în principal, o int n declarație. 1809 01:11:43,730 --> 01:11:46,570 Deci, da-mi o variabilă numită nr. Acum, eu spun literalmente 1810 01:11:46,570 --> 01:11:48,340 "A face". Și apoi am deschis cret 1811 01:11:48,340 --> 01:11:49,630 bretele, bretele aproape cret. 1812 01:11:49,630 --> 01:11:52,000 Și observați apoi, imediat după asta, se spune în timp ce n 1813 01:11:52,000 --> 01:11:53,790 este mai mică decât 1. 1814 01:11:53,790 --> 01:11:55,300 Deci, observăm că aceste linii - 1815 01:11:55,300 --> 01:11:56,740 19 - 24 - 1816 01:11:56,740 --> 01:11:59,450 compune colectiv o buclă do-timp. 1817 01:11:59,450 --> 01:12:01,280 Și din nou, noua sintaxă, nu este o idee nouă. 1818 01:12:01,280 --> 01:12:03,740 E doar un alt mod de a looping, punct de vedere sintactic. 1819 01:12:03,740 --> 01:12:04,890 Deci, ce face asta? 1820 01:12:04,890 --> 01:12:08,000 Efectuați următoarele în timp ce n este mai mic decât 1. 1821 01:12:08,000 --> 01:12:09,080 Deci, ce vreau să fac? 1822 01:12:09,080 --> 01:12:11,390 Eu cer ca să-mi dați un număr întreg pozitiv. 1823 01:12:11,390 --> 01:12:14,110 Apoi am încerca de fapt, pentru a obține un număr întreg de la utilizator. 1824 01:12:14,110 --> 01:12:16,740 Dar, în ceea ce privește ordinea de operațiuni aici, deoarece 1825 01:12:16,740 --> 01:12:21,850 în timp ce conditie este aici, mă duc apoi să verifice, este n 1826 01:12:21,850 --> 01:12:23,100 mai puțin de 1? 1827 01:12:23,100 --> 01:12:24,600 Deci, să presupunem că utilizatorul - 1828 01:12:24,600 --> 01:12:26,450 după ce a fost cerut în acest mod - 1829 01:12:26,450 --> 01:12:29,190 tipurile din valoarea 0. 1830 01:12:29,190 --> 01:12:34,510 Această condiție va fi adevărat sau fals? 1831 01:12:34,510 --> 01:12:35,820 Ei bine, este de fapt o să fie adevărat. 1832 01:12:35,820 --> 01:12:38,700 Deoarece n este 0, iar 0 este mai mică de 1. 1833 01:12:38,700 --> 01:12:40,140 Deci, ce implică acest lucru? 1834 01:12:40,140 --> 01:12:41,160 Fă-o din nou. 1835 01:12:41,160 --> 01:12:41,990 Fă-o din nou. 1836 01:12:41,990 --> 01:12:42,640 Fă-o din nou. 1837 01:12:42,640 --> 01:12:46,080 Numai o singură dată această condiție se evaluează la FALSE. 1838 01:12:46,080 --> 01:12:47,510 Dacă aș scrie în 42. 1839 01:12:47,510 --> 01:12:49,690 Ei bine, nu, 42 nu este mai mică de 1. 1840 01:12:49,690 --> 01:12:52,320 Prin urmare, aceasta bucla se face de executare. 1841 01:12:52,320 --> 01:12:54,650 Și astfel, în acel moment, programul va spune, mulțumesc pentru 1842 01:12:54,650 --> 01:12:57,530 42, în acest caz. 1843 01:12:57,530 --> 01:13:00,320 Acum, că aveți acest mod de a te exprima - 1844 01:13:00,320 --> 01:13:02,360 Noi nu trebuie să aștepte pentru ca aceasta să termine. 1845 01:13:02,360 --> 01:13:03,620 O să ia ceva timp. 1846 01:13:03,620 --> 01:13:04,990 Pentru a fi continuat data viitoare, probabil. 1847 01:13:04,990 --> 01:13:08,050 >> Dar acum, aveți posibilitatea de a de a înțelege, sperăm, un 1848 01:13:08,050 --> 01:13:09,060 pic de umor tocilar. 1849 01:13:09,060 --> 01:13:11,560 Ne cerem scuze. 1850 01:13:11,560 --> 01:13:13,620 Acest lucru nu este reprezentativa pentru umor în informatică 1851 01:13:13,620 --> 01:13:14,870 lume, dar e drăguț. 1852 01:13:21,020 --> 01:13:23,890 [Râde] Să se încheie în această notă. 1853 01:13:23,890 --> 01:13:25,750 Si te vom vedea pe luni. 1854 01:13:25,750 --> 01:13:31,629 [Aplauze]