1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID MALAN: All right. 3 00:00:11,940 --> 00:00:16,470 Så dette er CS50, og dette er nå i starten av uke tre. 4 00:00:16,470 --> 00:00:19,960 >> Så frem til nå, har vi vært å skrive programmer i C 5 00:00:19,960 --> 00:00:23,210 som ser litt noe sånt som dette her. 6 00:00:23,210 --> 00:00:25,470 Så vi har fått et par skarp omfatter på toppen. 7 00:00:25,470 --> 00:00:28,490 Vi har fått int, main, ugyldig, og deretter noe å gjøre i midten, 8 00:00:28,490 --> 00:00:30,590 noen bit av koden inne av denne funksjon. 9 00:00:30,590 --> 00:00:34,170 Men nøkkelen har vært det faktum at har vi vært å si ugyldig her. 10 00:00:34,170 --> 00:00:39,320 Så ugyldig, alle av denne tiden, spesifiserer at dette programmet, når det kjøres, 11 00:00:39,320 --> 00:00:41,300 kan bare kjøres via sitt navn. 12 00:00:41,300 --> 00:00:46,330 Du kan ikke skrive andre ord eller Tallet bak programmets navn når 13 00:00:46,330 --> 00:00:46,830 kjører den. 14 00:00:46,830 --> 00:00:51,200 Så, for eksempel, dersom programmet var samlet i en fil som heter hello, 15 00:00:51,200 --> 00:00:53,480 du kunne gjøre ./hello, men det er det. 16 00:00:53,480 --> 00:00:56,750 >> Den eneste måten du kunne gi innspill til dette programmet 17 00:00:56,750 --> 00:00:57,960 er ved å kalle en funksjon. 18 00:00:57,960 --> 00:00:59,790 For eksempel, hva funksjon vi har brukt så langt 19 00:00:59,790 --> 00:01:00,950 å få input fra brukeren? 20 00:01:00,950 --> 00:01:02,117 >> PUBLIKUM: Få streng. 21 00:01:02,117 --> 00:01:04,700 DAVID MALAN: For å få streng, eller få int, eller du har sett andre, 22 00:01:04,700 --> 00:01:07,630 selv om du ikke har brukt dem ennå, som får lang, lang og lignende. 23 00:01:07,630 --> 00:01:09,380 Men anta at vi faktisk ønsker å starte 24 00:01:09,380 --> 00:01:12,760 skrive programmer som er litt mer allsidig, og, ærlig, litt mer 25 00:01:12,760 --> 00:01:15,090 som kommandoene som du har fått, forhåpentligvis, 26 00:01:15,090 --> 00:01:16,550 litt vant til. 27 00:01:16,550 --> 00:01:18,560 Som cd plass Dropbox. 28 00:01:18,560 --> 00:01:20,800 Dette er selvfølgelig endringer katalogen din, forutsatt 29 00:01:20,800 --> 00:01:23,590 du er i John Harvard hjem katalog, til din Dropbox-mappen. 30 00:01:23,590 --> 00:01:27,380 I mellomtiden, en kommando som dette oppretter en ny katalog kalt pset2, 31 00:01:27,380 --> 00:01:30,290 som du kanskje allerede har eller vil snart for oppgavesettet to. 32 00:01:30,290 --> 00:01:33,970 Gjør Hei, selvfølgelig, er en kommando som bygger et program som heter hallo 33 00:01:33,970 --> 00:01:35,770 fra en fil som heter hallo dot c. 34 00:01:35,770 --> 00:01:39,140 Og i hver av disse tilfeller nå, vi har hatt 35 00:01:39,140 --> 00:01:43,620 gi et argument på den såkalte kommandolinjen, den blinkende teksten, 36 00:01:43,620 --> 00:01:48,540 slik at make vet hva du skal bygge, og så at mkdir vet hvilken mappe for å opprette, 37 00:01:48,540 --> 00:01:51,110 og slik at cd vet hvor du ønsker å gå. 38 00:01:51,110 --> 00:01:54,720 Men frem til nå, holder vi sier at hoved, standardfunksjon, 39 00:01:54,720 --> 00:01:58,500 har et tomrom uttrykk innsiden av disse parentes, 40 00:01:58,500 --> 00:02:01,250 hvilket betyr at den kan ikke ta noen argumenter. 41 00:02:01,250 --> 00:02:03,240 >> Så starter i dag, hva vi skal gjøre 42 00:02:03,240 --> 00:02:06,270 er, kommer vi til å starte støtte ting som dette selv. 43 00:02:06,270 --> 00:02:08,990 Faktisk, i dette tilfellet, som du ikke vanligvis manuelt skrive, 44 00:02:08,990 --> 00:02:11,130 Gjør har gjort dette for oss, det er ikke 45 00:02:11,130 --> 00:02:15,840 en, men en, to, tre ekstra strenger etter programmets oppkalt 46 00:02:15,840 --> 00:02:16,850 klang. 47 00:02:16,850 --> 00:02:18,240 Så hvordan oppnår vi dette? 48 00:02:18,240 --> 00:02:20,260 >> Vel, som starter i dag, i tilfeller der vi ønsker 49 00:02:20,260 --> 00:02:22,855 til å gi innspill via såkalte kommandolinjen, 50 00:02:22,855 --> 00:02:24,980 vi kommer til å begynne å legge her hva som er i yellow-- 51 00:02:24,980 --> 00:02:30,520 erstatte tomrommet med int argc komma streng argv åpen brakett nær braketten. 52 00:02:30,520 --> 00:02:32,520 Nå er dette interessant for et par grunner. 53 00:02:32,520 --> 00:02:35,690 En, det kommer til å la oss skrive programmer som er litt mer dynamisk. 54 00:02:35,690 --> 00:02:37,570 Men, mer overbevisende, det kommer til å åpne opp 55 00:02:37,570 --> 00:02:40,340 nå en samtale som til hva arrays kan virkelig 56 00:02:40,340 --> 00:02:43,300 benyttes, for hva en streng virkelig er under panseret, 57 00:02:43,300 --> 00:02:47,320 til neste uke når vi begynner å dykke i enda dypere om hvordan maskinen er 58 00:02:47,320 --> 00:02:48,590 gjør alt dette ting fungerer. 59 00:02:48,590 --> 00:02:51,920 Men for nå, la oss tegne, kanskje et bilde. 60 00:02:51,920 --> 00:02:54,950 >> Når du skriver et program med hoved erklærte 61 00:02:54,950 --> 00:02:58,810 på denne måten, slik at hoved tar to argumenter, en int 62 00:02:58,810 --> 00:03:03,233 og-- hva datatype er det andre argumentet? 63 00:03:03,233 --> 00:03:04,529 >> PUBLIKUM: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID MALAN: Array. 65 00:03:05,320 --> 00:03:09,170 Så det ser ut ved første øyekast ut som det er en streng, men legge merke til hakeparenteser. 66 00:03:09,170 --> 00:03:12,760 Husker siste gang vi introduserte oppfatningen av en matrise. 67 00:03:12,760 --> 00:03:16,210 Og arrays bruker hakeparenteser i et par sammenhenger. 68 00:03:16,210 --> 00:03:19,160 Du kan bruke plassen braketter for å gå inn i en matrise 69 00:03:19,160 --> 00:03:22,710 og få et bestemt element, som brakett 0 eller brakett 1 eller brakett to. 70 00:03:22,710 --> 00:03:25,500 Men vi så, hvis kort, forrige uke at du også 71 00:03:25,500 --> 00:03:28,790 bruke disse hakeparenteser til erklære størrelsen på en array, 72 00:03:28,790 --> 00:03:31,790 hvis du vet på forhånd hvor mange ints eller hvor mange strenger eller hva du 73 00:03:31,790 --> 00:03:32,630 faktisk ønsker. 74 00:03:32,630 --> 00:03:34,790 Så det viser seg at det er en tredje sammenheng her 75 00:03:34,790 --> 00:03:37,890 som ikke har noen tall på innsiden av hakeparenteser. 76 00:03:37,890 --> 00:03:41,920 Når du angir, som jeg har her, navnet noe sånt som argv, 77 00:03:41,920 --> 00:03:44,550 som er bare en fancy måte å sier argument vektor, som 78 00:03:44,550 --> 00:03:47,750 er en annen fancy måte sier en rekke argumenter, 79 00:03:47,750 --> 00:03:50,870 åpen brakett nær braketten bare betyr at du ikke nødvendigvis 80 00:03:50,870 --> 00:03:52,960 vet på forhånd hvor stor matrisen kommer til å være, 81 00:03:52,960 --> 00:03:55,070 men du vet det kommer til å bli en matrise. 82 00:03:55,070 --> 00:03:57,320 Så hvis du ikke kjenner antall ikke sette det inn der, 83 00:03:57,320 --> 00:04:01,160 for åpen brakett nær brakett betyr at argv ikke er en streng, 84 00:04:01,160 --> 00:04:03,124 men en rekke strenger. 85 00:04:03,124 --> 00:04:05,040 Så syntaktisk, hvis du tenker tilbake forrige uke, 86 00:04:05,040 --> 00:04:09,460 det er svært lik si noe sånt int aldre åpen brakett, 87 00:04:09,460 --> 00:04:10,984 og deretter noe etterpå. 88 00:04:10,984 --> 00:04:12,150 Så hva betyr dette se ut? 89 00:04:12,150 --> 00:04:13,399 La oss faktisk tegne et bilde. 90 00:04:13,399 --> 00:04:18,756 Så når du kjører dette programmet med Hoved Å ha to argumenter definert inne 91 00:04:18,756 --> 00:04:21,339 av disse parentes, du egentlig ha minst to biter 92 00:04:21,339 --> 00:04:23,560 minne levert til deg under panseret. 93 00:04:23,560 --> 00:04:26,550 En, som jeg skal trekker da dette rektangel, kommer til å bli kalt argc. 94 00:04:26,550 --> 00:04:30,645 Og akkurat som en rask oppsummering, hva er datatypen argc? 95 00:04:30,645 --> 00:04:31,270 Så det er en int. 96 00:04:31,270 --> 00:04:33,480 Så mange kommer å gå i argc-- svinger 97 00:04:33,480 --> 00:04:35,660 ut som står for argumentet teller. 98 00:04:35,660 --> 00:04:38,887 I mellomtiden har jeg trukket argv som en matrise. 99 00:04:38,887 --> 00:04:40,970 Og jeg vet egentlig ikke hvor lang tid det kommer til å bli, 100 00:04:40,970 --> 00:04:42,470 så for dagens formål dot dot dot. 101 00:04:42,470 --> 00:04:43,636 Det kan komme av litt lengde. 102 00:04:43,636 --> 00:04:45,640 Men jeg har avbildet her minst fire rektangler. 103 00:04:45,640 --> 00:04:50,970 Så argv en mengde minne som lagrer string string string dot dot dot, 104 00:04:50,970 --> 00:04:53,950 og argc er bare en del av hukommelse for et heltall. 105 00:04:53,950 --> 00:04:55,710 >> Så nå, la oss være litt mer presis. 106 00:04:55,710 --> 00:04:59,200 Hvis, når jeg har strenger i denne matrisen, kalt 107 00:04:59,200 --> 00:05:03,290 argv, ønsker jeg å få på dem individuelt, akkurat som i forrige uke, 108 00:05:03,290 --> 00:05:05,670 vi kommer til å bruke notasjon som argv brakett 0 109 00:05:05,670 --> 00:05:07,650 å få det første en matrise. 110 00:05:07,650 --> 00:05:10,440 Argv brakett 1 for å få den andre ting, og så videre. 111 00:05:10,440 --> 00:05:14,597 Nøkkelen her er vi fortsatt 0 indexed-- vi fremdeles telle fra 0. 112 00:05:14,597 --> 00:05:16,430 Så nå la oss faktisk sette noe i dette. 113 00:05:16,430 --> 00:05:21,670 Hvis jeg var å kompilere et program som heter Hei fra en fil som heter hallo dot c, 114 00:05:21,670 --> 00:05:24,340 og da jeg kjøre dette programmet med dot slash hello, 115 00:05:24,340 --> 00:05:28,380 hva gjør datamaskinen min, min laptop, se ut under panseret 116 00:05:28,380 --> 00:05:31,300 For øyeblikket kjører jeg dot slash hei og trykk Enter? 117 00:05:31,300 --> 00:05:33,500 Vel, dette er kanskje hva vi kunne beskrive 118 00:05:33,500 --> 00:05:37,010 som innholdet i datamaskinens minne, eller RAM-- Random Access Memory. 119 00:05:37,010 --> 00:05:40,330 Med andre ord, datamaskinen en eller annen måte for deg magisk, 120 00:05:40,330 --> 00:05:45,360 setter nummer 1 i argc, AKA argcount, og det setter bokstavelig talt strengen 121 00:05:45,360 --> 00:05:48,200 ./hello i argv brakett 0. 122 00:05:48,200 --> 00:05:51,750 Jeg aner ikke, ærlig talt, hva er i argv brakett 1 eller 2 eller 3, 123 00:05:51,750 --> 00:05:55,550 fordi hvis brukeren har ikke skrevet noe i tillegg ./hello, 124 00:05:55,550 --> 00:05:58,550 vi kommer til å anta at disse er mest sannsynlig søppel verdier, 125 00:05:58,550 --> 00:05:59,700 så å si. 126 00:05:59,700 --> 00:06:02,650 Disse biter av minne eksisterer, men det er ikke opp til oss 127 00:06:02,650 --> 00:06:05,710 å se på dem, fordi den argcount er bare én. 128 00:06:05,710 --> 00:06:07,870 >> Nå, i mellomtiden, hvis jeg skrive kjøre et annet program, 129 00:06:07,870 --> 00:06:12,250 cd, som er mer riktig en kommando, i din blinker prompt-- cd plass 130 00:06:12,250 --> 00:06:17,200 Dropbox-- når jeg kjører det, effektivt, når cd-programmet kjører, argc, 131 00:06:17,200 --> 00:06:22,270 innsiden av datamaskinens minne, er for den mest briefest andre nummer 2. 132 00:06:22,270 --> 00:06:25,936 Og så argv brakett o har cd, argv brakett 1 har Dropbox, 133 00:06:25,936 --> 00:06:28,560 og da selvfølgelig kommandoen er fullført, slik at alt dette minnet 134 00:06:28,560 --> 00:06:30,420 hovedsak går bort og brukes til noe annet. 135 00:06:30,420 --> 00:06:32,270 Og det er derfor jeg sier bare et brøkdels sekund. 136 00:06:32,270 --> 00:06:35,720 >> I mellomtiden, hvis vi gjør mkdir pset2, bildet ser nesten det samme, 137 00:06:35,720 --> 00:06:37,900 men med forskjellige strenger inne argv. 138 00:06:37,900 --> 00:06:42,570 Hvis jeg gjør klang dash hallo hei dot c, samme idé. 139 00:06:42,570 --> 00:06:47,060 Flere ting er fylt ut for argv, og argc, selvfølgelig, er fire. 140 00:06:47,060 --> 00:06:49,150 Så med andre ord, selv om denne matrisen 141 00:06:49,150 --> 00:06:52,950 kan bli dot dot dot, av noen variabel lengde, så å si, 142 00:06:52,950 --> 00:06:56,720 vet du alltid hvor slutten av det er, fordi argc kommer til å fortelle deg 143 00:06:56,720 --> 00:07:00,120 på hvilket punkt du må stoppe å se på elementer i argv. 144 00:07:00,120 --> 00:07:03,660 Du kan bare se på fire totalt i dette tilfellet. 145 00:07:03,660 --> 00:07:06,600 >> Så la oss nå ta en titt på, kanskje et enkelt program. 146 00:07:06,600 --> 00:07:09,070 En som bare sier hei til noen som Zamyla. 147 00:07:09,070 --> 00:07:12,620 Så jeg hevder jeg kommer til å skrive et program i bare et øyeblikk via hvor jeg kunne gjøre 148 00:07:12,620 --> 00:07:16,670 ./hello plass Zamyla, og da vil jeg mitt program for å skrive ut noe 149 00:07:16,670 --> 00:07:18,520 super-enkel som "hallo, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Nå i det siste har vi brukt getstring. 151 00:07:20,100 --> 00:07:22,850 Så i det siste, selv om du er ny på programmering, 152 00:07:22,850 --> 00:07:27,180 oddsen er at du kan piske opp en program som bruker getstring 153 00:07:27,180 --> 00:07:29,390 og deretter bruker printf å si hei til Zamyla. 154 00:07:29,390 --> 00:07:31,290 Men la oss ikke bruke getstring denne gangen. 155 00:07:31,290 --> 00:07:37,510 La meg i stedet gå inn i Appliant og inkluderer standard I O dot h. 156 00:07:37,510 --> 00:07:41,160 La meg inkluderer også CS50 dot h. 157 00:07:41,160 --> 00:07:44,730 Nå int main, og nå er jeg ikke kommer til å gjøre ugyldig i dag. 158 00:07:44,730 --> 00:07:51,200 I stedet kommer jeg til å gjøre int argc streng argv åpen brakett tett brakett, 159 00:07:51,200 --> 00:07:52,640 ikke å angi et tall. 160 00:07:52,640 --> 00:07:54,644 Og nå her er min såkalte å gjøre. 161 00:07:54,644 --> 00:07:57,560 Hva jeg skal gjøre nå er, er jeg kommer til å gjøre litt av en porsjon tro, 162 00:07:57,560 --> 00:08:00,560 Jeg kommer til å anta at brukerens kommer til å bruke dette programmet riktig, 163 00:08:00,560 --> 00:08:04,980 og jeg bare kommer til å gjøre printf hallo,% sn. 164 00:08:04,980 --> 00:08:06,630 Så ikke noe nytt der. 165 00:08:06,630 --> 00:08:11,470 Men jeg vil nå plassere hva ordet brukertyper etter programmets navn. 166 00:08:11,470 --> 00:08:16,970 Så hvis jeg gjør ./hello plass Zamyla, jeg vil liksom programmatisk tilgang 167 00:08:16,970 --> 00:08:20,870 sitere unquote "Zamyla." så jeg kan gå inn i mitt argument vektor, 168 00:08:20,870 --> 00:08:25,980 min tabell med strenger, og hvis kommandoen, igjen, var ./hello plass Zamyla, 169 00:08:25,980 --> 00:08:29,340 hvilket nummer ønsker jeg å sette i argv her? 170 00:08:29,340 --> 00:08:29,840 PUBLIKUM: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID MALAN: 1, fordi brakett 0 slår ut 172 00:08:32,355 --> 00:08:34,230 kommer til å være den programmets navn, som vi så. 173 00:08:34,230 --> 00:08:37,789 Så trinn 1 er det første ordet at jeg, brukeren, har skrevet. 174 00:08:37,789 --> 00:08:39,559 Jeg kommer til å gå videre og lagre dette. 175 00:08:39,559 --> 00:08:42,830 Jeg kommer til å gå inn i mappen min hvor jeg har plassert denne filen. 176 00:08:42,830 --> 00:08:44,920 Jeg kommer til å gjør hallo tre. 177 00:08:44,920 --> 00:08:46,230 Comp IO er OK. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla Enter. 179 00:08:51,380 --> 00:08:54,480 Hva gjorde jeg galt? 180 00:08:54,480 --> 00:08:57,270 Jeg ble fanget opp av overraskelse meg selv for bare et øyeblikk der. 181 00:08:57,270 --> 00:08:58,230 Hva gjorde jeg galt? 182 00:08:58,230 --> 00:08:59,220 >> PUBLIKUM: Navn. 183 00:08:59,220 --> 00:09:01,767 >> DAVID MALAN: Filen er faktisk kalt hello3.c. 184 00:09:01,767 --> 00:09:03,850 Og jeg gjorde det bare for konsistens, fordi vi har 185 00:09:03,850 --> 00:09:06,550 hadde hello.c tallet i fortid i den elektroniske kode. 186 00:09:06,550 --> 00:09:11,550 Så la oss fikse dette ./hello brakett dash 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Enter. 188 00:09:12,370 --> 00:09:14,030 Og nå har vi hello, Zamyla. 189 00:09:14,030 --> 00:09:17,650 I mellomtiden kan jeg endre dette til være Rob, eller egentlig et annet ord. 190 00:09:17,650 --> 00:09:19,230 >> Men la oss vurdere et hjørne tilfelle. 191 00:09:19,230 --> 00:09:24,360 Hva kan du forvente vil skje hvis Jeg vet ikke skrive noen navn i det hele tatt? 192 00:09:24,360 --> 00:09:25,270 >> PUBLIKUM: Feil. 193 00:09:25,270 --> 00:09:27,300 >> DAVID MALAN: En feil av noe slag, kanskje. 194 00:09:27,300 --> 00:09:28,200 La oss se. 195 00:09:28,200 --> 00:09:29,440 Enter. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Så printf er faktisk å være litt beskyttende av oss 198 00:09:33,870 --> 00:09:38,131 her, og bokstavelig talt skrive åpne paren null, men enda verre ting kan skje. 199 00:09:38,131 --> 00:09:40,130 Og bare for å demonstrere noe du absolutt 200 00:09:40,130 --> 00:09:42,800 ikke bør gjøre, la oss gå i her og begynne å rusle rundt. 201 00:09:42,800 --> 00:09:43,300 Høyre? 202 00:09:43,300 --> 00:09:46,410 Hvis jeg vet at bildet i minne er egentlig dette, 203 00:09:46,410 --> 00:09:52,660 argv brakett 1 har Zamyla, argv brakett 0 har ./hello, eller ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Hva er i braketten 2? 205 00:09:55,400 --> 00:09:58,210 Så jeg kan svare på det spørre meg selv, ikke sant? 206 00:09:58,210 --> 00:10:00,460 Jeg kan bare endre en til en 2. 207 00:10:00,460 --> 00:10:07,270 Jeg kan nå rekompilere hallo 3, ./hello3 La oss zoome inn og trykk Enter. 208 00:10:07,270 --> 00:10:08,270 Whoops. 209 00:10:08,270 --> 00:10:10,660 Ingen mark sitat. 210 00:10:10,660 --> 00:10:12,540 Interessant. 211 00:10:12,540 --> 00:10:15,530 Så det er litt kult å se hva annet er i her. 212 00:10:15,530 --> 00:10:17,130 >> Så hva annet er inne i min laptop? 213 00:10:17,130 --> 00:10:20,390 La oss lagre det med brakett tre. 214 00:10:20,390 --> 00:10:25,190 Gjør hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Nysgjerrig. 216 00:10:26,500 --> 00:10:30,560 Og nå la oss få virkelig bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Så det er virkelig et dypdykk inn i datamaskinens minne. 218 00:10:34,340 --> 00:10:35,930 50 indekser i. 219 00:10:35,930 --> 00:10:41,950 Så gjør hallo 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Nysgjerrig. 221 00:10:42,680 --> 00:10:44,660 Greit, nå er jeg bare kommer til å få uvøren. 222 00:10:44,660 --> 00:10:47,331 La oss gå til 5000. 223 00:10:47,331 --> 00:10:47,830 Greit. 224 00:10:47,830 --> 00:10:49,520 Så la meg rekompilere. 225 00:10:49,520 --> 00:10:51,460 Gjør hello3, ./hello-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 OK. 228 00:10:56,460 --> 00:10:59,250 Nå er noen av dere, det kan være en lyspære går av. 229 00:10:59,250 --> 00:11:01,900 Hvor mange av dere har sett denne meldingen før? 230 00:11:01,900 --> 00:11:03,440 OK. 231 00:11:03,440 --> 00:11:04,420 Så, hvorfor? 232 00:11:04,420 --> 00:11:07,250 >> Odds er-- og det er annerledes ting som kan forårsake dette, 233 00:11:07,250 --> 00:11:09,730 og tydelig du er i god company-- vi har klart 234 00:11:09,730 --> 00:11:11,900 forårsaket det som kalles en segmentering feil. 235 00:11:11,900 --> 00:11:15,890 Og lang historie kort for i dag, jeg har rørt et segment av minne 236 00:11:15,890 --> 00:11:17,060 at jeg ikke burde ha. 237 00:11:17,060 --> 00:11:19,970 Der et segment betyr bare en blings minne som jeg ikke burde ha. 238 00:11:19,970 --> 00:11:25,530 Nå datamaskinen garanterer at hvis jeg kjøre ./helloZamyla at jeg kan røre argv 239 00:11:25,530 --> 00:11:27,760 være brakett 0 og argv brakett 1. 240 00:11:27,760 --> 00:11:32,730 Men argc er verdi 2, betyr at jeg er bare allowed-- det er liksom æren 241 00:11:32,730 --> 00:11:35,180 system-- å røre brakett 0 og brakett 1. 242 00:11:35,180 --> 00:11:37,990 Hvis jeg går noen lenger, det er absolutt kommer til å bli minnet der. 243 00:11:37,990 --> 00:11:40,660 Min RAM finnes fysisk i datamaskinen. 244 00:11:40,660 --> 00:11:42,080 Men hvem vet hva som er der? 245 00:11:42,080 --> 00:11:44,450 Ja, jeg kjører flere programmer på en gang. 246 00:11:44,450 --> 00:11:46,910 Jeg kan ha seen-- hvis jeg ikke var å gjøre dette på Appliant 247 00:11:46,910 --> 00:11:49,937 men på min Mac eller PC-- kanskje jeg har sett innholdet i en e-post. 248 00:11:49,937 --> 00:11:52,270 Jeg har kanskje sett en umiddelbar Melding Jeg har nylig sendt. 249 00:11:52,270 --> 00:11:55,390 Noe som kan være dvelende rundt i minnet 250 00:11:55,390 --> 00:11:59,180 kunne ha vist ved hjelp av denne vilkårlig hakeparentes notasjon. 251 00:11:59,180 --> 00:12:02,850 Eller, enda verre, kanskje du har funnet en av mine passord 252 00:12:02,850 --> 00:12:05,859 at jeg nylig skrev i, at en programmet hadde lagret i minnet slik at 253 00:12:05,859 --> 00:12:07,900 å godkjenne meg, og deretter bare slags forlot det 254 00:12:07,900 --> 00:12:09,910 i RAM før jeg avslutter det programmet. 255 00:12:09,910 --> 00:12:12,860 >> Og ja, dette er en av faren og ett krefter 256 00:12:12,860 --> 00:12:15,980 for å bruke et språk som C. Du har uhemmet tilgang 257 00:12:15,980 --> 00:12:18,860 til hele innholdet av et program minne, 258 00:12:18,860 --> 00:12:21,340 og hva skurkene kan gjøre selv i de cases-- 259 00:12:21,340 --> 00:12:23,807 spesielt når vi komme til web-programmering 260 00:12:23,807 --> 00:12:26,890 mot slutten av semesteret, vil vi se dette topic-- er rote rundt, 261 00:12:26,890 --> 00:12:31,660 potensielt, er noen datamaskinens minne og finne slike nysgjerrige ting 262 00:12:31,660 --> 00:12:32,570 som vi så der. 263 00:12:32,570 --> 00:12:36,900 Eller enda verre ennå, passord som han eller hun kan deretter bruke til å gjøre dårlige ting. 264 00:12:36,900 --> 00:12:40,240 >> Så klart jeg ikke burde ha gjort dette, fordi rare ting begynner å skje. 265 00:12:40,240 --> 00:12:42,310 Ja, dette er et program krasjer. 266 00:12:42,310 --> 00:12:44,580 Dette ville være det samme av Mac OS eller Windows 267 00:12:44,580 --> 00:12:46,770 et programvindu bare forsvinner. 268 00:12:46,770 --> 00:12:48,300 Det har oppstått en uventet feil. 269 00:12:48,300 --> 00:12:50,840 I kommandolinjemiljø vi ser noe som dette. 270 00:12:50,840 --> 00:12:54,480 Men det er derfor, er jeg rett og slett rørende minne som ikke tilhører meg. 271 00:12:54,480 --> 00:12:57,090 >> Så la oss forsvare seg mot dette en litt på en annen måte 272 00:12:57,090 --> 00:12:59,010 ved å se på dette programmet her. 273 00:12:59,010 --> 00:13:01,000 Så, igjen, skjelettet at vi så earlier-- 274 00:13:01,000 --> 00:13:02,480 og jeg har fremhevet denne gangen int. 275 00:13:02,480 --> 00:13:05,900 Og hele denne tiden har hoved faktisk returnerte verdi. 276 00:13:05,900 --> 00:13:09,120 Selv om det i de fleste av våre foredrag eksemplene vi har aldri en gang brukt 277 00:13:09,120 --> 00:13:10,990 tilbake noe i hoved. 278 00:13:10,990 --> 00:13:13,710 Vi bare skrive printf nær klammeparentes og det er det. 279 00:13:13,710 --> 00:13:16,500 Men gratis, hva kompilatoren gjort for deg, 280 00:13:16,500 --> 00:13:19,510 effektivt, returnerer 0 for deg. 281 00:13:19,510 --> 00:13:22,950 Slår out-- og det er litt counterintuitive-- at 0 er bra. 282 00:13:22,950 --> 00:13:24,690 Det betyr ikke falsk per se. 283 00:13:24,690 --> 00:13:29,080 0 er god, og eventuelle ikke-0 verdi, har verden bestemt seg, 284 00:13:29,080 --> 00:13:30,619 kan betegne en feil. 285 00:13:30,619 --> 00:13:32,910 Så hvis du noen gang har messed noe opp på datamaskinen din, 286 00:13:32,910 --> 00:13:36,600 eller et program har nettopp dødd på deg og du har fått noen feilaktige vindu 287 00:13:36,600 --> 00:13:40,360 på skjermen, og sa feil negative 49 eller feil 23-- 288 00:13:40,360 --> 00:13:44,170 noen tilsynelatende vilkårlig value-- som er fordi en programmerer har hardkodet 289 00:13:44,170 --> 00:13:49,370 en verdi som negativ 49 eller positiv 23 til å representere et tall, tør si, 290 00:13:49,370 --> 00:13:53,340 av 4 milliarder mulige ting som kan gå galt i et program. 291 00:13:53,340 --> 00:13:55,700 >> Så hvordan kan jeg ta nytte av dette selv? 292 00:13:55,700 --> 00:13:58,970 Vel, la meg åpne opp et program som jeg skrev på forhånd, 293 00:13:58,970 --> 00:14:01,450 og rote rundt på nettet kalt hallo fire. 294 00:14:01,450 --> 00:14:05,650 Og det er nesten identiske, bortsett fra at sin har en liten bit av feilsjekking. 295 00:14:05,650 --> 00:14:09,660 I dette tilfellet, har jeg igjen erklærte Hoved som tar to argumenter, 296 00:14:09,660 --> 00:14:13,180 men denne gangen, på linje 17, varsel Jeg gjør litt av en mental helse sjekk. 297 00:14:13,180 --> 00:14:17,100 Jeg gjør at argc lik lik to. 298 00:14:17,100 --> 00:14:18,960 Fordi hvis det er, at betyr at jeg kan trygt 299 00:14:18,960 --> 00:14:21,420 berører ikke bare brakett 0, men brakett 1. 300 00:14:21,420 --> 00:14:24,330 Og jeg gå videre og skrive ut, i dette tilfellet, Zamyla eller Rob 301 00:14:24,330 --> 00:14:26,020 eller hva ord jeg skrev ut. 302 00:14:26,020 --> 00:14:28,020 Og nå bare for å få litt mer riktig, 303 00:14:28,020 --> 00:14:31,910 Jeg kommer til å eksplisitt gå tilbake 0 til betegne alt er bra. 304 00:14:31,910 --> 00:14:33,300 Ikke noe dårlig skjedde. 305 00:14:33,300 --> 00:14:38,590 >> Men etter konvensjonen, kommer jeg til å returnere en eller ærlig enhver ikke-0-verdi, 306 00:14:38,590 --> 00:14:40,160 hvis noe gikk galt. 307 00:14:40,160 --> 00:14:43,270 Nå kan brukeren ikke kommer til å virkelig legge merke til hva som skjer. 308 00:14:43,270 --> 00:14:50,410 Faktisk hvis jeg går inn i denne katalogen, vi zoome inn og gjør hallo 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla oppfører seg som jeg forventer. 310 00:14:54,210 --> 00:14:58,570 Men hvis jeg i stedet må du ikke skrive noe, ingenting synes å skje, 311 00:14:58,570 --> 00:14:59,680 men det ikke krasjer. 312 00:14:59,680 --> 00:15:04,660 Og hvis jeg i stedet gjøre noe som Rob er en Proctor 313 00:15:04,660 --> 00:15:07,550 i Thayer-- deling vilkårlig informasjon. 314 00:15:07,550 --> 00:15:13,680 Men legg merke til, argv 1, 2, 3, 4, og 5 skal nå eksisterer i minnet. 315 00:15:13,680 --> 00:15:16,540 Det også, er ikke hva mitt program forventer, 316 00:15:16,540 --> 00:15:20,300 fordi jeg har sjekket om argc tilsvarer equals 2 eller ikke. 317 00:15:20,300 --> 00:15:22,140 Så jeg nå forsvare mot dette. 318 00:15:22,140 --> 00:15:25,290 >> Nå, som en side, vi programmer-- eller snarere vi users-- 319 00:15:25,290 --> 00:15:29,670 aldri ser at 0 eller 1, men ved hjelp av en verktøy kalt Debugger, eller andre verktøy, 320 00:15:29,670 --> 00:15:32,250 så vi får se før lang, du programmerer 321 00:15:32,250 --> 00:15:36,590 faktisk kan se hva som kan være går galt inne i programmet. 322 00:15:36,590 --> 00:15:39,170 >> Så, noen spørsmål om argc? 323 00:15:39,170 --> 00:15:40,873 Yeah. 324 00:15:40,873 --> 00:15:45,292 >> PUBLIKUM: Jeg har sett hvor de har ikke hatt karakter, [uhørbart] 325 00:15:45,292 --> 00:15:49,669 bare sa streng stjerne d, som karakter stjerne komma. 326 00:15:49,669 --> 00:15:50,710 Er de tilsvarende her? 327 00:15:50,710 --> 00:15:51,626 >> DAVID MALAN: De er. 328 00:15:51,626 --> 00:15:55,080 Så spørsmålet er, har du tidvis sett programmer 329 00:15:55,080 --> 00:15:57,270 som dette som ikke gjør det si streng argv brakett 330 00:15:57,270 --> 00:16:01,015 men i stedet si noe som røye stjerners argv braketten. 331 00:16:01,015 --> 00:16:03,140 Og det er enda andre varianter som du kan se. 332 00:16:03,140 --> 00:16:04,264 De er faktisk tilsvarende. 333 00:16:04,264 --> 00:16:06,240 For nå har vi disse slags trening hjul 334 00:16:06,240 --> 00:16:09,737 på i form av streng i CS50 bibliotek, men i litt over en uke 335 00:16:09,737 --> 00:16:12,570 eller så vi kommer til å fjerne det obstruksjon helt og faktisk 336 00:16:12,570 --> 00:16:16,820 se på hva røye og stjernen er, og hvordan de er relatert til minne 337 00:16:16,820 --> 00:16:18,140 representasjon mer generelt. 338 00:16:18,140 --> 00:16:19,540 Så får vi komme tilbake til det. 339 00:16:19,540 --> 00:16:21,540 >> Andre spørsmål om vår argv eller argc? 340 00:16:21,540 --> 00:16:22,397 Yeah. 341 00:16:22,397 --> 00:16:24,438 PUBLIKUM: Hvorfor måtte det returnere en feil [uhørbart]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID MALAN: Hvorfor gjorde det returnere en feil only-- oh! 344 00:16:29,230 --> 00:16:31,813 I det foregående tilfellet, når vi ble futzing rundt med minne, 345 00:16:31,813 --> 00:16:35,110 hvorfor gjorde det bare returnere en feil når jeg egentlig skrevet et stort antall? 346 00:16:35,110 --> 00:16:36,620 Korte svaret er, vi bare hadde flaks. 347 00:16:36,620 --> 00:16:39,240 Generelt sett, en datamaskin tildeler minne i biter, 348 00:16:39,240 --> 00:16:42,900 og det ga meg en stor nok del som Jeg slapp unna, uten å bli lagt merke til, 349 00:16:42,900 --> 00:16:46,280 rørende brakett 2, brakett 3, brakett 50, men så snart jeg presset 350 00:16:46,280 --> 00:16:49,080 min flaks, gikk jeg utenfor grensene av mengde minne 351 00:16:49,080 --> 00:16:50,520 operativsystemet hadde gitt meg. 352 00:16:50,520 --> 00:16:52,720 Og det er da det klemmes ned og sa nei. 353 00:16:52,720 --> 00:16:54,580 Segmentering feil. 354 00:16:54,580 --> 00:16:55,692 Yeah. 355 00:16:55,692 --> 00:16:58,890 >> PUBLIKUM: Hvordan fungerer datamaskin kjenner verdien av argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID MALAN: Hvordan fungerer datamaskin vet verdien av argc? 357 00:17:02,390 --> 00:17:07,920 Når du kjører et program, det programmet, av natur av den blinkende teksten, 358 00:17:07,920 --> 00:17:11,359 leveres rekken av ordene som ble skrevet 359 00:17:11,359 --> 00:17:13,300 ved ledeteksten, som var skrevet i ledeteksten. 360 00:17:13,300 --> 00:17:16,569 Og slik er det operativsystemet system som i det vesentlige 361 00:17:16,569 --> 00:17:20,329 fyller viktigste argumenter for deg. 362 00:17:20,329 --> 00:17:22,829 Så det er en av tjenestene at du får, liksom hemmelighet 363 00:17:22,829 --> 00:17:24,869 under panseret et operativsystem. 364 00:17:24,869 --> 00:17:27,118 Andre spørsmål? 365 00:17:27,118 --> 00:17:27,618 Yeah. 366 00:17:27,618 --> 00:17:29,787 >> PUBLIKUM: Hva betyr kjerne dump? 367 00:17:29,787 --> 00:17:31,370 DAVID MALAN: Hva betyr kjerne dump? 368 00:17:31,370 --> 00:17:32,950 Så det er et godt spørsmål. 369 00:17:32,950 --> 00:17:35,312 Og la meg gå tilbake til denne katalogen her. 370 00:17:35,312 --> 00:17:37,270 Og du vil merke at Jeg har en ny fil der. 371 00:17:37,270 --> 00:17:41,670 Det er faktisk kalt kjerne, og det er faktisk vanligvis en anstendig størrelse fil. 372 00:17:41,670 --> 00:17:45,300 Det er egentlig et øyeblikksbilde av innholdet i min program hukommelse 373 00:17:45,300 --> 00:17:46,902 eller RAM da det krasjet. 374 00:17:46,902 --> 00:17:49,110 Og dette vil være nyttig, potensielt, diagnostisk, 375 00:17:49,110 --> 00:17:52,850 når vi snakker i en fremtidig foredrag og avsnittet om feilsøking, 376 00:17:52,850 --> 00:17:55,730 fordi du faktisk kan gjøre tilsvarer et digitalt obduksjon 377 00:17:55,730 --> 00:18:00,300 på denne filen for å hjelpe finne ut hva du gjorde galt i programmet. 378 00:18:00,300 --> 00:18:01,220 Yeah. 379 00:18:01,220 --> 00:18:04,450 >> PUBLIKUM: Er argc en kommando i seg selv, eller kan du kalle det noe? 380 00:18:04,450 --> 00:18:05,575 >> DAVID MALAN: Godt spørsmål. 381 00:18:05,575 --> 00:18:08,040 Er argc en kommando i seg selv, eller kan du kalle det noe? 382 00:18:08,040 --> 00:18:09,290 Det er definitivt ikke en kommando. 383 00:18:09,290 --> 00:18:13,500 Det er rett og slett en variabel navn eller et argument navn, 384 00:18:13,500 --> 00:18:15,481 og så helt vi kan kalle dette foo, 385 00:18:15,481 --> 00:18:18,480 vi kan kalle denne baren, som har en tendens å være farten til ord som en datamaskin 386 00:18:18,480 --> 00:18:19,860 vitenskapsmann går til. 387 00:18:19,860 --> 00:18:22,820 Men etter konvensjonen, bruker vi argc og argv. 388 00:18:22,820 --> 00:18:25,360 Men det er bare et menneske konvensjonen, ikke noe mer. 389 00:18:25,360 --> 00:18:25,860 Greit. 390 00:18:25,860 --> 00:18:28,140 Så viser seg, har jeg vært fortelle en bit av en hvit lie-- 391 00:18:28,140 --> 00:18:31,264 og ærlig, i fremtiden, vil du se vi har vært å fortelle andre hvite løgner. 392 00:18:31,264 --> 00:18:33,510 Men for nå, vi kommer å skrelle tilbake en av disse. 393 00:18:33,510 --> 00:18:37,310 I dette tilfellet her når jeg tidligere kjørte et program som ./hello eller ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla, hadde vi innholdet i min datamaskinens minne ser omtrent ut som 395 00:18:42,780 --> 00:18:43,280 dette. 396 00:18:43,280 --> 00:18:45,070 Men huske hva en streng er. 397 00:18:45,070 --> 00:18:49,279 Hva sa vi en uke siden hva en strengen faktisk er under panseret? 398 00:18:49,279 --> 00:18:50,320 PUBLIKUM: Array of tegn. 399 00:18:50,320 --> 00:18:52,111 DAVID MALAN: Det er en rekke tegn, ikke sant? 400 00:18:52,111 --> 00:18:55,760 Så vi kan ha en rekke strenger, men i sin tur en streng 401 00:18:55,760 --> 00:18:57,150 er en rekke tegn. 402 00:18:57,150 --> 00:19:00,010 Så hvis jeg virkelig ønsker å være anal når jeg tegner dette bildet, 403 00:19:00,010 --> 00:19:03,290 Jeg burde egentlig være tegning det litt mer som dette, 404 00:19:03,290 --> 00:19:08,000 hvorved i hver av disse indekser av min argv array, 405 00:19:08,000 --> 00:19:11,432 Det er i seg selv en hel streng som i seg selv er i en matrise. 406 00:19:11,432 --> 00:19:13,140 Og nå den hvite løgnen vi forteller i dag 407 00:19:13,140 --> 00:19:15,181 er at bildet ikke ser ganske som dette. 408 00:19:15,181 --> 00:19:19,110 Faktisk, de små rutene er vanligvis utenfor de store rektangler 409 00:19:19,110 --> 00:19:19,610 der. 410 00:19:19,610 --> 00:19:21,280 Men vi skal komme tilbake til det før lenge. 411 00:19:21,280 --> 00:19:25,440 Men dette er ./hello backslash 0, at det å være spesialtegnet som 412 00:19:25,440 --> 00:19:28,310 avgrenser slutten av en streng, og vi har fått en annen etter 413 00:19:28,310 --> 00:19:29,360 Zamyla navn. 414 00:19:29,360 --> 00:19:30,900 Så hva betyr dette? 415 00:19:30,900 --> 00:19:33,410 >> Vel, la meg gå videre og åpne seg to andre eksempler 416 00:19:33,410 --> 00:19:35,220 som er tilgjengelig på nettet. 417 00:19:35,220 --> 00:19:40,590 Det ene er kalt argv1.c og den andre er argv2. 418 00:19:40,590 --> 00:19:44,260 Det er en super-enkel program som er forskjellig fra tidligere programmer 419 00:19:44,260 --> 00:19:47,260 i at nå jeg bruker argc og argv opp her. 420 00:19:47,260 --> 00:19:54,300 Og nå er jeg integrere med en for løkke i ledningen 18, fra i = 0 på opptil argc. 421 00:19:54,300 --> 00:19:56,850 Og hva skal jeg gjøre med denne linjen med kode her? 422 00:19:56,850 --> 00:19:58,270 På engelsk. 423 00:19:58,270 --> 00:20:00,510 Dette viser åpenbart bruk av argc. 424 00:20:00,510 --> 00:20:03,670 Men på engelsk, hva gjør det gjøre hvis jeg kjører dette programmet? 425 00:20:03,670 --> 00:20:04,366 Yeah? 426 00:20:04,366 --> 00:20:07,386 >> PUBLIKUM: Det kommer til å skrive ut skjermen så mange ganger du vil. 427 00:20:07,386 --> 00:20:08,260 DAVID MALAN: Nettopp. 428 00:20:08,260 --> 00:20:10,480 Så uansett hva ordene jeg skriver ved ledeteksten, det er 429 00:20:10,480 --> 00:20:13,120 kommer til å gulpe dem på meg en per linje. 430 00:20:13,120 --> 00:20:14,370 Så la oss gå videre og gjøre dette. 431 00:20:14,370 --> 00:20:17,862 La meg gå inn i min katalog og gjør argv1 ./argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 Og nå, la oss holde det enkelt. 434 00:20:21,770 --> 00:20:23,834 La oss gjøre noe med det første. 435 00:20:23,834 --> 00:20:26,750 Det gjorde skrive ut en ting, og det er faktisk navnet på programmet, 436 00:20:26,750 --> 00:20:28,240 fordi det er i braketten 0. 437 00:20:28,240 --> 00:20:33,290 Hvis jeg nå si foo, det kommer til å gjøre disse to, og hvis jeg sier foo bar, 438 00:20:33,290 --> 00:20:35,580 det kommer til å si disse tre tingene. 439 00:20:35,580 --> 00:20:37,740 Nå det er noe interessant, kanskje. 440 00:20:37,740 --> 00:20:41,450 Men husker at argv er en matrise av strenger, 441 00:20:41,450 --> 00:20:45,960 men en streng er en rekke tegn, slik at vi kan ta ting opp et hakk 442 00:20:45,960 --> 00:20:48,560 og bruke det grunnleggende logikk og lage kode som 443 00:20:48,560 --> 00:20:51,160 ser litt mer kryptisk, riktignok. 444 00:20:51,160 --> 00:20:53,540 Men ved å ha en nestet loop, noe beslektet 445 00:20:53,540 --> 00:20:57,030 til hva du kanskje husker fra Mario, for eksempel, hvis du gjorde det på denne måten. 446 00:20:57,030 --> 00:21:00,380 >> Så nå merke på linje 19, jeg er igjen itera over mine argumenter, 447 00:21:00,380 --> 00:21:02,410 fra 0 på opptil argc. 448 00:21:02,410 --> 00:21:05,510 Og nå på linje 21-- jeg er låne et triks fra siste week-- 449 00:21:05,510 --> 00:21:11,090 Jeg sjekker hva som er lengde på argv brakett jeg. 450 00:21:11,090 --> 00:21:12,920 Jeg lagrer det svaret i n. 451 00:21:12,920 --> 00:21:18,230 Og så er jeg integrere fra j på opp til n, hvor j er initialisert til 0. 452 00:21:18,230 --> 00:21:19,460 Så, konvensjon for telling. 453 00:21:19,460 --> 00:21:22,335 Når du har brukt i, hvis du har en nestet løkke, kan du ikke bruke i på nytt, 454 00:21:22,335 --> 00:21:25,770 ellers vil du clobber, potensielt, verdien utsiden av den indre sløyfe. 455 00:21:25,770 --> 00:21:27,200 Så jeg bruker j etter konvensjonen. 456 00:21:27,200 --> 00:21:28,020 Vi kan bruke k. 457 00:21:28,020 --> 00:21:31,080 Hvis du har mer enn k, har du sannsynligvis har for mye hekkende, typisk. 458 00:21:31,080 --> 00:21:33,800 Men legg nå merke til min printf linjen er litt annerledes. 459 00:21:33,800 --> 00:21:37,520 Jeg er ikke ut% s, jeg er utskrift% c, som, selvfølgelig, 460 00:21:37,520 --> 00:21:39,460 er en plassholder for en røye. 461 00:21:39,460 --> 00:21:40,770 >> Og nå merker dette syntaks. 462 00:21:40,770 --> 00:21:41,270 Ny. 463 00:21:41,270 --> 00:21:42,630 Vi har ikke sett det før. 464 00:21:42,630 --> 00:21:47,290 Men logisk, dette betyr bare få ith strengen i argv 465 00:21:47,290 --> 00:21:50,067 og få jth hva? 466 00:21:50,067 --> 00:21:50,900 PUBLIKUM: Character. 467 00:21:50,900 --> 00:21:52,800 DAVID MALAN: Character i denne strengen. 468 00:21:52,800 --> 00:21:57,100 Så ved å bruke hakeparenteser etterfulgt av hakeparenteser, 469 00:21:57,100 --> 00:22:00,390 dette er dykking først inn argv er strenger, 470 00:22:00,390 --> 00:22:02,225 og deretter den andre hakeparenteser med j 471 00:22:02,225 --> 00:22:06,580 er dykke inn tegnene den aktuelle strengen i argv. 472 00:22:06,580 --> 00:22:09,562 Og så, bare for godt mål, Jeg skriver ut en ny linje her. 473 00:22:09,562 --> 00:22:12,020 Så nå la meg gå videre og åpne opp en litt større vindu 474 00:22:12,020 --> 00:22:13,600 så vi kan se dette i aksjon. 475 00:22:13,600 --> 00:22:15,700 La meg gå inn i den mappen. 476 00:22:15,700 --> 00:22:22,550 Og nå gjør argv-2-- whoops-- gjøre argv-2, ./argv to. 477 00:22:22,550 --> 00:22:23,110 Enter. 478 00:22:23,110 --> 00:22:24,860 Og det er litt vanskelig å lese vertikalt 479 00:22:24,860 --> 00:22:27,920 men det er faktisk navnet på program, etterfulgt av en blank tråd. 480 00:22:27,920 --> 00:22:30,210 Nå la meg gå videre og gjøre foo. 481 00:22:30,210 --> 00:22:33,210 Tilsvarende vanskelig å lese, men det er faktisk skrive ett tegn per linje. 482 00:22:33,210 --> 00:22:36,780 Og hvis jeg gjør bar, er det nå skriver de linje for linje. 483 00:22:36,780 --> 00:22:40,140 Så takeaway her er ikke så mye at, wow, se på denne ryddig nytt triks 484 00:22:40,140 --> 00:22:44,750 hvor du kan få på innholdet av en rekke spesifikke tegn, 485 00:22:44,750 --> 00:22:48,380 men heller hvordan vi tar disse grunnleggende ideer som indeksering inn i en matrise, 486 00:22:48,380 --> 00:22:51,620 og deretter å indeksere inn i et array som var i denne matrisen, 487 00:22:51,620 --> 00:22:56,180 og bare bruke de samme ideene til litt mer avanserte eksempler. 488 00:22:56,180 --> 00:22:59,560 Men det grunnleggende virkelig har ikke endret, selv siden forrige uke. 489 00:22:59,560 --> 00:23:02,350 >> Nå er dette slags tidsriktig, i det, husker, i uke null 490 00:23:02,350 --> 00:23:04,110 vi spilte med en telefon bok som dette. 491 00:23:04,110 --> 00:23:06,670 Og selv om dette er åpenbart fysiske papirlapper, 492 00:23:06,670 --> 00:23:09,150 du kan slags tenke på en telefonbok som en matrise. 493 00:23:09,150 --> 00:23:12,770 Gjerne, hvis du skulle reimplement dette stykker disse bitene av papir 494 00:23:12,770 --> 00:23:15,260 i en datamaskin, sannsynligvis du ville bruke noe 495 00:23:15,260 --> 00:23:20,270 som en matrise for å lagre alle de navn og numre fra A hele veien 496 00:23:20,270 --> 00:23:23,800 gjennom Z. Så dette er fint, fordi det gir oss en mulighet, 497 00:23:23,800 --> 00:23:28,310 kanskje, for å vurdere hvordan du kan faktisk gjennomføre noe sånt. 498 00:23:28,310 --> 00:23:31,250 Som med en serie av dørene her. 499 00:23:31,250 --> 00:23:36,380 Så hvis jeg kunne-- vi trenger en frivillig til å komme videre opp. 500 00:23:36,380 --> 00:23:36,980 La oss se. 501 00:23:36,980 --> 00:23:40,650 Et ukjent ansikt kanskje, ukjent ansikt kanskje. 502 00:23:40,650 --> 00:23:42,090 Hva med oransje? 503 00:23:42,090 --> 00:23:42,680 Her. 504 00:23:42,680 --> 00:23:45,870 Oransje skjorte, kom opp. 505 00:23:45,870 --> 00:23:52,230 >> La oss gå videre nå og flytte disse dørene over til siden, 506 00:23:52,230 --> 00:23:54,020 flytte disse ut av veien for et øyeblikk. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Hva heter du? 509 00:23:57,760 --> 00:23:58,580 >> AJAY: 510 00:23:58,580 --> 00:23:58,655 >> DAVID MALAN: Ajay. 511 00:23:58,655 --> 00:23:58,680 David. 512 00:23:58,680 --> 00:23:59,451 Hyggelig å møte deg. 513 00:23:59,451 --> 00:23:59,950 Greit. 514 00:23:59,950 --> 00:24:04,500 Så har vi bak disse seks dører digitalt på screen-- 515 00:24:04,500 --> 00:24:07,810 Eller, rettere sagt, syv dører på screen-- en hel haug med tall. 516 00:24:07,810 --> 00:24:10,099 Og jeg har fortalt deg ingenting i advance-- enige? 517 00:24:10,099 --> 00:24:11,140 AJAY: Ingenting på forhånd. 518 00:24:11,140 --> 00:24:14,730 DAVID MALAN: Alt jeg vil du skal gjøre nå er å finne for meg, og for oss, 519 00:24:14,730 --> 00:24:20,920 virkelig, nummer 50, ett skritt av gangen. 520 00:24:20,920 --> 00:24:21,830 >> AJAY: Nummer 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID MALAN: Tallet 50. 522 00:24:22,580 --> 00:24:24,746 Og du kan avsløre hva som er bak hver av disse dørene 523 00:24:24,746 --> 00:24:27,930 ganske enkelt ved å berøre den med en finger. 524 00:24:27,930 --> 00:24:31,364 Pokker. [Latter] 525 00:24:31,364 --> 00:24:34,560 >> [APPLAUSE] 526 00:24:34,560 --> 00:24:39,540 >> Veldig godt gjort. 527 00:24:39,540 --> 00:24:40,400 OK. 528 00:24:40,400 --> 00:24:44,090 Vi har en nydelig gave premien for deg her. 529 00:24:44,090 --> 00:24:46,520 Velg og vrak i filmene vi diskutert i forrige uke. 530 00:24:46,520 --> 00:24:47,362 >> AJAY: Oh, mann. 531 00:24:47,362 --> 00:24:49,050 Å, jeg har aldri sett Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID MALAN: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 Greit. 534 00:24:50,140 --> 00:24:53,790 Så hold på bare et øyeblikk. 535 00:24:53,790 --> 00:24:57,430 How-- la oss gjøre dette en lærevillig moment-- 536 00:24:57,430 --> 00:25:00,412 Hvordan klarte du går om finne nummer 50? 537 00:25:00,412 --> 00:25:01,370 AJAY: Jeg valgte tilfeldig. 538 00:25:01,370 --> 00:25:03,420 DAVID MALAN: Så du valgte tilfeldig og hadde flaks. 539 00:25:03,420 --> 00:25:03,790 AJAY: Ja. 540 00:25:03,790 --> 00:25:04,456 DAVID MALAN: OK. 541 00:25:04,456 --> 00:25:05,050 Utmerket. 542 00:25:05,050 --> 00:25:08,470 Så nå, hadde du ikke fått heldige, hva annet 543 00:25:08,470 --> 00:25:10,210 kan ha skjedd bak disse dørene? 544 00:25:10,210 --> 00:25:12,930 Så hvis jeg går videre og avdekke disse tallene her, 545 00:25:12,930 --> 00:25:15,180 de faktisk er i tilfeldig rekkefølge. 546 00:25:15,180 --> 00:25:17,750 Og det beste du kunne ha gjort, ærlig, er ved, til slutt, 547 00:25:17,750 --> 00:25:19,410 i verste fall sjekke dem alle. 548 00:25:19,410 --> 00:25:23,000 Så du fikk super-heldig, som er ikke det vi vil kalle en algoritme. 549 00:25:23,000 --> 00:25:24,730 Ja, gratulerer. 550 00:25:24,730 --> 00:25:27,010 Men nå let's-- humor meg, hvis du kunne. 551 00:25:27,010 --> 00:25:28,310 La oss gå til denne kategorien her. 552 00:25:28,310 --> 00:25:31,460 Og her er tallene i klart hva synes å være en tilfeldig rekkefølge, 553 00:25:31,460 --> 00:25:32,280 og de var. 554 00:25:32,280 --> 00:25:35,160 Men nå hvis jeg i stedet krav at bak disse dørene 555 00:25:35,160 --> 00:25:39,070 er tall som er sortert. 556 00:25:39,070 --> 00:25:41,780 Målet er nå å også finne oss nummeret 50. 557 00:25:41,780 --> 00:25:45,910 Men gjør det algoritmer, og fortelle oss hvordan du går om den. 558 00:25:45,910 --> 00:25:48,020 Og hvis du finner det, holde deg filmen. 559 00:25:48,020 --> 00:25:49,520 Du ikke synes det, du gir den tilbake. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 AJAY: Så jeg kommer til å sjekke endene først, for å finne ut om there's-- 562 00:25:58,112 --> 00:26:02,048 [Latter og applaus] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID MALAN: Her går. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 La oss ta en titt på en av Ajay forgjengere, 567 00:26:21,700 --> 00:26:25,450 Sean, som ikke var fullt så heldig. 568 00:26:25,450 --> 00:26:28,670 OK, så din oppgave her, Sean, er følgende. 569 00:26:28,670 --> 00:26:32,970 Jeg har skjult bak disse dører nummer syv, 570 00:26:32,970 --> 00:26:37,200 men gjemt bort i noen av disse dørene i tillegg er andre ikke-negative tall. 571 00:26:37,200 --> 00:26:40,730 Og målet ditt er å tenke på dette øverste raden med tall som bare en matrise. 572 00:26:40,730 --> 00:26:43,590 Vi er kun en sekvens av biter av papir med tall bak dem. 573 00:26:43,590 --> 00:26:47,640 Og målet ditt er, bare ved hjelp av toppen matrise her, finne meg tallet syv. 574 00:26:47,640 --> 00:26:51,200 Og vi så kommer til kritikk hvordan du går om å gjøre det. 575 00:26:51,200 --> 00:26:52,920 Finn oss på nummer syv, takk. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 Nei 578 00:27:03,070 --> 00:27:06,760 579 00:27:06,760 --> 00:27:08,179 5, 19, 13. 580 00:27:08,179 --> 00:27:16,752 581 00:27:16,752 --> 00:27:17,835 Det er ikke et lurespørsmål. 582 00:27:17,835 --> 00:27:21,420 583 00:27:21,420 --> 00:27:21,920 1. 584 00:27:21,920 --> 00:27:26,715 585 00:27:26,715 --> 00:27:29,840 På dette punktet poengsummen din er ikke veldig bra, så du kan like godt holde det gående. 586 00:27:29,840 --> 00:27:32,870 587 00:27:32,870 --> 00:27:33,370 Tre. 588 00:27:33,370 --> 00:27:38,570 589 00:27:38,570 --> 00:27:39,802 Gå på. 590 00:27:39,802 --> 00:27:42,510 Ærlig talt, jeg kan ikke hjelpe, men lurer hva du selv tenker. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: Jeg kan ta fra bare den øverste raden. 592 00:27:44,990 --> 00:27:46,240 DAVID MALAN: Bare den øverste raden. 593 00:27:46,240 --> 00:27:47,281 Så du har tre igjen. 594 00:27:47,281 --> 00:27:48,310 Så finn meg 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [Publikum roper FORSLAG] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Så begge disse var fantastisk svært forskjellige grunner. 599 00:28:26,130 --> 00:28:29,150 Så det er her vi slapp et øyeblikk siden, 600 00:28:29,150 --> 00:28:32,530 og nøkkelen innsikt her ble disse dørene hadde tall 601 00:28:32,530 --> 00:28:37,390 bak dem som ble sortert, den ideelle takeaway som er at du kan gjøre 602 00:28:37,390 --> 00:28:39,670 fundamentalt bedre i denne andre example-- 603 00:28:39,670 --> 00:28:42,380 og, ja, det var Seans første forsøk med tilfeldige tall 604 00:28:42,380 --> 00:28:45,460 like before-- men så snart som disse tallene er sortert, 605 00:28:45,460 --> 00:28:47,980 mye som telefonboken, hva kan du selvsagt gjøre? 606 00:28:47,980 --> 00:28:50,090 Eller hvordan kan du utnytte denne kunnskapen? 607 00:28:50,090 --> 00:28:51,530 Yeah. 608 00:28:51,530 --> 00:28:54,910 >> PUBLIKUM: Du går halvveis [uhørbart]. 609 00:28:54,910 --> 00:28:55,660 DAVID MALAN: Yeah. 610 00:28:55,660 --> 00:28:56,160 Nettopp. 611 00:28:56,160 --> 00:28:59,680 Så Ajay opprinnelige instinkt var å sjekke endene, som jeg husker, 612 00:28:59,680 --> 00:29:02,320 og da er vi liksom ferdig eksemplet raskt. 613 00:29:02,320 --> 00:29:05,220 Men hvis vi begynte å gjøre dette mer metodisk langs disse linjene, 614 00:29:05,220 --> 00:29:07,860 men starte kanskje i midten, fordi de er sortert, 615 00:29:07,860 --> 00:29:10,900 så snart vi avsløre nummer 16, vi derfor vet-- 616 00:29:10,900 --> 00:29:14,850 og la oss gjøre akkurat at-- vi derfor vet at 50, i dagens sak, 617 00:29:14,850 --> 00:29:16,080 må være til høyre. 618 00:29:16,080 --> 00:29:18,735 Så akkurat som i uke null når vi tore telefonboken i halvparten 619 00:29:18,735 --> 00:29:21,490 og kastet halvparten av problemet borte, samme ideen her. 620 00:29:21,490 --> 00:29:23,680 Vi kan kaste denne halv av problemet bort. 621 00:29:23,680 --> 00:29:25,730 Og sannsynligvis det du kan gjøre algoritmer, 622 00:29:25,730 --> 00:29:28,710 når du vet at 50 må være til høyre, hvis det er noe, 623 00:29:28,710 --> 00:29:31,390 er prøve der, i midten av de resterende dører. 624 00:29:31,390 --> 00:29:33,450 Selvfølgelig 50 er høyere enn 42, så vi kan 625 00:29:33,450 --> 00:29:36,060 kast denne rester fjerdedel av problemet bort, 626 00:29:36,060 --> 00:29:38,510 og endelig, identifisere noe sånt som 50. 627 00:29:38,510 --> 00:29:41,050 Men på samme måte som med den telefonboken, disse tallene 628 00:29:41,050 --> 00:29:44,560 ble gitt oss allerede sortert rekkefølge, noe som etterlater oss 629 00:29:44,560 --> 00:29:47,450 med spørsmålet, hvordan gjør du få ting inn i sortert orden? 630 00:29:47,450 --> 00:29:49,640 Og, ærlig talt, til hvilken pris? 631 00:29:49,640 --> 00:29:51,390 Det er én ting å være levert telefonboken 632 00:29:51,390 --> 00:29:54,810 og deretter imponere vennene dine ved å finne et telefonnummer virkelig fort, ikke sant? 633 00:29:54,810 --> 00:29:58,520 Rivende 32 sider ut for å finne en person ut av 4 milliarder sider, 634 00:29:58,520 --> 00:30:00,470 vi sa var en ekstremt eksempel. 635 00:30:00,470 --> 00:30:03,320 Men hvor mye tid tok det Verizon å sortere at telefonboken? 636 00:30:03,320 --> 00:30:06,170 Hvor mye tid tok det oss å sortere disse syv tallene? 637 00:30:06,170 --> 00:30:10,110 Det er et spørsmål som vi har hittil fullstendig ignorert. 638 00:30:10,110 --> 00:30:12,330 >> Så la oss svare på dette spørsmålet nå. 639 00:30:12,330 --> 00:30:15,920 Og vi er alle ut av filmer nå, men vi har noen stress baller. 640 00:30:15,920 --> 00:30:19,480 Dersom, si, åtte frivillige Ville ikke tankene å bli med oss ​​opp her? 641 00:30:19,480 --> 00:30:24,100 La oss gå videre og gjøre, hvor om dere fire, tre av dere her? 642 00:30:24,100 --> 00:30:25,290 Få noen nye ansikter. 643 00:30:25,290 --> 00:30:27,220 Og fire av deg der? 644 00:30:27,220 --> 00:30:30,760 Og now-- la oss ikke skjevhet her-- og nummer åtte over her på slutten. 645 00:30:30,760 --> 00:30:32,060 Kom opp. 646 00:30:32,060 --> 00:30:32,560 Greit. 647 00:30:32,560 --> 00:30:37,480 Så det vi har her i hver av dere er et tall. 648 00:30:37,480 --> 00:30:40,055 Hvis du ønsker å gå igjen, ta dette nummeret. 649 00:30:40,055 --> 00:30:40,763 Hva heter du? 650 00:30:40,763 --> 00:30:41,950 >> Artie: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID MALAN: Artie, ok. 652 00:30:43,100 --> 00:30:44,297 Du er nummer 1. 653 00:30:44,297 --> 00:30:45,310 >> AMIN: Amin. 654 00:30:45,310 --> 00:30:46,060 DAVID MALAN: Amin. 655 00:30:46,060 --> 00:30:46,820 David. 656 00:30:46,820 --> 00:30:47,530 Du er nummer to. 657 00:30:47,530 --> 00:30:49,100 Og gå videre, så jeg hånden du papirarkene, 658 00:30:49,100 --> 00:30:52,130 linje dere opp foran musikken står i samme rekkefølge som der oppe. 659 00:30:52,130 --> 00:30:52,660 >> ANDY: Hei, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID MALAN: Andy, er det fint å se deg. 661 00:30:53,970 --> 00:30:54,520 Nummer 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID MALAN: Jacob, nummer fire. 664 00:30:56,760 --> 00:30:57,549 Velkommen om bord. 665 00:30:57,549 --> 00:30:58,090 GRANT: Grant. 666 00:30:58,090 --> 00:30:58,881 DAVID MALAN: Grant. 667 00:30:58,881 --> 00:31:00,348 Nummer fem. 668 00:31:00,348 --> 00:31:01,200 >> ALANNA: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID MALAN: Alanna, nummer 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID MALAN: Frances, nummer 7. 672 00:31:04,880 --> 00:31:05,200 Og? 673 00:31:05,200 --> 00:31:05,830 >> RACHEL: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID MALAN: Rachel, nummer 8. 675 00:31:06,815 --> 00:31:07,100 Greit. 676 00:31:07,100 --> 00:31:08,766 Gå videre og få deg i denne rekkefølgen. 677 00:31:08,766 --> 00:31:11,440 La meg sette en gjenværende notestativet på plass. 678 00:31:11,440 --> 00:31:13,670 Hvor trenger du et stativ? 679 00:31:13,670 --> 00:31:14,170 OK. 680 00:31:14,170 --> 00:31:18,710 Gå videre og bare sette dine tall der publikum kan se dem på, 681 00:31:18,710 --> 00:31:20,340 musikken stå vendt utover. 682 00:31:20,340 --> 00:31:27,240 Og forhåpentligvis, vår første tilregnelighet sjekk her-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Vent et minutt. 685 00:31:29,070 --> 00:31:31,140 Vi har en 8. 686 00:31:31,140 --> 00:31:35,180 Jeg trenger å kaste deg fra eksempelet eller annen måte. 687 00:31:35,180 --> 00:31:35,680 Nei 688 00:31:35,680 --> 00:31:36,940 Nei, det er OK. 689 00:31:36,940 --> 00:31:37,890 La oss se. 690 00:31:37,890 --> 00:31:38,880 Vi kan gjøre dette. 691 00:31:38,880 --> 00:31:39,440 Stand by. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Det vi går. 694 00:31:45,740 --> 00:31:46,800 Riktig. 695 00:31:46,800 --> 00:31:47,360 Greit. 696 00:31:47,360 --> 00:31:50,260 Så nå har vi 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 OK. 698 00:31:50,760 --> 00:31:51,360 Utmerket. 699 00:31:51,360 --> 00:31:54,400 >> Så spørsmålet på hånden er, på hvilken pris, og via hvilken metode 700 00:31:54,400 --> 00:31:58,580 kan vi faktisk sortere disse tallene her slik at vi kan slags jobbe bakover, 701 00:31:58,580 --> 00:32:02,759 slutt, og decide-- er det egentlig imponerende, er det virkelig effektivt, 702 00:32:02,759 --> 00:32:04,550 at jeg kan dele og erobre en telefonkatalog? 703 00:32:04,550 --> 00:32:06,716 Er det virkelig effektivt at Jeg kan splitt og hersk 704 00:32:06,716 --> 00:32:08,600 de digitale brikker papir på bordet, 705 00:32:08,600 --> 00:32:14,500 om kanskje det kommer til å koste oss en formue i tid eller energi eller CPU-sykluser 706 00:32:14,500 --> 00:32:17,340 å faktisk få våre data inn i noen sortert rekkefølge? 707 00:32:17,340 --> 00:32:18,930 Så la oss stille det spørsmålet. 708 00:32:18,930 --> 00:32:22,077 >> Så først av, disse tallene er i ganske mye tilfeldig rekkefølge, 709 00:32:22,077 --> 00:32:24,160 og jeg kommer til å foreslå en algoritme, eller prosess 710 00:32:24,160 --> 00:32:25,970 som vi kan sortere disse folkene. 711 00:32:25,970 --> 00:32:28,100 Jeg kommer til å nærme seg dette ganske naivt. 712 00:32:28,100 --> 00:32:30,730 Og jeg kommer til å kjenne igjen at det er litt mye for meg 713 00:32:30,730 --> 00:32:32,890 å vikle meg rundt hele datasettet på en gang. 714 00:32:32,890 --> 00:32:33,640 Men vet du hva? 715 00:32:33,640 --> 00:32:37,450 Jeg kommer til å gjøre noen svært enkle marginale rettinger. 716 00:32:37,450 --> 00:32:41,152 4 og 2 er ute av drift, hvis Målet er å gå fra 1 på opptil 8. 717 00:32:41,152 --> 00:32:41,860 Så vet du hva? 718 00:32:41,860 --> 00:32:43,776 Jeg kommer til å ha deg gutta bytte, hvis du bytter 719 00:32:43,776 --> 00:32:46,380 fysisk posisjoner og dine biter av papir. 720 00:32:46,380 --> 00:32:47,894 Nå 4 og 6, disse er i orden. 721 00:32:47,894 --> 00:32:49,060 Jeg kommer til å la de være. 722 00:32:49,060 --> 00:32:50,227 6 og 8, de er i orden. 723 00:32:50,227 --> 00:32:51,185 Kommer til å la dem være. 724 00:32:51,185 --> 00:32:52,170 8 and1, ute av drift. 725 00:32:52,170 --> 00:32:54,790 Hvis dere to ville ikke tankene å bytte. 726 00:32:54,790 --> 00:32:57,300 Nå 8 og 3, om dere kunne bytte. 727 00:32:57,300 --> 00:32:59,320 8 og 7, om dere kunne bytte. 728 00:32:59,320 --> 00:33:01,790 Og 8 og 5, om dere kunne bytte. 729 00:33:01,790 --> 00:33:03,980 >> Nå er jeg ferdig? 730 00:33:03,980 --> 00:33:05,200 Nei, selvsagt ikke. 731 00:33:05,200 --> 00:33:07,880 Men jeg har gjort situasjonen bedre, ikke sant? 732 00:33:07,880 --> 00:33:09,430 Hva var navnet ditt igjen, nummer 8? 733 00:33:09,430 --> 00:33:10,055 >> RACHEL: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID MALAN: Rakel har effektivt boblet opp ganske langt, 735 00:33:12,850 --> 00:33:15,660 hele veien til enden av mitt utvalg av tall her. 736 00:33:15,660 --> 00:33:17,310 Og slik at problemet blir slags løst. 737 00:33:17,310 --> 00:33:21,670 Nå, tydelig, trenger to fortsatt til bevege seg litt, og 4 og 6, og en. 738 00:33:21,670 --> 00:33:24,420 Men jeg synes å ha fått et litt nærmere til oppløsningen. 739 00:33:24,420 --> 00:33:26,790 Så la oss bruke dette samme naiv heuristisk igjen. 740 00:33:26,790 --> 00:33:27,690 2 og 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 og 6, OK. 742 00:33:28,810 --> 00:33:29,930 6 og 1, mm-mm. 743 00:33:29,930 --> 00:33:32,230 La oss swap. 744 00:33:32,230 --> 00:33:33,200 6 og 3, mm-mm. 745 00:33:33,200 --> 00:33:34,420 La oss swap. 746 00:33:34,420 --> 00:33:35,580 6 og 7 er OK. 747 00:33:35,580 --> 00:33:36,590 7 og 5, nope. 748 00:33:36,590 --> 00:33:37,790 La oss swap. 749 00:33:37,790 --> 00:33:38,470 Og nå 7 og 8. 750 00:33:38,470 --> 00:33:39,862 Og hva heter du igjen? 751 00:33:39,862 --> 00:33:40,570 FRANCES: Frances. 752 00:33:40,570 --> 00:33:41,445 DAVID MALAN: Frances. 753 00:33:41,445 --> 00:33:44,230 Så nå Frances er i enda bedre stilling, fordi nå 7 og 8 754 00:33:44,230 --> 00:33:46,440 er fullstendig boblet opp til toppen. 755 00:33:46,440 --> 00:33:47,510 Så 2 og 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 og 1, la oss swap. 757 00:33:48,720 --> 00:33:50,410 4 og 3, la oss swap. 758 00:33:50,410 --> 00:33:51,550 4 og 6, er du OK. 759 00:33:51,550 --> 00:33:53,340 6 og 5, la oss swap. 760 00:33:53,340 --> 00:33:54,590 Og nå de gutta er gode. 761 00:33:54,590 --> 00:33:55,780 Vi er nesten der. 762 00:33:55,780 --> 00:33:57,706 2 og 1, i rekkefølge, så bytte. 763 00:33:57,706 --> 00:33:59,080 Og nå la meg gjøre en mental helse sjekk. 764 00:33:59,080 --> 00:34:03,080 2 og 3, 3 og 4, 4 og 5, 5 og 6, 6 og 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, så vi er ferdige. 766 00:34:05,060 --> 00:34:09,310 >> Men til hvilken pris jeg gjorde sortere disse tallene her? 767 00:34:09,310 --> 00:34:13,960 Vel, hvor mange skritt gjorde jeg potensielt ta når sortering disse folkene? 768 00:34:13,960 --> 00:34:15,710 Vel, vil vi komme tilbake til det spørsmålet. 769 00:34:15,710 --> 00:34:18,030 Men, ærlig talt, hvis du fikk litt lei, det er 770 00:34:18,030 --> 00:34:22,270 slags avslørende at dette ikke var Kanskje den mest effektive algoritmen. 771 00:34:22,270 --> 00:34:25,230 Og ja, ærlig, jeg svetter alle mer vandre frem og tilbake. 772 00:34:25,230 --> 00:34:26,639 Som ikke føler spesielt effektiv. 773 00:34:26,639 --> 00:34:27,805 Så la oss prøve noe annet. 774 00:34:27,805 --> 00:34:31,870 Hvis dere kunne tilbakestille dere til disse åtte verdier. 775 00:34:31,870 --> 00:34:32,969 God jobb. 776 00:34:32,969 --> 00:34:36,570 >> La oss ta en titt digitalt, for bare et øyeblikk før vi prøve noe annet, 777 00:34:36,570 --> 00:34:38,179 på hva som nettopp skjedde. 778 00:34:38,179 --> 00:34:41,330 Opp her, er du i ferd med å se en visualisering av disse åtte mennesker 779 00:34:41,330 --> 00:34:44,719 der blått og rødt søylene representerer tall. 780 00:34:44,719 --> 00:34:46,670 Den høyere baren, jo større antall. 781 00:34:46,670 --> 00:34:48,510 Jo kortere bar, jo mindre tall. 782 00:34:48,510 --> 00:34:51,560 Og hva du kommer til å se er i tilfeldig rekkefølge mer enn åtte av dem. 783 00:34:51,560 --> 00:34:55,830 Du kommer til å se disse barene bli sortert etter at samme algoritme, 784 00:34:55,830 --> 00:34:59,890 eller et sett med instruksjoner, som vi kaller heretter boble slag. 785 00:34:59,890 --> 00:35:04,000 Så legger merke til, hvert sekund eller så, to barer er å lyse opp i rødt, 786 00:35:04,000 --> 00:35:05,590 blir sammenlignet med datamaskinen. 787 00:35:05,590 --> 00:35:08,630 Og så hvis den store baren og liten bar er ute av drift, 788 00:35:08,630 --> 00:35:11,220 de blir byttet for meg. 789 00:35:11,220 --> 00:35:15,120 >> Nå er dette utrolig kjedelig å se på dette, i hvert fall, 790 00:35:15,120 --> 00:35:18,630 på veldig lenge, men legger merke til takeaway-- store barer flytte til høyre, 791 00:35:18,630 --> 00:35:20,460 små barer flytter til venstre. 792 00:35:20,460 --> 00:35:23,380 La oss avbryte denne prosessen og hastighet opp dette 793 00:35:23,380 --> 00:35:27,330 å være mye raskere, så vi kan få et høyt nivå følelse av hva, 794 00:35:27,330 --> 00:35:29,970 faktisk er boble slags gjør. 795 00:35:29,970 --> 00:35:33,150 Faktisk er det bobler opp til høyre side av listen, 796 00:35:33,150 --> 00:35:35,260 eller matrisen, jo større barer. 797 00:35:35,260 --> 00:35:40,020 Og omvendt, de små barer er boblende vei ned til venstre, 798 00:35:40,020 --> 00:35:42,950 om enn i et raskere tempo enn vi tidligere gjorde. 799 00:35:42,950 --> 00:35:45,850 Så, vanskeligere å se med mennesker, men visuelt det er det faktisk 800 00:35:45,850 --> 00:35:46,540 som foregikk. 801 00:35:46,540 --> 00:35:49,110 >> Men la oss prøve en fundamentalt annen tilnærming nå. 802 00:35:49,110 --> 00:35:52,387 La oss prøve en annen algoritme slik vi har deg 803 00:35:52,387 --> 00:35:59,640 Gutta starter i disse opprinnelige posisjoner, som var denne rekkefølgen her. 804 00:35:59,640 --> 00:36:00,827 Og la oss gå videre nå. 805 00:36:00,827 --> 00:36:02,910 Og jeg kommer til å gjøre noe enda enklere, ikke sant? 806 00:36:02,910 --> 00:36:06,710 I ettertid, bytte parvis igjen og igjen, nesten litt smart. 807 00:36:06,710 --> 00:36:10,460 La oss gjøre ting enda mer naivt, der hvis jeg vil sortere disse folkene, 808 00:36:10,460 --> 00:36:12,560 la meg bare holde utkikk for den minste element. 809 00:36:12,560 --> 00:36:14,570 Så akkurat nå, er fire av minste tallet jeg har sett. 810 00:36:14,570 --> 00:36:15,695 Jeg kommer til å huske det. 811 00:36:15,695 --> 00:36:17,750 Nei, to er bedre, og husk at. 812 00:36:17,750 --> 00:36:20,730 1 er enda mindre. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 OK. 815 00:36:22,470 --> 00:36:23,750 One-- hva heter du igjen? 816 00:36:23,750 --> 00:36:24,400 >> Artie: Artie. 817 00:36:24,400 --> 00:36:24,610 >> DAVID MALAN: Artie. 818 00:36:24,610 --> 00:36:25,460 Så, Artie, gå videre. 819 00:36:25,460 --> 00:36:27,043 Jeg kommer til å trekke deg ut av linjen. 820 00:36:27,043 --> 00:36:28,400 Hvis du kunne komme tilbake hit. 821 00:36:28,400 --> 00:36:30,790 Og jeg trenger å gjøre plass for ham. 822 00:36:30,790 --> 00:36:32,040 Vi har et beslutningspunkt her. 823 00:36:32,040 --> 00:36:36,000 Hvordan kan vi gjøre plass til Artie her i begynnelsen, hvor tallet 1 hører? 824 00:36:36,000 --> 00:36:36,770 >> PUBLIKUM: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID MALAN: OK, vi kunne skifte alle. 826 00:36:38,950 --> 00:36:40,860 Men foreslå en optimalisering. 827 00:36:40,860 --> 00:36:43,410 Det føles litt irriterende for meg å spørre fire personer 828 00:36:43,410 --> 00:36:44,620 å flytte hele veien ned. 829 00:36:44,620 --> 00:36:45,520 Hva annet kan jeg gjøre? 830 00:36:45,520 --> 00:36:46,360 >> PUBLIKUM: Slå dem. 831 00:36:46,360 --> 00:36:46,850 >> DAVID MALAN: Slå dem. 832 00:36:46,850 --> 00:36:47,900 Og hva heter du igjen? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID MALAN: Jacob, flytte. 835 00:36:50,330 --> 00:36:54,440 Mye mer effektiv bare for å ha Jacob swap steder med Artie, 836 00:36:54,440 --> 00:36:56,710 i motsetning til å tvinge alle fire av disse folkene, 837 00:36:56,710 --> 00:36:58,734 tusen takk, til deres riktige stilling. 838 00:36:58,734 --> 00:37:01,150 Hva er fint om Artie nå, han er i sin riktige posisjon. 839 00:37:01,150 --> 00:37:02,060 La oss gjøre dette igjen. 840 00:37:02,060 --> 00:37:03,730 2, det er det minste tallet jeg har sett. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 OK. 843 00:37:06,190 --> 00:37:07,467 2 er definitivt den minste. 844 00:37:07,467 --> 00:37:08,550 Trenger ikke å gjøre noe arbeid. 845 00:37:08,550 --> 00:37:09,320 La oss gjøre det igjen. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Minste? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Nope. 850 00:37:11,590 --> 00:37:11,720 4? 851 00:37:11,720 --> 00:37:12,220 Ooh. 852 00:37:12,220 --> 00:37:13,420 La meg huske fire. 853 00:37:13,420 --> 00:37:13,950 Tre. 854 00:37:13,950 --> 00:37:15,110 La meg huske tre. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 Minste tallet jeg har sett på denne pass er tre. 857 00:37:18,490 --> 00:37:20,340 Hvis du ville komme på ut. 858 00:37:20,340 --> 00:37:21,986 Hvor skal vi sette deg? 859 00:37:21,986 --> 00:37:22,860 Og hva heter du? 860 00:37:22,860 --> 00:37:23,530 >> ALANNA: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID MALAN: Alanna, er vi nødt til å kaste deg. 862 00:37:25,780 --> 00:37:28,670 Men det er mer effektiv, å bare bytte to personer, 863 00:37:28,670 --> 00:37:31,850 enn å ha flere personer faktisk omgå over. 864 00:37:31,850 --> 00:37:32,850 Nå la oss gjøre dette igjen. 865 00:37:32,850 --> 00:37:34,980 Jeg kommer til å velge 4, så kom ut. 866 00:37:34,980 --> 00:37:36,540 Og hvem kommer til å flytte? 867 00:37:36,540 --> 00:37:37,750 Nummer 8, selvfølgelig. 868 00:37:37,750 --> 00:37:40,260 Hvis jeg nå finne nummer fem, kom ut. 869 00:37:40,260 --> 00:37:42,104 Nummer 8 kommer til å bli kastet ut igjen. 870 00:37:42,104 --> 00:37:43,770 Jeg er nå kommer til å finne nummer 6 på plass. 871 00:37:43,770 --> 00:37:44,410 7 på plass. 872 00:37:44,410 --> 00:37:45,080 8 på plass. 873 00:37:45,080 --> 00:37:48,590 >> Det vi gjorde nå er noe som kalles utvalg sortere, 874 00:37:48,590 --> 00:37:52,560 og hvis vi visualisere dette, er det kommer til å føle seg litt annerledes. 875 00:37:52,560 --> 00:37:56,800 La oss gå videre og fra dette menyen her, dette visualization-- 876 00:37:56,800 --> 00:38:02,920 la oss endre dette til-- kom igjen, Firefox. 877 00:38:02,920 --> 00:38:07,610 La oss endre dette til valget slag. 878 00:38:07,610 --> 00:38:11,830 Og la oss fart opp som før, og start visualisering nå. 879 00:38:11,830 --> 00:38:13,990 Og denne algoritmen har en annen føler for det. 880 00:38:13,990 --> 00:38:16,480 På hver iterasjon, ærlig, det er enda mer direkte. 881 00:38:16,480 --> 00:38:18,385 Jeg er bare å velge det minste elementet. 882 00:38:18,385 --> 00:38:21,510 Nå, ærlig, fikk jeg litt heldig at tid, ved at det sorteres super-hurtig. 883 00:38:21,510 --> 00:38:22,660 Elementene var tilfeldig. 884 00:38:22,660 --> 00:38:25,520 Det er ikke, som vi vil til slutt se, fundamentalt raskere. 885 00:38:25,520 --> 00:38:29,400 Men la oss se en tredje og siste nærme her om hva som skjer. 886 00:38:29,400 --> 00:38:36,230 Så la oss gå videre og nullstille dere en siste gang å være i denne rekkefølgen her. 887 00:38:36,230 --> 00:38:38,450 >> Og nå, jeg kommer til å være litt mer flink, 888 00:38:38,450 --> 00:38:40,220 bare for å runde ut våre algoritmer. 889 00:38:40,220 --> 00:38:41,230 Jeg kommer til å gjøre dette. 890 00:38:41,230 --> 00:38:43,140 Jeg skal ikke gå frem og tilbake så mye. 891 00:38:43,140 --> 00:38:44,900 Oppriktig, jeg er lei av alt dette traversering. 892 00:38:44,900 --> 00:38:47,691 Jeg skal bare ta det jeg er gitt i begynnelsen av listen, 893 00:38:47,691 --> 00:38:49,460 og jeg kommer til å sortere som der og da. 894 00:38:49,460 --> 00:38:50,140 Så her er vi. 895 00:38:50,140 --> 00:38:51,030 Nummer fire. 896 00:38:51,030 --> 00:38:53,680 Jeg kommer til å sette inn nummer 4 inn i en sortert liste. 897 00:38:53,680 --> 00:38:54,180 Ferdig. 898 00:38:54,180 --> 00:38:58,300 Jeg hevder nå, og bare for å gjøre dette mer klart, er dette en del av min liste sortert. 899 00:38:58,300 --> 00:39:02,610 Det er litt av en dum påstand, men faktisk 4 er sortert i en liste av størrelse én. 900 00:39:02,610 --> 00:39:04,210 Nå skal jeg ta på nummer 2. 901 00:39:04,210 --> 00:39:07,670 Nummer to er jeg nå kommer til å sette inn i rett sted. 902 00:39:07,670 --> 00:39:08,680 Så hvor kommer to hører hjemme? 903 00:39:08,680 --> 00:39:09,824 Selvfølgelig, over her. 904 00:39:09,824 --> 00:39:11,490 Så gå videre og flytte tilbake, hvis du kunne. 905 00:39:11,490 --> 00:39:14,406 Og hvorfor ikke dere bare ta musikken står med deg denne gangen. 906 00:39:14,406 --> 00:39:17,020 Og la oss med makt setter deg inn i begynnelsen av listen. 907 00:39:17,020 --> 00:39:17,936 Så litt mer arbeid. 908 00:39:17,936 --> 00:39:20,890 Jeg måtte flytte Jacob rundt, og hva heter du? 909 00:39:20,890 --> 00:39:21,420 >> AMIN: Amin. 910 00:39:21,420 --> 00:39:22,270 >> DAVID MALAN: Amin. 911 00:39:22,270 --> 00:39:24,350 Men minst jeg ikke gå frem og tilbake. 912 00:39:24,350 --> 00:39:25,739 Jeg bare tar ting som jeg går. 913 00:39:25,739 --> 00:39:27,530 Jeg bare setter dem på rett sted. 914 00:39:27,530 --> 00:39:29,220 6, dette er faktisk ganske enkelt. 915 00:39:29,220 --> 00:39:31,510 La oss sette deg over det, hvis du ville bare flytte over litt. 916 00:39:31,510 --> 00:39:32,870 Nummer 8, også ganske enkelt. 917 00:39:32,870 --> 00:39:33,741 Rett der borte. 918 00:39:33,741 --> 00:39:34,240 Pokker. 919 00:39:34,240 --> 00:39:37,590 Nummer 1 Vi kan ikke bare bytte med Amin her, 920 00:39:37,590 --> 00:39:39,340 fordi det kommer å rote opp rekkefølgen. 921 00:39:39,340 --> 00:39:40,660 Så vi må være litt mer smart. 922 00:39:40,660 --> 00:39:42,770 Så, Artie, hvis du kunne sikkerhetskopiere et øyeblikk. 923 00:39:42,770 --> 00:39:46,550 La oss gå videre og skifte nå, i motsetning til våre tidligere algoritmer, 924 00:39:46,550 --> 00:39:50,910 å gi plass til Artie akkurat her i begynnelsen. 925 00:39:50,910 --> 00:39:54,690 Så på slutten av dagen, jeg er slags gjøre det jeg ønsket å unngå før. 926 00:39:54,690 --> 00:39:57,770 Og så min algoritmen er liksom av reversert, intellektuelt, 927 00:39:57,770 --> 00:39:59,070 fra hva det opprinnelig var. 928 00:39:59,070 --> 00:40:01,240 Jeg bare gjør det skiftende på et annet punkt. 929 00:40:01,240 --> 00:40:02,291 Nå er jeg på tre. 930 00:40:02,291 --> 00:40:02,790 Å, faen. 931 00:40:02,790 --> 00:40:04,039 Vi må gjøre mer arbeid igjen. 932 00:40:04,039 --> 00:40:05,060 Så la oss presse deg ut. 933 00:40:05,060 --> 00:40:09,360 La oss gå 8, 6, 4-- oh oh-- og 3 kommer til å gå rett der. 934 00:40:09,360 --> 00:40:11,490 Så i det minste liten besparelse av denne tiden. 935 00:40:11,490 --> 00:40:13,100 7, ikke for mye arbeid som må gjøres. 936 00:40:13,100 --> 00:40:15,370 Så hvis du ønsker å pop tilbake, la oss sette deg. 937 00:40:15,370 --> 00:40:17,440 Og til slutt, fem, hvis du ønsker å komme tilbake, vi 938 00:40:17,440 --> 00:40:22,610 trenger å skifte deg, deg, du, inntil fem er på plass. 939 00:40:22,610 --> 00:40:25,670 >> Så nå for å se dette på en høyt nivå grafisk, 940 00:40:25,670 --> 00:40:31,080 la oss gjøre denne algoritmen visualisering en ekstra gang. 941 00:40:31,080 --> 00:40:33,580 Så skal dette vi kaller innsetting slag. 942 00:40:33,580 --> 00:40:37,700 Vi skal kjøre det like fort, og starte den her. 943 00:40:37,700 --> 00:40:39,580 Og det også, har en annen stemning. 944 00:40:39,580 --> 00:40:42,180 Det er liksom bedre og bedre, men det er aldri perfekt 945 00:40:42,180 --> 00:40:44,630 før jeg går inn og glatt i disse hullene. 946 00:40:44,630 --> 00:40:47,860 Fordi, igjen, jeg bare tar det Jeg blir gitt fra venstre til høyre. 947 00:40:47,860 --> 00:40:50,350 Så jeg fikk ikke så heldig at alt var perfekt. 948 00:40:50,350 --> 00:40:54,190 Det er derfor vi hadde disse små mispositions at vi fast over tid. 949 00:40:54,190 --> 00:40:58,890 >> Så alle disse algoritmene synes å kjøre på litt forskjellige skritt. 950 00:40:58,890 --> 00:41:02,030 Faktisk, som vil du si er den beste eller den raskeste så langt? 951 00:41:02,030 --> 00:41:03,450 Boble sortere, den første? 952 00:41:03,450 --> 00:41:05,000 Utvalg sortere, den andre? 953 00:41:05,000 --> 00:41:08,450 Sortering ved innsetting, den tredje? 954 00:41:08,450 --> 00:41:10,710 Jeg hører noen utvalgs sorterer. 955 00:41:10,710 --> 00:41:13,280 Andre tanker? 956 00:41:13,280 --> 00:41:16,880 >> Så det viser seg at alle disse algoritmene 957 00:41:16,880 --> 00:41:22,400 er fundamentalt like effektiv som hver other-- eller omvendt, akkurat som 958 00:41:22,400 --> 00:41:25,980 ineffektiv som hverandre, fordi vi kan gjøre fundamentalt 959 00:41:25,980 --> 00:41:28,120 bedre enn alle tre av disse algoritmer. 960 00:41:28,120 --> 00:41:29,990 Og det er litt av en hvit løgn, også. 961 00:41:29,990 --> 00:41:32,580 når jeg sier så effektiv eller som ineffektiv, 962 00:41:32,580 --> 00:41:35,040 det er i hvert fall for super-store verdier av n. 963 00:41:35,040 --> 00:41:38,450 Når vi har bare åtte mennesker her, eller kanskje 50 eller så stolpene på skjermen, 964 00:41:38,450 --> 00:41:41,645 vil du absolutt merke forskjeller Blant disse tre algoritmer. 965 00:41:41,645 --> 00:41:44,020 Men som n, antall personer, eller antall tall, 966 00:41:44,020 --> 00:41:46,350 eller antall personer i telefon bok, eller antall websider 967 00:41:46,350 --> 00:41:48,230 i Googles database blir større og større, 968 00:41:48,230 --> 00:41:51,650 vi får se at alle disse tre algoritmer er faktisk ganske dårlig. 969 00:41:51,650 --> 00:41:54,060 Og vi kan gjøre fundamentalt bedre enn. 970 00:41:54,060 --> 00:41:56,830 >> La oss ta en titt, til slutt, på hva disse algoritmene kanskje 971 00:41:56,830 --> 00:41:59,520 høres ut som i sammenheng med noen andre 972 00:41:59,520 --> 00:42:03,550 så vel ved hjelp av denne visualisering her 973 00:42:03,550 --> 00:42:06,860 som vil introdusere oss til en rekke algoritmer. 974 00:42:06,860 --> 00:42:10,330 La oss gå videre og gratulere våre deltakere her, alle av dem 975 00:42:10,330 --> 00:42:11,690 sortert seg svært godt. 976 00:42:11,690 --> 00:42:15,124 Hvis du ønsker å ta en avskjedsgave. 977 00:42:15,124 --> 00:42:16,540 Du kan holde tallene også. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 Og hva du vil se, eller rettere sagt høre, nå, 980 00:42:22,520 --> 00:42:25,710 er at når vi setter lyder til hver av disse stenger 981 00:42:25,710 --> 00:42:28,660 og knytte den sammen med programvaren, forskjellig frekvens av lyden, 982 00:42:28,660 --> 00:42:33,970 du kan vikle hjernen din mer audioly rundt hva hver av disse tingene 983 00:42:33,970 --> 00:42:34,470 se ut. 984 00:42:34,470 --> 00:42:39,325 Den første av disse er innsetting slags 985 00:42:39,325 --> 00:42:44,275 >> [TONES] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Dette er boble slag. 988 00:42:49,720 --> 00:42:54,175 >> [TONES] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Utvalg slag. 991 00:43:18,222 --> 00:43:22,596 >> [TONES] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Noe som kalles flette slag. 994 00:43:35,150 --> 00:43:38,140 >> [TONES] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Gnome slag. 997 00:43:51,278 --> 00:43:56,390 >> [TONES] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Det er det for CS50. 1000 00:44:09,430 --> 00:44:13,360 Vi vil se deg på onsdag. 1001 00:44:13,360 --> 00:44:16,671 >> FORTELLER: Og nå, "Deep Tanker, "av Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Hvorfor er det en for loop? 1004 00:44:21,590 --> 00:44:23,200 Hvorfor ikke gjøre det bedre? 1005 00:44:23,200 --> 00:44:25,970 Jeg ville lage en fem loop. 1006 00:44:25,970 --> 00:44:28,720 >> [Latter]