>> [VIDEO PLAYBACK]
>> -En Triumf av matematisk og mekaniske ferdigheter
dette er flott ny automatisk kalkulator ved Harvard University.
Intrikate problemer i matematikk gjennom maskinen i kodet form
på båndet blir nøyaktig løst i en minutt brøkdel av den tiden som kreves
for menneskelig beregning.
Designet for å ekspedere alle former for matematisk og vitenskapelig forskning,
den gigantiske mekaniske hjernen vil arbeide for United States Navy før krigens slutt.
>> [END PLAYBACK]
>> DAVID J. MALAN: Dette er CS50.
Den siste var en magisk sted, men hvis du noen gang
lurte på hva som enheten er i Harvard Science Center,
det er faktisk en del av Harvard Mark I, og det er
utstilt der nå for de siste mange år.
Og hva du vil se innebygd i Oppgavesettet
en er en titt bak kulissene på hva den enheten gjorde, og gjør,
fra professor Harry Lewis, som er i datavitenskapsavdelingen her.
Så mer på det om en liten bit.
>> Men i dag begynner vi å overgang fra forrige uke til denne,
og vi vil bringe omtale av ett bilde her
det er faktisk ganske kjent.
Vet noen hva dette her er på skjermen?
I hvert fall ifølge myten.
Yeah.
PUBLIKUM: Det første viruset.
DAVID J. MALAN: Så det var visstnok den aller første faktiske feil i en datamaskin.
Nå i realiteten ordet bug, for en feil i et program,
har vært med oss ​​i noen tid i den fysiske verden,
og dette var en av de første dokumentert ganger hvor noen faktisk
plukket en stor møll ut av Mark II datamaskin, sette den i bindemiddelet,
og da spilte det som den første kjente bug
å har faktisk blitt funnet fysisk.
Så dermed ble det inngått som i dagens lore.
Alt fra forrige uke er tilgjengelig på nettet.
I spesielle ressurser som kanskje du ikke nødvendigvis legger merke til, spesielt
Hvis kommer her i person.
Så en av de pedagogiske fellows hver år gjør en kanonisk sett av notater,
så du trenger ikke holde hodet ned, prøver
å transkribere de fleste noe som kan skje her i klassen.
Så skjønner at de såkalt [? Scribd?] Notater
er online, absolutt lysbildene og kildekode som vi bruker i undervisningen.
Vi gjør fulltekst transkripsjoner også tilgjengelig.
Så hvis du vagt husker noen sikt, og ønsker å slå det opp litt
lettere, skjønner at alt av det er søkbare på nettet.
Samt walkthroughs også.
Ja, i dag begynner vi å se på et lavere nivå programmeringsspråk,
snart å bli kjent med oss som C, og det er veldig lett
å liksom gå seg vill etter bare noen få øyeblikkene tid, og deretter sortere av undring
hvordan vi faktisk fikk til noe mer komplekse eksempel fra de enkleste.
Og så innser vi vil kirsebær plukke i timene noen
av representative eksempler, men innse at så mye mer er også
tilgjengelig på nettet, slik at du kan jobbe gjennom det i ditt eget tempo,
men du er mest komfortabel.
>> Men vi slapp med programmer som var nettopp dette.
Så jeg klikker på den grønne flagg, og hva betyr dette programmet gjøre?
Sier, hallo, verden.
Det gjør katten si hallo i sin lille verden
på øverste venstre side av Scratch brukergrensesnitt.
Men vi begynte å introdusere noen terminologi forrige uke.
Og så, ting som dette vi kalte det?
Hva som kan være den generelle termen for dette?
Yeah.
En metode eller en uttalelse.
Jada, det er en handling.
Gjøre dette.
Og likevel var det andre former til scratch,
foruten disse såkalte uttalelse, var de også
ting som dette, som vi kalte det?
Yeah.
Så en sløyfe.
Og i dette tilfelle denne tingen gjentas, selvsagt, 10 ganger.
Det er en evig blokk.
Det er et par andre.
Og i dag skal vi se hvordan du oversette dette til en mer moderne verden,
om du vil, selv om det er kommer til å vises ved første øyekast
å være mye mer uforståelige.
Men de var faktisk looper.
Og så har vi ting som denne, som hadde denne form,
og i hovedsak spørsmål.
Og vi henvist til disse som hva?
>> PUBLIKUM: boolsk uttrykk.
>> DAVID J. MALAN: Yeah.
Boolsk uttrykk.
Noe som er enten sann eller usant, ja eller nei, ett eller null,
men du ønsker å se i verden.
Men vi kalte dem boolsk uttrykk, og vi plugge dem
inn i forhold, eller grener.
Og i en verden av Scratch, alt pent
sperrer i form av sin form, om det er logisk fornuftig å gjøre det,
men du trenger ikke å stoppe på bare gjøre én ting betinget,
du kan ha en ordspråklig veiskille
og gjøre enten det ene eller det hvis betingelsen er sann eller ikke.
Og så, som du ser, hvis du ikke allerede har,
Du kan også hekker disse blokkene.
Så Scratch vokser til å fylle formene som du kanskje ønsker å sette inn i den,
slik at du faktisk kan uttrykke mest noen logikk som du kanskje ønsker å gjøre.
>> Nå noen ord kunngjøring for både her og New Haven.
Så seksjonering begynner i dag.
Nettadressen for dette er på kursets nettside, for dem ukjent.
Seksjoner vil være en mulighet til å komme sammen
i en mye mer intimt miljø enn [? Sanders?] Tillater,
med 10 til 20 klassekamerater med en undervisning stipendiat ved ulike spor,
og ulike skritt, hvis du ønsker det.
Faktisk kurstilbud forskjellige seksjoner
for de mindre komfortable, mer komfortable, og et sted i mellom,
og rollen tommelfinger her, er det er ingen formell definisjon,
men hvis du er mindre komfortable, du slags vet det.
Du er litt uforferdet om Ideen om stepping foten, kanskje, tilbake
i klasserommet, eller vise opp til en mellom-delen.
Hvis du har vært programmering siden du var seks år gammel, mer komfortabel,
kanskje til deg.
Og hvis det er slags en kaste opp, det er akkurat hva i mellom
er ment å være.
>> Nå, i mellomtiden, for en klasse av denne størrelse,
det tar oss litt tid for å seksjonen alle, så vi har såkalte,
super seksjoner, kommer opp dette helgen og tidlig neste uke,
så ta en titt på kurset hjemmeside for de som er selvfølgelig brede,
og også filmet for dem som ikke kan gjøre dem.
Og seksjoner selv vil starte i uke tre av CS50 null indeksen.
Problemet satt 0 er allerede på kursets hjemmeside.
Og innse at du har ni sene dager dette semesteret.
Så dette er en oppgradering fra fjor år, når vi hadde fem sene dager.
>> Så hvis du lurer på, Vi har ni oppgavesett.
Du har ni sene dager, som hver du kan bare bruke én per uke på.
Som effektivt gjør alle problemet setter grunn fredag,
men målet er å sette en liten litt av psykologisk press
på deg til å prøve å få ting i på torsdag
fordi som du snart vil oppdage, for bedre eller verre, de fleste
alt i programvaren verden ender opp tar mye lengre tid enn du forventer.
Så anser det som en slags av muligheten til å hjelpe
selv å målrette torsdag, men trøste deg med at, ja,
alt er på grunn fredag.
Og hvis du sender dem på Torsdag, det er fantastisk.
Det finnes ingen bonuspoeng eller ekstra kreditt for å møte denne fristen.
Det er ment å være en krykke bare.
>> Og arbeidstid, både her og i New Haven,
i person, hvis du ønsker å møte med noen av våre kurs
undervisning stipendiater og instanser for å få hjelp.
>> Greit.
Så nå, la oss gjøre dette mer ekte.
Og for et øyeblikk det kommer til å starte for å få litt mer uforståelige, men svært
raskt på fredag ​​og neste uke vil vi være
i stand til å gjøre så mye mer enn vi kunne hittil i Scratch.
Så vi introdusert kode siste uke, riktignok pictoral.
Det var puslebiter.
Og vi formalisert at den er noe som kalles kildekoden,
men ville ser ut?
Vel, det så litt noe sånt som dette.
Og, faktisk bare til slags erte hvor vi kan gå med dette.
Jeg kommer til å gå videre og åpne opp et vindu her,
og jeg bare kommer til å velge ny fil.
Og jeg kommer til å lagre denne filen som noe som hallo dot c.
Mer om det valget av ord i bare et øyeblikk.
Og dette er hvordan noen kanskje gå om å skrive et program.
Inkluder standard I / O dot h, int main ugyldig, og deretter åpne klammeparentes, nær
klammeparentes, printf hallo komma verden, backslash n, semikolon, Lagre, gjort.
OK.
Jeg har skrevet min første program, men det kommer
å være utrolig imponert fordi når jeg faktisk
kjøre dette program er selvfølgelig ved først å skrive gjøre hallo,
og deretter dot slash hei, og vi vil gå gjennom dette i mye mer detalj
i et øyeblikk, det er alt den gjør.
Betyr pop ikke åpne noen vinduer.
Det gjør ikke noe spesielt fancy.
Alt den gjør er det jeg fortalte det til gjør, men hvordan får vi til det?
Og hvordan bygger vi på det?
Vel, la oss introdusere noen ulike konsepter her.
>> Så en, vi er i ferd med å starte ved hjelp av et program kalt en kompilator.
En kompilator finnes for Mac OS, Windows, Linux, en rekke operativsystemer,
og vi vil snart introdusere deg til miljø som vi skal bruke,
men en kompilator er bare en generell betegnelse på et stykke programvare
som tar kildekoden og produserer objektkode fra den.
Med andre ord, hvis du har som input din kilde
kode, noe som det jeg nettopp skrev, det til slutt produserer objektkode.
Og objektkode er egentlig bare en fancy måte å si det utganger
null og ens.
Med andre ord, kilde kode, selv om det er
kommer til å se litt uforståelige, og litt mindre vennlig
enn Scratch ved første øyekast, det er i hvert fall noe
at vi mennesker kan forstå.
Den slags ser ut og høres ut som Engelsk, selv om det er veldig konsis.
Mens programmering i null og ens, som våre forgjengere hadde å gjøre,
noen år siden, var ikke en spesielt morsom utfordring.
Og likevel, er dette hva datamaskinen forstår fortsatt.
Så kompilatoren får oss fra kildekoden til objektkoden.
Det er som å åpne en fil med kompilator, og når du lagrer den,
du får disse nuller og enere.
Så vi får se hvordan du gjør at i bare et øyeblikk.
>> Men la oss nå prøve å gi en bygge bro mellom forrige uke og denne,
slik at selv når vi får hengt opp på ting som klammeparentes,
og semikolon og parenteser og alle disse intellektuelt interessant
aspekter av programmering, at svært forståelig reise folk opp tidlig,
innser at alle ideene i dag, er de samme som sist.
Så i går, så vi dette eksemplet her, Hello World-programmet.
Vel, som starter i dag, hvis vi ønsker å gjennomføre det samme programmet,
det kommer til å se en litt noe sånt som dette.
Og vi vil forklare før lenge hva int, og viktigste, og tom, og alle som
er, men minst jeg ser her allerede kjent Hello World.
>> I mellomtiden, ting som funksjon, si hei,
er veldig enkelt kommer til å bli en svært enkle utsagn som dette.
Printf hello world, med noen siterer, med en omvendt skråstrek,
med et semikolon, men mer om det som kommer.
Loops, i mellomtiden, er dette en loop som, selvfølgelig, sier hei verden for alltid,
og dette kommer til å se en litt sprøere enn i det siste,
men hvis jeg sier noe aktig, mens sant, jeg
Deretter kan du skrive ut Hello world igjen og igjen og igjen og igjen.
Og så du kan slags av begynner å antyde her,
denne konvensjonen for å bruke klammeparentes er snill
som å omfavne innrykket linje med kode der.
Printf kodelinje mye som den gule puslespill brikke opp ovenfor.
Slik at vi ikke kommer til å si alltid, vi kommer til å si når sant,
men vi får se hvorfor det er på bare litt.
>> I mellomtiden, hvis vi har en løkke som dette, hvor du gjentar noe begrenset
antall ganger, dette også det er kommer til å ta litt tid å bli vant
til, men det kommer til å si for int jeg får null, jeg mindre enn 10, i ++,
og deretter printf igjen.
Men det kommer til å bli mønstre.
Og for de av dere som er kjent med AP Computer Science, eller Java,
eller hvilket som helst antall av andre språk nesten alle disse konstruksjoner
så langt bør se mest kjent.
>> Så variabel.
Så her er en enkel Scratch utdrag som setter en variabel kalt telleren til null,
og deretter alltid sier telleren, og da det forandrer telleren ved en.
Så det begynner med null, og deretter en, to, tre.
Vel, hvordan kan vi presentere det i dette nye språket litt på samme måte?
Int teller lik null, mens sant, som
er den samme ideen fra før for å gjøre noe for alltid,
og jeg skal bare printf.
Og nå er det å bli litt rart, prosent i, men mer om det som kommer,
men disse ideene er akkurat det samme.
Vi må nå forholde seg til syntaksen at datamaskinen er
kommer til å kreve av oss.
>> Boolsk uttrykk, noe som sx mindre enn y, x eller mindre enn y,
og y mindre enn z.
Det kommer til å se litt noe som dette, med parentes bare
som i matematikk for godt mål å bare sikre at rekkefølgen av operasjoner
er som vi har tenkt.
Og nå, forhold.
Så hvis x mindre enn y, si x er mindre enn y, annet hvis x er større enn y,
si at x er større enn y, ellers logisk, må x være lik y.
Så du kan implementere noe som dette i Scratch,
eller du kan implementere det i denne syntaksen.
Og igjen, klammeparentes er slags gi oss den samme formen som i puslespillet
stykker, men syntaksen, nå, er kanskje begynner å følge noen mønstre.
>> Så, hva betyr dette gir oss her?
Så vi er tilbake så i hovedprogrammet.
La oss faktisk, nå, gjøre noe med det.
Så i denne aller første linjen vi ser skarp omfatter,
standard I / O, dot h, og deretter litt merkelig vinkel
parentes nedenfor som. int main ugyldig, og deretter printf hello world.
Så bare ta et skritt.
Noen som aldri har programmert før, minst forklare en av disse linjene.
Ved hjelp av kanskje noen av sjargong av forrige uke.
Hva er printf, for eksempel?
Yeah.
>> PUBLIKUM: [uhørbart]
>> DAVID J. MALAN: Yeah.
Det er en funksjon, eller en uttalelse, fra forrige ukes terminologi.
Og det er en handling som gjør noe.
Nå er denne funksjonen, eller denne uttalelsen, gjør
det ser ut til å ta noen form for innspill?
Og i hvilken forstand gjør det ser ut til å ta inn, i så fall?
Input, hva mener jeg med det?
Yeah.
>> PUBLIKUM: [uhørbart]
DAVID J. MALAN: Yeah.
Så Skrap ut noen puslespillbrikker hvor du kan parametrize det.
Du kan fortelle gjentakelses blokkere hvor mange ganger å gjenta,
slik det var en inngang av sorterer, og akkurat som Scratch
hadde en liten hvit plassholder for nummeret du vil skrive inn,
så gjør vi bruker i denne tekst verdens parentes
for å gi oss det sirkulær form inn der vi kan koble våre innspill.
Tross alt, titalls år siden når dette språket, kalles C,
ble oppfunnet ingen forventet det er en av oss,
disse noen år senere, ville vi vil ha en funksjon som sier hei.
Høyre?
Det ville være fint om det var en puslespill brikke, eller et stikkord,
som kalles hallo, at bokstavelig talt bare sier hei.
Men vi trenger ikke det.
Vi kan ha noe mye lavere nivå, som en generisk print
kommando, som tar input, og skriver hva vi ønsker.
Så oppdager nå mønsteret som vil begynne å dukke opp.
Åpne paren, i nærheten paren tilsynelatende omfavner input,
og da ser jeg dobbelt sitater på begge ender.
Det er fortsatt rart backslash n, men forhåpentligvis nå du
kan begynne å visualisere i det minste at printf tar i noen form for innspill.
Ikke så brukervennlig som Scratch, men det er bare
som å ha plugget i noen verdi der.
>> Greit, nå la oss faktisk gjøre noe med dette.
Så noen av dere kanskje vet fra ha handlet klassen før,
chattet med venner, at i mange år
vi brukte noe som heter den CS50 apparatet.
Dette var et begrep som beskriver en teknologi kalles den virtuelle maskin, som
er et stykke programvare som din forgjengere ville laste off
kursets nettside gratis.
De ville også laste ned en gratis stykke programvare kalt en hypervisor,
noe som kalles som VMware, eller VirtualBox, eller en rekke
andre verktøy, og på sin Mac eller PC eller hva datamaskinen de hadde i fjor
og i år tidligere, de ville dobbeltklikke på et ikon
å kjøre denne programvaren kalt hypervisor.
Og da på innsiden av det programmet de skulle åpne CS50 apparatet.
Og effekten var at om en forgjenger av deg
kjørte Mac OS eller Windows, vil han eller hun deretter
senere hadde et nytt vindu på deres skjermen kjører CS50 miljø.
Så en virtuell maskin kan du kjøre én operativsystem på innsiden av en annen,
og det er akkurat det vi gjorde.
Gjennom det meste av kurset vi bruke et operativsystem kalt
Linux, spesielt Ubuntu Linux, og dette
er en veldig fin måte i år tidligere av å sørge for at alle i løpet
hadde det samme miljøet.
Og du kan bruke noen form for datamaskin som du faktisk ønsker.
Blant ulempene, skjønt, var det var som to gigabyte
for å laste ned denne tingen.
Det gjorde ikke nødvendigvis fungere super bra på folk som har datamaskiner som kanskje bare
hadde en gig eller så av RAM, eller ikke for mange gigahertz av CPU-hastighet,
og så dette året, for dette og andre årsaker,
har vi vært overgangen i dette miljøet.
Den såkalte CS50 IDE, som er basert på åpen kildekode,
og en støttet plattform at et selskap som heter Cloud9
støtter i Europa, så tillater oss å ha vesentlig
at nøyaktig samme miljø som i år tidligere, men i den såkalte nettskyen.
>> Så hva er den skyen?
Du har sikkert klikket ikonet på din Mac eller PC.
Hva er skyen?
Yeah?
En litt høyere.
Yeah.
Det er bare en haug med datamaskiner andre steder som lagrer data og løp
programvaren og lignende.
Så det er egentlig bare til ordet de jure beskrive [? utleies?]
datamaskiner som bor andre steder.
At du, selv, ikke nødvendigvis eier.
Så når dine data, eller din programmer, er i skyen,
det betyr bare det er på noen andres datamaskiner andre steder,
og ikke, mest sannsynlig, på fysisk bærbar eller stasjonær.
Og så det er hva CS50 IDE nå er.
>> Heretter vil du gå til en bestemt URL som vil introdusere deg
til, i oppgavesettet 1, senere i uke, som vil da, ved å logge deg inn,
gi deg dette miljøet.
Og mye som Scratch hadde en noen forskjellige paneler involvert,
så gjør CS50 IDE har akkurat det.
I øverste venstre side her, er du kommer til å se et kjent filbehandleren.
Så noen av filene som du sette inn i dette miljøet
bare skal være oppført der.
Filer og mapper.
Øverst til høyre her, du kommer til å se et sted
hvor du faktisk kan skrive koden din.
Først i C, senere i begrep i PHP og Javascript,
og, kanskje for endelig prosjekter, Ruby eller Java eller Python
eller en rekke språk er understøttet i dette miljøet.
Det er ikke i det hele tatt bundet til CS50 spesifikt.
>> Og så i nedre hjørne her, spesielt for de mer komfortable,
du har noe kalles et terminalvindu.
Og dette terminalvindu tillater du å utføre en kommando som du
ønsker i denne skyen miljøet.
Den lar deg installere noen ekstra programvare
som du vil fordi du har såkalt rot, eller administratorrettigheter.
Så med andre ord, selv om denne er slutt vert i skyen,
og selv om vi har forenklet det til en viss grad
som standard, bokstavelig talt innføre, takket være Dan Armendariz, og Dino,
og Dan Bradley på CS50 team over forbi mange måneder, en mindre behagelig
modus som skjuler mye av utgangspunktet forvirrende distraksjoner.
Alt det eksisterer for å representerer et typisk datamaskinsystem
som du kan bruke i den virkelige verden.
>> Så hva betyr alt dette, og hva kan vi egentlig gjøre med det?
La oss faktisk ta en titt på et program.
Så jeg kommer til å åpne opp Selve miljøet her,
som er bare vår Chrome leseren, noe som kan være Firefox,
kan være Internet Explorer, eller noen annen nettleser også.
Det er fullt skjermet her for øyeblikket.
Og jeg ønsker å faktisk erte hverandre hva dette programmet var.
Så la oss ta en titt, ved å zoome inn opp toppen, hva jeg gjorde, og hvordan jeg kom hit.
Så her er de eksakte samme linjer med kode.
Så dette er den uttalelsen, som du nevnte tidligere.
Funksjonen som sier hei.
Klammeparentes, på linje fire og seks,
formodentlig slags innhylle den linjen å assosiere det
med essensen av mitt program.
Så ja, dette søkeordet viktigste, det er der oppe på linje tre,
du kan tenke på det som tilsvarer av at når grønt flagg klikket,
blokkere i Scratch.
Så det er alt vi har her, er når grønne flagget klikket, print, eller si,
Hallo verden.
>> Men la oss ta en gjetning, nå, på hvilket denne første, mer uforståelige linje, er.
Sharp omfatter, åpen vinklet brakett, standard I / O dot h,
lukke vinklet brakett.
Hva er det kanskje gjør, spesielt hvis du har programmert
før i et annet språk.
Yeah?
>> PUBLIKUM: [uhørbart]
DAVID J. MALAN: Yeah.
Nøyaktig.
Så dette er noe som gir deg tilgang til en bibliotek, så å si, av funksjoner.
Og et bibliotek med funksjoner er funksjoner som noen andre
skrev, enten nylig eller for lenge siden, slik at du
trenger ikke å finne opp hjulet.
For eksempel, gjør vi ikke må vite, i 2015,
hvordan å skrive kode som setter et tegn på skjermen min.
Noen andre har funnet at ut med printf funksjonen
slik at jeg kan sortere abstrakt bort fra det, eller laget
på toppen av hans eller hennes kode, og nå bare ta
for gitt at ethvert program jeg skriver kan skrive noe til skjermen.
Så denne første linjen der i trinn én inkluderer den såkalte header fil
for standardbibliotek.
Så se, språket i som vi nå jobber
hadde en standard bibliotek med mange funksjoner.
Printf er en av dem, og den første linje med kode
betyr gi meg tilgang til disse funksjonene, slik at jeg
trenger ikke å gjenoppfinne hjulet.
>> Nå la oss gå til det nederste vinduet og gjøre akkurat hva jeg gjorde før.
Et øyeblikk siden, da jeg var suser gjennom koden,
skrive det ut for første gang, Jeg veldig raskt skrevet, gjør hallo.
Hva var det handler om ville du gjette?
Hva skulle jeg gjøre?
Yeah?
Bare glem det.
Det er greit.
Yeah.
PUBLIKUM: Kompilering det.
DAVID J. MALAN: Yeah.
Det var bare å kompilere den.
Høyre?
Selv om dette er helt ukjent til deg, det er ganske engelsk ut.
Det er absolutt ikke nuller og enere, så jeg fortsatt
må kjøre det gjennom at såkalte program, en kompilator, er at å gå
å ta det som input og produserer output.
Og i hvert fall, for nå, i denne Linux-miljø,
men dette er ikke en forutsetning, dette er bare hvor vi skal begynne,
du vanligvis samhandle med datasystemer som dette
av en såkalt kommandolinje.
Så med en blinkende rask og tastaturet,
og ikke så mye på musen, og ikke så mye vinduer og ikoner og menyer,
snarere alt er tekstlig.
Og selv om dette føles, først øyekast, kanskje, som et skritt bakover,
det er faktisk en mye mer kraftig og uttrykksfull måte
kontrollere en datamaskin spesielt som deg,
selv, bli mer komfortabel fra mindre.
Det kommer til å tillate deg å gjøre en masse flere ting enn akkurat hva Microsoft
eller Apple lar deg gjøre med deres grafiske operativsystem.
>> Så når jeg trykker Enter, nå, ingenting skjer denne gangen
fordi tilsynelatende Programmet hallo er oppdatert.
Og hva var lede Jeg løp etter det?
Dot slash hei, og hei verden.
La oss nå ta et skritt tilbake for bare et øyeblikk.
Det viser seg at få hallo er bare en forenklet måte å kompilere et program.
La oss bare introdusere ett stykke sjargong,
men deretter bevege seg bort fra det, siden det ikke
alle som interessant for dagens formål.
Kompilatoren vi kommer til å begynne å bruke kalles klang, for C-språk.
Og dette er et program som kjøres bare som vi gjorde på kommandolinjen der.
Og så hvis jeg vil kompilere et program som jeg
har skrevet i en fil kalt hallo dot c, jeg bokstavelig talt bare skriver klang hei c
enter.
>> Det morsomme er, av historiske årsaker,
hvis jeg ikke angir navnet på programmet
som jeg ønsker å sende ut, hvis jeg ikke gjør det angi et filnavn for de nuller
og enere, en veldig merkelig Konvensjonen ble vedtatt år siden
hvor det føltes slags godt svar på den tiden,
vel la oss bare vilkårlig ringe første programmet vi kompilere en prikk ut.
En kommer først i alfabetet.
Ut, er det utgang.
Så vi vil kalle programmet som standard en prikk ut.
Og det er bra, fordi hvis jeg vil kjøre programmet i denne tekst basert
miljø, jeg bare skriver dot slash en prikk ut skriv.
Og det ville kjøre akkurat som før.
Så la oss se at virkelig fort.
>> Så hvis jeg går tilbake til min kildekode i CS50 IDE,
og jeg i stedet gjøre dette, klang hallo barneseng c gå inn, synes varsel ingenting til å skje,
men nesten alltid i denne Linux-miljø,
når noe dårlig ser ut til å skje, at betyr noe godt faktisk skjedde.
Hvis du ikke ser en feil budskap, er alle sikkert godt.
Og faktisk, hvis jeg nå gjør dot slash en prikk ut skriv, jeg har kjørt min samme program.
Jeg har fortsatt hallo program fra tidligere fordi ja, det er
kommer til å bli så mye bedre bare skriv gjøre i stedet for å huske
disse besvergelser av kommandoer, men la oss se hvordan vi
kan forbedre denne, likevel.
>> Så, dette er kommandoen å kompilere koden.
Dette er kommandoen for å kjøre den kompilerte koden etterpå.
Hvordan kan jeg angi et filnavn?
Vel la oss bare introdusere ett stykke sjargong.
Når du er i denne tekst basert miljø,
du kommer til å ønske å spesifisere ting som kalles kommandolinjeargumenter.
Som er bare en fancy måte å si: Med andre ord på meldingen som
justere oppførselen til uansett program du kjører.
Så spesielt program jeg er kjører, ved å skrive navnet klang,
er programmet heter klang.
Så dette er, eller den gamle skolen tilsvarende dobbeltklikke
på Microsoft Word eller noen programmets ikon.
Jeg istedenfor bare å skrive navnet sitt, men i denne versjonen av kommandoen
Jeg så må dash o plass hei plass hallo dot c.
Så selv om du har aldri spilt i denne verden før,
bare ta en gjetning på hva ikke dash o hallo gjøre?
Eller hva forteller det klang å gjøre?
Yeah.
>> PUBLIKUM: [uhørbart]
DAVID J. MALAN: Yeah.
Det setter bare filens utgang til å være hei i stedet for sillier en prikk ut.
Og, ja, la oss prøve dette.
Så hvis jeg nå gjør, først la oss gjøre dette, r m hei.
Det er fjern.
Og det kommer til å si remove vanlig fil hallo, som
er unødvendig uforståelige, men det er bare betyr at du vil slette filen,
og jeg skriver y for ja.
Og legg merke til, hvis du var skotter på topp igjen, forsvant den fra der oppe.
La meg nå gjøre klang dash o, og Jeg kommer til å gå videre og gjøre hallo,
i store bokstaver, hallo dot c.
Nå, hvis jeg gjør dot slash hallo, hva forventer du?
>> Kanskje det er store og små bokstaver.
Kanskje er det ikke.
La oss se.
Ingen slik fil eller katalog.
Og vi kan slags jukse ved bare se på øverst til venstre.
Hva gjorde jeg tydeligvis lagre programmet som?
All caps hei.
Så ja, det går å gjøre en forskjell.
Så nå hello world er tilbake.
Nå er alt fint og bra, og alle veldig mind-lammende,
å slags overbelastes ned i disse detaljer, men å forstå dem
er bra.
>> Å skrive ut disse stadig lange besvergelser
er ikke til å være spesielt moro, så folk i verden
oppfunnet et annet program, noen år siden, kalt
gjøre, som ganske enkelt kan du skrive make,
navnet på programmet du ønsker å gjøre, og gjøre
er smart ved at det vil se ut i gjeldende mappe, aka katalog,
og hvis du har en fil kalt hallo dot c,
som er filen det vil kompilere for deg inn i et program som heter hei.
Så det er en mye enklere måte gjøre de mer kryptiske kommandoer
at vi gjorde tidligere.
Og vi har pre-konfigurerte CS50 IDE å vite
at den skal gjøre strek o, og en rekke andre flagg, eller kommandolinjeargumenter,
at vi vil se før lenge.
>> Men la oss nå faktisk gjøre noe mer interessant.
Bare å skrive ut hello world alle tiden er ikke alle som overbevisende.
Så la meg gå videre og endring dette programmet og si hei David.
Nå kommer jeg til å gå ned her.
Jeg kommer til å gå videre og gjør hei.
Og igjen nå du ser gjør viser deg lenger
sekvens av kommandoer som det er gjør fordi vi har pre-konfigurerte
det på den måten, men vi trenger ikke bekymre deg for nå
hva det gjør annet enn det er kompilering dot slash hallo, hallo verden.
Hva er galt?
Yeah.
>> PUBLIKUM: [uhørbart]
>> DAVID J. MALAN: Ja.
Så, noobie feil.
Jeg merker dette er super subtil, men stjernen her, i den kategorien,
betyr bare at du ikke har lagret det, og nettlesere og andre programmer
gjøre dette noen ganger.
Så kontroll sy eller kommando s bør lagre det.
Nå la meg gå videre og re-kjøre programmet.
Rekompileres.
Høyre, så det er en multi-trinns prosess.
Ingen av dem er særlig komplisert, men helst vi endre filen,
vi må endre den resulterende nuller og enere, og dot slash hei.
Wow.
Så dette er veldig uimponerende at vi bare skrevet ut dette.
La oss gjøre ting litt mer dynamisk, nå.
>> Vel det viser seg, at liker Scratch, støtter C variabler.
Og det viser seg hvis du vil å ha en variabel som lagrer,
ikke et tall som vi vanligvis gjorde med Scratch,
men som et ord, eller en setning, eller et navn, du
kan angi en variabel være av type streng.
Så vi får se mer av disse i bare et øyeblikk,
men det viser seg at C, og en rekke språk som det,
har svært spesifikke typer av variable.
Det er ikke akkurat som algebra, hvor du får en x, en y og z
og de er bare alltid tall, i et programmeringsspråk
du kan lagre numre, kan du lagre individuelle tegn,
du kan lagre hele ord, du kan lagre hele bilder, hele lydfiler,
og lignende.
Så vi trenger å spesifisere hva typen av vår er variabel.
Og etter konvensjonen skal jeg ringe min variable s bare fordi det er kortfattet,
og s står for streng.
>> Og så kommer jeg til å lagre innsiden av denne variable,
akkurat som med Scratch når jeg bruker settet blokken,
Jeg kommer til å bruke den oppdrag operatør i C,
som pent nok er den lik signere, men likhetstegnet gjør dette.
Den beveger seg noe fra høyre inn den venstre side av uttrykket.
Så det jeg har gjort, for å være klar i linje fem, er jeg har erklært en variabel.
Jeg har fortalt datamaskinen, gi meg minne for en variabel, kaller det s,
og vet på forhånd at jeg kommer å være å sette en streng på den.
Og en streng er bare en sekvens av tegn.
Det er et ord eller en setning eller avsnitt, men det er en sekvens av tegn.
Det er ikke tall.
Hva string jeg kommer til å være sette inn den variabelen?
Vel, tydeligvis sitere unquote, "Hannah".
Nå legger merke til mønsteret som er voksende.
Det er en venstre uttrykk.
Det er en høyre hånd uttrykk, adskilt av likhetstegnet.
Og bare ta en gjetning, hvis ukjente likevel,
med hva semikolon gjør.
Hva er det antagelig gjør for oss?
Yeah?
>> PUBLIKUM: [uhørbart]
>> DAVID J. MALAN: Yeah.
Det er bare å avslutte linjen.
Høyre?
Datamaskinene ønsker å være rett ut fortalt, bokstavelig talt, hva du skal gjøre.
I likhet med peanøttsmør og gelé sandwich eksempel
Hvis du ikke angir nøyaktig hva du har tenkt,
det kan bli overlatt til dom eller feil.
Semikolon betyr, det er det for denne kommandoen.
Det er å være super presis, og det er en veldig enkel ting å la være.
Så nå dette programmet ser ikke ut til skal oppføre seg noe annerledes før jeg
gjøre den mer dynamisk.
Så i stedet for hardt kunne min egen navn, la meg sette en plassholder verdi.
Og det viser seg at, og jeg vet dette fra å ha lest dokumentasjonen,
og brukt funksjon i mange år, som printf er designet for å være dynamisk.
Du trenger ikke å vite på forhånd hvilke ord du vil legge i det.
Du kan i stedet ha en plassholder, som prosent s, noe som
kommer til å fortelle datamaskinen, sette en streng her.
>> Hvilke string ønsker vi å sette det?
Will viser seg at mellom disse parentes, som huskes, avgrense
inngangen til en funksjon, hvis du har kommaseparert liste over ting her,
vi faktisk passere i flere innganger til en funksjon.
Så bare liker noen Scratch blokker, kan du ikke
har spilt med dem for prosjektene ennå, eller i det hele tatt,
noen skrape blokkene har to innganger.
To hvite bokser du kan skrive inn tall eller ord i.
Så for å ikke C har funksjoner som printf som kan ta to innganger.
Og igjen, dette komma er å skille dem.
Så i engelsk, igjen selv om du aldri har programmert før,
ved at logikken printf er en funksjon, tar to innganger, hvorav den ene
er en plassholder, hva ville du håper printf kommer til å gjøre med denne inngangen?
Det kommer til å si hei Hannah, forhåpentligvis.
Så for å gjøre dette trenger vi å lagre det.
Jeg kommer til å zoome ut.
Jeg kommer til å gå ned igjen her og si, gjøre hei enter.
Oh.
Noe er galt, og faktisk dette er ganske overveldende.
Jeg har seks linjer med kode og som 12 linjer med feil.
Så, ser frem til dette.
Så hva er det som skjer her?
Så den beste tommelfingerregel her, spesielt når du starter opp,
ikke bli distrahert av ting på bunnen.
Faktisk, jeg veldig bevisst bare rulles opp
fordi svært ofte, er en datamaskin ikke alle som lys av en enhet.
Det kommer til å bli forvirret.
Hvis det ser en ting som den ikke forstår,
det kanskje feil andre linjer med kode som er feil,
selv om de er helt greit.
Slik at du alltid vil jobbe ovenfra og ned gjennom feilene.
Og riktignok er dette super uforståelige for øyeblikket.
>> Feil, bruk av svart identifikator streng.
Sa jeg mener standard i?
Nei, jeg mente streng.
Og det er å peke på, kanskje det er en skrivefeil.
Liksom som, stavekontroll i en veldig nerdete måte, men årsaken her,
og du vet dette bare i praksis, er
at det viser seg at strengen ikke finnes i C. Faktisk C
er en spesielt gammel språk, og det er veldig lavt nivå,
og det gjør ikke en masse funksjoner som du kanskje har vokst opp
med hvis du har, faktisk, programmert i Java, som noen av dere har,
men du kan lære den nye ting.
Og ja, vi har gjort dette CS50, selv om ved slutten av semesteret,
alle disse trening hjul skal ha blitt tatt av,
hva vi gjør i disse første par ukene
utgangspunktet er vi også du inkluderer CS50 dot h.
Som er en header fil.
Mer om det i fremtiden.
>> Det er en fil som inneholder funksjoner at vi har skrevet for deg.
Og blant disse funksjonene er funksjoner for å få innspill
fra brukeren, som strenger, og tall og reelle tall, og mer.
Men det har også noen snarveier.
Den definerer en boolsk som en datatype.
C har ikke sant eller usant.
Men vi kan gi den oppfatningen av sann eller usann ved hjelp av dette biblioteket.
Og det heller ikke har en streng bygget inn før vi inkludere denne linjen.
Så denne linjen med kode forteller kompilatoren, hei, klang, se
inn for en hel denne filen haug med kode som CS50
har skrevet slik at alle som bruker denne filen
kan ta for gitt funksjoner de har lagt.
>> Så nå la meg gå videre og klare skjermen,
og hvis nysgjerrig jeg sier bare kontroll l hver gang for å tømme skjermen,
eller du kan skrive klart.
Jeg skal bare gå videre nå og typen gjør hallo, og alt er vel.
Fortsatt en uforståelige utgang, men det er ikke en feilaktig melding.
Men gjør jeg dot slash hei, og som en side, er dot slash ukjent for de fleste.
Det betyr bare, prikk betyr gjeldende katalog.
Så hvis du noen gang har brukt DOS eller Linux eller Unix
du kanskje har gjort noe som cd dot dot, der
dot dot betyr gå bakover i tid, eller gå bakover, eller høyere opp
i katalogen din.
Prikk betyr bare se på gjeldende katalog.
Jeg ønsker hallo, som er rett her.
Og ja, nå står det hallo Hannah.
Og hvis jeg endrer den igjen til Maria, rekompilere
det ville gjøre hallo, dot slash hei, holder programmet endring.
>> Men dette er fortsatt en ganske dumt program.
Hvis jeg ønsker å sende dette programmet, eller gi det til en venn,
eller gi det til Maria eller Hannah for den saks skyld, er det helt greit.
Jeg kan tilpasse den for dem begge, men det er aldri kommer til å være dynamisk.
De kan ikke endre det når den er kompilert ned i de nuller og enere.
Så det vi gjorde noe smartere?
Hva om, i stedet for hard-koding inn i programmet denne personens navn,
hva om vi bare får strengen på forespørsel?
>> Så med andre ord, la meg gjøre dette.
Jeg kommer til å rekompilere dette programmet.
Og la meg zoome inn på bunnen nå.
Gjør hallo dot slash hei.
Nå ingenting skjer.
Kan vi få en rask frivillig å gjøre noe skje?
Kom opp.
Hva er navnet ditt?
>> PANCHO: Pancho.
>> DAVID J. MALAN: Pacho?
Kom opp.
Når du får opp her, er dette kommer til å være veldig uimponerende,
men det er mer interessant enn meg å skrive det.
Hvis du ønsker å gå videre og skriv din navn, gjorde jeg dette programmet for deg.
Bare skriv inn navnet ditt.
Enter.
Fantastisk.
Ok, takk skal du ha veldig mye.
>> PANCHO: Tusen takk.
>> DAVID J. MALAN: OK.
>> [APPLAUSE]
>> Det var veldig snilt.
Vær så god.
Hva gjorde vi?
Så vi endelig, minst, gjort dette programmet dynamisk.
Nå er det fortsatt sikkert ved design uimponerende,
men vi endelig har muligheten nå å skrive kode på forhånd, mye
som forfatterne av printf, og deretter dynamisk
ADAPT basert på innspill vi er levert, enten av programmerer,
eller ved det menneskelige som faktisk samspill med programmet.
Så la oss faktisk nå prøve å gjøre et par andre konstruksjoner
og se om vi ikke kan gjøre programmene seg mer sofistikert.
Så la oss gå videre og i stedet for skriver dette fra bunnen av,
Jeg kommer til å gå inn i dagens kildekode, og all denne
er tilgjengelig på kursets nettside, og du kan dra og slippe det
inn i ditt eget miljø kommer fredag ​​gang problem
sett 1 gir deg instruksjoner, eller du kan
gjøre det på kommandolinjen som godt, men mer for å komme inn p sette en.
>> La oss se hva som er i dette programmet her kalt, huggorm dot c.
Nå har jeg allerede kommentert det, men hva er nytt?
Ved første øyekast, hvilken linje kode er helt nytt?
Sannsynligvis ikke fundamentalt uvant nå.
>> PUBLIKUM: [uhørbart]
DAVID J. MALAN: Ja, så int x lik få n.
Vi har aldri sett noe av dette før, men er sannsynligvis int
symbolet for hva slags variabel, [? fra?] et heltall.
Så int for heltall.
Det er bare å være mer konsis. x er bare tilfeldig.
x og y og z er fremdeles ganske rimelig for tall,
men generelt vil vi bruke ordene en gang våre programmer blir mer komplekse.
Få int, selvfølgelig, mye som get streng,
er trolig kommer til å få en int fra brukeren,
og så skal vi gjøre det samme med y.
Og tilsynelatende, selv om denne siste linje, 24, ser mer kompleks,
det kommer til å si summen av dette og at dette er andre ting.
>> Og legg merke prosent i sannsynligvis betegner hva?
Hvilken rolle spiller prosent Jeg tilsynelatende tjene?
Det er bare plassholdere.
Høyre?
Prosent s var for streng, prosent i er for heltall.
Det kommer til å bli prosent f for flyttall, som
er bare et tall med en desimal.
Med andre ord, et reelt tall.
Så la oss faktisk kompilere dette programmere virkelig rask og gjør huggorm.
Uff da.
God mulighet.
Så legger merke til her, hele denne tiden min brukeren navn for denne kontoen er jharvard.
Jeg er i CS50 IDE, aka IDE50.
Og nå i blått her, er en omtale, men fra miljøet, hvor jeg er.
Og faktisk, hvis jeg zoomer opp til toppen her, merker at jeg har en IDE50
og jeg ser dette ordet, hvis du slags snu hodet til siden, arbeidsområdet.
Kort sagt, det faktum at Jeg ser tilde slash arbeidsområde
betyr at i denne teksten basert kommandolinje miljø,
Jeg er i teksten tilsvarer Denne grafiske mappe opp her.
Så når jeg gjør dot slash huggorm, det sier ingen regel
for å gjøre målet huggorm stopp.
Jeg vet ikke hva det betyr, men det er dårlig for noen grunn.
Ingen slik fil eller katalog er enda mer tydelig.
Hvor er det da?
Basert på hvor jeg klikket å åpne filen tidligere.
Der kan det være?
>> Det er trolig i kilde ett m, for onsdag
og jeg kan se det, ja, hvis jeg åpner det opp.
Det er adderer dot c, men i denne teksten-basert miljø,
igjen, må jeg være super eksplisitt.
Hvis jeg ønsker å endre kataloger inn kilde én onsdag, trenger jeg å skrive,
cd plass kilde én Onsdag gå inn og nå
mine spør endringer gi meg et visuelt signal om at
Jeg er faktisk andre steder i mitt miljø,
men nå kan jeg gjør huggorm, synes det til å fungere,
dot slash huggorm, gi meg et heltall.
En.
Two.
Summen av en og to er tre.
Men hvis jeg ikke samarbeider, la oss se hva får int gjør.
Gi meg et heltall.
Nei.
Prøv på nytt.
OK.
Greit.
50.
Greit.
Så det endelig samarbeider.
Og det er noe av det funksjonalitet som disse funksjonene
kan ha innebygd for deg.
>> Så inne i gjennomføringen av få int, hva programmering
konstruere fra forrige uke er trolig i det å tvinge denne oppførselen retry,
prøve på nytt, prøve på nytt?
Ja, det er nok en slags loop.
Det kommer til å se syntaktisk forskjellig fra Scratch er blokker,
men det er faktisk hva som er inne i filen.
Og i et par ukers tid vil vi faktisk se på CS50 biblioteket
med hensyn til hva som er inni, men det er en løkke imponerende akkurat det.
>> La oss spille en dum liten spillet her med denne filen.
Tilstand null dot c.
Vi skal bare generelt begynner å telle på null.
Og jeg holder rulle forbi noen av tingene på toppen.
I blå her, avgrenset med alle av disse stjernene og skråstreker,
de av dere som programmerer før, hva er det?
Hvorfor fortsetter vi å hoppe over det?
Hva?
>> PUBLIKUM: Det er en kommentar.
>> DAVID J. MALAN: Yeah.
Det er bare en kommentar.
Dette er en kommentar til mennesker å lese, som i vårt tilfelle,
forteller oss hva navnet på filen er, som skrev den, og hva den gjør,
slik at du ikke trenger å lese gjennom koden
å vite hva denne filen handler om.
Det er bare en beskrivelse, men funksjonelt det er irrelevant.
Og jeg kan også slette det fra filen min og det har ingen innvirkning.
De saftige linjene er disse to første her, nå.
int main tomrommet er tilsvar av vår når grønt flagg klikket,
så vi kommer til å la det være for i dag, og vi vil komme tilbake,
til slutt, med hensyn til hva int og tomrommet er, men nå,
Legg merke til hva jeg har gjort her også, kan du også,
hvis du har en i kø kommentere, hvis du har
en trodde du ønsker å dele om en bestemt linje med kode,
stevne i C er å gjøre slash slash, og deretter noen få fyndig ord,
ikke en hel setning, vanligvis ikke et avsnitt,
som bare forklarer til deg, eller din TF eller andre lesere eller kolleger,
hva koden gjør.
Så i stedet for å lete på dette og slutte fra linjer
ni og 10, hvilke er dette gjør, i tråd åtte
Jeg bare gi en kommentar til spør brukeren om et heltall,
så jeg ikke trenger å tenke for hardt om hvilke linjer ni og 10 er.
Jeg bare vet at det er det kollektivt de gjør.
>> Hvordan?
Vel, her er spørsmålet.
Her er det få av int.
Og basert på den tidligere atferd, virker det som get int
er smart nok til å sørge for at det menneskelige samvirker og gir det
et heltall.
Men nå ser vi dette.
Og dette minner om Scratch.
Jeg påstår at jeg er analysere brukerens input,
men noe unøyaktig.
Og dette tilsynelatende i C er hvordan uttrykker vi en if annet, en gren,
en gaffel i veien, men jeg si noe unøyaktig.
Hva er feil i dette programmet?
Om lenger bak?
Yeah.
>> PUBLIKUM: [uhørlig] null.
>> DAVID J. MALAN: Yeah.
Så hvis jeg skriver i null, la oss vurdere akkurat dette tilfellet, eller hjørne tilfellet,
Hvis du vil.
Så hvis jeg skriver i null, som av blokker skal tilsynelatende ta tak i det?
If eller annet?
Den andre, og det kommer til å si, du plukket et negativt tall.
Og ja, er null ikke ment for å være positiv eller negativ,
og så det ville være feilaktig.
Det ville være en feil.
Så hvordan kan vi fikse dette?
Noen som aldri har programmert før?
Vil du ha--
>> PUBLIKUM: [uhørbart]
>> DAVID J. MALAN: Trekke?
>> PUBLIKUM: [uhørbart]
>> DAVID J. MALAN: Oh, har du?
Noen som aldri har programmert før.
Lyst til å prøve deg på Dette, i rød skjorte?
Kom opp.
Oh yeah, kom opp, hvis du ikke har noe imot.
Så aldri har programmert før, hva heter du?
LAUREN: Lauren.
DAVID J. MALAN: Lauren, all right.
Så fikse denne feilen for oss.
Du har ikke sett C, formodentlig, og sannsynligvis ingen andre språk.
Så fikse dette programmet for oss.
Hyggelig å møte ya.
Ikke noe press.
LAUREN: Yeah.
>> DAVID J. MALAN: Men igjen, hvis dette gamble går etter planen,
takeaway her vil være bare en gang, for å starte
å legge merke til mønstre og slutte fra eksisterende syntaks
hvordan du ellers måtte uttrykke selv, no pun intended, for
å fange noen ekstra scenario.
Så vi sier annet hvis.
printf, bra.
Og legg merke til med CS50 IDE, og frankly-- IDE
står for Integrated Development Environment.
Det er bare en fancy måte å si et program som hjelper deg program.
Det gjør brukervennlige ting som Når du skriver en parentes,
det automatisk gir deg den andre.
Antakelsen er at du er til slutt kommer til å ønske å skrive det,
og det også gjør det med sitater.
>> Så jeg liker linje 23.
99% av veien dit.
Noen ønsker å kiming i med et tips?
Jeg hørte semikolon fra publikum.
Good.
Så det helt.
Og nå vil jeg bare ha en liten bestyrtelse med linje 21.
Hvordan ønsker vi å uttrykke dette?
Hvilket spørsmål ønsker vi å spørre, tror du?
Så tidligere vi stilte spørsmålet, dersom n er større enn null, gjør dette.
Else, gjør det.
Så vi må velge en spørsmål å stille her.
PUBLIKUM: [uhørbart]
DAVID J. MALAN: Good.
Slik at hvis n er lik null.
Utmerket.
Så la oss ta en pause her.
Takk så mye for trosset dette.
La meg gi deg litt velfortjent stress ball, kanskje det.
Så vi er nesten der.
Faktisk Lauren, hvis du ikke gjør det tankene, la meg gjøre en tweak her,
bare for å være i samsvar med enda hva vi så i Scratch, hva
ønsker jeg å gjøre med linjer 21 og 24, bare igjen basert
om hvordan vi gjorde dette i Scratch, kanskje?
>> PUBLIKUM: Flytt den opp.
>> DAVID J. MALAN: Ja, flytte den opp.
Så ellers tilstand, den tredje, eller fjerde eller femte, eller endelig gren,
bør faktisk kommet etterpå, og det er bare ved konvensjon,
bare fordi hvis du vil.
Så jeg trenger å gjøre denne tweak.
Og jeg må sette min curly brace tilbake hit.
Og nå, vil dette programmet kompilere.
Vi er så nær, men det er en veldig, veldig subtil bug.
La oss se hva som skjer.
>> Først, la meg gå videre og zoome ut.
Jeg kommer til å gå videre og skriv gjøre tilstanden null.
Oh, løy jeg.
Nå kompilatoren er faktisk ganske smart.
Og jeg forstår ikke helt det er feilmelding.
Bruke et resultat av et oppdrag som en tilstand uten parentes,
er tydeligvis dårlig.
Men hva betyr det?
>> Vel igjen, på jakt etter mønstre i koden som vi har sett før,
hva er linje 17 faktisk gjør, selv om Lauren ment litt
ellers?
Yeah.
>> PUBLIKUM: [uhørbart]
DAVID J. MALAN: Yeah.
Så husk likhetstegnet, tilsynelatende som vi har brukt det før, er ikke lik.
Dens oppdrag, fra høyre til venstre.
Slik at linje 17 i øyeblikket er en tilstand, og det er
utføring kode inne i parentes, men når den koden utfører,
hva som skjer med verdien null?
Hva som skjer med verdien av n?
Å bli null.
Så hvis n er blitt null, og igjen, som per i forrige uke,
vi generelt si at null er falsk og en er sann,
eller ja er ett og ingen er null.
Så sant og usant, en og 0.
Hvis n pr linje 17 har vært gitt verdien 0, er null sant?
Nei.
Per definisjon er null falsk.
Det er stevnet vi er kommer til å klamre seg til fremover.
Så vil linjene 18, 19 og 20 stadig søke nå, logisk?
De kan ikke.
Så vi spurte spørsmålet men ikke helt nøyaktig,
og du ville ikke vite dette med mindre du har sett det, løsningen i C
er når du ønsker å uttrykke likestilling, sier du likeverdige.
Så likhetstegn var allerede brukt opp ved tildeling, fra høyre til venstre.
Tilsvarer tilsvarer midler lik.
Og hvis du virkelig vil hjernen din å være bøyd, i Javascript og PHP,
det er lik lik lik, som bety noe helt annet,
men vi får til det før lenge.
>> Så dette er en enkel løsning, men innser super enkelt å gjøre denne feilen,
og lurer på og kamp for minutter, hvis ikke en time,
hvorfor er min kode ikke utførende som jeg har tenkt?
Det er fordi du ikke forteller det nettopp det du mente.
Så det var nesten perfekt, og det var flott
at vi snublet over disse to litt ting fordi nå hvis vi fikse dem,
og jeg gjør tilstanden null dot slash tilstand null,
Jeg ønsker et heltall please.
La oss se.
Nei.
Det kommer til å tvinge meg til å gjøre det.
Så 42.
Jeg plukket et positivt tall.
Så nå hvordan kan jeg bevise dette programmet riktig?
Hvis du er en matematiker, kan du ikke virkelig bevise dette ved prøving og feiling,
ikke sant?
Du kan ikke bare bevis eksempel, men i det minste
som programmerer vi ikke skal prøve å bevise for nå
at dette er faktisk riktig, men jeg bør nok
teste noen representative tilfeller.
>> Jeg har testet 42.
Jeg kunne teste 43.
Jeg kunne teste 44.
Test 45.
Høyre?
Men jeg kunne gjøre dette en veldig lang tid.
Hva ville være litt mer interessante saker å prøve?
PUBLIKUM: [uhørlig] null.
DAVID J. MALAN: Så null.
Sikkert.
Og god, har vi det denne gangen, takket være Lauren ny kode.
Hva er en annen god sak å prøve?
PUBLIKUM: Negativ en.
>> DAVID J. MALAN: Negative en, og kanskje noe litt større,
så kanskje negative 42, men generelt, når
teste programmene dine fremover, er du
kommer til å ønske å tenke til deg selv, som hva
er de grunnleggende forskjellige tilfeller.
Og jeg tør si en negativ sak, en positiv tilfelle, og en null-sak
ganske mye runder disse ut.
La oss se på en variant av dette selv.
Forhold en.
Dette er en riktig løsning her, slik at du får se to og online,
Hvis du går gjennom walkthroughs, vil vanligvis
øke disse trinnvis inntil vi får akkurat den rette tilnærmingen.
Hva om vi ønsket å spørre to spørsmål på en gang?
>> La meg åpne opp dette i stedet.
Ikke-svitsj, av grunner vi får se en annen gang.
Hva er nytt syntaktisk her?
Jeg er for tiden spiller et spill der datamaskinen er å fortelle
meg, gi meg et heltall mellom ett og ti,
og så skal jeg bedømme brukerens input.
På engelsk, basert på koden du ser her
i blått, hva er dette programmet gjør?
PUBLIKUM: [uhørbart] plukket et stort eller lite antall.
DAVID J. MALAN: Yeah.
Det er bare dømmende om Jeg plukket en stor eller medium,
eller et lite antall basert på en svært vilkårlig definisjon av små, medium,
og store her, men varsel syntaksen som er nytt er dette.
Det er ikke mindre enn int eller lik signere, eller større enn eller lik signere,
hvor en er over den andre, at du kan uttrykke som Microsoft Word.
Så i et programmeringsspråk du vanligvis bare gjør to tegn,
ene etter den andre.
Og hva betyr dette sannsynligvis representere, tegnet tegnet.
PUBLIKUM: [uhørbart]
DAVID J. MALAN: Yeah.
Det betyr bare og fordi det viser seg at forfatterne av C
brukes en enkelt-tegn, som du kanskje tror
ville være perfekt for den oppfatningen av og er allerede brukt opp,
så tegnet ampersand faktisk fanger tilfelle vi faktisk ønsker.
>> Så la oss nå snuble over to ting.
La meg gå videre og åpne opp en.
Noe som er litt bekymringsfullt.
Unøyaktighet dot c.
La meg presentere to ting her.
One, merker at vi kan gjøre matematikk, som like før når
vi pluss to tall, x og y.
Hva er dette programmet tilsynelatende gjør?
Jeg har ikke kommentert det ennå, og jeg har introdusert prosent f,
men jeg sa raskt tidligere prosent f betyr flyttall
verdi, som er reelt tall.
Noe med en desimal punkt, som ikke er et heltall.
Hva synes du om dette programmet er prøver å vise meg på skjermen?
Yeah?
PUBLIKUM: Resultatet av en over 10.
DAVID J. MALAN: Yeah.
Hva er resultatet av ett dividert med 10.
Høyre, fordi alle du har sannsynligvis vokst opp vel vitende om at en over 10
er hva?
Ja, det er bare 1/10 eller 0,1.
Høyre?
Så la oss se hva dette faktisk er.
Så la meg gå videre og lagre dette.
La meg gå ned her.
Gjør unøyaktighet dot slash upresishet, og legger merke til også
i et Linux-miljø, trenger du ikke å skrive ut imprecision og ta
hele dagen.
Det generelt, hvis du treffer Tab, det vil fullføre din tanke for deg,
basert på ordene som er tilgjengelig i den gjeldende katalogen.
OK.
Så du hadde rett.
En dividert med 10 er, i virkeligheten, 0,1.
Men jeg er litt nysgjerrig.
Og det viser seg printf støtter noen funksjoner
der du kan angi mer enn standard antall desimaler.
Så hvis jeg ønsker å se 10 desimal poeng jeg kan gjøre prosent,
for plassholder symbol, dot 10 for, gi meg 10 desimaler,
og deretter fortsatt flytende punktet verdi, og, som en side,
hva er dette backslash n tilsynelatende vi fortsette å bruke?
Det viser seg at det er en symbol for en ny linje.
Det er veldig tydelig måte si til datamaskinen,
flytte markøren til neste linjen når du er ferdig.
Og vi får se hva som skjer når vi ikke gjør det.
>> La meg rekompilere gjøre unøyaktighet.
Nå dot slash unøyaktighet.
OK.
Fortsatt rett.
Én dividert med 10.
Nå har jeg fått en litt nysgjerrig, skjønt.
Hva om jeg ser 20 desimal påpeker, rekompilere, reprise,
og som en side for hastighet, kan du også bruke
opp og ned pilene til å bla gjennom din historie,
slik at du ikke trenger å holde retyping disse kommandoene, skriver.
He.
Jeg fikk ikke vite at i grunnskolen.
Greit, så la meg se ut som 29 steder ut.
Kanskje det er bare et lykketreff.
Kanskje min datamaskin opptrer merkelig.
Det er ikke en ting, ikke sant?
Det gjør noe deterministisk.
Så sørg for unøyaktighet.
OK, det er messed up.
Så hva er det som skjer?
>> Så tilsynelatende din Læreren har ligget
til dere alle for denne gangen for grunnene til at vi vil se før lenge.
Men la oss avslutte med et annet program.
Dette er et lite program noen skrev for noen år siden,
og det er faktisk en del av en konkurranse.
Ingen faktisk skriver kode som dette, og hvis du gjør det,
Dette er stil et problem.
Men folk gjør dette for å bli best.
Å skrive den mest forvirrende ser program som
likevel gjør noe interessant.
Og meldingen jeg trodde vi skulle forlate på i dag, før Colton spiller oss ut her,
er å kjøre dette programmet, som, selv i bare ved hjelp
C i denne tekstbasert miljø, gir oss dette.
Dammit.
>> [LAUGHTER]
>> Vent litt.
[Uhørbart] c dash l m.
Du kommer til å se den magiske besvergelse at vi får se før lenge.
[Uhørbart] Greit.
Og nå kan du til og med gjøre ting som dette.
Det er alt.
For CS50 vi vil se deg på fredag.
>> [MUSIC SPILLE]
>> [APPLAUSE]