[Speel van musiek] Spreker 1: Dit is CS50 en dit is die begin van die week twee. So, laat ons duik reg in iets dit is karretjie, so te sê. So, hier is CS50 IDE en ek het opgetrek in advance hierdie screen-- damn Dit. Spoiler waarskuwing. Alles reg. Ek het die skerm opgetrek hier wat het 'n baie eenvoudige program. As ons rol af, die meeste van hierdie is net die kommentaar, maar hier in lyne 13 deur 17 Ons het 'n program. Dit is sintakties geldig, wat beteken dat as Ek stel dit, sal dit op te stel en uit te voer, maar dit is karretjie. Hierdie program eise in die kommentaar up top dat dit moet druk 10 sterre, Maar dit beteken nie. En gebaseer op jou ervaring, of binnekort ervaring met C wees, kan jy logies onderskei waarom dit is, in werklikheid, karretjie? Ja? GEHOOR: Dit gaan van nul tot 10. Dit is 11 iterasies. Spreker 1: Ja. So, dit gaan van nul up deur en gelyk aan 10, wat natuurlik is 11 iterasies. So, dit gaan om druk, inderdaad, 11 sterre. So, die rekenaarwetenskap konvensie in die meeste programmeertale is inderdaad net om begin tel op nul, maar tel tot maar nie deur die waarde wat jy eintlik omgee. Nou, dit is een ding wat neem 'n bietjie gewoond raak aan en selfs Scratch, ontwerp as dit vir nie-programmeerders of nie rekenaar wetenskaplikes en vir kinders grootliks, is ontwerp om jy begin algemeen tel by een. En dit is goed. Jy kan absoluut begin tel by een as dit is meer gemaklik. En tel tot en deur 10, maar jy sal veral hierdie week besef en as dit nie net sodat baie dinge in programmering aanvaar dat 0 is die eerste syfer waarmee jy tel, wat jy gaan om dit makliker vind net om te kry in die gewoonte van die begin van nul en tel tot die waarde jy omgee nou uit die kry gaan. So, wat vaste daardie. Ons verander die minder as of gelyk aan net minder as. Kom ons neem 'n blik op 'n tweede voorbeeld hier. So, hierdie program beweer ook in sy kommentaar op top dat dit moet druk tien sterre, maar dit beteken nie. Wat is die fout hier? So, what-- en jammer, laat ons duidelik wees. 10 sterre. Een per lyn, maar dit beteken nie. So, in werklikheid, laat my gaan voort en stel hierdie een, want dit is 'n bietjie minder duidelik gebaseer op die beskrywing. Laat my gaan in ons bron gids. Maak karretjie een dot streep karretjie een. OK, ek sien 11 sterre wat is nog steeds problematies, maar hulle is ook al in 'n lyn. Wat is die probleem hier? Ja. GEHOOR: [onhoorbaar]. Spreker 1: Ja. So dit is 'n subtiliteit dat julle onthou my om kort melding van. Selfs al lyk alles mooi, en dit is mooi ingekeep, en dit soort van kyk Scratch-agtige in daardie lyn 16 en 17 is, inderdaad, ingekeep onder daardie lus. Dit is onbelangrik. Die rekenaar nie weet of sien wit ruimte. Wit spasie is net vir ons mense, stilisties. Die rekenaar het weet wanneer jy krulhakies, wat, inderdaad, los hierdie probleem. So, as ons werklik in gegaan en uitdruklik gestel in hierdie krulhakies wat sou hierdie probleem op te los deur duidelik te maak aan die samesteller dat ek eintlik wil uitvoer twee reëls van die kode weer en weer en weer. Maar wat is die belangrikste verklaring? Reg? Ons het nie nodig streng krullerige draadjies al die tyd, selfs al is dit waarskynlik die beste praktyk in elk geval in daardie gewoonte selfs al is dit voeg twee karakters om jou kode. hoekom? GEHOOR: [onhoorbaar]? Spreker 1: Ja so dit is ander oplossing heeltemal. Reg? Veral as die eerste oogopslag jy nie waardeer regtig wat aangaan. Wel, ons kon sekerlik net twee dinge doen op 'n keer en net vermy die probleem geheel en al. En dit is goed, maar nou, vir vandag se doeleindes, wat is die verduideliking vir die fout? Hoekom was al die sterre op 'n lyn? Ja? GEHOOR: Dit blyk dat indien jy het 'n reël van die kode, jy kan dit doen sonder daardie. Spreker 1: Presies. Dit is net 'n menslike konvensie. Mense besef dat dit 'n klein irriterende of vervelige hê om krulhakies al sit van die tyd as alles wat jy wil doen is voer 'n reël van die kode. So, besluit mens sommige tyd gelede dat dit is goed. As jy wil al jou lus sit op die net dat een lyn soos hierdie, dit is fyn met die enkele kommapunt aan die einde. Maar jy kan net een so 'n lyn sonder die krullerige draadjies. Dus, wanneer CS50 styl gids as jy verwys na, Jy sal sien dat die algemeen Dit is goeie gewoonte te kry in hierdie totdat jy baie gemaklik dwaling van hierdie soort van konvensies en doen jou eie ding. So lank as wat jy self konsekwent. En ons sal meer oor praat styl 'n bietjie later vandag. So, laat my oop een ander program. Natuurlik moet ons los dat 10 as well. Laat my gaan voort en skryf 'n werklike vinnige program wat ek sal noem, kom ons sê, loop dot C. So, lus dot C. En in lus dot C Ek gaan om te hê, sluit in standaard I / O dot H int main nietig. En nou, laat ons net doen, inderdaad, 'n lus. So, 4 int Ek kry nul. Ek is minder as, sê, 50. Ek plus, plus. En dan hier kom ons gaan voort en doen druk F. En dan wil ek ek druk en 'n nuwe lyn, kommapunt. En dit moet al die druk getalle van nul tot 50? 'N Paar hoof knik. 'N Paar nos. Wat is die fout reeds? Wat is die maklike fout wat ek gemaak? Ja. GEHOOR: [onhoorbaar]. Spreker 1: Ja. So selfs al is dit lyk soos hierdie is wat ek van plan is, onthou dat ek ook net 'n ASCII karakter. So, as ek sê, druk "I." Dit is letterlik gaan I. So druk, as ek wil plug-in 'n tydelike waarde wat ek werklik nodig het om dit te doen en dan plug-in die waarde van I dinamies. Anders is ek net gaan kry 50 Ek se op die skerm. So, laat my gaan voort en maak hierdie lus, hardloop dit, en, inderdaad, ons het al die pad deur middel van 49. En as ek blaai terug in die tyd wat ek sien die getal nul aan die begin. Wel, wat as ek soort van skroef? Wat gebeur as ek dit doen? Net omdat ek nie dink. Wat is hierdie program. Sodra weer saamgestel en hardloop, gaan logies doen? GEHOOR: Niks nie. Spreker 1: Niks nie. Hoekom is dit? GEHOOR: Ek is ontwerp vir 'n nul. So, die toestand is onwaar. Spreker 1: Ja, presies. Al die kode korrek is, sintakties. Dit sal stel, is hierdie kode sal loop, maar dit is nie gaan niks nuttigs doen want ek inisialiseer ek na nul. Ons het toe gaan, is ek groter wees as 50? Natuurlik, nee, dit is nie. So het die lus voer nooit nie. Wat as ons iets doen 'n bietjie meer roekelose? So, wat as ons te doen soos int Ek kry nul. En nou, laat my gebruik die tyd lus, wat 'n ander toestand was. En terwyl ek sê, terwyl ek is groter as of gelyk aan nul, en dan hier ek gaan voort en stoor die lêer, maak lus. En ek is op die punt om dit uit te voer. Wat gaan ek om dit te sien tyd met 'n while lus? Ja. GEHOOR: 'n oneindige lus? Spreker 1: 'n oneindige lus? Ja, en hoekom? GEHOOR: Want dit is altyd nul. Spreker 1: Ja. So, is ek wat as nul. Natuurlik het ek altyd groter as of gelyk aan 0 as 'n resultaat. So, ek is net gaan om te sien dit oneindig. En nou, dit het een keer kom of twee keer aan die hoofde van die kursus se. Wat gebeur wanneer jy het 'n oneindige lus? GEHOOR: Control C. Spreker 1: Ja. So Control C sal uiteindelik reageer. Ongelukkig het ons gedruk miljoene nulpunte reeds en so die rekenaar soort het voor my. So, dit gaan om te ignoreer my vir 'n bietjie. Maar as jy net getref Control C 'n paar keer op jou Mac of PC sleutelbord, uiteindelik moet dit inderdaad beëindig. En indien nie, sal ons jou wys 'n paar tegnieke voor lank waar jy kan eintlik geweld programme doodmaak, baie soos in Windows en Mac OS, indien nodig. Maar laat ons probeer iets anders. Kom ons eintlik inkrementeer I. Is dit nog steeds gaan oneindige te wees? Laat my dit uit te voer. En nou kan jy soort sien wat gebeur. Dit is ook, is 'n oneindige lus. Maar dit is 'n bietjie van 'n truuk vraag. Is dit gaan om getalle vir ewig te druk? GEHOOR: No. Spreker 1: No. Hoekom? Ek het gehoor 'n paar nos hier. Someone-- Ja. GEHOOR: Jy het nie genoeg het stukkies om werklik te gaan. Spreker 1: Alle reg. So ek het nie genoeg stukkies om vol te hou. So, wat gaan gebeur? Dit is net gaan om te stop? GEHOOR: Op 'n sekere punt dit sal gesluit the-- Spreker 1: Dit sal sluit die lus af, maar hoekom? Wat gaan gebeur by die einde van sy grense? Ja? GEHOOR: Dit sal siklus terug na negatiewe getalle. Spreker 1: Om negatiewe getalle, of as ons net die behandeling van positiewe, zero ten minste. So ja, absoluut. Onthou dat ons die laaste keer wat dit gesien as jy inkrementeer jou stukkies een te veel keer, en jy is daar vore oorloop die kapasiteit van jou int of wat ook al die tipe data is, is jy gaan draai om, waarskynlik, twee negatiewe getalle. Of as jy spesifiseer dat jou reeks moet slegs positief wees, wat jy kan doen nie, maar ons het nog nie gesien dat, jy kan uiteindelik ten minste terug by nul. Alhoewel, eintlik ja. In hierdie geval, negatiewe getalle, in welke geval die lus gaan beëindig want ek is nie, in werklikheid, groter as of gelyk aan nul as dit negatief. So, ongelukkig, hoe lank sal ons moet wag? Nou is ons tot wat, 2 miljoen-ish? Ons is soos 2000000000, ons gaan hê om te wag totdat ons kan eintlik sien dit simptoom. Maar ons kan dit sien 'n bietjie vinniger, maybe-- laat ons kyk of ons kan onderbreek. Kom op. Selfs die spyskaarte is stadig verskyn. Alles reg. So, sal ons terug na wat kom kort voor lank. Dit is 'n goeie time-- dit verdoem, hondjies. Dit is 'n goeie tyd vir 'n paar aankondigings. So, as jy dalk graag om betrokke te raak in YHack, wat 'n gebeurtenis is om geborg deur ons vriende by Yale. En, inderdaad, 'n paar van die kursus se TFS by Yale betrokke is met hierdie. YHack is 'n internasionale hack-a-thon aangebied deur en gehou aan die Yale, saam te bring 1500 soos minded hackers en skeppende al oor die hele wêreld. As dit is van belang is, neem hier 'n blik. As dit is te kort op die skerm, 'n blik op skyfies vandag se vir die URL vir yhack.org. So, ook 'n paar vinnige aankondigings. So, amptelik afdelings sal begin volgende week hier en New Haven. Hou in gedagte wat jy sal kry 'n e-pos later hierdie naweek waarskynlik. Dit neem 'n lang tyd vir CS50 artikel, gegewe al die mense in die klas en almal rond te beweeg. En al die Onderrig Fellows ' skedules is ook steeds stol, maar bly ingeskakel vir 'n e-pos en indien nodig word, kan jy weer-afdeling is daar daarna. Study.cs50.net. So, selfs al is jy 'n konstante deelnemer by afdelings, besef dat byna al van die hulpbronne wat ons gebruik in artikels is publiek sigbaar op CS50 Studeer by hierdie URL hier. So, as jy ooit wil review weer materiaal van artikel, of lees wat voorlê, of jy kan dit nie maak nie 'n week, besef dat monster skyfies, en probleme, en definisies, en meer is almal daar so goed. Kantoorure hervat vandag en môre, en Woensdag, en Donderdag gaan die kursus se webwerf vir die skedule. En ook, nou ' vandag is CS50 Bespreek. Dus, as en wanneer jy vrae vir het mekaar of vir personeel die kursus se en is oor die algemeen werk op 'n probleem stel, besef dat jy dit nie doen nie noodwendig het om te draai na die menslike volgende jou. As daar niemand is daar, jy kan uit te reik na ons en klasmaats aanlyn via CS50 Bespreek. So, dit is 'n bespreking raad vir die kursus, en besef dat hierdie is dalk die beste plek om te begin wanneer jy vrae wanneer buite kantoorure in die besonder. Middagetes sal ook begin hierdie week. Op vuur en ys [Onhoorbaar] in New Haven. Neem 'n blik op die kursus se webwerf ten einde te RSVP. Kom eerste, eerste dien vir daardie. As jy nie in hierdie week kry nie ons sal hierdie die meeste elke Vrydag doen gedurende die termyn. OK, en nou 'n woord oor gradering. Veral as ons die probleem tree stel een, wat hierdie week, en die probleem sit twee en daarna. Hoe gaan ons oor die evaluering P stelle en evaluering van die kwaliteit daarvan? So, dit is vier asse wat ons gebruik in CS50, en hulle is hierdie vier hier. Omvang wat vang op 'n numeriese basis net hoeveel van die P stel het jy pak. Dit is rofweg ooreen met inspanning, en dit is ons manier van die opneem het jy probeer die helfte van die P stel, almal van die P stel. Dit is 'n maklike een om volmaak tellings op as jy nie, wel, probeer om elke aspek van die P stel. So, hou dit in gedagte. Korrektheid is presies dit. Is jou kode werk as die spesifikasie en as die personeel "monster oplossing dui daarop dat jou kode moet, in werklikheid, werk. Check 50, as jy dit nog nie ontmoet Tog, is in P stel een spesifikasie en sal oor die algemeen gee jou ja / nee antwoorde om te bepaal of jou kode korrek is. Ten minste so ver as ons gaan Om te evalueer dit gebaseer op die toetse dat ons hardloop in daardie program. Ontwerp is baie meer subjektief. Dit is hoe goed geskryf is jou kode. En dit is iets wat jy sal beter met verloop van tyd te kry, en dit is iets wat ons sal bied meer kwalitatiewe terugvoer oor. En deur die ontwerp ek kan beteken voordat lank jy kan versoek word in sommige P stel om loopingly iets te doen, maar om miskien drie, of vier, of vyf geneste lusse vore of geneste terwyl lusse. Wat oor die algemeen moet begin te maak jy ineenkrimp en sou die algemeen beskou as slegte ontwerp. En jy sal begin om te sien in die klas en uit die klas goeie maniere van dinge doen, slegte maniere van dinge doen wat kan alles reg wees, maar nie noodwendig goed ontwerp. Soos die skryf van 'n opstel. Jy kan in staat wees om op 'n plaas woorde bladsy wat grammatikaal korrek is, maar die opstel of die tesis hulle is in net heeltemal onsamehangende of unpersuasive. En so wat kan die analoog in die wees geskryf wêreld van slegte of goeie ontwerp. En styl, is ook redelik subjektief. Maar ten minste verwag ons konsekwentheid. Dit is hoe mooi is jou kode. Is dinge mooi ingekeep? Is jou veranderlikes goed vernoem / Is alle jou hakies en krulhakies lyn as wat hulle behoort te wees? Ons doen 'n CS50 styl gids as die probleem stel sal jy wys op. Diegene wat meer gemaklik is welkom om afwyk van wat so lank as wat jy self konsekwent. En dit is ook 'n les ons sal versterk in afdeling. Dus, as al hierdie was 'n bietjie vinnig, besef dat die P stel en artikels sal in meer diepte te gaan kort voor lank. Maar oor die algemeen het ons baie min emmers vir CS50. Tellings is oor die algemeen op 'n skaal van een tot drie of 04:59. Ons is literally-- en ek kan nie sê dit genoeg in die eerste week. Drie is goed. So, selfs al is, ja, drie uit vyf gewoonlik, wiskundig, dalk 'n 60 persent of soos 'n D minus wees. Drie is, in werklikheid, 'n goeie. En, in werklikheid, ons verwag die meeste studente in die klas om rond te begin die term twees en drieë, en viere. Waarskynlik nie so baie twintigs. Nie te veel kinders. Maar oor die algemeen om te begin in dat lieflike plek in die kurwe sodat as die tyd vorder, daar is eintlik ruimte vir, en geleenthede vir die boonste vordering. So, moet asseblief nie gelyk te stel met drie 60%. Dit is baie meer abstrakte as dit. Die formule waarmee ons te bereken grade is soos volg geweeg. Korrektheid is die moeite werd die meeste. Ontwerp is 'n bietjie minder werd. Styl is 'n bietjie minder werd. En dit algemeen vang die bedrag van die tyd wat gaan in elke kry van hierdie asse net reg. Styl is super maklik, moet super vinnig wees, maar dit is 'n maklike gewoonte te kry lui oor. Korrektheid te neem jy die meeste van die tyd. Jaag paar fout mag neem dat die ekstra uur of meer, en so het die telling uiteindelik vang nie. En so, nou 'n meer ernstige woord. Sedert CS50 het die onderskeid, vir 'n beter of vir slegter, om dalk beter vertroud met die kwessies van akademiese eerlikheid as die meeste enige ander kursus. En inderdaad, dit is na my wete dat stuur ons meer studente, ongelukkig, vir dissiplinêre doeleindes elke jaar as 'n gevolg. So, in die belang van 'n volledige bekendmaking, laat ons praat kortliks oor wat gaan aan in CS50, en wat jy kan doen, en wat jy kan bedag wees. So, hier sedert 2007, toe Ek geërf die kursus, is die aantal Ad Board gevalle. Ad Raad Harvard se dissiplinêre liggaam, of nou die eer Counsel, om watter gevalle word verwys wanneer studente iets te doen wat die kursus se leerplan oorweeg onredelik. Daar is geen werklike patroon hier, sou ek sê. Dit wissel oor die jaar maar oor die algemeen dit is die getal van gevalle wat verwys. Die aantal studente wat betrokke is? Dit wissel ook. Tipies, verlede jaar vir Byvoorbeeld, 29 studente by Harvard was Ad boord, om so te praat. 29 van hulle huidige studente, twee van hulle voor studente, wat saam in sommige verkeerde manier. En dan in terme van die persentasie, is dit gewoonlik sowat 3% van die klas wat, ongelukkig, maak hierdie soort besluite. So, verlede jaar was dit 3,5% van CS50 se student liggaam dit was Ad boord, om so te praat. So, wat beteken dit alles beteken? En wat doen ons nou eintlik? So, vir die volle bekendmaking, ons absoluut, rekenaar wetenskaplikes, het sagteware gereedskap tot ons beskikking en dit is baie maklik vir ons, in regverdigheid, klasmaats se ander wat nie kruising hierdie lyne te steek vergelyk elke voorlegging vanjaar teen elke voorlegging vir die afgelope agt jaar. Sagteware doen dit. En uiteindelik is dit menslike oë wat besluit of om 'n paar verwys saak vir verdere beoordeling, maar sagteware help beslis. En dit, eerlik, is die rede waarom ek dink dat ons het sulke groot getalle in CS50. Dit is nie omdat CS50 studente of CS studente meer algemeen 'n minder eerlike as enige ander studente, dit is net ons het die gereedskap en tegnieke waarmee die eerste pass neem. Maar ons doen hou 'n oog op al hierdie dinge sowel, weer, in die belang van die erkenning van die werk wat is geplaas in deur 'n super meerderheid van die klas. En die beleid van die kursus se op akademiese eerlikheid, selfs al is dit 'n klomp van die paragrawe lank met 'n klomp van die koeëls wat hopelik is baie leesbaar, dit regtig nie neer redelik te wees. En die beste van die duim wat heerskappy Ons bied up in die leerplan is dit, die essensie van al die werk wat u aan hierdie kursus moet jou eie wees. En inderdaad, in byna al daardie gevalle verwys vir dissiplinêre optrede dit was as gevolg van 'n paar student laat een nag het tipies sy of haar code oor blatante om 'n klasmaat, wat dan aangeneem in die geheel of aansienlik daarvan. Maar regtig, dit is OK. En inderdaad, by die kantoor ure, die strokies papier jy is oorhandig as jy het deur die kantoor uur verlede week moedig soveel. Jy is absoluut verwelkom en aangemoedig probleem stelle bespreek met klasmaats. Om mekaar te help wanneer struikeling. Maar oor die algemeen die reël moet wees nie, "wanneer jy vra vir hulp, kan jy jou kode te wys aan ander, maar jy mag hulle s'n nie te sien. " So, met ander woorde, as ek sukkel met 'n paar P stel en ek sit daar in die eetsaal, of in die biblioteek, of in die klaskamer probeer om 'n paar fout te vind, Ek kan beslis wys my kode op my skerm aan die persoon langs vir my seker die personeel, maar ook 'n klasmaat. Maar as die oplossing wat my klasmaat bied is, ag, hier net 'n blik op wat Ek het, dat die lyn kruis. En ek sou waag om te sê dit is oor die algemeen 'n redelike ding vir die meeste mense om baie maklik sien die lyn van. En so sien die leerplan vir meer besonderhede. En nou een van die meer omstrede aspekte van CS50 sillabus wat ek gedink het ek sou tot in die slot praat hier is die sogenaamde spyt klousule. So, hier is al die fynskrif. Maar in die algemeen het ons gesien oor die afgelope 8 jaar plus wat, inderdaad, byna almal van CS50 se gevalle van akademiese oneerlikheid die resultaat van net swak gewees besluitneming laat in die nag. Die gevolg van stres, die resultaat van 'n gebrek van eet, gebrek aan slaap, te veel P stelle, te veel deadlines, te veel verpligtinge. Stres opbou in 'n 02:00, 03:00 AM, 04:00, met 'n sperdatum dreigende. Die meeste studente in hierdie gevalle het net gemaak slegte besluite dat hulle baie goed kan spyt die volgende oggend indien nie minute later, maar tot verlede jaar was daar geen ontlasklep dat hierdie studente kan eintlik oop om werklik aan te spreek die probleem kop op sonder vrees om geselflaai van die kollege geheel en al. En, inderdaad, het ons ' hierdie spyt klousule verlede jaar, wat sê dat indien daar binne 72 uur, drie dae, kruising sommige lyn in die leerplan voorgeskryf jy kom uit na een van die kursus se koppe en ons sal 'n chat oor dit. Daar is nog steeds 'n paar uitkoms, in teenstelling met wat is is by die teendeel. Daar nog uitkoms wat is aksie deur die loop, algemeen Nulstellen n P stel of die neem van 'n ander aksie, Maar ons sal inderdaad hanteer dit self en nie verwys dit hoër was die uitslag kan baie meer ernstig wees. En, inderdaad, om te deel wat gebeur het verlede jaar, in die agt jaar, en nou nege jaar van die onderrig van hierdie kursus en na geknutsel met verskeie knoppe, draai verskeie dials oor die afgelope 'n paar jaar op akademiese eerlikheid, en sien per die data geen oënskynlike impak, selfs van toesprake soos hierdie, dit was loshande die beste ding ons het pedagogies bekendgestel in agt jaar saam hierdie lyne in CS50. 19 studente het na vore gekom ingevolge hierdie klousule verlede jaar. Ons het geen aksie vir sewe van die studente, bepaling dat hulle onnodig bekommerd. Hulle het nie, in werklikheid, gekruis 'n lyn, maar dit was 'n goeie chat om nietemin het. Ons zeroed 11 van die tellings wat ingedien is. En in een geval het ons gevra 'n student om 'n probleem te stel nie. Maar meer dwingende, eerlik, met hierdie 19 geselsies, wat was die pad meer as wat ek verwag om, elkeen van hulle 10 minute om 'n miskien uur lank, het ook om 'n aantal kwessies rakende lig familiële kwessies, vriend kwessies, geestelike gesondheid kwessies dat ons dan besig is, met die student se seën, inwoner dekaan, of vriende, of enige ander getal ondersteuning hulpbronne. Sodat dit was by verre een van die beste gebruik van ons tyd en een van die beste intervensies. Met wat gesê het, nee, dit het insette oor die koers van die opsporing van akademiese oneerlikheid meer algemeen. En durf ek sê, hierdie subset studente verlede jaar was 'n demografiese dat ons voorheen nooit geïdentifiseer en het nog nooit in verband met voor. En so, dit was wonderlike suksesverhale selfs al is hulle aan die lig gebring in minder as optimale omstandighede. So, hou dit in gedagte as jy maak, miskien, sommige arm besluit jouself laat in die nag, dat daar 'n beroep so lank as die student in daardie situasie besit en na vore te kom sodat ons kan het dat die soort van chat en dit te hanteer in 'n manier wat opvoedkundige, en dan ons kan dit agter ons die volgende dag. So sonder meer, neem die rand af van hierdie gesprek, die rede waarom die hondjies is up is net om die ys vir 'n oomblik te breek. En ongelukkig, hulle is almal slaap, maar wat veronderstel was om hier te gebeur was almal veronderstel was om ontsag en soort van ontspan nadat baie swaar gesprek. Maar blykbaar het ek die hondjies te slaap. Maar as jy gaan na CS50 se webwerf slash hondjies, jy kan hulle die hele dag lank te kyk. Veral miskien 02:00, of 03:00, of 04:00 in die nag om 'n bietjie stress verligting daar te sien. So dit is streep hondjies. Alles reg. Was dit nie pret? OK. So, terug na 'n paar rekenaar wetenskap, as ek kan. So, onthou dat die laaste keer het ons begin soek nie net by die hoof, wat was die standaard-funksie, die wanneer groen vlag gekliek ekwivalent, maar ons het ook begin kortliks skryf sommige van ons eie funksies. En tot dusver nie een van hierdie funksies het veral groot of vleis nie. Jy sal kry in die groter funksies waarskynlik, P stel 2, P stel 3, beslis P stel 4 en verder. Nou die meeste van jou programme, Indien nie almal van hulle, seker vir P stel 1 kan heeltemal gedoen in die belangrikste. As jou program is net vyf lyne, 10 lyne, selfs 20 lyne lank, perfek redelike om dit te skryf al in die belangrikste en nie bemoeilik te oor jou kode nie, maar wat ons vandag doen en verder probeer ook stel 'n paar goeie ontwerp tegnieke sodat as jou kode kry meer ingewikkeld en die probleme jy wil om op te los te kry harder en meer interessant wat jy het, soort van, die gereedskap in jou toolbox waarmee om goeie oplossings vir diegene ontwerp. So, laat ons neem 'n vinnige blik op hierdie program uit my verlede week, wat was funksies nul dot C. En agterkom dat, heel eenvoudig, dit lyk soos hierdie met twee funksies, hoof en die naam druk. En dink terug of dalk reverse engineering vandag wat was die motivering vir die instelling 'n funksie in lyn 28 genoem word, druk naam? Of wat dit 'n voorbeeld van in was terme van 'n beginsel of afhaal, As jy wil. Sommige geruise. Wat? Ja so Funksionele Ontbinding is 'n soort van die fancy manier om te sê, ontbind jou program in sy samestellende dele en gebruik dan die dele om 'n hele vergader. So, ook dit is net 'n soort van 'n mondvol reeds maar dit is dalk selfs 'n beter voorbeeld van iets net genoem abstraksie. Reg? Onttrekking gaan een wees van die herhalende temas in CS50 en ook rekenaarwetenskap meer algemeen, aangesien dit 'n tegniek waarmee jy kan oplos probleme meer effektief te omdat jy kan oplossings meer skryf intuïtief en in 'n manier dat skale en is verstaanbaar deur ander mense. Wat doen ek daarmee? So, waarskynlik dit is baie meer leesbare om te kyk na 'n program soos hierdie, super kort al is dit. Wanneer jy sien op die lyn 22 dat daar ' 'n funksie genoem, die naam druk. Daardie naam alleen sê wat dit doen. Daardie funksie neem blykbaar insette tussen die hakies, en blykbaar iets doen, vermoedelik druk die naam. En so, selfs al het ons absoluut kan hê gedoen wat ons het 'n week gelede, wat was net neem hierdie werklike reël van die kode, ontslae te raak van hierdie, en kry ontslae te raak van al hierdie saam Ons soort van onttrek weg die idee van die druk van 'n naam. Ek gee nie om as jy die gebruik van gedrukte def. Ek gee nie om as jy 'n persent S en 'n backslash N. Hierdie is ongelooflik arcane besonderhede. Wat ek wel omgee as 'n programmeerder is druk van 'n naam. En so, watter beter manier om dit te doen as deur 'n funksie, die naam gedrukte roeping? En so, dit was een van die motiverings vir iets soos dit te doen. Maak die kode meer leesbaar, meer herbruikbare, en ook self beskrywende. Nou, laat ons neem 'n blik by 'n ander voorbeeld, wat funksies een wat ons gehad het oor hier. So, hierdie een is miskien selfs meer dwingende, want in hierdie geval, Ek wil nie net kry 'n int. Ek wil 'n positiewe int kry. En dit blyk 'n positiewe te kry int jy 'n klomp van die informatieverzameling doen. Reg? Dit is nie 'n eenvoudige een lyn noem soos naam gedrukte was, wat is weliswaar minder oortuigend. Om 'n positiewe int te kry, logically-- laat my blaai terug na hierdie weg te steek. Wat het jy om te doen? Soos al die gereedskap wat ons op die oomblik is dinge soos gedrukte def van Standard Biblioteek en ook van CS50 biblioteek ons het Kry Int, en kry Float, Kry Long Long, kry String, maar die enigste een, Duitse, nou is Kry Int. Dus, as die enigste instrument wat jy het in jou tool box is Kry Int, hoe kan ons gaan om dit positief int te kry? GEHOOR: Skep 'n log en kyk of die insette wat hulle het was positief is of nie. Spreker 1: Perfect. Presies. Nog 'n instrument wat ons in ons toolbox van 'n week of twee gelede is net die herhaling konstruk. En so, ja, as ons gebruik 'n rukkie lus, of 'n doen terwyl loop, of 'n vore lus ons kon waarskynlik wegkom met enige van diegene wat in een of ander vorm. Ons kan die idee van get implementeer positiewe int deur net die gebruik Kry Int, en dan hou net noem dit weer en hou neul die gebruiker totdat hy of sy eintlik gee ons wat ons wil hê. En so nou is dit onttrekking van die proses om 'n positiewe int in 'n funksie genoem Kry Positiewe Int is 'n bietjie meer dwingende omdat kyk na hierdie. Dit is soos '10 plus lyne van kode wat betrokke in om 'n positiewe int, en ek het nie regtig omgee hoe jy dit doen. Al wat ek omgee is dat jy kan dit doen, en so ek het versteek al hierdie besonderhede agter 'n funksie genoem Kry Positiewe int dat Trouens, doen dit terwyl loop. En kyk verlede week vir die sintaksis daar, maar dit is net verklaar N, en dit druk die opdrag aan die gebruiker. Dit is dan Kry Int en dan is dit tjeks hierdie toestand weer en weer, en weer totdat die gebruiker saam. So nou, 'n paar gesonde verstand tjeks. Vir diegene dalk vertroud met 'n paar programme, hoekom N verklaar, waarom doen Ek skep N buite die doen terwyl loop? Hoekom is dit op die lyn 29 en nie op soos 33, byvoorbeeld. GEHOOR: Want wanneer jy verklaar dat dit buite, is dit soort meer, die groter scope-- Spreker 1: Goed. GEHOOR: --and as jy verklaar dit binne die lus, [onhoorbaar] omdat dit nie weet nie. Spreker 1: Presies. As ek kan simplify-- dit is 'n kwessie van omvang. En omvang verwys na die konteks wat 'n veranderlike bestaan ​​of is bruikbaar. En die mooi reël hier is dat algemeen wanneer jy verklaar of te skep 'n veranderlike kan jy net gebruik dit binne van die naaste omhels krullerige draadjies. So wat beteken dit? As ek, in plaas daarvan, ongedaan te maak en gaan saam met hierdie iets wat 'n bietjie eenvoudiger voel. Reg? Line 32 lyk net skoner nou vir my. Ek doen beide dinge op een keer en dan toeken die regterhand na die linkerhand. Die probleem nou gebaseer op dat definisie van omvang is dat N gebruik kan word in lyne 31 en 32 in hierdie lus, Maar waar deur daardie definisie kan dit nie gebruik word nie? In lyn wat? Ja. GEHOOR: 35. Spreker 1: 35. Beslis nie 35. En ook waar anders? GEHOOR: 34. Spreker 1: Selfs 34 is problematies, want dit is buite die krullerige draadjies. En so in werklikheid, laat ons sien wat gebeur. Reg? Dit kan 'n bietjie lyk intuïtief of dalk nie, maar laat ons sien wat die samesteller het om te sê wanneer ons gaan in vandag se bron gids. Maak funksie een. O, my God. Wel, ek uiteindelik klaar dat, deur die manier. Alles reg. En wat is die probleem hier? Baie arcane om na te kyk. Maar hier is wat ek typed-- maak funksie een. Hier is wat maak geïnduseerde, wat eintlik die gebruik van die samesteller klang met 'n paar van daardie vlae dat ons weer sal sien voor lank. En weer, altyd kyk by die eerste fout, want dit mag dalk net 'n waterval betekenisloos effek op ander lyne. So wat dit beteken, is dat die probleem is in die funksie 1.C. Dit is op die lyn 32. En dit is op kolom of karakter, 13. So wanneer jou teks editor wat kan help om te identifiseer waar die probleem is. So as ek blaai up, wat lyn 32? Dit is inderdaad hierdie een dit is reeds uitgelig reg here-- ongebruikte veranderlike n. Maar dit is nie ongebruikte. Ek gebruik dit. Maar die samesteller se verwar, want dit bestaan ​​slegs binne hierdie omvang. En so kan ek nie hier gebruik nie. Ek kan nie hier gebruik nie. En die samesteller, dus nie eens om dat ek probeer. Dit lyk ongebruikte te wees binne sy werklike omvang. So kan ons die omvang verbreed deur te doen presies wat ons begin with-- int n. En selfs al is dit nie lyk elegant, miskien, en ons neem 'n ekstra lyn hier, nou is dit in omvang oral. So kom ons probeer weer. So maak funksie een. Nice. As ek dan nou as ek hardloop funksie een, kom ons gee dit negatiewe 10, negatiewe 1, 0, 1, en dit inderdaad werk. So is daar 'n ander oplossing hier. Jy weet wat? Wat as ek regtig is stoei met hierdie? Ek weet nie waar die N veronderstel is om te gaan nie. Jy weet wat? Ek gaan net om dit te sit al die manier aan die bokant van my lêer hier. Wat sou dit doen, dink jy? Ja? GEHOOR: [onhoorbaar]. Spreker 1: Ja. So ek het dit globale gemaak, om so te praat. As jy 'n veranderlike wat buite al jou funksies wat toegelaat word, en die kode moet saam, en N sal nou toeganklik wees nie net in get positiewe int, maar ook in main-- wat is 'n bietjie lastig, want daar is reeds 'n N in die belangrikste, sodat meer oor wat in net 'n moment-- maar dit sou oorweeg slegte ontwerp. Alles reg. As jy hê om plek te iets soos, ag, ek sal net sit dit hier omdat die kode blyk te stel is oor die algemeen nie die beste praktyk. Eerder jy wil om te kies die kleinste moontlike omvang vir u veranderlikes, wat sou beteken gaan met ons aanvanklike ontwerp, wat is reg hier. Nou as 'n eenkant, as jy gehad het nie 'n identies-naam veranderlike hier die manier c sal hanteer this-- al is dit nie sal gebeur te often-- is dat dit nog steeds heeltemal fyn hier. Maar hierdie definisie van N in lyn 22 sal die globale een skaduwee. So hierdie een sal binne werk hoof, en die globale een sal eintlik van toepassing is wanneer jy in kry positiewe int maar meer oor dit 'n ander tyd, maar net vir diegene nuuskierig. So in kort, ons dit los hier. Nou laat terg uitmekaar twee ander stukke Voordat ons kyk na 'n laaste reël van die kode in hierdie program. Kry positiewe int. Op die linkerkant van sy woord is die woord int. Wat beteken dit dui dink jy? Tot dusver het ons meestal gesien nietig. Ja? GEHOOR: Dis die tipe veranderlike wat jy vra oor. Spreker 1: Ja Dis die tipe, laat my nie sê veranderlike, maar die tipe waarde dat ek vra weer vir. En inderdaad, dit is intuïtief hier, hopelik. Reg? As jy wil 'n te kry positiewe int, wat is dit wat jy wil die function-- soos ons vrywilligers van verlede week om jou hand terug 'n stuk papier met 'n int op dit? En so het ons bepaal dat die sogenaamde terugkeer tipe van hierdie funksie is te kry positiewe int. As ons nie wil hê dit moet enigiets, jy leemte sê. As jy dit wil hê om terug te keer 'n string, jy sê string. As jy dit wil hê om terug te keer 'n vlot, sê jy float. Maar die enigste een wat hier van toepassing logies, want ek gebruik get int, selfs al is die beperking van dit wat ek tot positiewe waardes, is om 'n int terugkeer. So omgekeerd, wat beteken dit dat daar 'n leemte in hakies? Wat doen die hakies algemeen te definieer? Ja? GEHOOR: Dit beteken die funksie se nie eintlik om nie. Spreker 1: Dit beteken die funksie se nie eintlik om wat? GEHOOR: 'n toevoer. Spreker 1: 'n toevoer, wat ook al. So inderdaad, as hakies Hier kan jy spesifiseer leemte, wat net beteken dat ek nie wil hê enige insette. Ek sal gaan met die probleem myself. En inderdaad, het jy nie hoef te vertel kry positiewe int enigiets. Jy sê net, kry positiewe int, en dat funksie sal afgaan en sy ding doen. Maar daar was 'n bietjie truuk Ek het speel hier hele tyd om seker te maak hierdie kode saamstel. Let daarop dat int-- positiewe kry int void-- is op die lyn 27. Maar vir sommige oënskynlik vreemde rede dit is ook hier op die lyn 16. En net vir 'n goeie maatreël Ek sal herhaal hierdie so dit is perfek identies. En ek het gesê prototipe met 'n bietjie een-line kommentaar. Wat gebeur as ek dit verwyder, en nou tik maak funksie 1, betree. Oeps. Wag 'n minuut. Waar is my blad? Huh? Staan by. Maak funksie 1. Daar gaan ons. OK. Was dit nie behoorlik gestoor. So, ek dink daar is 'n bietjie fout hier waar ek is nie sien die blad naam op die oomblik. So, wat is hier aan die gang? Implisiete verklaring van funksie kry positiewe int is ongeldig in C99. So weer verwarrend. So, wat is hierdie 'n aanduiding van? Wel, dit blyk dat C is redelik dom. Wel, dit is die ontwikkeling taal, of eerder die samesteller is. Dit weet net wat jy het geleer nie, en dit is net gaan iets weet as jy dit voorheen onderrig is. Met ander woorde, in belangrikste op die oomblik, ek is probeer om 'n funksie te roep genoem te kry positiewe int. Maar die samesteller gaan nie om te sien dat kry positiewe int bestaan ​​totdat lyn 26. En ja, wat die samesteller doen is net foute so gou as dit kry om te reël 17, sê implisiete verklaring te kry positiewe int, wat is net 'n fancy manier om te sê, ek doen nie weet wat kry positiewe int nog. Ander tale soos Java en Python en Ruby kan vorentoe te kyk. C nie. En so het die manier waarop ons los dit is een van twee maniere. Óf die een, as die probleem is dat te kry positiewe int nog nie voorheen gesien het nie, Wel, laat ek skuif dit net om die top. Dit sou hierdie probleem op te los. Maar oor die algemeen, is dit beskou beter tegniek jou belangrikste funksie sit by die heel top so dat 'n mens lees jou kode weet wat die program doen, omdat belangrikste is nie al begrawe die pad aan die onderkant of in die middel. Dit is op die heel boonste. Sodat voel nie ideaal. En jy kan eintlik kry in situasies waar As een funksie oproepe 'n ander, wat 'n ander beroep, jy kan kry in 'n kwessie waar nie kan gaan bo die ander, logies. Dit is net nie moontlik nie. En so het die manier om te werk om hierdie is net te neem handtekening van die funksie, so om speak-- die eerste reël waar dit declared-- en net kopieer, plak dit op die top, maar nie met krullerige braces-- net met 'n kommapunt. Dit is soos 'n klein wenk van wat aan die kom is. En in die feit, al hierdie tyd wanneer ons het dinge soos die standaard io.h gesien en cs50.h, insgelyks, in daardie dot h lêers daar ander prototipes. En ons sal sien wat voor lank. So in kort, as jy 'n program in 'n lêer met verskeie funksies Behalwe belangrikste, jy amper wil altyd te verklaar net by wyse van hul eerste lyn, gevolg deur 'n kommapunt, by die top van die lêer. Dit was 'n baie op een slag. Enige vrae? Enige vrae? Alles reg. So laat ons beweeg op dan iets soos hoes. Oh. Hoe pas. Alles reg. Hoes. So hier is 'n c implementering van 'n program ons het die ander dag in Nuuts wat baie eenvoudig net sê hoes, hoes, hoes. Alles reg. En iemand het gesê 'n paar dae gelede dat daar 'n manier van die skoonmaak van die kode up reeds. Alles reg? Sodra jy kopieer en plak waarskynlik slegte ontwerp. Ten minste een keer kry ons vier of vyf of 20 hoes, voel dit slegte praktyk. Ons hou net kopieer, plak. Wat is die oplossing voor die hand liggend om die skoonmaak van hierdie program word? GEHOOR: Loop. Spreker 1: Ja. So gebruik 'n lus. En ons kan 'n vir-lus te gebruik, 'n rukkie lus, enige aantal benaderings. En inderdaad, dit is wat ons doen in die weergawe wat hier. Ek het in plaas herskryf dit in die weergawe van cough.c een net hoes binne 'n for-lus wees. Alle reg, maar daar is 'n geleentheid nou soort van begin om dit 'n bietjie meer soos ontwerp die les wat ons geleer 'n oomblik gelede wat is this-- veronderstel dat ek wou om 'n funksie genoem hoes skep, Kom ons kyk vir 'n oomblik wat dit gaan lyk. So as ek wil iets hoes, ek moet net te druk f gebruik binne die funksie. En inderdaad is ek. En in die feit, dit alles tyd, enige tyd wat jy is druk om iets te die skerm, 'n programmeerder sou noem dat 'n newe-effek. Dit is vir my nie oorhandig terug iemand 'n waarde. Dit is vir my 'n aksie te neem wat kan wees visueel voor die hand liggend. Maar hierdie funksie te hoes, beteken dit terug enigiets wat gebaseer is op die eerste lyn? Nee, want sy terugkeer tipe is nietig, wat beteken net dit is nie die uitreiking van my niks terug. Dit mag dalk iets te doen visueel, maar dit is nie vir my oorhandig terug 'n stuk papier soos verlede week. Is dit enige insette nodig? Geen. En so is dit hier leemte ook. So ook dit is 'n soort van oor-ingenieurswese hierdie probleem. Reg? Ek het die program meer gemaak kompleks, meer reëls van die kode, Ek het dit nie gemaak meer funksionele, maar dit sou 'n stepping stone wees, miskien, vir 'n breër konteks met meer ingewikkeld kode. Maar wat van hierdie? Wat het ek done-- net skrams by hierdie sonder om na die kommentaar by die top van die file-- wat het Ek hier fundamenteel gedoen met my hoes implementering wat anders is? Ja, in die rug? GEHOOR: Maak dit sodat jy kan het 'n karakter uit te skakel. Spreker 1: Ja. So dit voel soort van mooi. Reg? Dit is soos die toevoeging van 'n funksie om jou program of jou funksie, in hierdie geval. Dit gee nog steeds niks. Dit mag dalk 'n visuele newe-effek het, want dit is 'n beroep druk f. Maar nou het ek parametrized die funksie, wat beteken dat ek verskaf het geneem insette van die tipe int en noem dit n, maar ek kan dit iets wat ek wil noem. In werklikheid is, kan dit net wees keer om nog meer eksplisiete wees. En dan het ek kon net dit te verander hier. Maar die punt is dat dit is hoe ek skep 'n funksie wat insette neem. En as jy onthou daarby deur miskien aanlyn in een van die loop-throughs, die vierde en laaste hoes byvoorbeeld jy hier sien ek het veralgemeen my kode further-- soort abstrakte dit verder. Soos hoes en nies, beide is oor soos om te sê iets of maak 'n soort van klank. Save sou wees om die ooreenstemmende Scratch blok. En so wat ek gedoen het in hierdie weergawe, wat ons kan net blik op, is hoes is net soos om te sê, [COUGH], hoes, en intussen, nies is soos om te sê, [ACHOO]. En so ek het veralgemeen die implementering van die nou implementering Hierdie generiese funksie, sê, wat is interessant vir doeleindes vandag se net omdat dit nog steeds het nie 'n soort terugkeer. Maar hoeveel insette het dit? GEHOOR: Twee. Spreker 1: Twee. En so as jy wil neem twee argumente, net hulle te skei met 'n komma. En as jy wil dan noem daardie funksie, sien dat jy net roep sê, kwotasie, unquote, vir die eerste argument, algemene n, vir die tweede argument. So weer, ons het nou net die boustene sodat ons kan eintlik implementeer sommige van ons eie funksies. Alles reg. Enige vrae oor hierdie? So nou, laat ons skil terug 'n laag indien wel. En die doel te bereik, uiteindelik, is die probleem stel volgende week se gaan op cryptogrophy-- die kuns van skommeling inligting. En spesifiek die inligting sal jy versleutelen gaan teks. En so dat die soort uitnodigings Die vraag vandag soos goed, wat aangaan onder die enjinkap met teks buite ASCII van week nul, En hoe kan ons eintlik begin om dit te manipuleer? So hier is die naam Zamyla se. En in die teks, kan dit wees ingevoer in soos die get string funksie. En begin nou, wanneer jy sien 'n string soos this-- Z-A-M-Y-L-A-- begin dink dit asof elke van die karakters in 'n boks van sy eie. En inderdaad, in 'n week of so is tyd, elk van hierdie bokse gaan baie spesifiek verteenwoordig 'n blok memory-- 'n hap van die geheue. So elkeen van hierdie briewe, Uiteindelik sal 8 stukkies verteenwoordig. En ons sal eintlik sien wat gaan op onder die enjinkap in my rekenaar. Maar vir nie dit voldoende net om te kyk na Zamyla deur hierdie lens, waardeur elk van hierdie briewe is in sy eie boks. En mooi genoeg in C kan ons toegang elk van hierdie bokse direk. So as jy wil hê dat die eerste kry letter van haar naam, super maklik in C. As jy wil die laaste kry brief, super maklik asook met 'n stukkie van die nuwe sintaksis. So ek gaan om voort te gaan in CS50 IDE en maak die tou nul dot C. En in hierdie voorbeeld hier, is daar 'n paar nuwe dinge aan die gang. So eerste in die lyn 19, het ons gesien hierdie before-- get string. So net so 'n vinnige gesonde verstand tjek, as iemand verbaal kan bied up verduideliking van 'n leek se wat gaan aan in die lyn 19. Soos hierdie net vertaal in English dat 'n kamermaat nie in CS50 kan verstaan. Ja. GEHOOR: Het die toevoer van die gebruiker 'n string en stoor dit in 'n veranderlike s. Spreker 1: Goed. Die toevoer van die gebruiker 'n string en bêre dit in 'n veranderlike s. Dit is 'n groot. So op die regterkant kant, bel ons kry string. Dit gee 'n waarde dit het nie kry wat van regs na links hand kant in 'n veranderlike genaamd s wat ontwerp om 'n string te stoor. Presies. So nou line 22, per die kommentaar in lyn 21, natuurlik druk wat string een karakter per lyn. Maar hoe? So die eerste van alles, inisialiseer ons ek tot 0. En dan hoe kry ons om die einde van die naam Zamyla se? Wel, aan die einde van Naam Zamyla se, kon ek hand te tik in die laaste teken van haar naam of ander manier, of die getal van dit. Reg? As ons gaan terug here-- Z-A-M-L-- Y-L-A-- so ek kon tik. Wat is die indeks van Laaste brief Zamyla se? As dit is 0-- praat soos 'n programmer-- 0, 1, 2, 3, 4, 5, Ek heard-- so inderdaad, die laaste brief in die naam van Zamyla se is die sesde, maar as ons tel van 0, dit gaan nommer 5 wees. So hou dit in gedagte hier. Dit blyk daar is 'n funksie in C genoem StrLen en terug in die dag en tot vandag nog, 'n baie programmeerders kies om name te sinchroniseer vir hul funksies wat klink soos die woorde hulle probeer om te sê. So StrLen is string lengte. En so wat sou string lengte van S terugkeer wanneer Zamyla is die insette? GEHOOR: Five. Spreker 1: Z-A-M-Y-L. Ses. Reg? Wat is die lengte van die naam Zamyla se? Reg? En net in die werklikheid, ses letters. Reg? En so wat beteken dit vir ons lus? Ons gaan om te gaan van 0 tot ses, wat gaan ons vyf iterasies gee. Wat doen ons op elke iterasie? Wel, persent C, iemand raai die ander dag, beteken 'n plekhouer vir wat? GEHOOR: Char. Spreker 1: Net 'n kar. So 'n enkele character-- nie verskeie karakters soos 'n string. En dan hier is die nuwe reël wat ons het uit te druk. En dan hier is die nuwe sintaksis. As jy wil om uit te druk die i-de karakter in die string S, om so te praat, jy kan net sê die Naam van die string S, en dan oop vierkante bracket, en dan gesluit vierkante bracket, met 'n i die middel. En dit is soort van mooi in daardie dit soort van soos 'n vierkant lyk net soos die blokkies in wat Zamyla se karakters bestaan ​​op die foto is daar. So as ek dit eintlik loop nou, laat ons sien wat gebeur. Maak string 0 dot streep string 0, en dan is ek gaan tik naam Zamyla se. Daar is geen vinnige, want ek het nie gebruik gedrukte f, maar dit is goed. Ek weet presies wat om te doen nie. En inderdaad, dit druk uit Zamyla se naam, een per lyn. Nou laat 'n bietjie roekeloos. Veronderstel dat ek nie geweet het nie oor StrLen en ek het gedink, Alle reg, niemand gaan 'n het noem groter as soos 50 karakters. Kom ons gaan voort en heropstel hierdie en tik dit, en dan tik in Zamyla weer. Logies, wat is die program gaan probeer om druk? Z-A-M-Y-L-A dan soos 45 onbekend grepe van die geheue. En inderdaad, sal ons terug te kom hierdie idee van die geheue. Maar net logies, as Naam Zamyla se is dit 'n lang, soos per die prentjie hier, wat ons sê is hou die druk, hou die druk, hou druk, hou die druk, hou die druk, al die pad na die 50 karakter, wat wie weet wat gaan gebeur. So laat eintlik 'n blik. Kom ons tik in Zamyla. Interessant. Ons het gelukkig. Net 'n hele klomp van die wit spasie. Oh. Daar is 'n funky karakter. Dit lyk amper soos 'n vreemde vraag merk, maar daar is die naam Zamyla se. Kom ons kry regtig roekeloos. Hoe gaan ons uit te druk 500 blokke in die onbekende? Kom ons gaan voort en maak hierdie so goed en dan weer hardloop. En die volle screen nie, want laat ons ons nodig het om meer ruimte te sien. Zamyla. Het weer gelukkig. Durf ons kry meer roekelose? Kom ons kry meer roekeloos. 50000 karakters. Dit is die meeste sekerlik nie 'n goeie idee. Alles reg. Maak string 0. Dit sal ons laaste demo wees. Zamyla. Ugh. Ugh. OK. So my geheue is regtig leë nou, wat eintlik soort gerieflik. Wat ek probeer om aan- kry alles reg. En nou is ek net gaan roekelose kry. 500,000. Make-- full-screen laat dit. Betree. Zamyla. Daar gaan ons. Ek het geen idee wat dit is nie, maar dit klink sleg. Alles reg. En in die feit, gou, as jy onder die gelukkige paar in kantoorure en in die probleem stel een, het jy baie goed kan dit teëkom. Segmentering skuld eintlik nie het 'n goed-gedefinieerde betekenis. Dit beteken 'n soort van fout met betrekking tot 'n segment van die geheue. En in leketaal, beteken dit dat ons aangeraak memory-- ons gebruik RAM in my rekenaar dat ek nie toegang tot sou gehad het. En dit is wat beide kragtige en ook gevaarlik oor C is dat jy eintlik het onbeperkte toegang om die geheel van die geheue van jou program of grepe of RAM, meer spesifiek. So selfs al naam Zamyla se is net ses karakters lank, Ek kan nog steeds oral te gaan in die geheue wat ek wil. En as 'n eenkant, as jy het ooit 'n artikel te lees oor die jare oor 'n paar bediener of 'n program kry gekraak of gekap dis geneem voordeel van iets bekend as 'n buffer oorloop ontgin dat ons sal eintlik praat oor 'n paar weke, dit is algemeen verwys na een of ander manier tricking 'n rekenaar in goed gaan buite die grense van die geheue dat dit behoort te hê, en vind iets sappige in daardie memory-- n wagwoord dalk 'n manier ontduiking van sommige reeksnommer kyk, of net oor die algemeen in staat om te mislei die rekenaar uitvoer kode wat nie bedoel is. Maar laat ons terug te kom na werklikheid vir net 'n oomblik waar hierdie program was geïmplementeer met StrLen, en stel een ding hier. Wat is nuut onder hierdie top drie lyne? So string dot h. Dit blyk daar is hierdie biblioteek genoem String Dot H, of die string Biblioteek, wie header lêer, om so te praat, is string dot h wat gee my toegang tot hierdie funksie StrLen. As ek dit laat, die samesteller is gaan op my skreeu in een of ander vorm. Maar weet jy wat? Nou laat kry regtig genuanseerde. In lyn 22, daar is iets soort van inefficient-- swak ontwerp, arguably-- oor hierdie lyn van die kode. Dink terug aan hoe vir-loop geïmplementeer en watter stappe weer gebeur en weer en again-- die inisialisering, die toestand, die kode wat kry uitgevoer word, dan is die inkrement of die verandering, sal die toestand, dan die kode, dan is die verandering, dan die toestand, dan die kode, dan is die verandering, en so meer. So, wat dalk 'n bietjie te wees kommerwekkende of swak hier gedoen? Ja, in blou. GEHOOR: StrLen is genoem baie, baie keer. Spreker 1: Ja. So StrLen genoem baie keer, maar wat is die lengte van die naam Zamyla se die eerste keer die lus voer? GEHOOR: Ses. Spreker 1: Ses. Wel, wat is die lengte van haar naam die tweede keer die kode voer? GEHOOR: Ses. Spreker 1: Alle reg. Dit is nog steeds ses. Reg? Naam Zarla se het nie verander, selfs as ek soek slegs deel van die letters in haar naam. En so het die feit dat ek effektief hierdie vraag, wat is die lengte van Zamyla, wat is die lengte van Zamyla, wat is die lengte van Zamyla, ses afsonderlike tye, of sewe die aand, is net dom, want dit is onveranderlike die antwoord. En so wat ek kon eintlik doen is this-- in string een Ek het 'n effens beter weergawe hier. There-- whoops-- string twee Ek het 'n effens beter weergawe waarin Ek doen this-- plaas van net initializing i tot 0, het ek ook met 'n komma verklaar 'n tweede veranderlike genoem n-- Ek hoef nie te int weer sê. Ek moet nie, in werklikheid. Maar Ek sê n. En dan inisialiseer I n te die StrLen van N, so wat nou Hoeveel keer kom StrLen kry uitgevoer in totaal? Net een keer. En so is dit wat ons bedoel vroeër oor 'n beter ontwerp. Eintlik keer jou kode korrek is, terug te gaan en te dink deur middel, gebruik ek so min geheue of as n paar sekondes of millisekondes van die rekenaar tyd as moontlik om 'n probleem te implementeer? En ek gaan om te blaai en net noem dat daar hierdie melding van nul in hierdie weergawe, maar ons sal terug kom voor lank. Want vir nou, laat ons 'n blik na waar dit gaan om ons te lei. So een, dit blyk dat nou dat ons die vermoë om te kyk na die individuele karakters, kan ons iets hefboom van week 0 daardie arcane was en soort van oninteressant by die tyd. Maar nou, en veral wanneer ons kry kriptografie in 'n week, dit gaan mooi kragtig te wees. Dit blyk dat met 'n paar data types-- SY en dryf en karakters en snare en ander things-- sommige van hulle kan baie maklik omskep word in 'n ander. Byvoorbeeld, wanneer ons gepraat oor ASCII geruime tyd ago-- hier is die hoofletters A deur M dot, dot, dot-- ons gesê dat daar is 'n kartering tussen hierdie briewe en getalle. En in die feit, dit waar hou vir kleinletters as well. Kleine letters is 97, die hoofstad 'n 65. En daar is 'n aantal in ASCII, wat net die kartering stelsel vir al die ander briewe. So wat beteken dit? Wel, ek gaan om voort te gaan en oop tot ware vinnig iets genoem ASCII 0, waarvan die meeste is kommentaar. En weer aanlyn jy kan altyd oogopslag deur die kommentaar. En neem 'n blik wat dit gaan doen nie. So dit is 'n hooffunksie. Ek het hard-gekodeerde die getalle net vir nou, want ek weet wat ek doen. Ek weet wat ek wil hier te sien. En ek het ek geïnisialiseer tot 65. En ek tel up deur 26 letters in totaal. En wat gaan ek druk 'n lyn op 'n tyd as jy nie kan interpreteer hierdie uitgelig lyn? Wat kry gedruk? Ja. GEHOOR: Is jy gaan tot op die letter te druk wat ooreenstem met die kaart van die brief waarde en getal waarde? Spreker 1: Presies. Ek gaan die brief te druk ooreenstem met die getal waarde, en omgekeerd, soos volg. Wel, dit is, iemand vroeër gesê het, is net 'n plekhouer vir 'n kar. Dit is nog steeds. Dit, natuurlik, is 'n plekhouer vir 'n int-- nie 'n nuwe lyn. En nou sien, my eerste waarde wat Ek steek in vir daardie plekhouer is nie net I. ek sê, hakies, char I, wat die hakies char is vertel die samesteller, behandel ek nie as wat dit is, wat is 'n nommer. Behandel dit as 'n werklike karakter. Terwyl die tweede waarde ek steek in-- I-- moet net 'n getal wees. So as ek dit program-- stel so dit is te maak ASCII 0, dot streep ASCII 0-- ek kry net hierdie handige klein grafiek wat wys my al die moontlike afbeeldings sonder om dit te dink deur of dit uitwerk op my eie. En ek is ook uit te druk, kennis van die kleinletters, omdat 'n paar lyne later, het ek ook druk uit hierdie kartering sowel, wat net om sê dat as jy verstaan wat gaan aan onder die kap, kan jy outomaties omskep heen en weer. En in die feit, indien enige van julle ooit in graad skool het of gehoor oor iemand mitiese neem 'n nota en om dit aan sy of haar vriendin in die klas, maar jy roer die briewe soos A word B, en B word C, of ​​iets meer ingewikkeld as dit, wel, hoe sou jy te werk gaan uitvoering van hierdie as 'n kind? Wel, jy moet net soort van weet A word B, B raak C, maar wiskundig wat daardie kind doen? Wat het jy die toevoeging van elke letter? Effektief 1. So wanneer jy 'n verandering aan B, dis soort van soos die verandering van 65-66, wat wiskundig beteken net voeg 1. En so as jy was om te implementeer wat min misleidende tegniek vir jou onderwyser in die kode, jy mag dit net presies doen deur die toevoeging van 'n enkele brief saam. So kort voor lank, ons is gaan ons sien hoe kan neem voordeel van daardie eintlik werklik scramble ontleden en inligting. In die tussentyd, weet dat ons het begin om 'n paar ander biblioteke stel here-- die string vandag een. En 'n baie nuttige webwerf hopelik sal jy vind genoem reference.cs50.net, wat die personeel het saam te stel, sodat as jy wil kyk hoe StrLen werke, jy kan begin tik die naam van die funksie se Klik daar StrLen, en dan 'n minder gemaklik verduideliking gaan verskyn. Of as jy wil hê dat die amptelike Linux-gebaseerde verduideliking, kan jy meer gemaklik klik bo regs, en dit sal dieselfde inligting aan te bied, maar in meer komplekse terme. Dit is 'n nuttige hulpbron te eintlik weet wat alles doen nie. Volgende keer gaan ons 'n blik op Ovaltine en meer, en onsself om die wêreld van die kriptografie. Voor die tyd, sal ons sien jy later hierdie week. En nou, Colton Ogden. Sien julle op Woensdag. [Speel van musiek] [Speel van musiek] Spreker 1: Wat die [Oproep] doen jy? Spreker 1: ek eet my nagereg? Hoe weet jy dit eet? Met jou hande? [Speel van musiek]