1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> SPEAKER 1: În regulă. 3 00:00:13,650 --> 00:00:14,390 Bine ai venit înapoi. 4 00:00:14,390 --> 00:00:19,260 Acest lucru este de două săptămâni de CS50, și ne-am pana acum a fost cu funcții, dar 5 00:00:19,260 --> 00:00:20,830 în mare parte luate le pentru a acordat. 6 00:00:20,830 --> 00:00:23,430 Am folosit printf care are efect secundar de imprimare 7 00:00:23,430 --> 00:00:24,110 lucrurile de pe ecran. 8 00:00:24,110 --> 00:00:25,790 Ne-am folosit să-Int, să plutească. 9 00:00:25,790 --> 00:00:29,230 >> Dar ce se întâmplă dacă de fapt, doriți să creați propriile funcții, ca o parte din 10 00:00:29,230 --> 00:00:31,740 s-ar putea au început deja să face pentru Set singură problemă, deși 11 00:00:31,740 --> 00:00:33,140 nu strict necesare? 12 00:00:33,140 --> 00:00:37,150 Ei bine, să mergem mai departe și revizita că Problema de a cere doar utilizatorului pentru 13 00:00:37,150 --> 00:00:40,660 numele și tipărirea lor ceva pe ecran, dar încercați să factor în unele 14 00:00:40,660 --> 00:00:44,000 de comun pe care ne-am văzut în codul nostru de până acum. 15 00:00:44,000 --> 00:00:45,120 Deci, prin care vreau să spun următoarele. 16 00:00:45,120 --> 00:00:47,315 >> Am de gând să merg mai departe și de a crea un nou program, suna doar 17 00:00:47,315 --> 00:00:49,320 o hello.c ca de obicei. 18 00:00:49,320 --> 00:00:53,730 Am de gând să merg mai departe și să nu-mi includ io.h standard, în partea de sus. 19 00:00:53,730 --> 00:00:57,040 Am de gând să dea, de asemenea, mă preventiv biblioteca CS50, astfel încât 20 00:00:57,040 --> 00:00:59,080 Eu nu te strigat la de compilator. 21 00:00:59,080 --> 00:01:02,400 Și acum am de gând să merg mai departe și declare Int, principala, gol. 22 00:01:02,400 --> 00:01:09,020 >> Și apoi aici, acesta este locul unde vreau pentru a începe să externalizeze funcționalitate a 23 00:01:09,020 --> 00:01:12,090 o alta functie pe care eu însumi am de gând să scrie, dar care nu 24 00:01:12,090 --> 00:01:13,820 există în prezent. 25 00:01:13,820 --> 00:01:19,210 De exemplu, să presupunem că am vrut să scrie o funcție care îmi permite să 26 00:01:19,210 --> 00:01:23,830 imprima Bună ziua, virgulă, și apoi numele unui utilizator. 27 00:01:23,830 --> 00:01:29,010 Mai degraba decat de a continua să facă printf Bună ziua,% s, nu ar fi frumos dacă 28 00:01:29,010 --> 00:01:33,380 au fost doar o funcție numită Nu printf dar numele de imprimare? 29 00:01:33,380 --> 00:01:36,600 >> Deci, cu alte cuvinte, doresc să fie în măsură să scrie un program care face un pic 30 00:01:36,600 --> 00:01:37,710 ceva de genul asta. 31 00:01:37,710 --> 00:01:42,070 În primul rând, am de gând să spun printf dvs. nume, determinând astfel posibilitatea de a 32 00:01:42,070 --> 00:01:46,150 da-mi numele lui sau a ei, și apoi eu sunt de gând să utilizeze s șir familiare 33 00:01:46,150 --> 00:01:47,290 declara un șir. 34 00:01:47,290 --> 00:01:50,420 Dă-mi o variabila de tip string, numim e, și magazin în care 35 00:01:50,420 --> 00:01:52,120 Rezultatul apel obține șir. 36 00:01:52,120 --> 00:01:56,060 Dar acum, în ultimele săptămâni, mi-ar fi oarecum plictisitor făcut Bună ziua,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> Și în alte cuvinte, am văzut acest lucru exemplu o grămadă de ori, și este un 39 00:02:02,570 --> 00:02:05,280 exemplu banal pentru că există doar un singur linie de cod asa ca nu e chiar o 40 00:02:05,280 --> 00:02:06,860 mare pentru a păstra tastați din nou. 41 00:02:06,860 --> 00:02:09,990 Dar să presupunem că această linie de cod de fapt, au devenit o povară, și 42 00:02:09,990 --> 00:02:12,900 nu este o linie de cod, dar e 10 de linii de cod câteva săptămâni de acum, 43 00:02:12,900 --> 00:02:15,190 si tu esti doar obosit de copiere și lipire sau 44 00:02:15,190 --> 00:02:17,180 rescrie același cod. 45 00:02:17,180 --> 00:02:22,100 Nu ar fi frumos loc de a face printf Bună ziua,% s și așa mai departe, 46 00:02:22,100 --> 00:02:26,500 Nu ar fi frumos dacă ar exista doar o funcție numită nume imprimare 47 00:02:26,500 --> 00:02:27,560 ia un argument - 48 00:02:27,560 --> 00:02:29,120 cu alte cuvinte, este nevoie de intrare - 49 00:02:29,120 --> 00:02:30,620 și apoi punct și virgulă. 50 00:02:30,620 --> 00:02:33,240 Astfel că funcția, nu-i așa Ar fi frumos dacă a existat? 51 00:02:33,240 --> 00:02:36,690 Atunci nu ar trebui să vă faceți griji cu privire la ceea ce printf este, ceea ce% s și toate 52 00:02:36,690 --> 00:02:39,400 aceste complexe care sunt Nu tot ceea ce interesant. 53 00:02:39,400 --> 00:02:40,570 Ele sunt utile. 54 00:02:40,570 --> 00:02:44,700 >> Deci numele de imprimare, din păcate, nu a fost inventat ceva acum 40 de ani, plus. 55 00:02:44,700 --> 00:02:45,980 Nimeni nu sa gândit să-l scrie. 56 00:02:45,980 --> 00:02:48,300 Dar asta e frumusetea de a avea un limbaj de programare, la fel ca în 57 00:02:48,300 --> 00:02:52,930 Scratch puteți defini blocuri personalizate, astfel în C, și cele mai multe orice limbă, nu-i asa 58 00:02:52,930 --> 00:02:57,260 defini propria funcționalitate, pot ați defini propriile funcții. 59 00:02:57,260 --> 00:03:01,710 Deci, chiar dacă ajungem principal de în mod automat pentru gratuit, putem declara 60 00:03:01,710 --> 00:03:02,730 propriile funcții. 61 00:03:02,730 --> 00:03:05,670 >> Așa că am de gând să facă unele cameră aici sus sus, și am de gând să declare meu 62 00:03:05,670 --> 00:03:08,210 funcție proprie, care va arata o pic ciudat la început, dar vom veni 63 00:03:08,210 --> 00:03:09,400 înapoi la acest lucru înainte de timp. 64 00:03:09,400 --> 00:03:12,310 Am de gând să spun nule, astfel indicând această funcție nu 65 00:03:12,310 --> 00:03:16,040 ceva, are un efect secundar, dar nu se întoarce ceva la mine în 66 00:03:16,040 --> 00:03:18,810 același mod în care se Int sau obține șir în sine nu. 67 00:03:18,810 --> 00:03:22,450 Și am de gând să dea această funcție o Numele cu majuscule, și am de gând să 68 00:03:22,450 --> 00:03:26,470 precizează că acest tip va avea un șir, și am de gând pentru a apela că 69 00:03:26,470 --> 00:03:27,600 Numele șir. 70 00:03:27,600 --> 00:03:32,100 Am putea spune orice vreau, dar am Vreau codul meu de a fi auto-documentarea. 71 00:03:32,100 --> 00:03:34,770 Cu alte cuvinte, dacă unul din voi ar fi să deschide acest fișier și a citit-o, ai putea 72 00:03:34,770 --> 00:03:39,020 un fel de deduce din numele de care intrare ce rol ar trebui să joace. 73 00:03:39,020 --> 00:03:42,270 >> Și acum de mai jos, care, am de gând să deschidă cret bretele și închisă cret bretele, 74 00:03:42,270 --> 00:03:47,140 și așa observa l-am urmat aceeași model pe liniile patru prin intermediul a șapte ca 75 00:03:47,140 --> 00:03:51,622 I-am urmărit de o săptămână bună, plus acum între, să zicem, linii nouă și 76 00:03:51,622 --> 00:03:53,400 14 care compun principal. 77 00:03:53,400 --> 00:03:56,160 Cu alte cuvinte, imprima numele este o altă funcție. 78 00:03:56,160 --> 00:03:58,990 Acum, compilatorul nu are de gând să știu pentru a apela acest lucru în mod automat 79 00:03:58,990 --> 00:04:02,670 pentru că am literalmente doar inventat, dar se va ști în continuare pentru a apela principal 80 00:04:02,670 --> 00:04:08,710 automat, și apoi, desigur, în linia 13, Fac apel propria mea funcție. 81 00:04:08,710 --> 00:04:12,805 Și pentru că eu am declarat că funcția pe linie de patru înainte principală, 82 00:04:12,805 --> 00:04:16,579 acest lucru se întâmplă pentru a preda compilator ceea ce citez, citatul, "numele de imprimare" 83 00:04:16,579 --> 00:04:18,140 înseamnă și ce ar trebui să facă. 84 00:04:18,140 --> 00:04:22,700 Deci, eu sunt un fel de a da un nou personalizat bloca în contextul, spun, Scratch. 85 00:04:22,700 --> 00:04:27,240 >> Deci, aici, eu pot pune ca foarte frecvente sau model recurent de cod țin 86 00:04:27,240 --> 00:04:32,300 scris în clasă, printf % S salut,% s / n ", - 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 ceea ce vreau să pun aici? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Deci, vreau să pun numele în acest context. 91 00:04:41,420 --> 00:04:43,440 Deci, observa un pic de o dihotomie aici. 92 00:04:43,440 --> 00:04:47,680 Pentru că am declara propria funcție și am oarecum arbitrar numit 93 00:04:47,680 --> 00:04:50,880 imprima numele, și pentru că am specificat în paranteze că această 94 00:04:50,880 --> 00:04:55,035 Funcția ia un argument, tipul de care este un șir - deci este un cuvânt 95 00:04:55,035 --> 00:05:00,010 sau frază sau ceva de genul asta - și Am sunat ca numele argument, că 96 00:05:00,010 --> 00:05:04,770 înseamnă singura variabilă care este în domeniul de aplicare, ca să spunem așa, este numele. 97 00:05:04,770 --> 00:05:07,780 >> S există doar între ceea ce doi acolade, desigur? 98 00:05:07,780 --> 00:05:12,990 Ei bine, într-adevăr, la fel ca și linia 10, prin 14, astfel încât la fel ca luni nu se poate folosi 99 00:05:12,990 --> 00:05:17,650 S, dar ce pot face este să treacă S în numele imprimare. 100 00:05:17,650 --> 00:05:21,030 Imprima numele doar așa se întâmplă să-l dea un alias, un sinonim, un pseudonim, 101 00:05:21,030 --> 00:05:24,400 numindu-l nume, și acum folosind-o în această linie. 102 00:05:24,400 --> 00:05:26,840 Deci, acum lasă-mă salva, zoom out. 103 00:05:26,840 --> 00:05:31,250 >> Lasă-mă să merg mai departe și să salut. 104 00:05:31,250 --> 00:05:32,400 Arată bine. 105 00:05:32,400 --> 00:05:36,110 Nu scuipa orice erori. . / Bună Enter. 106 00:05:36,110 --> 00:05:37,020 Care e numele meu? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 Și salut David. 109 00:05:39,270 --> 00:05:41,820 Deci, nu tot ceea ce interesant, dar gândește-te acum. 110 00:05:41,820 --> 00:05:44,310 Aveți acum că același ingredient așa cum am făcut la zero pentru a 111 00:05:44,310 --> 00:05:45,420 face propriile funcții. 112 00:05:45,420 --> 00:05:46,770 >> Dar există un pic de prins. 113 00:05:46,770 --> 00:05:50,620 Să presupunem că nu m-am gândit cu adevărat acest lucru prin intermediul și eu de fapt fără 114 00:05:50,620 --> 00:05:54,250 Chiar mă gândesc la asta scris că funcția de aici. 115 00:05:54,250 --> 00:05:55,420 Se simte perfect rezonabil. 116 00:05:55,420 --> 00:05:58,440 În Scratch nu exista notiunea de locația în script-urile dumneavoastră. 117 00:05:58,440 --> 00:06:00,670 Ai putea pune unul aici, unul aici, unul aici, și-ar putea începe 118 00:06:00,670 --> 00:06:03,310 să se uite un pic murdar, dacă nu pune-l frumos, dar nu 119 00:06:03,310 --> 00:06:05,910 indiferent de locul unde fizic script au fost pe ecran. 120 00:06:05,910 --> 00:06:09,660 Din păcate, în C - și acest lucru este, spre deosebire de limbaje cum ar fi Java și Python 121 00:06:09,660 --> 00:06:13,600 și alții care s-ar putea să fie familiarizat cu - Din păcate, în C, pentru a nu 122 00:06:13,600 --> 00:06:15,830 contează, pentru că Uita-te la ceea ce este o să se întâmple acum. 123 00:06:15,830 --> 00:06:19,010 >> Funcția implicită care se va a executa este, desigur, principal. 124 00:06:19,010 --> 00:06:22,290 Principal se va chema numele de imprimare pe linie opt, dar, din păcate, 125 00:06:22,290 --> 00:06:26,660 compilatorul nu va ști chiar că numele de imprimare există până când ajunge la linia de 11, 126 00:06:26,660 --> 00:06:28,520 care, din păcate, este Va fi prea târziu. 127 00:06:28,520 --> 00:06:30,660 Deci, hai sa facem să salut. 128 00:06:30,660 --> 00:06:32,950 Și acum, la naiba, două erori generate. 129 00:06:32,950 --> 00:06:36,050 Deci, acum lasă-mă să derulați până la foarte în primul rând, așa cum ar trebui să facem mereu, și 130 00:06:36,050 --> 00:06:39,560 observă că se tipa la mine, "Declarație implicită a funcției 131 00:06:39,560 --> 00:06:40,540 imprima numele. " 132 00:06:40,540 --> 00:06:43,860 >> Deci, am văzut acest mesaj înainte, Declarația implicită a funcției. 133 00:06:43,860 --> 00:06:48,080 Când am văzut că un fel de eroare? 134 00:06:48,080 --> 00:06:49,180 Când nu am includ o bibliotecă. 135 00:06:49,180 --> 00:06:53,470 Dacă am uitat cs50.h și mi-ar lua tipat la pentru a obține șir sau să Int. 136 00:06:53,470 --> 00:06:56,880 Dar, în acest caz, această funcție de imprimare Numele nu este într-o bibliotecă, nu? 137 00:06:56,880 --> 00:07:00,230 Este literalmente în acest dosar, astfel ceea ce este cu adevarat problema? 138 00:07:00,230 --> 00:07:04,660 >> Ei bine, din păcate, în C, este nevoie de tine atât de incredibil de literalmente că, dacă 139 00:07:04,660 --> 00:07:08,640 Vreau o funcție numită nume de imprimare a exista, fie trebuie să pună în aplicare 140 00:07:08,640 --> 00:07:11,940 care funcționează la foarte de sus a dvs. cod, astfel încât este accesibil pentru a scădea 141 00:07:11,940 --> 00:07:15,070 funcții, dar sincer, care devine neglijent foarte repede. 142 00:07:15,070 --> 00:07:18,160 Personal, îmi place să pun primul principal deoarece atunci este foarte clar ce aceasta 143 00:07:18,160 --> 00:07:19,890 Programul are la prima vedere. 144 00:07:19,890 --> 00:07:23,290 Și în plus, puteți obține în colț ciudat cazurile în care, dacă x vrea să cheme 145 00:07:23,290 --> 00:07:27,530 Y dar y s-ar putea numi x, tu doar punct de vedere fizic nu se poate pune de fapt, un 146 00:07:27,530 --> 00:07:28,540 deasupra celeilalte. 147 00:07:28,540 --> 00:07:31,230 >> Dar se pare că în C, putem rezolva acest lucru foarte simplu. 148 00:07:31,230 --> 00:07:34,010 Am de gând să pună un pic de spațiu aici, iar eu sunt doar de gând să 149 00:07:34,010 --> 00:07:38,170 preventiv, deși oarecum redundant, urmează să o predea 150 00:07:38,170 --> 00:07:42,320 compilator că există o funcție pus numele de imprimare, este nevoie de un șir, 151 00:07:42,320 --> 00:07:46,330 și am de gând pentru a apela numele acesta virgulă. 152 00:07:46,330 --> 00:07:50,220 >> Deci, acest lucru acum, în linie cu patru, pe care noi nu s-au văzut înainte, este o declarație 153 00:07:50,220 --> 00:07:53,940 a unui nume de imprimare funcție, dar este doar o promisiune că această funcție va 154 00:07:53,940 --> 00:07:56,620 în cele din urmă să fie definite, în cele din urmă să fie puse în aplicare. 155 00:07:56,620 --> 00:08:00,180 Acest lucru acum pot lăsa în pace pentru că acum aceasta este definiția, 156 00:08:00,180 --> 00:08:04,090 implementarea, un fel de ultima milă a punerii în aplicare a acestei 157 00:08:04,090 --> 00:08:05,130 anumită funcție. 158 00:08:05,130 --> 00:08:08,450 Deci, sincer, e stupid, e enervant, dar aceasta este calea C este, și e 159 00:08:08,450 --> 00:08:12,050 pentru că ai nevoie de foarte literal și, ca un calculator sincer ar trebui, 160 00:08:12,050 --> 00:08:16,020 doar nu exact ceea ce se spune la face, și astfel încât comanda este important. 161 00:08:16,020 --> 00:08:18,940 >> Astfel încât să păstreze în minte și, din nou, începe să observa recurența modele. 162 00:08:18,940 --> 00:08:21,850 Cote sunt vreți, dacă nu aveți deja, începe sa se confrunte cu mesaje 163 00:08:21,850 --> 00:08:24,700 ca asta, care la prima vedere par a fi totul criptic, dar dacă începi 164 00:08:24,700 --> 00:08:29,000 pentru a căuta aceste cuvinte cheie cum ar fi "Declarație implicit," menționează de o 165 00:08:29,000 --> 00:08:32,380 Funcția în acest caz - și, sincer, tu uneori obține chiar și un pic de verde 166 00:08:32,380 --> 00:08:35,010 simbol morcov care vă spune unde problema este, probabil - 167 00:08:35,010 --> 00:08:40,980 puteți începe să lucreze drum prin încă mesaje de eroare nevăzute. 168 00:08:40,980 --> 00:08:45,860 Orice întrebări cu privire la scris dvs. Funcția propriu în acest fel? 169 00:08:45,860 --> 00:08:47,540 >> Să facem ceva care este un puțin mai convingătoare. 170 00:08:47,540 --> 00:08:51,760 Mai degrabă decât face doar ceva care are un efect secundar de imprimare, dă-mi drumul 171 00:08:51,760 --> 00:08:55,340 înainte și de a salva un fișier nou, și vom numesc acest positive.c, chiar dacă este 172 00:08:55,340 --> 00:08:57,600 va fi un pic diferit față de ultima dată. 173 00:08:57,600 --> 00:09:01,910 Și de data asta, vreau să re-pune în aplicare exemplu ultima dată de positive.C, care 174 00:09:01,910 --> 00:09:04,430 este forța utilizatorul să dea mi un număr întreg pozitiv. 175 00:09:04,430 --> 00:09:07,280 Dar am avut de a folosi obține Int ultima oară. 176 00:09:07,280 --> 00:09:10,780 Nu ar fi fost frumos dacă ar exista o funcție numită obține Int pozitiv 177 00:09:10,780 --> 00:09:13,610 că am putea externaliza doar acest bucată de funcționalitate a? 178 00:09:13,610 --> 00:09:16,480 Deci, diferența aici este că voi punerea în aplicare a obține Int pozitiv, dar spre deosebire de 179 00:09:16,480 --> 00:09:20,330 Numele de imprimare care a avut un efect secundar - aceasta nu sa întors ceva de la mine ca 180 00:09:20,330 --> 00:09:21,710 un număr sau un șir de caractere - 181 00:09:21,710 --> 00:09:25,510 se Int pozitiv este, desigur, merge la întoarcă, sperăm, un Int pozitiv. 182 00:09:25,510 --> 00:09:26,170 >> Deci, hai sa facem acest lucru. 183 00:09:26,170 --> 00:09:30,840 Includ cs50.h, Include standard de io.h. 184 00:09:30,840 --> 00:09:33,520 Int main. 185 00:09:33,520 --> 00:09:42,160 Și acum aici, am de gând să merg mai departe și să spunem Int, numim n, este egal 186 00:09:42,160 --> 00:09:44,270 obține Int pozitiv. 187 00:09:44,270 --> 00:09:49,080 Și, la fel ca și obține Int există deja pentru că personalul a scris-o, am de gând 188 00:09:49,080 --> 00:09:53,950 să-și asume în momentul în care se există Int pozitiv, iar acum am de gând 189 00:09:53,950 --> 00:09:57,730 pentru a merge mai departe și spune printf, mulțumiri pentru% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> Deci, acum, dacă am compila acest program, ceea ce se va întâmpla în terminalul meu 192 00:10:07,770 --> 00:10:09,075 fereastră în partea de jos a ecranului? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Am de gând pentru a obține, probabil, că aceeași eroare ca și mai înainte. 195 00:10:13,900 --> 00:10:14,570 Așa că hai să încercăm. 196 00:10:14,570 --> 00:10:16,450 Face pozitiv. 197 00:10:16,450 --> 00:10:19,900 Și din nou, declarația implicită funcției, se Int pozitiv. 198 00:10:19,900 --> 00:10:21,970 Astfel încât să putem rezolva acest lucru în un cuplu de moduri. 199 00:10:21,970 --> 00:10:27,310 Am de gând să-l păstrați simplu și doar pune declarația mea aici și de a lua 200 00:10:27,310 --> 00:10:28,120 Int pozitiv. 201 00:10:28,120 --> 00:10:29,720 Am nevoie așa-numitul semnătură. 202 00:10:29,720 --> 00:10:32,410 Semnătura doar se referă la estetica 203 00:10:32,410 --> 00:10:34,090 prima linie a programului. 204 00:10:34,090 --> 00:10:37,420 Deci, ce ar trebui sa pozitiv Int schimb? 205 00:10:37,420 --> 00:10:37,970 >> Deci, un int. 206 00:10:37,970 --> 00:10:41,540 Vreau să spun în mod ideal, ar reveni ceva de genul Int pozitiv, dar că 207 00:10:41,540 --> 00:10:42,160 nu exista. 208 00:10:42,160 --> 00:10:45,280 Noi nu am văzut că între datele noastre tipuri, așa că avem de a face cu 209 00:10:45,280 --> 00:10:47,170 Faptul că avem foarte puține tipurile de date pentru a lucra cu. 210 00:10:47,170 --> 00:10:50,360 Dar ne putem întoarce un int și doar încredere că acesta va fi pozitiv. 211 00:10:50,360 --> 00:10:52,690 Acesta va fi numit obține Int pozitiv. 212 00:10:52,690 --> 00:10:55,122 >> Și acum ce despre argumentele sale? 213 00:10:55,122 --> 00:10:56,440 Nu-l ia nici o intrare? 214 00:10:56,440 --> 00:10:58,280 Are nevoie de nici o introducere? 215 00:10:58,280 --> 00:11:00,900 Deci, nu are nevoie să știe în orice avans. 216 00:11:00,900 --> 00:11:03,220 Ia string nu, se Int nu. 217 00:11:03,220 --> 00:11:06,430 Printf nu - aceasta trebuie să aibă o anumită de intrare a trecut în ea - și numele de imprimare 218 00:11:06,430 --> 00:11:09,020 nevoie de unele de intrare, dar se Int pozitiv nu. 219 00:11:09,020 --> 00:11:11,530 Așa că am de gând să în mod explicit spune vidul compilator. 220 00:11:11,530 --> 00:11:13,470 Vidul este lipsa de orice altceva. 221 00:11:13,470 --> 00:11:17,990 Deci, înseamnă gol nimic nu se întâmplă în interiorul de aceste paranteze, punct și virgulă. 222 00:11:17,990 --> 00:11:20,840 >> Și acum în partea de jos a fișierului mea - și din nou, Sunt doar un fel de anal 223 00:11:20,840 --> 00:11:23,640 aici, punerea principal în partea de sus, care este o bună practică, deoarece în acest fel, 224 00:11:23,640 --> 00:11:26,220 oricând sau altcineva deschide fișierul, 225 00:11:26,220 --> 00:11:27,400 funcționalitate este chiar acolo. 226 00:11:27,400 --> 00:11:29,660 Puteți arunca cu capul de la un pătrat. 227 00:11:29,660 --> 00:11:34,190 Așa că acum am de gând să duplicat acest lucru, obține vid Int pozitiv, dar eu nu sunt 228 00:11:34,190 --> 00:11:35,430 va lovi un punct și virgulă acum. 229 00:11:35,430 --> 00:11:38,280 Am de gând să deschidă acolade, și acum am nevoie să împrumute 230 00:11:38,280 --> 00:11:39,700 unele idei de luni. 231 00:11:39,700 --> 00:11:44,450 >> Deci, după cum vă amintiți, am făcut ceva ca face următoarele în timp ce 232 00:11:44,450 --> 00:11:45,830 ceva a fost adevărat. 233 00:11:45,830 --> 00:11:46,630 Și ce-am făcut? 234 00:11:46,630 --> 00:11:51,540 Am făcut ceva de genul da mi un întreg pozitiv, 235 00:11:51,540 --> 00:11:52,430 pic de un prompt. 236 00:11:52,430 --> 00:11:53,540 Aș putea folosi cuvinte vreau. 237 00:11:53,540 --> 00:11:54,960 Și apoi am folosit ce? 238 00:11:54,960 --> 00:11:59,530 Int n egal obține Int, nici argumente pentru aceasta. 239 00:11:59,530 --> 00:12:00,550 >> Si observa diferenta. 240 00:12:00,550 --> 00:12:04,680 Atunci când apelați o funcție, atunci când utilizați o funcție, nu pun în vid. 241 00:12:04,680 --> 00:12:08,570 Tu faci doar că, atunci când declară un Funcția, de predare compilatorul ce 242 00:12:08,570 --> 00:12:09,780 ea trebuie să se aștepte. 243 00:12:09,780 --> 00:12:11,650 Deci, nu aveți nevoie pentru a pune anula acolo singur. 244 00:12:11,650 --> 00:12:12,940 >> Și acum, ce a fost starea mea? 245 00:12:12,940 --> 00:12:19,670 Ei bine, n nu este egal cu pozitiv, dar asta e doar pseudo-cod. 246 00:12:19,670 --> 00:12:22,530 Deci, cum pot exprima acest lucru mai curat? 247 00:12:22,530 --> 00:12:24,090 Deci mai mică sau egală cu zero. 248 00:12:24,090 --> 00:12:26,250 Deci, din nou, observa poți să faci mai mică sau egală cu. 249 00:12:26,250 --> 00:12:28,100 Chiar daca este de două separate, simboluri, o puteti face pe 250 00:12:28,100 --> 00:12:29,350 tastatură ca atare. 251 00:12:29,350 --> 00:12:33,950 >> Dar există încă un bug care Am greșit ultima dată prea. 252 00:12:33,950 --> 00:12:36,950 Trebuie să declar - 253 00:12:36,950 --> 00:12:37,460 exact. 254 00:12:37,460 --> 00:12:39,640 Trebuie să declare n afara a buclei. 255 00:12:39,640 --> 00:12:44,180 Așa că am nevoie pentru a pune n până aici, iar eu nu fac Vreau să-l re-declare aici 256 00:12:44,180 --> 00:12:46,480 ca nu cumva să obțineți o nouă variabilă. 257 00:12:46,480 --> 00:12:48,860 Vreau doar sa atribui o valoare de aici. 258 00:12:48,860 --> 00:12:54,320 >> Și acum nu mai sunt destul de terminat aici. 259 00:12:54,320 --> 00:12:57,290 Permiteți-mi merge mai departe de mine și mă prefac că sunt terminat. 260 00:12:57,290 --> 00:13:01,220 Face pozitiv, iar acum există o nouă eroare. 261 00:13:01,220 --> 00:13:04,550 Controlul ajunge la final de Funcția non-gol. 262 00:13:04,550 --> 00:13:07,760 Deci nou mesaj de eroare, dar dacă ai un fel a tachineze pe langa fiecare dintre cuvinte, 263 00:13:07,760 --> 00:13:09,620 probabil aluzie la ceea ce sa întâmplat. 264 00:13:09,620 --> 00:13:11,240 >> Controla. 265 00:13:11,240 --> 00:13:14,250 Mijloace de control doar la comanda de operațiuni într-un program. 266 00:13:14,250 --> 00:13:16,510 Computerul este în control și ceva a mers prost. 267 00:13:16,510 --> 00:13:18,510 Deci, se ajunge la sfârșitul o funcție non-gol. 268 00:13:18,510 --> 00:13:21,760 Ce funcție este aparent referindu-se la? 269 00:13:21,760 --> 00:13:24,790 Ce funcție este non-gol? 270 00:13:24,790 --> 00:13:27,400 Asa ca Int pozitiv, și un pic confuz în bine, 271 00:13:27,400 --> 00:13:29,010 E un fel de gol. 272 00:13:29,010 --> 00:13:33,070 Ea are o specificație de gol pentru ei argumente, dar producția sa este de gând să 273 00:13:33,070 --> 00:13:34,540 fi de tip n. 274 00:13:34,540 --> 00:13:37,260 Deci, cuvântul de pe stânga este așa-numita tip întoarcere. 275 00:13:37,260 --> 00:13:40,320 Cuvântul pe interior este aici de zero sau mai multe argumente 276 00:13:40,320 --> 00:13:41,970 ca o funcție reușește. 277 00:13:41,970 --> 00:13:44,060 >> Deci, ce trebuie să fac? 278 00:13:44,060 --> 00:13:47,650 În acest moment, în codul meu, linia 21 care promptă clipește este acum, am 279 00:13:47,650 --> 00:13:51,430 au un Int pozitiv în interiorul a variabilă numită n. 280 00:13:51,430 --> 00:13:55,200 Cum pot să-l dau înapoi la principal? 281 00:13:55,200 --> 00:13:55,960 Literalmente. 282 00:13:55,960 --> 00:13:59,320 Reveni n punct și virgulă. 283 00:13:59,320 --> 00:14:04,090 >> Deci, doar ca Colton a returnat o bucată de hârtie cu un răspuns la mine prin cădere 284 00:14:04,090 --> 00:14:07,020 că bucata de hârtie în Little Black cutie pe masă, pentru a face acest lucru în 285 00:14:07,020 --> 00:14:10,100 cod, vă literalmente doar scrie, întoarce n, și e ca și cum Colton au fost 286 00:14:10,100 --> 00:14:12,140 predarea-mi ceva înapoi fizice. 287 00:14:12,140 --> 00:14:15,870 În acest caz, ceea ce se întâmplă este de a obține Int pozitiv este de gând să dea înapoi 288 00:14:15,870 --> 00:14:19,220 ceea ce este probabil pozitiv întreg pentru cine? 289 00:14:19,220 --> 00:14:21,380 În cazul în care nu că valoarea ajung? 290 00:14:21,380 --> 00:14:29,080 Care se termină în această variabilă, n, și apoi vom continua cu linie nouă. 291 00:14:29,080 --> 00:14:31,920 >> Deci, cu alte cuvinte, în ordinea operațiuni, acest program pornește 292 00:14:31,920 --> 00:14:34,430 executare, iar compilatorul realizează, oh, vrei biblioteca? 293 00:14:34,430 --> 00:14:36,310 Lasă-mă să-mi iau ce e în asta. 294 00:14:36,310 --> 00:14:37,750 Oh, vrei biblioteca standard IO? 295 00:14:37,750 --> 00:14:39,660 Lasă-mă să-mi iau ce e în asta. 296 00:14:39,660 --> 00:14:44,510 Ce compilator spune să se când va atinge linia de patru? 297 00:14:44,510 --> 00:14:47,980 Oh, ai promis să pună în aplicare Funcția numit obține pozitiv, dar 298 00:14:47,980 --> 00:14:50,820 vom reveni la asta mai târziu, ceva de-a lungul acestor linii. 299 00:14:50,820 --> 00:14:53,450 >> Void main Int înseamnă doar aici e curajul de programul meu. 300 00:14:53,450 --> 00:14:54,990 Linie șapte este doar o bretele buclat. 301 00:14:54,990 --> 00:14:59,540 Linie opt se spune pe partea stângă, da mi 32 de biți pentru un întreg, suna-l n. 302 00:14:59,540 --> 00:15:02,160 Pe partea dreapta, este spunând obține Int pozitiv. 303 00:15:02,160 --> 00:15:07,120 Acum pauză Să povestea asta, deoarece acum Nu țin deplasarea cursorului mea jos. 304 00:15:07,120 --> 00:15:11,720 Cursor mea acum merge aici pentru că acum obține Int pozitiv execută. 305 00:15:11,720 --> 00:15:13,100 Int n este declarat. 306 00:15:13,100 --> 00:15:14,040 Procedați în felul următor. 307 00:15:14,040 --> 00:15:16,090 Printf îmi dă un număr întreg pozitiv. 308 00:15:16,090 --> 00:15:19,740 >> Obțineți un int de la utilizator, păstrați-l în N, și poate face acest lucru din nou și din nou. 309 00:15:19,740 --> 00:15:23,010 Această buclă înseamnă că acest cod ar putea executa în sus și în jos ca acest lucru din nou 310 00:15:23,010 --> 00:15:25,810 și din nou, dar atunci când utilizatorul final cooperează și dă-mi o pozitiv 311 00:15:25,810 --> 00:15:31,750 Int, I, a lovit linia 21, moment în care Numărul este dat înapoi, și care unul 312 00:15:31,750 --> 00:15:34,280 ar trebui să evidențieze acum? 313 00:15:34,280 --> 00:15:35,070 Nouă. 314 00:15:35,070 --> 00:15:39,010 De control, ca să spunem așa, se întoarce la linia de nouă. 315 00:15:39,010 --> 00:15:40,650 Asta e linia care e acum la conducere. 316 00:15:40,650 --> 00:15:43,250 >> Deci, asta e ceea ce sa întâmplat totul acest timp sub capota, dar 317 00:15:43,250 --> 00:15:46,480 când ne-am folosit funcții ca printf sau chiar a obține șir ca altcineva 318 00:15:46,480 --> 00:15:50,600 a scris pentru tine, de control a fost înmânată off-line a altcuiva codul 319 00:15:50,600 --> 00:15:51,290 de linie cu linie. 320 00:15:51,290 --> 00:15:53,770 Este pur și simplu nu am putut să-l văd și am ar putea să nu-l descrie cu adevărat în acest 321 00:15:53,770 --> 00:15:57,620 program, deoarece se află într-un alt fișier de pe hard disk 322 00:15:57,620 --> 00:16:00,000 fără știrea noastră. 323 00:16:00,000 --> 00:16:02,100 Deci, haideți să compileze de fapt și a alerga acest lucru acum. 324 00:16:02,100 --> 00:16:03,890 >> Face pozitiv. 325 00:16:03,890 --> 00:16:05,260 Compila, care este progresul. 326 00:16:05,260 --> 00:16:06,650 . / Pozitiv. 327 00:16:06,650 --> 00:16:08,020 Dă-mi un număr întreg pozitiv. 328 00:16:08,020 --> 00:16:08,800 Să fi dificil. 329 00:16:08,800 --> 00:16:10,430 Negativă 1. 330 00:16:10,430 --> 00:16:11,360 Zero. 331 00:16:11,360 --> 00:16:13,370 Să-i dăm 50. 332 00:16:13,370 --> 00:16:18,100 Multumesc pentru 50 de ani, și astfel de control a revenit acum. 333 00:16:18,100 --> 00:16:21,750 Orice întrebări, apoi, pe care? 334 00:16:21,750 --> 00:16:23,180 Da? 335 00:16:23,180 --> 00:16:25,630 >> [Inaudibil]. 336 00:16:25,630 --> 00:16:26,130 >> Spun din nou. 337 00:16:26,130 --> 00:16:27,860 Oh, bună întrebare. 338 00:16:27,860 --> 00:16:31,100 Deci, s-ar putea observa o paralelă aici care Sunt un fel de tăiere un colț pe. 339 00:16:31,100 --> 00:16:35,420 În linia 12, vreau să spun, se Int pozitiv returnează un int, dar de aceeași 340 00:16:35,420 --> 00:16:39,660 logică, acum logic că, în linia de șase, eu spun că se întoarce principale 341 00:16:39,660 --> 00:16:44,040 un int, dar ceea ce avem nu avut în oricare dintre programele noastre? 342 00:16:44,040 --> 00:16:46,470 Nu am avut niciodată mențiune de acest retur cuvânt cheie. 343 00:16:46,470 --> 00:16:49,970 >> Deci, se dovedește că, în C, cel puțin versiune a acestuia pe care le utilizați 344 00:16:49,970 --> 00:16:55,750 făcut în 1999, punct de vedere tehnic, acest lucru este întâmplă pentru tine în mod automat. 345 00:16:55,750 --> 00:16:59,300 Ori de câte ori vă pună în aplicare un program și pună în aplicare o funcție numită principală, 346 00:16:59,300 --> 00:17:04,230 că funcția va reveni la zero de implicit, dacă nu spun altfel, 347 00:17:04,230 --> 00:17:05,849 si zero este doar o convenție. 348 00:17:05,849 --> 00:17:09,430 Lumea revine la zero, prin urmare, indicând faptul că totul este bine, 349 00:17:09,430 --> 00:17:13,040 lăsându-ne în mod eficient cu patru miliarde posibile lucruri care ar putea merge 350 00:17:13,040 --> 00:17:17,530 greșit, astfel că, dacă ne întoarcem unul, care ar putea însemna un cod care înseamnă 351 00:17:17,530 --> 00:17:18,310 ceva a mers prost. 352 00:17:18,310 --> 00:17:20,589 Am putea întoarce doi, ceea ce înseamnă acest alt lucru nu a mers bine. 353 00:17:20,589 --> 00:17:23,440 Am putea întoarce patru miliarde, care înseamnă alt lucru a mers prost. 354 00:17:23,440 --> 00:17:27,170 >> Și dacă vă gândiți acum la propriul PC sau Mac, s-ar putea aminti că 355 00:17:27,170 --> 00:17:29,610 uneori, veți obține mesaje de eroare criptic de la software-ul care esti 356 00:17:29,610 --> 00:17:32,650 folosind, și, uneori, ea are un om Descrierea prietenos, dar nu e 357 00:17:32,650 --> 00:17:35,265 adesea un cod sau un număr pe ecran? 358 00:17:35,265 --> 00:17:37,800 Dacă acest lucru nu vine în minte, doar ține un ochi pentru ea. 359 00:17:37,800 --> 00:17:40,790 Asta e ceea ce de obicei aceste Codurile se referă la. 360 00:17:40,790 --> 00:17:44,200 Sunt incluse în Microsoft Word și alte programe, astfel încât, dacă depune o 361 00:17:44,200 --> 00:17:48,850 raport de problemă cu compania, puteți spune-le, oh, am luat numarul de eroare 45. 362 00:17:48,850 --> 00:17:51,750 Și unele înapoi programator in cadrul companiei pot uita că în lui sau a ei 363 00:17:51,750 --> 00:17:54,940 cod și spune, oh, asta pentru că am făcut această problemă și de aceea utilizatorul 364 00:17:54,940 --> 00:17:56,240 primit acest mesaj. 365 00:17:56,240 --> 00:17:59,490 >> Dar sincer, e doar un pic distrage atenția și un pic plictisitor pentru 366 00:17:59,490 --> 00:18:02,130 concluzia că, cel puțin pe noastre primele programe, așa că am 367 00:18:02,130 --> 00:18:02,970 a fost o omițând. 368 00:18:02,970 --> 00:18:07,450 Dar tot acest timp fiecare dintre dumneavoastră Funcțiile principale a avut acest secret 369 00:18:07,450 --> 00:18:11,600 linie adăugat în mod automat pentru tine de compilator, doar prin convenție pentru 370 00:18:11,600 --> 00:18:13,172 economisi ceva timp. 371 00:18:13,172 --> 00:18:14,620 >> [Inaudibil]. 372 00:18:14,620 --> 00:18:16,250 >> Nu aveți nevoie să-l includă în principal. 373 00:18:16,250 --> 00:18:16,700 Asta e bine. 374 00:18:16,700 --> 00:18:20,260 Aveți nevoie să-l includă, dacă ați fost de punere în aplicare o funcție ca asta. 375 00:18:20,260 --> 00:18:22,850 În caz contrar, plat funcția de nu ar funcționa. 376 00:18:22,850 --> 00:18:24,480 Dar, în principal, nu este necesar. 377 00:18:24,480 --> 00:18:28,450 Într-o săptămână sau două, vom începe să obtinerea în care obicei odată ce vrem să pornim 378 00:18:28,450 --> 00:18:29,690 semnificând erori. 379 00:18:29,690 --> 00:18:32,550 Întrebare foarte bună. 380 00:18:32,550 --> 00:18:36,880 >> Pauza verbal atât de rapid pentru a menționa că vineri, nu va fi prânzul 381 00:18:36,880 --> 00:18:39,980 per se, dar vom avea cina cu unii dintre studenți și personal. 382 00:18:39,980 --> 00:18:42,940 Dacă doriți să vă alăturați nouă, se simt liber pentru a merge la cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 06:00 vineri. 384 00:18:45,030 --> 00:18:47,990 Spațiul este, ca întotdeauna, limitate, dar vom continue să facă aceste pe o aproape 385 00:18:47,990 --> 00:18:51,420 săptămânal în cazul în spațiu se execută în această săptămână. 386 00:18:51,420 --> 00:18:56,160 >> Deci Cliffhanger că ne-am oprit pe Luni a fost că siruri de caractere poate de fapt, 387 00:18:56,160 --> 00:19:00,520 fie indexate în, ceea ce tocmai tu ce înseamnă se pot obține de la primul caracter, 388 00:19:00,520 --> 00:19:03,770 caracter al doilea, al treilea caracter și așa mai departe, pentru că puteți 389 00:19:03,770 --> 00:19:07,860 cred că în mod efectiv de un șir, cum ar fi Bună ziua, ca fiind, în acest caz, cinci 390 00:19:07,860 --> 00:19:09,670 scrisori în interiorul de cutii. 391 00:19:09,670 --> 00:19:13,370 Și puteți obține de la fiecare dintre cei cutii cu ceea ce sintaxa facut noi 392 00:19:13,370 --> 00:19:15,230 introducerea pe luni? 393 00:19:15,230 --> 00:19:16,760 Aceste paranteze pătrate de pe tastatură. 394 00:19:16,760 --> 00:19:18,980 Asta a însemnat doar du-te la locație la zero. 395 00:19:18,980 --> 00:19:22,840 >> Vom începe numărarea de la zero, astfel suport la zero semnifică h, suport unul 396 00:19:22,840 --> 00:19:25,170 semnifică e, și așa mai departe. 397 00:19:25,170 --> 00:19:28,490 Și așa tot timpul când am fost folosind siruri de caractere și să tastați în "Bună ziua" 398 00:19:28,490 --> 00:19:31,250 și "lumea" și alte lucruri pe pe ecran, acesta a fost depozitat 399 00:19:31,250 --> 00:19:32,820 în cutii de acest gen. 400 00:19:32,820 --> 00:19:33,370 Și să ia o presupunere. 401 00:19:33,370 --> 00:19:37,470 Ce fiecare cutie reprezintă punct de vedere fizic în interiorul computerului? 402 00:19:37,470 --> 00:19:38,250 >> [Inaudibil]. 403 00:19:38,250 --> 00:19:39,150 >> Îmi pare rău? 404 00:19:39,150 --> 00:19:39,580 >> Caractere. 405 00:19:39,580 --> 00:19:44,760 >> Deci, un personaj, cu siguranță, în cazul de siruri de caractere, și un caracter este doar 406 00:19:44,760 --> 00:19:46,800 opt biti sau un octet. 407 00:19:46,800 --> 00:19:49,550 Deci, probabil, cel puțin vag familiarizat cu faptul că dumneavoastră 408 00:19:49,550 --> 00:19:50,500 computerul are memorie. 409 00:19:50,500 --> 00:19:52,110 Acesta are două tipuri de memorie, cel puțin. 410 00:19:52,110 --> 00:19:54,810 Una este hard disk-ul în cazul în care salvați chestii permanent, și că este 411 00:19:54,810 --> 00:19:57,400 de obicei, de mare astfel încât să puteți avea filme și muzică și așa mai departe. 412 00:19:57,400 --> 00:20:04,010 >> Apoi, aveți un alt tip de memorie numit RAM, R-A-M, Random Access 413 00:20:04,010 --> 00:20:07,510 Memorie, iar acest lucru este tipul de memorie care este utilizat atunci când computerul este 414 00:20:07,510 --> 00:20:11,520 de funcționare, dar dacă vă veți pierde puterea sau dvs. moare bateria, ceva care este stocat 415 00:20:11,520 --> 00:20:15,300 în RAM dispare dacă pierzi puterea totul pentru că nu este 416 00:20:15,300 --> 00:20:16,060 persistente. 417 00:20:16,060 --> 00:20:19,120 Ai au de obicei, în aceste zile, un gig de ea, două concerte, poate mai mult. 418 00:20:19,120 --> 00:20:23,490 Și capul de RAM este faptul că este mult mult, mult mai rapid decât hard disk-uri 419 00:20:23,490 --> 00:20:27,390 sau chiar Solid State Drives în aceste zile, dar este de obicei mai scumpe, astfel încât 420 00:20:27,390 --> 00:20:28,480 aveți mai puțin de ea. 421 00:20:28,480 --> 00:20:32,400 >> Deci, conversația de astăzi se referă într-adevăr în RAM, acel tip de memorie care 422 00:20:32,400 --> 00:20:35,270 există doar în timp ce există putere fiind introduse în computer. 423 00:20:35,270 --> 00:20:40,530 Deci, atunci când tastați în H-E-L-L-O, Intră pe tastatura, H se întâmplă într-un singur 424 00:20:40,530 --> 00:20:44,550 octet de RAM, E se întâmplă în un alt octet de RAM, astfel cum este 425 00:20:44,550 --> 00:20:45,800 restul cuvântului. 426 00:20:45,800 --> 00:20:49,010 Deci amintesc ce am putut de a face ultima dată a fost aceasta. 427 00:20:49,010 --> 00:20:53,940 Lasă-mă să merg mai departe și deschide fișierul pe care am numit string.c, și aminti 428 00:20:53,940 --> 00:20:56,860 că părea un pic ceva de genul asta. 429 00:20:56,860 --> 00:20:59,860 Permiteți-mi, de fapt rostogolească înapoi și schimba l la exact ceea ce arata ca, 430 00:20:59,860 --> 00:21:02,654 Lungimea șir de s. 431 00:21:02,654 --> 00:21:04,560 >> Deci, uita-te la programul de aici. 432 00:21:04,560 --> 00:21:08,530 Am includ biblioteca CS50, astfel pe care le putem folosi obține șir. 433 00:21:08,530 --> 00:21:11,400 Am includ standard de io.h astfel încât să putem folosi printf. 434 00:21:11,400 --> 00:21:13,580 De ce am includ string.h? 435 00:21:13,580 --> 00:21:16,980 Acest lucru a fost noua luni. 436 00:21:16,980 --> 00:21:18,230 Așa că am vrut lungimea șirului de caractere. 437 00:21:18,230 --> 00:21:19,090 Str Leng. 438 00:21:19,090 --> 00:21:21,470 Oamenii au decis ani în urmă, Să fie doar succint. 439 00:21:21,470 --> 00:21:24,290 În loc de a numindu-l "lungimea șirului de caractere", hai sa "str. Leng" apel și lăsați 440 00:21:24,290 --> 00:21:28,540 Figura lumea asta, și astfel încât este ceea ce am avea acces la cu string.h. 441 00:21:28,540 --> 00:21:29,390 >> Acest lucru este familiar. 442 00:21:29,390 --> 00:21:30,320 Acest lucru este familiar. 443 00:21:30,320 --> 00:21:31,450 Acest lucru este familiar. 444 00:21:31,450 --> 00:21:32,370 Acesta este un mic nou. 445 00:21:32,370 --> 00:21:35,420 In linia 22 - și ne vom întoarce la acest lucru, dar acum știu - 446 00:21:35,420 --> 00:21:37,880 și v-ar ști numai acest din care au citiți documentația sau în cazul în care 447 00:21:37,880 --> 00:21:39,010 știai deja C - 448 00:21:39,010 --> 00:21:41,510 obține șir, uneori, se poate strica. 449 00:21:41,510 --> 00:21:45,130 În cazul în care utilizatorul este foarte contradictorie sau necooperant și el sau ea doar 450 00:21:45,130 --> 00:21:49,450 nu tastați nimic de la tastatura sau Tipuri de atât de mult de la tastatură care 451 00:21:49,450 --> 00:21:53,760 l copleșește memoria calculatorului, în teorie, se string ar putea reveni 452 00:21:53,760 --> 00:21:56,270 altceva decât o șir de caractere. 453 00:21:56,270 --> 00:22:01,930 Aceasta ar putea reveni o valoare specială numită NULL în toate capacele, N-U-L-L, și acest lucru este 454 00:22:01,930 --> 00:22:03,390 doar o așa-numita valoare santinelă. 455 00:22:03,390 --> 00:22:08,010 Este o valoare deosebită, care semnifică ceva rău sa întâmplat în acest caz. 456 00:22:08,010 --> 00:22:10,520 Este absența unui șir. 457 00:22:10,520 --> 00:22:16,190 >> Deci null am verificare pentru pur și simplu, astfel încât, Pe scurt, Str Leng și 458 00:22:16,190 --> 00:22:20,230 alte funcții care vin cu C, dacă se așteaptă la un șir, dar le trece 459 00:22:20,230 --> 00:22:23,630 lipsa unui șir, dacă treci le NULL, calculatorul sau programul 460 00:22:23,630 --> 00:22:25,000 se va prăbuși doar pur și simplu. 461 00:22:25,000 --> 00:22:25,610 Se va închide. 462 00:22:25,610 --> 00:22:27,250 Acesta va arunca unele mesaj de eroare. 463 00:22:27,250 --> 00:22:28,690 Lucruri rele se va întâmpla. 464 00:22:28,690 --> 00:22:31,130 Deci, chiar dacă aceasta este încă nu bine definite - 465 00:22:31,130 --> 00:22:33,730 acest lucru va face mai mult sens într-o săptămână sau două - în linia 22, aceasta este doar o 466 00:22:33,730 --> 00:22:38,790 exemplu de autocontrol eroare defensivă doar în cazul în care o singură dată din 467 00:22:38,790 --> 00:22:42,040 un ceva milion merge bine, la Cel programul meu nu se va prăbuși. 468 00:22:42,040 --> 00:22:45,960 >> Deci, daca s nu este egal cu ceva rău, Am acest lucru pentru bucla, și acest lucru a fost 469 00:22:45,960 --> 00:22:47,710 unde am avut ca alte noua piesa de sintaxă. 470 00:22:47,710 --> 00:22:51,580 Am o buclă pentru iterarea la zero până la lungimea de s.. 471 00:22:51,580 --> 00:22:56,140 Și apoi aici, am fost un imprimarea s suport eu, dar de ce am folosi% c toate 472 00:22:56,140 --> 00:23:00,770 Dintr-o dată în loc de% s chiar deși s este un șir? 473 00:23:00,770 --> 00:23:02,110 Este un personaj, nu? 474 00:23:02,110 --> 00:23:06,560 S este un șir de caractere, dar e ceva suport, s suport i unde i este zero 475 00:23:06,560 --> 00:23:10,380 sau una sau două, care este un individ caracter în șir, și așa pentru 476 00:23:10,380 --> 00:23:14,970 care, trebuie printf să fie informat că este într-adevăr un personaj să se aștepte. 477 00:23:14,970 --> 00:23:18,096 >> Și apoi amintesc, ceea ce a făcut acest Programul de fapt, nu? 478 00:23:18,096 --> 00:23:19,848 >> Tipărit-l în coloane. 479 00:23:19,848 --> 00:23:21,120 >> Da, exact. 480 00:23:21,120 --> 00:23:24,990 Pur și simplu imprimat cuvântul pe care am tip în o coloană, un personaj pe linie. 481 00:23:24,990 --> 00:23:26,190 Deci, haideți să vedem asta din nou. 482 00:23:26,190 --> 00:23:27,810 Deci, asigurați-șir. 483 00:23:27,810 --> 00:23:30,200 Compilate OK. . / Șir. 484 00:23:30,200 --> 00:23:35,560 Lasă-mă să tastați în H-E-L-L-O, Enter, și într-adevăr, m-am prins, câte unul pe linie. 485 00:23:35,560 --> 00:23:37,280 >> Deci, lasă-mă să fac o optimizare aici. 486 00:23:37,280 --> 00:23:40,240 Dacă te gândești la asta, mai ales în cazul în care le-ați programat înainte, nu e 487 00:23:40,240 --> 00:23:43,340 fără îndoială, o ineficiență în linia 24. 488 00:23:43,340 --> 00:23:46,160 Cu alte cuvinte, nu este neapărat cel mai bun design. 489 00:23:46,160 --> 00:23:50,200 Simplu, cel puțin o dată te amintiți-vă ceea ce este str. Leng, dar e 490 00:23:50,200 --> 00:23:52,640 a face ceva prost potențial. 491 00:23:52,640 --> 00:23:54,863 Ce ar putea fi? 492 00:23:54,863 --> 00:23:56,280 >> [Inaudibil]. 493 00:23:56,280 --> 00:23:56,800 >> Exact. 494 00:23:56,800 --> 00:24:00,340 Este de verificare pentru lungimea lui s de fiecare dată, chiar dacă 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O este întotdeauna va să fie de cinci caractere. 496 00:24:02,980 --> 00:24:05,490 De fiecare dată, prin această buclă, cinci nu se schimbă. 497 00:24:05,490 --> 00:24:08,750 S-ar putea fi incrementarea eu, dar ceea ce este lungimea lui s pe fiecare 498 00:24:08,750 --> 00:24:09,690 iterație de această buclă? 499 00:24:09,690 --> 00:24:15,810 E cinci, e cinci, e cinci, și dar eu întreb, totuși, acest lucru 500 00:24:15,810 --> 00:24:18,320 întrebare din nou și din nou și din nou. 501 00:24:18,320 --> 00:24:20,750 Acum sincer, computerul este atât de al naibii de rapid, nimeni nu va observa o 502 00:24:20,750 --> 00:24:23,780 Diferența în acest caz, însă aceste tipuri de deciziile de design slab poate 503 00:24:23,780 --> 00:24:28,330 începe să adăugați până dacă compilator în sine nu încerca să stabilească acest lucru pentru tine, care 504 00:24:28,330 --> 00:24:30,630 ea de obicei nu ar fi, la cel puțin în aparat. 505 00:24:30,630 --> 00:24:31,540 >> Așa că am de gând să fac asta. 506 00:24:31,540 --> 00:24:34,580 Am de gând să adăugați o virgulă după prima mea variabil, am. 507 00:24:34,580 --> 00:24:37,310 Am de gând să-mi dea un alt variabilă, se cheamă n, doar prin 508 00:24:37,310 --> 00:24:41,330 Convenția pentru numere, și apoi eu sunt va atribui n valoarea string 509 00:24:41,330 --> 00:24:42,530 lungimea uri. 510 00:24:42,530 --> 00:24:46,060 Și apoi am de gând să schimbe starea mea de a fi ce? 511 00:24:46,060 --> 00:24:51,960 Am de gând să schimbe starea mea la timp i este mai mic decât n. 512 00:24:51,960 --> 00:24:55,700 >> Deci, acum, de câte ori sunt eu verificarea lungimea lui s? 513 00:24:55,700 --> 00:25:00,110 După ce, dar e bine să i verifica împotriva n din nou și din nou, deoarece acum cei 514 00:25:00,110 --> 00:25:03,170 Valorile nu sunt de fapt în schimbare. 515 00:25:03,170 --> 00:25:06,020 Acum, pentru acum, doar știi că oricând apela o funcție, există un pic de 516 00:25:06,020 --> 00:25:09,930 deasupra, nu suficient pentru a te descuraja Chiar de la vreodată folosind funcții, dar 517 00:25:09,930 --> 00:25:12,750 cu siguranță, atunci când există o linie de cod place că - și liniile vor primi 518 00:25:12,750 --> 00:25:15,490 mult mai interesant înainte de lung - în cazul în care există o oportunitate de a gândi, dacă am 519 00:25:15,490 --> 00:25:18,320 tastați acest cod, cât de multe ori va executa? 520 00:25:18,320 --> 00:25:20,950 Veți începe să vedeți în timp performanța de programe poate 521 00:25:20,950 --> 00:25:21,660 într-adevăr schimba. 522 00:25:21,660 --> 00:25:24,110 >> De fapt, una din problemele seturi ne-am făcut în ultimii ani implică 523 00:25:24,110 --> 00:25:27,600 de punere în aplicare, așa cum s-ar putea retrage de la săptămână la zero, un corector ortografic, dar o 524 00:25:27,600 --> 00:25:31,380 corector ortografic, care este proiectat pentru a sprijini un dicționar de 150.000 plus 525 00:25:31,380 --> 00:25:32,860 cuvintele pe care le vom da băieți. 526 00:25:32,860 --> 00:25:37,100 Tu ar trebui să scrie cod care se încarcă aceste cuvinte în memoria RAM, atât în 527 00:25:37,100 --> 00:25:40,700 cutii cum am vazut pe ecran un moment Acum, și apoi la fel de repede ca tine 528 00:25:40,700 --> 00:25:43,740 poate, trebuie să fie în măsură să răspundă la un chestiune de forma, este acest cuvânt 529 00:25:43,740 --> 00:25:44,280 scris gresit? 530 00:25:44,280 --> 00:25:45,420 Este acest cuvânt scris gresit? 531 00:25:45,420 --> 00:25:46,770 Este acest cuvânt scris gresit? 532 00:25:46,770 --> 00:25:49,525 >> Și, în ceva de genul că ceea ce ne-am realizat în ultimii ani este transformat în, 533 00:25:49,525 --> 00:25:53,500 deși pe opt-in mod opțional, un un concurs de soiuri, prin care 534 00:25:53,500 --> 00:25:59,470 studenții care folosesc mai puțin RAM și mai puțin timp, mai puține cicluri CPU, ajung 535 00:25:59,470 --> 00:26:02,640 barbotare până la partea de sus a unui mic bord lider sau de trafic pe care le pune la 536 00:26:02,640 --> 00:26:04,770 pagina cursului ca ne-am făcut în ultimii ani. 537 00:26:04,770 --> 00:26:08,100 Deci, din nou, total opțional, dar această vorbește la oportunitățile de proiectare 538 00:26:08,100 --> 00:26:11,250 care sunt departe odată ce vom începe construirea deasupra unora dintre aceste 539 00:26:11,250 --> 00:26:14,010 blocuri de bază. 540 00:26:14,010 --> 00:26:16,780 >> Așa că lasă-mă să mă întorc la această schemă pentru doar o clipă și arată un pic 541 00:26:16,780 --> 00:26:17,610 ceva mai mult. 542 00:26:17,610 --> 00:26:21,400 Aceasta într-adevăr este un șir, și ne-am luat profitat de câteva biblioteci, 543 00:26:21,400 --> 00:26:25,150 io.h standard, care are - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, printre alte lucruri. 546 00:26:27,860 --> 00:26:31,540 cs50.h, care a obține int si sa string și așa mai departe, string.h, care 547 00:26:31,540 --> 00:26:32,570 a avut Str Leng. 548 00:26:32,570 --> 00:26:34,800 Dar se pare că există încă un alt. 549 00:26:34,800 --> 00:26:38,540 Sincer, există o mulțime de antet fișiere care declară funcții 550 00:26:38,540 --> 00:26:43,320 pentru biblioteci, dar acest lucru este ctype.h de fapt, o să fie ceva 551 00:26:43,320 --> 00:26:46,900 avantajoasă pentru că am de gând să meargă mai departe și să implementeze un 552 00:26:46,900 --> 00:26:48,120 alt program aici. 553 00:26:48,120 --> 00:26:52,420 >> Lasă-mă să merg mai departe și să se deschidă ceva Am scris în prealabil numit 554 00:26:52,420 --> 00:26:55,750 capitalize.c, și să ia o privire la modul în care aceasta funcționează. 555 00:26:55,750 --> 00:27:00,340 Observați că eu sunt, folosind, în această versiune din ea, trei fișiere familiare. 556 00:27:00,340 --> 00:27:04,110 Observați că în linia 18, sunt a obține o linie de text. 557 00:27:04,110 --> 00:27:07,660 Comunicarea în linia 21, eu sunt susținând că următorul cod se va 558 00:27:07,660 --> 00:27:12,170 valorifica s, indiferent de utilizatorul tastat în, și cum fac asta? 559 00:27:12,170 --> 00:27:13,300 Ei bine, eu iau - 560 00:27:13,300 --> 00:27:14,750 lecție învățată de la ultima dată - 561 00:27:14,750 --> 00:27:18,370 Eu am și n declararea și iterarea peste caracterele din șir. 562 00:27:18,370 --> 00:27:22,720 Și atunci ce este acest bloc de Codul în linia 24, prin 27 563 00:27:22,720 --> 00:27:24,550 face în termeni de nespecialist? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Litere mici scrisoare înapoi. 566 00:27:29,730 --> 00:27:30,430 >> Exact. 567 00:27:30,430 --> 00:27:35,920 Dacă s suport eu - așa că, dacă i-lea Caracterul de s, care este un anumit 568 00:27:35,920 --> 00:27:40,220 char în șir, este mai mare decât sau egală cu litere mici și o - 569 00:27:40,220 --> 00:27:42,670 Amintim că dubla ampersand semnifica și - 570 00:27:42,670 --> 00:27:46,810 și același caracter, s suport i, este mai mică sau egală cu litere mici z, 571 00:27:46,810 --> 00:27:50,600 Asta înseamnă că este un o sau un B sau C sau o dot, dot, dot, sau un z, ceea ce înseamnă 572 00:27:50,600 --> 00:27:51,340 e mici. 573 00:27:51,340 --> 00:27:52,900 Ceea ce vreau să fac în acest caz? 574 00:27:52,900 --> 00:27:55,010 Ei bine, eu pot face acest lucru oarecum criptic, dar 575 00:27:55,010 --> 00:27:56,160 să tachineze acest afară. 576 00:27:56,160 --> 00:28:00,210 >> Am de gând pentru a apela printf, imprimă% C pentru că vreau să imprimați din nou acest 577 00:28:00,210 --> 00:28:01,580 caracter de pe ecran. 578 00:28:01,580 --> 00:28:06,650 Am apoi de gând să ia s suport I, Caracterul i-lea în e, și atunci de ce 579 00:28:06,650 --> 00:28:12,330 fac acest mic truc aici, minuscule de un capital de minus? 580 00:28:12,330 --> 00:28:16,352 Ce este că merge să dea mine, în general vorbind? 581 00:28:16,352 --> 00:28:18,600 >> [Inaudibil]. 582 00:28:18,600 --> 00:28:19,390 >> Exact. 583 00:28:19,390 --> 00:28:20,860 Nu-mi amintesc cu adevărat - 584 00:28:20,860 --> 00:28:24,390 a fost de 65 de capitala A. Eu nu prea amintiți-vă ceea ce minuscule un este, 585 00:28:24,390 --> 00:28:25,540 dar nu contează. 586 00:28:25,540 --> 00:28:26,580 Calculator știe. 587 00:28:26,580 --> 00:28:30,380 Deci prin a spune, minuscule un minus capitalul O, e ciudat să fie 588 00:28:30,380 --> 00:28:33,530 scăderea unul char la altul, dar ce sunt caractere sub capota? 589 00:28:33,530 --> 00:28:34,520 Sunt doar numere. 590 00:28:34,520 --> 00:28:36,980 Deci, indiferent de aceste numere sunt, lăsați computerul amintesc 591 00:28:36,980 --> 00:28:38,240 mai degrabă decât mine uman. 592 00:28:38,240 --> 00:28:41,710 >> Deci minuscule un capital minus A este O să-mi dea o diferență. 593 00:28:41,710 --> 00:28:45,370 Se întâmplă să fie 32, și care ar fi în cazul de mici b și de capital B 594 00:28:45,370 --> 00:28:45,930 și așa mai departe. 595 00:28:45,930 --> 00:28:47,710 Acesta rămâne consecvent, din fericire. 596 00:28:47,710 --> 00:28:51,930 Deci, eu sunt în esență spun, ia minuscule scrisoare, scade pe care 597 00:28:51,930 --> 00:28:55,340 diferență etalon, și că Am suport modificări eficient s de la 598 00:28:55,340 --> 00:28:59,400 minuscule la, desigur, cu majuscule, fără să-mi într-adevăr să se gândească 599 00:28:59,400 --> 00:29:03,040 despre sau să vă amintiți, ce au fost cele Numerele Am vorbit despre atunci când opt 600 00:29:03,040 --> 00:29:04,800 voluntari a venit pe scenă? 601 00:29:04,800 --> 00:29:08,800 Acum Între timp, în mai, în cazul în care nu este o scrisoare mici determinată 602 00:29:08,800 --> 00:29:10,400 prin linia 24, doar imprima. 603 00:29:10,400 --> 00:29:12,590 Vreau doar să atingeți personaje care au fost 604 00:29:12,590 --> 00:29:14,410 de fapt minuscule inițial. 605 00:29:14,410 --> 00:29:15,150 >> Deci, haideți să vedem asta. 606 00:29:15,150 --> 00:29:17,400 Face valorifica. 607 00:29:17,400 --> 00:29:18,470 Compilat, OK. 608 00:29:18,470 --> 00:29:19,730 . / Valorifica. 609 00:29:19,730 --> 00:29:23,530 Și lasă-mă să tastați în H-E-L-L-O în litere mici, Enter. 610 00:29:23,530 --> 00:29:26,370 Și observați că acesta este convertit în majuscule. 611 00:29:26,370 --> 00:29:27,940 Lasa-ma sa fac acest lucru din nou cu un alt cuvânt. 612 00:29:27,940 --> 00:29:32,720 Cum despre D-A-V-I-D cu primul D capitalizate ca un nume de obicei este? 613 00:29:32,720 --> 00:29:33,560 Enter. 614 00:29:33,560 --> 00:29:34,870 Observați că e mai corect. 615 00:29:34,870 --> 00:29:40,250 Pur și simplu scoase că prima neschimbate D prin care else. 616 00:29:40,250 --> 00:29:42,170 >> Deci, tineti minte, atunci, o câteva lucruri aici. 617 00:29:42,170 --> 00:29:45,060 Unul, dacă vrei vreodată să verificați două Condițiile de la o dată, aveți posibilitatea să și le 618 00:29:45,060 --> 00:29:46,500 împreună așa cum am prezis. 619 00:29:46,500 --> 00:29:49,900 Puteți compara caractere în acest fel și trata eficient personaje ca 620 00:29:49,900 --> 00:29:53,050 numere, dar sincer, acest lucru este atât de al naibii de criptic N-am de gând să-și amintească 621 00:29:53,050 --> 00:29:56,510 cum de a veni cu aceasta la zero fără raționament prin ea pentru destul de 622 00:29:56,510 --> 00:29:57,140 un pic de timp. 623 00:29:57,140 --> 00:30:00,590 >> Nu ar fi fost frumos dacă cineva acolo a scris o funcție numită este 624 00:30:00,590 --> 00:30:05,390 mai mici, care ar putea răspunde pentru mine adevărate sau fals, acest personaj este mici? 625 00:30:05,390 --> 00:30:09,350 Ei bine, din fericire, oricine a scris ctype.h a făcut exact acest lucru. 626 00:30:09,350 --> 00:30:15,540 Lasă-mă să merg pe aici și adăugați ctype pentru c tipuri, și acum lasă-mă să merg pe aici și 627 00:30:15,540 --> 00:30:18,820 rescrie această linie, după cum urmează. 628 00:30:18,820 --> 00:30:27,510 >> Deci, dacă se numește este mai mică, eu susțin, s suport eu, apoi am de gând pentru a șterge 629 00:30:27,510 --> 00:30:29,400 aceste două linii cu totul. 630 00:30:29,400 --> 00:30:32,570 Deci, acum altcineva, sper, a scris o funcție numită este mai mic, iar aceasta 631 00:30:32,570 --> 00:30:36,250 Se pare că au făcut și au declarat în interiorul de ctype.h. 632 00:30:36,250 --> 00:30:39,480 Și acum am de gând să părăsească linia 27 singur, am de gând să părăsească linia 31 633 00:30:39,480 --> 00:30:41,890 singur, dar observați cât de mult am înăsprit codul meu. 634 00:30:41,890 --> 00:30:42,690 Acum e curat. 635 00:30:42,690 --> 00:30:47,250 Este mai dificil să se uite prin deoarece acum funcția, în plus, este 636 00:30:47,250 --> 00:30:50,080 atât de minunat a numit-o doar face ceea ce spune. 637 00:30:50,080 --> 00:30:51,520 >> Așa că acum am de gând să salveze această. 638 00:30:51,520 --> 00:30:52,930 Am de gând pentru a micșora. 639 00:30:52,930 --> 00:30:56,650 Și, la fel ca și în Scratch ai putea avea Booleans, valori booleene adevărat sau 640 00:30:56,650 --> 00:31:01,530 fals, că este exact ceea ce este reducerea cu eficacitate a returnărilor. 641 00:31:01,530 --> 00:31:02,960 Lasă-mă să recompilați. 642 00:31:02,960 --> 00:31:04,500 Lasă-mă să re-run. 643 00:31:04,500 --> 00:31:07,350 Și acum să încercăm din nou, H-E-L-L-O, Enter. 644 00:31:07,350 --> 00:31:07,970 Asta e destul de bine. 645 00:31:07,970 --> 00:31:10,150 Și încercați să-l din nou, asigurați-vă că am Nu am greșit ceva. 646 00:31:10,150 --> 00:31:11,670 Care este valorificat de asemenea. 647 00:31:11,670 --> 00:31:14,190 >> Dar acest lucru nu este suficient de bun, deoarece Un alt lucru pe care eu nu o să 648 00:31:14,190 --> 00:31:19,090 amintesc dacă am lucra prin ea într-adevăr cu grijă, să zicem, hârtie este 649 00:31:19,090 --> 00:31:19,920 această linie naibii. 650 00:31:19,920 --> 00:31:23,450 Nu ar fi frumos dacă ar exista o funcție numită de sus? 651 00:31:23,450 --> 00:31:26,930 Ei bine, se pare că există este în ctype.h, de asemenea. 652 00:31:26,930 --> 00:31:30,150 Am de gând să merg mai departe și de tip - 653 00:31:30,150 --> 00:31:31,340 permiteți-mi să aduc acea linie înapoi. 654 00:31:31,340 --> 00:31:36,430 În loc de asta aici, lasă-mă să merg mai departe și spune, substitui% C 655 00:31:36,430 --> 00:31:42,110 Rezultatul a sunat această funcție pentru a superioară pe caracterul i-lea de e. 656 00:31:42,110 --> 00:31:45,430 Și acum observați se face un pic mai echilibrat. 657 00:31:45,430 --> 00:31:48,870 Trebuie să țină evidența numărului de paranteze Am deschis și închis. 658 00:31:48,870 --> 00:31:50,050 >> Deci, acum este chiar mai curat. 659 00:31:50,050 --> 00:31:53,460 Acum, acest program este tot mai bine și mai bine proiectat, fără îndoială, pentru că e 660 00:31:53,460 --> 00:31:56,450 mult, mult mai ușor de citit, dar nu e de sa corecta. 661 00:31:56,450 --> 00:31:57,600 Face valorifica. 662 00:31:57,600 --> 00:31:58,930 . / Valorifica. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-O. Să-l executați din nou, D-O-V-I-D. OK, deci suntem încă în 664 00:32:03,220 --> 00:32:04,250 forma destul de buna. 665 00:32:04,250 --> 00:32:06,030 >> Dar acum, la partea superioară. 666 00:32:06,030 --> 00:32:09,720 Eu propun ca nu e una mai mult rafinament am putea face ar fi 667 00:32:09,720 --> 00:32:12,820 foarte frumos, care ar putea strânge într-adevăr la acest cod și într-adevăr să ne dea cinci 668 00:32:12,820 --> 00:32:15,150 din cinci pentru proiectare, de exemplu. 669 00:32:15,150 --> 00:32:16,510 Ce-ar fi frumos să scape de? 670 00:32:16,510 --> 00:32:20,770 Ei bine, uite cât de al naibii de mult acest bloc de cod este doar pentru a face ceva simplu. 671 00:32:20,770 --> 00:32:23,850 >> Acum, ca o paranteza, cum s-ar putea avea văzut în secțiunea super-acest trecut 672 00:32:23,850 --> 00:32:27,570 week-end, nu aveți nevoie de strict acolade, atunci când au doar un singur 673 00:32:27,570 --> 00:32:32,180 linie de cod, chiar dacă ne-am propus menținându-le astfel încât acesta face mult 674 00:32:32,180 --> 00:32:36,190 mai clar, ca în formă de U Scratch lui blocuri, ceea ce este în interiorul sucursalei. 675 00:32:36,190 --> 00:32:40,170 Dar nu ar fi frumos dacă la partea superioară, atunci când este administrat intrare sale, sa transformat într- 676 00:32:40,170 --> 00:32:44,730 majuscule dacă nu este, și ceea ce ar fi fi minunat, în caz contrar, dacă 677 00:32:44,730 --> 00:32:47,210 e deja scris cu majuscule? 678 00:32:47,210 --> 00:32:49,620 Doar trece-l prin și-l lase în pace. 679 00:32:49,620 --> 00:32:50,660 >> Așa că poate face asta. 680 00:32:50,660 --> 00:32:52,990 Am putea încerca și sperăm că nu, dar lasa-ma 681 00:32:52,990 --> 00:32:54,450 introduce un alt lucru. 682 00:32:54,450 --> 00:32:57,440 În loc de a folosi acest built-in terminalul Fereastra aici, amintim că 683 00:32:57,440 --> 00:33:01,130 această pictogramă negru pătrat vă oferă o fereastră de terminal mai mare pe care am container plin 684 00:33:01,130 --> 00:33:02,260 ecran dacă vreau? 685 00:33:02,260 --> 00:33:05,820 Deci, se dovedește că sunt un fel de ciudat nume, dar există aceste lucruri numite 686 00:33:05,820 --> 00:33:10,970 paginile de manual, paginile de manual, om de scurt, și eu pot accesa aceste către 687 00:33:10,970 --> 00:33:14,515 om tastarea - 688 00:33:14,515 --> 00:33:15,570 ceea ce vreau cu tipul? 689 00:33:15,570 --> 00:33:17,830 Omul de sus. 690 00:33:17,830 --> 00:33:21,090 >> Și acum observa dacă există o funcționa în interiorul calculatorului, în 691 00:33:21,090 --> 00:33:23,970 acest caz aparat, care este doar sistemul de operare Linux, se va 692 00:33:23,970 --> 00:33:27,920 să-mi dea un set oarecum criptic de de ieșire, dar veți găsi în timp ce 693 00:33:27,920 --> 00:33:31,720 întotdeauna este formatat destul de mult același astfel încât începi să te obișnuiești cu el. 694 00:33:31,720 --> 00:33:35,130 Observa în partea de sus la partea superioară, iar se pare că este aceeași documentație 695 00:33:35,130 --> 00:33:35,680 pentru a reduce. 696 00:33:35,680 --> 00:33:38,740 Cine a scris-o a fost tăiat unele colțuri și pune totul pe o singură pagină. 697 00:33:38,740 --> 00:33:40,720 Scopul acestor lucruri "în viata este de a converti un 698 00:33:40,720 --> 00:33:42,780 scrisoare de superior sau minuscule. 699 00:33:42,780 --> 00:33:46,290 >> Observați că în Sinopsis, pagina de manual mă învață ce dosar am 700 00:33:46,290 --> 00:33:48,130 pentru a include pentru a utiliza acest lucru. 701 00:33:48,130 --> 00:33:51,320 Este mi-a dat de semnături pentru aceste funcții, ambele dintre ele, chiar 702 00:33:51,320 --> 00:33:53,510 deși ne chiar acum numai pasă de unul. 703 00:33:53,510 --> 00:33:54,730 Aici este acum o descriere. 704 00:33:54,730 --> 00:33:58,800 Pentru superior convertește litera C la majuscule, dacă este posibil. 705 00:33:58,800 --> 00:34:02,280 >> Încă nu că instructiv, dar permiteți-mi să uite acum sub valoarea returnata, lucru 706 00:34:02,280 --> 00:34:03,520 care a dat-o înapoi. 707 00:34:03,520 --> 00:34:08,600 Deci, valoarea returnată este cea a litera convertite sau C, în cazul în care 708 00:34:08,600 --> 00:34:09,870 conversie nu a fost posibil. 709 00:34:09,870 --> 00:34:11,202 Ce este C? 710 00:34:11,202 --> 00:34:12,560 >> Caracterul original. 711 00:34:12,560 --> 00:34:15,370 >> Caracterul original și știm că de, din nou, merge până la 712 00:34:15,370 --> 00:34:19,179 Sinopsis, și cine a scris acest Funcția doar a decis că de intrare 713 00:34:19,179 --> 00:34:22,909 pentru a superioară și inferioară a este doar arbitrar va fi numit C. 714 00:34:22,909 --> 00:34:24,909 Ele ar putea fi numit cel mai nimic ei vor, dar au păstrat 715 00:34:24,909 --> 00:34:26,270 simplu ca C. 716 00:34:26,270 --> 00:34:27,880 Așa că m-am consultat pagina de om. 717 00:34:27,880 --> 00:34:31,870 Această frază mă liniștește că, dacă nu este o literă mică, este 718 00:34:31,870 --> 00:34:34,969 O să-mi dai înapoi C, care este perfectă, ceea ce înseamnă că pot scăpa de 719 00:34:34,969 --> 00:34:36,199 starea mea altcineva. 720 00:34:36,199 --> 00:34:39,679 >> Așa că lasă-mă să mă întorc la gedit, și Acum lasă-mă să fac asta. 721 00:34:39,679 --> 00:34:41,960 Am de gând să copiați declarația printf. 722 00:34:41,960 --> 00:34:45,969 Am de gând să merg mai departe și chiar în interiorul pentru imprimare bucla asta, si sa 723 00:34:45,969 --> 00:34:48,760 scăpa de acum acest întreg dacă construcție. 724 00:34:48,760 --> 00:34:51,860 Nu a fost o idee rea, și a fost foarte mult mai corect și în concordanță cu 725 00:34:51,860 --> 00:34:54,100 tot ceea ce am predicat, dar pur și simplu nu este necesar. 726 00:34:54,100 --> 00:34:57,070 De îndată ce vă dați seama că unele bibliotecă Funcția că există altcineva 727 00:34:57,070 --> 00:35:01,340 scris, sau poate ai scris în altă parte în fișierul, îl puteți folosi și într-adevăr 728 00:35:01,340 --> 00:35:02,690 începe să se intensifice cod. 729 00:35:02,690 --> 00:35:06,080 >> Și când spun lucruri de genul stil bun, faptul că această persoană numită 730 00:35:06,080 --> 00:35:11,490 funcționează în sus, sau anterior este mai mic este minunat util, deoarece 731 00:35:11,490 --> 00:35:12,900 sunt foarte descriptiv. 732 00:35:12,900 --> 00:35:16,120 Tu nu ar dori pentru a apela funcțiile x și y și z, care au 733 00:35:16,120 --> 00:35:19,620 mult, mult mai puțin înțeles. 734 00:35:19,620 --> 00:35:25,160 Orice întrebări cu privire la această serie de îmbunătățiri? 735 00:35:25,160 --> 00:35:28,010 >> Deci, este suficient să spunem unul dintre takeaways este chiar problema ta 736 00:35:28,010 --> 00:35:30,960 Set - Poate problema set de unul, dar cu siguranță, P set de două și mai departe, chiar 737 00:35:30,960 --> 00:35:34,380 atunci când sunt corect nu neapărat înseamnă că sunt perfecte doar 738 00:35:34,380 --> 00:35:36,155 dar și deosebit de bine concepute. 739 00:35:36,155 --> 00:35:38,420 Asta e cealaltă axă a începi să te gândești. 740 00:35:38,420 --> 00:35:41,730 Deci asta a fost un șir interiorul dvs. memoria computerului, dar dacă aveți o 741 00:35:41,730 --> 00:35:46,180 grămadă de personaje cum ar fi H-E-L-L-O interior de RAM, și să presupunem 742 00:35:46,180 --> 00:35:51,330 că în programul de apel se string de mai multe ori astfel încât vă 743 00:35:51,330 --> 00:35:54,200 apel obține șir dată, atunci suna a obține din nou șir. 744 00:35:54,200 --> 00:35:55,880 Ei bine, ce se întâmplă la întâmplă în timp? 745 00:35:55,880 --> 00:35:59,170 >> Cu alte cuvinte, dacă aveți o linie de cod, deși afară din context, cum ar fi 746 00:35:59,170 --> 00:36:02,120 string s devine - 747 00:36:02,120 --> 00:36:02,960 hai sa facem acest lucru. 748 00:36:02,960 --> 00:36:05,270 Numele șir este egal obține șir. 749 00:36:05,270 --> 00:36:08,590 Deci, să presupunem că linie de cod este menit pentru a cere utilizatorului pentru numele lui sau a ei. 750 00:36:08,590 --> 00:36:14,580 Această următoarea linie de cod este menit să ceară utilizator pentru lui sau ei școală, și 751 00:36:14,580 --> 00:36:15,920 această linie viitoare, și așa mai departe. 752 00:36:15,920 --> 00:36:18,150 Să presupunem că ne tot întreabă utilizator pentru altul și 753 00:36:18,150 --> 00:36:19,750 un alt și un alt șir. 754 00:36:19,750 --> 00:36:22,390 Ei au de gând să rămână în memoria în același timp. 755 00:36:22,390 --> 00:36:24,280 Unul nu este de gând să rescrie celălalt. 756 00:36:24,280 --> 00:36:26,420 Școală nu se suprascrie celălalt. 757 00:36:26,420 --> 00:36:28,520 Dar, în cazul în care toate fac ei ajung în memorie? 758 00:36:28,520 --> 00:36:32,030 >> Ei bine, dacă vom începe să desena pe ecran, pe care le putem folosi acest lucru 759 00:36:32,030 --> 00:36:35,800 aici, ca o tablă, în cazul în care acest lucru negru dreptunghi reprezintă computerul meu 760 00:36:35,800 --> 00:36:39,800 memorie, am de gând să înceapă arbitrar împărțind-o în sus, în pătrate mici, 761 00:36:39,800 --> 00:36:42,120 fiecare reprezentând un octet de memorie. 762 00:36:42,120 --> 00:36:46,560 Sincer, dacă aveți un gigabyte de memorie RAM aceste zile, aveți un miliard de bytes 763 00:36:46,560 --> 00:36:49,540 de memorie în computer, astfel încât un miliard de aceste pătrate. 764 00:36:49,540 --> 00:36:52,110 Deci, este suficient să spunem, această nu este cu adevărat de scară. 765 00:36:52,110 --> 00:36:58,250 >> Dar am putea ține desen toate acestea în mod clar nu este la scară pătrate, iar această 766 00:36:58,250 --> 00:37:01,260 reprezintă colectiv memoria computerului meu. 767 00:37:01,260 --> 00:37:03,136 Acum, vom face doar punct, punct, punct. 768 00:37:03,136 --> 00:37:06,260 Deci, cu alte cuvinte, atunci când am prompte acum utilizatorului cu șir Ia să-mi dea un 769 00:37:06,260 --> 00:37:07,350 șir, ce se întâmplă? 770 00:37:07,350 --> 00:37:14,270 Dacă tipuri de utilizator în "Bună ziua", care se termină în H-E-L-L-O. Dar să presupunem 771 00:37:14,270 --> 00:37:15,720 apoi utilizatorului tipurile din - 772 00:37:15,720 --> 00:37:17,250 De fapt, eu nu ar fi făcut salut pentru că cerem 773 00:37:17,250 --> 00:37:18,330 le pentru numele lor. 774 00:37:18,330 --> 00:37:20,580 Așa că haideți să ne întoarcem dacă eu pot face asta. 775 00:37:20,580 --> 00:37:26,130 >> Deci, dacă am tip în D-A-V-I-D pentru numele meu, dar amintesc ca a doua linie de 776 00:37:26,130 --> 00:37:29,220 Codul a fost a obține din nou string pentru a obține școala lor. 777 00:37:29,220 --> 00:37:32,090 Unde este acel cuvânt pe care utilizatorul Tipuri de gând să mergem? 778 00:37:32,090 --> 00:37:38,290 Ei bine, poate că va intra în H-O-R-V-A-R-D. Deci, chiar dacă am 779 00:37:38,290 --> 00:37:41,560 trase ca două rânduri, aceasta este doar o grămadă de bytes in dvs. 780 00:37:41,560 --> 00:37:42,710 RAM computerului. 781 00:37:42,710 --> 00:37:46,560 Există o problemă de acum, pentru că acum, dacă eu sunt utilizarea RAM în acest foarte rezonabil 782 00:37:46,560 --> 00:37:49,910 dar un fel de mod naiv, ce poti sa Nu pare distinge? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 În cazul în care una începe și unde se termină, nu? 785 00:37:54,680 --> 00:37:55,860 Sunt un fel de interferență împreună. 786 00:37:55,860 --> 00:37:57,920 >> Deci, se dovedește calculator nu face acest lucru. 787 00:37:57,920 --> 00:38:04,720 Permiteți-mi, de fapt derula înapoi în timp o câteva personaje, și în loc de Harvard 788 00:38:04,720 --> 00:38:09,570 merge imediat după numele utilizatorului, utilizatorul devine de fapt, în spatele 789 00:38:09,570 --> 00:38:12,000 scenei, un caracter special introdus prin 790 00:38:12,000 --> 00:38:13,885 calculator pentru el sau ea. 791 00:38:13,885 --> 00:38:19,470 / 0, altfel cunoscut sub numele de caracter NUL supărător numit N-U-L, nu 792 00:38:19,470 --> 00:38:22,190 N-U-L-L, dar scrie-l ca / ​​0. 793 00:38:22,190 --> 00:38:27,130 E doar toate biți de zero este un marker în între primul cuvânt care utilizatorului 794 00:38:27,130 --> 00:38:28,290 introdus și al doilea. 795 00:38:28,290 --> 00:38:33,020 >> Deci, Harvard de fapt acum se termină ca această secvență de caractere 796 00:38:33,020 --> 00:38:36,110 și o mai / 0. 797 00:38:36,110 --> 00:38:41,690 Deci, cu alte cuvinte, către având aceste Valorile santinelă, opt la zero învecinate 798 00:38:41,690 --> 00:38:45,220 biți, puteți începe acum să se facă distincția un caracter la altul. 799 00:38:45,220 --> 00:38:49,720 Deci, tot acest timp ceea ce a fost "Bună ziua" este de fapt, "hello", cu o / 0, și 800 00:38:49,720 --> 00:38:53,580 În același timp, ar putea foarte bine fi destul de un pic mai mult RAM 801 00:38:53,580 --> 00:38:56,400 interiorul calculatorului. 802 00:38:56,400 --> 00:38:57,810 >> Lasă-mă să fac un lucru acum. 803 00:38:57,810 --> 00:39:01,800 Se pare că toate aceste pătrate am fost de desen, ele sunt, da, 804 00:39:01,800 --> 00:39:06,140 siruri de caractere, dar mai în general, aceste lucruri sunt tablouri. 805 00:39:06,140 --> 00:39:10,590 O matrice este doar o bucată de memorie care este spate în spate la spate în spate, 806 00:39:10,590 --> 00:39:15,130 și de obicei folosesc o matrice de cale din această notație paranteza. 807 00:39:15,130 --> 00:39:18,210 Deci, vom vedea aceste destul de un pic în timp, dar lasă-mă să merg mai departe și 808 00:39:18,210 --> 00:39:21,160 deschide, să-l numim vârstele. 809 00:39:21,160 --> 00:39:23,920 Si observa ceea ce putem face cu aceste trucuri același, un pic 810 00:39:23,920 --> 00:39:25,750 bit mai mult sintaxa aici. 811 00:39:25,750 --> 00:39:29,270 >> Deci, în linia 17 din acest program - De fapt, permiteți-mi să executați programul de primul 812 00:39:29,270 --> 00:39:30,770 astfel încât să putem vedea ce face chestia asta. 813 00:39:30,770 --> 00:39:33,530 Permiteți-mi să fac apel la vârstele compila acest program. 814 00:39:33,530 --> 00:39:34,950 Vârstele. /. 815 00:39:34,950 --> 00:39:36,480 Câți oameni sunt în camera? 816 00:39:36,480 --> 00:39:38,020 Spune-i trei. 817 00:39:38,020 --> 00:39:39,575 Vârsta de prima persoană? 818 00:39:39,575 --> 00:39:42,710 18, 19, și 20. 819 00:39:42,710 --> 00:39:46,770 Și acum oarecum ridicol, eu doar au făcut un program care vârstele cele 820 00:39:46,770 --> 00:39:47,740 trei persoane. 821 00:39:47,740 --> 00:39:50,390 >> Deci, există în mod clar o oportunitate pentru unele aritmetică distracție aici. 822 00:39:50,390 --> 00:39:51,560 Din fericire, matematica este corect. 823 00:39:51,560 --> 00:39:54,720 18 sa dus la 19, 19 a fost la 20 și așa mai departe. 824 00:39:54,720 --> 00:39:58,510 Dar ceea ce este într-adevăr menit să fie ilustrativ aici este cum vom stocarea 825 00:39:58,510 --> 00:40:00,190 vârstele cele trei oameni. 826 00:40:00,190 --> 00:40:02,370 Permiteți-mi mări la ceea ce este întâmplă pe aici. 827 00:40:02,370 --> 00:40:06,240 >> Deci, în primul rând, aceste primele câteva rânduri ar trebui fi obtinerea destul de familiar. 828 00:40:06,240 --> 00:40:08,770 Sunt doar a solicita confirmarea utilizatorului pentru Numărul de persoane în cameră. 829 00:40:08,770 --> 00:40:11,490 Apoi Sunt folosind lua int și de a face în timp ce la face acest lucru din nou și din nou și din nou. 830 00:40:11,490 --> 00:40:15,780 Am văzut că modelul înainte, dar linia 27 este nou și, de fapt destul de 831 00:40:15,780 --> 00:40:18,160 util, și vor deveni ce în ce mai util. 832 00:40:18,160 --> 00:40:21,620 Observați că ceea ce e diferit în linia 27 este că eu par a fi declararea unei 833 00:40:21,620 --> 00:40:23,960 int numit vârstele, dar așteptați. 834 00:40:23,960 --> 00:40:27,140 Nu e doar vârstele int. 835 00:40:27,140 --> 00:40:30,130 Există aceste paranteze pătrate, în interiorul căreia este n. 836 00:40:30,130 --> 00:40:35,150 >> Deci suportul n în acest context, nu în interiorul unei printf aici, dar 837 00:40:35,150 --> 00:40:44,370 în această linie unic 27, această linie este spunând, da-mi n int, fiecare dintre care 838 00:40:44,370 --> 00:40:46,080 este de tip int. 839 00:40:46,080 --> 00:40:49,870 Deci, aceasta este o galeata, ca să spunem așa, de, în acest caz, trei numere întregi înapoi la 840 00:40:49,870 --> 00:40:52,770 spate în spate, astfel că în mod eficient au trei variabile. 841 00:40:52,770 --> 00:40:54,890 Alternativă, să fie clar, ar fi aceasta. 842 00:40:54,890 --> 00:40:57,400 >> Dacă am vrut primul student varsta, am putea face acest lucru. 843 00:40:57,400 --> 00:40:59,520 Dacă am vrut de-al doilea student Varsta am putea face acest lucru. 844 00:40:59,520 --> 00:41:01,860 Dacă aș fi vrut al treilea elev varsta, am putea face acest lucru. 845 00:41:01,860 --> 00:41:04,320 Și Doamne ferește avem nevoie de toată lumea vârstă în această cameră - 846 00:41:04,320 --> 00:41:07,670 Vreau să spun, acest lucru este un heck de o mulțime de copii, pastă din nou și din nou și din nou. 847 00:41:07,670 --> 00:41:10,870 Și în plus odată ce am compila acest program, În cazul în care un alt student iese în afară peste 848 00:41:10,870 --> 00:41:14,200 de ușa, acum numărul meu de variabile este incorectă. 849 00:41:14,200 --> 00:41:17,450 >> Deci, ce este frumos despre un tablou este la fel de Imediat ce începeți să vă simțiți singur 850 00:41:17,450 --> 00:41:20,190 copierea și lipirea, șansele sunt că e nu cea mai bună abordare. 851 00:41:20,190 --> 00:41:22,240 O matrice este dinamic potențial. 852 00:41:22,240 --> 00:41:24,610 Nu știu în avans cât de mulți oameni vor fi în cameră, 853 00:41:24,610 --> 00:41:28,670 dar eu nu știu am nevoie de n de ele, și voi dau seama n atunci când vine momentul. 854 00:41:28,670 --> 00:41:35,500 Această linie de cod înseamnă acum, da-mi un segment de memorie care arata ca aceasta 855 00:41:35,500 --> 00:41:40,380 în cazul în care numărul de cutii de pe ecran este în întregime dependent de n, care 856 00:41:40,380 --> 00:41:42,010 utilizatorul tastat inch 857 00:41:42,010 --> 00:41:44,850 >> Deci, acum restul acestui program este de fapt, destul de similar cu ceea ce 858 00:41:44,850 --> 00:41:46,860 tocmai am făcut cu caractere. 859 00:41:46,860 --> 00:41:49,970 Observați Am o pentru buclă începând cu linia 30. 860 00:41:49,970 --> 00:41:54,920 Deci, chiar după ce am obține matrice, am repeta de la Y este egal cu zero până la n. 861 00:41:54,920 --> 00:41:58,890 Am doar acest printf instructiv mesajul să spun, da-mi vârstă 862 00:41:58,890 --> 00:42:03,690 de persoană pe care am #%, astfel încât numărul unu, Numărul doi, numarul trei. 863 00:42:03,690 --> 00:42:04,730 Și de ce am făcut asta? 864 00:42:04,730 --> 00:42:08,870 Sincer, oamenii preferă să numere de la unu în sus în timp ce oamenii de știință de calculator, 865 00:42:08,870 --> 00:42:09,620 la zero în sus. 866 00:42:09,620 --> 00:42:11,700 Oamenii de stiinta de calculator nu sunt de gând să folosesc acest tip de program, astfel încât suntem 867 00:42:11,700 --> 00:42:13,990 va începe doar numărarea la unul ca oamenii normali. 868 00:42:13,990 --> 00:42:17,630 >> Și acum, în linia 33, observa ușor diferite bucată de sintaxă. 869 00:42:17,630 --> 00:42:23,710 Vârstă i-lea în care variabila de tip matrice este de gând pentru a obține un int. 870 00:42:23,710 --> 00:42:25,770 Și acum în cele din urmă, aceasta este doar aritmetică aici. 871 00:42:25,770 --> 00:42:29,200 Am decis într-o buclă separată a solicita trece ceva timp, și acum în acest 872 00:42:29,200 --> 00:42:31,400 buclă separată, aceste linii executa. 873 00:42:31,400 --> 00:42:35,810 >> Un an de acum, persoana pe care o va fi i de ani, dar observa acest lucru nu este 874 00:42:35,810 --> 00:42:36,500 variabila i. 875 00:42:36,500 --> 00:42:38,390 Acest lucru este de acum% I pentru Int. 876 00:42:38,390 --> 00:42:43,210 Și notificare, primul substituent, I conectați la I plus 1, asa ca am conta ca un 877 00:42:43,210 --> 00:42:44,250 persoană normală. 878 00:42:44,250 --> 00:42:49,190 Și apoi pentru valoarea de vârsta lor, pentru i ani, am lua o vesnicie suportul 879 00:42:49,190 --> 00:42:52,980 I - și de ce fac, plus o aici? 880 00:42:52,980 --> 00:42:53,760 Ei doar varsta. 881 00:42:53,760 --> 00:42:55,030 Este alegerea mea stupid de programe. 882 00:42:55,030 --> 00:42:56,810 Ei doar in varsta de un an. 883 00:42:56,810 --> 00:42:59,770 Aș putea să tastați în orice număr care De fapt, eu vreau acolo. 884 00:42:59,770 --> 00:43:02,430 >> Deci, ce este de fapt tot relevanța aici? 885 00:43:02,430 --> 00:43:07,610 Ei bine, lasă-mă de fapt derula înapoi aici și vopsea o imagine 886 00:43:07,610 --> 00:43:10,830 de ceea ce se află înainte. 887 00:43:10,830 --> 00:43:15,720 Ce vom face cu următoarea noastră Set problema Doi se abuza de 888 00:43:15,720 --> 00:43:17,070 lumea de criptografie. 889 00:43:17,070 --> 00:43:22,500 Deci, acesta este un șir de caractere, asa ca o Secvența de mai multe caractere, și ce 890 00:43:22,500 --> 00:43:23,750 spune acest lucru? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 Nu e în versiunea on-line de diapozitive. 893 00:43:30,600 --> 00:43:35,880 >> Deci, eu susțin că acest lucru este egal cu aceasta, o publicitate prost de la mulți ani 894 00:43:35,880 --> 00:43:39,950 Acum că s-ar putea aminti de fapt, una dintre originile sale. 895 00:43:39,950 --> 00:43:42,740 Deci, acesta este un exemplu de criptare sau criptografie. 896 00:43:42,740 --> 00:43:46,150 Se pare că, dacă doriți să trimite de fapt, informații sau cota 897 00:43:46,150 --> 00:43:49,310 Informații cu cineva siguranță, ca un mesaj ca aceasta, puteți 898 00:43:49,310 --> 00:43:50,500 încăierare litere. 899 00:43:50,500 --> 00:43:53,170 Dar de obicei, cuvintele sunt Nu amestecate la întâmplare. 900 00:43:53,170 --> 00:43:56,365 Sunt permutate într-un fel sau modificate într-un fel, astfel încât - Oops. 901 00:43:56,365 --> 00:43:59,040 Asta e un spoiler distractiv pentru data viitoare. 902 00:43:59,040 --> 00:44:04,390 >> Astfel încât să puteți mapa ceea ce este aparent O să B. Observați că liniile de sus 903 00:44:04,390 --> 00:44:05,420 Capitalizarea-înțelept. 904 00:44:05,420 --> 00:44:07,960 Aparent R devine e. 905 00:44:07,960 --> 00:44:14,000 Aparent F-H-E-R devine S-U-R-E. Așa Se pare că există o cartografiere, și în 906 00:44:14,000 --> 00:44:18,720 acest caz, există o destul de prost cartografiere dacă cineva a dat seama? 907 00:44:18,720 --> 00:44:21,440 Acest lucru este ceva numit Rot 13, Rotire 13. 908 00:44:21,440 --> 00:44:24,760 Este stupid de criptare mecanisme pentru că literalmente doar 909 00:44:24,760 --> 00:44:29,160 se adaugă 13 la fiecare dintre litere, prost, în sensul că, dacă doar 910 00:44:29,160 --> 00:44:31,890 au un pic de timp liber pe mâinile tale și un creion, sau doar cred că 911 00:44:31,890 --> 00:44:35,260 prin in capul tau, ai putea încerca toate adăugate posibile - una, două, 912 00:44:35,260 --> 00:44:38,470 trei, punct, punct, punct, 25 la doar rotiți întregul alfabet, și 913 00:44:38,470 --> 00:44:40,860 în cele din urmă, veți da seama ceea ce acest mesaj este. 914 00:44:40,860 --> 00:44:43,700 Deci, dacă ai făcut ceva în scoala nota de trecere mesaje pentru dvs. 915 00:44:43,700 --> 00:44:46,830 cel mai bun prieten, în cazul în care școala dumneavoastră clasa profesor pur și simplu citit prin 916 00:44:46,830 --> 00:44:50,320 mesaj și brută forțat soluție, este posibil să fi ajuns 917 00:44:50,320 --> 00:44:52,550 un răspuns de ce. 918 00:44:52,550 --> 00:44:54,970 >> Acum, desigur, în lumea reală, criptografie este mult mai sofisticat. 919 00:44:54,970 --> 00:45:00,120 Acesta este un fragment de text dintr-un sistem de computer care are nume de utilizator și 920 00:45:00,120 --> 00:45:03,630 parole, ca aproape toate ale noastre, și aceasta este ceea ce parola ar putea 921 00:45:03,630 --> 00:45:07,260 arata daca stocate pe hard dvs. drive, dar în formă criptată. 922 00:45:07,260 --> 00:45:11,050 Aceasta nu este doar o rotație de scrisori, A este B și B este C. Aceasta este 923 00:45:11,050 --> 00:45:15,620 mult mai sofisticat, dar folosește ceea ce este, în general, cunoscut sub numele de cheie secretă 924 00:45:15,620 --> 00:45:16,690 criptografie. 925 00:45:16,690 --> 00:45:20,210 Această imagine spune următoarele Povestea cu câteva icoane. 926 00:45:20,210 --> 00:45:22,250 >> Pe stânga, avem ceea ce vom numi text simplu. 927 00:45:22,250 --> 00:45:25,420 În lumea de criptografie, simplu Textul este doar mesajul original 928 00:45:25,420 --> 00:45:29,050 scris în limba engleză sau franceză sau orice fel de limbaj. 929 00:45:29,050 --> 00:45:32,405 Dacă vrei să-l criptați, vom trece ea pictural prin intermediul unui lacăt, astfel încât 930 00:45:32,405 --> 00:45:35,580 un fel de a algoritmului, o funcție sau program care cineva a scris 931 00:45:35,580 --> 00:45:39,880 care amestecă literele sperăm, mai mult complicatedly mult decât adăugarea de 13 932 00:45:39,880 --> 00:45:40,980 pentru fiecare dintre ele. 933 00:45:40,980 --> 00:45:43,780 >> Ce te scot din acest proces în Orientul Mijlociu nu este numit cyphertext. 934 00:45:43,780 --> 00:45:44,850 Deci, un fel de cuvânt sexy. 935 00:45:44,850 --> 00:45:47,630 Aceasta înseamnă doar că este criptat versiune a textului simplu. 936 00:45:47,630 --> 00:45:52,570 Și numai dacă aveți aceeași secret, 13 sau minus 13, sunteți în măsură să 937 00:45:52,570 --> 00:45:54,970 decripta un mesaj de genul asta. 938 00:45:54,970 --> 00:45:57,770 >> Deci, în problema seta două, printre lucrurile vei face dacă în Hacker 939 00:45:57,770 --> 00:46:01,860 Edition, va trebui să scrie cod pentru a sparge aceste parole, imaginind 940 00:46:01,860 --> 00:46:05,170 ceea ce au fost și modul în care acestea au fost criptat, deși noi nu vă dau un pic 941 00:46:05,170 --> 00:46:06,460 de orientare de-a lungul drum. 942 00:46:06,460 --> 00:46:09,320 În versiunea standard, vom introduce o pereche de cifruri, criptare 943 00:46:09,320 --> 00:46:12,400 mecanisme, unul numit Cezar, unul numit Vigenere, care sunt încă 944 00:46:12,400 --> 00:46:16,100 cifruri de rotație care devine un ceva, B devine ceva, dar 945 00:46:16,100 --> 00:46:18,820 trebuie să-l faci programare pentru că va fi într-adevăr un secret 946 00:46:18,820 --> 00:46:22,840 cheie implicate, care este de obicei un număr sau un cuvânt cheie care numai 947 00:46:22,840 --> 00:46:26,420 expeditorul și destinatarul acestor Mesajele trebuie să înțeleagă. 948 00:46:26,420 --> 00:46:28,660 >> Acum, acest lucru are de fapt încarnări în lumea reală. 949 00:46:28,660 --> 00:46:32,910 Aceasta, de exemplu, este mic orfan Inel decodor secretul lui Annie, si tu 950 00:46:32,910 --> 00:46:35,180 poate implementa de fapt, aceste cifruri de rotație - 951 00:46:35,180 --> 00:46:37,930 Un devine ceva, B devine ceva - cu o pereche de roți, 952 00:46:37,930 --> 00:46:40,840 unul pe exterior, cel din interior astfel că, dacă rotiți roata sau 953 00:46:40,840 --> 00:46:44,170 inelul, puteți alinia de fapt, scrisori cu litere diferite, 954 00:46:44,170 --> 00:46:45,430 a obține un cod secret. 955 00:46:45,430 --> 00:46:48,110 Și astfel ca Cliffhanger pentru ziua de azi, ceea ce am crezut că mi-ar face este un pic de 956 00:46:48,110 --> 00:46:52,170 intoarcere că dacă te întorci la TV pe 24 decembrie, puteți viziona 957 00:46:52,170 --> 00:46:55,390 ad nauseum film pentru 24 de ore într-un rând. 958 00:46:55,390 --> 00:47:06,030 Dar pentru ziua de azi, voi deschide aici și să ne dea doar două minute de o 959 00:47:06,030 --> 00:47:13,493 pedagogic relevant poveste de Crăciun cu un pic de tip pe nume Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [Redare video] 961 00:47:14,400 --> 00:47:17,420 >> -Fie cunoscut de toți fără excepție că Ralph Parker este numit un 962 00:47:17,420 --> 00:47:20,650 membru al Micul orfane Annie secrete cerc și are dreptul la toate 963 00:47:20,650 --> 00:47:23,460 onorurile și beneficiile apar la acesta. 964 00:47:23,460 --> 00:47:25,990 >> -Semnat, Micul orfane Annie. 965 00:47:25,990 --> 00:47:30,100 Contrasemnat, Pierre Andre în cerneală. 966 00:47:30,100 --> 00:47:34,270 Onoruri și beneficii deja la vârsta de nouă ani. 967 00:47:34,270 --> 00:47:39,440 >> [Striga la Radio] 968 00:47:39,440 --> 00:47:40,770 >> Haide, hai să mergem mai departe cu ea. 969 00:47:40,770 --> 00:47:44,965 Nu am nevoie de tot ce jazz despre contrabandiști și pirați. 970 00:47:44,965 --> 00:47:48,270 >> -Ascultă mâine seară pentru aventură încheierea de negru 971 00:47:48,270 --> 00:47:49,650 corabie de pirați. 972 00:47:49,650 --> 00:47:53,320 Acum, e timpul pentru Annie Secret Mesaj pentru tine membri 973 00:47:53,320 --> 00:47:55,720 cercului secrete. 974 00:47:55,720 --> 00:47:56,580 Amintiți-vă, copii. 975 00:47:56,580 --> 00:48:01,720 Numai membrii Cercului Secret al lui Annie poate decoda mesaj secret al lui Annie. 976 00:48:01,720 --> 00:48:05,872 Amintiți-vă, Annie este în funcție de tine. 977 00:48:05,872 --> 00:48:08,670 Setat pini de la B2. 978 00:48:08,670 --> 00:48:11,000 Aici este mesajul. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Sunt la prima mea întâlnire secretă. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre a fost in seara asta mare voce. 983 00:48:21,650 --> 00:48:24,830 Aș putea spune că mesajul din seara asta a fost foarte important. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25. 985 00:48:26,400 --> 00:48:28,540 Asta e un mesaj de la Annie ea. 986 00:48:28,540 --> 00:48:30,086 Amintiți-vă, nu mai spune la nimeni. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Secunde mai târziu, eu sunt în Cazare în casa în care un băiat de nouă 989 00:48:38,710 --> 00:48:42,668 ar putea sta în intimitate și decodare. 990 00:48:42,668 --> 00:48:47,628 Aha, B. m-am dus la alta. 991 00:48:47,628 --> 00:48:53,060 E. Primul cuvânt este "să fie." S. Acesta venea mai ușor acum. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 Asta-i R. 994 00:48:55,940 --> 00:48:56,900 >> -Hai, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Trebuie să plec. 996 00:48:57,860 --> 00:48:59,780 >> -Voi fi dreapta jos, Ma. 997 00:48:59,780 --> 00:49:01,030 Oau. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Asigurați-vă că. 1000 00:49:08,220 --> 00:49:09,500 Asigurați-vă că pentru ce? 1001 00:49:09,500 --> 00:49:11,660 Ce a fost Micul orfane Annie încearcă să spună? 1002 00:49:11,660 --> 00:49:12,844 Asigurați-vă că pentru ce? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie, Randy a ajuns să meargă. 1004 00:49:14,732 --> 00:49:16,148 Te rog ieși? 1005 00:49:16,148 --> 00:49:17,092 >> -Bine, mamă. 1006 00:49:17,092 --> 00:49:18,510 Voi fi afară. 1007 00:49:18,510 --> 00:49:20,270 >> -Am fost obtinerea mai aproape de acum. 1008 00:49:20,270 --> 00:49:21,823 Tensiunea a fost teribilă. 1009 00:49:21,823 --> 00:49:23,045 Ce a fost asta? 1010 00:49:23,045 --> 00:49:26,510 Soarta planetei poate atarna in balanta. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, du-te trebuie să Randy. 1012 00:49:28,985 --> 00:49:32,680 >> -Voi veni imediat pentru plâns cu voce tare. 1013 00:49:32,680 --> 00:49:33,956 >> -Aproape acolo. 1014 00:49:33,956 --> 00:49:35,140 Degetele mele zburat. 1015 00:49:35,140 --> 00:49:36,880 Mintea mea a fost o capcană de oțel. 1016 00:49:36,880 --> 00:49:38,010 Fiecare por vibra. 1017 00:49:38,010 --> 00:49:39,878 Era aproape limpede. 1018 00:49:39,878 --> 00:49:43,210 Da, da, da, da, da. 1019 00:49:43,210 --> 00:49:49,030 >> -Asigurați-vă că pentru a bea Ovaltine dumneavoastră. 1020 00:49:49,030 --> 00:49:50,280 Ovaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 O crummy comercial? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Fiu de cățea. 1025 00:50:00,694 --> 00:50:01,900 >> [END redare video] 1026 00:50:01,900 --> 00:50:04,260 >> DIFUZOR 1: Acesta este CS50, și că vor fi stabilite problemă cu două. 1027 00:50:04,260 --> 00:50:06,305 Ne vedem săptămâna viitoare. 1028 00:50:06,305 --> 00:50:08,800 >> DIFUZOR 2: La următoarea CS50, acest lucru se întâmplă. 1029 00:50:08,800 --> 00:50:11,060 >> SPEAKER 1: Deci, un subiect care nu avea sa uitat la până acum este 1030 00:50:11,060 --> 00:50:12,220 că de indicii funcții. 1031 00:50:12,220 --> 00:50:14,540 Acum, un indicator de funcție este doar adresa unui public 1032 00:50:14,540 --> 00:50:17,000 funcție, dar, la fel ca - 1033 00:50:17,000 --> 00:50:18,250 Fiul unui - 1034 00:50:18,250 --> 00:50:19,670