[Musikk spilles] DAVID MALAN: All right. Velkommen tilbake. Dette er CS50, og dette er Uke One, Fortsatte. Så en av grunnene til at vi har bestått rundt teknologier som Google Glass er at de kommer med noe som kalles en API, et Application Programming Interface. Og hva dette betyr er at med riktige filer og med den rette dokumentasjon, kan du faktisk skrive programvare for selv enheter som dette. Og så hva vi har i tankene mot semestre slutten er, hvis et prosjekt involverer, sier Google Glass kan appell, vil vi se hva vi kan gjøre i når det gjelder å hekte deg opp med noen låne maskinvare samt offentlig tilgjengelig API, slik at du kan faktisk begynne å lage programvare som kjører på den samme Google Glass. En annen enhet som vi har spilt med i det siste at vi trodde kunne være moro på semesterets slutt er denne lille tingen her. Det kalles Leap Motion, og hva du er å se er teknisk sett en reklame for enheten, men det snakker til hva dette Enheten er i stand til. Og det, også, kommer med en API via som du kan skrive programvare for å styre din egen datamaskin på en måte ganske like denne minutters film her. [VIDEOAVSPILLING] [END VIDEOAVSPILLING] Så akkurat nå, skjer denne enheten til implementeres som en liten USB kontakt som du kan plugge inn datamaskin, men jeg ville ikke bli overrasket hvis ikke lang tid før vi har slike teknologier i neste batch av PC og Mac-maskiner, slik at du kan, faktisk, samhandle med den i en måte sånn. Faktisk, det jeg tenkte jeg skulle gjøre, også er Jeg trakk opp en liten demonstrasjon programmet som følger med denne programvaren. Så jeg har satt den lille sensoren foran min laptop. Og som du kan se, innser det allerede at min hånd er det kontrollere den. Og alt dette programmet gjør er swimmingly små ting som dette. Men du kan se at, ja, Jeg har fem fingre der. Hvis vi kan få den til å gjøre alt 10, du kan forestille deg en pen piano anvendelse eller lignende. Så hvis du ønsker å komme opp etter klasse dag og lek med det som vel, er du velkommen til. Så mer om det mot semesterets slutt. Så et par av administrative kunngjøringer. En, gjør delen av denne fredag midt på dagen på cs60.net/section. At nettadressen er på kursets hjemmeside også. I mellomtiden, skjønt, supersections vil debut denne søndagen. Supersections er en engangs ting, fordi det tar oss litt tid til å jobbe ut hvem som er i hvilken seksjon og hvor. Så førstkommende søndag, vil det være en seksjon for de mindre komfortable, en seksjon for de mer behagelig. Og de av dere et sted i mellom er velkommen til å gå til én av eller begge eller ingen av delene. Begge disse vil bli filmet. De vil være i et større auditorium enn en seksjon normalt ville være i. Men målet her er å utstyre deg med noen trøst med problemet satt en, med C, med CS50 apparatet, dette helg, selv før du finner ut din formelle delen oppdrag. Så du møter din TF og mindre gruppe sectionmates i om en ukes tid. Kontortid, i mellomtiden, har pågått. Må ta nytte av dem i kveld eller i morgen kveld hvis du ønsker. Oppgavesettet 0 skyldes på fredag. Dette er en dag senere enn jevnlig planlagt torsdag. Men med problem sett en, vil du se at det inneholder noen warm-up øvelser som du selv kan utvide Torsdag frist til fredag. Oppgavesettet 1, i mellomtiden, vil debut på kurset hjemmeside førstkommende Fredag, hvis du ønsker å krølle opp med det som jeg gjorde en gang sent Fredag ​​kveld på rommet ditt. Så cs50.net/appliance er stedet hvor du kan få CS50 apparatet at vi begynte å bruke på mandag. Vi vil bruke det litt mer i dag. Men trygg på at problemet satt en spesifikasjonen vil lede deg gjennom nettopp trinnene du må å få den opp og kjører. Så ikke bekymre deg om du gjør det før PSett 1 hvis du vil helst ikke. OK. Så vi så på mandag kl kildekode, men i sammenheng med en ny programmeringsspråk, nemlig C. Og C, i motsetning til Scratch, er ikke grafisk. Det forundrer ikke biter. Det er mer engelsk-lignende syntaks. Og det er et par skritt involvert i faktisk skrive og kjøre en program i C, fordi foruten kilde kode som dette, trenger du noe kalt en kompilator. Og i lekmann vilkår, hva gjør en kompilator for oss? Yeah. STUDENT: Den konverterer koden at du skriver til 0'er og 1'ere. DAVID MALAN: Good. Så det konverterer koden som vi skrive til 0'er og 1'ere. Den konverterer såkalte kildekoden til objektkode, sistnevnte som ser litt noe sånt som dette. Og det er din CPU, hjernen innsiden av datamaskinen, som på grunn av menneskene som skapte disse datamaskinene, vite hva disse sekvensene av 0'er og 1'ere gjennomsnittet. Kanskje det betyr print. Kanskje det betyr tillegg. Kanskje det betyr subtraksjon. Kanskje det betyr vise grafikk. Det er forhåndsdefinerte punktmønstre at verden har besluttet mener visse ting. Men for det meste i dette kurset, vi skal jobbe på et høyere nivå, og Vi tar for gitt at det finnes ting som kompilatorer som kan gjøre våre kildekoden funksjon i måten vi har tenkt. Så programmet skrev vi først sist uke og deretter begynte å port, så å snakke, til C denne fortid Mandag, var dette. Når grønne flagget klikket, si hei. Dette var selvfølgelig skrevet i spillene. Og jeg hevdet at tilsvarende program i C så litt noe sånt som dette. Så det jeg tenkte vi skulle gjøre først er, la oss erte hverandre hva som ser, først blikk, riktignok, som ganske uforståelige syntaks, men du vil begynne å merke mønstre ganske raskt. Hva vil vi også gjøre i dag er å gi du med en mental modell for noen kanonisk, noen standard konstruerer i programmering. Og så får vi faktisk få våre hender skitne med noen eksempler, så vel. Så for de av dere mer komfortabel, innser at denne uken og deretter neste uke kan meget vel være litt for anmeldelse. Men spesielt når hacker utgave av oppgavesettet en går ut på Kursets hjemmeside på fredag, tror jeg du vil finne at selv som du fyller inn noen blanks i løpet av neste uke eller to, vil du begynne å bli stadig mer utfordret og møter nye og nyere ting. Så la oss erte dette programmet fra hverandre noen få linjer samtidig. På toppen har vi det er teknisk kalles en preprocessor direktiv. Dette er bare en linje med kode som sier med innholdet av en fil, kalles standard I / N, standard inngang - eller, sorry, standard I / O, standard input / output,. t, inne av mitt eget program. Så med andre ord, hvis jeg skrev dette program med en enkel tekst editor som gedit, jo enklere tilsvarende noe som Microsoft Word, som instruksjon, # include stdio.h, er bare kommer til å fortelle kompilatoren, ta tak i Innholdet i den andre filen, stdio.h, og lim dem rett her. Nå, hvorfor jeg bry meg? Hva var det vi hevder er innsiden av denne filen kalt stdio.h, som er lagret et sted på harddisken min, eller i dette tilfelle, et sted i CS50 apparatet? Noen andre satt den der for meg. Men hva er det? Ja, så det er en erklæring av en funksjon som heter printf. Så printf minnes den funksjonen som viser ord og tegn og tall på skjermen ved budgivning min. Men jeg ville ikke skrive det. CS50 ikke skrive det. Noen år siden skrev det, og de hovedsak ga oss oppskriften på det i en fil kalt stdio.h. Slik at første linje bare gir meg tilgang til funksjoner som noen andre skrev år siden, blant som er printf. Nå, neste linje jeg kommer til å vinke min hånd på, i hvert fall til neste uke. Men for nå, vet at int main (void) er hovedsakelig den samme som denne gul puslespill brikke når grønt flagg klikket. Verden, år siden bestemte at hvis du skriver et program i språk som heter C, begynner du programmet med en linje som ser slik ut. I omtrent en ukes tid, vil det gjøre fornemme hva int er, hva tomrommet er. Men for nå, bare tenk på det som denne gule puslespill brikke. Nå neste, har vi en klammeparentes fulgt av en annen nær klammeparentes, så å si. Og vi vil se disse gjennom programmer i C, samt JavaScript og PHP. Og disse bare kapsle relaterte linjer med kode. Den åpne klammeparentes hovedsak sier, her kommer noen kode. Og den lukkede krøllete spenne, som er vinklet i den andre retning, bare betyr, det er det for den relevante koden. Så saftig linje i denne første Programmet er det siste, printf, quote-unquote, hallo verden. Og jeg ringte ting mellom sitater hva siste gang? Så det er en streng. Og en streng er bare teknikken betegnelse for en sekvens av tegn, et ord, en setning. Selv en enkelt bokstav kunne være dobbelt sitert. Men det er en sekvens av null eller flere tegn. Backslash-n, skjønt, ser litt rart. Men det bare betydde noe enkelt til datamaskinen. Hva er omvendt skråstrek-n? Ny linje. Så det er bare spesiell sekvens av tegn på at verden har bestemt seg del sette et linjeskift rett der, fordi kompilatoren vil faktisk få forvirret, som regel, hvis du, veldig forståelig, men på feil måte, bare begynne å trykke Enter for å sette nye linjer i koden. Du må være litt mer eksplisitt med backslash-n. Og vi vil se det er noen andre slike mønstre for spesialtegn. For eksempel, hvis du ønsket la din tankene vandre til et hjørne tilfellet, anta at jeg ønsket å skrive ut en dobbelt anførselstegn på skjermen for uansett grunn, ville det synes å være litt problematisk, ikke sant? Fordi hvis jeg legger en dobbel sitat i midten av "hallo, verden," uansett grunnen, hvorfor det synes potensielt problematisk? Det bryter strengen. Kompilatoren er bare et program. Et program som en kompilator er bare kommer å lese koden din topp til bunn, venstre mot høyre. Og hvis ser tre doble anførselstegn i stedet av to, det er ikke til å kjenne hvis du mener at tingen til venstre bør være streng, eller det å høyre, eller hele greia. Det er tvetydig, og så hva en typisk kompilatoren vil gjøre er å frik bare ute, og gi deg noen feilmelding, og gjør du håndtere problemet. Så gitt at backslash-n betyr en ny linje, hva ville instinktene dine nå begynne å være hvis du ønsket å inkludere noe unormalt som en dobbel sitere innsiden av denne ellers siterte streng? Skråstrek-dobbelt anførselstegn. Og så får vi se dette slags mønster også. Hvis du ønsker å gjøre noe litt merkelig, vil du finne at den løsninger ofte følger et mønster, og backslash betegner en escape-sekvens. Og det betyr bare noe spesielt at vi trenger å representere en annen måte. Som for hvordan du representerer en skråstrek, vel, vil vi komme tilbake til det. Men svaret, også, faktisk litt opplagt. Så la oss nå introdusere noen andre programmering konstruerer som du så i spillene. Du har sikkert tatt for gitt allerede hvis du allerede har prøvd seg på Problemet satt 0. Men la oss nå introdusere syntaksen i C for disse ellers ganske intuitivt ideer, i det minste noen av dem. Så denne oppfatningen av en tilstand eller en gren, mens vi tidligere representerte det med kode som så som dette på venstre side i Scratch - hvis x er mindre enn y, så si det - i stedet nå i C - la meg finpusse inn på den enkleste sak - vi bare kommer til å si, hvis, åpner parentes, er noe sant - en Boolske uttrykket kommer til å gå hvor jeg har sagt tilstand - sluttparentes, så hva som er innsiden av de klammeparentes. Så også her de klammeparentes er typen som Scratch er U-formede biter i et puslespill. Hva som er inni disse klammeparentes. I dette tilfellet, slash slash. Og legg merke til dette er en fremtidsrettet slash, ikke omvendt skråstrek. Skråstrek, skråstrek, for de som har programmert før, betyr bare - det er bare en kommentar. En kommentar er ikke en linje av koden, per se. Det er en linje av engelsk som deg, menneske, har skrevet til deg selv kanskje minne deg på å gjøre noe, for å forklare til deg selv, til å forklare noen andre, hva koden gjør. Det er bare en beskrivende kommentar. Nå, selvfølgelig, kan vi ha en toveis gaffel i veien like ved å gjøre dette, en treveis gaffel i veien ved å gjøre dette, og hvis du fortsetter dette mønster, kan du ha fire-veis, fem-veis, seks-veis gafler i veien hvis du trenger for å håndtere, ja, at mange forhold. Og så merker parallellitet her - if (betingelse), else if (betingelse), og den eneste som er litt merkelig er den siste, som er nettopp det annet. Men igjen, er denne identisk konseptuelt, til hva vi har gjort dag, selv om det vil syntaksen ta litt å bli vant til. Nå, i dette eksempel, er det annen merkelig syntaks. Vi ser printf igjen, åpen parentes, og sluttparentes. Og innsiden av det en sitert streng. I parentesene, i sammenheng av printf, gå til venstre og høyre for hva? Hva beskriver vi at sitert strengen som mer generelt? Så det er et argument. Hver gang du har en funksjon, som printf, og deretter en åpen paren og en nær paren og noe på innsiden av det, enten det er en streng, eller en heltall, eller noe annet, ting i mellom disse parentes kalles et argument. Og et argument påvirker bare funksjonens oppførsel. I dette tilfellet er det ganske klart hvordan. x