[Speel van musiek] David J. Malan Alle regte. Dit is CS50, en dit is die einde van die week 2. So vandag, ons gaan ons kyk om voort te gaan hoe ons dinge voorstel onder die hood-- weg te beweeg van getalle soos heelgetalle en swaai punt waardes en fokus op stringe en uiteindelik meer interessante programme. Maar ons sal ook 'n blik op 'n paar domein spesifieke problems-- die eerste van wat sal wees wat kriptografie die kuns van skommeling inligting in wat jy sien, hier bo is 'n foto van Radio Orphan Annie se geheime dekodeerder ring van weleer. Dit is eintlik baie primitief vorm en kind-vriendelike vorm van cryptopgraphy waardeur hierdie ring het twee disks-- een binne en een buite. En by die draai van een van daardie, jy kan wese line-up briewe soos 'n deur Z met ander letters soos B deur A. Met ander woorde, jy kan letterlik draai die alfabet, daardeur te kom met 'n afbeelding van briewe aan letters so dat, as jy wou 'n geheime boodskap te stuur iemand soos Annie, jy kan skryf down jou boodskap en dan draai die letters, waardeur, as jy bedoel om te sê "A," jy plaas sê "B" jy bedoel om te sê "B" jy plaas sê "C" - of iets 'n bietjie meer slim as that-- en dan, uiteindelik, so lank as Annie het hierdie dekodeerder ring, kan sy die boodskap ontsyfer. Nou, kan jy onthou, in die feit dat hierdie is gebruik in 'n baie bekende film wat speel ad nauseum gedurende die Kersseisoen. Kom ons neem 'n blik hier. RALPHIE PARKER: "Wees dit aan almal in opsomming bekend wat Ralph Parker, word benoem 'n lid van die Little Orphan Annie Secret Circle en is geregtig op al die honneurs en voordele voorkom daaraan. " RALPHIE PARKER (narrating): Onderteken Little Orphan Annie. Onderteken, Pierre Andre! In ink. Honneurs en voordele, reeds op die ouderdom van nege. [Speel van musiek] [RADIO BABBELBUS] RALPHIE PARKER: Kom op. Kom ons gaan met dit. Ek alles wat jazz hoef nie oor smokkelaars en Pirates. Omroeper: Luister môre nag vir die sluiting van avontuur van The Black seerower skip. Nou is dit tyd vir Annie se Geheime boodskap vir jou lede van die Secret Circle. Onthou kinders, net lede Annie se Secret Circle Annie se geheime boodskap ontsyfer. Onthou, Annie, afhangende van jou. Stel jou penne B-2. Hier is die message-- 12, 11, 2-- RALPHIE PARKER (narrating): Ek is in my eerste geheime vergadering. Omroeper: --25, 14, 11, 18, 16-- RALPHIE PARKER (narrating): O, Pierre was in 'n groot stem vanaand. Ek kon vertel dat vanaand se boodskap was werklik belangrik is. Omroeper: --3, 25. Dit is 'n boodskap van Annie haarself. Onthou, nie vir enigiemand vertel. [Hyg] RALPHIE PARKER (narrating): Negentig sekondes later, is ek in die enigste plek in die huis waar 'n seuntjie van nege kon sit in privaatheid en dekodeer. Ag. "B." [Lag] RALPHIE PARKER (narrating): Ek het na die volgende. "E." Die eerste woord is "wees." Ja! Dit kom makliker nou. "U." [Lag] Randy PARKER: Ag, kom op, Ralphie. Ek moet gaan! RALPHIE PARKER: Ek kom gou af wees, Ma. Gee gefluit. "T." "O." "Maak seker dat jy te. "" Maak seker dat jy "wat? Wat was Little Orphan Annie probeer om te sê? "Maak seker dat jy" wat? MOEDER: Ralphie het Randy het om te gaan. Sal jy asseblief kom uit? RALPHIE PARKER: Alle reg, Ma! Ek sal reg uit te wees! RALPHIE PARKER (narrating): Ek is nou nader om. Die spanning was verskriklik. Wat was dit? Die lot van die planeet mag in die weegskaal hang. MOEDER: Ralphie, Randy se het om te gaan! RALPHIE PARKER: Ek sal reg wees , vir huil hardop! RALPHIE PARKER (Narrating): Amper daar! My vingers vlieg! My gedagte was 'n staal trap. Elke porie vibreer. Dit was amper duidelik! Ja! Ja! Ja! Ja! RALPHIE PARKER: "Maak seker dat jy jou Ovaltine te drink. " Ovaltine? 'N morsige kommersiële? [Speel van musiek] RALPHIE PARKER: Seun van 'n teef. [ROOIBORSDUIFIE] David J. Malan So wat dan 'n blik op wat kriptografie kan wees vir 'n this-- drink uit die verlede. So 'n vinnige aankondiging. As jy is vry om hierdie Vrydag om 13:15 en sal wil ons aan te sluit vir CS50 middagete, kop na hierdie URL hier. Eerste kom, eerste dien as gewoonlik. Maar met verloop van tyd, sal ons seker maak dat maak meeste enigiemand wat wil deelneem kan skeduleer-wyse. So snare. Ons het Zamyla-- wie jy het nou met waarskynlik in Probleem Stel 1-- wie se naam word dus gespel. En dink jy haar naam getik in 'n rekenaar program wat gebruik iets soos getString. Ten einde te haal diegene toetsaanslagen, hoe gaan ons oor wat 'n string, 'n woord, 'n lid, of verskeie briewe soos hierdie hier? Ons het gepraat oor die laaste keer heelgetalle en probleme wat ontstaan ​​met heelgetal oorloop en swaai punt waardes en probleme wat ontstaan ​​binne presisie. Met snare, ons ten minste het 'n bietjie meer buigsaamheid omdat strings-- net in die werklike world-- kan 'n mooi arbitrêre lengte wees. Pretty kort, redelik lank. Maar selfs dan, gaan ons vind dat rekenaars kan soms loop uit van die geheue en selfs nie slaan 'n groot genoeg tou. Maar vir nou, laat ons begin om te visualiseer 'n string as iets in hierdie bokse hier. So ses sulke bokse, wat elk verteenwoordig 'n karakter of "kar." So onthou dat "char" - c-h-'n-r-- is een van die ingeboude data tipes in C. En wat is lekker is dat jy kan gebruik dat die soort van as 'n boublok, 'n legkaart stuk, as jy wil, 'n vorm groter tipe data wat ons sal voortgaan 'n "string." te noem Nou, wat is nuttig oor die denke oor dinge soos snare op hierdie manier? Wel, dit blyk dat ons kan eintlik gebruik hierdie struktuur om werklik toegang individuele karakters in 'n mooi eenvoudige manier. Ek gaan om voort te gaan en die skep 'n lêer met die naam "stringzero.c," maar jy kan dit noem wat jy wil. En op die kursus se webblad is reeds hierdie voorbeeld in advance, sodat jy nie nodig het om te tik alles uit. En ek gaan om voort te gaan en eers int main nietig. En binne 'n paar dae, ons sal begin om uitmekaar te terg wat nietig is hier, hoekom dit int langs hoof, en so meer. Maar vir nou, laat ons voortgaan kopieer plak dit. Ek gaan 'n string genoem is, te verklaar. En ek gaan om terug te keer uit GetString wat die gebruiker in. Dit gaan om 'n eenvoudige program, geen instruksies, Ek gaan net blindelings verwag dat die gebruiker weet wat om te doen om dit eenvoudig te hou. En nou gaan ek 'n te hê vir lus. En binnekant van my lus vir Ek is gaan hê int i kry nul. En ek is weer net 'n konvensie, 'n indeks veranderlike vir tel, maar ek kon noem dit net wat ek wil. Ek gaan om te doen wat ek minder goed than-- Zamyla se naam is ses letters. So ek gaan hard kode wat daar vir nou. En dan het ek ++. En nou binnekant van hierdie krullerige draadjies Ek gaan printf te doen, en ek wil om een ​​te druk karakter op 'n tyd. So ek gaan% c te gebruik vir miskien die eerste keer. En dan wil ek elke te druk karakter op sy eie lyn. So ek gaan 'n te sit bietjie agteroorskuinsstreep N daar. Sluit kwotasie. En nou wil ek hier iets om te doen. Ek wil uit te druk die spesifieke brief in die tou, s, as ek iterating van nul op tot ses. Met ander woorde, ek wil druk die i'th karakter van s. Nou hoe kan ek dit doen? Wel baie soos die bokse in hierdie voorstelling hier soort, roep die idee van die boks letters in, kan jy ook so doen sintakties in C deur eenvoudig spesifiseer, Ek wil uit te druk s se i'th karakter. Met behulp van die vierkantige hakies op jou rekenaar se sleutelbord wat op 'n Amerikaanse sleutelbord is algemeen bo jou terugkeer sleutel. So, dit is nie heeltemal reg nog, as jy dalk opgemerk het. Maar ek gaan soort blindelings voor uitkom hier. En ek gaan om te doen maak string 0. Maar voor ek dit doen, laat ons sien of ons kan nie 'n paar algemene foute verwag. Is dit gaan te stel? Nee, ek mis 'n hele klomp van die dinge. Biblioteke ek gehoor het. So wat header lêers kan ek hier wil voeg? Ja. Publiek: Jy moet standaard I / O [onhoorbaar] David J. Malan Uitstekende. So ek moet standaard I / O. Want wat doel wil ek standaard I / O? Vir printf. So sluit stdio.h. En jy ook voor dat ek sluit die CS50 biblioteek om watter rede? Snare te hê. So ons sal sien wat CS50 se biblioteek doen hierdie idee van 'n string te skep. Maar vir nou, kan jy net dink dit as 'n werklike data tipe. So wat blyk te wees 'n bietjie skoongemaak. En nou is ek gaan om voort te gaan en inderdaad doen maak string 0. Saamgestel. So dit is goed. So ./string0 laat my zoom in sodat ons kan sien nader wat gebeur. Betree. Z-A-M-Y-L-A betree. En ons het gedruk om uit te Zamyla se naam. So dit is redelik goed. So nou, laat ons gaan voort en hierdie program loop weer en tik Daven se volle naam. Verrassing. Betree. Hmm. Ons het nog nie gedruk Daven se volle naam korrek. Nou moet dit voor die hand liggend in wees terugblik as gevolg van wat, soort, dom ontwerp besluit? Ja, ek het hard gekodeer die ses binnekant van my lus vir. Nou ek het dit net omdat Ek het geweet Zamyla se naam gaan ses letters te wees. Maar seker dit is nie 'n algemene oplossing. So dit blyk ons ​​kan dinamiese uit te vind die lengte van 'n string deur die roeping van 'n funksie genoem strlen. Weereens, doelbewus saaklik net die naam te maak dit meer gerieflik om te tik. Maar dit is sinoniem met om die lengte van 'n string. Ek gaan om terug te gaan na my terminale venster en re-run van die samesteller. Maar dit is skree op my. Implisiet verklaar biblioteek funksie strlen met tipe unsigned int const-- Ek is verlore. Heeltemal. So, veral as jou oë begin glans met fout boodskappe soos hierdie, fokus eerlik oor die eerste paar woorde. Ons weet dat die probleem is in lyn 8, soos hier aangedui. En dit is in string-0.C. Implisiet verklaar biblioteek funksie strlen. So wat algemeen gaan 'n patroon van die fout boodskappe. Implisiet verklaar iets. Dus, in kort, wat het ek gelyk of met betrekking gedoen het om te reël 8, hier. Wat kan die oplossing selfs As jy nog nooit gebruik strlen jouself? Publiek: 'n Deel van 'n ander biblioteek? David J. Malan Deel van 'n ander biblioteek. So is dit verklaar, om so te praat. Dit is in sommige lêer genoem behalwe stdio.h en CS50.h. Nou waar is dit gedefinieer? Om eerlik te wees, jy moet net weet dit uit die top van jou kop, of u Google dit en vind uit. Of weet dit, het ek oopgemaak in die CS50 toestel aan om die terminale program, wat is net die groot, full screen weergawe van Wat is in die onderkant van gedit se venster. En dit blyk dat daar 'n Net so bondige opdrag, genoem man vir die handleiding, waar as jy tik in die naam van 'n funksie en druk Enter, jy sal terug te kry redelik arcane dokumentasie. Dis net die teks wat in die algemeen lyk 'n bietjie iets soos hierdie. Dit is 'n bietjie oorweldigend met die eerste oogopslag. Maar eerlik ek gaan Laat my oë glans en net fokus op die deel Ek omgee vir die oomblik. Wat is hierdie. Wat lyk soos struktureel iets wat ek ken. Inderdaad die man bladsy, so om te praat, sal jou vertel in wat kop liasseer 'n funksie soos strlen gedefinieer word. So ek gaan om terug te gaan nou aan gedit. En ek gaan om voort te gaan en voeg hier include en stoor die lêer. Ek gaan die skerm skoon te maak met Beheer L As jy wonder. En ek is te re-run make gaan string.0, stel hierdie tyd. ./string.0 Zamyla. Dit blyk te werk Laat my gaan voor en tik dit met Davenport. Betree. En dit is ook blyk te werk. So ons kan doen 'n bietjie beter as dit, al is, kan ons begin om netjies dinge tot net 'n bietjie. En ek gaan om werklik stel 'n ander ding nou. Ek gaan om voort te gaan en red dit in 'n ander lêer. En ek gaan om te bel hierdie lêer string1.c net om in ooreenstemming met die kode wees jy sal in staat wees om uit te vind aanlyn. En laat ons fokus op presies dieselfde kode. Dit blyk dat ek was soort neem vanselfsprekend dat my laptop, en op sy beurt, die CS50 toestel het 'n baie van die geheue, 'n baie Geheue, 'n baie grepe van ruimte waarin ek kan stoor snare. Maar die werklikheid as ek getik lang genoeg is, en genoeg toetsaanslagen, Ek kon in teorie tipe in meer karakters as my rekenaar fisies het geheue vir. En dit is problematies. Baie soos 'n int kan slegs tel so hoog is, in teorie, jy kan net gedrang so baie karakters in jou rekenaar se geheue of Random Access Memory. So ek het 'n beter verwag hierdie probleem, selfs al is dit dalk 'n seldsame hoek geval, om so te praat. Nie gebeur nie, wat dikwels, kan gebeur. En as dit gebeur en ek doen nie antisipeer en program vir dit, my program kan doen wie weet. Vries, hang, herlaai, wat ook al. Iets wat verwag kan gebeur. So wat ek gaan doen nou, voortaan regtig, voor ek ooit blindelings Gebruik 'n veranderlike soos s wat is aangestel om die terugkeer waarde van 'n ander funksie soos getstring, Ek gaan om seker te maak dat die waarde geldig is. So ek weet net van dit gelees CS50 se dokumentasie vir getstring, wat uiteindelik sal ons wys jou op, dat getstring gee 'n spesiale simbool genoem NULL, N-U-L-L in alle pette, as iets verkeerd gaan. So normaalweg, dit gee 'n string. Maar anders as dit terug N-U-L-L-- ons sal uiteindelik sien wat dit werklik means-- wat net beteken iets sleg gebeur het. En dit beteken, net soos in Scratch, Ek kan 'n toestand hier so C, As s nie gelyk NULL. So as jy dit nie gesien het nie, dit net beteken nie gelyk. So dit is die teenoorgestelde van gelyk gelykes, wat onthou, verskil van enkele gelyk, wat opdrag. So as s nie gelyk NULL, slegs dan doen Ek wil hierdie reëls van die kode uit te voer. So met ander woorde, voordat ek duik in blindelings en begin iterating oor S, en die behandeling van dit asof dit 'n reeks van karakters, ek gaan nie eers te kontroleer, Wag 'n minuut, is S beslis nie gelyk aan die spesiale waarde, NULL? Want as dit is, kan slegte dinge gebeur. En nou, aanvaar dat slegte dinge gebeur beteken dat jou program crashes, en jy kan nie noodwendig herstel. So gesê, dit lyk leliker. Dit is soort van verwarrend nou blik op. Maar dit sal meer geword vertroud voor lank. Maar ek gaan voor te stel nou een ander verbetering. Dit is 'n verbetering van korrektheid. My program is nou meer korrek nie, want in die seldsame geval dat daar nie genoeg geheue bestaan ​​nie, sal ek dit hanteer, en ek sal net niks doen nie. Ek sal ten minste nie crash. Maar laat ons nie 'n finale weergawe hier. En 'n lêer genaamd string2.c. Ek is van plan om dit te plak dieselfde kode vir net 'n oomblik, en ek gaan dit na vore te bring lyn, 11 hier, want net 'n oomblik. Nou is die realiteit is dat slim opstellers soos klang dit kan regmaak vir ons agter die skerms sonder dat ons ooit weet. Maar laat ons dink oor hierdie fundamenteel as 'n problematiese ontwerp. Hierdie lyn van die kode is, natuurlik, gesê inisialiseer 'n veranderlike i na 0. Dit is redelik eenvoudig. En wat is weer hierdie verklaring, hier, i ++ doen? Ons het dit voorheen gesien het nie, maar ons het nie regtig daaroor praat. Publiek: die verhoog i. David J. Malan die verhoog i. So op elke iterasie deur hierdie lus, elke siklus, jy die verhoog i een. So dit raak groter, en groter, en groter totdat die lus beëindig. Hoe dit beëindig? Wel, daar is dié middel toestand wat ons het voorheen gebruik. Jy het gesien en in ipv in die P stel. Maar wat is hierdie woord? Doen die volgende lus so Solank as wat ek is minder as wat? Publiek: Die lengte van die string. David J. Malan Die lengte van die string. So dit beteken mooi skoon Engels in daardie sin. Nou is die probleem is dat elke keer as ek Itereer deur middel van hierdie lus in teorie, Ek vra hierdie vraag. Is ek minder as die string lengte van s? Is ek minder as die string lengte van s? Nou is ek die verandering op elke iterasie? Dit is. As gevolg van die ++. So elke iterasie i is om groter. Maar is s om groter of kleiner, of verander nie? Nee Dus, in terme van die ontwerp, een van die asse waarlangs ons probeer kode te evalueer in die klas, dit voel soort van dom. Net soos jy is letterlik, op elke iterasie van hierdie lus vra die dieselfde damn vraag weer, en weer, en weer, en letterlik Dit is nooit gaan verander. Ten minste as ek nie raak s en probeer om die inhoud van s te verander. So ek kan doen 'n bietjie beter as dit. En wat ek gaan doen, is nie verklaar net een veranderlike i, maar 'n tweede veranderlike Ek sal arbitrêr, maar konvensioneel, noem dit n. Ken n gelyk aan die string lengte van s. En dan hier, ek gaan om te doen 'n slim klein optimalisering, so te praat, wat aan die einde van die dag is nie meer korrek of nie minder nie korrek as voorheen. Maar dit is 'n beter ontwerp. In die feit dat ek die gebruik van minder tyd, minder CPU siklusse, so te praat, dieselfde te beantwoord vraag, maar net een keer. Enige vrae oor daardie algemene beginsel van die verbetering, sê, 'n program se doeltreffendheid? Ja? Publiek: Hoekom doen jy gebruik om die [onhoorbaar]? David J. Malan Goeie vraag. So hoekom doen ons die ++ op die einde van Ek plaas van die begin van die i? In hierdie geval, dit het geen funksionele impak. En in die algemeen, ek is geneig om te gebruik die postfix operateur sodat dit 'n bietjie meer duidelik as wanneer die operasie is om te gebeur. Vir diegene wat nie vertroud is, is daar 'n ander stellings waardeur jy ek kon doen ++. Dit is funksioneel ekwivalent in hierdie geval want daar is niks anders rondom die incrementation. Maar jy kan kom met gevalle en reëls van die kode waarin dit maak 'n verskil. So oor die algemeen, het ons dit nie doen nie selfs praat oor hierdie een. Want eerlik, dit maak jou kode sexier, en soort van bedrieër, en minder karakters. Maar die werklikheid is dat dit 'n baie moeiliker, Ek dink, selfs vir my verstand te draai rondom dit soms die einde van bedrywighede. So as 'n eenkant, as jy regtig graag hierdie nie, selfs al is dit soort van sexy soek, kan jy dit ook doen i + = 1, wat is die leliker weergawe van die dieselfde idee vir postfix incrementation. Ek sê dit en jy moet pret daarvan, maar jy sal kom kode om te sien as iets mooi voor lank. [Gelag] David J. Malan Right? Ja. Vraag in die middel. Publiek: moet jy int n sê? David J. Malan Jy doen nie nodig int N te sê. So, want ons het reeds int gesê, jy hoef nie dit weer te sê nie. Die vangs is dat n moet dieselfde wees data tipe as ek. So dit is net 'n gerief hier. Ja. Publiek: Kan jy gaan oor die Druk karakter se bracket i weer? David J. Malan Beslis. So% c, onthou van verlede tyd, is net 'n tydelike. Dit beteken sit 'n kar hier. agteroorskuinsstreep n, natuurlik, net middel sit 'n lyn breek hier. Sodat net laat, nou, hierdie stuk van die nuwe sintaksis. En dit is letterlik sê, gryp die string genoem is en gaan kry om sy i'th karakter, om so te praat. En ek sê hou i'th karakter want op elke iterasie van hierdie lus dit is asof ons die druk uit die eerste s bracket 0, as 'n programmeerder kan sê. Dan is bracket 1, dan is bracket 2, dan 3, dan 4. Maar dit is natuurlik 'n veranderlike, sodat ek net druk dit met i. Sleutel, al is, is om te besef, veral as jy het nie is acclimating aan hierdie wêreld van ontwikkeling, waar ons almal blyk te tel vanaf nul, gotta begin tel vanaf nul nou. Omdat snare, eerste karakter, die Z in Zamyla is vir 'n beter of vir slegter gaan op plek getal nul te leef. Alle reg, so laat my bring ons terug hier om Zamyla en sien wat werklik aan die gang op onder die kap. So daar is hierdie idee van die tipe gooi. Jy kan eintlik gespeel met hierdie reeds miskien vir die hacker uitgawe van P stel een. Maar soort beslissende verwys net na die vermoë om in die C en 'n paar ander tale een data tipe om te skakel na 'n ander. Nou hoe kan ons dit sien mooi reguit? So hierdie, onthou, is die begin van die Engelse alfabet. En die konteks, onthou, uit soos 'n week gelede is ASCII. Die American Standard Code vir Inligting-wisselaar. Wat net 'n baie lang pad sê 'n afbeelding van letters om getalle en van getalle met letters. So 'n deur M hier dot dot dot, lyne met, onthou, die desimale getal 65 op tot. En ons het nie te praat oor hierdie uitdruklik maar seker daar is soortgelyke nommers vir klein letters. En inderdaad, daar is. Die wêreld het besluit om 'n paar jaar gelede dat daar min a, kleinletter a, gaan wees 97. En min b gaan te wees 98, en so meer. En vir enige ander sleutel op u sleutelbord, is daar gaan 'n soortgelyke patroon van stukkies te wees. Of anders gestel, 'n desimaal nommer. So die vraag aan die hand, dan is hoe kan ons eintlik sien dit onder die enjinkap? So ek gaan weer oor te gaan na gedit. En eerder as die tipe hierdie een van nuuts af, Ek gaan om voort te gaan en net oop om iets van vandag se kode genoem ASCII nul. En ASCII nul lyk. So laat draai ons gedagtes rondom hierdie. So die eerste, het ek opgemerk die kode, wat lekker is. Want dit is letterlik vertel my wat om te verwag, vertoon 'n kaart vir hoofletters. Nou heeltemal weet ek nie wat ek bedoel dat, so laat lei. In Engels, miskien ietwat techie Engels, Wat word deur lyn 18 verskyn om te doen vir ons? Net in lyn 18. Wat is dit beïnvloeding? Wat gaan dit te skop af hier? Publiek: A lus. David J. Malan 'n lus. En hoeveel keer is wat gaan om te Itereer? Publiek: [INTERPOSING STEMME] ses keer. David J. Malan Nie ses keer. Publiek: 26 keer. David J. Malan 26 keer. Ja, jammer. 26 keer. Hoekom? Wel, dit is 'n bietjie vreemd, maar Ek het begin tel van 65. Wat is vreemd, maar nie verkeerd nie. Dit is nie sleg nie per sê. En ek doen dit net want vir hierdie voorbeeld, Ek is soort van vooruit dat kapitaal A was 65. Nou is dit nie die mees elegante manier om dit te doen, om soort van harde-kode esoteriese waardes wat niemand ooit verwag om te onthou. Maar vir nou, sien dat ek om dit te doen om deur middel van 65 plus 26. Omdat glo ek wil nie eens die rekenkundige om te doen in my kop. So ek sal laat die opsteller dit doen. Maar dan op elke lus, elke iterasie van die lus, ek verhoog van i. So nou is dit lyk 'n bietjie kripties. Maar ons moet die basiese bou het blokke met wat om dit te verstaan. % C is net 'n plekhouer vir 'n kar. % I is 'n plekhouer vir 'n int. En dit blyk dat deur die gebruik van hierdie nuwe sintaksis, hierdie hakies, sodat te praat, so 'n data tipe in 'n hakies, Ek kan die samesteller dwing om te behandel Ek het nie 'n heelgetal is, maar as 'n kar. Daardeur wys my die karakter ekwivalent van daardie getal. Nou hier, hierdie kode is pretty much identies. Ek wou net om te super eksplisiete die feit dat ek begin by 97, wat klein letters is a. Op up deur 26 meer letters. En ek is weer doing--, beslissende i, om so te praat. Of tipe beslissende i, om so te praat. Uit 'n int 'n kar. So het die eindresultaat gaan wees, eerlik, inligting wat ons reeds weet. Ek gaan maak ascii-0 dot-- nie dot c. Kennis, het jy waarskynlik gemaak dat fout as ek het net per ongeluk. Maak ascii-0. Nou gaan ek ./ascii-0 te doen. Ek sal vergroot, en ongelukkig dit gaan om te blaai die skerm af. Maar ons sien 'n hele grafiek waar 'n kaarte tot 97, b kaarte tot 98, en as ons te blaai verder A, natuurlik, kaarte tot 65. So dit is net om te sê dat wat ons verkondig, daar is hierdie ekwivalensie, is in die feit dat die saak in die werklikheid. So 'n vinnige verandering van hierdie. Laat my oop ASCII-1.c. En dit agterkom slim, soort van, verduideliking van hierdie. Dit is ascii-1.c, en sien hierdie mal ding. En dit regtig aan die hart van wat rekenaars doen. Selfs al het ons die mens sou nie in terme van letters-- tel Ek begin nie dink, alle reg om 'n dan B, en gebruik die fisiese voorwerpe te tel. Jy kan seker sê dat ek wil inisialiseer 'n veranderlike genoem c-- maar ek kan dit anything-- genoem het so c geïnisialiseer om kapitaal A. Want op die einde van die dag, die rekenaar gee nie om wat jy stoor, dit gee net hoe jy wil dat die inligting aan te bied. Hoe om die rekenaar te wil jy dat patroon van stukkies interpreteer? So, dit is nie iets wat ek sou die algemeen beveel om te doen. Dit is regtig net 'n voorbeeld te dra wat jy kan absoluut inisialiseer 'n heelgetal tot 'n kar. Omdat onder die kap van 'n kar, natuurlik, is net 'n nommer 0-255. So kan jy seker sit dit binne-in 'n int. En wat is dit dan ook demonstreer, is dat ons kan omskep van een tik aan 'n ander, hier, uiteindelik die druk van die dieselfde ding. En in werklikheid, dit sal ek los online-- was bedoel om dit te sê, weer, hier. Laat my tot skoon online, en ons sal sien in 'n aanlyn walkthrough as dit nodig is, wat bedoel was daar. OK. So laaste voorbeeld nou met A's en B's en dan sal ons neem dinge op 'n kerf. So met 'n en b's en c's in die kapitalisasie en die ekwivalensie daarvan, laat 'n blik op hierdie voorbeeld hier. Nog 'n kode voorbeeld. Ons sal die een wat oopmaak reeds gemaak is, sodat ons het nie om dit te tik almal uit van nuuts af. En kennis in afwagting ons met behulp van verskeie kop lêers, waaronder ons nuwe vriend, string.h. En dit lyk, op die eerste oogopslag, 'n bietjie kripties. Maar laat ons kyk of ons nie kan redeneer deur wat hier aangaan nie. Ek het eers 'n string van die gebruiker, en ek sit dit in 'n string veranderlike genoem is. Kopieer plak voor. In lyn 22, ek is blykbaar doen presies wat Ek het 'n oomblik gelede, ek iterating oor die karakters in s. En die nuwe truuks hier gebruik string lengte, die minderjarige optimalisering van die stoor van die string lengte in n, eerder as weer bel strlen, en weer en weer. En kyk net dat ek minder as n. Nou hier, dinge 'n bietjie interessant. Maar dit is net 'n aansoek van hierdie selfde nuwe idee. Wat in Engels doen s bracket i verteenwoordig? Publiek: Tel elke karakter [onhoorbaar]. David J. Malan tel elke karakter. En selfs meer saaklik, s bracket Ek verteenwoordig wat? Sou jy sê. Jy nie op die plek hier te sit. Publiek: Well-- David J. Malan So as die woord is-- indien die string is Zamyla, wat starts-- Publiek: --you hanteer die karakters separately-- David J. MALAN: Goed. Presies. Die vierkante hakies notasie kan jy elke karakter afsonderlik bekom, so se bracket 0 gaan die wees eerste karakter in die string. s bracket 1 gaan wees die tweede, en so meer. So die vraag wat ek vra, hier, in hierdie toestand is wat? Is die i'th karakter se groter as of gelyk om 'n kleinletter? En wat beteken dit, hier, met die dubbel-karakters? Gehoor (saam): En. David J. Malan En. Dis net gelykstaande aan die. En is dit nie 'n navraag in C, moet jy gebruik, lastig, ampersand ampersand. En dit, omgekeerd, vra, is s se i'th karakter minder as of gelyk in klein letters z? En weer, hier is waar begrip van die onderliggende implementering van 'n rekenaar sin maak. Let daarop dat, selfs al het ek die dot dot dot daar, lyk soos 'n deur Z in klein is alle aangrensende waardes uit 97 op tot. En dieselfde vir hoofletters begin op 65. So het die afhaal, dan, is dat in Engels, hoe sou jy beskryf watter lyn 24 doen? Ja? Publiek: Op 24 is dit om te kyk of elke karakter is 'n klein. David J. Malan Dit kontroleer of elke karakter is 'n klein letter. So selfs meer saaklik, is die i'th karakter se klein? Dit is al wat ons uitdrukking hier logies, 'n bietjie kripties, maar uiteindelik mooi reguit. Is s se i'th karakter klein? As dit so is, en hier is waar dinge 'n bietjie verstand buig vir net 'n oomblik, as dit so is, gaan voor en druk 'n karakter. So dit is net 'n tydelike, maar wat karakter? Hoekom doen ek s bracket i minus hierdie uitdrukking hier? Wel sien die patroon hier. Die werklike getalle maak nie saak nie so veel nie. Maar let op dat 97 is hoe ver weg van 65? Publiek: 32. David J. Malan 32. Hoe ver is 98 van die 66? Publiek: 32. David J. Malan Little c van die groot C? 32. So is daar 32 hoep uit een brief na die ander. So eerlik ek, kon vereenvoudig dit dat. Maar dan is ek soort van harde kodering Hierdie lae vlak van begrip dat geen leser ooit gaan om te verstaan. So ek gaan om dit te veralgemeen as ek weet wat die klein letters is groter. Ek weet dat die hoofletters is kleiner waardes, ironies genoeg. Maar dit is effektief gelykstaande aan sê aftrek 32 van s bracket i. So in die konteks van hierdie briewe, indien die brief gebeur a, klein om te wees a, en ek trek 32, watter uitwerking het wat, wiskundig op kleinletter a? Publiek: Capitalizes-- David J. Malan kapitaliseer nie. En inderdaad, dit is hoekom ons program word genoem kapitaliseer nul. Hierdie program óf kapitaliseer 'n brief, na die monitor indien dit inderdaad 'n klein letter. Andersins, in lyn 30, wat moet ek doen as dit is nie 'n klein letter dat ek op soek na 'n spesifieke herhaling in die lus. Net druk dit uit. So doen dinge nie verander nie dit is nie eens klein. Beperk om jouself te bietjie 'n bietjie deur z. Nou is dit redelik heilig. Maar aan die einde van die dag, van hierdie is hoe ons eens op 'n tyd, gehad om dinge te implementeer. As ek in plaas oop te kapitaliseer een, o God te dank. Daar is 'n funksie genoem na die boonste wat kan doen alles wat ons nou net gedoen op 'n redelik lae vlak. Nou na die boonste is interessant want dit is in 'n lêer verklaar, en jy sal net weet dit deur die nagaan van die dokumentasie, of vertel, sê, in die klas, waar dit bestaan, in 'n lêer genaamd ctype.h. So, dit is 'n nuwe vriend van ons. En na die boonste doen presies wat sy naam suggereer. Jy kan slaag, as 'n argument tussen hierdie hakies, 'n paar karakter. Ek gaan in die i'th karakter te slaag S met behulp van ons fancy nuwe notering waarby vierkantige hakies. En neem 'n raaiskoot, wat is die terugkeer waarde van na die boonste blykbaar gaan te wees? 'N hoofletter. 'N hoofletter. So as ek slaag in klein a, hopelik, per definisie van na die boonste, dit gaan 'n terugkeer hoofletters A. Anders As dit is nie 'n klein letter in die eerste plek, ek het net druk dit uit. En inderdaad, kennis van die tweede vriend hier. Nie net na die boonste bestaan, maar is laer, wat eintlik antwoorde op die vraag vir my. Nou wie hierdie dinge geskryf het, 10s jare gelede, jy weet wat? Geïmplementeer om die boonste en is verlaag die gebruik van kode soos hierdie. Maar weereens, in ooreenstemming met hierdie idee van ekserpering weg, soort, laer vlak implementering besonderhede. En staan ​​op die skouers van die mense wat gekom het voor ons, met behulp van funksies soos om die boonste en laer, wat wonderlik genoeg is mooi genoem om te sê wat hulle doen, is 'n wonderlike paradigma aan te neem. Nou, dit blyk dat as ek lees die man bladsy vir, sê, na die boonste, Ek leer iets anders. So man toUpper. Dit is 'n bietjie oorweldigend. Maar kennisgewing, hier is wat melding maak van die kop lêer wat ek moet gebruik. As 'n eenkant, want dit is misleidend, die funksie gebruik ints plaas van karakters vir redes van die fout nagaan. Maar ons sal miskien kom terug na wat in die toekoms. Maar let op, hier, na die boonste bekeerlinge die letter C na hoofletters indien moontlik. So dit is redelik eenvoudig. En nou, laat ons 'n bietjie meer spesifiek. Kom ons kyk na die deel van die man bladsy onder terugkeer waarde. Die waarde is dat van die bekeerde brief. Of c, asof die omskepping nie moontlik was nie, waar c die oorspronklike insette. Wat ek weet van hier, van die argument aan boonste. So, wat is die afhaal van hierdie? Die waarde is dat van die bekeerde brief, of c, die oorspronklike brief, indien die omskakeling nie moontlik was nie. Wat verbetering kan ek dus maak my kode se ontwerp? Ja? Publiek: Jy kan die ander verwyder. David J. Malan Ek kan verwyder die ander verklaring, en nie net die ander verklaring. Publiek: Jy kan verwyder [onhoorbaar]. David J. Malan Ek kan verwyder die hele vurk in die pad, die as heeltemal anders. So ja, laat my oop die finale weergawe van hierdie, kapitaliseer-2 en sien net hoe, indien jy sal sexy, die kode kry nou, in wat ek verminder van 'n paar sewe of so lyne tot net vier, die funksies wat ek bedoel deur bloot 'n beroep na die boonste, verby in s bracket i, en druk uit, met die plekhouer% c, daardie spesifieke karakter. Nou waarskynlik, daar is 'n fout, of ten minste die risiko van 'n fout, in hierdie program. So net om terug te kom na 'n vroeëre afhaal, wat moet ek seker ook doen hierdie program is dit meer robuuste te maak, sodat daar is geen manier wat dit kan crash, selfs in sommige gevalle? Publiek: Maak seker dit is nie NULL. David J. Malan Maak seker dit is nie NULL. So regtig, hierdie super te maak behoorlike, moet ek iets soos dit doen, As s is nie NULL, dan gaan voort en voer hierdie reëls van die kode, wat Ek kan dan streepje soos daardie, en dan sit in my naby stut. So goed vasmaak saam van die twee idees. Ja? Publiek: Kan jy gebruik 'n doen terwyl loop, in plaas? David J. Malan Kan Ek doen 'n doen terwyl loop? Publiek: --you wil om seker te maak dat jy eintlik [onhoorbaar]. David J. Malan Kan gebruik jy 'n doen terwyl? Kort antwoord, nee. Omdat jy oor om te stel 'n ander hoek geval. As die string is van nul lengte. As ek byvoorbeeld net getref Ingaan, sonder om ooit te tik Zamyla. Ek gaan jou terug te gee 'n werklike string, soos ons sal uiteindelik sien, wat zero karakters. Dit is nog 'n string, dit is net super kort. Maar as jy 'n doen terwyl, jy gaan blindelings probeer om iets te doen het met betrekking tot daardie string, en niks gaan om daar te wees. Publiek: Wel, as jy het doen [onhoorbaar] terwyl s-- David J. Malan O ek sien, hou om 'n string van die gebruiker. So kort antwoord, jy kon, en hou neul hulle te gee 'n string wat is kort genoeg om in te pas in die geheue. Absoluut. Ek het net verkies om nie te. As hulle gee nie vir my die string Ek wil ek ophou, ek gee. Maar absoluut, wat vir die doel, jy kan absoluut doen. So het die biblioteek se kop lêers wat Ons is nou vertroud met dit, hier. Standard I / O, CS50.h, string.h, ctype.h, en daar is inderdaad ander. Sommige van julle het ontdek die wiskunde biblioteek in math.h. Maar laat ek jou, nou, te hierdie hulpbron wat CS50 personeel, Davin, en Rob en Gabe bepaalde saamgevoeg het. Dit sal binnekort 'n skakel op die kursus se webblad. Dit is bekend CS50 verwysing. Watter net om jou 'n vinnige smaak van dit, werk soos volg. Laat my gaan reference.cs50.net. Jy sal sien op die linkerhand kant 'n oorweldigende lys funksies wat kom met c. Maar as ek gee, vir die oomblik, oor iets soos strlen, Ek kan dit tik daar. Dit filters af in die lys net wat ek omgee. Ek gaan om dit te klik. En nou op die weg is, jy sal sien wat ons hoop is 'n meer eenvoudige, menslike vriendelike verduideliking van hoe hierdie funksie werk. Gee die lengte van 'n string. Hier is 'n opsomming, hier is hoe jy gebruik dit in terme van die kop lêer, en in terme van wat die funksie lyk in terme van sy argumente. En dan is hier, opgawes die lengte van 'n string. Maar vir dié van julle meer gemaklik, jy kan eintlik kliek vir meer gemaklik, en die inhoud van hierdie bladsy, nou, sal verander die standaard waardes van wat om te wees jy met behulp van die man bladsy. Met ander woorde, CS50 verwysing is 'n vereenvoudiging van die mens bladsye deur die personeel, vir studente. Veral diegene wat minder gemaklik en in tussen, sodat jy hoef nie te probeer om te draai jou gedagtes rond, eerlik, 'n paar redelik kriptiese sintaksis en dokumentasie iewers. So hou dit in gedagte in die dae wat kom. So hier, weer, is 'n Zamyla. Kom ons vra nou 'n vraag wat 'n bietjie meer menslike toeganklik. Danksy Chang, wat al druk meer olifante ononderbroke vir die afgelope paar dae. Ons het 'n geleentheid te gee ten minste een van hulle weg. As ons maar net 'n vrywilliger kry om te kom op tot teken op die skerm. Hoe gaan hier? Kom op. Wat is jou naam? ALEX: Alex. David J. Malan Alex. Alle regte. Alex, kom op. Ons is oor om te sien jou handskrif op die skerm hier. Alle reg, lekker om jou te ontmoet. ALEX: Nice om jou ontmoet. David J. Malan Alle regte. So, super eenvoudige oefening. Bar is nie hoog te kry 'n olifant vandag. Jy speel die rol van getstring. En ek gaan net vir jou die string wat jy gekry het. En dink dat jy, getstring, is genoem. En die mens, soos ek, het getik in Zamyla, Z-A-M-Y-L-A. Net gaan voort en skryf Zamyla op die skerm asof jy gekry het om dit en gestoor dit iewers in die geheue. Laat ruimte vir wat verskeie sal wees ander words-- dit is OK, gaan hou. [Gelag] So Zamyla, Uitstekende. So nou dink dat jy, getstring, weer genoem. En daarom het ek u voorsien, by die klawerbord, met 'n ander naam, Belinda. Alle regte. En nou het die volgende keer getstring is genoem, tik ek in iets soos Gabe, G-A-B-E. Jy is regtig neem aan die hart ewetoeganklike geheue. Watter is die tekens van alles heeltemal lukraak. OK. [Gelag] ALEX: Jammer my handskrif is sleg. David J. Malan Nee, dis OK. En hoe oor Rob, R-O-B. OK. Goed. So ek het jy nie verwag sou soort lê dinge op hierdie manier. Maar ons kan dit laat werk. So hoe het jy te werk gaan lê uit hierdie karakters in die geheue? Met ander woorde, as ons dink aan hierdie vierkantige swart skerm as wat 'n rekenaar se geheue, of die geheue. En onthou dat geheue is net 'n hele klomp van grepe, en grepe is 'n hele klomp van die stukkies. En stukkies is een of ander manier geïmplementeer word, oor die algemeen met 'n vorm van elektrisiteit in hardeware. So dit is soort van die gelaagdheid ons gepraat het oor en kan nou as vanselfsprekend aanvaar. Hoe het jy te werk gaan besluit waar om te skryf Rob versus Gabe versus Belinda versus Zamyla? ALEX: Ek het dit net in die gelas dat jy my vertel het. David J. Malan En dit is waar. Maar wat gereeld waar jy Belinda se naam en Gabe se naam? ALEX: Niks? David J. Malan [lag] So wat werk, is dit goed. So rekenaars is min meer ordelike as dit. En so wanneer ons implement-- daar bly net vir 'n moment-- wanneer ons eintlik iets soos implementeer getstring in 'n rekenaar, Zamyla kan gelê word redelik baie soos jy gedoen het op die skerm, is daar. En wat is die sleutel tot kennis hier is, wat Alex het, is daar 'n soort van 'n afbakening onder elk van hierdie woorde, reg? Jy het nie skryf Z-A-M-Y-L-A-B-E-L-ek-N-D-A-G-A--b Met ander woorde, daar is 'n soort van afbakening wat blyk te wees, soort, ewekansige spasiëring tussen die verskillende woorde. Maar dit is goed, want ons mense kan nou visualiseer dat hierdie vier verskillende snare. Dit is nie net 'n ry van baie van die karakters. So 'n rekenaar, dan, intussen, dalk 'n string neem soos Zamyla, sit elk van die letters binnekant van 'n greep van die geheue. Maar dat die getal is veel groter, natuurlik, as ses karakters. Daar is 'n hele klomp van die geheue. En so van nou af, is hierdie rooster van bokse gaan wat Alex net voor te stel het hier op die skerm. En nou, Alex, ons kan jy 'n bied blou of 'n oranje olifant uit Chang. ALEX: Ek sal 'n blou olifant neem. David J. Malan 'n blou olifant. So 'n groot applous, As ons kon, vir Alex hier. [Applous] ALEX: Dankie. David J. Malan Dankie. So het die afhaal is dat selfs al is die patroon soort verander met verloop van tyd, hier op die raad, was daar hierdie afbakening tussen die verskillende snare Alex het vir ons. Nou rekenaars, eerlik, kan dieselfde ding doen. Hulle kon soort van plop stringe oral in die geheue. Hier, hier, hier, hier. Hulle kon presies dit te doen. Maar, natuurlik, dit is waarskynlik nie die beste beplanning. Reg? As ek aanhou vra Alex te kry name, waarskynlik hy wil sit 'n paar meer hier, miskien tot hier, hier, hier, uiteindelik hier. Maar met 'n bietjie meer beplanning, beslis, ons kon lê dinge uit meer skoon. En inderdaad, dit is wat 'n rekenaar nie. Maar die catch is dat As die volgende string wat ek kry nadat Zamyla is iets soos die Belinda, stel waar ons kan skryf letter B met betrekking tot hierdie rooster? Waar sal jy gaan? Aan die regterkant van die a, onder die Z, onder die n? Wat sou jou eerste instink wees? GEHOOR: Onder die z. David J. Malan So onder die z. En dit is mooi eenvoudig, reg? Dit is soort van netjies, dit is wat ons doen op 'n klavier wanneer ons druk Enter of 'n e-pos wanneer 'n opsomming lys van dinge. Maar die werklikheid is dat rekenaars probeer om meer doeltreffend te wees, en gedrang beslis soveel data in geheue as moontlik, sodat jy nie enige grepe mors nie. Sodat jy nie mors nie 'n skerm Real Estate. En die probleem is, is dat as ons letterlik die brief b na 'n, hoe gaan ons te weet waar Zamyla se naam eindig en die Belinda se naam begin? So jy mense net voorgestel, wel, druk die Enter-sleutel, wese. Sit dit hier neer. Of selfs as Alex het, net begin skryf die volgende naam onder die vorige een, en onder daardie een, en dan onder daardie een. Dit is 'n visuele cue. Rekenaars het nog 'n visuele cue, maar dit is 'n bietjie meer bondige. Dit is hierdie funky karakter. Agteroorskuinsstreep 0, wat miskien herinner aan agteroorskuinsstreep n, en so meer, nou. Die spesiale ontsnapping rye. Agteroorskuinsstreep 0 is die weg van die verteenwoordig agt nul stukkies in 'n ry. 0000 0000. Die manier waarop jy spreek wat nie te getref die getal nul op jou sleutelbord, want in die feit dat 'n ASCII kar. Dit lyk soos 'n nommer, maar is eintlik 'n desimale getal wat verteenwoordig die omsendbrief Than, die omsendbrief lettertipe. Intussen agteroorskuinsstreep nul beteken letterlik sit agt nul grepe hier vir my. So, dit is ietwat arbitrêr. Ons kan 'n patroon gebruik het van stukkies, maar om die wêreld besluit om 'n jaar gelede, dat voor te stel die einde van 'n string in die geheue, net 'n hele klomp van die nulle. Omdat ons kan opspoor nie. Nou dit beteken dat geen letter van die alfabet voorgestel kan word met nulle. Maar dis OK, ons het reeds gesien wat ons gebruik 65 op in 97 op tot. Ons het nie enige plek kry naby aan al die nulle. So Belinda in 'n rekenaar se geheue eintlik gaan om hier te gaan. Ek het getrek dit in geel net ons aandag te vestig op dit. En kennis, ook hierdie is heeltemal arbitrêr. Ek het getrek dit as 'n rooster. Soos, geheue is net 'n paar fisiese voorwerp. Dit hoef nie noodwendig rye en kolomme, per se. Dit is net 'n hele klomp van grepe in hardeware geïmplementeer een of ander manier. Maar as daar na Belinda ek getik in Gabe se naam, hy gaan aan die einde hier in die geheue, en as ek getik in Daven se naam, byvoorbeeld, gaan hy hier beland. En ek kan voortgaan om te skryf nog meer name. Ongelukkig, as ek probeer om te skryf 'n super lang naam, Ek kan uiteindelik loop uit van die geheue. In welke geval, getstring is gaan NULL om terug te keer, soos ons sê. Maar gelukkig, ten minste in hierdie visuele hier, ons het nie heeltemal so ver. Nou wat is lekker is dat dit algemene idee van die behandeling van dinge as in bokse is verteenwoordiger van 'n funksie van die C en 'n baie tale, bekend as 'n skikking. 'N skikking is 'n ander tipe van data. Dit is 'n data struktuur, as jy wil. Struktuur in die sin van dit regtig, soort, lyk soos 'n boks, ten minste in jou geestesoog. 'N skikking is 'n aaneenlopende volgorde van identiese data tipes, terug na Terug op terug. So 'n string, in ander woorde, is 'n verskeidenheid van karakters. 'N verskeidenheid van die karakters. Maar dit blyk jy kan skikkings van trosse van die dinge. In werklikheid, kan ons selfs ' getalle in 'n skikking. So het die vorm waarin ons gaan om te begin verklaar hierdie data struktuur bekend as 'n skikking gaan ook vierkantige hakies te gebruik. Maar hierdie vierkantige hakies gaan het verskillende betekenis in hierdie konteks. En laat ons sien dit as volg. Veronderstel dat ek oopgemaak 'n nuwe lêer hier. En ek slaan dit as ages.c. En Ek sal hierdie spaar in my gids hier. En nou is ek gaan om voort te gaan en begin om iets te tik soos sluit CS50.h, sluit stdio.h, int belangrikste leemte. En dan binnekant van hier, ek wil eers 'n int genoem ouderdom. En ek gaan om dit te gebruik om 'n te kry int van die gebruiker vir sy of haar ouderdom. Maar hierdie program is bedoel om gebruik te word deur verskeie mense, ongeag die konteks. Ek het 'n lyn van mense. Almal van hulle het om te tik in hul ouderdom vir miskien 'n bietjie, ek weet nie, kompetisie, of gebeurtenis dat hulle aangekom het vir. So die volgende persoon, ek moet 'n ander veranderlike. Want as ek net nie ouderdom kry getInt, dis gaan afranselen, of oorskryf die vorige persoon se ouderdom. So dit is nie goed nie. So my eerste instink mag wees, o, al die regte, as ek wil verskeie mense se te kry ages-- kom ons noem hierdie age1, int age2 kry int, int age3 kry getInt. En nou is ek gaan gebruik sommige pseudokode kode hier. Doen iets met dié nommers. Ons sal laat dit vir 'n ander dag wat ons is daar te doen nie, want ons het net omgee vir die oomblik oor age1, age2, age3. Ongelukkig, as ek stel hierdie program en sit dit in die voorkant van die werklike gebruikers, Wat is die fundamentele swak ontwerp besluit dit lyk asof ek gemaak het? Ja? Publiek: [onhoorbaar] David J. Malan Ja, Ek het nie eens probeer om uit te vind hoeveel eeue Ek het eintlik omgee oor? As ek het minder as drie mense hier, en dus minder as drie eeue, Ek is nog steeds blindelings verwag drie. God verbied vier mense opdaag. My program sal nie net nog ondersteun. En so gaan dit, 'n lang storie Kortom, is nie 'n goeie gewoonte. Reg? Ek was in wese die kopiëring en plak kode en net die opstel van die veranderlike name. En, my God, as jy het, nie drie ouderdomme, maar 10, of 100, of selfs 6500 voorgraadse, byvoorbeeld. Dit is nie van plan om veral in elegante kode, of volhoubaar is. Jy gaan te hê herskryf die program elke keer jou aantal mense verander. So gelukkig in ons werklike ages.c lêer vir vandag, Ons het 'n meer slim oplossing. Eerstens, ek gaan die leen bou ons 'n paar keer gebruik, dit doen, terwyl loop, in orde te kry die aantal mense in die kamer. Ek gaan net om die gebruiker te teister, weer en weer, totdat hy of sy vir my gee 'n waarde van N is dit 'n positiewe heelgetal. Ek kon gebruik het, het verlede tyd ons kry positiewe int. Maar ons het nie dat vir die regte, so ek het voor en weer geïmplementeer hierdie idee. Nou hier, dit is die nuwe truuk. In reël 27, as die kommentaar in lyn 26 aandui, Verklaar 'n skikking waarin almal se ouderdom te stoor. So as jy wil te kry, nie een int, nie twee ints, maar 'n hele klomp van die ints. Spesifiek N heelgetalle, was n krag drie, kan wees 100, kan wees 1000. Die sintaksis, eenvoudig is om te sê, wat data tipe wil jy hê? Wat jy wil om te bel wat deel van die geheue? Wat wil jy die rooster te noem wat lyk soos hierdie picturaal? En in hakies hier, sê jy hoe groot jy die skikking te wees. En so het vroeër, toe ek gesê het die sintaksis is 'n bietjie anders hier, ons is nog steeds met behulp van vierkantige hakies, maar wanneer ek verklaar 'n skikking, die aantal binnekant van die vierkantige hakies middel hoe groot wil jy die skikking te wees. In teenstelling hiermee, wanneer ons gebruik is bracket i 'n oomblik gelede, is 'n string, is inderdaad 'n verskeidenheid van karakters, maar wanneer jy nie verklaar 'n veranderlike, Soos met hierdie navraag hier jy net om 'n spesifieke indeks, 'n spesifieke element van dié skikking. Sodra ons weet dat die res hiervan is eenvoudig. As nuwe ek eerste gaan druk Wat is die ouderdom van persoon getal i. Waar ek net sê persoon nommer een, persoon se nommer twee, persoon nommer drie. En ek is net besig met rekenkundige, sodat hulle soos normale mense, ons tel van een van hierdie program, en nie van nul. Toe bel ek getint, maar ek slaan die antwoord in die eeue-hakies i. Wat is die i'th ouderdom in die skikking. So, terwyl die laaste keer dat ons is die behandeling hierdie bokse as karakters vir Zamyla se naam, en ander. Nou, hierdie bokse verteenwoordig 32 stukkies, of vier grepe waarin ons kan stoor 'n int, 'n int, 'n int. Al wat, weer, is dieselfde data tipe. Nou moet ek iets dom, soos die tyd verbygaan, net te regverdig hierdie program te skryf. En dan hier, het ek weer Itereer oor die skikking gesê 'n jaar van nou af, persoon nommer een wil iets jaar oud. En om uit te vind wat math-- Ek bedoel, dit is nie baie ingewikkeld arithmetic-- Ek voeg net een van hul ouderdom. Net om te demonstreer, weer, hierdie. Net soos wat ek kan kruip in 'n string, s, so kan ek indeks in 'n verskeidenheid van ouderdomme, soos wat daar is. So waar is hierdie gaan wees om ons? So sal ons sien, uiteindelik, 'n n paar dinge in die dae wat kom. Een, al die tyd, toe jou eie programme te skryf, soos Mario, gulsig, krediet. Jy is die naam van die tik die program en slaan Enter. En dan kry die gebruiker se insette. Met getString, getInt, getLongLong, of die wil. Maar dit blyk dat C ondersteun iets genoem command line argumente, wat gaan ons te laat eintlik op die woorde wat jy tik, by die flikkerende vinnige, na jou program se naam. So in die dae, moet jy om te kom dalk iets soos Caesar tik, of ./caesar nommer 13, daarna. Ons sal sien hoe dit werk. Omdat inderdaad in probleem sit twee, ons is gaan jou bekend te stel om 'n bietjie iets herinner aan Ralphie se daag vroeër van kartografie. Die kuns van skommeling inligting. Dit, in werklikheid, is baie herinner aan wat Ralphie het. Dit is 'n voorbeeld van 'n enkripsie algoritme genoem rot13, R-O-T 13. Wat beteken eenvoudig draai die letters in die alfabet 13 plekke. En as jy dit doen, sal jy nou sien wat, miskien, 'n bekende frase. Maar die manier waarop ons gaan gebruik hierdie, uiteindelik, is meer algemeen. In P sit twee, in die standaard uitgawe, jy sal 'n paar van die getalle te implementeer, een genoem Caesar, een wat geroep is Vigenere. Beide van hulle is rotasie getalle, in een of ander manier wat jy draai een letter in 'n ander brief. En Caesar is super eenvoudig. Jy voeg een, het jy 13 voeg, of 'n getal tot 26. Vigenere doen dit op 'n per brief basis. So Vigenere, soos jy sal sien in die spec, is meer veilig is. Maar aan die einde van die dag wat jy sal implementeer en P het twee, is dat die sleutel wat jy maak albei gebruik vir enkripsie en dekripsie. Met verwysing na die proses van die draai gewone teks, 'n paar oorspronklike boodskap in reken teks, wat is iets geïnkripteer. En dit dan weer decrypten. In die hacker uitgawe, intussen, sal jy getaak met iets soortgelyks in die gees, waar ons sal gee jou 'n lêer van 'n tipiese Linux, of Mac, of Unix rekenaar genoem Etsy wagwoord, wat 'n hele bevat n klomp van die gebruikers name en wagwoorde. En dié wagwoorde het al geïnkripteer of hashed, om so te praat, meer behoorlik as jy sien in die spec. En die hacker uitgawe sal 'n uitdaging jy met die neem van 'n inset soos hierdie, en kraak die wagwoord. Dit is, uitzoeken wat die Human se wagwoord eintlik was. Omdat, ja, wagwoorde oor die algemeen nie in die helder gestoor word, en in die algemeen wagwoorde moet moeilik om te raai nie. Dit is nie dikwels die geval is. En wat ek gedink ons ​​wil doen, is om sluit af met 'n paar minute blik op 'n besonder swak keuse van wagwoorde van 'n film wat jy kan met liefde onthou. En indien nie, moet jy huur. [Video speel] -Helmet, Jy monster, wat gaan aan? Wat doen jy aan my dogter? -Permit My in te voer briljante jong plastiese chirurg, Dokter Phillip Schlotkin. Die grootste neus werk man in die heelal en Beverly Hills. Your Hoogheid. -Nose Werk? Ek verstaan ​​nie. Sy het reeds 'n neus-job. Dit was haar soet 16 teenwoordig. Nee, dis nie wat jy dink. Dit is baie, baie erger. As jy nie gee my nie die kombinasie van die lug skild, dokter Schlotkin sal gee jou dogter terug haar ou neus. - [Gasps] Nooooooooooooo. Waar het jy dit? Alles reg. Ek sal jou vertel, ek sal jou vertel. Nee, Pappa, no. Jy moet nie. -You're Reg om my liewe. Ek sal jou nuwe neus mis. Maar ek sal nie vir hulle die kombinasie maak nie saak wat. -Baie Goed. Dokter Schlotkin, doen jou ergste. -My plesier. Nee! Wag, wag. Ek sal jou vertel. Ek sal jou vertel. -Ek Het geweet dit sou werk. Alle reg, gee dit aan my. -Die kombinasie is een. -Een. -Een. -Twee. -Twee. -Twee. Drie-. Drie-. Drie-. -Four. -Four. -Four. -Five. -Five. -Five. -so Die kombinasie is een, twee, drie, vier, vyf. Dit is die domste kombinasie Ek ooit hoor in my lewe. Dit is die soort van ding wat 'n idioot sou hê op sy bagasie. -Thank Jou, jou hoogheid. [REMOTE KLIKKEN] -Wat Het jy gedoen? -Ek Afgeskakel die muur. Nee, jy het nie, moet jy afgeskakel die hele film. -Ek Het seker die verkeerde knoppie gedruk. -Goed, Sit dit terug op! Sit die film terug! -Ja, Meneer! Ja, meneer. -Laat Gaan, Arnold. Kom, Gretchen. Natuurlik weet jy ek sal het jy te hef vir hierdie. -Goed? Het dit werk? Waar is die koning nie? -Dit Gewerk, meneer, ons het die kombinasie. Grandes. Nou kan ons elke laaste asem vars lug van die planeet Druidia. Wat is die kombinasie? -Een, Twee, drie, vier, vyf. -Een, Twee, drie, vier, vyf? -Ja. -Dat is ongelooflik. Ek het dieselfde kombinasie op my bagasie. Berei Spaceball 1 vir onmiddellike vertrek. -Ja, Meneer. -En verander die kombinasie op my bagasie. [Opening en sluiting BEELD] [Klink deure slaan HELM] -Ahh. [Einde video speel] David J. Malan Dit is dit vir CS50, sal ons sien julle volgende week. NARRATOR: En nou, diep Gedagtes, deur Daven Farnham. DAVEN FARNHAM: Kodering in C is soveel harder as nuuts af. printf, Scratch is 'n leuen. [Gelag SOUNDBITE]