>> [VIDEOAVSPELNING]
>> -En Triumf matematisk och mekanisk färdighet
är denna stora nya automatiska kalkylator vid Harvard University.
Intrikata problem i matematik sätta genom maskinen i kodad form
på band noggrant lösas på ett minut bråkdel av den tid som krävs
för mänsklig beräkning.
Designad för att påskynda alla former av matematisk och vetenskaplig forskning,
jätten mekaniska hjärnan kommer att arbeta för Förenta staterna marinen fram till krigsslutet.
>> [END SPELA]
>> DAVID J. MALAN: Detta är CS50.
Det förflutna var en magisk plats, men om du har någonsin
undrade vad den enheten är i Harvard Science Center,
det är verkligen en del av den Harvard Mark I, och det är
visas där nu under de senaste många år.
Och vad du ser inbäddade i problem set
en är en titt bakom kulisserna vad den enheten gjorde, och gör,
från professor Harry Lewis, som är i datorvetenskapliga institutionen här.
Så mer om det på bara en bit.
>> Men idag börjar vi övergång från förra veckan till detta,
och vi kommer att föra omnämnande av ett fotografi här
det är faktiskt ganska känd.
Vet någon vad detta här visas på skärmen?
Åtminstone enligt myten.
Yeah.
Publik: Det första viruset.
DAVID J. MALAN: Så det var förment den allra första faktiska fel i en dator.
Nu i verkligheten ordet bugg, för ett fel i ett program,
har varit med oss ​​för vissa tid i den fysiska världen,
och detta var en av de första dokumenterade tillfällen där någon faktiskt
plockade en stor fjäril ur Mark II dator, lägga den i bindemedlet,
och sedan spelade in det som den första kända kryp
att faktiskt funnits fysiskt.
Så därför har angetts som i dagens lore.
Allt från förra vecka är tillgänglig online.
I synnerhet resurser som du kanske inte nödvändigtvis märker, särskilt
Om komma hit personligen.
Så en av undervisnings stipendiater varje år gör en kanonisk uppsättning av anteckningar,
så du behöver inte hålla huvudet nedåt, försöker
att transkribera de flesta någonting som kan hända här i klassen.
Så inser att de så kallade [? Scribd?] Anteckningar
är online, säkerligen bilderna och källkod som vi använder i klassen.
Vi gör fulltext avskrifter finns också.
Så om du vagt minns några sikt och vill slå upp det lite
lättare, inse att alla av detta är sökbart på nätet.
Samt walkthroughs också.
I själva verket, i dag börjar vi titta på ett programmeringsspråk lägre nivå,
snart att bli känd för oss som C, och det är mycket lätt
att sorts vilse efter bara några stunder tid, och sedan sortera av förundran
hur vi faktiskt fick lite mer komplext exempel från den enklaste.
Och så inser vi ska körsbär plocka under klass vissa
av de representativa exemplen, men inse att så mycket mer är också
tillgängliga online så att du kan arbeta genom den i din egen takt,
men du är mest bekväm.
>> Men vi slutade med program som var just detta.
Så jag klickar på den gröna flaggan, och vad gör det här programmet göra?
Säger, hej, värld.
Det gör katten säger hej i sin lilla värld
på det övre vänstra sida av Scratch användargränssnitt.
Men vi började införa några terminologi förra veckan.
Och så, sånt här vi kallas vad?
Vad kan vara en allmän term för detta?
Yeah.
En metod eller ett uttalande.
Visst, det är en åtgärd.
Gör det här.
Och ändå fanns andra former att repa,
Förutom dessa så kallade uttalande, var de också
sånt här, som vi kallade vad?
Yeah.
Så en slinga.
Och i detta fall, den här grejen upprepningar, uppenbarligen, 10 gånger.
Det finns ett evigt block.
Det finns ett par andra.
Och idag ska vi se hur man översätta detta till en mer modern värld,
om du vill, även om det är kommer att visas vid första anblicken
vara mycket mer svårbegripliga.
Men de var verkligen loopar.
Och sedan har vi saker som detta, som hade denna form,
och i huvudsak frågor.
Och vi hänvisade till dessa som vad?
>> PUBLIK: Boolean uttryck.
>> DAVID J. MALAN: Ja.
Boolean uttryck.
Något som är antingen sant eller falskt, ja eller nej, en eller noll,
men du vill visa världen.
Men vi kallade dem Boolean uttryck, och vi ansluter dem
i förhållanden, eller filialer.
Och i en värld av Scratch, allt snyggt
förreglingar i fråga om form, om det är logiskt att göra det,
men du behöver inte stanna vid bara gör en sak villkorligt,
du kan ha en ökända gaffel i vägen
och göra antingen det ena eller det om villkoret är sant eller inte.
Och sedan, som du ser, Om du inte redan har gjort,
Du kan även bo dessa block.
Så Scratch växer för att fylla formerna att du kanske vill infoga i det,
så att du kan faktiskt uttrycka mest någon logik som du kanske vill göra.
>> Nu några ord om tillkännagivandet både här och New Haven.
Så snitt börjar i dag.
Adressen till denna är på kursens webbplats, för dem obekanta.
Sektioner kommer att vara en möjlighet att träffas
i en mycket mer intim miljö än [? Sanders?] Tillåter,
med 10 till 20 klasskamrater med en undervisning Fellow vid olika spår,
och olika steg, om du så önskar.
Faktum Kursen ger olika sektioner
för de mindre bekväm, mer bekväma, och någonstans däremellan,
och den roll som tummen här är det finns ingen formell definition,
men om du är mindre bekväm, du typ av vet det.
Du är lite intrepid om idén om att sätta foten, kanske tillbaka
i klassrummet, eller visar upp till en in mellan avsnitt.
Om du har varit programmering eftersom du var sex år gammal, bekvämare,
kanske för dig.
Och om det är lite av en toss-up, det är precis vad däremellan
är tänkt att vara.
>> Nu, i mellantiden, för en klass denna storlek,
det tar oss ganska lång tid att avsnitt alla, så vi har så kallade,
super sektioner, kommer upp här helgen och i början av nästa vecka,
så ta en titt på kursens hemsida för dem som är naturligtvis stort,
och även filmat för dem som inte kan göra dem.
Och sektioner själva kommer att börja i vecka tre av CS50 noll index.
Problem set 0 är redan på kursens hemsida.
Och inse att du har nio sena dagar den här terminen.
Så detta är en uppgradering från förra år, när vi hade fem sena dagar.
>> Så om du undrar, Vi har nio problemsamlingar.
Du har nio sena dagar, som var och en du kan bara tillbringa en per vecka på.
Det gör i själva verket alla av problemet sätter beror fredag,
men målet är att sätta lite bit av psykologisk press
på dig för att försöka få saker i på torsdag
eftersom ni kommer snart att upptäcka, på gott och ont, mest
allt i programvaruvärlden hamnar tar mycket längre tid än du räknar med.
Så ser det som en sorts möjligheter att hjälpa
själv att rikta torsdag, men åtminstone trösta sig att, ja,
allt beror fredag.
Och om du skickar dem på Torsdag, det är underbart.
Det finns inga bonuspoäng eller extra kredit för att möta denna tidsfrist.
Det är tänkt att vara endast en krycka.
>> Och kontorstid, både här och i New Haven,
personligen, om du vill träffa någon av våra kurser
undervisa stipendiater och CAS för assistans.
>> Okej.
Så nu, låt oss göra det mer verkligt.
Och för ett ögonblick det kommer att starta att få lite mer svårbegriplig, men mycket
snabbt på fredag ​​och Nästa vecka kommer vi att
kunna göra så mycket mer än vi kunde hittills i Scratch.
Så vi introducerade kod sista vecka, om än pictoral.
Det var pusselbitar.
Och vi formalis att det är något som kallas källkod,
men skulle ser ut som?
Tja, såg det lite något som det här.
Och, i själva verket bara att typ av retas där vi kan gå med detta.
Jag kommer att gå vidare och öppnar ett fönster här,
och jag ska bara välja ny fil.
Och jag kommer att spara den här filen som något liknande hello dot c.
Mer om detta val av ord på bara ett ögonblick.
Och det är hur någon kanske gå om att skriva ett program.
Inkludera standard I / O punkt h, int main tomrum, och öppna sedan klammerparentes, nära
klammerparentes, printf hej kommatecken världen, bakstreck n, semikolon, Spara gjort.
OK.
Jag har skrivit min första program, men det kommer
att vara oerhört underwhelmed eftersom när jag faktiskt
köra programmet, naturligtvis, genom att först skrift gör hej,
och sedan dot slash hej, och vi ska gå igenom detta mer i detalj
i ett ögonblick, det är allt den gör.
Inte pop öppna alla fönster.
Det gör ingenting särskilt snygga.
Allt det gör är vad jag sa det till göra, men hur ska vi få till det?
Och hur ska vi bygga vidare på det?
Nåväl, låt oss presentera några olika koncept här.
>> Så en, vi är på väg att starta med hjälp av ett program som kallas en kompilator.
En kompilator finns för Mac OS, Windows, Linux, valfritt antal operativsystem,
och vi kommer snart introducera dig till miljö som vi kommer att använda,
men en kompilator är bara en allmän term för en mjukvara
som tar källkoden och producerar objektkoden från den.
Med andra ord, om du har som indata din källa
kod, något som vad jag just skrev, det i slutändan producerar objektkod.
Och objektkoden är egentligen bara ett fint sätt att säga det utgångar
nollor och en s.
Med andra ord, källa kod, även om det är
kommer att se lite svårbegripliga, och lite mindre vänlig
än Scratch vid första anblicken, Det är åtminstone något
att vi människor kan förstå.
Det slags ser ut och låter som Engelska trots att det är mycket kortfattad.
Medan programmering i nollor och ens, som våra föregångare hade att göra,
för några år sedan, var inte en särskilt kul utmaning.
Och ändå, är vad detta dator förstår fortfarande.
Så kompilator får oss från källkod objektkoden.
Det är som att öppna en fil med kompilator, och när du sparar den,
du får dessa nollor och ettor.
Så vi får se hur man gör som på bara ett ögonblick.
>> Men låt oss nu försöka ge en brygga mellan förra veckan och detta,
så att även när vi får hänga upp på saker som klammerparenteser,
och semikolon, och parenteser och alla dessa intellektuellt intressant
aspekter av programmering, som mycket förståe resa upp människor tidigt,
inser att alla de idéer idag, är samma som förra.
Så sist såg vi det här exemplet här, Hello World-programmet.
Tja, med start idag, om vi vill att genomföra samma program,
det kommer att se en lite ungefär så här.
Och vi ska förklara snart vad int, och viktigaste, och tom, och allt det
är, men åtminstone jag ser här redan välbekanta Hello World.
>> Samtidigt, saker som funktion, säga hej,
är mycket enkelt kommer att bli en mycket enkel förklaring som denna.
Printf hallå världen, med vissa citerar, med en backslash,
med ett semikolon, men mer på att komma.
Loopar, under tiden, detta är en loop som, naturligtvis hälsar världen för alltid,
och detta kommer att se en lite weirder än i den sista,
men om jag säger något liknande, medan sant, jag
kan sedan skriva ut Hello world igen och igen och igen och igen.
Och då du kan snäll av att börja sluta här,
denna konvention för att använda klammerparenteserna är snäll
som att omfamna indragen kodrad där.
Printf kodrad likt den gula pusselbiten upp ovan.
Så vi kommer inte att säga för evigt, vi kommer att säga när sant,
men vi får se varför det är bara lite.
>> Samtidigt, om vi har en loop så här, där du upprepar något ändligt
antal gånger, här också är det kommer att ta lite tid att vänja
, men det kommer att säga int Jag blir noll, i mindre än 10, i ++,
och sedan printf igen.
Men det kommer att bli mönster.
Och för dem av er bekant med AP datavetenskap, eller Java,
eller valfritt antal andra språk, nästan alla dessa konstruktioner
hittills bör se mestadels bekant.
>> Så variabel.
Så här är ett enkelt Scratch utdrag som sätter en variabel kallad räknare till noll,
och sedan för evigt säger disken och då den ändrar räknaren med ett.
Så det börjar med noll, och sedan en, två, tre.
Nå, hur skulle vi införa denna i denna nya språket lite på samma sätt?
Int räknaren är lika noll medan true, vilket
är samma idé från tidigare att göra något för evigt,
och jag ska bara printf.
Och nu det blir lite konstigt, procent i, men mer på att komma,
men dessa idéer är exakt desamma.
Vi har just nu måste följa syntax att datorn är
kommer att kräva av oss.
>> Booleskt uttryck, något liknande sx mindre än y, eller x är mindre än y,
och y mindre än z.
Det kommer att se en liten sak så här, med parenteser bara
som i matematik för bra åtgärd att bara se till att ordningen på verksamheten
är som vi tänker.
Och nu, villkor.
Så om x är mindre än y, säg x är mindre än Y, annars om x är större än y,
säga x är större än y, annars logiskt, måste x vara lika med y.
Så du kan genomföra något liknande i Scratch,
eller du kanske genomföra det i denna syntax.
Och återigen, klammerparenteserna är typ av ge oss samma form som pusslet
bitar, men syntaxen, nu är kanske börjar följa vissa mönster.
>> Så, vad gör detta ger oss här?
Så vi är tillbaka då på våran program.
Låt oss faktiskt, nu, göra något med det.
Så i detta mycket först linje vi ser skarp omfatta
standard-I / O, pricka h och sedan några konstiga vinkel
parentes under det. int main tomrum, och sedan printf hallå världen.
Så bara ta ett steg.
Någon som aldrig programmeras före, åtminstone förklara en av dessa linjer.
Använda kanske några av jargong av förra veckan.
Vad är printf, till exempel?
Yeah.
>> PUBLIK: [OHÖRBAR]
>> DAVID J. MALAN: Ja.
Det är en funktion eller ett uttalande, från förra veckans terminologi.
Och det är en åtgärd som gör något.
Nu denna funktion, eller detta uttalande, gör
det verkar ta någon form av ingång?
Och på vilket sätt gör det verkar ta ingång, om så?
Input, vad menar jag med det?
Yeah.
>> PUBLIK: [OHÖRBAR]
DAVID J. MALAN: Ja.
Så Skrapa ut några pusselbitar där du kan parametrize det.
Du kan tala om upprepning blockera hur många gånger att upprepa,
så det var en ingång sorterar, och precis som Scratch
hade en liten vit platshållare för det nummer som du vill skriva in,
så gör vi använder i detta text världen parentes
att ge oss att cirkulär form i vilken vi kan koppla vår insats.
När allt kommer omkring, tiotals år sedan när detta språk, som kallas C,
uppfanns ingen en förväntat det är en av oss,
Dessa några år senare, skulle vi vill ha en funktion som säger hej.
Höger?
Det skulle vara trevligt om det fanns en pusselbit, eller ett nyckelord,
som kallas hello, att bokstavligen bara säger hej.
Men vi behöver inte det.
Vi kan ha något mycket lägre nivå, som en generisk print
kommando, som tar indata, och utskrifter vad vi vill.
Så märker nu mönstret som kommer att börja dyka upp.
Öppna Paren är nära Paren tydligen omfamna ingången,
och då ser jag dubbel citationstecken i båda ändarna.
Det finns fortfarande konstig omvänt snedstreck n, men förhoppningsvis nu
kan börja att visualisera åtminstone att printf tar i någon form av ingång.
Inte så användarvänligt som Skrapa, men det är bara
som att ha inkopplad visst värde där.
>> Okej, nu ska vi faktiskt göra något med detta.
Så en del av er kanske vet från har handlat klassen innan,
chattade med vänner, som under många år
vi använde något som kallas den CS50 apparaten.
Detta var en term som beskriver en teknik kallas den virtuella maskinen, som
är en mjukvara som din föregångare skulle hämta ut
kursens hemsida gratis.
De skulle också ladda ner en gratis bit programvara som kallas en hypervisor,
något som kallas som VMware, eller VirtualBox, eller valfritt antal
andra verktyg, och på sin Mac eller PC eller vad dator de hade förra året
och i år tidigare, de skulle dubbelklicka på en ikon
att köra den här programvaran kallas hypervisor.
Och sedan inne i programmet de skulle öppna CS50 apparaten.
Och effekten var att om en föregångare till dig
kördes Mac OS eller Windows, han eller hon sedan
Därefter hade ett nytt fönster på deras skärm kör CS50 miljö.
Så en virtuell maskin kan du köra en operativsystem insidan av en annan,
och det är precis vad vi gjorde.
Under större delen av kursen vi använda ett operativsystem kallat
Linux, speciellt Ubuntu Linux, och detta
är ett mycket trevligt sätt i år tidigare av att se till att alla i kursen
bara haft samma miljö.
Och du kan använda någon form av dator som du verkligen vill.
Bland de avigsidor, men, var det var två gigabyte
att ladda ned den här saken.
Det fungerade inte nödvändigtvis fungerar super bra på människor vars datorer som kanske bara
hade en spelning eller så RAM, eller inte alltför många gigahertz av processorhastighet,
och så i år, för detta och andra skäl,
har vi varit övergår till denna miljö.
Den så kallade CS50 IDE, som är baserad på öppen källkod,
och en plattform som stöds att ett företag som heter Cloud9
stöd i Europa, att tillåter oss att ha i huvudsak
exakt samma miljö som i år tidigare, men i den så kallade molnet.
>> Så vad är molnet?
Du har antagligen klickat dess ikon på din Mac eller PC.
Vad är molnet?
Yeah?
Lite högre.
Yeah.
Det är bara en massa datorer i andra områden som lagra data och köra
programvara och liknande.
Så det är egentligen bara till ordet de jure att beskriva [? uthyrningsbar?]
datorer som bor på annat håll.
Som du själv, inte nödvändigtvis äger.
Så när dina data, eller din program, är i molnet,
det betyder bara att det är på någon annans datorer på andra håll,
och inte, troligen på din fysiska bärbara eller stationära.
Och så det är vad CS50 IDE nu är.
>> Hädanefter ska du gå till en viss URL som kommer att introducera dig
att på problemet set 1, senare vecka, som då, när du loggar in,
ge dig den här miljön.
Och mycket liknande Scratch hade en några olika paneler involverade,
så gör CS50 IDE har just detta.
På det övre vänstra sidan här, du är kommer att se ett bekant filhanterare.
Så någon av de filer som du tas i denna miljö
bara kommer att listas där.
Filer och mappar.
På det övre högra hörnet här, du kommer att se en plats
där du kan faktiskt skriva din kod.
Inledningsvis i C, senare i term i PHP och JavaScript,
och, kanske för slutlig projekt, Ruby eller Java eller Python
eller valfritt antal språk är stöds i denna miljö.
Det är inte alls knutna att CS50 specifikt.
>> Och sedan i nedre hörnet här, särskilt för dem bekvämare,
du har något kallas ett terminalfönster.
Och detta terminalfönster tillåter du köra något kommando som du
vill i detta moln miljö.
Det gör att du kan installera någon extra programvara
som du vill att du har så kallade rot, eller administratörsbehörighet.
Så med andra ord, trots att detta slutligen värd i molnet,
och även om vi har förenklat det i viss mån
som standard, bokstavligen införa, tack vare Dan Armendariz, och Dino,
och Dan Bradley på CS50 team över förbi många månader, en mindre bekväm
läge som döljer en hel del av inledningsvis förvirrande distraktioner.
Allt det finns till representerar ett typiskt datorsystem
som du kan använda i den verkliga världen.
>> Så vad betyder då allt detta, och vad kan vi faktiskt göra med det?
Låt oss faktiskt ta en titt på ett program.
Så jag kommer att öppna upp Själva miljön här,
vilket är bara vår Chrome webbläsare, vilket kan vara Firefox,
kan vara Internet Explorer, eller någon annan webbläsare samt.
Det är fullt screenas här för tillfället.
Och jag vill faktiskt retas isär vad detta program var.
Så låt oss ta en titt, genom att zooma in upp top, på vad jag gjorde och hur jag kom hit.
Så här är de exakta Samma rader kod.
Så detta är ett uttalande, som ni nämnde tidigare.
Funktionen som säger hej.
Klammerparenteserna, på line fyra och linjen sex,
förmodligen slags omsluta den linjen att associera det
med kärnan i mitt program.
Så ja, det här sökordet på, det är där uppe på rad tre,
du kan tänka på det som motsvarande av att när grön flagg klickade,
blockera i Scratch.
Så det är allt vi har här, är när gröna flaggan klickade, skriva ut, eller säga,
Hej världen.
>> Men låt oss ta en gissning, nu, vad denna första, mer svårbegripliga linje är.
Sharp innefattar, öppen vinklad fäste, standard I / O punkt h,
stäng vinklad konsol.
Vad är det kanske gör, speciellt om du har programmerat
tidigare i något annat språk.
Yeah?
>> PUBLIK: [OHÖRBAR]
DAVID J. MALAN: Ja.
Exakt.
Så det här ger dig tillgång till en bibliotek, så att säga, av funktioner.
Och ett bibliotek med funktioner är funktioner som någon annan
skrev antingen nyligen eller för länge sedan, så att du
behöver inte uppfinna hjulet på nytt.
Till exempel, gör vi inte måste veta, 2015,
hur man skriver kod som sätter ett tecken på min skärm.
Någon annan har räknat att ut med printf funktionen
så att jag kan sortera abstrakt bort från det, eller skikt
ovanpå hans eller hennes kod, och nu bara ta
för givet att alla program jag skriver kan skriva ut något till skärmen.
Så denna första raden där i steg ett inkluderar den så kallade huvudfil
för standardbiblioteket.
Så ser det språk som vi nu arbetar
hade en standard bibliotek med massor av funktioner.
Printf är en av dem, och den första kodrad
innebär ge mig tillgång till dessa funktioner, så att jag
behöver inte uppfinna det hjulet.
>> Nu går vi till botten fönster och göra exakt vad jag gjorde innan.
För en stund sedan, när jag var vinande genom koden,
skriva ut för första gången, Jag mycket snabbt skrivit, gör hej.
Vad handlade det om du skulle gissa?
Vad gjorde jag?
Yeah?
Det är ingen fara.
Det är ok.
Yeah.
PUBLIK: Bygg den.
DAVID J. MALAN: Ja.
Det var bara att kompilera det.
Höger?
Även om detta är helt obekant till dig, det är ganska engelska som.
Det är verkligen inte nollor och sådana, så jag fortfarande
måste köra det genom att så kallade program, en kompilator, är att gå
att ta det som indata och producerar utdata.
Och åtminstone för tillfället, i denna Linux-miljö,
men detta är inte en förutsättning, detta är bara där vi ska börja,
du vanligtvis interagerar med datorsystem som denna
genom en så kallad kommandoraden.
Så med en blinkande snabb och tangentbordet,
och inte så mycket musen och inte så mycket fönster och ikoner och menyer,
snarare allt är text.
Och även om det känns, först blick, kanske, som ett steg bakåt,
det är faktiskt en mycket mer kraftfullt och uttrycksfullt sätt
att styra en dator särskilt som du,
själv, blivit mer bekväma från mindre.
Det kommer att låta dig göra en hel del fler saker än vad Microsoft
eller Apple gör att du kan göra med deras grafiska operativsystem.
>> Så när jag slog in, nu, ingenting händer den här gången
eftersom tydligen program hej är aktuell.
Och vad var kommandot Jag sprang efter det?
Dot snedstreck hej och hej världen.
Nu ska vi ta ett steg tillbaka för bara ett ögonblick.
Det visar sig att göra hej är bara en förenklat sätt att sammanställa ett program.
Låt oss bara införa en bit av jargong,
men sedan flytta bort från det, eftersom det inte
så intressant för dagens ändamål.
Kompilatorn vi ska börja använda kallas Clang, för C-språk.
Och detta är ett program som körs just som vi gjorde på kommandoraden där.
Och så om jag vill sammanställa ett program som jag
har skrivit i en fil som heter hello dot c, jag bokstavligen bara skriva klang hello c
ange.
>> Det roliga är, av historiska skäl,
om jag inte anger Programmets namn
att jag vill skriva ut, om jag inte ange ett filnamn för de nollor
och sådana, en mycket konstig konvention antogs år sedan
där det kändes typ av en bra svar på den tiden,
bra låt oss bara godtyckligt ringa första program vi sammanställa en prick ut.
A kommer först i alfabetet.
Ut, är det utgång.
Så vi kommer att kalla programmet som standard en punkt ut.
Och det är bra, för om jag vill köra programmet i denna textbaserad
miljö, jag skriver bara dot slash en prick ut anger.
Och det skulle köras precis som tidigare.
Så låt oss se att riktigt snabbt.
>> Så om jag går tillbaka till min källkod i CS50 IDE,
och jag istället göra detta, klang hello barnsäng c anger, märka ingenting verkar hända,
men nästan alltid i denna Linux-miljö,
när inget dåligt verkar hända, att betyder något bra faktiskt hände.
Om du inte ser ett fel meddelande, är allt förmodligen väl.
Och faktiskt, om jag nu gör dot slash en punkt out in, jag har kört min samma program.
Jag har fortfarande hello programmet från tidigare eftersom faktiskt, det är
kommer att bli så mycket trevligare bara skriver att i stället för att komma ihåg
dessa besvärjelsear av kommandon, men låt oss se hur vi
kan förbättra detta, ändå.
>> Så detta är kommandot att kompilera koden.
Detta är kommandot för att köra den kompilerade koden därefter.
Hur kan jag ange ett filnamn?
Bra låt oss bara införa ytterligare en bit av jargong.
När du är i detta textbaserad miljö,
du kommer att vilja specificera saker som kallas kommandoradsargument.
Vilket är bara ett fint sätt att säga, andra ord på frågan som
justera beteendet hos oavsett program du kör.
Så specifikt program jag kör, genom att skriva namnet klang,
är program som heter Clang.
Så detta är eller den gamla skolan motsvarande dubbelklicka
Microsoft Word eller ikon några programmets.
Jag stället bara skriva sitt namn, men i denna version av kommandot,
Jag har sedan streck o utrymme hello utrymme hello dot c.
Så även om du har aldrig spelat i den här världen innan,
bara ta en gissning vad inte streck o hej göra?
Eller vad säger den klang att göra?
Yeah.
>> PUBLIK: [OHÖRBAR]
DAVID J. MALAN: Ja.
Det sätter bara filens utdata till vara hej i stället för den sillier en punkt ut.
Och, ja, låt oss prova det här.
Så om jag nu gör, först låt oss göra detta, r m hej.
Det är bort.
Och det kommer att säga ta bort vanlig fil hej, som
är onödigt svårbegriplig, men det bara medel göra du vill ta bort filen,
och jag skriver y för ja.
Och lägg märke till, om du blick på toppen vänster, gjorde det försvinna från uppe.
Låt mig nu göra klang streck o, och Jag kommer att gå vidare och göra hej,
med stora bokstäver, hej dot c.
Nu, om jag gör dot slash Hej, vad skulle du förväntar dig?
>> Kanske är det stora och små bokstäver.
Kanske är det inte.
Låt oss se.
Ingen sådan fil eller katalog.
Och vi kan slags fuska genom att bara titta på upp till vänster.
Vad gjorde jag självklart spara programmet som?
Alla mössor hej.
Så ja, det är att gå att göra en skillnad.
Så nu hallå världen är tillbaka.
Nu är alla fina och bra, och alla mycket mind-bedövande,
till slags fastna i dessa detaljer, men att förstå dem
Det är bra.
>> Typing in dessa alltmer långa besvärjelsear
kommer inte att vara särskilt roligt, så människor i världen
uppfann ett annat program, för några år sedan, som kallas
gör, att helt enkelt låter dig skriva make,
namnet på programmet du vill göra, och göra
är smart att den kommer att se ut den aktuella mappen, aka katalog,
och om du har en fil kallas hello dot c,
det är filen det kommer att sammanställa för dig i ett program som heter hello.
Så det är ett mycket enklare sätt att gör det mer kryptiska kommandon
att vi gjorde tidigare.
Och vi har förkonfigurerade CS50 IDE att veta
att den bör göra streck O och ett antal andra flaggor, eller kommandoradsargumenten,
att vi får se snart.
>> Men låt oss nu faktiskt göra något mer intressant.
Bara skriva ut hallå världen alla tiden är inte så övertygande.
Så låt mig gå vidare och förändring detta program och säga, hej David.
Nu ska jag gå här nere.
Jag kommer att gå vidare och göra göra hej.
Och återigen nu du ser gör visar dig längre
sekvens av kommandon som det är göra eftersom vi har förkonfigurerade
det på det sättet, men vi behöver inte oroa dig för nu
vad det gör annat än det är sammanställa dot slash hej, hallå världen.
Vad är fel?
Yeah.
>> PUBLIK: [OHÖRBAR]
>> DAVID J. MALAN: Ja.
Så, noobie misstag.
Jag märker att detta är super subtila, men asterisken här, på fliken,
betyder bara att du inte har sparat det, och webbläsare och andra program
gör det ibland.
Så kontroll s eller kommandot s ska spara det.
Låt mig nu gå vidare och kör programmet.
Kompileras.
Rätt, så det är en flerstegsprocess.
Ingen som är särskilt komplicerad, men helst ändra vi filen
vi behöver ändra den resulterande ettor och nollor, och dot slash hej.
Wow.
Så det här är mycket underwhelming att vi bara skrivas ut redan.
Låt oss göra saker lite mer dynamiskt nu.
>> Jo det visar sig, som gillar Scratch, C stöder variabler.
Och det visar sig om du vill att ha en variabel som lagrar,
inte ett nummer som vi typiskt gjorde med Scratch,
men som ett ord, eller en fras eller ett namn, du
kan ange en variabel att vara av typen sträng.
Så vi får se mer av dessa på bara ett ögonblick,
men det visar sig att C, och en hel del språk som det,
har mycket specifika typer av variabler.
Det är inte precis som algebra, där du får en x, y och z
och de är bara alltid siffror, i ett programmeringsspråk
Du kan lagra nummer, du kan lagra enskilda tecken,
du kan lagra hela ord, du kan lagra hela bilder, hela ljudfiler,
och liknande.
Så vi måste ange vad vilken typ av vår variabel är.
Och enligt praxis ska jag ringa min variabla s bara för att det är kortfattad,
och s står för sträng.
>> Och sedan ska jag förvara insidan av denna variabel,
precis som med Scratch när jag använder den inställda blocket,
Jag kommer att använda tilldelningsoperatorn i C,
vilket fint nog är lika underteckna, men likhetstecknet gör detta.
Det rör sig något från höger in den vänstra sidan av uttrycket.
Så vad jag har gjort, att vara tydlig i line fem är jag har deklarerat en variabel.
Jag har sagt datorn, ge mig minne för en variabel, kalla det är,
och veta i förväg att jag kommer att sätta en sträng i den.
Och en sträng är bara en sekvens av tecken.
Det är ett ord eller en fras, eller punkt, men det är en sekvens av tecken.
Det är inte tal.
Vad sträng jag kommer att vara ibruktagande den variabeln?
Tja, uppenbarligen citera unquote, "Hannah".
Nu märker det mönster som framväxande.
Det finns en vänster uttryck.
Det finns en höger uttryck, åtskilda av likhetstecknet.
Och bara ta en gissning, om obekant ändå,
med vad semikolon gör.
Vad är det förmodligen gör för oss?
Yeah?
>> PUBLIK: [OHÖRBAR]
>> DAVID J. MALAN: Ja.
Det är bara att avsluta linjen.
Höger?
Datorerna vill vara rakt på sak berättade, bokstavligen, vad de ska göra.
Liksom jordnötssmör och gelé smörgås exempel,
Om du inte anger exakt vad du tänker,
det kan lämnas till dom eller fel.
Semikolon innebär det är det för detta kommando.
Det är super exakt, och det är en mycket enkel sak att lämna ut.
Så nu detta program inte verkar beter sig annorlunda förrän jag
göra den mer dynamisk.
Så i stället för hårt kunde mitt eget namn, låt mig uttrycka en platshållare värde.
Och det visar sig att, och jag vet att detta från att ha läst dokumentationen,
och använde funktion för år, att printf var avsedd att vara dynamisk.
Du behöver inte veta i förväg vilka ord du vill sätta i det.
Du kan i stället ha en platshållare, som procent s, som
kommer att tala om dator, lägg en sträng här.
>> Vilken sträng vill vi sätta dit?
Will visar sig att mellan dessa parentes, som minns, avgränsa
ingången till en funktion, om du har kommaseparerad lista över saker här,
vi faktiskt passera i multipel insignaler till en funktion.
Så precis som några Scratch block, kanske du inte
har spelat med dem för dina projekt ännu eller överhuvudtaget,
vissa Scratch block har två ingångar.
Två vita rutor du kan skriva siffror eller ord i.
Så för att inte C har funktioner som printf som kan ta två ingångar.
Och återigen, denna kommatecken separerar dem.
Så i engelska, igen även om du aldrig programmeras före,
av den logiken printf är en funktion, tar två ingångar, varav en
är en platshållare, vad skulle du hoppas printf kommer att göra med denna ingång?
Det kommer att säga hej Hannah, förhoppningsvis.
Så för att göra detta måste vi spara det.
Jag kommer att zooma ut.
Jag kommer att gå tillbaka hit och säga, gör hej ange.
Oh.
Något är fel, och faktiskt Detta är helt överväldigande.
Jag har sex rader kod och liknande 12 linjer av fel.
Så ser fram emot detta.
Så vad är det som händer här?
Så det bästa tumregel här, speciellt när du börjar ut,
inte bli distraherad av grejer på botten.
Faktum är att jag mycket medvetet bara rullas upp
eftersom det ofta är en dator inte så ljusa på en enhet.
Det kommer att bli förvirrad.
Om det ser en sak som Det förstår inte,
det kan förväxla andra kodrader eftersom felaktiga,
trots att de är helt bra.
Så att du alltid vill arbeta uppifrån och ned genom felen.
Och visserligen är supersvårbegripliga för tillfället.
>> Fel användning av odeklarerat identifierarsträng.
Har jag menar standard i?
Nej, jag menade sträng.
Och det pekar på, kanske är det ett stavfel.
Ungefär som, stavningskontroll i en mycket nördigt sätt, men orsaken här,
och du vet detta bara genom praktiken är
att det visar sig att sträng existerar inte i C. I själva verket, C
är en särskilt gamla språk, och det är mycket låg nivå,
och det gör inte en hel del funktioner att du kanske har vuxit upp
med om du har, i själva verket, programmerad i Java, som några av er har,
men du kan lära den nya saker.
Och faktiskt, har vi gjort detta CS50, även om i slutet av terminen,
alla dessa stödhjul ska ha tagits bort,
vad vi gör i dessa första veckorna
initialt är att vi har också du inkluderar CS50 dot h.
Vilket är en header-fil.
Mer om det i framtiden.
>> Det är en fil som innehåller funktioner att vi har skrivit för dig.
Och bland dessa funktioner är funktioner för att få input
från användaren, som strängar, och siffror och reella tal, och mycket mer.
Men den har också ett par genvägar.
Den definierar en Boolean som en datatyp.
C har inte sant eller falskt.
Men vi kan ge det begreppet sant eller falskt genom detta bibliotek.
Och det inte heller har en sträng inbyggd tills vi ta med den raden.
Så här kodraden berättar kompilatorn, hej, Clang, titta
i den här filen för en hel gäng kod som CS50
har skrivit så att alla som använder den här filen
kan ta för givet funktioner som de har lagt till.
>> Så nu vill jag gå vidare och rensa skärmen,
och om nyfiken Jag säger bara kontroll l varje gång för att rensa skärmen,
eller du kan skriva klart.
Jag kommer bara att gå vidare nu och typ gör hej, och allt är bra.
Fortfarande en hemlig utgång, men det är inte ett felaktigt meddelande.
Nu om jag gör dot snedstreck Hej, och som en åt sidan, är dot slash obekant för de flesta.
Det betyder bara, punktorgan den aktuella katalogen.
Så om du någonsin använt DOS eller Linux eller Unix
du kanske har gjort något som cd dot dot, där
dot dot betyder gå bakåt i tid, eller gå bakåt eller högre upp
i din katalog.
Dot betyder bara titta i den aktuella katalogen.
Jag vill hej, vilket är rätt här.
Och faktiskt, nu hälsar Hannah.
Och om jag ändrar det igen Maria, kompilera
det skulle göra hej, pricka snedstreck hej, håller programmet förändras.
>> Men detta är fortfarande en ganska dumt program.
Om jag vill skicka det här programmet, eller ge den till en vän,
eller ge den till Maria eller Hannah för den delen, det är bra.
Jag kan skräddarsy den för dem båda, men det kommer aldrig att vara dynamisk.
De kan inte ändra det när det är sammanställt ner i dessa nollor och ettor.
Så vad vi gjorde något smartare?
Tänk om, i stället för hårdkodning i programmet denna personens namn,
vad händer om vi får bara strängen på begäran?
>> Så med andra ord, låt mig göra det här.
Jag kommer att kompilera programmet.
Och låt mig zooma in längst ner nu.
Gör hej punkt snedstreck hej.
Nu ingenting händer.
Kan vi få en snabb volontär att få något att hända?
Kom upp.
Vad heter du?
>> PANCHO: Pancho.
>> David J. MALAN: Pacho?
Kom upp.
När du får upp här, är detta kommer att bli mycket underwhelming,
men det är mer intressant än mig att skriva det.
Om du vill gå vidare och skriva ditt namn, jag gjorde detta program just för dig.
Skriv bara ditt namn.
Enter.
Underbart.
Okej, tack så mycket.
>> PANCHO: Tack så mycket.
>> David J. MALAN: OK.
>> [Applåder]
>> Det var mycket vänlig.
Här får du.
Vad gjorde vi?
Så vi slutligen, åtminstone, gjorde detta program dynamisk.
Nu är det fortfarande säkert avsiktligt underwhelming,
men vi har äntligen möjlighet nu att skriva kod i förväg, mycket
som författarna printf, och sedan dynamiskt
att anpassa sin beroende på insignalen är vi handed, antingen av programmeraren,
eller av det mänskliga som är faktiskt interagerar med programmet.
Så låt oss faktiskt nu försöka att göra några andra konstruktioner
och se om vi inte kan göra programmen sig mer sofistikerade.
Så låt oss gå vidare och istället för skriver detta en från grunden,
Jag kommer att gå in i dagens källkod, och allt detta
finns på kursens webbplats, och du kan dra och släppa den
i din egen miljö komma fredag ​​gång problemet
set 1 ger dig instruktioner, eller du kan
gör det på kommandoraden som bra, men mer att komma in p set 1.
>> Låt oss se vad som finns i det här programmet här kallas, adderaren punkt c.
Nu har jag redan kommenterat det, men vad är nytt?
Vid första anblicken, vilken linje kod är helt nytt?
Förmodligen inte i grunden obekant nu.
>> PUBLIK: [OHÖRBAR]
DAVID J. MALAN: Ja, så int x lika få n.
Vi har aldrig sett något av detta tidigare, men int är förmodligen
symbolen för vilken typ av variabel, [? ifrån?] ett heltal.
Så int för heltal.
Det är bara att vara mer kortfattad. x är bara godtyckligt.
X och y och z är fortfarande ganska rimligt för siffror,
men generellt vi kommer att använda ord en gång våra program får mer komplex.
Få int, naturligtvis, likt få sträng,
är förmodligen kommer att få en int från användaren,
och sedan ska vi göra samma sak med y.
Och tydligen, även om det sista raden, 24, ser mer komplex,
det kommer att säga summan av detta och det är det annan sak.
>> Och tillkännagivande procent i förmodligen betecknar vad?
Vilken roll spelar procent Jag tydligen tjäna?
Det är bara platshållare.
Höger?
Procent s var för sträng, procent i är för heltal.
Det kommer att bli procent f för flyttalsvärde, vilket
är bara ett nummer med ett decimalkomma.
Med andra ord, ett reellt tal.
Så låt oss faktiskt sammanställa denna programmera riktigt snabbt och gör huggorm.
Hoppsan.
Bra tillfälle.
Så märker här, hela tiden mitt användarnamn namn för detta konto jharvard.
Jag är i CS50 IDE, aka IDE50.
Och nu i blått här är ett omnämnande, men från omgivningen, där jag är.
Och faktiskt, om jag zooma upp till toppen Här märker att jag har en IDE50
och jag ser detta ord, om du typ av vända huvudet åt sidan, arbetsytan.
I ett nötskal, det faktum att Jag ser tilde snedstreck arbetsyta
betyder att i denna text baserade kommando miljö,
Jag är i text motsvarande Denna grafiska mapp upp här.
Så när jag gör dot slash huggorm, det säger ingen regel
att göra mål huggorm stopp.
Jag vet inte vad det betyder, men det är dåligt av någon anledning.
Ingen sådan fil eller katalog är ännu mer tydlig.
Var är det då?
Baserat på var jag klickade att öppna filen tidigare.
Var kan det vara?
>> Det är förmodligen i källan en vikt, för onsdagen
och jag kan se det, ja, om jag öppnar det upp.
Det finns huggorm dot c, men i denna text-baserad miljö,
igen, jag måste vara super explicit.
Om jag vill ändra kataloger i källa en onsdag, jag måste skriva,
cd utrymme källan en Onsdag ange och nu
mina snabba förändringar ge mig en visuell kö som
Jag är verkligen någon annanstans i min omgivning,
men nu kan jag gör huggorm, verkar det att fungera,
dot slash huggorm, ge mig ett heltal.
En.
Två.
Summan av ett och två är tre.
Men om jag inte samarbetar, låt oss se vad får int gör.
Ge mig ett heltal.
Nej.
Försök.
OK.
Fine.
50.
Okej.
Så det äntligen samverkar.
Och det är en del av funktionalitet som dessa funktioner
kan ha byggt åt dig.
>> Så inne genomförandet av får int, vad programmering
konstruera från förra veckan är förmodligen i där för att tvinga detta beteende av retry,
Försök igen, försök igen?
Ja, det är nog något slags slinga.
Det kommer att se syntaktiskt skiljer sig från Scratch s block,
men det är verkligen vad som finns inuti filen.
Och i ett par veckor vi ska faktiskt titta på CS50 biblioteket
om vad som finns inuti, men det finns en loop om införande av just detta.
>> Låt oss spela en dum liten spel här med den här filen.
Condition Zero dot c.
Vi ska bara allmänt börja räkna på noll.
Och jag håller rulla förbi några av de saker på toppen.
I blått här, avgränsade med alla av dessa stjärnor och snedstreck,
de av er som programmerar innan, vad är det?
Varför håller vi hoppa över det?
Va?
>> PUBLIK: Det är en kommentar.
>> DAVID J. MALAN: Ja.
Det är bara en kommentar.
Detta är en kommentar till människor att läsa, som i vårt fall,
berättar vad namnet på filen är, som skrev det, och vad den gör,
så att du inte har att läsa igenom koden
att veta vad den här filen handlar om.
Det är bara en beskrivning, men funktionellt är det irrelevant.
Och jag kan även ta bort den från min fil och det har ingen inverkan.
Saftiga linjer är dessa första två här, nu.
int main void motsvarar av vår när grön flagg klickade,
så vi kommer att lämna det vara för i dag, och vi kommer att komma tillbaka,
slutligen, om vad int och ogiltig, men nu,
märke till vad jag har gjort Även här kan du också,
Om du har en in-line kommentera, om du har
a trodde du vill dela om en viss kodrad,
konvent i C är att göra snedstreck snedstreck, och sedan ett par kortfattade ord,
inte en hel mening, i allmänhet inte ett stycke,
som bara förklarar för dig eller din TF, eller andra läsare eller kollegor,
vad din kod gör.
Så i stället för att behöva titta på detta och sluta från ledningarna
nio och 10, vad är Detta gör, i linje åtta
Jag bara ge en kommentar till uppmana användaren att ett heltal,
då jag inte behöver tänka för hårt om vilka linjer nio och tio är.
Jag vet bara att det är vad kollektivt de gör.
>> Hur?
Tja, här är uppmaningen.
Här är det få av int.
Och baserat på tidigare beteende, verkar det som få int
är smart nog att se till att människan samarbetar och ger den
ett heltal.
Men nu ser vi redan.
Och detta påminner om Scratch.
Jag hävdar att jag är analysera användarens input,
men något felaktigt.
Och denna till synes i C är hur vi uttrycker en om annat, en filial,
ett vägskäl, men jag säger något felaktigt.
Vad är fel i det här programmet?
Om ytterligare tillbaka?
Yeah.
>> PUBLIK: [OHÖRBAR] noll.
>> DAVID J. MALAN: Ja.
Så om jag skriver i noll, låt oss betrakta just detta fall, eller hörn fall
om ni så vill.
Så om jag skriver på noll, vilket i block kommer att uppenbarligen ta tag i det?
If eller annat?
Else, och det kommer att säga, du plockat ett negativt tal.
Och faktiskt är noll inte tänkt att vara positivt eller negativt,
och så det skulle vara felaktigt.
Det skulle vara en bugg.
Så hur kan vi fixa det här?
Någon som aldrig har programmerat förut?
Vill du--
>> PUBLIK: [OHÖRBAR]
>> DAVID J. MALAN: Dra tillbaka?
>> PUBLIK: [OHÖRBAR]
>> DAVID J. MALAN: Åh, har du?
Någon som aldrig har programmerat förut.
Vill du prova på detta, i röd tröja?
Kom upp.
Oh yeah, kom igen, om du inte har något emot.
Så aldrig har programmerat innan, vad heter du?
LAUREN: Lauren.
DAVID J. MALAN: Lauren, okej.
Så fixa det här felet för oss.
Du har inte sett C, förmodligen, och förmodligen inget annat språk.
Så fixa det här programmet för oss.
Trevligt att träffa dig.
Ingen press.
LAUREN: Ja.
>> DAVID J. MALAN: Men återigen, om detta gamble går enligt plan,
takeaway här kommer vara, bara igen, för att starta
att lägga märke till mönster och utläsa befintlig syntax
hur annat du kan uttrycka själv, no pun intended, för
att fånga några extra scenario.
Så vi säger else if.
printf, bra.
Och märker med CS50 IDE och frankly-- IDE
står för Integrated Utvecklingsmiljö.
Det är bara ett fint sätt att säga ett program som hjälper dig program.
Den gör användarvänliga saker som när du skriver en parentes,
det ger dig automatiskt den andra.
Presumtionen är att du är småningom kommer att vilja skriva det,
och det gör det också med citationstecken.
>> Så jag gillar linje 23.
99% av vägen dit.
Någon vill chime med ett tips?
Jag hörde semikolon från publiken.
God.
Så som kompletterar det.
Och nu, jag har bara lite bestörtning med linje 21.
Hur vill vi uttrycka detta?
Vilken fråga vill vi fråga, tror du?
Så tidigare vi ställde frågan, om n är större än noll, gör detta.
Annars gör det.
Så vi måste välja en fråga att ställa här.
PUBLIK: [OHÖRBAR]
DAVID J. MALAN: Good.
Så om n är lika med noll.
Utmärkt.
Så låt oss stanna här.
Tack så mycket för trotsar detta.
Låt mig ge er lite välförtjänt stress boll, kanske det.
Så vi är nästan där.
I själva verket, Lauren, om du inte åtanke, låt mig göra en tweak här,
bara för att vara i linje även med vad vi såg i Scratch, vad
vill jag göra med linjer 21 och 24, bara igen, baserat
om hur vi gjorde detta i Scratch, kanske?
>> PUBLIK: Flytta upp.
>> DAVID J. MALAN: Ja, flytta upp.
Så annat tillstånd, den tredje, eller fjärde eller femte eller sista gren,
bör verkligen komma efteråt, och det är bara genom konventionen,
bara för att om ni så vill.
Så jag behöver för att göra denna tweak.
Och jag måste sätta min klammerparentes tillbaka hit.
Och nu, kommer detta program kompilera.
Vi är så nära, men det finns en mycket, mycket subtil bugg.
Låt oss se vad som händer.
>> Låt mig först gå vidare och zooma ut.
Jag kommer att gå vidare och skriver att tillståndet noll.
Åh, ljög jag.
Nu kompilatorn är faktiskt ganska smart.
Och jag förstår inte riktigt det felmeddelande.
Med användning av resultatet av ett uppdrag som ett villkor utan parenteser,
är uppenbarligen dåligt.
Men vad betyder det?
>> Bra igen, letar efter mönster i kod som vi har sett förut,
vad är linje 17 faktiskt gör, även om Lauren avsedda något
annars?
Yeah.
>> PUBLIK: [OHÖRBAR]
DAVID J. MALAN: Ja.
Så kom ihåg likhetstecknet, tydligen som vi har använt det tidigare, är inte lika.
Dess uppdrag, från höger till vänster.
Så linje 17 för tillfället är en förutsättning, och det är
exekvera kod inom parentes, men när den kod körs,
vad som händer med värdet noll?
Vad händer med värdet på n?
Att bli noll.
Så om n blir noll, och återigen, enligt förra veckan,
Vi brukar säga att noll är falskt och en är sant,
eller ja är en och ingen är noll.
Så sant och falskt, en och 0.
Om n som linjen 17 har varit ges värdet 0, är ​​noll sant?
Nej.
Per definition är noll falsk.
Det är konventionen vi är kommer att hålla fast vid att gå framåt.
Så kommer linjerna 18, 19, och 20 någonsin gälla nu, logiskt?
De kan inte.
Så vi ställde frågan men inte helt exakt,
och du skulle inte veta detta om du har sett det, lösningen i C
är när du vill uttrycka jämlikhet, säger du jämlikar lika.
Så likhetstecken redan förbrukats genom överlåtelse, från höger till vänster.
Lika med lika organ jämlikar.
Och om du verkligen vill ditt sinne som skall böjas, i JavaScript och PHP,
det finns lika lika jämlikar, som betyda något helt annat,
men vi kommer att lyckas inom kort.
>> Så det här är en enkel fix, men inser super lätt att göra detta misstag,
och sedan undrar och kamp för minuter, om inte en timme,
varför är min kod inte verkställande som jag tänker?
Det beror på att du inte berätta det just vad du menade.
Så det var nästan perfekt, var och det stora
att vi snubblat över dessa två små saker eftersom nu om vi rätta till dem,
och jag gör Condition Zero dot slash tillstånd noll,
Jag skulle vilja ett heltal tack.
Låt oss se.
Nej.
Det kommer att tvinga mig att göra det.
Så 42.
Jag valde ett positivt tal.
Så nu hur gör jag bevisa det här programmet korrekt?
Om du är en matematiker, kan du inte verkligen bevisa detta genom trial and error,
höger?
Du kan inte bara ett bevis av exempel, men åtminstone
som programmerare vi inte kommer att försöka bevisa för nu
att detta är faktiskt korrekt, men jag skulle förmodligen
testa några representativa fall.
>> Jag har testat 42.
Jag kunde testa 43.
Jag kunde testa 44.
Test 45.
Höger?
Men jag kunde göra detta en riktigt lång tid.
Vad skulle vara lite mer intressanta fall att prova?
PUBLIK: [OHÖRBAR] noll.
DAVID J. MALAN: Så noll.
Visst.
Och bra, vi har fått den här gången, tack vare Lauren ny kod.
Vad är ett annat bra fall att prova?
Publik: Negativ en.
>> David J. MALAN: Negativ en, och kanske något lite större,
så kanske negativ 42, men i allmänhet, när
testa dina program framåt, du är
kommer att vilja tänka för dig själv, precis vad
är de grundläggande olika fall.
Och jag vågar säga en negativ fall ett positivt fall, och en nolla fall
ganska mycket rundor ut dessa.
Låt oss titta på en variant av detta men.
Villkor ett.
Detta är en korrekt lösning här, så att du ser två och online,
Om du går igenom genomgångar, kommer i allmänhet
öka dessa stegvis tills vi får exakt rätt strategi.
Tänk om vi ville ställa två frågor på en gång?
>> Låt mig att öppna upp detta i stället.
Icke-omkopplare, av skäl som vi får se en annan tid.
Vad är nytt syntaktiskt här?
Jag är för närvarande spelar ett spel där datorn berättar
mig, ge mig ett heltal mellan en och 10,
och sedan jag bedöma användarens input.
På engelska, baserad på koden du ser här
i blått, vad är det här programmet gör?
PUBLIK: [OHÖRBAR] plockas ett stort eller litet antal.
DAVID J. MALAN: Ja.
Det är bara dömer huruvida Jag valde en stor, eller medium,
eller litet antal bygger på en mycket godtycklig definition av små, medelstora,
och stora här, men tillkännagivande syntax som är nytt är detta.
Det finns inte mindre än int eller lika med underteckna, eller större än eller lika med underteckna,
där man är över den andra, som du kan uttrycka i som Microsoft Word.
Så i ett programmeringsspråk du typiskt bara göra två tecken,
en efter den andra.
Och vad gör detta förmodligen representera,-tecken et-tecken.
PUBLIK: [OHÖRBAR]
DAVID J. MALAN: Ja.
Det betyder bara och eftersom det visar sig att författarna till C
använde en enda et-tecken, som du kanske tror
skulle vara perfekt för begreppet och är redan använt upp,
så et-tecken et-tecken som faktiskt fångar fall vi verkligen vill.
>> Så låt oss nu snubblar över två saker.
Låt mig gå vidare och öppna upp en.
Något som är lite oroande.
Imprecision dot c.
Låt mig presentera två saker här.
En, märker att vi kan göra math, som precis som tidigare när
vi gjorde plus på två tal, x och y.
Vad är det här programmet uppenbarligen gör?
Jag har inte kommenterat det ännu, och jag har infört procent f,
men jag sa snabbt tidigare procent f innebär flyttal
värde, som är reellt tal.
Något med en decimal punkt, som inte är ett heltal.
Vad tror du det här programmet är försöker visa mig på skärmen?
Yeah?
PUBLIK: Resultatet av en över 10.
DAVID J. MALAN: Ja.
Vad är resultatet av ett dividerat med 10.
Rätt, eftersom alla av er har förmodligen vuxit upp i vetskap om att en över 10
är vad?
Ja, det är bara 10/01 eller 0,1.
Höger?
Så låt oss se vad det egentligen är.
Så låt mig gå vidare och spara denna.
Låt mig gå här nere.
Gör inexakthet dot snedstreck vaghet och varsel också,
i en Linuxmiljö, behöver du inte måste skriva ut imprecision och ta
hela dagen.
Det i allmänhet, om du träffar Tab, det kommer att avsluta din tanke för dig,
baserat på de ord som är finns i den aktuella katalogen.
OK.
Så du hade rätt.
Ett delat med 10 är, i själva verket, 0,1.
Men jag är lite nyfiken.
Och det visar sig printf stöder vissa funktioner
där du kan ange fler än standard antalet decimaler.
Så om jag vill se 10 decimal punkter som jag kan göra procent,
för platshållare symbol, dot 10 för, ge mig 10 decimaler,
och då fortfarande flyttal värde, och som en sidoreplik,
vad är detta backslash n tydligen vi fortsätter att använda?
Det visar sig att det är en symbol för en ny linje.
Det är mycket tydligt sätt att säga till datorn,
flytta markören till nästa linje när du är klar.
Och vi får se vad som händer när vi inte gör det.
>> Låt mig kompilera göra imprecision.
Nu dot slash inexakthet.
OK.
Fortfarande rätt.
En dividerat med 10.
Nu ska jag få en lite nyfiken, men.
Vad händer om jag ser 20 decimal påpekar kompilera, repris,
och som en sidoreplik för hastighet, kan du också använda
din uppåt- och nedåtpilarna till bläddra igenom din historia,
så att du inte behöver hålla skriva om dessa kommandon, anger.
Va.
Jag lärde mig inte att i grundskolan.
Okej, så låt mig se som 29 platser ut.
Kanske är det bara en lyckträff.
Kanske min dator agerar konstigt.
Det är inte en sak, eller hur?
Det gör något deterministiskt.
Så gör vaghet.
OK, det är trasslat till.
Så vad är det som händer?
>> Så tydligen din Läraren har legat
till er alla för denna gång för anledningarna till att vi får se snart.
Men låt oss sluta med ett annat program.
Detta är en liten program någon skrev för några år sedan,
och det är faktiskt en del av en tävling.
Ingen faktiskt skriver kod så här, och om du gör,
detta är stilist ett problem.
Men människor gör detta för att skryta.
Att skriva den mest förvirrande ser program som
ändå gör något intressant.
Och tonen jag trodde att vi skulle lämna på idag, innan Colton spelar oss här,
är att köra det här programmet, som även i att bara använda
C i denna textbaserade miljö, ger oss detta.
Dammit.
>> [LAUGHTER]
>> Stand by.
[OHÖRBAR] c streck l m.
Du kommer att se den magiska besvärjelse som vi får se snart.
[OHÖRBAR] Okej.
Och nu kan du även göra saker som detta.
Det är allt.
För CS50 vi kommer att se dig på fredag.
>> [MUSIK SPELA]
>> [Applåder]