[MUSIK SPELA] TALARE 1: Detta är CS50 och detta är början på veckan två. Så, låt oss dyka rakt in något det är buggig, så att säga. Så, här är över CS50 IDE och jag har drog i förväg detta Screen-- jävla Det. Spoiler varning. Okej. Jag har dragit upp den här skärmen här, som har ett mycket enkelt program. Om vi ​​bläddra ner, de flesta av detta är bara kommentarer, men här i ledningarna 13 genom 17 har vi ett program. Det är syntaktiskt giltigt, vilket innebär att om Jag kompilera det, kommer det att kompilera och köra, men det är buggig. Detta program hävdar i kommentarerna där uppe att det ska skrivas ut 10 stjärnor, men det gör det inte. Och baserat på din erfarenhet, eller snart kommer att vara erfarenhet av C, kan du logiskt urskilja varför detta är i själva verket, buggy? Yeah? Publik: Det går från noll till 10. Det är 11 iterationer. TALARE 1: Ja. Så, det kommer från noll upp genom och lika med 10, vilket naturligtvis är 11 iterationer. Så det kommer att print, ja, 11 stjärnor. Så, datavetenskap konventionen i de flesta programmeringsspråk är faktiskt bara för att börja räkna på noll, men räkna upp till men inte genom värde som du faktiskt bryr sig om. Nu är detta en sak som tar lite tid att vänja sig och även Scratch, utformad som den är för icke programmerare eller icke dator forskare och för barn till stor del är utformad för att ha du börjar räkna i allmänhet vid en. Och det är bra. Du kan absolut börja räkna vid en om det är mer bekvämt. Och räkna upp till och genom 10, men du inser särskilt den här veckan och utöver det bara så många saker i programmering anta att 0 är den första siffra som du räkna, att du kommer att finna det lättare bara för att komma in i denna vana av start från noll och räknar upp till värdet du bryr dig om just nu från få gå. Så har det fixat det. Vi ändrade mindre än eller lika med knappt. Låt oss ta en titt på ett andra exempel här. Så också hävdar detta program i sin kommenterar där uppe att det ska skrivas ut tio stjärnor, men det gör det inte. Vad är felet här? Så Vad-- och ledsen, låt oss vara tydliga. 10 stjärnor. En per rad, men det gör det inte. Så i själva verket, låt mig gå vidare och sammanställa detta eftersom det är en lite mindre rensa baserat på den beskrivningen. Låt mig gå in på vår källa katalog. Gör buggy en prick snedstreck, buggy ett. OK, jag ser 11 stjärnor, som är fortfarande problematisk, men de är också alla i en rad. Vad är problemet här? Yeah. PUBLIK: [OHÖRBAR]. TALARE 1: Ja. Så det här är en finess som du kan minns mig att kortfattat nämna. Trots allt ser nätt, och det är snyggt indragen, och det slags ser Scratch liknande på denna rad 16 och 17 är, sannerligen, indragna enligt den for-loop. Det är oväsentligt. Datorn inte vet eller se blanktecken. Blanktecken bara för oss människor, stilistiskt. Datorn vet när du har klamrar, vilket skulle faktiskt, åtgärda problemet. Så, om vi faktiskt gick in och uttryckligen sätta i dessa klammerparenteser som skulle åtgärda detta problem genom göra klart för kompilatorn att jag faktiskt vill köra två rader kod igen, och igen, och igen. Men vad är det grundläggande förklaringen? Höger? Vi behöver inte strikt behöver lockig hängslen hela tiden, även om det är förmodligen bäst praxis att komma in i den vana ändå även om det tillför två tecken till koden. varför? PUBLIK: [OHÖRBAR]? TALARE 1: Ja, så det är en annan lösning helt och hållet. Höger? Särskilt om vid första anblicken du inte verkligen uppskatta vad som händer. Jo, säkert vi kunde bara göra två saker på en gång och bara undvika problemet helt och hållet. Och det är bra, men nu, för dagens ändamål, vad är förklaringen till felet? Varför var alla dessa stjärnor på en rad? Yeah? PUBLIK: Det verkar som om du har en rad kod, du kan göra det utan dem. TALARE 1: Exakt. Detta är bara en mänsklig konvention. Folk inser att det är en lite irriterande eller tråkiga att behöva sätta klammerparenteserna alla av tiden om allt du vill göra är köra en kodrad. Så beslutade människor vissa tid sedan att det är bra. Om du vill lägga alla dina loop på just det en rad som denna, det är bra med en enda semikolon i slutet. Men du kan bara göra en sådan linjen utan klammerparenteserna. Så när CS50 stilguide som kommer att peka dig till, ser du att generellt Det är god vana att komma in i denna tills du är ganska bekväm avvikandet från dessa typer av konventioner och gör din egen sak. Så länge du är själv konsekvent. Och vi ska prata mer om styla lite senare i dag. Så, låt mig att öppna upp ett annat program. Naturligtvis bör vi fixa det 10 också. Låt mig gå vidare och skriva en verklig snabb program som jag ringer, låt oss säga, dot slinga C. Så dot C. loop Och i loop dot C jag ska ha, inkluderar standard I / O dot H int main tomrum. Och nu ska vi bara göra, faktiskt, en slinga. Så, får 4 int jag noll. I är mindre än, låt oss säga, 50. I plus, plus. Och sedan här låt oss gå vidare och skriver ut F. Och sedan vill jag skriva ut I och en ny linje, semikolon. Och detta bör skriva ut alla siffror från noll upp till 50? Några huvudet nickar. Några nos. Vad är felet redan? Vad är det enkelt misstag jag gjort? Yeah. PUBLIK: [OHÖRBAR]. TALARE 1: Ja. Så även om det ser så här är vad jag tänker, minns att jag är också bara ett ASCII-tecken. Så, om jag säger, print "I." Det är bokstavligen gå att skriva ut I. Så, om jag vill plug-in en platshållare värde jag faktiskt behöver göra detta och sedan plug-i värde på I dynamiskt. Annars jag ska bara får 50 I: s på skärmen. Så, låt mig gå vidare och gör denna loop, köra den, och, faktiskt, vi har alla vägen upp genom 49. Och om jag rulla tillbaka i tiden jag ser talet noll vid början. Tja, vad händer om jag slags skruva upp? Vad händer om jag gör det? Bara för att jag tänker inte. Vad är det här programmet. När åter sammanställas och köra, kommer att göra logiskt? PUBLIK: Ingenting. TALARE 1: Ingenting. Varför? Publik: I är utformad för noll. Så, är villkoret falskt. TALARE 1: Ja, exakt. Allt koden är korrekt, syntaktiskt. Detta kommer att sammanställa denna kod kommer att köras, men det är inte kommer att göra något användbart eftersom jag initiera jag till noll. Vi kontrollerar då är jag mer än 50? Självklart, nej, det är inte. Så slingan exekverar aldrig alls. Vad händer om vi gör något lite mer vårdslös? Så, vad händer om vi gillar int jag blir noll. Och låt mig nu använda tiden loop, vilket var ett annat tillstånd. Och medan jag säger, när jag är större än eller lika med noll, och sedan här jag gå vidare och spara filen, gör loop. Och jag är på väg att köra den. Vad ska jag se det här tid med en while-slinga? Yeah. PUBLIK: En oändlig loop? TALARE 1: En oändlig loop? Ja, och varför? PUBLIK: Eftersom det är alltid noll. TALARE 1: Ja. Så, jag initieras som noll. Naturligtvis jag är alltid större än eller lika med 0 som följd. Så, jag ska bara se denna oändligt. Och nu, detta har kommit upp en gång eller två gånger för att kursens huvuden. Vad händer när du har en oändlig loop? PUBLIK: Kontroll C. TALARE 1: Ja. Så Kontroll C kommer så småningom att svara. Tyvärr har vi skrivas ut miljontals nollor redan och så att datorn har sorts fick framför mig. Så kommer det att ignorera mig för lite. Men om du bara trycka Kontroll C några gånger på din Mac eller PC-tangentbord, småningom det borde verkligen avsluta. Och om inte, så visar vi dig några tekniker innan länge var du kan faktiskt med våld döda program, ungefär som i Windows och Mac OS, om så behövs. Men låt oss prova något annat. Låt oss faktiskt öka I. Är Detta kommer fortfarande att vara oändligt? Låt mig köra. Och nu kan du typ av se vad som händer. Även detta är en oändlig slinga. Men det är lite av en kuggfråga. Kommer detta att skriva ut siffror för evigt? PUBLIK: Nej TALARE 1: Nej Varför? Jag hörde några nos hit. Someone-- Yeah. PUBLIK: Du har inte tillräckligt bitar för att verkligen hålla igång. TALARE 1: Okej. Så jag har inte tillräckligt bitar för att hålla igång. Så, vad som kommer att hända? Det är bara att sluta? PUBLIK: Någon gång den kommer att stängas the-- TALARE 1: Det kommer att stänga slingan ner, men varför? Vad kommer att hända på Alldeles i slutet av dess gränser? Yeah? PUBLIK: Det växlar tillbaka till negativa tal. TALARE 1: Att negativa tal, eller om vi bara behandla positiv, noll åtminstone. Så ja, absolut. Minns att vi såg förra gången att om du öka dina bitar en alltför många gånger, och du där fore overflow kapaciteten i int eller vad datatypen är, du är kommer att linda runt, förmodligen, två negativa tal. Eller om du har ange att intervall bör bara vara positivt, som du kan göra, men Vi har inte sett det ännu, du kan hamna åtminstone tillbaka på noll. Även faktiskt ja. I det här fallet, negativ tal, i vilket fall slingan kommer att avsluta eftersom jag är i själva verket inte, större än eller lika med noll om det är negativt. Så tyvärr, hur länge skulle vi behöva vänta? Just nu är vi upp till vad, 2000000-ish? Vi är som 2 miljarder, vi kommer att behöva vänta tills vi faktiskt kan se detta symtom. Men vi kan se det lite snabbare, maybe-- låt oss se om vi kan avbryta. Kom igen. Även menyerna dyker långsamt. Okej. Så, ska vi återkomma till detta inom kort. Det är en bra time-- fan, valpar. Det är en bra tid för vissa meddelanden. Så, om du kanske gillar att engagera sig i YHack, vilken är en händelse som är sponsras av våra vänner på Yale. Och, ja, en del av kursens TF vid Yale är inblandad i detta. YHack är en internationell hacka-a-thon värd och höll vid Yale, som samlar 1500 likasinnade hackare och annons alla över världen. Om detta är av intresse, ta en titt här. Om detta är för kort på skärm, ta en titt på dagens diabilder för webbadressen för yhack.org. Så, även några snabba meddelanden. Så, officiellt sektioner kommer att börja nästa vecka både här och New Haven. Tänk på att du kommer att få en e-post senare i helgen mest sannolika. Det tar lång tid för CS50 avsnitt, med tanke på alla människor i klass och alla flyttar runt. Och alla Undervisning Fellows ' scheman också fortfarande stelnande, men håll ögonen öppna för en e-post och vid behov vara, kan du åter avsnitt där efter. Study.cs50.net. Så, även om du är en ständig deltagare vid sektionerna, inse att nästan alla av de resurser som vi använder i sektioner är allmänt tillgängliga på CS50 Studera på följande webbadress här. Så, om du någonsin vill åter recension material från avsnitt, eller läs framåt, eller så kan du inte göra det för någon vecka, inse att provglasen, och problem, och definitioner, och fler är alla där. Kontorstider återupptas i dag, och i morgon, och onsdag, och torsdag kontrollera kursens hemsida för schemat. Och även, lanserar nu idag är CS50 diskutera. Så, om och när du har frågor till varandra eller för kursen personal, och fungerar i allmänhet på vissa problem som, inse att du inte nödvändigtvis måste vända sig till den mänskliga nästa dig. Om det finns ingen där, kan du nå ut till oss och klasskamrater online via CS50 Diskutera. Så detta är en diskussion Styrelsen för kursen, och inser att detta är kanske den bästa ställe att börja när du har frågor när utanför kontorstid i synnerhet. Luncher startar den här veckan också. På Fire and Ice [OHÖRBAR] i New Haven. Ta en titt på kursens webbplats för att RSVP. Först till kvarn, först tjäna för det. Om du inte får i den här veckan Vi kommer att göra dessa mest varje fredag under löptiden. OK, och nu ett ord om betygssättning. Särskilt när vi går in problem ställa in ett, vilket är denna vecka, och problem set två och därefter. Hur ska vi göra en utvärdering P uppsättningar och utvärdera kvaliteten på dessa? Så det är fyra axlar som vi använder i CS50, och de är dessa fyra här. Omfattning, som fångar på en numerisk basis hur mycket av P set har du tackla. Det är i stort sett överensstämmer med ansträngning, och det är vårt sätt att fånga Har du försökt halva P set, alla av P uppsättningen. Detta är ett lätt att få perfekt poäng på om du gör det, ja, prova varje aspekt av P set. Så ha det i åtanke. Korrektheten är just detta. Har din kod fungerar som specifikationen och eftersom staber provlösningen tyder på att din kod bör i själva verket fungerar. Kontrollera 50, om du inte har träffat det ändå är i P ställa in en specifikation och kommer i allmänhet ge dig ja / nej svar om huruvida koden är korrekt. Åtminstone så långt vi ska att utvärdera det baserat på tester att vi kör i det programmet. Design är mycket mer subjektiv. Detta är hur välskriven är din kod. Och detta är något som du får bättre på tiden, och det är något som vi ska ger mer kvalitativ feedbacken. Och genom design som jag kanske betyda innan länge du kan frestas i vissa P inställd på att göra något loopingly, men att ha kanske tre eller fyra, eller fem kapslade främre slingor eller kapslade medan loopar. Som i allmänhet bör börja göra dig krypa och skulle i allmänhet anses dålig design. Och du börjar att se i klassen och av klass bra sätt att göra saker, dåliga sätt att göra saker som kan alla vara korrekt, men inte nödvändigtvis väl utformade. Som att skriva en uppsats. Du skulle kunna sätta ord på en sida som är grammatiskt korrekt, men uppsatsen eller Avhandlingen de är i är bara helt osammanhängande eller föga övertygande. Och så det kan vara den analoga i skriftlig värld av dåligt eller bra design. Och stil är också ganska subjektiv. Men åtminstone vi förväntar konsekvens. Detta är hur vacker är din kod. Saker och ting fint indragen? Är dina variabler väl kallas / Är alla av dina parenteser och klammerparenteserna linje som de borde vara? Vi har en CS50 stilguide som problemet uppsättningen kommer att peka dig på. De mer bekväm är Välkommen att avvika från den så länge du är själv konsekvent. Och detta är också en lektion vi ska förstärka i avsnitt. Så, om allt detta var lite snabb, inser P set och sektioner kommer att gå in mer på djupet inom kort. Men generellt har vi fåtal skopor till CS50. Poäng är i allmänhet på en skala av ett till tre, eller en till fem. Vi är literally-- och jag kan inte säga detta tillräckligt i den första veckan. Tre är bra. Så även om ja, tre ut av fem normalt, matematiskt, kan vara en 60 procent eller som en D-minus. Tre är i själva verket bra. Och, faktiskt, vi förväntar oss de flesta studenter i klassen att börja termen runt tvåor, treor och och fyror. Förmodligen inte så många femmor. Inte alltför många sådana. Men generellt starta i att sweet spot i kurvan så att när tiden går, det finns faktiskt utrymme för, och möjligheter för övre progression. Så ska du inte likställer tre med 60%. Det är mycket mer abstrakt än så. Formeln som vi beräknar kvaliteter viktas på följande sätt. Korrektheten är värt mest. Design är värt lite mindre. Style är värt lite mindre. Och detta i allmänhet fångar den tid som går till att få varje av dessa axlar precis lagom. Style är superlätt, bör vara supersnabb, men det är en lätt vana att få lata om. Korrektheten kan ta du för det mesta. Jagar vissa programfel kanske ta det extra timme eller mer, och så, poäng i slutändan fångar det. Och så nu en allvarligare ord. Eftersom CS50 har åtskillnad, för bättre eller ännu värre, att vara kanske bättre bekant med frågor om akademisk ärlighet än de flesta någon annan kurs. Och faktiskt, är det till min kännedom att vi skicka fler studenter, tyvärr, för disciplinära ändamål varje år som följd. Så, i syfte att fullt ut avslöjande, låt oss prata en kort stund om vad som händer i CS50, och vad du kan göra, och vad du kan vara uppmärksam på. Så här sedan 2007, när Jag ärvde kursen, är antalet Ad styrelse fall. Ad styrelsen Harvard disciplin kropp, eller nu Honor Counsel, till vilka fall hänvisas när elever gör något som kursens kursplan anser orimligt. Det finns ingen verklig mönster här, skulle jag säga. Det varierar över år men i allmänhet detta är antalet ärenden som avses. Antalet studenter som är inblandade? Det varierar också. Typiskt, förra året för instans, 29 studenter vid Harvard var Ad Boarded, så att säga. 29 av dem nuvarande studenter, två av dem tidigare studenter, som samarbetade på något ogynnsam sätt. Och sedan när det gäller procentsats, är det oftast ca 3% av den klass som, tyvärr, gör dessa typer av beslut. Så förra året var 3,5% av CS50: s studentkåren Det var Ad Boarded, så att säga. Så, vad betyder allt detta? Och vad gör vi egentligen? Så, för full information, vi absolut, som datavetare, har programverktyg till vårt förfogande och det är väldigt lätt för oss, i rättvisans namn, att andra klasskamrater som inte korsar dessa linjer för att korsa jämföra varje underkastelse i år mot varje underkastelse under de senaste åtta åren. Programvaran gör detta. Och i slutändan är det mänskliga ögon som beslutar eller inte hänvisa någon roll för ytterligare prövning, men programvara hjälper verkligen. Och detta, ärligt talat, är därför att jag tror vi har så stora siffror i CS50. Det är inte för CS50 studenter eller CS eleverna mer generellt är något mindre ärlig än någon annan deltagare, Det är bara att vi har verktyg och tekniker som att ta detta första pass. Men vi hålla ett öga på alla dessa saker samt, återigen, med tanke på erkänner det arbete som är sätts i av en super majoritet av klassen. Och kursen politik på akademisk hederlighet, även om det är ett gäng av punkterna lång med en massa kulor som är förhoppningsvis ganska lättläst, det verkligen kokar ner för att vara rimligt. Och det bästa tumregel som Vi erbjuder upp inom kursplanen är detta, essensen av allt arbete som du underkasta sig den här kursen ska vara din egen. Och faktiskt, i nästan alla av dem fall som avses för disciplinära åtgärder Det var på grund av någon elev sent en natt vände typiskt sin kod över direkt till en klasskamrat, som sedan antagit i sin helhet eller avsevärt därav. Men egentligen, är detta OK. Och faktiskt, på kontoret timmar, de papperslappar du har överlämnats om du kom med kontor timmar förra veckan uppmuntrar lika mycket. Du är absolut välkomnas och uppmuntras att diskutera problemsamlingar med klasskamrater. För att hjälpa varandra när snubbla. Men i allmänhet tumregel bör vara så här ", när du ber om hjälp, du kan visa din kod för andra, men du kanske inte se deras. " Så, med andra ord, om jag kämpar med vissa P set och jag sitter där i matsal hall, eller i biblioteket, eller i klassrummet försöker hitta något fel, Jag kan verkligen visa min kod på min skärm till personen som sitter bredvid för mig, verkligen personal, men också en klasskompis. Men om den lösning som min klasskamrat erbjuder är, oh, här bara ta en titt på vad Jag gjorde, som korsar linjen. Och jag skulle våga säga att det är i allmänhet en rimlig sak för de flesta människor till mycket lätt se raden av. Och så, se kursplan för mer information. Och nu en av de mer kontroversiella aspekter av CS50 kursplan som jag trodde att jag skulle tala i slutsats här är den så kallade ånger klausulen. Så, här är allt det finstilta. Men i allmänhet har vi sett under de senaste 8 plus år att, ja, nästan alla CS50: s fall av akademisk oärlighet har varit resultatet av bara dålig beslutsfattande sent på natten. Det resultat av stress, resultatet av brist på äta, brist på sömn, alltför många P-apparater, alltför många tidsfrister, för många åtaganden. Stress bygga upp i en 02:00, 03:00 AM, 04:00, med en deadline hotande. De flesta elever i dessa fall har just gjort dåliga beslut att de kan mycket väl ångra Nästa morgon om inte minuter senare, men fram till förra året fanns det ingen avlastningsventil att dessa elever kunde faktiskt öppna upp för att faktiskt ta itu med problem huvudet på utan rädsla för att bli startas från college helt och hållet. Och faktiskt, introducerade vi Detta beklagar klausul förra året, som säger att om inom 72 timmar, tre dagar, att korsa någon linje föreskrivs i kursplanen du kommer fram till en av kursens huvuden och vi kommer att ha en pratstund om det. Det finns fortfarande finnas en viss resultatet, i motsats till vad som är rapporterats till motsatsen. Det finns fortfarande en del resultat som är talan av kursen allmänhet nollställning ett P set eller vidta någon annan åtgärd, men vi kommer faktiskt hantera det själva och inte hänskjuta det högre var resultatet kan vara mycket mer allvarliga. Och, ja, för att dela vad som hände förra året, under de åtta åren, och nu nio år, att undervisa denna kurs och efter mixtra med olika knoppar, vända olika rattarna under de senaste flera år på akademisk hederlighet, och ser per data accepteras inget uppenbara inverkan, även tal som denna, detta var händer ned det bästa Vi har infört pedagogiskt i åtta år tillsammans dessa rader i CS50. 19 elever kom fram enligt denna klausul i fjol. Vi tog inga åtgärder för sju av de studenter, fastställa att de var onödigt orolig. De hade i själva verket inte, korsade en linje, men det var en bra chatt att ha ändå. Vi zeroed 11 av poängen som lämnades in. Och i ett fall vi frågade en student att göra ett problembild. Men mer övertygande, ärligt, med dessa 19 chattar, som var långt mer än jag förväntas ha, var och en av dem 10 minuter till kanske en timme lång, även fört att tända ett antal frågor angående familjära frågor, vän frågor, psykiska problem att vi bedriver sedan, med studentens välsignelse, bosatt dekan, eller vänner, eller något annat nummer supportresurser. För att detta var överlägset en av de bästa användningsområdena för vår tid och ett av de bästa insatser. Med detta sagt, hade det inte ingång på hastigheten av detektion akademisk oärlighet mer generellt. Och jag vågar säga, denna undergrupp studenter förra året var en demografiska som vi tidigare aldrig identifieras innan och hade aldrig i samband med tidigare. Och så var dessa underbara framgångshistorier trots att de fördes till ljus i mindre än optimala förhållanden. Så ha detta i åtanke som du gör, kanske, några dåliga beslut själv sent på natten, att det finns anlita så länge som studenten i en sådan situation äger upp och komma fram så att vi kan har den typen av chatt och ta itu med det på ett sätt som är pedagogiska och sedan vi kan lägga det bakom oss nästa dag. Så utan vidare, ta edge off av detta samtal, orsaken till att valparna är upp är bara för att bryta isen för ett ögonblick. Och tyvärr, de är alla sömn, men vad skulle hända här var alla var tänkt att respektingivande och typ av avkoppling efter det mycket tung konversation. Men tydligen har jag lagt valparna att sova. Men om du går till CS50: s webbplats slash valpar, du kan titta på dem hela dagen lång. Särskilt kanske 2:00 eller 03:00 eller 04:00 på natten att se en liten stressa där. Så det är slash valpar. Okej. Var inte det roligt? OK. Så, tillbaka till någon dator vetenskap, om jag får. Så minns att förra gången vi började tittar inte bara på huvud, som var standard funktion, när gröna flaggan klickade motsvarande, men vi började också kort skriver några av våra egna funktioner. Och hittills ingen av dessa funktioner har varit särskilt stort eller köttig. Du får in i de större funktioner förmodligen P set 2, P set 3 definitivt P set 4 och framåt. Just nu de flesta av dina program, om inte alla av dem, säkert för P set 1 kan göras helt i main. Om ditt program är bara fem rader, 10 linjer, även 20 rader lång, perfekt rimligt att skriva det alla i huvud och inte över komplicera koden, men vad vi gör i dag och framåt försöker också införa några bra design tekniker så att din kod blir mer komplicerade och de problem du vill lösa blir hårdare och mer intressant att du har, typ av, verktygen i din verktygslåda som att utforma bra lösningar till dem. Så, låt oss ta en snabb titt tillbaka på det här programmet från min förra veckan, vilket var funktioner noll dot C. Och märka det, helt enkelt, Det ser ut så här med två funktioner, huvud- och utskriftsnamn. Och tänker tillbaka eller kanske reverse engineering idag, Vad var motivationen för att införa en funktion i linje 28 kallas, Utskrifts namn? Eller vad var detta ett exempel på i termer av en princip eller takeaway, om du vill. Några blåsljud. Va? Ja så Funktionell Nedbrytning är typen av finare sätt att säga, sönder ditt program i dess beståndsdelar och sedan använda dessa delar att sätta samman en helhet. Så är också att bara typ av en klunk redan, men det är kanske till och med en bättre exempel på något bara kallas abstraktion. Höger? Abstraktion kommer att vara en av de återkommande teman i CS50 och även datavetenskap mer generellt eftersom det är en teknik med vilken du kan lösa problem mer effektivt eftersom du kan skriva lösningar mer intuitivt och på ett sätt som skalar och är förstås av andra människor. Vad menar jag med det? Så, det är utan tvekan mycket mer lättläst att titta på ett program som detta, super kort men det är. När du ser på linjen 22 att det finns en funktion som kallas, utskriftsnamn. Det namnet ensam säger vad den gör. Denna funktion tydligen tar input mellan sina parenteser, och uppenbarligen gör något, förmodligen skriver namnet. Och så, även om vi absolut kan ha gjort vad vi gjorde för en vecka sedan, som var bara ta denna faktiska kodraden, bli av detta, och få bli av med detta alla tillsammans, vi sorts abstraherade bort begreppet skriva ut ett namn. Jag bryr mig inte om du använder utskrifts def. Jag bryr mig inte om du har en procent S och ett bakstreck N. Dessa är otroligt svårbegripliga detaljer. Vad jag bryr mig om som en programmerare skriver ett namn. Och så, vad bättre sätt att göra det än genom att anropa en funktion, tryck namn? Och så, det var en av de motiv för att göra något sådant. Göra koden mer lättläst, mer återanvändbara, och även själv beskrivande. Nu ska vi ta en titt på ett annat exempel, vilket var funktioner en, som vi hade här. Så detta är en kanske ännu mer övertygande eftersom, i detta fall, Jag vill inte bara få en int. Jag vill få en positiv int. Och det visar sig att få en positiv int du måste göra en massa legwork. Höger? Det är inte en enkel rad ring som utskrifts hette, vilket är visserligen mindre övertygande. För att få en positiv int, logically-- Låt mig rulla tillbaka ner för att dölja detta. Vad måste du göra? Liksom alla de verktyg vi har just nu är saker som utskrifts def från Standard Bibliotek och även från CS50 bibliotek Vi har få Int, och få Float, Få Lång Lång, få String, men den enda, Germane, just nu är att få Int. Så, om det enda verktyg man har i din verktygslåda är Få Int, hur ska vi gå om att genomföra den för att få positiva int? PUBLIK: Skapa en logg och kontrollera om huruvida den ingång som de gav var positivt eller inte. TALARE 1: Perfect. Exakt. Ett annat verktyg som vi har i vår verktygslåda från en vecka eller två sedan är bara looping konstruktionen. Och så, ja, om vi använder en stund loop, eller en gör while-slinga eller en främre loop vi skulle förmodligen komma undan med någon av de i någon form. Vi kan genomföra begreppet get positiva int genom att bara använda Få Int, och sedan bara hålla kalla det igen och hålla tjat användaren tills han eller hon faktiskt ger oss vad vi vill. Och så nu detta abstraktion av processen för att få en positiv int in en funktion som kallas Få Positiv Int är lite mer övertygande eftersom titta på detta. Dessa är som 10 plus kodrader som är involverade i att få en positiv int, och jag bryr mig egentligen inte hur du gör det. Allt jag bryr mig är att du kan göra det, så jag har dolda alla dessa detaljer bakom en funktion kallad Få Positivt int att Så har det do while-slinga. Och se förra veckan för syntaxen där, men det bara förklarar N, och det skriver ut instruktion till användaren. Det kallar Få Int och kontrollerar sedan det detta tillstånd igen, och igen, och igen tills användaren samverkar. Så nu, några rimlighetskontroller. För dem som kanske bekant med viss programmering, varför N förklarade varför jag skapar N utanför göra medan loop? Varför är det på rad 29 och inte på liknande 33, till exempel. PUBLIK: För när du förklara den utanför, det slags av mer, ju större scope-- TALARE 1: Bra. PUBLIK: --and om du deklarerar det innanför slingan, [OHÖRBAR] eftersom den inte vet om det. TALARE 1: Exakt. Om jag kan simplify-- Det är en fråga om omfattning. Och omfattning hänvisas till det sammanhang i som en variabel existerar eller är användbar. Och den fina tumregel här är att i allmänhet när du deklarerar eller skapa en variabel som du bara kan använda det inne av de närmaste omfamna klammerparenteserna. Så vad betyder det? Om jag istället ångra detta och gå med något som känns lite enklare. Höger? Linje 32 ser ut precis renare för mig nu. Jag gör båda sakerna på en gång och sedan tilldela den högra till den vänstra. Problemet nu baseras på denna definition av tillämpningsområdet är att N kan användas i rader 31 och 32 på insidan av denna slinga, men där av denna definition kan det inte användas? I linje vad? Yeah. PUBLIK: 35. TALARE 1: 35. Definitivt inte 35. Och även var annars? PUBLIK: 34. TALARE 1: Även 34 är problematiskt eftersom det är utanför klammerparenteserna. Och så i själva verket, låt oss se vad som händer. Höger? Detta kan tyckas lite intuitiv eller kanske inte, men låt oss se vad kompilator har att säga när vi går in dagens källkods-katalogen. Gör funktion en. Herregud. Tja, jag äntligen klar att, förresten. Okej. Och vad är problemet här? Mycket svårbegripliga att titta på. Men här är vad jag typed-- gör funktionen en. Här är det som gör induceras som är faktiskt med hjälp av kompilatorn clang med vissa av dessa flaggor att vi kommer att se igen snart. Och återigen, alltid titta vid det första felet, eftersom det kan bara ha en kaskad meningslös effekt på andra linjer. Så vad detta betyder är att Problemet är i funktion 1.c. Det är på linje 32. Och det är vid kolumn eller karaktär, 13. Så när din textredigerare som kan hjälpa dig att identifiera var problemet är. Så om jag rulla upp, vad är linje 32? Det är sannerligen här som är redan markerat just här-- oanvända variabeln n. Men det är inte oanvänd. Jag använder det. Men kompilatorn förvirrade, eftersom det bara finns inne i denna omfattning. Och så jag kan inte använda den här. Jag kan inte använda den här. Och kompilatorn därför inte ens bry sig om att jag försöker. Det verkar vara oanvänd inom dess faktiska omfattning. Så vi kan bredda genom att göra exakt vad vi började with-- int n. Och även om det inte ser lika elegant, kanske, och vi tar en extra rad här, nu är det i omfattning överallt. Så låt oss försöka igen. Så gör funktionen en. Fin. Och nu om jag om jag kör funktion en, låt oss ge det negativa 10, -1, 0, 1, och det verkligen fungerar. Så det finns en annan lösning här. Du vet vad? Vad händer om jag verkligen brottas med detta? Jag vet inte var det n är tänkt att gå. Du vet vad? Jag kommer bara att sätta det hela sätt på toppen av min fil här. Vad skulle det göra, tror du? Yeah? PUBLIK: [OHÖRBAR]. TALARE 1: Ja. Så jag har gjort det globalt, så att säga. Om du har en variabel som är utanför alla dina funktioner som är tillåtet, koden bör sammanställa och n kommer nu vara tillgängliga inte bara i get positiv int, men också i main-- som är lite oroande eftersom det finns redan ett n i main, så mer på det på bara en moment-- men detta skulle anses dålig design. Okej. Om du måste ta till något liknande, åh, jag bara sätta upp det här eftersom koden verkar sammanställa är i allmänhet inte den bästa praxis. Snarare du vill välja snävast möjliga omfattning för dina variabler, skulle vilket innebär gå med vår ursprungliga design, som är just här. Nu som en sidoreplik, om du hade en identiskt namngiven variabel här, vägen c skulle hantera this-- även om detta inte kommer att hända alltför often-- är att detta är fortfarande mycket bra här. Men denna definition av n i linje 22 kommer att skugga global. Så här kommer att arbeta inom viktigaste, och den globala ett faktiskt kommer att gälla när du är i få positiva int Men mer om det en annan gång, men bara för dem nyfikna. Så kort sagt, vi fixar det här. Nu retas isär två andra pjäser innan vi tittar på en sista kodrad i detta program. Få positiva int. På den vänstra sidan av sitt ord är ordet int. Vad betyder det betyda tror du? Hittills har vi mest sett ogiltig. Yeah? PUBLIK: Det är den typ av variabel som du frågar om. TALARE 1: Ja, det är den typ av, låt mig inte säga variabel, men vilken typ av värde att jag frågar tillbaka. Och faktiskt, det är intuitiv här, förhoppningsvis. Höger? Om du vill få en positiv int, vad är det du vill function-- som vår volontärer från förra veckan att lämna tillbaka en bit papper med en int på det? Och så vi har angett att s.k. returtyp av denna funktion är att få positiv int. Om vi ​​inte vill att det ska tillbaka något, du säger ogiltiga. Om du vill att det ska återvända en sträng, säger du sträng. Om du vill att det ska återvända en flottör, säger du flyta. Men det enda som gäller här logiskt, eftersom jag använder få int, trots att jag begränsar det till positiva värden, är att återvända en int. Så omvänt, vad betyder det att det finns ett tomrum inom parentes? Vad gör parentes generellt definiera? Yeah? PUBLIK: Det betyder funktionens faktiskt inte få det. TALARE 1: Det betyder funktionens faktiskt inte får vad? Publik: En ingång. TALARE 1: En ingång, helst. Så ja, om parentes här du anger ogiltiga, det betyder bara att jag inte vill ha någon ingång. Jag ska ta itu med själv problemet. Och faktiskt, behöver du inte att berätta få positiva int någonting. Du kan bara säga, få positiva int, och att Funktionen kommer att gå ut och göra sin sak. Men det har varit ett litet trick jag har spelat här hela tiden att se till att denna kod sammanställer. Lägg märke till att int-- få positiva int void-- ligger på linje 27. Men av någon till synes konstig anledning det är också upp här på rad 16. Och bara för bra åtgärd Jag ska upprepa detta så det är helt identiska. Och jag har sagt prototyp med en liten en-line kommentar. Vad händer om jag tar bort det, och nu köra gör funktion 1 anger. Hoppsan. Vänta en minut. Var är min flik? Va? Standby. Gör funktion 1. Det går vi. OK. Hade inte sparat det ordentligt. Så jag tror det finns en liten bugg här där jag är inte se fliknamnet för tillfället. Så vad är det som händer här? Implicit deklaration av funktion få positiva int är ogiltig i C99. Så förvirrande igen. Så vad är detta ett tecken på? Tja, visar det sig att C är ganska dumt. Tja, det är programmeringen språk, eller snarare kompilatorn är. Det vet bara vad du har lärde, och det är bara kommer att veta något Om du lärt det förut. Med andra ord, i Huvud just nu, jag är försöker ringa en funktion kallas få positiva int. Men kompilatorn inte kommer lägga märke till att få en positiv int existerar tills ledningen 26. Och så vad kompilatorn gör är bara fel så snart det blir till ledningen 17, säger implicit deklaration av få positiva int, som är bara ett fint sätt att säga, jag vet inte vet vad får positiva int ännu. Andra språk som Java och Python och Ruby kan se framåt. C inte. Och så sätt att fixa detta är ett av två sätt. Antingen en, om problemet är att få positiv int inte har sett förut, Tja, låt mig bara flytta den till toppen. Det skulle lösa problemet. Men generellt är det anses bättre teknik att sätta din huvuduppgift vid mycket toppen så att en människa som läser din kod vet vad programmet gör, eftersom huvud inte begravd alla vägen i botten eller i mitten. Det är högst upp. Så som inte känns perfekt. Och du kan faktiskt få i situationer där om ett funktionsanrop en annan, vilket kräver en annan, du kan hamna i en fråga där ingen kan gå över den andra, logiskt. Det är bara inte möjligt. Och så sätt att arbeta runt detta är att bara ta funktionen underskrift, så att speak-- den första raden där det är declared-- och bara kopiera, klistra in den på toppen, men inte med lockigt braces-- bara med ett semikolon. Det är som en liten ledtråd av vad som komma skall. Och faktiskt, all denna tid, då vi har sett saker som standard io.h och cs50.h, Även i dessa dot h-filer finns det andra prototyper. Och vi ser att inom kort. Så kort sagt, när du har ett program i en fil med flera funktioner förutom huvud, du nästan alltid vill deklarera dem bara genom sin första linjen, följt av ett semikolon, högst upp i filen. Det var en hel del på en gång. Några frågor? Några frågor? Okej. Så låt oss gå vidare sedan till något som hosta. Oh. Hur passande. Okej. Hosta. Så här är en c genomförande av ett program vi gjorde häromdagen i Scratch som mycket enkelt bara säger hosta, hosta, hosta. Okej. Och någon sade ett par dagar sedan att det finns ett sätt att rengöra den här koden upp redan. Okej? Så snart du kopierar och klistra förmodligen dålig design. Minst en gång får vi fyra eller fem eller 20 hosta, känns det dålig praxis. Vi håller bara kopiera, klistra. Vad är den självklara lösningen att rengöra det här programmet upp? PUBLIK: Loop. TALARE 1: Ja. Så använd en loop. Och vi kan använda en for-loop, ett tag slinga, vilket som helst antal metoder. Och faktiskt, är vad som vi gör i version ett här. Jag har i stället skrivas det i version ett av cough.c bara vara hosta inom en for-loop. Okej, men det finns en möjlighet nu till typ av start att utforma denna lite mer som lektionen vi lärt en stund sedan, vilket är this-- antar att jag ville för att skapa en funktion som kallas hosta, låt oss betrakta bara ett ögonblick vad det kommer att se ut. Så om jag vill ha något hosta, jag behöver bara att använda utskrifts f inuti funktionen. Och faktiskt jag. Och faktiskt, allt detta tid, varje gång du är utskrift något skärmen, en programmerare skulle kalla det en bieffekt. Det är mig inte lämna tillbaka någon ett värde. Det är mig ta några åtgärder som kan vara visuellt uppenbar. Men denna funktion hosta, det åter allt baserat på dess första raden? Nej, eftersom dess returtyp är ogiltigt, vilket betyder bara det är inte gav mig någonting tillbaka. Det kan göra något visuellt, men det är inte lämna mig backa en bit papper som förra veckan. Behöver det någon ingång? Nej. Och så är det ogiltigt här också. Så det här är för typ av över engineering detta problem. Höger? Jag har gjort programmet mer komplexa, flera rader kod, Jag har inte gjort det mer funktionella, men detta skulle vara en språngbräda, kanske för en bredare sammanhang med mer komplicerad kod. Men hur är det? Vad har jag done-- bara blick på detta utan att titta på kommentaren högst upp på file-- vad har Jag grunden gjort här med min hosta genomförandet som är annorlunda? Ja, på baksidan? PUBLIK: Gör det så att du kan har en karaktär stänga. TALARE 1: Ja. Så det känns ganska trevligt. Höger? Det är som att lägga till en funktion till program eller din funktion, i det här fallet. Den returnerar fortfarande ingenting. Det kan ha en visuell bieffekt, eftersom det ringer print f. Men nu har jag parametrized funktionen, som betyder att jag har angett tagit inmatning av typen int och kallar det n, men jag kan kalla det vad jag vill. I själva verket kan det bara vara gånger för att bli ännu tydligare. Och då kunde jag bara ändra det här. Men poängen är att det är hur jag skapa en funktion som tar indata. Och om du minns vända genom kanske på nätet i en av genomgångar, den fjärde och sista hosta exempel, du kommer att märka här har jag gener min kod further-- slags abstraherade det ytterligare. Liksom hosta och nysning, båda är ungefär som att säga något eller göra någon form av ljud. Spara skulle vara den motsvarande Scratch blocket. Så vad jag gjorde i denna version, som vi kan bara blick på, är hosta är precis som att säga, [HOSTA] hosta, och under tiden, är nysningar som att säga, [Achoo]. Och så har jag gener genomförandet av dem nu genomföra denna generiska funktion, säga, vilket är intressant för dagens ändamål bara för att det fortfarande inte har en returtyp. Men hur många ingångar har den? PUBLIK: Två. TALARE 1: Två. Och så om du vill ta två argument, bara separera dem med kommatecken. Och om du vill sedan kallar denna funktion, märker att du bara Ring säga, citationstecken, unquote, för det första argumentet, gemensamt n, för det andra argumentet. Så återigen, vi har just nu byggstenar så att vi kan faktiskt genomföra några av våra egna funktioner. Okej. Har du frågor om dessa? Så nu ska vi skära ner ett lager om det. Och målet i slutändan, är nästa veckas problem set kommer att vara på cryptogrophy-- konsten att förvrängningsinformation. Och särskilt den information kommer att få dig att kryptera eller dekryptera kommer att vara text. Och så att typen av inviterar Frågan i dag som väl, vad som händer under huven med text bortom ASCII från vecka noll, och hur kan vi faktiskt börja att manipulera den? Så här är Zamyla namn. Och i text, som kan inmatas i likhet med get strängfunktionen. Och börjar nu, när du ser en sträng som this-- Z-A-M-Y-L-A-- börja tänka på det som om varje av dessa tecken är i en låda med sin eget. Och faktiskt, i en vecka eller så är tid, var och en av dessa lådor kommer att representera mycket specifikt ett block av memory-- en bit minne. Så vart och ett av dessa brev, i slutändan, kommer att representera 8 bitar. Och vi ska verkligen se vad som händer på under huven i min dator. Men för att inte räcker bara för att titta på Zamyla genom denna lins, varigenom var och en av dessa brev är i sin egen låda. Och trevligt nog i C kan vi tillgång till var och en av dessa rutor direkt. Så om du vill få den första bokstaven i hennes namn, super lätt i C. Om du vill få den sista brev, super lätt samt med en bit av ny syntax. Så jag kommer att gå vidare till CS50 IDE och öppna upp snöret noll dot C. Och i detta exempel här, det finns ett par nya saker på gång. Så först i linje 19, vi har sett detta before-- få sträng. Så precis som en snabb kontroll sanity, om någon kunde ge upp muntligt en lekman förklaring av vad som händer i linje 19. Liksom bara omsätta detta i Engelska som en rumskompis inte i CS50 kan förstå. Yeah. PUBLIK: Har användaren mata in ett sträng och förvara den i en variabel s. TALARE 1: Bra. Har användaren mata in en sträng och förvara den i en variabel s. Toppen. Så på den högra sida, kallar vi få sträng. Som returnerar ett värde som inte får tilldelas från höger sida till vänster sida i en variabel som kallas s som är konstruerade för att lagra en sträng. Exakt. Så nu linje 22, per kommentaren i linje 21, uppenbarligen skriver att sträng ett tecken per rad. Men hur? Så först av allt, vi initiera jag till 0. Och sedan hur får vi till I slutet av Zamyla namn? Tja, i slutet av Zamyla namn, jag kunde manuellt skriva i det sista tecknet i hennes namn på något sätt, eller antalet det. Höger? Om vi ​​går tillbaka här-- Z-A-M-L-- Y-L-A-- så jag kunde skriva in. Vad är index för Zamyla sista bokstaven? Om detta är 0-- talande som en programmer-- 0, 1, 2, 3, 4, 5, Jag heard-- så faktiskt, den sista bokstaven i Zamyla namn är den sjätte, men om vi räknar från 0, det kommer att vara nummer 5. Så ha det i åtanke här. Det visar sig att det finns en funktion i C kallas strlen och tillbaka i dag och i dag fortfarande, en massa programmerare väljer att synkronisera namn för deras funktioner som låter som ord de försöker säga. Så strlen är stränglängd. Och så vad skulle stränglängd S tillbaka när Zamyla är ingången? PUBLIK: Five. TALARE 1: Z-A-M-Y-L. Sex. Höger? Vad är längden på Zamyla namn? Höger? Och just i verkligheten, sex bokstäver. Höger? Så vad betyder det för vår loop? Vi kommer att gå från 0 upp till sex, som kommer att ge oss fem iterationer. Vad gör vi på varje iteration? Tja, procent C, någon gissade häromdagen, innebär en platshållare för vad? PUBLIK: Char. TALARE 1: Bara en röding. Så en enda character-- inte flera tecken som en sträng. Och så här är den nya linjen att vi har fått skriva ut. Och så här är den nya syntaxen. Om du vill skriva ut den i: te tecken i strängen S, så att säga, kan du helt enkelt säga namn på strängen S, och sedan öppna hakparentes och sedan stängs hakparentes, med en i mitten. Och det är ganska trevligt att det slags ser ut som en kvadrat precis som de rutor där Zamyla s tecken finns på den bilden där. Så om jag verkligen köra detta nu, låt oss se vad som händer. Gör sträng 0 dot snedstreck string 0, och då är jag kommer att skriva i Zamyla namn. Det finns ingen snabb, eftersom jag inte Använd utskrifts f, men det är bra. Jag vet precis vad jag ska göra. Och faktiskt, skriver den ut Zamyla namn, en per rad. Nu vara lite vårdslös. Antag att jag inte visste om strlen och jag tänkte, okej, är ingen kommer att ha en namnge större än som 50 tecken. Låt oss gå vidare och kompilera detta och köra den, och skriv sedan in Zamyla igen. Logiskt, vad är det Programmet kommer att försöka att skriva ut? Z-A-M-Y-L-A sedan som 45 okända byte minne. Och faktiskt, vi kommer tillbaka denna idé minne. Men bara logiskt, om Zamyla namn är denna långa, enligt bilden här, vad vi säger är fortsätta att skriva ut, fortsätta att skriva ut, håll tryckning, fortsätta att skriva ut, fortsätta att skriva ut, hela vägen till den 50: e tecken, som vem vet vad som kommer att hända. Så låt oss faktiskt ta en titt. Låt oss skriva in Zamyla. Intressant. Vi hade tur. Bara en massa vitt utrymme. Oh. Det finns en funky karaktär. Det ser ungefär som en konstig fråga markera det, men det finns Zamyla namn. Låt oss få riktigt hänsynslös. Ska vi skriva ut 500 block i det okända? Låt oss gå vidare och göra det samt och sedan åter köra. Och låt oss helskärm det, eftersom Vi behöver se mer utrymme. Zamyla. Got lucky igen. Vågar vi får mer hänsynslös? Låt oss få mer hänsynslös. 50.000 tecken. Detta är mest säkert inte en bra idé. Okej. Gör strängen 0. Detta kommer att vara vår sista demo. Zamyla. Ugh. Ugh. OK. Så mitt minne är verkligen tomt just nu, vilket är faktiskt typ av praktiskt. Vad jag försöker få att-- okej. Och nu är jag bara kommer att få vårdslös. 500 tusen. Make-- låt oss helskärmsläge det. Enter. Zamyla. Det går vi. Jag har ingen aning om vad det är, men det låter illa. Okej. Och faktiskt, snart, om du är bland de lyckliga få i kontorstid och problem ange ett, du kan mycket väl stöta på detta. Segmente fel faktiskt gör har en väldefinierad betydelse. Det innebär någon form av misstag om ett segment av minnet. Och i lekmannaspråk, Det innebär att vi berört memory-- vi använde RAM i min dator att jag inte borde ha haft tillgång till. Och det är det som är både kraftfull och också farligt om C är att du faktiskt har fritt tillträde till helheten av ditt program minne eller byte eller RAM, mera specifikt. Så även om Zamyla namn är bara sex tecken långt, Jag kan fortfarande gå någonstans i minnet jag vill. Och som en sidoreplik, om du har någonsin läst någon artikel under årens lopp om vissa server eller något program bli knäckt eller hacka det är utnyttjat något kallas en buffer overflow utnyttja att vi kommer faktiskt tala om i några veckor, det är allmänt med hänvisning till på något sätt lura en dator i går bra bortom gränserna för minnet att den bör ha, och hitta något saftiga av att memory-- en lösenord, kanske, en väg kringgå vissa serienummer kontrollera, eller bara allmänt kunna att lura datorn exekverar kod som inte var avsett. Men låt oss återkomma till verklighet för bara ett ögonblick där det här programmet var genomförs med strlen, och införa en sak här. Vad är nytt bland dessa topp tre rader? Så sträng dot h. Det visar sig att det är det här biblioteket kallas String Dot H, eller String Library, vars sidhuvudfilen, så att säga, är sträng dot h som ger mig tillgång till denna strlen funktion. Om jag utelämnar det är kompilatorn kommer att skrika på mig i någon form. Men vet du vad? Låt oss nu få riktigt nyanserad. I linje 22, det finns något slag av inefficient-- dåligt utformad, arguably-- om denna kodrad. Tänker tillbaka på hur för-slinga genomförs och vilka åtgärder hända igen och igen och igen-- initieringen, tillståndet, den kod som blir exekveras sedan inkrementet eller förändringen, då tillståndet, då koden, då förändringen sedan tillståndet, då koden, då förändringen, och så vidare. Så vad kan vara lite oroande eller dåligt gjort här? Ja, i blått. PUBLIK: strlen är kallade många, många gånger. TALARE 1: Ja. Så strlen kallas många gånger, men vad som är längden av Zamyla namn den första gången slingan exekverar? PUBLIK: Sex. TALARE 1: Six. Ja, vad är längden på hennes namn andra gången koden körs? PUBLIK: Sex. TALARE 1: Okej. Det är fortfarande sex. Höger? Zarla namn har inte ändrats, även om jag ser endast en del av bokstäverna i hennes namn. Och så det faktum att jag är ett effektivt sätt ställer denna fråga, vad är längden på Zamyla, vad är längden av Zamyla, vad är längden på Zamyla, sex separata gånger, eller sju även är bara dumt, eftersom det är oföränderligt det svaret. Och så vad jag kunde faktiskt gör är this-- i sträng en Jag har en marginellt bättre version här. There-- whoops-- sträng två Jag har en marginellt bättre version där Jag gör this-- istället för att bara initierar jag till 0, jag också med kommatecken deklarera en andra variabel som heter n-- Jag behöver inte säga int igen. Jag skulle faktiskt inte. Men jag säger n. Och då jag initiera n till den strlen av n, så att nu hur många gånger inte strlen får verk totalt? Bara en gång. Och så det här är vad vi menar tidigare om bättre design. Egentligen när koden är korrekt, gå tillbaka och tänka igenom, jag med så lite minne eller så få sekunder eller millisekunder datortid som möjligt att genomföra några problem? Och jag kommer att rulla upp och bara nämna att det är det här omnämnande av null i denna version, men vi ska återkomma till det inom kort. Eftersom det för nu, låt oss ta en titt på var detta kommer att leda oss. Så en, visar det sig att nu när vi har förmågan att titta på enskilda tecken, vi kan utnyttja något från vecka 0 som var mycket svårbegripliga och slags ointressant på tiden. Men nu, och särskilt när vi får kryptografi i en vecka, det kommer att vara ganska stark. Det visar sig att med några Data types-- Ints och flyter och tecken och strängar och andra saker-- vissa av dem kan mycket enkelt omvandlas till en annan. Till exempel när vi talat om ASCII en tid ago-- här är det versaler A genom M, punkt, punkt, dot-- vi sade att det finns en kartläggning mellan dessa bokstäver och siffror. Och faktiskt, håller den sanna för gemener liksom. Gemener a är 97, är huvudstad en 65. Och det finns en rad i ASCII, vilket är just denna kartläggning system för alla de andra bokstäverna. Så vad betyder det? Tja, jag ska gå vidare och öppna upp verkliga snabbt något som kallas ASCII 0, varav de flesta är kommentarer. Och återigen på nätet kan du alltid blick igenom kommentarerna. Och ta en titt vad detta kommer att göra. Så det har fått en huvuduppgift. Jag har hårdkodade siffrorna bara för nu, eftersom jag vet vad jag gör. Jag vet vad jag vill se här. Och jag har initierats jag till 65. Och jag räknar upp genom 26 bokstäver totalt. Och vad ska jag skriva ut en rad i taget om du kan tolka Detta markerade linjen? Vad får tryckas? Yeah. PUBLIK: Kommer ni att skriva ut brev som motsvarar den karta över den brev värde och heltalsvärde? TALARE 1: Exakt. Jag kommer att skriva brevet motsvarande heltalsvärdet, och vice versa, enligt följande. Ja detta, någon sade tidigare, är bara en platshållare för en röding. Det är fortfarande. Detta är naturligtvis är en platshållare för en int-- inte en ny rad. Och nu märker, min första värde som Jag ansluter för det platshållare är inte bara I. jag säger, inom parentes, röding I, vilket inom parentes röding är berättar kompilatorn, behandlar jag inte som vad det är, vilket är ett nummer. Behandla det som en verklig karaktär. Medan det andra värdet jag ansluta in-- jag-- borde bara vara ett nummer. Så om jag sammanställa denna program-- så detta är att göra ASCII 0, dot slash ASCII 0-- jag bara få denna behändiga lilla diagram som visar mig alla möjliga avbildningar utan att behöva tänka det genom eller räkna ut det på egen hand. Och jag också skriva ut, märker gemener, eftersom några rader senare, jag också skriva ut denna kartläggning också, vilket är bara säger att när du förstår vad som händer under huven, kan du automatiskt konvertera fram och tillbaka. Och faktum är att om någon av er någonsin gjorde detta i grundskolan eller hört talas om någon mythically tar en anteckning och passerar den till sin eller hennes vän i klassen, men du oordning den brev från som A blir B, och B blir C, eller något mer komplicerat än så, ja, hur skulle du gå tillväga genomförandet av denna som barn? Tja, du bara typ av vet A blir B, B blir C men matematiskt, vad var den där ungen gör? Vad gjorde du lägger till varje bokstav? Effektivt, 1. Så när du ändrar A till B, det är ungefär som att byta 65-66, vilket matematiskt innebär bara lägga ett. Och så om du skulle genomföra den lilla vilseledande teknik för lärare i koden, du kan göra just det bara genom tillsats av en enda bokstav tillsammans. Så snart vi är kommer att se hur vi kan dra nytta av det faktiskt genuint rusning och unscramble informationen. Under tiden, vet att vi har börjat att införa ett par andra bibliotek här-- strängen en dag. Och en mycket hjälpsam plats förhoppningsvis hittar du kallas reference.cs50.net, vilket lärarna har sammanställt, så att om du vill slå upp hur strlen verk, du kan börja skriva funktionens namn, klicka strlen där, och sedan en mindre bekväm förklaring kommer att visas. Eller om du vill att tjänstemannen Linux-baserad förklaring, Du kan klicka skönare uppe till höger, och det kommer att presentera samma information, men i mer komplexa termer. Det är en användbar resurs för faktiskt vet vad allt gör. Nästa gång vi kommer att ta en titt på Ovaltine och mer, och presentera oss till en värld av kryptografi. Innan dess får vi se senare i veckan. Och nu, Colton Ogden. Vi ses på onsdag. [MUSIK SPELA] [MUSIK SPELA] TALARE 1: Vad [BLEEP] gör du? TALARE 1: Jag äter min dessert? Hur äter du det? Med dina händer? [MUSIK SPELA]