>> [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?
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.
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]
>> TALARE 1: Vad [BLEEP] gör du?
>> TALARE 1: Jag äter min dessert?
Hur äter du det?
Med dina händer?
>> [MUSIK SPELA]