1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Artikel 4] [Minder Gerieflik] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Harvard Universiteit] 3 00:00:04,000 --> 00:00:07,000 [Hierdie is CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Alle reg, welkom terug na artikel. 5 00:00:10,000 --> 00:00:13,000 In hierdie week se artikel gaan ons 'n paar dinge om te doen. 6 00:00:13,000 --> 00:00:17,000 Ons gaan eerste herhaling Problem Set 2, 7 00:00:17,000 --> 00:00:20,000 wat is die keiser en Vigenère probleem stel. 8 00:00:20,000 --> 00:00:23,000 En dan gaan ons om te duik in Quiz 0 review 9 00:00:23,000 --> 00:00:26,000 en spandeer 'n bietjie van die tyd recapping wat ons het gepraat oor 10 00:00:26,000 --> 00:00:30,000 in elk van die lesings so ver, en ons sal ook 'n paar probleme 11 00:00:30,000 --> 00:00:32,000 van die vorige jaar se vasvrae. 12 00:00:32,000 --> 00:00:36,000 Dat julle ouens het 'n goeie manier om voor te berei vir daardie. 13 00:00:36,000 --> 00:00:40,000 >> Om mee te begin, ek het geselflaai 'n paar goeie oplossings 14 00:00:40,000 --> 00:00:45,000 vir die vorige probleem stel, Problem Set 2, in hierdie ruimte. 15 00:00:45,000 --> 00:00:48,000 As julle al hierdie skakel getref, 16 00:00:48,000 --> 00:00:53,000 en as jy kliek op my naam en kliek op my eerste hersiening 17 00:00:53,000 --> 00:00:56,000 jy sal sien caesar.c, wat is presies wat ek is op soek na. 18 00:00:56,000 --> 00:01:00,000 Kom ons praat oor dit regtig vinnig. 19 00:01:00,000 --> 00:01:02,000 Dit is net 'n voorbeeld oplossing. 20 00:01:02,000 --> 00:01:05,000 Dit is nie noodwendig die ideale oplossing. 21 00:01:05,000 --> 00:01:08,000 Daar is baie verskillende maniere om dit te skryf, 22 00:01:08,000 --> 00:01:10,000 maar daar is 'n paar dinge wat ek wou na vore te bring 23 00:01:10,000 --> 00:01:13,000 wat ek gesien het as ek die formaat, algemene foute wat ek dink 24 00:01:13,000 --> 00:01:18,000 hierdie oplossing nie 'n baie goeie werk van hantering. 25 00:01:18,000 --> 00:01:22,000 >> Die eerste is 'n soort van header kommentaar op die top. 26 00:01:22,000 --> 00:01:25,000 Op die lyne 1 deur 7 sien jy die besonderhede, 27 00:01:25,000 --> 00:01:28,000 presies wat hierdie program doen. 28 00:01:28,000 --> 00:01:32,000 'N goeie standaard praktyk wanneer jy wil skryf C-kode 29 00:01:32,000 --> 00:01:35,000 ongeag of jou program is vervat in 'n enkele lêer of 30 00:01:35,000 --> 00:01:38,000 of dit nou oor veelvuldige lêers verdeel is 'n soort van te hê 31 00:01:38,000 --> 00:01:40,000 oriënteer kommentaar aan die bokant. 32 00:01:40,000 --> 00:01:43,000 Dit is ook vir mense wat uitgaan en skryf kode in die werklike wêreld. 33 00:01:43,000 --> 00:01:47,000 Dit is waar hulle sal sit inligting oor kopiereg. 34 00:01:47,000 --> 00:01:50,000 Hier is die # sluit. 35 00:01:50,000 --> 00:01:55,000 On line 16 daar is dit # definieer, wat ons sal terug kom in net 'n bietjie. 36 00:01:55,000 --> 00:01:59,000 En dan weer die funksie begin, een keer belangrikste begin, 37 00:01:59,000 --> 00:02:03,000 omdat hierdie program is alles vervat in 'n enkele funksie 38 00:02:03,000 --> 00:02:09,000 die heel eerste ding wat gebeur en dit is baie idiomatiese en tipies van 'n C-program 39 00:02:09,000 --> 00:02:14,000 wat neem in command line argumente is dat dit onmiddellik kontroleer 40 00:02:14,000 --> 00:02:18,000 >> vir die argument tel, argc. 41 00:02:18,000 --> 00:02:24,000 Hier sien ons dat hierdie program 2 argumente verwag presies. 42 00:02:24,000 --> 00:02:27,000 Onthou daar is dat die eerste argument wat is die spesiale een 43 00:02:27,000 --> 00:02:29,000 dit is altyd die naam van die program wat loop, 44 00:02:29,000 --> 00:02:31,000 die naam van die uitvoerbare lêer. 45 00:02:31,000 --> 00:02:36,000 En so wat dit doen, is dit verhoed dat die gebruiker van die bestuur van die program 46 00:02:36,000 --> 00:02:42,000 met meer of minder argumente. 47 00:02:42,000 --> 00:02:44,000 Die rede waarom ons wil om te kyk vir hierdie reg te ontneem is omdat 48 00:02:44,000 --> 00:02:52,000 ons kan eintlik nie toegang tot hierdie bevat SPASIES skikking reg hier betroubaar 49 00:02:52,000 --> 00:02:55,000 totdat ons het nagegaan om te sien hoe groot dit is. 50 00:02:55,000 --> 00:02:58,000 >> Een van die algemene foute wat ek gesien het, was mense sal onmiddellik in te gaan 51 00:02:58,000 --> 00:03:01,000 en gryp bevat SPASIES [1]. 52 00:03:01,000 --> 00:03:06,000 Hulle het die belangrikste argument gryp uit van die skikking en doen 'n Ek is so op, 53 00:03:06,000 --> 00:03:11,000 en dan wil hulle die toets doen vir argc sowel as die volgende toets, 54 00:03:11,000 --> 00:03:16,000 of nie die eerste argument was inderdaad 'n heelgetal is op dieselfde tyd, 55 00:03:16,000 --> 00:03:20,000 en dit beteken nie omdat werk in die geval dat daar geen argumente verskaf 56 00:03:20,000 --> 00:03:26,000 jy gryp 'n argument wat nie daar is nie of probeer een wat nie daar is nie aan te gryp. 57 00:03:26,000 --> 00:03:29,000 >> Die ander groot ding wat jy moet let is dat 58 00:03:29,000 --> 00:03:32,000 wil jy altyd uit te druk 'n soort van nuttige fout boodskap 59 00:03:32,000 --> 00:03:34,000 aan die gebruiker te oriënteer. 60 00:03:34,000 --> 00:03:37,000 Ek is seker jy het alle programme uit te voer waar almal van 'n skielike dit omval, 61 00:03:37,000 --> 00:03:41,000 en jy kry hierdie belaglike klein dialoogkassie wat verskyn en sê 62 00:03:41,000 --> 00:03:44,000 iets verskriklik kriptiese en miskien gee jy 'n fout kode of iets soos dit 63 00:03:44,000 --> 00:03:47,000 Dit maak nie sin nie. 64 00:03:47,000 --> 00:03:50,000 Dit is waar jy regtig wil iets nuttig om voorsiening te maak 65 00:03:50,000 --> 00:03:54,000 en gerig aan die gebruiker, sodat wanneer hulle loop dit hulle gaan "O," gesig palm. 66 00:03:54,000 --> 00:03:58,000 "Ek weet presies wat om te doen nie ek weet hoe om dit op te los." 67 00:03:58,000 --> 00:04:01,000 >> As jy nie 'n boodskap te druk, dan beland jy eintlik 68 00:04:01,000 --> 00:04:04,000 die verlaat van die gebruiker om te gaan ondersoek jou bronkode 69 00:04:04,000 --> 00:04:07,000 om uit te vind wat verkeerd geloop het. 70 00:04:07,000 --> 00:04:11,000 Daar is ook 'n paar keer dat jy sal gebruik om verskillende fout codes. 71 00:04:11,000 --> 00:04:14,000 Hier het ons net gebruik om te sê daar was 'n fout, 72 00:04:14,000 --> 00:04:16,000 daar was 'n fout, daar was 'n fout. 73 00:04:16,000 --> 00:04:20,000 Groter programme, dikwels programme wat deur ander programme genoem word, 74 00:04:20,000 --> 00:04:25,000 sal 'n soort van spesiale fout codes in verskillende scenario's terug 75 00:04:25,000 --> 00:04:28,000 om programmaties te kommunikeer wat jy andersins sou 76 00:04:28,000 --> 00:04:32,000 net gebruik om 'n mooi Engelse boodskap. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 As ons werk, kan jy sien ons trek die sleutel uit. 79 00:04:37,000 --> 00:04:40,000 Ons toets om te sien as die sleutel pas. 80 00:04:40,000 --> 00:04:42,000 Ons kry 'n boodskap van die gebruiker. 81 00:04:42,000 --> 00:04:46,000 Die rede waarom ons dit doen in hierdie while lus-en dit is iets wat ons sal dek 82 00:04:46,000 --> 00:04:50,000 in 'n bietjie, maar dit blyk dat as jy tik beheer D 83 00:04:50,000 --> 00:04:54,000 wanneer jy daardie GetString vinnige op die terminale 84 00:04:54,000 --> 00:04:59,000 wat eintlik nie, is dit stuur 'n spesiale karakter 85 00:04:59,000 --> 00:05:01,000 tot die program. 86 00:05:01,000 --> 00:05:05,000 Dit is bekend as die ELF of die einde van die lêer karakter. 87 00:05:05,000 --> 00:05:08,000 En in daardie geval, sal ons boodskap string null, 88 00:05:08,000 --> 00:05:14,000 so dit was nie iets wat ons nagegaan in die probleem homself. 89 00:05:14,000 --> 00:05:17,000 >> Maar soos ons aangaan, nou dat ons het begin om te praat oor pointers 90 00:05:17,000 --> 00:05:21,000 en dinamiese geheuetoekenning op die hoop, 91 00:05:21,000 --> 00:05:25,000 kontrole vir null wanneer jy 'n funksie wat dalk 92 00:05:25,000 --> 00:05:30,000 terug null as 'n waarde is iets wat jy wil te kry in die gewoonte om dit te doen. 93 00:05:30,000 --> 00:05:33,000 Dit is hier hoofsaaklik vir illustrasie. 94 00:05:33,000 --> 00:05:36,000 Maar wanneer jy dit doen sien GetString in die toekoms, 95 00:05:36,000 --> 00:05:41,000 van Problem Set 4 op, sal jy wil om dit in gedagte te hou. 96 00:05:41,000 --> 00:05:44,000 Weereens, dit is nie 'n kwessie vir die Probleem Stel 3 óf omdat ons het dit nie gedek nog. 97 00:05:44,000 --> 00:05:53,000 Ten slotte, ons kry om hierdie deel waar ons aan die hoof enkripsie lus, 98 00:05:53,000 --> 00:05:57,000 en daar is 'n paar van die dinge wat hier aangaan nie. 99 00:05:57,000 --> 00:06:02,000 Die eerste, ons itereer oor die hele boodskap string self. 100 00:06:02,000 --> 00:06:07,000 Hier het ons die strlen oproep in die toestand bewaar, 101 00:06:07,000 --> 00:06:12,000 wat 'n aantal van julle het uitgewys is nie 'n goeie manier om te gaan. 102 00:06:12,000 --> 00:06:15,000 Dit blyk in hierdie geval is dit ook nie groot, 103 00:06:15,000 --> 00:06:20,000 deels omdat ons die wysiging van die inhoud van die boodskap self 104 00:06:20,000 --> 00:06:27,000 die binnekant van die lus, so as ons 'n boodskap wat 10 karakters lank is, 105 00:06:27,000 --> 00:06:32,000 die eerste keer het ons begin dat lus strlen wat sal terugkeer? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Maar as ons dan verander boodskap, sê ons sy 5de karakter te verander, 108 00:06:40,000 --> 00:06:46,000 en ons gooi in 'n \ 0 karakter in die 5de posisie, 109 00:06:46,000 --> 00:06:49,000 op 'n daaropvolgende iterasie strlen (boodskap) sal nie terugkeer wat dit gedoen het 110 00:06:49,000 --> 00:06:52,000 die heel eerste keer dat ons herhaalde, 111 00:06:52,000 --> 00:06:56,000 maar in plaas daarvan sal terugkeer 5 omdat ons in daardie null terminator gooi, 112 00:06:56,000 --> 00:06:59,000 en die tou se lengte word gedefinieer 113 00:06:59,000 --> 00:07:03,000 deur die posisie van daardie \ 0. 114 00:07:03,000 --> 00:07:09,000 In hierdie geval, dit is 'n goeie manier om te gaan, want ons pas dit in plek. 115 00:07:09,000 --> 00:07:13,000 Maar jy sien dat dit eintlik verbasend maklik om te enkripteer 116 00:07:13,000 --> 00:07:16,000 as jy kan kry die wiskunde korrek is. 117 00:07:16,000 --> 00:07:19,000 Al wat nodig is, is om seker te maak of die letter wat jy is op soek na 118 00:07:19,000 --> 00:07:21,000 hoofletters of klein letters. 119 00:07:21,000 --> 00:07:24,000 >> Die rede waarom ons het net om te kyk vir dit en ons het nie om te kyk vir 120 00:07:24,000 --> 00:07:27,000 die alfa geval is omdat 121 00:07:27,000 --> 00:07:30,000 as 'n karakter is hoofletters of indien dit is kleinletter 122 00:07:30,000 --> 00:07:33,000 dan is dit beslis 'n alfabetiese karakter, 123 00:07:33,000 --> 00:07:38,000 want ons het nie hoofletters en kleinletters syfers. 124 00:07:38,000 --> 00:07:41,000 Die ander ding wat ons doen en dit is 'n bietjie lastig- 125 00:07:41,000 --> 00:07:45,000 is dat ons het verander die standaard Caesar cipher formule 126 00:07:45,000 --> 00:07:49,000 wat het ons in die probleem stel spesifikasie. 127 00:07:49,000 --> 00:07:52,000 Wat is anders hier is dat ons afgetrek 128 00:07:52,000 --> 00:07:58,000 in die hoofletters geval kapitaal A, en dan het ons bygevoeg kapitaal A 129 00:07:58,000 --> 00:08:02,000 terug in aan die einde. 130 00:08:02,000 --> 00:08:05,000 >> Ek ken 'n paar van julle dit gedoen het in jou kode. 131 00:08:05,000 --> 00:08:09,000 Het enige van julle doen dit in jou voorleggings? 132 00:08:09,000 --> 00:08:13,000 Jy dit gedoen het. Kan jy verduidelik wat dit doen, Sahb? 133 00:08:13,000 --> 00:08:18,000 Deur trek dit uit, want jy het 'n mod reg nadat dit, 134 00:08:18,000 --> 00:08:21,000 jy het dit om uit te neem, sodat jy [hoes] posisie. 135 00:08:21,000 --> 00:08:25,000 En dan deur dit later weer verskuif oor die een wat jy wou. 136 00:08:25,000 --> 00:08:27,000 Ja, presies. 137 00:08:27,000 --> 00:08:32,000 Wat Sahb gesê het, is dat wanneer ons wil om by te voeg 138 00:08:32,000 --> 00:08:36,000 ons boodskap en ons sleutel saam 139 00:08:36,000 --> 00:08:42,000 en dan mod dat mod dat deur NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 as ons skaal nie ons boodskap in die toepaslike 0 tot 25 reeks die eerste keer, 141 00:08:50,000 --> 00:08:54,000 dan kan ons uiteindelik kry 'n baie weird aantal 142 00:08:54,000 --> 00:08:59,000 omdat die waardes wat ons is op soek na wanneer ons kyk na die boodskap [i], 143 00:08:59,000 --> 00:09:03,000 wanneer ons kyk na die met karakter van ons plat teks boodskap, 144 00:09:03,000 --> 00:09:08,000 is 'n waarde iewers in die 65 tot 122 reeks 145 00:09:08,000 --> 00:09:13,000 gebaseer op die ASCII-waardes vir die hoofletters A deur kleinletters z. 146 00:09:13,000 --> 00:09:18,000 En so wanneer ons dit deur 26 of deur NUM_LETTERS mod, 147 00:09:18,000 --> 00:09:23,000 want dit was ons # define hier bo aan die regterkant, 148 00:09:23,000 --> 00:09:28,000 wat gaan om te gee vir ons 'n waarde wat in die 0 tot 25 reeks, 149 00:09:28,000 --> 00:09:30,000 en ons moet 'n manier om dan skaal wat back-up 150 00:09:30,000 --> 00:09:32,000 en kry dit in die toepaslike ASCII reeks. 151 00:09:32,000 --> 00:09:36,000 Die maklikste manier om dit te doen, is om net te skaal alles 152 00:09:36,000 --> 00:09:39,000 in die 0 tot 25 reeks om te begin, 153 00:09:39,000 --> 00:09:43,000 en dan skuif alles terug aan die einde. 154 00:09:43,000 --> 00:09:46,000 >> Nog 'n algemene fout wat ek gesien het mense loop in is dat 155 00:09:46,000 --> 00:09:50,000 As jy dit nie doen nie hierdie skalering dadelik 156 00:09:50,000 --> 00:09:53,000 en jy voeg boodskap en sleutel saam en voeg jy hulle, sê, 157 00:09:53,000 --> 00:09:58,000 in 'n char veranderlike, die probleem met 158 00:09:58,000 --> 00:10:01,000 sedert die boodskap is [i] is 'n relatief groot aantal om te begin met 159 00:10:01,000 --> 00:10:05,000 onthou dit is ten minste 65 indien dit is 'n hoofletter karakter- 160 00:10:05,000 --> 00:10:09,000 as jy 'n groot sleutel, sê, iets soos 100, 161 00:10:09,000 --> 00:10:13,000 en jy voeg die 2 saam in 'n getekende char jy gaan 'n oorloop te kry. 162 00:10:13,000 --> 00:10:17,000 Jy gaan om 'n waarde te kry wat groter as 127, 163 00:10:17,000 --> 00:10:22,000 wat is die grootste waarde wat 'n char veranderlike kan hou. 164 00:10:22,000 --> 00:10:26,000 Weereens, dis hoekom jy graag wil hê dat die soort van ding is om te begin met te doen. 165 00:10:26,000 --> 00:10:29,000 Sommige mense het rondom daardie geval deur die doen van 'n as anders en toetsing 166 00:10:29,000 --> 00:10:33,000 om te sien of dit sal oorloop voor om dit te doen, 167 00:10:33,000 --> 00:10:36,000 maar hierdie manier kry om dat. 168 00:10:36,000 --> 00:10:40,000 En dan is ons in hierdie oplossing gedruk die hele string aan die einde. 169 00:10:40,000 --> 00:10:45,000 Ander mense 'n karakter op 'n keer gedruk. Beide is awesome. 170 00:10:45,000 --> 00:10:51,000 Op hierdie punt, het julle enige vrae het, enige kommentaar oor hierdie? 171 00:10:51,000 --> 00:10:56,000 Dinge wat jy wil, dinge wat jy wil nie? 172 00:10:56,000 --> 00:10:58,000 >> Ek het 'n vraag. 173 00:10:58,000 --> 00:11:01,000 Miskien het ek dit gemis het tydens jou verduideliking, maar hoe hierdie program 174 00:11:01,000 --> 00:11:07,000 slaan die spasies vir die koppeling van die sleutel tot die lengte van die teks? 175 00:11:07,000 --> 00:11:10,000 Dit is net die keiser cipher. >> O, jammer, ja. 176 00:11:10,000 --> 00:11:13,000 Ja, sal ons sien dat. 177 00:11:13,000 --> 00:11:16,000 In die keiser cipher ons het rondom daardie, omdat 178 00:11:16,000 --> 00:11:18,000 ons net omgekeer karakters. 179 00:11:18,000 --> 00:11:27,000 Ons het net het hulle gedraai as hulle was hoofletters of klein letters. 180 00:11:27,000 --> 00:11:32,000 Julle ouens voel redelik goed oor hierdie? 181 00:11:32,000 --> 00:11:34,000 Voel vry om hierdie huis te kopieer, neem dit, 182 00:11:34,000 --> 00:11:37,000 vergelyk dit met wat julle geskryf het. 183 00:11:37,000 --> 00:11:42,000 Beslis voel vry om vrae daaroor te stuur. 184 00:11:42,000 --> 00:11:46,000 En weer besef dat die doel hier met jou probleem sit 185 00:11:46,000 --> 00:11:50,000 is nie julle ouens te kry om perfekte kode vir jou probleem stelle te skryf. 186 00:11:50,000 --> 00:11:57,000 Dit is 'n leerervaring. Ja. 187 00:11:57,000 --> 00:12:01,000 >> Terug na die doen terwyl lus, indien dit gelyk is aan nul, 188 00:12:01,000 --> 00:12:06,000 so null net beteken niks, hulle het net Enter? 189 00:12:06,000 --> 00:12:12,000 Null is 'n spesiale pointer waarde, 190 00:12:12,000 --> 00:12:17,000 en ons gebruik null wanneer ons wil sê 191 00:12:17,000 --> 00:12:23,000 ons het 'n wyser veranderlike wat verwys na niks. 192 00:12:23,000 --> 00:12:28,000 En so tipies, beteken dit dat hierdie veranderlike, hierdie boodskap veranderlike 193 00:12:28,000 --> 00:12:35,000 is leeg, en hier, omdat ons met behulp van die CS50 spesiale string tipe, 194 00:12:35,000 --> 00:12:37,000 wat is die CS50 string tipe? 195 00:12:37,000 --> 00:12:42,000 Het jy al gesien wat dit is wanneer Dawid trek terug die enjinkap in die lesing? 196 00:12:42,000 --> 00:12:44,000 Dit is 'n funky-dit is 'n wyser, reg? 197 00:12:44,000 --> 00:12:48,000 Okay, ja >> Dit is 'n char *. 198 00:12:48,000 --> 00:12:52,000 En so het regtig ons kan vervang 199 00:12:52,000 --> 00:12:56,000 reg hier met char * boodskap, 200 00:12:56,000 --> 00:13:04,000 en so die GetString funksie, indien dit nie suksesvol nie 'n string van die gebruiker, 201 00:13:04,000 --> 00:13:08,000 dit kan nie 'n string parse en die een geval waarin dit 'n string kan nie word geparseerd 202 00:13:08,000 --> 00:13:11,000 is as die gebruiker die einde van die lêer karakter, die beheer D, 203 00:13:11,000 --> 00:13:17,000 wat is nie iets wat jy gewoonlik doen, maar as dit gebeur 204 00:13:17,000 --> 00:13:20,000 dan is die funksie sal hierdie null waarde terug te kom as 'n manier om te sê 205 00:13:20,000 --> 00:13:23,000 "Hey, ek het nie 'n string." 206 00:13:23,000 --> 00:13:27,000 Wat sou gebeur as ons nie die boodskap '= null, 207 00:13:27,000 --> 00:13:30,000 dit is iets wat ons is nog nie te doen? 208 00:13:30,000 --> 00:13:32,000 Waarom sou dit wees 'n probleem hier? 209 00:13:32,000 --> 00:13:38,000 Omdat ek weet dat ons gepraat het 'n bietjie in die lesing oor die geheue lekkasies. 210 00:13:38,000 --> 00:13:42,000 Ja, laat ons doen dit, en laat ons sien wat gebeur. 211 00:13:42,000 --> 00:13:44,000 >> Basil se vraag was wat gebeur as ons nie eintlik nie 212 00:13:44,000 --> 00:13:48,000 hierdie boodskap = null toets? 213 00:13:48,000 --> 00:13:51,000 Kom ons blaai na die top. 214 00:13:51,000 --> 00:13:53,000 Julle ouens kan nie kommentaar lewer dit uit. 215 00:13:53,000 --> 00:13:55,000 Eintlik, ek stoor dit in 'n hersiening. 216 00:13:55,000 --> 00:13:58,000 Dit sal Hersiening 3. 217 00:13:58,000 --> 00:14:02,000 Wat jy hoef te doen om hierdie program uit te voer, moet jy hierdie rat-ikoon te kliek hier, 218 00:14:02,000 --> 00:14:04,000 en jy sal hê om 'n argument te voeg. 219 00:14:04,000 --> 00:14:10,000 Jy het om te gee dit die belangrikste argument sedert ons wil om te slaag in 'n command line argument. 220 00:14:10,000 --> 00:14:13,000 Hier is ek gaan dit gee die nommer 3. Ek hou van 3. 221 00:14:13,000 --> 00:14:19,000 Nou terug inzoomen, die uitvoer van die program. 222 00:14:19,000 --> 00:14:24,000 Dit is hardloop, samestelling, bou. 223 00:14:24,000 --> 00:14:27,000 Hier gaan ons. Dit is wat wag om te word gevra. 224 00:14:27,000 --> 00:14:33,000 As ek tik in iets soos hello-waar het dit gaan? 225 00:14:33,000 --> 00:14:38,000 O, my program het te lank om te hardloop. Ek was jawing vir te lank. 226 00:14:38,000 --> 00:14:40,000 Hier gaan dit. 227 00:14:40,000 --> 00:14:43,000 Nou ek tik in Hello. 228 00:14:43,000 --> 00:14:46,000 Sien ons dat dit gepas versleutelt. 229 00:14:46,000 --> 00:14:52,000 Nou wat gebeur as ons vinnige GetString doen null om terug te keer? 230 00:14:52,000 --> 00:14:57,000 Onthou, ek het gesê dat ons het dit gedoen deur te druk beheer D op dieselfde tyd. 231 00:14:57,000 --> 00:14:59,000 Ek sal hier Scroll up. Ons sal dit weer hardloop. 232 00:14:59,000 --> 00:15:01,000 Gebou. Daar gaan dit. 233 00:15:01,000 --> 00:15:04,000 Nou toe ek beheer D 234 00:15:04,000 --> 00:15:12,000 Ek het hierdie lyn wat sê opt/sandbox50/bin/run.sh, segmentering skuld. 235 00:15:12,000 --> 00:15:15,000 Het julle gesien dat voor? 236 00:15:15,000 --> 00:15:17,000 >> [Studente] Waarom is daar geen >> Jammer? 237 00:15:17,000 --> 00:15:20,000 [Studente] Waarom is daar geen kern dump in hierdie geval? 238 00:15:20,000 --> 00:15:26,000 Die kern dump is die vraag hoekom is daar geen kern dump hier? 239 00:15:26,000 --> 00:15:29,000 Die vraag is dat daar ook mag wees, maar die kern dump is 'n lêer 240 00:15:29,000 --> 00:15:31,000 kry op die hardeskyf gestoor. 241 00:15:31,000 --> 00:15:34,000 In hierdie geval het ons het afgeskakel kern dumps 242 00:15:34,000 --> 00:15:37,000 op die run-bediener, sodat ons mense nie seg verskuiwings 243 00:15:37,000 --> 00:15:40,000 en die opbou van ton van kern dumps. 244 00:15:40,000 --> 00:15:46,000 Maar jy kan een kry. 245 00:15:46,000 --> 00:15:48,000 Core dumps is die soort van ding wat jy kan dikwels afskakel, 246 00:15:48,000 --> 00:15:52,000 en soms wat jy doen. 247 00:15:52,000 --> 00:15:55,000 Die segmentering skuld, jou vraag te beantwoord, Basil, 248 00:15:55,000 --> 00:16:00,000 sê dat ons probeer om 'n wyser om toegang te verkry tot 249 00:16:00,000 --> 00:16:05,000 dit was nie om te verwys na iets. 250 00:16:05,000 --> 00:16:09,000 Onthou Binky in die video wanneer Binky probeer 251 00:16:09,000 --> 00:16:12,000 gaan toegang tot 'n wyser wat nie verwys na iets? 252 00:16:12,000 --> 00:16:16,000 In hierdie geval dink ek tegnies die wyser wys na iets. 253 00:16:16,000 --> 00:16:20,000 Dit verwys na null, wat is tegnies 0, 254 00:16:20,000 --> 00:16:25,000 maar dit word gedefinieer om te wees in 'n segment wat nie toeganklik 255 00:16:25,000 --> 00:16:28,000 deur jou program, sodat jy 'n segmentering skuld 256 00:16:28,000 --> 00:16:31,000 omdat jy nie geheue toegang tot wat in 'n geldige segment 257 00:16:31,000 --> 00:16:38,000 soos die hoop segment of die stapel segment of die data segment. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Enige meer vrae oor die keiser? 260 00:16:48,000 --> 00:16:51,000 >> Kom ons gaan. Kom ons kyk na Hersiening 2 regtig vinnig. 261 00:16:51,000 --> 00:17:00,000 Dis Vigenère. 262 00:17:00,000 --> 00:17:04,000 Hier in Vigenère 263 00:17:04,000 --> 00:17:06,000 ons sal wandel deur hierdie een redelik vinnig, want, weer, 264 00:17:06,000 --> 00:17:10,000 Vigenère en Caesar is baie soortgelyk. 265 00:17:10,000 --> 00:17:12,000 Selected kommentaar is voor, 266 00:17:12,000 --> 00:17:17,000 # Define is voor om te verhoed dat die gebruik van hierdie magic nommers. 267 00:17:17,000 --> 00:17:21,000 Die nice ding is om te sê ons wou om te beweeg 268 00:17:21,000 --> 00:17:23,000 'n ander alfabet of iets soos dit. 269 00:17:23,000 --> 00:17:26,000 Eerder as om met die hand te gaan al die 26's in die kode verander 270 00:17:26,000 --> 00:17:30,000 ons kan verander om dit te 27 of gooi dit neer 271 00:17:30,000 --> 00:17:34,000 as ons die gebruik van verskillende alfabette, verskillende tale. 272 00:17:34,000 --> 00:17:38,000 Weereens, ons het hierdie tjek van die argument tel, 273 00:17:38,000 --> 00:17:42,000 en jy regtig kan amper neem hierdie as 'n sjabloon. 274 00:17:42,000 --> 00:17:46,000 Pretty much elke program wat jy skryf, moet 275 00:17:46,000 --> 00:17:50,000 as wat dit neem command line argumente n reeks van lyne 276 00:17:50,000 --> 00:17:55,000 wat lees soos dit aan die begin. 277 00:17:55,000 --> 00:17:59,000 Dit is een van die eerste gesonde verstand toetse wat jy wil doen. 278 00:17:59,000 --> 00:18:03,000 >> Hier is wat ons gedoen het, was ons seker gemaak dat 279 00:18:03,000 --> 00:18:06,000 die sleutelwoord geldig was, en dit was die tweede tjek wat ons gedoen het. 280 00:18:06,000 --> 00:18:11,000 Let weer op dat ons geskei van argc en 2. 281 00:18:11,000 --> 00:18:14,000 Let daarop dat in hierdie geval een ding wat ons moes doen, in plaas 282 00:18:14,000 --> 00:18:18,000 van die gebruik van 'n i ons wou die hele string te valideer, 283 00:18:18,000 --> 00:18:21,000 en om te doen wat jy eintlik karakter om te gaan deur die karakter 284 00:18:21,000 --> 00:18:23,000 oor die tou. 285 00:18:23,000 --> 00:18:29,000 Daar is nie 'n goeie manier om iets op te roep 286 00:18:29,000 --> 00:18:31,000 want selfs, byvoorbeeld, 'n ek sal terugkeer 0 287 00:18:31,000 --> 00:18:37,000 as dit 'n heelgetal nie kan pars nie, sodat nie eens werk. 288 00:18:37,000 --> 00:18:42,000 Weereens, mooi boodskap van die gebruiker presies wat gebeur het. 289 00:18:42,000 --> 00:18:45,000 Dan weer, hier, ons hanteer ook die geval waar 290 00:18:45,000 --> 00:18:50,000 die gebruiker tipes in 'n beheer-D random karakter. 291 00:18:50,000 --> 00:18:54,000 >> En dan Charlotte het 'n vraag vroeër oor hoe ons bestuur ruimtes te slaan 292 00:18:54,000 --> 00:18:57,000 in ons string hier. 293 00:18:57,000 --> 00:19:00,000 Dit was soort van soortgelyk aan wat ons gedoen het met die Myspace program 294 00:19:00,000 --> 00:19:04,000 wat ons gedoen het in die artikel, en die manier waarop dit gewerk 295 00:19:04,000 --> 00:19:08,000 is dat ons die aantal briewe wat ons gesien het nagespoor. 296 00:19:08,000 --> 00:19:13,000 Soos ons gestap oor die boodskap string, soos ons gestap oor die karakter deur karakter, 297 00:19:13,000 --> 00:19:16,000 ons nagespoor die indeks as deel van ons loop, en dan moet ons ook opgespoor 298 00:19:16,000 --> 00:19:21,000 die aantal letters, so nie spesiale karakters, nie-syfers, nie-wit ruimte 299 00:19:21,000 --> 00:19:27,000 wat ons gesien het in die afsonderlike veranderlike. 300 00:19:27,000 --> 00:19:33,000 En dan hierdie oplossing verander die sleutel 301 00:19:33,000 --> 00:19:41,000 'n werklike sleutel heelgetal te kry, en dit beteken dat op die vlieg, 302 00:19:41,000 --> 00:19:47,000 reg voor gaan dit dan die werklike boodskap karakter te enkripteer. 303 00:19:47,000 --> 00:19:50,000 Daar is 'n paar oplossings wat was perfek groot te 304 00:19:50,000 --> 00:19:58,000 wat sou die sleutel verander wanneer die toets vir die sleutel se geldigheid. 305 00:19:58,000 --> 00:20:01,000 Behalwe om seker te maak dat die karakter en die sleutelwoord 306 00:20:01,000 --> 00:20:05,000 is 'n alfabetiese karakter is dit ook draai dit in 'n heelgetal 307 00:20:05,000 --> 00:20:13,000 in die 0 tot 25 reeks te slaan om te doen wat later in hierdie lus. 308 00:20:13,000 --> 00:20:18,000 Weereens, wat jy hier sien dit regtig is presies dieselfde kode 309 00:20:18,000 --> 00:20:22,000 wat ons gebruik in Caesar op hierdie punt. 310 00:20:22,000 --> 00:20:25,000 Jy het presies dieselfde ding doen, sodat die werklike truuk uitzoeken 311 00:20:25,000 --> 00:20:30,000 hoe die term om te draai in 'n heelgetal. 312 00:20:30,000 --> 00:20:35,000 >> Een ding wat ons hier gedoen het, wat is 'n bietjie dig 313 00:20:35,000 --> 00:20:39,000 is dat ons hierdie frase herhaal, ek dink jy dit kan noem, 314 00:20:39,000 --> 00:20:45,000 3 verskillende tye op die lyne 58, 59, en 61. 315 00:20:45,000 --> 00:20:52,000 Kan iemand verduidelik wat presies hierdie frase nie? 316 00:20:52,000 --> 00:20:55,000 Dit is toegang tot 'n karakter, soos jy gesê het. 317 00:20:55,000 --> 00:20:59,000 Ja, dit is [onhoorbaar] 'n karakter in die navraag, 318 00:20:59,000 --> 00:21:04,000 en dus is dit die aantal letters gesien omdat jy net beweeg langs 319 00:21:04,000 --> 00:21:06,000 die trefwoord wanneer jy die brief gesien het, 320 00:21:06,000 --> 00:21:10,000 so wat gaan ruimtes effektief te slaan en dinge soos dat. 321 00:21:10,000 --> 00:21:12,000 Ja, presies. 322 00:21:12,000 --> 00:21:16,000 En dan wanneer jy gesien het die trefwoord leë jy net mod sodat jy beweeg terug rond. 323 00:21:16,000 --> 00:21:18,000 Presies. Dit is 'n perfekte verduideliking. 324 00:21:18,000 --> 00:21:23,000 Wat sê Kevin is wat ons wil indeks in die navraag. 325 00:21:23,000 --> 00:21:28,000 Ons wil die num_letters_seen karakter te kry, as jy wil, 326 00:21:28,000 --> 00:21:32,000 maar as num_letters_seen meer is as die lengte van die term, 327 00:21:32,000 --> 00:21:37,000 die manier waarop ons terug te kry in die toepaslike reeks is gebruik ons ​​die mod-operateur 328 00:21:37,000 --> 00:21:40,000 om effektief te rond draai. 329 00:21:40,000 --> 00:21:43,000 Byvoorbeeld, soos in die kort, ons navraag is spek, 330 00:21:43,000 --> 00:21:46,000 en dit is 5 letters lank. 331 00:21:46,000 --> 00:21:50,000 Maar ons het 6 letters in ons plain text gesien op hierdie punt 332 00:21:50,000 --> 00:21:52,000 en geïnkripteer 6. 333 00:21:52,000 --> 00:21:57,000 Sal ons uiteindelik toegang tot die num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 wat 6, mod die lengte van die term, 5, 335 00:22:00,000 --> 00:22:04,000 en so sal ons kry 1, en so wat ons sal doen is dat ons sal 336 00:22:04,000 --> 00:22:14,000 toegang tot die eerste karakter binnekant van ons navraag by daardie punt. 337 00:22:14,000 --> 00:22:21,000 >> Alle reg, enige vrae oor Vigenère 338 00:22:21,000 --> 00:22:26,000 voor ons gaan? 339 00:22:26,000 --> 00:22:31,000 Julle ouens voel redelik goed oor hierdie? 340 00:22:31,000 --> 00:22:35,000 Modern, groot. 341 00:22:35,000 --> 00:22:38,000 Ek wil om seker te maak dat jy ouens kry die kans om die kode te sien 342 00:22:38,000 --> 00:22:48,000 wat ons dink goed lyk en het die kans om te leer uit dit. 343 00:22:48,000 --> 00:22:53,000 Dit gaan om die laaste wat ons sal gebruik word om ruimtes vir die tyd, 344 00:22:53,000 --> 00:22:59,000 en ons gaan om die oorgang nou, en ek gaan om te gaan na cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 sodat ons dit kan doen om 'n bietjie van die quiz hersiening. 346 00:23:06,000 --> 00:23:10,000 Die beste manier wat ek dink om te begin doen quiz review 347 00:23:10,000 --> 00:23:15,000 is om te kom na hierdie Lesings bladsy, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 en onder elk van die week opskrifte, so as ek kyk hier by Week 0, 349 00:23:20,000 --> 00:23:27,000 Ek sien dat ons 'n lys van die onderwerpe wat ons bedek in Week 0. 350 00:23:27,000 --> 00:23:31,000 >> Indien enige van hierdie onderwerpe vir julle vreemd lyk 351 00:23:31,000 --> 00:23:34,000 jy sal beslis wil om terug te gaan en skure die lesingnotas en moontlik 352 00:23:34,000 --> 00:23:39,000 selfs vlugtig deur die lesings, kyk hulle weer as jy wil 353 00:23:39,000 --> 00:23:44,000 om 'n gevoel te kry vir wat gaan aan met elk van hierdie onderwerp. 354 00:23:44,000 --> 00:23:49,000 Ek sal addisioneel sê dat hierdie jaar een van die koel hulpbronne wat ons het 355 00:23:49,000 --> 00:23:55,000 is hierdie kortbroek wat ons gemaak het, en as jy kyk na Week 0, 356 00:23:55,000 --> 00:24:00,000 Ons het nie al die onderwerpe wat gedek word, maar ons het 'n hele paar van hulle, 357 00:24:00,000 --> 00:24:03,000 sommige van die moeiliker, so kyk na hierdie kortbroek weer 358 00:24:03,000 --> 00:24:08,000 is 'n goeie manier om jou te kry tot en met spoed. 359 00:24:08,000 --> 00:24:15,000 In die besonder, ek gaan om te sit in 'n prop vir die 3 op die bodem, want ek het daardie. 360 00:24:15,000 --> 00:24:20,000 Maar as jy sukkel met binêre, stukkies, hex, daardie soort van dinge, 361 00:24:20,000 --> 00:24:22,000 program is 'n groot plek om te begin. 362 00:24:22,000 --> 00:24:25,000 ASCII is 'n ander een dit is goed om te sien. 363 00:24:25,000 --> 00:24:31,000 Jy kan selfs kyk my by 1.5x spoed as ek gaan te stadig vir jou. 364 00:24:31,000 --> 00:24:35,000 Sedert dit se resensie, voel vry om dit te doen. 365 00:24:35,000 --> 00:24:40,000 >> Net om te regtig vinnig begin, gaan ons om te gaan deur middel van 'n paar van hierdie quiz probleme 366 00:24:40,000 --> 00:24:44,000 net om vinnig te kansellasies deur middel van hierdie. 367 00:24:44,000 --> 00:24:50,000 Byvoorbeeld, laat ons kyk na probleem 16 wat ek tot hier gekom het op die bord. 368 00:24:50,000 --> 00:24:54,000 Ons het hierdie volgende berekening in binêr, 369 00:24:54,000 --> 00:24:56,000 en ons wil om enige werk te wys. 370 00:24:56,000 --> 00:24:59,000 Okay, ek gaan om te gee dit 'n skoot. 371 00:24:59,000 --> 00:25:01,000 Julle moet saam met papier, 372 00:25:01,000 --> 00:25:04,000 en ons doen dit regtig vinnig. 373 00:25:04,000 --> 00:25:06,000 Ons wil die volgende berekening in binêr te voer. 374 00:25:06,000 --> 00:25:16,000 Ek het 00.110.010. 375 00:25:16,000 --> 00:25:27,000 En ek gaan by te voeg om dit 00.110.010. 376 00:25:27,000 --> 00:25:30,000 Vir die wiskunde genieë die volgende saam by die huis, 377 00:25:30,000 --> 00:25:35,000 dit effektief te vermenigvuldig deur 2. 378 00:25:35,000 --> 00:25:37,000 Kom ons begin. 379 00:25:37,000 --> 00:25:39,000 Ons gaan dieselfde toevoeging algoritme wat ons doen om te volg 380 00:25:39,000 --> 00:25:43,000 wanneer ons desimale getalle bymekaar. 381 00:25:43,000 --> 00:25:46,000 Werklik die enigste verskil hier is dat ons loop terug om 382 00:25:46,000 --> 00:25:51,000 sodra ons het 1 + 1 in plaas van een keer kry ons 10. 383 00:25:51,000 --> 00:25:53,000 >> As ons begin van die reg, regtig vinnig, wat is die eerste syfer? 384 00:25:53,000 --> 00:25:55,000 [Studente] 0 >> [Nate H.]. 0. 385 00:25:55,000 --> 00:25:58,000 Groot, en die tweede syfer? 386 00:25:58,000 --> 00:26:00,000 [Studente] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Is dit 'n 1? 1 + 1 is? 388 00:26:02,000 --> 00:26:04,000 [Studente] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Presies, so wat is die syfer dat ek reg onder die 2 kinders bymekaar getel skryf? 390 00:26:08,000 --> 00:26:11,000 [Studente] 1, 0 of 0 en dan dra die 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 en dra 'n 1, presies. 392 00:26:15,000 --> 00:26:18,000 Volgende up, Basil, jy. 393 00:26:18,000 --> 00:26:20,000 Wat is die derde? >> [Basil] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, volmaak. Kevin? 395 00:26:23,000 --> 00:26:27,000 [Kevin] 0 >> [Nate H.] 0, Charlotte? 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0 >> [Nate H.]. Ja, en wat moet ek doen? 397 00:26:30,000 --> 00:26:32,000 [Studente] Die 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] En wat moet ek doen? En dan dra ek die 1. 399 00:26:34,000 --> 00:26:36,000 Perfect, Sahb? >> [Sahb] Nou het jy 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] En doen ek hier iets om? 401 00:26:40,000 --> 00:26:43,000 [Sahb] dan vir die volgende een wat jy het 1 omdat jy oorgedra 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Groot, so hier het ons kan voltooi dit. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Studente] Is 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, soos jy sê, is 10 of 1, 0, eerder. 407 00:27:01,000 --> 00:27:07,000 10 is 'n wanbenaming, want my 10 beteken die getal 10, 408 00:27:07,000 --> 00:27:12,000 en dit is die flater van hoe ons verteenwoordig wanneer ons skryf dit. 409 00:27:12,000 --> 00:27:20,000 Ons verteenwoordig die aantal 2 deur 1, 0, en die getal 10 is effens anders. 410 00:27:20,000 --> 00:27:23,000 >> Wat is soort van lekker oor binêre is dat daar werklik is nie so baie 411 00:27:23,000 --> 00:27:25,000 gevalle wat jy nodig het om te leer. 412 00:27:25,000 --> 00:27:30,000 Daar is 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 is 0, en dan dra 'n 1, 414 00:27:34,000 --> 00:27:37,000 en dan kan jy hier te sien op die derde kolom van die reg 415 00:27:37,000 --> 00:27:40,000 ons het hierdie 1, 1 en 1. 416 00:27:40,000 --> 00:27:43,000 En 1 + 1 + 1 is 'n 1, 417 00:27:43,000 --> 00:27:45,000 en jy dra 'n ander 1. 418 00:27:45,000 --> 00:27:48,000 Wanneer jy binêre Daarbenewens doen, eenvoudig. 419 00:27:48,000 --> 00:27:51,000 Ek wil doen 'n paar meer van hierdie gesonde verstand gaan julle 420 00:27:51,000 --> 00:27:54,000 Voor jy gaan, want dit is 421 00:27:54,000 --> 00:28:00,000 waarskynlik iets wat ons sal sien op die quiz. 422 00:28:00,000 --> 00:28:03,000 Nou laat ons doen dit volgende een so goed. 423 00:28:03,000 --> 00:28:06,000 Kom ons doen probleem 17. 424 00:28:06,000 --> 00:28:12,000 Ons gaan die volgende binêre nommer om te skakel na desimaal. 425 00:28:12,000 --> 00:28:28,000 Ek het 10100111001. 426 00:28:28,000 --> 00:28:33,000 Onthou in die binêre video wat ek gedoen het 427 00:28:33,000 --> 00:28:36,000 Ek stap deur 'n paar voorbeelde, en ek het gewys hoe 428 00:28:36,000 --> 00:28:41,000 alles werk wanneer jy dit doen in desimaal. 429 00:28:41,000 --> 00:28:45,000 Wanneer jy werk in desimale voorstelling Ek dink ons ​​is 430 00:28:45,000 --> 00:28:48,000 op hierdie punt in ons lewens so vlot in dit wat 431 00:28:48,000 --> 00:28:53,000 dit is redelik maklik om te glans oor die meganika van hoe dit eintlik werk. 432 00:28:53,000 --> 00:28:59,000 >> Maar 'n vinnige terugblik om te doen, as ek die nommer 137 433 00:28:59,000 --> 00:29:06,000 dit beteken en regtig weer, dit is in desimale voorstelling 434 00:29:06,000 --> 00:29:19,000 die getal 137 in desimale beteken dat ek 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 Dit is al wat bly op die skerm. 436 00:29:22,000 --> 00:29:29,000 En dan as jy kyk na hierdie nommers reg hier, 437 00:29:29,000 --> 00:29:34,000 100, 10 en 1, sien jy dat hulle eintlik is al die magte van 10. 438 00:29:34,000 --> 00:29:43,000 Ek het 10 ², 10 ¹, en 10 aan die nul. 439 00:29:43,000 --> 00:29:48,000 Ons het 'n soortgelyke soort van ding in die binêre 440 00:29:48,000 --> 00:29:55,000 behalwe dat ons basis, soos ons dit noem, is 2 in plaas van 10. 441 00:29:55,000 --> 00:29:58,000 Hierdie 10s wat ek geskryf het hier aan die onderkant, 442 00:29:58,000 --> 00:30:02,000 hierdie 10 ², 10 ¹, 10 aan die nulpunt, 10 is ons basis, 443 00:30:02,000 --> 00:30:08,000 en die eksponent, 0, 1 of 2, 444 00:30:08,000 --> 00:30:14,000 geïmpliseer word deur die posisie van die syfer in die getal wat ons skryf. 445 00:30:14,000 --> 00:30:21,000 1, as ons kyk na dit, hierdie 1 is in die 2de posisie. 446 00:30:21,000 --> 00:30:27,000 Die 3 is in die 1ste plek, en die 7 is in die 0 posisie. 447 00:30:27,000 --> 00:30:35,000 Dit is hoe ons die verskillende eksponente hieronder vir ons basisse. 448 00:30:35,000 --> 00:30:40,000 >> Na aanleiding van hierdie we'll-eintlik, jy weet wat? 449 00:30:40,000 --> 00:30:43,000 Ons sal doen waar het my maak ongedaan knoppie gaan? 450 00:30:43,000 --> 00:30:45,000 Daar gaan dit. 451 00:30:45,000 --> 00:30:47,000 Ek is mal oor hierdie ongedaan ding. 452 00:30:47,000 --> 00:30:51,000 Na aanleiding van hierdie, ek dink vir my ten minste 453 00:30:51,000 --> 00:30:54,000 die maklikste manier om te begin die omskakeling van 'n binêre getal 454 00:30:54,000 --> 00:30:57,000 of 'n heksadesimale nommer waar die basis is 16 455 00:30:57,000 --> 00:31:02,000 en nie 10 of 2 is om voort te gaan en skryf 456 00:31:02,000 --> 00:31:09,000 die basisse en eksponente vir al die nommers in my binêre getal aan die bokant. 457 00:31:09,000 --> 00:31:14,000 As ons begin van links na regs weer, 458 00:31:14,000 --> 00:31:17,000 wat is 'n soort van die counter, 459 00:31:17,000 --> 00:31:23,000 Ek kom terug verander na swart hier, ons het die 2 aan die 0 posisie, 460 00:31:23,000 --> 00:31:27,000 en dan het ons 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 en dan 2 tot 3, 2 tot 4, 2 tot 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9 en 10. 463 00:31:39,000 --> 00:31:41,000 Hierdie getalle wat ek geskryf het is al die eksponente. 464 00:31:41,000 --> 00:31:48,000 Ek het net die afspoelwaentjies geskryf het hier in die eerste 3 net vir die ruimte. 465 00:31:48,000 --> 00:31:50,000 >> Op hierdie punt het ek gaan om voort te gaan en ek is eintlik gaan om uit te vee 466 00:31:50,000 --> 00:31:53,000 die dinge wat ons gedoen het in desimale, as dit is okay. 467 00:31:53,000 --> 00:31:57,000 Jy het al het dit. 468 00:31:57,000 --> 00:32:05,000 Dié van julle kyk aanlyn Ek is seker dat, sal in staat wees om my te rewind as jy wil. 469 00:32:05,000 --> 00:32:07,000 Skakel terug na die pen. 470 00:32:07,000 --> 00:32:12,000 Nou, wat ons kan doen as julle nie heeltemal tot vinniger op jou magte van 2, 471 00:32:12,000 --> 00:32:15,000 wat is heeltemal cool. 472 00:32:15,000 --> 00:32:18,000 Dit gebeur. Ek verstaan. 473 00:32:18,000 --> 00:32:23,000 Een keer het ek 'n job interview waar Ek was vertel Ek al die magte van 2 moet weet 474 00:32:23,000 --> 00:32:26,000 om deur middel van 2 tot 30. 475 00:32:26,000 --> 00:32:29,000 Dit was nie 'n werk wat ek gekry het. 476 00:32:29,000 --> 00:32:32,000 In elk geval, julle ouens kan voort te gaan en doen die wiskunde hier, 477 00:32:32,000 --> 00:32:35,000 maar met binêre dit nie regtig nie sin maak, 478 00:32:35,000 --> 00:32:38,000 en ook nie dit maak sin met desimale of hexadecimale nie, 479 00:32:38,000 --> 00:32:43,000 die wiskunde te doen waar jy het nulle. 480 00:32:43,000 --> 00:32:49,000 Jy kan sien Ek het 0 hier, hier 'n 0, 0, 0, 0, 0 hier. 481 00:32:49,000 --> 00:32:52,000 Hoekom kan dit nie sin maak nie die werklike wiskunde te doen 482 00:32:52,000 --> 00:32:56,000 die toepaslike krag van 2 vir daardie posisie te bereken? 483 00:32:56,000 --> 00:32:59,000 Presies, soos Charlotte sê, sal dit 0. 484 00:32:59,000 --> 00:33:05,000 Kan net so goed spaar jouself die tyd as die berekening van die magte van 2 is nie jou sterk pak. 485 00:33:05,000 --> 00:33:10,000 In hierdie geval het ons net nodig het om dit te bereken vir 2 tot die 0 wat-? 486 00:33:10,000 --> 00:33:12,000 [Studente] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 aan die 3 wat is? 488 00:33:14,000 --> 00:33:16,000 [Studente] 8 >> [Nate H.]. 8. 489 00:33:16,000 --> 00:33:18,000 2 van die 4? 490 00:33:18,000 --> 00:33:21,000 [Studente] 2. Ek is jammer, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 aan die 4 is 16, presies. 492 00:33:26,000 --> 00:33:28,000 2 tot 5, Kevin >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 aan die 8? 494 00:33:32,000 --> 00:33:38,000 [Studente] 32 x 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] Perfect. 496 00:33:41,000 --> 00:33:43,000 En 2 aan die 10? 497 00:33:43,000 --> 00:33:45,000 [Studente] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Ja, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Sodra ons het hierdie getalle kan ons vat hulle almal op. 500 00:33:57,000 --> 00:34:01,000 En dit is waar dit is werklik belangrik om 'n paar dinge om te doen. 501 00:34:01,000 --> 00:34:07,000 Een is om te gaan stadig en maak seker jou werk. 502 00:34:07,000 --> 00:34:10,000 Jy kan jou vertel dat daar 'n 1 aan die einde van hierdie nommer, 503 00:34:10,000 --> 00:34:15,000 so ek moet beslis 'n onewe getal as my gevolg, 504 00:34:15,000 --> 00:34:18,000 omdat al die ander mense gaan selfs getalle 505 00:34:18,000 --> 00:34:21,000 gegee dat dit is 'n binêre getal. 506 00:34:21,000 --> 00:34:24,000 Die ander ding om te doen is as jy op hierdie punt op die toets 507 00:34:24,000 --> 00:34:27,000 en jy geskryf het dit so ver 508 00:34:27,000 --> 00:34:30,000 en jy is besig om uit te loop van die tyd 509 00:34:30,000 --> 00:34:33,000 kyk na die aantal punte wat die probleem is die moeite werd. 510 00:34:33,000 --> 00:34:40,000 Hierdie probleem, soos jy kan sien as ek terug flip na my laptop regtig vinnig- 511 00:34:40,000 --> 00:34:44,000 hierdie probleem is 2 punte werd, so dit is nie die soort van optelling 512 00:34:44,000 --> 00:34:47,000 jy moet gaan deur as jy regtig vir tyd gedruk. 513 00:34:47,000 --> 00:34:52,000 Maar ons sal skakel terug na die iPad, en ons gaan dit regtig vinnig. 514 00:34:52,000 --> 00:34:54,000 >> Ek hou van doen eers die klein getalle 515 00:34:54,000 --> 00:34:56,000 want ek vind dit makliker. 516 00:34:56,000 --> 00:35:00,000 Ek hou van 32 en 8 want hulle gaan saam redelik maklik, en ons kry 50. 517 00:35:00,000 --> 00:35:03,000 16 en 1 kry 17. 518 00:35:03,000 --> 00:35:05,000 Daar kry ons 57, 519 00:35:05,000 --> 00:35:14,000 en dan kan ons die res van hierdie te doen nie, so ons kan doen 57, 156. 520 00:35:14,000 --> 00:35:16,000 Kom op. 521 00:35:16,000 --> 00:35:19,000 Man, goed, laat ons sien. 522 00:35:19,000 --> 00:35:27,000 Ons het 57, 256, en 1024. 523 00:35:27,000 --> 00:35:31,000 Op hierdie punt, ek wil eerder net gaan deur. 524 00:35:31,000 --> 00:35:35,000 Ek het geen idee. Ek duidelik nodig om op hierdie te lees. 525 00:35:35,000 --> 00:35:40,000 7, 6 en 4, kry jy 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Dan kry ons 3, en dan kry ons 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Paaseier, enigiemand? 530 00:35:55,000 --> 00:35:59,000 Enigiemand erken dat hierdie getal? 531 00:35:59,000 --> 00:36:02,000 Chris erken die getal. Wat beteken dit, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, so as jy kyk na hierdie, dit lyk soos leet. 534 00:36:11,000 --> 00:36:15,000 Hacker stuff. Wees op die uitkyk vir daardie soort van dinge op die akademiese trimester of die quiz, eerder. 535 00:36:15,000 --> 00:36:19,000 As jy sien dat die soort van dinge en jy wonder "Huh," 536 00:36:19,000 --> 00:36:22,000 wat werklik iets beteken. 537 00:36:22,000 --> 00:36:24,000 Ek weet nie. David hou daarvan om dit in 538 00:36:24,000 --> 00:36:26,000 Dit is 'n goeie manier om te sanity check dit. 539 00:36:26,000 --> 00:36:30,000 Soos okay, ek kan sien wat aangaan. 540 00:36:30,000 --> 00:36:34,000 >> Dis Week 0/Week 1 stuff. 541 00:36:34,000 --> 00:36:39,000 As ons skakel terug na ons laptop nou, 542 00:36:39,000 --> 00:36:46,000 uitzoomen, en 'n paar ander dinge. 543 00:36:46,000 --> 00:36:50,000 Daar is 'n ASCII, wat ons het 'n baie te doen met die probleem stelle. 544 00:36:50,000 --> 00:36:55,000 Hierdie idee van kapitaal A. Wat is dit regtig? 545 00:36:55,000 --> 00:36:57,000 Wetende dat dit is die desimale heelgetal. 546 00:36:57,000 --> 00:37:00,000 65 is wat dit is gekarteer in die ASCII-tabel, 547 00:37:00,000 --> 00:37:03,000 en dit is dan hoe die rekenaar skryf dit, 548 00:37:03,000 --> 00:37:06,000 en dit is hoe ons gekry het eintlik skryf 549 00:37:06,000 --> 00:37:09,000 die karakter kapitaal en die karakter onderkas 'n 550 00:37:09,000 --> 00:37:14,000 in sommige van hierdie oplossings en probleem stelle wat jy gedoen het. 551 00:37:14,000 --> 00:37:16,000 'N paar ander dinge. 552 00:37:16,000 --> 00:37:25,000 Ons het state, Boolse uitdrukkings, voorwaardes, loops, veranderlikes en drade. 553 00:37:25,000 --> 00:37:29,000 >> Diegene almal lyk sin te maak vir die grootste deel? 554 00:37:29,000 --> 00:37:35,000 Sommige van hierdie terminologie is 'n bietjie funky by tye. 555 00:37:35,000 --> 00:37:46,000 Ek hou van om te dink van 'n verklaring vir die grootste deel iets wat eindig met 'n kommapunt. 556 00:37:46,000 --> 00:37:51,000 Stellings soos x = 7, wat stel 'n veranderlike, 557 00:37:51,000 --> 00:37:54,000 vermoedelik genoem x = 7. 558 00:37:54,000 --> 00:38:01,000 X is vermoedelik ook 'n tipe wat kan die getal 7 stoor, 559 00:38:01,000 --> 00:38:05,000 so dit is 'n int of dalk 'n float of 'n kort of 'n char, 560 00:38:05,000 --> 00:38:07,000 iets soos dit. 561 00:38:07,000 --> 00:38:12,000 'N Boole-uitdrukking is met behulp van hierdie dubbele gelyk is aan 562 00:38:12,000 --> 00:38:17,000 en die bang gelyk is aan of die nie gelyk is aan, minder as, groter as, 563 00:38:17,000 --> 00:38:22,000 minder as of gelyk is aan, al daardie soort van dinge. 564 00:38:22,000 --> 00:38:28,000 Voorwaardes is as anders state. 565 00:38:28,000 --> 00:38:32,000 Ek sal onthou dat jy nie kan 'n ander sonder 'n ooreenstemmende indien. 566 00:38:32,000 --> 00:38:37,000 Net so, kan jy nie 'n anders as sonder 'n ooreenstemmende indien. 567 00:38:37,000 --> 00:38:40,000 Loops, onthou die 3 soorte van lusse wat ons het gehamer in jou 568 00:38:40,000 --> 00:38:43,000 vir die laaste paar artikels en probleem stelle. 569 00:38:43,000 --> 00:38:46,000 Met behulp van doen terwyl wanneer jy om die toevoer van die gebruiker, 570 00:38:46,000 --> 00:38:51,000 die gebruik terwyl loops totdat 'n bepaalde toestand is waar, 571 00:38:51,000 --> 00:38:56,000 en dan met behulp van dié vir loops as wat jy nodig het om te 572 00:38:56,000 --> 00:39:01,000 weet watter iterasie van die lus jy tans is hoe ek daaroor dink. 573 00:39:01,000 --> 00:39:07,000 Of as jy besig met 'n vir elke karakter in 'n reeks wat ek wil om iets te doen, 574 00:39:07,000 --> 00:39:15,000 vir elke element in 'n skikking wat ek wil om iets te doen om daardie element. 575 00:39:15,000 --> 00:39:18,000 >> Drade en gebeure. 576 00:39:18,000 --> 00:39:21,000 Hiervan het ons nie gedek nie so uitdruklik in C, 577 00:39:21,000 --> 00:39:23,000 maar onthou dit van nuuts af. 578 00:39:23,000 --> 00:39:26,000 Dit is die idee van verskillende skrifte. 579 00:39:26,000 --> 00:39:32,000 Dit is ook hierdie idee van die uitsaai van 'n gebeurtenis. 580 00:39:32,000 --> 00:39:37,000 Sommige mense het nie gebruik uitsaai in hul projekte aanvanklik, 581 00:39:37,000 --> 00:39:40,000 wat is heeltemal cool, 582 00:39:40,000 --> 00:39:46,000 maar dit is 2 verskillende maniere van die hantering van die groter probleem genoem concurrency, 583 00:39:46,000 --> 00:39:49,000 wat is hoe kry jy programme uit te voer 584 00:39:49,000 --> 00:39:54,000 of skynbaar voer op dieselfde tyd? 585 00:39:54,000 --> 00:39:59,000 Verskillende take loop terwyl ander take word ook vertoon. 586 00:39:59,000 --> 00:40:01,000 Dit is hoe jou bedryfstelsel blyk te werk. 587 00:40:01,000 --> 00:40:04,000 Dit is die rede waarom selfs al is, byvoorbeeld, 588 00:40:04,000 --> 00:40:10,000 Ek het my browser hardloop, ek kan ook draai op Spotify en speel 'n lied. 589 00:40:10,000 --> 00:40:14,000 Dit is meer van 'n konseptuele ding om te verstaan. 590 00:40:14,000 --> 00:40:17,000 Ek wil 'n blik op die drade kort 591 00:40:17,000 --> 00:40:21,000 As jy wil graag meer leer oor wat. 592 00:40:21,000 --> 00:40:26,000 >> Kom ons kyk, ek glo daar kon gewees het, 593 00:40:26,000 --> 00:40:31,000 'n probleem op hierdie in een van hierdie. 594 00:40:31,000 --> 00:40:35,000 Weereens, ek dink drade en gebeure wat nie iets wat ons sal dek in C 595 00:40:35,000 --> 00:40:41,000 net omdat dit beduidend meer moeiliker as in Scratch. 596 00:40:41,000 --> 00:40:44,000 Jy moet nie bekommerd wees oor dit, maar beslis die konsepte verstaan, 597 00:40:44,000 --> 00:40:47,000 verstaan ​​wat aangaan. 598 00:40:47,000 --> 00:40:52,000 Voordat ons verder gaan, enige vrae oor Week 0 materiaal? 599 00:40:52,000 --> 00:40:55,000 Almal voel redelik goed? 600 00:40:55,000 --> 00:41:03,000 Begrip veranderlikes en wat 'n veranderlike is? 601 00:41:03,000 --> 00:41:08,000 >> Beweeg op. Week 1. 602 00:41:08,000 --> 00:41:12,000 'N paar van die dinge wat was veral nie gedek nie 603 00:41:12,000 --> 00:41:21,000 in die quiz oorsig noodwendig en is ook meer konseptuele dinge om oor na te dink. 604 00:41:21,000 --> 00:41:30,000 Die eerste is die idee van watter bron-kode, vertalers en object code is. 605 00:41:30,000 --> 00:41:32,000 Enigiemand? Basil. 606 00:41:32,000 --> 00:41:37,000 Is die object code ek bedoel bron-kode is wat jy sit in kletteren, 607 00:41:37,000 --> 00:41:42,000 en object code is wat kletteren sit sodat jou rekenaar die program kan lees. 608 00:41:42,000 --> 00:41:44,000 Presies. 609 00:41:44,000 --> 00:41:47,000 Bron-kode is die C-kode wat jy eintlik tik. 610 00:41:47,000 --> 00:41:50,000 Object code is wat jy kry uit kletteren. 611 00:41:50,000 --> 00:41:54,000 Dit is die 0'e en 1s in daardie binêre formaat. 612 00:41:54,000 --> 00:41:59,000 Dan wat gebeur wanneer jy 'n klomp van die voorwerp lêers, 613 00:41:59,000 --> 00:42:04,000 sê jy is die opstel van 'n projek of 'n program wat gebruik maak van verskeie bron-kode lêers, 614 00:42:04,000 --> 00:42:09,000 wat deur die konvensie word die c-lêer uitbreiding. 615 00:42:09,000 --> 00:42:13,000 Dit is die rede waarom ons het caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 As jy Java programme te skryf wat jy gee hulle die uitbreiding. Java. 617 00:42:18,000 --> 00:42:24,000 Python programme het die uitbreiding py dikwels. 618 00:42:24,000 --> 00:42:26,000 >> Sodra jy het verskeie c lêers, jy stel nie. 619 00:42:26,000 --> 00:42:29,000 Kletteren spoeg uit al hierdie binêre junk. 620 00:42:29,000 --> 00:42:33,000 Dan, want jy wil net 1 program 621 00:42:33,000 --> 00:42:37,000 jy het die koppelingshistoon skakel al van hierdie voorwerp lêers tesame 622 00:42:37,000 --> 00:42:40,000 in 1 uitvoerbare lêer. 623 00:42:40,000 --> 00:42:45,000 Dit is ook wat gebeur wanneer jy gebruik die CS50 biblioteek, byvoorbeeld. 624 00:42:45,000 --> 00:42:50,000 Die CS50 biblioteek is beide. H header-lêer 625 00:42:50,000 --> 00:42:53,000 wat jy lees, dat # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 En dan is dit ook 'n spesiale binêre biblioteek lêer 627 00:42:58,000 --> 00:43:02,000 wat is saamgestel wat 0e en 1e, 628 00:43:02,000 --> 00:43:08,000 en dat-l vlag, so as ons gaan terug na ons Ruimtes en ons sien regtig vinnig 629 00:43:08,000 --> 00:43:11,000 wat gaan hier aan wanneer ons kyk na ons kletteren opdrag, 630 00:43:11,000 --> 00:43:15,000 wat ons het, is dit is ons bronkode lêer hier. 631 00:43:15,000 --> 00:43:18,000 Dit is 'n klomp van die vertaler vlae. 632 00:43:18,000 --> 00:43:22,000 En dan heel aan die einde,-l vlae skakel in 633 00:43:22,000 --> 00:43:30,000 die werklike binêre lêers vir hierdie 2 biblioteke, die CS50 biblioteek en dan die wiskunde biblioteek. 634 00:43:30,000 --> 00:43:35,000 >> Begrip van elke tipe van lêers se doel 635 00:43:35,000 --> 00:43:38,000 in die samestelling is iets wat jy sal wil hê om in staat wees om 636 00:43:38,000 --> 00:43:43,000 gee ten minste 'n hoë vlak oorsig van. 637 00:43:43,000 --> 00:43:46,000 Bron kode kom. Object code kom uit. 638 00:43:46,000 --> 00:43:53,000 Object code lêers met mekaar verbind, en jy kry 'n pragtige, uitvoerbare lêer. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 Dit is ook waar jy kan kry foute op verskeie punte 641 00:43:58,000 --> 00:44:00,000 in die samestelling. 642 00:44:00,000 --> 00:44:04,000 Dit is waar, byvoorbeeld, as jy hierdie koppeling vlag, 643 00:44:04,000 --> 00:44:10,000 CS50 vlag, en jy weglaat dit in Spasies of wanneer jy jou kode, 644 00:44:10,000 --> 00:44:13,000 Dit is waar jy 'n fout in die skakel fase, 645 00:44:13,000 --> 00:44:18,000 en die koppelingshistoon sal sê, "Hey, jy het 'n funksie GetString 646 00:44:18,000 --> 00:44:20,000 dit is in die CS50 biblioteek. " 647 00:44:20,000 --> 00:44:25,000 "Jy het vir my gesê dit was in die CS50 biblioteek, en ek kan nie vind die kode vir dit." 648 00:44:25,000 --> 00:44:28,000 Dit is waar jy dit in 'n skakel, en dit is aparte 649 00:44:28,000 --> 00:44:33,000 omdat die samesteller van 'n vertaler fout soek by die sintaksis en dat die soort van dinge. 650 00:44:33,000 --> 00:44:38,000 Dit is goed om te weet wat gaan aan toe. 651 00:44:38,000 --> 00:44:42,000 >> Ander dinge om te weet oor. 652 00:44:42,000 --> 00:44:49,000 Ek sou sê dat jy beslis wil 'n blik op die kort op typecasting gedoen by die Jordaan 653 00:44:49,000 --> 00:44:55,000 om te verstaan ​​wat ints is onder die kap, 654 00:44:55,000 --> 00:44:58,000 watter karakters is onder die kap. 655 00:44:58,000 --> 00:45:02,000 Wanneer ons praat oor ASCII en ons eintlik kyk na die ASCII-tabel, 656 00:45:02,000 --> 00:45:07,000 wat dit doen gee ons 'n onder die enjinkap kyk 657 00:45:07,000 --> 00:45:13,000 hoe die rekenaar eintlik verteenwoordig kapitaal en die syfer 7 658 00:45:13,000 --> 00:45:17,000 en 'n komma en 'n vraagteken. 659 00:45:17,000 --> 00:45:20,000 Die rekenaar het ook 'n spesiale maniere voor te stel 660 00:45:20,000 --> 00:45:23,000 die getal 7 as 'n heelgetal. 661 00:45:23,000 --> 00:45:27,000 Dit het 'n spesiale manier om die getal 7 te stel as 'n drywende punt, 662 00:45:27,000 --> 00:45:29,000 en dit is baie anders. 663 00:45:29,000 --> 00:45:32,000 Typecasting is hoe jy vir die rekenaar "Hey, ek wil hê jy te omskep 664 00:45:32,000 --> 00:45:37,000 van een verteenwoordiging na 'n ander voorstelling. " 665 00:45:37,000 --> 00:45:40,000 Waarom ons nie 'n blik op dit. 666 00:45:40,000 --> 00:45:44,000 >> Ek wil ook 'n blik op die kort op biblioteke en die kort op samestellers. 667 00:45:44,000 --> 00:45:47,000 Diegene praat oor die proses van opstel, 668 00:45:47,000 --> 00:45:53,000 wat 'n biblioteek is, en gaan oor 'n paar van hierdie vrae wat jy dalk gevra. 669 00:45:53,000 --> 00:45:55,000 Vrae oor Week 1-materiaal? 670 00:45:55,000 --> 00:46:03,000 Is daar enige onderwerpe hier wat hopeloos lyk wat jy wil om te dek? 671 00:46:03,000 --> 00:46:07,000 Ek probeer om op te blaas deur middel van die meeste van hierdie vroeëre onderwerpe sodat ons kan kry om 672 00:46:07,000 --> 00:46:13,000 wysers en doen 'n bietjie van rekursie. 673 00:46:13,000 --> 00:46:15,000 Gedagtes? 674 00:46:15,000 --> 00:46:19,000 Enigiets te dek? 675 00:46:19,000 --> 00:46:21,000 Tyd vir 'n paar sjokolade miskien? 676 00:46:21,000 --> 00:46:23,000 Julle ouens is besig om deur dit. 677 00:46:23,000 --> 00:46:26,000 Ek gaan om te hou die genot op my koffie. 678 00:46:26,000 --> 00:46:31,000 Week 2. 679 00:46:31,000 --> 00:46:34,000 Goeie oproep, 'n goeie roep. 680 00:46:34,000 --> 00:46:38,000 Week 2 het ons gepraat het 'n bietjie meer inligting oor funksies. 681 00:46:38,000 --> 00:46:43,000 >> In die eerste paar probleem stelle ons het nie regtig enige funksies op alle skryf 682 00:46:43,000 --> 00:46:45,000 anders as watter funksie? 683 00:46:45,000 --> 00:46:47,000 [Studente] Main >> Main, presies. 684 00:46:47,000 --> 00:46:51,000 En so het ons gesien hoe die verskillende kostuums wat hoof dra. 685 00:46:51,000 --> 00:46:54,000 Daar is die een wat dit neem geen argumente, 686 00:46:54,000 --> 00:46:58,000 en ons net sê leemte tussen die hakies, 687 00:46:58,000 --> 00:47:01,000 en dan is daar die ander een waar ons wil command line argumente te neem, 688 00:47:01,000 --> 00:47:08,000 en soos ons gesien het, dit is waar jy int argc en string bevat SPASIES skikking 689 00:47:08,000 --> 00:47:13,000 of nou dat ons het eintlik blootgestel string om die char * dat dit 690 00:47:13,000 --> 00:47:20,000 ons gaan begin skryf dit as char * bevat SPASIES en dan tussen hakies. 691 00:47:20,000 --> 00:47:22,000 In Problem Set 3, julle ouens het 'n klomp van die funksies, 692 00:47:22,000 --> 00:47:27,000 en jy geïmplementeer 'n klomp van die funksies, trek, kyk, scramble. 693 00:47:27,000 --> 00:47:31,000 Die prototipes is almal daar vir jou geskryf. 694 00:47:31,000 --> 00:47:33,000 >> Wat ek wou praat hier met funksies regtig vinnig 695 00:47:33,000 --> 00:47:38,000 is dat daar 3 dele aan hulle wanneer jy skryf 'n funksie. 696 00:47:38,000 --> 00:47:43,000 Jy het die terugkeer van die funksie te spesifiseer. 697 00:47:43,000 --> 00:47:46,000 Jy moet 'n naam vir die funksie te spesifiseer, en dan moet jy spesifiseer 698 00:47:46,000 --> 00:47:51,000 die argument lys of die parameter lys. 699 00:47:51,000 --> 00:47:57,000 Byvoorbeeld, as ek 'n funksie was om te skryf aan die som van 'n klomp van heelgetalle 700 00:47:57,000 --> 00:48:03,000 en dan terug te keer na my die som wat sou my terugkeer tipe 701 00:48:03,000 --> 00:48:06,000 as ek wou heelgetalle te som en dan die som terugkeer? 702 00:48:06,000 --> 00:48:12,000 En die naam van die funksie. 703 00:48:12,000 --> 00:48:27,000 As ek gaan voort en skryf in die groen, hierdie deel is die terugkeer tipe. 704 00:48:27,000 --> 00:48:34,000 Hierdie deel is die naam. 705 00:48:34,000 --> 00:48:40,000 En dan tussen hakies 706 00:48:40,000 --> 00:48:46,000 is waar ek die argumente gee, 707 00:48:46,000 --> 00:48:56,000 dikwels afgekort as argumente, soms genoem params vir parameters. 708 00:48:56,000 --> 00:49:00,000 En as jy een het, jy het net die een spesifiseer. 709 00:49:00,000 --> 00:49:06,000 As jy meer jy skei elkeen met 'n komma. 710 00:49:06,000 --> 00:49:13,000 En vir elke argument wat jy gee dit 2 dinge wat Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Jy moet die tipe en dan die name te gee. 712 00:49:18,000 --> 00:49:21,000 En dan die naam en die naam is die naam wat jy gaan om te gebruik 713 00:49:21,000 --> 00:49:25,000 om te verwys na die argument binne die som-funksie, 714 00:49:25,000 --> 00:49:27,000 binne die funksie wat jy tans skriftelik. 715 00:49:27,000 --> 00:49:32,000 >> Jy hoef nie byvoorbeeld, as ek gaan op te som, 716 00:49:32,000 --> 00:49:41,000 sê, 'n skikking van heelgetalle sal ons doen int skikking, 717 00:49:41,000 --> 00:49:46,000 en ek gee myself 'n paar kode tussen krulhakies daar- 718 00:49:46,000 --> 00:49:51,000 dan wanneer ek verby 'n skikking aan die som-funksie 719 00:49:51,000 --> 00:49:55,000 Ek slaag dit in die eerste posisie van die argument lys. 720 00:49:55,000 --> 00:49:59,000 Maar die skikking dat ek slaag nie die naam arr. 721 00:49:59,000 --> 00:50:07,000 Arr gaan wees hoe ek verwys na die argument in die liggaam van die funksie. 722 00:50:07,000 --> 00:50:10,000 Die ander ding wat ons nodig het om in ag te neem, 723 00:50:10,000 --> 00:50:14,000 en dit is effens verskil van funksies, maar ek dink dit is 'n belangrike punt, 724 00:50:14,000 --> 00:50:20,000 is dat in C wanneer ek sit en skryf van 'n funksie soos hierdie 725 00:50:20,000 --> 00:50:29,000 hoe weet ek hoeveel elemente in die skikking? 726 00:50:29,000 --> 00:50:31,000 Dit is 'n bietjie van 'n truuk vraag. 727 00:50:31,000 --> 00:50:35,000 Ons het gepraat oor dit 'n bietjie in verlede week se artikel. 728 00:50:35,000 --> 00:50:40,000 Hoe weet ek die getal van die elemente binne-in 'n skikking in C? 729 00:50:40,000 --> 00:50:44,000 Is daar 'n manier? 730 00:50:44,000 --> 00:50:49,000 >> Dit blyk dat daar is geen manier om te weet. 731 00:50:49,000 --> 00:50:52,000 Jy moet dit afsonderlik te slaag. 732 00:50:52,000 --> 00:50:55,000 Daar is 'n trick wat jy kan doen 733 00:50:55,000 --> 00:51:00,000 as jy in die dieselfde funksie in wat die skikking verklaar is, 734 00:51:00,000 --> 00:51:04,000 en jy werk met 'n stapel skikking. 735 00:51:04,000 --> 00:51:06,000 Maar dit werk net as jy in dieselfde funksie. 736 00:51:06,000 --> 00:51:09,000 Sodra jy verby 'n skikking na 'n ander funksie of as jy 'n skikking verklaar 737 00:51:09,000 --> 00:51:12,000 en jy het dat die skikking op die hoop, het jy gebruik malloc 738 00:51:12,000 --> 00:51:15,000  en dat die soort van dinge, dan is al die verbintenis is af. 739 00:51:15,000 --> 00:51:18,000 Dan is jy eintlik het om rond te beweeg 740 00:51:18,000 --> 00:51:21,000 'n spesiale argument of 'n ander parameter 741 00:51:21,000 --> 00:51:23,000 wat jy vertel hoe groot die skikking is. 742 00:51:23,000 --> 00:51:28,000 In hierdie geval, sou ek wil gebruik te maak van 'n komma-Achievement jammer, dit gaan af van die skerm hier 743 00:51:28,000 --> 00:51:32,000 en ek wil in 'n ander argument 744 00:51:32,000 --> 00:51:40,000  en noem dit int len ​​vir die lengte. 745 00:51:40,000 --> 00:51:44,000 >> Een ding wat kan kom op die quiz 746 00:51:44,000 --> 00:51:49,000 vra jy 'n bepaalde funksie genoem iets te skryf of te implementeer. 747 00:51:49,000 --> 00:51:54,000 As ons nie gee jou die prototipe, so hierdie hele ding hier, 748 00:51:54,000 --> 00:51:58,000 hierdie hele gemors is die funksie verklaring of die funksie prototipe genoem, 749 00:51:58,000 --> 00:52:01,000 dit is een van die eerste dinge wat jy wil om te spyker as dit nie gegee 750 00:52:01,000 --> 00:52:03,000 aan jou dadelik op die quiz. 751 00:52:03,000 --> 00:52:06,000 Die ander trick wat ek geleer het is dat 752 00:52:06,000 --> 00:52:11,000 sê ons doen gee jy 'n prototipe vir 'n funksie, en ons sê, "Hey, jy het om dit te skryf." 753 00:52:11,000 --> 00:52:16,000 Binne-in die kode tussen krulhakies wat jy het op die quiz 754 00:52:16,000 --> 00:52:20,000 as jy sien dat daar 'n terugkeer tipe en jy sien dat die terugkeer tipe 755 00:52:20,000 --> 00:52:25,000 is iets anders as nietig, wat beteken dat die funksie nie terugkeer enigiets, 756 00:52:25,000 --> 00:52:28,000 dan is een ding wat jy beslis wil om dit te doen is skryf 757 00:52:28,000 --> 00:52:33,000 'n soort van return statement heel aan die einde van die funksie. 758 00:52:33,000 --> 00:52:40,000 Keer terug, en in hierdie geval, sal ons 'n leë, want ons wil om te vul die leë. 759 00:52:40,000 --> 00:52:44,000 Maar dit kry jy dink in die regte manier oor hoe ek gaan hierdie probleem te benader? 760 00:52:44,000 --> 00:52:49,000 En dit herinner jy gaan te hê om 'n waarde om terug te keer 761 00:52:49,000 --> 00:52:51,000 aan die oproeper van die funksie. 762 00:52:51,000 --> 00:52:54,000 >> Ja >> [Studente] Is styl toepas wanneer ons skryf-kode op die quiz? 763 00:52:54,000 --> 00:52:58,000 Soos die inkeping en daardie soort van dinge >> [Studente]? Ja. 764 00:52:58,000 --> 00:53:00,000 Nee, nie so veel nie. 765 00:53:00,000 --> 00:53:09,000 Ek dink baie van hierdie is iets wat ons sal verduidelik op die quiz op die dag van, 766 00:53:09,000 --> 00:53:15,000 maar tipies bekommerd te wees oor # sluit en dat die soort van dinge, dit is soort van buite. 767 00:53:15,000 --> 00:53:17,000 [Studente] Het jy nodig het om jou handgeskrewe kode om kommentaar te lewer? 768 00:53:17,000 --> 00:53:19,000 Het jy nodig om jou handgeskrewe kode om kommentaar te lewer? 769 00:53:19,000 --> 00:53:24,000 Kommentaar te lewer is altyd goed as jy bekommerd is oor gedeeltelike krediet 770 00:53:24,000 --> 00:53:29,000 of jy wil om jou voorneme om te kommunikeer met die gradeerder. 771 00:53:29,000 --> 00:53:33,000 Maar ek, weer, sal verduidelik op die quiz self en op die quiz dag, 772 00:53:33,000 --> 00:53:39,000 maar ek glo nie dat jy sal verwag word om kommentaar te skryf, nee. 773 00:53:39,000 --> 00:53:42,000 Gewoonlik nie, maar dit is beslis die soort van ding waar 774 00:53:42,000 --> 00:53:45,000 jy kan jou voorneme te kommunikeer, soos "Hey, dit is waar ek gaan met dit." 775 00:53:45,000 --> 00:53:49,000 En soms wat jou kan help met gedeeltelike krediet. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Basil. 778 00:53:53,000 --> 00:53:56,000 [Basil] Wat is die verskil tussen verklaar, sê, int lang 779 00:53:56,000 --> 00:54:03,000 in die argumente of parameters teenoor die verklaar van 'n veranderlike in die funksie? 780 00:54:03,000 --> 00:54:05,000 Wow, koffie afgegaan die lugpyp. 781 00:54:05,000 --> 00:54:07,000 [Basil] Soos wat dinge wat ons wil om te sit in argumente. 782 00:54:07,000 --> 00:54:09,000 Ja, dit is 'n groot vraag. 783 00:54:09,000 --> 00:54:11,000 Hoe kies jy die dinge wat jy wil om te sit in die argumente 784 00:54:11,000 --> 00:54:17,000 teenoor die dinge wat jy aan die binnekant van die funksie? 785 00:54:17,000 --> 00:54:24,000 In hierdie geval het ons beide van hierdie argumente 786 00:54:24,000 --> 00:54:29,000 want hulle is iets dat elkeen wat die som-funksie te gebruik 787 00:54:29,000 --> 00:54:32,000 moet daardie dinge te spesifiseer. 788 00:54:32,000 --> 00:54:35,000 >> Die som funksie, soos ons oor gepraat het, het geen manier om te weet 789 00:54:35,000 --> 00:54:40,000 hoe groot die skikking is dit kry van die oproeper of wie is die gebruik van die som-funksie. 790 00:54:40,000 --> 00:54:44,000 Dit het geen manier om te weet hoe groot die skikking is. 791 00:54:44,000 --> 00:54:48,000 Die rede waarom ons in hierdie lengte reg hier as 'n argument 792 00:54:48,000 --> 00:54:51,000 is, want dit is iets wat ons basies is die vertel van die oproeper van die funksie, 793 00:54:51,000 --> 00:54:55,000 wie gaan die som-funksie te gebruik, "Hey, nie net jy het om te gee vir ons 'n skikking 794 00:54:55,000 --> 00:54:59,000 van ints, het u ook om ons te vertel hoe groot die skikking wat jy aan ons gegee is. " 795 00:54:59,000 --> 00:55:03,000 [Basil] Diegene sal beide command line argumente? 796 00:55:03,000 --> 00:55:06,000 Nee, dit is werklike argumente wat jy sal slaag om die funksie. 797 00:55:06,000 --> 00:55:10,000 >> Laat my doen hier 'n nuwe bladsy. 798 00:55:10,000 --> 00:55:13,000 [Basil] Soos naam sou slaag- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] As ek int main (void), 800 00:55:24,000 --> 00:55:27,000 en ek gaan sit in my terugkeer 0 af hier aan die onderkant, 801 00:55:27,000 --> 00:55:31,000 en sê: Ek wil die som-funksie te roep. 802 00:55:31,000 --> 00:55:42,000 Ek wil sê int x = som (); 803 00:55:42,000 --> 00:55:46,000 Die som-funksie te gebruik wat ek het om te slaag in beide die skikking wat ek wil op te som 804 00:55:46,000 --> 00:55:51,000 en die lengte van die skikking, so dit is waar 805 00:55:51,000 --> 00:55:54,000 die veronderstelling Ek het 'n verskeidenheid van ints, 806 00:55:54,000 --> 00:56:12,000 sê ek het int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 soort gebruik wat gekap up sintaksis reg daar, 808 00:56:16,000 --> 00:56:21,000 dan is wat ek sou doen is in die som Ek wil om te slaag in 809 00:56:21,000 --> 00:56:27,000 beide numbaz en die nommer 3 810 00:56:27,000 --> 00:56:30,000 die som-funksie om te sê: "Goed, hier is die skikking wat ek wil hê jy moet op te som." 811 00:56:30,000 --> 00:56:34,000 "Hier is sy grootte." 812 00:56:34,000 --> 00:56:39,000 Maak dit sin? Beteken dit jou vraag beantwoord? 813 00:56:39,000 --> 00:56:42,000 >> Op baie maniere is dit nie parallel wat ons doen met die hoof 814 00:56:42,000 --> 00:56:44,000 wanneer ons die command line argumente. 815 00:56:44,000 --> 00:56:47,000 'N program soos Caesar cipher, byvoorbeeld, wat nodig 816 00:56:47,000 --> 00:56:53,000 command line argumente sal nie in staat wees om iets te doen nie. 817 00:56:53,000 --> 00:56:57,000 Dit sou nie weet hoe om te enkripteer, as jy dit nie vertel watter sleutel om te gebruik 818 00:56:57,000 --> 00:57:03,000 of as jy nie sê dit string wat jy wou te enkripteer. 819 00:57:03,000 --> 00:57:08,000 Aansporing vir die insette, dit is waar ons het 2 verskillende meganismes 820 00:57:08,000 --> 00:57:14,000 vir die toevoer van die gebruiker, vir die neem van inligting van die gebruiker. 821 00:57:14,000 --> 00:57:19,000 Vir Problem Set 1 het ons gesien dat hierdie getint, GetString, GetFloat manier 822 00:57:19,000 --> 00:57:26,000 te vra vir insette, en wat genoem word met behulp van die standaard inset stroom. 823 00:57:26,000 --> 00:57:28,000 Dit is effens anders. 824 00:57:28,000 --> 00:57:31,000 Dit is iets wat jy kan doen op 'n tyd, in teenstelling met 825 00:57:31,000 --> 00:57:35,000 wanneer jy roep die program, wanneer jy begin die program aan die gang. 826 00:57:35,000 --> 00:57:41,000 Die command line argumente gespesifiseer word wanneer jy die program loop begin. 827 00:57:41,000 --> 00:57:47,000 Ons het al die vermenging van die twee van daardie. 828 00:57:47,000 --> 00:57:52,000 Wanneer ons argumente na 'n funksie, dit is baie soos command line argumente to main. 829 00:57:52,000 --> 00:57:56,000 Dit is wanneer jy roep die funksie wat jy nodig het om dit te vertel 830 00:57:56,000 --> 00:58:05,000 presies wat dit nodig het om sy take uit te voer. 831 00:58:05,000 --> 00:58:08,000 Nog 'n goeie ding om na te kyk en ek sal laat jy kyk na dit in jou vrye tyd, 832 00:58:08,000 --> 00:58:11,000 en dit was bedek in die quiz was hierdie idee van die omvang 833 00:58:11,000 --> 00:58:15,000 en plaaslike veranderlikes teenoor globale veranderlikes. 834 00:58:15,000 --> 00:58:18,000 Doen om aandag te gee aan daardie. 835 00:58:18,000 --> 00:58:23,000 >> Noudat ons om op hierdie ander dinge, 836 00:58:23,000 --> 00:58:27,000 in Week 3 het ons begin praat oor die soek-en sorteer. 837 00:58:27,000 --> 00:58:32,000 Soek-en sorteer, ten minste in CS50, 838 00:58:32,000 --> 00:58:39,000 is baie 'n inleiding tot sommige van die meer teoretiese dele van rekenaarwetenskap. 839 00:58:39,000 --> 00:58:42,000 Die probleem van die soek, die probleem van sortering 840 00:58:42,000 --> 00:58:46,000 is groot, kanoniese probleme. 841 00:58:46,000 --> 00:58:52,000 Hoe kry jy 'n bepaalde getal in 'n verskeidenheid van miljarde van heelgetalle? 842 00:58:52,000 --> 00:58:55,000 Hoe kry jy 'n bepaalde naam binne-in 'n telefoon boek 843 00:58:55,000 --> 00:58:59,000 wat gestoor word op jou laptop? 844 00:58:59,000 --> 00:59:04,000 En so het ons begin om die idee van asimptotiese run tye 845 00:59:04,000 --> 00:59:11,000 om werklik te kwantifiseer hoe lank, hoe hard hierdie probleem is, 846 00:59:11,000 --> 00:59:14,000 hoe lank hulle neem om op te los. 847 00:59:14,000 --> 00:59:20,000 In 2011 se quiz, glo ek, daar is 'n probleem wat ek dink meriete 848 00:59:20,000 --> 00:59:27,000 wat baie vinnig, wat is dit een probleem 12. 849 00:59:27,000 --> 00:59:32,000 O nee, dit is Omega. 850 00:59:32,000 --> 00:59:41,000 >> Hier is ons praat oor die vinnigste moontlike run tyd 851 00:59:41,000 --> 00:59:46,000 vir 'n spesifieke algoritme en dan is die stadigste moontlike duur tyd. 852 00:59:46,000 --> 00:59:52,000 Dit Omega en O is eintlik net kortpaaie. 853 00:59:52,000 --> 00:59:55,000 Hulle is notasie kortpaaie om te sê 854 00:59:55,000 --> 00:59:59,000 hoe vinnig in die beste moontlike geval sal ons algoritme hardloop, 855 00:59:59,000 --> 01:00:06,000 en hoe stadig in die ergste moontlike geval ons algoritme sal loop? 856 01:00:06,000 --> 01:00:10,000 Kom ons doen 'n paar van hierdie, en dit is ook gedek 857 01:00:10,000 --> 01:00:13,000 in die kort op asimptotiese notasie, wat ek raai. 858 01:00:13,000 --> 01:00:17,000 Jackson het 'n baie goeie werk. 859 01:00:17,000 --> 01:00:23,000 Met 'n binêre soek, ons praat oor binêre soek as 'n algoritme, 860 01:00:23,000 --> 01:00:28,000 en ons gewoonlik praat oor dit in terme van sy groot O. 861 01:00:28,000 --> 01:00:30,000 Wat is die groot O? 862 01:00:30,000 --> 01:00:34,000 Wat is die stadigste moontlike duur van binêre soek? 863 01:00:34,000 --> 01:00:36,000 [Studente] N ²? 864 01:00:36,000 --> 01:00:41,000 Close, ek dink soortgelyk aan dié. 865 01:00:41,000 --> 01:00:43,000 Dit is 'n baie vinniger as dit. 866 01:00:43,000 --> 01:00:45,000 [Studente] Binary >> Ja, binêre soek. 867 01:00:45,000 --> 01:00:47,000 [Studente] Dit is log n. 868 01:00:47,000 --> 01:00:49,000 Meld n, so wat inteken n beteken? 869 01:00:49,000 --> 01:00:51,000 Dit halveer dit elke iterasie. 870 01:00:51,000 --> 01:00:56,000 Presies, so in die stadigste moontlike geval, 871 01:00:56,000 --> 01:01:00,000 sê as jy 'n gesorteerde skikking 872 01:01:00,000 --> 01:01:08,000 van 'n miljoen heelgetalle en die getal wat jy soek vir 873 01:01:08,000 --> 01:01:14,000 is óf die eerste element in die skikking of die heel laaste element in die skikking. 874 01:01:14,000 --> 01:01:18,000 Onthou, die binêre soek algoritme werk deur te kyk na die middelste element, 875 01:01:18,000 --> 01:01:21,000 sien as dit is die wedstryd wat jy soek. 876 01:01:21,000 --> 01:01:23,000 As dit is, dan is groot, jy het dit gevind. 877 01:01:23,000 --> 01:01:27,000 >> In die beste moontlike geval, hoe vinnig binêre soek run? 878 01:01:27,000 --> 01:01:29,000 [Studente] 1. 879 01:01:29,000 --> 01:01:32,000 1, dit is konstante tyd, groot O van 1. Ja. 880 01:01:32,000 --> 01:01:36,000 [Studente] Ek het 'n vraag. Wanneer jy sê van n teken, bedoel jy met betrekking tot die basis 2, reg? 881 01:01:36,000 --> 01:01:40,000 Ja, so dit is die ander ding. 882 01:01:40,000 --> 01:01:44,000 Ons sê log n, en ek dink wanneer ek in die hoërskool was 883 01:01:44,000 --> 01:01:48,000 Ek het altyd aanvaar dat log was basis 10. 884 01:01:48,000 --> 01:01:57,000 Ja, so ja, teken basis 2 tipies is wat ons gebruik. 885 01:01:57,000 --> 01:02:02,000 Weer terug te gaan na binêre soek, as jy op soek is vir óf 886 01:02:02,000 --> 01:02:05,000 die element aan die einde of die element aan die begin, 887 01:02:05,000 --> 01:02:08,000 omdat jy in die middel begin en dan kan jy weggooi 888 01:02:08,000 --> 01:02:13,000 wat ookal 1/2 nie voldoen aan die kriteria wat jy soek, 889 01:02:13,000 --> 01:02:15,000 en jy gaan na die volgende helfte en die volgende helfte en die volgende helfte. 890 01:02:15,000 --> 01:02:19,000 As ek op soek na die grootste element in die miljoen heelgetal array 891 01:02:19,000 --> 01:02:25,000 Ek gaan dit by die meeste log 1 miljoen keer te halveer 892 01:02:25,000 --> 01:02:28,000 voordat ek uiteindelik toets en sien dat die element Ek is opsoek na 893 01:02:28,000 --> 01:02:33,000 is in die grootste of in die hoogste indeks van die skikking, 894 01:02:33,000 --> 01:02:38,000 en dit neem log van n teken van 1 miljoen keer. 895 01:02:38,000 --> 01:02:40,000 >> Bubble soort. 896 01:02:40,000 --> 01:02:43,000 Onthou julle nie die borrel soort algoritme? 897 01:02:43,000 --> 01:02:47,000 Kevin, kan jy gee my 'n vinnige recap van wat gebeur het in die borrel soort algoritme? 898 01:02:47,000 --> 01:02:50,000 [Kevin] Basies gaan dit deur alles in die lys. 899 01:02:50,000 --> 01:02:52,000 Dit lyk op die eerste twee. 900 01:02:52,000 --> 01:02:55,000 As die eerste een is groter as die tweede een wat dit swaps hulle. 901 01:02:55,000 --> 01:02:58,000 Dan is dit vergelyk tweede en derde, dieselfde ding, swaps, 902 01:02:58,000 --> 01:03:00,000 derde en vierde, al die pad af. 903 01:03:00,000 --> 01:03:03,000 Groter getalle sal volg tot aan die einde. 904 01:03:03,000 --> 01:03:07,000 En nadat egter baie loops jy klaar is. 905 01:03:07,000 --> 01:03:11,000 Presies, so wat Kevin gesê het, is dat ons groter getalle sal kyk 906 01:03:11,000 --> 01:03:15,000 borrel tot die einde van die skikking. 907 01:03:15,000 --> 01:03:19,000 Byvoorbeeld, dink jy loop ons deur hierdie voorbeeld as dit is ons array? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Jy neem 2 en 3. 909 01:03:21,000 --> 01:03:23,000 3 groter as 2 is, sodat jy ruil hulle. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Right, so ons ruil dit, en so kry ons 2, 3, 6, 4, en 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Dan moet jy vergelyk die 3 en 6. 912 01:03:31,000 --> 01:03:33,000 3 is kleiner as 6, sodat jy dit laat oorbly. 913 01:03:33,000 --> 01:03:37,000 en 6 en 4, wil jy ruil hulle, want 4 is kleiner as 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Right, so ek kry 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] en 9 is groter as 6, so jy los dit. 916 01:03:46,000 --> 01:03:48,000 En jy wil terug gaan na dit weer. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] ek op hierdie punt gedoen? >> [Kevin] No 918 01:03:50,000 --> 01:03:52,000 En hoekom ek nie op hierdie punt? 919 01:03:52,000 --> 01:03:54,000 Want dit lyk soos my skikking word gesorteer. Ek is op soek na dit. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Gaan dit weer deur en maak seker dat daar nie meer swaps 921 01:03:57,000 --> 01:04:00,000 voordat jy ten volle kan ophou. 922 01:04:00,000 --> 01:04:04,000 Presies, so jy hoef te hou gaan deur en maak seker dat daar geen swaps 923 01:04:04,000 --> 01:04:06,000 wat jy kan maak op hierdie punt. 924 01:04:06,000 --> 01:04:08,000 Dit was regtig net gelukkig, soos jy sê, dat ons beland 925 01:04:08,000 --> 01:04:12,000 net 1 slaag om te maak en ons gesorteer. 926 01:04:12,000 --> 01:04:16,000 Maar om dit te doen in die algemene geval sal ons eintlik om dit te doen oor en oor weer. 927 01:04:16,000 --> 01:04:20,000 En in die feit, dit was 'n voorbeeld van die beste moontlike geval, 928 01:04:20,000 --> 01:04:24,000 soos ons gesien het in die probleem. 929 01:04:24,000 --> 01:04:28,000 Ons het gesien dat die beste moontlike geval was N. 930 01:04:28,000 --> 01:04:32,000 Ons het deur die skikking 1 keer. 931 01:04:32,000 --> 01:04:35,000 Wat is die ergste moontlike geval vir hierdie algoritme? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 En wat beteken dit lyk? Wat sou 'n skikking lyk soos wat sou neem n ² tyd? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [onhoorbaar] gesorteer. 935 01:04:43,000 --> 01:04:51,000 Presies, so as ek het die skikking 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 eers die 9 sou borrel al die pad tot. 937 01:04:54,000 --> 01:04:59,000 Na 1 iterasie ons wil hê 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Dan sou die 7 borrel, 6, 5, 2, 7, 9, en so aan en so voort. 939 01:05:07,000 --> 01:05:13,000 >> Ons wil hê om te gaan deur die hele verskeidenheid n keer, 940 01:05:13,000 --> 01:05:16,000 en jy kan eintlik effens meer akkuraat is as 941 01:05:16,000 --> 01:05:23,000 want sodra ons het verhuis die 9 al die pad tot in sy laaste moontlike posisie 942 01:05:23,000 --> 01:05:26,000 ons weet dat ons nooit weer teen daardie element te vergelyk. 943 01:05:26,000 --> 01:05:29,000 Sodra ons begin borrel die 7 944 01:05:29,000 --> 01:05:35,000 weet ons dat ons kan ophou sodra die 7 reg is voor die 9 945 01:05:35,000 --> 01:05:37,000 want ons het reeds vergelyk met die 9 om dit te. 946 01:05:37,000 --> 01:05:46,000 As jy dit doen op 'n slim manier dit is nie werklik, dink ek, dat daar nog baie tyd. 947 01:05:46,000 --> 01:05:49,000 Jy gaan nie al die moontlike [onhoorbaar] kombinasies te vergelyk 948 01:05:49,000 --> 01:05:55,000 elke keer as jy gaan deur elke iterasie. 949 01:05:55,000 --> 01:05:59,000 Maar nog steeds, wanneer ons praat oor hierdie bogrens ons sê dat 950 01:05:59,000 --> 01:06:04,000 jy is op soek na n ² vergelykings al die pad deur. 951 01:06:04,000 --> 01:06:12,000 >> Kom ons gaan terug, en sedert ons begin om te kry 'n bietjie kort op tyd 952 01:06:12,000 --> 01:06:15,000 Ek sou sê dat jy beslis moet gaan deur die res van hierdie tabel, 953 01:06:15,000 --> 01:06:17,000 vul dit almal uit. 954 01:06:17,000 --> 01:06:20,000 Dink aan voorbeelde. Dink van konkrete voorbeelde. 955 01:06:20,000 --> 01:06:22,000 Dit is baie handig en nuttig om te doen. 956 01:06:22,000 --> 01:06:25,000 Dit tog uitskep. 957 01:06:25,000 --> 01:06:28,000 Dit is die soort van tabel dat as jy gaan deur in rekenaarwetenskap 958 01:06:28,000 --> 01:06:32,000 jy moet regtig begin hierdie hart te leer ken. 959 01:06:32,000 --> 01:06:34,000 Dit is die soort vrae wat jy in die onderhoude. 960 01:06:34,000 --> 01:06:36,000 Dit is soort van dinge wat is goed om te weet, 961 01:06:36,000 --> 01:06:41,000 en dink oor daardie rand gevalle, regtig uitzoeken hoe om te dink oor 962 01:06:41,000 --> 01:06:45,000 die wete dat vir borrel sorteer die ergste moontlike skikking 963 01:06:45,000 --> 01:06:52,000 te sorteer met dit is die een wat in die omgekeerde volgorde. 964 01:06:52,000 --> 01:06:58,000 >> Wysers. Kom ons praat 'n bietjie oor wysers. 965 01:06:58,000 --> 01:07:03,000 In die laaste paar minute het ons hier 966 01:07:03,000 --> 01:07:11,000 Ek weet dit is iets wat saam met die lêer I / O wat is relatief nuut. 967 01:07:11,000 --> 01:07:19,000 Wanneer ons praat oor pointers die rede waarom ons wil om te praat oor pointers 968 01:07:19,000 --> 01:07:24,000 is omdat, wanneer ons werk in C 969 01:07:24,000 --> 01:07:33,000 ons is regtig op 'n redelik lae vlak in vergelyking met die meeste moderne programmeertale. 970 01:07:33,000 --> 01:07:38,000 Ons is eintlik in staat om die veranderlikes in die geheue te manipuleer, 971 01:07:38,000 --> 01:07:43,000 uit te vind waar hulle is eintlik geleë binne ons geheue. 972 01:07:43,000 --> 01:07:46,000 Nadat jy weg is bedryfstelsel klasse te neem sal jy sien 973 01:07:46,000 --> 01:07:48,000 dat is, weer, soort van 'n abstraksie. 974 01:07:48,000 --> 01:07:50,000 Dit is nie werklik die geval is. 975 01:07:50,000 --> 01:07:52,000 Ons het virtuele geheue wat verberg die besonderhede van ons. 976 01:07:52,000 --> 01:07:58,000 >> Maar vir nou kan jy aanneem dat wanneer jy 'n program, 977 01:07:58,000 --> 01:08:02,000 byvoorbeeld wanneer jy begin hardloop jou Caesar cipher program- 978 01:08:02,000 --> 01:08:06,000 Sal ek skakel terug na my iPad regtig vinnig- 979 01:08:06,000 --> 01:08:12,000 wat heel aan die begin van jou program, as jy, sê, 980 01:08:12,000 --> 01:08:15,000 4 GB RAM op jou laptop, 981 01:08:15,000 --> 01:08:21,000 kry jy opsy gesit is hierdie stuk, en ons sal hierdie RAM noem. 982 01:08:21,000 --> 01:08:25,000 En dit begin in 'n plek wat ons gaan om 0 te roep, 983 01:08:25,000 --> 01:08:30,000 en dit eindig op 'n plek wat ons 4 GB bel. 984 01:08:30,000 --> 01:08:37,000 Ek het regtig nie kan skryf nie. Man, wat ook erg beseer is. 985 01:08:37,000 --> 01:08:40,000 Wanneer jou program voer 986 01:08:40,000 --> 01:08:44,000 die bedryfstelsel kerf RAM, 987 01:08:44,000 --> 01:08:51,000 en dit spesifiseer verskillende segmente vir verskillende dele van jou program om in te woon 988 01:08:51,000 --> 01:08:58,000 Down hier om hierdie gebied is 'n soort van 'n no man's land. 989 01:08:58,000 --> 01:09:02,000 Wanneer jy gaan 'n bietjie verder hier 990 01:09:02,000 --> 01:09:05,000 jy eintlik het die plek waar 991 01:09:05,000 --> 01:09:09,000 die kode vir jou program lewens. 992 01:09:09,000 --> 01:09:13,000 Dat die werklike binêre kode, dat die uitvoerbare lêer eintlik kry in die geheue gelaai 993 01:09:13,000 --> 01:09:17,000 wanneer jy 'n program, en dit woon in die kode segment. 994 01:09:17,000 --> 01:09:22,000 En as jou program voer die verwerker kyk na hierdie kode segment 995 01:09:22,000 --> 01:09:24,000 om uit te vind wat is die volgende opdrag? 996 01:09:24,000 --> 01:09:27,000 Wat is die volgende lyn van die kode wat ek nodig het om uit te voer? 997 01:09:27,000 --> 01:09:31,000 >> Daar is ook 'n data-segment, en dit is waar daardie string konstantes 998 01:09:31,000 --> 01:09:34,000 gestoor dat jy al met behulp. 999 01:09:34,000 --> 01:09:42,000 En dan verder daar is hierdie plek genaamd die hoop. 1000 01:09:42,000 --> 01:09:46,000 Ons toegang tot die geheue daar deur gebruik te maak van malloc, 1001 01:09:46,000 --> 01:09:49,000 en dan na die top van jou program 1002 01:09:49,000 --> 01:09:52,000 daar is die stapel, 1003 01:09:52,000 --> 01:09:57,000 en dit is waar ons het al speel vir die meeste van die begin. 1004 01:09:57,000 --> 01:09:59,000 Dit is nie te skaal of enigiets. 1005 01:09:59,000 --> 01:10:03,000 Baie van hierdie is baie masjien afhanklik, 1006 01:10:03,000 --> 01:10:10,000 bedryfstelsel afhanklik is, maar dit is relatief hoe dinge raak chunked. 1007 01:10:10,000 --> 01:10:17,000 As jy 'n program en jy verklaar 'n veranderlike genoem x- 1008 01:10:17,000 --> 01:10:27,000 Ek gaan nog 'n boks te onder teken, en dit gaan wees RAM sowel. 1009 01:10:27,000 --> 01:10:29,000 En ek gaan om te kyk. 1010 01:10:29,000 --> 01:10:34,000 Ons sal kronkelende lyne trek om aan te dui dit is net 'n klein gedeelte van die RAM 1011 01:10:34,000 --> 01:10:38,000 en nie almal van hulle soos ons nader aan die bokant. 1012 01:10:38,000 --> 01:10:43,000 >> As ek 'n heelgetal veranderlike genoem x verklaar, 1013 01:10:43,000 --> 01:10:49,000 dan wat ek eintlik kry is 'n kartering 1014 01:10:49,000 --> 01:10:54,000 wat gestoor word in die simbooltabel van my program 1015 01:10:54,000 --> 01:11:00,000 wat verbind die naam x aan hierdie streek van die geheue wat ek geteken het 1016 01:11:00,000 --> 01:11:03,000 reg hier tussen die vertikale stawe. 1017 01:11:03,000 --> 01:11:08,000 As ek 'n reël van die kode in my program wat sê x = 7 1018 01:11:08,000 --> 01:11:15,000 die verwerker weet "O, okay, ek weet dat x lewens op hierdie plek in die geheue." 1019 01:11:15,000 --> 01:11:25,000 "Ek gaan om voort te gaan en 'n 7 skryf daar." 1020 01:11:25,000 --> 01:11:28,000 Hoe werk dit weet watter plek dit is in die geheue? 1021 01:11:28,000 --> 01:11:30,000 Wel, dis al wat gedoen tydens kompilering gekies nie. 1022 01:11:30,000 --> 01:11:34,000 Die opsteller sorg vir die toekenning van waar elk van die veranderlikes gaan om te gaan 1023 01:11:34,000 --> 01:11:40,000 en die skep van 'n spesiale kartering of liewer die koppeling van die kolletjies 1024 01:11:40,000 --> 01:11:43,000 tussen 'n simbool en waar dit gaan, 'n veranderlike se naam 1025 01:11:43,000 --> 01:11:46,000 en waar dit gaan om te lewe in die geheue. 1026 01:11:46,000 --> 01:11:50,000 Maar dit blyk dat ons eintlik kan toegang tot dit in ons programme sowel. 1027 01:11:50,000 --> 01:11:55,000 Dit raak belangrik wanneer ons begin praat oor 'n paar van die data strukture, 1028 01:11:55,000 --> 01:11:58,000 wat is 'n konsep wat ons gaan later stel. 1029 01:11:58,000 --> 01:12:09,000 >> Maar vir nou, wat jy kan weet, is dat ek 'n wyser skep om hierdie plek, x. 1030 01:12:09,000 --> 01:12:12,000 Byvoorbeeld, kan ek 'n wyser veranderlike. 1031 01:12:12,000 --> 01:12:16,000 Wanneer ons 'n wyser veranderlike gebruik ons ​​die ster notasie. 1032 01:12:16,000 --> 01:12:21,000 In hierdie geval, dit sê ek gaan 'n wyser na 'n int te skep. 1033 01:12:21,000 --> 01:12:24,000 Dit is 'n tipe net soos enige ander. 1034 01:12:24,000 --> 01:12:27,000 Ons gee dit 'n veranderlike soos y, 1035 01:12:27,000 --> 01:12:32,000 en dan het ons dit gelyk is aan die adres, na 'n adres. 1036 01:12:32,000 --> 01:12:38,000 In hierdie geval, kan ons y te wys aan x 1037 01:12:38,000 --> 01:12:43,000 deur die neem van die adres van x, wat ons doen met hierdie ampersand, 1038 01:12:43,000 --> 01:12:55,000 en dan het ons y om dit te wys. 1039 01:12:55,000 --> 01:12:59,000 Wat beteken dit in wese is as ons kyk na ons RAM 1040 01:12:59,000 --> 01:13:02,000 dit skep 'n aparte veranderlike. 1041 01:13:02,000 --> 01:13:04,000 Dit gaan om dit te noem y, 1042 01:13:04,000 --> 01:13:06,000 en wanneer hierdie lyn van die kode voer 1043 01:13:06,000 --> 01:13:13,000 dit eintlik gaan 'n bietjie wyser wat ons gewoonlik trek soos 'n pyl te skep, 1044 01:13:13,000 --> 01:13:15,000 en dit stel aan x y te wys. 1045 01:13:15,000 --> 01:13:17,000 Ja. 1046 01:13:17,000 --> 01:13:19,000 [Studente] As x is reeds 'n wyser, jy wil net doen 1047 01:13:19,000 --> 01:13:22,000 int * y = x in plaas van met die ampersand? 1048 01:13:22,000 --> 01:13:24,000 Ja. 1049 01:13:24,000 --> 01:13:27,000 As x is reeds 'n wyser, dan kan jy 2 wysers gelyk aan mekaar te stel, 1050 01:13:27,000 --> 01:13:30,000 in welke geval y sal nie wys op x, 1051 01:13:30,000 --> 01:13:34,000 maar dit sal wys op watter x is verwys na. 1052 01:13:34,000 --> 01:13:37,000 Ongelukkig kan ons uit die tyd. 1053 01:13:37,000 --> 01:13:44,000 >> Wat ek wil sê op hierdie punt, kan ons praat oor hierdie die regte pad 1054 01:13:44,000 --> 01:13:49,000 maar ek sou sê begin werk deur middel van hierdie probleem, # 14. 1055 01:13:49,000 --> 01:13:53,000 Jy kan sien daar is reeds 'n bietjie vir jou ingevul hier. 1056 01:13:53,000 --> 01:13:57,000 Kan jy sien dat wanneer ons verklaar 2 pointers, int * x en y, 1057 01:13:57,000 --> 01:14:01,000 en kennis dat die wys van die * langs die veranderlike was iets wat verlede jaar gedoen is. 1058 01:14:01,000 --> 01:14:05,000 Dit blyk dat dit is soortgelyk aan wat ons doen hierdie jaar. 1059 01:14:05,000 --> 01:14:11,000 Dit maak nie saak waar jy die * skryf wanneer jy die wyser te verklaar. 1060 01:14:11,000 --> 01:14:17,000 Maar ons het die * geskryf langs die tipe 1061 01:14:17,000 --> 01:14:24,000 want dit maak dit baie duidelik dat jy waarby 'n wyser veranderlike. 1062 01:14:24,000 --> 01:14:27,000 Jy kan sien dat die verklaar van die 2 pointers gee ons 2 bokse. 1063 01:14:27,000 --> 01:14:31,000 Hier wanneer ons x gelyk aan malloc 1064 01:14:31,000 --> 01:14:34,000 wat dit sê nie, is ter syde stel geheue in die hoop. 1065 01:14:34,000 --> 01:14:41,000 Hierdie klein blokkie reg hier, hierdie sirkel, is geleë op die hoop. 1066 01:14:41,000 --> 01:14:43,000 X wys. 1067 01:14:43,000 --> 01:14:46,000 Let daarop dat y nog nie verwys na iets. 1068 01:14:46,000 --> 01:14:50,000 Te kry geheue tot die getal 42 in x stoor 1069 01:14:50,000 --> 01:14:55,000 ons sal gebruik wat notasie? 1070 01:14:55,000 --> 01:14:59,000 [Studente] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Presies, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 Dit beteken volg die pyl en gooi 42 daar. 1073 01:15:06,000 --> 01:15:09,000 Hier waar ons y en x y wys ons aan x. 1074 01:15:09,000 --> 01:15:13,000 Weereens, dit is net soos wat Kevin het gesê dat waar ons y gelyk aan x. 1075 01:15:13,000 --> 01:15:15,000 Y is nie wys aan x. 1076 01:15:15,000 --> 01:15:19,000 Inteendeel, dit wys tot watter x verwys na sowel. 1077 01:15:19,000 --> 01:15:24,000 >> En dan uiteindelik in hierdie laaste blokkie daar is 2 moontlike dinge wat ons kan doen. 1078 01:15:24,000 --> 01:15:28,000 Een daarvan is ons * x = 13 kan sê. 1079 01:15:28,000 --> 01:15:33,000 Die ander ding is ons kan sê Alex, dink jy weet wat ons hier kan doen? 1080 01:15:33,000 --> 01:15:37,000 Jy kan sê * x = 13 of 1081 01:15:37,000 --> 01:15:41,000 [Studente] Jy kan sê int wat ookal. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] As dit is bedoel as 'n int veranderlike wat ons kan doen. 1083 01:15:45,000 --> 01:15:49,000 Ons kan ook sê * y = 13 omdat hulle albei verwys na dieselfde plek, 1084 01:15:49,000 --> 01:15:51,000 sodat ons kan óf veranderlike gebruik om daar te kom. 1085 01:15:51,000 --> 01:15:56,000 Ja >> [Studente]. Hoe sou dit lyk as ons net sê int x is 13? 1086 01:15:56,000 --> 01:16:00,000 Dit sou verklaar word om 'n nuwe veranderlike naam van x, wat nie wil werk nie. 1087 01:16:00,000 --> 01:16:04,000 Ons wil 'n botsing omdat ons verklaar x 'n wyser te wees hier. 1088 01:16:04,000 --> 01:16:10,000 [Studente] As ons net daardie verklaring by hom gehad het wat sou dit lyk in terme van die sirkel? 1089 01:16:10,000 --> 01:16:14,000 As ons x = 13, dan sou ons 'n boks, en eerder as om 'n pyl 1090 01:16:14,000 --> 01:16:16,000 uit te kom van die boks wat ons wil teken dit as net 'n 13. 1091 01:16:16,000 --> 01:16:19,000 [Studente] In die boks. Okay. 1092 01:16:19,000 --> 01:16:24,000 >> Dankie vir jou kyk, en geluk op Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]