[MUSIC Playing] DAVID MALAN: Okay. Velkommen tilbage. Dette er CS50, og dette er Uge One, Fortsat. Så en af ​​grundene til vi har passerer omkring teknologier som Google Glas er at de kommer med noget kendt som et API, et Application Programming Interface. Og hvad det betyder er, at med rigtige filer og med den rigtige dokumentation, kan du faktisk skrive software til selv enheder som disse. Og så det, vi har i tankerne i retning af semestre ende er, at hvis et projekt involverer, siger, Google Glass måske appel, vil vi se, hvad vi kan gøre i hensyn koble dig op med nogle låneenhed hardware såvel som den offentligt tilgængelig API, så du kan faktisk begynde at skabe software der kører på den samme Google Glass. En anden enhed, som vi har spillet med for sent, som vi troede kunne være sjov på semesters ende er denne lille ting her. Det hedder Leap Motion, og hvad du er at se er teknisk en reklame for enheden, men det taler til hvad denne særlige enhed er i stand til. Og det, også kommer med en API via som du kan skrive software til at styre din egen computer på en måde, godt lide denne ene minuts film her. [VIDEO AFSPIL] [END VIDEOAFSPILNING] Så lige nu, denne enhed sker for gennemføres som en lille USB stik, som du kan sætte ind i din computer, men jeg ville ikke blive overrasket hvis inden længe vi har disse former for teknologier i den næste batch af pc'er og Macs, så du kan, ja, interagere med den i en måde som. Faktisk jeg, hvad tænkte jeg ville gøre, også er Jeg trak op lidt demonstration program, der følger med denne software. Så jeg har lagt den lille sensor foran min bærbare computer. Og som du kan se, er det allerede realiserer at min hånd er der kontrollere den. Og alt dette program gør, er strygende små ting som dette. Men du kan se, at, ja, Jeg har fem fingre der. Hvis vi kan få det til at gøre alle 10, du kan forestille dig en pæn klaver anvendelse eller lignende. Så hvis du gerne vil komme op efter klasse dag og leg med, som Nå, er du velkommen til. Så mere om det i retning semesters afslutning. Så et par administrativ annonceringer. One, gør afsnit ved denne fredag ved middagstid ved cs60.net/section. Denne URL er på kursets hjemmeside samt. I mellemtiden, selv om, supersections vil debut på søndag. Supersections er en engangs-ting, fordi det tager os lidt tid til at arbejde ud af, hvem der er i hvilket afsnit og hvor. Så den kommende søndag, vil der være én sektion for de mindre behagelige, en sektion for dem mere komfortabel. Og dem af jer et sted i mellem er velkommen til at gå til enten eller begge eller ingen af ​​delene. Begge disse vil blive filmet. De vil være i en større auditorium end en sektion normalt ville være i. Men målet her er at udstyre dig med nogle komfort med problemer indstille en, med C, med CS50 apparatet dette weekend, selv før du finder ud af din formelle sektion opgave. Så du møde din TF og din mindre gruppe af sectionmates i omkring en uges tid. Kontortid, i mellemtiden, har stået på. Gør drage fordel af dem i aften eller i i morgen aften, hvis du ønsker. Problem sæt 0 forfalder på fredag. Dette er en dag senere end den regelmæssigt-planlagt torsdag. Men med problemet sæt 1, vil du se at det indeholder nogle warm-up øvelser, som du selv kan forlænge dit Torsdag deadline til fredag. Problem sæt 1, i mellemtiden, vil debut på kursets hjemmeside i den kommende Fredag, hvis du gerne vil krølle op med det, som jeg gjorde engang sent Fredag ​​aften i dit værelse. Så cs50.net/appliance er det sted, hvor du kan få den CS50 apparat at vi begyndte at bruge på mandag. Vi vil bruge det lidt mere i dag. Men forvisset om, at problemet sæt 1 specifikation vil lede dig gennem netop de trin, du har brug for at få det op at køre. Så du skal ikke bekymre dig om at gøre det før Pset 1, hvis du hellere vil ikke. Ok. Så vi kiggede på mandag på kildekode, men i forbindelse med en ny programmeringssprog, nemlig C. And C, i modsætning til Scratch, er ikke grafisk. Det er ikke puslespillet. Det er mere engelsk-lignende syntaks. Og der er et par af de involverede trin i rent faktisk at skrive og kører en program i C, fordi ud kilde kode som dette, du har brug for noget kaldes en compiler. Og i lægmandssprog, hvad gør en compiler gøre for os? Ja. STUDENT: Det konverterer koden at du skriver til 0'er og 1-taller. DAVID MALAN: Godt. Så det konverterer den kode, Vi skriver til 0'er og 1-taller. Det konverterer såkaldte kildekode til objektkode, hvor sidstnævnte ser lidt noget som dette. Og det er din CPU, hjerne indeni computeren, at på grund af mennesker, der skabte disse computere, vide, hvad disse sekvenser af 0'er og 1'ere middelværdi. Måske betyder det print. Måske betyder tilføjelse. Måske betyder det subtraktion. Måske betyder det, vises en grafisk. Der er foruddefinerede mønstre af bits at verden har besluttet betyde visse ting. Men for det meste i dette kursus, vi vil arbejde på et højere niveau, og vi tager for givet, at der findes ting som compilere, der kan gøre vores kildekode-funktion på den måde, vi har tænkt. Så det program, vi skrev først i sidste uge og derefter begyndte at havnen, så at tale, til C denne fortid Mandag var dette. Når grønt flag klikket, sige hej. Dette var naturligvis, skrevet i Scratch. Og jeg hævdede, at tilsvarende program i C så lidt noget som dette. Så hvad jeg troede, vi ville gøre på første, lad os drille hinanden hvad ser ved første øjekast ganske vist som ret mystiske syntaks, men du vil begynde at mærke mønstre ganske hurtigt. Hvad vil vi også gøre i dag, er at give dig med en mental model for nogle kanoniske, nogle standard konstruktioner i programmering. Og så vil vi faktisk få vores hænder beskidte med nogle eksempler så godt. Så for dem af jer mere behagelig, indse, at denne uge, og derefter næste uge kan meget vel være en smule gennemgang. Men især når hacker edition problem sæt 1 går ud på Kurset hjemmeside på fredag, tror jeg du opdage, at selv når du udfylder nogle blanke end den næste uge eller to, du vil begynde at få mere og mere udfordret og støder nye og nyere ting. Så lad os drille dette program fra hinanden et par linjer ad gangen. På toppen har vi, hvad der er teknisk kaldes en præprocessor direktiv. Dette er blot en linje kode, der siger at inkludere indholdet af en fil, kaldet standard I / N, standard input - eller, undskyld, standard I / O, standard input / output. h, inde min egen program. Så med andre ord, hvis jeg skrev dette program med en simpel teksteditor som gedit, den simplere svarende til noget som Microsoft Word, der instruktion, # include stdio.h, er blot vil fortælle compileren, tag fat i Indholdet af denne anden fil, stdio.h, og indsætte dem lige her. Nu, hvorfor skal jeg pleje? Hvad gjorde vi hævder er inde i denne fil kaldet stdio.h, der er lagret et eller andet sted på min harddisk, eller i dette fald et sted i CS50 apparat? En anden udtrykte det der for mig. Men hvad er der i? Yeah, så det er en erklæring om en funktion kaldet printf. Så printf minder den funktion, viser ord og tegn, og tal på skærmen på min bud. Men jeg vidste ikke skrive det. CS50 ikke skrive det. Nogen år siden skrev det, og de hovedsagelig gav os opskriften på det i en fil kaldet stdio.h. Så første linje bare giver mig adgang til funktioner, at en anden skrev år siden, blandt som er printf. Nu den næste linje jeg har tænkt mig at vinke min hånd på, i hvert fald indtil næste uge. Men for nu, ved, at int main (void) er væsentlige svarer til dette gul brik, når grønne flag klikkede. Verden, år siden, besluttede, at hvis du skriver et program i sprog kaldet C, du starter dit program med en linje der ligner det. I næsten en uges tid, vil det gøre mening, hvad int er, hvilken ugyldig er. Men for nu, tror bare på det da denne gule brik. Nu næste, vi har en klammeparentes efterfulgt af en anden tæt klammeparentes, så at sige. Og vi vil se disse i hele programmer i C, samt JavaScript og PHP. Og disse bare indkapsle relaterede linjer kode. Den åbne klammeparentes væsentlige siger, her kommer noget kode. Og den lukkede klammeparentes, som er vinklet i den anden retning, bare betyder, det er det for den relevante kode. Så den saftige linie i denne første Programmet er det sidste, printf, quote-citat slut, hej verden. Og jeg kaldte ting imellem citater hvad sidste gang? Så det er en streng. Og en streng er bare techie betegnelse for en sekvens af tegn, et ord, et udtryk. Selv et enkelt bogstav kunne være dobbelt citeret. Men det er en sekvens af nul eller flere tegn. Backslash-n, men ser lidt mærkeligt. Men det simpelthen betød noget enkle til computeren. Hvad er backslash-n? Ny linje. Så det er bare den særlige sekvens af tegn, som verden har besluttet midler lægge et linjeskift lige der, fordi compileren faktisk får forvirret, som regel, hvis man meget forståeligt, men er forkert, bare begynde at trykke Enter for at sætte nye linjer i din kode. Du er nødt til at være lidt mere eksplicit med backslash-n. Og vi vil se, at der er et par andre sådanne mønstre for specialtegn. For eksempel, for hvis du ville lade din sind vandre til et hjørne tilfælde antage, at jeg ønskede at udskrive en dobbelt citat på skærmen for uanset årsagen, vil der synes at være lidt problematisk, right? Fordi hvis jeg sætter en dobbelt citat i midten af ​​"Hej, verden," uanset grund, hvorfor der synes potentielt problematiske? Det bryder strengen. Compileren er bare et program. Et program som en compiler er bare at læse din kode top til bund, venstre til højre. Og hvis ser tre dobbelte citationstegn i stedet to, er det ikke kommer til at kende Hvis du mener, at de ting til venstre bør være strengen, eller ting til højre eller det hele. Det er tvetydig, og så hvad en typisk compiler ville gøre er bare flipper ud, og give dig nogle fejlmeddelelse, og gøre dig med at håndtere problemet. Så da backslash-n betyder en ny linje, hvad ville dine instinkter nu begynder at være, hvis du ønskede at medtage noget unormalt som en dobbelt citere inde i denne ellers citerede string? Omvendt skråstreg-double citat. Og så vil vi se denne form for mønster også. Hvis du ønsker at gøre noget lidt mærkeligt, vil du opdage, at løsninger ofte følger et mønster, og backslash betegner et escape-sekvens. Og det betyder bare noget særligt at vi skal repræsentere i en anderledes måde. Med hensyn til hvordan du repræsenterer en omvendt skråstreg, ja, vi vil vende tilbage til. Men svaret, også er faktisk en smule indlysende. Så lad os nu indføre nogle andre programmering konstruktioner at du så i Scratch. Du har sikkert taget for givet allerede, hvis du allerede har dykket ned Problemet sæt 0. Men lad os nu indføre syntaks i C for disse ellers temmelig intuitiv ideer, i det mindste nogle af dem. Så dette begreb en betingelse eller en filial, mens vi tidligere repræsenterede det med kode, så som dette på venstrefløjen i Scratch - hvis x er mindre end y, så sige det - stedet nu i C - lad mig finpudse ind på det simpleste tilfælde - vi simpelthen kommer til at sige, at hvis åbne parentes, noget er sandt - en Boolske udtryk kommer til at gå hvor jeg har sagt tilstand - tæt parentes, derefter hvad der er indersiden af ​​disse krøllede parenteser. Så her også, de krøllede parenteser er lidt ligesom Scratch s U-formede puslespilsbrikker. Gør hvad der er indeni disse krøllede parenteser. I dette tilfælde, skråstreg skråstreg. Og bemærke dette er en fremadrettet slash, ikke en backslash. Skråstreg, skråstreg, for dem, der har programmeret før, bare betyder - det er bare en kommentar. En kommentar er ikke en linje kode, se pr. Det er en linje af engelsk, at du som menneske, har skrevet til dig selv at måske minde dig om at gøre noget, for at forklare dig selv, at forklare en anden, hvad din kode gør. Det er bare en beskrivende kommentar. Nu, selvfølgelig, kan vi have en to-vejs gaffel i vejen lige ved at gøre dette, en tre-vejs gaffel i vejen ved at gøre det, og hvis du fortsætter med dette mønster, kan du have fire-vejs, fem-vejs, seks-vejs gafler i vejen, hvis du nødt til at håndtere, ja, at en række betingelser. Og så mærke til parallelitet her - hvis (betingelse), ellers hvis (betingelse), og det eneste, der er lidt mærkeligt er det sidste, der er bare, at andet. Men igen, dette er identiske, begrebsmæssigt, hvad vi har gjort allerede, selvom syntaks vil tage en lille smule tilvænning. Nu, i dette eksempel, er der nogle andre mærkelige syntaks. Vi ser printf igen åben parentes, og tæt parentes. Og inde i der er et noteret streng. De parenteser, i forbindelse af printf, gå til venstre og til højre for hvad? Hvad skal vi beskrive det citerede streng som mere generelt? Så det er et argument. Hver gang du har en funktion, som printf, og derefter en åben parentes og et tæt paren og noget inde i det, uanset om det er en streng, eller en heltal, eller noget andet, de ting i mellem disse parentes kaldes et argument. Og et argument netop indflydelse funktionens adfærd. I dette tilfælde er det temmelig klart hvordan. x