[MUZIKO Ludante] DAVID Malan: Bone. Jen CS50, kaj ĉi tiu estas la fino de semajno 2. Mi tiom bedaŭras ke mi ne povis esti tie kun vi ĉiuj hodiaŭ, sed vi estas en tre bonaj manoj. Permesu ke mi konigu CS50 propra Rob Bowden. ROB Bowden: Kaj kompreneble, tiam ni devas moki la fakto ke li sendis al ni vertikala video kaj pruvas. [VIDEO reprodukto] [MUZIKO Ludante] [Footsteps] -Ĉi Video ne devas aspekti ĉi tiel. Ĝi povus esti malhelpita. Say no to vertikala filmetoj. -pokemon Videos okazi kiam vin tenu vian ĉambron misfunkcias. Via video finos aspektas kiel rubo. - [Grunt] -There Estas pli kaj pli da homoj addicted al farante vertikalaj filmetoj ĉiutage. Tio ne fendi aŭ nenio, sed ĝi estas ankoraŭ vere malbona. Ekzistas du malsamaj specoj de homoj kiuj ploras kun VVS. La unua grupo traktas la videos ili pafas kiel pentraĵoj. Ili ne signifas ion malbonan. Ili simple ne komprenas, ke dum vi povas turni bildon, vi ne povas vere turni video. [Crash] - [SIMIO SOUNDS] -La Alia grupo estas homoj Kiu ne donas [Bleep]. -pokemon Video Sindromo estas danĝera. Filmoj havas ĉiam estis horizontalaj. Televidoj estas horizontalaj. Komputilaj ekranoj estas horizontalaj. Popola okuloj estas horizontala. Ni ne konstruis por spekti vertikala filmetoj. -I Amas vertikala filmetoj. -Nobody Zorgas pri vi. -Se Tiu problemo estas lasis malŝaltita, vi tro komencos montri kvar vídeos samtempe simple savi bandwidth. -Letterboxed Vertikala videos volus esti la grandeco de poŝtmarko. -Kaj Ĝi disvastiĝos ĉie. Filmo ekranoj havas ĉiam estis horizontalaj. Se vertikala videos fariĝi akceptita, kinoj devos esti alta kaj magra. -Kaj Ĉiuj kinoj volus devi akiri ŝirita malsupren kaj rekonstruita. Kaj kiam ili estis rekonstruitaj, Mila Kunis estus malnova kaj malbela. -Birds Kraŝos en ilin kaj mortu. -We'll Ĉiuj atingi rigida koloj de suprenrigardinte. -Kaj Neniu sidos en la frontvico iam denove. -George Lucas estos re-ĵeto Stelo Militoj again-- la magra eldono. -I Neniam vere povis diri la rakonto, kiun mi volis rakonti. Tio estis granda ŝanco por mi eksperimenti kun nova teknologio. -You're Eksalton. -Every Tempo movkomputilo kutimas rekordo video, la tento estas tie. Nur diri ne. Say no to George Lucas. Diri ne al malnova Mila Kunis. Say no to vertikala filmetoj. -Kaj Se vi vidas iun fari ĝin, diru, "vi ne pafi ke rajto maniquí!" [MUZIKO Ludante] [FINO reprodukto] [Aplaŭdo] [AUDIO OUT] ROB Bowden: --simple formo de ĉifriko, kiu estas esence la ĉifrado kaj malĉifro de sekretaj mesaĝoj. Do jen ni havas tre simplan ludilon. Kaj la ideo estas la ekstera ringo rotacias ĉirkaŭ la interna ringo. Kaj vi povas vidi, eble se mi zomi en, that-- estas malfacile vidi. Sed, kiel, la nombro 1-- bone, kiu movigxas. La nombro 1 mapas al la letero X, numero 2 mapoj al la letero J. Nekredeble malfacila Ne salti antaŭen. Letero 2 mapas al J. Numero 3 mapoj al D. Do kun tiu ĉi ringo vi povas doni ulu mesaĝon 1, 2, 3. Ial vi volas rakonti ilin XJD. Sed vi povas doni al ili iuj mesaĝo de nombroj, kaj tiel longe, kiel ili havas tiun ringon, ili povas malĉifri kion vi provas diri. Do eble vi vidis tiun aparta ekzemplo de ĉifriko antaŭ se ĉirkaŭ la sezono navideña vi jam spektis A Christmas Story. Se vi neniam vidis ĝi antaŭe, tiam nur ŝalti TBS ĉe laŭvorte ajna tempo sur Nochebuena, ĉar ili simple montri ĝin reen malantaŭeniri al malantaŭo al malantaŭo al malantaŭo la tutan tagon. Kaj la koncernajn video estas ĉi. [VIDEO reprodukto] -Be Sciate al propraj kaj strangaj ke Ralph Parker estas maniere enoficigita membro de la Malgranda Orfino Annie Sekreta Rondo kaj povas postuli ĉiuj honoroj kaj profitoj okazanta tio. Subskribita Little Orphan Annie. Legalizita Pierre Andre inke! Honoroj kaj profitojn Jam en la aĝo de naŭ! [Kriante FROM RADIO] -Come Plu. Ni daŭrigu ĝin. Mi ne bezonas ĉion, kion ĵazo pri kontrabandistoj kaj piratoj. -Listen Morgaŭ nokto kun la konkluda aventuro de la Nigra Pirato Ŝipo. Nun, estas tempo por Annie la sekreta mesaĝo por vi membroj de la Sekreta Rondo. Memoru infanoj, nur membroj de Annie Sekreta Rondo povas malkodi Annie la sekreta mesaĝo. Memoru, Annie estas dependanta sur vi. Ŝanĝu vian pingloj al B2. Jen la mesaĝo. 12. 11. 2. -I Estas en mia unua sekreta kunveno. -25. 14. 11. 18. 16. -Ho, Pierre estas en granda bruo hodiaŭ nokte. Mi povus diri ke tiu nokto la mesaĝo estis vere grava. -3. 25. Tio estas mesaĝo de Annie sin. Memoru, ne diru al iu ajn. -Five Sekundoj poste, mi estas en la sola ĉambro en la domo kie knabo de naŭ povis sidi en privatecon kaj malkodi. Aha! B! Mi iris al la sekva. E. La unua vorto estas "esti." S. Ĝi venis pli facile nun. U. 25. Tio R. -Come Sur, Ralphie! Mi gotta go! -I'll Pravus malsupren, Ma! Gee Whiz. T. O. "Nepre" - nepre kio? Kio estis Little Orphan Annie provas diri? Nepre kio? -Randy Has got iri! Bonvolu eliros? -All Pravas, panjo! Mi tuj ekstere! Mi proksimiĝas nun. La streĉiĝo estis terura. Kio estis tio? La sorto de la planedo povas pendi en la ekvilibro! -Ralphie, Randy devas iri! -I'll Pravus eksteren, por laŭte ploris! Preskaŭ tie! Miaj fingroj flugis. Mia menso estis ŝtalo kaptilo. Ĉiu poro vibris. Estis preskaŭ klara! Jes. Jes. Jes. Jes. Nepre trinku vian Ovaltine. Ovaltine? A malbona morto komerca? Filo de ĉiesulino. [FINO reprodukto] ROB Bowden: Do jen kiel Ovaltine rilatas al ĉifriko. Esence CS50 ĵus anoncita Ovaltine, tiel ni povis esti malbona morto komerca por Ovaltine. Bone. Do nun fakta komputiko. Memoru lunde ni cxesis plonĝado profunden en kordoj. Do temas pri la ĉeno "Zamyla." Kaj ni estis rekonanta la fakto ke ni povas trakti "Zamyla" kiel sekvenco de karakteroj. Kaj memoru ke ni lernis la krampo skribmaniero. Do se tio estis stokitaj en cxeno "s", tiam se ni diris s krampo 0, kiu volus indiki la letero ĉefurbo Z. Kaj se ni diris s krampo 1, ke indikus la unua minuskla a, kaj tiel plu supren al s krampo 5, kiu indikus la lasta a. Nun memoru ke la longo de tiu linio estas 6, sed la indeksoj en la kordo estas 0 tra 5, Z tra tiu daŭri. Do tiu nun konvenas en pli grandan bildon de via komputilo memoro, via memoro RAM. Do ie la programo kiu vi uzas vian komputilon bezonas memori Zamyla ie en memoro. Do mi povas havi volontulo? Jes Bonvolu. Kaj kio estas via nomo? DEAN Dean. ROB Bowden Dean? Agrable renkonti vin, Dean. Do venu ĉi tien, kaj ni havos vin tiros sur nia bela nifty aranĝo de memoro. Nun mi ŝatas pensi de memoro kiel longa strio de bajtoj, sed nur por montri celoj ni simple maldekstre dekstren, pinton al fundo. BONE? Do mi tuj montros program-- Getstrings.c. Kaj tial ĉiuj ĉi programo estas faras estas peti kvar kordoj de la uzanto kun GetString kaj tiam printado kio ajn tiu unua signoĉeno tajpis. Ni ignorante du tra kvar. BONE. Do tien now-- kiam Mi unue peto s1. Do vi estas la komputilo. Kaj vi estas implementando GetString. Do vi peti kordo de mi, kaj mi diras, OK, Dean. Donu la kordo "Dean". Do ie en memoro vi bezonas memori "Dean". Do skribu ĝin en memoro ie. Perfekta. BONE. Do nun ni S2. Kaj s2 tuj estos peton al GetString. Do mi tuj eniri ĉenon. Mi tuj eniri "Hannah." Do eniri "Hannah" ie en memoro. Yeah. A-H. Bone, do nun s3. Kaj ĝi estas iranta esti alia peti al GetString. Kaj tial nun eniri "Maria." Bone. Kaj tiam tie estas unu lasta peto al GetString, S4. Do, mi ne scias. Kion pri ni akompanos antidisestablishmentarianism. Do eniru ke en memoro. Yeah. Do simple fari "Rob". BONE. Do nun explain-- kial vi lasas tiujn spacoj? Kial vi devas tion malplena spaco tie, tie kaj tie? Jes. Do rimarki kiam mi iras presi s1-- do se ni havis "Hannah" kurado suprenvenu apud "Dean" kiel ni scias kiam la ĉeno "Dekano" finas? Do presi la kordo s1 povas havi nur presita "DeanHannahMariaRob" se ĝi ne havas neniun indikon de kiam "Dekano" efektive finiĝas. Bone. Do en memoro la maniero ni efektive reprezenti tiun finon de ŝnuro estas kun backslash nula. Do tiu spaco estas ĝuste kio ni deziris. Ĝi devus esti backslash nula. Tio estos backslash nulo, kaj tio estos backslash nula. Kaj vi povas havi fabela premion por esti perfekta volontulo. Prenu streso pilko! BONE. Do tiu karaktero backslash nulo estas kiel ni indikas la finon de ŝnuro. Estas kiel kiam iu antaŭfiksita programo volas presi ĉenon, ĝi estas how-- memoras ni lernis la strlen funkcio lasta semajno? Kordo longo? Ĝi estas kiel kordo longo povas determini kiel longe kordo estas. Ĝi nur tenas ripetanta super la karakteroj ĝis ĝi trovas la backslash nula karaktero. Do la grava afero realigi pri la backslash nula karaktero estas ĝi estas reprezentitaj de ĉiuj nuloj en bitoj. Do rimarki ke tiu estas klara el la nula karaktero. Do la nula karaktero, se vi memoras en la ekzemplo kiun li donis ĉe la fino de prelego kie karakteroj mapi to-- kiel ĉefurbo A mapoj al 65. Minuskla a mapoj al 97. Minuskla b estus 98. Do la nombro 0 mapoj to-- mi ne scii de la supro de mia kapo. 44 aŭ 45. Ie en tiu regiono. Do la karaktero 0 estas reala nombro. Sed backslash nulo mapoj por ĉiu nulo bitoj. Do ekzistas distingo inter backslash nulo, kiun ni nomas la nula Terminator. Ekzistas distingo inter backslash nula kaj la karaktero nulo. Bone. Do parolante iom pli pri kordoj. Tial ni vidas tie ĉi estas kiom estus aranĝita en memoro. Do tiu ideo de kordoj kiel sekvenco de characters-- tiel la oficiala komputilo sciency termino por vico estas tabelo. Do nomus kordo tabelo de signoj. Kaj estas efektive aliaj datumoj tipoj kiujn ni povas fari tabeloj el. Do motivi ĉi, rigardu ekzemplon. Ni nomas ĝin ages0.c Mi timige kopiu kaj gluu nian ŝablonon. BONE. Do en tiu programo, kion ni volas fari estas kapti la aĝo de tri studentoj en la kurso. Do ni scias la int age-- kaj nun mi estas iranta diri 0. Do eble vi volas diri age1, sed por celoj ni vidos tre baldaux, Mi diros int age0 egalas GetInt. Do la sama alvoko al GetInt ke ni uzis mi ne okazas esti instigante dirante, "donu al mi la aĝo." Sed ĝuste petas. Kaj age1 egalas GetInt. Kaj int age2 egalas GetInt. Do, denove, tri studentoj, sed finfine la variablo indeksoj estas age0 tra age2. BONE. Do tiu programo faros ĉion, kion ni volas kun age0, age1 kaj age2, sed tiu programo finfine funkcias por tri studentoj. BONE. Do nun kio se mi volas kvar studentoj? Nu, mi tuj devos iri reen en mia kodo, ŝanĝi la komenton, kaj nun ni havas int age3 egalas GetInt. BONE. Do kiu vidas la problemon ĉi tie? Kio estas la problemo kun ĉi tia aranĝo? Yeah. Yeah. Do ni kreante variablo por ĉiu studento. Nun kiu funkcias, sed finfine kion se mi nun diri, "Mi volas ekpreni la aĝo de ok studentoj aŭ 16 studentoj aŭ la tamen multaj studentoj de la centoj da studentoj en CS50 aŭ la miloj da studentoj sur kampuso aŭ la miliardoj da homoj en la mondo? Do finfine tio ne daŭrigebla. Ajna tempo vi vidas mem kopiado kaj glui kodon tiel, vi devus ĝenerale sentas ke estas bona maniero. Do tiu estas kie ni enkonduki tabelo deklaro. Do kiam vi deklari tabelo, jen kion la ĝenerala formato tuj aspekti. Ni tuj diru la tipo. kaj tiam ni tuj donas la nomon de tiu tabelo, kiel ni difini iu antaŭfiksita variablo. Kaj tiam fine ni uzas ĉi krampo skribmaniero denove sed en malsama kunteksto de kiel ni uzis ĝin pli frue. Do jen tio aspektas kiel normala ŝanĝiĝema deklaro ke ni vidis. Do ni vidis int x duon-dupunkto antaŭe. Nu nun ni povu vidi ion kiel int x krampoj 5. Kaj metante tiun ideon en la GetInt programo ke ni have-- tial ni povas apliki tiu en la sama maniero. Diru en CS Ni emas uzi n kiel la nombro de io. Do jen ni tuj stoki kvar studentoj. Kaj nun ni povas diri int aĝo krampo n-- ne sufiĉe akiri ĝin yet-- deklari tabelo de kvar studentoj. Do kiel tio aspektos en memoro estos simila al tiu. Malbari ĉi. Kaj ni tuj devas ie en memory-- mi metos ĉi tie supre. Do ie en memoro. Unu, du, tri, kvar. Ni havas kvar entjeroj en vico por tiu tabelo de kvar entjeroj. Do, nune, kio estas la grandeco de unu el ĉi tiuj skatoloj? Yeah. Estas kvar bajtoj. Ĝi estas 32 bitoj. Do nun tiu estas malsama el la tabelo, ke ni vidis antaŭe, la tabelo de signoj. En cxeno ĉiu skatolo estis nur unu bajto, ĉar karaktero estas nur unu bitoko. Sed kun tabelo de entjeroj, ĉiu skatolo devas esti kvar bitokoj por konveni tutan entjero. Do ĉi tiu estas kion tabelo de kvar ints aspektus. Kaj poste hejmen al la kodo. Nun ni volas reale vendejo entjeroj en tiun tabelo. Do nun tiu lando estas tre, tre, tre komuna padrono ke volo ĉe iu punkto fariĝi muskolo memoro. Do int i egalas 0. i malpli ol n. i plus alpago. Aĝo krampo i egalas GetInt. Do tiu por buklo, tiu formato, Vi devus akiri tre uzita. Do tiu estas ĝenerale kiel ni persisti super preskaŭ ajna tabelo. Nun rimarki tian klarigas kial de la komenco ni ne havas por bukloj iranta por int i egalas 1, i malpli ol aŭ egala al 10. La kialo estanta ke ekde nulo faras ĉi laboro bone kun tabeloj. Do tabeloj estas nulo indeksita. Se tiu tabelo estas de longo 4, la indeksoj estas 0 tra 3. Do tra la unua ripeto de tiu por buklo ni tuj estos opcio aĝo krampo 0 egala al alvoko por GetInt. Do kion mi okazis eniri ĉe la klavaro. En la dua paŝo, ni estas fiksanta age1 egalas GetInt. Tria enirpermesilo, age2. Fino preterpasigos age3. Do se en la unua enirpermesilo de la buklo Mi eniras en la numero 4 ĉe la klavaro, poste ni enmeti 4 tie. Se sur la dua pasas mi eniras 50, ni metos 50 tie. La trian enirpermesilon, mi eble povus eniri negativa 1, negativa 1, kaj tiam fine kiam mi eniras 0-- kaj nun memoras ke tio indekso tri. Post ni buklo reen, i estas tuj estos incremented al 4. Mi ne plu estas malpli ol n, kiu estas 4. Kaj ni rompi la buklo. Do kio estus erara kun tio? [Inaudible]? Spektantaro: [inaudible] Jes. Do la tabelo nur havas kvar lokojn, kio signifas kiel indicoj 0 tra 3. Do se tio estis la kazo, mi farus alpreni la valoron 4 ĉe iu punkto. aĝo krampo 4 estos opcio ajn hazarde estas super tie al kion mi devas diri, eniri 6. Ke estos opcio tiu al 6. Sed ni ne scias kio estas super tie. Tio ne memoro ke ni havis aliron al. Do se vi memoras de la antaŭa prelego, li presi el valoroj de Zamyla kaj iam li trafis ĉi segmentación kulpo. Do vi probable vidos multaj segmentación misfarojn kiel vi implementar iuj de la problemo aroj. Sed tio estas unu el la manieroj en kiuj vi povas renkonti segmentación kulpo, kiam vi komencas aliranta memoro en manieroj kiuj vi ne devus esti. Do ni ne havas aliron al tiun lokon kaj tio estas cimo. Do tio estas bona. Nun estas ankoraŭ malgranda temo kun tiu kodo. Kaj tio estas esence ke ni estas ankoraŭ senmoviĝita ĉe kvar studentoj. Sed se mi volas uzi ok studentoj, OK. Ĝi ne estas ke granda interkonsento. Mi povas eniri, ŝanĝi la komenti kaj sxangxu n. Nun tio funkcios kun ok studentoj. Se mi kompilos ĉi kaj kuri tiu, ĝi montros kunulinon ĝi petos entjeroj por ok studentoj kaj ĝi nur funkcius. Sed estas malpli ol ideala bezoni rekompili la programon ĉiu ununura tempo Mi volas ŝanĝi la nombro de studentoj ke mi volas eniri la aĝoj por. Do la fina plibonigo sur tiu, kiel ni vidos here-- ni estas tuj petos la nombro de homoj. Ĉi tie ni havas nombro de homoj en la ĉambroj aŭ ajna aĝoj de homoj en la ĉambro. Sed ni tuj peti la nombro de personoj en la ĉambro de la uzanto. Do tiu estas la ĝusta sama do-dum buklo kiun ni vidis antaŭe. Estas la ĝusta sama do-dum buklo ke vi povas esti implementando en la problemo aro. Do tiel longe kiel ili estas eniri n malpli ol 1, do tie estas alvenis al esti al Almenaŭ unu persono en la ĉambro. Tiel longe kiel ili estas eniri n malpli ol 1, tiam ni tuj teni demandanta denove. Bonvolu tajpi la numeron de homoj en la ĉambro. Nun, iam ni havos la nombron de personoj en la room-- do mi povus eniri ke Estas 200 personoj en ĉi tiu ĉambro. Tiam malsupren tie ni tuj venu kaj deklari tabelo de grandeco 200. Ni deklarante tabelo tio sufiĉe granda por teni 200 aĝoj. Malsuprenirantan, ĝi estas la por buklo ke vi estos get tre uzita. Do ripetanta super ĉi tabelo, asignanta al ĉiu loko en tiu tabelo entjero, kaj tiam finfine tie ni estas nur nun ekzemplon de ripetanta super tiu tabelo, ne atribui valorojn, sed aliri valoroj. Do ĉi tie ni vidas ke ni diradas, unu jaro, persono% i estos% i jaroj, kie la unua% i estas i plus 1. Do mi estas ĉi indekso variablo. Kaj la duan% i tuj estos la valoro stokita en la aĝoj tabelo plus 1. Do ĉi plus 1 estas nur ĉar ni estas saying-- ĉi plus 1, aĝoj i plus 1. Ĉi plus 1 estas nur ĉar ni estas dirante unu jaro la persono Estos ĉi malnova. Do kial estas tiu i plus 1? Kial ni havas plus 1 tie? Yeah. Jes. Do memoru arrays estas nulo indeksita. Do se ni presi ĉi ekstere por iu ĵus legis la eligo, tiam probable volas vidi ion kiel persono unu, persono numero unu, estos 20 jara. Persono numero du estos 15 jaraĝa. Ili preferas ne vidi persono nombro nulo estas 15 jarojn aĝa. Do kompilanta ĉi kaj nur vidante kion ĝi aspektas like-- Krei iun spacon. Faru aĝoj kompilas. Running aĝoj. Ni vidas nombro de homoj en la ĉambro. Do mi diras ke estas tri personoj en la salono. Aĝo de persono numero unu, diru 15, 20, 25. Kaj nun mi diru unu jaro nun ili estos 16, 21, 26. Vidu ke tiu funkcias kun n kiu ne egalas al 3. Do se mi diras kelkaj personoj estas 5, oni, du, tri, du, unu, unu jaro ili estos du, tri, kvar, tri, du jarojn aĝa. Do mi povis nur kiel facile n esti 10,000. Nun mi sidas ĉi tie dum sufiĉe tempeto enirante aĝoj, sed tio funkcias. Do nun memore ie ni havas tabelo de grandeco 10.000, do finfine 40,000 bajtoj, ĉar estas kvar bitokoj por ĉiu el tiuj entjeroj. Do tie estas tabelo de grandeco 10.000 kie ni povas stoki la aĝoj de tiuj 10.000 personoj. Bone. Demandoj pri ajna el tio? Yeah. Kio se vi donis negativan nombron? Ni vidu kio okazas. Do en ĉi tiu aparta case-- nombro de homoj en la ĉambro, negativa. Malakceptis tion, ĉar tien ni hazarde esti pritraktanta la fakton ke se n estas malpli ol unu ni tuj demandos denove. Se vi provas deklari tabelo de negativa grandeco, ĝi ĝenerale ne funkcias. Do ni provu. Ni ignoru ajn valoron ili enigo por n kaj simple diru int aĝoj negativa. Ni vidu se ĝi eĉ kompilas. Mi ne certas. No. Do aĝoj estas deklarita kiel tabelo kun negativa grandeco. Do upfront rekonas tabelo ne povas esti de negativa grandeco kaj malakceptas ĝin. Nun, se ni ne pritraktis ĉi do-dum buklo ĝuste, se ni ne estis kontrolanta se n estas malpli ol 1-- diru ni ĵus ne havas tiun tute kaj anstataŭe ni nur kaptu entjero. Neniu gravi kion tiu entjero estas, ni deklaras tabelo de tiu grandeco. Do la tradukilo ne povas eble plendos nun. Se mi kompilos this-- do ĝi ne povas plendi, ĉar ĝi ne povas scii ke mi estas tuj eniros negativa nombro, kiu povus esti nevalidaj. Por ĉiuj ĝi scias, mi povus eniri pozitivan numeron, kiu estas perfekte valida. Do mi imagu se mi eniras negativa 1 homoj en la ĉambro, segmentación kulpo. Do, okej. Do ni aldonas ĉi reen ĵus teni ĝin kio ĝi origine estis. Do fari aĝoj. Sed se mi volas provi negativa age-- do ni diri estas kvin homoj en la ĉambro. Aĝo de persono numero unu estas negativa 4, persono tri estas nulo, persono three-- OK. Do jen, unu jaro, persono nombro unu estos negativa 3 jaroj. Do probable ne havas sencon. Sed tio estas nur ĉar rigardanta ĉe la kodon ĉiuj ni faras petas GetInt. Nun, se ni havis la GetPositiveInt funkcio aŭ ni ĵus simple faris tion ia sama dum buklo tie, tiam tiu laborus perfekte bone. Sed en tiu aparta kazo, ni nur ne hazarde estas manipuli negativaj valoroj. Aliajn demandojn pri tabeloj? BONE. Do ni nun vidis tabeloj. Kaj ni tuj bezonas uzi ĉi por komand-linio argumentoj. Do en problemo aro two-- Mi scias multaj de vi povus ankoraŭ esti laborante en problemo aro unu, sed problemo starigis du estas venanta supre. En problemo aro du, vi tuj bezonas esti kontraktanta kun kordoj, tabeloj, kaj komand-linio argumentoj. Do kio estas komandlinio argumentoj? Nun, vi povas vidi malsupren tie iom teaser por precize kio estas tuj okazos. Ni vidas int main, inc argc, string argv krampoj. Do unue ni provu interpreti kion tio provas diri. Nun, OK. Do ĉe la komandlinio vi devus esti alkutimiĝi al iuj de ĉi tiuj komandoj nun, kaj vi probable kuras kd en la terminalo antaŭ. Do se ni diras kd pset1, vi scias, ke tiu devus esti ŝanĝanta en la pset1 dosierujo. Nun rimarkas ke vi neniam skribita programon tiel antaŭe. Ĉiu programo kiun vi skribis, vi kurus, diri, dot oblikvo Mario, dot oblikvo avida, kaj tiam povus suflori vin por enigo. Nun, tio ne estas kion ŝanĝo dosierujo faras. Kiam vi kuri KD, ĝi ne diras tiam, kiun dosierujon vi volas kd en? Anstataŭe, vi nur diru, cd pset1, kaj ĝi nur iras en la pset1 dosierujo. Do simile ni havas aliajn ekzemplojn. fari saluton. Kiam vi kuri fari, ĝi ne diras tiam, kion programo vi ŝatus fari? Vi nur diru, je la komandlinio fari saluton. Move estas alia ekzemplo. Ĉi tiu kiun ni movas la mario.c dosieron supren unu dosierujo. Do nun ni scias kun ĉi ekzemplo ni vere pasanta du argumentojn. Ekzistas mario.c kiel la unua argumento, kaj dot dot estas la dua argumento. Kaj poste, kiam vi kuris fari, vi vidi ke vere longa komando line-- ke vere longa komando presita ĉe la komandlinio. Por ke longe command-- ĉi estas malmulta parto de ĝi, sed nun ni havas tri komand-linio argumentoj. Dot Dash nulo, saluton, kaj hello.c. Do tiuj estas komandlinion argumentoj, argumentoj ke vi preterpasis en la komandlinio por ke ĝi Ne devas esti invitata kiam vi kuras la programon. Estus frustrante se kiam vi kuris tin i diris, "OK, kiu program-- kiu dosieron vi kompili? Hello.c. Kio flagoj farus vin deziras eniri? haltostreko o. Kion vi volas la dosieron por nomi? saluton. Ne, vi nur kuri Clang interfrapigos o saluton hello.c. Do rigardante malantaŭen en ĉi tio. Nun argc-- argc estas la argumento grafoj. Ĝi estas la nombro de komandlinion argumentoj eniris ĉe la komandlinio. Nu, argv-- teknike la v staras por vektoro, kiu esence signifas tabelo. Sed vi povas ignori tion. Argv-- ni havas ĉenon argv, tiel kordoj argv krampoj. Do ĉi tio estas alia formo de krampoj vi ne vidis antaŭe. Do ni vidis krampo notacio kiam ni diris, kiel, kordoj s egalas Zamyla. s krampo 0 aliroj la karaktero Z. Ni ankaŭ vidis krampoj kiam Ni diris int aĝoj heligas 5. Kiu deklaris tabelo de amplekso 5. Do tie estas versio de la krampoj ni ne vidis antaŭe. Do tiu speco de ŝnuro argv ke estus tute familiara ke nur estus ŝnuro. Nun la krampoj indiki ke tiu estas tabelo. Do string argv krampoj rimedoj ke argv estas tabelo de kordoj. Nun teknike kordo estas tabelo de signoj. Do tiu estas nun tabelo de tabelo de signoj. Sed estas multe pli facile pensi tion kiel nur tabelo de kordoj. Do kial povus la krampoj estu malplena? Kiel, kial ni ne povas diri, krampo 5, krampo n? Yeah. Yeah. Ni ne scias kiom da enigoj estas iranta esti. Do se ni rigardas la tin ekzemple, ni diru tin haltostreko o saluton hello.c. En ĉi tiu aparta kazo, okazi esti tri komandlinion argumentoj. Kaj tial la brackets-- vidos en dua ne estus tri. Ĝi teknike estus kvar. Sed la krampoj, ni farus diru, estas tri. Sed nun se ni rigardis movado mario.c dot dot, la krampoj ni volus meti du en ili. Kaj ekzistas multe da ordonoj kiuj havas ŝanĝiĝeman numeron de komandlinio argumentoj. Do kio estas tiu versio de la krampo notacio indikas estas ke argv estas tabelo de kordoj. Sed ni ne scias kiom da kordoj estas en tiu tabelo. Kiel do ni tiam sciis kiel multaj kordoj estas en la tabelo? Jen la tuta punkto argc. argc diras ni kiom longe argv estas. Do la lasta afero teni en menso estas ke, teknike, la komando mem rakontas kiel unu de la komand-linio argumentoj. Do cd pset1, estas du komand-linio argumentoj. La programo en si mem, KD, kaj tiam la fakta argumento parton, pset1. Ajna programo kiu vi skribis tiel multe havis unu komandlinion argument-- skalara oblikvo Mario. Tio estas la sola komandlinion argumento. Do nun rigardas tin interfrapigos o saluton hello.c. Do kio estas argc? 4. Do argc estas 4. Clang, tiel argv krampo 0 estas tin. argv krampo 1 estas haltostreko 0. argv krampo 2 estas saluton, kaj argv krampo 3 estas hello.c. OK, Do demandoj sur tio, kaj poste ni rigardu kelkajn programita ekzemploj. BONE. Do ni rigardu hello3.c. Do tiu devus esti konata de unu el la unuaj c ekzemploj ni havis, kie ni volus nur diri, saluton mondo, sed nun tio estas pli ĝenerala. Do jen ni diras saluton % s backslash n argv krampo 1. Notice-- tiel gxis tiu punkto, tiu estas kion mia ŝablono dosiero aspektis. Mi havis int main (void), kaj poste mi volus fari ion en la ĉefa funkcio. Nun anstataŭe, iam ni komencu kontraktanta kun komand-linio argumentoj, ni devas deklari malsama formo de ĉefa. Do rigardante hello3 denove, la ĉefa tuj preni du argumentojn now-- int argc, la nombro de komandlinion argumentoj, kaj ŝnuro argv krampoj, la fakta kordoj eniris ĉe la komandlinio. Do mi tuj ŝanĝi tion ŝablono por reflekti tiun fakton. Nun kiam vi skribas programo, se vi ne faras bezonas preni ajnan komand-linio argumentoj, tiam simple uzi int main (void). Sed nun kiam vi skribas komandlinion argumento programoj, kiujn vi tuj faros por problemo fiksita two-- tiel nun ke vi uzas programoj kiuj bezonas preni komand-linio argumentoj, vi bezonas havi ĉefa de ĉi tiu formo. Do here-- tiu estas la granda uzado de la komandlinion argumento. Do presi argv 1. OK tiel ni kompilos kaj kuri ĉi programo. Faru hello3. Kompilas. Dot oblikvo hello3. Kaj ni diru, "Rob". Saluton Rob. Se mi diras: "Saluton Maria," Saluton Maria. Saluton Maria. Hannah ankoraŭ diras, "saluton Maria, "ĉar mi ne faranta ion kun niaj argv 2. Argv 2 nun estus "Hannah." Argc estus 3. Kio se mi faris ĉi tion? Do saluton nula. Li nelonge tuŝis sur la fakto ke, teknike, GetString iri returne nula, sed ni ricevos multe pli en kion nula reale estas. Sed prenu gxin kiel demando pri fakto ke ne estas ĝenerale malbona. Ni faris ion malĝustan se ĝi estas presi "saluton nula." Kaj la kialo ni faris io malĝusta is-- bone, kiam mi kuris dot oblikvo hello3, argc estis 1. Do tio signifas la longo de argv estis 1. Se tabelo estas de longo 1, la sola valida indico estas nul. Kaj do jen argv 1 estas ekster la teritorio de tiu tabelo. Ĝi estis simila al antaŭ kiam mi provis stoki 6 ekster la fino de la tabelo. Do mi provas aliri ion eksteren de la argv grafoj, kaj ni estas duumaj nula. Do pli bona versio de tiu, plibonigo, eksplicite kontrolanta argc. Do se argc egalas 2, tio signifas ke ni kuris io kiel dot oblikvo hello3 Rob. Kaj ĝi presos "saluton Rob." Se argc ne egala 2, tiam ĝi estas ĝuste tuj ignori kion vi metas ĉe la komandlinion argumento kiel komando-linia argumentoj. Aŭ se vi ne metis neniun entute, ĝi estas simple tuj ignori ke kaj nur diru, "saluton al vi." Do kompili ĉi. Faru hello4. Kaj kurinte hello4. Running ĝin tiamaniere, kio devus esti presita? "Saluton al vi." Saluton vi. Kio pri hello4 Rob? "Saluton Rob." Kaj fine, saluton Rob Maria estas simple "saluton Vi" denove, ĉar vi ne eniras reale iu kiu ŝin atendis. Vi eniris pli nomoj ol ĝi povis manipuli, do ĝi ĵus defaulted al la saluton vi konduto. Do demandoj sur tio? Aŭ komandlinion argumentoj? Bone, do prenante rigardu Paro pli ekzemploj de uzado komandlinion arguments-- unua ni argv haltostreko 1 punkto c. Do la komentoj donaci kion tiu programo devus esti faranta. Sed rimarki now-- ĉi por ciklo, ĉi egalas la ĝusta skemo Mi estis diranta antaŭ. Ni nur hazarde estas uzante argc anstataŭ n. Nun argc estas vere la n. Ĝi estas la longo de la argv tabelo. Do estas ripetanta super la argv tabelo printf-ing ĉiu argv valoro. Do se mi faras tiun. Faru argv 1. Ĝi kompilas. Dot oblikvo argv 1. Nur kurante tio, presaĵoj dot oblikvo argv 1 ĉar tio estis la sola komandlinion argument-- la programo nomo. Ĉiam estos ĉe least-- argc ne povas esti malpli ol unu, Ĉar ne ĉiam almenaŭ esti la programo nomo kuri. Do argv 1 Rob presos argv 1 kaj poste sur la nova linio "Rob". Do en la unua ripeto de tiu buklo, mi estas 0. Argv 0 estas la programo nomo. Dot oblikvo argv 1. Kaj tiam argv 1 estas mia unua komandlinion argumento, kiu estas Rob. Je tiu punkto, ni estas egalaj al argc. Ni rompi la buklo kaj ni faris. Do tio funkcios por ajna numeron de komand-linio argumentoj. Rimarku presas argv 0, argv 1, argv 2, argv 3, argv 4. Kaj ne ekzistas argv 5. argc estas egala al 5. Do ĉe argc-- ĉe i egalas 5, ni rompi la buklo. BONE. Do demandoj sur kiuj antaŭe ni rigardi pli kompleksa ekzemplo? Do argv 2. Bone. Do ni ankoraŭ presado la komand-linio argumentoj. Sed nun rimarki ni havas a nestitaj por buklo. Do kio estas tiu faras? Do la unua buklo estas faranta ĝuste kio faris antaŭe. Ni ankoraŭ looping super ĉiu komandlinion argumenton, sed nun tiu dua loop-- ni havas ankaŭ vidis io kiel ĉi antaŭe. Kiam li estis ripetanta super Zamyla presi el Z-Al-M-Y-L-A. Do tiu dua ciklo por int j egalas 0, n egalas strlen de argv krampo i. Do ni unue pensi pri the-- ni trairu. Ni pensu kio la komputilo do se mi kuris tiu programo kiel ĵus dot oblikvo argv haltostreko 2. Do se mi kuris ĉi kodon, tiam argc tuj esti egala al 1. Kaj ŝnuro argv-- ekzistas nur tuj estos unu indekso en argv, kaj ke tuj esti egala al dot oblikvo argv 2-- la programo nomo. Bone, do nun mi egalas 0, i malpli ol 1, i plus alpago por int j egalas 0, n egalas strlen de argv krampo 0, tiel en la unua ripeto de ĉi buklo. argv krampo 0 estas dot oblikvo argv 2. Do kio estas la longo de tiu ĉeno? Nu, dot oblikvo A-R-G-V haltostreko 2. Do strlen de kiu estos 8. Do j egalas 0, n egalas 8. Tiel longe kiel j estas malpli ol 8, j ++. Kaj kun tio ni tuj esti presi ununuran karakteron, kiun estas argv krampo i heligas j. Do la sola i estas nulo. Ni ankoraŭ nur havas unu komandlinion argumento. En tiu unua ripeto de la por buklo, ni estas tuj estos printado argv krampo 0 krampo 0. Kaj tiam j estas tuj pliigo. Kaj ni tuj impreso argv krampo 0 krampo 1. Kaj tiam argv krampo 0 krampo 2. Do tiu estas nia unua renkonto de mult-dimensia tabeloj. Memoru frue ke mi diris ke argv estas teknike tabelo de tabeloj de signoj. Do jen, se mi diris ion kiel string s egalas argv krampo i, kaj tiam mi diris, s krampo j, tiu estus farante la saman aĵon. Nun, vi vidis s krampo j antaŭe. Tio simple aliri la j-a karaktero de tiu ĉeno. Do kun tio, ni estas akirantaj la j-a karaktero de la ia argv. Do kion devas ĉi tiu finfine eligo? Faru argv 2. Ĝi kompilas. Dot oblikvo argv 2. "Rabi Maria Hannah" kaj donu iu ĉambro. Do ni vidas ke ĉi tiu estas elirigi punkton sur ĝia propra linio kaj oblikvo sur ĝia propra linio kaj sur ĝia propra linio. Ĝi estas presi el ĉiu individua karaktero de ĉiu komandlinion argumento. Kaj tiam intere ilin, pro tiu nova linio ni videbligi ĉi tie, en inter ili ĝi devos presi novan linion. Do tio estas simila al la antaŭan argv haltostreko 1, kiu presas ĉiun komandlinion argumenton, sed nun ni videbligi la komand-linio argumentoj kaj tiam ripetanta tra ĉiu karaktero de ĉiu komandlinion argumento akiri tiun eligon. BONE? Do demandoj sur tio? Unu afero noti estas ke komandlinion arguments-- do ili estas apartigitaj per spacoj kiel Vi nature atendas ilin esti. Do kordo povas havi spacoj en ĝi. Ĝi ne estas super grava, sed se mi volis la tria komandlinion argumento havi spacon en gxi, tiam mi povus diri ion kiel tion. BONE? Do tiu nun ankoraŭ nur havas tri komandlinion arguments-- bone 4. Dot oblikvo argv haltostreko 2, Rob, Maria, kaj Hannah Bloomberg. BONE. Demandoj sur tio? Nenio speciala pri la spaceto. Ĝi nur hazarde estas, ke la komandlinion traktas la spaceto kiel kiel vi apartigi ĉiu argumento. Bone. Tial Problemo aro two-- vi tuj estos rigardante sekretaj-ŝlosila ĉifriko. Do, simila al tiu ekzemplo ni vidis de A Christmas Story, vi tuj estos implementando iuj algoritmoj kiuj, donitaj mesaĝon, vi tuj povos ĉifri tiun mesaĝon ke nur iu kun tiu sekreta klavon, kun tiu decodificador ringo, devus povi malĉifri. Do kiu estas la norma eldono. Vi tuj estos implementando du malsamaj versioj. Se vi hazarde rigardu ĉe la hacker edition-- nun, ni tuj donu vi ĉenon kiel tiu, kiu reprezentas ĉifrita pasvorto. Do via celo estas elkompreni kion la deĉifrita pasvorto estas. Nun tiu estas vere kiel pasvortoj estas stokitaj en multaj komputiloj, kaj ĝi nur stokas tiun hazarda linio de signoj. Vi devas eltrovi kiel akiri de tiu hazarda ŝnuro de karakteroj al kio la originala pasvorton iris. Kaj fine, post tiu problemo aro, vi devus povi kompreni kion tio signifas. Do vi lernos kiel malĉifri ĉi tia hazarda kordoj. Simile, se vi memoras de semajno 0, vi eble vidis ĉi tiu URL. Kaj vi devus povi malĉifri tiun eventuale. Vi ne povus esti feliĉa kiam vi malĉifri ĝin kaj klaku sur la ligilo. Bone. Estas tio hodiaŭ. Do revido venontsemajne! [ELECTRONIC MUSIC Ludante]