1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] David J. MALAN: În regulă. 2 00:00:08,160 --> 00:00:11,170 Acest lucru este CS50, iar acest lucru este sfârșitul de doua saptamani. 3 00:00:11,170 --> 00:00:14,650 Dacă vă așteptați să fie în jurul valorii de foame mâine pe vremea asta, știu că vom 4 00:00:14,650 --> 00:00:18,920 să convoace un grup mic de mâine, joi, 1:15 PM. 5 00:00:18,920 --> 00:00:21,460 Nu e aici, această adresă URL dacă doriți să RSVP. 6 00:00:21,460 --> 00:00:25,270 Spațiul este limitat, așa încât vă rugăm ierta dacă formularul a umplut de dată când 7 00:00:25,270 --> 00:00:26,680 completați asta. 8 00:00:26,680 --> 00:00:29,400 O altă adresă URL totuși că ar putea fi de interes este aceasta. 9 00:00:29,400 --> 00:00:32,409 >> Deci, în doar despre timp de o lună, cursul este de gând să fie puse la dispoziție 10 00:00:32,409 --> 00:00:36,090 toate mai larg prin EDX, prin care oameni de pe Internet va fi 11 00:00:36,090 --> 00:00:39,580 posibilitatea de a urmări de-a lungul, se angajeze în curs destul de activ, de fapt. 12 00:00:39,580 --> 00:00:43,070 Vor fi folosind Aparatura CS50 CS50 și Discuta si de cele mai multe 13 00:00:43,070 --> 00:00:45,840 diverse instrumente software care deja am fost folosind acest semestru. 14 00:00:45,840 --> 00:00:49,030 Iar una dintre inițiativele ne-am dori să-și asume ca un experiment în acest an 15 00:00:49,030 --> 00:00:53,120 este de a vedea cat de mult continut putem traduce în alte vorbit și 16 00:00:53,120 --> 00:00:54,110 limbile scrise. 17 00:00:54,110 --> 00:00:58,000 Deci, dacă s-ar putea avea un interes de a participa la acest proiect, prin care 18 00:00:58,000 --> 00:01:02,090 va vom oferi transcrieri de engleză și subtitluri pentru a cursului 19 00:01:02,090 --> 00:01:05,190 prelegeri și seminarii și pantaloni scurți și secțiunile și cum ar fi - 20 00:01:05,190 --> 00:01:08,700 daca vorbesti fluent sau scrie fluent o altă limbă, ne-ar 21 00:01:08,700 --> 00:01:12,240 plăcea să vă angajeze în acest proiect, prin care te ia pe una sau mai multe dintre 22 00:01:12,240 --> 00:01:15,340 videoclipuri, traducându-le într-o limbă pe care cunosc destul de bine. 23 00:01:15,340 --> 00:01:19,050 Pentru a vă da un sentiment de interfață, există această interfață web-based de utilizare 24 00:01:19,050 --> 00:01:22,330 că vom folosi, care va crea în esență, o interfață de utilizare ca asta. 25 00:01:22,330 --> 00:01:24,520 Acest lucru a fost mă învăța ceva de Halloween în urmă. 26 00:01:24,520 --> 00:01:27,710 Și pe partea dreapta acolo, în negru de lângă aceste timbre de timp, 27 00:01:27,710 --> 00:01:31,300 veți vedea lucruri diferite care au iesit din gura mea în acea zi. 28 00:01:31,300 --> 00:01:34,660 Și apoi sub ea, vei fi capabil de a traduce în altă limbă. 29 00:01:34,660 --> 00:01:37,840 Exact ceea ce de cartografiere este între, în acest caz, Engleza 30 00:01:37,840 --> 00:01:38,660 și, să zicem, spaniolă. 31 00:01:38,660 --> 00:01:40,480 Deci e de fapt un foarte user-friendly instrument. 32 00:01:40,480 --> 00:01:43,690 Puteți derula rapid înainte și foarte ușor, cu scurtături de la tastatură. 33 00:01:43,690 --> 00:01:46,710 Deci, dacă v-ar dori să ia parte la acest experiment și au cuvintele tale 34 00:01:46,710 --> 00:01:50,730 văzute și citite de mii de oameni potențial acolo, vă rugăm să vă simțiți 35 00:01:50,730 --> 00:01:51,960 liber să participe. 36 00:01:51,960 --> 00:01:56,940 >> Acum, un cuvânt despre pisoi de luni, ca nu cumva ne-am trimis un excesiv 37 00:01:56,940 --> 00:01:58,120 înfricoșător mesaj. 38 00:01:58,120 --> 00:02:02,130 Își dau seama că așa cum sugerează orelor de program și în secțiunile sugerează, 39 00:02:02,130 --> 00:02:05,110 de proiectare a cursului este foarte mult de a fi studenți și colaborarea 40 00:02:05,110 --> 00:02:09,250 vorbesc de a lucra prin intermediul seturi de probleme și probleme împreună. 41 00:02:09,250 --> 00:02:13,630 Și într-adevăr linia de doar vine în jos pentru a, din nou, munca pe care în cele din urmă 42 00:02:13,630 --> 00:02:16,420 ar trebui să prezinte ar trebui să fie a ta. 43 00:02:16,420 --> 00:02:19,080 Și așa e, destul de sincer - în ore de birou, e absolut normal - 44 00:02:19,080 --> 00:02:21,560 este în totalitate de așteptat, chiar și - să fie chat cu unele 45 00:02:21,560 --> 00:02:22,370 Prietenii de langa tine. 46 00:02:22,370 --> 00:02:25,240 În cazul în care el sau ea se luptă cu un subiect, si tu esti ca, oh, lasa bine 47 00:02:25,240 --> 00:02:27,750 mi să vă dau o idee de o linie de cod pe care am scris. 48 00:02:27,750 --> 00:02:28,290 Asta e bine. 49 00:02:28,290 --> 00:02:28,700 Asta se întâmplă. 50 00:02:28,700 --> 00:02:31,580 Și asta e foarte mult favorabil, cred, cu procesul de învățare. 51 00:02:31,580 --> 00:02:35,270 În cazul în care linia, din nou, se trecut este atunci când capul este înclinat fel de peste 52 00:02:35,270 --> 00:02:38,800 aici pentru mult prea multe secunde sau minute pentru care într-adevăr să aibă doar 53 00:02:38,800 --> 00:02:41,250 a fost o oportunitate de deblocare pentru prietenul tău. 54 00:02:41,250 --> 00:02:43,870 Și cu siguranță, atunci când lucrurile se schimbate prin e-mail și Dropbox și 55 00:02:43,870 --> 00:02:45,350 ca, acolo este linia. 56 00:02:45,350 --> 00:02:48,940 Deci, prin toate mijloacele, se simt confortabil și se simt încurajați să chat cu prietenii 57 00:02:48,940 --> 00:02:51,270 și colegii despre psets și mai mult. 58 00:02:51,270 --> 00:02:54,680 Și dau seama doar că ceea ce trimiteți în cele din urmă ar trebui să fie într-adevăr 59 00:02:54,680 --> 00:02:57,780 produsul de creația voastră și nu de altcineva. 60 00:02:57,780 --> 00:03:01,010 >> Deci, în aceeași ordine de idei de creaturi de plus, s-ar putea 61 00:03:01,010 --> 00:03:02,820 cunosc pe tipul ăsta aici. 62 00:03:02,820 --> 00:03:06,180 Deci, aceasta este un film groaznic brânzos de ani în urmă. 63 00:03:06,180 --> 00:03:08,680 La văzut cineva pe aici Spaceballs? 64 00:03:08,680 --> 00:03:09,120 Bine. 65 00:03:09,120 --> 00:03:10,220 Deci, un număr bun aici. 66 00:03:10,220 --> 00:03:13,840 Deci asta este modul nostru minunat academică de introducere astăzi în cele din urmă 67 00:03:13,840 --> 00:03:15,130 noțiunea de criptografie. 68 00:03:15,130 --> 00:03:19,010 Și astfel una dintre problemele specifice domeniilor de PSET 2, care va veni 69 00:03:19,010 --> 00:03:22,770 out mâine seară târziu, este de a arunca cu capul în lume de criptografie, care 70 00:03:22,770 --> 00:03:26,380 este arta de a criptare sau de codare informații. 71 00:03:26,380 --> 00:03:30,160 Și în cele din urmă se referă la această lume de securitate. 72 00:03:30,160 --> 00:03:34,440 >> Acum, cea mai mare securitate pentru noi, vine sub forma de mecanisme destul de banale. 73 00:03:34,440 --> 00:03:36,920 Toate dintre noi au numele de utilizator și parole. 74 00:03:36,920 --> 00:03:41,350 Și noi toți avem nume de utilizator și parole foarte proaste, cel mai probabil. 75 00:03:41,350 --> 00:03:45,250 Dacă parola este aceeași pe site-urile multiple, care nu e, probabil, 76 00:03:45,250 --> 00:03:47,920 cea mai buna idee, așa cum vom discuta spre sfârșitul semestrului lui. 77 00:03:47,920 --> 00:03:51,680 Dacă parola este scris într-o notă lipicios - nu gluma - pe dvs. 78 00:03:51,680 --> 00:03:55,130 monitor, că prea nu este neapărat cel mai bun design, dar destul de comună 79 00:03:55,130 --> 00:03:56,140 fenomen. 80 00:03:56,140 --> 00:04:00,420 Și dacă nu ești utilizați criptografia pentru a cripta parolele tale, ele sunt 81 00:04:00,420 --> 00:04:01,610 deosebit de vulnerabile. 82 00:04:01,610 --> 00:04:04,670 Deci, dacă crezi că ești deștept fiind super-de a avea un cuvânt ascuns 83 00:04:04,670 --> 00:04:07,740 documenta undeva pe hard disk care are toate parolele tale, dar 84 00:04:07,740 --> 00:04:10,550 E într-un dosar pe care nimeni nu o să uite în aceea că nu prea este un foarte 85 00:04:10,550 --> 00:04:11,540 securizat mecanism. 86 00:04:11,540 --> 00:04:15,100 Și deci ce PSET 2 va introduce această artă este de criptografie și 87 00:04:15,100 --> 00:04:18,300 codare de informații, astfel că lucrurile sunt cum ar fi parolele 88 00:04:18,300 --> 00:04:19,500 toate mai sigur. 89 00:04:19,500 --> 00:04:24,500 Deci, ca să motiveze această problemă foarte real-lume, cu o foarte non-real-lume 90 00:04:24,500 --> 00:04:28,740 scenariu, lasă-mă să te prezint la unul dintre clipurile noastre preferate aici, din această 91 00:04:28,740 --> 00:04:29,895 film, Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [PLAYBACK VIDEO] 93 00:04:30,565 --> 00:04:32,995 -Casca, tu diavol, ce se întâmplă? 94 00:04:32,995 --> 00:04:34,730 Ce faci cu fiica mea? 95 00:04:34,730 --> 00:04:38,960 -Permiteți-mi să introducă chirurg genial plastic tineri, dr. Philip 96 00:04:38,960 --> 00:04:43,290 Schlotkin, cel mai mare de locuri de muncă om nas în întregul 97 00:04:43,290 --> 00:04:45,526 univers și Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Alteță. 99 00:04:46,450 --> 00:04:47,380 -Nas de locuri de muncă? 100 00:04:47,380 --> 00:04:48,035 Nu înțeleg. 101 00:04:48,035 --> 00:04:49,480 A avut deja un loc de muncă nas. 102 00:04:49,480 --> 00:04:51,490 A fost un dulce 16 prezent. 103 00:04:51,490 --> 00:04:53,090 -Nu, nu e ceea ce crezi. 104 00:04:53,090 --> 00:04:55,150 E mult, mult mai rău. 105 00:04:55,150 --> 00:04:59,860 Dacă nu-mi dai combinație a scutului de aer, Dr. Schlotkin va 106 00:04:59,860 --> 00:05:04,135 da fiica înapoi nasul ei vechi. 107 00:05:04,135 --> 00:05:05,385 -Nu! 108 00:05:08,202 --> 00:05:10,186 În cazul în care ai luat-o? 109 00:05:10,186 --> 00:05:11,178 -În regulă. 110 00:05:11,178 --> 00:05:11,674 Îi voi spune. 111 00:05:11,674 --> 00:05:12,666 Îi voi spune. 112 00:05:12,666 --> 00:05:14,154 -Nu, tati, nu. 113 00:05:14,154 --> 00:05:15,150 Tu nu trebuie. 114 00:05:15,150 --> 00:05:16,460 -Ai dreptate, draga mea. 115 00:05:16,460 --> 00:05:18,450 Voi dor de nas nou. 116 00:05:18,450 --> 00:05:21,550 Dar eu nu le va spune combinația, indiferent de ce. 117 00:05:21,550 --> 00:05:23,100 -Foarte bine. 118 00:05:23,100 --> 00:05:25,510 Dr. Schlotkin, face cel mai rau. 119 00:05:25,510 --> 00:05:26,760 -Cu plăcere. 120 00:05:30,560 --> 00:05:31,180 -Nu! 121 00:05:31,180 --> 00:05:33,450 Stai, stai. 122 00:05:33,450 --> 00:05:34,770 Îi voi spune. 123 00:05:34,770 --> 00:05:36,400 Îi voi spune. 124 00:05:36,400 --> 00:05:38,630 -Știam că va funcționa. 125 00:05:38,630 --> 00:05:42,040 În regulă, dă-mi-. 126 00:05:42,040 --> 00:05:46,890 -Combinație este unul. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 -Doi. 130 00:05:48,950 --> 00:05:49,370 -Doi. 131 00:05:49,370 --> 00:05:50,450 -Doi. 132 00:05:50,450 --> 00:05:50,715 -Trei 133 00:05:50,715 --> 00:05:51,380 -Trei. 134 00:05:51,380 --> 00:05:52,390 -Trei. 135 00:05:52,390 --> 00:05:53,200 -Patru. 136 00:05:53,200 --> 00:05:53,720 -Patru. 137 00:05:53,720 --> 00:05:55,830 -Patru. 138 00:05:55,830 --> 00:05:56,580 Cinci- 139 00:05:56,580 --> 00:05:57,120 -Cinci. 140 00:05:57,120 --> 00:05:58,560 -Cinci. 141 00:05:58,560 --> 00:06:03,770 -Deci combinația este unu, doi, trei, patru, cinci. 142 00:06:03,770 --> 00:06:06,745 Asta e stupid combinația care l-am auzit în viața mea. 143 00:06:06,745 --> 00:06:09,290 Asta e genul de lucru un idiot ar avea asupra bagajele sale. 144 00:06:09,290 --> 00:06:11,540 -Mulțumesc, înălțimea voastră. 145 00:06:11,540 --> 00:06:12,940 -Ce-ai făcut? 146 00:06:12,940 --> 00:06:14,230 -M-am intors de pe perete. 147 00:06:14,230 --> 00:06:14,630 -Nu, nu. 148 00:06:14,630 --> 00:06:15,430 Ai oprit tot filmul. 149 00:06:15,430 --> 00:06:16,722 -Cred că am apăsat pe butonul greșit. 150 00:06:16,722 --> 00:06:18,078 -Ei bine, pune-l la loc. 151 00:06:18,078 --> 00:06:18,805 Pune filmul înapoi pe. 152 00:06:18,805 --> 00:06:19,080 -Da, domnule. 153 00:06:19,080 --> 00:06:19,270 Da, d-le. 154 00:06:19,270 --> 00:06:19,830 -Să mergem, Erna. 155 00:06:19,830 --> 00:06:20,270 Vino, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Desigur, știi că va trebui în continuare să vă factura pentru asta. 157 00:06:27,400 --> 00:06:28,325 -Ei bine, a mers? 158 00:06:28,325 --> 00:06:29,550 Unde e poarta? 159 00:06:29,550 --> 00:06:29,910 -Ea a lucrat, domnule. 160 00:06:29,910 --> 00:06:30,770 Avem combinația. 161 00:06:30,770 --> 00:06:31,390 -Mare. 162 00:06:31,390 --> 00:06:35,630 Acum putem lua fiecare ultima suflare de aer proaspăt de pe planeta Druidia. 163 00:06:35,630 --> 00:06:36,550 Care e combinatia? 164 00:06:36,550 --> 00:06:38,805 -Unu, doi, trei, patru, cinci. 165 00:06:38,805 --> 00:06:40,610 -Unu, doi, trei, patru, cinci? 166 00:06:40,610 --> 00:06:41,070 -Da. 167 00:06:41,070 --> 00:06:41,760 -Asta e uimitor. 168 00:06:41,760 --> 00:06:45,200 Am aceeași combinație pe bagajele mele. 169 00:06:45,200 --> 00:06:47,800 Pregătiți Spaceball 1 pentru plecare imediata. 170 00:06:47,800 --> 00:06:48,536 -Da, domnule. 171 00:06:48,536 --> 00:06:52,350 Și-a schimba combinația de la bagajele mele. 172 00:06:52,350 --> 00:06:53,250 -Au! 173 00:06:53,250 --> 00:06:55,020 [VIDEO PLAYBACK END] 174 00:06:55,020 --> 00:06:57,470 >> David J. MALAN: Un film uimitor acum, ar trebui să vezi toate. 175 00:07:00,600 --> 00:07:06,540 Deci, aici este contextul care vine cu date nesecurizate o oportunitate de a 176 00:07:06,540 --> 00:07:07,790 cripta ea și să-l coate. 177 00:07:07,790 --> 00:07:11,060 Și astfel aceasta, de exemplu, este un exemplu de un mesaj criptat. 178 00:07:11,060 --> 00:07:12,980 Acest fapt spune ceva în limba engleză. 179 00:07:12,980 --> 00:07:14,750 Dar nu e clar în întregime evident. 180 00:07:14,750 --> 00:07:17,360 Și vom veni cerc complet astăzi să tachineze pe langa ce acest secret 181 00:07:17,360 --> 00:07:18,380 Mesajul este aici. 182 00:07:18,380 --> 00:07:22,370 Dar în lumea reală de calculatoare, lucrurile nu arata chiar ca acestea ar putea 183 00:07:22,370 --> 00:07:23,440 Expresii fi limba engleză. 184 00:07:23,440 --> 00:07:27,500 De exemplu, aceasta este ceea ce s-ar putea găsi pe un Linux sau Mac sau standard, 185 00:07:27,500 --> 00:07:32,080 Calculator Unix într-un fișier care a fost o dată la un moment numit parola fișier. 186 00:07:32,080 --> 00:07:34,170 În prezent, acesta a fost mutat la alte locuri. 187 00:07:34,170 --> 00:07:38,660 Dar dacă te uiți în locul potrivit pe un sistem, veți vedea nu numai dvs. 188 00:07:38,660 --> 00:07:41,430 numele de utilizator sau a altor persoane de pe sistem, dar veți vedea o 189 00:07:41,430 --> 00:07:43,410 Versiunea criptată a parolei lor. 190 00:07:43,410 --> 00:07:47,800 Într-adevăr, cuvântul cripta acolo sugerează că lucrurile următoare este criptat. 191 00:07:47,800 --> 00:07:52,030 Și această serie de litere și caractere aleatorii și a numerelor și 192 00:07:52,030 --> 00:07:56,370 așa mai departe pot fi decriptate doar prin cunoașterea, în general, un secret - 193 00:07:56,370 --> 00:07:58,600 un cuvânt secret, un număr secret. 194 00:07:58,600 --> 00:08:02,760 Și astfel, într-adevăr, arta de a criptografiei în cele din urmă se reduce la încredere unor 195 00:08:02,760 --> 00:08:05,700 sortare și știind ceva ce altcineva nu o face. 196 00:08:05,700 --> 00:08:10,010 Vom explora în detaliu un pic mai mult în prezent și în PSET să vină. 197 00:08:10,010 --> 00:08:11,860 >> Și acum un cuvânt pe pass / fail. 198 00:08:11,860 --> 00:08:15,250 Deci în special, după cum unii dintre voi s-au prăbușit în PSET 1, aparat, și 199 00:08:15,250 --> 00:08:18,390 o lume foarte nou pentru tine, a dat seama că frustrările și 200 00:08:18,390 --> 00:08:21,340 dificultăți confuzie și doar tehnică sunt de așteptat. 201 00:08:21,340 --> 00:08:24,410 Mai ales cu PSET în primul rând, în cazul în care există doar atât de mult nouă, doar pentru a 202 00:08:24,410 --> 00:08:28,830 familiarizat cu ls și CD-uri și toate aceste comenzi arcane într-un mediu nou. 203 00:08:28,830 --> 00:08:32,679 Și asta e separat de materialul real și programarea în sine. 204 00:08:32,679 --> 00:08:35,960 Deci dau seama, de asemenea, că există cu siguranță oră de birou care exista ca 205 00:08:35,960 --> 00:08:36,770 structură de sprijin. 206 00:08:36,770 --> 00:08:38,620 Secțiuni începe această duminică vine. 207 00:08:38,620 --> 00:08:41,990 Dar cel mai important, dacă te simți pur și simplu că acest lucru nu este 208 00:08:41,990 --> 00:08:44,420 lume pentru tine, dai seama că într-adevăr nu ia doar de timp. 209 00:08:44,420 --> 00:08:47,520 Și dacă nu ar pentru această oportunitate de ani în urmă pentru mine de a lua o clasă 210 00:08:47,520 --> 00:08:50,840 admis / respins, sincer, n-aș fi stabilit chiar piciorul în sala de clasă. 211 00:08:50,840 --> 00:08:53,520 Și vă puteți schimba acest lucru până, să zicem, al cincilea luni cursului. 212 00:08:53,520 --> 00:08:57,110 Deci, dacă ești pe margine acum, dau seama că, mai degrabă decât capul într-un alt 213 00:08:57,110 --> 00:09:01,000 apele cu totul, cu siguranță, nu ia în considerare doar schimbarea pentru a trece / nu. 214 00:09:01,000 --> 00:09:03,750 Din nou, nu e chiar această cultură aici, de la Harvard de a lua lucrurile 215 00:09:03,750 --> 00:09:08,080 admis / respins, deoarece toată lumea vrea cu adevărat să realizeze sau overachieve. 216 00:09:08,080 --> 00:09:11,470 Dar sincer, aceasta este o modalitate minunată de a încerca ceva care ar putea să nu 217 00:09:11,470 --> 00:09:13,110 fie familiar pentru tine. 218 00:09:13,110 --> 00:09:17,090 Si vei ajunge să faci, în cele mai multe cazuri destul de fine, probabil, 219 00:09:17,090 --> 00:09:18,040 spre surprinderea ta. 220 00:09:18,040 --> 00:09:20,850 Și în termeni mai concreți, ceea ce cred că admis / respins, în general, nu, 221 00:09:20,850 --> 00:09:23,350 mai ales ca s-ar putea s-au confruntat cu PSET 0, dacă ați pus 222 00:09:23,350 --> 00:09:27,200 in 10 ore, 15 ore, 25 de ore în unele PSET - Și tu ești doar trage 223 00:09:27,200 --> 00:09:28,180 capul de perete, 224 00:09:28,180 --> 00:09:29,850 și este din ce în ce super-noaptea târziu, 225 00:09:29,850 --> 00:09:31,880 dar v-ați luat PSET ca 90% din drum, 226 00:09:31,880 --> 00:09:33,780 stii tu chiar nu se poate da seama un lucru - 227 00:09:33,780 --> 00:09:36,830 treci / nu are într-adevăr de pe marginea unei clase de acest fel, în cazul în care aveți posibilitatea să sortați 228 00:09:36,830 --> 00:09:39,150 din fericire spun ok, știu că nu e perfect. 229 00:09:39,150 --> 00:09:40,470 Dar am muncit fundul meu off pe asta. 230 00:09:40,470 --> 00:09:42,410 Sunt destul de fericit cu ea în cazul în care sa încheiat. 231 00:09:42,410 --> 00:09:44,780 Și care vor satisface așteptările pentru pass / fail. 232 00:09:44,780 --> 00:09:46,850 Deci, nu țin minte. 233 00:09:46,850 --> 00:09:47,140 >> Bine. 234 00:09:47,140 --> 00:09:50,980 Deci, cei care au luptat pentru a utiliza Universitatea Harvard Wi-Fi știu 235 00:09:50,980 --> 00:09:54,780 că există un SSID CS50, o conexiune Wi-Fi plutesc în jurul valorii de faptul că te 236 00:09:54,780 --> 00:09:56,520 ar putea avea mai mult noroc pentru. 237 00:09:56,520 --> 00:09:59,430 E un pic ironic faptul că parola pentru acest lucru - dacă doriți să încercați 238 00:09:59,430 --> 00:10:03,080 conectarea la acest lucru pentru viteze mai bune și să ne anunțați dacă nu e mai bine - 239 00:10:03,080 --> 00:10:09,240 este unul, doi, trei, patru, cinci, tot drumul până la opt, deoarece opt este 240 00:10:09,240 --> 00:10:10,270 mai sigure decât cinci. 241 00:10:10,270 --> 00:10:15,520 Deci, dacă aveți nevoie de parola de acces Wi-Fi gratuit, conectați la CS50 fără fir aici. 242 00:10:15,520 --> 00:10:16,950 Unu, doi, trei, patru, cinci, șase, șapte, opt. 243 00:10:16,950 --> 00:10:20,440 Și mesaj pe CS50 Discutați dacă aveți încă probleme intermitente de conectivitate, 244 00:10:20,440 --> 00:10:24,880 și vom lăsa puterile care se cunosc pentru acest spațiu. 245 00:10:24,880 --> 00:10:25,180 >> Bine. 246 00:10:25,180 --> 00:10:30,350 Deci, un teaser rapidă, în special pentru aceia dintre voi care sunt băieți sau fete ventilator 247 00:10:30,350 --> 00:10:31,900 Apple a tuturor lucrurilor. 248 00:10:31,900 --> 00:10:37,566 Ceea ce am dezgropat din urmă cu câțiva ani a fost acest fișier aici, ilock.c, doar pentru a 249 00:10:37,566 --> 00:10:40,930 un fel de a face mai concret și mai complexă o parte din C mai mult de bază 250 00:10:40,930 --> 00:10:42,350 Programele pe care le-am fost scris. 251 00:10:42,350 --> 00:10:44,360 Așa că am deschis acest dosar, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Este disponibil pe pagina de prelegeri pentru ziua de azi. 253 00:10:46,830 --> 00:10:49,470 Pe partea stângă, veți vedea o listă lungă de funcții. 254 00:10:49,470 --> 00:10:51,860 Deci, tipul care a scris acest scris o mulțime de funcții, 255 00:10:51,860 --> 00:10:53,290 mai mult decât principalul. 256 00:10:53,290 --> 00:10:55,490 El a folosit o grămadă de biblioteci aici. 257 00:10:55,490 --> 00:11:00,450 Și dacă vom începe parcurgerea, ce este de fapt este foarte 258 00:11:00,450 --> 00:11:04,670 în primul rând, cred că, crack pentru iPhone-ul original. 259 00:11:04,670 --> 00:11:08,000 Când ai vrut să jailbreak iPhone-ul original, ceea ce înseamnă despriponi 260 00:11:08,000 --> 00:11:11,800 l de la AT & T și, de fapt instala software-ul special pe ea și de a face lucruri 261 00:11:11,800 --> 00:11:13,510 că Apple nu a vrut ca oamenii să facă - 262 00:11:13,510 --> 00:11:17,020 Ei bine, cineva a avut timp să dau seama exact modul în care acestea ar putea exploata 263 00:11:17,020 --> 00:11:20,880 defecte de software, greseli, bug-uri, în software-ul de la Apple. 264 00:11:20,880 --> 00:11:22,650 Și astfel sa născut ilock.c. 265 00:11:22,650 --> 00:11:26,670 Că dacă îl compilat pe un computer și instalat pe un iPhone, care 266 00:11:26,670 --> 00:11:29,810 a fost conectat la computer prin, să zicem, un cablu USB, acest lucru ar da 267 00:11:29,810 --> 00:11:33,360 privilegii administrative sau rădăcină de pe iPhone-ul dvs. și vă permit să faci destul de mult 268 00:11:33,360 --> 00:11:34,170 ce vrei. 269 00:11:34,170 --> 00:11:36,740 >> Și astfel acolo a fost aceasta pisica joc fascinant și mouse-ul între Apple și 270 00:11:36,740 --> 00:11:39,920 restul lumii, în special în ceea ce ei, ca multe companii, încercați pentru a bloca 271 00:11:39,920 --> 00:11:43,220 lor lucruri în jos, astfel încât să puteți face doar cu el ceea ce intenționează. 272 00:11:43,220 --> 00:11:46,620 Dar, datorită oamenii de acest gen și înțelegerea lor de low-level 273 00:11:46,620 --> 00:11:50,580 detalii si, in acest caz, C de programare și o mulțime de constructe familiare 274 00:11:50,580 --> 00:11:54,630 că am început să joc cu, sunteți în stare să impulsioneze într-adevăr 275 00:11:54,630 --> 00:11:59,050 hardware-ul într-o manieră tu de cuviință, și nu neapărat o entitate corporativă. 276 00:11:59,050 --> 00:12:01,360 Deci, de exemplu, nu am nici o idee ce toate astea se face. 277 00:12:01,360 --> 00:12:03,220 Dar GetVersion sună destul de simplu. 278 00:12:03,220 --> 00:12:05,480 Si se pare ca aceasta este o funcție care această persoană a scris. 279 00:12:05,480 --> 00:12:09,240 Ia un fel de întreg ca un argument, nu se întoarce nimic, dar 280 00:12:09,240 --> 00:12:13,080 Apare la bucla cu o buclă de aici și o condiție în cazul în care, în cazul în care condiția, 281 00:12:13,080 --> 00:12:15,620 rupe, și cumva se referă la numerele de versiune. 282 00:12:15,620 --> 00:12:16,700 Dacă vom defila în jos - 283 00:12:16,700 --> 00:12:19,570 chiar dacă o mulțime de aceste cuvinte cheie vor fi noi, și există o 284 00:12:19,570 --> 00:12:22,590 mulțime de funcții de aici ne-am văzut niciodată și nu s-ar putea vedea vreodată peste 285 00:12:22,590 --> 00:12:23,830 cursul semestrului - 286 00:12:23,830 --> 00:12:27,150 la sfârșitul zilei, ea urmează aceleași reguli și logica pe care am fost 287 00:12:27,150 --> 00:12:28,760 jucându-se cu până în prezent. 288 00:12:28,760 --> 00:12:34,220 Deci, acest lucru este mult prea vechi pentru a sparge 3s iPhone 4s sau 5s sau mai curând, în aceste zile, 289 00:12:34,220 --> 00:12:37,320 dar știu că e foarte mult derivat din aceasta lume care ne-am 290 00:12:37,320 --> 00:12:38,430 scufundat în. 291 00:12:38,430 --> 00:12:41,900 >> Deci, haideți să aruncăm o privire la un exemplu ceva mai simplu. 292 00:12:41,900 --> 00:12:46,100 Aceasta, doar pentru a obține încălzit cu unele sintaxa si, de asemenea, unele alte date 293 00:12:46,100 --> 00:12:49,240 Tipul de care am vorbit despre, dar nu au cu adevărat văzut în C. Deci, aceasta este o 294 00:12:49,240 --> 00:12:51,680 fișier numit positive1.c. 295 00:12:51,680 --> 00:12:55,120 Și pe comentariile de la partea de sus, aceasta cere ca doar un utilizator furnizează o 296 00:12:55,120 --> 00:12:55,960 pozitivă număr. 297 00:12:55,960 --> 00:12:59,530 Deci e un exemplu de bucla do-timp, ceea ce este frumos pentru user-interactiv 298 00:12:59,530 --> 00:13:01,980 programe în cazul în care aveți nevoie pentru a spune utilizatorului de a face ceva. 299 00:13:01,980 --> 00:13:05,190 Și în cazul în care nu cooperează, țipi la ei sau de a respinge intrarea acestora. 300 00:13:05,190 --> 00:13:11,610 Cazul de față, am de gând să fac liniile 19 și 24, atât timp cât utilizatorul are 301 00:13:11,610 --> 00:13:14,310 Nu mi-a dat un număr pozitiv. 302 00:13:14,310 --> 00:13:20,400 Acum, acest detaliu aici, pe linia 18, de ce m-am declar n sus acest întreg 303 00:13:20,400 --> 00:13:24,490 construct looping spre deosebire de dreptul de lângă linia 22, unde am 304 00:13:24,490 --> 00:13:26,880 de fapt, grijă pentru a obține n? 305 00:13:26,880 --> 00:13:27,330 Da? 306 00:13:27,330 --> 00:13:27,780 [Neauzit] 307 00:13:27,780 --> 00:13:29,040 >> David J. MALAN: Da, deci această problemă a domeniului de aplicare. 308 00:13:29,040 --> 00:13:30,850 Și în termen laic, ce se referă la domeniul de aplicare? 309 00:13:34,690 --> 00:13:36,610 Da? 310 00:13:36,610 --> 00:13:37,860 [Neauzit] 311 00:13:40,040 --> 00:13:41,105 David J. MALAN: Poți vorbi un pic mai tare? 312 00:13:41,105 --> 00:13:43,450 DIFUZOR 1: În cazul în care vă puteți accesa o variabilă special. 313 00:13:43,450 --> 00:13:45,170 David J. MALAN: Perfect. 314 00:13:45,170 --> 00:13:47,360 În cazul în care puteți accesa o anumită variabilă. 315 00:13:47,360 --> 00:13:50,400 Și, în general, regula de degetul mare până acum a fost că domeniul de aplicare al unor 316 00:13:50,400 --> 00:13:55,860 variabilă este definită prin acolade cele mai recente buclat pe care le-ați văzut. 317 00:13:55,860 --> 00:14:02,010 Și astfel, în acest caz, dacă am făcut greșeala de a declara n pe linia 22, 318 00:14:02,010 --> 00:14:03,010 această linie ar merge. 319 00:14:03,010 --> 00:14:10,990 Mi-ar lua o int, și aș pune în faptul că n variabile, în linia 22. 320 00:14:10,990 --> 00:14:16,900 Dar care linia de cod ar avea acum nici o idee despre ce vorbesc despre? 321 00:14:16,900 --> 00:14:22,650 Deci 25, și se pare că 24, precum și, pentru că în acest caz, acesta nu intră în 322 00:14:22,650 --> 00:14:23,610 de acolade. 323 00:14:23,610 --> 00:14:27,280 Deci, doar un pic de o pacoste, dar foarte ușor de rezolvat prin simpla declarare a 324 00:14:27,280 --> 00:14:30,140 în afara variabilă a funcției de sine. 325 00:14:30,140 --> 00:14:32,600 >> Acum vom vedea mai târziu astăzi, poti sa mergi la un pas mai departe. 326 00:14:32,600 --> 00:14:34,860 Și ai putea obține chiar și un pic leneș - 327 00:14:34,860 --> 00:14:37,320 și acest lucru nu trebuie să fie recomandată, în general - 328 00:14:37,320 --> 00:14:42,260 dar ai putea obține chiar și leneș și a pus-o variabilă la nivel global, ca să spunem așa, nu 329 00:14:42,260 --> 00:14:46,670 în interiorul unei funcții, nu în interiorul unei bucle, dar în fișierul propriu-zis, în afara 330 00:14:46,670 --> 00:14:49,600 din toate funcțiile care le-ați scris, așa cum am făcut-o aici, pe linia 15. 331 00:14:49,600 --> 00:14:51,160 Dar acest lucru este, în general, dezaprobat. 332 00:14:51,160 --> 00:14:55,680 Dar realiza acest lucru este o soluție, uneori, la alte probleme, cum vom 333 00:14:55,680 --> 00:14:56,620 în cele din urmă a se vedea. 334 00:14:56,620 --> 00:14:58,130 Deci, pentru moment, ne vom lăsa așa. 335 00:14:58,130 --> 00:15:01,030 Dar hai sa vedem daca putem rescrie acest lucru doar pentru a începe a ne exprima o 336 00:15:01,030 --> 00:15:01,990 pic diferit. 337 00:15:01,990 --> 00:15:05,330 >> Deci acest program, doar pentru a fi clar, este positive1. 338 00:15:05,330 --> 00:15:11,810 Lasă-mă să merg mai departe aici și în fereastra terminalul meu face positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 Compilează, bine. 340 00:15:12,740 --> 00:15:14,910 Am de gând să ruleze positive1, apăsați Enter. 341 00:15:14,910 --> 00:15:16,820 Eu cer ca să-mi dați un număr întreg pozitiv. 342 00:15:16,820 --> 00:15:18,260 Voi spune -1. 343 00:15:18,260 --> 00:15:18,910 Că nu au de lucru. 344 00:15:18,910 --> 00:15:22,150 0, 99, care pare să funcționeze. 345 00:15:22,150 --> 00:15:23,570 Poate că nu testul cel mai riguros. 346 00:15:23,570 --> 00:15:26,480 Dar cel puțin e un cec bun-simț frumos că suntem pe drumul cel bun. 347 00:15:26,480 --> 00:15:29,240 Asa ca lasa-ma acum mergeți mai departe și să deschidă versiunea a doua a acestui. 348 00:15:29,240 --> 00:15:32,500 Și ceea ce este diferit deja? 349 00:15:32,500 --> 00:15:35,140 Aceasta implementează același lucru. 350 00:15:35,140 --> 00:15:40,660 Dar ceea ce sari pe cât de clar diferit de data asta? 351 00:15:40,660 --> 00:15:42,560 Da, deci acest bool în verde. 352 00:15:42,560 --> 00:15:45,980 Gedit a subliniat în verde acest cuvânt cheie cunoscut sub numele de bool, 353 00:15:45,980 --> 00:15:47,000 care este un tip de date. 354 00:15:47,000 --> 00:15:51,080 Ea nu vine incorporat în toate versiunile de C. Trebuie să includă o 355 00:15:51,080 --> 00:15:52,010 specifică bibliotecă. 356 00:15:52,010 --> 00:15:54,770 În cazul nostru, am inclus biblioteca CS50, astfel încât să 357 00:15:54,770 --> 00:15:56,460 au acces la bool. 358 00:15:56,460 --> 00:15:59,810 Dar, în linia 18, se pare că avem o valoare booleană aici numit recunoscători. 359 00:15:59,810 --> 00:16:01,040 Așa că am fi putut numit acest nimic. 360 00:16:01,040 --> 00:16:04,500 Dar am numit-o recunoscător doar pentru a transmite un fel de vreun sens semantic. 361 00:16:04,500 --> 00:16:07,930 Deci, inițial pe linia 18, eu sunt recunoscător pentru că pare că nu 362 00:16:07,930 --> 00:16:12,150 Valoarea booleană recunoscător este inițializat la fals în linia 18. 363 00:16:12,150 --> 00:16:16,890 Și apoi se pare că ceea ce am făcut aici, în linii 21 până la 23 este tocmai am 364 00:16:16,890 --> 00:16:18,610 un fel de rescrise logica mea. 365 00:16:18,610 --> 00:16:21,020 Deci, nu funcțional diferit. 366 00:16:21,020 --> 00:16:26,940 Dar, în linia 22 acum, am verificați dacă int utilizatorul a furnizat este mai mare decât 367 00:16:26,940 --> 00:16:31,120 0, atunci am schimba pur și simplu valoarea recunoscător adevărate. 368 00:16:31,120 --> 00:16:32,290 Și de ce am face asta? 369 00:16:32,290 --> 00:16:35,600 Pentru că în linia 25, se pare, am de gând să verifice o condiție. 370 00:16:35,600 --> 00:16:39,380 Face acest lucru în timp ce bucla recunoscator este falsă. 371 00:16:39,380 --> 00:16:43,610 >> Deci, propun acest lucru ca pe o alternativa la versiunea una, pentru că e cel puțin un 372 00:16:43,610 --> 00:16:45,130 pic mai mult intuitiv, probabil. 373 00:16:45,130 --> 00:16:46,900 E un pic mai mult pământ în limba engleză. 374 00:16:46,900 --> 00:16:51,710 Deci, faceți următoarele în timp ce nu sunteți recunoscător sau în timp ce recunoscator este falsă. 375 00:16:51,710 --> 00:16:55,890 Și de data asta, de asemenea, am aparent nu-mi pasă să-și amintească ceea ce utilizatorul tastat 376 00:16:55,890 --> 00:16:57,730 în anunțul pentru ca nu exista nici n variabile. 377 00:16:57,730 --> 00:16:58,650 Deci, de fapt, eu - 378 00:16:58,650 --> 00:17:00,080 o minciună nevinovată acolo. 379 00:17:00,080 --> 00:17:02,770 Funcțional, programul este un pic diferit, odată ce vom ajunge la partea de jos a 380 00:17:02,770 --> 00:17:04,819 pentru că nu mă amintesc ce n este. 381 00:17:04,819 --> 00:17:09,579 Dar am vrut să demonstreze aici, de asemenea, că, deși le-am văzut și GetInt 382 00:17:09,579 --> 00:17:13,920 GetString fiind folosit pe partea dreaptă a unui semn egal, astfel, de departe, astfel încât 383 00:17:13,920 --> 00:17:17,160 ne amintim valoarea, punct de vedere tehnic, nu e strict necesar. 384 00:17:17,160 --> 00:17:20,950 Dacă pentru orice motiv, tu chiar nu-mi pasă pentru a salva valoarea, vrei doar 385 00:17:20,950 --> 00:17:25,710 pentru a verifica valoarea, observați că putem scrie pur și simplu acest lucru ca GetInt deschis 386 00:17:25,710 --> 00:17:27,000 paren, paren aproape. 387 00:17:27,000 --> 00:17:30,460 Această funcție este de gând să se întoarcă o valoare, așa cum ne-am spus. 388 00:17:30,460 --> 00:17:32,010 O să te dai înapoi un int. 389 00:17:32,010 --> 00:17:36,450 Și așa că, dacă mental că acest lucru se întâmplă de când am tip în 99, GetInt 390 00:17:36,450 --> 00:17:38,160 returnează numărul 99. 391 00:17:38,160 --> 00:17:41,330 Și așa conceptual, e ca și cum codul meu au fost de fapt acest lucru. 392 00:17:41,330 --> 00:17:45,880 Deci, dacă 99 este într-adevăr mai mare decât 0, atunci recunoscători devine adevărată. 393 00:17:45,880 --> 00:17:50,420 Apoi, linia 25 își dă seama ooh, am terminat pentru că eu sunt acum recunoscător. 394 00:17:50,420 --> 00:17:54,590 Și în linia 26, noi pur și simplu spunem, mulțumește pentru întreg pozitiv, orice ar fi 395 00:17:54,590 --> 00:17:55,710 sa întâmplat să fie. 396 00:17:55,710 --> 00:17:58,900 >> Acum, hai să facem o ușoară zahăr sintactică aici, ca să spunem așa. 397 00:17:58,900 --> 00:18:02,990 Să vedem dacă putem curăța această linie 25, cu această variație a treia și ultima 398 00:18:02,990 --> 00:18:04,640 în positive3. 399 00:18:04,640 --> 00:18:08,250 Deci, observați singura diferenta este acum ceea ce linie de cod? 400 00:18:11,930 --> 00:18:13,260 Da, așa 25. 401 00:18:13,260 --> 00:18:15,520 Și nu ne-am văzut într-adevăr acest truc doar încă. 402 00:18:15,520 --> 00:18:19,510 Dar am făcut-o vedea semn de exclamare de luni, ceea ce denotă ce? 403 00:18:19,510 --> 00:18:20,970 Deci, nu, sau negare. 404 00:18:20,970 --> 00:18:23,460 Astfel încât să ia o valoare Boolean și flip valoarea sa. 405 00:18:23,460 --> 00:18:24,390 Adevărat devine fals. 406 00:18:24,390 --> 00:18:25,500 Fals devine adevărată. 407 00:18:25,500 --> 00:18:28,910 Deci acest lucru, aș propune, este chiar un pic mai intuitiv de un mod de a 408 00:18:28,910 --> 00:18:32,200 scrierea codului pentru că am inițializa încă recunoscător fals. 409 00:18:32,200 --> 00:18:33,530 Eu fac tot următor. 410 00:18:33,530 --> 00:18:35,700 Am setat la adevărat recunoscător atunci când vine momentul. 411 00:18:35,700 --> 00:18:40,690 Dar acum puteți într-adevăr să traducem doar acest cod verbal la stânga la dreapta, 412 00:18:40,690 --> 00:18:42,550 în timp ce nu recunoscător. 413 00:18:42,550 --> 00:18:46,170 Deoarece bubuitură, sau semnul exclamării, denotă noțiunea de a nu, astfel încât în ​​timp 414 00:18:46,170 --> 00:18:47,010 Nu recunoscător. 415 00:18:47,010 --> 00:18:49,740 >> Deci, din nou, nu am introdus nici concepte noi pe sine. 416 00:18:49,740 --> 00:18:53,230 Am vorbit despre Booleans înapoi când am jucat cu Scratch. 417 00:18:53,230 --> 00:18:55,690 Dar dau seama acum putem începe doar scrierea de cod noastră în 418 00:18:55,690 --> 00:18:56,550 mai multe moduri diferite. 419 00:18:56,550 --> 00:19:00,010 Deci, în special în pset1, daca esti un fel de luptă pentru a afla modul de a 420 00:19:00,010 --> 00:19:03,400 scrie un alt program, cote sunt sunteți în noroc, deoarece acolo va fi nici 421 00:19:03,400 --> 00:19:05,780 numărul de soluții pe care le poate intampla la. 422 00:19:05,780 --> 00:19:09,850 De exemplu, acest lucru este doar trei chiar și pentru cea mai simplă de programe. 423 00:19:09,850 --> 00:19:10,180 Bine. 424 00:19:10,180 --> 00:19:13,860 Și acum amintesc luni, am plecat de pe acest act cu valori de returnare. 425 00:19:13,860 --> 00:19:18,280 Deci, pentru prima oară, am scris un program care nu are doar principală, 426 00:19:18,280 --> 00:19:22,240 ea are, de asemenea, funcția sa personalizat pe care l-am scris aici. 427 00:19:22,240 --> 00:19:26,640 Deci, în linia 31, prin 34, am implementat o funcție cub. 428 00:19:26,640 --> 00:19:27,800 Nu e complexă. 429 00:19:27,800 --> 00:19:29,830 E doar un nr de ori de ori pe o, în acest caz. 430 00:19:29,830 --> 00:19:34,920 Dar ceea ce este important despre el este că eu iau de intrare în formă de i 431 00:19:34,920 --> 00:19:38,910 Mă întorc de ieșire în formă de mai multe ori de mai multe ori o. 432 00:19:38,910 --> 00:19:43,940 >> Asa ca acum am capacitatea, la fel ca am folosit la cu printf singur, pentru a apela 433 00:19:43,940 --> 00:19:47,120 această funcție prin apelarea funcției cub. 434 00:19:47,120 --> 00:19:49,470 Și funcția de cub are nevoie de câteva intrare. 435 00:19:49,470 --> 00:19:52,030 Și funcția de cub returnează ceva de ieșire. 436 00:19:52,030 --> 00:19:56,660 Și astfel prin contrast, printf făcut ceva. 437 00:19:56,660 --> 00:19:59,490 Ea nu sa mai întors nimic din ce ne pasa - chiar dacă, în calitate de 438 00:19:59,490 --> 00:20:00,820 deoparte, o face sa returneze o valoare. 439 00:20:00,820 --> 00:20:02,650 Trebuie doar ignora-l, în general,. 440 00:20:02,650 --> 00:20:04,000 Printf făcut ceva. 441 00:20:04,000 --> 00:20:06,220 Ea a avut un efect secundar de imprimare a ecranului. 442 00:20:06,220 --> 00:20:09,480 Prin contrast aici, avem funcția de cub, care 443 00:20:09,480 --> 00:20:11,400 returnează de fapt ceva. 444 00:20:11,400 --> 00:20:12,960 >> Deci asta este, în general - 445 00:20:12,960 --> 00:20:15,260 pentru cei familiarizați cu acest lucru, este o idee destul de simplă. 446 00:20:15,260 --> 00:20:18,460 Dar, pentru cei mai puțin familiarizați cu această idee de a trece în intrări și obținerea 447 00:20:18,460 --> 00:20:21,700 ieșiri spate, hai să încercăm ceva simplu super. 448 00:20:21,700 --> 00:20:25,180 Este cineva confortabilă vine pe scenă pentru scurt timp? 449 00:20:25,180 --> 00:20:27,460 Trebuie sa fie confortabil cu o camera pe tine, la fel de bine. 450 00:20:27,460 --> 00:20:27,640 Da. 451 00:20:27,640 --> 00:20:28,610 Ok, care e numele tău? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 David J. MALAN: Ken. 454 00:20:29,420 --> 00:20:29,810 În regulă, Ken. 455 00:20:29,810 --> 00:20:31,060 Vino sus. 456 00:20:31,060 --> 00:20:34,660 Deci, Ken va fi o funcție de felul aici. 457 00:20:34,660 --> 00:20:35,760 Și hai să mergem mai departe și de a face acest lucru. 458 00:20:35,760 --> 00:20:38,790 Să luăm un pic de fantezie. 459 00:20:38,790 --> 00:20:39,770 Îmi pare bine. 460 00:20:39,770 --> 00:20:41,010 Bine ați venit la centrul scenei. 461 00:20:41,010 --> 00:20:41,980 Bine. 462 00:20:41,980 --> 00:20:45,590 Să lovit acest buton aici. 463 00:20:45,590 --> 00:20:46,420 Bine. 464 00:20:46,420 --> 00:20:49,490 Deci, aici ai o tabla modernă. 465 00:20:49,490 --> 00:20:53,050 Și ceea ce am este funcția principală, de exemplu. 466 00:20:53,050 --> 00:20:55,990 Iar eu nu am un iPad în mâna mea. 467 00:20:55,990 --> 00:20:59,000 Nu-mi aduc aminte cu adevărat cum să - ei bine, de fapt, nu se poate spune asta. 468 00:20:59,000 --> 00:21:02,200 Eu nu prea am scrierii de mână bună. 469 00:21:02,200 --> 00:21:05,260 Și astfel, prin urmare, vreau să imprimați ceva pe ecran pentru mine. 470 00:21:05,260 --> 00:21:07,470 >> Deci, eu sunt fiind programul principal. 471 00:21:07,470 --> 00:21:15,060 Și am de gând să vă spun acest lucru avem de scris-o în zgârieturi și puiul meu 472 00:21:15,060 --> 00:21:16,600 apoi trecând pe lângă tine o intrare. 473 00:21:16,600 --> 00:21:20,000 Deci, ca o prostie, deși acest exercițiu este, noțiunea de funcții și de asteptare un 474 00:21:20,000 --> 00:21:22,260 Funcția și returnarea o funcție într-adevăr se reduce la asta. 475 00:21:22,260 --> 00:21:23,120 Eu am Main. 476 00:21:23,120 --> 00:21:26,270 Tocmai am scris printf ("ceva"), pe ecran. 477 00:21:26,270 --> 00:21:27,470 Eu conduc acest program. 478 00:21:27,470 --> 00:21:30,900 Și, de îndată ce printf este chemat, este nevoie de un singur argument - sau un parametru, 479 00:21:30,900 --> 00:21:31,660 uneori - 480 00:21:31,660 --> 00:21:32,780 între ghilimele duble. 481 00:21:32,780 --> 00:21:33,960 Aici este acest argument. 482 00:21:33,960 --> 00:21:35,740 Eu o trecerea la Ken. 483 00:21:35,740 --> 00:21:39,390 Acum, el este o cutie neagră scris un numar de ani in urma, care aparent 484 00:21:39,390 --> 00:21:41,070 știe doar cum să imprimați lucruri pe ecran. 485 00:21:41,070 --> 00:21:42,320 >> Deci, executa. 486 00:21:48,842 --> 00:21:49,900 Asta nu e rău. 487 00:21:49,900 --> 00:21:50,890 Deci, foarte bine. 488 00:21:50,890 --> 00:21:52,900 Deci, acum, Ken se face de executare. 489 00:21:52,900 --> 00:21:55,810 Are el nevoie să-mi dai ceva inapoi? 490 00:21:55,810 --> 00:21:57,240 Deci, nu că ne-am văzut până acum. 491 00:21:57,240 --> 00:21:59,230 Din nou, printf se întoarce de fapt un număr. 492 00:21:59,230 --> 00:22:01,640 Dar vom ignora faptul că pentru acum, pentru că n-am folosit-o. 493 00:22:01,640 --> 00:22:03,400 Deci, asta e ea pentru Ken. 494 00:22:03,400 --> 00:22:06,650 Și acum vine inapoi principal de a executa - 495 00:22:06,650 --> 00:22:09,630 Principalul preia controlul asupra programului din nou, pentru că linia de cod, 496 00:22:09,630 --> 00:22:11,010 printf, se face de executare. 497 00:22:11,010 --> 00:22:13,890 Și vom merge despre modul nostru de executare indiferent de alte linii sunt acolo. 498 00:22:13,890 --> 00:22:14,130 >> Bine. 499 00:22:14,130 --> 00:22:17,080 Deci, acum să încercăm un exemplu ușor diferit. 500 00:22:17,080 --> 00:22:22,430 Și de data asta aici, hai să deselectați mai întâi ecranul de aici. 501 00:22:22,430 --> 00:22:24,670 Și de data asta, vom face funcția de cubaj. 502 00:22:24,670 --> 00:22:27,350 Dar de data asta, mă aștept la o valoare de ieșire. 503 00:22:27,350 --> 00:22:28,630 Așa că hai să mergem mai departe și de a face acest lucru. 504 00:22:28,630 --> 00:22:35,680 Asa ca acum am o linie de cod care spune x = cub (x). 505 00:22:35,680 --> 00:22:36,930 Deci, de fapt hai - 506 00:22:41,450 --> 00:22:43,940 Linia de cod, rechemare, arata ca aceasta. 507 00:22:43,940 --> 00:22:45,960 x = cub (x). 508 00:22:45,960 --> 00:22:48,100 Deci, cum este aceasta va funcționa? 509 00:22:48,100 --> 00:22:50,820 Așa că hai să mergem mai departe și vă va oferi un ecran alb din nou. 510 00:22:50,820 --> 00:22:55,000 Și am de gând să scrie acum în jos valoarea lui x, care la acest moment, în 511 00:22:55,000 --> 00:23:01,080 timp se întâmplă să fie, să zicem, 2, să-l păstrați simplu. 512 00:23:01,080 --> 00:23:04,890 Deci, am scris pe o bucată de hârtie valoarea de 2, 513 00:23:04,890 --> 00:23:06,100 care este x mea valoare. 514 00:23:06,100 --> 00:23:08,250 L-am preda la Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: Si scriu doar răspunsul? 516 00:23:09,200 --> 00:23:12,660 David J. MALAN: Da, hai să scrie doar răspunsul. 517 00:23:12,660 --> 00:23:13,030 Bine. 518 00:23:13,030 --> 00:23:16,280 Și acum el trebuie să se întoarcă ceva. 519 00:23:16,280 --> 00:23:17,560 Așa - 520 00:23:17,560 --> 00:23:18,170 perfectă. 521 00:23:18,170 --> 00:23:18,840 Nisa segue. 522 00:23:18,840 --> 00:23:21,970 >> Așa că acum mi mâinile înapoi valoarea de 8, în acest caz. 523 00:23:21,970 --> 00:23:23,220 Și ce fac cu ea? 524 00:23:23,220 --> 00:23:26,130 Ei bine, de fapt, să vedem. 525 00:23:26,130 --> 00:23:26,640 Înscrieți-vă acest drept. 526 00:23:26,640 --> 00:23:27,880 Ce am de gând să fac cu ea? 527 00:23:27,880 --> 00:23:31,900 Acum am de gând să profit de această valoare și de fapt, se păstrează în cele 528 00:23:31,900 --> 00:23:33,400 biți aceleași în memorie. 529 00:23:33,400 --> 00:23:35,030 Dar Notă, eu sunt un fel de luptă aici. 530 00:23:35,030 --> 00:23:38,280 Sunt un pic confuz, deoarece în cazul în care nu scriu de fapt valoarea lui x? 531 00:23:38,280 --> 00:23:41,840 Pentru că ceea ce am făcut este doar fizic mana Ken o bucată de hârtie 532 00:23:41,840 --> 00:23:44,400 care a avut valoarea 2, care a fost x. 533 00:23:44,400 --> 00:23:46,300 Și într-adevăr, asta este exact ceea ce se întâmplă. 534 00:23:46,300 --> 00:23:50,100 Deci, se dovedește că, atunci când apelați o funcție, iar tu treci într-un argument 535 00:23:50,100 --> 00:23:54,130 ca "Hello World" sau te treci într-un argument cum ar fi 2, în general, ești 536 00:23:54,130 --> 00:23:56,720 trecerea într-o copie a acestui argument. 537 00:23:56,720 --> 00:24:01,020 Și așa cum am scris în jos numărul 2 aici, și a predat-Ken, că trebuie să 538 00:24:01,020 --> 00:24:04,760 înseamnă că am încă o copie a 2 Valoarea undeva. 539 00:24:04,760 --> 00:24:08,140 Pentru că, într-adevăr, acum că am ajuns înapoi valoarea 8, am nevoie să mă întorc în 540 00:24:08,140 --> 00:24:12,010 RAM și, de fapt scrie 8, unde am avut o dată numărul 2. 541 00:24:12,010 --> 00:24:15,720 >> Deci vizual retineti aceasta notiune de a trece în mod literal 542 00:24:15,720 --> 00:24:16,730 o copie a valorii. 543 00:24:16,730 --> 00:24:19,570 Ken face treaba, întinde-mi înapoi ceva - în acest caz, 544 00:24:19,570 --> 00:24:20,820 o valoare cum ar fi 8. 545 00:24:20,820 --> 00:24:22,660 Și atunci am să fac ceva cu acea valoare, dacă am 546 00:24:22,660 --> 00:24:24,880 doriți să-l păstrați în jurul valorii de. 547 00:24:24,880 --> 00:24:29,470 Deci, toate acestea vor fi mult prea familiarizat înainte de mult timp. 548 00:24:29,470 --> 00:24:33,082 Va multumesc foarte mult pentru această demonstrație aici, Ken. 549 00:24:33,082 --> 00:24:34,820 Bine. 550 00:24:34,820 --> 00:24:36,720 Foarte bine făcut. 551 00:24:36,720 --> 00:24:40,610 Deci, hai sa vedem cum că în cele din urmă se referă la unele dintre funcții 552 00:24:40,610 --> 00:24:42,270 de asteptare pe care le-am făcut aici. 553 00:24:42,270 --> 00:24:47,610 Așa că lasă-mă să mergeți mai departe și să ne aducă înapoi la exemplul cubaj aici. 554 00:24:47,610 --> 00:24:53,080 Și observați că, dacă vrem să începeți să luați acest fapt, în continuare, vom 555 00:24:53,080 --> 00:24:57,050 trebui să fie conștient de faptul că x număr care este în curs de trecut 556 00:24:57,050 --> 00:25:01,390 aici este diferit de ceea ce de fapt a fi trecut în funcția. 557 00:25:01,390 --> 00:25:03,940 Deci, din nou, aceasta a trecut prin copiere va deveni destul de 558 00:25:03,940 --> 00:25:05,620 Germane în doar o clipă. 559 00:25:05,620 --> 00:25:09,320 >> Deci, haideți să aruncăm o privire la ceva care nu funcționează destul de bine încă. 560 00:25:09,320 --> 00:25:11,790 Am de gând să merg mai departe și să deschidă un exemplu buggy treia, care 561 00:25:11,790 --> 00:25:13,560 este viciată de natura. 562 00:25:13,560 --> 00:25:18,070 Și se numește buggy3, și-l pune în aplicare o funcție de pompare. 563 00:25:18,070 --> 00:25:23,500 Deci, aici avem o funcție principală care a x și y arbitrar pregătit pentru a 564 00:25:23,500 --> 00:25:24,720 1 și 2, respectiv. 565 00:25:24,720 --> 00:25:27,590 Am putea folosi GetInt, dar avem nevoie doar de un simplu exercițiu. 566 00:25:27,590 --> 00:25:29,680 Deci e greu codate ca 1 și 2. 567 00:25:29,680 --> 00:25:35,330 În linii 21 și 22, am imprima aparent afară x și y, câte unul pe fiecare rând. 568 00:25:35,330 --> 00:25:39,620 Apoi, pe linia 23, eu pretind am swapping aceste valori, punct, punct, punct. 569 00:25:39,620 --> 00:25:43,030 Eu numesc aparent o funcție în linia 24 numit de swap 570 00:25:43,030 --> 00:25:44,000 care ia două argumente. 571 00:25:44,000 --> 00:25:46,430 E complet legal pentru funcțiile de a lua două argumente. 572 00:25:46,430 --> 00:25:48,220 Am văzut printf o fac deja. 573 00:25:48,220 --> 00:25:50,370 Deci, de swap are aparent x și y. 574 00:25:50,370 --> 00:25:53,010 Și, după cum sugerează și numele, sper că o să 575 00:25:53,010 --> 00:25:54,320 schimba aceste două valori. 576 00:25:54,320 --> 00:25:57,560 Deci, apoi m-am pretinde pe linia 25, schimbat. 577 00:25:57,560 --> 00:26:01,570 Și am retipărită x și y în ipoteza că 578 00:26:01,570 --> 00:26:02,830 într-adevăr, le-am fost schimbate. 579 00:26:02,830 --> 00:26:04,370 Dar dacă am alerga de fapt, acest program - 580 00:26:04,370 --> 00:26:06,060 lasă-mă să deschid o fereastră de terminal. 581 00:26:06,060 --> 00:26:07,750 Lasă-mă să fac buggy3. 582 00:26:07,750 --> 00:26:09,970 După cum sugerează și numele, acest lucru nu se va termina bine. 583 00:26:09,970 --> 00:26:14,690 Pentru că atunci când am lovit Enter, observați că x este: 1. 584 00:26:14,690 --> 00:26:15,720 y este 2. 585 00:26:15,720 --> 00:26:19,160 Și totuși, la sfârșitul programului, ele sunt încă, de fapt, același lucru. 586 00:26:19,160 --> 00:26:22,760 >> Deci bazează pe demonstrarea chiar acum cu Ken, ceea ce se întâmplă de fapt aici? 587 00:26:22,760 --> 00:26:24,660 Ei bine, hai să se arunca cu capul în această funcție de swap. 588 00:26:24,660 --> 00:26:25,800 E foarte scurt. 589 00:26:25,800 --> 00:26:28,020 E doar câteva linii de cod lung. 590 00:26:28,020 --> 00:26:32,810 Dar ceea ce este problema fundamentală pe baza povestea simpla a declarat pentru 591 00:26:32,810 --> 00:26:34,270 aici cu Ken? 592 00:26:34,270 --> 00:26:36,115 De ce este rupt de swap? 593 00:26:36,115 --> 00:26:37,365 [Neauzit] 594 00:26:39,840 --> 00:26:40,460 Exact. 595 00:26:40,460 --> 00:26:43,610 Deci, suntem stocarea într-o copie care nu, variabila în sine. 596 00:26:43,610 --> 00:26:46,810 Cu alte cuvinte, de swap are două argumente aparent, un int. 597 00:26:46,810 --> 00:26:49,370 Și se numește mod arbitrar a și b. 598 00:26:49,370 --> 00:26:54,430 Și aici, am trecut în x și y, care sunt, respectiv, 1 și 2. 599 00:26:54,430 --> 00:26:56,580 Dar eu nu sunt literalmente trece în x. 600 00:26:56,580 --> 00:26:58,410 Nu mă literalmente trece în y. 601 00:26:58,410 --> 00:27:01,230 Mă trece o copie a lui x și o copie a lui y. 602 00:27:01,230 --> 00:27:05,180 E ca și cum aproape ca și cum ați copiat și inserat în schimb valorile pe care 603 00:27:05,180 --> 00:27:07,440 doriți să-l manipuleze, de fapt. 604 00:27:07,440 --> 00:27:11,970 Deci, dacă acesta este cazul, atunci când am, programul, începe de executare 605 00:27:11,970 --> 00:27:14,140 linia 35, apoi 36 - 606 00:27:14,140 --> 00:27:17,740 cand ajung la linia 37, în acest moment, în poveste, ceea ce este valoarea unei? 607 00:27:20,740 --> 00:27:24,850 În acest moment, în poveste, linia 37, care este valoarea unei la acest punct? 608 00:27:24,850 --> 00:27:25,980 Deci, ar trebui să fie doar 1. 609 00:27:25,980 --> 00:27:26,170 Corect? 610 00:27:26,170 --> 00:27:29,100 Pentru ca X a fost adoptată în ca prim argument. 611 00:27:29,100 --> 00:27:33,150 Și această funcție doar arbitrar este de asteptare argument în primul rând, o. 612 00:27:33,150 --> 00:27:35,130 În mod similar este y, al doilea argument. 613 00:27:35,130 --> 00:27:37,930 Și e doar asteptare arbitrar b doilea argument. 614 00:27:37,930 --> 00:27:40,510 >> Acum, această dihotomie este, de fapt destul de simplu explicat. 615 00:27:40,510 --> 00:27:40,880 Gândiți-vă la asta. 616 00:27:40,880 --> 00:27:42,980 Nici unul dintre noi nu s-au întâlnit persoana care a scris printf. 617 00:27:42,980 --> 00:27:49,880 Deci, cu siguranță, el sau ea nu are nici o idee despre ceea ce variabilele de cei 30 de ani mai târziu, se vor 618 00:27:49,880 --> 00:27:50,710 să fie numit. 619 00:27:50,710 --> 00:27:55,110 Deci, trebuie să existe o distincție între ceea ce numim variabile în 620 00:27:55,110 --> 00:27:59,960 Funcțiile pe care le scrieți și ceea ce voi numiți în funcțiile variabile esti 621 00:27:59,960 --> 00:28:01,770 de asteptare sau folosind. 622 00:28:01,770 --> 00:28:05,120 Deci, cu alte cuvinte, am scris variabile mele ca x si y. 623 00:28:05,120 --> 00:28:08,060 Dar dacă altcineva a scris funcția de swap, el sau ea cu siguranță 624 00:28:08,060 --> 00:28:10,480 n-ar ști ce variabilele mele sunt de gând să fie numit. 625 00:28:10,480 --> 00:28:13,850 Deci dau seama că acest lucru este de ce aveți această dualitate de nume. 626 00:28:13,850 --> 00:28:16,800 Punct de vedere tehnic, am putea face acest lucru prin coincidență. 627 00:28:16,800 --> 00:28:19,750 Dar ei vor fi în continuare în trecut drept copii. 628 00:28:19,750 --> 00:28:22,940 Ar fi doar o pura coincidenta punct de vedere estetic în cazul în care persoana care a scris 629 00:28:22,940 --> 00:28:25,590 swap-au folosit aceleași nume. 630 00:28:25,590 --> 00:28:25,930 >> Bine. 631 00:28:25,930 --> 00:28:29,010 Deci, în acest moment, în poveste, linia 37, a este 1. 632 00:28:29,010 --> 00:28:30,410 b este 2. 633 00:28:30,410 --> 00:28:32,040 Și acum am proceda pentru a le schimba. 634 00:28:32,040 --> 00:28:34,730 Ei bine, în primul rând, permiteți-mi să fac asta, de fapt mult mai simplu. 635 00:28:34,730 --> 00:28:36,500 Nu știu ce aceste trei linii de cod au fost faci. 636 00:28:36,500 --> 00:28:37,370 Lasă-mă să fac asta. 637 00:28:37,370 --> 00:28:38,850 b. primește o. 638 00:28:38,850 --> 00:28:40,170 b. o primește. 639 00:28:40,170 --> 00:28:41,450 Adoptată. 640 00:28:41,450 --> 00:28:43,540 De ce este acest rupt, în mod logic? 641 00:28:46,980 --> 00:28:48,590 E un fel de lucru intuitiv, nu? 642 00:28:48,590 --> 00:28:50,640 Deci, un devine B. 643 00:28:50,640 --> 00:28:52,450 Și b. devine o. 644 00:28:52,450 --> 00:28:55,410 Dar problema este că de îndată ce linia 37 execute, ceea ce este 645 00:28:55,410 --> 00:28:58,170 Valoarea lui A și B? 646 00:28:58,170 --> 00:28:59,070 Același, 1. 647 00:28:59,070 --> 00:29:03,460 Pentru că ai clobbered, ca să spunem așa, v-ați schimbat pe b pentru a egale cu o. 648 00:29:03,460 --> 00:29:06,000 Deci, odată ce linia 37 este executat, asta e grozav. 649 00:29:06,000 --> 00:29:09,940 Acum aveți două copii ale numărul 1 interiorul acestei funcții. 650 00:29:09,940 --> 00:29:14,720 Deci, atunci când spui în linia 38, o primește b, ei bine, ești un fel de greșit. 651 00:29:14,720 --> 00:29:17,370 Pentru ca esti atribuirea doar 1 la 1. 652 00:29:17,370 --> 00:29:20,400 Ati cam pierdut valoarea îți pasă. 653 00:29:20,400 --> 00:29:22,910 >> Deci, în versiunea originală a acestui, observați ceea ce am făcut. 654 00:29:22,910 --> 00:29:26,620 Am avut în schimb o treia linie de cod care arata ca acest lucru. 655 00:29:26,620 --> 00:29:29,910 Am declara o variabilă temporară - tmp este un nume foarte comun 656 00:29:29,910 --> 00:29:31,240 pentru o variabilă temporară. 657 00:29:31,240 --> 00:29:34,280 E un int, deoarece trebuie să se potrivească ceea ce vreau să fac o copie a. 658 00:29:34,280 --> 00:29:39,720 Am stoca o copie a unui interior de tmp. Deci, odată ce linia 37 a executat, 659 00:29:39,720 --> 00:29:41,390 valoarea a este - 660 00:29:41,390 --> 00:29:42,970 bun-simț rapid check - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 Valoarea b este 2. 663 00:29:45,780 --> 00:29:48,470 Și valoarea tmp este de asemenea, 1. 664 00:29:48,470 --> 00:29:51,470 Așa că acum am executa linia 38. 665 00:29:51,470 --> 00:29:57,180 Deci, odată ce linia 38 execută, o ia pe valoarea de b. 666 00:29:57,180 --> 00:29:58,510 Și b. a fost de 2. 667 00:29:58,510 --> 00:30:00,500 Deci, este acum un 2. 668 00:30:00,500 --> 00:30:03,110 Deci, în acest moment, în poveste, un este 2, b este 2, 669 00:30:03,110 --> 00:30:05,130 și tmp este 1. 670 00:30:05,130 --> 00:30:09,330 Deci, acum în mod logic, putem doar valoarea plop tmp lui in b. 671 00:30:09,330 --> 00:30:10,690 Și am terminat. 672 00:30:10,690 --> 00:30:12,170 >> Deci am rezolvat problema. 673 00:30:12,170 --> 00:30:16,040 Din păcate, atunci când am rula acest program în această formă, ea nu schimba de fapt 674 00:30:16,040 --> 00:30:17,700 orice valori. 675 00:30:17,700 --> 00:30:18,950 Dar pentru a fi clar, de ce? 676 00:30:23,420 --> 00:30:26,310 Am fixat problema logică de la doar o clipă în urmă. 677 00:30:26,310 --> 00:30:31,150 Dar, din nou, dacă am rula acest program, x și y rămân neschimbate până la sfârșitul anului 678 00:30:31,150 --> 00:30:33,834 programul de execuție. 679 00:30:33,834 --> 00:30:34,760 [Neauzit] 680 00:30:34,760 --> 00:30:36,030 David J. MALAN: Deci nu s-au întors nimic. 681 00:30:36,030 --> 00:30:36,960 Deci asta e adevărat. 682 00:30:36,960 --> 00:30:39,880 Dar se pare că nu e un pic de o problemă aici, deoarece până în prezent, 683 00:30:39,880 --> 00:30:42,460 Singurul lucru pe care am putut să se întoarcă este un lucru. 684 00:30:42,460 --> 00:30:46,540 Și aceasta este o restricție de C. Puteți reveni cu adevărat numai o singură valoare, 685 00:30:46,540 --> 00:30:48,970 caz în care, eu sunt un fel de blocat aici 686 00:30:48,970 --> 00:30:51,805 pentru că am putut reveni noua valoare a lui x sau aș putea întoarce 687 00:30:51,805 --> 00:30:53,160 noua valoare a lui y. 688 00:30:53,160 --> 00:30:54,330 Dar vreau amândoi înapoi. 689 00:30:54,330 --> 00:30:58,010 Deci, revenind, nu este o soluție simplă aici. 690 00:30:58,010 --> 00:30:59,770 Dar problema fundamental este de ce? 691 00:30:59,770 --> 00:31:03,270 Ceea ce am de fapt schimbat? 692 00:31:03,270 --> 00:31:04,010 a și b. 693 00:31:04,010 --> 00:31:07,670 Dar a și b sunt copii ale lui x și y, ceea ce înseamnă că a făcut doar toate astea 694 00:31:07,670 --> 00:31:10,080 muncă - ne-am petrecut cam trei minute vorbind despre schimbul 695 00:31:10,080 --> 00:31:11,680 funcția și toate aceste trei variabile. 696 00:31:11,680 --> 00:31:15,090 Și asta e minunat, perfect corect în izolare. 697 00:31:15,090 --> 00:31:20,230 Dar un domeniu de aplicare și b lui numai în aceste linii aici. 698 00:31:20,230 --> 00:31:24,130 Deci, doar ca o bucla de, daca declara un întreg i în interiorul pentru 699 00:31:24,130 --> 00:31:27,400 buclă - în mod similar, interior dacă sunteți de declarare a și b de o funcție care 700 00:31:27,400 --> 00:31:30,550 care le-ați scris, sunt valabile doar în interiorul de această funcție. 701 00:31:30,550 --> 00:31:35,020 Ceea ce înseamnă că de îndată ce se face schimb de executare și vom trece de la linia de la 24 la 702 00:31:35,020 --> 00:31:38,380 linia 25, x și y nu au fost modificate deloc. 703 00:31:38,380 --> 00:31:42,580 Ai pierdut doar o mulțime de timp pompare copii ale variabilelor. 704 00:31:42,580 --> 00:31:46,490 >> Deci, se dovedește că soluția la această este de fapt non-evidente. 705 00:31:46,490 --> 00:31:49,210 Nu e destul de suficiente pentru a returna valori, deoarece putem 706 00:31:49,210 --> 00:31:50,320 returna o singură valoare. 707 00:31:50,320 --> 00:31:53,370 Și eu chiar nu vreau să schimb atât x și y, în același timp. 708 00:31:53,370 --> 00:31:55,020 Deci, ne vom întoarce la asta. 709 00:31:55,020 --> 00:31:58,770 Dar pentru moment, realizăm că problema fundamental derivă din faptul 710 00:31:58,770 --> 00:32:00,660 care a și b sunt copii. 711 00:32:00,660 --> 00:32:03,450 Și ei sunt în sfera de aplicare propria lor. 712 00:32:03,450 --> 00:32:04,980 Ei bine, hai să încercăm să rezolve această într-un fel. 713 00:32:04,980 --> 00:32:09,200 Lasă-mă să derulați înapoi de fapt, aici și să se deschidă, să zicem, o variantă patra 714 00:32:09,200 --> 00:32:11,170 de acest lucru, buggy4. 715 00:32:11,170 --> 00:32:13,230 Și ce zici de asta? 716 00:32:13,230 --> 00:32:16,690 Aceasta este o problemă similară, dar mai simplu să se uite la înainte de a lua o lovitură de cuțit la 717 00:32:16,690 --> 00:32:17,530 rezolvare. 718 00:32:17,530 --> 00:32:19,440 Acest program se numeste incrementare. 719 00:32:19,440 --> 00:32:24,320 Și se pare că acesta inițializează un număr întreg de la 1 x, în linia 18. 720 00:32:24,320 --> 00:32:25,950 Apoi am pretind x este 1. 721 00:32:25,950 --> 00:32:28,020 Apoi am mențiune de incrementare, punct, punct, punct. 722 00:32:28,020 --> 00:32:29,460 Eu numesc apoi increment. 723 00:32:29,460 --> 00:32:33,480 Dar, apoi, în linii 22 și 23, eu pretind că a fost incrementat. 724 00:32:33,480 --> 00:32:37,780 Eu pretind x este acum orice ar fi, probabil 2. 725 00:32:37,780 --> 00:32:39,770 >> Dar acest program este buggy. 726 00:32:39,770 --> 00:32:41,020 Care e problema? 727 00:32:43,450 --> 00:32:44,418 Da? 728 00:32:44,418 --> 00:32:45,668 [Neauzit] 729 00:32:49,260 --> 00:32:49,850 David J. MALAN: Exact. 730 00:32:49,850 --> 00:32:52,430 Deci x a fost declarată în mod evident pe linia 18. 731 00:32:52,430 --> 00:32:54,410 Care este în interiorul acolade principalele lui. 732 00:32:54,410 --> 00:32:58,470 Deci, răspunsul simplu este că, ei bine, există aici x. 733 00:32:58,470 --> 00:33:01,510 Ea nu există în linia 32. 734 00:33:01,510 --> 00:33:03,710 Deci, de fapt, acest program nu se va compila chiar. 735 00:33:03,710 --> 00:33:07,910 Compilator, atunci când am încerca elaborarea prezentului cod, se va țipa la mine 736 00:33:07,910 --> 00:33:13,190 despre unele identificatorul nedeclarate sau ceva în acest sens. 737 00:33:13,190 --> 00:33:13,870 De fapt, hai să încercăm. 738 00:33:13,870 --> 00:33:15,235 Acest lucru este de a face buggy4. 739 00:33:17,780 --> 00:33:18,190 Acolo este. 740 00:33:18,190 --> 00:33:22,030 Utilizarea x identificator nedeclarate în linia 32. 741 00:33:22,030 --> 00:33:25,700 Și, de fapt, să fie mai explicit aici, astăzi, astfel că acest lucru este util în 742 00:33:25,700 --> 00:33:27,140 orelor de serviciu și la domiciliu. 743 00:33:27,140 --> 00:33:29,000 Observați că e un pic criptic scris. 744 00:33:29,000 --> 00:33:31,560 Dar faptul că zăngănit are strigat la noi, spunând 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, este, de fapt util. 746 00:33:36,970 --> 00:33:41,970 Aceasta înseamnă că eroarea este pe linia 32, la poziția caracterului cinci. 747 00:33:41,970 --> 00:33:44,670 Deci, un, doi, trei, patru, cinci. 748 00:33:44,670 --> 00:33:46,640 Asta e, de fapt, în cazul în care problema este. 749 00:33:46,640 --> 00:33:49,710 Și, de asemenea, să țină cont de la ore de birou și acasă, am noroc aici. 750 00:33:49,710 --> 00:33:50,740 Am o greșeală. 751 00:33:50,740 --> 00:33:52,660 Acesta va fi relativ ușor să se stabilească. 752 00:33:52,660 --> 00:33:56,220 Dar dacă aveți un ecran plin de mesaje de eroare copleșitoare, din nou, 753 00:33:56,220 --> 00:33:59,240 dau seama că cea mai de jos s-ar putea să fie doar simptomatic de 754 00:33:59,240 --> 00:34:00,320 cele mai de sus. 755 00:34:00,320 --> 00:34:03,560 Deci, alerga mereu în jos bug-uri dvs. de sus în jos. 756 00:34:03,560 --> 00:34:06,720 Pentru că nu ar putea fi doar un efect daisy-chain care te sugerând 757 00:34:06,720 --> 00:34:09,030 au probleme mult mai mult decât tu de fapt face. 758 00:34:09,030 --> 00:34:14,989 >> Deci, cum am putea rezolva această problemă în cazul în care obiectivul meu este de a incrementa x? 759 00:34:14,989 --> 00:34:15,370 Ce-i asta? 760 00:34:15,370 --> 00:34:15,620 Bine. 761 00:34:15,620 --> 00:34:16,679 Astfel încât să putem face x la nivel mondial. 762 00:34:16,679 --> 00:34:18,860 Să luăm de comenzi rapide pe care am avertizat mai devreme. 763 00:34:18,860 --> 00:34:20,550 Dar naiba, avem nevoie doar de o soluție rapidă. 764 00:34:20,550 --> 00:34:23,949 Deci, haideți să spunem doar x int aici. 765 00:34:23,949 --> 00:34:25,600 Asta face x la nivel mondial. 766 00:34:25,600 --> 00:34:28,460 Deci, acum, principala are acces la acesta. 767 00:34:28,460 --> 00:34:31,780 Și creșterea are acces la acesta. 768 00:34:31,780 --> 00:34:33,860 Și lasă-mă merge mai departe și a compila acest lucru acum. 769 00:34:33,860 --> 00:34:36,330 Asigurați-buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Pare a compila acum. 771 00:34:37,440 --> 00:34:40,949 Să fugi buggy4, și se pare să funcționeze efectiv. 772 00:34:40,949 --> 00:34:42,780 Acum, acesta este unul din aceste lucruri - 773 00:34:42,780 --> 00:34:45,870 faci cum spun eu, nu ce fac eu, așa cum tocmai am terminat aici. 774 00:34:45,870 --> 00:34:49,239 Pentru că, în general, programele noastre sunt mergi la a lua mult mai interesant și 775 00:34:49,239 --> 00:34:50,440 mult mai mult decât asta. 776 00:34:50,440 --> 00:34:53,199 Și dacă soluția la problemele vieții se află la doar ah, a pus toate 777 00:34:53,199 --> 00:34:57,550 variabile de la partea de sus a fișierului, foarte repede face programele să 778 00:34:57,550 --> 00:34:59,700 groaznic de dificil de a gestiona. 779 00:34:59,700 --> 00:35:02,050 Ea devine mai greu să ne gândim la nume noi variabile. 780 00:35:02,050 --> 00:35:05,240 Ea devine mai greu să înțeleagă ceea ce este variabilă ce face. 781 00:35:05,240 --> 00:35:08,250 >> Și așa, în general, aceasta nu este o soluție bună. 782 00:35:08,250 --> 00:35:09,780 Deci, hai sa facem acest lucru mai bine. 783 00:35:09,780 --> 00:35:11,920 Noi nu doriți să utilizați o variabilă globală aici. 784 00:35:11,920 --> 00:35:14,050 Eu vreau să incrementa x. 785 00:35:14,050 --> 00:35:16,050 Asa ca am putut în mod evident - 786 00:35:16,050 --> 00:35:18,450 la sfârșitul zilei, e un fel de poveste prostie pentru că facem asta. 787 00:35:18,450 --> 00:35:22,050 Dar dacă nu știam despre acel operator, sau nu mi sa permis să 788 00:35:22,050 --> 00:35:27,700 schimba-l în principal sine, cum altfel aș putea să pună în aplicare Ken aici, această 789 00:35:27,700 --> 00:35:31,450 timpul nu a cub, ci pentru a incrementa? 790 00:35:31,450 --> 00:35:32,700 Cum pot schimba acest lucru aici? 791 00:35:32,700 --> 00:35:33,025 Da. 792 00:35:33,025 --> 00:35:34,275 [Neauzit] 793 00:35:37,430 --> 00:35:38,000 David J. MALAN: Bine, bine. 794 00:35:38,000 --> 00:35:40,490 Deci, de ce nu am trece în x? 795 00:35:40,490 --> 00:35:44,390 Și apoi, mai degrabă decât a reveni, de ce nu am face doar revenirea x + 1? 796 00:35:44,390 --> 00:35:46,370 Acum, lucrurile un cuplu mai multe trebuie să se schimbe aici. 797 00:35:46,370 --> 00:35:47,530 Sunt pe drumul cel bun. 798 00:35:47,530 --> 00:35:48,910 Ce altceva mai am nevoie să tweak? 799 00:35:48,910 --> 00:35:49,470 Altcineva. 800 00:35:49,470 --> 00:35:49,882 Da? 801 00:35:49,882 --> 00:35:51,530 [Neauzit] 802 00:35:51,530 --> 00:35:53,520 David J. MALAN: am nevoie pentru a schimba tipul de retur de creștere 803 00:35:53,520 --> 00:35:54,590 deoarece nu este anulat. 804 00:35:54,590 --> 00:35:56,650 Void înseamnă nimic nu se returnează. 805 00:35:56,650 --> 00:35:57,600 Dar în mod clar, acum este. 806 00:35:57,600 --> 00:36:01,280 Deci, acest lucru trebuie să se schimbe pentru a int pentru a fi în concordanță cu ceea ce 807 00:36:01,280 --> 00:36:02,580 Sunt de fapt întorc. 808 00:36:02,580 --> 00:36:04,580 >> Acum altceva este încă buggy aici. 809 00:36:04,580 --> 00:36:04,982 Da? 810 00:36:04,982 --> 00:36:06,590 [Neauzit] 811 00:36:06,590 --> 00:36:07,630 David J. MALAN: Deci, am nevoie pentru a incrementa x? 812 00:36:07,630 --> 00:36:10,336 [Neauzit] 813 00:36:10,336 --> 00:36:11,880 David J. MALAN: Ah, asa ca am nevoie pentru a trece x. 814 00:36:11,880 --> 00:36:13,300 Așa că am nevoie să fac asta aici. 815 00:36:17,590 --> 00:36:19,690 Deci prototip, trebuie să schimbe asta aici. 816 00:36:19,690 --> 00:36:21,290 Deci, acest lucru trebuie să devină un int. 817 00:36:21,290 --> 00:36:22,820 Acest lucru trebuie să devină - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 Am de fapt un bug aici. 820 00:36:24,710 --> 00:36:25,780 Să rezolva această problemă primul. 821 00:36:25,780 --> 00:36:27,990 Ce ar trebui să fie, de fapt asta? 822 00:36:27,990 --> 00:36:29,330 Așa că trebuie să fie un ceva int. 823 00:36:29,330 --> 00:36:30,340 Ar putea fi x. 824 00:36:30,340 --> 00:36:33,120 Dar, sincer, dacă începeți de asteptare toate variabilele x dumneavoastră, o să obțineți 825 00:36:33,120 --> 00:36:35,250 mai puțin și mai puțin clară, care este care. 826 00:36:35,250 --> 00:36:38,210 Așa că hai să aleagă arbitrar o convenție de denumire diferită pentru meu 827 00:36:38,210 --> 00:36:40,220 Funcțiile helper, funcțiile scriu. 828 00:36:40,220 --> 00:36:41,100 Vom numi o. 829 00:36:41,100 --> 00:36:44,500 Sau am putea-o numi - să-l numim even_number a fi chiar mai explicită. 830 00:36:44,500 --> 00:36:47,610 Deci, atunci am să se întoarcă, indiferent de numărul este de plus 1. 831 00:36:47,610 --> 00:36:49,720 Și acum am de a schimba un lucru aici și una 832 00:36:49,720 --> 00:36:50,700 Un alt lucru aici. 833 00:36:50,700 --> 00:36:54,150 Ce trebuie să se schimbe pe linia 21 primul? 834 00:36:54,150 --> 00:36:55,390 Am să le atribuie x. 835 00:36:55,390 --> 00:36:57,480 Deci, eu nu pot suna doar x incrementare. 836 00:36:57,480 --> 00:37:01,000 Am nevoie să-mi amintesc răspunsul prin schimbarea valorii lui x pe 837 00:37:01,000 --> 00:37:02,020 stânga lateral. 838 00:37:02,020 --> 00:37:04,930 Și chiar dacă x este acum pe stânga și dreapta, asta e cu totul bine, deoarece 839 00:37:04,930 --> 00:37:08,370 partea dreaptă este executat primul, apoi se plopped în stânga 840 00:37:08,370 --> 00:37:10,240 lucru manual, x, în acest caz. 841 00:37:10,240 --> 00:37:11,900 Și apoi în cele din urmă, aceasta este o repara ușor acum. 842 00:37:11,900 --> 00:37:15,080 Acest lucru trebuie să se potrivească exact ceea ce e mai jos. 843 00:37:15,080 --> 00:37:17,120 Int număr. 844 00:37:17,120 --> 00:37:17,320 >> Bine. 845 00:37:17,320 --> 00:37:20,290 Deci, o grămadă de modificări pentru o funcție foarte prost. 846 00:37:20,290 --> 00:37:24,250 Dar reprezentant al lucrurilor pe care le veți dori să facă din ce în ce. 847 00:37:24,250 --> 00:37:25,490 Deci, a face buggy4. 848 00:37:25,490 --> 00:37:26,485 Am greșit undeva. 849 00:37:26,485 --> 00:37:27,520 Oh, Doamne. 850 00:37:27,520 --> 00:37:29,660 Cinci greseli in, cum ar fi, un program de șase line. 851 00:37:29,660 --> 00:37:36,500 Deci, ce e în neregulă pe linia 18, caracterul 5? 852 00:37:36,500 --> 00:37:36,970 Bine. 853 00:37:36,970 --> 00:37:39,330 Așa că trebuie să declare acest lucru int. 854 00:37:39,330 --> 00:37:39,630 Bine. 855 00:37:39,630 --> 00:37:41,790 Deci, haideți să vedem, o grămadă de alte erori. 856 00:37:41,790 --> 00:37:42,230 Oh, Doamne. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Dar, din nou, să debifați ecran - 859 00:37:46,020 --> 00:37:48,660 L de control aici - și re-run zăngănit. 860 00:37:48,660 --> 00:37:51,340 Deci, cinci probleme este de fapt doar asta. 861 00:37:51,340 --> 00:37:53,500 Deci, acum să ruleze buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 Uau. 863 00:37:54,150 --> 00:37:57,434 x a fost incrementat corect. 864 00:37:57,434 --> 00:37:58,420 >> Bine. 865 00:37:58,420 --> 00:38:01,700 Orice întrebări cu privire la modul de a incrementa numere? 866 00:38:01,700 --> 00:38:02,896 Da? 867 00:38:02,896 --> 00:38:06,864 DIFUZOR 2: De ce este că puteți schimba doar x la numărul în variabila 868 00:38:06,864 --> 00:38:08,860 numi și o să știu ce vrei să spui? 869 00:38:08,860 --> 00:38:09,600 David J. MALAN: Bună întrebare. 870 00:38:09,600 --> 00:38:13,130 Cum se face că eu pot schimba doar x la numărul și programul va ști 871 00:38:13,130 --> 00:38:13,990 imediat? 872 00:38:13,990 --> 00:38:16,120 Deci, din nou, cred ca e asta abstractizare. 873 00:38:16,120 --> 00:38:20,110 Deci, dacă eu sunt principala si Ken este incrementală, sincer, nu-mi pasă 874 00:38:20,110 --> 00:38:21,540 ceea ce Ken numește iPad lui. 875 00:38:21,540 --> 00:38:25,350 Nu-mi pasă ce el numește ceva care are de a face cu punerea în aplicare sa 876 00:38:25,350 --> 00:38:26,550 din această funcționalitate. 877 00:38:26,550 --> 00:38:32,130 Deci, acesta este un detaliu de implementare pe care am, principal, nu 878 00:38:32,130 --> 00:38:33,010 Trebuie să aibă grijă despre. 879 00:38:33,010 --> 00:38:37,440 Și așa pur și simplu schimbarea în mod constant în interiorul funcției, numărul de aici 880 00:38:37,440 --> 00:38:41,340 și numărul de aici, este tot ce durează atât de mult cât am recompilați. 881 00:38:41,340 --> 00:38:43,820 E un fel de, dacă credeți despre - mulți dintre noi, cei dintre voi cu șofer 882 00:38:43,820 --> 00:38:46,590 licențe care au condus, sau în cazul în care ați condus chiar și într-o mașină - 883 00:38:46,590 --> 00:38:50,710 cele mai multe dintre noi nu au nici o idee cum functioneaza o masina sub capota. 884 00:38:50,710 --> 00:38:54,710 Și literal, dacă vă deschideți capota, cele mai multe dintre noi - inclusiv eu - 885 00:38:54,710 --> 00:38:56,580 nu sunt de gând să știu cu adevărat ce ne uita la. 886 00:38:56,580 --> 00:38:58,850 Un fel de v-ar simti cu chestii de genul asta acum. 887 00:38:58,850 --> 00:39:01,380 Dar noi nu avem într-adevăr să aibă grijă cum functioneaza masina. 888 00:39:01,380 --> 00:39:05,000 Noi nu trebuie să aibă grijă ce toate tije și pistoanele și cabluri din interiorul 889 00:39:05,000 --> 00:39:07,700 auto sunt, de fapt fac. 890 00:39:07,700 --> 00:39:11,360 >> Deci, ceva de genul ceea ce voi numiți cu piston nu contează 891 00:39:11,360 --> 00:39:11,920 aici, în acest caz. 892 00:39:11,920 --> 00:39:12,490 Aceeași idee. 893 00:39:12,490 --> 00:39:12,670 Da? 894 00:39:12,670 --> 00:39:13,920 [Neauzit] 895 00:39:25,250 --> 00:39:29,530 David J. MALAN: Dacă ar exista mai multe utilizări ale momentului variabila xa în urmă, 896 00:39:29,530 --> 00:39:32,220 te, programator, ar trebui să le schimbe peste tot. 897 00:39:32,220 --> 00:39:35,230 Sau ai putea face literalmente fișier, Meniu, iar apoi Find / Înlocuire, 898 00:39:35,230 --> 00:39:36,270 ceva de genul asta. 899 00:39:36,270 --> 00:39:40,110 Dar aveți de gând să aibă de a face aceste modificări tine. 900 00:39:40,110 --> 00:39:41,200 Trebuie să fie consecvente. 901 00:39:41,200 --> 00:39:42,450 [Neauzit] 902 00:39:47,200 --> 00:39:48,960 David J. MALAN: Un ordin special ca aici? 903 00:39:48,960 --> 00:39:52,660 În cazul în care acest lucru a fost un alt număr de int? 904 00:39:52,660 --> 00:39:52,940 Da. 905 00:39:52,940 --> 00:39:56,430 Deci, scopul conteaza, atunci când sunt de asteptare funcția. 906 00:39:56,430 --> 00:40:00,350 Deci, dacă am fost de asteptare incrementului aici cu ceva virgulă ceva, 907 00:40:00,350 --> 00:40:01,400 există o mapare directă. 908 00:40:01,400 --> 00:40:04,490 Variabilă în primul rând, orice se numește, în care se face o copie a primei 909 00:40:04,490 --> 00:40:05,480 Argumentul aici. 910 00:40:05,480 --> 00:40:07,280 Ne pare rău, acest lucru nu ar trebui să fie o paranteză. 911 00:40:07,280 --> 00:40:09,300 Liniile doilea argument până cu cea de a doua. 912 00:40:09,300 --> 00:40:11,220 >> Deci ordine, da, materie. 913 00:40:11,220 --> 00:40:11,490 Bine. 914 00:40:11,490 --> 00:40:13,360 Îmi pare rău că a luat un drum lung pentru a ajunge acolo. 915 00:40:13,360 --> 00:40:14,610 Alte întrebări? 916 00:40:16,460 --> 00:40:16,850 Bine. 917 00:40:16,850 --> 00:40:20,300 Deci, hai sa vedem daca nu putem picta o imagine a ceea ce se întâmplă de fapt pe 918 00:40:20,300 --> 00:40:22,160 aici sub capota, ca să spunem așa. 919 00:40:22,160 --> 00:40:26,310 Deci, aceasta este un dreptunghi care ar putea reprezenta memoria computerului. 920 00:40:26,310 --> 00:40:31,240 Deci, chiar dacă nu aveți nici o idee cât de memorie functioneaza sau modul în care funcționează RAM, cel puțin 921 00:40:31,240 --> 00:40:33,590 presupunem că aveți legături de ea in aceste zile. 922 00:40:33,590 --> 00:40:34,740 Ai megabytes de ea. 923 00:40:34,740 --> 00:40:35,760 Ai gigabytes de ea. 924 00:40:35,760 --> 00:40:40,690 Și știm de la zero săptămâni că un octet este doar ceea ce? 925 00:40:40,690 --> 00:40:41,280 8 biți. 926 00:40:41,280 --> 00:40:42,730 Corect, deci 8 zerouri și cele. 927 00:40:42,730 --> 00:40:46,300 Deci, în cazul în care computerul are un gig de RAM, două concerte de RAM aceste zile, aveți o 928 00:40:46,300 --> 00:40:54,450 sau 2 miliarde de miliard de octeți de memorie, sau aproximativ 8 miliarde euro sau 16 miliarde 929 00:40:54,450 --> 00:40:56,560 biți, în interiorul computerului. 930 00:40:56,560 --> 00:40:59,710 Acum, spre deosebire de exemplul lanos mic Willy, nu e particule magnetice 931 00:40:59,710 --> 00:41:00,560 de obicei mai. 932 00:41:00,560 --> 00:41:04,470 Din ce în ce, în laptop-uri, cel puțin, e drive-uri solid de stat, SSD-uri, care 933 00:41:04,470 --> 00:41:05,560 doar nu au nici piese în mișcare. 934 00:41:05,560 --> 00:41:06,710 Totul e electronic. 935 00:41:06,710 --> 00:41:08,070 E toată energia electrică pe baza. 936 00:41:08,070 --> 00:41:12,360 Deci, cred că, deși, din acest dreptunghi ca reprezentând doar unul sau două 937 00:41:12,360 --> 00:41:13,930 gigabytes de memorie pe care le au. 938 00:41:13,930 --> 00:41:15,500 >> Deci e un segment de memorie. 939 00:41:15,500 --> 00:41:20,460 Acum, lumea științei computer are un fel de bucăți partiționate pe de 940 00:41:20,460 --> 00:41:22,570 de memorie pentru a face lucruri diferite. 941 00:41:22,570 --> 00:41:25,930 Deci, de exemplu, în cazul în care acest lucru este memoria RAM a computerului - după cum a sugerat 942 00:41:25,930 --> 00:41:30,400 dreptunghi acolo - se dovedește că, prin convenție, în partea de sus a RAM-ul, astfel încât 943 00:41:30,400 --> 00:41:33,170 de a vorbi, este, în general, ceea ce se numește un segment de text. 944 00:41:33,170 --> 00:41:35,910 Acestea sunt zerourile și cele pe care le-ați compilate. 945 00:41:35,910 --> 00:41:39,040 Așa că atunci când ne-am uitat sub capota la ceea ce este a.out, toate 946 00:41:39,040 --> 00:41:40,360 de zerouri și cele - 947 00:41:40,360 --> 00:41:44,000 atunci când executați un program, aceste zerouri și cele sunt încărcate de pe hard dvs. 948 00:41:44,000 --> 00:41:46,290 unitatea în ceva numit RAM. 949 00:41:46,290 --> 00:41:48,950 Și în memoria RAM, acestea sunt puse la partea de sus. 950 00:41:48,950 --> 00:41:50,330 Acum Între timp, aveți alte lucruri. 951 00:41:50,330 --> 00:41:53,060 Datele inițializată, date neinițializate. 952 00:41:53,060 --> 00:41:56,440 Aceste două brazde de memorie se referă la variabile globale, care 953 00:41:56,440 --> 00:41:57,530 nu folosiți des. 954 00:41:57,530 --> 00:42:00,630 Dar, uneori, dacă ai face, ei sfârșesc acolo, de asemenea. 955 00:42:00,630 --> 00:42:01,620 Apoi, există alte lucruri. 956 00:42:01,620 --> 00:42:04,130 Variabile de mediu, pe care nu vom petrece mult timp departe. 957 00:42:04,130 --> 00:42:06,120 Dar, apoi, două lucruri importante care vor reveni pe parcursul acestui 958 00:42:06,120 --> 00:42:08,130 semestru, stiva si heap. 959 00:42:08,130 --> 00:42:12,280 >> Deci, cele mai multe dintre memoria calculatorului este rezervat când se rulează un program pentru 960 00:42:12,280 --> 00:42:14,880 ceva numit stivă și ceva numit heap. 961 00:42:14,880 --> 00:42:16,940 Și nu vom vorbi despre heap astăzi, dar vom 962 00:42:16,940 --> 00:42:18,180 vorbesc despre stiva. 963 00:42:18,180 --> 00:42:22,910 Și stiva este menit să evoca vizual ca și cum sala de mese 964 00:42:22,910 --> 00:42:26,120 tăvi de masă în Mather House, sau ori de câte ori se întâmplă să fie, în cazul în care 965 00:42:26,120 --> 00:42:27,810 sala de mese personalului curățați-le în fiecare zi. 966 00:42:27,810 --> 00:42:30,180 Le adune de la podea pe sus. 967 00:42:30,180 --> 00:42:33,800 Și în mod similar în memorie, nu există această idee de a pune ceva pe o 968 00:42:33,800 --> 00:42:36,740 stivă, pune ceva pe o stivă, pune ceva pe o stivă. 969 00:42:36,740 --> 00:42:38,000 Si ce ne spun prin aceasta? 970 00:42:38,000 --> 00:42:41,430 Ei bine, hai să mări doar pe jumătatea inferioară a acestui tablou, computerului 971 00:42:41,430 --> 00:42:43,990 RAM, să propună următorul. 972 00:42:43,990 --> 00:42:48,300 Se pare că, atunci când executați un program ca a.out sau hello, indiferent de 973 00:42:48,300 --> 00:42:49,920 programul este că ați scris, 974 00:42:49,920 --> 00:42:53,030 din nou, aceste zerouri și cele sunt încărcate de pe hard disk-ul - care este 975 00:42:53,030 --> 00:42:56,190 depozitarea pe termen lung, rămâne acolo chiar și atunci când vă trageți plug - 976 00:42:56,190 --> 00:42:57,220 încărcate în memoria RAM. 977 00:42:57,220 --> 00:42:59,020 RAM este mai rapid decât hard disk-uri. 978 00:42:59,020 --> 00:43:00,700 E mai mic decât hard disk-uri. 979 00:43:00,700 --> 00:43:03,490 Dar e în cazul în care programele locuiesc în timp ce le execută. 980 00:43:03,490 --> 00:43:06,380 >> Deci, faceți dublu clic pe un program de un Mac sau un PC - aceasta e încărcată de la 981 00:43:06,380 --> 00:43:07,750 unitatea hard disk în memoria RAM. 982 00:43:07,750 --> 00:43:11,760 De îndată ce este încărcat în memoria RAM, zerourile și cele du-te în partea de sus calea, 983 00:43:11,760 --> 00:43:13,130 așa-numita segmente de text. 984 00:43:13,130 --> 00:43:17,040 Dar apoi, cât mai curând program de fapt începe să curgă, principalul 985 00:43:17,040 --> 00:43:18,140 Funcția se numește. 986 00:43:18,140 --> 00:43:21,070 Și principal, așa cum am văzut, are adesea variabile locale. 987 00:43:21,070 --> 00:43:24,560 Și are Ints și siruri de caractere și caractere și similare. 988 00:43:24,560 --> 00:43:28,300 Deci, dacă programul dumneavoastră că ați scris sau programul pe care îl aveți 989 00:43:28,300 --> 00:43:33,680 dublu clic folosit unele variabile în interiorul principal, acestea ajung la 990 00:43:33,680 --> 00:43:37,020 partea de jos a stiva de memorie, ca să spunem așa. 991 00:43:37,020 --> 00:43:39,160 Acum, mai concret, ce înseamnă de fapt? 992 00:43:39,160 --> 00:43:44,080 Acest lucru înseamnă doar că, dacă am fost de gând la numărul de lucruri - 993 00:43:44,080 --> 00:43:49,380 daca am fost de gând să numarul de bytes de RAM pe calculator, observați că 994 00:43:49,380 --> 00:43:51,650 acest lucru ar putea fi zero numărul de octet. 995 00:43:51,650 --> 00:43:56,130 Acest lucru ar putea fi numărul de octet unu, doi, trei, patru, cinci, șase, toate 996 00:43:56,130 --> 00:43:57,290 drumul până să-mi placă - 997 00:43:57,290 --> 00:44:01,520 2 miliarde ar fi tot drumul până acolo la partea de sus. 998 00:44:01,520 --> 00:44:05,960 Deci, cu alte cuvinte, atunci când vorbim despre memoria RAM sau în termeni de octeți, aceasta 999 00:44:05,960 --> 00:44:09,680 înseamnă doar că cineva a decis ce la numărul de fiecare 1000 00:44:09,680 --> 00:44:11,110 aceste bucăți de memorie. 1001 00:44:11,110 --> 00:44:16,950 >> Deci, atunci când aveți nevoie de 32 biti pentru un int, sau aveți nevoie de 8 biți pentru un char, în cazul în care 1002 00:44:16,950 --> 00:44:18,320 nu ajung în memorie? 1003 00:44:18,320 --> 00:44:20,650 Ei bine conceptual, ajung doar până la partea de jos a acestei 1004 00:44:20,650 --> 00:44:21,780 lucru numit stivă. 1005 00:44:21,780 --> 00:44:25,670 Dar ceea ce este interesant este acum când apelează o funcție principală. 1006 00:44:25,670 --> 00:44:28,830 Să presupunem că o funcție numită foo, doar un nume arbitrar. 1007 00:44:28,830 --> 00:44:32,480 Ce se întâmplă este principal este de la partea de jos a acestei stivei de memorie. 1008 00:44:32,480 --> 00:44:35,630 Foo acum se pune pe partea de sus a principal în memorie. 1009 00:44:35,630 --> 00:44:40,020 Deci, orice variabile locale, care foo a ajunge un fel de conceptual de mai sus 1010 00:44:40,020 --> 00:44:40,770 cele din principal. 1011 00:44:40,770 --> 00:44:46,920 În cazul în care solicită o altă funcție foo bar numit, aceste variabile ajung aici. 1012 00:44:46,920 --> 00:44:49,790 Dacă bara solicită altceva, aici, aici, aici. 1013 00:44:49,790 --> 00:44:53,900 Deci, ce e interesant despre executarea unui program este ca pe masura ce numesc funcții, 1014 00:44:53,900 --> 00:44:57,720 și în care aceste funcții apel funcții, și ca aceste funcții apel funcții, 1015 00:44:57,720 --> 00:45:00,980 vă construi acest teanc de funcții în memorie. 1016 00:45:00,980 --> 00:45:06,740 Și numai o dată la funcția întoarce începi obtinerea că memoria înapoi. 1017 00:45:06,740 --> 00:45:11,190 Deci, una dintre cele mai simple moduri de a alerga afară de memorie într-un program de calculator este de a 1018 00:45:11,190 --> 00:45:14,170 scrie funcții care nu returnează. 1019 00:45:14,170 --> 00:45:16,650 >> Deci, de exemplu, să demonstreze la fel de mult cu un 1020 00:45:16,650 --> 00:45:18,460 în mod intenționat buggy programului. 1021 00:45:18,460 --> 00:45:24,690 Lasă-mă să merg mai departe și nu includ # , int main (void). 1022 00:45:24,690 --> 00:45:31,270 Și am de gând să fac în timp ce (2> 1), care, probabil, nu va niciodată 1023 00:45:31,270 --> 00:45:33,370 schimba pe noi. 1024 00:45:33,370 --> 00:45:37,720 Și lasă-mă să merg mai departe și de a face acum printf. 1025 00:45:37,720 --> 00:45:39,950 De fapt, asta va fi mai puțin interesant vizual. 1026 00:45:39,950 --> 00:45:40,460 Hai să facem asta. 1027 00:45:40,460 --> 00:45:44,840 Pentru int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Hai să facem această greșeală, i + +. 1029 00:45:49,740 --> 00:45:51,150 Și să nu printf aici. 1030 00:45:51,150 --> 00:45:52,550 Să practica ceea ce am fost predica. 1031 00:45:52,550 --> 00:45:54,090 Să aveți o metodă aici. 1032 00:45:54,090 --> 00:46:00,860 Cor anulate, iar noi vom spune: int i. 1033 00:46:00,860 --> 00:46:02,295 Și apoi am de gând să spun, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, hai să facem asta mai interesant. 1035 00:46:06,790 --> 00:46:08,350 Să nu imprima nimic, la toate. 1036 00:46:08,350 --> 00:46:10,530 Hai să facem asta. 1037 00:46:10,530 --> 00:46:11,780 Refren (i). 1038 00:46:16,630 --> 00:46:17,000 >> Bine. 1039 00:46:17,000 --> 00:46:20,040 Deci, aceasta este buggy, deoarece de ce? 1040 00:46:20,040 --> 00:46:22,850 Fac asta ca merg, deoarece programul nu face de fapt nimic 1041 00:46:22,850 --> 00:46:23,420 de interes. 1042 00:46:23,420 --> 00:46:24,670 Dar asta nu e gol. 1043 00:46:24,670 --> 00:46:30,440 Scopul este de a scrie un program a cărui funcție principală ce face, aparent? 1044 00:46:30,440 --> 00:46:31,370 Suna sine. 1045 00:46:31,370 --> 00:46:32,600 Și, de fapt, nu avem nevoie de bucla. 1046 00:46:32,600 --> 00:46:36,070 Să simplifica chiar și acest lucru doar în așa fel încât să nu se piardă din vedere cu adevărat 1047 00:46:36,070 --> 00:46:37,310 fundamentală bug. 1048 00:46:37,310 --> 00:46:39,200 Solicită Principalele cor să cânte niște cor. 1049 00:46:39,200 --> 00:46:41,760 Apoi am făcut o prostie, si am avut apel refren refren pentru că am presupus 1050 00:46:41,760 --> 00:46:43,550 altcineva a fost de gând să-l pună în aplicare poate. 1051 00:46:43,550 --> 00:46:45,960 Iar acum acest lucru nu se va compila încă. 1052 00:46:45,960 --> 00:46:48,340 Trebuie să fac ce? 1053 00:46:48,340 --> 00:46:49,700 Am nevoie de prototip, amintiți. 1054 00:46:49,700 --> 00:46:55,520 Așa că am nevoie să aibă până aici, cor void (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> Deci, acum, daca ma duc aici - 1056 00:46:57,470 --> 00:46:59,030 De fapt, hai să utilizați fereastra mai mare. 1057 00:46:59,030 --> 00:47:01,670 Să mergem mai departe și să facă cor. 1058 00:47:01,670 --> 00:47:06,000 Să mergem mai departe și să facă cor. 1059 00:47:06,000 --> 00:47:08,302 Utilizarea declarantul neidentificate i. 1060 00:47:08,302 --> 00:47:09,860 Oh, asta a fost o prostie. 1061 00:47:09,860 --> 00:47:11,020 Nu avem nevoie de argument. 1062 00:47:11,020 --> 00:47:13,680 Hai să facem asta. 1063 00:47:13,680 --> 00:47:14,550 Doresc am inceput acest drum. 1064 00:47:14,550 --> 00:47:16,160 Acesta ar fi fost un program mult mai ușor să scrie. 1065 00:47:16,160 --> 00:47:20,100 Deci nu. 1066 00:47:20,100 --> 00:47:23,870 Acum hai să mergem pe la fereastra terminalul meu, re-run zăngănit. 1067 00:47:23,870 --> 00:47:26,900 Și aici vom merge. 1068 00:47:26,900 --> 00:47:28,020 Asta a fost foarte rapid. 1069 00:47:28,020 --> 00:47:30,690 Ce sa întâmplat de fapt, doar, totuși? 1070 00:47:30,690 --> 00:47:33,430 Ei bine, acum voi adăuga linia de imprimare, astfel încât să putem vedea. 1071 00:47:33,430 --> 00:47:41,330 Deci, permiteți-mi să spun printf, să zicem, eu sunt aici. 1072 00:47:41,330 --> 00:47:43,470 Bine, nu variabile, ne vom lăsa așa. 1073 00:47:43,470 --> 00:47:44,860 Lasă-mă să re-rula fac. 1074 00:47:44,860 --> 00:47:47,940 Lasă-mă să re-run cor. 1075 00:47:47,940 --> 00:47:51,235 Și haide. 1076 00:47:53,880 --> 00:47:55,130 Continuă. 1077 00:47:57,630 --> 00:47:59,750 Ca o paranteza, de ce nu a sa prăbușit încă? 1078 00:47:59,750 --> 00:48:02,050 Eroare de segmentare sa întâmplat super rapid înainte. 1079 00:48:02,050 --> 00:48:04,250 [Neauzit] 1080 00:48:04,250 --> 00:48:04,830 David J. MALAN: Exact. 1081 00:48:04,830 --> 00:48:06,350 Deci, este nevoie de timp pentru a imprima. 1082 00:48:06,350 --> 00:48:08,370 Este nevoie doar de mai mult de lucru pe partea computerului. 1083 00:48:08,370 --> 00:48:09,550 Și acolo este. 1084 00:48:09,550 --> 00:48:10,620 Segmentarea vina. 1085 00:48:10,620 --> 00:48:12,140 >> Deci, observați cât de programe rapide a alerga. 1086 00:48:12,140 --> 00:48:14,110 Dacă nu sunteți de imprimare nimic, super rapid. 1087 00:48:14,110 --> 00:48:18,100 Dar avem încă această eroare de segmentare pentru că ceea ce se întâmplă? 1088 00:48:18,100 --> 00:48:21,310 Ei bine, dacă te gândești la modul în care memoria computerului este stabilită, această 1089 00:48:21,310 --> 00:48:22,890 se întâmplă să fie principal. 1090 00:48:22,890 --> 00:48:23,800 Dar aici - 1091 00:48:23,800 --> 00:48:28,670 hai sa numim doar acest cor, și hai să numim acest cor. 1092 00:48:28,670 --> 00:48:33,420 Și acum, dacă eu fac estetica mele drept, acest lucru este doar de gând să spun cor, 1093 00:48:33,420 --> 00:48:38,060 cor, cor, cor, cor, cor, cor, nauseum anunț. 1094 00:48:38,060 --> 00:48:39,920 Și în cele din urmă, ceea ce se va întâmpla? 1095 00:48:39,920 --> 00:48:46,690 Dacă imaginea de ansamblu este literalmente acest lucru, ceea ce se întâmplă pur și simplu conceptual? 1096 00:48:46,690 --> 00:48:48,320 Depășirile coșul de fum heap. 1097 00:48:48,320 --> 00:48:52,400 Sau mai rău, ai depășit totul, inclusiv segmentul de text, care este 1098 00:48:52,400 --> 00:48:54,530 de zerouri și cele care reprezintă programul dumneavoastră. 1099 00:48:54,530 --> 00:48:56,690 Pe scurt, aceasta este doar rău super, super. 1100 00:48:56,690 --> 00:48:56,860 Corect? 1101 00:48:56,860 --> 00:48:58,620 Programul tău a scăpat de sub control. 1102 00:48:58,620 --> 00:49:02,840 Te folosind memorie mult mai mult decât ați intenționat toate din cauza unui prost 1103 00:49:02,840 --> 00:49:03,920 greșeală, în acest caz. 1104 00:49:03,920 --> 00:49:08,160 Sau, în acest caz, o functie foarte deliberat făcut ea însăși de asteptare. 1105 00:49:08,160 --> 00:49:09,210 Acum, acest lucru nu este așa de rău. 1106 00:49:09,210 --> 00:49:12,540 Funcții de asteptare s-au de fapt, are o mare putere 1107 00:49:12,540 --> 00:49:13,700 atunci când este utilizat în mod corect. 1108 00:49:13,700 --> 00:49:15,650 Eu nu l-am folosit corect aici. 1109 00:49:15,650 --> 00:49:16,940 >> Deci, acest lucru nu este așa de rău. 1110 00:49:16,940 --> 00:49:20,620 Dar faptul că nu m-am opri de fapt, de asteptare mine este un drept fundamental 1111 00:49:20,620 --> 00:49:23,050 slăbiciune aici, de acest program. 1112 00:49:23,050 --> 00:49:25,090 Deci, unde mergem cu toate astea? 1113 00:49:25,090 --> 00:49:26,230 Ei bine, ce se întâmplă cu adevărat? 1114 00:49:26,230 --> 00:49:30,010 Când am apela funcția creștere, ca și cum făceam în aceste exemple, 1115 00:49:30,010 --> 00:49:33,290 Am o valoare cum ar fi 1, care trec inch 1116 00:49:33,290 --> 00:49:35,820 Trec într-o copie a numărul unu. 1117 00:49:35,820 --> 00:49:37,080 Deci, se întâmplă următoarele. 1118 00:49:37,080 --> 00:49:40,390 Așa că hai să mergem în exemplul incrementului. 1119 00:49:40,390 --> 00:49:44,230 Și tipul ăsta chiar aici. 1120 00:49:44,230 --> 00:49:46,800 Deci, aici e ceea ce se intampla de fapt. 1121 00:49:46,800 --> 00:49:50,770 Când i-am sunat creștere, iar eu trec în x, pictural ce e 1122 00:49:50,770 --> 00:49:53,660 se întâmplă aici este aceasta - 1123 00:49:53,660 --> 00:50:00,240 dacă am valoare de 1 depozitate aici, iar eu sun de fapt creștere, care 1124 00:50:00,240 --> 00:50:02,680 acum se numește cor - 1125 00:50:02,680 --> 00:50:04,010 Da, asta ma aruncat de pe aici. 1126 00:50:04,010 --> 00:50:06,750 Deci, hai să numim această creștere. 1127 00:50:06,750 --> 00:50:09,420 Și nu știm ce această funcție următoare va fi. 1128 00:50:09,420 --> 00:50:14,270 Deci, ce se intampla de fapt este pe aici pe undeva, în principal, am o bucată de 1129 00:50:14,270 --> 00:50:16,670 de memorie care este stocarea numărul 1. 1130 00:50:16,670 --> 00:50:19,730 Când m-am apel creștere, eu sunt, folosind un alt segment de memorie, dar acum am 1131 00:50:19,730 --> 00:50:20,840 au copia 1. 1132 00:50:20,840 --> 00:50:25,480 Când m-am incrementa această valoare, aceasta devine 2 - oribil scris pe 1133 00:50:25,480 --> 00:50:26,420 Ecranul aici. 1134 00:50:26,420 --> 00:50:30,550 Dar atunci, ce se întâmplă cât mai curând se întoarce de creștere? 1135 00:50:30,550 --> 00:50:34,610 Această memorie se doar dat înapoi la sistemul de operare, ceea ce înseamnă toate 1136 00:50:34,610 --> 00:50:37,470 ai facut nimic util. 1137 00:50:37,470 --> 00:50:43,460 Cel care a fost inițial incluse în principal, de fapt este încă acolo. 1138 00:50:43,460 --> 00:50:44,650 >> Deci, unde mergem cu asta? 1139 00:50:44,650 --> 00:50:49,400 Ei bine, se pare că, în memoria aveți această back to back secvență de 1140 00:50:49,400 --> 00:50:50,940 octeți pe care le poti pune chestii inch 1141 00:50:50,940 --> 00:50:53,760 Și se pare că le-am văzut deja ceva care implica punerea 1142 00:50:53,760 --> 00:50:55,100 lucrurile spate în spate la spate în spate. 1143 00:50:55,100 --> 00:51:00,170 Ce este un șir de caractere, bazat pe o saptamana, iar acum doua saptamani? 1144 00:51:00,170 --> 00:51:01,840 Deci e doar o colecție de caractere. 1145 00:51:01,840 --> 00:51:05,290 Deci, se dovedește, la fel cum puteți pune numere în memorie, în mod similar puteți 1146 00:51:05,290 --> 00:51:06,900 pune de caractere în memorie. 1147 00:51:06,900 --> 00:51:09,810 Și, odată ce vom începe caractere punerea în memorie spate în spate în spate pentru a 1148 00:51:09,810 --> 00:51:12,800 înapoi, se dovedește că utilizarea simplă a lucrurilor pentru ca o buclă sau 1149 00:51:12,800 --> 00:51:14,510 o buclă în timp ce, putem itera - 1150 00:51:14,510 --> 00:51:17,130 de la stânga la dreapta de-a lungul caractere dintr-un șir - 1151 00:51:17,130 --> 00:51:20,720 și începe să masaj-le in diferite personaje cu totul. 1152 00:51:20,720 --> 00:51:25,550 A ar putea deveni B. B ar putea deveni în cele din urmă C. Așa că, putem lua o 1153 00:51:25,550 --> 00:51:28,830 Teză engleză care face de fapt sens și de a converti fiecare dintre cele 1154 00:51:28,830 --> 00:51:32,440 Scrisori de una la un moment de mers pe jos prin memoria calculatorului nostru a plecat la 1155 00:51:32,440 --> 00:51:34,300 dreptul de a cripta de fapt. 1156 00:51:34,300 --> 00:51:36,590 >> Așa că haideți să ne cinci minute pauză aici, și când ne întoarcem, vă vom 1157 00:51:36,590 --> 00:51:39,060 începe acest proces de codare de informații. 1158 00:51:41,640 --> 00:51:43,180 >> Bine. 1159 00:51:43,180 --> 00:51:48,440 Deci, înainte de a ne scufunda la anumite Crypto si aceste lucruri numite matrice, permiteți-mi să 1160 00:51:48,440 --> 00:51:51,610 pauză pentru orice întrebări pentru că mă simt ca și cum aș într-adevăr un fel de confuze unora dintre 1161 00:51:51,610 --> 00:51:52,230 aceste subiecte. 1162 00:51:52,230 --> 00:51:53,940 Așa că hai să stabilească acum dacă putem. 1163 00:51:53,940 --> 00:51:56,480 Așa că ne-am vorbit despre valorile de returnare. 1164 00:51:56,480 --> 00:51:58,630 Am vorbit despre argumente. 1165 00:51:58,630 --> 00:52:02,330 Și am vorbit despre această noțiune, pe care vom reveni în următoarele săptămâni 1166 00:52:02,330 --> 00:52:07,140 vin, de care vizionează memorie ca o gramada de aceste stivuite 1167 00:52:07,140 --> 00:52:08,540 tăvi, ca să spunem așa. 1168 00:52:08,540 --> 00:52:13,460 De jos in sus, astfel încât fiecare tavă pe care se pune pe stiva reprezinta 1169 00:52:13,460 --> 00:52:15,160 o funcție care este în prezent fiind numit. 1170 00:52:17,970 --> 00:52:20,300 Alte întrebări? 1171 00:52:20,300 --> 00:52:22,890 Deci, cum despre - permiteți-mi să încerc a pune o întrebare. 1172 00:52:22,890 --> 00:52:25,520 I a păstra rasfat asta, dar acum este - L-ai vazut tot chipul băiatului. 1173 00:52:25,520 --> 00:52:27,020 Deci, ne vom întoarce la asta. 1174 00:52:27,020 --> 00:52:29,700 >> Așa că lasă-mă să pun o întrebare aici. 1175 00:52:29,700 --> 00:52:34,810 Lasă-mă să simplifice această înapoi la ceea ce a fost înainte o parte din Q & A. noastre anterioare 1176 00:52:34,810 --> 00:52:41,730 Și faptul că creșterea are paranteză deschisă, numărul de int, închis 1177 00:52:41,730 --> 00:52:42,260 paranteză. 1178 00:52:42,260 --> 00:52:46,370 Ce înseamnă numărul de int reprezinta? 1179 00:52:46,370 --> 00:52:47,250 [Neauzit] 1180 00:52:47,250 --> 00:52:47,870 David J. MALAN: Un argument. 1181 00:52:47,870 --> 00:52:50,732 Bine, dar ce e un argument? 1182 00:52:50,732 --> 00:52:51,620 [Neauzit] 1183 00:52:51,620 --> 00:52:52,500 David J. MALAN: Îmi pare rău, ce e asta? 1184 00:52:52,500 --> 00:52:53,150 DIFUZOR 3: Ceva ce treci inch 1185 00:52:53,150 --> 00:52:53,570 David J. MALAN: Ok. 1186 00:52:53,570 --> 00:52:54,780 Deci, ceva care te treci inch 1187 00:52:54,780 --> 00:52:56,560 Și mai mult, în general, e doar de intrare. 1188 00:52:56,560 --> 00:52:59,860 Dacă sunteți scris o funcție și scop care funcția lui în viață este de a face 1189 00:52:59,860 --> 00:53:03,290 ceva un pic diferit de fiecare dată când îl utilizați, apoi singura cale pentru 1190 00:53:03,290 --> 00:53:07,710 care să se întâmple într-adevăr ar părea să fie să îi furnizeze cu intrare, astfel încât să 1191 00:53:07,710 --> 00:53:10,180 poate face ceva diferit cu care de fiecare dată de intrare. 1192 00:53:10,180 --> 00:53:13,590 >> Deci, trebuie să specificați două lucruri atunci când o functie are intrări. 1193 00:53:13,590 --> 00:53:17,240 Ai nevoie de a specifica numele pe care doriți să dea la intrare, exclusiv pentru 1194 00:53:17,240 --> 00:53:20,790 comoditatea ta, astfel încât să se poate referi la ea în funcția pe care ați 1195 00:53:20,790 --> 00:53:23,610 te sunt scris, așa cum am făcut-o aici, în linia 32. 1196 00:53:23,610 --> 00:53:27,840 Dar de asemenea, trebuie să specificați tipul său, deoarece C este un limbaj de programare 1197 00:53:27,840 --> 00:53:28,840 ca doar cere 1198 00:53:28,840 --> 00:53:31,810 că, dacă doriți o variabilă, trebuie să spun calculatorului ce 1199 00:53:31,810 --> 00:53:32,790 tip de date este, 1200 00:53:32,790 --> 00:53:35,540 în mare parte, astfel încât să știe cât de multe biți pentru a 1201 00:53:35,540 --> 00:53:37,230 alocă pentru variabila. 1202 00:53:37,230 --> 00:53:38,600 Deoarece ar putea fi sase - 1203 00:53:38,600 --> 00:53:39,990 Ne pare rău, nu va fi șase. 1204 00:53:39,990 --> 00:53:41,050 Acesta poate fi de 16. 1205 00:53:41,050 --> 00:53:41,630 Acesta poate fi 8. 1206 00:53:41,630 --> 00:53:44,410 Acesta poate fi de 32, chiar 64. 1207 00:53:44,410 --> 00:53:45,820 Dar calculatorul trebuie să știe. 1208 00:53:45,820 --> 00:53:49,110 Acum, int pe partea stângă reprezintă ceea ce, prin contrast? 1209 00:53:52,825 --> 00:53:53,780 [Neauzit] 1210 00:53:53,780 --> 00:53:54,570 David J. MALAN: Ce e asta? 1211 00:53:54,570 --> 00:53:55,390 [Neauzit] 1212 00:53:55,390 --> 00:53:57,920 David J. MALAN: tipul de funcție și, mai precis, 1213 00:53:57,920 --> 00:53:59,755 Tipul din producția sa. 1214 00:53:59,755 --> 00:54:00,220 Corect. 1215 00:54:00,220 --> 00:54:04,220 Deci, întrucât lucru în paranteze reprezintă intrarea acestuia, dacă este cazul, 1216 00:54:04,220 --> 00:54:06,640 lucru la stânga reprezintă producției sale. 1217 00:54:06,640 --> 00:54:10,560 Și în acest caz, se pare că o creștere întoarce int. 1218 00:54:10,560 --> 00:54:14,590 Și așa int este tipul întoarsă de această funcție. 1219 00:54:14,590 --> 00:54:16,090 >> Ce înseamnă să se întoarcă? 1220 00:54:16,090 --> 00:54:19,810 Literalmente, să utilizați cuvinte cheie întoarcere. 1221 00:54:19,810 --> 00:54:24,640 Și apoi, dacă ceea ce se întorc la dreapta cuvânt cheie este un 1222 00:54:24,640 --> 00:54:28,340 întreg, atunci este într-adevăr în concordanță cu ceea ce am promis. 1223 00:54:28,340 --> 00:54:31,110 Tu nu ar putea face ceva de genul asta - 1224 00:54:31,110 --> 00:54:32,280 salut, lume - 1225 00:54:32,280 --> 00:54:33,500 pentru că este un șir. 1226 00:54:33,500 --> 00:54:35,440 Evident, acesta nu este un număr întreg. 1227 00:54:35,440 --> 00:54:40,450 Deci, pe scurt, sarcina este într-adevăr pe noi, programator, pentru a fi specifică 1228 00:54:40,450 --> 00:54:44,730 la ceea ce suntem și de a se întoarce apoi mergi de fapt, despre returna. 1229 00:54:44,730 --> 00:54:49,030 Și apoi pentru a face un pic mai clar contextul - 1230 00:54:49,030 --> 00:54:50,080 iată-l din nou. 1231 00:54:50,080 --> 00:54:51,060 Contextul - 1232 00:54:51,060 --> 00:54:52,830 mare surpriză vine intr-un moment. 1233 00:54:52,830 --> 00:54:57,720 Contextul aici este faptul că memoria computerului este, din nou, un 1234 00:54:57,720 --> 00:54:59,070 gigabyte, doi gigaocteți, indiferent. 1235 00:54:59,070 --> 00:54:59,630 Poate că e mai mult. 1236 00:54:59,630 --> 00:55:00,540 Poate că e mai puțin. 1237 00:55:00,540 --> 00:55:03,750 Dar care computerul îl vede ca având secțiuni diferite. 1238 00:55:03,750 --> 00:55:04,860 Ceva nu merge acolo. 1239 00:55:04,860 --> 00:55:06,020 Altceva se duce acolo. 1240 00:55:06,020 --> 00:55:07,540 Chestii diferite merge în mijloc. 1241 00:55:07,540 --> 00:55:09,300 Și astăzi, vom începe doar spun această poveste. 1242 00:55:09,300 --> 00:55:11,130 >> Dar ne vom reveni la această dată peste. 1243 00:55:11,130 --> 00:55:15,000 Pentru moment, singura piesă de memorie ne pasă cu adevărat despre este segmentul de text 1244 00:55:15,000 --> 00:55:17,160 pentru că reprezintă doar zerouri și cele 1245 00:55:17,160 --> 00:55:18,460 care face să răsune a emise. 1246 00:55:18,460 --> 00:55:21,570 Deci, atunci când executați o comandă de la tastatură cum ar fi a.out, sau faceți dublu 1247 00:55:21,570 --> 00:55:25,350 faceți clic pe o pictograma de pe Mac OS sau Windows, programul este încărcat de pe hard dvs. 1248 00:55:25,350 --> 00:55:26,930 conduce în memoria RAM. 1249 00:55:26,930 --> 00:55:30,850 Și se plopped la partea de sus a memoria RAM a computerului dumneavoastră, ca să spunem așa. 1250 00:55:30,850 --> 00:55:35,470 Acum Între timp, ca program începe să curgă și principalele este chemat în 1251 00:55:35,470 --> 00:55:39,240 program scris sau programul Microsoft sau Apple a scris, oricare dintre ei 1252 00:55:39,240 --> 00:55:42,930 variabilele locale ajung acolo, la partea de jos a memoriei computerului. 1253 00:55:42,930 --> 00:55:46,490 Dar, în cazul în care solicită un alt principal de funcția pe care ea însăși are variabile sau 1254 00:55:46,490 --> 00:55:48,340 argumente, ei sfârșesc deasupra. 1255 00:55:48,340 --> 00:55:50,670 Și dacă această funcție solicită ceva, ei sfârșesc deasupra ei, 1256 00:55:50,670 --> 00:55:51,840 deasupra ei, deasupra ei. 1257 00:55:51,840 --> 00:55:56,100 Și doar o singură dată o funcție se face de executare face topul de tăvi, astfel încât 1258 00:55:56,100 --> 00:55:58,320 să vorbească, începe să mai mici și mai mici. 1259 00:55:58,320 --> 00:56:03,370 Și asta este ceea ce, atunci, într-o coajă de nucă, explică de ce, atunci când apelați cub - 1260 00:56:03,370 --> 00:56:04,660 sau te sun increment - 1261 00:56:04,660 --> 00:56:06,490 te trece într-o copie a valorii. 1262 00:56:06,490 --> 00:56:09,840 Și ce înseamnă asta pictural este că sunteți scris literalmente 1263 00:56:09,840 --> 00:56:14,540 numărul 1 în altă parte a memoriei, care schimba 1 la 2, în cazul 1264 00:56:14,540 --> 00:56:15,360 creștere - 1265 00:56:15,360 --> 00:56:17,450 sau la un 8, în cazul cubului - 1266 00:56:17,450 --> 00:56:21,450 și a aruncat apoi că memoria departe, cât mai curând creșterea sau cub 1267 00:56:21,450 --> 00:56:23,410 funcție o întoarce. 1268 00:56:23,410 --> 00:56:24,267 >> Întrebare. 1269 00:56:24,267 --> 00:56:25,517 [Neauzit] 1270 00:56:28,090 --> 00:56:29,970 David J. MALAN: În cazul în care - variabile globale sunt stocate în ceea ce este 1271 00:56:29,970 --> 00:56:32,960 în prezent numit datele inițializată sau date neinițializate. 1272 00:56:32,960 --> 00:56:35,900 Diferența fiind, în cazul în care aveți o variabilă globală, și tu-l atribuiți 1273 00:56:35,900 --> 00:56:39,530 imediat o valoare cu semnul egal, se termină în partea de sus de acolo. 1274 00:56:39,530 --> 00:56:43,390 Și dacă spui doar int x virgulă, cu nici o valoare, se termină în sus ușor 1275 00:56:43,390 --> 00:56:46,670 mai mică în memoria RAM pur și simplu prin convenție. 1276 00:56:46,670 --> 00:56:49,308 Alte întrebări. 1277 00:56:49,308 --> 00:56:49,750 Bine. 1278 00:56:49,750 --> 00:56:53,040 >> Deci, această imagine va veni înapoi ca vom ajunge mai puternic cu ceea ce putem face 1279 00:56:53,040 --> 00:56:53,830 cu calculatorul. 1280 00:56:53,830 --> 00:56:58,790 Dar pentru acum, haideți să o introducere scurtă la criptografie, un tip specific de 1281 00:56:58,790 --> 00:57:01,910 criptografie care nu rezolva toate problemele lumii, dar nu rezolvă 1282 00:57:01,910 --> 00:57:02,480 unele dintre ele. 1283 00:57:02,480 --> 00:57:06,090 În acest caz aici, avem ceva numit criptografia cheie secretă. 1284 00:57:06,090 --> 00:57:10,430 Și criptografie cheia secretă, așa cum sugerează și numele, provine de securitate sa 1285 00:57:10,430 --> 00:57:11,330 de la un secret. 1286 00:57:11,330 --> 00:57:14,720 Deci, de exemplu, dacă te-ai întors în școala primară și sunteți trece printr-un 1287 00:57:14,720 --> 00:57:18,040 Scrisoarea de dragoste pic secret pentru băiat sau fată sunteți de concasare pe - dacă aveți 1288 00:57:18,040 --> 00:57:20,820 a vrut să treacă prin faptul că publicul, probabil că nu ar scrie 1289 00:57:20,820 --> 00:57:24,120 o astfel de notă în limba engleză sau orice limba dvs. maternă este, mai degrabă, te 1290 00:57:24,120 --> 00:57:25,800 l-ar putea cripta. 1291 00:57:25,800 --> 00:57:27,820 Sau s-ar putea doar trimite-le un mesaj text în aceste zile. 1292 00:57:27,820 --> 00:57:30,310 Dar s-ar putea trece de fapt, le-o notă de-a lungul sala de clasă. 1293 00:57:30,310 --> 00:57:33,820 Și pentru a face acest lucru în siguranță, astfel încât prietenii și profesorilor 1294 00:57:33,820 --> 00:57:36,820 Nu știu ce scrii, s-ar putea veni cu o destul de simplu 1295 00:57:36,820 --> 00:57:37,800 Algoritmul - 1296 00:57:37,800 --> 00:57:39,290 tânără, deși s-ar putea să fie - 1297 00:57:39,290 --> 00:57:40,780 pentru a se lupta doar cuvintele. 1298 00:57:40,780 --> 00:57:44,390 Deci, în loc de a scrie un, s-ar putea scrie B. În loc de B, s-ar putea scrie 1299 00:57:44,390 --> 00:57:46,670 C. În loc de C, s-ar putea scrie D, și așa mai departe. 1300 00:57:46,670 --> 00:57:50,020 Sau ai putea veni cu o traducere mai sofisticat de litere 1301 00:57:50,020 --> 00:57:51,300 la litere diferite. 1302 00:57:51,300 --> 00:57:55,440 Dar captura este băiat sau fată căreia îi trimiteți această notă trebuie să 1303 00:57:55,440 --> 00:57:56,850 știi ceva. 1304 00:57:56,850 --> 00:57:59,620 Care este ceea ce, în mod evident? 1305 00:57:59,620 --> 00:58:01,400 Ca, ceea ce este secretul tău. 1306 00:58:01,400 --> 00:58:04,620 Ca, ceea ce este faptul că cartografiere între Ca și B si C si DS? 1307 00:58:04,620 --> 00:58:08,780 Este adăugând doar una, ca să spunem așa, la fiecare dintre literele pentru a merge la 1308 00:58:08,780 --> 00:58:09,730 De la A la B, B la C? 1309 00:58:09,730 --> 00:58:11,350 Este mult mai complex decât asta? 1310 00:58:11,350 --> 00:58:16,450 Deci tu și zdrobi dvs. trebuie să aibă aceste informații secrete. 1311 00:58:16,450 --> 00:58:18,170 Dar există un fel de Catch-22 aici. 1312 00:58:18,170 --> 00:58:20,760 Dacă aceasta este prima dată când trimiteți această scrisoare prin iubire 1313 00:58:20,760 --> 00:58:25,590 clasă, cum este faptul că băiatul sau fata de gând să știu ce este secretul, chiar? 1314 00:58:25,590 --> 00:58:28,450 Deci, secretul cheie cripto nu rezolva toate problemele lumii. 1315 00:58:28,450 --> 00:58:30,490 Și nu e de fapt o relatie care ne vom întoarce la spre 1316 00:58:30,490 --> 00:58:31,370 semestru sfârșitul anului. 1317 00:58:31,370 --> 00:58:35,970 >> În mod similar, au nici unul dintre noi, probabil, vreodata a trimis-o - 1318 00:58:35,970 --> 00:58:39,453 În mod similar, nu mai mulți dintre noi cunosc pe cineva care lucreaza, de exemplu, la 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 Și totuși, mulți dintre noi au cumparat, probabil, lucruri pe Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 Și noi am fost învățați să se presupună că aceste e-commerce 1322 00:58:45,670 --> 00:58:47,060 tranzacțiile sunt sigure. 1323 00:58:47,060 --> 00:58:47,210 Corect? 1324 00:58:47,210 --> 00:58:49,310 URL-ul spune, probabil, https. 1325 00:58:49,310 --> 00:58:51,590 E poate o pictogramă lacăt prostuță mică undeva. 1326 00:58:51,590 --> 00:58:54,680 E un fel de criptografie securizarea informațiilor dvs. de card de credit 1327 00:58:54,680 --> 00:58:56,980 între tine și Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 Și totuși, în cazul în criptografie implică cunoașterea vreun secret, și totuși eu nu fac 1329 00:59:00,410 --> 00:59:03,330 cunosc pe nimeni de la Amazon, și am aranjat cu siguranță, nu orice fel de 1330 00:59:03,330 --> 00:59:07,350 secret cu cineva de la Amazon, cum este calculatorul meu sau browser-ul meu face acest lucru? 1331 00:59:07,350 --> 00:59:10,100 Ei bine, se pare că există și alte tipuri de criptografie în total, care rezolva 1332 00:59:10,100 --> 00:59:10,740 această problemă. 1333 00:59:10,740 --> 00:59:13,610 Dar pentru ziua de azi, ne vom concentra pe unul simplu, în cazul în care puteți aranja în 1334 00:59:13,610 --> 00:59:18,480 avansa să știi un secret, cum ar fi, plus 1 sau unele de cartografiere între Ca și Bs. 1335 00:59:18,480 --> 00:59:20,710 >> Și procesul de criptografie implică, în general, acest lucru. 1336 00:59:20,710 --> 00:59:23,550 Ai un text simplu, descrise aici, la stânga. 1337 00:59:23,550 --> 00:59:26,260 Ai executați printr-un fel de algoritm sau o procedură 1338 00:59:26,260 --> 00:59:27,670 pentru criptarea ea. 1339 00:59:27,670 --> 00:59:31,390 Poate că e doar un devine B, B devine C. Și apoi termina cu 1340 00:59:31,390 --> 00:59:32,260 Cipher text. 1341 00:59:32,260 --> 00:59:36,450 Între timp, odată ce v-ați îndrăgostit primește nota secretă, el sau ea trebuie să atunci 1342 00:59:36,450 --> 00:59:39,950 decripta prin inversarea în general, că algoritmul astfel încât să obțineți 1343 00:59:39,950 --> 00:59:41,640 copii de text simplu. 1344 00:59:41,640 --> 00:59:43,860 Acum, există încarnări fizice ale acestui. 1345 00:59:43,860 --> 00:59:46,720 De exemplu, acest lucru este un inel decodor pic secret. 1346 00:59:46,720 --> 00:59:50,060 Și acest lucru este un inel în sensul că există două cadrane aici. 1347 00:59:50,060 --> 00:59:53,630 La periferia afara de acest lucru, nu e litere de la A la Z, 1348 00:59:53,630 --> 00:59:55,110 deși acestea sunt, în ordine aleatorie. 1349 00:59:55,110 --> 00:59:58,410 Și pe interior, nu e de fapt niste numere, astfel încât cu această 1350 00:59:58,410 --> 01:00:02,940 inel, puteți transforma un fel de afara, dar nu în interior, în scopul de a alinia 1351 01:00:02,940 --> 01:00:04,110 numere cu litere. 1352 01:00:04,110 --> 01:00:08,290 Și în clipul pe care ești pe cale să vezi - dintre care unele este posibil să fi văzut 24/7 1353 01:00:08,290 --> 01:00:11,120 în jurul valorii de sezonul de Craciun dintr-un film numit o poveste de Crăciun. 1354 01:00:11,120 --> 01:00:16,050 Veți vedea că Ralphie mic era atât de dornic să ne dăm seama ce mic orfan 1355 01:00:16,050 --> 01:00:19,810 Mesaj secret lui Annie a fost să-l care au fost comunicate, cred că, în 1356 01:00:19,810 --> 01:00:22,810 forma de mesaje numerice de pe o cutie de serie. 1357 01:00:22,810 --> 01:00:26,760 Și ai avut de a acumula toate cărțile mici care s-au 1358 01:00:26,760 --> 01:00:27,480 în cutia de cereale. 1359 01:00:27,480 --> 01:00:28,320 Ai avut de a le trimite prin poștă inch 1360 01:00:28,320 --> 01:00:31,060 A trebuit să mă întorc inelul decodor secrete, astfel încât să puteți da seama în cele din urmă 1361 01:00:31,060 --> 01:00:34,190 ce de cartografiere este între litere și cifre, 1362 01:00:34,190 --> 01:00:35,420 sau scrisori și scrisori. 1363 01:00:35,420 --> 01:00:39,790 Deci, eu vă dau acest clip scurt de la A Poveste de Crăciun pentru a motiva PSET 2 și 1364 01:00:39,790 --> 01:00:42,340 nostru de discuții, într-un moment, de matrice. 1365 01:00:42,340 --> 01:00:43,773 Deci, aici avem Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [PLAYBACK VIDEO] 1367 01:00:44,126 --> 01:00:47,470 -Fie ca este vorba de cunoscut de toți și diverse, care Ralph Parker este numit un 1368 01:00:47,470 --> 01:00:50,690 membru al Micul orfan Cercul Secret Annie și are dreptul la toate 1369 01:00:50,690 --> 01:00:53,500 onorurile și beneficiile care apar acestea. 1370 01:00:53,500 --> 01:00:56,040 -Semnat, mic orfan Annie. 1371 01:00:56,040 --> 01:00:58,730 Contrasemnat, Pierre Andre! 1372 01:00:58,730 --> 01:01:00,150 În cerneala! 1373 01:01:00,150 --> 01:01:02,910 Onoruri și beneficii, deja de la vârsta de nouă ani. 1374 01:01:09,970 --> 01:01:10,730 Haide, să mergem mai departe cu ea. 1375 01:01:10,730 --> 01:01:15,000 Nu am nevoie de tot ce jazz despre traficanți și pirați. 1376 01:01:15,000 --> 01:01:17,624 -Ascultă mâine seară pentru aventura de încheiere a Negre 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Acum e timpul pentru mesaj secret lui Annie pentru voi, membrii 1379 01:01:23,380 --> 01:01:25,670 Cercul Secret de. 1380 01:01:25,670 --> 01:01:30,260 Amintiți-vă, copii, membri ai Cercului Secret numai lui Annie pot decoda 1381 01:01:30,260 --> 01:01:31,660 Annie secret mesaj. 1382 01:01:31,660 --> 01:01:36,230 Amintiți-vă, Annie este în funcție de tine. 1383 01:01:36,230 --> 01:01:38,720 Setați pini dvs. la B2. 1384 01:01:38,720 --> 01:01:41,040 Aici este mesajul. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Sunt în ședință secretă mea prima. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre a fost în seara asta voce mare. 1389 01:01:51,700 --> 01:01:54,890 Aș putea spune că mesajul din seara asta a fost foarte important. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Asta e un mesaj de la Annie ea. 1392 01:01:58,590 --> 01:01:59,840 Amintiți-vă, să nu spui nimănui. 1393 01:02:04,570 --> 01:02:08,750 -90 Secunde mai târziu, eu sunt în camera doar in casa unde un băiat de nouă 1394 01:02:08,750 --> 01:02:12,980 ar putea sta în intimitate și de decodare. 1395 01:02:12,980 --> 01:02:17,130 Aha, m-am dus la B. următoare. 1396 01:02:17,130 --> 01:02:20,330 E. Primul cuvânt este sa fie. 1397 01:02:20,330 --> 01:02:22,670 S. A fost mai ușor vine acum. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, haide, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Trebuie să plec. 1401 01:02:28,430 --> 01:02:30,350 -Voi fi dreapta jos, ma. 1402 01:02:30,350 --> 01:02:33,720 Gee-whiz. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Asigurați-vă că pentru a. 1404 01:02:38,270 --> 01:02:40,000 Asigurați-vă că ce? 1405 01:02:40,000 --> 01:02:42,105 Ce-a fost orfane Annie Micul încearcă să spună? 1406 01:02:42,105 --> 01:02:43,095 Asigurați-vă că ce? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy a ajuns să mergem. 1409 01:02:44,580 --> 01:02:45,570 Te rog iesi? 1410 01:02:45,570 --> 01:02:46,560 -Bine, mamă. 1411 01:02:46,560 --> 01:02:48,540 Voi fi imediat. 1412 01:02:48,540 --> 01:02:50,580 -Am fost obtinerea mai aproape acum. 1413 01:02:50,580 --> 01:02:52,550 Tensiunea a fost teribilă. 1414 01:02:52,550 --> 01:02:53,355 Ce-a fost asta? 1415 01:02:53,355 --> 01:02:56,315 Soarta planetei poate atârna în balanță. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy trebuie sa plece. 1418 01:02:59,165 --> 01:03:02,310 -Voi fi imediat, pentru numele lui Dumnezeu. 1419 01:03:02,310 --> 01:03:04,000 -Doamne, aproape acolo. 1420 01:03:04,000 --> 01:03:05,180 Degetele mele au zburat. 1421 01:03:05,180 --> 01:03:07,150 Mintea mea a fost o capcană de oțel. 1422 01:03:07,150 --> 01:03:08,790 Fiecare por vibrat. 1423 01:03:08,790 --> 01:03:10,040 A fost aproape limpede. 1424 01:03:10,040 --> 01:03:13,400 Da, da, da, da. 1425 01:03:13,400 --> 01:03:18,960 -Asigurați-vă că pentru a bea Ovaltine dumneavoastră. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 Un nenorocit comerciale? 1428 01:03:28,200 --> 01:03:29,640 Fiu de catea. 1429 01:03:29,640 --> 01:03:33,340 [VIDEO PLAYBACK END] 1430 01:03:33,340 --> 01:03:36,040 >> David J. MALAN: Deci nu avem criptografie. 1431 01:03:36,040 --> 01:03:39,670 Deci, cum într-un calculator putem merge despre punere în aplicare sau 1432 01:03:39,670 --> 01:03:40,950 reprezentând lucruri de genul asta? 1433 01:03:40,950 --> 01:03:44,430 Ei bine, avem nevoie de o modalitate de a exprima noi înșine un pic mai flexibil decât 1434 01:03:44,430 --> 01:03:46,420 variabilele noastre până în prezent au permis. 1435 01:03:46,420 --> 01:03:47,370 Am avut Ints. 1436 01:03:47,370 --> 01:03:48,380 Am avut caractere. 1437 01:03:48,380 --> 01:03:50,790 Am avut flotoare și duble și câteva altele. 1438 01:03:50,790 --> 01:03:55,050 Dar acestea sunt piese individuale de memorie, care nu permit într-adevăr să ne 1439 01:03:55,050 --> 01:03:58,010 exprima lucruri, cum ar fi cuvinte și propoziții și fraze. 1440 01:03:58,010 --> 01:04:00,200 Într-adevăr, am sunat siruri de astfel de lucruri. 1441 01:04:00,200 --> 01:04:03,650 Dar am promis că aceasta este de fapt doar o simplificare, în CS50 1442 01:04:03,650 --> 01:04:07,020 Biblioteca de faptul că suntem intenționează să coaja înapoi. 1443 01:04:07,020 --> 01:04:08,970 >> Și deci haideți să încep să fac asta aici. 1444 01:04:08,970 --> 01:04:11,130 Lasă-mă să mergeți mai departe și de a deschide un fișier - 1445 01:04:11,130 --> 01:04:13,770 toate aceste fișiere sunt disponibile on-line ca de obicei - 1446 01:04:13,770 --> 01:04:19,120 array.c chemat pentru a rezolva o problemă fără legătură cu siruri de caractere, dar că înfățișează o 1447 01:04:19,120 --> 01:04:23,040 Imagine aici despre cum am putea folosi ceva numit-o matrice. 1448 01:04:23,040 --> 01:04:25,530 Un tablou este un tip de date. 1449 01:04:25,530 --> 01:04:31,320 E un tip de variabilă, de soiuri, care are mai multe tipuri de date mai mici 1450 01:04:31,320 --> 01:04:34,150 în interiorul acestuia spate în spate la spate în spate. 1451 01:04:34,150 --> 01:04:37,700 Deci, de exemplu, dacă vrem să scrie un mic program care vă oferă dvs. 1452 01:04:37,700 --> 01:04:42,110 quiz medie pentru un curs ca 50 care are două teste, ai putea foarte ușor 1453 01:04:42,110 --> 01:04:45,170 scrie acest program - bazat chiar pe unele din material de săptămâna trecută - 1454 01:04:45,170 --> 01:04:47,770 prin utilizarea GetInt și o pereche de variabile. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, si e destul de simplu. 1456 01:04:51,920 --> 01:04:55,930 E poate 10, 20 de linii de cod, max, să pună în aplicare un program care solicită 1457 01:04:55,930 --> 01:05:01,170 de utilizator pentru scorurile test două și apoi calculează media lor adăugându-le 1458 01:05:01,170 --> 01:05:03,850 împreună, împărțind cu doi, iar apoi tipărirea rezultatelor. 1459 01:05:03,850 --> 01:05:06,380 Am putea face destul de ușor, probabil, că acum, după 1460 01:05:06,380 --> 01:05:07,510 un numar de minute. 1461 01:05:07,510 --> 01:05:11,005 >> Dar problema este că presupunem că 50 a avut trei sau patru chestionare. 1462 01:05:11,005 --> 01:05:13,510 Să presupunem că ai vrut să utilizați același program pentru o clasă care a avut 1463 01:05:13,510 --> 01:05:14,850 săptămânal teste. 1464 01:05:14,850 --> 01:05:16,610 Gândiți-vă la o clasă care a săptămânal teste. 1465 01:05:16,610 --> 01:05:20,610 Dacă e ca și cum 16 sau asa săptămâni într-un semestru, acum ai 16 variabile - 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 De îndată ce începe să vedeți acest concediere, această copierea și lipirea 1468 01:05:27,560 --> 01:05:31,390 de cod, acesta ar trebui să înceapă să te fac să doriți exista un mod mai bun. 1469 01:05:31,390 --> 01:05:33,930 Și din fericire, din cauza matrice, nu există. 1470 01:05:33,930 --> 01:05:34,980 Deci, hai sa facem asta. 1471 01:05:34,980 --> 01:05:38,430 În primul rând, permiteți-mi să introducă un lucru foarte simplu, care nu ne-am folosit până acum, 1472 01:05:38,430 --> 01:05:40,140 dar veți vedea, ocazional, în cod. 1473 01:05:40,140 --> 01:05:42,360 Aceasta este ceea ce se numește, în general, o constantă. 1474 01:05:42,360 --> 01:05:45,790 Deci, este o constantă în sensul că niciodată nu schimbă această valoare. 1475 01:05:45,790 --> 01:05:49,210 Convenție umană atunci când se creează o constantă este de a utiliza toate de capital 1476 01:05:49,210 --> 01:05:51,940 litere, așa că într-adevăr iese în evidență în cod. 1477 01:05:51,940 --> 01:05:55,960 Și cuvântul cheie special pe care îl utilizați în C # define este. 1478 01:05:55,960 --> 01:06:00,250 Deci, dacă spui # define, apoi un spațiu, apoi cuvântul pe care doriți să o utilizați pentru 1479 01:06:00,250 --> 01:06:03,260 constanta numele, iar apoi valoarea constantă. 1480 01:06:03,260 --> 01:06:06,180 Deci notificare, acesta este diferit de la atribuirea ceva la o variabilă. 1481 01:06:06,180 --> 01:06:07,020 Nu e nici un semn egal. 1482 01:06:07,020 --> 01:06:08,240 Nu e nici o virgulă. 1483 01:06:08,240 --> 01:06:11,410 Aceasta este ceea ce este, în general, cunoscut sub numele de o directivă preprocesor, dar mai mult pe 1484 01:06:11,410 --> 01:06:12,210 că un alt timp. 1485 01:06:12,210 --> 01:06:18,540 >> Pentru moment, acest lucru creează o valoare invariabilă numit QUIZ reală a cărui 1486 01:06:18,540 --> 01:06:19,940 Valoarea numerică este 2. 1487 01:06:19,940 --> 01:06:24,020 Deci, oriunde vedeți teste, Teste, Teste pe parcursul acestui fișier, care este 1488 01:06:24,020 --> 01:06:25,410 doar numărul 2. 1489 01:06:25,410 --> 01:06:28,100 Acum, dacă mă uit la principal acum, să vedem cum funcționează. 1490 01:06:28,100 --> 01:06:29,500 La început, se pare un pic criptic. 1491 01:06:29,500 --> 01:06:31,340 Dar e toate lucrurile de la o saptamana. 1492 01:06:31,340 --> 01:06:32,710 Solicita utilizatorul pentru clasele. 1493 01:06:32,710 --> 01:06:33,630 Cum facem acest lucru? 1494 01:06:33,630 --> 01:06:35,470 Ei bine, în linia 22 - 1495 01:06:35,470 --> 01:06:37,210 aceasta este într-adevăr parte suculent - 1496 01:06:37,210 --> 01:06:40,960 Declar un flotor, dar nu doar un singur flotor. 1497 01:06:40,960 --> 01:06:44,620 Sunt declara, mai degrabă, o matrice de valori în virgulă mobilă. 1498 01:06:44,620 --> 01:06:49,100 Această variabilă va fi numit clase, așa cum se sugerează aici. 1499 01:06:49,100 --> 01:06:53,080 Dar singura bucată de noua sintaxă, atunci sunt aceste paranteze pătrate, fapt 1500 01:06:53,080 --> 01:06:59,350 care le-am spus clasele float și apoi placuta deschis și apoi un număr. 1501 01:06:59,350 --> 01:07:02,460 Comunicarea, în cazul în care acest lucru este o constantă, acest lucru este la fel cum am făcut asta. 1502 01:07:02,460 --> 01:07:06,890 Acest lucru înseamnă calculator hei, da-mi două flotoare, și hai să numim în mod colectiv 1503 01:07:06,890 --> 01:07:08,220 le clase. 1504 01:07:08,220 --> 01:07:11,920 Acest lucru este în contrast cu un proces mult mai plictisitor ca asta. 1505 01:07:11,920 --> 01:07:15,850 Plutesc grade1, plutesc grade2, și așa mai departe. 1506 01:07:15,850 --> 01:07:20,010 Deci, un tablou ne permite să pună în aplicare această idee, dar mult mai puțin messily, în 1507 01:07:20,010 --> 01:07:24,630 astfel încât se poate scrie o linie de cod in loc de, sa zicem, 16 pentru un 16 1508 01:07:24,630 --> 01:07:25,740 săptămâni semestru. 1509 01:07:25,740 --> 01:07:29,950 Deci, eu nu am vrut să-hard codul 2 pentru că dacă te gândești la asta acum 1510 01:07:29,950 --> 01:07:34,160 logic - să presupunem că anul viitor CS50 modificări la 3 concursuri de schimb. 1511 01:07:34,160 --> 01:07:35,510 Și am avut numărul 2 aici. 1512 01:07:35,510 --> 01:07:36,600 Am avut numărul 2 aici. 1513 01:07:36,600 --> 01:07:37,580 Am avut numărul 2 aici. 1514 01:07:37,580 --> 01:07:38,560 Am avut numărul 2 aici. 1515 01:07:38,560 --> 01:07:43,180 Ea devine foarte obositor si foarte usor de bară și de a schimba accidental 1516 01:07:43,180 --> 01:07:47,690 o valoare la 3 și dor de o alta valoare de 2. 1517 01:07:47,690 --> 01:07:52,460 Așa că am de gând să schimb abstracte această distanță și de a folosi această constantă că, în calitate de ei 1518 01:07:52,460 --> 01:07:54,120 sugerează și numele, nu se schimbă niciodată. 1519 01:07:54,120 --> 01:07:57,710 Și acum, indiferent dacă avem diferite chestionare acest an sau viitor, am 1520 01:07:57,710 --> 01:08:01,210 Trebuie doar să-l schimbe într-un singur loc, aici în partea de sus. 1521 01:08:01,210 --> 01:08:02,720 >> Deci, asta e tot constantă este. 1522 01:08:02,720 --> 01:08:08,680 Între timp, noua caracteristică conceptuală este aceea a unei matrice. 1523 01:08:08,680 --> 01:08:14,660 Deci parantezele pătrate Dă-mi asta pluteste in mai multe și vă permite-mi colectiv 1524 01:08:14,660 --> 01:08:16,630 le numesc clase aici. 1525 01:08:16,630 --> 01:08:17,990 Deci, acum să vedem ce am de gând să fac. 1526 01:08:17,990 --> 01:08:20,359 Aici, în linia 24 este începutul unei bucle pentru. 1527 01:08:20,359 --> 01:08:22,260 Acest lucru este într-adevăr nimic extravagant. 1528 01:08:22,260 --> 01:08:25,060 Este folosind doar teste în loc de un număr de hard-coded. 1529 01:08:25,060 --> 01:08:27,790 Dar nu e nimic intelectual diferit acolo de săptămâna trecută. 1530 01:08:27,790 --> 01:08:29,040 Acesta este doar printf. 1531 01:08:29,040 --> 01:08:35,490 Deci printf ("% d Quiz numar de% d") pentru că vreau doar să imprime-mi dea concurs 1532 01:08:35,490 --> 01:08:38,050 numărul unu de doi ani și apoi amândouă din cele două. 1533 01:08:38,050 --> 01:08:39,850 Deci, aceasta este pur estetic un lucru. 1534 01:08:39,850 --> 01:08:42,500 Dar partea interesantă este acum în linia 27. 1535 01:08:42,500 --> 01:08:48,310 În scopul de a umple intr-unul din cele două substituenților cu un plutitor-punct 1536 01:08:48,310 --> 01:08:51,029 valoarea, puteti folosi din nou paranteze pătrate. 1537 01:08:51,029 --> 01:08:55,620 În acest caz, eu i folosind, deoarece acest lucru pentru bucla a început cu i egaleze 1538 01:08:55,620 --> 01:08:57,560 ce valoare, aparent? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Astfel, pe prima iterație a acestui bucla, este ca și cum am 1541 01:09:01,350 --> 01:09:02,689 scris acest lucru în cod. 1542 01:09:02,689 --> 01:09:05,580 Dar pe a doua repetare a acestei bucla, este ca și cum am 1543 01:09:05,580 --> 01:09:07,750 a scris asta în codul meu. 1544 01:09:07,750 --> 01:09:10,750 Dar faptul că mă folosind o variabilă este perfect, deoarece, după cum numele 1545 01:09:10,750 --> 01:09:14,300 sugerează, e variind valoarea sa pe fiecare iterație. 1546 01:09:14,300 --> 01:09:17,370 Așa că eu sunt de umplere această matrice-un singur loc la un moment dat. 1547 01:09:17,370 --> 01:09:18,910 Ce înseamnă acest tablou arata? 1548 01:09:18,910 --> 01:09:21,430 Ei bine, motivul pentru care am desenat acest dreptunghi super-simplu de pe ecran aici 1549 01:09:21,430 --> 01:09:23,350 înainte de a fost pentru acest motiv. 1550 01:09:23,350 --> 01:09:27,279 O matrice este doar o bucată de memorie, urmat de un alt segment de memorie, 1551 01:09:27,279 --> 01:09:30,109 urmat de un alt segment de memorie, și așa mai departe. 1552 01:09:30,109 --> 01:09:35,260 Deci, dacă matrice mea este de dimensiuni 2, în acest caz aici, tot aș face de către 1553 01:09:35,260 --> 01:09:37,590 tastarea în scorurile test mele, ca aici. 1554 01:09:37,590 --> 01:09:39,430 Am 100 la asta. 1555 01:09:39,430 --> 01:09:42,020 Și apoi mi-am luat un 99 pe asta. 1556 01:09:42,020 --> 01:09:46,040 Atunci această memorie ar putea să nu fi folosit chiar și numai pentru că am cerut 1557 01:09:46,040 --> 01:09:48,689 calculator pentru o gamă largă de dimensiuni 2. 1558 01:09:48,689 --> 01:09:50,180 Aceste piete sunt încă acolo. 1559 01:09:50,180 --> 01:09:50,340 Corect? 1560 01:09:50,340 --> 01:09:52,500 Aveți încă două GB de RAM, chiar dacă ești doar 1561 01:09:52,500 --> 01:09:53,979 cere pentru două flotoare. 1562 01:09:53,979 --> 01:09:58,710 Deci, ideea din spatele tablourilor este faptul că computerul are doar o bucată de memorie 1563 01:09:58,710 --> 01:10:03,230 și distribuie proporțional apoi bucati mai mici spate în spate la spate în spate. 1564 01:10:03,230 --> 01:10:04,740 Si pentru ca e tot o matrice este. 1565 01:10:04,740 --> 01:10:09,080 E o bucată de memorie contiguă, în interiorul căruia poți pune lucrurile. 1566 01:10:09,080 --> 01:10:12,400 >> Acum, acest lucru se întâmplă pentru a face apoi doar câteva aritmetică plictisitor. 1567 01:10:12,400 --> 01:10:16,170 Dacă aș defila în jos aici, acest lucru este în cazul în care am repeta apoi peste matrice. 1568 01:10:16,170 --> 01:10:19,410 Am venit cu însumarea tuturor valorilor din matrice. 1569 01:10:19,410 --> 01:10:22,390 Și apoi am folosi funcția rundă aici pentru a face de fapt, 1570 01:10:22,390 --> 01:10:23,940 suma este împărțită de chestionare. 1571 01:10:23,940 --> 01:10:27,450 Dar permiteți-mi să mișcați mâna mea la acel ca un fel de aritmetică suficient pentru acum. 1572 01:10:27,450 --> 01:10:30,010 Dar tot ce face pentru mine în cele din urmă este o medie de calcul. 1573 01:10:30,010 --> 01:10:33,640 Deci, primul test, plus Quiz al doilea, împărțit la 2, iar apoi de imprimare 1574 01:10:33,640 --> 01:10:34,700 l ca un int. 1575 01:10:34,700 --> 01:10:39,030 >> Dar haideți să acum trecerea la o alt exemplu numit șir1, 1576 01:10:39,030 --> 01:10:42,370 care relevă o imagine similară, dar siruri de caractere folosind. 1577 01:10:42,370 --> 01:10:45,550 Lasă-mă să mergeți mai departe și de a simplifica aceasta doar pentru un moment. 1578 01:10:45,550 --> 01:10:48,340 Și iartă-indentarea pentru acum. 1579 01:10:48,340 --> 01:10:52,280 Comunicarea în linia 19 din acest exemplu, am obține un șir de utilizator. 1580 01:10:52,280 --> 01:10:55,780 Dar observați ce fac eu următoare, în linii 22 mai departe. 1581 01:10:55,780 --> 01:11:00,260 Sunt de fapt iterarea de la I până la - și acest lucru este un truc nou - 1582 01:11:00,260 --> 01:11:02,730 strlen, șir de lungime. 1583 01:11:02,730 --> 01:11:07,010 Aceasta este o funcție care vine cu C ca daca treci un șir, acesta spune 1584 01:11:07,010 --> 01:11:08,950 vă cât de multe caractere sunt în șir. 1585 01:11:08,950 --> 01:11:09,440 Asta e tot. 1586 01:11:09,440 --> 01:11:12,520 Faptul că e strlen în loc de lungimea șirului este doar pentru că e 1587 01:11:12,520 --> 01:11:13,040 mai succint. 1588 01:11:13,040 --> 01:11:17,100 Acum 30 de ani, oamenii îi plăcea să scriu lucrurile așa cum succint posibil. 1589 01:11:17,100 --> 01:11:19,080 Deci, ne-am păstrat această convenție aici. 1590 01:11:19,080 --> 01:11:21,730 i + + înseamnă doar incrementa I, în fiecare iterație. 1591 01:11:21,730 --> 01:11:24,310 Și observați acum acest lucru, ceea ce este cu adevarat interesant. 1592 01:11:24,310 --> 01:11:28,730 Deci, în linia 24, eu zic calculatorul, da-mi un caracter, opt 1593 01:11:28,730 --> 01:11:30,770 biți, și sună-l c. 1594 01:11:30,770 --> 01:11:35,370 Dar ce este acest lucru pe partea dreaptă spui? 1595 01:11:35,370 --> 01:11:38,150 În limba engleză, ceea ce nu reprezintă faptul că? 1596 01:11:38,150 --> 01:11:40,070 [Neauzit] 1597 01:11:40,070 --> 01:11:40,490 David J. MALAN: Exact. 1598 01:11:40,490 --> 01:11:42,390 Dă-mi primul caracter din matrice. 1599 01:11:42,390 --> 01:11:45,400 Sau, mai general, dă-mi caracterul i-lea în matrice. 1600 01:11:45,400 --> 01:11:48,230 Și dau seama că e important acum ca, oamenii de stiinta de calculator, suntem de fapt 1601 01:11:48,230 --> 01:11:49,330 începând de la 0. 1602 01:11:49,330 --> 01:11:51,290 Nu aveți putere de apreciere pentru a începe a face acest lucru. 1603 01:11:51,290 --> 01:11:54,580 Acum trebuie să se comporte în conformitate cu așteptările computerului și 1604 01:11:54,580 --> 01:11:58,010 numerotate de la zero, deoarece [0] va fi primul 1605 01:11:58,010 --> 01:11:59,670 într-un șir de caractere. 1606 01:11:59,670 --> 01:12:01,320 [1] va fi a doua. 1607 01:12:01,320 --> 01:12:03,610 [2] va fi al treilea, și așa mai departe. 1608 01:12:03,610 --> 01:12:08,840 Deci acest program, în cazul în care l-am compila - aceasta este, din nou, șir1. 1609 01:12:08,840 --> 01:12:11,040 >> Deci, a face șir1. 1610 01:12:11,040 --> 01:12:16,730 Și acum am rulat șir1 în fereastra terminalul meu. 1611 01:12:16,730 --> 01:12:19,180 Se așteaptă de intrare, așa că am de gând să tastați în, să zicem, David. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 Și acum se imprimă DAVID totul pe diferite linii, deoarece 1614 01:12:23,350 --> 01:12:24,430 observați ceea ce fac. 1615 01:12:24,430 --> 01:12:27,510 Sunt imprimarea unui caracter la un moment dat. 1616 01:12:27,510 --> 01:12:29,100 Acum, nu vom intra în detalii astazi pe acest lucru. 1617 01:12:29,100 --> 01:12:31,610 Dar am șters-o clipă în urmă cu acest cec aici. 1618 01:12:31,610 --> 01:12:36,310 Se pare că, dacă utilizatorul nu funcționează corect, contradictorie, sau pur și simplu 1619 01:12:36,310 --> 01:12:41,780 confuz, aveți posibilitatea să nu reușesc, de fapt pentru a da un șir de o anumită lungime. 1620 01:12:41,780 --> 01:12:43,640 Dacă te-a lovit tasta greșit pe tastatură, s-ar putea da 1621 01:12:43,640 --> 01:12:44,390 nici șir, la toate. 1622 01:12:44,390 --> 01:12:47,790 Sau, dacă ești rău intenționat, ați putea încerca să lipiți într valoare de un gigabyte de o 1623 01:12:47,790 --> 01:12:49,380 eseu pentru a umple acest șir. 1624 01:12:49,380 --> 01:12:52,060 Și dacă computerul rămâne fără memorie, se pare că vom 1625 01:12:52,060 --> 01:12:54,310 să ne întoarcem această valoare nulă special numit. 1626 01:12:54,310 --> 01:12:57,550 Deci, pentru moment, știu doar că există această valoare nulă special numit ca 1627 01:12:57,550 --> 01:13:01,000 ne va permite să verificați când suntem afară din memorie, printre alte lucruri. 1628 01:13:01,000 --> 01:13:07,330 >> Dar dacă am deschide acum șir2, observați o diferență aici. 1629 01:13:07,330 --> 01:13:09,760 Observa o diferență aici cu șir2. 1630 01:13:09,760 --> 01:13:13,260 Cu șir2, acest lucru pentru bucla este un pic diferit. 1631 01:13:13,260 --> 01:13:16,350 Lasă-mă să ștergeți valori nule, astfel încât să putem vorbi despre cei altă dată. 1632 01:13:16,350 --> 01:13:18,460 Dar ceea ce este diferit despre bucla de data asta? 1633 01:13:21,580 --> 01:13:23,160 Și eu pot să mă întorc la exemplul anterior. 1634 01:13:23,160 --> 01:13:24,800 Deci, asta e versiunea doi. 1635 01:13:24,800 --> 01:13:27,020 Aceasta este versiunea unul. 1636 01:13:27,020 --> 01:13:31,935 Unu, doi, unu doi. 1637 01:13:35,030 --> 01:13:38,240 Deci, în cazul în care apelul este strlen? 1638 01:13:38,240 --> 01:13:40,420 Este scris în prima parte a buclei pentru. 1639 01:13:40,420 --> 01:13:43,060 Orice gânduri ca de ce fac asta? 1640 01:13:43,060 --> 01:13:43,690 Da. 1641 01:13:43,690 --> 01:13:46,010 [Neauzit] 1642 01:13:46,010 --> 01:13:47,630 David J. MALAN: Deci, noi nu numim funcția de fiecare dată singur. 1643 01:13:47,630 --> 01:13:48,040 Exact. 1644 01:13:48,040 --> 01:13:50,350 Recall pentru bucle de la faptul că sunt super-simplu o dată ce fel de 1645 01:13:50,350 --> 01:13:52,180 Înțeleg că aceasta este initializare, 1646 01:13:52,180 --> 01:13:53,330 condiție, și actualizarea. 1647 01:13:53,330 --> 01:13:55,430 Problema este că această condiție se întâmplă la fiecare 1648 01:13:55,430 --> 01:13:56,600 iterație a buclei. 1649 01:13:56,600 --> 01:13:59,930 Și astfel, în acest exemplu aici, ceea ce este rău despre faptul 1650 01:13:59,930 --> 01:14:03,500 că aceasta este starea mea? 1651 01:14:03,500 --> 01:14:05,920 Ești de asteptare strlen din nou și din nou și din nou. 1652 01:14:05,920 --> 01:14:08,990 Dar, odată ce l-am scris în David, lungimea șir care este de cinci. 1653 01:14:08,990 --> 01:14:11,560 Și nu se va schimba la fiecare iterație a buclei, deoarece 1654 01:14:11,560 --> 01:14:15,560 șir este în continuare D-A-V-I-D. Deci, aceasta este o aluzie la ceea ce se întâmplă pentru a deveni un 1655 01:14:15,560 --> 01:14:19,650 Ideea ce în ce mai importantă cunoscut ca o decizie de design, în cazul în care - nu doar 1656 01:14:19,650 --> 01:14:21,640 face calculatorul face munca inutilă. 1657 01:14:21,640 --> 01:14:25,630 >> Acum, la fel ca și o previzualizare a PSET 2, PSET 2 în ediția standard este 1658 01:14:25,630 --> 01:14:28,850 O să vă provoc să pună în aplicare de fapt, un numar de cifruri, unele 1659 01:14:28,850 --> 01:14:32,650 Numărul de algoritmi de criptare, astfel încât să puteți atât cripta și decripta 1660 01:14:32,650 --> 01:14:35,530 mesaje secrete, la fel ca Ralphie de acolo decodat. 1661 01:14:35,530 --> 01:14:38,720 În ediția de hacker PSET 2, vom merge un pic mai departe. 1662 01:14:38,720 --> 01:14:42,010 Mergem să dea un fișier dintr-un sistem informatic actual, care conține un 1663 01:14:42,010 --> 01:14:45,690 grămadă de nume de utilizator si parole criptate reale, precum și provocarea 1664 01:14:45,690 --> 01:14:49,110 pentru ediția hacker va fi de a sparge aceste parole și figura 1665 01:14:49,110 --> 01:14:53,060 ce criptografie sau ce secrete a fost de fapt utilizat pentru a 1666 01:14:53,060 --> 01:14:55,080 generează aceste parole. 1667 01:14:55,080 --> 01:14:58,360 Și vom face acest lucru prin utilizarea o caracteristică nouă aici, din C pe care o voi da 1668 01:14:58,360 --> 01:15:02,200 ai doar un demo de, cunoscut sub numele de argumente de linie de comandă. 1669 01:15:02,200 --> 01:15:05,930 >> Deci, se dovedește, după cum unii dintre voi poate au văzut în secțiune sau în manuale, 1670 01:15:05,930 --> 01:15:09,850 principal nu are întotdeauna să fie anulate în paranteze. 1671 01:15:09,850 --> 01:15:14,060 Se pare că principala poate fi, de asemenea, scris ca aceasta, cu două argumente, 1672 01:15:14,060 --> 01:15:19,690 argc și argv, în cazul în care argc este numarul de cuvinte pe care le tastați, după 1673 01:15:19,690 --> 01:15:21,940 programul de numele pe linia comanda ta. 1674 01:15:21,940 --> 01:15:24,550 Și argv sunt cuvintele reale. 1675 01:15:24,550 --> 01:15:29,470 Și, după cum sugerează parantezele pătrate de acolo, argv este aparent o matrice. 1676 01:15:29,470 --> 01:15:33,720 O să fie un șir de caractere, după un șir după un șir în memorie. 1677 01:15:33,720 --> 01:15:36,170 Deci, ceea ce am de gând să fie capabil să facă, începând cu PSET 2, se 1678 01:15:36,170 --> 01:15:37,310 ceva de genul asta. 1679 01:15:37,310 --> 01:15:42,450 Dacă am face argv1, care este un exemplu ne vom întoarce la luni, și rulați 1680 01:15:42,450 --> 01:15:45,180 aceasta, observați că aceasta nu pare să facă nimic încă. 1681 01:15:45,180 --> 01:15:47,050 Este doar imprimă propriul nume. 1682 01:15:47,050 --> 01:15:53,220 Dar dacă spun la revedere clasa, observați că acest program aparent iterează 1683 01:15:53,220 --> 01:15:57,030 pe fiecare dintre cuvintele care au fost introduse la prompt. 1684 01:15:57,030 --> 01:16:02,050 Și mijloacele prin care vom avea acces la cuvinte care utilizatorul are 1685 01:16:02,050 --> 01:16:06,780 tastat de la promptul principal este de a schimba, incepand din acest week-end, de la int 1686 01:16:06,780 --> 01:16:10,710 main (void) la int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 Și astfel se va naste argumente în linia de comandă. 1688 01:16:13,700 --> 01:16:17,210 Și odată ce ați obține cu adevărat sofisticat la acest lucru, vei fi capabil de a scrie 1689 01:16:17,210 --> 01:16:21,370 programe cu adevărat trippy, cum ar fi cel de aici, care merge de mai sus și dincolo de 1690 01:16:21,370 --> 01:16:25,520 unele dintre funcționalități care le-am făcut până acum, dar tot destul de puternic. 1691 01:16:25,520 --> 01:16:27,330 >> Deci, vom lăsa acest lucru cu asta pe ecran. 1692 01:16:27,330 --> 01:16:29,160 Si te vom vedea pe luni.