1 00:00:00,000 --> 00:00:05,530 2 00:00:05,530 --> 00:00:09,790 >> PROFESSOR: Så agendaen for denne uken, ikke så mye ting. 3 00:00:09,790 --> 00:00:12,801 Men forhåpentligvis veldig, veldig nyttig og relevant for dere denne uken. 4 00:00:12,801 --> 00:00:15,550 Men vi kommer til å tilbringe kanskje 15, 20 minutter bare raskt snakker 5 00:00:15,550 --> 00:00:17,370 om koblingen listen. 6 00:00:17,370 --> 00:00:19,694 Link lister skal dekkes på quiz. 7 00:00:19,694 --> 00:00:22,610 Så kanskje det ville være svært nyttig å lære litt om hva det er. 8 00:00:22,610 --> 00:00:25,210 >> Vi kommer til å bruke den enorme Flertallet av dagens avsnitt 9 00:00:25,210 --> 00:00:27,640 gå over quiz null praksis problemer. 10 00:00:27,640 --> 00:00:30,970 Og så får vi spare kanskje 20, 30 minutter på slutten for noen langvarig spørsmål 11 00:00:30,970 --> 00:00:32,850 noen har. 12 00:00:32,850 --> 00:00:34,610 >> Og så, den siste fem minutter, jeg kommer 13 00:00:34,610 --> 00:00:36,467 å gi en pumpe opp tale for quiz. 14 00:00:36,467 --> 00:00:38,050 Dere ønsker alle å være her for det. 15 00:00:38,050 --> 00:00:39,591 Fordi det kommer til å være en god tid. 16 00:00:39,591 --> 00:00:42,650 17 00:00:42,650 --> 00:00:49,230 >> All right, så noen Materialet på linklisten. 18 00:00:49,230 --> 00:00:52,620 Hvordan de er vanligvis strukturert er du har det som kalles en node, ikke sant? 19 00:00:52,620 --> 00:00:54,870 Du har disse tingene kalles noder, som er structs. 20 00:00:54,870 --> 00:00:57,360 Jeg skal gå over hvordan du oppretter en node i neste lysbilde. 21 00:00:57,360 --> 00:01:00,680 Men i hovedsak alle koblet listene er data som 22 00:01:00,680 --> 00:01:03,340 har blitt satt sammen via pekere. 23 00:01:03,340 --> 00:01:09,110 >> Og så fordelen vi har ved hjelp av en lenket liste over, 24 00:01:09,110 --> 00:01:11,280 kanskje, som en matrise, er det faktum at i en matrise 25 00:01:11,280 --> 00:01:15,000 du trenger en sammenhengende blokk av hukommelse alle på samme sted, ett 26 00:01:15,000 --> 00:01:16,870 etter den andre, for å være i stand til å ha den. 27 00:01:16,870 --> 00:01:20,200 Mens en lenket liste, kan du har tilfeldige små biter av minne 28 00:01:20,200 --> 00:01:23,020 hele datamaskinen satt sammen av pekere. 29 00:01:23,020 --> 00:01:26,270 >> Og på denne måten kan få tilgang til informasjon 30 00:01:26,270 --> 00:01:28,610 som kommer en etter annen, etter hverandre 31 00:01:28,610 --> 00:01:32,720 uten bare en stor del av minne i datamaskinen et sted. 32 00:01:32,720 --> 00:01:35,910 Og så dette er en av de store grunner til at vi bruker koblingen listen. 33 00:01:35,910 --> 00:01:40,300 >> For det andre, er det veldig lett å dynamisk endre størrelsen på linken listen fordi i array, 34 00:01:40,300 --> 00:01:44,720 når du deklarerer en array, du har en viss innstilt verdi. 35 00:01:44,720 --> 00:01:47,340 La oss si at jeg ønsket å lage en rekke 10 heltall. 36 00:01:47,340 --> 00:01:49,970 Jeg oppretter en matrise av 10 heltall, og det er det. 37 00:01:49,970 --> 00:01:50,580 Det er 10. 38 00:01:50,580 --> 00:01:52,038 Jeg vet ikke hva jeg skal gjøre etter det. 39 00:01:52,038 --> 00:01:53,680 Hvis jeg ønsket å gjøre det 11, ikke kan gjøre det. 40 00:01:53,680 --> 00:01:55,710 Hvis jeg ønsker å gjøre det ni, ikke kan gjøre det. 41 00:01:55,710 --> 00:01:59,910 >> Mens det i en link liste, kan du legge til og slette og sett hvor du vil. 42 00:01:59,910 --> 00:02:04,940 Du kan dynamisk endre størrelsen din strukturere her, datastruktur. 43 00:02:04,940 --> 00:02:08,370 Og det gir oss mye mer ekstra fleksibilitet 44 00:02:08,370 --> 00:02:11,320 at vi ikke vanligvis har med arrays. 45 00:02:11,320 --> 00:02:15,210 >> Alle som forvirret på den grunnleggende Strukturen av hvordan en koblingsliste er 46 00:02:15,210 --> 00:02:17,930 eller hvorfor vi må bruke en over en matrise? 47 00:02:17,930 --> 00:02:20,330 Ja, vi vil gå over i detalj hvordan du faktisk lage en. 48 00:02:20,330 --> 00:02:24,121 Men dette er bare slags generell følelse akkurat nå. 49 00:02:24,121 --> 00:02:24,620 Kjølig. 50 00:02:24,620 --> 00:02:28,770 Og så arrays er satt sammen av disse herlige små tingene 51 00:02:28,770 --> 00:02:29,960 kalles noder. 52 00:02:29,960 --> 00:02:32,210 Alt en node er en type struct. 53 00:02:32,210 --> 00:02:36,090 Husk, en struct er hvis du ønsket for å skape en viss type variabel 54 00:02:36,090 --> 00:02:39,850 i C som ikke allerede eksistere, du som programmerer, 55 00:02:39,850 --> 00:02:42,030 faktisk kan lage det selv. 56 00:02:42,030 --> 00:02:46,540 >> Og så denne type data struktur kalles en node, 57 00:02:46,540 --> 00:02:50,770 faktisk har blitt skapt av oss, at ikke eksisterer innenfor C på egen hånd. 58 00:02:50,770 --> 00:02:53,150 Og måten du opprette én er at du har 59 00:02:53,150 --> 00:02:57,170 overskriften på typedef struct, som forteller kompilatoren jeg er 60 00:02:57,170 --> 00:02:59,640 i ferd med å opprette en struct. 61 00:02:59,640 --> 00:03:00,830 >> Vi skal gi den navnet "node". 62 00:03:00,830 --> 00:03:03,350 Og inne skal vi å erklære en variabel i, 63 00:03:03,350 --> 00:03:05,060 som kommer til å lagre en verdi. 64 00:03:05,060 --> 00:03:09,320 Og da har vi også kommer til å har en peker som heter "neste" 65 00:03:09,320 --> 00:03:12,090 som peker til neste node i linklisten. 66 00:03:12,090 --> 00:03:14,730 Og så er du ferdig med det av ved bare å gjenta node igjen så 67 00:03:14,730 --> 00:03:17,490 kompilatoren vet, OK det er slutten på min struct. 68 00:03:17,490 --> 00:03:22,540 >> Og så på denne måten, er typen vi å skape en søt liten matrise 69 00:03:22,540 --> 00:03:25,450 type ting med en verdi og med en peker. 70 00:03:25,450 --> 00:03:27,757 Og du kan koble dem alle sammen med disse pekere. 71 00:03:27,757 --> 00:03:30,090 Slik at de kan være alle slags satt sammen i en kjede. 72 00:03:30,090 --> 00:03:32,920 73 00:03:32,920 --> 00:03:34,162 >> Kjølig. 74 00:03:34,162 --> 00:03:35,453 Kan du høre det litt bedre? 75 00:03:35,453 --> 00:03:36,140 >> PUBLIKUM: Yeah. 76 00:03:36,140 --> 00:03:38,540 >> PROFESSOR: All right. 77 00:03:38,540 --> 00:03:44,280 Så måten, som dere kan se, en typisk kobling liste er strukturert 78 00:03:44,280 --> 00:03:45,500 er du en leder. 79 00:03:45,500 --> 00:03:49,460 Du har hodet verdi som ikke er å peke med en hvilken som helst annen peker. 80 00:03:49,460 --> 00:03:53,177 Men det kommer til å peke på, eller referanse, en annen node. 81 00:03:53,177 --> 00:03:56,510 Noden etter kommer til å referere til node etter det, og så videre og så videre 82 00:03:56,510 --> 00:03:59,170 til du til slutt treffer slutten av linken din liste. 83 00:03:59,170 --> 00:04:00,980 Og du bare ikke vil ha en peker der. 84 00:04:00,980 --> 00:04:04,659 >> Og så, tenke som, på en kjede, eller til og med hvis noen av dere har gjort, vet jeg ikke, 85 00:04:04,659 --> 00:04:06,450 som med Fruit Loops da du var liten. 86 00:04:06,450 --> 00:04:08,590 Du ville henge dem sammen og bære dem rundt halsen. 87 00:04:08,590 --> 00:04:09,840 Tror det er akkurat det samme. 88 00:04:09,840 --> 00:04:12,964 Du har disse små tingene som du kan sette sammen som peker til én 89 00:04:12,964 --> 00:04:15,291 etter at den, til den ene etter den, og så videre og så videre 90 00:04:15,291 --> 00:04:17,040 til du har en kjede av en datastruktur 91 00:04:17,040 --> 00:04:21,190 som du kan bruke som du vil. 92 00:04:21,190 --> 00:04:27,370 >> Så den måten at dette ville vi vanligvis setter inn eller sletter 93 00:04:27,370 --> 00:04:30,020 enhver node fra en kobling listen er veldig annerledes 94 00:04:30,020 --> 00:04:31,970 avhengig av hvor den noden er. 95 00:04:31,970 --> 00:04:34,880 Så, for eksempel, fordi pekere er alltid 96 00:04:34,880 --> 00:04:38,645 peker på en bestemt verdi, når du sletter eller sette inn en node, 97 00:04:38,645 --> 00:04:41,770 du vil være sikker på at pekeren er alle peker på de riktige tingene. 98 00:04:41,770 --> 00:04:46,200 >> Så hvis du ønsket å potensielt sette inn en ny node med verdien av ett 99 00:04:46,200 --> 00:04:48,379 inne en sortert lenke listen, vi vet alle her 100 00:04:48,379 --> 00:04:51,170 fra bildet som kommer til å gå i mellom hode og to, ikke sant? 101 00:04:51,170 --> 00:04:52,620 Fordi man passer rett der. 102 00:04:52,620 --> 00:04:59,060 Men på hvilken måte vi ville gjøre det er ved første dereferencing pekeren 103 00:04:59,060 --> 00:05:02,160 fra hodet og sende det til en. 104 00:05:02,160 --> 00:05:05,040 >> Men vi kommer inn på et problem her. 105 00:05:05,040 --> 00:05:08,280 Kan noen se hva problemet er hvis vi skulle først dereference 106 00:05:08,280 --> 00:05:10,090 pekeren fra hodet til én? 107 00:05:10,090 --> 00:05:14,202 Hva problemet kan vi kjøre inn hvis vi prøver å legge denne til forsiden av vår array? 108 00:05:14,202 --> 00:05:15,409 >> PUBLIKUM: [uhørbart] 109 00:05:15,409 --> 00:05:16,200 PROFESSOR: Nettopp. 110 00:05:16,200 --> 00:05:20,000 Så her har vi en peker som var gang peker fra hodet til to. 111 00:05:20,000 --> 00:05:23,120 Men hvis du bli kvitt det pekeren, peker du det til en, 112 00:05:23,120 --> 00:05:26,500 vi nå har ingen anelse hvor du skal gå for å finne to. 113 00:05:26,500 --> 00:05:29,850 Fordi som jeg sa tidligere, har du fått en giganten mengde minne i datamaskinen. 114 00:05:29,850 --> 00:05:31,860 Alle disse nodene kunne være tilfeldig ispedd 115 00:05:31,860 --> 00:05:33,350 i noen plass i datamaskinen. 116 00:05:33,350 --> 00:05:36,140 Og du ikke vet hvordan å gå om å finne det. 117 00:05:36,140 --> 00:05:40,420 >> Og så må du ha pekere peker til alle noder på slutten. 118 00:05:40,420 --> 00:05:42,420 Eller annet hvis du ved et uhell dereference én 119 00:05:42,420 --> 00:05:44,485 uten først tildelings en verdi først, er du 120 00:05:44,485 --> 00:05:47,410 bare kommer til å miste alt etterpå. 121 00:05:47,410 --> 00:05:49,720 >> Så hva vi kommer til å gjør er, du ville først 122 00:05:49,720 --> 00:05:53,270 ønsker å opprette en peker på noden du vil sette inn. 123 00:05:53,270 --> 00:05:55,270 Peke det til der du ønsker å sette det til, 124 00:05:55,270 --> 00:05:59,410 og så etterpå du kunne peke hodet tilbake til en. 125 00:05:59,410 --> 00:06:02,800 >> Betyr det fornuftig å alle her? 126 00:06:02,800 --> 00:06:03,346 Flott. 127 00:06:03,346 --> 00:06:04,720 Tenk på det som akkurat som en kjede. 128 00:06:04,720 --> 00:06:07,420 Hvis du legger til en kjede, det er slags intuitiv 129 00:06:07,420 --> 00:06:10,742 hvordan ville du gå om å sette inn det. 130 00:06:10,742 --> 00:06:15,274 >> OK, så det er faktisk mye kortere enn jeg trodde det ville være, 131 00:06:15,274 --> 00:06:16,690 en fem-minutters spiel på link lister. 132 00:06:16,690 --> 00:06:19,960 Bare så dere har grunnleggende idé om hva det er. 133 00:06:19,960 --> 00:06:23,580 >> Her har vi agendaen for quiz null. 134 00:06:23,580 --> 00:06:24,895 Ikke la dette skremme deg. 135 00:06:24,895 --> 00:06:26,270 Jeg vet det er mye informasjon. 136 00:06:26,270 --> 00:06:27,580 Det ser veldig skummelt. 137 00:06:27,580 --> 00:06:33,130 Det er også mye, jeg tror, ​​CSC slags vilkår. 138 00:06:33,130 --> 00:06:37,440 Ting som heksadesimale strenger, pekere, dynamisk minnetildeling 139 00:06:37,440 --> 00:06:40,120 er veldig skumle lyder vilkår. 140 00:06:40,120 --> 00:06:42,700 >> Men vi kommer til å bryte dem ned, gjøre noen praktiske problemer 141 00:06:42,700 --> 00:06:44,980 slik at dere alle er klare for denne testen. 142 00:06:44,980 --> 00:06:47,104 Hvor mange av dere har allerede begynt å studere? 143 00:06:47,104 --> 00:06:50,040 144 00:06:50,040 --> 00:06:53,670 >> OK, dere sannsynligvis vil å begynne å komme i gang 145 00:06:53,670 --> 00:06:56,480 på det, fordi det quiz er i morgen. 146 00:06:56,480 --> 00:06:58,739 Eller torsdag for noen av dere. 147 00:06:58,739 --> 00:07:01,030 Ja, så vi kommer til å gå over noen praksis problemer. 148 00:07:01,030 --> 00:07:04,600 Hvis dere ønsker alle å ta ut et ark, en blyant. 149 00:07:04,600 --> 00:07:07,310 Vi skal bare bruke den aller fleste av dagens avsnitt 150 00:07:07,310 --> 00:07:11,590 gå over noe av det så dere har en idé om hva du kan forvente på quiz. 151 00:07:11,590 --> 00:07:14,957 152 00:07:14,957 --> 00:07:16,890 >> OK. 153 00:07:16,890 --> 00:07:19,730 Et par av logis detaljer også, for noen 154 00:07:19,730 --> 00:07:25,120 som ikke har vært til at linken der, hvis du går til cs50.yale.edu, på forsiden 155 00:07:25,120 --> 00:07:28,566 denne siden er det en link som sier "Om Quiz Zero." 156 00:07:28,566 --> 00:07:29,440 Link tar deg dit. 157 00:07:29,440 --> 00:07:31,065 Hvis du ikke har lest den, kan du lese den. 158 00:07:31,065 --> 00:07:34,470 Fordi den forteller deg veldig viktig informasjon om quiz. 159 00:07:34,470 --> 00:07:37,410 >> Jeg kommer til å trekke dette ut fra at bare fordi, fysisk, 160 00:07:37,410 --> 00:07:40,200 Hvis dere ikke vet hvor å gå, vil vi ha problemer. 161 00:07:40,200 --> 00:07:44,220 Og så hvis din siste i form med A til N, gå til law school auditorium. 162 00:07:44,220 --> 00:07:47,500 Og hvis dine siste starter med P til Z, gå til Davies Auditorium. 163 00:07:47,500 --> 00:07:50,240 Og dette gjelder bare for mennesker i onsdag delen. 164 00:07:50,240 --> 00:07:53,420 >> Hvis du tar quizen på Torsdag, går du til SSS 114 165 00:07:53,420 --> 00:07:55,078 hvor din forelesning er typisk. 166 00:07:55,078 --> 00:07:55,953 PUBLIKUM: [uhørbart] 167 00:07:55,953 --> 00:07:59,316 168 00:07:59,316 --> 00:08:01,940 PROFESSOR: O til Z, du kommer å gå til Davies auditorium. 169 00:08:01,940 --> 00:08:03,273 Jeg kommer til å endre det, ikke sant? 170 00:08:03,273 --> 00:08:05,670 171 00:08:05,670 --> 00:08:09,698 >> Oh, yeah, du bare ikke klarer automatisk. 172 00:08:09,698 --> 00:08:11,753 >> Oh yeah, det er deg Christa. 173 00:08:11,753 --> 00:08:15,190 174 00:08:15,190 --> 00:08:16,030 Ja, min dårlige. 175 00:08:16,030 --> 00:08:17,610 Jepp, O til Z, du kommer å gå til Davies Auditorim. 176 00:08:17,610 --> 00:08:19,140 Jeg kommer til å fikse dette når jeg laster opp. 177 00:08:19,140 --> 00:08:20,320 Yeah. 178 00:08:20,320 --> 00:08:22,160 >> Og da også noe viktig å sinn 179 00:08:22,160 --> 00:08:25,290 er at onsdag, hvis du er offisielt innrullert i onsdag delen, 180 00:08:25,290 --> 00:08:26,832 du må ta quizen på onsdag. 181 00:08:26,832 --> 00:08:29,706 Og hvis du er registrert i torsdag, du må ta quiz torsdag. 182 00:08:29,706 --> 00:08:31,000 Og det er i klassen tid. 183 00:08:31,000 --> 00:08:35,970 Der, jeg tror det er som 1:00 til 02:15 på onsdager og 2:30 til 3:45 184 00:08:35,970 --> 00:08:37,220 på torsdager. 185 00:08:37,220 --> 00:08:41,710 >> Hvis du har en uforsonlige konflikter, Dean unnskyldninger er det eneste, 186 00:08:41,710 --> 00:08:43,030 dessverre kan vi ta. 187 00:08:43,030 --> 00:08:45,560 Fordi vi har hatt en aller fleste av forespørsler 188 00:08:45,560 --> 00:08:47,970 å bytte fra onsdag til torsdag. 189 00:08:47,970 --> 00:08:51,265 Som vi ikke kan respektere mindre vi har en Dean forespørsel. 190 00:08:51,265 --> 00:08:52,650 >> OK. 191 00:08:52,650 --> 00:08:57,000 Så før vi kommer i gang på en par av praksis problemer, 192 00:08:57,000 --> 00:09:00,540 Jeg bare kommer til å gå over Andys nyttige tips for å lykkes. 193 00:09:00,540 --> 00:09:04,140 Dere, når du studerer, du virkelig ønsker å øve skrive kode for hånd. 194 00:09:04,140 --> 00:09:07,050 Første gang jeg noensinne tok en CS quiz, ikke hadde jeg 195 00:09:07,050 --> 00:09:09,960 praksis å skrive kode for hånd før, og det var ekstremt 196 00:09:09,960 --> 00:09:11,890 sjokkerende over hvor vanskelig det var. 197 00:09:11,890 --> 00:09:16,125 >> Når dere ikke komme inn i vane å skrive ut alt, 198 00:09:16,125 --> 00:09:20,260 det kommer veldig naturlig å være i stand til å ha autocompleted 199 00:09:20,260 --> 00:09:22,015 braketter og semikolon der. 200 00:09:22,015 --> 00:09:23,890 Når du skriver det ut for hånd, noen ganger er det 201 00:09:23,890 --> 00:09:27,100 veldig, veldig lett å glemme et semikolon, eller glemmer å lukke en brakett, 202 00:09:27,100 --> 00:09:30,970 eller glemmer å lukke et kolon, eller noe sånt. 203 00:09:30,970 --> 00:09:34,322 >> Så når du skriver kode for hånd, det er en helt annen følelse. 204 00:09:34,322 --> 00:09:37,280 Så dere, når du jobber gjennom noen av praksis problemer, 205 00:09:37,280 --> 00:09:38,904 det ville godt å virkelig øve i dag. 206 00:09:38,904 --> 00:09:41,770 Eller i morgen, antar jeg, hvis du er ta quizen på torsdag. 207 00:09:41,770 --> 00:09:45,280 >> Dernest har vi den siste, som, åtte år igjen av praksis 208 00:09:45,280 --> 00:09:47,070 quizer online. 209 00:09:47,070 --> 00:09:50,759 Årets quiz vil trolig være veldig, veldig lik dem alle. 210 00:09:50,759 --> 00:09:51,800 De er alle svært like. 211 00:09:51,800 --> 00:09:54,220 Du får slags inn i stilen på den type spørsmål 212 00:09:54,220 --> 00:09:57,250 at vi ber, type funksjoner som vi vil skrive det på, 213 00:09:57,250 --> 00:09:58,580 et cetera, et cetera. 214 00:09:58,580 --> 00:10:01,980 >> Så ta de praktiske tester, spesielt under tidspress. 215 00:10:01,980 --> 00:10:05,390 75 minutter å gjøre quizen er ikke mye tid. 216 00:10:05,390 --> 00:10:07,254 Det er veldig, veldig lenge. 217 00:10:07,254 --> 00:10:09,670 Og så dere virkelig ønsker å sørge for at dere er 218 00:10:09,670 --> 00:10:11,990 i vane med å skrive kode for hånd raskt. 219 00:10:11,990 --> 00:10:15,070 Fordi du ikke vil at den første tid til å se en quiz av den lengden 220 00:10:15,070 --> 00:10:16,560 være på quiz. 221 00:10:16,560 --> 00:10:20,540 Du gutta virkelig vil være sikker at du øver på forhånd. 222 00:10:20,540 --> 00:10:24,550 >> Fjerde, ønsker du å gjennomgå foredrag og seksjons lysbilder. 223 00:10:24,550 --> 00:10:25,980 Du trenger ikke å huske ting. 224 00:10:25,980 --> 00:10:30,430 Egentlig er alle tillatt en ett ark av hvitt papir notater, 225 00:10:30,430 --> 00:10:31,090 foran og bak. 226 00:10:31,090 --> 00:10:32,920 Dere kan skrive eller skrive. 227 00:10:32,920 --> 00:10:37,070 Hvis du befinner deg som ønsker å lære utenat noe, satte den ned på dette arket. 228 00:10:37,070 --> 00:10:40,810 >> Jeg kan garantere deg, trenger du ikke ønsker å bli sittende fast i midten av at quiz 229 00:10:40,810 --> 00:10:43,890 å være som, oh yeah, hva er runtime av denne typen versus den slags. 230 00:10:43,890 --> 00:10:46,490 Bare sette den ned og kopiere den rett fra notatet ark. 231 00:10:46,490 --> 00:10:50,420 Så kan du faktisk bare bruke hjernen til å tenke på de problemene 232 00:10:50,420 --> 00:10:52,190 heller enn å måtte huske fakta. 233 00:10:52,190 --> 00:10:55,250 Og så virkelig dra nytte av eventuelle nisje detaljer 234 00:10:55,250 --> 00:11:00,140 at du tror du trenger å huske, plop det ned på anmeldelsen ark. 235 00:11:00,140 --> 00:11:02,680 >> OK, noen spørsmål logistisk om quiz 236 00:11:02,680 --> 00:11:05,510 før vi begynner noen quiz problemer øve? 237 00:11:05,510 --> 00:11:06,416 Yeah? 238 00:11:06,416 --> 00:11:10,040 >> PUBLIKUM: Jeg har ikke hatt en sjanse å se på quiz [uhørbart] 239 00:11:10,040 --> 00:11:11,757 men det kommer til å være applikasjon for det meste, 240 00:11:11,757 --> 00:11:14,090 eller er det også kommer til å være, lignende, kunnskapsspørsmål? 241 00:11:14,090 --> 00:11:14,940 >> PROFESSOR: Det er mye. 242 00:11:14,940 --> 00:11:16,731 Så, slik at jeg ville beskrev quiz 243 00:11:16,731 --> 00:11:18,810 er-- jeg satt sammen noen praksis problemer 244 00:11:18,810 --> 00:11:20,960 at jeg trakk fra alle quizer. 245 00:11:20,960 --> 00:11:25,210 Men vil du se at det er to hovedtyper typer spørsmål vil vi be deg. 246 00:11:25,210 --> 00:11:28,750 >> Det ene er et svært lavt nivå detalj av ting. 247 00:11:28,750 --> 00:11:31,720 Vi vil gi deg en liten mengde koder og sier, er det en feil her? 248 00:11:31,720 --> 00:11:33,110 Hva ville være å skrive ut her? 249 00:11:33,110 --> 00:11:35,980 Hva vil denne koden produsere, et cetera. 250 00:11:35,980 --> 00:11:38,710 Så veldig lavt nivå informasjon detaljer. 251 00:11:38,710 --> 00:11:42,700 >> Og på baksiden, vil vi ha svært høyt nivå kunnskapsbaserte spørsmål. 252 00:11:42,700 --> 00:11:45,190 Kan du forklare hva Forskjellen mellom en binær søk 253 00:11:45,190 --> 00:11:46,148 og en lineær søk er? 254 00:11:46,148 --> 00:11:48,500 Hvorfor skulle vi ønske å bruke en over den andre? 255 00:11:48,500 --> 00:11:49,960 Kanskje, hva er GDB? 256 00:11:49,960 --> 00:11:51,560 Hvorfor ønsker vi å bruke GDB? 257 00:11:51,560 --> 00:11:54,590 Høyere nivå, mer fundamental forståelse spørsmål. 258 00:11:54,590 --> 00:11:58,240 Så vil du se en blanding av to av dem på quiz. 259 00:11:58,240 --> 00:12:01,462 >> Noe annet før vi hodet rett inn i det? 260 00:12:01,462 --> 00:12:02,879 OK. 261 00:12:02,879 --> 00:12:03,670 PUBLIKUM: En mer. 262 00:12:03,670 --> 00:12:04,030 PROFESSOR: Å, en. 263 00:12:04,030 --> 00:12:04,340 Unnskyld. 264 00:12:04,340 --> 00:12:05,631 >> PUBLIKUM: Ja, det er greit. 265 00:12:05,631 --> 00:12:10,140 Så du sier 75 minutter er for kort, som det er lite sannsynlig 266 00:12:10,140 --> 00:12:11,640 at vi vil fullføre? 267 00:12:11,640 --> 00:12:13,571 Eller, som, 75 minutter er akkurat så mye tid 268 00:12:13,571 --> 00:12:15,700 som vi trenger hvis vi var hensiktsmessig forberedt? 269 00:12:15,700 --> 00:12:17,450 PROFESSOR: OK, så quiz er utfordrende. 270 00:12:17,450 --> 00:12:19,550 Det er definitivt utfordrende. 271 00:12:19,550 --> 00:12:21,092 Du vil finne deg selv på kort tid. 272 00:12:21,092 --> 00:12:24,341 Du er sannsynligvis kommer til å treffe, som 10, 15 minutter å gå, og være som, dritt. 273 00:12:24,341 --> 00:12:25,520 Jeg har så mye igjen å gjøre. 274 00:12:25,520 --> 00:12:26,520 Og det er helt greit. 275 00:12:26,520 --> 00:12:28,740 Alle kommer til å føle det samme. 276 00:12:28,740 --> 00:12:31,074 >> Bare være veldig bevisst på hvor mye tid du har. 277 00:12:31,074 --> 00:12:33,490 Og så det er derfor jeg forteller deg gutta gjør de praktiske tester. 278 00:12:33,490 --> 00:12:36,672 Fordi det gir en god følelse av hva quiz kommer til å være like. 279 00:12:36,672 --> 00:12:39,130 Så hvis du finner deg selv å være stand til ferdig praksisen 280 00:12:39,130 --> 00:12:41,671 quizer i en god mengde tid, kan du tempoet selv også, 281 00:12:41,671 --> 00:12:45,695 vil du ikke ha et problem på onsdag eller torsdag. 282 00:12:45,695 --> 00:12:46,575 >> Kjølig. 283 00:12:46,575 --> 00:12:49,200 Så hvis alle wants-- jeg tror folk flest har papirark 284 00:12:49,200 --> 00:12:49,810 allerede ute. 285 00:12:49,810 --> 00:12:52,604 Jeg skal egentlig bare gi deg testspørsmål, 286 00:12:52,604 --> 00:12:54,520 gi dere, som en noen minutter å gjøre dem. 287 00:12:54,520 --> 00:12:59,610 Og vi vil gå over som en klasse hva svarene på dem er. 288 00:12:59,610 --> 00:13:02,860 >> Så dette er en veldig typisk tidlig spørsmålet vi vil 289 00:13:02,860 --> 00:13:06,720 spør deg, bare å konvertere tall mellom forskjellige baser. 290 00:13:06,720 --> 00:13:09,070 Binære, som dere kan husker, er basen to. 291 00:13:09,070 --> 00:13:12,470 Desimal er basen 10, eller hva vi som mennesker vanligvis tolke. 292 00:13:12,470 --> 00:13:17,120 Heksadesimal er basen 16, som er null til ni samt A til F. 293 00:13:17,120 --> 00:13:19,990 >> Så det er fire tall jeg er ber dere å konvertere her. 294 00:13:19,990 --> 00:13:23,909 Jeg skal gi deg lyst, tre til fire minutter på å tenke gjennom hvordan 295 00:13:23,909 --> 00:13:25,200 vi ville gå om å løse dette. 296 00:13:25,200 --> 00:13:32,832 297 00:13:32,832 --> 00:13:35,710 >> PUBLIKUM: Er vi lov kalkulatorer? 298 00:13:35,710 --> 00:13:37,630 >> PROFESSOR: Du vil ikke trenger kalkulatorer, ja. 299 00:13:37,630 --> 00:13:42,420 Jeg tror grunnleggende tillegg, tror jeg, er alle dere vil bli bedt om å gjøre. 300 00:13:42,420 --> 00:14:41,700 301 00:14:41,700 --> 00:14:45,070 >> Og bare så jeg slags har en følelse av når alle er ferdige, se opp, 302 00:14:45,070 --> 00:14:47,429 bølge, vet jeg ikke, smile, ser lykkelig hvis du er ferdig. 303 00:14:47,429 --> 00:14:47,929 Yeah. 304 00:14:47,929 --> 00:17:21,680 305 00:17:21,680 --> 00:17:23,945 Kanskje et par minutter til. 306 00:17:23,945 --> 00:18:28,080 307 00:18:28,080 --> 00:18:29,600 >> OK, la oss ta det inn. 308 00:18:29,600 --> 00:18:31,580 Jeg hensikt å gå til gi dere mindre tid 309 00:18:31,580 --> 00:18:33,760 enn du sannsynligvis trenger å gjøre noen av disse problemene, 310 00:18:33,760 --> 00:18:37,124 rett og slett fordi jeg vil være sikker på at vi får gjennom en haug med problemer. 311 00:18:37,124 --> 00:18:39,290 Så ingen grunn til bekymring hvis du ikke gjorde det har en sjanse til å fullføre. 312 00:18:39,290 --> 00:18:43,770 Helt OK så lenge du har en idé om hvordan du skal gå om dette. 313 00:18:43,770 --> 00:18:45,850 Så la oss gå videre og gjøre den første. 314 00:18:45,850 --> 00:18:52,690 315 00:18:52,690 --> 00:18:57,870 >> Så først, ikke at noen skal fortelle meg i binær, hva gjør hver av disse tallene 316 00:18:57,870 --> 00:19:00,484 representerer i form av sine verdier? 317 00:19:00,484 --> 00:19:01,250 Yeah? 318 00:19:01,250 --> 00:19:03,349 >> PUBLIKUM: To til strøm null, 2-1. 319 00:19:03,349 --> 00:19:04,140 PROFESSOR: Nettopp. 320 00:19:04,140 --> 00:19:04,640 Så. 321 00:19:04,640 --> 00:19:13,430 322 00:19:13,430 --> 00:19:16,430 >> Høyre, så typisk når vi er i basen 10 323 00:19:16,430 --> 00:19:20,580 alle disse representerer er, som, 10 til bunnen av null, til høyre? 324 00:19:20,580 --> 00:19:21,810 Det er din sin plass. 325 00:19:21,810 --> 00:19:24,520 All din 10 plass er er 10 til kraften i en. 326 00:19:24,520 --> 00:19:26,600 Du 100 plass er 10 til kraften i to. 327 00:19:26,600 --> 00:19:29,570 >> Uansett hva basen du er i går å gjøre med akkurat det samme, 328 00:19:29,570 --> 00:19:31,480 bare med en annen base. 329 00:19:31,480 --> 00:19:34,130 Så binære, er alt som er basen to. 330 00:19:34,130 --> 00:19:37,110 Du kommer til å konvertere alle sifre i to til hva makt 331 00:19:37,110 --> 00:19:38,190 av at sifret. 332 00:19:38,190 --> 00:19:41,450 Og så i denne forstand, vi kan ha en enklere måte 333 00:19:41,450 --> 00:19:43,800 for å være i stand til å legge opp eller summere alle tallene i rekkefølge 334 00:19:43,800 --> 00:19:46,010 å konvertere til basen 10. 335 00:19:46,010 --> 00:19:50,362 >> Så ikke at noen skal fortelle meg hva Svaret på det første er i basen ten? 336 00:19:50,362 --> 00:19:51,674 >> PUBLIKUM: To, [uhørbart] 337 00:19:51,674 --> 00:19:52,340 PROFESSOR: Yeah. 338 00:19:52,340 --> 00:19:53,230 PUBLIKUM: 42. 339 00:19:53,230 --> 00:19:56,560 PROFESSOR: 42, der du går. 340 00:19:56,560 --> 00:20:00,660 Så måten vi fikk dette svaret var gjøre to første, som er to. 341 00:20:00,660 --> 00:20:02,760 Pluss to, den tredje, som er åtte. 342 00:20:02,760 --> 00:20:07,590 Pluss to til femte, hvilken er det som er til overs. 343 00:20:07,590 --> 00:20:09,390 Du oppsummere dem opp, og det er 42. 344 00:20:09,390 --> 00:20:12,000 >> Er noen forvirret om hvordan vi fikk det? 345 00:20:12,000 --> 00:20:15,630 Så grunnleggende tillegg som Jeg sa, du bør være OK. 346 00:20:15,630 --> 00:20:17,410 Hvis ikke, vel, vi kan øve det også. 347 00:20:17,410 --> 00:20:18,720 Men det er all right. 348 00:20:18,720 --> 00:20:20,560 Kjølig. 349 00:20:20,560 --> 00:20:25,570 >> Ønsker noen å gi meg svare til det andre i tillegg? 350 00:20:25,570 --> 00:20:26,860 >> 50? 351 00:20:26,860 --> 00:20:27,600 God. 352 00:20:27,600 --> 00:20:30,044 Noen forvirret om hvordan vi fikk det heller? 353 00:20:30,044 --> 00:20:31,960 Cool, jeg vil ha svar på neste lysbilde. 354 00:20:31,960 --> 00:20:34,440 Så ingen grunn til bekymring hvis du må kopiere det ned. 355 00:20:34,440 --> 00:20:38,860 >> OK, så heksadesimale er litt mer komplisert. 356 00:20:38,860 --> 00:20:41,840 men jeg kommer til å vise dere en snarvei for hvordan du gjør det. 357 00:20:41,840 --> 00:20:44,800 Så heksadesimale, som du husk, alt det er å være 16. 358 00:20:44,800 --> 00:20:48,920 Og fordi vi som mennesker gjør faktisk ikke har 16 tall å representere det, 359 00:20:48,920 --> 00:20:56,940 vi går fra null til ni, som vår første 10 verdier, og da vi gjør A til F, 360 00:20:56,940 --> 00:20:58,630 som er de neste seks verdier. 361 00:20:58,630 --> 00:21:03,040 >> Og så den enkleste måten å gå fra noen binære tall til heksadesimale 362 00:21:03,040 --> 00:21:05,350 er å bryte dem opp i halvdeler. 363 00:21:05,350 --> 00:21:10,042 Og så noen binært tall vi vil gi vil du sannsynligvis ha åtte sifre. 364 00:21:10,042 --> 00:21:11,750 Du kan bare bryte dem opp i midten. 365 00:21:11,750 --> 00:21:17,460 >> Så det første one-- én én, man en, en, en, en en. 366 00:21:17,460 --> 00:21:21,340 Slags tror det opp, vet du, tegner en skråstrek eller et komma i mellom dem. 367 00:21:21,340 --> 00:21:23,800 Og du kan bare konvertere direkte uansett 368 00:21:23,800 --> 00:21:26,670 Dette er den første nummer med heksadesimal, 369 00:21:26,670 --> 00:21:29,880 og hva her er å den andre på heksadesimal form. 370 00:21:29,880 --> 00:21:37,584 >> Så husker fra vanlig notasjon, hva gjør begynne heksadesimale verdier med? 371 00:21:37,584 --> 00:21:38,460 >> PUBLIKUM: Zero. 372 00:21:38,460 --> 00:21:39,270 >> PROFESSOR: 0X. 373 00:21:39,270 --> 00:21:45,210 Så vi vet at hver gang vi ber deg å konvertere et tall til heksadesimal, 374 00:21:45,210 --> 00:21:48,230 eller helst du se noen nummer som starter med 0X, 375 00:21:48,230 --> 00:21:50,230 du vet at det er en heksadesimal verdi. 376 00:21:50,230 --> 00:21:54,160 >> Og så kommer du til å bli bedt om å bestemme hva disse to siffer er. 377 00:21:54,160 --> 00:21:59,690 Og måten du gjør det, tallying opp at halvparten og tallying opp at halvparten. 378 00:21:59,690 --> 00:22:02,870 Så i dette eksempel, hva ville en, en, en, en være? 379 00:22:02,870 --> 00:22:04,890 Hvilken verdi ville det være? 380 00:22:04,890 --> 00:22:06,040 Det ville være F, ikke sant? 381 00:22:06,040 --> 00:22:08,050 Det vil være 15. 382 00:22:08,050 --> 00:22:11,780 >> Så dette ville være F. One, en, en, en her er også 383 00:22:11,780 --> 00:22:21,270 F. Så man, en, en, en, en, en, en, en i heksadesimal, alt er det er 0xFF. 384 00:22:21,270 --> 00:22:25,350 Fordi dette halvparten representert F, verdien på 15, 385 00:22:25,350 --> 00:22:27,331 og denne halvparten representert F, verdien 15. 386 00:22:27,331 --> 00:22:29,456 Fordi husk, vi er telle fra null til ni. 387 00:22:29,456 --> 00:22:35,290 En er som 10, B er som 11, F er 15. 388 00:22:35,290 --> 00:22:41,690 >> Betyr det fornuftig for alle hvordan vi fikk fra binær til heksadesimal? 389 00:22:41,690 --> 00:22:44,595 >> PUBLIKUM: Og så hvordan kom vi 15 fra den ene, en, en, en? 390 00:22:44,595 --> 00:22:46,220 PROFESSOR: Ja, dette er binært, ikke sant? 391 00:22:46,220 --> 00:22:48,090 Tenk deg dette er bare et binært tall. 392 00:22:48,090 --> 00:22:50,792 Så du har to til nulte, som er en. 393 00:22:50,792 --> 00:22:51,500 PUBLIKUM: Oh, OK. 394 00:22:51,500 --> 00:22:51,670 Så du bare totalt det ut. 395 00:22:51,670 --> 00:22:52,670 >> PROFESSOR: Ja, og så du bare totalt det ut. 396 00:22:52,670 --> 00:22:53,380 Det er alt det er. 397 00:22:53,380 --> 00:22:54,890 >> PUBLIKUM: OK. 398 00:22:54,890 --> 00:22:55,830 >> PROFESSOR: OK. 399 00:22:55,830 --> 00:23:00,740 >> PUBLIKUM: Så du går fra binær til desimaltall til heksadesimale? 400 00:23:00,740 --> 00:23:04,590 >> PROFESSOR: Det er enkleste måten å gjøre det, ja. 401 00:23:04,590 --> 00:23:11,390 Du kommer ikke til desimal fordi desimal bare har null til ni. 402 00:23:11,390 --> 00:23:13,410 Vi er bare slags å dele dette opp i to. 403 00:23:13,410 --> 00:23:15,201 >> PUBLIKUM: [uhørbart] bruker desimal å finne 404 00:23:15,201 --> 00:23:17,809 hva det samsvarer opp til i heksadesimal. 405 00:23:17,809 --> 00:23:20,100 PROFESSOR: Jeg mener, du er tallying opp ved hjelp av grunnleggende matematikk. 406 00:23:20,100 --> 00:23:20,725 PUBLIKUM: Yeah. 407 00:23:20,725 --> 00:23:22,300 PROFESSOR: Ja, ganske mye. 408 00:23:22,300 --> 00:23:23,630 Det er litt forvirrende. 409 00:23:23,630 --> 00:23:26,410 Men bare vet at du kan dele opp hva 410 00:23:26,410 --> 00:23:28,160 denne verdien er i bare halvdelene. 411 00:23:28,160 --> 00:23:29,570 Se, hva er dette i binær? 412 00:23:29,570 --> 00:23:30,610 Hvilket nummer er det? 413 00:23:30,610 --> 00:23:33,270 Det kommer til å være noe fra null til F. 414 00:23:33,270 --> 00:23:35,722 >> Her er også kommer til å være noe fra null til F. 415 00:23:35,722 --> 00:23:37,722 Og så kan du bare sette de to rett der. 416 00:23:37,722 --> 00:23:38,263 >> PUBLIKUM: OK. 417 00:23:38,263 --> 00:23:38,910 PROFESSOR: Jepp. 418 00:23:38,910 --> 00:23:39,410 OK. 419 00:23:39,410 --> 00:23:42,320 Så dere vil prøve den neste da? 420 00:23:42,320 --> 00:23:49,601 Zero, en, null en, en, null, en null. 421 00:23:49,601 --> 00:23:52,350 Jeg skal gi dere som 30 sekunder, siden du sannsynligvis ikke visste 422 00:23:52,350 --> 00:23:53,850 triks til hvordan å gjøre dette tidligere. 423 00:23:53,850 --> 00:24:24,950 424 00:24:24,950 --> 00:24:27,381 >> OK, noen ønsker å få dette en sjanse? 425 00:24:27,381 --> 00:24:28,774 >> 0x5A. 426 00:24:28,774 --> 00:24:29,440 PROFESSOR: 0x5A. 427 00:24:29,440 --> 00:24:30,470 5a. 428 00:24:30,470 --> 00:24:31,340 God. 429 00:24:31,340 --> 00:24:37,050 Så dette her ville be-- du ønsker å fortelle oss hvordan du fikk det? 430 00:24:37,050 --> 00:24:38,920 Først, hvordan fikk du de fem? 431 00:24:38,920 --> 00:24:42,030 >> PUBLIKUM: Fordi null, en, null, er en fem. 432 00:24:42,030 --> 00:24:45,170 >> PROFESSOR: Har alle forstår hvorfor null, en, null, er en five? 433 00:24:45,170 --> 00:24:46,260 Du har en her. 434 00:24:46,260 --> 00:24:48,010 Du har ingenting i to til den første. 435 00:24:48,010 --> 00:24:50,300 I to til den andre, du har en, noe som er fire. 436 00:24:50,300 --> 00:24:52,600 Så du legge til fire pluss den ene, har du fem. 437 00:24:52,600 --> 00:24:53,600 Alle gode? 438 00:24:53,600 --> 00:24:54,100 OK. 439 00:24:54,100 --> 00:24:56,570 Og så hva dette kan være og hvorfor? 440 00:24:56,570 --> 00:24:58,350 Hva nummeret ikke A tilsvarer? 441 00:24:58,350 --> 00:24:59,350 >> PUBLIKUM: 10. 442 00:24:59,350 --> 00:25:00,976 >> PROFESSOR: Og hva dette i basen to? 443 00:25:00,976 --> 00:25:01,850 PUBLIKUM: [uhørbart] 444 00:25:01,850 --> 00:25:03,010 PROFESSOR: Nettopp. 445 00:25:03,010 --> 00:25:06,370 Så denne andre verdien her vil være 0x5A. 446 00:25:06,370 --> 00:25:08,410 >> Alle gode på hvordan å konvertere? 447 00:25:08,410 --> 00:25:10,770 Det er mye enklere enn du tror det er. 448 00:25:10,770 --> 00:25:13,330 Jeg vil bare være sikker du vet nyttige tips 449 00:25:13,330 --> 00:25:14,950 og triks for hvordan du gjør det. 450 00:25:14,950 --> 00:25:18,432 >> PUBLIKUM: Hvorfor kan du bare dele den i midten sånn? 451 00:25:18,432 --> 00:25:21,390 Bare være som, OK, jeg bare kommer til å bryr seg om disse først [uhørbart]? 452 00:25:21,390 --> 00:25:24,240 >> PROFESSOR: Fordi det er faktisk den måte heksadesimale verdier er representert. 453 00:25:24,240 --> 00:25:26,890 0X, som faktisk betyr ingenting annet enn å fortelle deg 454 00:25:26,890 --> 00:25:28,710 at det er et heksadesimalt tall. 455 00:25:28,710 --> 00:25:31,580 Og dette alltid representerer de første fire siffer. 456 00:25:31,580 --> 00:25:34,330 Og dette alltid representerer de fire siste sifrene. 457 00:25:34,330 --> 00:25:37,835 Og så disse to sifre bare tilsvarer forskjellige biter. 458 00:25:37,835 --> 00:25:39,200 >> PUBLIKUM: Så vil vi always-- 459 00:25:39,200 --> 00:25:41,830 >> PROFESSOR: Du er alltid kommer til å få åtte verdi bits. 460 00:25:41,830 --> 00:25:44,580 >> PUBLIKUM: Er det akkurat som en ting her eller at en ting hele? 461 00:25:44,580 --> 00:25:46,883 PROFESSOR: Det er bare en ting i datamaskiner, Jepp. 462 00:25:46,883 --> 00:25:47,424 PUBLIKUM: OK. 463 00:25:47,424 --> 00:25:48,240 Awesome. 464 00:25:48,240 --> 00:25:51,290 >> PROFESSOR: Også, så i dette eksemplet vi konvertert fra binær til desimal, 465 00:25:51,290 --> 00:25:53,290 og fra binære til heksadesimale. 466 00:25:53,290 --> 00:25:56,610 Dere vil være sikker på at du også praksis går den andre veien rundt. 467 00:25:56,610 --> 00:26:03,370 Så hvis jeg ga deg 0xFF, kunne du trekke det ut i binært, ikke sant? 468 00:26:03,370 --> 00:26:06,820 >> Du konvertere F i binær, som er en, en, en, en, 469 00:26:06,820 --> 00:26:09,380 konvertere F til binær, som er en, en, en, en. 470 00:26:09,380 --> 00:26:11,310 >> Så vi kan be deg om å gjøre den andre veien rundt. 471 00:26:11,310 --> 00:26:14,817 Så desimal til binær, eller heksadesimale til binær. 472 00:26:14,817 --> 00:26:16,650 Så du ønsker å gjøre sikker på at du kjenner begge veier. 473 00:26:16,650 --> 00:26:19,371 Vi vil sannsynligvis be deg om en Kombinasjonen av de to. 474 00:26:19,371 --> 00:26:20,660 >> Ja, har du et spørsmål? 475 00:26:20,660 --> 00:26:22,724 Jeg kan see-- du er flink? 476 00:26:22,724 --> 00:26:23,348 PUBLIKUM: Yeah. 477 00:26:23,348 --> 00:26:24,560 PROFESSOR: OK. 478 00:26:24,560 --> 00:26:26,101 Er jeg god til å slette dette? 479 00:26:26,101 --> 00:26:26,600 Flott. 480 00:26:26,600 --> 00:26:33,965 481 00:26:33,965 --> 00:26:40,437 >> Greit, så svarene er her hvis noen er nysgjerrig senere og bli forvirret. 482 00:26:40,437 --> 00:26:41,844 OK. 483 00:26:41,844 --> 00:26:46,070 >> PUBLIKUM: Spiller det noen rolle om vi satt brevene våre i hovedstaden eller små bokstaver? 484 00:26:46,070 --> 00:26:50,360 >> PROFESSOR: Det gjør det, fordi i heksadesimal, etter konvensjonen, 485 00:26:50,360 --> 00:26:52,840 alle tegnene er store bokstaver. 486 00:26:52,840 --> 00:26:54,650 Så A til F er kommer til å være store bokstaver. 487 00:26:54,650 --> 00:26:58,660 Hvis du setter inn en liten en, jeg vet ikke hvis vi nødvendigvis ville markere det galt. 488 00:26:58,660 --> 00:27:00,679 Men teoretisk, det er ikke teknisk 489 00:27:00,679 --> 00:27:01,970 hvordan du skal ha det. 490 00:27:01,970 --> 00:27:03,303 Så de bør alle være store bokstaver. 491 00:27:03,303 --> 00:27:05,910 Ja, godt spørsmål. 492 00:27:05,910 --> 00:27:07,780 >> OK. 493 00:27:07,780 --> 00:27:08,790 Andre spørsmålet. 494 00:27:08,790 --> 00:27:12,750 Tenk på dette herlige programmet her. 495 00:27:12,750 --> 00:27:15,180 Jeg vil stille spørsmålet: Jeg skal komme tilbake dette. 496 00:27:15,180 --> 00:27:23,170 >> Så, for det første, hva som er inne i standard io.h som er av interesse for programmet? 497 00:27:23,170 --> 00:27:26,640 For det andre, hva gjør ugyldig betegne på linje tre? 498 00:27:26,640 --> 00:27:30,572 Og for det tredje, hva betyr retur null fra Hoved, som seks, vanligvis bety? 499 00:27:30,572 --> 00:27:33,280 Hvis dere ønsker å skrive dem ned, siden jeg må bytte tilbake 500 00:27:33,280 --> 00:27:36,810 til lysbildet bare så du kan se kode. 501 00:27:36,810 --> 00:27:40,400 Dette er et eksempel på, som, kanskje en høyere nivå spørsmålet hvor vi ber deg 502 00:27:40,400 --> 00:27:42,435 hva ting betyr i et program. 503 00:27:42,435 --> 00:27:47,290 504 00:27:47,290 --> 00:27:49,215 >> Alle bra for meg å gå tilbake til raset? 505 00:27:49,215 --> 00:27:53,400 506 00:27:53,400 --> 00:27:54,361 Ok kult. 507 00:27:54,361 --> 00:27:57,610 Så jeg vil gi dere som kanskje tre minutter for å se på dette en virkelig rask. 508 00:27:57,610 --> 00:28:41,330 509 00:28:41,330 --> 00:28:44,140 >> OK, så dette er som ganske enkelt, konseptuelt. 510 00:28:44,140 --> 00:28:49,280 Ikke ønsker at noen skal fortelle meg hva som er først inne ved hash inkludert 511 00:28:49,280 --> 00:28:52,630 vår standard io.h bibliotekfilen? 512 00:28:52,630 --> 00:28:55,510 Hvorfor trenger vi det biblioteket inkludert for dette programmet? 513 00:28:55,510 --> 00:28:56,930 Hva her trenger vi det for? 514 00:28:56,930 --> 00:28:56,980 >> Yeah? 515 00:28:56,980 --> 00:28:58,340 >> PUBLIKUM: Er det da du sette det printf? 516 00:28:58,340 --> 00:28:59,131 >> PROFESSOR: Nettopp. 517 00:28:59,131 --> 00:29:01,780 Så printf, helst du ta en input fra brukeren 518 00:29:01,780 --> 00:29:04,140 og print noe til skjermen, det er 519 00:29:04,140 --> 00:29:05,600 standard inngang, utgang bibliotek. 520 00:29:05,600 --> 00:29:07,170 Tenk på det som måte-- input, output. 521 00:29:07,170 --> 00:29:08,430 >> Har jeg en utgang? 522 00:29:08,430 --> 00:29:09,207 Ja, det gjør jeg. 523 00:29:09,207 --> 00:29:12,040 Så jeg vet at jeg alltid kommer til å trenger standardisere i.o biblioteket. 524 00:29:12,040 --> 00:29:16,400 >> Så printf er funksjonen der vi trenger for å få tilgang 525 00:29:16,400 --> 00:29:19,370 og hashtag inkludere standard i.o bibliotek. 526 00:29:19,370 --> 00:29:20,280 OK. 527 00:29:20,280 --> 00:29:22,660 >> For det andre hva betyr ugyldig bety? 528 00:29:22,660 --> 00:29:26,970 Vi har int main (void), hva gjør ugyldig her mener her på linje tre? 529 00:29:26,970 --> 00:29:28,080 Ja, i ryggen. 530 00:29:28,080 --> 00:29:29,020 >> PUBLIKUM: [uhørbart] 531 00:29:29,020 --> 00:29:29,920 >> PROFESSOR: Nettopp. 532 00:29:29,920 --> 00:29:33,320 Så husk, vi har lært starter med vår PSet 533 00:29:33,320 --> 00:29:35,360 kan du faktisk spesifisere kommandolinje 534 00:29:35,360 --> 00:29:39,010 argumenter som ditt program, som du Hovedfunksjonen tar som deg, brukeren, 535 00:29:39,010 --> 00:29:39,650 kall det. 536 00:29:39,650 --> 00:29:42,650 Hvis vi har ugyldig, betyr at du som kunne bare kjøre programmet direkte 537 00:29:42,650 --> 00:29:44,680 uten kommandolinjeargumenter. 538 00:29:44,680 --> 00:29:46,160 Alle klare på det? 539 00:29:46,160 --> 00:29:46,660 OK. 540 00:29:46,660 --> 00:29:52,850 >> Og til slutt hvorfor skal vi bry gjør denne avkastningen null ting her? 541 00:29:52,850 --> 00:29:54,740 Hvorfor gjør vi selv har en int main? 542 00:29:54,740 --> 00:29:57,330 Hvorfor kan vi ikke bare ha void main tomrommet? 543 00:29:57,330 --> 00:29:59,216 Yeah? 544 00:29:59,216 --> 00:30:01,590 PUBLIKUM: Bare slik at vi kan være sikker på at programmet er 545 00:30:01,590 --> 00:30:04,247 avslutter med hell, som i motsetning til hvis det ble nummerert. 546 00:30:04,247 --> 00:30:06,580 Og vi ville vite at det er en annen type feil. 547 00:30:06,580 --> 00:30:07,621 >> PROFESSOR: Ja, akkurat. 548 00:30:07,621 --> 00:30:10,670 Dette er bare en veldig konvensjonelle ting som vi gjør, 549 00:30:10,670 --> 00:30:13,840 det er bare ved slutten av programmet, bare for å være sikker 550 00:30:13,840 --> 00:30:15,830 som din viktigste funksjon kjører riktig, 551 00:30:15,830 --> 00:30:17,940 Vi ønsker alltid å gjøre gjengjeld null. 552 00:30:17,940 --> 00:30:21,160 Selv om vi kan nødvendigvis ikke se at trykket overalt. 553 00:30:21,160 --> 00:30:25,092 >> Fordi som programmerere, vet du, hvis du har mange forskjellige linjer med kode 554 00:30:25,092 --> 00:30:27,050 og du ikke vet hvor disse går galt, 555 00:30:27,050 --> 00:30:30,240 og hvis en feil skjer du vil sørg for at du får denne feilen. 556 00:30:30,240 --> 00:30:33,240 Og så typisk hvis noe går galt vi vil ha en avkastning på en bare 557 00:30:33,240 --> 00:30:34,669 å sørge for at vi vet at det er. 558 00:30:34,669 --> 00:30:36,460 Så hvis du ser en avkastning null, som vanligvis 559 00:30:36,460 --> 00:30:38,293 betyr at programmet er utført med hell. 560 00:30:38,293 --> 00:30:40,490 561 00:30:40,490 --> 00:30:40,990 God? 562 00:30:40,990 --> 00:30:45,180 563 00:30:45,180 --> 00:30:45,680 Kjølig. 564 00:30:45,680 --> 00:30:48,710 565 00:30:48,710 --> 00:30:52,680 >> OK, andre programmet her. 566 00:30:52,680 --> 00:30:54,827 Tenk det. 567 00:30:54,827 --> 00:30:56,910 Og hvis dere ser en flyte, dere kan sannsynligvis 568 00:30:56,910 --> 00:31:00,810 har en god idé om hva Jeg skal til å spørre deg. 569 00:31:00,810 --> 00:31:05,200 >> Så når dette programmet utfører, som du kan se, 570 00:31:05,200 --> 00:31:09,330 Jeg erklære en dupp inne i min hovedfunksjon. 571 00:31:09,330 --> 00:31:13,470 Jeg kalte den "svarer", og jeg er innstillingen som tilsvarer en dividert med 10. 572 00:31:13,470 --> 00:31:17,860 Jeg skriver ut, til en desimal, som flyter. 573 00:31:17,860 --> 00:31:19,880 Og så kommer jeg tilbake null. 574 00:31:19,880 --> 00:31:24,470 >> Så når du kjører programmet, tenker tilbake til grådig nå, 575 00:31:24,470 --> 00:31:26,550 Dette programmet skriver 0.0. 576 00:31:26,550 --> 00:31:29,993 Som vi alle vet, forhåpentligvis vi alle vet, en dividert med 10 er ikke en 0,00, 577 00:31:29,993 --> 00:31:32,350 det er 0,1. 578 00:31:32,350 --> 00:31:37,810 Men forklare hvorfor dette programmet mener at en delt på 10 utskrifter til 0,1 annet 579 00:31:37,810 --> 00:31:39,504 enn 0,1? 580 00:31:39,504 --> 00:31:42,545 Jeg skal gi dere kanskje som 30 sekunder for å bare raskt tenke på at 581 00:31:42,545 --> 00:31:43,878 og jeg skal gå tilbake til programmet. 582 00:31:43,878 --> 00:32:17,800 583 00:32:17,800 --> 00:32:20,290 >> OK. 584 00:32:20,290 --> 00:32:22,205 Alle som ønsker å gi det en sjanse? 585 00:32:22,205 --> 00:32:24,330 I tre setninger eller mindre, fordi vanligvis vi er 586 00:32:24,330 --> 00:32:27,650 kommer til å begrense alle svar til tre setninger eller mindre 587 00:32:27,650 --> 00:32:31,130 slik at du ikke bare regurgitate tilfeldige ting på din quiz. 588 00:32:31,130 --> 00:32:32,740 >> Ja, ta en sjanse. 589 00:32:32,740 --> 00:32:36,390 >> PUBLIKUM: Så jeg tror det er denne ting som heter, som, [uhørbart] 590 00:32:36,390 --> 00:32:42,320 Slik at det kan være, for eksempel, det kan være, for eksempel, 0,09, 591 00:32:42,320 --> 00:32:47,250 at der du skrive ut den første siffer, ville det være til 0,0? 592 00:32:47,250 --> 00:32:49,100 >> PROFESSOR: Close, ikke helt. 593 00:32:49,100 --> 00:32:49,810 Christabell? 594 00:32:49,810 --> 00:32:51,770 >> PUBLIKUM: Du dele ett og 10, og de er begge heltall. 595 00:32:51,770 --> 00:32:54,610 Og så den måten at det kommer til å lagre det som et heltall. 596 00:32:54,610 --> 00:32:56,480 Og så det nærmeste heltall ville være 0,0. 597 00:32:56,480 --> 00:32:57,471 Og så det er 0,1. 598 00:32:57,471 --> 00:32:58,970 PROFESSOR: Ja, det er veldig bra. 599 00:32:58,970 --> 00:33:00,040 Det er det rette svaret. 600 00:33:00,040 --> 00:33:03,597 Så dette er en veldig forvirrende konsept for mange av barna. 601 00:33:03,597 --> 00:33:06,680 Og jeg virkelig ønsker å være sikker på at Dette er forsterket i alles hode. 602 00:33:06,680 --> 00:33:10,090 >> Så det vi kaller flytende punkt upresishet, 603 00:33:10,090 --> 00:33:12,800 hvor grunnen til at mange av programmene i grådige 604 00:33:12,800 --> 00:33:17,010 fungerte ikke i utgangspunktet var fordi du glemte å kaste din variabel. 605 00:33:17,010 --> 00:33:19,370 Så hva Christabell sa var helt riktig. 606 00:33:19,370 --> 00:33:21,990 >> En flottør er iboende upresise. 607 00:33:21,990 --> 00:33:26,400 Fordi i en datamaskin, til høyre, har vi en endelig mengde biter av minne 608 00:33:26,400 --> 00:33:28,480 vi kan bruke til å representere tall. 609 00:33:28,480 --> 00:33:33,480 Så, for eksempel, dette CS50 ID er-- Jeg tror det er en 64-biters datamaskin. 610 00:33:33,480 --> 00:33:37,520 >> En flottør kan bare være representert med en begrenset mengde av disse bits. 611 00:33:37,520 --> 00:33:42,260 Og så 0,1 med uendelige nuller, som var 0.1 er, ikke sant? 612 00:33:42,260 --> 00:33:45,450 Men vi kan faktisk ikke lagre det nummeret i vår datamaskin. 613 00:33:45,450 --> 00:33:47,810 Vi har bare ikke nok minne til å gjøre det. 614 00:33:47,810 --> 00:33:52,340 >> Og så den nærmeste tilnærming av hva som er lagret i minnet er faktisk 615 00:33:52,340 --> 00:33:55,390 noe sånt som 0.000 noe, noe, noe, noe. 616 00:33:55,390 --> 00:34:01,240 Som, når du avkorte det, runder ned til 0,0. 617 00:34:01,240 --> 00:34:05,640 >> Og så dette eksemplet er bare ett som demonstrerer mange problemer 618 00:34:05,640 --> 00:34:08,469 vi har når vi er prøver å feilaktig gjøre matte 619 00:34:08,469 --> 00:34:11,000 uten å felle som et annet heltall. 620 00:34:11,000 --> 00:34:14,870 Så bare være skeptisk til at dette skjer. 621 00:34:14,870 --> 00:34:18,239 >> På spørrekonkurranser, hvis vi gir deg en blokk med kode og det er som, 622 00:34:18,239 --> 00:34:19,510 hva skriver ut på slutten? 623 00:34:19,510 --> 00:34:24,096 Og hvis det er noen tilfeldige verdien du Gutta bør vite hvorfor det skjer. 624 00:34:24,096 --> 00:34:24,909 Yeah? 625 00:34:24,909 --> 00:34:27,926 >> PUBLIKUM: avkorte er å kvitte seg med alt etter et visst punkt? 626 00:34:27,926 --> 00:34:28,513 [Uhørbart] 627 00:34:28,513 --> 00:34:30,929 PROFESSOR: Ja, så egentlig dette er en veldig dårlig eksempel 628 00:34:30,929 --> 00:34:37,870 fordi 0,100 uansett faktisk ville avkorte ned til 0,1. 629 00:34:37,870 --> 00:34:41,389 Men hvis du skulle kjøre it jeg ikke huske, fordi i fjor de 630 00:34:41,389 --> 00:34:42,830 kjørte den på et annet program. 631 00:34:42,830 --> 00:34:45,300 De kjørte den i noe som kalles den CS50 Appliance, som 632 00:34:45,300 --> 00:34:46,389 er forskjellig fra ID. 633 00:34:46,389 --> 00:34:48,520 Det var en 32-bit system, tror jeg. 634 00:34:48,520 --> 00:34:50,290 Og så var det forskjellige tall. 635 00:34:50,290 --> 00:34:53,330 >> Men egentlig, bare vet at hele konseptet med avkutting 636 00:34:53,330 --> 00:34:54,815 og hvor det bare skjærer ting av. 637 00:34:54,815 --> 00:34:55,690 Og så hvis det rounds-- 638 00:34:55,690 --> 00:34:56,300 >> PUBLIKUM: Uten avrunding. 639 00:34:56,300 --> 00:34:57,370 >> PROFESSOR: Nettopp. 640 00:34:57,370 --> 00:34:57,870 Yeah. 641 00:34:57,870 --> 00:35:02,330 642 00:35:02,330 --> 00:35:04,380 Kjølig. 643 00:35:04,380 --> 00:35:05,250 >> Hei, i ryggen. 644 00:35:05,250 --> 00:35:07,634 Vi skal bare over noen quiz gjennomgang spørsmål. 645 00:35:07,634 --> 00:35:08,430 >> Greit. 646 00:35:08,430 --> 00:35:10,150 Så vurdere et annet program her. 647 00:35:10,150 --> 00:35:12,797 648 00:35:12,797 --> 00:35:15,380 Jeg kommer til å gi dere en par minutter å lese over dette. 649 00:35:15,380 --> 00:35:18,588 Dette er noe som var for en svært nylig at jeg tror blåste mye du 650 00:35:18,588 --> 00:35:19,142 guys sinn. 651 00:35:19,142 --> 00:35:21,100 Men vi kommer til å snakke gjennom dette igjen bare 652 00:35:21,100 --> 00:35:24,152 å sikre at du forstå det helt. 653 00:35:24,152 --> 00:35:24,652 OK. 654 00:35:24,652 --> 00:35:41,280 655 00:35:41,280 --> 00:35:41,780 OK. 656 00:35:41,780 --> 00:35:44,342 Noen trenger mer tid til å lese gjennom denne koden? 657 00:35:44,342 --> 00:35:45,650 OK. 658 00:35:45,650 --> 00:35:50,630 >> Så det virker for meg at i dette programmet er jeg 659 00:35:50,630 --> 00:35:53,460 opprette to strenger ved hjelp GetString. 660 00:35:53,460 --> 00:35:55,180 Ett kalt s og en som heter t. 661 00:35:55,180 --> 00:35:58,680 Og hvis de er lik lik til hverandre, 662 00:35:58,680 --> 00:36:00,880 det skal skrives ut "You skriver det samme. " 663 00:36:00,880 --> 00:36:04,170 >> Men elsewise, ville det ut, "Du skrev forskjellige ting, "ikke sant? 664 00:36:04,170 --> 00:36:05,990 Virker veldig, veldig enkelt. 665 00:36:05,990 --> 00:36:08,720 Men, men hvis jeg faktisk prøver å skrive dette programmet, 666 00:36:08,720 --> 00:36:12,230 det synes at selv når jeg inngangs nøyaktig samme strenger, 667 00:36:12,230 --> 00:36:15,490 det fortsatt skrives ut, "Du skrev forskjellige ting! " 668 00:36:15,490 --> 00:36:18,020 Er det noen som ønsker å ta en skutt på hvorfor dette programmet alltid 669 00:36:18,020 --> 00:36:20,370 svarer at inngangene er forskjellige, selv 670 00:36:20,370 --> 00:36:22,090 når ordene selv er det samme? 671 00:36:22,090 --> 00:36:24,870 672 00:36:24,870 --> 00:36:29,170 >> Så hvis jeg skulle input-- David kjærlighet å bruke et eksempel som mamma, ikke sant? 673 00:36:29,170 --> 00:36:37,890 Små bokstaver M-O-M til S, T lik små M-O-M. 674 00:36:37,890 --> 00:36:40,340 Hvis jeg kjørte dette gjennom den koden, hvorfor skulle det 675 00:36:40,340 --> 00:36:44,180 skrive ut "du skrev forskjellige ting?" 676 00:36:44,180 --> 00:36:46,336 >> Er det noen som trenger mer tid til å tenke på dette? 677 00:36:46,336 --> 00:36:47,294 OK, jeg tror vi er bra. 678 00:36:47,294 --> 00:36:48,716 Yeah? 679 00:36:48,716 --> 00:36:53,930 >> PUBLIKUM: OK, så det er noe om hvor det er lagret i minnet, ikke sant? 680 00:36:53,930 --> 00:36:54,890 >> PROFESSOR: Jepp. 681 00:36:54,890 --> 00:37:00,400 >> PUBLIKUM: Hvor det er, hvis dette string s er lagret på minne spot-- 682 00:37:00,400 --> 00:37:01,689 Jeg oppfinne dette-- er null. 683 00:37:01,689 --> 00:37:02,355 PROFESSOR: Sure. 684 00:37:02,355 --> 00:37:05,290 PUBLIKUM: Og streng t er lagret på minne sted, 685 00:37:05,290 --> 00:37:11,000 som, 167, og deretter null ikke er lik 167. 686 00:37:11,000 --> 00:37:12,610 >> PROFESSOR: Nettopp. 687 00:37:12,610 --> 00:37:18,350 OK, så husk dette utro åpenbaring vi forklart til dere 688 00:37:18,350 --> 00:37:21,530 denne siste uken, som strenger egentlig ikke eksisterer? 689 00:37:21,530 --> 00:37:25,380 Når vi skaper noe som kalles string vi er i virkeligheten, 690 00:37:25,380 --> 00:37:29,330 skape noe som kalles røye stjerne. 691 00:37:29,330 --> 00:37:34,470 Som alt er det er en peker til en streng eller til en rekke tegn. 692 00:37:34,470 --> 00:37:39,480 >> Og så i dette eksempel, hvis jeg var til inngang M-O-M måten 693 00:37:39,480 --> 00:37:49,350 at maskinen min ville oppbevare det er innenfor minne backslash null, ikke sant? 694 00:37:49,350 --> 00:37:53,180 De fire tegn, tegn, ville bli lagret et sted. 695 00:37:53,180 --> 00:37:59,290 >> Og så disse fire tegn, backslash null, 696 00:37:59,290 --> 00:38:01,275 lagres et annet sted, ikke sant? 697 00:38:01,275 --> 00:38:04,685 Jeg har ingen anelse om hvor adressene er, de er et sted i min datamaskin. 698 00:38:04,685 --> 00:38:07,080 Men jeg vet ikke nøyaktig hvor de er. 699 00:38:07,080 --> 00:38:10,170 >> Når jeg oppretter en streng s, alt som egentlig er 700 00:38:10,170 --> 00:38:15,550 er en peker til start av denne strengen. 701 00:38:15,550 --> 00:38:21,130 Og når jeg lage denne t-verdi, alt som er en peker til her. 702 00:38:21,130 --> 00:38:23,980 Og så når du prøver å likestille og sjekke 703 00:38:23,980 --> 00:38:27,710 for å se om s er lik lik til t, datamaskinen 704 00:38:27,710 --> 00:38:31,635 er egentlig bare å returnere til deg adressen til denne m 705 00:38:31,635 --> 00:38:33,390 og adressen til den m. 706 00:38:33,390 --> 00:38:36,230 Og fordi de er to- separate biter av data 707 00:38:36,230 --> 00:38:38,750 som er lagret i to forskjellige adresser i datamaskinen, 708 00:38:38,750 --> 00:38:41,750 datamaskinen er aldri kommer til å gjenkjenne dem som det samme. 709 00:38:41,750 --> 00:38:43,500 Er det noen som ønsker å gi en sjanse på det vi 710 00:38:43,500 --> 00:38:46,900 ville ha å gjøre hvis vi ønsket å korrigere dette, og ha en riktig kjørende program 711 00:38:46,900 --> 00:38:49,360 i stedet? 712 00:38:49,360 --> 00:38:52,070 Tenk at for et par sekunder. 713 00:38:52,070 --> 00:38:54,929 Hva må vi gjøre for å endre til få dette programmet fungerer 714 00:38:54,929 --> 00:38:56,220 slik vi ønsker det skal fungere? 715 00:38:56,220 --> 00:39:17,260 716 00:39:17,260 --> 00:39:18,918 >> Ja, ønsker å ta en stikke på det? 717 00:39:18,918 --> 00:39:24,082 >> PUBLIKUM: Kan vi prøve å dereference den pekeren og sjekke gjennom array? 718 00:39:24,082 --> 00:39:25,540 PROFESSOR: Det er én måte å gjøre det. 719 00:39:25,540 --> 00:39:27,880 Så, hva er navnet ditt igjen? 720 00:39:27,880 --> 00:39:29,010 Jeg beklager, minn meg. 721 00:39:29,010 --> 00:39:29,589 >> Zee: Zee. 722 00:39:29,589 --> 00:39:32,130 PROFESSOR: Ja, så hva Zee foreslo ville absolutt fungere. 723 00:39:32,130 --> 00:39:32,629 Høyre? 724 00:39:32,629 --> 00:39:35,730 Vi kunne dereference pekeren og faktisk gå og tilgang 725 00:39:35,730 --> 00:39:38,460 de fysiske data på innsiden av her. 726 00:39:38,460 --> 00:39:40,300 Og vi kan bare sammenligne hele skjermen. 727 00:39:40,300 --> 00:39:43,670 >> Vi kan si, OK, peker, gi meg hva som er inni her. 728 00:39:43,670 --> 00:39:44,960 Det ville returnere en meter. 729 00:39:44,960 --> 00:39:47,168 Og jeg vil si, peker, gi meg hva som er inni her. 730 00:39:47,168 --> 00:39:47,750 Returnere et m. 731 00:39:47,750 --> 00:39:48,410 Gjør de kampen? 732 00:39:48,410 --> 00:39:49,410 Ja. 733 00:39:49,410 --> 00:39:50,340 Da kan vi gå videre. 734 00:39:50,340 --> 00:39:54,240 >> Vi fortsette å sjekke hele to trenger hele veien opp til slutten 735 00:39:54,240 --> 00:39:56,635 og se om de er like, hvis alle verdiene er like. 736 00:39:56,635 --> 00:39:59,680 Og hvis alle verdiene er like, da vet vi strengene er sanne. 737 00:39:59,680 --> 00:40:01,600 Absolutt, det er hvordan vi ville gjøre det? 738 00:40:01,600 --> 00:40:03,930 >> Er det noen som forvirret på noe av dette? 739 00:40:03,930 --> 00:40:06,970 Hele konseptet med hvordan strenger er egentlig bare pekere, 740 00:40:06,970 --> 00:40:08,440 og hvordan de egentlig ikke eksisterer? 741 00:40:08,440 --> 00:40:10,480 Og hvorfor får vi feil liker måten vi får det? 742 00:40:10,480 --> 00:40:15,070 Fordi jeg garantere dere, pekere og streng tildeling og minne 743 00:40:15,070 --> 00:40:16,470 kommer til å komme opp. 744 00:40:16,470 --> 00:40:17,410 >> Yeah? 745 00:40:17,410 --> 00:40:21,072 >> PUBLIKUM: [uhørbart] dereference det, du bare sette en stjerne [uhørbart] 746 00:40:21,072 --> 00:40:21,780 PROFESSOR: Høyre. 747 00:40:21,780 --> 00:40:28,430 Så for å derererence en peker middel å gå til denne adressen på pekeren 748 00:40:28,430 --> 00:40:30,390 og oppnå dataene, den verdi der. 749 00:40:30,390 --> 00:40:32,700 Og måten å gjøre det på er stjerne pekeren. 750 00:40:32,700 --> 00:40:34,262 Ikke forveksle det. 751 00:40:34,262 --> 00:40:35,186 >> PUBLIKUM: [uhørlig]. 752 00:40:35,186 --> 00:40:35,852 >> PROFESSOR: Yeah. 753 00:40:35,852 --> 00:40:39,750 PUBLIKUM: Så du kan bare skrive hvis stjerne s lik likhets stjerne t. 754 00:40:39,750 --> 00:40:40,630 >> PROFESSOR: Vel, nei. 755 00:40:40,630 --> 00:40:40,960 Nei. 756 00:40:40,960 --> 00:40:41,640 >> PUBLIKUM: Det er ikke bra nok, ikke sant? 757 00:40:41,640 --> 00:40:43,760 >> PROFESSOR: Det er ikke fordi du er bare sjekke den første bokstaven. 758 00:40:43,760 --> 00:40:46,010 Er du sannsynligvis kommer til å trenger noen form for en løkke som 759 00:40:46,010 --> 00:40:49,055 gjentas gjennom hver enkelt karakter i begge strenger. 760 00:40:49,055 --> 00:40:49,837 Yeah. 761 00:40:49,837 --> 00:40:52,920 Så hvis du ønsket å bare sjekke for å se hvis de begynte med det samme, 762 00:40:52,920 --> 00:40:58,220 du kan gjøre hvis, stjerne s er lik stjerne t. 763 00:40:58,220 --> 00:41:01,300 Da vet du at minst de startet med samme tegn. 764 00:41:01,300 --> 00:41:01,952 >> Yeah? 765 00:41:01,952 --> 00:41:04,056 >> PUBLIKUM: Så veien du det ville være 766 00:41:04,056 --> 00:41:06,064 som en innebygd for loop eller peker? 767 00:41:06,064 --> 00:41:06,730 PROFESSOR: Yeah. 768 00:41:06,730 --> 00:41:08,170 Ganske mye bare en for loop. 769 00:41:08,170 --> 00:41:12,430 Husk, David i klassen nevnt gratis syntaktisk sukker? 770 00:41:12,430 --> 00:41:17,690 Og han hadde denne svært forvirrende ting av stjerne t 771 00:41:17,690 --> 00:41:22,030 pluss ett, der det ville integrere gjennom og den flytte pekeren? 772 00:41:22,030 --> 00:41:29,910 Jo enklere måte å gjøre Dette er bare av t i. 773 00:41:29,910 --> 00:41:31,090 >> Så det er bare en matrise. 774 00:41:31,090 --> 00:41:34,630 Den måten at du ville ha en for sløyfe som gikk fra null til i, der 775 00:41:34,630 --> 00:41:36,580 i er lengden av streng, kan du bare 776 00:41:36,580 --> 00:41:39,510 skrive at i stedet for å gjøre det Hele pekeren, referanse ting. 777 00:41:39,510 --> 00:41:43,510 Så disse tingene er nøyaktig tilsvarende i datamaskinen. 778 00:41:43,510 --> 00:41:45,905 >> Dere vil sannsynligvis ikke trenger å vite det, 779 00:41:45,905 --> 00:41:48,280 men det er godt å bare slags har i ryggen tankene dine. 780 00:41:48,280 --> 00:41:52,630 Bare vet at datamaskinen gjenkjenner ulike blokker av kode 781 00:41:52,630 --> 00:41:53,890 som det samme. 782 00:41:53,890 --> 00:41:57,510 Fordi dette er bare langt mer brukervennlig vennlig for oss å presentere det som det er 783 00:41:57,510 --> 00:41:58,150 en matrise. 784 00:41:58,150 --> 00:42:00,990 Det er bare enklere. 785 00:42:00,990 --> 00:42:02,719 >> PUBLIKUM: Så bruk strlen å like, get-- 786 00:42:02,719 --> 00:42:03,385 PROFESSOR: Yeah. 787 00:42:03,385 --> 00:42:03,926 PUBLIKUM: OK. 788 00:42:03,926 --> 00:42:05,940 PROFESSOR: Du kan bruke strlen eller, hvis du 789 00:42:05,940 --> 00:42:10,420 hadde ikke strlen du kan bare gjøre opp til du treffer backslash null for begge. 790 00:42:10,420 --> 00:42:11,568 Enten ville fungere. 791 00:42:11,568 --> 00:42:12,068 Yeah. 792 00:42:12,068 --> 00:42:14,871 793 00:42:14,871 --> 00:42:17,996 PUBLIKUM: Så det er å dereference hver enkelttegn om vi var faktisk 794 00:42:17,996 --> 00:42:21,044 skrive denne koden, vi bare kunne gjøre t brak jeg 795 00:42:21,044 --> 00:42:22,460 liker med stjernen foran den? 796 00:42:22,460 --> 00:42:27,700 >> PROFESSOR: Ja, tilsvarer tilsvarer s brakett i, og deretter fortsette å bevege seg i 797 00:42:27,700 --> 00:42:29,790 ned inntil du treffer slutten. 798 00:42:29,790 --> 00:42:31,286 Ja, det er det du vil gjøre. 799 00:42:31,286 --> 00:42:33,660 Og jeg vil faktisk ha en neste eksempel på når vi faktisk 800 00:42:33,660 --> 00:42:36,740 skrive strlen så dere vil kind av få å leke seg med den litt. 801 00:42:36,740 --> 00:42:43,567 >> Så er alle klare på bare minne, strenger, pekere, kvalitet adresser? 802 00:42:43,567 --> 00:42:46,650 Noen høyere nivå konsepter som du vil sikkert behov for å vite på quiz 803 00:42:46,650 --> 00:42:48,928 i morgen. 804 00:42:48,928 --> 00:42:49,904 >> Greit. 805 00:42:49,904 --> 00:42:50,404 God. 806 00:42:50,404 --> 00:42:54,824 807 00:42:54,824 --> 00:42:55,324 Jepp. 808 00:42:55,324 --> 00:42:58,770 809 00:42:58,770 --> 00:43:04,180 OK, så en ting som vi vil også be du, som vi gjør hvert år på en quiz, er, 810 00:43:04,180 --> 00:43:08,340 anta at du har glemt (som vi synes å glemme å gjøre årlig) 811 00:43:08,340 --> 00:43:10,810 der header fil strlen er deklarert. 812 00:43:10,810 --> 00:43:13,860 Og så må vi skrive det selv. 813 00:43:13,860 --> 00:43:16,350 >> Her er en liste over retningslinjer at vi kan presentere deg 814 00:43:16,350 --> 00:43:20,660 Gutta hvor du får til å anta at s strengen vil ikke være null. 815 00:43:20,660 --> 00:43:23,830 Du kan anta at s vil være avsluttet med en omvendt skråstrek null. 816 00:43:23,830 --> 00:43:26,670 Så du vet det er det det kommer til å slutte med. 817 00:43:26,670 --> 00:43:29,500 >> Og, for eksempel, at Lengden på Hallo ville være fem. 818 00:43:29,500 --> 00:43:32,890 Så du kan anta at hallo vil være fem, H-E-L-L-O. 819 00:43:32,890 --> 00:43:35,890 Du trenger ikke å anta at backside null står for lengden. 820 00:43:35,890 --> 00:43:39,720 821 00:43:39,720 --> 00:43:42,300 >> Denne siste ting her, gjør ikke bekymre heltall overløp. 822 00:43:42,300 --> 00:43:45,270 Er det noen som husker hva heltallsoverflyt er? 823 00:43:45,270 --> 00:43:48,041 >> PUBLIKUM: Går utover Lengden på [uhørbart]. 824 00:43:48,041 --> 00:43:50,740 >> PROFESSOR: Ja, kan du forklare litt, hva betyr det? 825 00:43:50,740 --> 00:43:55,330 >> PUBLIKUM: Så tror jeg det går tilbake til avkorting eksempel tidligere. 826 00:43:55,330 --> 00:43:58,380 Men hvis du har bare så mange tall som går utover det antall bits 827 00:43:58,380 --> 00:44:01,409 at du faktisk kan tildele den at det vil bare slags avskåret. 828 00:44:01,409 --> 00:44:04,242 PROFESSOR: Ja, så på en typisk datamaskin, hvor mange biter har vi? 829 00:44:04,242 --> 00:44:05,306 PUBLIKUM: 32? 830 00:44:05,306 --> 00:44:06,430 PROFESSOR: Ja, 32, høyre. 831 00:44:06,430 --> 00:44:10,030 Og så det er hva, fire milliarder kroner, to milliarder? 832 00:44:10,030 --> 00:44:13,579 Fire milliarder kroner, opp til fire milliarder positive heltall, ikke sant? 833 00:44:13,579 --> 00:44:15,370 To milliarder negative, to milliarder positive, 834 00:44:15,370 --> 00:44:16,900 avhenger av hvordan du ønsker å gjøre det. 835 00:44:16,900 --> 00:44:21,470 >> Og så i utgangspunktet kan vi ha nok heltall som kan gå opp 836 00:44:21,470 --> 00:44:25,800 til to til 31. minus en, ikke sant? 837 00:44:25,800 --> 00:44:27,980 Fordi når vi traff to til den 32., gjør vi ikke 838 00:44:27,980 --> 00:44:30,040 har så mye minne i datamaskinen vår. 839 00:44:30,040 --> 00:44:32,310 >> Og så, i teorien, jeg kunne komme opp med en rekke 840 00:44:32,310 --> 00:44:34,560 det vil si, som, to til 46te. 841 00:44:34,560 --> 00:44:38,040 Det er en stor-ass tall, men teoretisk du kunne. 842 00:44:38,040 --> 00:44:42,730 Og så heltallsoverflyt er hvis du prøver å skape et heltall som går utover hva 843 00:44:42,730 --> 00:44:44,790 datamaskinen er i stand til å lagre. 844 00:44:44,790 --> 00:44:46,590 >> Og så du fyrene for dette eksempelet har ikke 845 00:44:46,590 --> 00:44:51,330 å bekymre seg for oss å gi deg en gigantisk streng som er to til den 32. tegn 846 00:44:51,330 --> 00:44:51,830 lang. 847 00:44:51,830 --> 00:44:54,010 Det ville være virkelig mener. 848 00:44:54,010 --> 00:44:59,430 >> Greit, så jeg skal bare gi dere basestrukturen av dette. 849 00:44:59,430 --> 00:45:02,020 Du kommer til å skape en funksjon kalt int strlen der 850 00:45:02,020 --> 00:45:08,436 et pass i en char stjerne, eller streng, pekeren til strengen kalt s. 851 00:45:08,436 --> 00:45:10,820 >> Greit, alle kopierer det ned. 852 00:45:10,820 --> 00:45:13,550 853 00:45:13,550 --> 00:45:14,850 Kjølig. 854 00:45:14,850 --> 00:45:17,020 Oops-- annen måte. 855 00:45:17,020 --> 00:45:21,360 >> Så dette er typen som en hardere stykke problem, 856 00:45:21,360 --> 00:45:25,320 så jeg skal gi dere kanskje fem til seks minutter til slags idédugnad 857 00:45:25,320 --> 00:45:27,478 og skrive denne funksjonen ut. 858 00:45:27,478 --> 00:45:29,710 >> PUBLIKUM: Vi gjør ikke konto for [uhørbart], 859 00:45:29,710 --> 00:45:30,200 Vi trenger ikke å bruke heltall? 860 00:45:30,200 --> 00:45:31,241 >> PROFESSOR: Nei, det gjør du ikke. 861 00:45:31,241 --> 00:48:05,847 862 00:48:05,847 --> 00:48:06,930 Jeg skal gi dere et hint. 863 00:48:06,930 --> 00:48:12,325 En stund løkke kan være svært nyttig her. 864 00:48:12,325 --> 00:48:12,825 Yeah. 865 00:48:12,825 --> 00:48:44,995 866 00:48:44,995 --> 00:48:45,495 Her er 867 00:48:45,495 --> 00:48:45,995 sukkertøy. 868 00:48:45,995 --> 00:48:49,980 869 00:48:49,980 --> 00:48:53,410 Candy vil også være tilgjengelig for quiz, tror jeg. 870 00:48:53,410 --> 00:48:55,315 Så dere vil være alt sukret opp i morgen. 871 00:48:55,315 --> 00:49:01,110 872 00:49:01,110 --> 00:49:02,962 Kan I-- du fikk den. 873 00:49:02,962 --> 00:49:03,718 >> PUBLIKUM: OK. 874 00:49:03,718 --> 00:49:04,384 PROFESSOR: Yeah. 875 00:49:04,384 --> 00:49:10,550 876 00:49:10,550 --> 00:49:11,870 >> Kanskje 30 sekunder eller så. 877 00:49:11,870 --> 00:50:02,220 878 00:50:02,220 --> 00:50:07,340 >> Greit, hvis du er ikke gjort, ingen bekymringer. 879 00:50:07,340 --> 00:50:08,810 Vi vil gå gjennom dette sammen. 880 00:50:08,810 --> 00:50:09,310 OK. 881 00:50:09,310 --> 00:50:13,800 Så jeg kommer til å bare oppsettet på grunnstrukturen for denne funksjonen her. 882 00:50:13,800 --> 00:50:17,255 Int strlen. 883 00:50:17,255 --> 00:50:20,040 884 00:50:20,040 --> 00:50:23,460 Først, ikke vil at noen skal fortelle meg hva som int betyr? 885 00:50:23,460 --> 00:50:25,160 Vi må ha i denne funksjonen. 886 00:50:25,160 --> 00:50:26,709 >> PUBLIKUM: strlen [uhørbart]. 887 00:50:26,709 --> 00:50:27,500 PROFESSOR: Nettopp. 888 00:50:27,500 --> 00:50:31,140 Så uansett hva som skjer her inne, vi trenger å returnere et heltall. 889 00:50:31,140 --> 00:50:36,367 Og som angitt i den spec, ønsker vi å return-- 890 00:50:36,367 --> 00:50:37,700 Gå for det folkens, bare holde det gående. 891 00:50:37,700 --> 00:50:40,480 Det er alt bra. 892 00:50:40,480 --> 00:50:42,960 Spise alt slik at jeg ikke har å ta det tilbake, faktisk. 893 00:50:42,960 --> 00:50:46,022 894 00:50:46,022 --> 00:50:48,855 Int bare betyr at du er kommer til å være tilbake et heltall. 895 00:50:48,855 --> 00:50:55,350 896 00:50:55,350 --> 00:50:57,106 >> Hva er dette røye stjerne s? 897 00:50:57,106 --> 00:50:58,640 Hva betyr det? 898 00:50:58,640 --> 00:51:00,879 >> PUBLIKUM: Liker, hva som mottas i. 899 00:51:00,879 --> 00:51:01,670 PROFESSOR: Nettopp. 900 00:51:01,670 --> 00:51:04,142 Og hva er nesten det samme som røye stjerne? 901 00:51:04,142 --> 00:51:04,850 PUBLIKUM: String? 902 00:51:04,850 --> 00:51:05,641 PROFESSOR: Nettopp. 903 00:51:05,641 --> 00:51:09,080 Så alt vi gjør er å gi dette en peker til en streng. 904 00:51:09,080 --> 00:51:09,580 OK. 905 00:51:09,580 --> 00:51:12,860 906 00:51:12,860 --> 00:51:13,360 Kjølig. 907 00:51:13,360 --> 00:51:16,650 >> Du må heller ikke glemme, hvis vi glemmer for å gi deg disse beslagene, 908 00:51:16,650 --> 00:51:18,330 ikke glem å skrive dem selv. 909 00:51:18,330 --> 00:51:20,720 Fordi teoretisk, er koden feil hvis du glemmer å skrive dem. 910 00:51:20,720 --> 00:51:21,803 Bare alltid ta hensyn. 911 00:51:21,803 --> 00:51:23,750 Som, småting at du ikke legger merke 912 00:51:23,750 --> 00:51:26,917 når du programmerer på den bærbare datamaskinen, fordi den bærbare datamaskinen gjør det for deg? 913 00:51:26,917 --> 00:51:28,624 Ikke glem når du skriver for hånd. 914 00:51:28,624 --> 00:51:29,170 Yeah? 915 00:51:29,170 --> 00:51:30,954 >> PUBLIKUM: Men hvor feil? 916 00:51:30,954 --> 00:51:33,190 Liker, får vi hele problemet galt? 917 00:51:33,190 --> 00:51:34,190 >> PROFESSOR: Nei, nei. 918 00:51:34,190 --> 00:51:34,860 Ikke bekymre deg. 919 00:51:34,860 --> 00:51:39,270 Det er faktisk teoretisk mulig for deg å få full poeng på et spørsmål 920 00:51:39,270 --> 00:51:41,980 selv om koden din vilje aldri kjørt i det virkelige liv. 921 00:51:41,980 --> 00:51:46,052 Jeg foreslår at du ikke prøve å gjøre det skje. 922 00:51:46,052 --> 00:51:48,260 For eksempel, som om alt som er her er riktig, 923 00:51:48,260 --> 00:51:51,850 men du glemmer et kolon eller en brakett, koden vil faktisk ikke kjøre. 924 00:51:51,850 --> 00:51:53,740 Men vi kan være barmhjertig. 925 00:51:53,740 --> 00:51:54,394 >> Yeah? 926 00:51:54,394 --> 00:51:56,050 >> PUBLIKUM: Må du kommentere vår håndskrift? 927 00:51:56,050 --> 00:51:57,758 >> PROFESSOR: Nei, nei, nei bekymringer om at. 928 00:51:57,758 --> 00:51:58,440 Ingen kommenterer. 929 00:51:58,440 --> 00:51:59,400 Stil bør være god. 930 00:51:59,400 --> 00:52:01,470 Liker, ikke smush alt på én linje. 931 00:52:01,470 --> 00:52:04,580 Vi vil ikke være fornøyd med deg hvis du gjør det. 932 00:52:04,580 --> 00:52:07,250 >> Er det noen som ønsker å gi meg den første linjen? 933 00:52:07,250 --> 00:52:08,633 Hint, er det veldig enkelt. 934 00:52:08,633 --> 00:52:09,320 >> Yeah? 935 00:52:09,320 --> 00:52:11,920 >> PUBLIKUM: Int, n er lik null. 936 00:52:11,920 --> 00:52:13,734 Bare sette opp disken. 937 00:52:13,734 --> 00:52:15,900 PROFESSOR: Så vi ønsker noen liksom en teller, ikke sant? 938 00:52:15,900 --> 00:52:19,780 Jeg skal bare nevne det "teller" av hensyn til lesbarhet. 939 00:52:19,780 --> 00:52:21,265 Hva ønsker vi å sette den lik? 940 00:52:21,265 --> 00:52:21,890 >> PUBLIKUM: Zero. 941 00:52:21,890 --> 00:52:23,840 PROFESSOR: Jepp. 942 00:52:23,840 --> 00:52:24,340 Semikolon. 943 00:52:24,340 --> 00:52:26,250 Det er også veldig rare tegne semikolon. 944 00:52:26,250 --> 00:52:28,870 Bare praksis gjør det. 945 00:52:28,870 --> 00:52:31,990 >> Så vi ønsker å først ha en teller av typen int. 946 00:52:31,990 --> 00:52:35,360 Fordi vi ønsker å telle opp hvor mange tegn eller bokstaver er 947 00:52:35,360 --> 00:52:36,780 i denne strengen, ikke sant? 948 00:52:36,780 --> 00:52:38,330 Veldig enkel første skrittet. 949 00:52:38,330 --> 00:52:42,140 >> OK, kanskje litt mer komplisert nå, hvordan skal vi gjøre det? 950 00:52:42,140 --> 00:52:45,400 Er det noen som ønsker å gi meg linje med kode 951 00:52:45,400 --> 00:52:48,450 som kan være i stand til å hjelpe sløyfe gjennom hva dette er? 952 00:52:48,450 --> 00:52:54,540 953 00:52:54,540 --> 00:52:56,900 >> Ja, modig sjel i ryggen? 954 00:52:56,900 --> 00:53:06,832 >> PUBLIKUM: OK, så mens punkt stjernene, den ja, stjernen i s, 955 00:53:06,832 --> 00:53:09,465 ikke er lik null, og deretter gjøre noe? 956 00:53:09,465 --> 00:53:11,090 PROFESSOR: Det er veldig, veldig nær. 957 00:53:11,090 --> 00:53:11,835 Veldig nære. 958 00:53:11,835 --> 00:53:13,710 Så jeg kommer til å ta opp to ting med det. 959 00:53:13,710 --> 00:53:18,240 Først av alt, det er ikke akkurat null. 960 00:53:18,240 --> 00:53:20,110 Hva er dette? 961 00:53:20,110 --> 00:53:22,550 Det er null terminator, som er backslash null. 962 00:53:22,550 --> 00:53:24,960 Så de er forskjellige i forhold til hvordan de er lagret. 963 00:53:24,960 --> 00:53:26,270 Så du er veldig nære. 964 00:53:26,270 --> 00:53:30,330 >> Og for det andre, ønsker vi ikke å bare flytte pekeren. 965 00:53:30,330 --> 00:53:32,320 Vi ønsker å faktisk tilgang verdiene, ikke sant? 966 00:53:32,320 --> 00:53:34,050 Og så hvordan gjør vi det? 967 00:53:34,050 --> 00:53:34,550 Meget lett. 968 00:53:34,550 --> 00:53:36,841 Ikke tenk på pekere, tenker ikke på minner. 969 00:53:36,841 --> 00:53:38,525 Gå tilbake til uke to av dette kurset. 970 00:53:38,525 --> 00:53:39,555 >> PUBLIKUM: [uhørlig]. 971 00:53:39,555 --> 00:53:40,680 PROFESSOR: Per, husker du? 972 00:53:40,680 --> 00:53:41,400 Hva er strenger? 973 00:53:41,400 --> 00:53:42,650 Hvor er de lagret i minnet? 974 00:53:42,650 --> 00:53:43,300 >> PUBLIKUM: De er hevet. 975 00:53:43,300 --> 00:53:43,810 >> PROFESSOR: De er hevet. 976 00:53:43,810 --> 00:53:45,550 Så hvordan skal vi få tilgang hvert tegn inne? 977 00:53:45,550 --> 00:53:46,466 >> PUBLIKUM: [uhørlig]. 978 00:53:46,466 --> 00:53:47,530 PROFESSOR: Nettopp. 979 00:53:47,530 --> 00:53:53,195 Så while-- hva som foregår inni her? 980 00:53:53,195 --> 00:53:54,940 S av - 981 00:53:54,940 --> 00:53:55,920 >> PUBLIKUM: I. 982 00:53:55,920 --> 00:53:58,216 >> PROFESSOR: Åh, jeg eksisterer ikke, gjør det vel? 983 00:53:58,216 --> 00:53:59,620 >> PUBLIKUM: Å, telle? 984 00:53:59,620 --> 00:54:01,640 >> PROFESSOR: Vi kan bare bruke teller, kan vi ikke? 985 00:54:01,640 --> 00:54:03,050 >> PUBLIKUM: Beklager, jeg kalte det i. 986 00:54:03,050 --> 00:54:04,341 >> PROFESSOR: Ja, det er alt bra. 987 00:54:04,341 --> 00:54:06,710 988 00:54:06,710 --> 00:54:10,760 Vi har en variabel opp her som er allerede blitt erklært som vår teller. 989 00:54:10,760 --> 00:54:13,650 Så hvorfor ikke vi bare bruke den å gå gjennom mens loop? 990 00:54:13,650 --> 00:54:15,230 Gir det mening? 991 00:54:15,230 --> 00:54:20,864 >> Så mens s av count-- er det noen som vil ha å gi meg hva som skjer etter her? 992 00:54:20,864 --> 00:54:22,030 PUBLIKUM: Det er ikke lik. 993 00:54:22,030 --> 00:54:23,405 PROFESSOR: Har ikke like, ikke sant? 994 00:54:23,405 --> 00:54:26,200 Det er bang lik, utropstegn er lik, 995 00:54:26,200 --> 00:54:28,500 hva dere ønsker å kaller det ikke equal-- 996 00:54:28,500 --> 00:54:29,496 >> PUBLIKUM: [uhørlig]. 997 00:54:29,496 --> 00:54:30,990 >> PROFESSOR: Yeah. 998 00:54:30,990 --> 00:54:37,110 Husk enkelt sitat er for en røye, anførselstegn er for en streng. 999 00:54:37,110 --> 00:54:38,630 Vær forsiktig når du bruker dem. 1000 00:54:38,630 --> 00:54:42,430 Så når vi ser gjennom rekken, det siste tegnet, 1001 00:54:42,430 --> 00:54:46,420 vi vet at vi ikke vil ha det å være backslash null. 1002 00:54:46,420 --> 00:54:47,340 >> Så mens. 1003 00:54:47,340 --> 00:54:48,840 Vi er ikke ved slutten av strengen. 1004 00:54:48,840 --> 00:54:52,335 Hva ønsker vi å gjøre inne? 1005 00:54:52,335 --> 00:54:55,269 >> PUBLIKUM: Vi ønsker å legge til teller så det teller pluss pluss? 1006 00:54:55,269 --> 00:54:56,060 PROFESSOR: Nettopp. 1007 00:54:56,060 --> 00:55:03,064 Så her vi kommer til å gjøre telle, telle pluss pluss. 1008 00:55:03,064 --> 00:55:03,980 Mangler en mer linje. 1009 00:55:03,980 --> 00:55:05,090 Vi er nesten der. 1010 00:55:05,090 --> 00:55:07,398 Hva skal vi glemme å gjøre? 1011 00:55:07,398 --> 00:55:08,770 >> PUBLIKUM: Retur null? 1012 00:55:08,770 --> 00:55:10,820 >> PROFESSOR: Du ønsker å returnere null? 1013 00:55:10,820 --> 00:55:12,962 >> PUBLIKUM: Nei, tilbake til strlen. 1014 00:55:12,962 --> 00:55:13,511 Vente. 1015 00:55:13,511 --> 00:55:14,760 PROFESSOR: Hvilken er lagret i? 1016 00:55:14,760 --> 00:55:15,090 PUBLIKUM: Tell. 1017 00:55:15,090 --> 00:55:15,589 Telle. 1018 00:55:15,589 --> 00:55:17,150 PROFESSOR: Nettopp. 1019 00:55:17,150 --> 00:55:20,760 Så her vi kommer til å returnere teller. 1020 00:55:20,760 --> 00:55:23,450 1021 00:55:23,450 --> 00:55:25,380 >> Fordi hva vi er gjør her ultimately-- 1022 00:55:25,380 --> 00:55:29,780 vi har en teller variabel som er kommer til å øke gjennom vår streng. 1023 00:55:29,780 --> 00:55:33,050 Vi kommer til å holde det gående, holde går, rundt og rundt i denne sløyfen. 1024 00:55:33,050 --> 00:55:37,700 Og mens vi er ikke på slutten av denne streng, som er null terminator. 1025 00:55:37,700 --> 00:55:40,410 >> Og hver gang vi går gjennom det, vi legger til vår teller. 1026 00:55:40,410 --> 00:55:42,640 Og vi kommer videre sammen i denne matrisen. 1027 00:55:42,640 --> 00:55:44,880 Og på slutten, når vi treffer null terminator, 1028 00:55:44,880 --> 00:55:48,469 vi vet, oh, kan vi bryte, returnere teller. 1029 00:55:48,469 --> 00:55:49,260 Vi har vår strlen. 1030 00:55:49,260 --> 00:55:52,280 1031 00:55:52,280 --> 00:55:56,400 >> Har alle får hvordan dette ble gjennomført? 1032 00:55:56,400 --> 00:55:58,830 Mens loops-- Jeg vet at vi ikke har gjort for mye med dem, 1033 00:55:58,830 --> 00:56:01,240 men de er vanligvis veldig, veldig nyttig hvis du 1034 00:56:01,240 --> 00:56:05,390 vet ikke hva du stoppe betingelse nødvendigvis må være. 1035 00:56:05,390 --> 00:56:06,220 >> Spørsmål? 1036 00:56:06,220 --> 00:56:10,080 >> PUBLIKUM: Kan vi skrive null på mens tilstanden? 1037 00:56:10,080 --> 00:56:10,940 >> PROFESSOR: Mens? 1038 00:56:10,940 --> 00:56:15,304 Ja, så i dette problemet hadde jeg deg Gutta anta at s ikke vil være null. 1039 00:56:15,304 --> 00:56:17,220 Fordi husk, teoretisk, hvis jeg ga deg 1040 00:56:17,220 --> 00:56:21,180 en peker som var for stor for minne, det vil gi deg null, ikke sant? 1041 00:56:21,180 --> 00:56:23,770 Det er det drifts system ville gjøre. 1042 00:56:23,770 --> 00:56:26,960 >> Så hvis jeg ikke fortelle deg å anta s vil være null, må du sjekke. 1043 00:56:26,960 --> 00:56:32,050 Så her oppe, ville du gjøre, hvis s lik lik null, returnere en. 1044 00:56:32,050 --> 00:56:33,028 Noe sånt. 1045 00:56:33,028 --> 00:56:34,153 PUBLIKUM: [uhørlig] null. 1046 00:56:34,153 --> 00:56:37,287 1047 00:56:37,287 --> 00:56:39,370 PROFESSOR: OK, jeg skal fortelle du hvorfor vi ikke kan gjøre det. 1048 00:56:39,370 --> 00:56:43,357 Fordi huske i minnet, til høyre, her. 1049 00:56:43,357 --> 00:56:43,940 Vi vil gå her. 1050 00:56:43,940 --> 00:56:49,940 1051 00:56:49,940 --> 00:56:54,090 >> Du har fått gigantiske blokker minne alle med nett 1052 00:56:54,090 --> 00:56:56,680 som lagrer ulike verdier, ikke sant? 1053 00:56:56,680 --> 00:57:00,110 Og så alt en streng er-- for eksempel, hvis vi skal innspill hallo, 1054 00:57:00,110 --> 00:57:05,490 ville det være H-E-L-L-O backslash null, ikke sant? 1055 00:57:05,490 --> 00:57:09,570 Og så hvem vet, som tilfeldig ting som er her etter det. 1056 00:57:09,570 --> 00:57:11,220 >> Vi vet ikke egentlig vet hva som er der. 1057 00:57:11,220 --> 00:57:13,350 Og så hvis du skulle gjøre i stedet for omvendt skråstrek null, 1058 00:57:13,350 --> 00:57:15,590 null, kan det ikke være null. 1059 00:57:15,590 --> 00:57:17,680 Fordi det bare kan bety noen tilfeldige andre ting 1060 00:57:17,680 --> 00:57:19,270 som ikke hører hjemme i din streng. 1061 00:57:19,270 --> 00:57:23,219 Og så den måten at vi alltid vet at en streng ender er med en omvendt skråstrek null. 1062 00:57:23,219 --> 00:57:25,760 Og så det er alltid hvordan vi sjekk for å se slutten på en streng. 1063 00:57:25,760 --> 00:57:30,820 >> Null, er alt som betyr at hvis du har en ikke-eksisterende pekeren, først av alt, 1064 00:57:30,820 --> 00:57:36,160 eller hvis hukommelsen er bare så stort at du kan ikke returnere den, så det ville være null. 1065 00:57:36,160 --> 00:57:40,150 Så vær veldig forsiktig når differensiere forskjellen mellom null 1066 00:57:40,150 --> 00:57:42,130 og backslash null. 1067 00:57:42,130 --> 00:57:43,670 Yeah. 1068 00:57:43,670 --> 00:57:46,886 >> Alle OK med dette? 1069 00:57:46,886 --> 00:57:48,150 OK. 1070 00:57:48,150 --> 00:57:50,440 >> Så jeg måtte dere skrive ut strlen. 1071 00:57:50,440 --> 00:57:53,790 Feasibly vi kan også be deg skrive ut A til jeg, husk at "Atwoa" 1072 00:57:53,790 --> 00:57:55,400 eller hva dere vil kalle det? 1073 00:57:55,400 --> 00:57:58,010 Som funksjon i Vigenère og Caesar, som 1074 00:57:58,010 --> 00:58:00,900 konverterer et Ascii verdien til et tall? 1075 00:58:00,900 --> 00:58:04,360 Det har også kommet opp på tidligere quizer av funksjonene vi har bedt deg om å skrive. 1076 00:58:04,360 --> 00:58:08,280 >> Ganske mye noen funksjon at du har brukt, og er 1077 00:58:08,280 --> 00:58:11,660 veldig lett å skrive selv, sensorer liker er lavere, 1078 00:58:11,660 --> 00:58:14,620 er øvre, lavere, til øvre. 1079 00:58:14,620 --> 00:58:17,964 Funksjoner som ville konvertere en string fra små bokstaver til store bokstaver. 1080 00:58:17,964 --> 00:58:19,380 Vi vet alle hvordan du gjør det, ikke sant? 1081 00:58:19,380 --> 00:58:21,100 Det er ganske enkelt. 1082 00:58:21,100 --> 00:58:24,770 Vil bare være sikker på at du can-- det er den samme tankeprosessen. 1083 00:58:24,770 --> 00:58:26,940 Du bare iterere gjennom og du slår ting. 1084 00:58:26,940 --> 00:58:30,190 Du enten telle eller når du slår ting annerledes. 1085 00:58:30,190 --> 00:58:32,280 >> Jeg ville suggest-- jeg vet ikke om vi kommer 1086 00:58:32,280 --> 00:58:39,080 å be deg om å huske hva hovedstaden A eller kapital Z, eller små bokstaver A eller små bokstaver 1087 00:58:39,080 --> 00:58:42,640 z er i Ascii, men jeg vil foreslå kanskje skrive det ned i tilfelle 1088 00:58:42,640 --> 00:58:44,124 vi gjør. 1089 00:58:44,124 --> 00:58:45,540 Bare så dere har en referanse. 1090 00:58:45,540 --> 00:58:47,180 Som store bokstaver A er, hva, 197? 1091 00:58:47,180 --> 00:58:51,320 Og så små bokstaver er som 50 noe. 1092 00:58:51,320 --> 00:58:52,492 65, ja, der du går. 1093 00:58:52,492 --> 00:58:54,950 Så bare ganske mye vet Forskjellen mellom dem er 32. 1094 00:58:54,950 --> 00:58:57,670 Det er ganske viktig. 1095 00:58:57,670 --> 00:58:58,170 Yeah. 1096 00:58:58,170 --> 00:59:01,445 Er jeg god på dette? 1097 00:59:01,445 --> 00:59:01,945 OK. 1098 00:59:01,945 --> 00:59:03,109 >> PUBLIKUM: Vi kunne teoretisk skrive noen 1099 00:59:03,109 --> 00:59:04,410 av disse ned så vel på vår little-- 1100 00:59:04,410 --> 00:59:07,035 >> PROFESSOR: Du teoretisk bare kunne kopiere funksjon ned. 1101 00:59:07,035 --> 00:59:08,482 Det er sant. 1102 00:59:08,482 --> 00:59:11,080 >> PUBLIKUM: Ikke [uhørbart]. 1103 00:59:11,080 --> 00:59:12,720 >> PROFESSOR: Dere har et ark. 1104 00:59:12,720 --> 00:59:14,194 Dere har et notat ark. 1105 00:59:14,194 --> 00:59:14,860 Du kan skrive det. 1106 00:59:14,860 --> 00:59:15,490 Du kan skrive det. 1107 00:59:15,490 --> 00:59:17,031 Du kan gjøre hva du vil med den. 1108 00:59:17,031 --> 00:59:18,530 Yeah. 1109 00:59:18,530 --> 00:59:21,406 Så teoretisk sett, hvis ønsker du å gå for. 1110 00:59:21,406 --> 00:59:23,338 >> PUBLIKUM: [uhørbart] men vi har egentlig ikke 1111 00:59:23,338 --> 00:59:25,994 nødvendigvis trenger å huske verdien, kan vi bare 1112 00:59:25,994 --> 00:59:28,914 bruke til øvre eller lavere funksjon, ikke sant? 1113 00:59:28,914 --> 00:59:29,580 PROFESSOR: Yeah. 1114 00:59:29,580 --> 00:59:32,740 Men hvis vi ga deg et spørsmål som sier skrive til øvre, 1115 00:59:32,740 --> 00:59:34,350 så ville du trenger å skrive det. 1116 00:59:34,350 --> 00:59:38,150 Så dere kan anta at du gutta har tilgang til alle funksjoner, 1117 00:59:38,150 --> 00:59:41,523 men hvis du ønsker å bruke til øvre eller til lavere, hva har du også til å gjøre? 1118 00:59:41,523 --> 00:59:43,840 >> PUBLIKUM: [uhørbart] bruke CS50 [uhørbart] 1119 00:59:43,840 --> 00:59:44,840 >> PROFESSOR: Er det CS50.h? 1120 00:59:44,840 --> 00:59:47,320 1121 00:59:47,320 --> 00:59:48,310 Vær forsiktig der. 1122 00:59:48,310 --> 00:59:50,640 >> Så til videregående, for å senke, er øvre, er lavere, 1123 00:59:50,640 --> 00:59:52,990 funksjoner som involverer streng manipulasjon er 1124 00:59:52,990 --> 00:59:55,490 alle innen enten Ascii eller innenfor matematikk bibliotek 1125 00:59:55,490 --> 00:59:57,350 eller i strengen biblioteket. 1126 00:59:57,350 --> 01:00:00,290 Så hvis dere bruker dem funksjoner, være nøye med å huske 1127 01:00:00,290 --> 01:00:01,451 å inkludere at spissen. 1128 01:00:01,451 --> 01:00:03,950 Så kanskje også noe du ønsker å inkludere i ark, 1129 01:00:03,950 --> 01:00:04,892 hva er overskriften? 1130 01:00:04,892 --> 01:00:06,600 Hva er bibliotekene du har brukt? 1131 01:00:06,600 --> 01:00:08,550 Hvilke funksjoner som er inni disse bibliotekene? 1132 01:00:08,550 --> 01:00:09,230 Det er viktig. 1133 01:00:09,230 --> 01:00:10,420 >> Yeah? 1134 01:00:10,420 --> 01:00:12,570 >> PUBLIKUM: Kunne vi bare cop ut og gjøre hashtag 1135 01:00:12,570 --> 01:00:14,955 gjennom absolutt hver bokstav vi noensinne 1136 01:00:14,955 --> 01:00:17,340 sett som på alle spørsmålene? 1137 01:00:17,340 --> 01:00:18,320 >> PROFESSOR: Du kunne. 1138 01:00:18,320 --> 01:00:20,361 Jeg vet ikke hvor glad vi kommer til å være å gradere 1139 01:00:20,361 --> 01:00:25,090 at quiz når hvert stykke kode er dobbelt så lang som den trenger å være. 1140 01:00:25,090 --> 01:00:27,200 Jeg vet ikke, vi kan ta av et poeng for stil. 1141 01:00:27,200 --> 01:00:28,790 Men teoretisk din kode ville være riktig. 1142 01:00:28,790 --> 01:00:30,915 Dere kunne cop ut og bare inkluderer alt. 1143 01:00:30,915 --> 01:00:32,044 Det er fint også, ja. 1144 01:00:32,044 --> 01:00:32,960 PUBLIKUM: [uhørlig]. 1145 01:00:32,960 --> 01:00:33,270 PROFESSOR: Yeah. 1146 01:00:33,270 --> 01:00:34,900 Jeg foreslår at du ikke gjør det selv. 1147 01:00:34,900 --> 01:00:35,505 Yeah. 1148 01:00:35,505 --> 01:00:36,130 PUBLIKUM: Cool. 1149 01:00:36,130 --> 01:00:36,620 PROFESSOR: Godt spørsmål. 1150 01:00:36,620 --> 01:00:37,480 PUBLIKUM: Så, i verste fall. 1151 01:00:37,480 --> 01:00:38,563 PROFESSOR: The worst case. 1152 01:00:38,563 --> 01:00:40,350 Hvis du helt glemmer, du kunne gjøre det. 1153 01:00:40,350 --> 01:00:40,850 Yeah. 1154 01:00:40,850 --> 01:00:43,870 1155 01:00:43,870 --> 01:00:45,400 >> Jepp, er kode rett der. 1156 01:00:45,400 --> 01:00:49,176 Jeg brukte n stedet for telling, men du vet, hva flyter båten din. 1157 01:00:49,176 --> 01:00:51,092 PUBLIKUM: Vent, så vi ville ikke ha å hashtag 1158 01:00:51,092 --> 01:00:53,460 inkluderer fordi vi er starter på int? 1159 01:00:53,460 --> 01:00:56,150 1160 01:00:56,150 --> 01:00:59,924 >> PROFESSOR: Ja, jeg bare antok at vi ble bedt om å skrive funksjonen. 1161 01:00:59,924 --> 01:01:02,340 Hvis du ønsket å være sikker, du trolig kunne sette den der. 1162 01:01:02,340 --> 01:01:05,650 Men jeg bare ikke bry, ja. 1163 01:01:05,650 --> 01:01:09,919 >> Jeg vet ikke engang om du trenger noen bibliotek for dette. 1164 01:01:09,919 --> 01:01:12,710 Fordi du virkelig ikke ut ut noe eller noe, ikke sant? 1165 01:01:12,710 --> 01:01:16,500 1166 01:01:16,500 --> 01:01:19,568 Ja, jeg vet ikke om du trenger et bibliotek. 1167 01:01:19,568 --> 01:01:22,400 >> OK. 1168 01:01:22,400 --> 01:01:26,020 Dette er også litt mer langs linjene minne manipulasjon. 1169 01:01:26,020 --> 01:01:27,400 Denne typen litt vanskelig. 1170 01:01:27,400 --> 01:01:28,960 Tenk på dette. 1171 01:01:28,960 --> 01:01:30,580 Du har en funksjon som heter func. 1172 01:01:30,580 --> 01:01:33,570 Jeg kunne ha kalt det uansett, men jeg velger å kalle det func. 1173 01:01:33,570 --> 01:01:36,000 Jeg har det ovenfor min viktigste. 1174 01:01:36,000 --> 01:01:39,790 Husk at du ønsker å ha en funksjon etter din viktigste, 1175 01:01:39,790 --> 01:01:42,370 du vil være sikker på at du omfatter prototypen på toppen. 1176 01:01:42,370 --> 01:01:45,750 >> Men i dette tilfellet var det så korte at jeg følte at jeg kunne bare 1177 01:01:45,750 --> 01:01:47,260 inkludere den oppå den viktigste. 1178 01:01:47,260 --> 01:01:51,170 Jeg trenger ikke å ha prototypen, fordi det er allerede skrevet ovenfor. 1179 01:01:51,170 --> 01:01:55,430 Så alt jeg gjør i min hovedfunksjon skaper heltall x er lik 10. 1180 01:01:55,430 --> 01:02:00,490 Jeg ringer min func funksjon, og deretter skrive opp noe. 1181 01:02:00,490 --> 01:02:02,840 >> Og så er det faktisk hva func gjør. 1182 01:02:02,840 --> 01:02:04,340 Dere ønsker å tenke gjennom dette. 1183 01:02:04,340 --> 01:02:05,423 Fordi det er litt vanskelig. 1184 01:02:05,423 --> 01:02:07,220 Det er veldig, veldig vanskelig, faktisk. 1185 01:02:07,220 --> 01:02:09,549 Tenk gjennom hva dette Programmet vil være gi ut. 1186 01:02:09,549 --> 01:02:10,840 Jeg skal gi dere to minutter. 1187 01:02:10,840 --> 01:03:36,660 1188 01:03:36,660 --> 01:03:37,891 >> Gode ​​diskusjoner? 1189 01:03:37,891 --> 01:03:38,853 >> PUBLIKUM: Yeah. 1190 01:03:38,853 --> 01:03:39,815 >> PROFESSOR: Yeah. 1191 01:03:39,815 --> 01:03:42,220 Greit, så dette er vanskelig for en grunn. 1192 01:03:42,220 --> 01:03:44,845 Og dette er grunnen til at jeg ønsket å bringe dette til alles oppmerksomhet. 1193 01:03:44,845 --> 01:03:47,870 1194 01:03:47,870 --> 01:03:51,147 Er det noen som ønsker å gi meg et forslag, et forsøk? 1195 01:03:51,147 --> 01:03:52,230 Hva ville denne skrive ut? 1196 01:03:52,230 --> 01:03:53,930 Helt greit hvis du tar feil. 1197 01:03:53,930 --> 01:03:55,619 Yeah? 1198 01:03:55,619 --> 01:03:59,483 >> PUBLIKUM: Jeg tror det er 100 og deretter 10 på to separate linjer. 1199 01:03:59,483 --> 01:04:00,940 >> PROFESSOR: Og en 10? 1200 01:04:00,940 --> 01:04:03,154 Er det noen som har andre gjetninger? 1201 01:04:03,154 --> 01:04:04,150 Yeah? 1202 01:04:04,150 --> 01:04:09,040 >> PUBLIKUM: Kanskje bare 10 fordi func er ikke tilbake noe? 1203 01:04:09,040 --> 01:04:11,610 >> PROFESSOR: OK, så vi har gjetning nummer én 1204 01:04:11,610 --> 01:04:14,990 er at gjetning nummer to er bare kommer til å skrive ut 10. 1205 01:04:14,990 --> 01:04:17,623 Er det noen som har andre gjetninger? 1206 01:04:17,623 --> 01:04:19,654 OK. 1207 01:04:19,654 --> 01:04:21,070 Så la oss gå gjennom dette, ikke sant? 1208 01:04:21,070 --> 01:04:23,903 Når du får et stykke kode, ikke bare se på det og være like, 1209 01:04:23,903 --> 01:04:25,060 ah, det er så mye ting! 1210 01:04:25,060 --> 01:04:26,460 Jeg er så forvirret! 1211 01:04:26,460 --> 01:04:28,220 Liker, roe deg ned. 1212 01:04:28,220 --> 01:04:31,602 Bare vet at du bare kunne se gjennom koden linje for linje. 1213 01:04:31,602 --> 01:04:32,310 Det er alt det er. 1214 01:04:32,310 --> 01:04:33,840 Det er som å lese en bok. 1215 01:04:33,840 --> 01:04:38,000 >> Så med noen funksjon, vi starter alltid på hoved. 1216 01:04:38,000 --> 01:04:40,860 Så vi kommer til å starter på int main ugyldig, 1217 01:04:40,860 --> 01:04:43,010 selv programmets allerede kjørt, ikke sant? 1218 01:04:43,010 --> 01:04:45,070 Start med i hoved ugyldig. 1219 01:04:45,070 --> 01:04:48,030 Int x lik 10. 1220 01:04:48,030 --> 01:04:50,400 >> Så jeg kommer til å slette denne. 1221 01:04:50,400 --> 01:04:55,179 1222 01:04:55,179 --> 01:04:58,470 Jeg kommer til å trekke minnet bare så du Gutta kan slags se hva som skjer. 1223 01:04:58,470 --> 01:05:02,190 >> Husk ned her vi har vår stack? 1224 01:05:02,190 --> 01:05:05,810 Her oppe har vi vår heap et sted her oppe. 1225 01:05:05,810 --> 01:05:07,470 Stack vokser opp, ikke sant? 1226 01:05:07,470 --> 01:05:10,150 Og innen stabelen, har du lysnettet funksjon samt 1227 01:05:10,150 --> 01:05:12,230 alle nett lokale variabler. 1228 01:05:12,230 --> 01:05:14,310 >> Så her, int x lik 10. 1229 01:05:14,310 --> 01:05:17,670 Innenfor vår viktigste funksjon er vi å skape en variabel kalt x. 1230 01:05:17,670 --> 01:05:20,590 Vi innstilling som lik 10. 1231 01:05:20,590 --> 01:05:24,200 Her har du noen x, og du er innstilling som lik 10, ikke sant, 1232 01:05:24,200 --> 01:05:25,400 innenfor hoved. 1233 01:05:25,400 --> 01:05:27,430 Alle gode? 1234 01:05:27,430 --> 01:05:28,070 >> Funksjon. 1235 01:05:28,070 --> 01:05:30,330 Så nå, i vår hoved funksjon, vi kaller 1236 01:05:30,330 --> 01:05:31,810 funksjonen vi har skrevet ovenfor. 1237 01:05:31,810 --> 01:05:34,550 Så vi nå går inn i andre funksjonen. 1238 01:05:34,550 --> 01:05:40,120 Vi kommer til å lage en annen variabel int x er lik 100. 1239 01:05:40,120 --> 01:05:42,410 Hva skjer her på stakken? 1240 01:05:42,410 --> 01:05:46,980 Hva skjer når du kaller en funksjon som skaper nye variabler? 1241 01:05:46,980 --> 01:05:50,038 Hva skjer her på stakken? 1242 01:05:50,038 --> 01:05:52,134 >> PUBLIKUM: [uhørbart] hauger på toppen? 1243 01:05:52,134 --> 01:05:52,800 PROFESSOR: Yeah. 1244 01:05:52,800 --> 01:05:54,050 Slik at det faktisk skaper en kopi. 1245 01:05:54,050 --> 01:05:56,560 1246 01:05:56,560 --> 01:05:57,740 Og den slags hauger på toppen. 1247 01:05:57,740 --> 01:06:00,700 Tenk på stack-- en stabel av bøker, en stabel med noe. 1248 01:06:00,700 --> 01:06:06,520 Hauger på toppen, først i siste ut, sist inn, først ut. 1249 01:06:06,520 --> 01:06:08,471 >> Så det kommer til å skape en x her. 1250 01:06:08,471 --> 01:06:12,080 1251 01:06:12,080 --> 01:06:14,450 >> Det kommer til å ha alle funcs variabler. 1252 01:06:14,450 --> 01:06:14,950 Flott. 1253 01:06:14,950 --> 01:06:20,980 Så nå har vi to forskjellige x-er som representerer to svært forskjellige ting. 1254 01:06:20,980 --> 01:06:24,470 Vi så kommer til å skrive ut ut heltall av x. 1255 01:06:24,470 --> 01:06:26,430 Så la oss skrive ut 100, ikke sant? 1256 01:06:26,430 --> 01:06:29,389 Fordi her er det 100. 1257 01:06:29,389 --> 01:06:31,680 Så det er det første at det kommer til å skrive ut. 1258 01:06:31,680 --> 01:06:35,710 Ettersom denne funksjonen returnerer ingenting, nå som funksjon, den linjen i hoved 1259 01:06:35,710 --> 01:06:37,070 er ferdig. 1260 01:06:37,070 --> 01:06:39,160 Alle bra med meg så langt? 1261 01:06:39,160 --> 01:06:43,034 >> Så vi er nå gjennom to ut av tre linjer av våre viktigste funksjon. 1262 01:06:43,034 --> 01:06:44,450 Nå skal vi til den tredje linjen. 1263 01:06:44,450 --> 01:06:46,350 Vi kommer til å printf. 1264 01:06:46,350 --> 01:06:48,222 Hva er dette x innenfor hoved? 1265 01:06:48,222 --> 01:06:49,263 Hva betyr det representerer? 1266 01:06:49,263 --> 01:06:52,720 1267 01:06:52,720 --> 01:06:54,280 >> Hvilken verdi er x nå? 1268 01:06:54,280 --> 01:06:55,220 >> PUBLIKUM: 100. 1269 01:06:55,220 --> 01:06:56,799 >> PROFESSOR: Det er 100? 1270 01:06:56,799 --> 01:06:57,590 PUBLIKUM: Fortsatt 10. 1271 01:06:57,590 --> 01:06:58,878 PROFESSOR: Fortsatt 10. 1272 01:06:58,878 --> 01:07:00,870 Yeah. 1273 01:07:00,870 --> 01:07:06,810 Fordi husk, innen vår func, x er lik 100. 1274 01:07:06,810 --> 01:07:09,690 Men hvis vi går tilbake tilbake til vår viktigste funksjon, 1275 01:07:09,690 --> 01:07:12,440 det variable er lagret i en annet sted på stacken. 1276 01:07:12,440 --> 01:07:16,250 >> Så nå må vi gå tilbake til Hoved stabelen, nett lokale variabler. 1277 01:07:16,250 --> 01:07:18,460 Og her x er lik 10. 1278 01:07:18,460 --> 01:07:20,300 Og så vi kommer til å skrive ut 10. 1279 01:07:20,300 --> 01:07:22,530 >> Så hun var helt rett. 1280 01:07:22,530 --> 01:07:25,053 Vi kommer til å ha den produksjon på 100 og 10. 1281 01:07:25,053 --> 01:07:25,553 Yeah? 1282 01:07:25,553 --> 01:07:28,700 PUBLIKUM: Når du malloc, er det haug eller stabel som er [uhørbart]? 1283 01:07:28,700 --> 01:07:31,950 PROFESSOR: Når du malloc, du tar minne fra haugen 1284 01:07:31,950 --> 01:07:32,830 og fordele den. 1285 01:07:32,830 --> 01:07:34,950 Slik at du ikke trenger å rote med noe av dette. 1286 01:07:34,950 --> 01:07:38,100 Så jeg antar det større takeaway her er noe som kalles omfang. 1287 01:07:38,100 --> 01:07:39,650 >> For de av dere som var på gjennomgangen økten i går kveld, 1288 01:07:39,650 --> 01:07:41,080 vi snakket kort om dette. 1289 01:07:41,080 --> 01:07:45,380 Omfang definerer hvordan og når variabler eksisterer. 1290 01:07:45,380 --> 01:07:48,050 Eller innenfor hvilke rammer gjøre dine variabler eksisterer. 1291 01:07:48,050 --> 01:07:51,690 >> Ganske mye tommelfingerregelen generelt er, din variables-- hvis du oppretter dem 1292 01:07:51,690 --> 01:07:56,660 inne krøllete braces-- de eksisterer bare inne disse klammeparentes. 1293 01:07:56,660 --> 01:08:00,312 >> Så for eksempel i vår funksjon func, ser du de to tannregulering. 1294 01:08:00,312 --> 01:08:02,020 Hvis du oppretter noe på innsiden av det, 1295 01:08:02,020 --> 01:08:06,500 sjansene er alt du gjør er å skape en stabel og lagre det der. 1296 01:08:06,500 --> 01:08:07,430 Samme i hoved. 1297 01:08:07,430 --> 01:08:09,950 Det er bare lagret inne i hoved. 1298 01:08:09,950 --> 01:08:13,560 >> Du ønsker også å være veldig, veldig forsiktig her. 1299 01:08:13,560 --> 01:08:18,310 Fordi omfanget låner også seg til forskjellige eksempler. 1300 01:08:18,310 --> 01:08:25,950 Så for eksempel en for loop, for int i lik 0. 1301 01:08:25,950 --> 01:08:28,460 Jeg er mindre enn, vet jeg ikke, 10. 1302 01:08:28,460 --> 01:08:32,111 Jeg pluss pluss. 1303 01:08:32,111 --> 01:08:34,560 Og du har kode på innsiden av det, ikke sant? 1304 01:08:34,560 --> 01:08:38,830 >> Hvor kommer denne variabelen, jeg, faktisk bare eksisterer? 1305 01:08:38,830 --> 01:08:40,510 Bare innsiden av for loop. 1306 01:08:40,510 --> 01:08:43,640 Så jeg vedder på mange av dere har sannsynligvis støtt på denne feilen når 1307 01:08:43,640 --> 01:08:45,930 du gjør programmene i dine psets. 1308 01:08:45,930 --> 01:08:49,990 Hvor mange av dere har prøvd å bruke i utenfor en for løkke og hadde en feil? 1309 01:08:49,990 --> 01:08:53,310 Som en unreferenced heltall eller noe sånt? 1310 01:08:53,310 --> 01:08:56,069 >> Grunnen til at det skjer er fordi her du er 1311 01:08:56,069 --> 01:08:59,109 skape noe som bare eksisterer innenfor din for loop. 1312 01:08:59,109 --> 01:09:01,972 Og hvis du prøver å bruke det, det gjør jeg ikke faktisk eksisterer utenfor det. 1313 01:09:01,972 --> 01:09:04,930 Så i utgangspunktet en datamaskin si, jeg vet ikke hva du snakker om. 1314 01:09:04,930 --> 01:09:08,689 Alt jeg vet er at en jeg var her, men nå ikke lenger. 1315 01:09:08,689 --> 01:09:12,580 >> Så hvis jeg skulle lage en for loop inne, ikke sant? 1316 01:09:12,580 --> 01:09:19,080 Og jeg kommer til å opprette en ny, som int j, og har det gjøre hva. 1317 01:09:19,080 --> 01:09:23,689 Og du har en kode på innsiden av som loop, bare j finnes her. 1318 01:09:23,689 --> 01:09:26,029 Men som også eksisterer innenfor i. 1319 01:09:26,029 --> 01:09:29,310 Og så j bare finnes innenfor dette for loop, 1320 01:09:29,310 --> 01:09:33,850 mens jeg eksisterer i hele greia. 1321 01:09:33,850 --> 01:09:34,500 >> Alle klare? 1322 01:09:34,500 --> 01:09:37,416 Samme med betinget utsagn Hvis du ønsker å skape noe. 1323 01:09:37,416 --> 01:09:40,390 Samme med mens sløyfer hvis du ønsker å skape noe. 1324 01:09:40,390 --> 01:09:42,390 Det er noe å være veldig, veldig forsiktig med. 1325 01:09:42,390 --> 01:09:45,681 Så dette var en virkelig god problem i forstand at det demonstrert to ting. 1326 01:09:45,681 --> 01:09:47,160 Det viste først, omfang. 1327 01:09:47,160 --> 01:09:49,550 Og det demonstrert også minnetildeling. 1328 01:09:49,550 --> 01:09:54,130 Fordi dere skal vite at funksjoner vokse oppover i stabelen. 1329 01:09:54,130 --> 01:09:56,710 Og at når du ringer funksjoner, du oppretter 1330 01:09:56,710 --> 01:09:59,060 i det vesentlige en ny stabel av hukommelsen. 1331 01:09:59,060 --> 01:10:02,100 Det er veldig forskjellig fra hva din nett minne er. 1332 01:10:02,100 --> 01:10:03,300 Yeah. 1333 01:10:03,300 --> 01:10:03,800 Puh! 1334 01:10:03,800 --> 01:10:05,470 Alle OK på det? 1335 01:10:05,470 --> 01:10:06,750 Det var forvirrende. 1336 01:10:06,750 --> 01:10:09,380 Meget gode emner til å gå over, fordi du er sannsynligvis 1337 01:10:09,380 --> 01:10:12,255 kommer til å få litt kinkig ting som det på quiz. 1338 01:10:12,255 --> 01:10:13,350 Yeah. 1339 01:10:13,350 --> 01:10:13,850 Kjølig. 1340 01:10:13,850 --> 01:10:16,014 1341 01:10:16,014 --> 01:10:18,430 Jeg skal sette deg få 100 på ett linje og deretter 10 på den andre. 1342 01:10:18,430 --> 01:10:21,468 Ja, veldig bra. 1343 01:10:21,468 --> 01:10:26,350 >> OK, nå dere vil få sjansen til å være de TAs. 1344 01:10:26,350 --> 01:10:30,600 Du kommer til å svare på alle de herlige e-poster som jeg noen ganger får. 1345 01:10:30,600 --> 01:10:34,290 >> Så, kjære Andi, jeg ser Jeg tror noe er går galt med min kompilatoren. 1346 01:10:34,290 --> 01:10:37,910 Jeg er sikker på at koden min er riktig, men jeg får stadig en segmentering feil 1347 01:10:37,910 --> 01:10:39,074 hver gang jeg kjører. 1348 01:10:39,074 --> 01:10:39,740 Hva er det som skjer? 1349 01:10:39,740 --> 01:10:42,844 Vennligst hjelp, masse kjærlighet. 1350 01:10:42,844 --> 01:10:45,740 1351 01:10:45,740 --> 01:10:49,410 >> Hvis dere fikk noe sånt at hvordan ville du svare? 1352 01:10:49,410 --> 01:10:51,860 Dette er faktisk veldig vanlig spørsmålene vi vil stille deg. 1353 01:10:51,860 --> 01:10:54,090 Er hvis, vi vil gi deg en scenario, vil vi gi oss 1354 01:10:54,090 --> 01:10:56,350 din beste gjetning på hva som skjer. 1355 01:10:56,350 --> 01:11:00,710 Alle som har en stab på hva som skjer? 1356 01:11:00,710 --> 01:11:02,654 Yeah? 1357 01:11:02,654 --> 01:11:06,056 >> PUBLIKUM: Kanskje dereferenced den null, noe som pekeren 1358 01:11:06,056 --> 01:11:08,924 peker på noe null. 1359 01:11:08,924 --> 01:11:11,590 PROFESSOR: Ja, det ville være en eksempel på når det ville skje. 1360 01:11:11,590 --> 01:11:14,467 Men hva er det større bildet av hva som skjer her? 1361 01:11:14,467 --> 01:11:17,050 PUBLIKUM: Er det du prøver å få tilgang til minne som du ikke 1362 01:11:17,050 --> 01:11:18,175 skal ha tilgang til? 1363 01:11:18,175 --> 01:11:19,200 PROFESSOR: Nettopp. 1364 01:11:19,200 --> 01:11:24,800 Så tenk på en SEG feil, en off grenser, begrenset område i minnet 1365 01:11:24,800 --> 01:11:27,780 at du ikke skal være rørende. 1366 01:11:27,780 --> 01:11:31,670 >> Så ganske mye når du prøver å index-- som for eksempel 1367 01:11:31,670 --> 01:11:34,110 du har erklært en matrise fra null til ni. 1368 01:11:34,110 --> 01:11:37,360 Men du prøver å røre det 10nde verdi, trenger du ikke har tilgang til det. 1369 01:11:37,360 --> 01:11:38,694 Fordi du ikke har erklært det. 1370 01:11:38,694 --> 01:11:40,943 Og så datamaskinen skal å se på det være like, 1371 01:11:40,943 --> 01:11:43,440 uh oh, du prøver å gå utenfor rammene av en indeks. 1372 01:11:43,440 --> 01:11:45,270 Jeg kommer til å gi deg en segmentering feil. 1373 01:11:45,270 --> 01:11:46,590 >> Tenker på som segment, ikke sant? 1374 01:11:46,590 --> 01:11:49,665 En ekstra segment, er feilen når du prøver å bryte noe 1375 01:11:49,665 --> 01:11:50,790 og du bør ikke være der. 1376 01:11:50,790 --> 01:11:53,660 Segmentering feil er når som helst du prøve å ta ting 1377 01:11:53,660 --> 01:11:54,970 at du ikke skal være rørende. 1378 01:11:54,970 --> 01:11:56,815 >> Så vanlige eksempler er en indeks. 1379 01:11:56,815 --> 01:11:58,940 Selvfølgelig, hvis du prøver å røre det var null, 1380 01:11:58,940 --> 01:12:00,220 som også vil fungere så godt. 1381 01:12:00,220 --> 01:12:02,300 Hvis pekeren prøvde å berøre ting som ikke skal berøres, 1382 01:12:02,300 --> 01:12:03,730 som også kan fungere like bra. 1383 01:12:03,730 --> 01:12:07,120 Mest typisk vil se dette i en matrise. 1384 01:12:07,120 --> 01:12:07,740 Alle gode? 1385 01:12:07,740 --> 01:12:10,374 >> PUBLIKUM: Så hvis du vil for å få tilgang til den 10. punktet 1386 01:12:10,374 --> 01:12:12,290 og det er bare en grense ni eller noe. 1387 01:12:12,290 --> 01:12:13,160 >> PROFESSOR: Ja, akkurat. 1388 01:12:13,160 --> 01:12:13,660 Mer eller mindre. 1389 01:12:13,660 --> 01:12:15,930 1390 01:12:15,930 --> 01:12:16,430 Kjølig. 1391 01:12:16,430 --> 01:12:19,070 1392 01:12:19,070 --> 01:12:19,920 >> Kjære Andi. 1393 01:12:19,920 --> 01:12:23,440 Så vi har fått disse fantastiske ting som heter sorterer. 1394 01:12:23,440 --> 01:12:25,472 Hvis Merge sort-- som vi sag i eksempel når 1395 01:12:25,472 --> 01:12:27,180 David gjorde hele ting i class-- hvorfor, 1396 01:12:27,180 --> 01:12:29,760 hvis det er så mye raskere enn hvilken som helst av de andre former, 1397 01:12:29,760 --> 01:12:33,310 hvorfor skal vi bry vite hvilken som helst av de andre former? 1398 01:12:33,310 --> 01:12:35,100 >> Hva er dette spørsmålet egentlig spør du? 1399 01:12:35,100 --> 01:12:36,659 Hva er de tre word-- 1400 01:12:36,659 --> 01:12:37,950 PUBLIKUM: Hva er trade-off? 1401 01:12:37,950 --> 01:12:38,530 PROFESSOR: Nettopp. 1402 01:12:38,530 --> 01:12:39,946 Det er det spørsmålet som spør. 1403 01:12:39,946 --> 01:12:43,682 Hva er trade-off mellom Flett slags vers noen andre typer? 1404 01:12:43,682 --> 01:12:45,850 >> PUBLIKUM: Tar minne, ikke sant? 1405 01:12:45,850 --> 01:12:47,720 >> PROFESSOR: Liker du forklare det litt mer? 1406 01:12:47,720 --> 01:12:49,490 Først la oss forklare Merge butikken. 1407 01:12:49,490 --> 01:12:50,970 Hvordan Merge slags arbeid? 1408 01:12:50,970 --> 01:12:55,220 >> PUBLIKUM: Så det fungerer ved dele alt inn i halvparten 1409 01:12:55,220 --> 01:13:00,660 og deretter sette det sammen og reallocating det i orden, 1410 01:13:00,660 --> 01:13:02,862 som hver gang du fletter settene. 1411 01:13:02,862 --> 01:13:03,820 PROFESSOR: Ganske mye. 1412 01:13:03,820 --> 01:13:06,861 Så jeg kan trekke ut av dette, men det ville ta meg fem minutter til å trekke det ut. 1413 01:13:06,861 --> 01:13:10,220 Se tilbake på til seksjons lysbilder der vi dekket Merge sort. 1414 01:13:10,220 --> 01:13:10,790 Nettopp. 1415 01:13:10,790 --> 01:13:13,406 >> Så veien Merge sorterings verk er det deler ting i to, 1416 01:13:13,406 --> 01:13:15,780 og da er det bare ser på første verdier av dem alle 1417 01:13:15,780 --> 01:13:17,000 og sorterer bare det. 1418 01:13:17,000 --> 01:13:20,364 Kontinuerlig skaper nye arrays og setter ting mer og mer i orden. 1419 01:13:20,364 --> 01:13:23,030 Og så lenge det er virkelig, virkelig fort fordi it's-- du vet, 1420 01:13:23,030 --> 01:13:25,380 en binær søk er n log n. 1421 01:13:25,380 --> 01:13:27,880 Du oppretter så mange ulike matriser som du er 1422 01:13:27,880 --> 01:13:29,700 ved hjelp av en stor mengde minne. 1423 01:13:29,700 --> 01:13:33,080 Og så lenge det er raskere, handel av her er at du bruker mer minne. 1424 01:13:33,080 --> 01:13:38,490 >> Og så, hint, sorterer og søk ble dekket mye mer i år 1425 01:13:38,490 --> 01:13:41,610 enn de har vært i år tidligere. 1426 01:13:41,610 --> 01:13:45,100 Dere skal se at reflekteres derfor på quizen. 1427 01:13:45,100 --> 01:13:49,160 Jeg ville definitivt bruke tid på å gå om hva alle de forskjellige typer 1428 01:13:49,160 --> 01:13:52,320 er, hvordan binære søk, hvordan lineær søk arbeid. 1429 01:13:52,320 --> 01:13:54,750 Hvordan kanskje pseudo kode dem ut. 1430 01:13:54,750 --> 01:13:55,950 Hva er de kjører tider? 1431 01:13:55,950 --> 01:13:59,210 Noe sånt som kjører tider er svært lett å kopiere ned på et notat ark, 1432 01:13:59,210 --> 01:13:59,710 høyre? 1433 01:13:59,710 --> 01:14:01,420 >> Det er veldig vanskelig når du er i midten test 1434 01:14:01,420 --> 01:14:02,390 og du må finne ut av. 1435 01:14:02,390 --> 01:14:03,160 Kopier den ned. 1436 01:14:03,160 --> 01:14:05,550 Jeg kan garantere deg at du er skal du trenger å vite det. 1437 01:14:05,550 --> 01:14:06,860 Hva er de avveininger? 1438 01:14:06,860 --> 01:14:10,064 Verste fall beste fall scenarier for dem alle, veldig få vite. 1439 01:14:10,064 --> 01:14:10,564 Yeah? 1440 01:14:10,564 --> 01:14:12,730 >> PUBLIKUM: Trenger vi å vet hvordan å kode Merge slag? 1441 01:14:12,730 --> 01:14:15,470 Liker, trenger vi å husker den rekursive? 1442 01:14:15,470 --> 01:14:18,950 >> PROFESSOR: Jeg tviler sterkt på det, bare fordi det er som ganske komplisert. 1443 01:14:18,950 --> 01:14:22,282 Men det kan ikke være umulig hvis vi ber deg om å bruke pseudo det ut. 1444 01:14:22,282 --> 01:14:22,781 Yeah. 1445 01:14:22,781 --> 01:14:25,470 1446 01:14:25,470 --> 01:14:29,170 >> Jepp, OK, en mer. 1447 01:14:29,170 --> 01:14:31,387 Dette kan ha kommet opp i du siste brikken i en bit. 1448 01:14:31,387 --> 01:14:42,101 1449 01:14:42,101 --> 01:14:43,090 Yeah? 1450 01:14:43,090 --> 01:14:44,930 Har alle høre det? 1451 01:14:44,930 --> 01:14:48,360 >> OK, så ganske mye første av alt, hva slags program 1452 01:14:48,360 --> 01:14:51,000 ville være å gi deg en utgang som dette? 1453 01:14:51,000 --> 01:14:54,350 Husk at vi ba deg om å lære om denne nye typen debugging verktøy? 1454 01:14:54,350 --> 01:14:57,340 Hva var navnet på det? 1455 01:14:57,340 --> 01:14:59,460 Valgrind, rett 1456 01:14:59,460 --> 01:15:02,600 >> Det var et program der du kan kalle det kunne 1457 01:15:02,600 --> 01:15:05,940 holde styr på alt minnet du er hjelp i programmet, og var på gang. 1458 01:15:05,940 --> 01:15:11,090 Så hvis du har noe, som, definitivt tapt, 40 bytes i en blokk. 1459 01:15:11,090 --> 01:15:14,870 Sannsynligvis er du ikke huske å frigjøre den. 1460 01:15:14,870 --> 01:15:18,710 Fordi hvis du bruker byte minne, det betyr at du har tilgang til dette minnet, 1461 01:15:18,710 --> 01:15:20,240 men du har ikke vært i stand til å frigjøre. 1462 01:15:20,240 --> 01:15:21,948 Så du ønsker å gjøre sikker på at du også 1463 01:15:21,948 --> 01:15:31,420 bruker free-- det er en function-- å frigjøre alle 1464 01:15:31,420 --> 01:15:34,930 av minnet overflyttes av malloc. 1465 01:15:34,930 --> 01:15:35,500 >> Kjølig. 1466 01:15:35,500 --> 01:15:37,140 Så dette lysbildet, vil jeg ha den opp. 1467 01:15:37,140 --> 01:15:41,050 Det er overalt i mange forelesninger, i mye seksjons lysbilder. 1468 01:15:41,050 --> 01:15:44,254 Du virkelig ønsker å være sikker du bare vet alt dette. 1469 01:15:44,254 --> 01:15:47,170 Enten i note ark eller hvis du ønsker å huske det, gjerne. 1470 01:15:47,170 --> 01:15:48,836 Det er veldig, veldig, veldig viktig. 1471 01:15:48,836 --> 01:15:53,200 1472 01:15:53,200 --> 01:15:56,890 >> Også en veldig god Spørsmålet som vi kan spørre. 1473 01:15:56,890 --> 01:16:00,320 Hvorfor er Selection sort-- se på Utvalg sort-- alle runtimes 1474 01:16:00,320 --> 01:16:02,060 er n squared. 1475 01:16:02,060 --> 01:16:06,714 Uavhengig av hvordan listen gjelder deg som, så hvorfor er Selection sort-- 1476 01:16:06,714 --> 01:16:08,630 Jeg skal gi dere 30 andre mener om dette. 1477 01:16:08,630 --> 01:16:10,700 Fordi det er slags forvirrende. 1478 01:16:10,700 --> 01:16:12,710 Det innebærer noen konseptuell tanke. 1479 01:16:12,710 --> 01:16:16,470 Hvorfor skulle de kjøre ganger være den samme i både de verste og beste fall scenarier? 1480 01:16:16,470 --> 01:16:28,850 1481 01:16:28,850 --> 01:16:30,000 >> Yeah? 1482 01:16:30,000 --> 01:16:38,084 >> PUBLIKUM: Fordi Selection sort hver posisjon eller plass i denne lille utvalg 1483 01:16:38,084 --> 01:16:40,350 ting eller hva som helst. 1484 01:16:40,350 --> 01:16:44,430 Så selv i beste fall selv om det er perfekt sortert, 1485 01:16:44,430 --> 01:16:47,380 det ville fortsatt å være som, OK, man. 1486 01:16:47,380 --> 01:16:49,000 I mitt første omgang har jeg en. 1487 01:16:49,000 --> 01:16:50,250 Og gå gjennom dem alle. 1488 01:16:50,250 --> 01:16:51,249 OK, er en av de minste. 1489 01:16:51,249 --> 01:16:53,053 Og så går det igjen og er like, OK, to- 1490 01:16:53,053 --> 01:16:54,594 er den minste av alle de tingene. 1491 01:16:54,594 --> 01:16:56,804 Men det har fortsatt å sjekk hver og en. 1492 01:16:56,804 --> 01:16:57,470 PROFESSOR: Yeah. 1493 01:16:57,470 --> 01:17:00,490 Så for eksempel, la oss bare si vi har en liste, som allerede er sortert, 1494 01:17:00,490 --> 01:17:03,390 en rekke 04:59. 1495 01:17:03,390 --> 01:17:07,100 Måten Selection sorterer er at det går gjennom, det sjekker disse to. 1496 01:17:07,100 --> 01:17:08,234 Deretter sjekker den de to. 1497 01:17:08,234 --> 01:17:09,650 Og så sjekker, og det sjekker. 1498 01:17:09,650 --> 01:17:13,285 Det holder å sjekke dem alle, uavhengig av hvorvidt 1499 01:17:13,285 --> 01:17:14,160 det er faktisk sortert. 1500 01:17:14,160 --> 01:17:16,450 Fordi det er rett og slett måten sorteringsarbeid. 1501 01:17:16,450 --> 01:17:19,530 >> Og så dette spørsmålet er typen som en konseptuell spørsmål vi vil spørre. 1502 01:17:19,530 --> 01:17:21,430 Der først, du vet hva Utvalg slags 1503 01:17:21,430 --> 01:17:23,304 er, rett, for å kunne å svare på spørsmålet. 1504 01:17:23,304 --> 01:17:26,200 Du må være i stand til å forstå konseptuelt hva som skjer. 1505 01:17:26,200 --> 01:17:30,760 Og så kan du bruke det og tenker, OK la oss bare tenke worst case scenario. 1506 01:17:30,760 --> 01:17:32,230 De er alle i synkende rekkefølge. 1507 01:17:32,230 --> 01:17:33,290 Hvordan vil det påvirke det? 1508 01:17:33,290 --> 01:17:34,650 >> Hva om det er stigende rekkefølge? 1509 01:17:34,650 --> 01:17:35,640 Hvis det er allerede sortert? 1510 01:17:35,640 --> 01:17:37,240 Hvordan vil det påvirke kjøretider? 1511 01:17:37,240 --> 01:17:40,270 Og så Selection sort, vil du merke at det ikke egentlig rolle. 1512 01:17:40,270 --> 01:17:43,500 Fordi du sjekker alle verdier uavhengig av hva som skjer. 1513 01:17:43,500 --> 01:17:45,810 >> Og så gode ting å huske. 1514 01:17:45,810 --> 01:17:50,290 Hvorfor noen slags forskjellig fra andre og hvordan man best og verst tenkelige scenarier 1515 01:17:50,290 --> 01:17:52,740 ville påvirke dem alle. 1516 01:17:52,740 --> 01:17:56,700 >> Jeg kommer til å virkelig truffet i slag fordi det vil være på quiz. 1517 01:17:56,700 --> 01:17:57,199 Yeah. 1518 01:17:57,199 --> 01:18:00,820 1519 01:18:00,820 --> 01:18:01,320 OK. 1520 01:18:01,320 --> 01:18:05,590 Det er seks minutter igjen. 1521 01:18:05,590 --> 01:18:09,880 Jeg kan ta tre minutter av spørsmål. 1522 01:18:09,880 --> 01:18:12,290 Jeg kan også henge rundt for som 20 minutter etter avsnitt 1523 01:18:12,290 --> 01:18:13,850 Hvis du ønsker å stille spørsmål også. 1524 01:18:13,850 --> 01:18:16,330 Er det noen som bare har veldig kort spørsmål eller konseptuelle spørsmål 1525 01:18:16,330 --> 01:18:17,360 de er usikre på akkurat nå? 1526 01:18:17,360 --> 01:18:17,832 Yeah? 1527 01:18:17,832 --> 01:18:19,720 >> PUBLIKUM: Kan du fortelle litt litt om bitvis operatører? 1528 01:18:19,720 --> 01:18:20,280 >> PROFESSOR: Yeah. 1529 01:18:20,280 --> 01:18:22,446 Så bitvis operatører er noe som du sannsynligvis 1530 01:18:22,446 --> 01:18:24,170 kanskje bare ønsker å sette på arket. 1531 01:18:24,170 --> 01:18:27,540 Så quickly-- jeg ikke ønsker å gå for mye i dybden 1532 01:18:27,540 --> 01:18:31,164 fordi Harvard, i sin anmeldelse sesjon, dekket det ganske godt. 1533 01:18:31,164 --> 01:18:33,080 Bitvis operatør, er det fem av dem, ikke sant? 1534 01:18:33,080 --> 01:18:41,370 >> Det er dette, som er x eller funksjon, det er tegnet, som er den og. 1535 01:18:41,370 --> 01:18:44,050 Rør, som er eller. 1536 01:18:44,050 --> 01:18:46,790 Og da har du to forskjellige skift. 1537 01:18:46,790 --> 01:18:50,610 >> Hvis jeg gir deg to verdier, om Jeg gir deg, som, en og en. 1538 01:18:50,610 --> 01:18:52,390 Hva ville det vurdere å? 1539 01:18:52,390 --> 01:18:55,490 Hvis jeg gir deg ekte og sant, sant? 1540 01:18:55,490 --> 01:18:56,930 Hva om sant eller usant? 1541 01:18:56,930 --> 01:18:57,830 Fremdeles sant, ikke sant? 1542 01:18:57,830 --> 01:18:59,762 Fordi det er en eller. 1543 01:18:59,762 --> 01:19:01,220 Vi vil mest sannsynlig gi deg tall. 1544 01:19:01,220 --> 01:19:03,780 Så husk, en er lik sant, er lik null falske. 1545 01:19:03,780 --> 01:19:07,407 Og vi kan gi deg disse tingene og ber deg om å fortelle oss hva som skjer. 1546 01:19:07,407 --> 01:19:10,240 Harvard dekker det innenfor den første 10 minutter av sin studie sesjon 1547 01:19:10,240 --> 01:19:11,230 virkelig, virkelig godt. 1548 01:19:11,230 --> 01:19:14,260 Så dere ønsker å gjøre at du ser tilbake på det. 1549 01:19:14,260 --> 01:19:16,387 >> PUBLIKUM: Er pisa5 kommer til å være på quiz? 1550 01:19:16,387 --> 01:19:16,970 PROFESSOR: No. 1551 01:19:16,970 --> 01:19:18,240 Ikke engang se på pisa5 akkurat nå. 1552 01:19:18,240 --> 01:19:18,810 Det er vanskelig. 1553 01:19:18,810 --> 01:19:22,830 Bare ikke engang gidder å se på pisa5. 1554 01:19:22,830 --> 01:19:25,665 >> Men som noen hint og forslag, jeg 1555 01:19:25,665 --> 01:19:28,320 foreslår at du starter pisa5 så snart quiz er over. 1556 01:19:28,320 --> 01:19:30,319 Dette vil være den vanskeligste uke, men da gutta 1557 01:19:30,319 --> 01:19:34,590 vil bli overlevert det på åsene av rullende grønne og valper, 1558 01:19:34,590 --> 01:19:36,115 og det er greit. 1559 01:19:36,115 --> 01:19:39,810 >> Denne klassen blir betydelig lettere etter den femte PSet. 1560 01:19:39,810 --> 01:19:41,560 PUBLIKUM: Arbeidstid er søndag, mandag? 1561 01:19:41,560 --> 01:19:44,260 PROFESSOR: Ja, så kontortid vil søndag til mandag for PSet. 1562 01:19:44,260 --> 01:19:47,009 Arbeidstid kveld hovedsak vil bare være en vurdering for quiz. 1563 01:19:47,009 --> 01:19:50,350 Hvis noen ønsker å komme inn og spør Tas et spørsmål, vil vi være der. 1564 01:19:50,350 --> 01:19:53,220 >> Jeg tar kanskje et spørsmål hvis noen har spørsmål? 1565 01:19:53,220 --> 01:19:53,809 Yeah? 1566 01:19:53,809 --> 01:19:55,850 PUBLIKUM: Når du er definere noder, [uhørbart] 1567 01:19:55,850 --> 01:20:00,700 hvis du sier node stjerne og deretter neste, gjør datamaskinen automatisk 1568 01:20:00,700 --> 01:20:03,610 forstår at du er henvise til en annen peker? 1569 01:20:03,610 --> 01:20:04,580 >> PROFESSOR: No. 1570 01:20:04,580 --> 01:20:06,710 >> PUBLIKUM: Du må kobler på nytt det [uhørbart]? 1571 01:20:06,710 --> 01:20:09,270 >> PROFESSOR: Så i utgangspunktet struct av en node er, huske, 1572 01:20:09,270 --> 01:20:12,620 det er som du oppretter node og da har du en peker som heter neste. 1573 01:20:12,620 --> 01:20:14,630 Alt du gjør er å ha strukturen der. 1574 01:20:14,630 --> 01:20:16,387 Du må tilordne at pekeren et sted. 1575 01:20:16,387 --> 01:20:18,470 Så datamaskinene ikke vet hva det gjør ennå. 1576 01:20:18,470 --> 01:20:20,250 Du må faktisk tildele det når du oppretter din lenket liste. 1577 01:20:20,250 --> 01:20:22,170 Og det er det hovedsakelig PSet 5 vil være på. 1578 01:20:22,170 --> 01:20:24,106 Så ingen bekymringer om noe av det akkurat nå. 1579 01:20:24,106 --> 01:20:26,380 >> PUBLIKUM: Så vi trenger ikke å fokusere for mye på lenken listen, bare 1580 01:20:26,380 --> 01:20:27,440 den generelle oppfatningen? 1581 01:20:27,440 --> 01:20:30,980 >> PROFESSOR: Bare ganske mye stabler, køer, link lister, trær, hash tabeller. 1582 01:20:30,980 --> 01:20:33,639 Bare være i stand til å vite hva de er. 1583 01:20:33,639 --> 01:20:35,680 Vi kommer ikke til å be du liker noe konkret 1584 01:20:35,680 --> 01:20:39,300 fordi vi ikke har virkelig gjort en PSet at dekker noe av det ennå. 1585 01:20:39,300 --> 01:20:45,540 >> Så i de to siste minuttene før Jeg sette deg fri til å drepe denne quizen. 1586 01:20:45,540 --> 01:20:49,370 Ganske mye, liker, tenke på hvordan langt dere har kommet i denne klassen. 1587 01:20:49,370 --> 01:20:52,820 >> Jeg husker da uke to av denne klassen, noen av dere 1588 01:20:52,820 --> 01:20:55,720 tilbringe tre timer å skrive vann. 1589 01:20:55,720 --> 01:20:57,970 Hvor lang tid vil det ta deg gutta til å skrive vann nå? 1590 01:20:57,970 --> 01:20:59,670 30 sekunder, kanskje? 1591 01:20:59,670 --> 01:21:01,810 Tenk på hvor mye dere har lært. 1592 01:21:01,810 --> 01:21:04,320 CS er et veldig, veldig vanskelig tema. 1593 01:21:04,320 --> 01:21:06,190 Det er ingen tvil om det. 1594 01:21:06,190 --> 01:21:09,160 Det er vanskelig, det er derfor ingen som studerer det. 1595 01:21:09,160 --> 01:21:10,730 Det er bare vanskelig. 1596 01:21:10,730 --> 01:21:11,650 Og det er helt greit. 1597 01:21:11,650 --> 01:21:14,150 >> Og jeg er veldig stolt av at alle har gjort det så langt. 1598 01:21:14,150 --> 01:21:16,380 Psets er ikke lett. 1599 01:21:16,380 --> 01:21:17,790 De tar mye tid. 1600 01:21:17,790 --> 01:21:22,580 Dere, jeg vil aldri be deg om å skrive spillet av 15 eller Vigenère på PSet. 1601 01:21:22,580 --> 01:21:24,160 Du trenger ikke å bare frik ut om det. 1602 01:21:24,160 --> 01:21:28,080 Alt vi tester her er å evaluere din begrepsmessig kunnskap, samt 1603 01:21:28,080 --> 01:21:31,524 som noen av de grunnleggende ferdighetene til koding. 1604 01:21:31,524 --> 01:21:33,440 Testen er utformet for å være veldig utfordrende. 1605 01:21:33,440 --> 01:21:36,180 Liker, det er utformet for deg å ikke få 100. 1606 01:21:36,180 --> 01:21:39,880 Det er også designet for deg å sannsynligvis ikke være i stand til å fullføre i 75 minutter. 1607 01:21:39,880 --> 01:21:41,995 Og det er helt greit. 1608 01:21:41,995 --> 01:21:42,870 Jeg er en student selv. 1609 01:21:42,870 --> 01:21:45,960 Jeg vet, jeg hater det når jeg går ut av en quiz være, dritt. 1610 01:21:45,960 --> 01:21:47,044 Det var veldig vanskelig. 1611 01:21:47,044 --> 01:21:49,460 Sannsynligvis hva som kommer til happen-- og det er helt greit, 1612 01:21:49,460 --> 01:21:50,751 Jeg forteller dere akkurat nå. 1613 01:21:50,751 --> 01:21:53,190 Midlene på disse tingene ikke er høy i det hele tatt. 1614 01:21:53,190 --> 01:21:55,360 >> Og for de av dere som har fått, som, 1615 01:21:55,360 --> 01:21:57,870 treere på din oppgavesett, det betyr ikke at du er 1616 01:21:57,870 --> 01:21:59,536 kommer til å få en 60 prosent i denne klassen. 1617 01:21:59,536 --> 01:22:01,440 Hvis du får 60% på quiz, som ikke 1618 01:22:01,440 --> 01:22:03,330 mener du kommer til å får en D i denne klassen. 1619 01:22:03,330 --> 01:22:05,740 Vi ser, spesielt jeg, for de av dere i min del, 1620 01:22:05,740 --> 01:22:07,406 Jeg ser hvor hardt dere er alle arbeider. 1621 01:22:07,406 --> 01:22:09,190 Og jeg holde styr på det. 1622 01:22:09,190 --> 01:22:11,420 >> Dere vil bli bra. 1623 01:22:11,420 --> 01:22:14,580 Det er ingen institusjonell hukommelse av lykke ved slutten av semesteret. 1624 01:22:14,580 --> 01:22:16,840 Fordi alle Harvard barna forteller deres venner, oh, vil du bli bra. 1625 01:22:16,840 --> 01:22:18,381 Ingen forteller dere det her. 1626 01:22:18,381 --> 01:22:20,950 Så jeg må fortelle dere at her. 1627 01:22:20,950 --> 01:22:22,280 >> Dere vil bli bra. 1628 01:22:22,280 --> 01:22:24,080 Jeg er så stolt av alle dere. 1629 01:22:24,080 --> 01:22:25,680 Testen vil være vanskelig. 1630 01:22:25,680 --> 01:22:28,140 Studere for det, og etterpå bare kaste den bort. 1631 01:22:28,140 --> 01:22:31,280 Gjør deg klar til å lære nye ting. 1632 01:22:31,280 --> 01:22:33,990 Og spise godteri. 1633 01:22:33,990 --> 01:22:35,940 Vi har har masse godteri. 1634 01:22:35,940 --> 01:22:37,760 >> Få en god natts søvn. 1635 01:22:37,760 --> 01:22:40,420 Ikke ikke sove, fordi det ville være virkelig ille. 1636 01:22:40,420 --> 01:22:41,490 CS er mye logikk. 1637 01:22:41,490 --> 01:22:44,960 Hvis du ikke sove, kan du ikke fungere, og hjernen kan ikke fungere. 1638 01:22:44,960 --> 01:22:48,780 Og jeg vil være her for de neste 20 minutter hvis noen ønsker å henge rundt. 1639 01:22:48,780 --> 01:22:51,150 Dere kommer til å drepe den. 1640 01:22:51,150 --> 01:22:53,000 Lykke til. 1641 01:22:53,000 --> 01:22:55,663