[MUSIC Playing] DAVID J. Malan: Në rregull. Kjo është CS50, dhe kjo është fundi i Javës 2. Pra sot, ne jemi duke shkuar për të vazhduar sy tonë se si ne përfaqësojmë gjëra nën hood-- duke u larguar nga numrat si numra të plotë dhe lundrues vlerat pikë dhe duke u fokusuar në vargjet dhe Programet në fund të fundit më shumë interesante. Por ne do të hedhim një vështrim në një Disa domain-e të Caktuar problems-- e para e cila do të të jetë i përfshirë kriptografi, arti i përpiqen informacion, në të cilën ju të shihni më sipër këtu është një foto e Radio Jetim Annie-së unazë sekret decoder nga kaluar. Kjo është në fakt forma shumë primitive dhe forma e cryptopgraphy fëmijë-miqësore ku kjo unazë ka dy disks-- një brenda dhe një jashtë. Dhe nga e rradhës një nga ata, ju mund të në thelb të vijë deri shkronja si një nëpërmjet Z me shkronja të tjera si B përmes A. Me fjalë të tjera, ju mund të vërtetë të rrotullohen alfabetin, në këtë mënyrë vjen me një hartë nga letrat letrat në mënyrë që, në qoftë se ju kërkuar për të dërguar një mesazh të fshehtë për dikë si Annie, ju mund të shkruani poshtë mesazhin tuaj dhe pastaj rrotullohen letra, ku, në qoftë se ju do të thotë për të thënë "A," ju në vend që të thonë "B" ju do të thotë për të thënë "B" ju në vend që të thonë "C" - ose diçka pak më të zgjuar se that-- dhe pastaj, në fund të fundit, aq kohë sa Annie ka këtë decoder ring, ajo mund të deshifroj mesazhin. Tani, ju mund të kujtojnë, në fakt, se kjo është përdorur në një film shumë i njohur që luan nauseum ad gjatë Sezoni i Krishtlindjeve. Le të marrin një sy këtu. RALPHIE Parker: "Do të bëhet njohur për të gjithë në përmbledhje që Ralph Parker caktohet me anë të kësaj një anëtar i Jetimëve pak Annie Sekret Rrethi dhe ka të drejtë për të gjithë nderon dhe përfitimet ndodhur me to. " RALPHIE Parker (duke transmetuar): Nënshkruar Pak Jetim Annie. Bashkënënshkruara, Pierre Andre! Në bojë. Nderon dhe përfitimet, tashmë në moshën nëntë. [MUSIC Playing] [RADIO bërbëlit] RALPHIE Parker: Eja. Le të marrin më me të. Unë nuk kanë nevojë për të gjitha që jazz për kontrabandistët dhe piratët. RADIO Folësi: Dëgjoni nesër natë të aventurë përmbyllës i Pirate Ship The Black. Tani, është koha për Annie-së Fshehurazi anëtarëve i rrethit Sekret. Mos harroni fëmijët, vetëm anëtarët e Rrethit Annie Sekret mund të deshifroj mesazhin sekret Annie. Mos harroni, Annie është në varësi të ju. Set këmbët tuaja për B-2. Këtu është message-- 12, 11, 2-- RALPHIE Parker (duke transmetuar): I Jam në takimin tim të parë të fshehtë. RADIO Folësi: --25, 14, 11, 18, 16-- RALPHIE Parker (duke transmetuar): Oh, Pierre ishte në sonte zë të madh. Unë mund të them që sonte të Mesazhi ishte me të vërtetë e rëndësishme. RADIO Folësi: --3, 25. Ky është një mesazh nga Annie veten. Mos harroni, mos i thoni askujt. [Gulçim] RALPHIE Parker (duke transmetuar): Nëntëdhjetë sekonda më vonë, unë jam i në dhomë vetëm në shtëpi ku një djalë i nëntë mund të ulen në jetën private dhe deshifroj. Ah. "B." [Chuckles] RALPHIE Parker (duke transmetuar): Unë shkova për të ardhshëm. "E." Fjala e parë është "të jetë." Po! Ajo po vinte më e lehtë tani. "U." [Chuckles] Randy PARKER: Aw, eja, Ralphie. I Gotta shkoni! RALPHIE Parker: Do të jetë e drejtë poshtë, Ma. Kampion Gee. "T." "O." "Të jetë i sigurt për të. "" Të jetë i sigurt për të "çfarë? Cili ishte pak Jetim Annie duke u përpjekur për të thënë? "Të jetë i sigurt për të" çfarë? NËNA: Ralphie, Randy ka marrë për të shkuar. Ju lutem do të dalë? RALPHIE Parker: Në rregull, mami! Unë do të jetë jashtë të drejtë! RALPHIE Parker (duke transmetuar): Unë kam qenë duke marrë më afër tani. Tensioni ishte e tmerrshme. Çfarë ishte ajo? Fati i planetit mund të ul receptorin e telefonit në bilancin. NËNA: Ralphie, Randy së ​​marrë për të shkuar! RALPHIE Parker: Do të jetë e drejtë jashtë, për të qarë me zë të lartë! RALPHIE Parker (Rrëfen): Pothuajse atje! Gishtat e mi fluturoi! Mendja ime ishte një kurth çeliku. Çdo pore vibrated. Ishte pothuajse e qartë! Po! Po! Po! Po! RALPHIE Parker: "Të jetë i sigurt për të pirë Ovaltine tuaj. " Ovaltine? Një tregtar i pavlerë? [MUSIC Playing] RALPHIE Parker: Bir kurve. [Qesh] DAVID J. Malan: Pra, që atëherë është një paraqitje e shkurtër në atë kriptografisë mund të jetë për this-- a pini nga kaluar. Pra një njoftimi të shpejtë. Nëse ju jeni të lirë këtë Premte në 13:15 dhe do të donte të bashkohen me ne për CS50 drekë, kreu në këtë URL këtu. Vijë të parë, së pari të shërbejë si zakonisht. Por me kalimin e kohës, ne do të sigurohemi që dikush më të cilët do të donim për të marrë pjesë mund të planifikojë-mençur. Pra vargjet. Ne kemi Zamyla-- cilëve ju keni takuar tani më e mundshme në Problem Set 1-- cilit emri është shkruar në këtë mënyrë. Dhe mendoj që keni shtypur emrin e saj në një program kompjuterik që është duke përdorur diçka si getString. Në mënyrë që të rifitoj ato tasteve, si do të shkojmë në lidhje me përfaqësimin e një varg, një fjalë, një paragraf, ose letra të shumta si këto këtu? Ne biseduam për herë të fundit në lidhje me integers dhe problemet që lindin me del nga shtrati numër i plotë dhe lundrues vlerat pikë dhe problemet që lindin brenda saktësi. Me vargjet, ne të paktën të ketë pak më shumë fleksibilitet sepse strings-- vetëm në world-- reale mund të jetë një gjatësi mjaft arbitrare. Pretty i shkurtër, goxha të gjatë. Por edhe atëherë, ne do të gjeni se kompjuterat mund të ndonjëherë dalë jashtë kujtesës dhe jo edhe ruajtur një varg të madh të mjaftueshme. Por tani për tani, le të fillojë të kujtoj një varg si diçka në këto kuti këtu. Pra, gjashtë kuti të tilla, secila prej të cilave paraqet një karakter ose "char". Pra, kujtoj se "char" - c-h-a-r-- është një nga ndërtuar në lloje të të dhënave në C. Dhe çfarë është e bukur është se ju mund të përdorni se lloj i si një bllok ndërtimi, një copë mister, nëse do, për të formuar një lloji më i madh i të dhënave që ne do të vazhdojmë për të thirrur një "varg." Tani, ajo që është e dobishme për të menduarit në lidhje me gjëra të tilla si vargjeve në këtë mënyrë? E pra, ajo rezulton se ne mund në të vërtetë levave këtë strukturë që në fakt të hyrë karaktere individuale në një mënyrë mjaft të drejtpërdrejtë. Unë jam duke shkuar për të shkuar përpara dhe për të krijuar një file i quajtur "stringzero.c," por ju mund të telefononi atë çdo gjë që ju dëshironi. Dhe në faqen e internetit të kursit është tashmë ky shembull më parë, kështu që ju nuk keni nevojë që të shkruani çdo gjë jashtë. Dhe unë jam duke shkuar për të shkuar përpara dhe së pari bëni boshllëk int kryesore. Dhe brenda pak ditësh, ne do të fillojnë të vë në lojë përveç çfarë pavlefshëm është këtu, pse është e int pranë kryesore, e kështu me radhë. Por tani për tani, le të vazhdojë të kopjoni paste se. Unë jam duke shkuar për të deklaruar një varg të quajtur s. Dhe unë jam duke shkuar për të kthyer nga GetString çfarëdo përdoruesi lloje në. Kjo do të jetë e thjeshtë program, nuk ka udhëzime, Unë jam vetëm duke shkuar për të verbërisht presin që përdoruesit e di çfarë duhet të bëni për të mbajtur atë të thjeshtë. Dhe tani unë jam do të ketë një për lak. Dhe brenda për lak tim unë jam do të ketë int i merr zero. Dhe i është, përsëri, vetëm një konventë, një variabël indeksin për numërim, por unë mund të telefononi këtë çdo gjë që unë dua. Unë jam duke shkuar për të bërë unë është më pak than-- mirë Emri Zamyla është gjashtë letra e gjatë. Kështu që unë jam duke shkuar për të vështirë Kodi që ka tani për tani. Dhe pastaj i ++. Dhe tani brenda këtyre kaçurrel formatimin e teksteve unë jam duke shkuar për të bërë printf, dhe unë dua të shtypura një karakter në një kohë. Kështu që unë jam duke shkuar për të përdorur% c për ndoshta hera e parë. Dhe atëherë unë dua të shtypura çdo karakter në linjën e vet. Kështu që unë jam duke shkuar për të vënë një pak backslash n atje. Mbylle kuotë. Dhe tani unë dua të bëj diçka këtu. Unë dua të shtypura nga letër specifike në vargun, s, si unë jam iterating nga zero në deri në gjashtë. Me fjalë të tjera, unë dua të shtypura karakterin i'th të s. Tani si mund ta bëni këtë? Mirë shumë si kutive në ky përfaqësim këtu, lloj, sjell në mendje deri nocionin e boksit letra në, në mënyrë të ngjashme ju mund të bëni që sintaksore në C nga thjesht specifikuar, Unë dua të shtypura nga S i'th karakter. Duke përdorur kllapa katrore në tastierën e kompjuterit tuaj që në një tastierë të SHBA janë përgjithësisht mbi kyçe tuaj të kthimit. Pra, kjo nuk është mjaft e drejtë megjithatë, si ju mund të keni vënë re. Por unë jam duke shkuar për të llojit të verbërisht ecur përpara këtu. Dhe unë jam duke shkuar për të bërë të bërë varg 0. Por, para se ta bëjë këtë, le të shohim nëse ne nuk mund të parashikojnë disa gabime të zakonshme. A është ky do të hartojë? Jo, unë jam humbur një bandë e tërë e gjërave. Bibliotekat kam dëgjuar. Pra cilat header fotografi mund të unë dua të shtoj këtu? Po. Audienca: Ju duhet I standarde / O [padëgjueshme] DAVID J. Malan: Excellent. Kështu që unë duhet standarde I / O. Për çfarë Qëllimi nuk dua I standarde / O? Për printf. Pra përfshijnë stdio.h. Dhe ju gjithashtu propozon që unë të përfshijë biblioteka CS50 për çfarë arsye? Për të kanë strings. Pra, ne do të shohim se çfarë Biblioteka CS50-së është duke bërë për të krijuar këtë nocion të një varg. Por tani për tani, ju mund të mendoni atë si një lloj të dhënave aktuale. Kështu që duket të jetë pak pastrohen. Dhe tani unë jam duke shkuar për të shkuar përpara dhe në të vërtetë do të bëjë string 0. Hartuar. Pra, kjo është e mirë. Pra ./string0 lejoni të zoom në në mënyrë që ne mund të shikoni më nga afër se çfarë po ndodh. Shkruani. Z-A-M-Y-L-A hyjë. Dhe ne kemi të shtypura jashtë për emrin Zamyla-së. Pra, kjo është shumë e mirë. Pra, tani le të shkojnë përpara dhe të të drejtuar këtë program përsëri, dhe shkruani emrin e plotë Daven-së. Surprise, surprizë. Shkruani. Hmm. Ne nuk kemi të shtypura Daven-së Emri i plotë e parë të saktë. Tani kjo duhet të jetë e qartë në prapavështrim shkak të asaj, lloj, vendimi budalla dizajn? Po, unë e vështirë koduar gjashtë brenda e mia për lak. Tani kam bërë që vetëm për shkak E dija emrin Zamyla-së do të ishte gjashtë letra. Por sigurisht kjo nuk është një zgjidhje të përgjithshme. Pra, ajo rezulton ne mund dinamike kuptoj se gjatësinë e një varg duke e quajtur një funksion të quajtur strlen. Përsëri, me qëllim quajtur shkurtimisht vetëm për ta bërë atë më të përshtatshëm për të tipit. Por kjo është sinonim me duke marrë gjatësinë e një varg. Unë jam duke shkuar për të shkuar mbrapa në terminalin e mia dritare dhe ri-drejtuar përpiluesit. Por kjo është yelling në mua. Implicite deklaruar funksionin e bibliotekës strlen me tip unsigned int const-- Unë jam i humbur. Plotësisht. Pra, sidomos si tuaj Sytë fillojnë të bëhem i lëmuar mbi me mesazhet e gabimit si kjo, fokus ndershmëri në fjalët e para. Ne e dimë se problemi është në Linja 8, siç tregohet këtu. Dhe kjo është në string-0.c. Implicite deklaruar Funksioni bibliotekë strlen. Kështu që në përgjithësi do të të jetë një model i mesazhet e gabimit. Implicite deklaruar diçka. Pra me pak fjalë, ajo që kam dukej të kanë bërë në lidhje me vijë 8, këtu. Cila mund të jetë zgjidhja të jetë edhe në qoftë se ju kurrë nuk kam përdorur strlen veten tuaj? Audienca: Pjesë e një biblioteke të ndryshme? DAVID J. Malan: Pjesa i një biblioteke të ndryshme. Pra, ajo është e deklaruar, në mënyrë që të flasin. Ajo është përmendur në disa file përveç stdio.h dhe CS50.h. Tani ku është ajo e përcaktuar? Për të qenë i sinqertë, ju ose duhet të vetëm e di se kjo pjesa e sipërme e kokës, ose ju Google dhe për të gjetur jashtë. Ose e di këtë, unë e kam hapur në CS50 aplikim programin terminali, i cili është vetëm i madh, version ekran të plotë të çfarë është në pjesën e poshtme të dritares gedit-së. Dhe kjo rezulton se ka një komandën në mënyrë të ngjashme ngjeshur, të quajtur njeriu për manual, ku në qoftë se ju shkruani në emri i funksionit dhe hit Enter, ju do të kthehet në mënyrë të drejtë Dokumentacioni misterioz. Është vetëm teksti që në përgjithësi duket një diçka të vogël si kjo. Është pak e madhe në shikim të parë. Por sinqerisht unë jam duke shkuar për të sytë e mi të bëhem i lëmuar mbi dhe vetëm të përqëndrohet në pjesën Më intereson për momentin. Cili është ky. Cili duket strukturore si diçka që unë jam njohur me të. Në të vërtetë faqja njeriu, kështu për të folur, do të thoni ju në çfarë header paraqesë një funksion si strlen është përcaktuar. Kështu që unë jam duke shkuar për të shkuar mbrapa tani për gedit. Dhe unë jam duke shkuar për të shkuar përpara dhe të shtoni në këtu # Include dhe ruajtur kartelën. Unë jam duke shkuar për të pastruar në ekran me Kontrolli L Nëse ju keni qenë të pyesin. Dhe unë jam duke shkuar për të ri-kandiduar make string.0, përpilon këtë herë. ./string.0 Zamyla. Kjo dukej për të punuar lejoni të shkoj përpara dhe përsëritje atë me Davenport. Shkruani. Dhe që, gjithashtu, dukej për të punuar. Pra, ne mund të bëjmë pak më mirë se kjo, edhe pse, ne mund të fillojnë të gjërave të pastra deri vetëm pak. Dhe unë jam duke shkuar për të vërtetë të futur një gjë tjetër tani. Unë jam duke shkuar për të shkuar përpara dhe të ruani këtë në një dosje të ndryshme. Dhe unë jam duke shkuar për të thirrur këtë fotografi string1.c vetëm të jenë në përputhje me kodin ju do të jetë në gjendje për të gjetur në internet. Dhe le të përqëndrohet në më të njëjtë Kodi. Ajo rezulton se unë kam qenë lloj i marrjes të mirëqenë faktin se laptop tim, dhe nga ana tjetër, aplikim CS50 ka një shumë të kujtesës, shumë RAM, shumë bytes të hapësirës në të cilën unë mund të ruajë vargjet. Por realiteti në qoftë se unë shtypur gjatë mjaftueshme, dhe të mjaftueshme tasteve, Unë mund të tipit teori në më shumë karaktere se kompjuterin tim fizikisht ka memorie për. Dhe kjo është problematike. Shumë si një int mund vetëm numërimin kaq e lartë, në teori, ju mund të mbushur vetëm kaq shumë karaktere në RAM të kompjuterit tuaj ose të rastësishme Access Memory. Kështu që unë kisha më mirë të parashikojnë ky problem, madje edhe edhe pse kjo mund të jetë një e rrallë rast qoshe, kështu që të flasin. A nuk ndodh që shpesh, mund të ndodhë. Dhe në qoftë se kjo ndodh dhe unë nuk e bëj parashikojnë dhe program për të, programi im mund të bëjë që e di se çfarë. Freeze, var, reboot, çfarëdo. Diçka parashikuar që mund të ndodhë. Pra, ajo që unë jam duke shkuar për të bërë tani, tani e tutje me të vërtetë, është para se unë kurrë verbërisht përdorni një ndryshore si s që ka qenë e caktuar vlerën e kthimit të disa funksion tjetër si getstring, Unë jam duke shkuar për të siguruar që vlera e tij është e vlefshme. Kështu që unë e di vetëm nga që ka lexuar Dokumentacioni CS50 për getstring, të cilat në fund të fundit ne do të ju pikë në, që getstring kthen një simbol të veçantë quajtur NULL, N-U-L-L në gjithë kapele, nëse diçka shkon keq. Pra, normalisht, ajo kthen një varg. Por ndryshe në qoftë se ajo kthehet N-U-L-L-- ne përfundimisht do të shohim se çka me të vërtetë means-- se vetëm mjete ndodhi diçka e keqe. Tani kjo do të thotë, ashtu si në Scratch, Unë mund të shikoni një kusht këtu në C, në qoftë se s nuk NULL barabartë. Pra, nëse ju nuk e keni parë këtë më parë, kjo thjesht do të thotë nuk ka të barabartë. Pra, kjo është e kundërta e barabartë të barabarta, të cilat, kujtojnë, është e ndryshme nga single barabartë, e cila është detyrë. Pra, nëse s nuk ka të barabartë NULL, vetëm pastaj të bëjë Unë dua për të ekzekutuar këto rreshta të kodit. Pra, me fjalë të tjera, para se të zhyten në verbërisht dhe të fillojnë iterating mbi s, dhe e trajtuar atë sikur ajo është një sekuencë e karaktere, unë jam duke shkuar për të parë të kontrolluar, prisni një minutë, është s definitivisht nuk barabartë me këtë vlerë të veçantë, NULL? Sepse në qoftë se ajo është, gjëra të këqija mund të ndodhë. Dhe tani për tani, të marrë gjërat që të këqija ndodh të thotë crashes tuaj e programit, dhe ju nuk mund domosdoshmërisht të shërohen. Pra sinqerisht, duket shëmtuar. Kjo është lloj i konfuze tani për shikim në. Por kjo do të bëhet më njohur para se të gjatë. Por unë jam duke shkuar për të propozuar tani një përmirësim tjetër. Kjo është një përmirësim për korrektesën. Programi ime tani është më e saktë, për shkak se në rastet e rralla që kujtesa nuk mjafton ekziston, unë do ta trajtojë atë, dhe unë do të bëj vetëm asgjë. Unë të paktën nuk do të rrëzimit. Por le të bëjmë një version përfundimtar këtu. Dhe një file i quajtur string2.c. Unë jam duke shkuar për të ngjitur që njëjtë Kodi për vetëm një moment, dhe unë jam duke shkuar për të nxjerrë në pah këtë line, 11, këtu, për vetëm një moment. Tani realiteti është se hartuesit zgjuar si tingëllimë mund të rregullojmë këtë për ne prapa skenave pa tonë ditur ndonjëherë. Por le të mendojnë për këtë krejtësisht si një dizajn problematike. Kjo linjë e kodit është, natyrisht, duke thënë, nisja disa ndryshore i të 0. Kjo është shumë i thjeshtë. Dhe ajo që përsëri është ky deklaratë, këtu, unë ++, duke bërë? Ne e kemi parë atë më parë, por ne me të vërtetë nuk flasin për këtë. Audienca: rrisim i. DAVID J. Malan: rrisim i. Pra, në çdo përsëritje nëpërmjet kjo loop, çdo cikli, ju jeni rrisim i nga një. Pra, ajo merr më të mëdha, dhe më të mëdha, dhe më e madhe deri lak përfundon. Si e bën atë të përfundojë? E pra nuk është kjo e mesme kusht të cilin ne kemi përdorur më parë. Ju keni parë dhe në walkthroughs në setin P. Por çfarë është kjo thënie? A lak e mëposhtme në mënyrë kohë që i është më pak se çfarë? Audienca: Gjatësia e vargut. DAVID J. Malan: Gjatësia e vargut. Pra, kjo përkthehet shumë e pastër në anglisht në atë kuptim. Tani problemi është se çdo herë që unë iterate nëpër këtë lak në teori, Unë jam duke kërkuar këtë pyetje. A është i më pak se gjatësia string të s? A është i më pak se gjatësia string të s? Tani po i ndryshon në çdo përsëritje? Ajo është. Për shkak të ++. Pra, çdo përsëritje unë po bëhet më e madhe. Por është e bëhet më e madhe, ose më të vogla, apo të ndryshuar në të gjitha? Nr Pra, në aspektin e dizajnit, një prej akseve së bashku të cilat ne përpiqemi për të vlerësuar kodin në klasë, kjo ndjehet lloj budalla. Ashtu si ju jeni fjalë për fjalë, në çdo përsëritje i këtij lak kërkuar njëjta pyetje mallkuar përsëri, dhe përsëri, dhe përsëri, dhe fjalë për fjalë ajo kurrë nuk do të ndryshojë. Së paku në qoftë se unë nuk jam prekur s dhe duke u përpjekur për të ndryshuar përmbajtjen e s. Kështu që unë mund të bëjë një pak më të mirë se kjo. Dhe ajo që unë jam duke shkuar për të bërë nuk është deklarojnë vetëm një i ndryshueshme, por një variabël e dytë unë do të në mënyrë arbitrare, por konvencionale, e quajti atë n. Cakton n barabartë tek Gjatësia varg s. Dhe pastaj mbi këtu, unë jam duke shkuar për të të bëjë një optimization zgjuar pak, kështu që te flasin, që në fund të ditës jo më shumë e saktë ose jo më pak i saktë është se më parë. Por kjo është një dizajn të mirë. Në faktin se unë jam duke përdorur më pak kohë, më pak CPU cikle, në mënyrë për të folur, për t'iu përgjigjur të njëjtën pyetje, por vetëm një herë. Çdo pyetje mbi atë të përgjithshëm parimi i përmirësimit, thonë, efikasitetit të një programi? Po? Audienca: Pse ju përdorni [e padëgjueshme]? DAVID J. Malan: Pyetje e mirë. Pra, pse nuk kemi vënë ++ në fund të Unë në vend të në fillim të i? Në këtë rast, ajo ka asnjë ndikim funksionale. Dhe në përgjithësi, unë priren të përdorni operatorin Postfix kështu që kjo është një pak më të qartë si që kur operacioni po ndodh. Për ata të panjohur, ka një tjetër Deklaratat ku ju mund të bëni ++ i. Këto janë funksionalisht ekuivalente në këtë rast sepse nuk ka asgjë tjetër rreth asaj incrementation. Por ju mund të dalë me rastet dhe rreshta të kodit në të cilën që bën një dallim. Pra, në përgjithësi, ne nuk bëjmë edhe të flasim për këtë një të tillë. Sepse sinqerisht, kjo e bën tuaj Kodi sexier, dhe lloj pardesy, dhe më pak karaktere. Por realiteti është se është shumë e vështirë, Unë mendoj se, edhe për mua të përfundojë mendjen time rreth tij disa herë, rendi i operacioneve. Pra, si një mënjanë, në qoftë se ju me të vërtetë nuk më pëlqen kjo, edhe pse kjo është lloj sexy kërkoni, ju gjithashtu mund të bëjë i + = 1, cila është version uglier i njëjtën ide për Postfix incrementation. E them këtë dhe ju duhet të bëjë fun e saj, por ju do të vijnë për të parë kodin si diçka të bukur para se të gjatë. [Qeshura] DAVID J. Malan: E drejta? Po. Pyetje në mes. Audienca: A keni nevojë për të thënë int n? DAVID J. Malan: Ju bëni nuk duhet të them int n. Pra, për shkak se ne kemi thënë tashmë int, ju nuk keni nevojë që të thonë se ai përsëri. Kapur është se n ka për të të njejta të dhënave si i. Pra, kjo është vetëm një lehtësi këtu. Po. Audienca: A mund të shkoni mbi karakterin Printo s kllapa i përsëri? DAVID J. Malan: Absolutisht. Pra% c, kujtohet nga të fundit Ora, është vetëm një placeholder. Kjo do të thotë të vënë një char këtu. backslash n, natyrisht, vetëm Mjetet vënë një pushim linjë këtu. Kështu që vetëm të lë, tani, kjo pjesë e sintaksës së re. Dhe kjo është fjalë për fjalë duke thënë, kap string quajtur s dhe shkoni merrni saj karakter i'th, mënyrë që të flasin. Dhe unë mbaj duke thënë karakter i'th sepse në çdo përsëritje të këtij lak kjo është sikur ne jemi shtypjen jashtë, s pari kllapa 0, si mund të thonë se një programues. Pastaj s kllapa 1, atëherë s kllapa 2, pastaj 3, pastaj 4. Por sigurisht kjo është një variabël, kështu që unë vetëm të shprehin atë me i. Key, megjithatë, është për të realizuar, veçanërisht nëse ju nuk keni qenë acclimating në këtë botë të programimit, ku ne të gjithë duket për të numëruar nga zero, gotta të fillojë numërimi nga zero tani. Sepse vargjet, karakteri i parë, z në Zamyla është për mirë apo për keq duke shkuar për të jetuar në lokacionit numrin zero. Në rregull, kështu që më lejoni të sjell na përsëri këtu për të Zamyla dhe të shohim se çfarë është me të vërtetë do në nën kapuç. Pra, ka ky nocion e tipit hedh. Ju mund të keni në të vërtetë luajtur me këtë tashmë, ndoshta për haker Edicioni i P të vendosur një të tillë. Por lloji hedh vetëm i referohet aftësia në C dhe disa gjuhë të tjera për të kthyer një lloj të dhënave në një tjetër. Tani se si mund të shohim këtë goxha të drejpërdrejtë? Pra kjo, kujtojnë, është fillimi e alfabetit anglisht. Dhe konteksti, kujtoj, nga si një javë më parë është ASCII. Kodi American Standard për Informacionit shkëmbimi. E cila është vetëm një mënyrë me të vërtetë e gjatë për të thënë një hartë nga letra për numrat, dhe nga numra të letrave. Pra, Një anë M këtu, dot dot dot, linjat deri me, kujtojnë, Numri dhjetor 65 më lart. Dhe ne nuk flasim në lidhje me këtë në mënyrë të qartë, por me siguri nuk ka të ngjashme numrat për shkronja të vogla. Dhe me të vërtetë, ka. Bota vendosi disa vjet më parë që pak a, jo kapitale një, do të jetë 97. Dhe pak b po shkon të jetë 98, e kështu me radhë. Dhe për cilindo çelës në tastierës tuaj, ka do të jetë një model i ngjashëm i bit. Ose ekuivalente, një numër decimal. Pra, pyetja në dorë, atëherë, është se si mund të në të vërtetë e shohin këtë nën kapuç? Kështu që unë jam duke shkuar për të shkuar tek gedit përsëri. Dhe në vend se llojin kjo nga e para, Unë jam duke shkuar për të shkuar përpara dhe të vetëm të hapur diçka nga kodi sotme quhet ASCII zero. Dhe ASCII zero duket si ky. Pra, le të përfundojë mendjen tonë rreth kësaj. Pra, së pari, unë kam komentuar kodi, e cila është e bukur. Për shkak se kjo është fjalë për fjalë thënë mua se çfarë të presin, shfaqur një hartë për letra uppercase. Tani unë nuk e mjaft e di se çfarë kam të them se, kështu që le të tregoj. Në anglisht, ndoshta disi techie Anglisht, ajo që e bën linja 18 duket të jetë bërë për ne? Vetëm linjë 18. Çfarë është ajo inducing? Çfarë është ajo do të fillojë këtu? Audienca: Një lak. DAVID J. Malan: Një lak. Dhe sa herë është që do të iterate? Audienca: [bashkëvendosur Voices] gjashtë herë. DAVID J. Malan: Jo gjashtë herë. Audienca: 26 herë. DAVID J. Malan: 26 herë. Po, keq. 26 herë. Pse? E pra, kjo është pak i çuditshëm, por Unë e kam filluar duke numëruar nga 65. E cila është e pazakontë, por jo i gabuar. Kjo nuk është e keqe per thonë. Dhe unë jam duke bërë që vetëm sepse, për këtë shembull, Unë jam lloj i parashikuar që kapitali A ishte 65. Tani kjo nuk është më elegante mënyrë për të bërë këtë, për lloj të kodit vështirë Vlerat e fshehtë se askush nuk pritet ndonjëherë për të kujtuar. Por tani për tani, vini re se unë jam duke bërë këtë deri me 65 plus 26. Sepse me sa duket unë nuk dua edhe për të bërë aritmetikë në kokën time. Kështu që unë do të le përpiluesit të bëjë atë. Por pastaj në çdo lak, çdo përsëritje i lak, unë jam e rrisim i. Deri tani kjo duket pak i fshehtë. Por ne duhet të kemi ndërtesën themelore blloqe me të cilin për të kuptuar këtë. % C është vetëm një placeholder për një char. % I është një placeholder për një int. Dhe kjo rezulton se duke përdorur këtë Sintaksa e re, kjo në kllapa, në mënyrë për të folur, kështu një lloj të dhënave brenda një kllapa, Unë mund të detyrojë përpiluesit për të trajtuar i nuk është një numër i plotë, por si një shkrumb. Në këtë mënyrë duke treguar mua karakterin ekuivalente e këtij numri. Tani këtu, ky kod është shumë e shumë identike. Unë vetëm të kërkuar për të bërë super qartë fakti që unë jam duke filluar në 97, e cila është një jo kapitale. Më deri me 26 shkronja më shumë. Dhe unë jam doing-- përsëri, hedh i, kështu që të flasin. Ose hedh lloji i, kështu që të flasin. Nga një int për një char. Pra, rezultati përfundimtar do të jetë, sinqerisht, informacioni ne tashmë e dimë. Unë jam duke shkuar për të bërë ascii-0 nuk dot-- dot c. Njoftim, ju ndoshta e bëri që gabim si unë vetëm e bëri rastësisht. Bëni ascii-0. Tani unë jam duke shkuar për të bërë ./ascii-0. Unë do të zoom në, dhe për fat të keq ajo do të lëviz jashtë ekranit. Por ne shohim një tabelë të tërë ku një harta të 97, harta b në 98, dhe në qoftë se ne të shkoni deri tej Një, natyrisht, harta në 65. Pra, kjo është vetëm për të thënë se çfarë ne kemi qenë të predikuar, ka kjo ekuivalencë, është në të vërtetë ndodh në realitet. Pra, një modifikim të shpejtë për këtë. Më lejoni të hapur ASCII-1.c. Dhe vini re kjo zgjuar, lloj i, sqarim për këtë. Kjo është ascii-1.c, dhe vëreni këtë gjë të çmendur. Dhe kjo me të vërtetë merr në zemër e asaj që kompjuterat janë duke bërë. Edhe pse ne njerëzit do të nuk llogarisin në drejtim të letters-- Unë nuk do të fillojnë të menduarit, të gjithë të drejtë a pastaj b, dhe të përdorin ato për të numëruar objekte fizike. Ju me siguri mund të them se unë dua të nisja disa ndryshore të quajtur c-- por unë mund të kishte quajtur këtë anything-- kështu c është nisur të kapitalit A. Sepse në fund të ditës, kompjuter nuk kujdeset se çfarë ju jeni ruajtjen, ai vetëm kujdeset se si ju doni për të paraqitur këtë informacion. Si ju doni kompjuterin për interpretuar se model të bit? Pra, kjo nuk është diçka që unë përgjithësi do të rekomandojë bërë. Është me të vërtetë vetëm një shembull të përcjell që ju mund absolutisht nisja një numër të plotë në një char. Sepse nën kapuç e një char, natyrisht, është vetëm një numër 0-255. Kështu që ju mund të me siguri vënë atë brenda një int. Dhe ajo që kjo edhe tregon është se ne mund të konvertohet nga një shkruani në një tjetër, këtu, në fund të fundit shtypje të njëjtën gjë. Dhe në fakt, kjo unë do të rregullojmë online-- kishte për qëllim të thonë se kjo, përsëri, këtu. Më lejoni të pastruar këtë deri online, dhe ne do të shohin në një walkthrough në internet si të nevojshme, ajo që ishte menduar atje. OK. Shembull Deri fundit tani përfshin a-së dhe b-së dhe pastaj ne do marrë gjërat një nivel. Pra, me një-së dhe B-së dhe c-së në kapitalizimin dhe ekuivalenca e saj, le të hidhini një sy në këtë shembull, këtu. Një tjetër shembull kodi. Ne do të hapur një të tillë që është e bërë tashmë, kështu që ne nuk duhet të tipit atë të gjitha nga e para. Dhe njoftim pritje ne jemi duke përdorur header shumta fotografi, ndër të cilat është miku ynë i ri, string. Tani kjo duket, në fillim shikim, pak më i fshehtë. Por le të shohim nëse ne nuk mund të arsyetojë me atë që po ndodh këtu. Së pari unë të marrë një varg nga përdoruesit, dhe kam vënë atë varg në një variabël quajtur s. Copy paste nga para. Në përputhje 22, unë jam me sa duket duke bërë pikërisht atë Unë bëra një moment më parë, unë jam iterating mbi personazhet në s. Dhe truket e reja këtu janë duke përdorur Gjatësia string, optimization vogla e ruajtjen e gjatësisë string në n, në vend se e quajtur strlen përsëri, dhe përsëri, dhe përsëri. Dhe vetëm duke kontrolluar se i është më pak se n. Tani këtu, gjërat pak interesante. Por kjo është vetëm një aplikim i këtij njëjtën ide të re. Çfarë në anglisht bën s kllapa i përfaqësojnë? Audienca: Numërimi çdo karakter [e padëgjueshme]. DAVID J. Malan: Numërimi çdo karakter. Dhe edhe më shumë në mënyrë të përmbledhur, s kllapa i përfaqësuar atë? A do të thoni. Jo për të ju vë në vend këtu. Audienca: Well-- DAVID J. Malan: Pra, nëse fjala is-- nëse string është Zamyla, e cila starts-- Audienca: --you merren me personazhet separately-- DAVID J. Malan: Mirë. Pikërisht. Katror kllapa Simbol ju lejon të hyni në çdo karakter individualisht, kështu s kllapa 0 do të jetë karakteri i parë në string. s kllapa 1 do të jetë dytë, e kështu me radhë. Pra, pyetja që unë jam duke kërkuar, këtu, në këtë gjendje është ajo? A është karakteri i'th e s Madhe se ose e barabartë jo kapitale a? Dhe çfarë do të thotë kjo, këtu, me ampersands dyfishtë? Audienca (BASHKU): Dhe. DAVID J. Malan: Dhe. Është vetëm e barabartë me këtë. Dhe nuk është një fjalen në C, ju duhet të përdorimi, annoyingly, simbol simbol. Dhe kjo, anasjelltas, është duke i kërkuar është s së i'th karakter pak se ose e barabartë jo kapitale z? Dhe përsëri, këtu është ku të kuptuarit themelor zbatimi i një kompjuter ka kuptim. Vini re se, edhe pse unë kam dot dot dot atje, duket si një anë të z në Fjala janë të gjitha vlerat puqur deri nga 97 deri. Dhe njëjtë për të uppercase duke filluar nga ora 65. Pra takeaway, atëherë, është se në anglisht, si do ta përshkruanit ajo që linja 24 është duke bërë? Po? Audienca: Më 24 është e kontrolluar për të parë nëse çdo karakter është Fjala. DAVID J. Malan: Është kontrolluar nëse çdo karakter është një letër me të vogla. Pra, edhe më shumë shkurtimisht, është Karakteri i'th e s Fjala? Kjo është e gjitha ne jemi shprehur këtu logjikisht, pak cryptically, por në fund të fundit shumë e pa pengesa. A është s së i'th Fjala karakter? Nëse është kështu, dhe këtu e ku gjërat merrni një mendje pak bending për vetëm një moment, nëse po, shkoni përpara dhe të shtypura nga një karakter. Pra, kjo është vetëm një placeholder, por çfarë karakteri? Pse jam unë duke bërë s kllapa i minus kjo shprehje këtu? Well njoftim modelin këtu. Shifrat aktuale nuk kanë rëndësi aq shumë. Por vini re se 97 është sa larg larg nga 65? Audienca: 32. DAVID J. Malan: 32. Sa larg është 98 nga 66? Audienca: 32. DAVID J. Malan: Pak c nga C e madhe? 32. Pra, ka 32 HOPS nga një letër në një tjetër. Pra sinqerisht unë, mund të lehtësuar këtë se. Por pastaj unë jam lloj i vështirë kodim ky nivel kuptuarit ulët që asnjë lexues është kurrë do të kuptojnë. Kështu që unë jam duke shkuar për të përgjithësuar atë si, unë e di se shkronjat janë më të mëdha. Unë e di shkronjat kapitale janë Vlerat më të vogla, për ironi. Por kjo është në mënyrë efektive ekuivalente me duke thënë zbres 32 nga s kllapa i. Pra, në kontekstin e këtyre letra, nëse letër ndodh që të jetë një, të vogla një, dhe unë zbres 32, çfarë efekti ka që kanë, matematikisht, në jo kapitale a? Audienca: Capitalizes-- DAVID J. Malan: kapitalizon atë. Dhe në të vërtetë, kjo është arsyeja pse tonë Programi quhet germa zero. Ky program ose kapitalizon një letër, pas kontrollimit në qoftë se ajo është e vërtetë një letër me të vogla. Përndryshe, në përputhje 30, çfarë të bëj në qoftë se kjo nuk është një letër me të vogla që unë jam duke kërkuar në në një mënyrë të veçantë përsëritje në lak. Vetëm print it out. Pra, nuk do të ndryshojë gjëra që nuk është edhe me të vogla. Kufizo veten të pak a me pak z. Tani kjo është mjaft misterioze. Por në fund të ditës, kjo është se si ne, një herë e një kohë, kishte për të zbatuar gjërat. Nëse unë në vend të kësaj të hapë germa një, oh falenderoj zot. Ka një funksion thirrur të sipërme që mund të bëjmë gjithçka vetëm e bëri në një nivel mjaft të ulët. Tani të sipërme është interesante për shkak se ajo është deklaruar në një skedar, dhe ju vetëm do të dini këtë duke kontrolluar dokumentacionin, ose duke u thënë, të themi, në klasë, ku ajo ekziston, në një skedar të quajtur ctype.h. Pra, kjo është një tjetër mik i ri i yni. Dhe të sipërme e bën pikërisht ajo që tregon emrin e saj. Ju mund të kalojë në, si një argument, në mes të këto kllapa, disa karakter. Unë jam duke shkuar për të kaluar në karakterin i'th i është duke përdorur simbol tonë dashuroj re përfshirë kllapa katrore. Dhe të marrë me mend, se çfarë është kthimi vlera e të sipërme me sa duket do të jetë? Një letër e kapitalit. Një letër e kapitalit. Pra, nëse unë të kalojë në Fjala a, me shpresë, nga përkufizimi i të sipërme, ajo do të kthehet një uppercase A. Përndryshe, në qoftë se kjo nuk është një letër me të vogla në vendi i parë, unë vetëm të shtypura it out. Dhe me të vërtetë, njoftim Miku i dytë këtu. Jo vetëm për të sipërme ekziston, por është më i ulët, i cili në fakt i përgjigjet se pyetja për mua. Tani ai që ka shkruar këto gjëra, 10s vjet më parë, ju e dini se çfarë? Zbatuar të sipërme dhe është të ulët duke përdorur kodin si kjo. Por përsëri, në përputhje me kjo ide e abstraguar larg, lloj, niveli më i ulët Detajet e zbatimit. Dhe duke qëndruar mbi supet e njerëzve që erdhën para nesh, duke përdorur funksionet si të sipërme dhe është më e ulët, të cilat mrekullisht mjaftueshme janë të bukur emëruar për të thënë atë që bëjnë ata, është një paradigmë e mrekullueshme për të miratuar. Tani, rezulton se në qoftë se kam lexuar faqja njeriu për të, të themi, të sipërme, Kam mësuar diçka tjetër. Pra njeriu toUpper. Është pak e madhe. Por njoftim, këtu është se përmendja e header fotografi që unë duhet të përdorin. Si një mënjanë, sepse kjo është mashtruese, funksioni përdor Ints vend të chars për arsye të error checking. Por ne do të vijë ndoshta përsëri në se në të ardhmen. Por vini re, këtu, për të konvertuarit e sipërme letër c ne kapitale nëse është e mundur. Pra, kjo është shumë i thjeshtë. Dhe tani le të jetë pak më specifik. Le të shikojmë në pjesën e Faqja njeri nën vlerën e kthimit. Vlera e kthyer është se e letrës konvertuar. Ose c, në rast se konvertimi nuk ishte e mundur, ku c është input origjinale. Që unë e di nga këtu, nga Argumenti për të sipërme. Pra, çfarë është kryefjala e kësaj? Vlera e kthyer është se e letrës konvertuar, ose c, letër origjinale, në qoftë se konvertimit nuk ishte e mundur. Çfarë përmirësim mund prandaj të bëjë të projektimit kodit tim? Po? Audienca: Ju mund të hiqni tjetër. DAVID J. Malan: Unë mund hiqni deklaratën tjetër, dhe jo vetëm deklarata tjetër. Audienca: Ju mund të hiqni [padëgjueshme]. DAVID J. Malan: Unë mund hequr të gjithë pirun në rrugë, nëse tjetër krejt. Pra me të vërtetë, më lejoni të hapur versioni përfundimtar i kësaj, germa-2 dhe të vini re se sa, nëse ju do të, sexy, kodi është tani duke marrë, në se unë kam reduktuar nga disa shtatë apo më shumë linja të vetëm katër, funksionalitetin që kam për qëllim nga thjesht duke bërë thirrje për të sipërme, duke kaluar në s kllapa i, dhe shtypje jashtë, me vendshënuesi% C, se karakteri të veçantë. Tani ndoshta, nuk është një bug, ose të paktën rreziku i një insekti, në këtë program. Pra, vetëm për të ardhur përsëri për një takeaway më parë, çfarë duhet të ndoshta të bëjë në ky program për të bërë atë më të fuqishme, kështu që nuk ka asnjë mënyrë ajo mund të përplasje, madje edhe në raste të rralla? Audienca: Sigurohuni që nuk është NULL. DAVID J. Malan: Sigurohuni që nuk është NULL. Pra me të vërtetë, për të bërë këtë super duhur, unë duhet të bëjë diçka si, në qoftë se s nuk është NULL, atëherë të shkojnë përpara dhe të ekzekutuar këto rreshta të kodit, të cilat Unë pastaj mund të porosit si kjo, dhe pastaj të vënë në mbajtëse tim të ngushtë. Pra, mirë i lidhur së bashku nga dy ide. Po? Audienca: Mund të përdorni a bëni ndërsa lak, në vend? DAVID J. Malan: Mund Unë bëj një për ta bërë, ndërsa loop? Audienca: --you të dëshironi të bëni të sigurtë që ju të vërtetë [padëgjueshme]. DAVID J. Malan: Mund ju përdorni një për ta bërë, ndërsa? Përgjigja e shkurtër, nr. Për shkak se ju jeni gati për të të futur një tjetër rast qoshe. Nëse vargu është i gjatësisë zero. Nëse për shembull, unë vetëm goditi Shkruani, ndonjëherë pa shtypur Zamyla. Unë jam duke shkuar për të dorëzuar ju prapa një aktuale string, si ne do të shohim në fund, se ka zero karaktere. Është ende një varg, kjo është vetëm super të shkurtër. Por në qoftë se ju përdorni një për ta bërë, ndërsa, ju jeni do të verbërisht të përpiqet të bëjë diçka me respektojnë për atë varg, dhe asgjë nuk do të jetë atje. Audienca: E pra, në qoftë se ju e bëri bëni [padëgjueshme] ndërsa s-- DAVID J. Malan: Oh unë shoh, të mbajtur duke marrë një varg nga përdoruesit. Përgjigje kaq të shkurtër, ju mund të, dhe për të mbajtur pestering ata që të ju jap një varg që është shkurtër sa të përshtaten në kujtesën. Absolutisht. Unë vetëm ka zgjedhur për të. Nëse ata nuk më japin string e I doni, unë jam ndalohet pirja e duhanit, unë jam duke i dhënë dorë. Por, absolutisht, për këtë qëllim, ju mund absolutisht të bëjë që. Pra header fotografi të bibliotekës që ne jemi tani të njohur me të janë këto, këtu. Standard I / O, CS50.h, string, ctype.h, dhe ka, me të vërtetë, të tjerët. Disa prej jush kanë zbuluar biblioteka matematikë në math.h. Por më lejoni të prezantoj ju, tani, për të ky burim që stafi CS50, Davin, dhe Rob, dhe Gabe veçanti kanë vënë së bashku. Se së shpejti do të lidhë në website Kursi-së. Ajo që quhet referencë CS50. Cili vetëm për të ju jap një të shpejtë shijen e saj, punon si vijon. Më lejoni të shkoj në reference.cs50.net. Ju do të shihni në të majtë anën e një listë të madhe e funksioneve që vijnë me c. Por në qoftë se më intereson, për momentin, për diçka si strlen, Unë mund të shtypni atë atje. Ajo filtron poshtë në listë të vetëm atë që më intereson. Unë jam duke shkuar për të click it. Dhe tani në të majtë, ju do të shihni se çfarë ne shpresojmë është më e drejtpërdrejtë, e njeriut shpjegim miqësore se si ky funksion punon. Kthen gjatësinë e një varg. Ja një përmbledhje, këtu është se si ju përdorin atë në drejtim të të header file, dhe në drejtim të asaj që të funksionit duket si në aspektin e argumenteve të tij. Dhe pastaj këtu, kthimit Gjatësia e një varg. Por për ata prej jush më të rehatshme, në të vërtetë ju mund të klikoni më i qetë, dhe përmbajtja e këtij faqe, tani, do të ndryshojë të jenë vlerat e nënkuptuara të asaj ju merrni duke përdorur faqen e njeri. Me fjalë të tjera, CS50 referencë është një thjeshtësim i faqeve njeri nga stafi, për studentët. Veçanërisht, ata më pak të rehatshme dhe në mes, në mënyrë që ju të nuk duhet të përpiqen për të përfunduar mendjen tuaj rreth, sinqerisht, disa sintaksë mjaft i fshehtë dhe dokumentacioni diku. Pra, mbani në mend në ditët që do të vijnë. Pra këtu, përsëri, është një Zamyla. Le tani të kërkojë një pyetje që është pak më njerëzore të arritshme. Falë Chang, i cili ka qenë shtypjen më shumë elefantët vazhdimisht për disa ditëve të fundit. Ne kemi një mundësi për të dhënë të paktën një prej tyre larg. Nëse ne mund të marrë vetëm një vullnetar për të ardhur në dorë për të nxjerrë në ekran. Si për këtu? Eja lart. Cili është emri yt? ALEX: Alex. DAVID J. Malan: Alex. Të gjithë të drejtë. Alex, eja lart. Ne jemi gati të shohim tuaj shkrim dore në ekran këtu. Në rregull, mirë që u njohëm. ALEX: Gëzohem që ju takova. DAVID J. Malan: Në rregull. Pra, stërvitje super e thjeshtë. Bar nuk është i lartë për të merrni një elefant sot. Ju jeni duke luajtur rolin e getstring. Dhe unë jam duke shkuar për të ju them vetëm string që ju keni marrë. Dhe mendoj se ju, getstring, janë thirrur. Dhe njerëzore, si unë, ka shtypur në Zamyla, Z-A-M-Y-L-A. Vetëm të shkojnë përpara dhe të shkruani Zamyla në ekran sikur ju keni marrë atë dhe ruajtur atë diku në kujtesë. Duke lënë vend për atë që do të jetë disa words-- tjetër kjo është në rregull, do të mbajë. [Qeshura] Pra Zamyla, Excellent. Deri tani mendoj se ju, getstring, janë quajtur përsëri. Dhe për këtë arsye, unë ju sigurojë, në tastierës, me një emër tjetër, Belinda. Të gjithë të drejtë. Dhe tani herën tjetër getstring është quajtur, unë lloji në diçka si Gabe, G-A-B-E. Ju jeni me të vërtetë duke marrë në zemër e gjallë kujtesën. Cili është tërhequr çdo gjë krejtësisht rastësisht. OK. [Qeshura] ALEX: Na vjen keq shkrimi im është i keq. DAVID J. Malan: Jo, kjo është në rregull. Dhe si për Rob, R-O-B. OK. Mirë. Kështu që unë nuk ju parashikojnë do të lloj i vë gjërat në këtë mënyrë. Por ne mund të bëjë këtë punë. Pra, si nuk ju shkoni në lidhje me hedhjen nga këto karaktere në kujtesë? Me fjalë të tjera, në qoftë se ne mendojmë për ky ekran drejtkëndëshe zi si përfaqësues i një RAM, ose kujtesës kompjuterit. Dhe kujtoj se RAM është vetëm një bandë e tërë e bytes, dhe bytes janë një bandë e tërë e bit. Dhe bit janë disi zbatuar, në përgjithësi me një formë të energjisë elektrike në hardware. Pra, kjo është lloj i layering kemi folur dhe tani mund të marrë për të dhënë. Si ju shkoni në lidhje me vendoset se ku për të shkruar Rob kundrejt Gabe kundrejt Belinda kundrejt Zamyla? ALEX: Unë vetëm e bëri atë në urdhërojë që ju më tha. DAVID J. Malan: Dhe kjo është e vërtetë. Por ajo që qeveriset ku keni vënë Emri Belinda dhe emri Gabe-së? ALEX: Asgjë? DAVID J. Malan: [qesh] Kështu që punon, kjo është në rregull. Pra kompjuterat janë pak më të rregullt se kaq. Dhe kështu kur ne implement-- qëndrojnë atje për vetëm një moment-- kur ne fakt zbatojë diçka si getstring në një kompjuter, Zamyla mund të jenë të përcaktuara nga shumë e shumë të si ju e bëri në ekran, atje. Dhe çfarë është çelësi për njoftim këtu, çfarë bëri Alex, është atje është lloj i një demarkacionin në mesin e secilit prej këtyre fjalëve, e drejtë? Ju nuk shkruaj Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- me fjalë të tjera, ka disa lloj e demarkacionit e cila duket të jetë, lloj, ndarje të rastit mes të këtyre fjalëve të ndryshme. Por kjo është e mirë, sepse ne njerëzit mund tani kujtoj se këto janë katër vargjet e ndryshme. Kjo nuk është vetëm një sekuencë e shumë karaktereve. Pra, një kompjuter, atëherë, ndërkohë, mund të marrë një varg si Zamyla, vënë secilën prej këtyre letrave brenda një bajt e memories. Por ky numër është shumë më i madh, sigurisht, se gjashtë karaktere. Ka një bandë e tërë e RAM. Dhe kështu që tani e tutje, kjo Rrjeti i kutive do për të përfaqësuar atë Alex vetëm bëri këtu në ekran. Dhe tani, Alex, ne mund të ju ofrojnë një blu apo një elefant portokalli nga Chang. ALEX: Unë do të marrë një elefant blu. DAVID J. Malan: Një elefant blu. Pra, një raund i madh e duartrokitje, në qoftë se ne mund të, për Alex këtu. [Duartrokitje] ALEX: Faleminderit. DAVID J. Malan: Faleminderit. Pra takeaway është se, edhe pse model lloj i ndryshuar me kalimin e kohës, këtu në bord, nuk ishte ky demarkacioni midis vargjet e ndryshme se Alex mori për ne. Tani kompjutera, sinqerisht, mund të bëjë të njëjtën gjë. Ata mund të lloj pllum vargjet kudo në RAM. Deri këtu, këtu, poshtë këtu, këtu poshtë. Ata mund të bëjë pikërisht këtë. Por, sigurisht, kjo është ndoshta nuk e planifikimit më të mirë. E drejta? Nëse unë mbajtur duke i kërkuar Alex për të të marrë emrat, ndoshta ai do të vënë disa më shumë këtu, ndoshta deri këtu, këtu, këtu, në fund mbi këtu. Por, me pak më shumë planifikim, sigurisht, ne mund të vënë gjërat më të pastër. Dhe me të vërtetë, kjo është ajo që e bën një kompjuter. Por kapur është se nëse vargu tjetër kam marrë pas Zamyla është diçka si Belinda, propozojë ku ne mund të shkruani letër b lidhje me këtë rrjet? Ku do të shkoni? Në të djathtë të a, nën z, nën a? Çfarë do të jetë instinktet tuaja të para? Audienca: Më poshtë z. DAVID J. Malan: Pra nën z. Dhe kjo është shumë e hapur, e drejtë? Kjo është lloj i zoti, kjo është ajo që ne bëjmë në një tastierë kur ne hit Enter, ose një email kur bën një lista bulleted e gjërave. Por realiteti është se kompjuterët të përpiqet të jetë më efikas, dhe sigurisht të mbushur sa më shumë Të dhënat në RAM të jetë e mundur, në mënyrë që ju nuk e humbni ndonjë bytes. Kështu që ju nuk e mbeturinave çdo pasurive të patundshme ekran. Dhe problemi, megjithatë, është se në qoftë se ne të vërtetë vënë në letër b pas një, si do të e di se ku mbaron emri Zamyla-së dhe emri i Belinda fillon? Pra, ju Njerëzit vetëm propozuar, mirë, hit Enter, në thelb. Vënë atë poshtë më poshtë. Ose ashtu si bëri edhe Alex, sapo filloni të shkruani emri tjetër nën atë të mëparshme, dhe më poshtë se një, dhe pastaj më poshtë se një. Kjo është një sugjerim vizuale. Kompjuter kanë një tjetër sugjerim vizuale, por kjo është pak më e ngjeshur. Është ky karakter i shokuar. Backslash 0, e cila është ndoshta kujton backslash n, dhe kështu me radhë, tani. Sekuenca të veçanta shpëtuar. Backslash 0 është mënyra e që përfaqëson tetë zero bit në një rresht. 0000 0000. Mënyrë që ju të shprehur se nuk të është goditur numrin zero në tastierën tuaj, sepse në të vërtetë që është një char ASCII. Ajo duket si një numër, por është në fakt një numër dhjetor që përfaqëson qarkore glyph, typeface rrethore. Ndërkohë, backslash zero do të thotë, fjalë për fjalë vënë tetë zero bytes këtu për mua. Pra, kjo është disi arbitrar. Ne mund të keni përdorur ndonjë model i bit, por bota vendosur disa vjet më parë, që të përfaqësojë fundi i një varg në kujtesë, vetëm vënë një bandë e tërë e zero. Sepse ne mund të zbulojë se. Tani që do të thotë se nuk ka letër alfabeti mund të përfaqësohet me zero. Por kjo është në rregull, ne kemi parë tashmë që ne jemi duke përdorur 65 për deri në 97 më lart. Ne nuk do të arrijë të mbyllur për të gjitha zero. Pra Belinda në kujtesë të kompjuterit është në të vërtetë do të shkoni këtu. Unë e kam tërhequr atë në të verdhë vetëm për të tërhequr vëmendjen tonë për të. Dhe vini re, gjithashtu, kjo është krejtësisht arbitrare. Unë e kam tërhequr atë si një rrjet. Si, RAM është vetëm disa objekt fizik. Ajo nuk do të ketë rreshtave dhe kolonave, në vetvete. Ajo e mori vetëm një bandë e tërë e bytes implementuar në hardware disi. Por nëse pas Belinda I shtypur në emër Gabe-së, ai do të përfundojë deri këtu në kujtesë, dhe në qoftë se kam shtypur në emër Daven-së, për shembull, ai do të përfundojnë këtu. Dhe unë mund të vazhdojë të shkruaj edhe më shumë emra. Për fat të keq, në qoftë se unë të përpiqet për të shkruani një emër super të gjatë, Unë përfundimisht mund të dalë jashtë kujtesës. Në të cilin rast, getstring është do të kthehen NULL, siç kemi thënë. Por fatmirësisht, të paktën në këtë vizuale këtu, nuk kemi marrë mjaft që tani. Tani ajo që është e bukur është se kjo Ideja e përgjithshme e trajtimit të gjërave si në kuti është përfaqësues i një tipar të C dhe shumë gjuhë, i njohur si një grup. Një grup është një lloj tjetër i të dhënave. Kjo është një strukturë e të dhënave, nëse ju do. Struktura në kuptimin e saj të vërtetë, lloj, duke kërkuar si një kuti, të paktën në sy mendjen tuaj. Një grup është një i afërt rend të llojeve të njëjta të dhënave, të kthyer prapa për të kthyer prapa. Pra, një varg, në të tjera fjalë, është një koleksion i karaktere. Një grup të karaktereve. Por kjo rezulton nga ju mund të keni vargjeve të bunches e gjërave. Në fakt, ne mund të vënë edhe numrat në një rrjet. Pra, formën në të cilën ne jemi duke shkuar për të filluar deklaruar këto të dhëna Struktura e njohur si një grup është gjithashtu do të përdorin kllapa katrore. Por këto kllapa katrore do të kanë kuptim të ndryshëm në këtë kontekst. Dhe le të shohim atë si më poshtë. Le të supozojmë se unë u hap deri një skedë të re këtu. Dhe unë ruani këtë si ages.c. Dhe unë do të ruaj këtë në dosjen time këtu. Dhe tani unë jam duke shkuar për të shkuar përpara dhe filloni të shtypni diçka si përfshijnë CS50.h, përfshijnë stdio.h, int boshllëk kryesor. Dhe pastaj brenda këtu, unë dua që së pari të ketë një int quajtur mosha. Dhe unë jam duke shkuar për të përdorur që për të marrë një int nga përdoruesit për moshën e tij ose të saj. Por ky program ka për qëllim të përdoret nga njerëzit të shumta, për çfarëdo kontekst. Unë kam marrë një linjë të njerëzve. Të gjithë ata duhet të shkruani në e tyre mosha për ndoshta disa, unë nuk e di, konkurrencës, apo ngjarje se ata kanë ardhur për të. Pra personi tjetër, unë nevojë për një tjetër ndryshore. Sepse në qoftë se unë vetëm të bëjë mosha merr getInt, që është shkuar për plaçkë, apo të prishësh mosha e personit të kaluar. Kështu që nuk është e mirë. Pra instinkti im i parë mund të jetë, oh, të gjithë të drejtë, në qoftë se unë dua të të marrë të shumta e njerëzve ages-- le të quajmë këtë age1, int age2 merr int, int age3 merr getInt. Dhe tani unë jam duke shkuar për të përdorur disa Kodi pseudokod këtu. A diçka me ato numra. Ne do të lënë për një ditë tjetër atë ne jemi duke bërë atje, sepse ne vetëm kujdesi për momentin për age1, age2, age3. Për fat të keq, një herë unë hartuar këtë program dhe e vënë atë në frontin e përdoruesit aktual, çfarë është dizajn krejtësisht të varfër Vendimi Unë duket se kanë bërë? Po? Audienca: [padëgjueshme] DAVID J. Malan: Po, Unë nuk e kanë provuar edhe të kuptoj se si shumë moshave duhet me të vërtetë e kujdesit për? Nëse unë kam më pak se tre njerëz këtu, dhe për këtë arsye më pak se tre moshave, Unë jam ende verbërisht pritur tre. Zoti na ruajt katër njerëzit shfaqen. Programi im thjesht nuk do të mbështesë ato. Dhe kështu kjo, histori e gjatë Me pak fjalë, nuk është një zakon i mirë. E drejta? Unë kam qenë në thelb kopjimi dhe pasting kodin dhe vetëm tweaking emrat e ndryshueshme. Dhe, Perëndia im, në qoftë se keni pasur, jo tre moshës, por 10, apo 100, apo edhe 6,500 studentë, për shembull. Kjo nuk do të jetë veçanërisht e Kodi elegante, ose të qëndrueshme. Ju jeni do të duhet të rishkruaj programin deri çdo kohë Numri juaj i njerëzve ndryshimeve. Pra fatmirësisht, në aktuale tonë fotografi ages.c për sot, ne kemi një zgjidhje më të zgjuar. Së pari, unë jam duke shkuar për të marrë hua ndërtuar ne kemi përdorur disa herë, këtë bëni ndërsa lak, në mënyrë që të merrni numri i njerëzve në dhomë. Unë jam vetëm duke shkuar për të mërzit përdoruesit, përsëri dhe përsëri, derisa ai ose ajo jep mua një vlerë të n që është një numër i plotë pozitiv. Unë mund të ketë përdorur, fundit koha të merrni int pozitiv. Por ne nuk kemi se për të vërtetë, kështu që unë shkova përpara dhe jeni zbatuar këtë ide. Tani këtu poshtë, kjo është mashtrim i ri. Në përputhje 27, si komentet në linjë 26 sugjeron, të deklarojë një grup në të cilin për të ruajtur moshën gjithëve. Pra, nëse ju doni të merrni, jo një int, nuk dy Ints, por një bandë e tërë e ints. Në mënyrë të veçantë n integers, n ishin të mund jetë tre, mund të jetë 100, mund të jetë 1.000. Sintaksa, thjesht, është që të të themi, çfarë lloji të dhënat e doni? Çfarë doni të telefononi se copë e kujtesës? Çfarë doni të telefononi rrjetit që duket si kjo në pikturë? Dhe në kllapa këtu, ju thoni sa i madh ju doni array të jetë. Dhe kështu më parë, kur kam thënë Sintaksa është pak më ndryshe këtu, ne jemi ende duke përdorur kllapa katrore, por kur unë jam deklaruar një rrjet, Numri brenda kllapa katrore mjete sa i madh nuk ju duan array të jetë. Në të kundërt, kur ne ishim duke përdorur s simboli i një moment më parë, s, një varg, është me të vërtetë një grup i karaktere, por kur ju nuk jeni duke deklaruar një ndryshore, si me këtë fjalen këtu, ju jeni thjesht duke marrë një indeks të veçantë, një të veçantë element nga ky grup. Pasi ne e dimë se, pjesa tjetër e kjo është e drejtpërdrejtë. Nëse të ri unë jam duke e parë duke shkuar për të shtypur nga çfarë është mosha e numrit personi i. Ku unë vetëm them numrin personi një të tillë, personi numër dy, personi numër tre. Dhe unë jam vetëm duke bërë aritmetikë, në mënyrë që njerëz si normale, ne numërimin nga një për këtë program, dhe jo nga zero. Pastaj unë e quaj getint, por kam ruajtur përgjigja në moshat kllapa i. Cila është mosha i'th në rrjet. Pra, ndërsa herë të fundit ne kemi qenë të trajtuar këto kuti si karaktere për emrin Zamyla-së, dhe të tjerët. Tani, këto kuti përfaqësojnë 32 bit, ose katër bytes në të cilën ne mund të ruajë një int, një int, një int. Të gjitha të cilat, përsëri, janë të njëjta type dhënave. Tani bëj diçka pa kuptim, si kalon koha, vetëm për të justifikuar shkruar këtë program. Dhe pastaj këtu poshtë, unë përsëri iterate mbi array thënë një vit nga tani, Personi numër një vullnet jetë diçka vjeç. Dhe të kuptoj se math-- Unë do të thotë, kjo nuk është shumë e komplikuar arithmetic-- Unë vetëm të shtoni një për moshën e tyre. Vetëm për të demonstruar, përsëri, kjo. Ashtu si unë mund indeksin në një varg, s, kështu që mund të indeksit në një grup të moshave, si se. Pra, ku është ky do të jetë duke marrë na? Pra, ne do të shohim, në fund të fundit, një disa gjëra në ditët që do të vijnë. Një, e gjithë kjo kohë, kur shkrim programet tuaja, si Mario, lakmitar, kredi. Ju keni qenë të shtypni emrin e programi dhe goditur Enter. Dhe pastaj duke marrë input të përdoruesit. Me getString, getInt, getLongLong, ose si. Por kjo rezulton se mbështet C diçka që quhet command line argumente, të cilat do të na le në të vërtetë të marrë në fjalët që ju shkruani, në ndriçon, e shpejtë, pas emrit të programit tuaj. Pra, në ditët që do të vijnë, ju mund të shkruani diçka si Cezarit, ose ./caesar numër 13, pas kësaj. Ne do të shohim se si punon kjo. Sepse me të vërtetë, në Problemi vendosur dy, ne jemi do të prezantoj për një diçka të vogël kujton Ralphie-së sfiduar më parë nga kartografi. Arti i përpiqen informacion. Kjo, në fakt, është shumë e kujton atë që bëri Ralphie. Ky është një shembull i një encryption algoritmi quajtur rot13, R-O-T 13. Të cilat thjesht do të thotë rrotullohen shkronja në alfabetin 13 vende. Dhe në qoftë se ju bëni këtë, ju do të shihni tani çfarë është, ndoshta, një frazë e njohur. Por mënyra që ne jemi duke shkuar për të përdorur kjo, në fund të fundit, është më shumë në përgjithësi. Në P vendosur dy, në edicionin e standarde, ju do të zbatojë disa shifra, një i quajtur Cezari, e quajtur Vigenere. Dy prej tyre janë rrotulluese ciphers, në se në një farë mënyre ju kthehet një letër në një letër tjetër. Dhe Caesar është super e thjeshtë. Ju shtoni një, ju shtoni 13, apo ndonjë numër deri në 26. Vigenere bën që në një për letër bazë. Pra Vigenere, si ju do të shihni në spekulim, është më i sigurt. Por në fund të ditës ajo ju do të zbatimin dhe P vendosur dy, është se çelësi që ju të përdorni të dy për encryption dhe decryption. Duke iu referuar procesit të kthyer tekst i thjeshtë, disa mesazhi origjinal, në tekst Cypher, e cila është diçka e koduar. Dhe pastaj decrypting atë përsëri. Në edicionin e hacker, Ndërkohë, ju do të jetë ngarkuar me diçka të ngjashme në shpirt, ku ne do të ju jap një fotografi, nga një Linux tipike, ose Mac, ose Unix kompjuter të quajtur Etsy fjalëkalim, i cili përmban një tërësi bandë e përdoruesve dhe fjalëkalimet. Dhe këto fjalëkalime të ketë të gjithë qenë i mbyllur, apo sheshuar, mënyrë që të flasin, më duhet si ju do të shihni në spekulim. Dhe edicioni hacker do të kundërshtojnë ju me marrjen e një input si kjo, dhe plasaritje fjalëkalimin. Kjo është, duke parafytyruar se çfarë fjalëkalimi njeriut e në të vërtetë ishte. Sepse, me të vërtetë, fjalëkalimet janë përgjithësi nuk ruhen në të qartë, dhe në përgjithësi passwords duhet të jetë e vështirë të mendoj. Kjo nuk është shpesh rasti. Dhe ajo që mendova që ne do të bëjmë është të përfunduar me disa minuta shikim në një veçanërisht zgjedhje e dobët e fjalëkalimet nga një film që ju mund të kujtojnë me dashuri. Dhe në qoftë se jo, ju duhet të marr me qira. [VIDEO Playback] -Helmet, Ju dreq, çfarë po ndodh? Çfarë jeni duke bërë për vajzën time? -Permit Mua për të futur shkëlqyer kirurg i ri plastike, Doktor Phillip Schlotkin. Më e madhe punë hundë njeri në tërë universi dhe Beverly Hills. -Your Lartësia. Punë -Nose? Unë nuk e kuptoj. Ajo tashmë kishte një punë hundë. Ishte e saj e ëmbël 16 të pranishëm. Jo, kjo nuk është ajo që ju mendoni. Është shumë, shumë më keq. Nëse ju nuk më japin kombinim me mburojë e ajrit, Mjeku Schlotkin do jepni tuaj Vajza mbështetur hundën e saj të vjetër. - [Gasps] Nooooooooooooo. Ku e keni marrë këtë? -Të gjitha të drejtë. Unë do të them, unë do të tregoj. Jo, Babi, nr. Ju nuk duhet. -Ti Je e drejtë i dashur im. Unë do të humbasë hundën tuaj të re. Por unë nuk do të them atyre të Kombinimi pa marrë parasysh çfarë. -Shumë mirë. Doktor Schlotkin, të bëjë më të keq e juaj. Kënaqësi -My. -JO! Prisni, prisni. Unë do të tregoj. Unë do të tregoj. -Unë E dinte se do të punojë. Në rregull, t'i jepte për mua. , Partia kombinim është një. -Një. -Një. -Dy. -Dy. -Dy. -Tre. -Tre. -Tre. -Four. -Four. -Four. -Five. -Five. -Five. -Pra Kombinim është një, dy, tre, katër, pesë. Kjo është kombinimi budalla Kam dëgjuar ndonjëherë në jetën time. Kjo është lloj i gjë AN idiot i do të ketë në bagazhin e tij. -Faleminderit, Lartmadhëria juaj. [Klikime Remote] -Çfarë Bëtë? -Unë Fikur murin. Jo, ju nuk e keni, ju fikur të gjithë filmin. Duhet të kem -Unë shtypur butonin e gabuar. -Well, E vënë atë përsëri në! Vendos filmin prapa! Po, zotëri! Po, zotëri. -Le Të shkojmë, Arnold. Ejani, Gretchen. Sigurisht ju e dini se unë do të duhet të faturojë ju për këtë. -Well? A atë punë? Ku është mbreti? -Ajo Punuar, zotëri, ne kemi kombinim. -Great. Tani ne mund të marrë çdo frymë e fundit e ajrit të freskët nga planetit Druidia. Çfarë është kombinimi? -Një, Dy, tre, katër, pesë. -Një, Dy, tre, katër, pesë? -Po. -Kjo E mahnitshme. Unë kam marrë të njëjtën gjë kombinim në bagazhet e mia. Përgatitja Spaceball 1 për Largimi i menjëhershëm. Po, zotëri. -Dhe Ndryshojë kombinim në bagazhet e mia. [DERE MBYLLJA Kthehu] [Trokas E DYERT goditur përkrenare] -Ahh. [VIDEO END rishikim] DAVID J. Malan: Kjo është ajo për CS50, ne do të shihemi javën e ardhshme. Transmetuesi: Dhe tani, Deep Mendimet, nga Daven Farnham. DAVEN FARNHAM: kodim në C është aq shumë më e vështirë se e para. printf, Scratch ishte një gënjeshtër. [Qeshura SOUNDBITE]