[VIDEO PLAYBACK] -En Triumf matematisk og mekaniske evner er dette store nye automatiske lommeregner på Harvard University. Indviklede problemer i matematik sat gennem maskinen i kodet form på bånd nøjagtigt løst på en brøkdel af den tid, for human beregning. Designet til at fremskynde alle former for matematiske og videnskabelige forskning, den gigantiske mekaniske hjerne vil arbejde for den amerikanske flåde, indtil krigens slutning. [END AFSPIL] DAVID J. MALAN: Dette er CS50. Fortiden var en magisk sted, men hvis du nogensinde har spekulerede på, hvad enheden er i Harvard Science Center, det er faktisk en del af Harvard Mark I, og det er udstillet der nu i de sidste mange år. Og hvad du vil se indlejret i problemet sæt en er et kig bag kulisserne på, hvad den pågældende enhed gjorde, og gør, fra professor Harry Lewis, som er i datalogi afdelingen her. Så mere om det i bare en smule. Men i dag begynder vi at overgangen fra sidste uge til denne, og vi vil bringe omtale af et foto her det er faktisk ret berømt. Er der nogen vide, hvad dette her er på skærmen? I hvert fald ifølge myten. Ja. PUBLIKUM: Den første virus. DAVID J. MALAN: Så det var angiveligt den allerførste egentlige fejl i en computer. Nu i virkeligheden ordet bug, for en fejl i et program, har været hos os for nogle tid i den fysiske verden, og dette var en af ​​de første dokumenterede tider, hvor en person faktisk plukkede en stor møl ud af Mark II computer, sætte det i bindemidlet, og derefter indspillet det som den første kendte bug at faktisk er blevet fundet fysisk. Så derfor blev indtastet at i dagens lore. Alt fra sidste uge er tilgængelig online. Især ressourcer, som du måske ikke nødvendigvis meddelelsen, herunder hvis kommer her personligt. Så en af ​​de pædagogiske stipendiater hver år gør en kanonisk sæt af noter, så du ikke behøver at holde dit hoved ned, forsøger at transskribere de fleste noget der kunne ske her i klassen. Så indse, at de såkaldte [? Scribd?] Noter er online, sikkert dias og kildekode, som vi bruger i klassen. Vi gør fuldtekst udskrifter tilgængelige samt. Så hvis du husker svagt nogle sigt, og ønsker at slå det op lidt lettere, indse, at alle af det er søgbare online. Samt walkthroughs så godt. Begynder faktisk i dag vi til at se på et lavere niveau programmeringssprog, snart at være kendt til os som C, og det er meget nemt at slags fare vild efter blot et par øjeblikke tid, og derefter slags undren hvordan vi kom faktisk til nogle mere komplekst eksempel fra den enkleste. Og så indser vi får kirsebær plukke under klassen nogle De repræsentative eksempler, men indse, at så meget mere er også tilgængelige online, så du kan arbejde gennem det i dit eget tempo, men du er mest komfortable. Men vi slap med programmer, der netop dette. Så jeg klikker på den grønne flag, og hvad betyder dette program gøre? Siger, hallo, verden. Det gør katten siger hej i sin lille verden på den øverste venstre side af Scratch brugergrænseflade. Men vi begyndte at indføre nogle terminologi i sidste uge. Og så, ting som dette vi kaldte hvad? Hvad kunne være den generiske betegnelse for dette? Ja. En metode eller en erklæring. Sikker på, det er en handling. Gør dette. Og alligevel var der andre former til bunden, Ud over disse såkaldte erklæring, de var også ting som dette, som vi kaldte hvad? Ja. Så en løkke. Og i dette tilfælde, denne ting gentagelser, naturligvis, 10 gange. Der er et evigt blok. Der er et par andre. Og i dag vil vi se, hvordan du omsætte dette til en mere moderne verden, hvis du vil, selv om det er vil blive vist ved første øjekast at være meget mere Arcane. Men dem var faktisk sløjfer. Og så har vi ting som dette, som havde denne form, og væsentlige spørgsmål. Og vi henvist til disse som hvad? PUBLIKUM: boolsk udtryk. DAVID J. MALAN: Ja. Boolsk udtryk. Noget, som er enten sandt eller falsk, ja eller nej, en eller nul, men du ønsker at se i verden. Men vi kaldte dem boolesk udtryk, og vi sætte dem i forhold, eller filialer. Og i en verden af Scratch, alt pænt interlocks i form af sin form, hvis det giver logisk mening at gøre det, men du behøver ikke at stoppe ved bare gøre én ting betinget, du kan have en legendarisk gaffel i vejen og gøre hverken dette eller hint, hvis betingelsen er sand eller ej. Og så, som du kan se, hvis du ikke allerede har, du kan endda reden disse blokke. Så Scratch vokser til at fylde de figurer at du måske ønsker at indsætte i det, så du kan faktisk udtrykke de fleste nogen logik, som du måske ønsker at gøre. Nu et par ord af annoncering både her og New Haven. Så sektionering begynder i dag. Webadressen for dette er på kursets hjemmeside, for dem ukendte. Sektioner vil være en mulighed for at komme sammen i en langt mere intimt miljø end [? Sanders?] Tillader, med 10 til 20 klassekammerater med en undervisning stipendiat ved forskellige spor, og forskellige hastigheder, hvis du ønsker det. Faktisk Kurset tilbyder forskellige sektioner for de mindre behagelig, mere komfortable, og et sted i mellem, og den rolle, tommelfinger her, er der er ingen formel definition, men hvis du er mindre behagelig, du slags kender det. Du er lidt frygtløs om idé om at træde fod, måske tilbage i klasseværelset, eller viser op til en mellem afsnit. Hvis du har været programmering, siden du var seks år, mere komfortabel, måske til dig. Og hvis det er sådan en toss-up, det er præcis, hvad det i mellem menes at være. Nu, i mellemtiden, for en klasse denne størrelse, det tager os temmelig lang tid at sektion alle, så vi har såkaldte, super sektioner, kommer op denne weekend og begyndelsen af ​​næste uge, så tag et kig på kursets hjemmeside for dem, der er naturligvis bred, og også filmet for dem der ikke kan gøre dem. Og §§ selv vil begynde i uge tre af CS50 nul indeks. Problem sæt 0 er allerede på kursets hjemmeside. Og indse, at du har ni sene dage denne semester. Så dette er en opgradering fra sidste år, da vi havde fem sene dage. Så hvis du spekulerer, Vi har ni problem sæt. Du har ni sene dage, der hver især Du kan kun bruge én pr uge på. Der effektivt gør alle problemet sætter skyldes fredag men målet er at sætte en lille bit af psykisk pres på dig at forsøge at få ting i torsdag fordi som du snart vil opdage, for bedre eller værre, de fleste alt i software-verdenen ender tager meget længere tid end du forventer. Så overveje det en slags af mulighed for at hjælpe selv at målrette torsdag men trøste, at ja, alt skyldes fredag. Og hvis du sender dem på Torsdag, det er vidunderligt. Der er ingen bonuspoint eller ekstra kredit for at opfylde denne frist. Det har betydet, at kun en krykke. Og kontortid, både her og i New Haven, personligt, hvis du gerne vil mødes med nogen af ​​vores kurser undervisning stipendiater og CA om bistand. Okay. Så nu, lad os gøre det mere virkeligt. Og et øjeblik det kommer til at starte at få lidt mere mystiske, men meget hurtigt på fredag ​​og næste uge vil vi være stand til at gøre så meget mere end vi kunne hidtil i Scratch. Så vi introducerede kode sidste uge, omend pictoral. Det var puslespilsbrikker. Og vi formaliseret, at det er noget, der hedder kildekode, men ville kunne se ud? Tja, det kiggede lidt noget som dette. Og i virkeligheden blot at slags drille, hvor vi kan gå med dette. Jeg har tænkt mig at gå videre og åbner et vindue her, og jeg bare at vælge Ny fil. Og jeg har tænkt mig at gemme denne fil som noget lignende hej dot c. Mere om det valg af ord i bare et øjeblik. Og det er sådan nogen måske gå om at skrive et program. Medtag standard I / O-dot t, int main ugyldig, og derefter åbne krøllet tandbøjle tæt krøllet tandbøjle, printf hej komma verden, backslash n, semikolon, Gem, gjort. OK. Jeg har skrevet min første program, men det går at være utrolig underwhelmed fordi når jeg faktisk køre dette program, naturligvis, ved først at skrive gør hej, og derefter dot skråstreg hej, og vi vil gå gennem denne meget mere detaljeret i et øjeblik, det er alt den gør. Ikke pop åbne nogen vinduer. Det gør ikke noget særligt fancy. Alt det gør, er, hvad jeg fortalte det til gør, men hvordan får vi til det? Og hvordan kan vi bygge videre på det? Nå, lad os introducere et par forskellige koncepter her. Så en, vi er ved at starte ved hjælp af et program kaldet en compiler. En compiler eksisterer for Mac OS, Windows, Linux, helst antal operativsystemer, og vi vil snart præsentere dig for miljø, som vi vil bruge, men en compiler er blot en generel betegnelse for et stykke software der tager kildekode og producerer objektkode fra det. Med andre ord, hvis du have som input din kilde kode, noget i retning af hvad jeg lige har skrevet, det i sidste ende producerer objektkode. Og objekt kode er egentlig bare en fancy måde at sige det output nul-og ens. Med andre ord, kilde kode, selvom det er kommer til at se lidt mystisk, og lidt mindre venligt end Scratch ved første øjekast, Det er i det mindste noget at vi mennesker kan forstå. Den slags ser ud og lyder som Engelsk, selvom det er meget kortfattet. Programmeringen i nul-og ens, som vores forgængere havde at gøre, for nogle år siden, var ikke en særligt sjov udfordring. Og dog, det er, hvad det computeren stadig forstår. Så compiler får os fra Kildekoden til at gøre indsigelse kode. Det er som at åbne en fil med compiler, og når du gemmer det, du får disse nuller og ettaller. Så vi vil se, hvordan du gør at på bare et øjeblik. Men lad os nu forsøge at give en bro mellem sidste uge, og det, så selv når vi bliver hængt op på ting som krøllede parenteser, og semikoloner og parenteser og alle disse intellektuelt interessant aspekter af programmering, der meget forståeligt tur folk op tidligt, indse, at alle de ideer i dag, er de samme som sidst. Så sidste, vi så dette eksempel her, Hello World program. Nå, starter i dag, hvis vi ønsker at gennemføre denne samme program, det kommer til at se en lidt noget som dette. Og vi vil forklare inden længe hvad int, og vigtigste, og ugyldig, og alt dette er, men i det mindste jeg kan se her allerede den velkendte Hello World. I mellemtiden ting som funktion, siger hej, er ganske enkelt vil være en meget simpel erklæring som denne. Printf hello verden, med nogle citerer, med en omvendt skråstreg, med et semikolon, men mere på, at komme. Loops, i mellemtiden, det er en løkke, der, selvfølgelig, siger hej verden for evigt, og denne ene kommer til at se en lidt mærkelig end i den sidste, men hvis jeg siger noget lignende, mens sandt, I kan derefter udskrive Hej Verden igen og igen og igen og igen. Og så, som du kan slags af begynde at udlede her, denne konvention for at bruge krøllede parenteser er venlig ligesom omfavne den indrykket linje kode der. Den printf linje kode meget gerne den gule brik op over. Så vi kommer ikke til at sige for evigt, vi kommer til at sige, mens sand, men vi vil se, hvorfor der er i bare en smule. I mellemtiden, hvis vi har en løkke som denne, hvor du gentager noget et endeligt antal gange, denne ene også er det kommer til at tage lidt tilvænning til, men det kommer til at sige til int Jeg får nul, jeg mindre end 10, jeg ++, og derefter printf igen. Men der vil være mønstre. Og for dem af jer kender med AP Computer Science, eller Java, eller en række andre sprog, næsten alle disse konstruktioner hidtil skal se det meste bekendt. Så variabel. Så her er en simpel Scratch uddrag, der sætter en variabel kaldet til nul, og derefter for evigt siger tælleren, og derefter det ændrer tælleren med én. Så det starter med nul, og derefter en, to, tre. Nå, hvordan kan vi præsentere det i denne nye sprog lidt tilsvarende? Int counter lig nul, mens sandt, hvilket er, at samme idé fra før gøre noget evigt, og jeg bare at printf. Og nu er det at få lidt mærkeligt, procent i, men mere om det at komme, men disse ideer er nøjagtig det samme. Vi har lige nu nødt til at overholde syntaksen, at computeren er kommer til at kræve af os. Boolesk udtryk, noget lignende sx mindre end y eller x mindre end y, og y er mindre end z. Det kommer til at se lidt noget som dette, med parenteser bare ligesom i matematik for god foranstaltning til bare sikre, at rækkefølgen af ​​operationer er så vi agter. Og nu, betingelser. Så hvis x er mindre end y, siger x er mindre end y, ellers hvis x er større end y, siger x er større end y, ellers logisk, skal x være lig med y. Så du kan implementere noget som dette i Scratch, eller du kan implementere den i denne syntaks. Og igen, de krøllede parenteser er lidt giver os den samme form som puslespillet stykker, men syntaksen nu, er måske begynder at følge nogle mønstre. Så hvad betyder dette giver os her? Så vi er tilbage derefter på vores hovedprogrammet. Lad os faktisk, nu, gøre noget med det. Så i denne allerførste line vi ser skarpe omfatter, standard I / O, dot h, og derefter nogle underlige vinkel parentes under dette. int main ugyldig, og derefter printf hej verden. Så bare tage et skridt. Nogen der har aldrig programmeret før, i det mindste forklare en af ​​disse linjer. Brug af måske nogle af jargon af sidste uge. Hvad er printf, for eksempel? Ja. PUBLIKUM: [uhørligt] DAVID J. MALAN: Ja. Det er en funktion, eller en erklæring, fra sidste uges terminologi. Og det er en handling der gør noget. Nu er denne funktion, eller denne erklæring, gør det ser ud til at tage nogen form for input? Og i hvilken forstand gør det synes at tage input, hvis ja? Input, hvad mener jeg med det? Ja. PUBLIKUM: [uhørligt] DAVID J. MALAN: Ja. Så Skrab ud et par puslespilsbrikker hvor du kan parametrize det. Du kan fortælle gentagelse blokere, hvor mange gange til at gentage, så det var et input af slags, og ligesom Scratch havde en lille hvid pladsholder for det nummer, du vil skrive i, så bruger vi i dette tekst verdens parenteser at give os, at cirkulær form ind, som vi kan sætte vores input. Efter alt, snesevis af år siden når dette sprog, kaldet C, blev opfundet ingen forudset det er en af ​​os, disse nogle år senere, vi havde ønsker en funktion, der siger hej. Højre? Det ville være rart, hvis der var en brik eller et nøgleord, der hedder hej, at bogstaveligt talt bare siger hej. Men vi har ikke brug for det. Vi kan have noget meget lavere plan, som et generisk print kommando, der tager input, og udskriver hvad vi ønsker. Så opdager nu mønstret der vil begynde at dukke op. Åbne paren tæt paren er tilsyneladende omfatter input, og så ser jeg dobbelt citater i begge ender. Der er stadig underligt backslash n, men forhåbentlig nu er du kan begynde at visualisere det mindste at printf tager i en eller anden form for input. Ikke så brugervenligt som Skrab, men det er bare ligesom at have sluttet en vis værdi der. Okay, lad os nu faktisk gøre noget med dette. Så nogle af jer måske kender fra der gik klassen før, chattede med venner, at i mange år vi brugte noget, der hedder det CS50 apparatet. Dette var en term, der beskriver en teknologi kaldes den virtuelle maskine, som er et stykke software, som din forgængere ville hente fra kursets hjemmeside gratis. De vil også hente en gratis stykke software kaldet en hypervisor, noget, der hedder ligesom VMware, eller VirtualBox, eller en række af andre værktøjer, og på deres Mac eller pc eller hvad computer de havde sidste år og i de forløbne år, de ville dobbeltklikke på et ikon til at køre denne software kaldet hypervisor. Og derefter inde i programmet de ville åbne CS50 apparatet. Og virkningen var, at om en forgænger af jeres kørte Mac OS eller Vinduer, han eller hun derefter havde efterfølgende et nyt vindue på deres Skærmen kører CS50 miljø. Så en virtuel maskine kan du køre en operativsystem inde i en anden, og det er præcis, hvad vi gjorde. Gennem det meste af kurset, vi bruge et operativsystem kaldet Linux, specielt Ubuntu Linux, og dette er en meget flot måde i de forløbne år af at sikre, at alle i løbet lige haft det samme miljø. Og du kan bruge nogen form for computer, som du rent faktisk ønsker. Blandt de ulemper, selv om, var det var ligesom to gigabyte at downloade denne ting. Det gjorde ikke nødvendigvis arbejde super godt på mennesker, hvis computere, der måske kun havde en koncert eller så RAM, eller ikke for mange gigahertz af CPU-hastighed, og så i år, for denne og andre grunde, har vi været overgang til dette miljø. Den såkaldte CS50 IDE, som er baseret på open source-software, og en understøttet platform at et firma kaldet Cloud9 støtter i Europa, at tillader os at have væsentlige at nøjagtig samme miljø som i forløbne år, men i den såkaldte sky. Så hvad er skyen? Du har sikkert klikket dens ikon på din Mac eller pc. Hvad er skyen? Ja? Lidt højere. Ja. Det er bare en flok computere andetsteds, der lagrer data og køre software og lignende. Så det er egentlig bare til ordet de jure beskrive [? udlejes?] computere, der lever andre steder. At du, dig selv, ikke nødvendigvis ejer. Så når dine data, eller din programmer, er i skyen, det betyder bare, det er på nogen andens computere andre steder, og ikke, sandsynligvis på fysisk bærbar eller stationær. Og så det er hvad CS50 IDE nu er. Fremover vil du gå til en bestemt URL, der vil introducere dig til, i problemer sæt 1, senere på uge, der vil så, når du logger på, give dig dette miljø. Og ligesom Scratch havde en par forskellige paneler, der er involveret, så gør CS50 s IDE har præcis det. I øverste venstre side her, er du kommer til at se et velkendt fil browser. Så nogen af ​​de filer, du lagt i dette miljø er lige til at blive opført der. Filer og mapper. På toppen lige her, du kommer til at se et sted hvor du kan faktisk skrive din kode. Først i C, senere i sigt i PHP og JavaScript, og måske til endelig projekter, Ruby eller Java eller Python eller en række sprog er understøttet i dette miljø. Det er ikke på alle bundet at CS50 specifikt. Og derefter i det nederste hjørne her, især for dem mere komfortable, du har noget kaldes et terminalvindue. Og denne terminal vindue tillader dig til at udføre enhver kommando, som du ønsker i denne sky miljø. Det giver dig mulighed for at installere ekstra software som du ønsker, fordi du har såkaldte root, eller administratorrettigheder. Så med andre ord, selv om det i sidste ende hostet i skyen, og selv om vi har forenklet det til en vis grad som standard, bogstaveligt indføre, takket være Dan Armendariz, og Dino, og Dan Bradley på CS50 hold over forbi mange måneder, en mindre behagelig tilstand, der skjuler en masse af de oprindeligt forvirrende distraktioner. Alt, hvad der eksisterer for at repræsenterer et typisk computersystem at du kan bruge i den virkelige verden. Så hvad betyder alt dette, og hvad kan vi egentlig gøre med det? Lad os faktisk tage et kig på et program. Så jeg har tænkt mig at åbne op for faktiske miljø her, som er lige vores Chrome browser, som kunne være Firefox, kunne være Internet Explorer, eller en anden browser samt. Det er fuldt screenet her for øjeblikket. Og jeg vil faktisk drille fra hinanden, hvad dette program var. Så lad os tage et kig, ved at zoome ind op top, hvad jeg gjorde, og hvordan jeg kom her. Så her er de, nøjagtig samme linjer kode. Så dette er redegørelsen, som du nævnte tidligere. Funktionen, der siger hej. De krøllede parenteser, på linie fire og linie seks, formentlig slags indhylle denne linje til at forbinde det med essensen af ​​mit program. Så ja, dette søgeord vigtigste, det er deroppe på linje tre, du kan tænke på det som det, der svarer af, at når grønne flag klikkede, blok i Scratch. Så det er alt, vi har her, er, når grønt flag klikkede, udskrive eller sige, Hej Verden. Men lad os tage et gæt, nu, hvad denne første, mere mystiske linje, er. Sharp indbefatter åben vinklet beslag, standard I / O-dot h, lukke vinklet beslag. Hvad er det måske gør, især hvis du har programmeret før i et andet sprog. Ja? PUBLIKUM: [uhørligt] DAVID J. MALAN: Ja. Præcis. Så dette er at give dig adgang til en bibliotek, så at sige, af funktioner. Og et bibliotek af funktioner er funktioner, som en anden skrev, enten for nylig eller længe siden, så du behøver ikke at genopfinde hjulet. For eksempel har vi ikke nødt til at vide, i 2015, hvordan man skriver kode, som sætter et tegn på min skærm. En anden har regnede med, at ud med printf funktion så jeg kan sortere af abstrakt væk fra det, eller et lag oven på hans eller hendes kode, og nu bare tage for givet, at ethvert program jeg skriver kan udskrive noget på skærmen. Så denne første linie der i trin et omfatter den såkaldte header fil for standard biblioteket. Så se, det sprog, som vi nu arbejder havde en standard bibliotek med masser af funktioner. Printf er en af ​​dem, og at første linje kode betyder at give mig adgang til disse funktioner, så at jeg behøver ikke at genopfinde den hjulet. Lad os nu gå til bunden vindue og gøre præcis, hvad jeg gjorde før. For et øjeblik siden, da jeg var susende gennem koden, skrive det ud for første gang, Jeg meget hurtigt skrevet, gør hej. Hvad var det for noget ville du gætte? Hvad var jeg gør? Ja? Glem det. Det er ok. Ja. PUBLIKUM: Kompilering det. DAVID J. MALAN: Ja. Det var bare at kompilere den. Højre? Selv om dette er helt uvant til dig, er det temmelig engelsk lignende. Det er bestemt ikke nuller og dem, så jeg stadig nødt til at køre det gennem denne såkaldte program, en compiler, er, at gå at tage det som input og producerer output. Og i det mindste for nu, i denne Linux-miljø, men dette er ikke en forudsætning, dette er blot, hvor vi vil begynde, du generelt interagere med edb-systemer som dette af en såkaldt kommandolinje. Så med en blinkende hurtig og dit tastatur, og ikke så meget din mus, og ikke så meget vinduer og ikoner og menuer, snarere alt er tekstmæssige. Og selv om det føles, ved første blik, måske, ligesom et skridt tilbage, det er faktisk en langt mere kraftfuld og udtryksfuld måde til styring af en computer især som du, dig selv, bliver mere komfortable fra mindre. Det kommer til at give dig mulighed for at gøre en masse flere ting end blot, hvad Microsoft eller Apple tillader dig at gøre med deres grafiske operativsystem. Så når jeg ramte Enter, nu, der sker ikke noget denne gang fordi tilsyneladende programmet hej er opdateret. Og hvad var kommandoen Jeg løb efter det? Dot skråstreg hej, og goddag verden. Lad os nu tage et skridt bakke for bare et øjeblik. Det viser sig, gør hej er bare en forenklet måde at kompilere et program. Lad os bare indføre ét stykke af jargon, men derefter bevæge sig væk fra det, da det ikke er alt, interessant for nutidens formål. Compiler vil vi begynde at bruge kaldes Dunk, for C-sprog. Og det er et program, der køres lige ligesom vi gjorde på kommandolinjen der. Og så hvis jeg ønsker at kompilere et program, som jeg har skrevet i en fil kaldet hej dot c, jeg bogstaveligt talt bare skrive klang hej c komme ind. Det sjove er, af historiske grunde, hvis jeg ikke angiver navn af programmet at jeg ønsker at output, hvis jeg ikke angive et filnavn for de nuller og dem, en meget underlig konventionen blev vedtaget år siden hvor det følte slags en godt svar på det tidspunkt, godt lad os bare vilkårligt kalder første program vi kompilere en prik ud. A kommer først i alfabetet. Ud, er det output. Så vi vil kalde programmet som standard en prik ud. Og det er fint, fordi hvis jeg ønsker at køre programmet i denne tekst baseret miljø, jeg bare skrive dot skråstreg en prik ud ind. Og det ville køre nøjagtigt som før. Så lad os se, at rigtig hurtigt. Så hvis jeg går tilbage til min kildekoden i CS50 IDE, og jeg i stedet gøre det, klang hej barneseng c indtaste, varsel intet synes at ske, men næsten altid denne Linux-miljø, når intet dårligt synes at ske, at betyder noget godt faktisk skete. Hvis du ikke kan se en fejl besked, alt er nok godt. Og ja, hvis jeg nu gør prik skråstreg en prik ud ind, jeg har kørt min samme program. Jeg har stadig hej programmet fra tidligere, fordi ja, det er kommer til at være så meget pænere bare skriv gøre i stedet for at huske disse besværgelser af kommandoer, men lad os se, hvordan vi kunne forbedre på dette, alligevel. Så det er kommandoen at kompilere koden. Dette er kommandoen til at køre den kompileret kode derefter. Hvordan kan jeg angive et filnavn? Jamen lad os bare indføre endnu et stykke af jargon. Når du er i denne tekstbaseret miljø, du vil ønsker at angive ting kaldet kommandolinjeargumenter. Hvilket er bare en fancy måde at sige, andre ord på den meddelelse, der tweak adfærd uanset program, du kører. Så specifikt program, jeg er kører, ved at skrive navnet klang, er det program hedder Dunk. Så dette er, eller den gamle skole svarer til at dobbeltklikke på Microsoft Word eller nogle programmets ikon. Jeg stedet blot at skrive sit navn, men i denne version af kommandoen, Jeg så have bindestreg o plads hej plads hej dot c. Så selvom du har aldrig spillet i denne verden før, bare tage et gæt hvad betyder dash o hej gøre? Eller hvad betyder det fortæller klang at gøre? Ja. PUBLIKUM: [uhørligt] DAVID J. MALAN: Ja. Det bare sætter filens output til at være hello stedet for sillier en prik ud. Og, ja, lad os prøve dette. Så hvis jeg nu gør, først lad os gøre det, r m hej. Det er fjerne. Og det kommer til at sige fjerne almindelig fil hej, som er unødvendigt mystiske, men det bare midler at gøre, du vil slette filen, og jeg skriver y for ja. Og læg mærke til, hvis du var et blik på toppen venstre, det forsvinder fra deroppe. Lad mig nu gøre klang streg o, og Jeg har tænkt mig at gå videre og gøre hej, i alle hætter, hej dot c. Nu, hvis jeg gør dot skråstreg hej, hvad ville du forvente? Måske er det små bogstaver. Måske er det ikke. Lad os se. Ingen sådan fil eller mappe. Og vi kan slags snyde ved bare at kigge på øverst til venstre. Hvad gjorde jeg naturligvis gemme programmet som? Alle hætter hej. Så ja, det er at gå at gøre en forskel. Så nu hej verden er tilbage. Nu er dette er alt fint og godt, og alle meget sind-bedøvende, til slags kører fast i disse detaljer, men forstå dem er god. Skrive ud disse i stigende grad lange besværgelser kommer ikke til at være særlig sjovt, så mennesker i verden opfandt et andet program, for nogle år siden, kaldet gør, at ganske enkelt giver dig mulighed for at skrive make, navnet på programmet du ønsker at gøre, og gøre er smart, fordi det vil se ud i den aktuelle mappe, alias biblioteket, og hvis du har en fil kaldet hej dot c, det er den fil, det vil kompilere for dig i et program kaldet hej. Så det er en meget enklere måde gør de mere kryptiske kommandoer at vi gjorde tidligere. Og vi har pre-konfigureret CS50 IDE at vide at det skal gøre streg o og en række andre flag, eller kommandolinjeargumenter, at vi vil se inden længe. Men lad os nu rent faktisk gør noget mere interessant. Bare at skrive ud hej verden alle tiden er ikke alt, overbevisende. Så lad mig gå videre og forandring dette program, og siger, hej David. Nu vil jeg gå ned her. Jeg har tænkt mig at gå videre og gør hej. Og nu igen du ser gøre viser dig den længere sekvens af kommandoer, som det er gør, fordi vi har pre-konfigureret det på den måde, men vi behøver ikke bekymre dig for nu hvad det andet, end det er at gøre udarbejder prik slash hej, hej verden. Hvad er der galt? Ja. PUBLIKUM: [uhørligt] DAVID J. MALAN: Ja. Så noobie fejl. Jeg bemærke dette er super subtile, men stjernen her, under fanen, bare betyder, at du ikke har gemt det, og browsere og andre programmer gøre dette til tider. Så kontrol s eller kommando s skal gemme det. Lad mig nu gå videre og re-køre programmet. Genoversat. Lige, så det er en multi-trins proces. Hvoraf ingen er særlig kompliceret, men helst vi ændre filen, vi er nødt til at ændre resulterende nuller og ettaller, og dot skråstreg hej. Wow. Så dette er meget underwhelming at vi bare udskrives dette. Lad os gøre tingene lidt mere dynamisk, nu. Jamen det viser sig, der kan lide Scratch, C understøtter variable. Og det viser sig, hvis du vil at have en variabel, der gemmer, ikke et tal, som vi typisk gjorde med Scratch, men ligesom et ord eller en sætning, eller et navn, du kan angive en variabel at være af typen string. Så vi vil se mere af disse i bare et øjeblik, men det viser sig, at C, og en masse sprog som det, har meget specifikke typer af variabler. Det er ikke ligesom algebra, hvor man får en x, a y og z og dem er bare altid tal, i et programmeringssprog du kan gemme numre, du kan gemme enkelte tegn, du kunne gemme hele ord, du kunne gemme hele billeder, hele lydfiler, og lignende. Så vi har brug for at angive, hvad typen af ​​vores variabel er. Og ved konventionen jeg har tænkt mig at ringe til min variable s, bare fordi det er kortfattet, og s står for streng. Og så jeg har tænkt mig at gemme indersiden af ​​denne variabel, Ligesom med Scratch når jeg bruger den indstillede blok, Jeg har tænkt mig at bruge Opgaven operatør i C, som pænt nok er den lige underskrive, men lighedstegnet gør dette. Den bevæger sig noget fra højre ind venstre side af udtrykket. Så hvad jeg har gjort, for at være klar i linie fem, er jeg har erklæret en variabel. Jeg har fortalt computeren, giv mig hukommelse til en variabel, kalder det s, og på forhånd ved, at jeg har tænkt mig til at lægge en streng i det. Og en streng er bare en sekvens af tegn. Det er et ord eller en sætning, eller afsnit, men det er en sekvens af tegn. Det er ikke tal. Hvad snor er jeg kommer til at være ibrugtagning, at variabel? Nå, tilsyneladende citerer citat slut, "Hannah". Bemærk nu det mønster, der er på vej frem. Der er en venstre udtryk. Der er en højre hånd udtryk, adskilt af lighedstegnet. Og bare tage et gæt, hvis ukendte alligevel, med, hvad semikolon gør. Hvordan er det formentlig gør for os? Ja? PUBLIKUM: [uhørligt] DAVID J. MALAN: Ja. Det er bare om afslutning af linjen. Højre? Computerne vil være ligeud fortalte, bogstaveligt talt, hvad de skal gøre. Ligesom jordnøddesmør og syltetøjssandwich eksempel Hvis du ikke angiver præcis, hvad du har til hensigt, kan det overlades til dom eller fejl. Semikolon betyder, det er det for denne kommando. Det bliver super præcis, og det er en meget nem ting at holde op. Så nu dette program synes ikke at være opfører anderledes indtil jeg gøre det mere dynamisk. Så i stedet for hårdt kunne min egen navn, lad mig sætte en pladsholder værdi. Og det viser sig, at, og jeg ved det fra at have læst dokumentationen, og anvendes funktionen i årevis, at printf er designet til at være dynamisk. Du behøver ikke at vide på forhånd hvilke ord du ønsker at sætte i det. Du kan i stedet have en pladsholder, ligesom procent s, som kommer til at fortælle computer, sætte en snor her. Hvilken snor ønsker vi at sætte der? Will viser sig, at mellem disse parenteser, der husker, afgrænse input til en funktion, hvis du har kommasepareret liste af ting her, vi faktisk passere i flere input til en funktion. Så bare gerne have nogle Scratch blokke, ikke kunne du har spillet med dem for dine projekter endnu eller på alle, nogle Scratch blokke har to indgange. To hvide kasser, du kan skrive tal eller ord ind. Så for at gør C har funktioner som printf der kan tage to indgange. Og igen, denne komma er at adskille dem. Så på engelsk, igen selv hvis du aldrig har programmeret før, af denne logik printf er en funktion, tager to indgange, hvoraf den ene er en pladsholder, hvad ville du håber printf kommer til at gøre med denne indgang? Det kommer til at sige hej Hannah, forhåbentlig. Så for at gøre dette har vi brug for at gemme det. Jeg har tænkt mig at zoome ud. Jeg har tænkt mig at gå tilbage hernede og sige, gøre hej ind. Oh. Der er noget galt, og faktisk dette er ganske overvældende. Jeg har seks linjer kode og ligesom 12 linjer af fejl. Så ser frem til dette. Så hvad sker der her? Så den bedste tommelfingerregel her, især når du er startet ud, ikke bliver distraheret af stuff nederst. Faktisk jeg meget bevidst bare rulles op fordi meget ofte, en computer er ikke alle, der lyse af en enhed. Det kommer til at blive forvirret. Hvis det ser én ting, det ikke forstår, det kunne forveksle andre linjer kode som forkerte, selvom de er helt fint. Så du altid ønsker at arbejde top ned gennem fejlene. Og ganske vist er super mystisk i øjeblikket. Fejl, brug af sort identifikator streng. Har jeg mener standard i? Nej, jeg mente streng. Og det er at pege på, måske er det en tastefejl. Lidt ligesom, stavekontrol i et meget nørdet måde, men årsagen her, og du ved det blot ved praksis er at det viser sig, at strengen ikke findes i C. Faktisk C er en særlig gamle sprog, og det er meget lavt niveau, og det gør ikke en masse funktioner at du måske er vokset op med, hvis du har, i virkeligheden, programmeret i Java, som nogle af jer har, men du kan undervise i det nye ting. Og ja, vi har gjort dette CS50, selvom ved udgangen af ​​semestret, alle disse støttehjul vil være blevet taget ud, hvad vi gør i disse første par uger oprindeligt er vi også du inkluderer CS50 dot h. Hvilket er en header fil. Mere om det i fremtiden. Det er en fil, der indeholder funktioner at vi har skrevet til dig. Og blandt disse funktioner er funktioner til at få input fra brugeren, som strenge, og tal og reelle tal og meget mere. Men det har også et par genveje. Det definerer en boolesk som en datatype. C har ikke sand eller falsk. Men vi kan give det forestillingen om sand eller falsk ved hjælp af dette bibliotek. Og det har heller ikke en streng bygget i indtil vi medtage denne linje. Så denne linje kode fortæller compileren, hey, Dunk, se i denne fil til en hel bundt af kode, CS50 har skrevet, så alle, der bruger denne fil kan tage for givet funktioner, de har tilføjet. Så lad mig gå videre og rydde skærmen, og hvis nysgerrig jeg bare sige kontrol l hver gang for at rydde skærmen, eller du kan skrive klart. Jeg er bare kommer til at gå videre nu, og typen gør hej, og alt er godt. Stadig en mystisk udgang, men det er ikke en fejlagtig besked. Nu, hvis jeg gør prik skråstreg hej, og som en til side, dot skråstreg er ukendt for de fleste. Det betyder blot, dot midler den aktuelle mappe. Så hvis du nogensinde har brugt DOS eller Linux, eller Unix du måske har gjort noget som CD dot dot, hvor dot dot betyder gå baglæns i tid, eller gå baglæns, eller højere op i dit bibliotek. Dot betyder blot kigge i den aktuelle mappe. Jeg ønsker hej, hvilket er lige her. Og ja, nu er det siger Hej Hannah. Og hvis jeg ændrer den igen til Maria, rekompilere det ville gøre hej, dot skråstreg hej, holder programmet forandring. Men det er stadig en temmelig dumme program. Hvis jeg ønsker at sende dette program, eller give det til en ven, eller give det til Maria eller Hannah for den sags skyld, det er fint. Jeg kan tilpasse det for dem begge, men det er aldrig kommer til at være dynamisk. De kan ikke ændre den, når den er kompileret ned i disse nuller og ettaller. Så hvad vi gjorde noget smartere? Hvad hvis, i stedet for hårdt-kodning i programmet denne persons navn, hvad nu hvis vi bare får strengen på efterspørgslen? Så med andre ord, lad mig gøre det. Jeg har tænkt mig at kompilere dette program. Og lad mig zoome ind ved bunden nu. Gøre hej dot skråstreg hej. Nu ingenting sker. Kan vi få en hurtig frivillig at gøre noget ske? Kom op. Hvad er dit navn? PANCHO: Pancho. DAVID J. MALAN: Pacho? Kom op. Når du får op her, det er vil være meget underwhelming, men det er mere interessant end mig skrive det. Hvis du ønsker at gå videre og skrive dit navn, jeg lavede dette program til dig. Bare skriv dit navn. Enter. Vidunderligt. Okay, mange tak. PANCHO: Mange tak. DAVID J. MALAN: OK. [Applaus] Det var meget venlig. Vær så god. Hvad gjorde vi? Så vi endelig, i det mindste, gjort dette program dynamik. Nu er det stadig sikkert ved design underwhelming, men vi endelig har mulighed nu at skrive kode i forvejen, meget ligesom forfatterne af printf, og derefter dynamisk tilpasser sig baseret på input er vi udleveret, enten af ​​programmøren, eller af det menneskelige, der er faktisk interagere med programmet. Så lad os faktisk nu forsøge til at gøre et par andre konstruktioner og se om vi ikke kan gøre programmerne selv mere sofistikeret. Så lad os gå videre og i stedet for skrive denne ene fra bunden, Jeg har tænkt mig at gå ind i nutidens kildekode, og alt dette er tilgængelig på kursets hjemmeside, og du kan trække og slippe det ind i dit eget miljø kommer fredag, når problemet sæt 1 giver dig instruktioner, eller du kunne gør det på kommandolinjen som godt, men mere at komme i p set 1. Lad os se, hvad der er i dette program her kaldes, adder dot c. Nu har jeg allerede kommenteret det, men hvad er nyt? Ved første øjekast, hvilken linje kode er absolut nyt? Sandsynligvis ikke fundamentalt ukendte nu. PUBLIKUM: [uhørligt] DAVID J. MALAN: Ja, så int x er lig få n. Vi har aldrig set noget af dette før, men er sandsynligvis int symbolet for hvilken slags variable, [? fra?] et heltal. Så int for heltal. Det er bare at være mere kortfattet. x er lige vilkårlig. x og y og z er stadig temmelig rimelig for tal, men generelt vil vi bruge ord, når vores programmer får mere komplekse. Få int, selvfølgelig, meget gerne get streng, er sandsynligvis vil få en int fra brugeren, og så vil vi gøre det samme med y. Og tilsyneladende, selvom det sidste linje, 24, ser mere komplekse, det vil sige summen af ​​denne og det er denne anden ting. Og varsel procent i formentlig betegner hvad? Hvilken rolle procent jeg tilsyneladende tjene? Det er bare pladsholdere. Højre? Procent s var for streng, procent i er til heltal. Der kommer til at være procent f til floating point værdi, hvilket er bare et tal med et komma. Med andre ord, et reelt tal. Så lad os faktisk kompilere dette programmere virkelig hurtigt og gør adder. Hovsa. God mulighed. Så bemærke her, al denne tid min bruger navn for denne konto er jharvard. Jeg er i CS50 IDE, alias IDE50. Og nu i blå her, er en omtale, men fra miljøet, hvor jeg er. Og i virkeligheden, hvis jeg zoome op til toppen her, bemærke, at jeg har en IDE50 og jeg ser dette ord, hvis du slags dreje hovedet til siden, arbejdsområde. I en nøddeskal, det faktum, at Jeg ser tilde skråstreg arbejdsområde betyder, at i denne tekst baserede kommando miljø, Jeg er i teksten svarer til dette grafiske mappe op her. Så når jeg gør dot skråstreg adder, det siger ingen regel at gøre målet adder stop. Jeg ved ikke, hvad det betyder, men det er dårligt for en eller anden grund. Ingen sådan fil eller mappe er endnu mere klart. Hvor er det så? Baseret på hvor jeg klikkede at åbne filen tidligere. Hvor kan det være? Det er sandsynligvis i kilden én w, til onsdag og jeg kan se det, ja, hvis jeg åbner det op. Der er adder dot C, men i denne tekst-baseret miljø, igen, jeg er nødt til at være super eksplicit. Hvis jeg ønsker at ændre mapper ind kilde én Onsdag jeg nødt til at skrive, cd plads kilde én Onsdag indtaste og nu min hurtige ændringer give mig et visuelt stikord, der Jeg er, ja, et andet sted i mine omgivelser, men nu kan jeg gør adder, ser det ud til at virke, dot slash adder, giv mig et heltal. One. To. Summen af ​​et og to er tre. Men hvis jeg ikke samarbejder, lad os se hvad får int gør. Giv mig et heltal. Nej. Prøv igen. OK. Fint. 50. 50. Okay. Så det endelig samarbejder. Og det er noget af det funktionalitet, disse funktioner kan have indbygget for dig. Så inde gennemførelsen af får int, hvad programmering konstruere fra sidste uge er sandsynligvis i der for at tvinge denne adfærd nyt forsøg, prøve igen, prøv igen? Ja, der er nok en slags sløjfe. Det kommer til at se syntaktisk forskellig fra Scratch s blokke, men det er faktisk hvad der er inde i filen. Og i et par uger vi får faktisk se på CS50 biblioteket om, hvad der er indeni, men der er en løkke om indførelse præcis det. Lad os lege en dum lille spil her med denne fil. Condition Zero dot c. Vi vil blot generelt begynde at tælle ved nul. Og jeg holder rulle forbi nogle af de ting på toppen. I blå her, afgrænset med alle af disse stjerner og skråstreger, dem af jer der programmerer før, hvad er det? Hvorfor skal vi holde springer over det? Hvad? PUBLIKUM: Det er en kommentar. DAVID J. MALAN: Ja. Det er bare en kommentar. Dette er en kommentar til mennesker at læse, at i vores tilfælde, fortæller os, hvad navnet på den fil er, der skrev det, og hvad det gør, så du ikke behøver at læse koden at vide, hvad denne fil handler om. Det er bare en beskrivelse, men funktionelt er det irrelevant. Og jeg kan endda slette det fra min fil, og det har ingen betydning. De saftige linjer er disse første to her, nu. int main tomrum svarer af vores når grønne flag klikkede, så vi kommer til at forlade det være for i dag, og vi vil komme tilbage, Til sidst, som til hvad int og tomrum er, men nu, mærke til, hvad jeg har gjort også her kan du også, hvis du har en på linje kommentere, hvis du har en troede, du ønsker at dele om en bestemt linje kode, konvention i C er at gøre skråstreg skråstreg, og derefter et par kortfattede ord, ikke en hel sætning, generelt ikke et afsnit, der bare forklarer til dig, eller din TF eller andre læsere eller kolleger, hvad din kode gør. Så i stedet nødt til at se på dette og udlede linjer ni og 10, hvad der er Dette gør, på linje otte Jeg bare give en kommentar til bede brugeren om et heltal, så jeg behøver ikke at tænke alt for hårdt om, hvad linjerne ni og 10 er. Jeg ved bare, at det er, hvad kollektivt de laver. Hvordan? Nå, her er prompten. Her er den at komme af int. Og baseret på den tidligere adfærd, det ser ud som get int er smart nok til at sørge for, at det menneskelige samarbejder og giver det et heltal. Men nu ser vi dette. Og det minder om Scratch. Jeg påstår, at jeg er analysere brugerens input, men noget unøjagtigt. Og dette tilsyneladende i C er, hvordan vi udtrykke en hvis ellers, en filial, en gaffel i vejen, men jeg siger noget unøjagtigt. Hvad er fejl i dette program? Om længere tilbage? Ja. PUBLIKUM: [uhørligt] nul. DAVID J. MALAN: Ja. Så hvis jeg skriver i nul, lad os overveje præcis så fald eller hjørne tilfælde, hvis du vil. Så hvis jeg skriver i nul, hvilket af blokke vil tilsyneladende få fat i det? Den hvis eller andet? Den anden, og det kommer til at sige, du valgte et negativt tal. Og ja, nul er ikke meningen at være positiv eller negativ, og så det ville være fejlagtigt. Det ville være en fejl. Så hvordan kan vi løse dette? Nogen, der aldrig har programmeret før? Vil du have-- PUBLIKUM: [uhørligt] DAVID J. MALAN: Tilbagetrækning? PUBLIKUM: [uhørligt] DAVID J. MALAN: Åh, du har? Nogen, der aldrig har programmeret før. Vil du prøve din hånd på dette, i den røde trøje? Kom op. Oh yeah, kom nu op, hvis du ikke har noget imod. Så aldrig har programmeret før, hvad er dit navn? LAUREN: Lauren. DAVID J. MALAN: Lauren, okay. Så ordne denne fejl for os. Du har ikke set C, formentlig, og formentlig ingen andre sprog. Så løse dette program for os. Rart at møde dig. Ingen pres. LAUREN: Ja. DAVID J. MALAN: Men igen, hvis det gamble går efter planen, takeaway her vil være lige igen, for at starte at lægge mærke til mønstre og udlede eksisterende syntaks hvor du ellers måtte udtrykke dig selv, ingen ordspil bestemt, for at fange nogle yderligere scenario. Så vi siger andet, hvis. printf, god. Og mærke med CS50 IDE, og frankly-- IDE står for Integreret Udviklingsmiljø. Det er bare en fancy måde at sige et program, der hjælper dig med program. Det gør brugervenlige ting som når du skriver en parentes, det automatisk giver dig den anden. Formodningen er, at du er i sidste ende vil ønsker at skrive det, og det også gør det med citater. Så jeg kan godt lide linie 23. 99% af vejen der. Nogen ønsker at kime ind med et tip? Jeg hørte semikolon fra publikum. Godt. Så der fuldender det. Og nu, jeg bare har en lille bestyrtelse med linje 21. Hvordan ønsker vi at udtrykke dette? Hvilket spørgsmål ønsker vi at spørge, tror du? Så vi tidligere stillede spørgsmålet, hvis n er større end nul, gør dette. Else, gør det. Så vi er nødt til at vælge en spørgsmål at stille her. PUBLIKUM: [uhørligt] DAVID J. MALAN: Godt. Så hvis n er lig med nul. Fremragende. Så lad os holde pause her. Tak så meget for at trodset dette. Lad mig give dig lidt velfortjent stress bold, måske er der. Så vi er der næsten. Faktisk Lauren, hvis du ikke sind, lad mig gøre en tweak her, bare for at være ensartet, selv hvad vi så i Scratch, hvad jeg ønsker at gøre med linjer 21 og 24, bare igen baseret om, hvordan vi gjorde dette i Scratch, måske? PUBLIKUM: Flyt det op. DAVID J. MALAN: Ja, flytte det op. Så else tilstand, den tredje eller fjerde eller femte, eller endelig filial, bør faktisk komme bagefter, og det er kun ved konvention, bare fordi hvis du vil. Så jeg har brug for at gøre denne tweak. Og jeg har brug for at sætte min krøllet tandbøjle tilbage her. Og nu, vil dette program kompilere. Vi er så tæt på, men der er en meget, meget subtile fejl. Lad os se hvad der sker. Først, lad mig gå videre og zoome ud. Jeg har tænkt mig at gå videre og skriv gøre tilstand nul. Åh, løj jeg. Nu compiler er faktisk temmelig smart. Og jeg forstår ikke rigtig, det er fejlmeddelelse. Brug af resultatet af en opgave som en betingelse uden parenteser, tilsyneladende dårligt. Men hvad betyder det? Nå igen, på udkig efter mønstre i kode, som vi har set før, hvad der er line 17 faktisk gør, selvom Lauren bestemt lidt ellers? Ja. PUBLIKUM: [uhørligt] DAVID J. MALAN: Ja. Så husk lighedstegnet, tilsyneladende som vi har brugt det før, er ikke lig. Dens opgave, fra højre til venstre. Så linje 17 på det tidspunkt, er en betingelse, og det er udføre kode inde parentes, men da denne kode henretter, hvad der sker med værdien af ​​nul? Hvad sker der med værdien af ​​n? At blive nul. Så hvis n bliver nul, og igen, som pr sidste uge, vi generelt sige, at nul er falsk, og den ene er sandt, eller ja er én, og ingen er nul. Så sandt og falsk, en og 0. Hvis n fra linje 17 er givet værdien 0, er nul sandt? Nej. Definition nul er falsk. Det er den konvention, vi er kommer til at klamre sig til at bevæge sig fremad. Så vil ledningerne 18, 19 og 20 nogensinde gælder nu, logisk? De kan ikke. Så vi stillede spørgsmålet men ikke helt præcist, og du ville ikke vide dette, medmindre du har set det, er løsningen i C er, når du ønsker at udtrykke lighed, siger du ligemænd lig. Så lighedstegn blev allerede brugt op ved overdragelse, at fra højre til venstre. Lig lig midler lig. Og hvis du virkelig vil dit sind der skal bukkes, i JavaScript og PHP, der er lig med lig ligemænd, som betyde noget helt andet, men vi vil komme til at inden længe. Så dette er en simpel rettelse, men indser super nemt at lave denne fejl, og derefter undre sig og kamp for minutter, hvis ikke en time, hvorfor er min kode ikke udførelse som jeg agter? Det er fordi du ikke fortælle det præcis, hvad du mente. Så det var næsten perfekt, og det var fantastisk at vi snuble over disse to lidt ting, fordi nu hvis vi løse dem, og jeg gør tilstand nul dot slash tilstand nul, Jeg vil gerne et heltal venligst. Lad os se. Nej. Det kommer til at tvinge mig til at gøre det. Så 42. Jeg plukket et positivt tal. Så nu, hvordan gør jeg bevise dette program korrekt? Hvis du er en matematiker, ikke kan du virkelig bevise dette ved trial and error, højre? Du kan ikke bare bevis ved eksempel, men i det mindste som programmør vi er ikke vil forsøge at bevise for nu at dette faktisk er korrekt, men jeg burde nok teste nogle repræsentative tilfælde. Jeg har testet 42. Jeg kunne teste 43. Jeg kunne teste 44. Test 45. Højre? Men jeg kunne gøre dette til en virkelig lang tid. Hvad ville være nogle flere interessante sager at prøve? PUBLIKUM: [uhørligt] nul. DAVID J. MALAN: Så nul. Bestemt. Og godt, har vi fået det denne gang, takket være Laurens ny kode. Hvad er en anden god sag at prøve? PUBLIKUM: Negativ én. DAVID J. MALAN: Negativ en, og måske noget lidt større, så måske negativ 42, men generelt når teste dine programmer bevæger sig fremad, er du vil ønsker at tænke til dig selv, som hvad er de grundlæggende forskellige tilfælde. Og jeg tør sige en negativ sag, en positiv tilfældet, og et nul tilfælde temmelig meget afrunder disse ud. Lad os se på en variant af denne selv. Betingelser én. Dette er en korrekt løsning her, så du kan se to og online, hvis du går gennem walkthroughs, vil generelt tilvækst disse trinvis, indtil vi får præcis den rigtige strategi. Hvad hvis vi ønskede at spørge to spørgsmål på én gang? Lad mig åbne dette i stedet. Ikke-switch grunde vi vil se en anden gang. Hvad er nyt syntaktisk her? Jeg er i øjeblikket spiller et spil hvor computeren fortæller mig, giv mig et heltal mellem en og 10, og så er jeg at dømme brugerens input. På engelsk, baseret på den kode, du ser her i blå, hvad dette program gør? PUBLIKUM: [uhørligt] plukket et stort eller lille antal. DAVID J. MALAN: Ja. Det er bare træffer afgørelse om, hvorvidt Jeg plukket en stor eller medium, eller mindre antal baseret på en meget vilkårlig definition af små, mellemstore, og store her, men varsel syntaksen, der er nyt, er dette. Der er ikke mindre end int eller lig med underskrive, eller større end eller lig til at underskrive, hvor den ene er over den anden, at man kan udtrykke i ligesom Microsoft Word. Så i et programmeringssprog, du typisk bare gøre to tegn, den ene efter den anden. Og hvad betyder dette sandsynligvis repræsentere, tegnet tegnet. PUBLIKUM: [uhørligt] DAVID J. MALAN: Ja. Det betyder blot, og fordi det viser sig, at forfatterne af C anvendes en enkelt-tegn, som du måske tror ville være perfekt til begrebet og er allerede brugt op, så tegnet tegnet faktisk indfanger tilfældet, vi faktisk ønsker. Så lad os nu snuble over to ting. Lad mig gå videre og åbne op for en. Noget, der er lidt bekymrende. Unøjagtighed dot c. Lad mig introducere to ting her. En, varsel, at vi kan gøre matematik, så lige som før, når vi gjorde plus to tal, x og y. Hvad er dette program tilsyneladende gør? Jeg har ikke kommenteret det endnu, og jeg har introduceret procent f, men jeg hurtigt sagde tidligere procent f betyder flydende punkt værdi, som er reelt tal. Noget med en decimal punkt, som ikke er et heltal. Hvad tror du dette program er forsøger at vise mig på skærmen? Ja? PUBLIKUM: Resultatet af en over 10. DAVID J. MALAN: Ja. Hvad er resultatet af en divideret med 10. Ret, fordi alle du har sandsynligvis vokset op vel vidende, at en over 10 er hvad? Ja, det er bare 1/10 eller 0,1. Højre? Så lad os se, hvad det egentlig er. Så lad mig gå videre og gemme denne. Lad mig gå ned her. Gøre unøjagtigheder dot skråstreg unøjagtighed, og varsel, også, i et Linux-miljø, ikke gør du nødt til at skrive ud unøjagtigheder og tage hele dagen lang. Det generelt, hvis du rammer Tab, det vil afslutte din tanke for dig, på grundlag af de ord, der er tilgængelig i den aktuelle mappe. OK. Så du havde ret. En divideret med 10 er i virkeligheden, 0,1. Men jeg er lidt nysgerrig. Og det viser sig printf understøtter nogle funktioner hvor du kan angive mere end standard antallet af decimaler. Så hvis jeg ønsker at se 10 decimal punkter, jeg kan gøre procent, for pladsholderen symbol dot 10 for, giv mig 10 decimaler, og derefter stadig flydende komma værdi, og som en sidebemærkning, hvad er dette omvendt skråstreg n tilsyneladende vi holde bruger? Det viser sig, det er en symbol for en ny linje. Det er den meget eksplicitte måde at sige til computeren, flytte markøren til den næste linje efter du er færdig. Og vi vil se, hvad der sker når vi ikke gør det. Lad mig genkompilere gøre unøjagtighed. Nu dot skråstreg unøjagtighed. OK. Stadig højre. Et divideret med 10. Nu er jeg får en lidt nysgerrig, selvom. Hvad hvis jeg ser 20 decimal påpeger, rekompilere, gentagelsen, og som en sidebemærkning til hastighed, kan du også bruge din op og ned pilene til rulle gennem din historie, så du ikke behøver at holde genindtastning disse kommandoer, indtaster. Huh. Jeg har ikke lære, at i folkeskolen. Okay, så lad mig Se lignende 29 pladser ud. Måske er det bare et lykketræf. Måske min computer handler underligt. Det er ikke en ting, ikke? Det gør noget deterministisk. Så gør upræcise. OK, der er rodet op. Så hvad sker der? Så tilsyneladende din Læreren har ligget til jer alle for denne gang for årsager til, at vi vil se inden længe. Men lad os slutte med et andet program. Dette er lidt programmer nogen skrev for nogle år siden, og det er faktisk en del af en konkurrence. Ingen faktisk skriver kode som dette, og hvis du gør, dette er stilistisk et problem. Men folk gør dette for håneret. For at skrive den mest forvirrende søger program, alligevel gør noget interessant. Og noten jeg troede, vi ville forlade dag, før Colton spiller os ud her, er at køre dette program, der, selv i bare at bruge C i denne tekst-baserede miljø, giver os dette. Dammit. [Latter] Stå ved. [Uhørligt] c Dash l m. Du kommer til at se den magiske besværgelse, at vi vil se inden længe. [Uhørligt] Okay. Og nu kan du endda gøre ting som dette. Det er det. For CS50 vi vil se dig på fredag. [Musik spiller] [Applaus]