DAVID J. MALAN: Så dette er CS50. Og dette var CS50 egen Colton Ogden, for mer av hvem som er musikk du kan nedlasting på soundcloud.com/cs50. Så i dag fokuserer vi alle mer på kunsten programmering. Og vi tar der vi slapp av forrige uke, med fokus på Scratch, som var dette grafisk programmeringsspråk. Og ta ting ned til et lavere nivå, ved hjelp av en mer tradisjonell programmering språket kjent som C. Men underveis, innser at de samme ideene vi snakket om sist fredag vil gjenta seg ikke bare i denne språket C, men i de fleste hver annen at vi ser på dette semesteret. Så vi kalte denne tingen her hva siste gang? Dette er representativt for en uttalelse. Så vi kalte dette en uttalelse. Og det gjør noe. Det er en instruksjon som en datamaskin eller Scratch kan utføre. Og fra nå av, la oss også starte kalle noe sånt som dette en funksjon, grunner skal vi snart se. I mellomtiden, så vi ting som dette. Og disse er generelt kjent som hva konstruere? PUBLIKUM: Loop. DAVID J. MALAN: Så en loop. Så ganske grei. Det bokstavelig talt gjør det de sier. Og i Scratch, hvis du ønsker å stappe flere puslebiter i det, stykket vil vokse til å passe den. Og vi vil se i C som vi kan gjøre det samme. En annen type av løkken, selv om, i Scratch kan være for alltid, eller det er noen tall andre tilnærminger. Men la oss ta en mer genera utseende, med et ansikt det er sannsynlig ganske kjent, på looper mer generelt. Mark Zuckerberg: One ting som datamaskiner er virkelig god til er gjenta kommandoer. Som en person, vil du få virkelig lei hvis du måtte gjøre det samme mange ganger på rad. Men en datamaskin kan gjøre det samme millioner eller milliarder av ganger, og ikke gå lei, og kunne til å utføre den veldig bra. Så for eksempel, hvis jeg ønsket å ønske alle på Facebook en happy birthday ved å sende dem en e-post, det kan ta meg mer enn en tallet for å faktisk skrive ut alle disse e-post til alle. Men med bare noen få linjer med kode, kan jeg ha et system send en e-post til alle på Facebook som ønsker dem en happy birthday. Så det er hva løkker er og hvorfor de er verdifulle og noe at datamaskiner kan gjøre det veldig bra. DAVID J. MALAN: Så hvis du har vært mottaker av noen av CS50 og Dropbox sin plass i det siste, det er faktisk nettopp det vi gjør det, ved hjelp av kode ganske sånn. Vi hovedsak har en stor regneark der folk har vært å legge inn sin navn og e-postadresser. Og vi skrev en liten bit kode som kan iterere over disse adressene og spytte ut unike adresser i tilfelle noen sendt inn flere ganger. Og etterpå, sender vi en automatisert e-post fra CS50 sin bot, herunder kupongkode. Nå har vi også sett på Dette konstruere siste gang. Og dette er en spesiell eksempel på hva? Så, ja, en boolsk uttrykk. Og formen menes for å fange opp det også. Alle slike spørsmål av danne sant eller usant i Scratch vil se litt noe sånt som dette. Og vi kaller dette en boolsk uttrykk. Det er faktisk sant eller usant, ja eller nei. Det er en måte å svare på et spørsmål. Og i mellomtiden kan du bruke disse boolsk uttrykk inne i konstruksjoner som disse, hvilke av Kurset er forhold eller greiner, velkjente gafler i veien. Og de kan ikke bare se som dette, men de kan også har andens assosiert med dem. Og du kan faktisk ha en treveis gaffel i veien eller en fire måte gaffel i veien, bare ved hekkende disse tingene, som du ser i Scratch hvis du ikke har allerede. Og som du kan gjøre i C også. La oss ta et annet generalist se på et alumnist, så vel som kan utgjøre en annen tilnærming til disse tingene heter forhold. BILL GATES: Folk gjør avgjørelser hver dag. For eksempel, før du går utenfor du slags har en if setning som sier: hvis det regner så jeg trenger å få jakken min. Og datamaskiner er fantastisk når du avgjøre slike uttalelser, at de kan sikkert utføre disse tingene på utrolig hastighet. Og så et dataprogram virkelig er litt matte og noen hvis uttalelser der beslutningen blir gjort. DAVID J. MALAN: Så som du kanskje vet, det var folk som Bill Gates, Paul Allen, og andre som virkelig sparket av såkalt personlig datamaskin revolusjon for noen år siden. Tenkte jeg, før vi dykke inn i noen administrivia, vi vil forholde en fortelling fra Albuquerque, New Mexico Museum of Natural History og vitenskap hvor noen av Bill Gates ' og Paul Allen tidligste historiene blir fortalte hvordan vi har nå dagens PC-er og Mac-er og mer. For dette, men vi trenger to frivillige som har svært gode fortellerstemmer å lese et manus høyt. Greit, hva med bak der. Kom opp. Og hva med foran her. Kom ned. Ta dine steder her. Som dere kommer opp, et par av administrative kunngjøringer. seksjonering, prosessen av å velge en seksjon, vil starte dette Onsdag til fredag. Mer på at dette kommer Onsdag i forelesning. Super seksjoner, i mellomtiden, er noe som vi tilbyr neste uke der hele klassen er invitert for å delta i relativt stor målestokk seksjoner, en mer skjegg, en mindre komfortabel. Og vi vil kunngjøre opplysningene av at, i tillegg, senere i uken. I mellomtiden seksjoner, seg, blir igang i uke tre av kurset, null indeksen, noe som betyr at de er av et par uker ut. Så ikke bekymre deg. Du har ennå ikke savnet noe langs disse linjene. I mellomtiden i mellomtiden, hvis du har noen spørsmål administrativt, email meg selv og Devon og Gabe og Rob på denne adressen her. Til slutt, oppgavesettet 0 er, selvfølgelig, ut. Du har kanskje lagt merke til det på kurset hjemmeside. Det bør gi deg alle svar på spørsmål du kan ha på veien for komme i gang med problemet sett. Men hvis du finner deg selv behov for en hjelpende hånd, for all del delta kontortid, Mandag, tirsdag, onsdag, torsdag av denne uken i kveld i fire spisesaler. Se denne nettadressen der for oppføring av hvor kontortid skal være. Nå la oss møte våre to gjester her i dag. Hva heter du? JAY PAUL: Jay Paul. DAVID J. MALAN: Jay Paul, hyggelig å møte deg. HIKARI: Hikari. DAVID J. MALAN: Hikari? HIKARI: Hikari. DAVID J. MALAN: Hikari. Hyggelig å møte deg også. Jay Paul og Hikari har i Foran dem på disse musikk står to skript som jeg trykte ut i morges fra New Mexico Museum of Natural History og Science. Og det jeg trodde Jeg vil gjøre på overhead er følge din resitasjon av skriptet og denne historien med noen visuelle bilder, ingen overraskelser. Og hva jeg har gjort på forhånd er prehighlight på skriptet hva du bør lese, og hva du bør lese. Og vi vil i hovedsak bare alternative avsnitt. Så det er mye som du kanskje har gjort i engelsk klassen. Som virkelig tvinge publikum å tro på din historie her. Skal vi? Så historien her er at vi har en BASIC, og det begynner i Cambridge. JAY PAUL: Det var vinter, 1974, i Cambridge, Massachusetts hvor vintrene kan være kalde. En skjeggete, langhåret college dropout oppkalt Paul Allen var drudging over Harvard Square, absorbert i hans tanker. Hans hovedanliggende i disse dager var hvordan å få sin venn, Bill Gates, slutte på skolen og gå inn i forretninger med ham. HIKARI: De to hadde allerede gått gjennom en rekke forretningsprosjekter sammen, som begynner på Lakeside skole i Seattle hvor de ble betalt i gratis datamaskin tid til teste en PDP-10 maskin på en lokal tid deling selskapet. Den siste planen hadde vært å slutte skole og danne et programvareselskap. Allen hadde forlatt Washington State University. Men i siste øyeblikk, Gates besluttet å holde fast med Harvard. JAY PAUL: Den dagen krysset Harvard Square, Allen fikk øye på januar 1975 utgaven av Popular Electronics med jorden stoppe overskrift, Verdens første minidatamaskin Kit til rivaliserende kommersielle modeller. Under overskriften var et bilde av en liten boks utsmykket med lys og brytere. Det ble kalt MITS Altair 8800. Og Allen visste at dette var hva han hadde vært på jakt etter. HIKARI: Days of diskusjon fulgte. Allen og Gates forstått betydningen av Altair. De hadde snakket ofte om mikroprosessorer og ventet for å se hva ville bli gjort med dem. Nå var det en minidatamaskin kit på dekselet av Popular Electronics. Det hadde tydeligvis ingen programvare ennå. De forestilte en nasjon av programmerere synkende på MITS. Og så de kalte Ed Roberts, leder av selskapet, hevder å ha en versjon av BASIC programmeringsspråk nesten klar for Altair. De gjorde det ikke. Og Roberts må ha visst at de ikke gjorde det. Han fikk 10 samtaler om dagen fra folk som hadde en BASIC nesten klar. Og hans lager svar var: "Den første personen som dukker opp med en arbeidsgruppe BASIC får kontrakten. " JAY PAUL: Gates og Allen hadde aldri sett en Altair. De hadde aldri sett den Intel 8080 mikroprosessor i hjertet av Altair. Men et par år tidligere Allen hadde skrevet et program på en stormaskin som emulert drift av et tidligere Intel mikroprosessor. Og denne gangen rundt de ville gjøre det samme. HIKARI: Med en Intel 8080 manuell ved sin side, Allen satte seg ved et Harvard PDP-10 datamaskin og skrev emulator og programvare nødvendige verktøy for å gjøre programmeringen. I mellomtiden Gates sluttet å gå til klasser og viet seg til utformingen av BASIC, bruker alle triks han visste å få størrelsen ned under 4 kilobyte. JAY PAUL: Ut i Albuquerque, Ed Roberts fikk en telefon fra Gates ber om opplysninger om hvordan Altair håndteres bestemte rutiner. Ingen hadde bedt om det før. Og Roberts begynte å bli interessert. HIKARI: Med utviklingen verktøy og design klar, Gates og Allen skrev koden på PDP-10, verve en annen Harvard student, Monte Davidoff, å skrive matematiske rutiner. Etter en siste natt med programmering, Allen fikk på et fly til å levere sitt BASIC til MITS. Han tilbrakte flyet ri ut bekymringsfull. Og tilbake i Cambridge Gates var foruroligende. De hadde testet sine grunnleggende og det hadde fungert på emulator. Men hva om emulator var galt? JAY PAUL: Da flyet nærmet Albuquerque, Allen innså at deres BASIC, nå pent inneholdt på en liten rull hullet papir tape, ville være ubrukelig uten en separat program, kalt en lastemaskin, som ville fortelle Altair hvordan å lese avisen tape vesen mates inn i fjernskriver-maskin. Han tok ut sin bærbare og raskt skriblet ned en loader program i Assembler, deretter manuelt oversatt til å 1s og 0s Altair ville forstå. HIKARI: Allen var ventet en ren, lite, høyteknologisk selskap drevet av menn i business dresser. Så han ble overrasket da Roberts møtte ham på flyplassen ser ut som en ranch hånd. Roberts ble også overrasket. Da han droppet Harvard programmerer på et dyrt hotell, Allen måtte tilstå at Han hadde ikke råd til rommet. JAY Paul: MITS, seg selv, var ligger i en støvete stripe mall. Inne på en rotete arbeidsbenk var en Altair lastet opp med fem kilobyte av hukommelse og forbundet med en kabel til en fjernmaskin. Roberts og Chief Engineer, Bill Yates, ventet forventningsfullt som Allen toggled hans loader programmet i Altair. Den fjernskriver begynte tøffer som trakk papirbånd gjennom båndleser. Det tok kanskje 15 minutter å laste programmet. Da fjernskriver brått skrevet ut en minneteksten, deretter en klar ledeteksten, og Allen begynte å skrive noen test kommandoer. Til alles forbauselse, programvaren fungerte. Det var feil, selvfølgelig. Men det viktigste var det fungerte. HIKARI: Senere, på vei til en $ 3,00 lunsj på Pancho, en veps fløy i vinduet av pickup lastebil og stukket Allen på armen. Men på det tidspunktet ingenting kunne ødelegge stemningen. Altair nå hadde sin grunnleggende, første kommersielle programvare for et hjem datamaskin, laget av Paul Allen og Bill Gates, driver virksomhet som Microsoft. DAVID J. MALAN: Mange takket være våre to lesere. [APPLAUSE] DAVID J. MALAN: Nå du har ditt valg, før du forlater, en sparkly eller en glød i dark-- oh, vent ett sek, wait-- sparkly og en glød i mørket elefant fra CS50 egen Cheng Gong. HIKARI: Aw, takk. DAVID J. MALAN: All Greit, takk så mye. [APPLAUSE] DAVID J. MALAN: Så sann historie. Dette er for å si at alle disse maskiner og brukervennligheten som vi bruke dem nå og ta for gitt, egentlig startet her, bare noen få skritt fra denne faktiske teater. Og nå i dag, hvis du ikke har vært, dette er Maxwell Dworkin, datamaskinen Sciences Building, også rundt hjørnet. Og i andre etasje av dette bygningen ikke henger tre sider fra den opprinnelige kildekoden som Bill Gates og Paul Allen skrev. Faktisk, hvis bruken du zoome i kan du se ikke bare navnene deres i originaltype, men også sine signaturer som de prydet en noen år tilbake da de sist besøkte. Men hva var spesielt overbevisende om dette er hva de ønsket å gjøre var å skrive et program som ville at andre mennesker til å skrive sine egne programmer. På det tidspunkt da alle var der med dette Altair maskin laget av MITS. Og alt de trengte var noen måte å noe som gjør det enkelt for amatører og folk liker oss i dette rommet å faktisk program at uten nødvendigvis å forstå Assemblerkoden eller maskin kode, eller Gud forby, 0'er og 1'ere. Vi programmerere, som de i dette rommet, vi ønsker å være i stand til å uttrykke oss mye mer som pseudo-kode selv om det er litt mer nit kresen enn vi snakket forrige uke. Vi ønsker ikke å skrive kode som dette, som Paul Allen og Bill Gates gjorde. Vi, i stedet, ønsker å skrive kode som ser litt mer brukervennlig. Nå er dette et språk kjent som BASIC. Og linjenumrene er det hva du bruker å bare telle linjer med kode som du skriver. Vi trenger ikke engang å gjør at disse dager. Men du kan se her Hvordan skriver "Hello, World" faktisk ville formodentlig ut nettopp det. Og så hva Bill og Paul gjorde var hjelpe mennesker til å skrive kode som dette i stedet of-- hvis du tar en titt på informatikk wall-- kode som dette. Faktisk, CS50 nylig hadde en mulighet å sette seg ned med professor Harry Lewis i datavitenskapsavdelingen, som faktisk lærte Bill Gates noen år siden, og står her før disse tre sider med utdrag. La oss ta en titt. HARRY LEWIS: Det du har her er en en oversikt over en tidlig del av programvaren skrevet av Bill Gates og Paul Allen, grunnleggerne av Microsoft. Så koden er interessant av to grunner. Først av alt ble det Microsofts første produkt, som var tolk for BASIC programmeringsspråk. Og for det andre, var dette en av de første forsøk for å lage en tolk så vanlig folk kunne bruke personlige datamaskiner. Så Bill Gates var en student ved Harvard. Jeg begynte å undervise ved Harvard i 1974. Dette ble gjort i 1975. Så det var tidlig i karrieren og tidlig i min karriere. Jeg faktisk lært Bill i et kurs rundt denne tiden. Paul Allen var ikke en Harvard student, men han hadde vært en videregående skole klassekamerat av Bill Gates. Hvis du komme og se ved oppføringen, vil du faktisk finne en tredje navn, Monte Davidoff, som var Gates klassevenninne her ved Harvard. OK, så her er en interessant kommentar her oppe. Det står "I 4K kan slette kvadratrot men etter looper skal fortsatt fungere. " OK, så hva det betyr er at det var to måter å kompilere dette programmet. Den ene var å kjøre på en versjon av denne Altair datamaskin som bare hadde 4K ord minne, 4096 ord minne. Men den store versjonen hadde 8K. Og så hva dette sier er at i 4K versjon du måtte slette noen kode for å gjøre det skikket. Og en av de tingene som vil bli slettet ville være kvadratroten rutine. Men tilsynelatende etter looper bør fortsatt jobbe selv når du kompilere ned for bare 4K versjon av data. DAVID J. MALAN: Så et av temaene, som vi skal se i informatikk, er denne oppfatningen av lagdeling og abstraksjon, og virkelig stått på skuldrene av folk som har kommet før oss, ikke i motsetning til noen av Bill Gates og Paul Allen fortelling her. Og hva dette betyr er at vi i dag kan ta for gitt at ting er faktisk lettere for oss å skrive kode. Faktisk kode, som vi sa på fredag, er mer teknisk kjent som kildekoden. Og det er denne engelsk som syntaks det er mer riktig og mer veldefinert enn noe sånt som pseudo-kode, for der er det ingen formelle definisjonen. Og i dag hva vi skal å fokusere på er kildekoden som ser ut som dette, som riktignok ved første øyekast ser helt kryptisk. Og ærlig talt, det er veien mer estetisk kompleks enn den underliggende programmet er. Alt dette programmet gjør, tilbakekalling, er hva vi sier? Den skriver bare "hello world". Og likevel se på alle de ting vi trenger å vikle rundt at svært enkle setninger. Men før lenge alle disse linjer og mer vil gjøre mye bedre følelse for deg. Og strømmen er som følger. Hva vi trenger til rådighet er å ta kode, som kilden kode som vi nettopp så. Og vi trenger et nytt program å kjøre den gjennom. Vi trenger algoritmer som kan konvertere kildekoden, som dette, til objektkode, 0'er og 1'ere. Med andre ord, hva Vi kommer til å lære i dag er hvordan du gjør dette, skriver kildekoden opp toppen, gi det som input til en spesiell program kalt en kompilator, og vi kommer til å produsere objektkode. Som er bare en fancy måte sier vi vil ta noe som ser ut som dette, passerer det inn i et program som kalles en kompilator, produsere objektkode som ser ut som dette. Så dette er bokstavelig talt mønstre av 0'er og 1'ere som er forstått av en Intel datamaskin i disse dager, at hvis tolket av CPU, hjernen innsiden av en datamaskin, vil bokstavelig talt skrive ut, ganske enkelt, "hello world". Nå er det måten flere 0'er og 1'ere enn deg håper kan være nødvendig for det. Men det er fordi vi bygger på en god del av kompleksitet at vi heretter kan ta for gitt. Med andre ord, mange smarte folk har gitt oss mange kule verktøy og kraftig programvare som vi kan nå lage prosjekter av vår egen. Så la oss komme i gang. Mens sist fredag, og for Problem Set 0 denne uken, du kommer til å spille i en verden som ser ut som dette. Fra i dag og for Problem Sett 1 neste uke, koden kommer til å se litt mer kryptisk, men funksjonelt er kommer til å være den samme. Så varsel, toppen er Scratch, Bunnen er C. Frankly Scratch er mye mer brukervennlig vennlig og tilgjengelig. Men hvis du nå sammenligne visuelt topp til bunn, det er litt av en 12:59 korrespondanse mellom puslespillbrikker og språket vi er i ferd med å spille med. Spesielt si, blå puslespillbrikke opp toppen, er tilsynelatende tilsvarer det søkeordet eller spesielle uttrykk i dette språket kalt C? PUBLIKUM: Printf. DAVID J. MALAN: Printf. Det betyr formatert utskrift. Og det er bare et fancy måte å si printf i C kommer til å være et utsagn eller en funksjon som skriver ut noe til skjermen. Hva blir skrevet ut det til skjermen? Uansett hva du forteller det til inne sitater, innsiden av parenteser. Så igjen, riktignok, det er en masse ting at du må huske på, parentes, sitater, semikolon, og alt dette. Men alt dette er liksom av poenget. Det interessante takeaway for nå er at si blokk i Scratch er ganske mye tilsvarer printf uttalelse i C. I mellomtiden, den gule puslespill brikke opp toppen, når grønne flagget klikket, er trolig tilsvarende til hva nøkkelord her? PUBLIKUM: Main. DAVID J. MALAN: Så hoved. Kanskje int, kanskje annullert. Men hoved slags lyder som det er viktig, og faktisk er det. Så når grønne flagget klikket er, igjen, puslespill brikke som starter en Hele Scratch program. Men vi kommer til å nå begynne å ringe at hoved, denne funksjonen er kjent som hoved. Nå i mellomtiden vi vil generalisere dette på følgende måte. Vi kan kalle si en funksjon. Og det kan se spesielt som dette. Vel, hva med sløyfer? Hvis vi ønsker å begynne å konvertere eller sette mer i Scratch til C, denne tingen her tilsynelatende bare sier "hello world" for alltid. Så hvis du forbinder disse skript med en katt i Scratch, det bare kommer til å fortsette å si i en slags tegnefilm boble, "Hello world, hello world, hallo verden, "ad nauseum, for alltid. Hvis vi ønsker å gjøre noe lignende i C, det kommer til å se litt kryptisk. Men vi kan oppnå det samme resultater, som vi vil til slutt finne ut, med syntaks som dette. Jeg kommer til å bruke printf igjen, fordi ved slutten av dagen Jeg ønsker å skrive ut "hello world". Og jeg tydeligvis bruker en søkeord som ikke er evig. Det er i stedet ordet stund. Men bare semantisk i Engelsk, mens slags antyder en slags løkke eller syklus. Så det skjer for å være søkeordet som C bruker. Og mens sant, hvorfor gjør mens sant effektivt bety for alltid? Vel, mens, som vi snart setter pris på alle de mer, har denne parentes ved siden av det hvor du kan sette en boolsk uttrykk. Og så lenge som uttrykket er sant, denne kode som betegnet mellom disse to klammeparentes som vi kaller dem, vil bare fortsette å kjøre igjen og igjen. Så sant er sant. Så mens sanne midler bare gjøre dette for alltid. Det er nesten en dum konstruere å uttrykke deg. Men det var ikke alltid søkeord i C. Det var mens. Og det var en veldig enkel Boolsk uttrykk som ekte. Og så dette, vi får se, oppnår det samme resultat. Hvordan ellers kan du implementere en loop? Vel, i Scratch du kanskje vanskelig kode et bestemt antall iterasjoner i sløyfen her. Og så det er akkurat det vi kan gjøre i denne versjonen av C, der vi har en såkalt for loop. Og for loop her kommer å reagere, noe kryptisk, fra verdien 0 på opp til, men mindre enn 10. Nå variabler i bunnen av. Du har kanskje ikke hatt anledning til å bruke disse. Men hva er poenget, generelt, av en variabel vi si i forrige uke? Hva er det? Målgruppe: Points. DAVID J. MALAN: Å peke? Oh, påpeker. OK, holde styr på poeng, For eksempel, i et spill. Eller mer generelt å gjøre hva med variabel? Hva er nytten av dem? PUBLIKUM: Minne. DAVID J. MALAN: Ja, så minnet. Det er for lagring av noe. Og den slags dum visuell jeg brukte siste gang var som denne glassbolle. Og hvis vi ønsket å lagre noe på innsiden av en variabel, for eksempel akkurat nå verdi er seks fordi det er seks ping pong-baller i her. Det er bare en slags lagringsplass container som under panseret er implementert med biter, 0'er og 1'ere, men en datamaskin skjer for å gjøre det. Så i Scratch, hvis vi vil ha en variabel, vi kan bruke en oransje blokk som dette. Vi kaller det teller i dette tilfellet. Jeg initialisert den til 0. Og hva det jeg da gjøre? For alltid, sier telleren, som hvis du spiller med det i Scratch, vil du bare se Scratch. Katten eller hva kostyme du sette på ham vil snakke tallet i spørsmålet. Endre teller med 1 er som økes med 1. Og så dette kommer til å telle fra hva så hva? Fra 0 Til uendelig, eller inntil Skrape pauser, eller til du liksom mister interessen for å se på hvor høyt han kan faktisk telle. Så hvordan kan vi konvertere dette til C? Det kommer til å se litt kryptisk. Men igjen, hvis du ser på hver av disse linjene individuelt de slags lineup generelt. Så tilsynelatende int kommer til å har noen spesiell betydning i C. Vi får se det igjen. Som en side betyr det heltall. Så det betyr bare tall. Så det er typen glassbolle jeg vil, ett som kan lagre numre, ikke ping pong baller. Og jeg kommer til å bruke likhetstegnet der for å tilordne den en verdi på 0. Så det er ganske like sett telleren til 0, men i C. I mellomtiden, mens sant, det var tilsvarende, selvfølgelig, for alltid, selv om det er litt kryptisk, og deretter inne i klammeparentes. Og du kan tenke på disse klammeparentes, som du kan skrive på tastaturet, som virkelig blir som krumningen i disse gule sløyfe blokker i bunnen av. Det omfatter flere linjer med kode. Printf er å få en litt skummelt nå fordi jeg se ikke bare siterer i parentes. Men hva annet er nytt syntaktisk i dette eksempelet? Det er en prosent d. Og så backslash n er der. Vi fikk se at før, selv selv om jeg ikke nevne det. Så er det et komma. Og så er det en teller. Men vi får se i løpet av et øyeblikk at dette er bare en standard måte å si print en "Desimaltall," sitat, unquote, noen desimaltall. Men jeg skal fortelle deg senere hva som desimaltall er. Så det faktum at det er et komma i denne linjen ordtak printf, betyr gå videre og print noen desimaltall. Oh, og forresten, er antall uansett verdien av denne variabelen er. Og så for å gjøre dette mer klart, vil vi se et eksempel før lenge involverer nøyaktig printf i sammenheng med virkelige C-programmer. Nå bare å bryte opp noen av disse konstruerer. Boolske uttrykk, har du kanskje ikke anledning til å bruke disse i programmet men du kan godt, spesielt hvis du bruker forhold. Og så disse to eksempler fra Skrap mener hvis x er mindre enn y, eller når x er mindre enn y og y er mindre enn z, hvordan kan vi oversette det? Vel, i C er det bare kommer til å se slik ut. Litt kryptiske, flere parentes, noen rare-tegn, men fundamentalt ideene er så enkelt som de er i puslespill brikke verden. Vi er rett og slett å sjekke om noe er mindre enn noe annet sted. Hva med forholdene? I et nøtteskall på engelsk, hva betyr dette blings av Scratch kode gjøre ville du si? PUBLIKUM: Sammenligner to tall. DAVID J. MALAN: Sammenligner to tall, og hvis x er mindre enn y det sier så mye. Hvis x er større enn y det sier så mye, annet hvis x er lik y det står like mye. Nå der gjorde x og y kommer fra? Hvem vet. Denne del av Scratch kode er ute av kontekst. Men hva vi ønsker å gjøre nå er å oversette dette for bare et øyeblikk å se. Så som du blir komfortabel denne uken i oppgavesettet 0 spiller i denne verden til venstre, skjønner at ideene ikke er i endring denne uken eller neste eller utover. Vi er rett og slett kommer til å begynner å skrive ting på en annen måte med vår tastaturet i stedet for vår musen. Så hvis x er mindre enn y, og det er noen parentes der, så er det noen klammeparentes igjen å slags kapsle det akkurat som de gule brikkene gjør. Og jeg kommer til å printf x er mindre enn y, og så videre. Hva er fint om C, som du kan se her, er at du ikke får dette hekkende, hekkende, hekker det er nødvendigvis skal skyve koden til høyre. Du kan i stedet ha alt lineup pent liker dette. Men det er bare en estetisk detaljer vi får se igjen før lenge. Greit. Så det bringer oss tilbake til denne kryptiske ser programmet. La oss faktisk skrive noen kode. Nå hvordan du går om å skrive kode på? Alle disse årene du har eid Mac eller PC, stasjonær eller bærbar PC, du har faktisk hatt evnen å begynne å skrive programmeringskode. Men er du sannsynligvis mangler en spesiell type program. Du kan sikkert skrive kode. Men du kan ikke nødvendigvis, ut av boksen, konvertere at kildekoden til objektkode, 0'er og 1'ere uten det på datamaskinen? PUBLIKUM: Compiler. DAVID J. MALAN: Så en kompilator, ikke sant. Nå er de fleste av dere sikkert eier ikke en kompilator, har aldri lastet ned en kompilator. Men du vil se at du kan laste den ned som de fleste andre stykke programvare. I en verden av Mac OS, kan du laste ned eller har lastet ned allerede noe som heter Xcode eller GCC eller Clang. Hvis du kommer fra Windows verden du kanskje har lastet ned Visual Studio, Visual Basic, miljøer sånn. Det er dusinvis av kompilatorer disse dager som du kan bruke. Men den korte av det her er at det ville være en smerte og, ærlig, en teknologisk mareritt for hundrevis av mennesker med ulik datamaskinkonfigureringer til alle konfigurere sine maskiner på nøyaktig samme måte slik at vi alle kan være på samme side. Det vi i stedet gjør i CS50 er vi gi deg en standard miljø, et Linux-miljø som er kommer til å se litt noe sånt som dette. Du vil se mer av dette i Problem Set 1 spesifikasjon som vil gå online dette fredag ​​kveld. Og hva dette betyr er at du heretter kommer til å være i stand til å laste ned og installere et program kalt CS50 Appliance. Og du kommer til å laste ned og installere et annet program som heter en hypervisor, som er bare en fancy måte å oppnå dette. Enten du eier en Mac eller PC eller en Linux-datamaskin eller en Solaris maskin, eller hva gal drifts systemet du kjører, du kommer til å laste ned et program kalt hypervisor som er kommer til å kjøre CS50 Apparatet på datamaskinen uansett hva operativsystemet er. En hypervisor med andre ord konverterer våre ting til uansett språk, Uansett instruksjoner dine egen datamaskin forstår. Så dette er en lagdeling. Og igjen, er denne typen av tematisk i datamaskinen vitenskap, bygningen på toppen av ting. Du har kanskje Windows. Du har kanskje Mac OS. Men fra neste uke du er kommer til å ha lastet ned en gratis stykke programvare kalt hypervisor. Du kommer til å ha lastet ned et stykke av programvare kalt CS50 Appliance. Det kommer til å kjøre i hypervisor, som kommer til å kjøre på din datamaskin. , Og sluttresultatet er at alle av oss vil har et enkelt vindu som dette på din Mac eller PC som gir oss illusjonen av alt kjører samme operativsystem, uten noen annen innvirkning på din datamaskin. Og du kan fullskjerm det og i hovedsak oppfører seg som om du kjører en operativsystem kalt Linux, som er hva CS50 Apparatet er basert på. Så la oss faktisk bruker dette nå å skrive et program. Du kan skrive et program ved hjelp av Microsoft Word. Du kan skrive et program bruker TextEdit, eller Notepad, eller WordPad, eller stort sett alle ord prosessering program du noen gang har brukt. Men realiteten er at du ikke bør bruker virkelig noen av disse programmene. Du absolutt ikke bør bruke noe som Microsoft Word, som har fet vendt og kursiv, og større fonter og mindre skrifter, fordi datamaskinen ikke bryr seg om noe av det. Hele maskinen er kommer til å bry seg om er Engelsk som instruksjoner skrevet i C. Så hva skal vi gjøre inne av CS50 Appliance er å bruke et program fritt tilgjengelig, er og det pre-installert i denne apparatet, kalt Gedit. Og Gedit er bare en super enkel tekstredigeringsprogram som Mac OS er TextEdit, som Windows Notepad som kommer til å ser litt noe sånt som dette. Så la oss faktisk ikke se på lysbilder av dette. Men la oss faktisk gå inn miljøet selv. Jeg kommer til å gå videre og logg inn, i denne andre vinduet, til min CS50 Appliance, som jeg har pre-installert på min laptop her. Legg merke til at, som Windows og Mac OS, det har noen menyer. Som Windows det setter det der nede i stedet av Mac OS, noe som plasserer den der nede. Men realiteten er at det er alle slags samme. Og her er en hel haug med programvare. Det er Dropbox. Det er en hel haug med tilbehør, grafiske programmer som vi vil bruke senere i begrepet for oppgavesett. Det er en nettleser innebygd slik at dette er en fullverdig datamaskin innsiden av en datamaskin. Men jeg kommer til å klikke på denne lengst til venstre hvite ikonet her, som er ikonet for Gedit. Og det kommer til å åpne et vindu som har tre paneler til det, en venstre ene, en topp en, og en nederste. Nå er det i denne topp rette som Jeg kommer til å faktisk skrive noe kode. Så la oss gjøre dette ,. Jeg kommer til å gå til Fil, Lagre. Og du kanskje ikke noensinne har sett dette spesielle vinduet før. Men dette er som Mac OS eller Windows. Det er bare et vindu med alle mappene at jeg har inne i denne maskinen. Og jeg kommer til å spare filen som hello.c. Og jeg kommer til å gå videre og klikk på Lagre. Og nå merker jeg har en fane øverst til venstre som heter hello.c. Så sannsynligvis ganske kjent selv om du har ikke brukt dette programmet før. Og nå kommer jeg til å skrive inn de ganske kryptisk sekvens av kommandoer at vi så et øyeblikk siden. Inkluderer standard I / O.h. Mer om det snart. Int main ugyldig, åpen krøllete brace, lukket klammeparentes. Og så innsiden av det jeg tror er hvor vi hadde "hello world", semikolon. Og nå lagre. Så dette er et program skrevet i C, skrevet derfor i kildekoden. Men jeg kan ikke bare kjøre dette programmet. Jeg slags ønsker å doble klikk på et ikon et sted, men ikke noe ikon finnes andre enn kildekoden filen. Hva, igjen, er prosessen nå at Jeg trenger å kjøre denne filen gjennom? PUBLIKUM: Compiler. DAVID J. MALAN: Så en kompilator. Så i forskjellige datamaskiner du gjøre dette på forskjellige måter. Men det vi har gjort her i den CS50 Appliance som er representativ for hvordan du kan gjøre dette på mange forskjellige systemer, er jeg bare kommer til å kjøre en kommando som heter make. Og make er bokstavelig talt kommer til å gjøre det. Gjør meg et program. Så gjør kommer til å kjøre en kompilator for meg. Og navnet på programmet Jeg ønsker å gjøre er hei. Nå gjør er et program. Og gjør er smart nok til å innse at hvis jeg sier at hei, det kommer til å se automatisk for en fil som heter hello.c bare fordi det er den Måten det er konfigurert. Så når jeg nå trykker Enter her, dette gal kryptiske linjen bare fikk henrettet. Og stol på meg, før lang, i løpet av bare dager, vil du forstå hva alle av det tullet midler. Men for nå, bare vet at gjør utløst gjennomføring av en kompilator. Med andre ord, det finnes en kompilator på min datamaskin som er forhåndsinstallert på CS50 Appliance at vi vil overlate til deg i oppgave Set 1. Og det tok hello.c som input, og produserte tilsynelatende 0'er og 1'ere som utgang. Og som standard hva den gjør er det sparer disse 0'er og 1'ere i en fil som heter hei. Og selv om denne syntaksen også kunne være nye for deg, rett og slett ved å si prikk slash hei kommer til å være den midler som jeg kjører dette programmet. For nå og i minst et par uker, nesten alle programmene vi skriver kommer til å være i svart og hvit tekst vinduer. Ingen mus, ingen klikking, ingen vinduer, ingen ikoner. Vi kommer til å holde det enkelt og fokusere på de underliggende ideene utgangspunktet før vi kommer til noe høyere nivå, for eksempel, som bryte ut spillet som vi snakket om på første forelesning i forrige uke. Så når jeg trykker Enter her, det er tilsvarende i en tekst bare miljø å dobbeltklikke på et ikon som heter hei. Hva forventer du vilje skje når jeg trykker Enter da? PUBLIKUM: Det vil skrive ut "hello world". DAVID J. MALAN: Forhåpentligvis det vil skrive "hello world". Og faktisk det gjorde. Nå har det vært noen kryptisk syntaks her. La oss spole tilbake for bare et øyeblikk og se om vi kan ikke begynne å dedusere bare ved fiksing og triksing, prøving og feiling, om hva som skjer her. Hva om jeg kvitt backslash n? Nå er noen av dere som har programmert før trolig vet umiddelbart hva det betyr. Men for de av dere som har aldri programmert før, minst tenke deg selv hva som skjer å endre seg når jeg kjøre dette programmet? Så jeg kommer til å gå ned igjen til min lille sorte og hvite vinduet, som er vinduet i hvilken Jeg kan kompilere dette. Jeg kommer til å rekompilere hei. Vi kommer til å se det samme kryptisk sekvens av kommandoer. Og jeg kommer til å gjøre dot slash hallo. Og nå noen, hvis du ville, som aldri har programmert før, hva som kan være annerledes denne gangen? Yeah. PUBLIKUM: Det vil ikke stoppe utskrift "hello world". DAVID J. MALAN: Det kommer til-- beklager? PUBLIKUM: Det vil ikke slutte å skrive den? DAVID J. MALAN: Det vil ikke stoppe utskriften "hello world". Så ikke en dårlig idé. Andre ideer? Yeah. PUBLIKUM: Feilmelding? DAVID J. MALAN: Feil melding, OK, kunne være. Hva mer? PUBLIKUM: Det kan skrive ut brakett med semikolon også? DAVID J. MALAN: Kan skrive ut brakett med semikolon også. Så kanskje det backslash er da noen slags terminous som er viktig. Noen andre tanker? Så alle gode ideer. Og faktisk, det kommer å være en feilmelding. Det er nok mest sannsynlig å være svaret generelt for de neste ukene når vi lærer å kode her. Men for nå husker at datamaskiner bare gjøre det du ber dem om å gjøre. Mye som latterlig peanut smør og gelé eksempel. Våre menneskelige datamaskiner var bare ment til å gjøre hva du fortalte dem om å gjøre. Så i dette tilfellet, hvis du ikke fortelle datamaskinen å flytte den blinkende markøren til neste linje, er det ikke kommer til å gjøre det. Så når jeg kjører dette programmet nå, merker forskjellen. Ser ut som en bug. Det er en estetisk bug, kanskje. Men hva er annerledes med denne utgangs versus den siste åpenbart? Yeah. PUBLIKUM: Det gjorde ikke en ny linje. DAVID J. MALAN: Det gjorde ikke en ny linje. Nå de av dere som har kanskje gjort nettsider før, kanskje du vet om BR tag eller avsnittet tag, veldig lik i ånden. En nettleser vil ignorere deg inntil du forteller det nøyaktig hva du skal gjøre. Tilsvarende er et språk som C bare kommer til å gjøre det du ber den om. Så grunnen til at alle disse eksemplene så langt, har en slags casually hadde denne backslash der inne, er at midlene der uttrykke deg selv som en ny linje karakter, så å si. Og du kan slags sette pris på, kanskje, at dette ville se litt dumt hvis ingenting annet. Hvis jeg ønsket en ny linje, bare trykket inn og deretter slag av slakte koden sånn burde egentlig ikke gni deg den rette veien. Og selv om du ikke gjør det virkelig bryr seg på dette punktet, vil du innse at Dette er ikke et særlig god jakt stykke kode. Og så hva verden besluttet år siden er at når du ønsker å sette markøren til en ny linje eksplisitt, du må eksplisitt si ny linje, backslash n. Og det er noen andre symboler sånn. Men for nå vil vi bare fokusere på backslash n. Nå la oss gjøre programmet litt mer interessant. Jeg kommer til å gå videre og denne tid åpner en ny fil. Jeg kommer til å lagre dette som hallo-1.c. Og bare for morro skyld, kommer jeg til å gå sette det inn i min Dropbox-mappen. Som du vil se i CS50 dokumentasjon for apparatet, senere denne uken for Problem Sett 1, vil vi oppmuntre deg å bruke Dropbox eller noen tilsvarende tjeneste, fordi da alle dine normens kommer til å bli støttet opp automatisk. Og så det er derfor jeg har gått inn i denne mappen her. Og nå kommer jeg til å skrive et litt annerledes program. Inkluderer standard I / O.h, int main annullert. Og så her printf, hello world, som er nøyaktig det samme som før. Men nå vil jeg skrive ut noe som er litt annerledes. Jeg ønsker å skrive ut, si: "Hei, David." Greit, så åpenbart, det skal forhåpentligvis være slik at hvis jeg rekompilere dette programmet, kjører den, det kommer til å si "Hei, David." Men hva om jeg ønsker å introdusere denne typen variable, oppfatningen av en container som kommer å lagre D-a-v-i-d, og det er ikke vanskelig kode inn i mitt program. Vel hva om jeg starter gjøre noe som dette? String s, så dette er en variabel. Hvis du vil ha en streng, a.k.a. et ord eller en setning. En sekvens av tegn er hva vi i programmering kaller en streng. Vi skal bare generisk samtale det s, fordi det er en fin enkel navn. Men jeg kan kalle det noe. Jeg kommer til å si streng s equals quote unquote "David," semikolon. Og nå vil jeg sette D-a-v-i-d inn i hva jeg er utskrift. Og før vi så en teaser på skjermen av noen spesiell syntaks som tillot oss å erstatning i en verdi. Hva var spesielt symbol noen lysbilder siden? Så prosent. På den tiden var det prosent d for desimaltall. Det betyr egentlig ikke synes relevant her. Det viser seg at det er en annen prosent symbol, som er prosent s, som står for en plassholder for en streng. Så nå, veldig enkelt, jeg er kommer til å gå gjøre hallo-1, fordi denne filen heter hallo-1.c, og trykk Enter. Og jeg skrudd opp. Hva er det som skjer? Vel, her er der vi må begynne å setter pris på at vi er i denne kommandoen linje miljø, denne tekst bare miljø. Det er ingen klikke på ikoner som mapper akkurat nå. Og tenke tilbake et øyeblikk siden. I det som gjorde mappe jeg si Jeg var redde koden min? Så Dropbox-mappen. Kunne ha blitt kalt noe. Men det skjer for å bli kalt Dropbox. Så jeg liksom trenger å dobbeltklikke på at Dropbox-mappen for å få inn i det og få på min kode som kalles hallo-1.c. Faktisk, la meg gå videre og minimere dette vinduet for bare et øyeblikk. Akkurat som Windows og Mac OS, det er mapper i Linux. Det er mapper i CS50 Appliance. Det er akkurat nå vi avgrense oss til denne teksten miljøet. Men hvis jeg dobbeltklikker på Dropbox, merke det er filen som jeg ønsker å kompilere. Men jeg trenger svart og hvitt terminalvindu, så å si. Men jeg trenger derfor å flytte i den mappen eller katalogen. Så litt uforståelige, men Du blir vant til dette også. I en verden av Linux, som igjen er drifts systemet vi kjører innsiden av CS50 Apparatet, det er en kommando som heter CD. Som betyr at jeg kan gjøre CD, mellomrom, Dropbox. CD, endre katalogen. Høyre. Tilbake i dag da folk var inventing datamaskiner og drift systemer som dette, ønsket de å skriver færrest tastetrykk mulig. Så den enkleste måten å si Endre katalog var CD. Så hvis jeg treffer CD, plass Dropbox, legge merke til hva som er endret her. Innsiden av parenteser apparatet er snill av humoring meg og minner meg hvor jeg er. Så den åpne mappen er Dropbox. Hvis jeg nå skriver ls for liste, igjen fyndig, fordi folk ikke ønsker å skrive tilbake i dag l-i-s-t. Så de i stedet gjort det Ls. Enter. Merker jeg ser to ting, hallo-1.c, og så denne kryptiske ting, kilde 1m. Det er bare min måte å si kildekoden for uke 1 mandag. Det er en mappe jeg lastet ned fra CS50 hjemmeside som jeg gjorde tidligere i dag og bare sette den inn i apparatet på forhånd. Men for nå det eneste vi bryr seg om er å lage dette programmet. Så når jeg skriver at hallo-1, Enter. Pokker. Noe gikk galt. Så la oss erte dette fra hverandre. Og dessverre er dette hvor ting bli litt stressende i starten, i hvert fall hvis du har aldri programmert før. Min gud. Jeg skrev en to linjers program og Jeg har fire linjer med feil. Så hva er det som skjer her. Først og fremst alltid bla tilbake opp og finne den første feilmeldingen, fordi ofte kompilatorer bare bli forvirret av hva du og jeg gjør. Kompilatorer er ganske dum. De vil bare gjøre det du forteller dem å gjøre. Og hvis du forvirre dem, de er bare kommer til å slags kaste opp hendene og kanskje kaste flere feilmeldinger enn er faktisk relevant. Så la oss se på den første. Super kryptisk i begynnelsen. Men legg merke til, her er navnet på fil der jeg skrudd opp tilsynelatende. Colon 5, tykktarm 5 betyr bare på linje 5 på femte tegn. Så femte kolonne av tegn, om du vil, feil. Bruk av svart identifikator streng. Mente du standard n? Nei, jeg mente streng. Og da er det slags kopiere og lime inn hva jeg skrev å virkelig trekke min hensyn til hvor jeg skrudd opp. Så annen grunn C, eller i det minste kompilatoren ikke forstår ordet streng. Og det er fordi vi har gjort det opp. Så streng eksisterer ikke i C. Hva CS50 gjør, for de første ukene bare av klassen, er vi gi noen opplæring hjulene, så å si. Og vi sette disse trening hjul innsiden av en spesiell fil som heter CS50.h. Så dette er den andre av to fil navn som tilsynelatende slutter på dot h. La oss spole tilbake. Printf er en uttalelse eller funksjon som tilsynelatende skriver noe til skjermen. Men du ser ikke meg implementere printf, ikke sant. Someone år siden implementert printf. I hvilken fil du ville satse han eller hun sette gjennomføringen for printf, koden for printf? I en fil kalt standard I / O.h. Faktisk er det sannsynligvis i to filer, standard I / O.h, som står for header filen, og standard I / O.c, som står for C kildekoden. Så han eller hun for noen år siden plopped koden som de skrev i denne filen slik at folk som oss år senere kan inkludere det, så å si, i våre egne programmer. Og ja, det er hva firkanttegn etterfulgt av ordet omfatter gjør. Det ser ut på den lokale harddisken, finner filen som heter standard I / O.h, og deretter effektivt kopier og limer det inne i min egen fil. Så nå mitt program vet hvordan du skriver ut til skjermen. Så ved den logikken, der er streng definert? PUBLIKUM: CS50.h. DAVID J. MALAN: CS50.h. Og ja, det er hva vi, kjernen ansatte, har gjort. Vi har oppfunnet noen datatyper, så å si, som en streng, i tillegg til de du får gratis, som en int. Og vi vil se andre som en char for en karakter og noen flere. Innsiden av CS50.h tilsynelatende er i det minste noen omtale av strengen. Så nå la meg gå videre og reprise make hallo-1. Jeg skal zoome inn igjen og krysse fingrene. Nå etter å ha gjort en endrer jeg fikset det meste. Men damn it. Flere prosentene enn data argumenter. Hva har jeg gjort galt denne gangen? Så det er fortsatt ganske kryptisk. Men denne feilen er på linje 7 og karakter 21. Så la oss gå se opp her. Det er litt subtil. Men hvis du tenker på hva de grunnleggende ideer her er, kanskje vi kan erte dette fra hverandre. Så printf er navnet på funksjonen. Parentes, så langt, er akkurat som hva vi legger rundt ting vi passerer som input til en funksjon. Greit, bare en vilkårlig menneskelig konvensjonen. Bruke parenteser. Innsiden av disse parentes vi har vært å sette anførselstegn, og deretter en streng som "hello world". Men i det tidligere eksempel svært kort gjorde vi ser på med Scratch. Og vi hadde prosent d, hva annet var inne i disse parentes at jeg ringte ut verbalt? Yeah. PUBLIKUM: Så det er hva du tar [Uhørbart] innenfra [uhørbart] hva disse [uhørbart]? DAVID J. MALAN: Nettopp. Så vi hadde prosent d. Men da vi hadde nær sitat, komma, teller. Høyre. Vi spesifisert hva vi ønsker å gjøre som plassholder. Så det jeg skal gjøre her er komma, hva vil du at jeg skal sette? PUBLIKUM: S. DAVID J. MALAN: S, fordi s i dette tilfellet er navnet på lagringsbeholderen. Det er navnet på den glassbolle. Mens før det var telleren i at enkel Scratch eksempel har vi sett på. Så nå har gjort to endringer, la meg zoome inn og prøve en gang til kompilere dette programmet. Nå ser jeg at kryptisk linje. Men det er faktisk den navn av kompilatoren. Clang er navnet på kompilatoren. Gjør er bare å spare meg hodepine av noen gang å skrive så lang gal kommando ut. Så nå hvis ikke jeg dot slash hallo-1, Jeg burde se "hallo, David." Ganske uimponerende, skjønt, ikke sant? Vi kunne ha gjort dette mye enklere uten å snakke om variabler og CS50.h og alt det. Så la oss gjøre det en litt mer interessant. I tillegg til CS50.h, å ha ting som streng erklærte den CS50 biblioteket har også noen funksjoner. Så akkurat som år siden, skrev noen printf og legg den i standard I / O.h og en annen fil. Vi, CS50 ansatte, skrev en funksjon kalt getchar, GetDouble, GetFloat, GetInt, GetLongLong, GetString, og vi putte dem i en fil kalt CS50.h og CS50.c. Og vi setter dem inne av CS50 Appliance. Og folk kan også laste dem ned på nettet hvis de ønsker å sette dem på deres egne datamaskiner også. Som er å si at vi har skapt funksjoner som får input fra brukeren. Jeg vet ikke hva alle av disse datatypene. GetInt er slags grei, som få et heltall eller annen måte fra brukeren. Og GetString er sannsynligvis like get et ord eller en setning fra brukeren. Så la oss fokusere på det. Og jeg kommer til å gå tilbake til apparatet og jeg kommer til å gå videre og lagre filen som, la oss kalle det hallo-2.c som min andre versjonen. Og la oss gjøre et par endringer. Denne gangen i stedet for hardt koding David, som gjør en utrolig konsekvent men uimponerende program, hva om jeg i stedet gjøre GetString? Nå merker GetString har en åpen parentes, lukket parentes, fordi det trenger ikke noen innspill. Det er bare kommer til å gå får en streng fra brukeren. Og nå et ord på annen syntaks. Semikolon bare avslutte en linje med kode. Du trenger ikke dem overalt. Men som bare betyr at jeg er ferdig med denne linjen med kode. La meg flytte til en annen uttalelse eller funksjon. String erklærer en variabel. String er som å si gi meg en bolle, takk. Og la meg si en streng i den. Og nå likhetstegnet. Hva er likhetstegnet i hovedsak tilsvarende? PUBLIKUM: Tildel. DAVID J. MALAN: Yeah, tildele en verdi. Så hvis jeg for eksempel samtale denne funksjonen GetString, og vi vil se i et øyeblikk som er kommer til å be brukeren om en streng. Dette er som å la meg deretter skrive D-a-v-i-d på et stykke papir. Og når jeg sier streng s tilsvarer GetString, lik betyr egentlig ikke lik i C programmering. Det betyr tilordne fra høyre side til den venstre side. Så jeg har fått en streng. Og likhetstegnet betyr sette det i oppbevaringsbeholderen kalt s. Og så sende denne ut til printf å faktisk gjøre sin ting. Så sluttresultatet deretter kommer å se litt annerledes ut. La oss gjør hallo-2. Enten kunne fungere. Du følger med. Gjør hallo-2 virket. Dot slash hallo-2, Enter. I synes å ha en uendelig løkke eller noe. Ingenting skjer. Hvorfor? PUBLIKUM: Det gjør en uendelig loop. DAVID J. MALAN: Det er en uendelig løkke. Det er slags venter for meg å faktisk gi det med noen innspill. Så la meg gå videre og skriv i David, og trykk Enter. Og nå står det "hallo, David." Hvis jeg kjøre den på nytt. La oss skrive inn Rob, "hallo, Rob." Nå er dette den verste brukergrensesnitt noensinne. Brukeren er tydeligvis skal vite hva de skal gjøre. Men uansett. Ved hjelp av disse samme bygning blokker akkurat som i Scratch, vi kan løse det problemet, og si noe som ditt navn please, tykktarm, plass, lukket sitat, nær parentes, semikolon. Så mye igjen dumhet med syntaksen. Men merker jeg har nettopp lagt en puslespillbiten over dette og over denne. Så nå hvis jeg kjøre dette, hallo-2, Enter. Vent et minutt. Hva er galt? Det er ikke oppfører seg annerledes. Yeah. PUBLIKUM: Du ble ikke kjørt gjøre igjen. DAVID J. MALAN: Jeg gjorde ikke kjøre gjøre igjen, ikke sant. Så jeg har forandret meg kildekoden. Men igjen, det er som flyter. Kildekode gjennom kompilatoren gir du ny objektkode, eller 0'er og 1'ere. Så jeg må faktisk reprise make hallo-2 Enter. OK, synes noe å ha skjedd. Dot slash hallo-2. Ditt navn takk. Og for å være klart nå, hvorfor er markøren på samme linje? Nettopp. Jeg la ikke backslash n her oppe i min kode. Så nå kan jeg skrive noe sånt Daven, Enter. Jeg kan kjøre den på nytt, og skriv noe sånt som Gabe, Enter, og vi får et annet program igjen og igjen og igjen. Nå til slutt skal vi trenger å bruke noen forskjellige evner. Vi trenger å innføre slutt noen forhold til å gjøre ting betinget. Kanskje looper slik at vi kan gjøre ting igjen og igjen. Kanskje det ville være fint om vi kunne gjennomføre våre egne funksjoner, at vi kunne gjennomføre vår egen printf eller vår egen versjon av GetString og GetFlow, fordi slutt selv ved hjelp av denne kommandolinjen miljøet kan vi gjøre selv de mest visuelt interessant ting. Faktisk i konklusjonen la meg gjøre dette. Jeg kommer til å gå videre og lukke disse vinduene og åpne dette ikonet her, som er bare en større versjon av det innebygde terminalvindu. Så Gedit har ikke bare stedet for min kode, men også en innebygd terminalvindu, den svart og hvitt vindu hvor jeg kan kjøre kommandoer. Jeg skjedd bare å åpne en større versjon av denne. Og nå kommer jeg til å gå inn mappen som jeg allerede har satt på forhånd på kurset hjemmeside. Og jeg kommer til å gå videre og åpne en fil som heter thadgavin.c, som ble skrevet av noen andre. Og hvis vi ser på dette, dette er ikke hva slags kode vi skal skrive siden målet med denne koden var å skrive den peneste ser kode som han eller hun kunne, uavhengig av hvorvidt et annet menneske kan noensinne forstå denne koden. Faktisk, hvert år er det er det som er kalt en maskeres C konkurranse, som er for ekte nerder som skriver kode som ingen andre kan lese, men det gjør noe heller veldig enkelt eller virkelig fantastisk. Og vi trodde vi skulle konkludere med dette utseende på noe som er ganske utrolig du kanskje har sett en gang før. Men vi vil ende på dette notat, dot slash, thadgavin. Dette er da hva som venter. Det er det for CS50. Vi vil se deg på onsdag. [Musikk spilles]