1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [MUSIC JOC] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 David J. MALAN: Bine. 5 00:00:12,230 --> 00:00:16,440 Acest lucru este CS50, iar această este sfârșitul săptămânii 2. 6 00:00:16,440 --> 00:00:18,480 Așa că astăzi, vom pentru a continua uite noastre 7 00:00:18,480 --> 00:00:21,150 la modul în care ne reprezentăm lucrurile sub hood-- se îndepărtează 8 00:00:21,150 --> 00:00:23,520 de numere, cum ar fi numere întregi și plutitoare Valorile în puncte 9 00:00:23,520 --> 00:00:26,810 și concentrându-se pe siruri de caractere și programe în cele din urmă mult mai interesante. 10 00:00:26,810 --> 00:00:30,140 Dar ne vom lua, de asemenea, o privire la un cateva specifice domeniului problems-- 11 00:00:30,140 --> 00:00:33,620 dintre care prima va fi fi implicat criptografie, 12 00:00:33,620 --> 00:00:36,570 arta de codare informații, în care te vezi mai sus aici 13 00:00:36,570 --> 00:00:41,480 este o imagine de Radio orfane Annie inel secrete de decodare de odinioară. 14 00:00:41,480 --> 00:00:46,490 >> Aceasta este de fapt formă foarte primitivă și forma în interesul copilului de cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 prin acest inel are două disks-- unul interior și unul exterior. 16 00:00:50,590 --> 00:00:54,740 Și prin rotirea unul dintre cei, puteți în esență, linia de sus litere, cum ar fi A 17 00:00:54,740 --> 00:00:59,520 prin Z cu alte litere cum ar fi B prin A. Cu alte cuvinte, 18 00:00:59,520 --> 00:01:03,730 puteți roti literalmente alfabetul, venind astfel cu o cartografiere de la 19 00:01:03,730 --> 00:01:07,820 scrisori scrisori, astfel încât, dacă a vrut să trimită un mesaj secret 20 00:01:07,820 --> 00:01:11,820 pentru cineva ca Annie, ai putea scrie jos mesajul dvs. și apoi rotiți 21 00:01:11,820 --> 00:01:15,370 scrisorile, prin care, dacă te referi de a spune "A", vei spune în schimb "B", 22 00:01:15,370 --> 00:01:17,280 vrei să spui "B" vă spune în schimb "C" - 23 00:01:17,280 --> 00:01:20,240 sau ceva un pic mai inteligent decât asta-- și apoi, în cele din urmă, 24 00:01:20,240 --> 00:01:24,630 atât timp cât Annie are acest decodor inel, ea poate decoda mesajul. 25 00:01:24,630 --> 00:01:28,540 Acum, s-ar putea aminti, de fapt, că această a fost folosit într-un film foarte bine cunoscut, 26 00:01:28,540 --> 00:01:31,140 joacă ad nauseum în timpul sezonul de Crăciun. 27 00:01:31,140 --> 00:01:32,650 Să aruncăm o privire aici. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie PARKER: "Fie ca este vorba cunoscut de toți în rezumat 30 00:01:37,210 --> 00:01:41,000 că Ralph Parker este numit un membru de mic orfan Annie Secret 31 00:01:41,000 --> 00:01:44,860 Cercul și are dreptul la toate onoruri și beneficii care apar acestea. " 32 00:01:44,860 --> 00:01:47,410 >> Ralphie PARKER (povestind): Semnat mic orfan Annie. 33 00:01:47,410 --> 00:01:50,070 Contrasemnat, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 In cerneală. 35 00:01:51,490 --> 00:01:55,494 Onoruri și beneficii, deja la vârsta de nouă ani. 36 00:01:55,494 --> 00:01:57,402 >> [MUSIC JOC] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO Chatter] 38 00:02:00,470 --> 00:02:01,470 Ralphie PARKER: Haide. 39 00:02:01,470 --> 00:02:02,344 Să mergem mai departe cu ea. 40 00:02:02,344 --> 00:02:06,029 Nu am nevoie de tot ce jazz despre contrabandiști și pirați. 41 00:02:06,029 --> 00:02:08,820 RADIO Crainic: Asculta mâine noapte pentru aventura de încheiere 42 00:02:08,820 --> 00:02:11,060 de The Black Pirate Ship. 43 00:02:11,060 --> 00:02:14,740 Acum, e timpul pentru Annie Mesajul secret pentru voi, membrii 44 00:02:14,740 --> 00:02:17,110 a Cercului Secret. 45 00:02:17,110 --> 00:02:20,700 Amintiți-vă copii, numai membrii de Secret Circle lui Annie 46 00:02:20,700 --> 00:02:23,270 poate decoda mesaj secret al lui Annie. 47 00:02:23,270 --> 00:02:27,270 >> Amintiți-vă, Annie este în funcție de tine. 48 00:02:27,270 --> 00:02:30,060 Set ace pentru a-B 2. 49 00:02:30,060 --> 00:02:34,004 Aici este mesajul-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie PARKER (povestind): I Sunt în prima mea întâlnire secretă. 51 00:02:36,503 --> 00:02:40,041 RADIO Crainic: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie PARKER (povestind): Oh, Pierre a fost în mare în seara asta voce. 53 00:02:42,790 --> 00:02:46,110 Aș putea spune că din această seară Mesajul a fost foarte important. 54 00:02:46,110 --> 00:02:47,930 >> RADIO Crainic: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Acesta este un mesaj de la Annie. 56 00:02:49,940 --> 00:02:52,182 Amintiți-vă, să nu spui nimănui. 57 00:02:52,182 --> 00:02:55,077 >> [Gâfâind] 58 00:02:55,077 --> 00:02:57,285 Ralphie PARKER (povestind): Nouăzeci de secunde mai târziu, eu sunt 59 00:02:57,285 --> 00:03:00,090 în singura cameră în Casa în care un băiat de nouă 60 00:03:00,090 --> 00:03:04,380 ar putea sta în intimitate și decoda. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B" 63 00:03:05,680 --> 00:03:06,524 >> [Chicotește] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie PARKER (povestind): M-am dus la alta. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 Primul cuvânt este "să fie." 67 00:03:11,641 --> 00:03:12,140 Da! 68 00:03:12,140 --> 00:03:14,293 Acesta venea mai ușor acum. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Chicotește] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Haide, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Trebuie sa plec! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie PARKER: Voi fi jos, Ma. 74 00:03:21,538 --> 00:03:22,504 Oau. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Asigurați-vă că la. "" Asigurați-vă că pentru a "ce? 77 00:03:31,220 --> 00:03:33,981 Care a fost mic orfan Annie încerci să spui? "Asigurați-vă că" ce? 78 00:03:33,981 --> 00:03:35,522 MAMA: Ralphie, Randy trebuie să plece. 79 00:03:35,522 --> 00:03:36,735 Vrei să ieși? 80 00:03:36,735 --> 00:03:38,190 >> Ralphie PARKER: Bine, mamă! 81 00:03:38,190 --> 00:03:39,787 Voi fi afară dreptate! 82 00:03:39,787 --> 00:03:41,995 Ralphie PARKER (povestind): Am fost obtinerea mai aproape acum. 83 00:03:41,995 --> 00:03:43,370 Tensiunea a fost groaznic. 84 00:03:43,370 --> 00:03:44,794 Ce a fost? 85 00:03:44,794 --> 00:03:47,656 Soarta planetei poate atarna in balanta. 86 00:03:47,656 --> 00:03:50,518 >> MAMA: Ralphie, Randy trebuie să plec! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie PARKER: Voi fi chiar afară, pentru numele lui Dumnezeu! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (Povestind): Aproape am ajuns! 89 00:03:55,343 --> 00:03:56,520 Degetele mele zburat! 90 00:03:56,520 --> 00:03:58,500 Mintea mea a fost o capcană de oțel. 91 00:03:58,500 --> 00:03:59,850 Fiecare por vibrat. 92 00:03:59,850 --> 00:04:01,806 A fost aproape clar! 93 00:04:01,806 --> 00:04:02,773 Da! 94 00:04:02,773 --> 00:04:03,273 Da! 95 00:04:03,273 --> 00:04:03,773 Da! 96 00:04:03,773 --> 00:04:04,740 Da! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie PARKER: "Asigurați-vă că să bea Ovaltine ta. " 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Un comercial crummy? 101 00:04:17,539 --> 00:04:19,439 >> [MUSIC JOC] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie PARKER: Fiu de catea. 103 00:04:21,724 --> 00:04:23,460 >> [Razand] 104 00:04:23,460 --> 00:04:27,070 >> David J. MALAN: Așa că, atunci este o privire la ceea ce criptografie 105 00:04:27,070 --> 00:04:29,880 poate fi pentru un asta-- bea de odinioară. 106 00:04:29,880 --> 00:04:30,900 Deci, un anunț rapid. 107 00:04:30,900 --> 00:04:33,410 Dacă sunteți liber acest Vineri la 13:15 și ar fi 108 00:04:33,410 --> 00:04:36,610 dori să ni se alăture pentru CS50 prânz, cap la acest URL aici. 109 00:04:36,610 --> 00:04:38,080 Primul venit, primul servit, ca de obicei. 110 00:04:38,080 --> 00:04:41,840 Dar, în timp, ne vom asigura că cele mai multe oricine care ar dori să participe 111 00:04:41,840 --> 00:04:43,640 poate programa-înțelept. 112 00:04:43,640 --> 00:04:45,170 >> Deci, siruri de caractere. 113 00:04:45,170 --> 00:04:47,940 Avem Zamyla-- care l-ai cunoscut acum, cel mai probabil 114 00:04:47,940 --> 00:04:50,750 în Problema Set 1-- a cărui nume este scris astfel. 115 00:04:50,750 --> 00:04:53,570 Și să presupunem că ați tastat numele ei într-un program de calculator care este 116 00:04:53,570 --> 00:04:55,710 folosind ceva de genul getString. 117 00:04:55,710 --> 00:04:57,890 În scopul de a prelua aceste intrarile de la tastatura, cum 118 00:04:57,890 --> 00:05:01,620 vom merge despre reprezentând o șir, un cuvânt, un paragraf, 119 00:05:01,620 --> 00:05:03,960 sau mai multe litere ca acestea aici? 120 00:05:03,960 --> 00:05:06,790 >> Am vorbit ultima dată despre numere întregi și probleme 121 00:05:06,790 --> 00:05:09,960 care apar cu preaplin întreg și plutitoare Valorile în puncte 122 00:05:09,960 --> 00:05:12,190 și probleme care apar în precizie. 123 00:05:12,190 --> 00:05:16,080 Cu siruri de caractere, noi cel puțin au un pic mai multa flexibilitate 124 00:05:16,080 --> 00:05:17,970 deoarece strings-- doar în lume- reală 125 00:05:17,970 --> 00:05:19,790 poate fi o lungime destul de arbitrară. 126 00:05:19,790 --> 00:05:21,055 Destul de scurt, destul de lung. 127 00:05:21,055 --> 00:05:23,680 Dar chiar și atunci, vom găsi că computerele pot, uneori, 128 00:05:23,680 --> 00:05:27,200 a alerga afară de memorie și nu chiar stoca un șir destul de mare. 129 00:05:27,200 --> 00:05:30,840 >> Dar pentru acum, să începem să vizualizeze un șir de ceva în aceste cutii 130 00:05:30,840 --> 00:05:31,340 aici. 131 00:05:31,340 --> 00:05:36,410 Deci, șase astfel de cutii, fiecare dintre care reprezintă un caracter sau "char". 132 00:05:36,410 --> 00:05:40,646 Deci, amintesc că "char" - c-h-a-r-- este unul dintre tipurile de date built-in în C. 133 00:05:40,646 --> 00:05:43,520 Și ceea ce este frumos este că puteți folosi ca un fel de ca un bloc, 134 00:05:43,520 --> 00:05:47,880 o piesă de puzzle, dacă vreți, pentru a forma o tip mai mare de date pe care vom continua 135 00:05:47,880 --> 00:05:49,410 pentru a apela un "șir." 136 00:05:49,410 --> 00:05:53,650 >> Acum, ceea ce este util despre gândire despre lucruri cum ar fi siruri de caractere, în acest fel? 137 00:05:53,650 --> 00:05:57,720 Ei bine, se pare că putem pârghie de fapt această structură 138 00:05:57,720 --> 00:06:01,420 pentru a accesa de fapt caractere individuale într-un mod destul de simplu. 139 00:06:01,420 --> 00:06:04,099 Am de gând să mergeți mai departe și de a crea un fișier numit "stringzero.c," 140 00:06:04,099 --> 00:06:05,765 dar se poate numi orice doriți. 141 00:06:05,765 --> 00:06:08,500 Și pe site-ul cursului este deja acest exemplu în avans, 142 00:06:08,500 --> 00:06:10,430 astfel încât să nu trebuie să tip totul. 143 00:06:10,430 --> 00:06:13,820 >> Și am de gând să merg mai departe și primul face void main int. 144 00:06:13,820 --> 00:06:15,980 Și în câteva zile, vom începe să tachineze pe langa 145 00:06:15,980 --> 00:06:19,070 ce gol este aici, de ce e int lângă principală, și așa mai departe. 146 00:06:19,070 --> 00:06:21,180 Dar pentru acum, să continuăm la copy paste asta. 147 00:06:21,180 --> 00:06:23,455 >> Am de gând să declare un șir numit uri. 148 00:06:23,455 --> 00:06:26,920 Și am de gând să se întoarcă de la GetString indiferent de utilizator tipuri de. 149 00:06:26,920 --> 00:06:29,170 Acest lucru va fi un simplu Programul, instrucțiuni, 150 00:06:29,170 --> 00:06:31,336 Mă duc să orbește se așteaptă ca utilizatorul știe 151 00:06:31,336 --> 00:06:32,600 ce să fac să-l păstrați simplu. 152 00:06:32,600 --> 00:06:34,220 >> Și acum am de gând să aibă o pentru buclă. 153 00:06:34,220 --> 00:06:37,450 Și în interiorul pentru bucla mea am Va trebui int i se zero. 154 00:06:37,450 --> 00:06:40,660 Și i este, din nou, doar o convenție, o variabilă index de numărare a voturilor, 155 00:06:40,660 --> 00:06:42,350 dar am putea numi acest tot ce vreau. 156 00:06:42,350 --> 00:06:46,275 Am de gând să fac eu este mai puțin than-- bine Numele Zamyla lui este de șase litere. 157 00:06:46,275 --> 00:06:48,150 Așa că am de gând să greu cod care există pentru moment. 158 00:06:48,150 --> 00:06:49,730 >> Și apoi i ++. 159 00:06:49,730 --> 00:06:53,190 Și acum în interiorul acestora buclat bretele am de gând să fac printf, 160 00:06:53,190 --> 00:06:55,460 și vreau să imprimați o caracter la un moment dat. 161 00:06:55,460 --> 00:06:58,227 Așa că am de gând să utilizeze% c pentru poate pentru prima dată. 162 00:06:58,227 --> 00:07:00,560 Și apoi vreau să imprimați fiecare caracter pe o linie proprie. 163 00:07:00,560 --> 00:07:02,550 Așa că am de gând să pun o puțin backslash n acolo. 164 00:07:02,550 --> 00:07:03,640 Închide citat. 165 00:07:03,640 --> 00:07:06,250 >> Și acum vreau să fac ceva aici. 166 00:07:06,250 --> 00:07:10,610 Vreau să imprime scrisoare specific în șir, 167 00:07:10,610 --> 00:07:13,670 s, așa cum am iterarea de la zero, pe de până la șase. 168 00:07:13,670 --> 00:07:17,150 Cu alte cuvinte, vreau să imprima caracterul i'th de s. 169 00:07:17,150 --> 00:07:18,420 Acum, cum pot face acest lucru? 170 00:07:18,420 --> 00:07:21,550 >> Ei bine, la fel ca cutiile din această reprezentare aici, 171 00:07:21,550 --> 00:07:25,560 un fel de, evoca noțiunea de box scrisori, puteți face în mod similar ca 172 00:07:25,560 --> 00:07:32,630 sintactic în C de către pur și simplu specificarea, Vreau să imprime S i'th caracter. 173 00:07:32,630 --> 00:07:35,640 Folosind parantezele pătrate pe tastatura computerului 174 00:07:35,640 --> 00:07:38,910 care pe o tastatură SUA sunt în general de mai sus cheia de returnare. 175 00:07:38,910 --> 00:07:42,630 >> Deci, acest lucru nu este destul de corect totuși, cum poate ați observat. 176 00:07:42,630 --> 00:07:44,780 Dar am de gând să fel de orbește merge înainte aici. 177 00:07:44,780 --> 00:07:47,020 Și am de gând să fac face șir 0. 178 00:07:47,020 --> 00:07:50,860 Dar înainte de a face acest lucru, să vedem dacă ne-am nu se poate anticipa unele greseli comune. 179 00:07:50,860 --> 00:07:52,844 Se întâmplă acest lucru pentru a compila? 180 00:07:52,844 --> 00:07:54,510 Nu, îmi lipsește o grămadă de lucruri. 181 00:07:54,510 --> 00:07:55,280 Biblioteci am auzit. 182 00:07:55,280 --> 00:07:58,480 >> Deci, ceea ce header fișiere s-ar putea să doriți să adăugați aici? 183 00:07:58,480 --> 00:07:59,205 Da. 184 00:07:59,205 --> 00:08:01,580 >> Audiența: Ai nevoie de I / O standard [inaudibil] 185 00:08:01,580 --> 00:08:02,663 >> David J. MALAN: Excelent. 186 00:08:02,663 --> 00:08:06,060 Așa că am nevoie de standard de I / O. Pentru ce Scopul nu vreau eu standard de I / O? 187 00:08:06,060 --> 00:08:06,670 Pentru printf. 188 00:08:06,670 --> 00:08:09,220 Deci includ stdio.h. 189 00:08:09,220 --> 00:08:13,490 Și tu propune, de asemenea, că eu sunt biblioteca CS50 pentru ce motiv? 190 00:08:13,490 --> 00:08:14,650 Pentru a avea siruri de caractere. 191 00:08:14,650 --> 00:08:17,780 Deci, vom vedea ce Biblioteca CS50 este de a face 192 00:08:17,780 --> 00:08:19,260 pentru a crea această noțiune a unui șir. 193 00:08:19,260 --> 00:08:21,930 Dar pentru acum, vă puteți gândi doar de ea ca un tip real a datelor. 194 00:08:21,930 --> 00:08:23,596 >> Deci, care pare a fi un pic de curățat. 195 00:08:23,596 --> 00:08:27,060 Și acum am de gând să merg mai departe și într-adevăr nu face șir 0. 196 00:08:27,060 --> 00:08:27,700 Compilat. 197 00:08:27,700 --> 00:08:28,370 Deci, asta e bine. 198 00:08:28,370 --> 00:08:32,799 Așa că lasă-mă să ./string0 mări astfel încât să putem vedea mai îndeaproape ce se întâmplă. 199 00:08:32,799 --> 00:08:33,850 Enter. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-A intra. 201 00:08:37,789 --> 00:08:39,440 Și ne-am tipărit la nume Zamyla lui. 202 00:08:39,440 --> 00:08:40,409 >> Așa că e destul de bine. 203 00:08:40,409 --> 00:08:43,220 Deci, acum, să mergem mai departe și rulați din nou acest program, 204 00:08:43,220 --> 00:08:45,659 și tip pe nume complet Daven lui. 205 00:08:45,659 --> 00:08:46,450 Surpriza, surpriza. 206 00:08:46,450 --> 00:08:48,021 Enter. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Nu am imprimat lui Daven complet prenumele corect. 209 00:08:51,750 --> 00:08:54,250 Acum, acest lucru ar trebui să fie evident în retrospectivă cauza a ceea ce, 210 00:08:54,250 --> 00:08:57,010 un fel de, decizie de design prost? 211 00:08:57,010 --> 00:08:59,590 >> Da, eu greu codificate șase în interiorul meu pentru buclă. 212 00:08:59,590 --> 00:09:01,610 Acum, am făcut asta doar pentru că Știam nume Zamyla lui 213 00:09:01,610 --> 00:09:02,776 a fost de gând să fie șase litere. 214 00:09:02,776 --> 00:09:04,720 Dar cu siguranta acest lucru nu este o soluție generală. 215 00:09:04,720 --> 00:09:07,720 Deci, se dovedește putem dinamic dau seama de lungimea unui șir 216 00:09:07,720 --> 00:09:10,440 prin apel la o funcție numită strlen. 217 00:09:10,440 --> 00:09:12,840 >> Din nou, în mod deliberat succint numit doar 218 00:09:12,840 --> 00:09:14,450 pentru a face mai convenabil să tastați. 219 00:09:14,450 --> 00:09:17,170 Dar asta e sinonim cu obtinerea lungimea unui șir. 220 00:09:17,170 --> 00:09:23,190 Am de gând să mă întorc în terminalul meu fereastră și re-rula compilator. 221 00:09:23,190 --> 00:09:24,170 Dar e tipa la mine. 222 00:09:24,170 --> 00:09:29,130 Declararea implicit funcția de bibliotecă strlen cu tip nesemnate int const-- 223 00:09:29,130 --> 00:09:29,780 M-am pierdut. 224 00:09:29,780 --> 00:09:30,590 Complet. 225 00:09:30,590 --> 00:09:32,940 >> Deci, mai ales ca dvs. Ochii încep să glazura peste 226 00:09:32,940 --> 00:09:36,000 cu mesaje de eroare, cum ar fi acest lucru, focus sincer pe primele cuvinte. 227 00:09:36,000 --> 00:09:38,590 Știm că problema este în linia 8, așa cum este indicat aici. 228 00:09:38,590 --> 00:09:40,500 Și e în șir-0.c. 229 00:09:40,500 --> 00:09:43,580 Implicit declararea Funcția strlen bibliotecă. 230 00:09:43,580 --> 00:09:47,000 Deci, care este, în general, va fie un model de mesaje de eroare. 231 00:09:47,000 --> 00:09:49,190 Declarând implicit ceva. 232 00:09:49,190 --> 00:09:53,250 >> Deci, pe scurt, ce-am părea să s-au făcut cu privire la linia 8, aici. 233 00:09:53,250 --> 00:09:56,880 Care ar putea fi soluția să fie chiar dacă nu ați folosit strlen tine? 234 00:09:56,880 --> 00:09:58,907 >> Audiența: Parte dintr-o bibliotecă diferit? 235 00:09:58,907 --> 00:10:00,740 David J. MALAN: Partea unei biblioteci diferite. 236 00:10:00,740 --> 00:10:02,400 Deci, este declarat, ca să spunem așa. 237 00:10:02,400 --> 00:10:07,510 Acesta este menționat în unele fișier altele decât stdio.h și CS50.h. 238 00:10:07,510 --> 00:10:09,179 Acum, în cazul în care este ea definită? 239 00:10:09,179 --> 00:10:12,220 Pentru a fi sincer, fie trebuie să doar știu acest lucru pe partea de sus a capului, 240 00:10:12,220 --> 00:10:13,640 sau tu pe Google și de a afla acest lucru. 241 00:10:13,640 --> 00:10:18,150 Sau știu acest lucru, l-am deschis în CS50 echipamentului cu programul de terminale, care 242 00:10:18,150 --> 00:10:22,200 este doar, versiunea cu ecran mare plin de ceea ce este în partea de jos a ferestrei gedit lui. 243 00:10:22,200 --> 00:10:24,970 >> Și se pare că există o comandă similar succint, numit 244 00:10:24,970 --> 00:10:29,280 om de manual, în cazul în care, dacă tastați numele unei funcții și apăsați Enter, 245 00:10:29,280 --> 00:10:32,240 vei primi înapoi destul de documentație arcane. 246 00:10:32,240 --> 00:10:35,299 Este doar un text care, în general, arata ceva de genul asta. 247 00:10:35,299 --> 00:10:37,090 Este un pic copleșitoare la prima vedere. 248 00:10:37,090 --> 00:10:39,048 Dar sincer am de gând să lasa ochii mei glazura peste 249 00:10:39,048 --> 00:10:41,930 și să se concentreze doar pe partea Îmi pasă pentru moment. 250 00:10:41,930 --> 00:10:42,780 >> Care este aceasta. 251 00:10:42,780 --> 00:10:45,470 Care arata structural ca ceva eu ​​sunt familiar cu. 252 00:10:45,470 --> 00:10:48,080 Într-adevăr, pagina de manual, astfel de a vorbi, vă va spune 253 00:10:48,080 --> 00:10:51,590 în ceea ce header depune o funcție ca strlen este definit. 254 00:10:51,590 --> 00:10:54,170 Așa că am de gând să mă întorc acum la gedit. 255 00:10:54,170 --> 00:10:59,070 Și am de gând să merg mai departe și adauga aici # include 256 00:10:59,070 --> 00:11:00,480 și salvați fișierul. 257 00:11:00,480 --> 00:11:04,300 >> Mă duc pentru a goli ecranul cu Controlul L Dacă ați fost întrebați. 258 00:11:04,300 --> 00:11:08,210 Și am de gând să re-rula make string.0, compilează acest moment. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Care părea să funcționeze Lasă-mă să merg înainte și-l rulați din nou cu Davenport. 261 00:11:15,020 --> 00:11:15,860 Enter. 262 00:11:15,860 --> 00:11:17,730 Și că, de asemenea, părea să funcționeze. 263 00:11:17,730 --> 00:11:21,220 >> Deci, putem face un pic mai bine decât aceasta, deși, putem începe la lucruri curate 264 00:11:21,220 --> 00:11:23,257 sus doar un pic. 265 00:11:23,257 --> 00:11:25,590 Și am de gând să de fapt introduce un alt lucru acum. 266 00:11:25,590 --> 00:11:28,930 Am de gând să merg mai departe și salva această într-un fișier diferit. 267 00:11:28,930 --> 00:11:31,770 Și am de gând pentru a apela acest string1.c fișier doar 268 00:11:31,770 --> 00:11:34,620 să fie în concordanță cu codul vei fi capabil să găsească on-line. 269 00:11:34,620 --> 00:11:37,050 >> Și să se concentreze asupra exact același cod. 270 00:11:37,050 --> 00:11:39,000 Se pare că am a fost un fel de a lua 271 00:11:39,000 --> 00:11:42,600 de la sine faptul că laptop-ul meu, și, la rândul său, aparatul CS50 272 00:11:42,600 --> 00:11:47,450 are o mulțime de memorie, o mulțime de RAM, o mulțime de bytes de spațiu 273 00:11:47,450 --> 00:11:48,920 în care pot stoca siruri de caractere. 274 00:11:48,920 --> 00:11:53,560 >> Dar realitatea dacă am scris mult suficiente, și destul de intrarile de la tastatura, 275 00:11:53,560 --> 00:11:56,170 Am putea în teorie de tip în mai multe caractere 276 00:11:56,170 --> 00:11:58,830 decât computerul meu are fizic memorie pentru. 277 00:11:58,830 --> 00:11:59,830 Și acest lucru este problematic. 278 00:11:59,830 --> 00:12:03,050 La fel ca un întreg poate doar conta atât de mare, în teorie, 279 00:12:03,050 --> 00:12:06,600 puteți ghiftui doar atât de multe caractere în memoria RAM a computerului sau aleatorie 280 00:12:06,600 --> 00:12:07,920 Memory Access. 281 00:12:07,920 --> 00:12:11,140 >> Așa că am anticipa mai bine această problemă, chiar 282 00:12:11,140 --> 00:12:13,660 deși ar putea fi o rară caz colț, ca să spunem așa. 283 00:12:13,660 --> 00:12:15,670 Nu se întâmplă că de multe ori, se poate întâmpla. 284 00:12:15,670 --> 00:12:18,815 Și dacă se întâmplă și eu nu fac anticipa și programul pentru ea, 285 00:12:18,815 --> 00:12:20,300 programul meu ar putea face cine știe ce. 286 00:12:20,300 --> 00:12:22,220 Freeze, atârnă, repornirea sistemului, indiferent de. 287 00:12:22,220 --> 00:12:24,490 Ceva anticipat s-ar putea întâmpla. 288 00:12:24,490 --> 00:12:27,120 >> Deci, ce am de gând să fac acum, de acum înainte într-adevăr, 289 00:12:27,120 --> 00:12:31,630 este înainte de vreodată orbește utiliza o variabilă ca s care 290 00:12:31,630 --> 00:12:36,790 a fost atribuit valoarea de returnare a o altă funcție ca getstring, 291 00:12:36,790 --> 00:12:40,200 Am de gând să vă asigurați că valoarea sa este validă. 292 00:12:40,200 --> 00:12:44,280 Deci, eu știu doar de la faptul că a citit Documentație CS50 pentru getstring, 293 00:12:44,280 --> 00:12:49,020 care în cele din urmă ne vom punct la, că getstring returnează un simbol special 294 00:12:49,020 --> 00:12:53,610 numit NULL, N-U-L-L în toate capace, în cazul în care ceva nu merge bine. 295 00:12:53,610 --> 00:12:55,650 >> Deci, în mod normal, se returnează un șir. 296 00:12:55,650 --> 00:12:59,700 Dar altfel, dacă se întoarce N-U-L-eu-- vom vedea în cele din urmă ce că într-adevăr 297 00:12:59,700 --> 00:13:01,790 pret-- că doar mijloace sa întâmplat ceva rău. 298 00:13:01,790 --> 00:13:05,560 Acum, acest lucru înseamnă, la fel ca în Scratch, Pot verifica o condiție aici în C, 299 00:13:05,560 --> 00:13:08,830 în cazul în care s nu egal NULL. 300 00:13:08,830 --> 00:13:11,930 Deci, dacă nu ați văzut acest lucru înainte, acest lucru înseamnă doar nu egal. 301 00:13:11,930 --> 00:13:15,290 >> Deci, este opusul egali egale, care, amintesc, 302 00:13:15,290 --> 00:13:18,940 este diferit de un singur este egal, care este misiune. 303 00:13:18,940 --> 00:13:23,030 Deci, dacă s nu este egal cu NULL, numai atunci nu 304 00:13:23,030 --> 00:13:25,980 Vreau să execute aceste linii de cod. 305 00:13:25,980 --> 00:13:28,080 Cu alte cuvinte, înainte de a se arunca cu capul în orbește 306 00:13:28,080 --> 00:13:30,919 și începe iterarea peste s, și tratarea 307 00:13:30,919 --> 00:13:33,710 ca și cum acesta este o secvență de caractere, am de gând să verificați mai întâi, 308 00:13:33,710 --> 00:13:37,900 așteptați un minut, nu este cu siguranta egală cu această valoare deosebită, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Pentru că dacă e, lucruri rele se pot întâmpla. 310 00:13:40,030 --> 00:13:43,080 Și acum, să presupunem că lucrurile rele întâmplă înseamnă accidente de program, 311 00:13:43,080 --> 00:13:45,070 și nu se poate recupera în mod necesar. 312 00:13:45,070 --> 00:13:46,800 Deci, sincer, se pare urât. 313 00:13:46,800 --> 00:13:48,660 e un fel de confuz acum să aruncați o privire la. 314 00:13:48,660 --> 00:13:50,780 Dar acest lucru va deveni mai familiar înainte de mult timp. 315 00:13:50,780 --> 00:13:52,920 >> Dar am de gând să propună acum o altă îmbunătățire. 316 00:13:52,920 --> 00:13:54,660 Aceasta este o îmbunătățire a corectitudine. 317 00:13:54,660 --> 00:13:58,800 Programul meu este acum mult mai corect, deoarece în cazul în care nu rare suficientă memorie 318 00:13:58,800 --> 00:14:01,180 există, o voi ocupa, și voi face nimic. 319 00:14:01,180 --> 00:14:02,680 Eu, cel puțin, nu se va prăbuși. 320 00:14:02,680 --> 00:14:05,000 >> Dar hai sa facem o versiune finală aici. 321 00:14:05,000 --> 00:14:07,690 Și un fișier numit string2.c. 322 00:14:07,690 --> 00:14:10,190 Am de gând să lipiți că același cod pentru o clipă, 323 00:14:10,190 --> 00:14:14,210 și am de gând să subliniez acest lucru linie, 11, aici, pentru un moment. 324 00:14:14,210 --> 00:14:18,179 Acum, realitatea este că compilatoare inteligente ca răsune ar putea rezolva această problemă pentru noi 325 00:14:18,179 --> 00:14:19,970 în spatele scenei fără să știe vreodată nostru. 326 00:14:19,970 --> 00:14:24,670 Dar să ne gândim la asta fundamental ca un design problematică. 327 00:14:24,670 --> 00:14:29,010 >> Această linie de cod este, desigur, spunând, inițializa unele variabile i la 0. 328 00:14:29,010 --> 00:14:30,260 Asta e destul de simplu. 329 00:14:30,260 --> 00:14:34,691 Și ceea ce este din nou acest afirmație, aici, i ++, faci? 330 00:14:34,691 --> 00:14:37,066 Am văzut-o înainte, dar ne-am Nu am vorbit despre asta. 331 00:14:37,066 --> 00:14:37,900 >> Audiența: Incrementarea i. 332 00:14:37,900 --> 00:14:39,191 >> David J. MALAN: Incrementarea i. 333 00:14:39,191 --> 00:14:41,890 Deci, pe fiecare iterație prin această buclă, fiecare ciclu, 334 00:14:41,890 --> 00:14:43,570 te-am incrementarea de unul. 335 00:14:43,570 --> 00:14:45,740 Deci, devine mai mare, și mai mare, și mai mare, până când bucla se termină. 336 00:14:45,740 --> 00:14:46,810 Cum se termina? 337 00:14:46,810 --> 00:14:49,430 Ei bine, nu e de mijloc condiție pe care le-am folosit înainte. 338 00:14:49,430 --> 00:14:52,500 Ai văzut și în walkthroughs în setul P. 339 00:14:52,500 --> 00:14:53,880 >> Dar ce este acest proverb? 340 00:14:53,880 --> 00:14:58,352 Faceți următoarea buclă, astfel timp cât i este mai mică decât ceea ce? 341 00:14:58,352 --> 00:14:59,810 Audiența: lungimea șirului. 342 00:14:59,810 --> 00:15:01,518 David J. MALAN: Lungimea șirului. 343 00:15:01,518 --> 00:15:04,300 Deci, se traduce destul de curat la limba engleză în acest sens. 344 00:15:04,300 --> 00:15:08,810 Acum, problema este că de fiecare dată când repeta prin această buclă în teorie, 345 00:15:08,810 --> 00:15:10,000 Eu pun această întrebare. 346 00:15:10,000 --> 00:15:12,250 Este i mai mică decât lungimea șir de s? 347 00:15:12,250 --> 00:15:14,500 Este i mai mică decât lungimea șir de s? 348 00:15:14,500 --> 00:15:18,380 >> Acum este i schimba pe fiecare iteratie? 349 00:15:18,380 --> 00:15:18,880 Este. 350 00:15:18,880 --> 00:15:19,629 Din cauza ++. 351 00:15:19,629 --> 00:15:21,700 Deci, fiecare iterație i devine mai mare. 352 00:15:21,700 --> 00:15:25,411 Dar este s ce mai mari, sau mai mici, sau schimbarea la toate? 353 00:15:25,411 --> 00:15:25,910 Nu 354 00:15:25,910 --> 00:15:30,240 Deci, în termeni de design, una dintre axele de-a lungul care vom încerca să evalueze cod 355 00:15:30,240 --> 00:15:32,610 în clasa, acest lucru se simte un fel de stupid. 356 00:15:32,610 --> 00:15:34,690 >> Ca tine sunt literalmente, pe fiecare iterație 357 00:15:34,690 --> 00:15:37,110 din această buclă a cere al naibii de aceeași întrebare din nou, 358 00:15:37,110 --> 00:15:40,770 și din nou, și din nou, și la propriu niciodată nu se va schimba. 359 00:15:40,770 --> 00:15:44,220 Cel puțin dacă nu mă ating e și încercarea de a schimba conținutul uri. 360 00:15:44,220 --> 00:15:46,610 Deci, eu pot face un pic mai bine decât aceasta. 361 00:15:46,610 --> 00:15:49,530 >> Și ceea ce am de gând să fac nu este declara doar unul i variabil, 362 00:15:49,530 --> 00:15:53,330 dar un al doilea variabilă Voi arbitrar, dar convențional, se numesc n. 363 00:15:53,330 --> 00:15:55,940 Atribuirea n egal cu lungime șir de s. 364 00:15:55,940 --> 00:15:59,090 Și apoi aici, am de gând să face o optimizare inteligent puțin, așa 365 00:15:59,090 --> 00:16:03,460 să vorbească, că la sfârșitul zilei nu mai corectă sau nu mai puțin corectă este 366 00:16:03,460 --> 00:16:04,260 decât înainte. 367 00:16:04,260 --> 00:16:05,500 Dar e un design mai bun. 368 00:16:05,500 --> 00:16:09,480 În faptul că eu sunt, folosind mai puțin timp, mai puține cicluri CPU, așa 369 00:16:09,480 --> 00:16:14,040 de a vorbi, pentru a răspunde la fel întrebare, dar doar o singură dată. 370 00:16:14,040 --> 00:16:17,870 >> Orice întrebări cu privire la acest generală principiul îmbunătățirii, 371 00:16:17,870 --> 00:16:21,294 spune, eficiența unui program? 372 00:16:21,294 --> 00:16:21,991 Da? 373 00:16:21,991 --> 00:16:23,699 Audiența: De ce crezi folosi [neauzit]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 David J. MALAN: Bună întrebare. 376 00:16:27,010 --> 00:16:30,690 Deci, de ce nu ne-am pus ++ la capătul de i în loc de la începutul i? 377 00:16:30,690 --> 00:16:33,070 In acest caz, are nici un impact funcțional. 378 00:16:33,070 --> 00:16:36,670 Și, în general, am tendința de a utilizați operatorul postfix 379 00:16:36,670 --> 00:16:41,750 astfel că este un pic mai clar ca la momentul în care operațiunea se întâmplă. 380 00:16:41,750 --> 00:16:46,670 >> Pentru cei nefamiliarizati, există un alt declarații prin care ai putea face ++ i. 381 00:16:46,670 --> 00:16:48,747 Acestea sunt funcțional echivalent în acest caz 382 00:16:48,747 --> 00:16:51,080 pentru că nu e nimic altceva în jurul care incrementare. 383 00:16:51,080 --> 00:16:54,435 Dar poti veni cu de cazuri și de linii de cod 384 00:16:54,435 --> 00:16:55,810 în care care face o diferență. 385 00:16:55,810 --> 00:16:57,810 Deci, în general, noi nu facem chiar vorbesc despre asta. 386 00:16:57,810 --> 00:17:00,690 Pentru că sincer, ea face dumneavoastră cod sexy, și un fel de impermeabil, 387 00:17:00,690 --> 00:17:01,776 și mai puține caractere. 388 00:17:01,776 --> 00:17:04,859 Dar realitatea este că e mult mai greu, Cred că, chiar și pentru mine să-și încheie mintea mea 389 00:17:04,859 --> 00:17:07,319 în jurul ei, uneori, ordinea operațiilor. 390 00:17:07,319 --> 00:17:09,750 Deci, ca o paranteza, daca într-adevăr nu-mi place asta, 391 00:17:09,750 --> 00:17:14,650 chiar dacă aceasta este un fel de sexy cauta, puteți face, de asemenea, i + = 1, 392 00:17:14,650 --> 00:17:18,880 care este versiunea mai urât al aceeași idee pentru postfix incrementare. 393 00:17:18,880 --> 00:17:22,250 >> Spun acest lucru și voi ar trebui să facă mișto de ea, 394 00:17:22,250 --> 00:17:25,140 dar va veni pentru a vedea codul ca ceva frumos înainte de mult timp. 395 00:17:25,140 --> 00:17:27,160 >> [Râsete] 396 00:17:27,160 --> 00:17:28,410 >> David J. MALAN: Corect? 397 00:17:28,410 --> 00:17:29,360 Da. 398 00:17:29,360 --> 00:17:30,480 Întrebare la mijloc. 399 00:17:30,480 --> 00:17:32,146 >> Audiența: Ai nevoie să spui int n? 400 00:17:32,146 --> 00:17:34,020 David J. MALAN: Tu faci Nu trebuie să spun int n. 401 00:17:34,020 --> 00:17:37,670 Așa că am spus deja int, nu este nevoie să o spun din nou. 402 00:17:37,670 --> 00:17:41,820 Captura este că n trebuie să să fie de același tip de date ca i. 403 00:17:41,820 --> 00:17:43,310 Deci, asta e doar o comoditate aici. 404 00:17:43,310 --> 00:17:44,058 Da. 405 00:17:44,058 --> 00:17:47,806 >> Audiența: Poti sa te duci de-a lungul Suport de imprimare de caractere s i din nou? 406 00:17:47,806 --> 00:17:48,930 David J. MALAN: Absolut. 407 00:17:48,930 --> 00:17:52,110 Deci% c, amintesc de trecut timp, este doar un înlocuitor. 408 00:17:52,110 --> 00:17:53,930 Aceasta înseamnă pune un char aici. 409 00:17:53,930 --> 00:17:56,780 backslash n, desigur, doar mijloace pune un sfârșit de linie aici. 410 00:17:56,780 --> 00:17:59,540 Așa că doar pleacă, acum, această bucată de noi sintaxă. 411 00:17:59,540 --> 00:18:03,730 Și acest lucru este pur și simplu spune, apuca sirul numit s și du-te sa 412 00:18:03,730 --> 00:18:06,050 caracter i'th, ca să spunem așa. 413 00:18:06,050 --> 00:18:10,590 >> Și eu tot spun caracter i'th pentru că pe fiecare iterație de această buclă 414 00:18:10,590 --> 00:18:14,540 E ca și cum ne-am imprimați , în primul rând s suport 0, 415 00:18:14,540 --> 00:18:15,780 ca un programator ar putea spune. 416 00:18:15,780 --> 00:18:18,680 Apoi, s suport 1, apoi s suport 2, apoi 3, apoi 4. 417 00:18:18,680 --> 00:18:21,610 Dar, desigur, este o variabilă, așa că am exprima cu i. 418 00:18:21,610 --> 00:18:23,900 >> Key, deși, este de a realiza, mai ales daca nu ai 419 00:18:23,900 --> 00:18:26,358 fost adaptați la această lume de programare, în cazul în care noi toți 420 00:18:26,358 --> 00:18:28,950 par a conta la zero, trebuie să începe numărarea de la zero acum. 421 00:18:28,950 --> 00:18:35,130 Pentru ca siruri de caractere, primul caracter, z în Zamyla este pentru mai bine sau mai rău pentru 422 00:18:35,130 --> 00:18:40,490 O să trăiască la locație numărul zero. 423 00:18:40,490 --> 00:18:48,210 >> Bine, asa ca lasa-mi aducă ne aici la Zamyla 424 00:18:48,210 --> 00:18:50,746 și să vedem ce se întâmplă cu adevărat pe sub capota. 425 00:18:50,746 --> 00:18:52,370 Deci există această noțiune de tip de turnare. 426 00:18:52,370 --> 00:18:53,800 S-ar putea avea de fapt a jucat cu această deja, 427 00:18:53,800 --> 00:18:55,970 Poate pentru hacker Ediția din P stabilit o. 428 00:18:55,970 --> 00:19:00,320 Dar tip de turnare doar se referă la capacitatea C și în alte limbaje 429 00:19:00,320 --> 00:19:03,170 pentru a converti un tip de date la altul. 430 00:19:03,170 --> 00:19:05,450 >> Acum, cum am putea vedea acest lucru destul de straightforwardly? 431 00:19:05,450 --> 00:19:08,530 Deci aceasta, amintesc, este începutul din alfabetul englez. 432 00:19:08,530 --> 00:19:11,265 Și context, amintim, de la ca în urmă cu o săptămână este ASCII. 433 00:19:11,265 --> 00:19:13,790 Codul American Standard pentru schimbul de informații. 434 00:19:13,790 --> 00:19:17,080 Care este doar un mod foarte lung de a spune o cartografiere de la scrisori 435 00:19:17,080 --> 00:19:19,370 a numerelor, și de la numere la litere. 436 00:19:19,370 --> 00:19:22,940 >> Deci, de la A la M aici, dot dot dot, linii cu, rechemare, 437 00:19:22,940 --> 00:19:25,582 numărul zecimal 65 în sus. 438 00:19:25,582 --> 00:19:27,290 Și nu am vorbit despre aceasta în mod explicit, 439 00:19:27,290 --> 00:19:29,850 dar cu siguranță nu e asemănător Numerele de litere mici. 440 00:19:29,850 --> 00:19:30,820 Și într-adevăr, există. 441 00:19:30,820 --> 00:19:33,730 Lumea a decis cu câțiva ani în urmă că puțin o, litere mici o, 442 00:19:33,730 --> 00:19:35,020 va fi de 97. 443 00:19:35,020 --> 00:19:38,010 Și puțin b se întâmplă să fie 98, și așa mai departe. 444 00:19:38,010 --> 00:19:40,200 >> Și pentru orice altă tastă pe tastatura, nu e 445 00:19:40,200 --> 00:19:42,190 Va fi un model similar de biți. 446 00:19:42,190 --> 00:19:44,540 Sau echivalent, un număr zecimal. 447 00:19:44,540 --> 00:19:47,110 Deci, întrebarea la mână, apoi, este cum putem 448 00:19:47,110 --> 00:19:49,400 a se vedea de fapt, acest sub capota? 449 00:19:49,400 --> 00:19:51,539 Așa că am de gând să merg pe la gedit din nou. 450 00:19:51,539 --> 00:19:53,330 Și, mai degrabă decât de tip aceasta o de la zero, 451 00:19:53,330 --> 00:19:55,330 Am de gând să merg mai departe și doar deschide ceva 452 00:19:55,330 --> 00:19:58,350 din Codul de astăzi numit ASCII zero. 453 00:19:58,350 --> 00:20:01,210 >> Și ASCII zero, arata ca acest lucru. 454 00:20:01,210 --> 00:20:02,710 Deci, haideți să mintea noastră acest lucru. 455 00:20:02,710 --> 00:20:04,969 Deci, prima, am comentat codul, ceea ce este frumos. 456 00:20:04,969 --> 00:20:07,010 Pentru că este pur și simplu mi-a spus ce să se aștepte, 457 00:20:07,010 --> 00:20:08,950 afișa o cartografiere pentru majuscule. 458 00:20:08,950 --> 00:20:13,690 Acum, eu nu prea stiu ce am spui cu asta, așa că hai să deducem. 459 00:20:13,690 --> 00:20:16,870 >> În limba engleză, poate oarecum tehnician engleză, 460 00:20:16,870 --> 00:20:20,660 ceea ce face linia 18 par a face pentru noi? 461 00:20:20,660 --> 00:20:21,500 Doar linia 18. 462 00:20:21,500 --> 00:20:22,430 Ce se inducerea? 463 00:20:22,430 --> 00:20:25,192 Ce se va lovi cu piciorul off aici? 464 00:20:25,192 --> 00:20:26,100 >> Audiența: O buclă. 465 00:20:26,100 --> 00:20:26,630 >> David J. MALAN: O buclă. 466 00:20:26,630 --> 00:20:28,463 Și de câte ori este care va repeta? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 Audiența: [interpunerea VOCI] de șase ori. 469 00:20:33,270 --> 00:20:34,830 David J. MALAN: Nu șase ori. 470 00:20:34,830 --> 00:20:35,840 Audiența: de 26 de ori. 471 00:20:35,840 --> 00:20:36,560 David J. MALAN: de 26 de ori. 472 00:20:36,560 --> 00:20:37,060 Da, îmi pare rău. 473 00:20:37,060 --> 00:20:37,960 De 26 de ori. 474 00:20:37,960 --> 00:20:38,460 De ce? 475 00:20:38,460 --> 00:20:41,590 Ei bine, e un pic ciudat, dar Am început de numărare de la 65 de ani. 476 00:20:41,590 --> 00:20:43,300 Ceea ce e ciudat, dar nu rău. 477 00:20:43,300 --> 00:20:44,610 Nu-i rău pe cuvânt de spus. 478 00:20:44,610 --> 00:20:46,980 Și eu fac asta doar deoarece, în acest exemplu, 479 00:20:46,980 --> 00:20:50,455 Sunt un fel de anticipare care capitalul A a fost de 65. 480 00:20:50,455 --> 00:20:53,330 Acum, acest lucru nu este cel mai elegant mod de a face acest lucru, la fel de cod greu 481 00:20:53,330 --> 00:20:56,130 Valorile ezoterice că nimeni nu este de așteptat vreodată să-și amintească. 482 00:20:56,130 --> 00:21:00,155 >> Dar pentru acum, observa că eu sunt face acest lucru până pe 65 plus 26. 483 00:21:00,155 --> 00:21:03,030 Pentru că se pare că nici nu vreau pentru a face aritmetica în capul meu. 484 00:21:03,030 --> 00:21:04,440 Deci, voi lasa compilatorul o face. 485 00:21:04,440 --> 00:21:08,600 Dar, apoi, pe fiecare buclă, fiecare iterație din bucla, am incrementare i. 486 00:21:08,600 --> 00:21:10,196 >> Deci, acum acest lucru pare un pic criptic. 487 00:21:10,196 --> 00:21:13,320 Dar ar trebui să avem clădirea de bază blocuri cu care să înțeleagă acest lucru. 488 00:21:13,320 --> 00:21:15,510 % C este doar un substituent pentru un char. 489 00:21:15,510 --> 00:21:19,010 % I este un substituent pentru un int. 490 00:21:19,010 --> 00:21:23,310 Și se pare că, prin utilizarea acestui nou sintaxă, această paranteză, așa 491 00:21:23,310 --> 00:21:26,100 de a vorbi, deci un tip de date în interiorul unei paranteze, 492 00:21:26,100 --> 00:21:32,270 Eu pot forța compilator pentru a trata i nu este un număr întreg, ci ca un char. 493 00:21:32,270 --> 00:21:35,520 >> Mi-a arătat astfel caracterul echivalent de acest număr. 494 00:21:35,520 --> 00:21:37,986 Acum aici, acest cod este destul de mult identic. 495 00:21:37,986 --> 00:21:39,860 Am vrut doar să facă Super explicit faptul 496 00:21:39,860 --> 00:21:42,095 care încep de la 97, care este minuscule o. 497 00:21:42,095 --> 00:21:44,080 Pe de până prin 26 de mai multe litere. 498 00:21:44,080 --> 00:21:46,970 Și eu doing-- din nou, turnare i, ca să spunem așa. 499 00:21:46,970 --> 00:21:49,160 Sau tip de turnare i, ca să spunem așa. 500 00:21:49,160 --> 00:21:51,420 >> De la un int la un char. 501 00:21:51,420 --> 00:21:55,760 Deci, rezultatul final va fi, sincer, informațiile pe care le cunosc deja. 502 00:21:55,760 --> 00:21:59,411 Am de gând să facă -ascii 0 nu dot-- dot c. 503 00:21:59,411 --> 00:22:02,160 Observați, probabil ai făcut asta greșeală ca tocmai am făcut accidental. 504 00:22:02,160 --> 00:22:03,820 Asigurați-ascii 0. 505 00:22:03,820 --> 00:22:06,090 Acum am de gând să fac ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Voi mări, și, din păcate, se va derula în afara ecranului. 507 00:22:09,050 --> 00:22:15,060 Dar noi vedem un întreg tabel în care o hărți la 97, hărți B la 98, 508 00:22:15,060 --> 00:22:18,931 și dacă vom derula în sus mai departe O, desigur, hărți pentru 65 de ani. 509 00:22:18,931 --> 00:22:21,180 Deci, aceasta este doar să spun că ceea ce am fost predica, 510 00:22:21,180 --> 00:22:25,310 există această echivalență, se în fapt, în cazul în realitate. 511 00:22:25,310 --> 00:22:28,000 Deci, o modificare rapidă a acestei. 512 00:22:28,000 --> 00:22:31,220 Lasă-mă să deschid ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 Și observa acest lucru inteligent, un fel de, clarificare în acest sens. 514 00:22:38,070 --> 00:22:41,770 Acest lucru este ascii-1.c, și observa acest lucru nebunesc. 515 00:22:41,770 --> 00:22:45,120 >> Și acest lucru devine foarte la inima de ce computerele fac. 516 00:22:45,120 --> 00:22:48,150 Chiar dacă noi, oamenii, ar fi nu conta din punct de vedere letters-- 517 00:22:48,150 --> 00:22:50,380 Nu incepe sa te gandesti, bine o atunci b, 518 00:22:50,380 --> 00:22:52,590 și de a folosi cele pentru conta obiecte fizice. 519 00:22:52,590 --> 00:22:58,680 Se poate spune cu siguranță că vreau să inițializarea unor variabile numite C- 520 00:22:58,680 --> 00:23:03,220 dar am fi putut numit acest orice-- astfel c este inițializat la capital A. 521 00:23:03,220 --> 00:23:07,560 >> Pentru că la sfârșitul zilei, computerul nu-i pasă ce stocarea, 522 00:23:07,560 --> 00:23:10,170 ea ii pasa doar cum vrei de a prezenta aceste informații. 523 00:23:10,170 --> 00:23:13,560 Cum vrei computer pentru a interpreta că modelul de biți? 524 00:23:13,560 --> 00:23:16,320 Deci, acest lucru nu este ceva ce în general, s-ar recomanda acest. 525 00:23:16,320 --> 00:23:19,500 Este într-adevăr doar un exemplu de transmite că puteți absolut 526 00:23:19,500 --> 00:23:22,049 inițializa un număr întreg de un char. 527 00:23:22,049 --> 00:23:24,090 Deoarece sub capota de un char, desigur, 528 00:23:24,090 --> 00:23:26,170 este doar un număr de la 0 la 255. 529 00:23:26,170 --> 00:23:28,540 >> Astfel încât să puteți cu siguranță pune-l în interiorul unui int. 530 00:23:28,540 --> 00:23:30,890 Și ce aceasta, de asemenea, demonstreaza este că noi 531 00:23:30,890 --> 00:23:34,040 poate converti de la un tip la altul, aici, 532 00:23:34,040 --> 00:23:36,780 în cele din urmă de imprimare același lucru. 533 00:23:36,780 --> 00:23:44,760 Și, de fapt, aceasta voi repara online-- a fost menit să spun acest lucru, din nou, aici. 534 00:23:44,760 --> 00:23:48,610 Lasă-mă să curețe asta on-line, și vom a se vedea într-un walkthrough online, după cum este necesar, 535 00:23:48,610 --> 00:23:50,280 ceea ce a fost destinat acolo. 536 00:23:50,280 --> 00:23:50,960 >> OK. 537 00:23:50,960 --> 00:23:53,892 Deci, ultimul exemplu care implică acum a și b și apoi vom 538 00:23:53,892 --> 00:23:54,850 ia lucrurile la un alt nivel. 539 00:23:54,850 --> 00:23:58,330 Deci, cu un și b și c lui în valorificarea 540 00:23:58,330 --> 00:24:01,560 și echivalența acestora, să aruncăm o privire la acest exemplu, aici. 541 00:24:01,560 --> 00:24:02,752 Un alt exemplu de cod. 542 00:24:02,752 --> 00:24:04,460 Vom deschide unul care este deja făcut, așa că ne-am 543 00:24:04,460 --> 00:24:06,440 Nu trebuie să-l introduceți toate de la zero. 544 00:24:06,440 --> 00:24:09,420 >> Și observa in anticiparea suntem folosind antet multiple 545 00:24:09,420 --> 00:24:13,240 fișiere, printre care se noul nostru prieten, string.h. 546 00:24:13,240 --> 00:24:15,597 Acum acest lucru pare, la prima vedere, un pic criptic. 547 00:24:15,597 --> 00:24:18,180 Dar să vedem dacă nu putem raționa prin ceea ce se întâmplă aici. 548 00:24:18,180 --> 00:24:21,150 În primul rând am obține un șir de utilizator, și am pus șir într-o variabilă 549 00:24:21,150 --> 00:24:22,286 numite s. 550 00:24:22,286 --> 00:24:24,090 Copy Paste de la înainte. 551 00:24:24,090 --> 00:24:27,250 În linia 22, sunt aparent face exact ceea ce 552 00:24:27,250 --> 00:24:30,760 Am facut-o acum o clipă, am iterarea peste caracterele din s. 553 00:24:30,760 --> 00:24:34,780 >> Și noi trucuri de aici sunt utilizați lungime șir, optimizarea minor 554 00:24:34,780 --> 00:24:37,930 de stocare și lungimea șirului în n, mai degrabă decât de asteptare strlen din nou, 555 00:24:37,930 --> 00:24:38,850 și din nou, și din nou. 556 00:24:38,850 --> 00:24:41,120 Și tocmai de verificare care i este mai mică decât n. 557 00:24:41,120 --> 00:24:43,330 Acum, aici, lucrurile devin puțin interesant. 558 00:24:43,330 --> 00:24:45,980 Dar este doar o aplicație din aceeași idee nouă. 559 00:24:45,980 --> 00:24:48,470 Ce face în limba engleză s suport i reprezinte? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> Audiența: Numărarea fiecare caracter [neauzit]. 562 00:24:54,260 --> 00:24:55,926 >> David J. MALAN: Numărarea fiecare personaj. 563 00:24:55,926 --> 00:24:58,680 Și chiar mai succint, s suport i reprezintă ce? 564 00:24:58,680 --> 00:25:00,950 Vrei sa spui. 565 00:25:00,950 --> 00:25:04,084 Nu pentru a vă pune la fața locului aici. 566 00:25:04,084 --> 00:25:06,375 >> Audiența: Deci-- 567 00:25:06,375 --> 00:25:09,500 David J. MALAN: Deci, în cazul în care cuvântul e-- dacă șirul este Zamyla, care starts-- 568 00:25:09,500 --> 00:25:12,380 Audiența: --you a face cu caracterele separately-- 569 00:25:12,380 --> 00:25:13,690 David J. MALAN: Bine. 570 00:25:13,690 --> 00:25:14,190 Exact. 571 00:25:14,190 --> 00:25:17,940 Notația paranteză, vă permite pentru a accesa fiecare caracter individual, 572 00:25:17,940 --> 00:25:21,120 astfel s suport 0 va fi primul caracter din șir. 573 00:25:21,120 --> 00:25:24,110 s suport 1 va fi al doilea, și așa mai departe. 574 00:25:24,110 --> 00:25:28,050 Deci, întrebarea ce cer, aici, în această stare este ceea ce? 575 00:25:28,050 --> 00:25:33,984 Este caracterul i'th de s mare mare sau egal cu litere mici o? 576 00:25:33,984 --> 00:25:36,400 Și ce înseamnă acest lucru, aici, cu dublu ampersand? 577 00:25:36,400 --> 00:25:36,800 AUDIENTA (împreună): Și. 578 00:25:36,800 --> 00:25:37,210 David J. MALAN: Si. 579 00:25:37,210 --> 00:25:38,418 E doar echivalent cu aceasta. 580 00:25:38,418 --> 00:25:42,310 Și nu este un cuvânt cheie în C, trebuie să utilizare, enervant, ampersand ampersand. 581 00:25:42,310 --> 00:25:47,520 Și aceasta, în schimb, se cere este S i'th caracter mai mici sau egale 582 00:25:47,520 --> 00:25:49,030 în litere mici Z? 583 00:25:49,030 --> 00:25:52,440 Și din nou, aici e în cazul în care înțelegerea activului suport 584 00:25:52,440 --> 00:25:54,550 punerea în aplicare a unui calculator are sens. 585 00:25:54,550 --> 00:25:57,330 Observați că, chiar dacă am punct punct punct de acolo, 586 00:25:57,330 --> 00:26:04,410 arata ca la A la Z cu litere mici sunt toate valorile adiacente până la 97 pe sus. 587 00:26:04,410 --> 00:26:07,820 >> Și aceeași pentru majuscule incepand de la 65 de ani. 588 00:26:07,820 --> 00:26:10,410 Deci Takeaway, apoi, este că în limba engleză, 589 00:26:10,410 --> 00:26:12,760 cum ai descrie ce linia 24 este de a face? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Da? 592 00:26:16,728 --> 00:26:21,575 >> Audiența: La data de 24 este de verificare pentru a vedea dacă fiecare personaj este o literă mică. 593 00:26:21,575 --> 00:26:24,700 David J. MALAN: Se verifică dacă fiecare personaj este o literă mică. 594 00:26:24,700 --> 00:26:28,590 Deci, chiar mai succint, este caracter i'th de s litere mici? 595 00:26:28,590 --> 00:26:30,690 Asta e tot ce suntem exprimarea aici logic, 596 00:26:30,690 --> 00:26:33,750 un pic criptic, dar în cele din urmă destul de straightforwardly. 597 00:26:33,750 --> 00:26:36,480 Este S i'th minusculă? 598 00:26:36,480 --> 00:26:40,130 >> Dacă este așa, și aici e unde lucrurile a obține o minte puțin îndoire 599 00:26:40,130 --> 00:26:44,760 pentru o clipă, dacă da, du-te înainte și imprima un caracter. 600 00:26:44,760 --> 00:26:47,360 Deci, aceasta este doar un substituent, dar ce personaj? 601 00:26:47,360 --> 00:26:53,710 De ce fac s suport i minus această expresie aici? 602 00:26:53,710 --> 00:26:55,110 >> Ei bine observa modelul aici. 603 00:26:55,110 --> 00:26:57,380 Numerele reale nu conteaza atat de mult. 604 00:26:57,380 --> 00:27:02,700 Dar observați că 97 este cât de departe de la 65? 605 00:27:02,700 --> 00:27:03,560 >> Audiența: 32. 606 00:27:03,560 --> 00:27:04,480 >> David J. MALAN: 32. 607 00:27:04,480 --> 00:27:06,890 Cât de departe este de 98 la 66? 608 00:27:06,890 --> 00:27:07,740 >> Audiența: 32. 609 00:27:07,740 --> 00:27:09,890 >> David J. MALAN: Micul c de la mare C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Deci, există 32 de hamei din o scrisoare la alta. 612 00:27:14,550 --> 00:27:17,790 Deci sincer, ar putea simplifica aceasta pentru că. 613 00:27:17,790 --> 00:27:20,400 Dar apoi sunt cam greu de codificare această înțelegere nivel scăzut 614 00:27:20,400 --> 00:27:21,740 că nu cititor este tot O să înțeleagă. 615 00:27:21,740 --> 00:27:25,080 Așa că am de gând să-l generalizeze ca, eu cunosc literele mici sunt mai mari. 616 00:27:25,080 --> 00:27:28,400 Știu că scrisorile de capital sunt valori mai mici, ironic. 617 00:27:28,400 --> 00:27:33,216 >> Dar acest lucru este efectiv echivalent cu spunând scade 32 de s suport i. 618 00:27:33,216 --> 00:27:35,430 Deci, în contextul acestor scrisori, în cazul în care scrisoarea 619 00:27:35,430 --> 00:27:38,950 se întâmplă să fie un, litere mici o, și eu scad 32, 620 00:27:38,950 --> 00:27:43,442 ce efect are asta, matematic, pe litere mici o? 621 00:27:43,442 --> 00:27:44,400 Audiența: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 David J. MALAN: valorifică. 623 00:27:45,691 --> 00:27:48,440 Și într-adevăr, acesta este motivul nostru Programul se numeste valorifica zero. 624 00:27:48,440 --> 00:27:51,590 Acest program, fie valorifică o scrisoare, 625 00:27:51,590 --> 00:27:54,580 după verificarea dacă este într-adevăr, o literă mică. 626 00:27:54,580 --> 00:27:59,810 În caz contrar, în linia 30, ce trebuie să fac în cazul în care nu este o literă mică, care sunt 627 00:27:59,810 --> 00:28:02,852 uita la la o anumită iterație la curent. 628 00:28:02,852 --> 00:28:03,890 Doar imprimare-l. 629 00:28:03,890 --> 00:28:07,010 >> Deci nu se schimba lucrurile că nu e nici măcar cu litere mici. 630 00:28:07,010 --> 00:28:10,790 Limitați-vă la puțin o prin pic z. 631 00:28:10,790 --> 00:28:12,730 Acum, acest lucru este destul de arcane. 632 00:28:12,730 --> 00:28:15,230 Dar, la sfârșitul zilei, această este modul în care, o dată la un moment dat, 633 00:28:15,230 --> 00:28:16,460 a trebuit să pună în aplicare lucrurile. 634 00:28:16,460 --> 00:28:19,780 Dacă am în schimb deschid valorifica o, oh mulțumesc lui Dumnezeu. 635 00:28:19,780 --> 00:28:22,320 Există o funcție chemați să superior care pot 636 00:28:22,320 --> 00:28:25,410 face tot ceea ce tocmai am făcut la un nivel destul de scăzut. 637 00:28:25,410 --> 00:28:28,752 >> Acum, la partea superioară este interesant deoarece este declarată într-un fișier, 638 00:28:28,752 --> 00:28:31,210 și ar trebui să știi doar acest prin verificarea documentației, 639 00:28:31,210 --> 00:28:35,730 sau se spune, să zicem, în clasă, în cazul în care există, într-un ctype.h fișier numit. 640 00:28:35,730 --> 00:28:37,630 Deci, acesta este un alt nou prieten de-al nostru. 641 00:28:37,630 --> 00:28:40,750 Și pentru a face exact superior ceea ce sugerează și numele. 642 00:28:40,750 --> 00:28:44,860 >> Puteți trece în, ca un argument, între aceste paranteze, unele caractere. 643 00:28:44,860 --> 00:28:48,390 Am de gând să treacă în caracterul i'th de s folosind notația noastră fantezie nou 644 00:28:48,390 --> 00:28:49,870 care implică paranteze pătrate. 645 00:28:49,870 --> 00:28:53,391 Și să ia o presupunere, care este randamentul valoare de la superior aparent merge 646 00:28:53,391 --> 00:28:53,890 să fie? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 O scrisoare de capital. 649 00:28:57,770 --> 00:28:58,620 O scrisoare de capital. 650 00:28:58,620 --> 00:29:02,330 >> Deci, dacă am trece cu litere mici a, sperăm, prin definiție de la partea superioară, 651 00:29:02,330 --> 00:29:05,600 o să se întoarcă o majuscule A. În caz contrar, 652 00:29:05,600 --> 00:29:08,590 dacă nu este o literă mică în primul rând, eu doar l imprimați. 653 00:29:08,590 --> 00:29:10,800 Și într-adevăr, observa al doilea prieten aici. 654 00:29:10,800 --> 00:29:13,840 Nu doar la partea superioară există, dar este mai mic, care 655 00:29:13,840 --> 00:29:16,200 răspunde de fapt la această întrebare pentru mine. 656 00:29:16,200 --> 00:29:19,730 >> Acum, cine a scris aceste lucruri, 10s de ani în urmă, știi ce? 657 00:29:19,730 --> 00:29:23,840 Implementat de sus și este mai mici, folosind codul de genul asta. 658 00:29:23,840 --> 00:29:27,270 Dar, din nou, în concordanță cu această idee de abstractizare departe, 659 00:29:27,270 --> 00:29:29,190 un fel de, nivel inferior detalii de implementare. 660 00:29:29,190 --> 00:29:32,600 Și în picioare pe umerii oamenilor care a venit în fața noastră, cu ajutorul funcțiilor 661 00:29:32,600 --> 00:29:36,300 ca să superioară și este mai mică, care destul de minunat sunt frumos 662 00:29:36,300 --> 00:29:40,190 numit de a spune ceea ce fac ei, este o paradigmă minunat de a adopta. 663 00:29:40,190 --> 00:29:44,040 >> Acum, se pare că, dacă am citit pagina de manual pentru, să zicem, la partea superioară, 664 00:29:44,040 --> 00:29:45,010 Am invata ceva. 665 00:29:45,010 --> 00:29:46,890 Deci, omul toupper. 666 00:29:46,890 --> 00:29:48,050 Este un pic copleșitoare. 667 00:29:48,050 --> 00:29:51,110 Dar notificare, aici e că mențiune de fișierul antet pe care ar trebui să folosesc. 668 00:29:51,110 --> 00:29:54,460 Ca o paranteza, deoarece aceasta este înșelătoare, funcția 669 00:29:54,460 --> 00:29:59,070 foloseste int in loc de caractere din motive de verificarea erorilor. 670 00:29:59,070 --> 00:30:01,260 Dar vom veni, probabil, înapoi la faptul că, în viitor. 671 00:30:01,260 --> 00:30:05,910 >> Dar observați, aici, la convertiți superioare litera c în majuscule, dacă este posibil. 672 00:30:05,910 --> 00:30:07,674 Deci, asta e destul de simplu. 673 00:30:07,674 --> 00:30:09,340 Si acum sa fi un pic mai specific. 674 00:30:09,340 --> 00:30:12,750 Să ne uităm la o parte din Pagina de om în valoare de retur. 675 00:30:12,750 --> 00:30:15,420 Valoarea returnată este că scrisorii convertit. 676 00:30:15,420 --> 00:30:18,690 Sau c, în cazul în care conversia nu a fost posibil, 677 00:30:18,690 --> 00:30:20,250 unde c este cu cel inițial. 678 00:30:20,250 --> 00:30:24,140 Ceea ce stiu de aici, de la argumentul de la superior. 679 00:30:24,140 --> 00:30:25,780 >> Deci, ce este Takeaway de asta? 680 00:30:25,780 --> 00:30:28,060 Valoarea returnată este că scrisorii convertit, 681 00:30:28,060 --> 00:30:32,110 sau c, scrisoarea originală, dacă conversia nu a fost posibil. 682 00:30:32,110 --> 00:30:36,460 Ce îmbunătățiri pot eu, prin urmare, face la designul codul meu? 683 00:30:36,460 --> 00:30:37,146 Da? 684 00:30:37,146 --> 00:30:38,810 >> Audiența: Puteți scoate altcineva. 685 00:30:38,810 --> 00:30:40,810 David J. MALAN: pot elimina declarația altceva, 686 00:30:40,810 --> 00:30:42,510 și nu doar declarația altceva. 687 00:30:42,510 --> 00:30:44,150 >> Audiența: Aveți posibilitatea să eliminați [neauzit]. 688 00:30:44,150 --> 00:30:46,310 >> David J. MALAN: pot scoateți tot furca 689 00:30:46,310 --> 00:30:48,209 în drum, în cazul în care mai totul. 690 00:30:48,209 --> 00:30:50,250 Așa că, într-adevăr, să-mi deschid versiunea finală a acestui fapt, 691 00:30:50,250 --> 00:30:55,540 valorifica-2 și observa doar cum, în cazul în care va, sexy, codul este acum obtinerea, 692 00:30:55,540 --> 00:31:00,040 în care le-am redus de la unele șapte sau atât de linii la doar patru, 693 00:31:00,040 --> 00:31:03,850 funcționalitatea pe care am intenționat pur și simplu apel la partea superioară, 694 00:31:03,850 --> 00:31:09,410 trece în s suport i, și de imprimare afară, cu substituent% C, 695 00:31:09,410 --> 00:31:11,090 care caracter special. 696 00:31:11,090 --> 00:31:14,560 >> Acum, fără îndoială, este un bug, sau cel puțin riscul de un bug, 697 00:31:14,560 --> 00:31:15,350 în acest program. 698 00:31:15,350 --> 00:31:18,200 Deci, doar pentru a reveni la un Takeaway mai devreme, 699 00:31:18,200 --> 00:31:21,820 ceea ce ar trebui să fac, probabil, de asemenea, în acest program pentru a face mai robust, 700 00:31:21,820 --> 00:31:24,974 astfel încât nu există nici un fel se poate accident, chiar și în cazuri rare? 701 00:31:24,974 --> 00:31:26,390 Audiența: Asigurați-vă că nu este NULL. 702 00:31:26,390 --> 00:31:28,056 David J. MALAN: Asigurați-vă că nu este NULL. 703 00:31:28,056 --> 00:31:31,030 Deci într-adevăr, pentru a face acest super- buna, eu ar trebui să facă ceva de genul, 704 00:31:31,030 --> 00:31:35,300 dacă s nu este NULL, atunci mergeți mai departe și să execute 705 00:31:35,300 --> 00:31:38,470 aceste linii de cod, care Pot apoi liniuță de genul asta, 706 00:31:38,470 --> 00:31:39,870 și apoi pus în acoladă mea aproape. 707 00:31:39,870 --> 00:31:41,550 Deci, bun de legare împreună a celor două idei. 708 00:31:41,550 --> 00:31:42,429 Da? 709 00:31:42,429 --> 00:31:44,470 Audiența: Ai putea folosi o face în timp ce buclă, în schimb? 710 00:31:44,470 --> 00:31:47,270 David J. MALAN: Ar putea Am face o face în timp ce buclă? 711 00:31:47,270 --> 00:31:50,020 Audiența: --you doriți să vă asigurați că tu de fapt [neauzit]. 712 00:31:50,020 --> 00:31:51,728 David J. MALAN: Ar putea utilizați o face în timp? 713 00:31:51,728 --> 00:31:52,450 Răspuns scurt, nu. 714 00:31:52,450 --> 00:31:54,700 Pentru că ești pe cale de a introduce un alt caz colț. 715 00:31:54,700 --> 00:31:56,660 Dacă șirul este de lungime zero. 716 00:31:56,660 --> 00:31:59,600 Dacă, de exemplu, am lovit doar Introduceți, fără să tastarea Zamyla. 717 00:31:59,600 --> 00:32:02,490 Am de gând să te dai înapoi un real șir, așa cum vom vedea în cele din urmă, 718 00:32:02,490 --> 00:32:03,780 care are zero caractere. 719 00:32:03,780 --> 00:32:05,630 Este încă un șir de caractere, e doar foarte scurt. 720 00:32:05,630 --> 00:32:07,960 Dar, dacă folosiți o face în timp ce, ai de gând să orbește 721 00:32:07,960 --> 00:32:10,050 încercați să faceți ceva cu respect pentru că șir, 722 00:32:10,050 --> 00:32:12,537 și nimic nu va fi acolo. 723 00:32:12,537 --> 00:32:18,607 >> Audiența: Ei bine, dacă ai făcut-o face [inaudibil] în timp ce S-- 724 00:32:18,607 --> 00:32:21,190 David J. MALAN: Oh, am vedea, ține obtinerea unui șir de utilizator. 725 00:32:21,190 --> 00:32:23,525 Răspuns atât de scurt, tu ar putea, și să păstreze bat la cap 726 00:32:23,525 --> 00:32:26,150 le pentru a vă oferi un șir care este suficient de scurt pentru a se potrivi în memorie. 727 00:32:26,150 --> 00:32:26,700 Absolut. 728 00:32:26,700 --> 00:32:27,630 Am ales să nu. 729 00:32:27,630 --> 00:32:30,505 Dacă nu-mi dai șir I vrea, eu dau demisia, eu renunț. 730 00:32:30,505 --> 00:32:33,260 Dar absolut, în acest scop, ai putea face absolut asta. 731 00:32:33,260 --> 00:32:37,500 >> Deci, fișiere antet bibliotecii care acum suntem familiarizați cu sunt acestea, aici. 732 00:32:37,500 --> 00:32:41,550 Standard I / O, CS50.h, string.h, ctype.h, și există, într-adevăr, altele. 733 00:32:41,550 --> 00:32:44,460 Unii dintre voi au descoperit biblioteca matematică în math.h. 734 00:32:44,460 --> 00:32:48,200 Dar permiteți-mi să vă prezint, acum, la această resursă care personalul CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 și Rob, și Gabe special au pus impreuna. 736 00:32:50,630 --> 00:32:52,630 Care va lega curând pe site-ul cursului. 737 00:32:52,630 --> 00:32:54,870 Se numește referință CS50. 738 00:32:54,870 --> 00:32:58,230 >> Care doar pentru a vă oferi o rapid gust de ea, funcționează după cum urmează. 739 00:32:58,230 --> 00:33:00,740 Lasă-mă să merg la reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Veți vedea pe mâna stângă alta o listă copleșitoare 741 00:33:02,990 --> 00:33:04,595 de funcții care vin cu c. 742 00:33:04,595 --> 00:33:07,790 Dar dacă îmi pasă, pentru moment, despre ceva de genul strlen, 743 00:33:07,790 --> 00:33:08,746 Pot să-l introduceți acolo. 744 00:33:08,746 --> 00:33:10,870 Se filtrează jos lista la doar ceea ce îmi pasă. 745 00:33:10,870 --> 00:33:11,940 Am de gând să faceți clic pe el. 746 00:33:11,940 --> 00:33:14,740 Și acum pe partea stângă, veți vedea ce sperăm 747 00:33:14,740 --> 00:33:18,290 este o mult mai simplă, umană explicație prietenos de cum 748 00:33:18,290 --> 00:33:19,170 Această funcție. 749 00:33:19,170 --> 00:33:20,600 >> Returnează lungimea unui șir. 750 00:33:20,600 --> 00:33:24,060 Iată un rezumat, iată cum te să-l utilizați în ceea ce privește fișierul header, 751 00:33:24,060 --> 00:33:27,430 și în ceea ce privește ceea ce a funcției arata ca in ceea ce priveste argumentele sale. 752 00:33:27,430 --> 00:33:30,250 Și apoi aici, se întoarce lungimea unui șir. 753 00:33:30,250 --> 00:33:34,280 Dar, pentru cei dintre voi mai confortabil, aveți posibilitatea să faceți clic de fapt mai confortabil, 754 00:33:34,280 --> 00:33:37,070 și conținutul acestui pagina, acum, se va schimba 755 00:33:37,070 --> 00:33:41,660 să fie valorile implicite de ce veți obține prin utilizarea pagina de manual. 756 00:33:41,660 --> 00:33:44,100 >> Cu alte cuvinte, CS50 referință este o simplificare 757 00:33:44,100 --> 00:33:46,220 de pagini de manual de către personalul, pentru studenți. 758 00:33:46,220 --> 00:33:49,320 În special, cele mai putin confortabil și în între, astfel încât să 759 00:33:49,320 --> 00:33:51,660 nu trebuie să încerce să-și încheie mintea ta în jurul, sincer, 760 00:33:51,660 --> 00:33:55,030 unele sintaxa destul de criptic și documentare cândva. 761 00:33:55,030 --> 00:33:57,650 >> Deci, ține minte în zilele următoare. 762 00:33:57,650 --> 00:33:59,560 Deci, aici, din nou, este un Zamyla. 763 00:33:59,560 --> 00:34:03,255 Să acum pun o întrebare care este mai mult uman accesibil. 764 00:34:03,255 --> 00:34:05,380 Datorită Chang, care a fost imprimarea mai multor elefanți 765 00:34:05,380 --> 00:34:07,090 non-stop pentru ultimele zile. 766 00:34:07,090 --> 00:34:09,730 Avem o oportunitate de a da cel puțin unul dintre ei departe. 767 00:34:09,730 --> 00:34:13,239 Dacă am putea obține doar un voluntar pentru a veni în sus pentru a trage pe ecran. 768 00:34:13,239 --> 00:34:14,530 Ce zici de aici? 769 00:34:14,530 --> 00:34:15,340 >> Hai sus. 770 00:34:15,340 --> 00:34:16,720 Care este numele tau? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 David J. MALAN: Alex. 773 00:34:17,760 --> 00:34:18,259 În regulă. 774 00:34:18,259 --> 00:34:19,388 Alex, haide sus. 775 00:34:19,388 --> 00:34:21,679 Suntem pe cale de a vedea dvs. scrierii de mână pe ecran aici. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Bine, mă bucur să te cunosc. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Nice tu te cunosc. 779 00:34:26,429 --> 00:34:27,512 >> David J. MALAN: Bine. 780 00:34:27,512 --> 00:34:28,969 Deci, exercițiu foarte simplu. 781 00:34:28,969 --> 00:34:31,440 Bar nu este mare pentru a obține un elefant astăzi. 782 00:34:31,440 --> 00:34:33,439 Joci rolul de getstring. 783 00:34:33,439 --> 00:34:35,980 Și am de gând să vă spun doar șirul pe care le-ați primit. 784 00:34:35,980 --> 00:34:38,080 Și să presupunem că, getstring, au fost chemați. 785 00:34:38,080 --> 00:34:42,480 Și omul, ca mine, are scris cu Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Doar mergeți mai departe și scrie Zamyla cu privire la ecran ca si cum ați ajuns 787 00:34:45,650 --> 00:34:47,250 și depozitate undeva în memorie. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Lăsând loc pentru ceea ce va fi de mai multe alte words-- e OK, continua. 790 00:34:55,570 --> 00:34:59,620 >> [Râsete] 791 00:34:59,620 --> 00:35:00,800 >> Deci Zamyla, Excelent. 792 00:35:00,800 --> 00:35:04,880 Deci, acum, să presupunem că, getstring, sunt sunat din nou. 793 00:35:04,880 --> 00:35:09,350 Și, prin urmare, eu voi oferi, la tastatura, cu un alt nume, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 În regulă. 796 00:35:18,060 --> 00:35:22,380 Și acum getString data viitoare este numita, tip I în ceva de genul Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Ești într-adevăr a lua la inimă memorie cu acces aleator. 798 00:35:27,560 --> 00:35:29,631 Care atrage tot complet aleator. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [Râsete] 801 00:35:31,104 --> 00:35:32,520 ALEX: Îmi pare rău scrisul meu este rău. 802 00:35:32,520 --> 00:35:33,770 David J. MALAN: Nu, e în regulă. 803 00:35:33,770 --> 00:35:40,480 Și cum despre Rob, R-O-B. OK. 804 00:35:40,480 --> 00:35:41,020 Bun. 805 00:35:41,020 --> 00:35:43,853 Deci, eu nu te-am anticipat-ar fel de pune lucrurile în acest fel. 806 00:35:43,853 --> 00:35:45,020 Dar putem face acest lucru. 807 00:35:45,020 --> 00:35:48,810 Deci, cum te-ai dus de stabilire a aceste caractere în memorie? 808 00:35:48,810 --> 00:35:51,310 Cu alte cuvinte, dacă ne gândim la acest ecran negru dreptunghiular 809 00:35:51,310 --> 00:35:53,550 ca reprezentând o RAM, sau memoria calculatorului. 810 00:35:53,550 --> 00:35:55,850 >> Și amintesc că RAM este doar o grămadă de bytes, 811 00:35:55,850 --> 00:35:57,480 și bytes sunt o grămadă de biți. 812 00:35:57,480 --> 00:35:59,350 Și biți sunt într-un fel puse în aplicare, în general, 813 00:35:59,350 --> 00:36:01,119 cu o formă de de energie electrică în hardware. 814 00:36:01,119 --> 00:36:03,160 Deci, asta e un fel de Stratificarea am vorbit despre 815 00:36:03,160 --> 00:36:04,510 și poate lua acum de la sine. 816 00:36:04,510 --> 00:36:07,020 Cum te-ai dus de decide unde să scrie 817 00:36:07,020 --> 00:36:11,634 Rob versus Gabe față Belinda versus Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Tocmai am făcut-o în ordona ca mi-ai spus. 819 00:36:14,020 --> 00:36:15,650 >> David J. MALAN: Și asta este adevărat. 820 00:36:15,650 --> 00:36:20,100 Dar ceea ce guvernat în cazul în care ați pus Numele Belinda și numele lui Gabe? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Nimic? 822 00:36:20,764 --> 00:36:22,930 David J. MALAN: [râde] Așa că funcționează, că e bine. 823 00:36:22,930 --> 00:36:25,290 Deci, computerele sunt puțin mai ordonat decât atât. 824 00:36:25,290 --> 00:36:29,000 Așa că atunci când ne-am implement-- sta acolo pentru doar un moment-- când suntem de fapt 825 00:36:29,000 --> 00:36:31,470 să pună în aplicare ceva de genul getString într-un calculator, 826 00:36:31,470 --> 00:36:34,480 Zamyla s-ar putea să fie dispuse destul de mult cum ai făcut pe ecran, acolo. 827 00:36:34,480 --> 00:36:36,660 >> Și ceea ce este esențial pentru a observa aici, ceea ce a făcut Alex, 828 00:36:36,660 --> 00:36:40,260 este că există un fel de delimitare printre fiecare dintre aceste cuvinte, nu? 829 00:36:40,260 --> 00:36:46,580 Nu ai scris Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 Cu alte cuvinte, există un fel de demarcație care pare a fi, 831 00:36:49,740 --> 00:36:52,370 un fel de, spațiere aleator între aceste diferite cuvinte. 832 00:36:52,370 --> 00:36:54,120 Dar asta e bine, pentru că noi, oamenii, poate acum 833 00:36:54,120 --> 00:36:56,470 vizualiza că acestea sunt patru siruri de caractere diferite. 834 00:36:56,470 --> 00:36:59,540 Nu este doar o secvență de o mulțime de personaje. 835 00:36:59,540 --> 00:37:04,190 Deci, un calculator, apoi, între timp, s-ar putea lua un șir ca Zamyla, 836 00:37:04,190 --> 00:37:07,220 pune fiecare dintre aceste scrisori în interiorul unui octet de memorie. 837 00:37:07,220 --> 00:37:10,400 Dar acest număr este mult mai mare, desigur, decât șase caractere. 838 00:37:10,400 --> 00:37:11,690 >> Există o grămadă de RAM. 839 00:37:11,690 --> 00:37:15,330 Și așa de acum înainte, această grilă de cutii se întâmplă 840 00:37:15,330 --> 00:37:17,560 să reprezinte ceea ce tocmai Alex făcut aici pe ecran. 841 00:37:17,560 --> 00:37:20,937 Și acum, Alex, va putem oferi o albastru sau un elefant portocaliu de la Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Voi lua o elefant albastru. 843 00:37:22,270 --> 00:37:23,120 David J. MALAN: Un elefant albastru. 844 00:37:23,120 --> 00:37:25,580 Deci, o rundă mare de aplauze, dacă am putea, de Alex aici. 845 00:37:25,580 --> 00:37:26,100 >> [Aplauze] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Mulțumesc. 847 00:37:26,766 --> 00:37:28,820 David J. MALAN: Mulțumesc. 848 00:37:28,820 --> 00:37:36,230 Deci Takeaway este că, chiar dacă model tip de schimbat in timp, aici 849 00:37:36,230 --> 00:37:40,430 pe placa, nu a existat această delimitare între diferitele siruri de caractere 850 00:37:40,430 --> 00:37:42,610 că Alex are pentru noi. 851 00:37:42,610 --> 00:37:45,230 Acum calculatoare, sincer, ar putea face același lucru. 852 00:37:45,230 --> 00:37:48,210 Ele ar putea fel de plop siruri de caractere oriunde în RAM. 853 00:37:48,210 --> 00:37:50,710 Până aici, pe aici, aici, aici. 854 00:37:50,710 --> 00:37:52,020 >> Ei pot face exact asta. 855 00:37:52,020 --> 00:37:54,280 Dar, desigur, asta e probabil nu cel mai bun de planificare. 856 00:37:54,280 --> 00:37:54,780 Corect? 857 00:37:54,780 --> 00:37:57,340 Dacă am tot întrebat pe Alex la obține nume, probabil el ar fi 858 00:37:57,340 --> 00:38:01,370 pune ceva mai jos aici, poate în sus aici, aici, aici, în cele din urmă 859 00:38:01,370 --> 00:38:02,211 pe aici. 860 00:38:02,211 --> 00:38:05,460 Dar cu o planificare pic mai mult, cu siguranță, am putea pune lucrurile mai curat. 861 00:38:05,460 --> 00:38:07,350 Și într-adevăr, asta e ceea ce face un calculator. 862 00:38:07,350 --> 00:38:10,720 >> Dar captura este că în cazul în care următorul șir primesc 863 00:38:10,720 --> 00:38:14,050 după Zamyla este ceva ca Belinda, 864 00:38:14,050 --> 00:38:17,929 propune în cazul în care s-ar putea scrieþi lit.b cu privire la această grilă? 865 00:38:17,929 --> 00:38:18,720 Unde te-ai duce? 866 00:38:18,720 --> 00:38:21,480 În partea dreaptă a A, de mai jos z, de mai jos A? 867 00:38:21,480 --> 00:38:23,204 Care ar fi primele tale instincte? 868 00:38:23,204 --> 00:38:24,120 Audiența: Sub z. 869 00:38:24,120 --> 00:38:25,100 David J. MALAN: Deci, mai jos de z. 870 00:38:25,100 --> 00:38:26,530 Și asta e destul de simplu, nu? 871 00:38:26,530 --> 00:38:29,321 Este un fel de curat, e ceea ce facem pe o tastatură, atunci când ne-am lovit Enter, 872 00:38:29,321 --> 00:38:31,770 sau un e-mail atunci când se face o listă cu marcatori de lucruri. 873 00:38:31,770 --> 00:38:34,310 Dar realitatea este că calculatoare să încerce să fie mai eficient, 874 00:38:34,310 --> 00:38:37,170 și ghiftui cu siguranță la fel de mult date în RAM în care este posibil, 875 00:38:37,170 --> 00:38:38,890 astfel încât să nu pierdeți nici bytes. 876 00:38:38,890 --> 00:38:41,545 Astfel încât să nu pierdeți orice bunuri imobiliare ecran. 877 00:38:41,545 --> 00:38:44,170 Și problema, însă, este faptul că dacă am pus literalmente litera 878 00:38:44,170 --> 00:38:49,940 b după o, cum vom știu unde nume Zamyla se încheie 879 00:38:49,940 --> 00:38:51,840 și numele Belinda incepe? 880 00:38:51,840 --> 00:38:55,270 Deci, voi, oamenii, doar a propus, de asemenea, apăsați tasta Enter, în esență. 881 00:38:55,270 --> 00:38:56,410 Pune-l jos de mai jos. 882 00:38:56,410 --> 00:38:59,750 Sau cum a făcut Alex, începe doar scris urmatorul nume sub cel anterior, 883 00:38:59,750 --> 00:39:01,583 și de mai jos, care, și apoi sub acela. 884 00:39:01,583 --> 00:39:02,510 Acesta este un indiciu vizual. 885 00:39:02,510 --> 00:39:05,960 >> Calculatoare avea un alt reper vizual, dar e un pic mai succint. 886 00:39:05,960 --> 00:39:07,840 Este acest personaj funky. 887 00:39:07,840 --> 00:39:11,890 Backslash 0, care este, probabil amintind de backslash n, 888 00:39:11,890 --> 00:39:12,640 și așa mai departe, acum. 889 00:39:12,640 --> 00:39:14,120 Secvențele speciale de evacuare. 890 00:39:14,120 --> 00:39:19,120 Backslash 0 este modul de reprezentând opt la zero biți într-un rând. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> Felul în care exprima că nu a este lovit numărul zero, de pe tastatură, 893 00:39:26,130 --> 00:39:28,140 deoarece, de fapt, că este un char ASCII. 894 00:39:28,140 --> 00:39:30,990 Se pare ca un număr, dar este de fapt un număr zecimal 895 00:39:30,990 --> 00:39:35,910 care reprezintă circulara simbol, tipul caracterelor circular. 896 00:39:35,910 --> 00:39:38,410 Între timp, backslash zero, înseamnă, literal 897 00:39:38,410 --> 00:39:40,700 a pus opt la zero bytes aici pentru mine. 898 00:39:40,700 --> 00:39:42,136 >> Deci, aceasta este oarecum arbitrară. 899 00:39:42,136 --> 00:39:44,260 Am fi putut folosi orice model de biți, dar lumea 900 00:39:44,260 --> 00:39:46,610 a decis cu câțiva ani urmă, care să reprezinte 901 00:39:46,610 --> 00:39:49,710 sfârșitul unui șir în memorie, doar a pus o grămadă de zerouri. 902 00:39:49,710 --> 00:39:51,000 Pentru ca putem detecta acest lucru. 903 00:39:51,000 --> 00:39:54,790 Acum, ceea ce înseamnă că nici o scrisoare de alfabet poate fi reprezentat cu zerouri. 904 00:39:54,790 --> 00:39:58,480 >> Dar asta e bine, am văzut deja pe care le utilizați 65 până la 97 pe sus. 905 00:39:58,480 --> 00:40:00,290 Noi nu am primit nicăieri Aproape de toate zerouri. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Deci, Belinda în memoria unui computer este, de fapt de gând să merg aici. 908 00:40:06,540 --> 00:40:09,764 L-am tras în galben doar pentru a atrage atenția la el. 909 00:40:09,764 --> 00:40:11,680 Și preaviz, de asemenea, acest este complet arbitrară. 910 00:40:11,680 --> 00:40:12,680 L-am tras ca o grilă. 911 00:40:12,680 --> 00:40:14,460 Cum ar fi, memoria RAM este doar un obiect fizic. 912 00:40:14,460 --> 00:40:17,300 Ea nu trebuie neapărat rânduri și coloane, în sine. 913 00:40:17,300 --> 00:40:20,490 Este tocmai am primit o grămadă de bytes implementat în hardware-ul într-un fel. 914 00:40:20,490 --> 00:40:22,817 Dar, dacă după Belinda I tastat numele lui Gabe, 915 00:40:22,817 --> 00:40:25,650 el va ajunge aici în memorie, și dacă am scris numele Daven lui, 916 00:40:25,650 --> 00:40:27,316 de exemplu, el se va ajunge aici. 917 00:40:27,316 --> 00:40:29,310 Și eu pot continua să scrie chiar mai multe nume. 918 00:40:29,310 --> 00:40:32,100 >> Din păcate, dacă am încerca să Trimite un nume foarte lung, 919 00:40:32,100 --> 00:40:33,730 S-ar putea alerga în cele din urmă afară de memorie. 920 00:40:33,730 --> 00:40:37,810 În acest caz, este getstring O să se întoarcă NULL, așa cum am spus. 921 00:40:37,810 --> 00:40:41,720 Dar, din fericire, cel puțin în acest vizuală aici, nu am primit chiar atât de departe. 922 00:40:41,720 --> 00:40:45,860 >> Acum, ceea ce este frumos este că această idee generală de a trata lucrurile 923 00:40:45,860 --> 00:40:49,720 ca fiind în cutii este reprezentant a unei caracteristici de C 924 00:40:49,720 --> 00:40:52,690 și o mulțime de limbi, cunoscut ca un tablou. 925 00:40:52,690 --> 00:40:55,490 O matrice este un alt tip de date. 926 00:40:55,490 --> 00:40:57,380 Este o structură de date, dacă vreți. 927 00:40:57,380 --> 00:41:01,160 Structura în sensul de ea într-adevăr, un fel de, ca o cutie, cel puțin 928 00:41:01,160 --> 00:41:02,320 în ochii minții. 929 00:41:02,320 --> 00:41:09,680 O matrice este o contiguă secvență de tipuri de date identice, 930 00:41:09,680 --> 00:41:11,330 spate în spate la spate în spate. 931 00:41:11,330 --> 00:41:14,720 >> Deci un șir, în alte cuvinte, este o matrice de caractere. 932 00:41:14,720 --> 00:41:16,120 O serie de caractere. 933 00:41:16,120 --> 00:41:19,070 Dar se pare că poți avea tablouri de buchete de lucruri. 934 00:41:19,070 --> 00:41:21,870 De fapt, putem pune chiar numere într-o matrice. 935 00:41:21,870 --> 00:41:23,920 Deci, forma în care vom începe 936 00:41:23,920 --> 00:41:26,590 declararea acestor date Structura cunoscut ca o matrice 937 00:41:26,590 --> 00:41:28,250 este, de asemenea, va folosi paranteze pătrate. 938 00:41:28,250 --> 00:41:31,500 Dar aceste paranteze drepte sunt de gând să au sens diferit în acest context. 939 00:41:31,500 --> 00:41:33,450 >> Și să-l văd, după cum urmează. 940 00:41:33,450 --> 00:41:36,780 Să presupunem că am deschis un nou fișier aici. 941 00:41:36,780 --> 00:41:38,535 Și am salva acest lucru ca ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 Și voi salva acest lucru în dosarul meu aici. 944 00:41:43,470 --> 00:41:46,130 Și acum am de gând să merg mai departe și începeți să tastați ceva 945 00:41:46,130 --> 00:41:53,940 ca includ CS50.h, includ stdio.h, int void main. 946 00:41:53,940 --> 00:41:57,370 Și apoi în interiorul de aici, vreau pentru a avea mai întâi o int numita vârstă. 947 00:41:57,370 --> 00:42:01,371 >> Și am de gând să utilizeze că pentru a obține o int de utilizator pentru vârsta lui sau a ei. 948 00:42:01,371 --> 00:42:04,620 Dar acest program este menit să fie folosit de mai multe persoane, indiferent de context. 949 00:42:04,620 --> 00:42:05,490 Am o linie de oameni. 950 00:42:05,490 --> 00:42:08,281 Toate acestea trebuie să tastați lor vârstă pentru unii, poate, nu știu, 951 00:42:08,281 --> 00:42:10,530 concurență, sau eveniment care au ajuns pentru. 952 00:42:10,530 --> 00:42:13,030 Deci, următoarea persoană, am au nevoie de o altă variabilă. 953 00:42:13,030 --> 00:42:15,790 >> Pentru că dacă am face vârstă se getint, asta e 954 00:42:15,790 --> 00:42:18,500 O să atace, sau pentru a suprascrie vârsta persoanei precedent. 955 00:42:18,500 --> 00:42:19,760 Așa că nu e bine. 956 00:42:19,760 --> 00:42:21,790 Deci, primul meu instinct ar putea fi, oh, bine, 957 00:42:21,790 --> 00:42:26,260 dacă doriți să obțineți mai multe persoane de ages-- să numim această age1, 958 00:42:26,260 --> 00:42:31,280 int age2 se int, int age3 se getint. 959 00:42:31,280 --> 00:42:35,340 Și acum am de gând să utilizeze un cod pseudocod aici. 960 00:42:35,340 --> 00:42:37,679 >> Fă ceva cu acele numere. 961 00:42:37,679 --> 00:42:40,470 Vom pleca pentru o altă zi ce facem acolo, pentru că noi doar 962 00:42:40,470 --> 00:42:44,200 de îngrijire pentru moment despre age1, age2, age3. 963 00:42:44,200 --> 00:42:46,450 Din păcate, o dată ce am compila acest program 964 00:42:46,450 --> 00:42:51,140 și-l pune in fata utilizatorilor reale, ce-i de design fundamental slab 965 00:42:51,140 --> 00:42:53,890 decizie pare să fi făcut? 966 00:42:53,890 --> 00:42:54,624 Da? 967 00:42:54,624 --> 00:42:55,499 Audiența: [inaudibil] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 David J. MALAN: Da, Nici n-am încercat 970 00:42:59,820 --> 00:43:02,028 să ne dăm seama cât de multe ere mi-ar păsa de fapt, despre? 971 00:43:02,028 --> 00:43:05,380 Dacă am mai mult de trei persoane aici, și, prin urmare, mai puțin de trei vârste, 972 00:43:05,380 --> 00:43:07,260 Sunt încă orbește așteaptă trei. 973 00:43:07,260 --> 00:43:08,720 Doamne ferește patru oameni arată în sus. 974 00:43:08,720 --> 00:43:10,990 Programul meu pur si simplu nu le va mai suporta. 975 00:43:10,990 --> 00:43:13,280 >> Și astfel aceasta, poveste lunga scurt, nu este un obicei bun. 976 00:43:13,280 --> 00:43:13,780 Corect? 977 00:43:13,780 --> 00:43:16,530 Am fost, în esență, copierea și lipirea de cod și doar tweaking 978 00:43:16,530 --> 00:43:17,430 nume de variabile. 979 00:43:17,430 --> 00:43:22,410 Și, Doamne, dacă ai avea, nu trei vârstele, dar 10, sau 100, sau chiar 6500 980 00:43:22,410 --> 00:43:23,820 studenti, de exemplu. 981 00:43:23,820 --> 00:43:26,950 Acest lucru nu va fi deosebit de Codul elegant, sau durabilă. 982 00:43:26,950 --> 00:43:29,200 Ai de gând să aibă de a rescrie programul de fiecare dată 983 00:43:29,200 --> 00:43:30,760 numărul dvs. de persoane modificări. 984 00:43:30,760 --> 00:43:35,090 >> Deci, din fericire, în actuala noastră fișier ages.c pentru azi, 985 00:43:35,090 --> 00:43:36,970 avem o soluție mai inteligent. 986 00:43:36,970 --> 00:43:39,800 În primul rând, am de gând să împrumute construi am folosit de câteva ori, 987 00:43:39,800 --> 00:43:43,744 acest face în timp ce bucla, în scopul de a obține numărul de persoane în cameră. 988 00:43:43,744 --> 00:43:46,910 Mă duc să hartuiti utilizator, din nou și din nou, până când el sau ea mi-a dat 989 00:43:46,910 --> 00:43:49,260 o valoare de n care este un număr întreg pozitiv. 990 00:43:49,260 --> 00:43:51,590 >> Am fi putut folosi, ultima timp ne int pozitiv. 991 00:43:51,590 --> 00:43:53,720 Dar noi nu avem asta pe bune, asa ca am mers mai departe 992 00:43:53,720 --> 00:43:55,660 și re pus în aplicare această idee. 993 00:43:55,660 --> 00:43:58,410 Acum aici, acesta este noul truc. 994 00:43:58,410 --> 00:44:02,260 In linia 27, ca observațiile în linia 26 sugerează, 995 00:44:02,260 --> 00:44:05,180 declara o matrice în care pentru a stoca vârstă tuturor. 996 00:44:05,180 --> 00:44:09,320 >> Deci, dacă doriți să obțineți, nu un int, nu două int, dar o grămadă de int. 997 00:44:09,320 --> 00:44:13,800 Mai exact n numere întregi, s-au n-ar putea fi trei, s-ar putea fi de 100, ar putea fi 1000. 998 00:44:13,800 --> 00:44:17,570 Sintaxa, pur și simplu, este de a să zicem, ce tip de date vrei? 999 00:44:17,570 --> 00:44:19,620 Ce vrei să apelați că bucata de memorie? 1000 00:44:19,620 --> 00:44:23,530 Ce vrei să sun la rețeaua de care arata ca acest pictural? 1001 00:44:23,530 --> 00:44:27,700 >> Și în paranteze aici, voi spune cât de mare doriți matrice să fie. 1002 00:44:27,700 --> 00:44:30,450 Și așa mai devreme, atunci când i-am spus Sintaxa este un pic diferit aici, 1003 00:44:30,450 --> 00:44:33,614 suntem încă utilizați paranteze pătrate, dar când am declarare a unui tablou, 1004 00:44:33,614 --> 00:44:35,530 numărul interiorul paranteze pătrate mijloace 1005 00:44:35,530 --> 00:44:37,610 cat de mare vrei matrice să fie. 1006 00:44:37,610 --> 00:44:42,490 >> Prin contrast, atunci când am fost cu ajutorul lui suport i acum o clipă, s, un șir de caractere, 1007 00:44:42,490 --> 00:44:46,820 este într-adevăr o serie de caractere, dar atunci când nu se declară o variabilă, 1008 00:44:46,820 --> 00:44:49,760 ca cu acest cuvânt cheie aici, Ești pur și simplu obținerea 1009 00:44:49,760 --> 00:44:54,280 un indice specific, un anumit elementul de care matrice. 1010 00:44:54,280 --> 00:44:57,090 Odată ce știm că, restul în acest sens este simplă. 1011 00:44:57,090 --> 00:45:00,765 Dacă noi am primul gând a imprima Care este vârsta de numărul de persoane i. 1012 00:45:00,765 --> 00:45:03,890 În cazul în care eu spun doar numărul persoană unul, persoană numărul doi, persoană număr de trei. 1013 00:45:03,890 --> 00:45:06,306 >> Și eu fac doar aritmetică, astfel încât oamenii normali, cum ar fi, 1014 00:45:06,306 --> 00:45:09,030 am număra de la unu pentru această Program, și nu de la zero. 1015 00:45:09,030 --> 00:45:13,620 Apoi eu numesc getint, dar eu stoca răspunsul în vârstă bracketing i. 1016 00:45:13,620 --> 00:45:16,610 Care este varsta i'th în matrice. 1017 00:45:16,610 --> 00:45:21,640 Deci, în timp ce ultima dată când am fost tratarea aceste cutii ar fi caractere pentru nume Zamyla lui, 1018 00:45:21,640 --> 00:45:22,490 și altele. 1019 00:45:22,490 --> 00:45:26,530 Acum, aceste cutii reprezintă 32 de biți, sau patru bytes 1020 00:45:26,530 --> 00:45:29,510 în care putem stoca un int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Toate acestea, din nou, sunt de același tip de date. 1022 00:45:31,890 --> 00:45:33,890 >> Acum, eu fac ceva stupid, ca trece timpul, doar 1023 00:45:33,890 --> 00:45:35,510 pentru a justifica scris acest program. 1024 00:45:35,510 --> 00:45:40,050 Și apoi aici, am repeta din nou peste matrice spune un an de acum, 1025 00:45:40,050 --> 00:45:43,090 Numărul de persoane o voință fi ceva de ani vechime. 1026 00:45:43,090 --> 00:45:45,010 Și să ne dăm seama că math-- Vreau să spun, acest 1027 00:45:45,010 --> 00:45:49,260 nu este foarte complicat arithmetic-- Am adăuga unul la vârsta lor. 1028 00:45:49,260 --> 00:45:51,240 Doar pentru a demonstra, din nou, acest lucru. 1029 00:45:51,240 --> 00:45:57,910 >> Așa cum am putea index într-un șir, s, Pot sa indice într-o serie de vârste, 1030 00:45:57,910 --> 00:45:59,950 așa acolo. 1031 00:45:59,950 --> 00:46:03,340 Deci, în cazul în care se întâmplă acest lucru pentru a lua noi? 1032 00:46:03,340 --> 00:46:07,070 Deci, vom vedea, în cele din urmă, o câteva lucruri în zilele care vin. 1033 00:46:07,070 --> 00:46:09,510 Unul, în tot acest timp, când scris propriile programe, 1034 00:46:09,510 --> 00:46:11,239 cum ar fi Mario, lacom, credit. 1035 00:46:11,239 --> 00:46:13,780 Ai fost să tastați numele de programul și apăsarea Enter. 1036 00:46:13,780 --> 00:46:15,610 Și apoi obtinerea de intrare a utilizatorului. 1037 00:46:15,610 --> 00:46:18,137 >> Cu getString, getint, getLongLong, sau altele asemenea. 1038 00:46:18,137 --> 00:46:20,720 Dar se pare ca C suporturi ceva numit linie de comandă 1039 00:46:20,720 --> 00:46:25,740 argumente, care este de gând să ne lase ajunge de fapt la cuvintele pe care le tastați, 1040 00:46:25,740 --> 00:46:28,570 la prompt clipește, după numele programului dumneavoastră. 1041 00:46:28,570 --> 00:46:31,430 >> Deci, în zilele următoare, voi s-ar putea introduce ceva de genul Caesar, 1042 00:46:31,430 --> 00:46:34,950 sau ./caesar numărul 13, după aceea. 1043 00:46:34,950 --> 00:46:36,070 Vom vedea cum merge. 1044 00:46:36,070 --> 00:46:37,550 Pentru că, într-adevăr, în problema stabilit două, suntem 1045 00:46:37,550 --> 00:46:39,383 O să vi-l prezint la ceva 1046 00:46:39,383 --> 00:46:42,360 amintind de-al lui Ralphie provocare mai devreme de cartografie. 1047 00:46:42,360 --> 00:46:43,970 Arta de codare informații. 1048 00:46:43,970 --> 00:46:46,660 Acest lucru, de fapt, este foarte amintind de ceea ce a făcut Ralphie. 1049 00:46:46,660 --> 00:46:51,380 >> Acesta este un exemplu de criptare algoritm numit rot13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Ceea ce înseamnă pur și simplu rotiți litere din alfabetul de 13 de locuri. 1051 00:46:54,910 --> 00:46:58,309 Și dacă faci asta, veți vedea acum ceea ce este, probabil, o expresie familiar. 1052 00:46:58,309 --> 00:47:01,100 Dar modul în care vom utiliza aceasta, în cele din urmă, este mai general. 1053 00:47:01,100 --> 00:47:04,390 >> În P stabilit două, în ediția standard, va pune în aplicare o serie de cifre, 1054 00:47:04,390 --> 00:47:06,720 unul numit Cezar, unul numit Vigenere. 1055 00:47:06,720 --> 00:47:10,090 Ambele sunt rotație cifruri, în care într-un fel te 1056 00:47:10,090 --> 00:47:11,826 transforma o literă într-o scrisoare diferit. 1057 00:47:11,826 --> 00:47:12,950 Și Cezar este super simplu. 1058 00:47:12,950 --> 00:47:16,220 Adăugați unul, adăugați 13, sau un numar de pana la 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenere face că pe o scrisoare pe bază. 1060 00:47:19,570 --> 00:47:22,140 Deci Vigenere, după cum veți vedea în spec, este mai sigur. 1061 00:47:22,140 --> 00:47:24,973 >> Dar, la sfârșitul zilei ce veți fi punerea în aplicare și P stabilit două, 1062 00:47:24,973 --> 00:47:29,050 este cheia care va folosi atât pentru criptare și decriptare. 1063 00:47:29,050 --> 00:47:32,160 Referindu-se la procesul de transformare text simplu, unele mesajului original, 1064 00:47:32,160 --> 00:47:34,490 în text Cypher, care este ceva criptat. 1065 00:47:34,490 --> 00:47:36,220 Și apoi decriptarea din nou. 1066 00:47:36,220 --> 00:47:38,119 >> În ediția hacker, între timp, vei 1067 00:47:38,119 --> 00:47:40,660 însărcinat cu ceva similar în spirit, unde vă vom oferi 1068 00:47:40,660 --> 00:47:44,610 un fișier, de la un Linux tipic, sau Mac, Unix sau calculator numit Etsy 1069 00:47:44,610 --> 00:47:47,800 parolă, care conține un întreg grămadă de nume de utilizator și parole. 1070 00:47:47,800 --> 00:47:50,932 Și aceste parole au toate fost criptate, sau distribuit, 1071 00:47:50,932 --> 00:47:53,140 ca să spunem așa, mai corect după cum veți vedea în spec. 1072 00:47:53,140 --> 00:47:57,090 >> Și ediția hacker va contesta tu cu a lua o intrare ca aceasta, 1073 00:47:57,090 --> 00:47:58,800 și cracare parola. 1074 00:47:58,800 --> 00:48:02,590 Asta este, imaginind ce parola uman a fost de fapt. 1075 00:48:02,590 --> 00:48:05,570 Pentru că, într-adevăr, parolele sunt în general nu este stocat în clar, 1076 00:48:05,570 --> 00:48:08,260 și, în general, parole ar trebui să fie greu de ghicit. 1077 00:48:08,260 --> 00:48:09,610 Asta nu e adesea cazul. 1078 00:48:09,610 --> 00:48:12,110 >> Și ceea ce am crezut ca vom face este încheie cu câteva minute 1079 00:48:12,110 --> 00:48:15,160 privire la o deosebit de alegere proastă de parole 1080 00:48:15,160 --> 00:48:17,260 de la un film pe care s-ar putea aminti cu drag. 1081 00:48:17,260 --> 00:48:18,915 Și dacă nu, ar trebui să chirie. 1082 00:48:18,915 --> 00:48:20,070 >> [VIDEO PLAYBACK] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Tu demon, ce se întâmplă? 1084 00:48:22,320 --> 00:48:24,240 Ce faci cu fiica mea? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit-Mi să introducă chirurg genial plastic tineri, 1086 00:48:28,010 --> 00:48:30,010 Doctorul Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Cel mai mare nas Omul de locuri de muncă în întregul univers și Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> Alteța tău. 1089 00:48:36,140 --> 00:48:36,820 >> De locuri de muncă -Nose? 1090 00:48:36,820 --> 00:48:37,700 Nu înțeleg. 1091 00:48:37,700 --> 00:48:39,070 A avut deja un loc de muncă nas. 1092 00:48:39,070 --> 00:48:40,800 A fost o dulce 16 prezent. 1093 00:48:40,800 --> 00:48:42,590 >> Nu, nu e ceea ce crezi. 1094 00:48:42,590 --> 00:48:44,490 Este mult, mult mai rau. 1095 00:48:44,490 --> 00:48:48,160 Dacă nu-mi dai combinație a scutului de aer, 1096 00:48:48,160 --> 00:48:52,748 Medicul Schlotkin va da dvs. fiica înapoi vechea ei nas. 1097 00:48:52,748 --> 00:48:53,748 - [Gasps] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 De unde ai luat asta? 1100 00:48:59,652 --> 00:49:00,640 >> În regulã. 1101 00:49:00,640 --> 00:49:02,506 Voi spune, voi spune. 1102 00:49:02,506 --> 00:49:03,498 >> Nu, tati, nu. 1103 00:49:03,498 --> 00:49:04,490 Nu trebuie. 1104 00:49:04,490 --> 00:49:06,090 >> Ai dreptate draga mea. 1105 00:49:06,090 --> 00:49:07,390 Voi lipsi noul nas. 1106 00:49:07,390 --> 00:49:10,990 Dar eu nu-i va spune combinație, indiferent de ce. 1107 00:49:10,990 --> 00:49:12,450 >> Foarte bine. 1108 00:49:12,450 --> 00:49:14,830 Doctor Schlotkin, face cel mai rău dumneavoastră. 1109 00:49:14,830 --> 00:49:15,744 >> Cu placere. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> Nu! 1112 00:49:20,800 --> 00:49:22,780 Stai, stai. 1113 00:49:22,780 --> 00:49:24,000 Voi spune. 1114 00:49:24,000 --> 00:49:25,830 Voi spune. 1115 00:49:25,830 --> 00:49:28,270 >> -Am Stiut ca va functiona. 1116 00:49:28,270 --> 00:49:31,390 Bine, dă-mi. 1117 00:49:31,390 --> 00:49:36,220 >> -Contravaloarea Combinație este una. 1118 00:49:36,220 --> 00:49:36,740 >> Unu. 1119 00:49:36,740 --> 00:49:37,473 >> Unu. 1120 00:49:37,473 --> 00:49:37,972 Doi. 1121 00:49:37,972 --> 00:49:38,471 Doi. 1122 00:49:38,471 --> 00:49:39,800 Doi. 1123 00:49:39,800 --> 00:49:40,300 Trei. 1124 00:49:40,300 --> 00:49:40,800 Trei. 1125 00:49:40,800 --> 00:49:41,800 Trei. 1126 00:49:41,800 --> 00:49:42,300 Patru. 1127 00:49:42,300 --> 00:49:42,800 Patru. 1128 00:49:42,800 --> 00:49:44,707 Patru. 1129 00:49:44,707 --> 00:49:45,521 Cinci. 1130 00:49:45,521 --> 00:49:46,430 Cinci. 1131 00:49:46,430 --> 00:49:47,930 Cinci. 1132 00:49:47,930 --> 00:49:53,480 Deci este: unu, doi, trei, patru, cinci. 1133 00:49:53,480 --> 00:49:56,140 Asta e cel mai stupid combinația Am auzit-o în viața mea. 1134 00:49:56,140 --> 00:49:58,640 Asta e genul de lucru o idiot ar avea asupra bagajele sale. 1135 00:49:58,640 --> 00:50:00,000 >> -Multumesc, Înălțimea voastră. 1136 00:50:00,000 --> 00:50:01,340 >> [REMOTE clicks] 1137 00:50:01,340 --> 00:50:02,450 >> Ce ai făcut? 1138 00:50:02,450 --> 00:50:03,800 >> -Am Oprit pe perete. 1139 00:50:03,800 --> 00:50:05,010 >> Nu, n-ai făcut, tu oprit tot filmul. 1140 00:50:05,010 --> 00:50:06,220 >> Probabil -Am apăsat pe butonul greșit. 1141 00:50:06,220 --> 00:50:07,064 >> Ei bine, pune-l inapoi! 1142 00:50:07,064 --> 00:50:07,910 Pune filmul înapoi pe! 1143 00:50:07,910 --> 00:50:08,300 >> Da, domnule! 1144 00:50:08,300 --> 00:50:08,799 Da, d-le. 1145 00:50:08,799 --> 00:50:09,660 Să mergem, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Vino, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Desigur, știi că voi Trebuie să te factura pentru acest lucru. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 Ei bine? 1150 00:50:17,220 --> 00:50:17,802 A funcționat? 1151 00:50:17,802 --> 00:50:18,510 Unde e regele? 1152 00:50:18,510 --> 00:50:20,218 >> -E Lucrat, domnule, ne-am au combinația. 1153 00:50:20,218 --> 00:50:20,740 Minunat. 1154 00:50:20,740 --> 00:50:24,810 Acum putem lua fiecare ultima suflare de aer proaspăt de pe planeta Druidia. 1155 00:50:24,810 --> 00:50:25,890 Care e combinația? 1156 00:50:25,890 --> 00:50:28,155 >> Unu, doi, trei, patru, cinci. 1157 00:50:28,155 --> 00:50:29,890 >> Unu, doi, trei, patru, cinci? 1158 00:50:29,890 --> 00:50:30,390 Da. 1159 00:50:30,390 --> 00:50:31,110 Asta e uimitor. 1160 00:50:31,110 --> 00:50:34,550 Am la fel combinație pe bagajele mele. 1161 00:50:34,550 --> 00:50:37,160 Pregătiți Spaceball 1 pentru plecare imediat. 1162 00:50:37,160 --> 00:50:38,160 >> Da, d-le. 1163 00:50:38,160 --> 00:50:40,745 >> -și Schimba combinație pe bagajele mele. 1164 00:50:40,745 --> 00:50:41,578 [Usa de inchidere SOUND] 1165 00:50:41,578 --> 00:50:42,064 [Clinchet de usi lovind HELMET] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [END VIDEO PLAYBACK] 1168 00:50:43,383 --> 00:50:46,700 David J. MALAN: Asta e pentru CS50, ne vedem săptămâna viitoare. 1169 00:50:46,700 --> 00:50:49,883 Narator: Și acum, Deep Gânduri, de Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: codificare în C este atât de mult mai greu decât zero. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch a fost o minciună. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Râsete soundbite] 1175 00:51:01,430 --> 00:51:02,486