1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [§ 4] [Vähem Mugav] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Harvardi Ülikool] 3 00:00:04,000 --> 00:00:07,000 [See on CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Olgu, tere tulemast tagasi lõik. 5 00:00:10,000 --> 00:00:13,000 Sel nädalal osa me teeme paar asja. 6 00:00:13,000 --> 00:00:17,000 Me läheme esmalt meelde Ülesanded nr 2, 7 00:00:17,000 --> 00:00:20,000 mis on Caesari ja Vigenère lahendamist. 8 00:00:20,000 --> 00:00:23,000 Ja siis me lähme sukelduma viktoriin 0 läbivaatamine 9 00:00:23,000 --> 00:00:26,000 ja veeta natuke aega kokkuvõtet tehes, mida me rääkisime 10 00:00:26,000 --> 00:00:30,000 Iga loenguid nii kaugele, ja me ka teha mõningaid probleeme 11 00:00:30,000 --> 00:00:32,000 alates eelmise aasta viktoriine. 12 00:00:32,000 --> 00:00:36,000 Nii teiega on hea viis selleks ette valmistada. 13 00:00:36,000 --> 00:00:40,000 >> Et alustada, ma olen käivitatud paar head lahendused 14 00:00:40,000 --> 00:00:45,000 eelneva lahendamist, Ülesanded 2, sellesse ruumi. 15 00:00:45,000 --> 00:00:48,000 Kui te kõik tabanud seda linki, 16 00:00:48,000 --> 00:00:53,000 ja kui sa vajutad mu nimi ja klõpsa minu esimene läbivaatamine 17 00:00:53,000 --> 00:00:56,000 näete caesar.c, mis on täpselt see, mida ma otsin. 18 00:00:56,000 --> 00:01:00,000 Räägime seda tõesti kiiresti. 19 00:01:00,000 --> 00:01:02,000 See on lihtsalt proov lahendus. 20 00:01:02,000 --> 00:01:05,000 See ei pruugi ideaalne lahendus. 21 00:01:05,000 --> 00:01:08,000 Seal on palju erinevaid viise, kuidas kirjutada sellest, 22 00:01:08,000 --> 00:01:10,000 kuid seal on mõned asjad, mida ma tahtsin rõhutada 23 00:01:10,000 --> 00:01:13,000 et ma nägin, kui ma hindasin, üldine viga, et ma arvan, 24 00:01:13,000 --> 00:01:18,000 see lahendus ei väga head tööd käitlemise. 25 00:01:18,000 --> 00:01:22,000 >> Esimene on lasknud mingi header kommentaar ülaosas. 26 00:01:22,000 --> 00:01:25,000 Ridadel 1 kuni 7. näed üksikasju, 27 00:01:25,000 --> 00:01:28,000 mida täpselt see programm teeb. 28 00:01:28,000 --> 00:01:32,000 Hea tava, kui olete kirjalikult C kood 29 00:01:32,000 --> 00:01:35,000 sõltumata sellest, kas teie programm sisaldub ühes failis või 30 00:01:35,000 --> 00:01:38,000 kas see on jagatud üle mitu faili on mingisugune 31 00:01:38,000 --> 00:01:40,000 suunata kommentaar ülaosas. 32 00:01:40,000 --> 00:01:43,000 See on ka inimesi, kes lähevad välja ja kirjutada koodi reaalses maailmas. 33 00:01:43,000 --> 00:01:47,000 See on koht, kus nad panen autoriõiguse info. 34 00:01:47,000 --> 00:01:50,000 Allpool on # sisaldab. 35 00:01:50,000 --> 00:01:55,000 Rea 16 seal on see # define, mis me tuleme tagasi vaid veidi. 36 00:01:55,000 --> 00:01:59,000 Ja siis, kui käivitub, kui peamised algust 37 00:01:59,000 --> 00:02:03,000 sest see programm on kõik, mis moodustavad ühe funktsiooni 38 00:02:03,000 --> 00:02:09,000 Kõige esimene asi, mis juhtub, ja see on väga idiomaatiline ja tüüpiline C programmi 39 00:02:09,000 --> 00:02:14,000 mis võtab käsurea argumente-on, et see kohe kontrollib 40 00:02:14,000 --> 00:02:18,000 >> jaoks argument loota, argc. 41 00:02:18,000 --> 00:02:24,000 Siin näeme, et see programm on oodata 2 argumendid täpselt. 42 00:02:24,000 --> 00:02:27,000 Pea meeles, see on esimene argument see on eriline 43 00:02:27,000 --> 00:02:29,000 see on alati programmi nime, mis kuramuse jooksma, 44 00:02:29,000 --> 00:02:31,000 nimi käivitatava faili. 45 00:02:31,000 --> 00:02:36,000 Ja mis see on see hoiab ära kasutaja töötab programm 46 00:02:36,000 --> 00:02:42,000 rohkem või vähem argumente. 47 00:02:42,000 --> 00:02:44,000 Põhjus, miks me tahame kontrollida seda kohe, sest 48 00:02:44,000 --> 00:02:52,000 me ei saa tegelikult kasutada seda argv array siin usaldusväärselt 49 00:02:52,000 --> 00:02:55,000 kuni meil kontrollida, et näha, kui suur see on. 50 00:02:55,000 --> 00:02:58,000 >> Üks levinumaid vigu ma nägin, oli inimesi oleks kohe minema 51 00:02:58,000 --> 00:03:01,000 ja haarata argv [1]. 52 00:03:01,000 --> 00:03:06,000 Nad tahaks haarata võti argument välja massiivi ja ei i kontrollida seda, 53 00:03:06,000 --> 00:03:11,000 ja siis nad teeksid test argc samuti järgmise katse, 54 00:03:11,000 --> 00:03:16,000 kas esimene argument oli tõepoolest täisarv samal ajal, 55 00:03:16,000 --> 00:03:20,000 ja see ei tööta, sest puhul, mis ei ole argumendid esitatud 56 00:03:20,000 --> 00:03:26,000 teil haarata väide, et ei ole olemas või üritab haarata üks, mis ei ole seal. 57 00:03:26,000 --> 00:03:29,000 >> Teine suur asi, et sa peaksid teate, et 58 00:03:29,000 --> 00:03:32,000 tahad alati välja printida mingi kasulik veateate 59 00:03:32,000 --> 00:03:34,000 kasutaja orienteeruda neid. 60 00:03:34,000 --> 00:03:37,000 Olen kindel, et olete kõik käivitada programme, kus äkki see kokku jookseb, 61 00:03:37,000 --> 00:03:41,000 ja sa saad selle naeruväärse vähe dialoogi, et hüppab ja ütleb 62 00:03:41,000 --> 00:03:44,000 midagi kohutavalt segasena ja võibolla annab sulle veakoodi või midagi sellist 63 00:03:44,000 --> 00:03:47,000 et ei ole mõtet. 64 00:03:47,000 --> 00:03:50,000 See on koht, kus sa tõesti tahad pakkuda midagi kasulik 65 00:03:50,000 --> 00:03:54,000 ja sihitud kasutaja nii et kui nad juhivad seda nad lähevad "Oh," face palm. 66 00:03:54,000 --> 00:03:58,000 "Ma tean täpselt, mida teha. Tean, kuidas määrata see." 67 00:03:58,000 --> 00:04:01,000 >> Kui te ei prindi sõnum, siis lõpuks tegelikult 68 00:04:01,000 --> 00:04:04,000 jättes kasutajal minna uurima oma lähtekoodi 69 00:04:04,000 --> 00:04:07,000 aru saada, mis valesti läks. 70 00:04:07,000 --> 00:04:11,000 On ka mõned ajad, et saad kasutada erinevaid veakoode. 71 00:04:11,000 --> 00:04:14,000 Siin me lihtsalt kasutas ühte öelda oli viga, 72 00:04:14,000 --> 00:04:16,000 seal oli viga, oli viga. 73 00:04:16,000 --> 00:04:20,000 Suuremad programmid, sageli programme, mis on kutsunud teisi programme, 74 00:04:20,000 --> 00:04:25,000 tagasi mingisugune eriline veakoodide erinevate stsenaariumide 75 00:04:25,000 --> 00:04:28,000 programmiliseks suhelda, mida sa muidu 76 00:04:28,000 --> 00:04:32,000 lihtsalt kasutada kena inglise sõnum. 77 00:04:32,000 --> 00:04:35,000 Lahe. 78 00:04:35,000 --> 00:04:37,000 Kuna me töötame alla, näete me tõmmake võti välja. 79 00:04:37,000 --> 00:04:40,000 Meil proovida, kas võti sobib. 80 00:04:40,000 --> 00:04:42,000 Me saame sõnumi kasutaja. 81 00:04:42,000 --> 00:04:46,000 Põhjus, miks me teeme seda see ei samas loop-ja see on midagi, mida me katta 82 00:04:46,000 --> 00:04:50,000 aastal natuke-aga selgub, et kui kirjutad kontrolli D 83 00:04:50,000 --> 00:04:54,000 kui sa selle getString kiire edasi terminal 84 00:04:54,000 --> 00:04:59,000 mida see tegelikult ei ole see saadab erimärk 85 00:04:59,000 --> 00:05:01,000 programmile. 86 00:05:01,000 --> 00:05:05,000 Seda nimetatakse ELF või faili lõppu iseloomu. 87 00:05:05,000 --> 00:05:08,000 Ja sel juhul meie sõnum string on null, 88 00:05:08,000 --> 00:05:14,000 nii see ei olnud midagi, mida me kontrollida probleemiga seadnud. 89 00:05:14,000 --> 00:05:17,000 >> Aga kui me läheme edasi, nüüd oleme hakanud rääkima viiteid 90 00:05:17,000 --> 00:05:21,000 ja dünaamiline mälu eraldamise kohta hunnik, 91 00:05:21,000 --> 00:05:25,000 kontrollides null, kui teil on funktsioon, mis võivad 92 00:05:25,000 --> 00:05:30,000 tagastab null kui väärtus on midagi, mida sa tahad saada harjumus teeb. 93 00:05:30,000 --> 00:05:33,000 See on siin peamiselt illustreerimiseks. 94 00:05:33,000 --> 00:05:36,000 Aga kui sa ei näe getString tulevikus, 95 00:05:36,000 --> 00:05:41,000 nii alates Ülesanded nr 4, sa tahad seda silmas pidama. 96 00:05:41,000 --> 00:05:44,000 Jällegi, see ei ole küsimus Ülesanded nr 3 kas sest me ei kuulu veel. 97 00:05:44,000 --> 00:05:53,000 Lõpuks saame seda osa, kus me saame peamine krüpteerimine silmus, 98 00:05:53,000 --> 00:05:57,000 ja seal on paar asja siin toimub. 99 00:05:57,000 --> 00:06:02,000 Esiteks, me kinnitada, kogu sõnumi string ise. 100 00:06:02,000 --> 00:06:07,000 Siin me oleme hoidnud strlen kõne seisukorras, 101 00:06:07,000 --> 00:06:12,000 mis number teil on märkinud, ei ole suurepärane võimalus minna. 102 00:06:12,000 --> 00:06:15,000 Selgub, antud juhul see ka ei ole suur, 103 00:06:15,000 --> 00:06:20,000 osaliselt, sest me muuta sõnumi sisu ise 104 00:06:20,000 --> 00:06:27,000 sees jaoks silmus, nii et kui meil on sõnum, mis on 10 tähemärki pikk, 105 00:06:27,000 --> 00:06:32,000 Esmakordselt alustame et silmus strlen naaseb mida? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Aga kui me seejärel muuta sõnumi, ütleme me muuta oma 5. iseloomu, 108 00:06:40,000 --> 00:06:46,000 ja me visata \ 0 märk 5. positsiooni, 109 00:06:46,000 --> 00:06:49,000 edaspidiseks iteratsiooni strlen (sõnum) ei naase, mida ta tegi 110 00:06:49,000 --> 00:06:52,000 Kõige esimene kord, kui me itereerida, 111 00:06:52,000 --> 00:06:56,000 kuid selle asemel tagastab 5, kuna me viskasid selles null terminaator 112 00:06:56,000 --> 00:06:59,000 ja stringi pikkusest, määratletud 113 00:06:59,000 --> 00:07:03,000 poolt seisukohta, et \ 0. 114 00:07:03,000 --> 00:07:09,000 Sel juhul on see suurepärane võimalus minna, sest me muuta seda kinni. 115 00:07:09,000 --> 00:07:13,000 Aga te märkate, et see on tegelikult üllatavalt lihtne varjata 116 00:07:13,000 --> 00:07:16,000 kui saad matemaatikat õige. 117 00:07:16,000 --> 00:07:19,000 Kõik, mis vaja on kontrollida, kas kirjas, et te vaatate 118 00:07:19,000 --> 00:07:21,000 on suur-või väiketähed. 119 00:07:21,000 --> 00:07:24,000 >> Põhjus, miks me ainult kontrollida seda ja me ei pea kontrollima 120 00:07:24,000 --> 00:07:27,000 on alfa puhul, sest 121 00:07:27,000 --> 00:07:30,000 kui märk on suur või kui see on väiketäht 122 00:07:30,000 --> 00:07:33,000 siis see on kindlasti tähte, 123 00:07:33,000 --> 00:07:38,000 sest meil ei ole suuri ja väikeseid numbreid. 124 00:07:38,000 --> 00:07:41,000 Teine asi, mida me teeme ja see on natuke keeruline- 125 00:07:41,000 --> 00:07:45,000 on meil modifitseeritud standard Caesar salakiri valem 126 00:07:45,000 --> 00:07:49,000 et me andis lahendamist spetsifikatsioon. 127 00:07:49,000 --> 00:07:52,000 Mis on erinev on see, et me lahutame 128 00:07:52,000 --> 00:07:58,000 aastal suur juhul kapitali, ja siis lisasime kapitali 129 00:07:58,000 --> 00:08:02,000 tagasi lõpus. 130 00:08:02,000 --> 00:08:05,000 >> Ma tean, mõned oled seda teinud oma koodi. 131 00:08:05,000 --> 00:08:09,000 Kas keegi teist seda teha oma ettepanekuid? 132 00:08:09,000 --> 00:08:13,000 Sina tegid seda. Kas oskate selgitada, mida see teeb, Sahb? 133 00:08:13,000 --> 00:08:18,000 Lahutatakse ära, sest sa tegid mod kohe pärast seda, 134 00:08:18,000 --> 00:08:21,000 te peate võtma seda, et kuidas sa saad [köha] asendisse. 135 00:08:21,000 --> 00:08:25,000 Ja siis lisada see hiljem tagasi sa nihkunud üle ühe, mis sa tahtsid. 136 00:08:25,000 --> 00:08:27,000 Jah, täpselt. 137 00:08:27,000 --> 00:08:32,000 Mis Sahb ütlesin, et kui me tahame lisada 138 00:08:32,000 --> 00:08:36,000 meie sõnum ja meie peamiste kokku 139 00:08:36,000 --> 00:08:42,000 ja siis mod, et moderaator et NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 kui me ei varu meie sõnum sobivasse 0-25 vahemikus esimene, 141 00:08:50,000 --> 00:08:54,000 siis me võiksime lõpuks saada väga imelik number 142 00:08:54,000 --> 00:08:59,000 sest väärtused, mis me vaatame, kui me vaatame sõnum [i] 143 00:08:59,000 --> 00:09:03,000 kui me vaatame nda iseloomu meie tavaline tekst sõnum 144 00:09:03,000 --> 00:09:08,000 on väärtus kusagil see 65-122 vahemik 145 00:09:08,000 --> 00:09:13,000 põhineb ASCII väärtused suur kaudu väiketähti z. 146 00:09:13,000 --> 00:09:18,000 Ja nii kui me mod see 26 või NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 kuna see oli meie # define ülaosas paremal siin, 148 00:09:23,000 --> 00:09:28,000 et läheb meile väärtus, mis on aastal 0-25 vahemikus, 149 00:09:28,000 --> 00:09:30,000 ja me peame viis siis skaala, mis tagasi üles 150 00:09:30,000 --> 00:09:32,000 ja saada see sobiv ASCII vahemikku. 151 00:09:32,000 --> 00:09:36,000 Lihtsaim viis seda teha on lihtsalt skaleerida kõike ette 152 00:09:36,000 --> 00:09:39,000 arvesse 0-25 vahemikus alustada, 153 00:09:39,000 --> 00:09:43,000 ja siis suunata kõik varundada lõpus. 154 00:09:43,000 --> 00:09:46,000 >> Teine levinud viga, et ma nägin inimesi tekib on see, et 155 00:09:46,000 --> 00:09:50,000 kui sa tegelikult ei tee seda tagi kohe 156 00:09:50,000 --> 00:09:53,000 ja lisate teade ja sisestage kokku ja lisate neid, ütleme, 157 00:09:53,000 --> 00:09:58,000 arvesse char muutuja probleem, et 158 00:09:58,000 --> 00:10:01,000 on alates teate [i] on suhteliselt suur arv alustada- 159 00:10:01,000 --> 00:10:05,000 Jäta see vähemalt 65, kui see on suurtähtede- 160 00:10:05,000 --> 00:10:09,000 kui teil on suur võti, ütleme, midagi 100, 161 00:10:09,000 --> 00:10:13,000 ja lisate need 2 kokku ühte allkirjastatud char sa lähed, et saada ülevoolu. 162 00:10:13,000 --> 00:10:17,000 Sa lähed, et saada väärtus, mis on suurem kui 127, 163 00:10:17,000 --> 00:10:22,000 mis on suurim väärtus, mis char muutuja mahub. 164 00:10:22,000 --> 00:10:26,000 Jällegi, sellepärast et sa tahad teha, et selline asi alustada. 165 00:10:26,000 --> 00:10:29,000 Mõned inimesed said ümber Sellisel juhul tehes kui muidu ja katsetamine 166 00:10:29,000 --> 00:10:33,000 et näha, kas see ülevool enne seda tehes, 167 00:10:33,000 --> 00:10:36,000 kuid sel viisil saab ümber selle. 168 00:10:36,000 --> 00:10:40,000 Ja siis see lahendus me välja trükkida kogu stringi päris lõpus. 169 00:10:40,000 --> 00:10:45,000 Teised inimesed välja trükkida täht korraga. Mõlemad on vinge. 170 00:10:45,000 --> 00:10:51,000 Sel hetkel, te poisid on küsimusi, märkusi selle kohta? 171 00:10:51,000 --> 00:10:56,000 Asjad sulle meeldib, mida sa ei meeldi? 172 00:10:56,000 --> 00:10:58,000 >> Mul oli küsimus. 173 00:10:58,000 --> 00:11:01,000 Võib-olla ma igatsesin seda ajal oma seletus, aga kuidas see programm 174 00:11:01,000 --> 00:11:07,000 jäta ruumi ühendada võti teksti pikkusest? 175 00:11:07,000 --> 00:11:10,000 See on vaid Caesari šiffer. >> Oh, vabandust, jah. 176 00:11:10,000 --> 00:11:13,000 Jah, me näeme seda. 177 00:11:13,000 --> 00:11:16,000 Kui Caesar salakiri saime ümber, et kuna 178 00:11:16,000 --> 00:11:18,000 me ainult keerata tähemärki. 179 00:11:18,000 --> 00:11:27,000 Me ainult keerutada, kui nad olid suur-või väiketähed. 180 00:11:27,000 --> 00:11:32,000 Te tunne päris hea selle kohta? 181 00:11:32,000 --> 00:11:34,000 Julgelt kopeeri see kodu, siis võtke see, 182 00:11:34,000 --> 00:11:37,000 võrrelda seda, mida kutid kirjutas. 183 00:11:37,000 --> 00:11:42,000 Kindlasti saatke küsimusi ka. 184 00:11:42,000 --> 00:11:46,000 Ja jälle aru, et eesmärk siin oma probleem seab 185 00:11:46,000 --> 00:11:50,000 ei saa te kirjutada täiuslik koodi oma probleem seab. 186 00:11:50,000 --> 00:11:57,000 See on õppimise kogemus. Jah. 187 00:11:57,000 --> 00:12:01,000 >> Tagasi ei samas loop, kui see võrdub null, 188 00:12:01,000 --> 00:12:06,000 nii null tähendab lihtsalt midagi, nad lihtsalt enter? 189 00:12:06,000 --> 00:12:12,000 Null on eriline osuti väärtus, 190 00:12:12,000 --> 00:12:17,000 ja me kasutame null, kui me tahame öelda 191 00:12:17,000 --> 00:12:23,000 meil pointer muutuja, mis osutab, et mitte midagi. 192 00:12:23,000 --> 00:12:28,000 Ja nii tavaliselt see tähendab, et see muutuja, sellest sõnumist muutuja 193 00:12:28,000 --> 00:12:35,000 on tühi, ja siin, sest me kasutame CS50 spetsiaalne string tüüpi, 194 00:12:35,000 --> 00:12:37,000 Mis on CS50 string tüüpi? 195 00:12:37,000 --> 00:12:42,000 Kas olete näinud, mis see on, kui David tagasi tõmmata kapuuts loeng? 196 00:12:42,000 --> 00:12:44,000 See on funky-see on osuti, eks? 197 00:12:44,000 --> 00:12:48,000 Okei, jah. >> See on char *. 198 00:12:48,000 --> 00:12:52,000 Ja nii tõesti me võiks asendada see 199 00:12:52,000 --> 00:12:56,000 siin koos char * sõnum 200 00:12:56,000 --> 00:13:04,000 ja nii getString funktsiooni, kui see ei edukalt saada stringi kasutaja, 201 00:13:04,000 --> 00:13:08,000 ei saa sõeluda string, ja üks juhtum, kus ta ei saa sõeluda string 202 00:13:08,000 --> 00:13:11,000 on, kui kasutaja trükib faili lõppu iseloomu, kontrolli D 203 00:13:11,000 --> 00:13:17,000 mis ei ole midagi, mida sa tavaliselt teed, kuid kui see juhtub 204 00:13:17,000 --> 00:13:20,000 siis funktsioon tagastab selle null väärtusega viis öelda 205 00:13:20,000 --> 00:13:23,000 "Kuule, ma ei saanud string." 206 00:13:23,000 --> 00:13:27,000 Mis juhtuks, kui me ei pane kirja = null, 207 00:13:27,000 --> 00:13:30,000 mis on midagi, mida me pole teinud veel? 208 00:13:30,000 --> 00:13:32,000 Miks see oleks probleem? 209 00:13:32,000 --> 00:13:38,000 Sest ma tean, et me rääkisime natuke ka loeng mälu lekkeid. 210 00:13:38,000 --> 00:13:42,000 Jah, teeme seda ja vaatame, mis juhtub. 211 00:13:42,000 --> 00:13:44,000 >> Vassili küsimus oli, mis juhtub, kui me tegelikult ei ole 212 00:13:44,000 --> 00:13:48,000 sellest sõnumist = null testi? 213 00:13:48,000 --> 00:13:51,000 Olgem liikuda üles üles. 214 00:13:51,000 --> 00:13:53,000 Te saate kommenteerida seda. 215 00:13:53,000 --> 00:13:55,000 Tegelikult, ma jätan selle läbivaatamist. 216 00:13:55,000 --> 00:13:58,000 See on Kontroll 3. 217 00:13:58,000 --> 00:14:02,000 Mida sa pead tegema, et programmi käivitada on teil klõpsata see käik ikooni siia üles, 218 00:14:02,000 --> 00:14:04,000 ja sa pead lisama argument ta. 219 00:14:04,000 --> 00:14:10,000 Sa pead andma see võti argument kuna tahame läbida käsurea argument. 220 00:14:10,000 --> 00:14:13,000 Siin ma annan see number 3. Mulle meeldib 3. 221 00:14:13,000 --> 00:14:19,000 Nüüd suum jälle välja, töötab programm. 222 00:14:19,000 --> 00:14:24,000 See töötab, koostamise, ehitamise. 223 00:14:24,000 --> 00:14:27,000 Läheb lahti. See ootab, et küsitakse. 224 00:14:27,000 --> 00:14:33,000 Kui ma kirjuta midagi tere-kust, et minna? 225 00:14:33,000 --> 00:14:38,000 Oh, mu programmi võttis liiga kaua aega joosta. Olin jawing liiga kaua. 226 00:14:38,000 --> 00:14:40,000 Siin see läheb. 227 00:14:40,000 --> 00:14:43,000 Nüüd ma kirjuta tere. 228 00:14:43,000 --> 00:14:46,000 Me näeme, et see krüpteerib sobivalt. 229 00:14:46,000 --> 00:14:52,000 Nüüd mis juhtub, kui me teeme kiiret getString naasta null? 230 00:14:52,000 --> 00:14:57,000 Pea meeles, ma ütlesin, et me tegime seda, vajutades nupule D samal ajal. 231 00:14:57,000 --> 00:14:59,000 Ma liikuge üles siin. Me teeme seda jälle. 232 00:14:59,000 --> 00:15:01,000 Ehitus. Seal ta läheb. 233 00:15:01,000 --> 00:15:04,000 Nüüd, kui ma tabanud kontrolli D 234 00:15:04,000 --> 00:15:12,000 Mul on see rida, mis ütleb opt/sandbox50/bin/run.sh, segmenteerimine süü. 235 00:15:12,000 --> 00:15:15,000 Kas te olete näinud, et enne? 236 00:15:15,000 --> 00:15:17,000 >> [Student] Miks pole->> Vabandust? 237 00:15:17,000 --> 00:15:20,000 [Student] Miks ei ole krahh tabab sel juhul? 238 00:15:20,000 --> 00:15:26,000 Core dump on-küsimus on miks ei krahh tabab siin? 239 00:15:26,000 --> 00:15:29,000 Küsimus on, et võib olla, kuid krahh tabab fail 240 00:15:29,000 --> 00:15:31,000 mis saab salvestatud kõvakettale. 241 00:15:31,000 --> 00:15:34,000 Sellisel juhul oleme blokeeritud tuum puistab 242 00:15:34,000 --> 00:15:37,000 aasta perspektiivis server, nii et me ei pea inimesed seg faulting 243 00:15:37,000 --> 00:15:40,000 ja ülesehitamisel tonni tuum puistab. 244 00:15:40,000 --> 00:15:46,000 Aga te võite saada üks. 245 00:15:46,000 --> 00:15:48,000 Core prügimäed on selline asi, mida saab sageli keelata, 246 00:15:48,000 --> 00:15:52,000 ja mõnikord sa teed. 247 00:15:52,000 --> 00:15:55,000 Killustatust süü, et vastata teie küsimusele, basiilik, 248 00:15:55,000 --> 00:16:00,000 ütleb, et me püüdnud ligi pääseda pointer 249 00:16:00,000 --> 00:16:05,000 et ei olnud seatud osutada midagi. 250 00:16:05,000 --> 00:16:09,000 Mäleta Binky on video kui Binky püüab 251 00:16:09,000 --> 00:16:12,000 minna juurdepääs pointer see pole osutades midagi? 252 00:16:12,000 --> 00:16:16,000 Sel juhul ma arvan, et tehniliselt osuti osutab millelegi. 253 00:16:16,000 --> 00:16:20,000 See osutab null, mis on tehniliselt 0, 254 00:16:20,000 --> 00:16:25,000 kuid mis on määratletud olema segment, mis ei ole kättesaadavad 255 00:16:25,000 --> 00:16:28,000 Teie programm, nii saad killustatust süü 256 00:16:28,000 --> 00:16:31,000 sest sa ei mälukaardi, mis on kehtivas segmendi 257 00:16:31,000 --> 00:16:38,000 nagu hunnik segment või korstna segment või Andmesideteenustest. 258 00:16:38,000 --> 00:16:40,000 Lahe. 259 00:16:40,000 --> 00:16:48,000 Enam küsimusi Caesar? 260 00:16:48,000 --> 00:16:51,000 >> Liigume edasi. Vaatame Revision 2 tõesti kiiresti. 261 00:16:51,000 --> 00:17:00,000 See on Vigenère. 262 00:17:00,000 --> 00:17:04,000 Siin Vigenère 263 00:17:04,000 --> 00:17:06,000 me kõndida läbi selle päris kiiresti, sest jällegi, 264 00:17:06,000 --> 00:17:10,000 Vigenère ja Caesar on üsna sarnased. 265 00:17:10,000 --> 00:17:12,000 Päise kommentaar on enne, 266 00:17:12,000 --> 00:17:17,000 # Define on enne kasutamist vältida nende maagiline arv. 267 00:17:17,000 --> 00:17:21,000 Tore asi on öelda tahtsime minna 268 00:17:21,000 --> 00:17:23,000 erinevat tähestikku või midagi sellist. 269 00:17:23,000 --> 00:17:26,000 Selle asemel et minna käsitsi muuta kõik 26 on koodis 270 00:17:26,000 --> 00:17:30,000 saaksime muuta selle 27 või tilk ta maha 271 00:17:30,000 --> 00:17:34,000 kui olime kasutades erinevaid tähestikke, erinevates keeltes. 272 00:17:34,000 --> 00:17:38,000 Jällegi, meil on see kontroll argument loota, 273 00:17:38,000 --> 00:17:42,000 ja tõesti saab peaaegu seda mallina. 274 00:17:42,000 --> 00:17:46,000 Päris palju iga programmi sa kirjutad peaks olema- 275 00:17:46,000 --> 00:17:50,000 kui ta võtab käsurea argumente, mõned jada read 276 00:17:50,000 --> 00:17:55,000 et kõlab nagu see alguses. 277 00:17:55,000 --> 00:17:59,000 See on üks esimesi meelerahu testid sa teha tahad. 278 00:17:59,000 --> 00:18:03,000 >> Siin me ei olnud me kindlaks teinud, et 279 00:18:03,000 --> 00:18:06,000 märksõna oli kehtiv ja see oli teise kontrolli, mis me tegime. 280 00:18:06,000 --> 00:18:11,000 Teade jälle, et me eraldada see alates argc ja 2. 281 00:18:11,000 --> 00:18:14,000 Pange tähele, et sellisel juhul üks asi, mis me tegema pidime oli selle asemel 282 00:18:14,000 --> 00:18:18,000 kasutamise i tahtsime kinnitada kogu stringi, 283 00:18:18,000 --> 00:18:21,000 ja selleks, et teha, mida tegelikult on vaja minna tähemärgi haaval 284 00:18:21,000 --> 00:18:23,000 üle string. 285 00:18:23,000 --> 00:18:29,000 Ei ole hea viis helistada midagi peal 286 00:18:29,000 --> 00:18:31,000 sest isegi näiteks i tagastab 0 287 00:18:31,000 --> 00:18:37,000 kui ta ei saa sõeluda täisarv, nii et isegi ei tööta. 288 00:18:37,000 --> 00:18:42,000 Jällegi kena sõnum teatades kasutajale täpselt juhtus. 289 00:18:42,000 --> 00:18:45,000 Siis siin, jälle, me ka käsitleda juhtumit, kus 290 00:18:45,000 --> 00:18:50,000 kasutaja liigid kontrolli D juhusliku iseloomu. 291 00:18:50,000 --> 00:18:54,000 >> Ja siis Charlotte oli küsimus varem, kuidas meil õnnestub vahele ruumid 292 00:18:54,000 --> 00:18:57,000 meie string siin. 293 00:18:57,000 --> 00:19:00,000 See oli selline sarnane sellega, mida tegime koos Myspace programmi 294 00:19:00,000 --> 00:19:04,000 et me tegime punktis, ja nii see töötas 295 00:19:04,000 --> 00:19:08,000 on see, et me leidsime mitmeid kirju, et me tahaks näha. 296 00:19:08,000 --> 00:19:13,000 Nagu me kõndinud üle sõnumi string, nagu me kõndinud üle tähemärgi haaval, 297 00:19:13,000 --> 00:19:16,000 me leidsime indeks osana meie jaoks silmus, ja siis me ka jälgida 298 00:19:16,000 --> 00:19:21,000 tähtede arv, nii mitte-erimärke, mitte-numbrit, mitte-valge ruum 299 00:19:21,000 --> 00:19:27,000 et me tahaks näha eraldi muutujana. 300 00:19:27,000 --> 00:19:33,000 Ja siis see lahendus muudab võti 301 00:19:33,000 --> 00:19:41,000 saada tegelik võti täisarv, ja see, et lennult, 302 00:19:41,000 --> 00:19:47,000 õigus enne, kui see läheb siis krüptida tegelik sõnum iseloomu. 303 00:19:47,000 --> 00:19:50,000 On mõned lahendused, mis olid täiesti liiga suur 304 00:19:50,000 --> 00:19:58,000 et oleks muuta võti üles kui testitakse võtme kehtivus. 305 00:19:58,000 --> 00:20:01,000 Lisaks veenduge, et iseloomu ja märksõna 306 00:20:01,000 --> 00:20:05,000 aastal tähte ta ka välja, et arvesse täisarv 307 00:20:05,000 --> 00:20:13,000 aastal 0-25 vahemiku jätke oleks vaja teha, et hiljem selle eest silmuse. 308 00:20:13,000 --> 00:20:18,000 Jällegi, sa näed siin see on tõesti täpselt sama kood 309 00:20:18,000 --> 00:20:22,000 et me kasutada Caesar selles punktis. 310 00:20:22,000 --> 00:20:25,000 Sa teed täpselt sama asja, nii tõeline trikk on figuring 311 00:20:25,000 --> 00:20:30,000 kuidas muuta märksõna täisarv. 312 00:20:30,000 --> 00:20:35,000 >> Üks asi, mis me tegime siin, et on natuke paks 313 00:20:35,000 --> 00:20:39,000 on meil kordas seda fraasi, ma arvan, võiks nimetada seda, 314 00:20:39,000 --> 00:20:45,000 3 eraldi korda liinidel 58, 59 ja 61. 315 00:20:45,000 --> 00:20:52,000 Kas keegi seletada, mis täpselt seda fraasi teeb? 316 00:20:52,000 --> 00:20:55,000 See tutvumise iseloomu, nagu sa ütlesid. 317 00:20:55,000 --> 00:20:59,000 Jah, see on [kuuldamatu] märk märksõna, 318 00:20:59,000 --> 00:21:04,000 ja nii see arv tähti näha, sest sa oled ainult liigub piki 319 00:21:04,000 --> 00:21:06,000 märksõna kui olete näinud kirja, 320 00:21:06,000 --> 00:21:10,000 nii et läheb tõhusalt vahele tühikud ja värki. 321 00:21:10,000 --> 00:21:12,000 Jah, täpselt. 322 00:21:12,000 --> 00:21:16,000 Ja siis kui oled näinud märksõna tühjaks sa lihtsalt mod nii liigutad tagasi umbes. 323 00:21:16,000 --> 00:21:18,000 Täpselt. See on täiuslik seletus. 324 00:21:18,000 --> 00:21:23,000 Mis Kevin ütles, et me tahame indeks märksõna. 325 00:21:23,000 --> 00:21:28,000 Me tahame saada num_letters_seen iseloomu, kui soovite, 326 00:21:28,000 --> 00:21:32,000 aga kui num_letters_seen pikem märksõna, 327 00:21:32,000 --> 00:21:37,000 kuidas me naasta sobiv vahemik me kasutame mod operaator 328 00:21:37,000 --> 00:21:40,000 tõhusalt ümbritsev. 329 00:21:40,000 --> 00:21:43,000 Näiteks nagu lühikese, meie märksõna on peekon, 330 00:21:43,000 --> 00:21:46,000 ja see on 5 tähte pikad. 331 00:21:46,000 --> 00:21:50,000 Aga me oleme näinud 6 tähte oma lihtteksti selles punktis 332 00:21:50,000 --> 00:21:52,000 ja krüpteeritud 6. 333 00:21:52,000 --> 00:21:57,000 Me lõpuks tutvumise num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 mis on 6, mod pikkus märksõna, 5, 335 00:22:00,000 --> 00:22:04,000 ja nii me jõuame 1, ja nii me teeme on me 336 00:22:04,000 --> 00:22:14,000 juurdepääs esimese märgi sees ja meie märksõna sel hetkel. 337 00:22:14,000 --> 00:22:21,000 >> Olgu, lisaküsimusi Vigenère 338 00:22:21,000 --> 00:22:26,000 enne kui edasi liigume? 339 00:22:26,000 --> 00:22:31,000 Te tunne päris hea selle kohta? 340 00:22:31,000 --> 00:22:35,000 Lahe, tore. 341 00:22:35,000 --> 00:22:38,000 Ma tahan veenduda, et te ei saada võimalus näha koodi 342 00:22:38,000 --> 00:22:48,000 et me arvame, näeb hea välja ja on võimalus õppida. 343 00:22:48,000 --> 00:22:53,000 See saab olema viimane saadame kasutades ruumid praegu, 344 00:22:53,000 --> 00:22:59,000 ja me ei kavatse ülemineku nüüd, ja ma lähen minema cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 et saaksime teha natuke viktoriini läbi. 346 00:23:06,000 --> 00:23:10,000 Parim viis Ma arvan, et alustada teed viktoriini läbivaatamine 347 00:23:10,000 --> 00:23:15,000 on tulnud seda Loengud lehel cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 ja all iga nädal rubriigid, nii et kui ma vaatan siin 0-nädalal, 349 00:23:20,000 --> 00:23:27,000 Ma näen, et meil on teemade nimekirja me käsitlesime 0-nädalal. 350 00:23:27,000 --> 00:23:31,000 >> Kui mõni neist teemadest tunduda võõras teile 351 00:23:31,000 --> 00:23:34,000 saate kindlasti tahan minna tagasi ja küürimine loengumaterjalid ja võimalusel 352 00:23:34,000 --> 00:23:39,000 isegi Lukaista loenguid, vaadata neid uuesti, kui soovite 353 00:23:39,000 --> 00:23:44,000 et tekib tunne, mis toimub kõigi kõnealuste teemade kohta. 354 00:23:44,000 --> 00:23:49,000 Ütlen täiendavalt käesoleva aasta üks lahe ressursse meil 355 00:23:49,000 --> 00:23:55,000 on need lühikesed, et me oleme loonud, ja kui te vaatate Nädal 0, 356 00:23:55,000 --> 00:24:00,000 meil ei ole kõiki teemasid, aga meil on üsna vähe neid, 357 00:24:00,000 --> 00:24:03,000 mõned keerukam tooted, et vaadates neid lühikesi pükse uuesti 358 00:24:03,000 --> 00:24:08,000 on hea võimalus saada teile kiirendamiseks. 359 00:24:08,000 --> 00:24:15,000 Eelkõige ma lähen kasutusele plug 3 põhjale, sest ma tegin neid. 360 00:24:15,000 --> 00:24:20,000 Aga kui sa oled hädas binaarne, bitid, hex, et sellist kraami, 361 00:24:20,000 --> 00:24:22,000 binaarne on hea koht alustamiseks. 362 00:24:22,000 --> 00:24:25,000 ASCII on veel üks, mis on hea vaadata ka. 363 00:24:25,000 --> 00:24:31,000 Võite isegi vaadata mind 1.5x kiirusega kui ma lähen liiga aeglane sind. 364 00:24:31,000 --> 00:24:35,000 Kuna see on ülevaade, võid vabalt teha. 365 00:24:35,000 --> 00:24:40,000 >> Lihtsalt alustada tõesti kiiresti, me läheme läbi paar neist viktoriin probleeme 366 00:24:40,000 --> 00:24:44,000 lihtsalt kiiresti läbi hammustada neid. 367 00:24:44,000 --> 00:24:50,000 Näiteks vaatame probleem 16. et mul on õigus siin laual. 368 00:24:50,000 --> 00:24:54,000 Meil see järgmise arvutuse binaarne, 369 00:24:54,000 --> 00:24:56,000 ja me tahame näidata mingit tööd. 370 00:24:56,000 --> 00:24:59,000 Okei, ma annan selle maha. 371 00:24:59,000 --> 00:25:01,000 Te peaksite järgima koos paber, 372 00:25:01,000 --> 00:25:04,000 ja me teeme seda tõesti kiiresti. 373 00:25:04,000 --> 00:25:06,000 Tahame teha järgmise arvutuse binaarne. 374 00:25:06,000 --> 00:25:16,000 Mul 00110010. 375 00:25:16,000 --> 00:25:27,000 Ja ma lähen lisada see 00110010. 376 00:25:27,000 --> 00:25:30,000 Sest matemaatika geeniused pärast mööda kodus, 377 00:25:30,000 --> 00:25:35,000 see on tegelikult korrutatakse 2-ga. 378 00:25:35,000 --> 00:25:37,000 Alustame. 379 00:25:37,000 --> 00:25:39,000 Me läheme järgima samu Lisaks algoritm, mida me teeme 380 00:25:39,000 --> 00:25:43,000 kui me lisame kümnendkraadides koos. 381 00:25:43,000 --> 00:25:46,000 Tõesti ainus erinevus on selles, et me loop tagasi umbes 382 00:25:46,000 --> 00:25:51,000 kui meil on 1 + 1 asemel, kui saame 10. 383 00:25:51,000 --> 00:25:53,000 >> Kui hakkame paremalt, tõesti kiiresti, mis on esimene number? 384 00:25:53,000 --> 00:25:55,000 [Student] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Hea, teine ​​number? 386 00:25:58,000 --> 00:26:00,000 [Student] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Kas see on 1? 1 + 1 on? 388 00:26:02,000 --> 00:26:04,000 [Student] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Täpselt nii, siis milline on number, mis ma kirjutan paremale alla 2 neist liidetakse? 390 00:26:08,000 --> 00:26:11,000 [Student] 1, 0 või 0 ja seejärel läbi 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 ja viia 1, täpselt. 392 00:26:15,000 --> 00:26:18,000 Järgmine üks üles, basiilik, oled valmis. 393 00:26:18,000 --> 00:26:20,000 Mis kolmas? >> [Basiilik] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, täiuslik. 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.] Jah, ja mida ma pean tegema? 397 00:26:30,000 --> 00:26:32,000 [Student] 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] Ja mida ma pean tegema? Ja siis ma teha 1. 399 00:26:34,000 --> 00:26:36,000 Täiuslik, Sahb? >> [Sahb] Nüüd on teil 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] Ja ma pean tegema midagi siin? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Järgneva ühe teil on 1, sest sa üle 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Hea, et siin saame lõpetada see üles. 403 00:26:49,000 --> 00:26:51,000 Lahe. 404 00:26:51,000 --> 00:26:54,000 [Student] Kas 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, nagu sa ütlesid, on 10 või 1, 0, pigem. 407 00:27:01,000 --> 00:27:07,000 10 on eksitav, sest mulle 10 tähendab number 10, 408 00:27:07,000 --> 00:27:12,000 ja see on veidrus, kuidas me seda väljendada kui me kirjutamist. 409 00:27:12,000 --> 00:27:20,000 Me esindame number 2 1, 0 ja number 10 on veidi teistsugune. 410 00:27:20,000 --> 00:27:23,000 >> Mis liiki kena umbes binaarne on see, et seal tõesti ei ole, et paljud 411 00:27:23,000 --> 00:27:25,000 juhtudel, mida vaja teada. 412 00:27:25,000 --> 00:27:30,000 Seal on 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 on 0, ja seejärel läbi 1 414 00:27:34,000 --> 00:27:37,000 ja siis näete siin kolmandas veerus paremalt 415 00:27:37,000 --> 00:27:40,000 meil oli see 1, 1 ja 1. 416 00:27:40,000 --> 00:27:43,000 Ja 1 + 1 + 1 on 1, 417 00:27:43,000 --> 00:27:45,000 ja kannad veel 1. 418 00:27:45,000 --> 00:27:48,000 Kui sa teed binaarne Lisaks päris lihtne. 419 00:27:48,000 --> 00:27:51,000 Ma teeksin veel paar nende meelerahu kontrollida ise 420 00:27:51,000 --> 00:27:54,000 enne kui minna, sest see on 421 00:27:54,000 --> 00:28:00,000 ilmselt midagi, me näeme viktoriini. 422 00:28:00,000 --> 00:28:03,000 Nüüd teeme seda järgmisel üks samuti. 423 00:28:03,000 --> 00:28:06,000 Teeme probleem 17. 424 00:28:06,000 --> 00:28:12,000 Me läheme teisendada järgmiste kahendarvu koma. 425 00:28:12,000 --> 00:28:28,000 Mul 10100111001. 426 00:28:28,000 --> 00:28:33,000 Pea meeles, et binaarne video, mis ma tegin 427 00:28:33,000 --> 00:28:36,000 Läksin läbi paar näidet, ja ma näitasin kuidas 428 00:28:36,000 --> 00:28:41,000 kõik toimib, kui sa teed seda koma. 429 00:28:41,000 --> 00:28:45,000 Kui te töötate koma esindatus Ma arvan, et me oleme 430 00:28:45,000 --> 00:28:48,000 Sel hetkel meie elus nii valdavad seda, et 431 00:28:48,000 --> 00:28:53,000 see on üsna lihtne ilustada mehaanika, kuidas see tegelikult toimib. 432 00:28:53,000 --> 00:28:59,000 >> Aga mida teha kiire sulgege, kui mul on number 137 433 00:28:59,000 --> 00:29:06,000 see tegelikult tähendab ja jälle, see on koma esindatus- 434 00:29:06,000 --> 00:29:19,000 number 137 kohaga tähendab, et mul on 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 See on kõik, kes viibivad ekraan. 436 00:29:22,000 --> 00:29:29,000 Ja siis, kui te vaatate neid numbreid siin, 437 00:29:29,000 --> 00:29:34,000 100, 10 ja 1, siis näeme, et nad on tegelikult kõik volitused 10. 438 00:29:34,000 --> 00:29:43,000 Mul on 10 ², 10 ¹ ja 10 nulli. 439 00:29:43,000 --> 00:29:48,000 Meil on sarnane asi, binaarne, 440 00:29:48,000 --> 00:29:55,000 välja arvatud, et meie baasi, nagu me seda kutsume, on 2 asemel 10. 441 00:29:55,000 --> 00:29:58,000 Need 10s, et ma kirjutasin siia alla, 442 00:29:58,000 --> 00:30:02,000 See 10 ², 10 ¹, 10 nulli, 10 on meie baas, 443 00:30:02,000 --> 00:30:08,000 ja eksponent, 0, 1 või 2, 444 00:30:08,000 --> 00:30:14,000 on võimalik tuletada positsiooni kohaline number, et me kirjutame. 445 00:30:14,000 --> 00:30:21,000 1, kui me vaatame seda, seda 1 on 2. koht. 446 00:30:21,000 --> 00:30:27,000 3 on 1. positsiooni, ja 7 on 0. positsiooni. 447 00:30:27,000 --> 00:30:35,000 See, kuidas me saame erinevate eksponendid allpool meie aluseid. 448 00:30:35,000 --> 00:30:40,000 >> Pärast kõike seda we'll-tegelikult, tead mida? 449 00:30:40,000 --> 00:30:43,000 Me teeme Kust minu undo nupp minna? 450 00:30:43,000 --> 00:30:45,000 Seal ta läheb. 451 00:30:45,000 --> 00:30:47,000 Ma armastan seda undo asi. 452 00:30:47,000 --> 00:30:51,000 Pärast seda ma arvan, minu jaoks vähemalt 453 00:30:51,000 --> 00:30:54,000 Lihtsaim viis alustada konverteeriva kahendarvu 454 00:30:54,000 --> 00:30:57,000 või kuueteistkümnendarvuna kus baas on 16 455 00:30:57,000 --> 00:31:02,000 ja mitte 10 või 2 on edasi minna ja kirjutada 456 00:31:02,000 --> 00:31:09,000 alused ja eksponendid jaoks kõik numbrid minu kahendarvu ülaosas. 457 00:31:09,000 --> 00:31:14,000 Kui hakkame vasakult paremale uuesti, 458 00:31:14,000 --> 00:31:17,000 mis on selline ebaloomulik, 459 00:31:17,000 --> 00:31:23,000 Ma muudan tagasi must siia, meil on 2 kuni 0. seisukohta, 460 00:31:23,000 --> 00:31:27,000 ja siis on meil 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 ja siis 2 kuni 3, 2 4, 2 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9, ja 10. 463 00:31:39,000 --> 00:31:41,000 Need numbrid olen kirjutanud välja kõik eksponendid. 464 00:31:41,000 --> 00:31:48,000 Ma ainult kirjutas alused siin esimese 3 lihtsalt ruumi. 465 00:31:48,000 --> 00:31:50,000 >> Sel hetkel ma lähen edasi minna ja ma olen tegelikult läheb kustutada 466 00:31:50,000 --> 00:31:53,000 asju, mis me tegime koma, kui see on okei. 467 00:31:53,000 --> 00:31:57,000 Olete kõik said aru. 468 00:31:57,000 --> 00:32:05,000 Need teie vaadates online Olen kindel, et saab kerida mind, kui soovite. 469 00:32:05,000 --> 00:32:07,000 Switching tagasi pen. 470 00:32:07,000 --> 00:32:12,000 Nüüd, mida me saame teha, kui te ei ole täiesti kiirendamiseks oma volitusi 2 471 00:32:12,000 --> 00:32:15,000 see on täiesti lahe. 472 00:32:15,000 --> 00:32:18,000 See juhtub. Mõistan. 473 00:32:18,000 --> 00:32:23,000 I kord oli tööintervjuu, kus mulle öeldi, et ma peaks teadma kõik volitused, 2. 474 00:32:23,000 --> 00:32:26,000 kuni läbi 2 30.. 475 00:32:26,000 --> 00:32:29,000 See ei olnud töö sain. 476 00:32:29,000 --> 00:32:32,000 Igatahes, kutid minna ja ei matemaatikat siin, 477 00:32:32,000 --> 00:32:35,000 kuid binaarne see ei ole tõesti mõtet, 478 00:32:35,000 --> 00:32:38,000 ja ega see mõttekas koos koma või kuueteistkümnendsüsteemis kas, 479 00:32:38,000 --> 00:32:43,000 teha matemaatika, kus sa oleksid nullid. 480 00:32:43,000 --> 00:32:49,000 Näete mul on 0 siin, 0 siin, 0 siin, 0 siin, 0 siin, 0 siin. 481 00:32:49,000 --> 00:32:52,000 Miks võib see ole mõtet teha tegelik matemaatika 482 00:32:52,000 --> 00:32:56,000 arvutamiseks asjakohane võimsus 2 kõnealuse seisukoha? 483 00:32:56,000 --> 00:32:59,000 Täpselt, nagu Charlotte ütles, et see on 0. 484 00:32:59,000 --> 00:33:05,000 Samahästi säästa ennast aega, kui arvutamisel volitusi 2 ei ole Teie tugev külg. 485 00:33:05,000 --> 00:33:10,000 Sel juhul me ainult vaja arvutada seda 2 astmes 0, mis on-? 486 00:33:10,000 --> 00:33:12,000 [Student] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2, 3 milles on-? 488 00:33:14,000 --> 00:33:16,000 [Student] 8. >> [Nate H.] 8. 489 00:33:16,000 --> 00:33:18,000 2 4? 490 00:33:18,000 --> 00:33:21,000 [Student] 2. Mul on kahju, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 4 on 16, täpselt. 492 00:33:26,000 --> 00:33:28,000 2 5, Kevin? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 8? 494 00:33:32,000 --> 00:33:38,000 [Student] 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 Ja 2 10? 497 00:33:43,000 --> 00:33:45,000 [Student] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Jah, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Kui meil on need numbrid saame need kokku liita kõik üles. 500 00:33:57,000 --> 00:34:01,000 Ja see on koht, kus see on tõesti oluline teha paar asja. 501 00:34:01,000 --> 00:34:07,000 Üks on minna aeglane ja kontrolli oma tööd. 502 00:34:07,000 --> 00:34:10,000 Te võite öelda, et seal on 1 lõpus see number, 503 00:34:10,000 --> 00:34:15,000 nii et ma peaks kindlasti saada paaritu arv kui minu tulemus, 504 00:34:15,000 --> 00:34:18,000 sest kõik teised need hakkavad olema paarisarvud 505 00:34:18,000 --> 00:34:21,000 arvestades, et see on binaarne number. 506 00:34:21,000 --> 00:34:24,000 Teine asi, mida teha on, kui sa saad selle punktini test 507 00:34:24,000 --> 00:34:27,000 ja olete kirjutanud seda välja nii kaugele 508 00:34:27,000 --> 00:34:30,000 ja sa otsa aega 509 00:34:30,000 --> 00:34:33,000 vaata arvu punkte, et see probleem on väärt. 510 00:34:33,000 --> 00:34:40,000 See probleem, nagu te näete, kui ma flip tagasi minu sülearvuti tõesti kiiresti- 511 00:34:40,000 --> 00:34:44,000 see probleem on väärt 2 punkti, nii see ei ole mingisugune lisaks 512 00:34:44,000 --> 00:34:47,000 siis peaks olema läbimas kui sa oled tõesti vähe aega. 513 00:34:47,000 --> 00:34:52,000 Aga me minna tagasi iPadi ja läheme läbi väga kiiresti. 514 00:34:52,000 --> 00:34:54,000 >> Mulle meeldib teha väike arv 1. 515 00:34:54,000 --> 00:34:56,000 sest ma leian, et lihtsam. 516 00:34:56,000 --> 00:35:00,000 Mulle meeldib 32 ja 8, sest nad lähevad koos päris kergesti, ja me saame 50. 517 00:35:00,000 --> 00:35:03,000 16 ja 1 saab 17. 518 00:35:03,000 --> 00:35:05,000 Seal saame 57, 519 00:35:05,000 --> 00:35:14,000 ja siis me saame teha ülejäänud seda, et saaksime teha 57 156. 520 00:35:14,000 --> 00:35:16,000 Tule. 521 00:35:16,000 --> 00:35:19,000 Mees, noh, vaatame. 522 00:35:19,000 --> 00:35:27,000 Meil oli 57, 256, ja 1024. 523 00:35:27,000 --> 00:35:31,000 Sel hetkel, ma pigem lihtsalt läbi minema. 524 00:35:31,000 --> 00:35:35,000 Mul pole aimugi. Ma ilmselt vaja lugeda üles seda. 525 00:35:35,000 --> 00:35:40,000 7, 6, ja 4, saad 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Siis saame 3, ja siis saame 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Lihavõttemuna, keegi? 530 00:35:55,000 --> 00:35:59,000 Igaüks tunnistavad selle numbri said? 531 00:35:59,000 --> 00:36:02,000 Chris tunneb numbri. Mis see tähendab, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, nii et kui te vaatate seda, tundub leet. 534 00:36:11,000 --> 00:36:15,000 Hacker kraami. Vaata ette, et sellist kraami Kontrolltöö või viktoriin, pigem. 535 00:36:15,000 --> 00:36:19,000 Kui näed sellist kraami ja sa ei tea "Huh," 536 00:36:19,000 --> 00:36:22,000 et võiks ka midagi tähendab. 537 00:36:22,000 --> 00:36:24,000 Ma ei tea. David meeldib seda sinna 538 00:36:24,000 --> 00:36:26,000 See on hea viis meelerahu seda kontrollida. 539 00:36:26,000 --> 00:36:30,000 Nagu okei, ma näen, mis toimub. 540 00:36:30,000 --> 00:36:34,000 >> See nädal 0/Week 1 kraam. 541 00:36:34,000 --> 00:36:39,000 Kui me minna tagasi meie sülearvuti nüüd, 542 00:36:39,000 --> 00:36:46,000 suumimiseks ja paar muud asja. 543 00:36:46,000 --> 00:36:50,000 Seal on ASCII, mis me oleme teinud palju probleemi komplekti. 544 00:36:50,000 --> 00:36:55,000 See mõiste kapitali A. Mis on see tõesti? 545 00:36:55,000 --> 00:36:57,000 Teades, et see koma täisarv. 546 00:36:57,000 --> 00:37:00,000 65 on see, mis see on kaardistatud ka ASCII tabel, 547 00:37:00,000 --> 00:37:03,000 ja see on seega, kuidas arvuti kirjutab ta, 548 00:37:03,000 --> 00:37:06,000 ja see, kuidas oleme olnud saada minema tegelikult kirjalikult 549 00:37:06,000 --> 00:37:09,000 iseloomuga kapitali ja iseloomu väiketähtedeks 550 00:37:09,000 --> 00:37:14,000 mõnel neist lahendustest ja probleem komplekti, mis olete teinud. 551 00:37:14,000 --> 00:37:16,000 Paar muud asjad. 552 00:37:16,000 --> 00:37:25,000 Meil avaldused, tõeväärtus väljendeid, tingimused, silmad, muutujad ja niidid. 553 00:37:25,000 --> 00:37:29,000 >> Need kõik tundub loogiline enamasti? 554 00:37:29,000 --> 00:37:35,000 Osa sellest terminoloogia on kuidagi imelikult aegadel. 555 00:37:35,000 --> 00:37:46,000 Mulle meeldib mõelda avaldust enamasti midagi, mis lõpeb semikooloniga. 556 00:37:46,000 --> 00:37:51,000 Avaldused nagu x = 7, mis seab muutuja, 557 00:37:51,000 --> 00:37:54,000 arvatavasti nimetatakse x = 7. 558 00:37:54,000 --> 00:38:01,000 Arvatavasti x on ka tüüp, mis mahutab number 7, 559 00:38:01,000 --> 00:38:05,000 nii et see on int või isegi ujuki või lühike või char, 560 00:38:05,000 --> 00:38:07,000 midagi sellist. 561 00:38:07,000 --> 00:38:12,000 Boolean väljend kasutab neid topelt võrdne 562 00:38:12,000 --> 00:38:17,000 ja pauk on võrdne või mitte võrdne, väiksem kui, suurem kui, 563 00:38:17,000 --> 00:38:22,000 väiksem või võrdne, kõik sellist kraami. 564 00:38:22,000 --> 00:38:28,000 Tingimused on siis, kui muud avaldused. 565 00:38:28,000 --> 00:38:32,000 Ma mäletan, et sa ei saa olla muud ilma vastava kui. 566 00:38:32,000 --> 00:38:37,000 Samamoodi ei saa olla muud kui ilma vastava kui. 567 00:38:37,000 --> 00:38:40,000 Loops, mäletate 3 liiki silmuste me oleme haamriga sulle sisse 568 00:38:40,000 --> 00:38:43,000 viimase paari lõigud ja probleem seab. 569 00:38:43,000 --> 00:38:46,000 Kasutades ära samal ajal, kui te saate kasutaja sisend, 570 00:38:46,000 --> 00:38:51,000 kasutades samal ajal silmuseid kuni teatud tingimus on tõene, 571 00:38:51,000 --> 00:38:56,000 ja siis kasutades neid silmuseid, kui peate 572 00:38:56,000 --> 00:39:01,000 tead mis iteratsiooni silmus Praegu asute, kuidas ma mõtlen selle üle. 573 00:39:01,000 --> 00:39:07,000 Või kui sa teed iga märk on string ma tahan teha midagi, 574 00:39:07,000 --> 00:39:15,000 iga element massiivi ma tahan teha midagi selle elemendi. 575 00:39:15,000 --> 00:39:18,000 >> Lõngad ja üritusi. 576 00:39:18,000 --> 00:39:21,000 Need oleme hõlmamata nii selgesõnaliselt C, 577 00:39:21,000 --> 00:39:23,000 aga mäletan seda nullist. 578 00:39:23,000 --> 00:39:26,000 See on mõiste, millel on erinevad skripte. 579 00:39:26,000 --> 00:39:32,000 See on ka see mõiste ringhääling sündmus. 580 00:39:32,000 --> 00:39:37,000 Mõned inimesed ei kasutanud ringhäälingut nende projektide esialgu 581 00:39:37,000 --> 00:39:40,000 mis on täiesti lahe, 582 00:39:40,000 --> 00:39:46,000 kuid need on 2 erinevat viisidest see suurem probleem nimega kokkulangevus, 583 00:39:46,000 --> 00:39:49,000 mis on, kuidas sa saad programme käivitada 584 00:39:49,000 --> 00:39:54,000 või näiliselt täita samal ajal? 585 00:39:54,000 --> 00:39:59,000 Erinevad ülesanded töötab samal ajal kui teised ülesanded ka töötab. 586 00:39:59,000 --> 00:40:01,000 See, kuidas teie operatsioonisüsteemi tundub töötavat. 587 00:40:01,000 --> 00:40:04,000 Seetõttu, kuigi näiteks 588 00:40:04,000 --> 00:40:10,000 Sain oma brauseri töötab, võin ka sisse lülitada Spotify ja mängida laulu. 589 00:40:10,000 --> 00:40:14,000 See on rohkem kontseptuaalne asi mõista. 590 00:40:14,000 --> 00:40:17,000 Ma võtaks pilk niidid lühikeseks 591 00:40:17,000 --> 00:40:21,000 Kui soovite rohkem teada seda. 592 00:40:21,000 --> 00:40:26,000 >> Vaatame, ma usun, et oleks võinud olla 593 00:40:26,000 --> 00:40:31,000 probleem selles ühes neist. 594 00:40:31,000 --> 00:40:35,000 Jällegi, ma arvan, niidid ja sündmused ei ole midagi, mida me katta C 595 00:40:35,000 --> 00:40:41,000 lihtsalt sellepärast, et see on oluliselt raskem kui nullist. 596 00:40:41,000 --> 00:40:44,000 Sa ei peaks muretsema selle sinna, kuid kindlasti mõista mõistete, 597 00:40:44,000 --> 00:40:47,000 aru, mis toimub. 598 00:40:47,000 --> 00:40:52,000 Enne kui edasi liigume, küsimusi 0-nädalal materjal? 599 00:40:52,000 --> 00:40:55,000 Igaüks tunne päris hea? 600 00:40:55,000 --> 00:41:03,000 Mõistmise muutujad ja mida muutuja on? 601 00:41:03,000 --> 00:41:08,000 >> Liigume edasi. 1. nädal. 602 00:41:08,000 --> 00:41:12,000 Paar asja siin mis ei olnud eriti hõlmatud 603 00:41:12,000 --> 00:41:21,000 aastal viktoriin läbivaatamise tingimata ja ka on rohkem põhimõtteline asju mõelda. 604 00:41:21,000 --> 00:41:30,000 Esimene on see mõiste, mida lähtekoodi, koostajad ja objekti kood on. 605 00:41:30,000 --> 00:41:32,000 Igaüks? Basiilik. 606 00:41:32,000 --> 00:41:37,000 Kas objekti kood-ma mõtlen lähtekoodi on see, mida sa pannakse rõkkama, 607 00:41:37,000 --> 00:41:42,000 ja objekti kood, mida rõkkama paneb välja nii, et arvuti ei loe programm. 608 00:41:42,000 --> 00:41:44,000 Täpselt. 609 00:41:44,000 --> 00:41:47,000 Lähtekood on C-koodi, mida tegelikult tüüp üles. 610 00:41:47,000 --> 00:41:50,000 Objekti kood on see, mida sa välja rõkkama. 611 00:41:50,000 --> 00:41:54,000 See on 0. ja 1s selles kahendvormingus. 612 00:41:54,000 --> 00:41:59,000 Mis siis juhtub, kui sul on hunnik objekt failid, 613 00:41:59,000 --> 00:42:04,000 öelda sa koostamise projekti või programmi, mis kasutab mitut lähtekoodi failid, 614 00:42:04,000 --> 00:42:09,000 keda tavapäraselt antakse. c faililaiend. 615 00:42:09,000 --> 00:42:13,000 Sellepärast on meil caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Kui olete kirjalikult Java programmide te neile pikendamist. Java. 617 00:42:18,000 --> 00:42:24,000 Pythoni programmid on laiendiga. Py sageli. 618 00:42:24,000 --> 00:42:26,000 >> Kui teil on mitu. C failide koguda neid. 619 00:42:26,000 --> 00:42:29,000 Rõkkama sülitab välja kõik see binaarne rämps. 620 00:42:29,000 --> 00:42:33,000 Siis kuna tahad ainult 1 programm 621 00:42:33,000 --> 00:42:37,000 teil on linker link kõik need objekti faili kokku 622 00:42:37,000 --> 00:42:40,000 arvesse 1 käivitatava faili. 623 00:42:40,000 --> 00:42:45,000 See on ka mis juhtub, kui te kasutate CS50 näiteks raamatukogus. 624 00:42:45,000 --> 00:42:50,000 CS50 raamatukogu on nii, et. H päisefail 625 00:42:50,000 --> 00:42:53,000 et sa loed, et # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 Ja siis on ka spetsiaalne binaarne raamatukogu fail 627 00:42:58,000 --> 00:43:02,000 mis on koostatud, et on 0. ja 1s, 628 00:43:02,000 --> 00:43:08,000 ja et-l lipu, nii et kui me läheme tagasi Spaces ja vaatame tõesti kiiresti 629 00:43:08,000 --> 00:43:11,000 kell, mis toimub siin, kui me vaatame meie rõkkama käsk, 630 00:43:11,000 --> 00:43:15,000 mida meil on see meie lähtekoodi fail siin. 631 00:43:15,000 --> 00:43:18,000 Need on hunnik kompilaatori lipud. 632 00:43:18,000 --> 00:43:22,000 Ja siis päris lõpus, need-l lipud lüli 633 00:43:22,000 --> 00:43:30,000 tegelik binaarfailid need 2 raamatukogud, CS50 raamatukogu ja seejärel matemaatika raamatukogu. 634 00:43:30,000 --> 00:43:35,000 >> Mõistmise iga tüüpi faile "eesmärk 635 00:43:35,000 --> 00:43:38,000 aastal koostamise protsess on midagi, mida sa tahad, et oleks võimalik 636 00:43:38,000 --> 00:43:43,000 anda vähemalt kõrgetasemelise ülevaate. 637 00:43:43,000 --> 00:43:46,000 Lähtekood on sisse Objekti kood väljub. 638 00:43:46,000 --> 00:43:53,000 Objekti kood faile ühendaks, ja sa saad ilus, käivitatava faili. 639 00:43:53,000 --> 00:43:55,000 Lahe. 640 00:43:55,000 --> 00:43:58,000 See on ka, kus saad vigu mitu punkti 641 00:43:58,000 --> 00:44:00,000 aastal koostamise protsessist. 642 00:44:00,000 --> 00:44:04,000 See on koht, kus näiteks, kui te võtate välja see ühendab lipp, 643 00:44:04,000 --> 00:44:10,000 CS50 lipp, ja jätate selle ruumi või kui näed oma koodi, 644 00:44:10,000 --> 00:44:13,000 see on koht, kus sa saad viga ühendab etapp, 645 00:44:13,000 --> 00:44:18,000 ja linker ütleb: "Kuule, sa helistasid funktsioon getString 646 00:44:18,000 --> 00:44:20,000 see on CS50 raamatukogu. " 647 00:44:20,000 --> 00:44:25,000 "Sa ütlesid, et see oli CS50 raamatukogu ja ma ei leia koodi." 648 00:44:25,000 --> 00:44:28,000 See, kui teil on siduda seda, ja see on eraldi 649 00:44:28,000 --> 00:44:33,000 alates kompilaator vea tõttu kompilaator vaatab süntaks ja sellist kraami. 650 00:44:33,000 --> 00:44:38,000 On hea teada, mis toimub, millal. 651 00:44:38,000 --> 00:44:42,000 >> Muud asjad teada. 652 00:44:42,000 --> 00:44:49,000 Ütleksin, mida kindlasti soovite võtta pilk lühike typecasting teha Jordan 653 00:44:49,000 --> 00:44:55,000 mõista, mida ints on kapoti alla, 654 00:44:55,000 --> 00:44:58,000 mida tähemärki on kapoti alla. 655 00:44:58,000 --> 00:45:02,000 Kui me räägime ASCII ja me tegelikult vaatate ASCII tabel, 656 00:45:02,000 --> 00:45:07,000 mida see teeb annab meile kapoti alla vaadata 657 00:45:07,000 --> 00:45:13,000 , kuidas arvuti tegelikult kujutab kapitali ja number 7 658 00:45:13,000 --> 00:45:17,000 ja koma ja küsimärk. 659 00:45:17,000 --> 00:45:20,000 Arvuti on ka erilised esindama 660 00:45:20,000 --> 00:45:23,000 number 7 täisarvuna. 661 00:45:23,000 --> 00:45:27,000 See on eriline võimalus esindada number 7 kui murdarv, 662 00:45:27,000 --> 00:45:29,000 ja need on väga erinevad. 663 00:45:29,000 --> 00:45:32,000 Typecasting on, kuidas sa ütled arvuti "Hei, ma tahan, et sa teisendada 664 00:45:32,000 --> 00:45:37,000 ühest esindamine teise esindatuse. " 665 00:45:37,000 --> 00:45:40,000 Miks me ei võta pilk see. 666 00:45:40,000 --> 00:45:44,000 >> Tahaks ka võtta pilk lühike raamatukogude ja lühike koostajad. 667 00:45:44,000 --> 00:45:47,000 Need jutud koostamise protsess, 668 00:45:47,000 --> 00:45:53,000 mida raamatukogu on, ja minna üle mõnele neist küsimustest, et võite saada küsis. 669 00:45:53,000 --> 00:45:55,000 Küsimused nädal 1 materjal? 670 00:45:55,000 --> 00:46:03,000 Kas on mingeid teemasid siin et tunduda hirmuäratav soovite katta? 671 00:46:03,000 --> 00:46:07,000 Püüan puhuda läbi enamik neist varem teemasid nii, et saame 672 00:46:07,000 --> 00:46:13,000 viiteid ja teha natuke rekursioon. 673 00:46:13,000 --> 00:46:15,000 Mõtted? 674 00:46:15,000 --> 00:46:19,000 Midagi katta? 675 00:46:19,000 --> 00:46:21,000 Aeg mõned šokolaadi äkki? 676 00:46:21,000 --> 00:46:23,000 Te töötate läbi. 677 00:46:23,000 --> 00:46:26,000 Ma lähen hoida jõime minu kohvi. 678 00:46:26,000 --> 00:46:31,000 2. nädalal. 679 00:46:31,000 --> 00:46:34,000 Hea kõne hea kõne. 680 00:46:34,000 --> 00:46:38,000 2. nädalal me rääkisime natuke rohkem funktsioone. 681 00:46:38,000 --> 00:46:43,000 >> Esimese paari probleem seab me tegelikult ei kirjuta neid ülesandeid, mida kõik 682 00:46:43,000 --> 00:46:45,000 peale, mis funktsioon? 683 00:46:45,000 --> 00:46:47,000 [Student] Main. >> Ääres, täpselt. 684 00:46:47,000 --> 00:46:51,000 Ja nii oleme näinud erinevaid kostüüme et peamine kannab. 685 00:46:51,000 --> 00:46:54,000 Seal on üks, kus ta võtab ühtegi argumenti, 686 00:46:54,000 --> 00:46:58,000 ja me lihtsalt öelda tühine vahel sulgudes, 687 00:46:58,000 --> 00:47:01,000 ja siis seal on teine, kus me ei taha võtta käsurea argumente, 688 00:47:01,000 --> 00:47:08,000 ja nagu me nägime, et see on kus sa pead int argc ja string argv array 689 00:47:08,000 --> 00:47:13,000 või nüüd, et me oleme tegelikult avatud string olema char *, et see on 690 00:47:13,000 --> 00:47:20,000 me kavatseme alustada kirjalikult seda char * argv ja seejärel sulgudesse. 691 00:47:20,000 --> 00:47:22,000 Aastal Ülesanded nr 3, kutid nägid hunnik funktsioone, 692 00:47:22,000 --> 00:47:27,000 ja sa ellu hunnik funktsioone, joonistada, otsida, rüselus. 693 00:47:27,000 --> 00:47:31,000 Prototüübid olid kõik kirjalikud seal sinu jaoks. 694 00:47:31,000 --> 00:47:33,000 >> Mis ma tahtsin rääkida siin funktsioonidega tõesti kiiresti 695 00:47:33,000 --> 00:47:38,000 on see, et seal on 3 osi neid, kui kirjutada funktsioon. 696 00:47:38,000 --> 00:47:43,000 Pead määrama tagastamise tüüpi funktsioon. 697 00:47:43,000 --> 00:47:46,000 Pead määrama nime funktsioon, ja siis on teil täpsustada 698 00:47:46,000 --> 00:47:51,000 argument nimekirja või parameetrite nimekirja. 699 00:47:51,000 --> 00:47:57,000 Näiteks kui ma kirjutan funktsiooni Kokkuvõttes kamp täisarvud 700 00:47:57,000 --> 00:48:03,000 ja siis tagasi mind summa, mida oleks minu tulu liik 701 00:48:03,000 --> 00:48:06,000 kui ma tahtsin kokku täisarvud ja siis tagasi summa? 702 00:48:06,000 --> 00:48:12,000 Siis funktsiooni nimi. 703 00:48:12,000 --> 00:48:27,000 Kui ma minna ja kirjutada roheline, see osa on naasmise tüüp. 704 00:48:27,000 --> 00:48:34,000 See osa on nimi. 705 00:48:34,000 --> 00:48:40,000 Ja siis sulgudes 706 00:48:40,000 --> 00:48:46,000 on koht, kus ma annan argumendid, 707 00:48:46,000 --> 00:48:56,000 sageli lühendatult args, mida mõnikord nimetatakse parameetrid jaoks parameetreid. 708 00:48:56,000 --> 00:49:00,000 Ja kui sul on üks, sa lihtsalt täpsustada üks. 709 00:49:00,000 --> 00:49:06,000 Kui teil on mitu siis eraldi iga üks koma. 710 00:49:06,000 --> 00:49:13,000 Ja iga argumendi annad 2 asja, mis on-Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Sa pead andma tüüp ja seejärel nimi. 712 00:49:18,000 --> 00:49:21,000 Ja siis nime ja nimi on nimi, et sa lähed kasutada 713 00:49:21,000 --> 00:49:25,000 viidata sellele argumendile jooksul summa funktsioon, 714 00:49:25,000 --> 00:49:27,000 jooksul funktsioon, mis sa praegu kirjalikult. 715 00:49:27,000 --> 00:49:32,000 >> Sa ei pea, sest näiteks kui ma lähen Kokkuvõttes 716 00:49:32,000 --> 00:49:41,000 öelda, array täisarvud-Me teeme int massiiv, 717 00:49:41,000 --> 00:49:46,000 ja ma annan endale mõned looksulg seal- 718 00:49:46,000 --> 00:49:51,000 siis kui ma mööda massiivi funktsiooni SUM 719 00:49:51,000 --> 00:49:55,000 Ma andke seda esimesel kohal argument nimekirja. 720 00:49:55,000 --> 00:49:59,000 Aga massiiv, et ma läbima ei pea olema nimi arr. 721 00:49:59,000 --> 00:50:07,000 Arr saab olema kuidas viitan sellele argumendile kehas funktsioon. 722 00:50:07,000 --> 00:50:10,000 Teine asi, et me peame arvestama, 723 00:50:10,000 --> 00:50:14,000 ja see erineb veidi funktsioone, kuid ma arvan, et see on oluline punkt, 724 00:50:14,000 --> 00:50:20,000 on see, et C kui ma kirjutan funktsiooni niimoodi 725 00:50:20,000 --> 00:50:29,000 kuidas ma tean, kui palju elemente on see massiivi? 726 00:50:29,000 --> 00:50:31,000 See on mõnevõrra konksuga küsimus. 727 00:50:31,000 --> 00:50:35,000 Me rääkisime sellest natuke eelmise nädala jagu. 728 00:50:35,000 --> 00:50:40,000 Kuidas ma tean mitmeid elemente sees massiivi C? 729 00:50:40,000 --> 00:50:44,000 Kas on võimalik? 730 00:50:44,000 --> 00:50:49,000 >> Tuleb välja, et seal on kuidagi teada. 731 00:50:49,000 --> 00:50:52,000 Sa pead läbima seda eraldi. 732 00:50:52,000 --> 00:50:55,000 Seal on trikk, mida saate teha 733 00:50:55,000 --> 00:51:00,000 kui sul sama funktsiooni mis massiiv on tunnistatud, 734 00:51:00,000 --> 00:51:04,000 ja te töötate korstnat massiivi. 735 00:51:04,000 --> 00:51:06,000 Aga see töötab ainult siis kui sul on sama funktsioon. 736 00:51:06,000 --> 00:51:09,000 Kui te kaotate massiivi teise funktsiooni või kui oled deklareeritud massiiv 737 00:51:09,000 --> 00:51:12,000 ja paned selle massiivi kohta hunnik, oled kasutanud malloc 738 00:51:12,000 --> 00:51:15,000  ja sellist kraami, siis kõik ennustused on välja lülitatud. 739 00:51:15,000 --> 00:51:18,000 Siis sa tegelikult läbima ümber 740 00:51:18,000 --> 00:51:21,000 eriline argument või teise parameetri 741 00:51:21,000 --> 00:51:23,000 räägin teile, kuidas suur massiiv on. 742 00:51:23,000 --> 00:51:28,000 Sel juhul ma tahan kasutada koma-Vabandust, see läheb lahti ekraani siin- 743 00:51:28,000 --> 00:51:32,000 ja ma edasi teise argumendi 744 00:51:32,000 --> 00:51:40,000  ja nimetavad seda int len ​​jaoks pikk. 745 00:51:40,000 --> 00:51:44,000 >> Üks asi, mis võiks tulla aasta viktoriin 746 00:51:44,000 --> 00:51:49,000 küsib kirjutada või rakendada eelkõige funktsiooni nimetatakse midagi. 747 00:51:49,000 --> 00:51:54,000 Kui me ei anna teile prototüüp, nii et kogu see asi siin, 748 00:51:54,000 --> 00:51:58,000 kogu see jama nimetatakse funktsiooni deklaratsiooni või funktsiooni prototüüp, 749 00:51:58,000 --> 00:52:01,000 see on üks esimesi asju, mida sa tahad, et küünte alla, kui see ei ole antud 750 00:52:01,000 --> 00:52:03,000 teile kohe edasi tegema. 751 00:52:03,000 --> 00:52:06,000 Teine trikk ma olen õppinud on see, et 752 00:52:06,000 --> 00:52:11,000 öelda, et me teeme teile prototüüp funktsioon, ja me ütleme: "Hei, sul seda kirjutada." 753 00:52:11,000 --> 00:52:16,000 Toas looksulg et olete viktoriin 754 00:52:16,000 --> 00:52:20,000 kui te märkate, et on tulu liik ja märkad, et tagastab tüüp 755 00:52:20,000 --> 00:52:25,000 on midagi muud kui tühine, mis tähendab, et funktsioon ei tagasta midagi, 756 00:52:25,000 --> 00:52:28,000 siis üks asi, mida kindlasti tahan teha, on kirjutada 757 00:52:28,000 --> 00:52:33,000 mingi tulu avaldust päris lõpus funktsiooni. 758 00:52:33,000 --> 00:52:40,000 Tagasi, ja sel juhul me paneme tühja sest me tahame täita tühjaks. 759 00:52:40,000 --> 00:52:44,000 Aga see saab teid mõtlema õige tee, kuidas ma kavatsen sellele probleemile läheneda? 760 00:52:44,000 --> 00:52:49,000 Ja see tuletab sulle meelde, sa lähed on naasta väärtus 761 00:52:49,000 --> 00:52:51,000 helistaja funktsiooni. 762 00:52:51,000 --> 00:52:54,000 >> Jah. >> [Student] Kas stiili kohaldata, kui me kirjalikult koodi viktoriin? 763 00:52:54,000 --> 00:52:58,000 Nagu taandus ja sellist kraami? >> [Student] Jah. 764 00:52:58,000 --> 00:53:00,000 Ei, mitte nii palju. 765 00:53:00,000 --> 00:53:09,000 Ma arvan, et palju-see on midagi, me selgitada kohta viktoriini päeval, 766 00:53:09,000 --> 00:53:15,000 kuid tavaliselt muretsema # sisaldab ja sellist kraami, see on selline väljaspool. 767 00:53:15,000 --> 00:53:17,000 [Student] Kas teil on vaja kommenteerida oma käsitsi kirjutatud kood? 768 00:53:17,000 --> 00:53:19,000 Kas teil on vaja kommenteerida oma käsitsi kirjutatud kood? 769 00:53:19,000 --> 00:53:24,000 Kommenteerides on alati hea, kui sa oled mures osalisi boonuspunkte 770 00:53:24,000 --> 00:53:29,000 või soovite suhelda oma kavatsusest teehöövel. 771 00:53:29,000 --> 00:53:33,000 Aga ma jällegi selgitab kohta viktoriini ise ja viktoriin päev, 772 00:53:33,000 --> 00:53:39,000 aga ma ei usu, et teil on vaja kirjutada kommentaare, ei. 773 00:53:39,000 --> 00:53:42,000 Tavaliselt mitte, aga see on kindlasti selline asi, kus 774 00:53:42,000 --> 00:53:45,000 saate suhelda oma kavatsuste, nagu "Hei, see on koht, kus ma lähen temaga." 775 00:53:45,000 --> 00:53:49,000 Ja mõnikord, mis aitavad osalise krediiti. 776 00:53:49,000 --> 00:53:51,000 Lahe. 777 00:53:51,000 --> 00:53:53,000 >> Basiilik. 778 00:53:53,000 --> 00:53:56,000 [Basiilik] Mis vahe on deklareerides, ütleme, int lang 779 00:53:56,000 --> 00:54:03,000 argumentide või parameetreid võrreldes kuulutab muutuja funktsioon? 780 00:54:03,000 --> 00:54:05,000 Vau, kohv läks kõri. 781 00:54:05,000 --> 00:54:07,000 [Basiilik] Nagu mis asju me tahame panna argumendid. 782 00:54:07,000 --> 00:54:09,000 Jah, see on hea küsimus. 783 00:54:09,000 --> 00:54:11,000 Kuidas valida milliseid asju soovite panna argumendid 784 00:54:11,000 --> 00:54:17,000 versus milliseid asju, mida peaks tegema sees funktsioon? 785 00:54:17,000 --> 00:54:24,000 Sel juhul me lisada mõlemad argumentidena 786 00:54:24,000 --> 00:54:29,000 sest nad on midagi, mida igaüks, kes kavatsevad neid tooteid kasutada funktsiooni SUM 787 00:54:29,000 --> 00:54:32,000 vaja täpsustada need asjad. 788 00:54:32,000 --> 00:54:35,000 >> Funktsiooni SUM, nagu me rääkisime, on kuidagi võimalik teada 789 00:54:35,000 --> 00:54:40,000 kui suur massiiv on see läheb oma helistaja või kes iganes kasutab funktsiooni SUM. 790 00:54:40,000 --> 00:54:44,000 See on kuidagi võimalik teada, kui suur see massiiv on. 791 00:54:44,000 --> 00:54:48,000 Põhjus võtame selle pikkus siin argumendina 792 00:54:48,000 --> 00:54:51,000 sest see on midagi, mida me põhimõtteliselt ütleb helistaja funktsioon, 793 00:54:51,000 --> 00:54:55,000 kes kavatsevad neid tooteid kasutada funktsiooni SUM "Hei, mitte ainult sa pead andma meile massiivi 794 00:54:55,000 --> 00:54:59,000 kohta ints, siis on ka meile öelda, kui suur massiiv, et olete andnud meile on. " 795 00:54:59,000 --> 00:55:03,000 [Basiilik] Need mõlemad on käsurea argumente? 796 00:55:03,000 --> 00:55:06,000 Ei, need on tegelikud argumendid, et sa ei liigu funktsioon. 797 00:55:06,000 --> 00:55:10,000 >> Lubage mul teha uus leht siin. 798 00:55:10,000 --> 00:55:13,000 [Basiilik] Nagu nimi ei liigu- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Kui mul on int main (void), 800 00:55:24,000 --> 00:55:27,000 ja ma lähen panna minu return 0 siin all allosas, 801 00:55:27,000 --> 00:55:31,000 ja öelda, et ma tahan helistada summa funktsiooni. 802 00:55:31,000 --> 00:55:42,000 Ma tahan öelda, int x = SUM (); 803 00:55:42,000 --> 00:55:46,000 Et kasutada funktsiooni SUM mul läbida nii massiiv, et ma tahan Kokkuvõttes 804 00:55:46,000 --> 00:55:51,000 ja pikkus array, nii et see on koht, kus 805 00:55:51,000 --> 00:55:54,000 eeldades, mul oli valikut ints, 806 00:55:54,000 --> 00:56:12,000 Ütleme, et oli int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 selline kasutamine, et häkkinud süntaks seal, 808 00:56:16,000 --> 00:56:21,000 siis mida ma teeksin on summa ma tahaks läbida 809 00:56:21,000 --> 00:56:27,000 nii numbaz ja number 3 810 00:56:27,000 --> 00:56:30,000 öelda summa funktsiooni "Okei, siin on massiiv Ma tahan, et sa summeerida." 811 00:56:30,000 --> 00:56:34,000 "Siin on selle suurus." 812 00:56:34,000 --> 00:56:39,000 Kas see on loogiline? Kas see vastab su küsimusele? 813 00:56:39,000 --> 00:56:42,000 >> Paljuski see paralleel, mida me teeme koos peamiste 814 00:56:42,000 --> 00:56:44,000 kui meil on käsurea argumente. 815 00:56:44,000 --> 00:56:47,000 Programmi nagu Caesar salakiri, näiteks, et vaja 816 00:56:47,000 --> 00:56:53,000 käsurea argumente ei saa midagi teha. 817 00:56:53,000 --> 00:56:57,000 See ei tea, kuidas krüptida kui sa ei ütle seda mida võti kasutada 818 00:56:57,000 --> 00:57:03,000 või kui sa ei ütle seda mida string sa tahtsid varjata. 819 00:57:03,000 --> 00:57:08,000 Küsimine sisendit, see on koht, kus meil on 2 erinevat mehhanismid 820 00:57:08,000 --> 00:57:14,000 võtmise sisend kasutaja, et leidsite teavet kasutaja. 821 00:57:14,000 --> 00:57:19,000 Sest Ülesanded nr 1 nägime seda GetInt, getString, GetFloat viis 822 00:57:19,000 --> 00:57:26,000 ergutada sisend, ja seda nimetatakse kasutades standardsete sisend oja. 823 00:57:26,000 --> 00:57:28,000 See on veidi teistsugune. 824 00:57:28,000 --> 00:57:31,000 See on midagi, mida saate teha korraga mitte 825 00:57:31,000 --> 00:57:35,000 kui sa tugineda programm, kui hakkate programm töötab. 826 00:57:35,000 --> 00:57:41,000 Käsurea argumente kõik on täpsustatud, kui hakkate programmi algust. 827 00:57:41,000 --> 00:57:47,000 Oleme olnud segades kaks neist. 828 00:57:47,000 --> 00:57:52,000 Kui me kasutame argumente funktsioon, see on palju nagu käsurea argumente peamine. 829 00:57:52,000 --> 00:57:56,000 See on, kui sa tugineda funktsiooni kasutamiseks tuleb öelda seda 830 00:57:56,000 --> 00:58:05,000 mida täpselt ta vajab oma ülesannete täitmiseks. 831 00:58:05,000 --> 00:58:08,000 Teine hea asi, mida vaadata ja ma lasen te vaatate seda oma vabast ajast, 832 00:58:08,000 --> 00:58:11,000 ja see oli kaetud viktoriini-oli see mõiste ulatus 833 00:58:11,000 --> 00:58:15,000 ja kohalike muutujate versus globaalsed muutujad. 834 00:58:15,000 --> 00:58:18,000 Kas pöörama tähelepanu seda. 835 00:58:18,000 --> 00:58:23,000 >> Nüüd, kui meil käid sellele muud kraami, 836 00:58:23,000 --> 00:58:27,000 3. nädalal hakkasime rääkima otsing ja sorteerimine. 837 00:58:27,000 --> 00:58:32,000 Otsimine ja sorteerimine, vähemalt CS50, 838 00:58:32,000 --> 00:58:39,000 on väga palju sissejuhatuseks mõned rohkem teoreetiline osa arvutiteadus. 839 00:58:39,000 --> 00:58:42,000 Probleemi otsimine, probleemi sortimine 840 00:58:42,000 --> 00:58:46,000 on suured, kanooniline probleeme. 841 00:58:46,000 --> 00:58:52,000 Kuidas leida kindlat numbrit massiivi miljardeid täisarvud? 842 00:58:52,000 --> 00:58:55,000 Kuidas leida konkreetse nime sees telefoniraamat 843 00:58:55,000 --> 00:58:59,000 mis on salvestatud teie sülearvuti? 844 00:58:59,000 --> 00:59:04,000 Ja nii me tutvustada seda mõistet asümptootilisest perspektiivis korda 845 00:59:04,000 --> 00:59:11,000 tegelikult arvuliselt kui kaua, kui raske nende probleem on, 846 00:59:11,000 --> 00:59:14,000 kui kaua nad lahendada. 847 00:59:14,000 --> 00:59:20,000 Aastal, ma usun, 2011 aasta viktoriini seal on probleem, et ma arvan, väärib 848 00:59:20,000 --> 00:59:27,000 hõlmavad väga kiiresti, mis on see, probleem 12. 849 00:59:27,000 --> 00:59:32,000 O ei, see on Omega. 850 00:59:32,000 --> 00:59:41,000 >> Siin me räägime võimalikult kiire töö aeg 851 00:59:41,000 --> 00:59:46,000 Konkreetse algoritmi ja siis aeglaseim võimalik töötamise ajal. 852 00:59:46,000 --> 00:59:52,000 See Omega ja O on tõesti ainult otseteed. 853 00:59:52,000 --> 00:59:55,000 Nad notational otseteed öeldes 854 00:59:55,000 --> 00:59:59,000 kui kiiresti parimal võimalikul juhul ka meie algoritm perspektiivis 855 00:59:59,000 --> 01:00:06,000 ja kuidas aeglane halvim võimalik juhtum meie algoritm joosta? 856 01:00:06,000 --> 01:00:10,000 Teeme paar neist, ja need olid ka kaetud 857 01:00:10,000 --> 01:00:13,000 Lühi-asümptootilisest märge, mis ma väga soovitada. 858 01:00:13,000 --> 01:00:17,000 Jackson tegi tõesti head tööd. 859 01:00:17,000 --> 01:00:23,000 Mis Kahendotsingupuu, me räägime Kahendotsingupuu nagu oleks algoritm, 860 01:00:23,000 --> 01:00:28,000 ja me tavaliselt räägime sellest poolest suur O. 861 01:00:28,000 --> 01:00:30,000 Mis on suur O? 862 01:00:30,000 --> 01:00:34,000 Mis on aeglaseim võimalik läbijooksuaeg kahekomponentsete otsing? 863 01:00:34,000 --> 01:00:36,000 [Student] N ²? 864 01:00:36,000 --> 01:00:41,000 Sule, ma arvan sarnane. 865 01:00:41,000 --> 01:00:43,000 See on palju kiirem. 866 01:00:43,000 --> 01:00:45,000 [Student] Binary? >> Jah, binaarne otsing. 867 01:00:45,000 --> 01:00:47,000 [Student] See on log n. 868 01:00:47,000 --> 01:00:49,000 Logi n, nii et mida teeb log n tähendab? 869 01:00:49,000 --> 01:00:51,000 See poolitatud see iga iteratsiooni. 870 01:00:51,000 --> 01:00:56,000 Täpselt, seda aeglasem võimalik juhul, 871 01:00:56,000 --> 01:01:00,000 öelda, kui teil on sorteeritud massiiv 872 01:01:00,000 --> 01:01:08,000 miljonist täisarvud ja number otsite 873 01:01:08,000 --> 01:01:14,000 kas kõige esimene element massiivi või väga viimase elemendi massiivist. 874 01:01:14,000 --> 01:01:18,000 Pea meeles, binaarne otsing algoritm töötab vaadates keset element, 875 01:01:18,000 --> 01:01:21,000 nähes, kui see on mäng, mis te otsite. 876 01:01:21,000 --> 01:01:23,000 Kui on, siis tore, et sa selle leidsid. 877 01:01:23,000 --> 01:01:27,000 >> Parimal võimalikul juhul, kui kiiresti ei Kahendotsingupuu perspektiivis? 878 01:01:27,000 --> 01:01:29,000 [Õpilased] 1. 879 01:01:29,000 --> 01:01:32,000 1, see on pidev ajal suur O 1. Jah. 880 01:01:32,000 --> 01:01:36,000 [Student] Mul on küsimus. Kui sa ütled logi n, sa mõtled suhtes baas 2, eks? 881 01:01:36,000 --> 01:01:40,000 Jah, nii see on teine ​​asi. 882 01:01:40,000 --> 01:01:44,000 Me ütleme log n, ja ma arvan, et kui ma olin keskkoolis 883 01:01:44,000 --> 01:01:48,000 Olen alati eeldada, et samamoodi oli base 10. 884 01:01:48,000 --> 01:01:57,000 Jah, nii jah, logaritm alusel 2 tavaliselt on see, mida me kasutame. 885 01:01:57,000 --> 01:02:02,000 Jällegi läheb tagasi Kahendotsingupuu, kui otsite kas 886 01:02:02,000 --> 01:02:05,000 element päris lõpus või osa alguses, 887 01:02:05,000 --> 01:02:08,000 kuna hakkate keskel ja siis viskama 888 01:02:08,000 --> 01:02:13,000 kumb pool ei vasta, et te otsite, 889 01:02:13,000 --> 01:02:15,000 ja sa lähed järgmise poole ja järgmise poole ja järgmise poole. 890 01:02:15,000 --> 01:02:19,000 Kui Otsin suurim element miljonit täisarv massiivis 891 01:02:19,000 --> 01:02:25,000 Ma lähen poole võrra see kõige logi 1000000 korda 892 01:02:25,000 --> 01:02:28,000 enne kui ma lõpuks proovida, et element Otsin 893 01:02:28,000 --> 01:02:33,000 on suurim ja kõige kõrgema indeksiga massiivi 894 01:02:33,000 --> 01:02:38,000 ja mis viib logi n logige 1 miljonit korda. 895 01:02:38,000 --> 01:02:40,000 >> Mull sorteerida. 896 01:02:40,000 --> 01:02:43,000 Kas te kutid mäleta mull sorteerida algoritm? 897 01:02:43,000 --> 01:02:47,000 Kevin, kas sa annad mulle kiire sulgege see, mis juhtus mull sorteerida algoritm? 898 01:02:47,000 --> 01:02:50,000 [Kevin] Põhimõtteliselt see läheb läbi kõik nimekirjas. 899 01:02:50,000 --> 01:02:52,000 Vaadeldakse kahte esimest. 900 01:02:52,000 --> 01:02:55,000 Kui esimene on suurem kui teine ​​see vahetab need. 901 01:02:55,000 --> 01:02:58,000 Seejärel võrreldakse teise ja kolmanda, sama asi, vahetuslepingud, 902 01:02:58,000 --> 01:03:00,000 kolmas ja neljas, kogu tee alla. 903 01:03:00,000 --> 01:03:03,000 Suuremad numbrid jälgib lõpuni. 904 01:03:03,000 --> 01:03:07,000 Ja pärast aga paljud liinid sa oled teinud. 905 01:03:07,000 --> 01:03:11,000 Täpselt, nii et mida Kevin ütles, et me vaatan suuremad numbrid 906 01:03:11,000 --> 01:03:15,000 mull kuni lõpuks massiiv. 907 01:03:15,000 --> 01:03:19,000 Näiteks, kas sa lubad kõndides meid läbi Näiteks, kui see on meie massiivi? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Sa võtan 2 ja 3. 909 01:03:21,000 --> 01:03:23,000 3 on suurem kui 2, siis vahetada neid. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Just, nii et me vahetada neid, ja nii saame 2, 3, 6, 4 ja 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Siis saab võrrelda 3 ja 6. 912 01:03:31,000 --> 01:03:33,000 3 on väiksem kui 6, siis jäta neid, 913 01:03:33,000 --> 01:03:37,000 ja 6 ja 4, siis tahaks vahetada neid, sest 4 on väiksem kui 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Just, nii et ma saan 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] ja 9 on suurem kui 6, siis jätad ta. 916 01:03:46,000 --> 01:03:48,000 Ja sa tahaks tagasi minna läbi see uuesti. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Kas ma teinud sel hetkel? >> [Kevin] nr 918 01:03:50,000 --> 01:03:52,000 Ja miks ma ei teinud sel hetkel? 919 01:03:52,000 --> 01:03:54,000 Sest tundub, et minu massiiv on sorteeritud. Ma vaatan seda. 920 01:03:54,000 --> 01:03:57,000 [Kevin] selle uuesti läbi ja veenduge, et seal ei ole enam vahetuslepingud 921 01:03:57,000 --> 01:04:00,000 Enne, kui saate täielikult peatada. 922 01:04:00,000 --> 01:04:04,000 Täpselt, nii et sa pead edasi minema läbi ja veenduge, et puuduvad vahetuslepingud 923 01:04:04,000 --> 01:04:06,000 et saad teha selles punktis. 924 01:04:06,000 --> 01:04:08,000 See oli tõesti lihtsalt õnnelik, nagu sa ütlesid, et oleme jõudnud 925 01:04:08,000 --> 01:04:12,000 ainult pea tee 1 läbida ja me sorteerida. 926 01:04:12,000 --> 01:04:16,000 Aga et seda teha üldises juhul me tegelikult ei pea seda tegema ikka ja jälle. 927 01:04:16,000 --> 01:04:20,000 Ja tegelikult, see oli näide parimal võimalikul juhul 928 01:04:20,000 --> 01:04:24,000 nagu nägime probleem. 929 01:04:24,000 --> 01:04:28,000 Me nägime, et parim võimalik juhtum n. 930 01:04:28,000 --> 01:04:32,000 Käisime läbi massiivi 1 kord. 931 01:04:32,000 --> 01:04:35,000 Mis on halvim võimalik juhtum selle algoritmi? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 Ja mida see välja näeb? Mida massiivi nägema, et võtaks n ² ajal? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [kuuldamatu] sorteerida. 935 01:04:43,000 --> 01:04:51,000 Täpselt nii, kui mul oleks massiivi 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 1. 9 Kas mull kõik teed üles. 937 01:04:54,000 --> 01:04:59,000 Pärast 1 iteratsiooni me tahaks olla 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Siis 7 Kas mulksuma, 6, 5, 2, 7, 9, ja nii edasi ja nii edasi. 939 01:05:07,000 --> 01:05:13,000 >> Meil oleks minna läbi kogu massiivi n korda, 940 01:05:13,000 --> 01:05:16,000 ja tegelikult võite pisut täpsem kui see 941 01:05:16,000 --> 01:05:23,000 sest kui me oleme liikunud 9 kogu tee üles võetud viimase võimaliku positsiooni 942 01:05:23,000 --> 01:05:26,000 me teame, et me ei pea kunagi võrreldakse seda osa uuesti. 943 01:05:26,000 --> 01:05:29,000 Kui hakkame vahustamine 7 kuni 944 01:05:29,000 --> 01:05:35,000 me teame, et me ei saa peatada, kui 7 on õigus enne 9 945 01:05:35,000 --> 01:05:37,000 kuna me oleme juba võrreldes 9 ta. 946 01:05:37,000 --> 01:05:46,000 Kui sa seda teha nutikas viis see ei ole tõesti, ma arvan, et palju aega. 947 01:05:46,000 --> 01:05:49,000 Sa ei lähe võrrelda kõiki võimalikke [kuuldamatu] kombinatsioonid 948 01:05:49,000 --> 01:05:55,000 iga kord, kui minna läbi iga iteratsiooni. 949 01:05:55,000 --> 01:05:59,000 Aga ikkagi, kui me räägime selle ülemise me ütleme, et 950 01:05:59,000 --> 01:06:04,000 vaatate n ² võrdlusi kogu aeg. 951 01:06:04,000 --> 01:06:12,000 >> Lähme tagasi, ja kuna me oleme hakanud saada veidi lühike aeg 952 01:06:12,000 --> 01:06:15,000 Ütleksin siis tuleb kindlasti minna läbi ülejäänud seda tabelit, 953 01:06:15,000 --> 01:06:17,000 täitke see kõik välja. 954 01:06:17,000 --> 01:06:20,000 Mõtle näiteid. Mõtle konkreetseid näiteid. 955 01:06:20,000 --> 01:06:22,000 See on tõesti mugav ja kasulik teha. 956 01:06:22,000 --> 01:06:25,000 Joonista välja. 957 01:06:25,000 --> 01:06:28,000 See on omamoodi tabel, et kui sa lähed läbi infotehnoloogia 958 01:06:28,000 --> 01:06:32,000 sa peaksid tõesti hakata tean neid peast. 959 01:06:32,000 --> 01:06:34,000 Need on tüüpi küsimustele saad intervjuudes. 960 01:06:34,000 --> 01:06:36,000 Need on asjadele, mida on hea teada, 961 01:06:36,000 --> 01:06:41,000 ja mõelda nende serv juhtudel tõesti figuring kuidas mõelda 962 01:06:41,000 --> 01:06:45,000 teades, et mull sorteerida halvim võimalik massiivi 963 01:06:45,000 --> 01:06:52,000 sorteerida koos, mis on üks, mis on vastupidises järjekorras. 964 01:06:52,000 --> 01:06:58,000 >> Näiturid. Räägime natuke vihjeid. 965 01:06:58,000 --> 01:07:03,000 Viimase paari minuti meil siin 966 01:07:03,000 --> 01:07:11,000 Tean, et see on midagi koos faili I / O, mis on üsna uus. 967 01:07:11,000 --> 01:07:19,000 Kui me räägime viiteid põhjus, miks me tahame rääkida viiteid 968 01:07:19,000 --> 01:07:24,000 sest üks, kui me töötame C 969 01:07:24,000 --> 01:07:33,000 me oleme tõesti on üsna madal võrreldes moodsaim programmeerimiskeeli. 970 01:07:33,000 --> 01:07:38,000 Oleme tegelikult võimalik manipuleerida muutujad mälus, 971 01:07:38,000 --> 01:07:43,000 aru saada, kus nad tegelikult asuvad meie mälu. 972 01:07:43,000 --> 01:07:46,000 Kui olete läinud tegema operatsioonisüsteemi klassid näete 973 01:07:46,000 --> 01:07:48,000 et see on jällegi mingi abstraktsioon. 974 01:07:48,000 --> 01:07:50,000 See pole tegelikult nii. 975 01:07:50,000 --> 01:07:52,000 Meil virtuaalne mälu, mis on peidus nende andmete meilt. 976 01:07:52,000 --> 01:07:58,000 >> Aga nüüd võite eeldada, et kui sul on programm, 977 01:07:58,000 --> 01:08:02,000 Näiteks, kui sa käivitada oma Caesari šiffer programmi- 978 01:08:02,000 --> 01:08:06,000 Ma saan tagasi oma iPad tõesti kiiresti- 979 01:08:06,000 --> 01:08:12,000 et alguses oma programmi, kui sul on, ütleme, 980 01:08:12,000 --> 01:08:15,000 4 GB RAM sülearvuti, 981 01:08:15,000 --> 01:08:21,000 teil tühistada selle tüki, ja me nimetame seda RAM. 982 01:08:21,000 --> 01:08:25,000 Ja see algab kohas me kavatseme kutsuda 0, 983 01:08:25,000 --> 01:08:30,000 ja see lõpeb koht, et me kutsume 4 gigabaiti. 984 01:08:30,000 --> 01:08:37,000 Ma tõesti ei saa kirjutada. Mees, see on häkkinud. 985 01:08:37,000 --> 01:08:40,000 Kui teie programm täidab 986 01:08:40,000 --> 01:08:44,000 operatsioonisüsteemi carves kuni RAM, 987 01:08:44,000 --> 01:08:51,000 ja see määrab erinevate segmentide erinevate osade oma programmi, et elame 988 01:08:51,000 --> 01:08:58,000 Alla siin selles valdkonnas on selline eikellegimaal. 989 01:08:58,000 --> 01:09:02,000 Kui te lähete natuke kaugemal siin 990 01:09:02,000 --> 01:09:05,000 sul tegelikult koht, kus 991 01:09:05,000 --> 01:09:09,000 koodi oma programmi ellu. 992 01:09:09,000 --> 01:09:13,000 See tegelik kahendkoodi, et käivitatav fail tegelikult laaditakse mällu 993 01:09:13,000 --> 01:09:17,000 kui te käivitate programmi, ja ta elab kood segment. 994 01:09:17,000 --> 01:09:22,000 Ja kui teie programm täidab protsessor vaatab seda koodisegmendi 995 01:09:22,000 --> 01:09:24,000 selgitada, milline on järgmine juhis? 996 01:09:24,000 --> 01:09:27,000 Mis on järgmine rida koodi ma pean täitma? 997 01:09:27,000 --> 01:09:31,000 >> Seal on ka Andmesideteenustest, ja see on koht, kus need stringi konstandid 998 01:09:31,000 --> 01:09:34,000 saada talletatud et olete kasutanud. 999 01:09:34,000 --> 01:09:42,000 Ja siis kaugemal seal selle koha nimi on hunnik. 1000 01:09:42,000 --> 01:09:46,000 Me juurdepääsu mälu seal kasutades malloc, 1001 01:09:46,000 --> 01:09:49,000 ja siis suunas väga üles oma programmi 1002 01:09:49,000 --> 01:09:52,000 seal korstna 1003 01:09:52,000 --> 01:09:57,000 ja see on kui me oleme mänginud kõige algusest. 1004 01:09:57,000 --> 01:09:59,000 See ei ole mõõtkava või midagi. 1005 01:09:59,000 --> 01:10:03,000 Palju see on väga masin sõltuv, 1006 01:10:03,000 --> 01:10:10,000 operatsioonisüsteemi sõltuv, kuid see on suhteliselt kuidas asjad chunked üles. 1007 01:10:10,000 --> 01:10:17,000 Kui te käivitate programmi ja te deklareerite muutuja nimega x- 1008 01:10:17,000 --> 01:10:27,000 Ma lähen juhtida teise kasti allapoole, ja see saab olema RAM samuti. 1009 01:10:27,000 --> 01:10:29,000 Ja ma lähen vaatan. 1010 01:10:29,000 --> 01:10:34,000 Me teha sakilised jooned, mis näitab see on vaid väike osa RAM 1011 01:10:34,000 --> 01:10:38,000 ja mitte kõik seda teeme järeldusi ülaosas. 1012 01:10:38,000 --> 01:10:43,000 >> Kui Kinnitan täisarv muutuja nimega x, 1013 01:10:43,000 --> 01:10:49,000 siis mida ma tegelikult saada on kaardistamine 1014 01:10:49,000 --> 01:10:54,000 mis on salvestatud sümbol tabel minu programm 1015 01:10:54,000 --> 01:11:00,000 mis ühendab nimi x sellesse piirkonda mälu, et ma olen tõmmatud 1016 01:11:00,000 --> 01:11:03,000 siin vahel vertikaalne baarid. 1017 01:11:03,000 --> 01:11:08,000 Kui mul on rida koodi oma programmi, mis ütleb, x = 7 1018 01:11:08,000 --> 01:11:15,000 protsessor teab "Oh, okei, ma tean, et x elus selles kohas mällu." 1019 01:11:15,000 --> 01:11:25,000 "Ma lähen edasi minna ja kirjutada 7 seal." 1020 01:11:25,000 --> 01:11:28,000 Kuidas see tea asukohta see on mälu? 1021 01:11:28,000 --> 01:11:30,000 Noh, see on kõik tehtud kompileerimise ajal. 1022 01:11:30,000 --> 01:11:34,000 Kompilaator hoolitseb eraldades kus iga muutujad lähevad 1023 01:11:34,000 --> 01:11:40,000 ja luua spetsiaalne kaardistamise või pigem punktide ühendamine 1024 01:11:40,000 --> 01:11:43,000 vahel sümbol ja kus see toimub, muutuja nimi 1025 01:11:43,000 --> 01:11:46,000 ja kus see läheb elama mälu. 1026 01:11:46,000 --> 01:11:50,000 Aga tuleb välja, et me saame tegelikult kasutada seda oma programmis samuti. 1027 01:11:50,000 --> 01:11:55,000 See muutub oluliseks siis, kui hakkame rääkima mõned andmestruktuure 1028 01:11:55,000 --> 01:11:58,000 mis on mõiste, mis me kavatseme tutvustada hiljem. 1029 01:11:58,000 --> 01:12:09,000 >> Aga nüüd, mida sa ei tea on see, et ma saan luua kursor sellesse kohta, x. 1030 01:12:09,000 --> 01:12:12,000 Näiteks võin luua kursori muutuja. 1031 01:12:12,000 --> 01:12:16,000 Kui me loome pointer muutuja me kasutame täht märke. 1032 01:12:16,000 --> 01:12:21,000 Sel juhul see ütleb, et ma lähen luua viit int. 1033 01:12:21,000 --> 01:12:24,000 See tüüp lihtsalt nagu iga teine. 1034 01:12:24,000 --> 01:12:27,000 Anname see muutuja nagu y, 1035 01:12:27,000 --> 01:12:32,000 ja siis seadsime see võrdne aadress, et aadress. 1036 01:12:32,000 --> 01:12:38,000 Sel juhul saame y osutada x 1037 01:12:38,000 --> 01:12:43,000 võttes aadress x, mis me teeme selle märgi, 1038 01:12:43,000 --> 01:12:55,000 ja siis seadsime y juhtida sellele. 1039 01:12:55,000 --> 01:12:59,000 Mida see sisuliselt ei ole, kui me vaatame meie RAM 1040 01:12:59,000 --> 01:13:02,000 see loob eraldi muutujana. 1041 01:13:02,000 --> 01:13:04,000 See saab nimetada seda y, 1042 01:13:04,000 --> 01:13:06,000 ja kui see rida koodi täidab 1043 01:13:06,000 --> 01:13:13,000 see on tegelikult kavatse luua väike osuti mida me tavaliselt teha kui nool, 1044 01:13:13,000 --> 01:13:15,000 ja see seab y osutada x. 1045 01:13:15,000 --> 01:13:17,000 Jah. 1046 01:13:17,000 --> 01:13:19,000 [Student] Kui x on juba pointer, sa lihtsalt ei 1047 01:13:19,000 --> 01:13:22,000 int * y = x asemel ampersand? 1048 01:13:22,000 --> 01:13:24,000 Jah. 1049 01:13:24,000 --> 01:13:27,000 Kui x on juba pointer, siis saate komplekt 2 suunanäitajaks üksteisega võrdsed, 1050 01:13:27,000 --> 01:13:30,000 sellisel juhul y ei osuta x, 1051 01:13:30,000 --> 01:13:34,000 kuid see viitaks iganes x osutab. 1052 01:13:34,000 --> 01:13:37,000 Kahjuks on aeg otsas. 1053 01:13:37,000 --> 01:13:44,000 >> Mida ma ütleksin siinkohal, saame rääkida sellest foorumis, 1054 01:13:44,000 --> 01:13:49,000 kuid ma ütleksin tööle läbi selle probleemi, # 14. 1055 01:13:49,000 --> 01:13:53,000 Näete seal juba natuke täita teile siin. 1056 01:13:53,000 --> 01:13:57,000 Te näete, et kui me kuulutame 2 suunanäitajaks, int * x ja * y, 1057 01:13:57,000 --> 01:14:01,000 ja pange tähele, et juhtides * kõrval muutuja oli midagi, mis tehti möödunud aastal. 1058 01:14:01,000 --> 01:14:05,000 Selgub, et see on sarnane sellega, mida me teeme sel aastal. 1059 01:14:05,000 --> 01:14:11,000 See ei ole tähtis, kus sa kirjutad * kui sa kuulutatakse kursor. 1060 01:14:11,000 --> 01:14:17,000 Aga me oleme kirjutanud * kõrval tüüp 1061 01:14:17,000 --> 01:14:24,000 sest mis teeb väga selgeks, et sa kuulutatakse pointer muutuja. 1062 01:14:24,000 --> 01:14:27,000 Te näete, et deklareerides 2 näpunäiteid annab meile 2 kasti. 1063 01:14:27,000 --> 01:14:31,000 Siin, kui me seame x võrdub malloc 1064 01:14:31,000 --> 01:14:34,000 mida see ütleb on heita mälu hunnik. 1065 01:14:34,000 --> 01:14:41,000 See väike kast siin, see ring, asub hunnik. 1066 01:14:41,000 --> 01:14:43,000 X osutab ta. 1067 01:14:43,000 --> 01:14:46,000 Pange tähele, et y ei ole veel osutades midagi. 1068 01:14:46,000 --> 01:14:50,000 Et saada mälu-talletamiseks nr 42 arvesse x 1069 01:14:50,000 --> 01:14:55,000 meil oleks kasutada mis märge? 1070 01:14:55,000 --> 01:14:59,000 [Student] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Täpselt, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 See tähendab Järgige noolt ja viska 42 seal. 1073 01:15:06,000 --> 01:15:09,000 Siin kus me seame y ja x on meil y osutades x. 1074 01:15:09,000 --> 01:15:13,000 Jällegi, see on nagu see, mida Kevin ütles kus seadsime y võrdub x. 1075 01:15:13,000 --> 01:15:15,000 Y ei osutades x. 1076 01:15:15,000 --> 01:15:19,000 Pigem see osutavad sellele, mida x osutades samuti. 1077 01:15:19,000 --> 01:15:24,000 >> Ja siis lõpuks see viimane kast on 2 võimalikku asju, mida me võiksime teha. 1078 01:15:24,000 --> 01:15:28,000 Üks on võime öelda * x = 13. 1079 01:15:28,000 --> 01:15:33,000 Teine asi on see võime öelda, Alex, sa tead, mida me võiksime teha siin? 1080 01:15:33,000 --> 01:15:37,000 Võiks öelda * x = 13 või- 1081 01:15:37,000 --> 01:15:41,000 [Student] Võiks öelda, int iganes. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Kui nii nimetatakse int muutuja võiksime seda teha. 1083 01:15:45,000 --> 01:15:49,000 Võiksime ka öelda * y = 13, sest nad on nii osutades samas kohas, 1084 01:15:49,000 --> 01:15:51,000 nii et me võiksime kasutada kas muutuva sinna jõuda. 1085 01:15:51,000 --> 01:15:56,000 Jah. >> [Student] Mida see välja näeb, kui me lihtsalt öelda, int x 13? 1086 01:15:56,000 --> 01:16:00,000 See oleks kuulutatakse uus muutuja nimega x, mis ei tööta. 1087 01:16:00,000 --> 01:16:04,000 Meil oleks kokkupõrge sest me kuulutasime x olevat pointer siin. 1088 01:16:04,000 --> 01:16:10,000 [Student] Kui me lihtsalt pidin selle avalduse ise siis mis see välja näeb nii ringi? 1089 01:16:10,000 --> 01:16:14,000 Kui meil oleks x = 13 siis oleks meil kast, ja selle asemel, nool 1090 01:16:14,000 --> 01:16:16,000 tulevad karbist me tahaks joonistada kui lihtsalt 13. 1091 01:16:16,000 --> 01:16:19,000 [Student] karbis. Okei. 1092 01:16:19,000 --> 01:16:24,000 >> Täname vaadates, ja hea õnne viktoriin 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]