[Speel van musiek] David Malan: Alle reg. Dit is CS50, en dit is die einde van die week 2. Ek is so jammer ek kon nie wees daar met julle almal vandag maar jy is in 'n baie goeie hande. Laat my toe om te voer CS50 se eie Rob Bowden. ROB BOWDEN: En natuurlik, dan ons het pret maak van die feit dat hy gestuur vir ons 'n vertikale video en dit wys. [Video speel] [Speel van musiek] [VOETSPOREN] -Dit Video het nie het om op hierdie manier te kyk. Dit voorkom kon gewees het. Sê nee vir vertikale videos. -Vertical Videos gebeur wanneer jy hou jou kamera op die verkeerde manier. Jou video sal eindig up lyk soos kak. - [Grunt] -Daar Is meer en meer mense verslaaf tot die maak van vertikale video's elke dag. Dit is nie kraak of niks nie, maar dit is nog steeds baie sleg. Daar is twee verskillende soorte mense wat ly aan VVS. Die eerste groep behandel die videos hulle skiet soos foto's. Hulle bedoel nie enige skade. Hulle verstaan ​​net nie wat terwyl jy 'n foto kan draai, jy kan nie regtig draai 'n video. [CRASH] - [Aap SOUNDS] -Die Ander groep mense wat nie 'n [oproep]. -Vertical Video Sindroom is gevaarlik. Rolprente het altyd horisontaal is. Televisies is horisontaal. Rekenaar skerms is horisontaal. Mense se oë is horisontaal. Ons is nie gebou om kyk vertikale videos. -Ek Is lief vir vertikale videos. -Nobody Sorg vir julle. -As Se probleem links ongemerk, jy ook sal begin toon vier videos gelyktydig net bandwydte te bespaar. -Letterboxed Vertikale videos sou wees van die grootte van 'n posseël. -En Dit sal oral versprei. Film skerms het altyd horisontaal is. As vertikale videos geword aanvaarde, teaters sal lank en maer te wees. -en Al die teaters sou het om ontslae afgebreek en herbou. En teen die tyd dat hulle herbou, Mila Kunis sou oud en lelik. -Birds Sal crash in hulle en sterf. -We'll Al kry stywe nekke van kyk. -en Niemand sal sit in die voorry ooit weer. -George Lucas sal weer release Star Oorloë again-- die skinny uitgawe. -Ek Was nooit regtig in staat om te vertel die storie wat ek wou sê. Dit was 'n groot kans vir my om eksperimenteer met 'n nuwe tegnologie. -You're 'N ruk. -Every Tyd 'n mobiele toestel gebruik word om rekord video, die versoeking is daar. Net nee sê. Sê nee vir George Lucas. Sê nee vir ou Mila Kunis. Sê nee vir vertikale videos. -en As jy sien iemand doen dit, sê, "jy nie skiet dit reg dummy!" [Speel van musiek] [Einde afspeel] [Applous] [Klank uit] ROB BOWDEN: --simple vorm van kriptografie, wat is basies die enkripsie en dekripsie van geheime boodskappe. So hier het ons 'n baie eenvoudige speelding. En die idee is die buitenste ring draai om die binneste ring. En jy kan sien, miskien as ek zoom in, that-- dit is moeilik om te sien. Maar, soos die aantal 1-- goed, wat beweeg. Die nommer 1 kaarte tot op die letter X, die aantal 2 kaarte op die brief J. ongelooflik moeilik nie om vorentoe te slaan. Brief 2 kaarte om J. Nommer 3 kaarte om D. So met hierdie ring wat jy kan gee iemand 'n boodskap 1, 2, 3. Vir een of ander rede wat jy wil hulle vertel XJD. Maar jy kan gee hulle sommige boodskap van getalle, en so lank as wat hulle het hierdie ring, hulle kan dekripteer wat jy probeer om te sê. So jy al gesien het hierdie spesifieke voorbeeld van kriptografie voor as om die Kersseisoen jy het 'n Kersfees Story gekyk. As jy nog nooit gesien het voor, dan net draai op TBS op letterlik enige tyd op Oukersaand, omdat hulle toon dit net terug om terug om terug te back om die hele dag terug. En die betrokke video is dit. [Video speel] -Wees Dit aan almal bekend en diverse dat Ralph Parker is hiermee aangestel om 'n lid van die Klein Orphan Annie Secret Circle en is geregtig op al die honneurs en voordele daaraan voorkom. Onderteken Little Orphan Annie. Onderteken Pierre André in ink! Honneurs en voordele reeds op die ouderdom van nege! [Skree van Radio] -Come Op. Kom ons kry op met dit. Ek het nie alles wat jazz nodig oor smokkelaars en seerowers. -Listen Môreaand met die sluiting avontuur van die Swart Pirate Ship. Nou, is dit tyd vir Geheime boodskap Annie se vir jou lede van die Secret Circle. Onthou kinders, slegs lede Annie's Secret Circle kan geheime boodskap Annie se ontsyfer. Onthou, Annie is, afhangende van jou. Stel jou penne B2. Hier is die boodskap. 12. 11. 2. -Ek Is in my eerste geheime vergadering. -25. 14. 11. 18. 16. -OH, Pierre is in groot stem vanaand. Ek kon vertel dat vanaand se boodskap was werklik belangrik. -3. 25. Dit is 'n boodskap van Annie haarself. Onthou, moenie vir iemand te vertel. -Five Sekondes later, is ek in die enigste kamer in die huis waar 'n seun van nege in privaatheid en dekodeer kan sit. Aha! B! Ek het na die volgende. E. Die eerste woord is "wees." S. Dit kom nou makliker. U. 25. Dit is R. -Come Op, Ralphie! Ek het moet gaan! -I'll Regs af wees, Ma! Gee gefluit. T. O. "Maak seker dat jy" - seker wees om wat? Wat was Little Orphan Annie probeer sê? Maak seker dat jy wat? -Randy Het om te gaan! Sal jy asseblief kom? -Alle Reg ma! Ek sal reg uit te wees! Ek is nou nader om te kry. Die spanning was verskriklik. Wat was dit? Die lot van die planeet kan hang in die balans! -Ralphie, Randy se het om te gaan! -I'll Reg uit wees, vir huil hardop! Amper daar! My vingers gevlieg. My gedagte was 'n staal trap. Elke porie vibreer. Dit was amper duidelik! Ja. Ja. Ja. Ja. Maak seker om te drink jou Ovaltine. Ovaltine? A mollig kommersiële? Seun van 'n teef. [Einde afspeel] ROB BOWDEN: So dit is hoe Ovaltine betrekking kriptografie. Basies CS50 net geadverteer Ovaltine, so ons kon 'n morsige kommersiële vir Ovaltine. Alles reg. So nou werklike rekenaarwetenskap. Onthou op Maandag ons opgehou het duik dieper in stringe. So is ons te make met die string "Zamyla." En ons was die erkenning die feit dat ons kan hanteer "Zamyla" as 'n reeks van die karakters. En onthou dat ons geleer die hakienotasie. So as dit is gestoor in 'n string "s," dan As ons sê s bracket 0, wat sou Dui die letter Z. kapitaal En as ons sê s bracket 1, wat sou die eerste klein a dui, en so aan tot s bracket 5, wat sou die laaste 'n aan te dui. Nou onthou dat die lengte van die string is 6, maar die indekse in die string is 0 tot 5, Z deur daardie laaste 'n. So dit pas nou in 'n groter prentjie van jou rekenaar se geheue, jou geheue. So iewers die program wat jy loop jou rekenaar moet onthou Zamyla iewers in die geheue. So kan ek 'n vrywilliger? Ja asseblief. En wat is jou naam? DEKAAN: Dean. ROB BOWDEN: Dean? Nice om jou te ontmoet, Dean. So kom hier, en ons gaan hê jy teken op ons mooi nifty uitleg van die geheue. Nou ek dink geheue as een lang strook grepe, maar net vir die vertoning doeleindes ons sal net links na regs, bo na onder. OK? So ek gaan 'n show program-- Getstrings.c. En so sal die hele hierdie program is doen, is versoek om vier snare van die gebruiker met GetString en dan druk wat dit ook al eerste string aangegaan was. Ons ignoreer twee deur vier. OK. So hier now-- wanneer Ek eerste versoek s1. So jy is die rekenaar. En jy is die implementering van GetString. Sodat jy 'n string van versoek my, en ek sê, OK, Dean. Gee die string "Dean." So iewers in die geheue jy moet onthou "Dean." So skryf dit in die geheue iewers. Volmaak. OK. So nou het ons S2. En S2 gaan wees 'n versoek aan GetString. So ek gaan 'n string te betree. Ek gaan om te betree "Hannah." So betree "Hannah" iewers in die geheue. Ja. A-H. OK, so nou s3. En dit gaan om 'n ander te wees versoek om GetString. En so nou betree "Maria". Alles reg. En dan is daar 'n laaste versoek aan GetString, S4. So, ek weet nie. Hoe gaan ons saam met antidisestablishmentarianism. Betree sodat in die geheue. Ja. Dus net te doen "Rob." OK. So nou explain-- hoekom het jy hierdie ruimtes te verlaat? Hoekom het jy hierdie leeg ruimte hier, hier, en hier? Ja. So sien wanneer ek gaan druk s1-- so as ons het "Hannah" Running reg langs "Dean," hoe weet ons wanneer die string "Dean" eindig? So die druk van die string s1 mag hê net gedruk "DeanHannahMariaRob" As dit nie 'n clue het nie wanneer "Dean" eintlik eindig. Alles reg. So in die geheue van die manier waarop ons eintlik verteenwoordig hierdie einde van 'n string is met backslash nul. So hierdie ruimte is presies wat ons wou hê. Dit moet 'n backslash nul. Dit sal 'n backslash nul, en dit sal 'n backslash nul. En jy kan 'n fantastiese prys het vir die feit dat 'n perfekte vrywilliger. Neem 'n stress ball! OK. So hierdie karakter backslash nul is hoe ons dui die einde van 'n string. Dit is hoe 'n gegewe program toe wil 'n string te druk, dit is how-- onthou ons geleer die StrLen funksie verlede week? String lengte? Dit is hoe string lengte is in staat om bepaal hoe lank 'n string is. Dit hou net iterating oor die karakters totdat dit bevind dat die agteroorskuinsstreep nul karakter. So is die belangrikste ding om te besef oor die agteroorskuinsstreep nul karakter is dit verteenwoordig deur alle nulle in stukkies. So sien dat dit is duidelike uit die nul karakter. So het die nul karakter, as jy onthou in die voorbeeld wat hy aan die einde van lesing waar karakters die kaart aan- soos kapitaal A kaarte tot 65. Kleinletter a kaarte tot 97. Kleinletters b sou wees 98. So het die getal 0 kaarte aan- ek doen nie weet die bokant van my kop. 44 of 45. Iewers in die streek. So die karakter 0 is 'n werklike nommer. Maar backslash nul kaarte vir alle zero stukkies. So is daar 'n onderskeid tussen backslash nul, wat ons sal die nul terminator noem. Daar is 'n onderskeid tussen backslash nul en die karakter nul. Alles reg. So praat 'n bietjie meer oor snare. So dan sien ons hier dit is hoe dit sou in die geheue gelê. So hierdie idee van snare as 'n reeks van characters-- so die amptelike rekenaar sciency term vir ry is 'n skikking. So sal ons 'n string noem 'n verskeidenheid van die karakters. En daar is eintlik ander data tipes wat ons skikkings kan maak uit. So om hierdie motiveer, kyk na 'n voorbeeld. Ons sal dit ages0.c noem ek sal kopieer en plak ons ​​sjabloon. OK. So in hierdie program wat ons wil doen, is die ouderdom gryp drie studente in die kursus. So ons weet die int age-- en nou is ek gaan om te sê 0. So wil jy dalk age1 sê nie, maar vir doeleindes sal ons baie gou te sien, Ek sal sê int age0 gelyk GetInt. So dieselfde oproep tot GetInt dat ons het al met behulp ek gebeur nie word waarna gesê: "Gee my die ouderdom." Maar net dit versoek. En age1 gelyk GetInt. En int age2 gelyk GetInt. So, weer, drie studente nie, maar uiteindelik die veranderlike indekse is age0 deur age2. OK. So hierdie program sal alles doen wat ons wil met age0, age1 en age2, maar hierdie program uiteindelik werk vir drie studente. OK. So nou wat as ek wil vier studente? Wel, ek gaan hê om terug te gaan in my kode, verander die kommentaar, en nou het ons 'n int age3 gelyk GetInt. OK. So wat die probleem sien hier? Wat is die probleem met hierdie soort van die opstel van? Ja. Ja. So ons skep van 'n veranderlike vir elke student. Nou wat werk nie, maar uiteindelik wat, as Ek nou sê, "Ek wil die ouderdom van gryp agt studente of 16 studente of die egter baie studente van die honderde studente in CS50 of die duisende studente op die kampus of die biljoene mense in die wêreld? So uiteindelik is dit nie volhoubaar nie. Enige tyd wat jy sien jouself kopiëring en plak kode soos hierdie, moet jy die algemeen voel dat daar 'n beter manier. So dit is waar ons stel 'n verskeidenheid verklaring. So wanneer jy 'n verskeidenheid te verklaar, dit is wat die algemene formaat gaan lyk. Ons gaan die tipe sê. en dan gaan ons gee die naam van die skikking, net soos ons enige gegewe veranderlike te definieer. En dan uiteindelik ons ​​gebruik hierdie hakienotasie weer maar in 'n ander konteks van hoe ons dit gebruik vroeër. So hier lyk soos 'n normale veranderlike verklaring dat ons gesien het. Dus het ons int x semi-kolon gesien nie. Wel nou is ons dalk iets sien soos int x hakies 5. En om hierdie idee in die GetInt program wat ons have-- sodat ons kan implementeer dit in die dieselfde manier. Kom ons sê in CS ons geneig is om te gebruik N die aantal iets. So hier gaan ons stoor vier studente. En nou kan ons int ouderdom sê bracket n-- nie heeltemal kry dit yet-- om 'n verskeidenheid van vier studente te verklaar. So hoe dit sal lyk in geheue sal soortgelyk aan hierdie wees. Duidelik dat dit. En ons gaan iewers in memory-- Ek sal hierdie is daar sit. So iewers in die geheue. Een twee drie vier. Ons het vier heelgetalle in 'n ry vir hierdie verskeidenheid van vier heelgetalle. So, op die oomblik, wat is die grootte van een van hierdie bokse? Ja. Dit is vier grepe. Dit is 32 stukkies. So nou is dit anders van die skikking dat ons gesien vroeër, die verskeidenheid van karakters. In 'n string was elke boks net een byte, omdat 'n karakter is net een byte. Maar met 'n verskeidenheid van heelgetalle, elk boks het om vier grepe in orde om 'n hele heelgetal te pas. So dit is wat 'n verskeidenheid van vier SY sou lyk. En dan weer terug na die kode. Nou wil ons eintlik winkel heelgetalle in daardie skikking. So nou is dit 'n baie, baie, baie algemene patroon wat sal op 'n sekere punt geword spier-geheue. So int i gelyk 0. i minder as n. i plus plus. Ouderdom bracket i gelyk GetInt. So dit vir lus, hierdie formaat, moet jy baie gewoond te raak. So, dit is oor die algemeen hoe ons Itereer oor byna enige skikking. Nou sien hierdie soort van verduidelik waarom van die begin af ons het nie vir loops gaan vir int i gelyk 1, i minder as of gelyk aan 10. Die rede hiervoor is dat vanaf zero maak hierdie werk goed met skikkings. So skikkings is nul geïndekseer. As dit skikking is lengte 4, die indekse is 0 tot 3. So deur die eerste iterasie van hierdie lus ons gaan instelling ouderdom bracket 0 gelyk is aan 'n oproep om GetInt. So wat ek gebeur op die klawerbord te gaan. In die tweede slaag, is ons opstel age1 gelyk aan GetInt. Derde slaag, age2. Finale slaagsyfers age3. So as in die eerste pass van die lus Ek gee die nommer 4 op die sleutelbord, dan sal ons 'n 4 hier plaas. As daar op die tweede slaag ek in 50, sal ons 'n 50 hier te plaas. Op die derde pass ek dalk Tik negatiewe 1, negatiewe 1, en dan uiteindelik as ek kom 0-- en nou onthou dat dit was indeks drie. Nadat ons lus terug, i is gaan word geïnkrementeer tot 4. i is nie meer minder as N, wat is 4. En ons breek uit van die lus. So, wat sou verkeerd met dit? [Onhoorbaar]? GEHOOR: [onhoorbaar] Ja. So die skikking het net vier plekke, wat beteken as indekse 0 tot 3. So as dit die geval was, sou ek neem op die waarde 4 op 'n sekere punt. ouderdom bracket 4 sal instelling Wat ook al gebeur om hier te wees na wat ek te sê het, betree 6. Dit sal die opstel van hierdie tot 6. Maar ons weet nie wat is hier. Dit is nie die geheue wat ons gehad het toegang tot. So as jy onthou van die vorige lesing, hy druk van waardes van Zamyla en op 'n sekere punt wat hy hierdie segmentering getref fout. So jy sal waarskynlik sien baie segmentering foute as wat jy implementeer sommige van die probleem stelle. Maar dit is een van die maniere waarop jy kan 'n segmentering teëkom fout, wanneer jy begin om toegang tot geheue op maniere wat jy nie moet wees nie. So het ons nie toegang tot hierdie plek, en dit is 'n fout. So dit is beter. Nou is daar nog 'n klein probleem met hierdie kode. En dit is basies dat ons nog steeds vas op vier studente. Nou as ek wil agt studente gebruik, OK. Dit is nie dat 'n groot deal. Ek kan gaan in, verander die kommentaar te lewer, en verander n. Nou sal hierdie werk met agt studente. As ek dit op te stel en uit te voer , sal dit wys me-- dit sal versoek heelgetalle vir agt studente en dit sal net werk. Maar dit is nie die ideaal nodig om heropstel die program elke keer Ek wil die aantal studente verander dat ek wil hê dat die ouderdomme vir voer. So die finale verbetering op dit, soos ons sal sien here-- ons gaan na die aantal mense te vra. Hier het ons 'n aantal van die mense in die kamers of enige ouderdomme van mense in die kamer. Maar ons gaan na die nommer versoek van die mense in die kamer van die gebruiker. So, dit is presies dieselfde do-while lus dat ons voorheen gesien het. Dit is presies dieselfde do-while lus dat jy kan die implementering van die probleem stel. So lank as wat hulle is betree 'n N minder as 1, so daar het by minste een persoon in die kamer. So lank as wat hulle is betree 'n N minder as 1, dan gaan ons hou weer vra. Tik die aantal van die mense in die kamer. Nou, as ons die aantal van die mense in die room-- sodat ek daar ingaan wat is 200 mense in hierdie kamer. Dan hier gaan ons kom en verklaar 'n verskeidenheid van grootte 200. Ons verklaar verskeidenheid wat groot genoeg om 200 ouderdomme te hou. Afkom, is dit die lus vir dat jy sal baie gewoond is. So iterating oor hierdie skikking, toeken aan elke plek in daardie reeks 'n heelgetal, en dan uiteindelik hier is ons net om 'n voorbeeld van iterating oor daardie skikking, nie waardes toewys, maar om toegang waardes. So hier sien ons dat ons sê, 'n jaar van nou af, persoon% i sal% i jaar oud, waar die eerste% i is i plus 1. So ek is hierdie indeks veranderlike. En die tweede% i gaan die wees waarde gestoor in die eeue verskeidenheid plus 1. So hierdie plus 1 is net omdat ons sê om hierdie plus 1, ouderdomme i plus 1. Dit plus 1 is net omdat ons sê, 'n jaar van nou af die persoon sal hierdie ou te wees. So hoekom is dit i plus 1? Hoekom het ons 'n plus 1 is daar? Ja. Ja. So onthou skikkings is nul geïndekseer. So as ons druk dit uit vir iemand om net die uitset te lees, dan waarskynlik hulle iets wil sien soos iemand een persoon nommer een, sal wees 20 jaar oud. Persoon nommer twee sal wees 15 jaar oud. Hulle wil eerder nie sien persoon getal nul is 15 jaar oud. So dit die samestelling en net om te sien wat dit lyk like-- ruimte te skep. Maak ouderdomme saamstel. Hardloop ouderdomme. Ons sien aantal mense in die kamer. So ek sal sê daar is drie mense in die kamer. Ouderdom van persoon nommer een, kom ons sê 15, 20, 25. En nou sal ek sê 'n jaar uit nou sal hulle wees 16, 21, 26. Kom ons kyk wat hierdie werk met 'n N wat nie gelyk is aan 3. So as ek sê aantal mense is 5, een, twee, drie, twee, een, 'n jaar van nou af hulle sal wees twee, drie, vier, drie, twee jaar oud. So ek kon net so maklik N 10.000. Nou sal ek hier sit vir ' 'n rukkie aangaan ouderdomme, maar dit werk. So nou in die geheue iewers ons het 'n verskeidenheid van grootte 10.000, so uiteindelik 40000 grepe, want daar is vier grepe vir elk van die heelgetalle. So is daar 'n verskeidenheid van grootte 10.000 waar ons kan stoor die ouderdomme van daardie 10,000 mense. Alles reg. Vrae oor enige van hierdie? Ja. Wat gebeur as jy 'n negatiewe getal gegee het? Kom ons kyk wat gebeur. So in hierdie spesifieke case-- getal van die mense in die kamer, negatiewe een. Dit verwerp dat want hier het ons gebeur word die hantering van die feit dat as n minder as een gaan ons weer vra nie. As jy probeer om 'n verklaar verskeidenheid van negatiewe grootte, dit oor die algemeen nie werk nie. So kom ons probeer. Kom ons ignoreer alles waarde wat hulle insette vir N en net sê int ouderdomme negatiewe een. Kom ons kyk of dit stel, selfs. Ek is nie seker nie. Geen. So ouderdomme verklaar as 'n array met 'n negatiewe grootte. So by voorbaat erken dit 'n skikking kan nie wees van negatiewe grootte en verwerp dit. Nou, as ons nie kan hanteer hierdie do-while lus korrek, as ons nie die nagaan as n minder as 1-- Kom ons sê ons het net het dit nie op alle en in plaas daarvan het ons net gryp 'n heelgetal. Maak nie saak wat dit is heelgetal, ons verklaar 'n verskeidenheid van die grootte. So het die samesteller kan nie moontlik kla nou. As ek stel this-- sodat dit kan nie kla nie, want dit kan nie weet dat ek gaan 'n negatiewe getal betree, wat ongeldig kan wees. Vir al wat dit weet, kan ek Voer 'n positiewe getal, wat is volkome geldig. So ek dink as ek kom negatiewe 1 mense in die kamer, segmentering skuld. So, OK. So laat voeg dit terug net hou dit wat dit oorspronklik was. So maak ouderdomme. Nou as ek wil 'n probeer negatiewe age-- so laat sê daar is vyf mense in die kamer. Ouderdom van persoon nommer een negatief 4, persoon drie nul, persoon three-- OK. So hier, 'n jaar van nou af, persoon getal een sal negatiewe 3 jaar oud wees. Dus waarskynlik nie sin maak nie. Maar dit is net omdat soek na die kode al ons doen versoek GetInt. Nou, as ons gehad het die GetPositiveInt funksie of ons het net eenvoudig dit gedoen soort van dieselfde terwyl loop af daar, dan sou hierdie werk heeltemal fyn. Maar in hierdie spesifieke geval, ons doen net nie gebeur om te wees hantering negatiewe waardes. Enige ander vrae oor skikkings? OK. Dus het ons nou gesien skikkings. En ons gaan nodig is om te gebruik dit vir command-line argumente. So in die probleem stel two-- Ek weet baie van julle dalk nog werk op die probleem stel een nie, maar die probleem sit twee is kom. In gestel probleem twee, jy gaan om moet die hantering van snare, skikkings, en opdrag-lyn argumente. So, wat is command line argumente? Nou, kan jy hier onder 'n sien bietjie teaser vir presies wat gaan gebeur. Ons sien int main, inc argc, string argv hakies. So eerste laat ons probeer om te interpreteer wat dit is probeer om te sê. Nou, OK. So op die opdrag lyn wat jy moet wees gewoond raak aan 'n paar van hierdie opdragte nou, en jy het waarskynlik hardloop cd in die terminale voor. So as ons sê cd pset1, jy weet dat indien wees verander in die pset1 gids. Nou sien dat jy nog nooit geskryf 'n program soos hierdie voor. Elke program wat jy geskryf het, jy sou loop, sê, dot streep Mario, dot streep gulsig, en dan is dit kan jy gevra word vir insette. Nou, dit is nie wat verandering gids doen. Wanneer jy cd hardloop, beteken dit nie dan sê, wat directory wil jy cd in? In plaas daarvan, jy net sê, cd pset1 en is dit net gaan in die pset1 gids. So het ons insgelyks ander voorbeelde. maak hallo. Wanneer jy hardloop te maak, beteken dit nie dan sê, watter program wat jy wil om te maak? Jy sê net, by die command line te maak hallo. Skuif is nog 'n voorbeeld. Hierdie een ons beweeg die mario.c lêer een gids. So nou weet ons met hierdie voorbeeld ons is regtig verby twee argumente. Daar is mario.c as die eerste argument, en dot dot is die tweede argument. En dan wanneer jy hardloop, het jy sien dat baie lang opdrag line-- wat werklik lang opdrag gedruk op die command line. Sodat hierdie lang command-- is net 'n kort deel van dit, maar nou het ons drie opdrag-lyn argumente. Dot Dash nul, hello, en hello.c. So dit is opdrag-lyn argumente, argumente dat jy verby die command line sodat dit hoef nie gevra wanneer jy die program uitvoer. Dit sou frustrerend wees as wanneer jy gehardloop kletteren dit gesê het, "OK, wat program-- wat lêer is jy die opstel van? Hello.c. Wat sou jy vlae graag aan te gaan? Dash o. Waarvan sal jy hou die lêer genoem te word? hallo. Nee, jy net hardloop klang stamp o hallo hello.c. So om terug te kyk na hierdie. Nou argc-- argc is die argument tel. Dit is die nommer van die opdrag lyn argumente wat by die opdrag lyn. Wel, tegnies argv-- die v staan ​​vir vektor, wat beteken basies skikking. Maar jy kan ignoreer nie. Argv-- ons het string argv, so string argv hakies. So, dit is 'n ander vorm van hakies jy nie gesien het nie. So het ons gesien bracket notasie wanneer ons gesê het, soos, string s gelyk Zamyla. s bracket 0 toegang tot die karakter Z. Ons het ook gesien hakies wanneer Ons het int ouderdomme hakies 5. Dit verklaar 'n verskeidenheid van grootte 5. So hier is 'n weergawe van die hakies ons het nie gesien nie. So hierdie soort van string argv dat sou heeltemal vertroud wees dat dit net 'n string sou wees. Nou is die hakies dui dat dit 'n skikking. So string argv hakies middel dat argv is 'n verskeidenheid van snare. Nou tegnies 'n string is 'n verskeidenheid van die karakters. So, dit is nou 'n skikking van 'n verskeidenheid van die karakters. Maar dit is baie makliker om te dink oor dit as net 'n verskeidenheid van snare. So hoekom sou die hakies leeg wees? Soos, hoekom kan ons nie sê nie, bracket 5, bracket n? Ja. Ja. Ons weet nie hoeveel insette daar gaan wees. So as ons kyk na die klang byvoorbeeld Ons sê kletteren Dash o hallo hello.c. In hierdie spesifieke geval, is daar gebeur om drie command-line argumente. En so het die brackets-- ons sal sien in 'n tweede sou dit nie drie. Dit tegnies sou vier. Maar die hakies, sou ons sê, is daar drie. Maar nou, as ons kyk na beweging mario.c dot dot die hakies Ons wil twee in hulle te sit. En daar is 'n baie opdragte wat het 'n veranderlike aantal command line argumente. So, wat hierdie weergawe van die hakienotasie dui is dat argv is 'n verskeidenheid van snare. Maar ons weet nie hoeveel snare is in daardie skikking. En hoe weet ons dan hoe baie snare is in die skikking? Dit is die hele punt argc. argc vertel ons hoe lank argv is. So is die laaste ding in hou gedagte is dat, tegnies, die opdrag self tel as een van die opdrag-lyn argumente. So cd pset1, is daar twee opdrag-lyn argumente. Die program op sigself, cd, en dan die werklike argument deel van dit, pset1. Enige program wat jy tot dusver geskryf het het een opdrag-lyn argument-- dot gehad streep Mario. Dit is die enigste opdrag-lyn argument. So nou op soek na klang stamp o hallo hello.c. So, wat is argc? 4. So argc is 4. Klang, so argv bracket 0 is klang. argv bracket 1 is Dash 0. argv bracket 2 is hello, en argv bracket 3 is hello.c. OK, so vrae oor hierdie, en dan sal ons kyk na sommige programmatiese voorbeelde. OK. So sal ons 'n blik op hello3.c neem. So hierdie bekende uit moet een van die eerste voorbeelde c ons het waar ons sou net sê, hello wêreld nie, maar dit is nou meer algemeen. Ons is so hier sê hallo % s backslash N argv bracket 1. Notice-- so tot op hierdie punt, dit is wat my sjabloon lêer gelyk het. Ek het int main (void), en dan sou ek iets in die belangrikste funksie te doen. Nou in plaas, sodra ons begin handel met opdrag-lyn argumente, ons nodig het om 'n staat ander vorm van die belangrikste. So kyk na hello3 weer, die hoof gaan twee argumente neem now-- int argc, die aantal opdrag-lyn argumente, en string argv hakies, die werklike snare wat by die opdrag lyn. So ek gaan om dit te verander template om daardie feit te weerspieël. Nou wanneer jy skryf 'n program, as jy dit nie doen nie nodig om enige opdrag-lyn te neem argumente, dan net gebruik int main (void). Maar nou dat jy skryf opdrag-lyn argument programme, wat jy gaan om te doen vir die probleem stel two-- so nou dat jy ' programme wat nodig het om te neem opdrag-lyn argumente, wat jy nodig belangrikste van hierdie vorm om te hê. So here-- dit is die groot gebruik van die opdrag-lyn argument. So druk argv 1. OK so laat opstel en hardloop hierdie program. Maak hello3. Saamstel. Dot streep hello3. En kom ons sê, "Rob." Hallo Rob. As ek sê "hallo Maria," hallo Maria. Hallo Maria. Hannah nog sê, "hallo Maria, "want ek is nie niks met ons te doen argv 2. Argv 2 nou sou wees "Hannah." Argc sou wees 3. Wat gebeur as ek dit gedoen het? So hallo null. Hy raak kortliks op die feit dat tegnies, GetString kan null terugkeer nie, maar ons sal 'n te kry baie meer in wat null eintlik is. Maar neem dit as 'n saak van feit dat geen algemeen sleg. Ons het iets verkeerd as dit is die druk "hallo null." En die rede waarom ons het iets verkeerd is-- goed, toe ek gehardloop dot streep hello3, argc was 1. So dit beteken dat die lengte van argv was 1. As 'n skikking is lengte 1, die enigste geldige indeks is nul. En so hier argv 1 buite die omvang van hierdie skikking. Dit was soortgelyk aan voor toe ek probeer te slaan 6 buite die einde van die skikking. So ek probeer om toegang tot iets buite die argv tel, en ons kry null. So 'n beter weergawe van hierdie, 'n verbetering, uitdruklik nagaan argc. So as argc gelyk 2, wat beteken dat ons hardloop iets soos dot streep hello3 Rob. En dit sal druk "hallo Rob." As argc nie gelyk 2, dan is dit net gaan om te ignoreer alles wat jy het by die opdrag-lyn argument as opdrag-lyn argumente. Of as jy nie het nie sit nie, dit is net gaan om te ignoreer dit en net sê, "hallo julle." So die opstel van hierdie. Maak hello4. En loop hello4. Hardloop dit op hierdie manier, wat moet gedruk? "Hallo julle." Hallo julle. Wat van hello4 Rob? "Hallo Rob." En uiteindelik, hello Rob Maria is net "hallo Jy" weer omdat jy nie regtig ingaan iets wat hy verwag. Jy betree meer name as wat dit kon hanteer, so is dit net om gebreke Die Hello julle gedrag. So vrae oor hierdie? Of opdrag-lyn argumente? OK, so neem 'n blik op 'n paar voorbeelde van die gebruik van opdrag-lyn arguments-- eerste ons het argv Dash 1 dot c. So die kommentaar weggee wat hierdie program moet doen. Maar let now-- hierdie lus, hierdie wedstryde die presiese patroon Ek was voor sê. Ons gebeur net te wees gebruik van argc plaas van n. Nou argc is regtig die n. Dit is die lengte van die argv skikking. So is iterating oor die argv array-printf ing elke argv waarde. So as ek hierdie. Maak argv 1. Dit stel. Dot streep argv 1. Net hierdie hardloop, is dit afdrukke dot streep argv 1 sedert dit was die enigste opdrag-lyn argument-- die program naam. Daar sal altyd by least-- argc kan nie minder nie as een, aangesien daar sal altyd ten minste wees die program naam te hardloop. So argv 1 Rob sal argv 1 druk en dan op die nuwe lyn "Rob." So in die eerste iterasie van hierdie lus, i is 0. Argv 0 is die naam program. Dot streep argv 1. En dan argv 1 is my eerste opdrag-lyn argument, wat is Rob. Op hierdie punt, ons is gelyk aan argc. Ons breek uit van die lus en ons gedoen het. So sal dit werk vir 'n arbitrêre aantal opdrag-lyn argumente. Let daarop dat dit druk argv 0, argv 1, 2 argv, argv 3, 4 argv. En daar is geen argv 5. argc is gelyk aan 5. So op argc-- by i gelyk 5, ons breek uit van die lus. OK. So vrae oor wat voor ons kyk na 'n meer komplekse voorbeeld? So argv 2. Alles reg. So ons is nog steeds druk die opdrag-lyn argumente. Maar nou sien ons het 'n geneste lus. So, wat is dit? So het die eerste rondte doen presies wat dit tevore. Ons is nog steeds herhaling oor elke opdrag-lyn argument, maar nou die tweede loop-- ons het ook iets soos hierdie gesien voor. Toe hy iterating oor Zamyla uit te druk Z-A-M-Y-L-A. So hierdie tweede rondte vir Int J gelyk 0, n gelyk StrLen van argv bracket i. So laat se eerste dink vir the-- laat loop deur. Kom ons dink wat die rekenaar sou doen as ek gehardloop hierdie program as net dot streep argv Dash 2. So as ek gehardloop hierdie kode, dan argc gaan gelyk aan 1 te wees. En string argv-- daar is net gaan een indeks in argv, en wat gaan gelyke dot wees streep argv 2-- die program naam. OK, so nou is ek gelyk 0, i minder as 1, i plus plus vir Int J gelyk 0, N gelyk StrLen van argv bracket 0, so in die eerste iterasie van hierdie lus. argv bracket 0 is dot streep argv 2. So, wat is die lengte van die string? Wel, dot streep A-R-G-V Dash 2. So StrLen van wat sal wees 8. So j gelyk 0, n is gelyk aan 8. Solank as wat j is minder as 8, j ++. En met die dat ons gaan wees druk van 'n enkele karakter, wat is argv bracket i hakies j. Dus is die enigste i is nul. Ons het nog net een opdrag-lyn argument. In daardie eerste iterasie van die lus, ons is gaan druk wees argv bracket 0 bracket 0. En dan j gaan inkrementeer. En ons gaan druk argv bracket 0 bracket 1. En dan argv bracket 0 bracket 2. So dit is ons eerste ontmoeting van multi-dimensionele skikkings. Vroeër onthou dat ek gesê het dat argv tegnies 'n verskeidenheid van skikkings van karakters. So hier as ek sê iets soos string s gelyk argv bracket i, en dan het ek gesê s bracket j, hierdie sou wees vervul dieselfde ding. Nou, jy het bracket j voorheen gesien s. Dit is net toegang tot die j-de karakter van hierdie string. So met hierdie, is ons om die j-de karakter van die i-de argv. So wat moet hierdie uiteindelik uitset? Maak argv 2. Dit stel. Dot streep argv 2. "Rob Maria Hanna," en gee ons 'n paar kamer. So sien ons dat dit uitdruk dot op sy eie lyn en slash op sy eie lyn en 'n op sy eie lyn. Dit is uit te druk elke individuele karakter van elke opdrag-lyn argument. En dan tussen hulle, as gevolg van hierdie nuwe reël ons hier druk af, in tussen hulle dit 'n nuwe lyn sal druk. So, dit is soortgelyk aan die vorige argv Dash 1, wat elke gedrukte opdrag-lyn argument, maar nou is ons druk die opdrag-lyn argumente en dan iterating deur elke karakter van elke opdrag-lyn argument om hierdie produksie te kry. OK? So vrae oor hierdie? Een ding om daarop te let dat opdrag-lyn arguments-- sodat hulle van mekaar geskei deur spasies as sou jy natuurlik verwag hulle moet wees. So 'n string kan spasies in dit. Dit is nie super belangrik, maar as ek wou die derde opdrag-lyn argument om 'n ruimte te hê in dit, dan sal ek kan iets soos hierdie te sê. OK? So dit nou nog net drie opdrag-lyn arguments-- goed 4. Dot streep argv Dash 2, Rob, Maria, en Hannah Bloomberg. OK. Vrae oor hierdie? Daar is niks spesiaals oor die spasie karakter. Dit gebeur net te wees dat die opdrag-lyn behandel die spasie karakter hoe jy skei elke argument. Alles reg. So dan Probleem stel two-- jy gaan wees op soek na die geheim-sleutel kriptografie. So, soortgelyk aan dié voorbeeld ons gesien het van A Christmas Story, jy gaan implementeer sommige algoritmes dat, gegewe 'n boodskap, jy gaan in staat wees om om die boodskap te enkripteer dat slegs iemand met daardie geheime sleutel, met daardie dekodeerder ring, moet in staat wees om te decrypt. Sodat is die standaard uitgawe. Jy gaan implementeer twee verskillende weergawes. As jy toevallig 'n blik by die hacker edition-- nou, ons gaan om te gee jy 'n string soos hierdie, wat verteenwoordig 'n geënkripteerde wagwoord. So is jou doel is om uit te vind wat die Ontcijferde wagwoord is. Nou is dit eintlik hoe wagwoorde word gestoor in 'n baie van rekenaars, en dit slaan net hierdie ewekansige string karakters. Jy het om uit te vind hoe om te kry Van hierdie ewekansige string karakters wat die oorspronklike wagwoord was. En uiteindelik, na hierdie probleem stel, moet jy in staat wees om te verstaan ​​wat dit beteken. So sal jy leer hoe om te decrypt hierdie soort van ewekansige string. Net so, as jy onthou van week 0, kan jy hierdie URL gesien het. En jy moet in staat wees om decrypt dit uiteindelik. Jy kan nie gelukkig wees as jy decrypt dit en klik op die skakel. Alles reg. Dit is dit vir vandag. So jy sien volgende week! [Elektroniese musiek Speel]