[Muzika] DAVID Malan: Të gjithë të drejtë. Kjo është CS50, dhe kjo është fundi i javës së 2. Unë jam aq i keq unë nuk mund të jetë atje me ju të gjithë sot, por ju jeni në duar shumë të mirë. Më lejoni të prezantoj Vet Rob Bowden CS50 së. Rob Bowden: Dhe sigurisht, atëherë ne kemi për të bërë fun e faktit se ai na dërgoi një vertikale video dhe tregojnë këtë. [VIDEO rishikim] [Muzika] [Gjurmët] Video -Kjo nuk e bëri duhet të shikoni në këtë mënyrë. Ajo mund të ishte parandaluar. Thuaj jo të videos vertikale. Video -Vertical ndodh kur ju mbani aparatin tuaj rrugën e gabuar. Video juaj do të përfundojë në kërkim si mut. - [Hungërimë] -Ka Gjithnjë e më shumë njerëz të varur për të bërë videos vertikale çdo ditë. Kjo nuk është plas ose asgjë, por kjo është ende e vërtetë e keqe. Ka dy lloje të ndryshme të njerëz të cilët janë të prekur me VVS. Grupi i parë trajton Video ata gjuaj si foto. Ata nuk do të thotë ndonjë të keqe. Ata thjesht nuk e kuptojnë se ndërsa ju mund të kthehet në një foto, ju nuk mund të vërtetë të kthehet në një video të. [CRASH] - [MONKEY TINGUJT] -The Grup tjetër është populli të cilët nuk i japin një [sinjal bip]. -Vertical Video Sindromi është e rrezikshme. Filma kanë qenë gjithmonë horizontale. Televizionet janë horizontale. Ekranet kompjuterike janë horizontale. Sytë e njerëzve janë horizontale. Ne nuk janë ndërtuar për watch videos vertikale. -I Dashuri videos vertikale. -Nobody Kujdeset për ty. -Nëse Ky problem të e majta i pakontrolluar, edhe ju do të fillojë duke treguar katër videos në të njëjtën kohë vetëm për të shpëtuar Bandwidth. Video -Letterboxed vertikale do të jetë e madhësisë së një pullë postare. -Dhe Ajo do të përhapet kudo. Film ekranet kanë qenë gjithmonë horizontale. Në qoftë se video vertikale të bëhet pranuar, kinematë do të duhet të jetë i gjatë dhe i dobët. -Dhe Të gjitha kinematë do duhet të merrni shkatërruar dhe rindërtuar. Dhe me kohën që ata ishin rindërtuar, Mila Kunis do të jetë i vjetër dhe i shëmtuar. -Birds Do të rrëzimit në to dhe të vdesin. -We'll Të gjithë të merrni ashpër qafat nga shikuar deri. -Dhe Askush nuk do të ulen në radhën e parë kurrë përsëri. -George Lucas do të ri-lirimin Star Luftërat again-- edicionin e dobët. -Unë Nuk ishte me të vërtetë në gjendje për të të treguar histori që unë të kërkuar për të treguar. Ky ishte një shans i madh për mua të eksperimentojnë me një teknologji të re. -You're Një hov. -Çdo Kohë një pajisje të lëvizshme është përdorur për rekord Video, tundimi është atje. Vetëm Thuaj Jo. Thuaj jo të George Lucas. Thuaj jo të vjetër Mila Kunis. Thuaj jo të videos vertikale. -Dhe Në qoftë se ju shihni dikë duke bërë atë, të themi, "ju nuk jeni të shtënat atë bedel drejtë!" [Muzika] [END rishikim] [Duartrokitje] [AUDIO OUT] Rob Bowden: --simple formë e kriptografisë, e cila është në thelb encryption dhe decryption e mesazheve të fshehta. Pra, këtu ne kemi një lodër shumë të thjeshtë. Dhe ideja është unaza e jashtme rrotullohet rreth unazë e brendshme. Dhe ju mund të shihni, ndoshta nëse unë zmadhuar në, that-- është e vështirë për të parë. Por, si, numri 1-- mirë, që lëviznin. Numri 1 harta në letër X, numri 2 harta në letër J. tepër e vështirë mos kaloni përpara. Letër 2 harta të J. Numri 3 harta të D. Pra, me këtë rrjet ju mund të jepni dikush një mesazh 1, 2, 3. Për ndonjë arsye ju dua të them atyre XJD. Por ju mund të jepni atyre disa Mesazhi i numrave, dhe për aq kohë sa ata e kanë këtë unazë, ata mund të decrypt atë që ju jeni duke u përpjekur për të thënë. Kështu që ju mund të keni parë këtë shembull i veçantë i kriptografisë para nëse rreth sezonit të Krishtlindjeve ju keni shikuar A Christmas Story. Në qoftë se ju kurrë nuk kam parë ajo para, atëherë vetëm kthehet në TBS në fjalë për fjalë çdo kohë në prag të Krishtlindjeve, sepse ata vetëm tregojnë atë përsëri për të mbështetur për të kthyer prapa për të mbështetur tërë ditën. Dhe video rëndësishme është kjo. [VIDEO rishikim] -Të Jetë të njohur për të gjithë dhe i ndryshëm se Ralph Parker me anë të kësaj emërua anëtar i i Vogël Orphan Annie Rrethi Secret dhe ka të drejtë të të gjitha nderimet dhe përfitimet ndodhin me to. Nënshkruar Pak Orphan Annie. Bashkënënshkruara Pierre Andre në bojë! Nderon dhe përfitimet tashmë në moshën nëntë! [Yelling nga radio] -Eja. Le të merrni më me të. Unë nuk kam nevojë All That Jazz për kontrabandistët dhe piratët. Natë -Listen nesër me aventurë përmbyllës i Pirate Ship Zi. Tani, është koha për Mesazhi sekret Annie për ju anëtarë të rrethit Sekret. Mos harroni fëmijët, vetëm anëtarët e Rrethit Annie Sekret mund të deshifroj mesazhin e fshehtë Annie. Mos harroni, Annie është në varësi të ju. Set këmbët tuaja në B2. Këtu është mesazhi. 12. 11. 2. -Unë Jam në takimin tim të parë të fshehtë. -25. 14. 11. 18. 16. -Oh, Pierre është në sonte zë të madh. Unë mund të them se sonte Mesazhi ishte me të vërtetë e rëndësishme. -3. 25. Ky është një mesazh nga Annie vetë. Mbani mend, mos i thoni askujt. Sekonda më -Five më vonë, unë jam në vetmi dhomë në shtëpinë ku një djalë i nëntë mund të ulen në jetën private dhe deshifroj. Aha! B! Unë shkova për të ardhshëm. E. Fjala e parë është "të jetë." S. Ajo po vinte më e lehtë tani. U. 25. Kjo është R. Eja në, Ralphie! Unë e kam Gotta shkoj! -I'll Të jetë e drejtë poshtë, Ma! Kampion Gee. T. O. "Të jetë i sigurt për të" - jetë i sigurt për çfarë? Cili ishte pak Orphan Annie duke u përpjekur për të thënë? Jetë i sigurt për çfarë? -Randy Ka marrë për të shkuar! Ju lutem do të dalë? -Të Gjitha të drejtë, nëna! Unë do të jetë jashtë e drejtë! Unë kam qenë duke iu afruar tani. Tensioni ishte e tmerrshme. Çfarë ishte ajo? Fati i planetit mund të ul receptorin e telefonit në bilancin! -Ralphie, Randy e mori për të shkuar! -I'll Të jetë e drejtë jashtë, për të qarë me zë të lartë! Pothuajse atje! Gishtat e mi fluturoi. Mendja ime ishte një kurth çeliku. Çdo pore vibrated. Ajo ishte pothuajse e qartë! Po. Po. Po. Po. Të jetë i sigurt për të pirë Ovaltine tuaj. Ovaltine? Një tregtar i mjerë? Bir i një kurvë. [END rishikim] Rob Bowden: Pra, kjo është se si Ovaltine lidhet me cryptography. Në thelb CS50 vetëm reklamohen Ovaltine, kështu që ne mund të të jetë një tregtar i pavlerë për Ovaltine. Në rregull. Deri tani shkenca kompjuterike aktual. Mos harroni të hënën djegim zhyten më thellë në vargje. Pra, ne kemi qenë që kanë të bëjnë me string "Zamyla." Dhe ne kemi qenë të njohur fakti që ne mund të trajtojë "Zamyla" si një sekuencë e karaktereve. Dhe mos harroni se ne mësuam shënimi kllapa. Pra, nëse kjo u ruajtur në një varg "s", atëherë nëse kemi thënë s kllapa 0, që do të tregojnë Z. kapitalit letër Dhe nëse ne tha s kllapa 1, që do të tregonte vogle e parë që një, dhe kështu me radhë deri në s parantezë 5, e cila do të tregonte se fundit. Tani mos harroni se Gjatësia e kësaj vargut është 6, por indekset në vargun janë 0 deri 5, Z përmes që të zgjasë një. Pra, kjo tani i përshtatet në një foto të madhe e kujtesën e kompjuterit tuaj, RAM tuaj. Pra, diku programi që ju jeni duke kompjuterin tuaj duhet të mbani mend Zamyla diku në kujtesë. Kështu që mund të unë kam një vullnetar? Po të lutem. Dhe çfarë është emri juaj? DEAN: Dean. Rob Bowden: Dean? Gëzohem që u njohëm, Dekani. Pra, të vijë këtu, dhe ne do të kemi ju tërheq në paraqitjen tonë të bukur mrekullueshëm të kujtesës. Tani unë doja të mendoj për kujtesës si një rrip të gjatë të bytes, por vetëm për qëllime të ekranit ne do të vetëm të bëjë majta në të djathtë, lart poshtë. NE RREGULL? Kështu që unë jam duke shkuar për të treguar një program-- Getstrings.c. Dhe kështu e gjithë kjo program është duke bërë është duke kërkuar katër vargjet nga përdoruesit me GetString dhe pastaj shtypje çfarëdo që string parë hyri ishte. Ne jemi duke injoruar dy në katër. NE RREGULL. Kështu që këtu now-- kur I pari s1 kërkesë. Pra, ju jeni kompjuter. Dhe ju po zbatojnë getString. Kështu që ju të kërkoni një varg nga mua, dhe unë them, OK, Dekani. Jepni string "Dean". Pra, diku në kujtesën ju duhet të mbani mend "Dean". Kështu shkruajnë atë në kujtesë diku. Përsosur. NE RREGULL. Pra, tani ne kemi s2. Dhe s2 do të jetë një kërkesë për getString. Kështu që unë jam duke shkuar për të hyrë në një varg. Unë jam duke shkuar për të hyrë "Ana". Andaj, hyni "Anën" diku në kujtesë. Po. Një-H. OK, kështu që tani S3. Dhe kjo do të jetë një tjetër kërkojnë për getString. Dhe kështu që tani të hyjë "Maria". Në rregull. Dhe pastaj nuk ka një të kaluar Kërkesa për getString, s4. Pra, unë nuk e di. Si për ne do të shkojmë me antidisestablishmentarianism. Andaj, hyni që në kujtesë. Po. Pra, vetëm të bëjë "Rob." NE RREGULL. Deri tani explain-- pse e bëri keni lënë këto hapësira? Pse keni këtë bosh hapësirë ​​këtu, këtu, dhe deri këtu? Po. Pra, vini re, kur unë shkoj për të shtypur s1-- kështu që nëse ne kishte "Hannah" running të drejtë deri pranë "Dean" si mund ta dimë kur string "Dean" përfundon? Pra, shtypjen s1 string mund të ketë vetëm shtypura "DeanHannahMariaRob" në qoftë se ajo nuk ka ndonjë çelës e kur "Dean" në të vërtetë përfundon. Në rregull. Pra, në kujtesën mënyrën se si ne fakt përfaqësojë këtë fund të një varg është me backslash zero. Pra, kjo hapësirë ​​është pikërisht ajo që kemi dashur. Ajo duhet të jetë një backslash zero. Kjo do të jetë një backslash zero, dhe kjo do të jetë një backslash zero. Dhe ju mund të ketë një çmim të pabesueshëm për të qenë një vullnetar i përsosur. Merrni një top stresi! NE RREGULL. Pra, kjo backslash karakter zero është si ne tregojnë fundin e një varg. Është mënyra se si kur ndonjë program i dhënë dëshiron për të shkruar një varg, kjo është how-- mend kemi mësuar funksioni strlen javën e kaluar? Gjatësia String? Është mënyra se si gjatësia string është në gjendje të përcaktuar se sa kohë një varg është. Vetëm ajo mban iterating mbi personazhet deri sa gjen backslash karakterin zero. Pra, gjëja e rëndësishme të kuptohet rreth karakterit backslash zero është ajo e përfaqësuar nga të gjithë zero në bit. Pra, vini re se ky është i veçantë nga karakteri zero. Pra, karakteri zero, në qoftë se ju kujtohet në shembullin që dha në fund e leksionit ku karakteret hartë to-- si kryeqyteti A harta në 65. Shkronja jokapitale një harta të 97. Vogle b do të jetë 98. Kështu që numri 0 hartat to-- unë nuk e bëj e di pjesa e sipërme e kokës sime. 44 ose 45. Diku në atë rajon. Pra karakteri 0 është numri aktual. Por zero backslash harta për të gjitha bit zero. Pra, ka një dallim midis backslash zero, të cilat ne do të thërrasë The Terminator null. Ka një dallim në mes backslash zero dhe karakteri zero. Në rregull. Pra, flasim pak më shumë për vargjet. Pra, atëherë ne shohim këtu kjo është se si ajo do të jenë të përcaktuara në kujtesë. Pra, kjo ide e strings si një sekuencë i characters-- kështu që kompjuteri zyrtar Termi sciency për rend është një koleksion. Pra, ne do të thërrasë një varg një grup të karaktereve. Dhe nuk janë në fakt të dhëna të tjera Llojet që ne mund të bëjë vargjeve nga. Pra, për të motivuar këtë, shikojmë një shembull. Ne do të thërrasë atë ages0.c unë do kopjoni dhe ngjisni template tonë. NE RREGULL. Pra, në këtë program që ne doni të bëni është të rrëmbyer mosha e tre studentë në kurs. Pra, ne e dimë int age-- dhe tani unë jam duke shkuar për të thënë 0. Kështu që ju mund të dëshironi të thoni age1, por për qëllime ne do të shohim shumë shpejt, Unë do të them int age0 barabartë GetInt. Pra, të njëjtën thirrje për GetInt që ne kemi qenë duke përdorur I mos ndodhë që të jetë bërë duke thënë: "Ma jep moshën." Por vetëm kërkon atë. Dhe age1 barabartë GetInt. Dhe int age2 barabartë GetInt. Pra, përsëri, tre studentë, por në fund të fundit indekset e ndryshueshme janë age0 përmes age2. NE RREGULL. Pra, ky program do të bëjë çdo gjë ne duam me age0, age1, dhe age2, por ky program në fund të fundit punon për tre studentë. NE RREGULL. Deri tani, çfarë nëse unë dua katër studentë? E pra, unë jam i do të ketë për të shkuar mbrapa në kodin tim, të ndryshuar komentin, dhe tani ne kemi një int age3 barabartë GetInt. NE RREGULL. Kështu që sheh problem këtu? Cili është problemi me këtë lloj të setup? Po. Po. Pra, ne jemi duke krijuar një variabël për çdo student. Tani që punon, por në fund të fundit, çfarë nëse unë tani thonë: "Unë dua të kap moshën e Tetë studentë ose 16 studentë ose megjithatë shumë studentë të qindra studentë në CS50 apo mijëra studentë në kampus ose miliarda njerëz në botë? Pra, në fund të fundit kjo nuk është e qëndrueshme. Çdo herë që ju shihni veten kopjimit dhe kodi pasting si kjo, ju duhet në përgjithësi ndjehen që ka një mënyrë të mirë. Pra, kjo është ajo ku ne kemi prezantuar një deklaratë array. Pra, kur ju të deklarojë një grup, kjo është ajo që format përgjithshme do të duken si. Ne jemi duke shkuar për të thënë llojin. dhe pastaj ne do të jepni emrin e atij grup, ashtu si ne define çdo ndryshore të dhënë. Dhe pastaj në fund ne jemi duke përdorur ky simbol grupim përsëri por në një kontekst të ndryshëm nga si ne kemi qenë duke e përdorur atë më parë. Kështu që këtu kjo duket si një normale Deklarata e ndryshueshme që ne kemi parë. Pra, ne kemi parë int x pikëpresje para. E pra tani ne mund të shohim diçka si int x kllapa 5. Dhe duke i vënë këtë ide në Programi GetInt që ne have-- kështu që ne mund të zbatojë kjo në të njëjtën mënyrë. Le të thonë se në SHC ne priren të përdorin n si numri i diçka. Pra, këtu ne jemi duke shkuar për të ruajë katër studentë. Dhe tani ne mund të themi moshën int kllapa nuk n-- mjaft të merrni atë yet-- për të deklaruar një grup prej katër nxënësve. Pra, si do të duket kjo në kujtim do të jetë i ngjashëm me këtë. Qartë këtë. Dhe ne do të kemi diku në memory-- Unë do të vënë këtë deri atje. Pra, diku në kujtesë. Një dy tre katër. Ne kemi katër integers në një rresht për këtë grup prej katër integers. Pra, aktualisht, çfarë është Madhësia e një prej këtyre kutive? Po. Është katër bytes. Është 32 bit. Deri tani kjo është e ndryshme nga grup që kemi pa më parë, grup të karaktereve. Në një varg çdo kuti ishte vetëm një bajt, sepse një karakter është vetëm një bajt. Por me një grup të numrat e plotë, secili kuti duhet të jetë katër bytes në mënyrë për të përshtaten një numër të plotë të tërë. Pra, kjo është ajo që një grup i Katër Ints do të duken si. Dhe pastaj përsëri në kod. Tani ne duam që në fakt dyqan integers në atë rrjet. Deri tani kjo është një shumë, shumë, shumë model të përbashkët që do të në disa pika të bëhet kujtesës muskujve. Pra, int i barabartë me 0. Unë pak se n. Unë plus plus. Mosha kllapa i barabartë GetInt. Pra, kjo për lak, ky format, ju duhet të merrni shumë përdoret për të. Pra, kjo është në përgjithësi se si ne do të iterate mbi pothuajse çdo grup. Tani vini re këtë lloj të shpjegon pse nga fillimi ne nuk kemi për sythe shkon për int i është e barabartë me 1, i pak se ose te barabarte me 10. Arsyeja është se duke filluar nga zero bën këtë punë edhe me vargjeve. Pra vargjeve janë zero indeksuar. Nëse ky grup është i gjatësisë 4, treguesit janë 0 deri 3. Pra, me anë të e para përsëritje e këtë për lak ne do të jetë caktimi i moshës kllapa 0 barabartë me një thirrje për GetInt. Kështu që çdo gjë që unë ndodhi për të hyrë në tastierë. Në kalimin e dytë, ne jemi vendosjen age1 barabartë me GetInt. Kalojë treti, age2. Age3 përfundimtar kalojë. Pra, nëse në kalimin e parë të lak I shkruani numrin 4 në tastierë, atëherë ne do të futur një 4 këtu. Në qoftë se në kalimin e dytë unë të hyjë 50, ne do të vënë një 50 këtu. Në kalimin e tretë unë mund hyjnë negativ 1, 1 negativ, dhe pastaj më në fund në qoftë se unë të hyjë 0-- dhe tani mbani mend se kjo ishte indeks tre. Pasi kemi loop shpinë, i është do të incremented 4. i nuk është më pak se n, i cili është 4. Dhe ne pushim nga lak. Pra, çfarë do të jetë i gabuar me këtë? [Padëgjueshme]? Audienca: [padëgjueshme] Po. Pra, array ka vetëm katër vende, që do të thotë si indekse 0 deri 3. Pra, nëse ky ishte rasti, unë do të të marrë në vlerën 4 në një pikë. moshë kllapa 4 do të jetë caktimi çfarëdo që të ndodhë të jetë mbi këtu për atë që unë duhet të them, të hyjë 6. Kjo do të jetë caktimi kjo në 6. Por ne nuk e dimë se çfarë është mbi këtu. Kjo nuk është kujtim që kemi pasur qasje në. Pra, nëse ju kujtohet nga ligjërata mëparshme, ai u shtypjen nga vlerat e Zamyla dhe në një moment ai e goditi këtë segmentimit faji. Pra, ju ndoshta do të shohim shumë gabimet segmentimit si ju të zbatojë disa nga grupe problemit. Por kjo është një nga mënyrat në të cilat ju mund të hasni një ndarje faj, kur ju filloni qasjes kujtim në mënyra që ju nuk duhet të jetë. Pra, ne nuk kemi qasje në ky vend dhe kjo është një bug. Pra, kjo është më e mirë. Tani ka ende një të vogël çështje me këtë kod. Dhe kjo është në thelb se ne jemi ende mbërthyer në katër studentë. Tani në qoftë se unë dua të përdorni tetë studentë, OK. Nuk është se një punë e madhe. Unë mund të shkoj në, të ndryshuar komentojnë, dhe për të ndryshuar n. Tani kjo do të punojë me tetë nxënës. Nëse unë përpilojnë këtë dhe të kandidojë kjo, ajo do të tregojë me-- ajo do të kërkojë integers për tetë studentët dhe ajo vetëm do të punojnë. Por kjo është më pak se ideale për të duhet të të përpiluar programin çdo herë të vetme Unë dua për të ndryshuar numrin e studentëve që unë dua të hyj moshat për. Pra, përmirësimi i fundit në kjo, siç do të shohim here-- ne jemi do të kërkojë numrin e njerëzve. Këtu ne kemi një numër e njerëzve në dhomat ose ndonjë moshat e njerëzve në dhomë. Por, ne jemi duke shkuar për të kërkuar numrin e njerëzve në dhomë nga përdoruesi. Pra, kjo është e saktë njëjtë për ta bërë, ndërsa lak që ne kemi parë më parë. Është e njëjta saktë për ta bërë, ndërsa loop që ju mund të zbatimit në grup problemit. Pra, për aq kohë sa ata janë hyrjen një n më pak se 1, kështu që nuk e mori të jetë në paktën një person në dhomë. Për sa kohë që ata janë hyrjen një n më pak se 1, atëherë ne jemi duke shkuar për të mbajtur pyetur përsëri. Ju lutem shkruani numrin e njerëzve në dhomë. Tani, pasi ne kemi numrin e njerëzve në room-- kështu që unë mund të hyj se nuk janë 200 njerëz në këtë dhomë. Atëherë këtu poshtë ne jemi duke shkuar për të ardhur dhe të deklarojë një grup të madhësisë 200. Ne jemi deklaruar array që është mjaft e madhe për të mbajtur 200 moshave. Vjen poshtë, kjo është për lak që ju do të merrni shumë përdoret për të. Pra iterating mbi këtë grup, caktimin e në çdo vend në atë grup nje numer i plote dhe pastaj në fund të fundit këtu ne jemi vetëm duke marrë një shembull të iterating mbi atë grup, për të mos caktojë vlerat, por për të hyrë në vlerat. Pra, këtu ne shohim se ne janë duke thënë, një vit nga tani, Personi% unë do të jetë% i vjeç, ku i pari% i është i plus 1. Pra unë është ky indeks variabël. Dhe% i dytë do të jetë Vlera e ruajtur në moshat rrjet plus 1. Pra, kjo plus 1 është vetëm për shkak se ne jemi saying-- këtë plus 1, mosha i plus 1. Kjo plus 1 është vetëm për shkak se ne jemi duke thënë: një vit nga tani personi do të jetë ky i vjetër. Pra, pse është ky i plus 1? Pse ne kemi një plus 1 atje? Po. Po. Pra mbani mend vargjeve janë zero indeksuar. Pra, nëse ne jemi shtypjen këtë për dikush që vetëm të lexuar prodhimit, atëherë ndoshta ata duan të shohin diçka si person i një personi, numër një, do të jetë 20 vjeç. Personi numër dy do të jetë 15 vjeç. Ata më mirë të mos shoh njeri numri zero është 15 vjeç. Pra hartimin kjo dhe vetëm duke parë çfarë kjo duket like-- Krijo një hapësirë. Bëni të moshës harton. Drejtimin moshave. Ne e shohim numrin e njerëzve në dhomë. Kështu që unë do të them ka tre persona në dhomë. Mosha e personit numër një, le të themi 15, 20, 25. Dhe tani unë do të them një vit nga tani ata do të jenë 16, 21, 26. Le të shohim se kjo punon me n një që nuk është e barabartë me 3. Pra, nëse unë them numri i njerëzve është 5, një, dy, tre, dy, një, një vit nga tani ata do të jenë dy, tre, katër, tre, dy vjeç. Kështu që unë mund vetëm si lehtë e kanë n të jetë 10.000. Tani unë do të jetë i ulur këtu për krejt një gjatë hyrjes moshat, por kjo funksionon. Deri tani në kujtim diku ne kanë një rrjet të madhësisë 10.000, kështu që në fund të fundit 40,000 bytes, sepse ka katër bytes për secilin prej këtyre numrave të plotë. Pra, ka një grup i Madhësia e 10.000 ku ne mund të dyqan moshat e atyre 10.000 njerëz. Në rregull. Pyetjet në lidhje me ndonjë nga këto? Po. Çfarë ndodh nëse ju dha një numër negativ? Le të shohim se çfarë ndodh. Pra, në këtë numër të veçantë case-- e njerëzve në dhomë, një negativ. Ai hodhi poshtë atë, sepse këtu kemi të ndodhë të trajtimit faktin se nëse n është më pak se një ne jemi duke shkuar për të pyetur përsëri. Nëse ju provoni për të deklaruar një grup të madhësisë negative, ajo në përgjithësi nuk punon. Pra, le të përpiqemi. Le të injorojë çfarëdo Vlera ato të dhëna për n dhe vetëm thonë moshës int një negativ. Le të shohim nëse ajo madje harton. Une nuk jam i sigurt. Jo. Pra moshave është shpallur si një grup me një madhësi negative. Pra upfront ajo njeh një koleksion nuk mund të të jetë e madhësisë negative dhe e refuzon atë. Tani, në qoftë se ne nuk e ka trajtuar këtë lak për ta bërë, ndërsa në mënyrë korrekte, nëse ne nuk u kontrolluar nëse n është më pak se 1-- Le të themi se vetëm nuk e kanë këtë në të gjitha dhe në vend të kësaj ne vetëm kap një numër të plotë. Pa marrë parasysh atë që është numër i plotë, ne deklarojmë një grup të kësaj madhësie. Pra, përpiluesit nuk mund të ndoshta ankohen tani. Nëse unë përpilojnë this-- kështu që nuk mund të ankohen, për shkak se ajo nuk mund të dini se unë jam do të hyjë një numër negativ, që mund të jetë i pavlefshëm. Për të gjithë ai e di, unë mund të futni një numër pozitiv, e cila është krejtësisht e vlefshme. Kështu që unë imagjinoni nëse unë të hyjë negative 1 njerëz në dhomë, Segmentimi faj. Pra, OK. Pra, le të shtoni këtë përsëri vetëm mbajtur atë çfarë ishte fillimisht. Pra, të bëjë moshave. Tani në qoftë se unë dua të provoni një negativ age-- Pra, le të thonë se ka pesë njerëz në dhomë. Mosha e personit numër një është negative 4, personi tre është zero, personi i trete OK. Kështu që këtu, një vit nga tani, numri personi njëri do të jetë negativ 3 vjeç. Pra, ndoshta nuk ka kuptim. Por kjo është vetëm për shkak se në kërkim në kodin gjithë ne jemi duke bërë po kërkon GetInt. Tani, nëse do të kishim kishte Funksioni GetPositiveInt ose kishim bërë thjesht kjo lloj i njëjtë lak, ndërsa atje poshtë, atëherë kjo do të punojnë të përkryer gjobë. Por në këtë të veçantë rast, ne thjesht nuk ndodh që të jetë trajtimin vlera negative. Çdo pyetje të tjera rreth vargjeve? NE RREGULL. Pra, ne kemi parë tani vargjeve. Dhe ne jemi duke shkuar për të duhet të përdorni kjo për argumente command-line. Pra, në problemin vendosur two-- Unë e di shumë prej jush ende mund të punojnë në grup problemit një, por problemi vendosur dy po afrohet. Në problemi vendosur dy, ju jeni do të duhet të merret me vargjet, vargjeve, dhe argumente command-line. Pra, çfarë janë argumente command line? Tani, ju mund të shihni këtu poshtë një pak ngacmues për saktësisht se çfarë është do të ndodh. Ne e shohim int main, argc inc, kllapa string argv. Pra, së pari le të përpiqemi për të interpretuar se çka është duke u përpjekur për të thënë. Tani, OK. Pra, në rreshtin e komandave ju duhet të jetë duke u përdorur për disa nga këto komanda tani, dhe ju keni drejtuar ndoshta cd në terminalin e para. Pra, nëse ne themi cd pset1, ju e dini se që duhet të jetë ndryshuar në directory pset1. Tani vini re se ju kurrë nuk kam shkruar një program si kjo para. Çdo program që ju keni shkruar, ju do të kandidojë, të themi, dot çaj Mario, dot çaj lakmitar, dhe pastaj atë mund të menjëhershëm ju për të dhëna. Tani, kjo nuk është ajo që Lista ndryshim bën. Kur ju drejtuar cd, kjo nuk do të pastaj thonë: Lista cilat nuk ju duan të cd në? Në vend të kësaj, ju vetëm thonë, cd pset1, dhe ajo vetëm shkon në directory pset1. Pra, në mënyrë të ngjashme ne kemi shembuj të tjerë. bëni përshëndetje. Kur ju drejtuar bëjnë, ajo nuk do të thoni: cili program do të ju pëlqen të bëni? Ju thoni vetëm, në fund command line bëni përshëndetje. Veprim është një shembull tjetër. Kjo ne jemi duke lëvizur mario.c paraqesë deri një directory. Pra, tani ne e dimë me këtë shembull ne jemi me të vërtetë duke kaluar dy argumente. Ka mario.c si argumenti i parë, dhe dot dot është argumenti i dytë. Dhe pastaj kur ju drejtuar bëni, ju shohim se komandën vërtet të gjatë line-- se komanda me të vërtetë e gjatë shtypur në rreshtin e komandave. Kështu që gjatë command-- kjo është vetëm një pjesë të shkurtër të saj, por tani ne kemi tre argumente command-line. Dot dash zero, përshëndetje, dhe hello.c. Pra, këto janë command-line argumentet, argumentet që ju jeni duke kaluar në nivel Linja komande mënyrë që ajo nuk duhet të jenë të nxitet kur ju të drejtuar programin. Ajo do të jetë frustruese nëse kur ju u tingëllimë ajo tha: "Në rregull, që program-- që Dosja po hartimin? Hello.c. Çfarë flamuj do të ju si për të hyrë? o dash. Çfarë do të ju pëlqen fotografi që do të quhet? Përshëndetje. Jo, ju vetëm të drejtuar tingëllimë dash o Hello hello.c. Pra, duke kërkuar mbrapa në këtë. Tani argc argc-- është akuza argument. Është numri i komandës-line Argumentet hyri në rreshtin e komandave. E pra, argv-- teknikisht V qëndron për vektor, që do të thotë në thelb koleksion. Por ju mund të injorojë atë. Argv-- ne kemi varg argv, kështu kllapa string argv. Pra, kjo është një tjetër formë e kllapa ju nuk e keni parë më parë. Kllapa kështu që ne kemi parë shënim kur ne kemi thënë: si, string s barabartë Zamyla. s kllapa 0 accesses Z. karakter Ne kemi parë gjithashtu kllapa kur kemi thënë moshave int kllapa 5. Që ka deklaruar një grup të madhësisë 5. Kështu që këtu është një version i kllapa ne nuk e kemi parë më parë. Pra, ky lloj string argv që do të jetë plotësisht i njohur se kjo do të jetë vetëm një varg. Tani kllapa tregojnë se ky është një grup. Pra kllapa string argv mjete se argv është një grup i strings. Tani teknikisht një varg është një grup i karaktereve. Pra, kjo është tani një grup e një grup të karaktereve. Por kjo është shumë më e lehtë për të menduar për këtë si vetëm një grup të strings. Pra, pse mund të kllapa të jetë bosh? Si, pse nuk mund të themi: kllapa 5, kllapa n? Po. Po. Ne nuk e dimë se sa shumë inputet atje do të jetë. Pra, nëse ne shikojmë në shembullin tingëllimë, ne themi tingëllimë dash o përshëndetje hello.c. Në këtë rast të veçantë, nuk ndodh të jetë tre argumente command-line. Dhe kështu brackets-- ne do të shohim në një të dytë nuk do të jetë tre. Ajo teknikisht do të jetë katër. Por kllapa, ne do të themi, janë tre. Por tani, nëse kemi shikuar në lëvizje mario.c dot dot, kllapa ne do të duan të vënë dy në to. Dhe ka shumë të komandave që kanë një numër të ndryshueshëm të linjës së komandës argumente. Pra, çfarë ky version i kllapa simbol tregon është se argv është një grup i strings. Por ne nuk e dimë se sa shumë vargjet janë në këtë grup. Dhe si nuk kemi atëherë e di se si shumë vargjet janë në rrjet? Kjo është pika e tërë argc. argc na tregon se sa kohë argv është. Pra, gjëja e fundit për të mbajtur në Mendja është se, teknikisht, vetë komanda llogaritet si një e argumenteve nga command-line. Pra cd pset1, ka dy argumente command-line. Programi në vetvete, CD, dhe pastaj pjesa argumenti aktual i saj, pset1. Çdo program që ju keni shkruar deri tani ka kishte një command-line argument-- dot çaj Mario. Kjo është vetëm argumenti komanda-line. Pra, tani në kërkim në tingëllim dash o Hello hello.c. Pra, çfarë është argc? 4. Pra argc është 4. Tingëllimë, kllapa kështu argv 0 është tingëllimë. argv kllapa 1 është dash 0. argv kllapa 2 është përshëndetje, dhe argv kllapa 3 është hello.c. Ok, kështu që pyetjet mbi këtë, dhe pastaj ne do shohim disa shembuj programatike. NE RREGULL. Pra, ne do të hedhim një vështrim në hello3.c. Pra kjo duhet të jetë e njohur nga një nga shembujt e parë c kishim ku ne do të themi vetëm, përshëndetje bota, por tani kjo është më e përgjithshme. Pra, këtu ne jemi duke thënë përshëndetje backslash n% s argv kllapa 1. Notice-- kështu që deri këtë pikë, kjo është çfarë skedar ime template ka dukej si. Unë kisha int kryesor (i pavlefshëm), dhe pastaj unë do të të bëjë diçka në funksion kryesor. Tani në vend të kësaj, sapo kemi filluar që kanë të bëjnë me argumente command-line, ne kemi nevojë për të deklaruar një forma të ndryshme e kryesore. Pra, duke kërkuar në hello3 përsëri, kryesore do për të marrë dy argumente now-- int argc, numri i argumenteve command-line, dhe string argv kllapa, aktuale vargjet hyri në rreshtin e komandave. Kështu që unë jam duke shkuar për të ndryshuar atë template për të pasqyruar këtë fakt. Tani sa herë që ju shkruani një program, në qoftë se ju nuk e bëni nevojë për të marrë ndonjë komandë-line argumente, atëherë vetëm përdorni int kryesor (i pavlefshëm). Por tani kur ju jeni me shkrim Programet Argumenti command-line, të cilat ju jeni do të jetë bërë për problemin vendosur two-- kështu që tani që ju jeni duke programe që duhet të marrë argumente command-line, ju duhet të keni kryesor i kësaj forme. Pra here-- kjo është përdorimi i madh i argumentit command-line. Pra, shtypjen argv 1. OK kështu që le të hartojnë dhe të drejtuar këtë program. Bëni hello3. Harton. Dot çaj hello3. Dhe le të themi, "Rob." Përshëndetje Rob. Nëse unë them, "hello Maria," përshëndetje Maria. Përshëndetje Maria. Hannah ende thotë: "hello Maria ", sepse unë nuk jam bërë asgjë me argv tonë 2. Argv 2 tani do të jetë "Ana". Argc do të jetë 3. Çfarë ndodh nëse unë e bëri këtë? Pra përshëndetje null. Ai preku shkurtimisht në faktin se, teknikisht, getString mund të kthehen null, por ne do të merrni një shumë më tepër në atë që null të vërtetë është. Por të marrë atë si një çështje e Fakti që nuk është përgjithësisht e keqe. Ne e bëmë diçka të gabuar nëse kjo është shtypje "hello null." Dhe arsyeja që ne e bëmë diçka të gabuar is-- mirë, kur unë u zhvillua dot hello3 slash, argc ishte 1. Kështu që do të thotë gjatësia e argv ishte 1. Në qoftë se një grup është i gjatësisë 1, vetëm indeksi i vlefshëm është zero. Dhe kështu që këtu argv 1 është jashtë varg i kësaj grup. Ajo ishte e ngjashme me para kur unë u përpoq për të ruajtur 6 jashtë fundin e vektorit. Kështu që unë jam duke u përpjekur për të hyrë në diçka jashtë nga akuza argv, dhe ne jemi duke marrë null. Pra, një version më të mirë të kjo, një përmirësim, është kontrolluar në mënyrë eksplicite argc. Pra, nëse argc barabartë 2, që do të thotë që ne u diçka si dot plagë hello3 Rob. Dhe ajo do të shtypura "hello Rob." Nëse argc nuk barabartë 2, atëherë ajo është vetëm duke shkuar për të injoruar çdo gjë që ju vënë në argumentin command-line si argumente command-line. Ose në qoftë se ju nuk e keni vënë ndonjë në të gjitha, kjo është vetëm do të injorojnë atë dhe vetëm thonë, "ckemi ti." Pra hartimin kjo. Bëni hello4. Dhe drejtimin hello4. Drejtimin në këtë mënyrë, çfarë duhet të jenë të shtypura? "Ckemi ti." Ckemi ti. Po në lidhje me hello4 Rob? "Përshëndetje Rob." Dhe së fundi, Përshëndetje Rob Maria është vetëm "hello Ti" përsëri, sepse ju nuk e keni të vërtetë të hyjë diçka që ajo pritej. Keni hyrë më shumë emra se ajo mund të trajtojë, kështu që vetëm dështuar për Hello ju sjellje. Pra pyetjet në këtë? Ose argumente command-line? OK, kështu që duke marrë një sy në një Shembuj çift shumë të përdorimit command-line argumente të parë ne kemi argv dash 1 dot c. Pra, komentet dhuroj çfarë ky program duhet të jetë bërë. Por vini re now-- këtë për lak, kjo përputhet me modelin e saktë Unë kam qenë duke thënë se më parë. Ne vetëm ndodh që të jetë duke përdorur argc në vend të n. Tani argc është me të vërtetë n. Kjo është gjatësia e vektorit argv. Pra, janë iterating mbi argv array printf-ing çdo vlerë argv. Pra, nëse unë bëj këtë. Bëni argv 1. Ajo harton. Dot çaj argv 1. Vetëm drejtimin e kësaj, ajo printime dot slash argv 1 pasi që ishte e vetmja command-line argument-- emrin e programit. Nuk do të jetë gjithmonë në least-- argc nuk mund të jetë më pak se një, pasi që nuk do të gjithmonë të paktën të jetë emri program për të kandiduar. Pra argv 1 Rob do të shtypura argv 1 dhe pastaj në vijën e ri "Rob." Pra, në përsëritje të parë i këtij loop, unë është 0. Argv 0 është emri programit. Dot çaj argv 1. Dhe pastaj argv 1 eshte ime e parë command-line argument, i cili është Rob. Në këtë pikë, ne jemi të barabartë me argc. Ne të thyer nga lak dhe ne jemi duke bërë. Pra, kjo do të punojë për një arbitrar Numri i argumenteve command-line. Njoftim ajo printon argv 0, argv 1, argv 2, argv 3, argv 4. Dhe nuk ka asnjë argv 5. argc është e barabartë me 5. Pra, në argc-- në i barabartë me 5, ne pushim nga lak. NE RREGULL. Pra, pyetjet për atë para se të shikoni në një shembull më të ndërlikuar? Pra argv 2. Në rregull. Pra, ne jemi ende shtypjen argumentet command-line. Por tani vini re ne kemi një mbivendosur për lak. Pra, çfarë është kjo duke bërë? Pra, lak i parë është duke bërë pikërisht atë që ajo bëri para. Ne jemi ende looping mbi çdo argumenti command-line, por tani kjo loop-- dytë ne kemi parë edhe diçka si kjo para. Kur u iterating mbi Zamyla shtypjen nga Z-A-M-y-L-A. Pra, ky lak i dytë për int j është e barabartë me 0, n barabartë strlen e kllapa argv i. Pra, le të mendojmë së pari për the-- le të ecin nëpër. Le të mendojmë se çfarë do kompjuteri bëj në qoftë se unë u zhvillua këtë program si vetëm dot çaj argv dash 2. Pra, nëse unë u zhvillua këtë kod, atëherë argc do të jenë të barabartë me 1. Dhe string argv-- ka vetëm do të jetë një indeksi në argv, dhe kjo do të jetë e barabartë me dot slash argv 2-- emrin e programit. OK, kështu që tani unë e barabartë me 0, unë më pak se 1, unë plus plus për int j është e barabartë me 0, n barabartë strlen e argv kllapa 0, kështu që në përsëritje e parë të këtij loop. argv kllapa 0 është dot plagë argv 2. Pra, çfarë është gjatësia e atë varg? E pra, dot çaj A-R-G-V dash 2. Kështu strlen e që do të jetë 8. Pra, j është e barabartë me 0, n është e barabartë me 8. Për sa kohë që j është më pak se 8, ++ j. Dhe me që ne jemi duke shkuar për jetë shtypjen e një karakter të vetëm, i cili është argv parantezë unë kllapa j. Pra, vetëm unë është zero. Ne ende vetëm të ketë një command-line argumenti. Në këtë përsëritje e parë e për lak, ne jemi do të jetë shtypje argv kllapa 0 kllapa 0. Dhe pastaj j do të ardhura. Dhe ne jemi duke shkuar për printim argv kllapa 0 kllapa 1. Dhe pastaj argv kllapa 0 kllapa 2. Pra, ky është takimi ynë i parë e vargjeve multi-dimensionale. Mos harroni se më herët kam thënë që argv është teknikisht një grup i vargjeve të karaktereve. Kështu që këtu, nëse kam thënë diçka si string s barabartë kllapa argv I, dhe pastaj thashë, s kllapa j, kjo do të realizimit të njëjtën gjë. Tani, ju keni parë s kllapa j para. Kjo është vetëm të hapur j-th Karakteri i këtij vargut. Pra me këtë, ne jemi duke marrë j-th karakter i argv i-të. Pra, çfarë duhet kjo në fund të fundit të prodhimit? Bëni argv 2. Ajo harton. Dot çaj argv 2. "Rob Maria Ana," dhe na jepni disa dhoma. Pra, ne shohim se kjo është kompjuteri dot në linjën e vet dhe çaj në linjën e vet dhe një në linjën e vet. Është shtypje nga çdo karakter individual e secilit argument command-line. Dhe pastaj në mes tyre, për shkak të kësaj linje të re ne jemi shtypjen këtu poshtë, në mes tyre ajo do të shtypura një linjë të re. Pra, kjo është e ngjashme me është prezantuar paraprakisht dash argv 1, që shtypen çdo command-line argumenti, por tani ne jemi shtypjen argumente komanda-line dhe pastaj iterating përmes çdo Karakteri i secilit argument command-line për të marrë këtë prodhim. NE RREGULL? Pra pyetjet në këtë? Një gjë të theksohet është se command-line argumente të në mënyrë që ata janë të ndara nga hapësira si ju do të presin të natyrshme që ata të jenë. Pra, një varg mund të ketë hapësira në të. Kjo nuk është super i rëndësishëm, por në qoftë se unë donte argumentin e tretë command-line të ketë një hapësirë ​​në të, atëherë unë mund të thotë diçka si kjo. NE RREGULL? Pra, kjo tani ka ende vetëm tre command-line argumente të mirë 4. Dot çaj argv dash 2, Rob, Maria, dhe Hannah Bloomberg. NE RREGULL. Pyetje për këtë? Nuk ka asgjë të veçantë rreth karakterit hapësirë. Ajo vetëm ndodh të jetë që command-line trajton karakterin hapësirë se si ju ndarë çdo argument. Në rregull. Pra, atëherë set Problem two-- ju jeni do të jetë duke kërkuar në kriptografi sekret-kyç. Pra, të ngjashme me atë shembull ne pamë nga një histori e Krishtlindjeve, ju do të jeni të zbatimit të disa algoritme që, dhënë një mesazh, ju jeni do të jetë në gjendje të encrypt këtë mesazh që dikush vetëm me atë sekret kyç, me atë unazë decoder, duhet të jenë në gjendje të decrypt. Kështu që është edicioni standardi. Ju do të jeni të zbatimit dy versione të ndryshme. Nëse ju ndodh që të marrë një sy në hacker edition-- tani, ne jemi duke shkuar për të dhënë ju një varg si kjo, që paraqet një fjalëkalim të koduar. Pra, qëllimi juaj është që të kuptoj se çfarë fjalëkalimin decrypted është. Tani kjo është në fakt se si fjalëkalimet janë të ruajtura në një shumë të kompjuterëve, dhe vetëm ajo ruan këtë varg të rastit i karaktereve. Ju duhet të kuptoj se si për të marrë nga ky varg të rastit të karaktereve për çfarë fjalëkalimin fillestar ishte. Dhe së fundi, pas kësaj set problem, ju duhet të jetë në gjendje për të kuptuar se çfarë do të thotë kjo. Pra, ju do të mësojnë se si për të decrypt ky lloj i vargut të rastit. Në mënyrë të ngjashme, në qoftë se ju kujtohet nga javë 0, ju mund të keni parë këtë URL. Dhe ju duhet të jetë në gjendje të decrypt kjo përfundimisht. Ju nuk mund të jetë i lumtur kur ju decrypt atë dhe kliko mbi link. Në rregull. Kjo është ajo për sot. Pra, shihemi javën e ardhshme! [Duke luajtur elektronike Muzikë]