[MUSIC SPILLE] JASON Hirschhorn: OK, alle sammen. Velkommen til del. Dette er CS50, vår svært første super-delen. Som dere alle vet, neste uke faste seksjoner vil starte, men denne uken er vi alle sammen. Det er meg selv. Mitt navn er Jason. Jeg er lektor i informatikk. Vi har Andi, som er leder TA av CS50. Og Scaz, Professor Brian Scassellati, Han er professor i informatikk. Vi er CS50 hodene på Yale. Du kan alltid email oss heads@cs50.yale.edu. Vi vil være på forelesninger. Vi vil være på kontortid. Hvis det er stadig noe vi kan gjøre for deg, alt du trenger, gjerne nå ut til oss. Så hva skal vi gjøre i dag? Eller før da, hva er kommer opp denne uken? Så kontortid er mandag, tirsdag, Onsdag og torsdag 08:00 til 11:00. Det er en tidsplan på nettstedet. Seksjoner, som jeg nevnte, starter neste uke. Og du vil finne ut denne uken hva Planlegg ditt delen er, hvilken dag det er, og hvem som er din TA er. Problem Set 1 skyldes på torsdag på formiddagen, fredag ​​midt på dagen med en sen dag. Ja, du har ni sene dager. Og det er ni oppgavesett. Og kan bare bruke én sen dag per problem sett. Ja, i kraft, all problem sett forfaller fredag ​​midt på dagen. Det er alt. Alt som detaljene er på pensum. Hver fredag ​​har vi lunsjer. Vi ønsker å gjøre dette store Selvfølgelig føles litt mindre. Så du er velkommen til å RSVP. Gratis lunsj med stipendiat klassekamerater og ansatte. cs50.yale.edu/rsvp. Alle disse tingene som Jeg har på skjermen, og mer, kan du finne cs50.yale.edu eller cs50.harvard.edu, hvis du går til Harvard og ser på dette online. Også på disse nettstedene, er det er massevis av ressurser for deg. Hver forelesning ikke bare har video av foredraget, men også notater. Noen vil se forelese og ta notater for deg. Så du kan bare betale oppmerksomhet under forelesninger, eller du kan bruke sine notater / vår notater for å supplere dine egne notater. Det er lysbilder online. Kilden code-- alt David går over i foredraget eller Scaz går over foredrag, som kildekoden er tilgjengelig online så vel som som jeg nevnte videoer. Seksjoner, på samme måte, vil alle bli filmet. Alle disse slides vil være tilgjengelig. Alle som kode vil være tilgjengelig for deg. Det er shorts på nettstedet der CS50 medarbeidere tilbringe fem til ti minutter å gå gjennom emner for deg. Noen av de du allerede har påtruffet i oppgavesett. Kontortid, som jeg nevnte, mandager gjennom torsdager, 8:00 til 11:00. CS50 Study er en fantastisk ressurs. Det er praksis problemer, eksempel lysbilder, kjente feil at elevene liker å kjøre inn, for i hovedsak hvert emne vi vil dekke i dette kurset. Og til slutt, på dette lysbildet minst, Reference50 som gir deg informasjon på alle C-funksjoner du noensinne kunne muligens håp å bruke og mange, mange flere. Igjen, som dot dot dot på bunnen av skjermen er å vise at det er enda mer ressurser på disse to nettstedene: cs50.yale.edu, cs50.harvard.edu. Så, hva er det vi gjør i dag? Vel, første jeg kommer til å gi du ser på ressursene. Allerede gjorde at en. Se på oss. Nå skal vi gå over datatyper og operatører i C. Deretter Andi vil komme opp her og gå over biblioteker i C, printf (), en funksjon som du allerede kjente eller vil raskt bli veldig kjent. Og du vil også gå over conditionals og loops. Og så til slutt, Scaz vil gå over CS50 ID. Hvis du ikke har due i allerede i oppgave Set 1, samt hvordan du bruker terminal og nyttige kommandoer og deretter gi deg noen demoer og praksis koding i CS50 ID. Før jeg hopper inn i dette Innholdet på denne siden, does noen har noen spørsmål så langt? Flott. OK. Giring. [Giring] Det var meg skiftende tannhjul i en manuell bil. Så datatyper i C, du kan ikke bare ha en variabel x og la det være på linje 10, et heltall, kanskje tallet 1, på linje 20, et desimaltall 10,5, og deretter et par linjer senere en streng, jeg elsker CS50. I C, kan variablene bare være en ting, og en ting bare. Og så må du gi dem typer. Og på dette forumet, vi har en liste over typer. Det er tegn som stå for tegn. Så det er en bokstav A, B, C, D. Det kan også være en plass, eller som også kan være en ny linje karakter. Det er hele tall, som er like tall, hele numbers-- eller heltall rather-- men ingen desimaler. For desimaler, har vi flyttall. Flyttall er tall med desimaler. Så er det lengter, som er hovedsak lengre heltall. Du vil merke at en lang er 8 mens en int er 4. Jeg får til det i et sekund. Det er fordi lengter kan lagre enda flere tall enn en int kan lagre. Double er en lang dupp. Og til slutt, har vi streng, som er en type at du sannsynligvis har brukt før. Hvis du inkluderer hashtag # includeCS50.h i kildefilen, så kan du bruke en streng type. Det er faktisk ikke bygget inn C. Det finnes et par andre typer også. Men disse er de viktigste de med som du vil bruke og møte. C som, igjen jeg nevnte, hver variable-- det kan bare være en type og en type. Det er fordi C er en statisk skrevet språk, i motsetning dynamisk skrevet språk der hvis du oppretter en variabel du kan endre hva som er lagret i det som du går videre i programmet. Over her på høyre hånd side, jeg har de forskjellige størrelser av disse typer data i byte. Så en karakter er en byte. Det er 8 biter. Og det betyr fordi 8 bits det er åtte 0'er og 1'ere. Vi så de demoer i første uke med at binære pærer. Med 8 biter eller en byte, kan vi representere tall fra 0 til 255. Høyre. Hvis alle 8 bits er 0 som er 0. Hvis den første biten er 1, er at antallet en, og så videre, helt opp til 255. Og det er derfor for tegn du kan har i hovedsak opp til 255 av dem, men det er nok til å dekke alle tegnene må vi bruke. For heltall, kan du ha 0 og da har du 2 til 32 minus 1. De er hvor mange alternativer du har for heltall. For en lang, har du 0 til 2 til 64 minus en. Så du har mange, mange, flere alternativer for lengter. Strenger, er det et spørsmålstegn fordi det er en cliffhanger til senere. Yeah. Jeg kunne fortelle alle er på kanten av setet sitt, som hva er det spørsmålstegn? Det er en cliffhanger. Vi vil til slutt dekke størrelsen strenger og snakke mer om strenger. Fordi strengen er faktisk en av trening hjul vi satt på i denne kurs i begynnelsen og deretter ta av senere på, fordi strenger i C er faktisk pekere å karakter arrays. Men igjen, det er en Cliffhanger for senere. Før jeg går videre spørsmål, kommentarer, bekymringer om dette lysbildet? OK. Jeg må være en fantastisk explainer. Også når du er programmerer, du kommer til å bruke disse aktørene. Virkelig enkle tegn som kan gjøre enkle operasjoner, som du antakelig allerede godt kjent. For eksempel, på høyre siden, ser vi legge til. For å legge til, du bare gjør et plusstegn. Og så må du kanskje to variabler x og y. Du kan gjøre x + y i koden. Kanskje du ønsker to-- si deg har nummeret 7 og 3, du ønsker å lagre som i en variabel kalt sum. Du kan gjøre int for typen, plass sum, navnet av variabelen, = 7 + 3; Hva ville den butikken i sum? Anyone? Hvis jeg hadde i sum = 7 + 3. Hva som ville være lagret i sum? Du kan bare rope det ut. PUBLIKUM: 10. JASON Hirschhorn: 10! Det er helt riktig. Hva om i sum = 7 - 3, Jeg bare bruke det dash tegn. Hva kommer til å bli lagret? PUBLIKUM: 4. JASON Hirschhorn: 4. Summen er trolig feil navn for det variable, men 4 vil bli lagret. Å formere seg i C, bruker lite Stjerners karakter, trenger du ikke bruke en x. Å dele, bruke en Forward Slash ikke divisjonen symbol. Og for å modulo, bruker Percent symbol. Så la oss si at jeg ønsker å se int z = 7% 3, vil det bli lagret i z? Så, det er i hovedsak spør hva gjør modulo gjøre? Vet noen hva modulo gjør? Yeah. y 4. SPEAKER 1: Det er resten. JASON Hirschhorn: Det er den resten når du deler. Så 7 delt på 3 er to resterende en. Slik at en vil bli lagret. Du gjorde subtraksjon, men det er hvordan det fungerer. Det er hva modulo operatør gjør. Det tar en rekke deler den av et annet nummer og returnerer til deg resten. Så igjen, 7% 3 gir deg en, fordi 7 delt på 3 er to resterende 1, og returnerer resten. Hva om la oss gå tilbake opp ett trinn til at divisjonen tegn. Hvis jeg gjorde 7 / delt på tre gjør Noen som vet hva som ville komme tilbake? SPEAKER 2: 2. JASON Hirschhorn: Hvorfor 2 og ikke 2,333? SPEAKER 2: Jeg tror det skjærer av etter hele tall. JASON Hirschhorn: So det er helt riktig. I C, hvis du gjør delingen av to heltall 7 delt på tre, det blir svaret som i dette tilfellet 2,3333 forever og den finner at desimaltegn og hakker alt av etter desimal og det bare returnerer du to. Så hvis jeg gjorde 8 delt på tre. Som faktisk, vi vet som å gå tilbake 2,666, men det hakker alt av på desimaltegnet, avkorter det hele, og bare tilbake til deg to. Så 6 dividert med 3, 7 delt med 3, 8 dividert med 3, er alle kommer til å vende tilbake til dere to. Er det noen som vet, eller har en gjetning, om hvordan jeg kunne faktisk få hele svaret hvis jeg vil at desimal? Yeah. Gå fremover. SPEAKER 3: Bruk en dupp? JASON Hirschhorn: Hva mener du? SPEAKER 3: Fordi du sa float er for tall [uhørbart] JASON Hirschhorn: Høyre. Så, det er helt riktig. 7 er et heltall. Men hvis jeg ønsket å slå det inn i en flyttall, Jeg ville ha til å lagre det som 7,0 fordi datamaskinen er virkelig stupid-- vi så at med PB og J example-- det vil bare gjøre akkurat hva du forteller det. Så hvis du skriver 7, det tror det er et heltall. Hvis du skriver 7.0, selv om vi vet disse tingene er tilsvarende, den behandler som som en desimaltall. Så hvis du gjorde 7,0 delt av tre, eller delt på 3,0, det vil si, OK, nå vi har å gjøre med flyter. Jeg kommer tilbake til deg 2.333333 alltid. Men egentlig ikke for alltid, fordi som vi så også i foredraget disse flyttall er ikke akkurat presis. Så hvis du vil at desimal, eller en del av dette desimal, så må du use-- en av dem må være et desimaltall og datamaskinen må forstå at dette er en flytende punktet du er arbeider med, ikke er et heltall. Eventuelle spørsmål om dette bordet på høyre side, så langt? Eller venstre side, din venstre, venstre side. Yeah. SPEAKER 4: Høyre. For akkurat som en vanlig heltall, ville du write-- ville du måtte skrive flyte? JASON Hirschhorn: Yeah så. Vel, hvis du ønsker å opprette en variabel som er en dupp, du trenger å si float z er lik noe. SPEAKER 4: OK. JASON Hirschhorn: Men hvis jeg ønsket å gjøre 7 delt på 3 og få den desimal, Jeg ville gjøre float z = 7,0 / med 3,0; og som ville gi meg flyttall nummer. SPEAKER 4: OK. JASON Hirschhorn: Hvis jeg gjorde noe som int z = 7 / med 3, som ville gi meg et heltall, fordi de er alle heltall. Gir det mening? SPEAKER 4: Ja. JASON Hirschhorn: OK. Flott. Andre spørsmål om dette bordet? Virkelig? Jeg er så spent. OK. Så noen andre ting du vil bruke, ofte i forhold eller løkker, er disse typer operators-- disse typer boolske uttrykk. Og som vi har lært, er det du == bruke for å sjekke om to ting er like. Så her jeg sjekke om x == y, la oss igjen antar at x er 7, og y er 3. Så hvis jeg skrev 7 == 3, hva ville det tilbake til meg? Er det sant eller usant? PUBLIKUM: False. JASON Hirschhorn: OK. Jeg føler at alle kan få denne. Så alle sammen, hva ville det komme tilbake? PUBLIKUM: False. JASON Hirschhorn: False. Flott. 7 ikke lik tre. Så 7 == 3 vil returnere false. Du har en ikke likhetstegn, så hvis jeg merket av 7! = 3, hva ville det komme tilbake? PUBLIKUM: Sann. JASON Hirschhorn: Sann. Utmerket. Noen var veldig ettertrykkelig i ryggen og setter pris på det. Da har du mindre enn operatør, mindre enn eller lik operatør, større enn operatør, større enn eller lik operatør. Så en mer sunn fornuft sjekk. Hvis jeg hadde 7 er større enn eller lik tre. Hva ville det komme tilbake? PUBLIKUM: Sann. JASON Hirschhorn: Sann. Ja. Det bakrommet, bakside av rommet, fantastisk. Du kan kombinere disse uttrykk hvis du vil, også, med en logisk OG, som er && Eller en logisk OR som er || ||. Og så nå kan du teste to ting together-- Er det morsomt? Hvorfor er det morsomt? Så hvis jeg ville, kan jeg si er 7 er større enn 3 og 2 er mindre enn 4? Vel, hvis 7 er større enn tre, det er sant. 2 er mindre enn fire, det er sant. Så dette hele greia ville returnere true. Hvis jeg testet syv er større enn 3 og-- Jeg bare plukke tilfeldige tall her-- 4 er mindre enn to, vel, det er falsk. Så sant og usant make falsk. Og du kan gå på og du kombinere så mange forhold sammen som du ønsker. Er det noen som har noen spørsmål, kommentarer, bekymringer så langt? Og jeg ser noen av dere å ta bilder av meg i skjermen, noe som jeg setter pris på. Forhåpentligvis er det ikke snapchat. Forhåpentligvis er det for notatene. Men alle disse kommer å være tilgjengelig på nettet. Så du trenger ikke å ta bilder av dette. Som jeg nevnte, alt vil være tilgjengelig på nettet for deg. OK. Jeg er i ferd med å få utenfor scenen, så gjør noen ønsker å si noe før det skjer? Spørsmål? [Interposing VOICES] JASON Hirschhorn: Oh, stopp. Dere er også fint. OK. Jeg kommer til å merke ut. La oss gå. ANDI PENG: Vi kommer til å gjøre en vanskelig mic endring nå. JASON Hirschhorn: Jeg er kommer til å ta dette av. ANDI PENG: Setter pris på støtten, folkens. Kan du høre meg? Er det bra? Perfekt. Vakkert. La meg bare brette det i. OK. Så, jeg er i ferd med å gjøre som en gigantisk informasjon dumpe på dere akkurat nå. Og ingen bekymringer overhodet hvis du er ikke å følge hver lille linje med hva Jeg er i ferd med å vise deg. Som Jason sa, alt er helt online. Bare vi kommer til å prøve å introdusere alle til begrepene dekket i noen av disse lysbildene. Så bare følge med. Ingen grunn til bekymring dersom du ikke forstår alt; imidlertid, hvis til enhver du føler tapt, heve Derimot vil vi stoppe, ingen bekymringer. Cool. Så jeg tror noe på at David har allerede slags nevnt i forelesning og Jason har slags hentydet til i dag er det et bibliotek er. Så i programmering, har vi disse tingene kalt biblioteker. Der, i hovedsak, alt de er bare et sett av funksjoner, som er egentlig bare kode som er allerede blitt skrevet av noen andre som vi kan alle bruk innenfor våre programmer. Så hvordan gjør en normal bibliotek arbeid, ikke sant? Du kommer inn i biblioteket døren. Du har alle disse bøker du kan trekke ut og du kan få tilgang til informasjon innenfor disse bøkene. Samme i programmering. Du har et bibliotek som allerede har er skrevet av andre mennesker. Og måten du kan, som programmerer eller en student, kan få tilgang til det biblioteket er gjennom hashtag # include. For eksempel, i C vi har tre C-- mest brukte tre-C standard libraries-- input / output bibliotek, strengen bibliotek, og regnestykket bibliotek. Så i løpet av den første par problem setter, de vil være tre at du først og fremst bruker. Så som David allerede forklart i foredraget standard I / O-bibliotek, eller standard input / output bibliotek gjør akkurat det. Det gjør at du, i koden din, til innspill alt fra brukeren og utgang som til skjermen, i det vesentlige skriver den til skjermen. Og så helst at du bruker noen funksjoner, for eksempel funksjonen printf () hvilken vi kommer til å gå over neste lysbilde, sørg for å inkludere standard I / O bibliotek eller annet du ikke kommer til å kunne bruke printf () -funksjonen. Fordi du, som programmerer aldri faktisk skrev at funksjon, du bare bruker noen annens kode i din egen kode. Betyr det fornuftig alle? Cool. Og da er vi i hovedsak komme inn den string.h biblioteket og math.h bibliotek, .h bare betyr bibliotek, andre bibliotek som du etterhvert skal bruke i koden. Imidlertid, for formål av dette biblioteket, vi også have-- av dette class-- vi har også det som kalles CS50 biblioteket, cs50.h, hvor vi, for gjennomlesing din har skapt mange viktige og nyttige funksjoner. Slik at du som programmerer kan piggyback off hva vi allerede har skrevet slik at Denne funksjonen er tilgjengelig for deg for din bruk. Jeg skal dekke et par funksjonene som vanligvis brukes, men vet at disse er alle googleable online. Føl deg fri, dra opp CS50 biblioteket og da har du alle funksjonene der. Yeah. SPEAKER 5: Så hvis du ikke var hjelp av programvaren som er gitt til oss av klassen, gjør at mener vi må laste ned og finne denne overskriften filen oss selv og fortelle datamaskinen der det er? ANDI PENG: Great spørsmålet. Nøyaktig. Så det er som om du ikke er fysisk til stede ved et bibliotek, det er ingen måte for deg å faktisk gå og få tilgang til den. Så det samme med programmering i C, du må sørge for at du bruker vår apparatet fordi biblioteket er allerede er innarbeidet i den. Og så når du hashtag #include, bibliotekets der. Yeah. Godt spørsmål. Alle gode? Cool. Greit. Så vi kommer til å treffe, hovedsak, hva er den første funksjon som vi som programmerere er skal bruke i vår kode. Dette kalles printf () -funksjonen. Så, printf () -funksjonen, som jeg har allerede sagt i det siste lysbildet, er inkludert i standard I / O, standard input / output, bibliotek. Så sørg for at uansett hva du using-- oh, la meg ta tak i laser pointer-- når du bruker printf () -funksjonen, du må inkludere standard I / O bibliotek eller annet, når du kompilere, du kommer til å få en feil fordi datamaskinen vil være like, Åh, jeg vet ikke hvor printf () er, du ikke fortelle meg hvor printf () er. Vel printf () er inkludert i standard I / O, så når du bruker printf (), sørg for å ha det linje ovenfor koden din. Så for eksempel printf () her er en funksjon. Alt det gjør er å skrive ut noe i parentes for brukeren. Vil noen liker å ta et stikk på hva denne linjen med kode rett her kommer til å skrive ut? Derfor er svaret på skjermen. Anyone? VERDI: Den nederste. ANDI PENG: Verdi, hvorfor ikke du gå videre og si hele setningen? VERDI: Hei, mitt navn Andi, og jeg er 20 år gammel. ANDI PENG: Ah, nydelig. Så i denne linjen vi kommer til å skrive ut, Hei, mitt navn er Andi, og jeg er 20 år gammel, noe som er faktisk et sant utsagn. Syntaks. Så par syntaktiske problemstillinger som dere vil være sikker på at du vet. Sitater. Anførselstegn fortelle datamaskin som alt inni kommer til å bli skrevet ut. Alt inni boksen bare være nøyaktig hvordan du skriver det, med unntak av vanligvis ved enden, vi kommer til å ønske å inkludere en hash-- oh sorry-- en dash n. Så en dash n. Er det noen som ønsker å ta en gjetning på hva som gjør vår kode? Yeah. SPEAKER 6: Setter den på en ny linje. ANDI PENG: Nettopp. Så alt dette gjør er tillate uansett hva som skjer etter dette, etter denne uttalelsen, som skal skrives ut til en ny linje. Slik at når du skriver din kode du ikke tilfeldig ha ting flytt til slutten at du ikke vil. At alt blir pent trykt én linje og så starter vi på neste linje. Er det noen som husker hva som semikolon gjør når vi er koding? Yeah. SPEAKER 7: Uttalelse. ANDI PENG: Sorry? SPEAKER 7: Betyr det ende uttalelsen? ANDI PENG: Yeah. Så i C, eller programmering språk, semikolon betegner enden av en programmerings linje. Så for eksempel i engelsk bruker vi perioden å si, oh dette er slutten en setning. I programmering samme, har vi en semikolon for å betegne slutten av en linje. Ofte når du er begynner å programmere, vil du innse at du Husk å legge til et semikolon og deretter prøver å kjøre kode og det fungerer ikke. Og du er like, Ah, jeg gjør ikke vet ikke hvorfor, det skal jobbe. Sjansene er du sannsynligvis glemte en semikolon eller en brakett eller noe et sted. Så, det er viktig å huske. Cool. All right, håndsopprekning, hvordan mange mennesker her noensinne tatt AP Computer Science eller programmert i Java før, noensinne? OK. Lovely. Det vil ikke være aktuelt da, men i Java, du har noe som kalles System.out.println som ikke eksisterer i C. Så i C, når du ønsker å legge inn variabler inn alt du vil å skrive ut, er det en bestemt syntaks vi kommer til å bruke. Det kalles placeholding-- hovedsak vi legger plassholdere på plass av heltall eller den variable at vi ønsker å skrive ut. Så som dere kan se har vi inkludert et nytt bibliotek header fil her. Den CS50 biblioteket. Og finnes det CS50 bibliotek er en vanlig funksjon vi skal bruke i våre kurs kalt GetInt (). Er det noen som ønsker å ta en stikke på hva GetInt () kan muligens være å gjøre. PUBLIKUM: [uhørbart] ANDI PENG: Sorry. Kunne ikke høre deg. Maddie, noen. Maddie: Oh, ber det du for et heltall. ANDI PENG: Nettopp. Så denne funksjonen, en annen funksjon som allerede blitt skrevet av noen andre at vi kan påkalle nå. Alt er det er be deg, brukeren, å legge inn hva du vil så koden er i gang og den lagrer whatever-- i dette tilfellet er vi GetInt () - ing, så det betyr at vi er å skaffe et heltall. Og vi kommer til å lagre at i et annet heltall at vi nettopp har gjort kalt alder. Det fornuftig for alle? Cool. Så nå som vi har lagret dette heltall, at vi har bedt om fra brukeren, i denne variabelen, har vi opprettet av type int kalt alder, vi kan gå videre og sted at i vår printf () -funksjonen. Så syntaksen vanligvis for printf () er at uansett hvor i det faktiske fysiske linjen du ønsker å inkludere som heltall, du gjør som symbol rett der, prosent symbol, med den type variabel som du vil. Så i dette tilfellet over er et helt tall. Så du kommer til å omfatte % i fordi det er et heltall. Og så etter din uttalelse, du kommer å gjøre komma og navnet på variabelen. Så her, kommer vi til å skrive ut ut, Hello, my name is Andi, og jeg er tomme år gammel. Hashta-- eller sorry--, alder med hva jeg innspill. Så hvis jeg skulle innspill 20 for min GetInt () her, det ville skrive ut akkurat det samme. Men, hvis jeg ønsket å skrive noe annet, som kanskje 40 eller 45, så ville du se at reflektert følgelig i koden. Så dette er et eksempel på noe der det skrives ut og ser ut til å deg som om det er det samme, men under panseret datamaskinen er det faktisk svært forskjellige ting skjer. Cool. Greit. Så hva om vi ønsker flere variabler? Ganske enkelt. Samme ting. Vi har også en ny funksjon her kalt GetString () også inkludert innenfor CS50 biblioteket at alt den gjør er å be brukeren for en streng, som er bare et sett med tegn, så ut som en setning eller som et navn. Så i dette tilfellet, ville vi ha to plassholdere% s for streng og% i for heltall. Og vi kommer til å følge at ved de to variablene vi vil ha med, i den rekkefølgen at de vises i setningen. Så for eksempel, er mitt navn blank, jeg vil ha et navn der, så jeg kommer til å ha navnet først. Og så etterpå, jeg vil ha alder, vil ha alders andre. Og så hvis jeg ønsket å legge inn, Hello, mitt navns Andi, og jeg er 20 år gammel. Hvis jeg matet Andi og 20, den eksakt samme ville skrive; Men nå har vi fikk to lagret variabler av navn samt int. Yeah. SPEAKER 8: Ville det være stand til å kjøre hvis du byttet navn og alder på slutten av det? ANDI PENG: Yeah. Det er virkelig godt spørsmål. Så lang historie kort, nei. Fordi navn og age-- hva type variabel er navnet? SPEAKER 8: String. ANDI PENG: Og hva type variabel er alder? SPEAKER 8: Integer. ANDI PENG: Så her har vi en plassholder for streng og heltall, ikke sant? Så hvis du skulle bytte disse, datamaskinen er ikke til å kjenne. Det kommer til å se etter en streng, og hvis du prøver å gi den en int, det kommer til å bli som vent jeg er forvirret, du fortalte meg at jeg burde være tildeling minne for en int. Og akkurat her, når det forventer et heltall og du gir den et navn og en streng i stedet, det er også kommer til å være veldig forvirrende, det vil ikke kjøre akkurat slik du trenger det. Så her, navngi og syntaks er meget viktig for å kjøre koden. Alle gode? Yeah. Maddie. Maddie: Her, jeg vet vi har sett på eksempler i klassen, der de ber hva er din alder, hva er ditt navn. Her vil det være det doesn't-- hvis vi skulle kjøre denne koden, det ville ikke be om det? Men du ville bare inngangs to tall og da ville den kjøre sånn? ANDI PENG: Ja, akkurat. Så hvis du ønsker at det skal display, vennligst skriv din alder, du kan bare legge til en printf () -funksjonen som sier: Fyll inn din alder, over den. Det er et godt spørsmål. Yeah. SPEAKER 9: Så ville allerede være inkludert i GetInt () [uhørbart]. ANDI PENG: Nei, det er faktisk ikke. Så alt dette gjør er bare spør en tom skjerm for brukeren å legge inn noe. Hvis du ønsker det, hvis du vil at det skal skrives ut ut noe som forteller brukeren som, vennligst gi meg din alder, så du måtte printf () som deg selv. Fordi alle bruker denne funksjon for forskjellige ting, du kan lagre alder, du kan lagre adresse, du kan lagre telefonnumre. Og så det er egentlig opp til gutta individuelle bruksområder for hva du vil den skal si. Yeah. SPEAKER 10: Så, bare for å avklare hvor gjør du inn navn og alder slik at det viser seg i stedet for% s? ANDI PENG: Som i bruker? SPEAKER 10: Ja, som hvordan gjør jeg gjøre it hvor skal jeg sette Andi, og hvor finner jeg sette 20? ANDI PENG: Yeah. Så hvis du skulle faktisk kjøre denne koden, Jeg er faktisk ikke kjører kode, dette er bare her akkurat nå. Hvis jeg skulle kjøre koden, ville jeg kompilere koden, må filen, kjøre koden, og da ville det bare være to plasser for meg å legge inn det. Yeah. Dere vil se når du spiller rundt med koden selv. Greit vi kommer til å flytte inn i den neste delen av det vi skal dekke i dag. Vi kommer til å gå over hva betinget utsagn er. Så hvis dere husker og husker fra forelesning, betinget utsagn, alle de er er et sett av instruksjoner til datamaskinen i som hvis en bestemt betingelse er sann, du utføre koden innsiden av den tilstanden. Så i Scratch-- hovedsak det store temaet fra i dag er at dere har allerede alle sett logikken bak alt at vi dekker. Og alt vi gjør er sette noe som var veldig intuitiv i Scratch, og hardt koding det inn i syntaks vi skal bruke for den klassen som er C. Så logisk, all denne blokken var er det stykke kode der. Yeah. OK. Vi får også inn en if ... else uttalelse som er bare en ekstra lag av kompleksitet til hvis setningen hvor datamaskinen tar en titt på denne og ser, hvis denne betingelsen er sann, gjør hva er inni disse to parentes, else-- slik type som standard hvis det ikke oppfyller condition-- gjøre dette. Det er som et veiskille. Hvis det regner ute, satt jeg på en regnjakke, ellers noe annet jeg ikke satt på en regnjakke. Betyr det logikk fornuftig for alle? Cool. Greit. Så ut som en hard eksempel på dette at vi vil se i C er hvis jeg ønsket å lage en variabel kalt lekser timer. Og hvis lekser timer er mindre enn fem, sier jeg Livet er stor. Det er fantastisk. Men si Kampen er real-- som er det vi alle på dette mandag ettermiddag opp Science Hill er sannsynligvis gjør akkurat now-- PUBLIKUM: [Ler] ANDI PENG: De måten vi ville, takk for det. Måten vi ville hardcode dette i C er if-- la oss anta Vi har allerede en variabel av type int heter lekser timer her. Hvis lekser timer er mindre enn five printf (), Livet er stor. Husk å holde / n fordi du ønsker en ny linje etter. Else print, er kampen virkelig. Har alle forstår hvordan Jeg overført fra denne blokken inn i denne blokken av koden? Cool. Greit. Så nå skal vi ta en titt på flere hvis uttalelser helt. Så la oss anta at Formålet med dette programmet var vi be brukeren for en karakter. Vi tekst ved å bruke GetInt () for en klasse, og de innspill en verdi, og du vil vise hva slags karakter de fikk. Så hvis jeg var å utforme et program, jeg betyr vanligvis i alle våre øyne, 90-100 er en A, er en 80-90 B, og så videre og så videre. Hva er galt med dette stykke kode som det ikke er å gjøre det jeg vil den skal gjøre. Yeah. SPEAKER 11: De har lavere grenser, men de har ikke øvre grenser. ANDI PENG: Nettopp. Har alle høre hva hun sa? Det kommer til å bli over grenser, men ingen nedre grense. Beklager, omvendt, nedre grenser, ingen øvre grense. Så ønsker du å ta en stikke på si hva ville bli skrevet ut på denne skjermen hvis jeg skulle kjøre denne koden. SPEAKER 11: En feil? ANDI PENG: En feil? Stor gjetning, ikke helt riktig. Er det noen som har en annen stikk? Ja, Aaron. AARON: Hvis du putter i noe som er større enn 90, det ville vise alle karakterene du fikk. Det ville vise du fikk en A, du fikk en B, du fikk en C. ANDI PENG: Yeah. Det er helt riktig. Så, det ville være fantastisk. Men de er gjensidig eksklusiv, tror jeg. Hvis jeg skulle kjøre denne del av koden. Og så la oss bare si, jeg inputted karakteren av 95. Så 95 blir nå lagret i INT heter karakteren. Og slik at C er et språk som går opp fra topp til bunn, så det kommer til å alltid løpe opp og ned. Så det kommer til å komme hit, kan du lese om grad er større enn eller lik 90, printf () du fikk en A. Flott, jeg har en 95, som er større enn 90. Det kommer til å skrive ut, Jeg fikk en A. Det kommer å ta en titt på denne om, det kommer si, vel 95 er også større enn 80, det kommer til å skrive ut du også fikk en fikk en B utropstegn, og så videre og så videre. Så som vi alle kan se, dette er en vanlig feil som kan oppstå når vi er skrive kode for å se etter. Noen, noen spørsmål om hvorfor det skjedde? Flott. OK. Så hvordan løser vi dette, er åpenbart det neste logiske spørsmålet. Vel, vi har disse vakre ting som kalles hvis annet hvis annet hvis annet uttalelser. Så du kan se, hvis du ønsket å endre det problemet, du ønsket å lage hver av de vilkår gjensidig utelukkende, du vil legge til et annet ... hvis setningen. Og disse av course-- tenke på dem som stiger, eller som sprosser på ladder-- du kan legge til så mange av disse som du ønsker for så mange forhold som du vil. Så her, hvis jeg matet klasse å være 95. Hvis grad er større enn 95, printf (), fikk jeg en A. store. Det kommer til å se et annet sted ... hvis og det kommer til å vite, Oh no, Jeg har allerede henrettet den første annet. Jeg know-- eller den første if-- jeg vet at Jeg trenger ikke å se på noen av disse fordi en av dem har allerede vært sant. Så det kommer til å kjøre fra toppen og ned. Så snart den første er sant, så det kommer til å hoppe over alle de andre av annet ... ifs. Gir det mening? Så, på denne måten har du ulike nivåer av kontroll og så snart en av dem er falske, i Resten er også, vil de ikke engang sjekke. Cool. Greit. Slik at dette er et eksempel på en annen slags betinget utsagn vi ser sjeldnere, men vi får se dem og bruke dem. Og de er ofte mer effektiv for visse tilfeller. Så vi har det som kalles en bryter uttalelse. Så før vi dekket det som er et annet uttalelse, en if ... else setningen. Her har vi det er heter switch uttalelser. Så da bruker vi bryter uttalelser er nøkkelen? Så i en bryter uttalelse, du vanligvis typisk faktisk du kan bare inngangs heltall for din variabel som du sjekker. Så hvis jeg ønsket å sjekke for å se Hvis en viss number-- f.eks en klasse, hvis jeg fikk en 90. Jeg vil at det skal se om det er en A, B eller C. jeg kunne ha en sak her. Imidlertid har det gjelder å være en annen konstant. Så i denne forstand, bryter uttalelse kan bare sjekk for likestilling av to tall. Det ser ikke etter noe annet. Så det er noe å være svært forsiktig når du bruker dette. Så her, hvis jeg ønsket å sjekke for å se Hvis min klasse på 90 er lik 90 eller 80 eller 70 eller 60, og deretter skrive ut tilsvarende karakter, Jeg vil være i stand til å skrive at i en bryter uttalelse. Så det kommer til å komme hit, er check dette helt tall lik denne konstante? Hvis ikke, kommer det til å hoppe. Er det lik konstant to, og så videre og så videre, til du treffer standard, hvis ingen av dem er like. Så snart en av dem er satt til å være lik, det kommer til å gjøre dette kodelinje og pause. Hvilket betyr at det kommer til å treffe løpe, gå i stykker, og bare helt hoppe til bunnen av koden. Så i den forstand den typen funksjoner som en if else if else if statement. Så her er en konkret eksempel for dere. Så la oss anta at jeg ønsket å opprette en variabel kalt år stiftet. Og jeg ønsker å be brukeren om å taste året at skolen ble grunnlagt. Så jeg kan lage en bryter uttalelse her. Og la oss bare si, jeg innspill 1636. Denne koden her kommer til å se switch år grunnla noe som tilsvarer 1636. Det kommer til å se saken 1636, oh de er like, printf () Skulle du ikke være på at skolen oppe i nord? Fordi vi antar at de ikke gjør det gå her hvis de går til Harvard, pause og hoppe til slutten. Hvis jeg skulle skrive 1701, som Jeg antar at alle av oss ville input, det ville hoppe over denne saken, kommer ned til tilfelle to som er 1701, og print Velkommen til Yale! Break, hoppe til slutten. Else du sannsynligvis tar dette kurset online hvor case-- fantastisk velkomst å Yale-- det kommer til å gå til Standard print, Hello internett! Og bryte. Yeah. SPEAKER 12: Kan du bruke andre i stedet for standard der? ANDI PENG: Nei, fordi måte at hele denne funksjonen bryter er bygget, syntaksen du trenger å bruke er tilfelle tilfelle mislighold. Det er som om annet hvis, dette en det er tilfelle tilfelle mislighold. Yeah. SPEAKER 13: Du kanskje allerede sagt dette, men kan du ha mer enn to tilfellene? ANDI PENG: Ja, kunne du har så mange tilfeller som du ønsker. Tenk på det som bare liker uendelig legge på. SPEAKER 14: Hvis du byttet 1 701 med 1636, det gjør egentlig ikke gjøre en forskjell ikke sant? Det er bare kommer til å bli sjekket for det. ANDI PENG: Det er en veldig godt spørsmål. Og vi vil berøre dette senere, men bare vet at det er bryteren Erklæringen er infinitely-- det er mer effektiv enn den, og hvis else if fordi den opererer ved hjelp av en annen type funksjon som kan du, for å i hovedsak, å bare hoppe rett til Hvis du trenger å være på. Yeah. SPEAKER 14: Cool. Takk. ANDI PENG: Yeah SPEAKER 14: Og du kunne ikke do tilfeller lignende, og som er større enn. ANDI PENG: No. Så, det er hva som er begrensende om bryter uttalelse er at du har å ha konstanter bare, bare heltall. Yeah. OK. Så dette er noe som du Gutta vil møte sjeldnere av, men jeg ville bare introdusere den i tilfelle. Vi har her hva som er kalles en trefoldig operatør. Der i hovedsak, er det akkurat som en hvis setningen samlet i én linje. Her vil jeg gå inn på neste linje, neste side, fordi det er lettere å se. Så vi har alle sett dette sant? Dette er ganske lett å følge. Hvis jeg ønsket å lage en variabel kalt streng heter s, dersom et visst antall Jeg gir den er mindre enn 100, jeg vil tildele lav til strengen annet jeg ønsker å tildele høy. Dette her gjør akkurat det samme de åtte linjer med kode gjør. Så her jeg ønsker å opprette en variabel streng. Og dette er tilstanden jeg er sjekker, om et tall er mindre enn 100, så du tilordne verdien av lav, ellers tildele verdien for høy. Disse slides vil være online, ingen bekymringer hvis dere ikke får dette ned. Dette er bare en enklere måte, en mer effektiv måte å skrive kode. OK. Så nå skal vi angi hva, for folk flest er som en veldig, veldig forvirrende ting å tenke på først. Sløyfen delen. Så i dag skal vi snakke om tre typer sløyfer. Vi kommer til å starte med en stund loop, deretter snakke om en gjør mens loop, og deretter snakke om i sløyfer. Så egentlig, for de mer visuelle elever der ute, vi har, i hovedsak, et grafisk skildring av hva en stund loop gjør. Så i et programmerings, ville du begynne og gå inn i løkken på et visst punkt. Du sjekker en betingelse. Og hvis betingelsen er sann, du utføre koden inne. Og du kommer tilbake rundt og sjekke. Hvis det er fremdeles sant du holde kjører denne koden rundt og rundt i en sløyfe. Imidlertid er andre som betingelsen blir usann, du kommer til å bryte og avslutte loopen. Og dette er i hovedsak de syntaks som du kommer til å bruke. Mens en viss tilstand er sann gjøre dette, hvis det ikke er sant, du kommer til å hoppe til slutten og gå videre med programmet. OK. Er det noen som har et eksempel på hva som kan potensielt skje hvis jeg prøver å kjøre denne delen av koden? Forresten, SAJ-- det er Scaz, Andi, Jason-- vi vil logge av våre e-poster, Kjærlighet, SAJ. Det er oss. OK. Alle som har et eksempel, eller har en idé om hva dette ville skrive ut? Slag av en lurespørsmål. Så her, husk tilstanden vi sjekker for er stund sant. Så selv om dette er sant, er det gikk i trykken, jeg elsker SAJ! Er det noe poeng der vi hadde endre dette til noe annet? Nei, ikke sant? Så her har vi støtt hva er trolig kommer til å bli avlyttet mye programmer, uendelig loop. Du vil finne at hvis du kjøre denne stykke kode, det er bare kommer til å fortsette utskrift, jeg elsker SAJ! Mens vi setter pris på støtten, vi ønsker ikke datamaskinene til å krasje fordi du holde utskrift Jeg elsker SAJ! Så vær så snill, vær så snill, unngå uendelig loop fordi det aldri kommer å vurdere å false og du aldri kommer å forlate sløyfen. Og du kommer til å bli sugd i evig. Cool. OK. Den andre typen løkke vi skal snakke om i dag er den gjøre mens loop, gjøre mens loop. Og det kalles en gjør mens loop fordi du har en do og en stund. Så dette er ganske lik en stund loop, men litt annerledes. Her kommer du til å gjøre hva er innsiden av denne mens en viss tilstand er sant. Så hvis jeg var C og datamaskinen jeg er kjører ned denne delen av koden, Jeg tar en titt på toppen. Jeg går til C, sier jeg gjøre dette. Og da jeg sjekke, mens dette er sant, må jeg gjenta det. Men selv om dette er usant, Da jeg gå videre og jeg aldri gå tilbake til at loopen igjen. Kan noen ta en stikke på hva forskjellen mellom denne sløyfen og den vi bare så på var praktisk talt. Yeah. SPEAKER 15: Tilstanden kommer etter i stedet for før? ANDI PENG: Nettopp. Så hun sa tilstanden kommer etter, ikke før. Til syvende og sist, forskjellen mellom dette og mens loop er at du bare kommer til å gjøre hva er inne i dette uavhengig av hvorvidt tilstanden din er sant, og deretter sjekke tilstanden. Så i dette tilfellet, er du always-- på denne måten du er alltid å sørge for hva som er inni går minst en gang før å sjekke for å se hvis du vil at den skal kjøres igjen. Og her er et eksempel om når vi vil bruke den. Så for eksempel, hvis jeg ønsket å ha en variabel av type int heter alder, og jeg ønsker å be brukeren for deres alder, Jeg kommer til å gjøre printf () Hva er alderen din? alder = GetInt (), hvilken er å spørre brukeren. Og noen mennesker vil være veldig irriterende. Og du ikke vil bugs i ditt program for noen å legge inn like, oh jeg er negativ 4 år gammel eller hva. I hvilket tilfelle hvis de gjøre det, evaluerer dette til sann, noe som betyr at jeg kommer til å må holde gå tilbake og gjøre dette. Så dette kommer til å holde re-spørre brukeren for å gi deg som en ekte alder nummer og det er kommer til å fortsette å gå tilbake og gjøre om det før de gir deg en ekte alder er større enn en, eller ikke er null. Så hint, hint. Dette vil være veldig, veldig nyttig for en av dine PSet problemer. Yeah. SPEAKER 16: Whoops, beklager. ANDI PENG: Jepp. SPEAKER 16: Er det ikke å være en drittsekk, men-- ANDI PENG: Ingen grunn til bekymring. SPEAKER 16: --are det forskjellige regler her, eller har du bare glemme å sette sitatet? ANDI PENG: Oh Yeah. Beklager, det er helt min dårlige. Det var definitivt ment å være et tilbud. God fangst. Det ville ikke ha kjørt. OK. Så den siste typen løkken vil vi snakke om og, til slutt, på en måte den mest Komplekset er for loop. Ikke bekymre deg hvis du ikke gjør det vet hva det betyr. Det er ganske forvirrende i begynnelsen. Vi vil gå over et eksempel. Alt som skjer i en for loop er at du har tre uttalelser at du kommer til å inkludere. Så for en bestemt ting, er du kommer til å initialisere en variabel. Du kommer til å legge forholdene til som denne sløyfen vil fortsette å kjøre. Og deretter, ved slutten av loop, du kommer til å oppdatere den. Du kan oppdatere variable som du ønsker å holde styr på. Så vi vanligvis bruker for looper for når vi ønsker å kjøre en loop for en visst antall ganger og vi allerede vet, Oh jeg ønsker denne sløyfen å utføre som 10 ganger, så du do-- jeg skal gå over et eksempel på neste side. Så her for eksempel i Scratch, hvis du ville ha noe å gjenta 10 ganger, alt du hadde å si var, gjenta 10 ganger jeg elsker SAJ! som er en mer akseptabel show av støtte for oss snarere enn uendelig løkke. Her, hvor du ville overgang til C og skrive det er for int-- jeg kommer til å lage eller erklære en variabel av type int heter jeg. Jeg kommer til å initial den til 0, så i = 0; og dette kommer til å være min tilstand. Så i er mindre enn 10. Og så på end-- den siste setningen du er kommer til å ha er oppdateringen av hva skjer med variabelen i ved slutten av for loop. Så det er litt forvirrende, fordi forskjellige deler av denne linjen skjer på ulike typer av sløyfen. Men jeg skal gå over en pseudokode eksempel på det og kanskje forklare dette bare litt bedre. Så her. Det er løkken vi nettopp så. Hovedsak i pseudokode, hva som skjer i dette programmet, er første Jeg oppretter Jeg, klargjør den til 0. Jeg sjekker for å se om jeg er mindre enn 10, i hvilket tilfelle første gang det er fordi 0 er mindre enn 10. Således løkken kommer til å kjøre. Og så kommer jeg til å skrive ut denne linjen. Og deretter ved slutten av denne linje, rett her, kommer jeg til å gjøre tilvekst i, i ++, alt som betyr er inkrementering av den ved en. Så jeg er nå en. Fordi det var en gang 0, hvis jeg øke det er, det er nå en. Og så kommer jeg til å gå tilbake til begynnelsen av løkken og jeg sjekke tilstanden. Er tilstanden fortsatt sant? Ja, det er en fortsatt mindre enn 10. Så det kommer til å skrive ut dette på nytt, gå og deretter øke i, og sjekk betingelsen kontinuerlig, kontinuerlig, til du til slutt får til et punkt der jeg er 10. Du kommer til å skrive ut dette 10 ganger og så er jeg kommer til å tilsvare 10. Du kommer til å sjekke tilstanden. Er 10 mindre enn 10? Nei, det er falsk. Dermed er denne sløyfen ikke kommer å kjøre, det kommer til å bryte, og du kommer til å fortsette med koden din. Så som dere kan se, dette er et veldig godt eksempel av en løkke du kan programmere i at går for en viss mengde ganger. Hver og en klar? Yeah. SPEAKER 17: Hva med tilvekst eksponentielt, er det forskjellig koding? ANDI PENG: Du can-- vi vil gå over denne i neste lysbilde. Godt spørsmål. Er anyone-- før jeg flytter on-- noen i det hele tatt forvirret, fordi dette er en virkelig tøff konsept. Ingen grunn til bekymring, hvis you're-- OK. Cool. Greit. Bare en generell lysbilde. Dette mens loop gjør den akkurat det samme for loop var. Det er bare skrevet annerledes. Dere kan lese lysbildene når det passer deg senere. Men bare vet at det er flere måter å skrive det samme å skje med forskjellige sløyfer. OK. Så nå får vi i spørsmålet om hva hvis vi har en løkke inne i en løkke. Vi får inn real Inception type ting her. Når du ønsker å gjøre ting flere ganger inne på andre ting som gjør ting flere ganger, du ønsker det som kalles en nestet for loop. For de av dere som først ser dette, og blir veldig forvirret, er alt vi gjør her er å ha en for løkke der vi har en variabel av omg. Men på innsiden av det, vi har også en annen for løkke av en variabel kalt kolonne. Og jeg anbefaler dere alle som er forvirret å først holde track-- trekke dette ut, trekke dette ut. Ikke prøv å bare grunn gjennom det, trekke det ut. I hodet ditt, på denne stykke papir, eller hva, skrive rad, holde oversikt over hva raden er lik. Skriv kolonne, holde orden av hvilke kolonnen er lik. Og holde oversikt over hva som er skrive ut med hver iterasjon. Hver iterasjon av denne sløyfen, hver gjentakelse av at større loop, bare holde følge logikken. Og jeg kan garantere deg, du vil elske det du ser, fordi det er også veldig Gjelder for oppgavesett. Cool. Greit. Så det viktigste at dere er sannsynligvis alle tenker på akkurat nå, er dine oppgavesettet 1s, som skyldes torsdag / fredag. I din water.c program, hint du kommer til å ha å be brukeren for en inngang. Innenfor mario.c program du kommer til å ha å bruke en nestet for løkke, som er for en løkke inne i en for løkke, å skrive ut en blokk med pyramide, i hovedsak som hva Mario har å hoppe gjennom. Og så inni greedy-- eller kanskje Making Change, hvis noen av dere har hørt om at-- du er nødt til å være veldig forsiktig med første flytende punkt verdier. Husk flytende desimaler og heltall er ikke det samme. Hold styr på hvilken som er hvilken. Og du kommer til å bruke betinget utsagn, så vel. Greit, siste ting. Jeg har fått et par minutter igjen. Stil. Så dette er noe som ikke gjør det faktisk bevirke effektivitet, eller selve driften av koden din. Men det effekter oss som dine klassinger, som leserne. Det effekter selv, hvis du er prøver å finne et problem. Det påvirker lesbarheten av koden din. Så stil, som når du prøver å style et essay for engelsk, hvis du ikke har avsnitt, du har alt slags av mikset sammen på én linje, det gjør det veldig vanskelig for noen å lese essayet, selv om poengene er logisk lyd. Samme i programmering. Du kan ha forferdelig obskur kode som Scaz vil dekke, og det kan fortsatt kjøre og funksjon. Men for oss som din vakre TAs, som vil være å lese og vurdere dine PSets, det er ikke veldig hyggelig. Så vær så snill, for moro skyld av oss og deg selv, når du prøver å fikse et problem i koden din, og du prøver å lese din egen kode, gjøre at du følger noen konvensjoner at vi kommer til å gå over. Så først. Gi dine variabler meningsfulle navn. Hvis du ønsker å lagre et heltall kalt alder, vennligst name it alder. Ikke name it høyde. Når du prøver å lagre en alder i høyde, det gjør alt veldig forvirrende for oss. Vi liker ikke å bli forvirret. Du liker ikke å bli forvirret. Ingen liker å bli forvirret. Hvis du kommer til å skape noe, navnet noe meningsfullt. Men i for loop, single tegn-variabler er vanligvis fint. Og i for loop, hvis du ønsker bare jeg, og j, k, gjerne bare gjøre det. Konsekvent initialisering. Så hva betyr det? Det betyr teknisk, teoretisk, du kan starte og lage flere variabler på samme linje. Så for eksempel, kan jeg lage et heltall kalles scaz_age, og heltall kalles andi_age = 20, og et heltall kalles jason_age på samme linje. Og jeg kan også tildele eneste av dem og ikke de andre til verdier. Vi ber deg vennligst ikke gjør det. Fordi her har du i hovedsak opprettet tre variable, men bare en av dem faktisk har en verdi. Og så når vi er prøver å lese koden, eller hvis du prøver å fikse et problem i koden din, det er veldig forvirrende å følge. Så bare for lesbarhet, for vår lesbarhet, ikke gjør det. Konsistente klammeparentes. Noen mennesker liker å sette sitt klammeparentes på forskjellige steder. Det spiller egentlig ingen rolle. Bare sørg for at du er konsekvent i egen kode på hvor du ønsker å sette dem. Konsekvent avstand. Hvis du putter en plass etter en for loop, alltid gjøre det. Ikke bare liker slags gjøre det på noen steder, ikke gjør det i andre. Bare vær konsekvent. For det andre, hvis noen ønsker til å lese på CS50 Style Guide, vi offisielt har en stilguide som forteller deg alle disse konvensjonene, pluss mer. Det er online. Det er som cs50.net/style eller noe sånt. Du kan google det. Konsistens er nøkkelen. Så ikke bekymre deg hva andre mennesker gjør, bare sørg for at du er konsekvent i din egen kode. Alle som har noen spørsmål om det? Yeah. SPEAKER 18: Så den riktige tingen å gjøre med initialisering er bare har dem alle i et separat linje, er det det du sier? ANDI PENG: Så jeg sjelden har dette skje. Men hvis du ville, hvis du ønsket å være som sparer plass i koden, eller hva, kan du gjøre dette. Vi ber om at du bare ikke initial en ting og ikke de andre. Så hvis du ønsker å gjøre int scaz_age, int andi_age, int jason_age, er det helt greit. Bare ikke initial én og ikke de andre er tatt. Spørsmål? Greit. Jeg kommer til å passere av mikrofon, og laserpeker, og stafettpinnen til Scaz på dette punktet. Dette er vanskelig. Her er det. BRIAN SCASSELLATI: Takk. Hvordan er det for lyd? Lyden er bra? . Utmerket. OK. Så, hei alle sammen. Jeg kommer til å prøve å jobbe gjennom et praktisk eksempel med deg. Og vi kommer til å bruke CS50 s utviklingsmiljø, det som kalles Integrated Development Environment. Og du har sett denne demonstrert i forelesning. Og i oppgave Set 1, er du kommer til å ha en mulighet å bruke den, og leke seg med det, og bli vant til det, fordi vi kommer til å bruke den gjennom resten av semesteret. Så i denne IDE, har du det ser ut som en veldig tradisjonell fil nettleser over på en side. Du har fått en del opp top dit du skal å se kildekoden, din Cfile, koden du skriver. Og ned bunnen, vil du har et terminalvindu som du skal bruke til både kompilere programmet og til å kjøre eller utføre programmet. OK. Så bare for å gi oss en liten bit av fundament, i det terminalvinduet, du kommer til å være ved hjelp av et sett med kommandoer som er standard kommandoer hele de fleste av Unix eller Linux-systemer. Og så hvis du noen gang har brukt noen form for Unix, Ubuntu, eller noen av de andre smaker, disse kommer til å se kjent. Hvis du ikke har, ikke bekymre deg. Det er ingenting komplisert om dem. De er bare å bruke en annen syntaks, en annen navngiving konvensjonen enn du har sett før. Så for å liste ut filene innenfor en bestemt katalog, de kommer til å bruke en kommando som heter ls eller liste. Hvis du vil se alt med alle detaljene, du vil bruke en kommando linje argument med ls -l. Og det skal vise deg alt i mer detalj, inkludert tillatelser for en fil. For å endre katalog, du kommer til å bruke cd-kommandoen. Og du vil være i stand til å endre katalog både for å gå til hjemmekatalogen. Det er bare cd helt av selv, cd med to- prikker kommer du opp ett nivå til den forrige katalogen. Og du kan også cd til en katalogen ved å skrive inn cd og navnet på denne underkatalogen. Du kan også opprette nye kataloger. Og vi kommer til å gå gjennom dette i løpet av et minutt. Men bare for å sette alt på skjermen. Slik at du kan se dem. Du vil også ha muligheten å manipulere filer direkte fra kommandolinjen. Du vil være i stand til å kopiere dem, for å flytte dem, eller for å fjerne dem, det vil si, effektivt, for å slette dem. Den CS50 IDE gir deg full kraften i kommandolinjeargumenter. Og det betyr at du også kan gjøre svært farlige ting. OK. For eksempel kan du fjerne, eller som er slette, en fil uten å spørre for en bekreftelse. Og du kan også fjerne recursively-- det er dash r flag-- en hel katalogen og alt innholdet. OK. De er oppført i rød fordi du bør tenke "Danger" hver gang du ser disse tingene. OK. Greit. Nå endelig, de tingene som er kommer til å være veldig verdifull for deg, er det noen gode triks å vite når du navigerer gjennom denne terminalvindu. Først kan du tømme skjermen på helst ved bare å skrive i klartekst. Og du kommer til å se meg gjøre det ganske ofte. Du kan også bare vise teksten i en fil ved å skrive mer, og deretter filnavnet. Du vil da kunne bla tilbake og frem med at bare med space og piltastene. Hvis du har, slik vi gjorde i dag i foredraget et program som kjører kontinuerlig i uendelig loop, du kan stoppe det programmet fra å kjøre ved å skrive i kontroll, som er å holde nede Ctrl-C. Og du kan ha å gjøre dette flere ganger. Datamaskinen blir langt foran deg. Og må du noen ganger gi den et par prøver før det faktisk vil komme gjennom. Du vil også kunne sortere gjennom kommandoer at du bare skrev bruke opp-tasten, pil, og deretter pil ned. Og hva er mest nyttig er stedet for å skrive ut lange filnavn, vil du være i stand til å bruke Tab til Autofullfør noen instruksjoner. Nå skal vi demonstrere alle disse i løpet av et sekund. Så hvis du ikke husker dem, ikke bekymre deg. Dette er ting som du vil plukke opp og bruke som vi går sammen. OK. Så i C-- motsetning til i Scratch-- C er et kompilert språk. Det betyr at vi kommer til å ta en kilde file-- det er teksten som du skriver, kommandoene som du skriver, jo printf () uttalelser, looper, alt else-- og vi kommer å ta den filen og lever den av til et program kalt kompilatoren. Kompilatoren vil da ta at tekst som du har skrevet og oversette det til binær instruksjoner at datamaskinen er faktisk kommer bruk. Det kalles objektet eller den kjørbare filen. Hvis du ser på denne filen, du kommer å se koden som du har skrevet. Hvis du ser på denne filen, du kommer å se en tilfeldig sekvens av tegn som gir ingen mening overhodet. Det er fordi dette er den binære. Det er ikke ment for deg som skal lese. Men helst du ønsker å kjøre noe, hva du skal å kjøre dette objektet filen. Så når vi jobber med disse filer, vil vi skrive en fil i C. Vi vil deretter kompilere den, ved hjelp av en kommando som make som vil påberope kompilatoren klang for C-språk. Og som vil produsere en gjenstand fil, som en ut, eller i dette tilfellet, navnet, filen min, som jeg har satt i. Greit. Så la oss faktisk prøve dette. Så jeg kom opp med et eksempel av hva jeg ønsket å prøve. Og en av de tingene som fascinerer meg er animasjon. Så vi kommer til å prøve å gjøre en liten bit av animasjon bruker bare ASCII-tegn. Tegn vi kan skrive ut enkelt nå. Så her er mitt beste forsøk på å skape for deg animasjonen av en bunny kjører gjennom det høye gresset. Der er han. OK. Så han ikke går ennå, men han er står der i det høye gresset. Nå hvis jeg var en animatør, i den gamle skolen versjon av animasjon, hva jeg ville gjøre det jeg ville produsere et bilde av denne kaninen i gresset. Og så ville jeg produsere annen picture-- annet det de kalte cell-- at hadde kaninen bare litt flyttet. Og deretter en tredje som hadde kaninen flyttet litt lenger. Og jeg ville produsere en hel Sekvensen av disse cellene. Noen der kaninen er over på venstre side. Og så beveger seg sakte, en ved en mot midten. Og deretter fra midten over til høyre. Og hvis jeg var da, virkelig heldig, jeg kunne sette det sammen og jeg kunne animere dem. Og det er min kanin kjører gjennom gresset. Det er min store PowerPoint trick for dagen. OK. Så dette er så bra som det blir. OK. Så, her en gang, her er vår kanin kjøre gjennom gresset. SPEAKER 19: Igjen. BRIAN SCASSELLATI: One mer tid, greit. Det er din bunny. OK. Så i dag hva vi skal å gjøre er vi kommer å forsøke å automatisere prosessen for fremstilling av disse cellene. Vi vil ikke helt får til det punktet av å være i stand til å sette dem alle sammen. Men, vi skal prøve å automatisere Fremgangsmåte for generering av denne sekvensen. Og dette er mye av det animasjon i dag er like. Det vil si, du trenger ikke gjøre ting nødvendigvis ved å trekke alt for hånd. Vi bruker en datamaskin til å automatisere deler av denne prosessen. OK. Så la meg bytte over nå til vår CS50 IDE. Og jeg har laget for us-- og la meg zoome inn her litt bit-- jeg har opprettet for oss et utgangspunkt. Hver gang vi be deg om å sitte ned og skrive et stykke kode, hva vi egentlig spør deg om å gjøre er vi ber om å løse et problem. Og måten at du bør tenke på å gjøre det er ved å starte med noen enkel del av løsningen. Og deretter bygge ut fra den delen. Og det er det vi skal gjøre i dag. Så heller enn å prøve alt på en gang til skrive hele haug med kode som er kommer til å produsere de 10 animasjon celler, vi kommer til å starte i stedet med ett stykke som fungerer. Og så skal vi bygge en litt rundt som og litt mer og litt mer. Nå gode ting om løse problemer på denne måten er at det vil tillate deg å starte alltid med noe som du vet fungerer og innføre én gradvis endring. Og det er en fin måte å lære å kode, fordi hver gang du gjør en endring, ser du hvilken innvirkning det har. OK. Så her er vårt utgangspunkt. OK. Så i begynnelsen av filen min, Jeg har hash #included stdio.h. Det er slik at jeg kan få printf () funksjonen skal virke. Jeg så jeg har min hovedfunksjon. Og dette ser fortsatt litt uforståelige eller ukjente for noen av dere. Det er greit. Alt den sier er at den viktigste funksjonen tar ingen arguments-- void hjelp ingenting i C. Og det avkastning ved konvensjonen et heltall. Hoved alltid returnerer et heltall, vanligvis en kode si ting gikk bra eller ikke gå bra. OK. Men hoved må ha det danner for oss akkurat nå. Jeg har da satt i tre linjer med kode. Og sammen med hver linje kode, har jeg satt en kommentar. Nå er en av de tingene som vi vil insistere på at du gjør det, og det er en så viktig programmering praksis, er å alltid kommentere koden din. Alltid skrive ned i en Norsk kommentar noe som du tror kode er ment å gjøre. På den måten senere når du kommer tilbake til den, kan du se på det, og du kan si, oh, jeg husker hva jeg var prøver å gjøre med dette. Eller når en TA setter seg ned med deg til prøve å hjelpe deg på kontortid, de kan se på dette og gå, jeg se hva du prøver å gjøre, men i stedet dette er hva som egentlig skjer. OK. Så jeg har tre deler til min kode, Jeg kommer til å først og fremst print ut noen prikker i starten. Jeg vil deretter skrive ut min ekstremt fancy bunny. Og så noen litt prikker på slutten. Og disse tre utskrifts uttalelser bør ser kjent ut for deg på dette punktet. Alt som jeg gjør i hver av dem er at jeg er skrive ut en sekvens av tegn. Det er ingen variabler involvert. Alt er bare flat. OK. Så hvis jeg går nå ned til min terminal-- la oss se om jeg kan få dette tilbake out-- og jeg kommer til å skrive klart igjen. SPEAKER 20: Har vi bruk dobbel skråstrek å kommentere? BRIAN SCASSELLATI: Can bruke double-- ja. Det finnes flere måter å legge inn kommentarer i C. One måte er å bruke den doble skråstrek. Den andre er å bruke en skråstrek og en stjerne og lukk med en stjerne og en skråstrek. Greit. Først av alt, kommer jeg til å starte navigeringen rundt her. Så hvis jeg går til min hjemmekatalog, Jeg har endret kataloger der, Jeg kommer til å se ut og se hva som er i denne katalogen, ls, liste ut. Jeg kommer til å se at jeg har fikk to underkataloger. La oss gjøre dette til en litt større her, slik at vi alle kan se det. Jeg kan se at jeg har fikk to underkataloger. Jeg kommer til å endre katalog å gå inn i arbeidsområdet. Og jeg kommer til å bare skrive ut del av det, og så bare trykke Tab. Og det vil fullføre resten for meg. Fancy. Jeg skal se og se i arbeidsområdet. Og akkurat nå, jeg jobber på SuperSection at vi lærer akkurat nå. Så jeg skal gå inn i den katalogen. Og til slutt, se og se. Og jeg har fått denne filen bunny.c. Greit så la meg klar igjen. Og jeg kommer til å now-- igjen jeg er fortsatt bor i den katalogen og det forteller meg at jeg er i at SuperSection katalogen. Jeg kommer til å gå videre og gjøre mitt program bunny. Og at kommandoen, må bunny, mens høres litt rart, også påkaller klang kompilatoren. Og det er produsert for meg en utgang som er en kjørbar funny-- en kjørbar fil som heter bunny. OK. Jeg kan da, og dette høres enda verre, utføre bunny. OK. Og la oss se hva det gjør. OK. Det er en liten bit av hva jeg hadde ventet. Jeg har min kanin bilde i det, men jeg slags ønsket det helt av seg selv. Hva gikk jeg glipp av? SPEAKER 21: Slash l eller slash n. BRIAN SCASSELLATI: Slash n. OK. Så la oss gå tilbake her ute. Og jeg får ut av det. Og jeg skal gå tilbake til denne. Og la oss ta en titt nå fra min viktigste funksjon her. Så hva bør jeg gjøre? Jeg ønsker å avslutte linjen. Så jeg skal putte i en kommentar. Jeg skal sette i en printf (). Og hva må jeg sette inn? / n. OK. Hva må jeg gjøre for å avslutte det med? Semikolon. Greit. Nå er en av de virkelig viktige ting er å sørge for hver gang du gjør en endring i koden din, at du lagrer det. Hvis du ikke har lagret koden din, er du kommer til å legge merke til en liten stjerne der oppe. Og at stjerne sier du har ikke lagret denne koden. Hvis jeg kompilere det akkurat nå, er det ikke kommer til å reflektere noen av disse endringene, fordi kompilatoren ser på filen det er på disken, og ikke filen som er åpne i redigeringsprogrammet. Greit. Så la oss lagre det og så får vi gå rett på her nede, kommer ut igjen. Kom ned til min terminal. Og la oss rydde plass igjen. Og vi kan gå videre og én mer tid gjøre vårt kaninen program. Og utføre bunny. Som ikke fungerte heller. Feil strek. Så hvis du ser på hva jeg har fått, satte jeg en / n der inne, men jeg hadde feil strek. Alt for at din datamaskin gjør er veldig eksplisitt. OK? En liten feil i tegnsetting, og plutselig du ikke får det du ønsker. Greit. Så la oss zoome ut igjen. Vi vil gå tilbake. Vel gjør at svært rask reparasjon. Vi vil sette riktig slash i. Vi vil lagre det. Vi kommer tilbake igjen. For noen grunn, det er ikke å være lykkelig, men la oss gå videre og vi vil gå tilbake til terminalen her. Klare det opp. Vi vil zoome inn. Og enda en gang, vil vi gjøre bunny. Og nå sikker nok, det fungerer. Hurra. OK. Så la oss prøve å gjøre dette litt mer generelt. La oss se om stedet for bare skrive ut én bestemt ramme, la oss se om vi kan gjøre dette slik at vi kan få alle 10 av disse animerte rammer at vi ønsket å ha. Så igjen, la oss ta dette et skritt av gangen. La oss først generalisere det, ikke slik at jeg gjør alle rammer, men så jeg gjøre noen ramme som jeg kanskje vil. Så hva er forskjellen mellom rammene? Er kaninen det samme? PUBLIKUM: Ja. BRIAN SCASSELLATI: Yeah. Hva er forskjellen? PUBLIKUM: Posisjon. BRIAN SCASSELLATI: Sin posisjon, ikke sant? Og hvordan gjør jeg styre sin posisjon? Hvor mange prikker jeg er la ved begynnelsen og hvor mange prikker jeg er å sette på slutten. Så jeg hadde fem på begynner og fem på slutten. La oss erstatte det fem med en for loop. OK. Og jeg kommer til å lage en for sløyfe nå som kommer til å si, Jeg kommer til å skrive ut noen tall prikker i begynnelsen. Jeg kommer til å bruke en variabel. La oss si, om jeg så disk i min loop. Og jeg kommer til å erklære det opp toppen. Og deretter i for loop Jeg trenger å gjøre tre ting. Det første jeg må gjøre er jeg trenger å initial jeg. Hva bør jeg initial det å begynne å være? 0. OK. Da må jeg si, hva er oppsigelsen tilstanden? Når bør jeg slutte? Vel hvor mange prikker gjør du ønsker å skrive ut på denne? PUBLIKUM: Five. BRIAN SCASSELLATI: Fem igjen? Hva med å la oss gjøre noe annerledes, vi gjorde fem. La oss vise at det er annerledes. SPEAKER 22: Two. BRIAN SCASSELLATI: Two. OK. Så hvis jeg vil ha to prikker, hva bør jeg satt her? PUBLIKUM: Tre. BRIAN SCASSELLATI: Tre. OK. Hvor mange ganger er at kommer til å gå gjennom? Det kommer til å gå gjennom tre ganger, 0, 1 og 2, Høyre? Greit, la oss gå tilbake ned til to. Nå skal vi få to prikker. Og hva ønsker jeg å gjøre hver gang jeg går gjennom løkken? Hva må endres hver gang jeg går gjennom? SPEAKER 23: Legg en prikk. BRIAN SCASSELLATI: Jeg må holde det gående. Jeg kommer til å legge en prikk. Jeg kommer til å skrive ut en prikk, hver gang gjennom sløyfen. Men hvordan skal jeg holde styr på hvor mange ganger jeg har vært gjennom løkken? Jeg bruker jeg, som variabel, som teller. Så hver gang gjennom, jeg kommer å øke telleren med én. Nå, det er det samme for meg som å si i = i + 1. Det er greit. Jeg kunne gjøre det at-- jeg liker stenografi, så jeg kommer til å si i ++. OK. La oss gjøre det samme her nede på bunnen. Bare jeg slags gjorde at en. Jeg kommer til å fortelle dere gjøre dette helt. Greit. Så hva skal jeg skrive her? Her er min for loop. Jeg kommer til å gjøre en printf () og jeg kommer å gjøre det slik at jeg bare skrive ut én prikk på at bunnen. Hva skal jeg skrive inne i dette for loop nå? Vel, først av alt hva variabler bør jeg bruke? SPEAKER 24: j. BRIAN SCASSELLATI: Jeg kunne bruke j. Kan jeg bruke den samme? Kan jeg bruke jeg igjen? Yeah. Det er OK, fordi Is at jeg bruker opp her, Jeg trenger ikke dem igjen når Jeg kommer ned til dette punktet. Så hva bør jeg initial jeg til? SPEAKER 25: 10. BRIAN SCASSELLATI: 0. Hva bør jeg sjekke? Hvor mange prikker jeg trenger nå på slutten gjøre hvis jeg har to prikker på begynnelsen? Jeg trenger åtte på slutten, så hva bør jeg sjekke, jeg mindre than-- PUBLIKUM: Sju, åtte, ni. BRIAN SCASSELLATI: Jeg hørte sju. Jeg hørte åtte. Og jeg hørte ni. OK. Så vi er alle i den rette ball-- Jason sier 10. OK. Hvis jeg trengte to prikker for den første, hvor mange gjør I-- og jeg trenger åtte prikker for siste one-- Jeg satte en to opp ovenfor, hva skal jeg sette ned nedenfor? PUBLIKUM: Eight. BRIAN SCASSELLATI: Eight. Fordi det kommer til å telle null gjennom syv. Og det er åtte ganger gjennom løkken. OK. Og hva må jeg gjøre på slutten? PUBLIKUM: i ++. BRIAN SCASSELLATI: i ++. Greit. Så det ser ganske bra der. La oss prøve det og la oss se hva det gjør. OK. Så vi kommer til å lagre det. Fin og lagres. Vi vil zoome ut igjen. Vi vil prøve her i terminalen. Vi vil zoome inn. Oops. Vi vil, en gang til, gjøre vårt kaninen program. Og gå videre og utføre bunny. Og det er det. Så det er vår bunny. Der det har to prikker på begynnelsen og åtte prikker ut på slutten. Everybody fortsatt med meg? OK. Så vi bygde den opp. Vi bygget en bunny, en bestemt ramme. Nå har vi vært i stand til å generalisere at for å bygge flere, ulike typer rammer. Nå la oss gå videre, og har det generere ikke bare ett bilde, men la oss generere 10 rammer, der vi sakte gjøre bunny flytte alle veien over jordet. Greit. La oss gå tilbake. Og vi skal prøve nå. Så hva gjør jeg virkelig trenger å endre her? Hva trenger jeg å endre? SPEAKER 26: Du må først endre antall prikker maksimal i begynnelsen. Fordi hvis vi gjør 10 prikker, det kommer til å må opp for å skalere. BRIAN SCASSELLATI: Yeah. Så akkurat nå har jeg det liksom fastkoblet å alltid gjøre to prikker i begynnelsen og alltid gjøre åtte prikker på slutten. Jeg ønsker å bygge en annen loop, ikke sant? Fordi jeg ønsker ikke å bygge bare en kanin bilde, Jeg ønsker å bygge 10 kaninen bilder. Så jeg trenger å bygge en annen loop, og som jeg gå gjennom den loop, Jeg ønsker å endre hvor mange prikker jeg ut i begynnelsen og hvor mange prikker jeg ut på slutten, basert på hvilken syklus gjennom løkken Jeg er med. Greit. Så la oss få en annen disk. Noen har før sagt j, slik at vi vil gjøre et annet j. Og nå skal vi bygge en annen for loop. Hva går inne som loop? Dette ting må gå inne i loop, ikke sant? Har kaninen har å gå inn i loop? Trenger jeg en kanin i hver av de 10 rammer? PUBLIKUM: Uh-he. BRIAN SCASSELLATI: Yeah. Jeg vil ha en kanin i hver av de 10 rammer, ikke sant? Hva med prikker på Til slutt, trenger jeg det? OK. Så jeg kommer til å rykke dem alle. Jeg kommer til å markere alle dette, og jeg kommer til å treffe Tab. Og det kommer til å skyve dem over litt, slik at det er lett for meg å se hva som er i loopen. Og så skal jeg avslutte det. La oss si. OK? Nå, i denne sløyfen som Jeg er building-- Uff, gjøre det slik at du kan see-- Jeg har min teller j. Jeg startet den på 0. Hvor mange ganger jeg vil gjøre å gå gjennom dette loop? PUBLIKUM: 10 ganger. BRIAN SCASSELLATI: 10 ganger. Så hva nummeret skal jeg sette her? PUBLIKUM: 9, 10. BRIAN SCASSELLATI: 9, 10, noen må si 11, ikke sant? Jeg ønsket to prikker før og sette i mindre enn to. Jeg ønsket åtte prikker, Jeg satte i mindre enn åtte. Nå ønsker jeg å gå gjennom 10 ganger, så jeg satte j mindre than-- PUBLIKUM: 10. BRIAN SCASSELLATI: 10. Det vi går. Og hva gjør jeg på slutten for å j? ++, Øke den. OK. Nå, her er den vanskelige delen, hva er kommer til å skje akkurat nå gjør jeg dette? Jeg kommer til å skrive ut 10 bilder? SPEAKER 27: Jeg tror de vil alle være den samme. BRIAN SCASSELLATI: De vil alle være det samme, ikke sant? Fordi alle av dem er fortsatt å sette to punkter i begynnelsen. Men jeg ønsker ikke dem alle til har to prikker begynnelsen. Hvor mange prikker kan jeg vil i begynnelsen? PUBLIKUM: Endre. BRIAN SCASSELLATI: Jeg vil at det skal endre seg, ikke sant? Så hva har jeg her som er i endring hver gang sløyfen går gjennom? PUBLIKUM: Antall prikker, j. BRIAN SCASSELLATI: j, antall prikker. Så jeg kan endre dette for å være j. Første gang gjennom sløyfe, hva som kommer til å bli? Hva setter jeg j til først? PUBLIKUM: 0. BRIAN SCASSELLATI: Så hvor mange ganger kommer jeg til å gjøre dette? 0. Den andre gangen gjennom løkken, er j kommer til å bli en fordi jeg øke det. Hvor mange prikker jeg kommer til å skrive ut? 1. Den tredje gangen gjennom løkken, hvor mange prikker jeg kommer til å skrive ut? PUBLIKUM: Tre. BRIAN SCASSELLATI: j kommer til å bli tre. Hvor mange prikker jeg kommer til å skrive ut? Oh, sorry, j kommer til å være to. Hvor mange prikker jeg kommer til å skrive ut? PUBLIKUM: 2. BRIAN SCASSELLATI: 2. OK, så jeg kommer til å holde økes at når vi går sammen. Hva med der nede? Hva går ned her? Jeg vil ikke ha åtte alltid på slutten lenger? SPEAKER 28: 10. BRIAN SCASSELLATI: Jeg vil ha 10 prikker? Jeg vil at det skal endre seg, også. Så hvordan jeg vil at det skal forandre seg? PUBLIKUM: [uhørlig]. BRIAN SCASSELLATI: Vel, hvis jeg har fem punkter i begynnelsen, hvor mange dot s får jeg på slutten? PUBLIKUM: Five. BRIAN SCASSELLATI: Hvis jeg har seks prikker i begynnelsen, hvor mange får jeg på slutten? PUBLIKUM: Four. BRIAN SCASSELLATI: Hvis jeg fikk sju prikker i begynnelsen, hvor mange får jeg på slutten? PUBLIKUM: Tre. BRIAN SCASSELLATI: Hvis jeg har fikk j prikker i begynnelsen, hvor mange får jeg på slutten? 10-j. OK. Så la oss prøve det ut. Så jeg kommer til å redde vår kaninen program. Nok en gang vil vi zoome ut. Vi vil gå ned til vår terminal. Vi skal klare det. Og zoome inn. Vi vil gjøre vårt kaninen program, igjen. Og vi vil kjøre den. UH oh. Hold ut, la oss zoome ut. Fikk jeg 10 bilder? Vel, hvor mange kaniner ser jeg der oppe? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Jeg fikk 10 rammer. Er de alle det samme? PUBLIKUM: Yeah. Nei. BRIAN SCASSELLATI: No. Det første, Bunny er langt til venstre. Og over her, er den kaninen langt på SPEAKER 29: Høyre. BRIAN SCASSELLATI: Så, hva gjorde jeg glemmer å gjøre? SPEAKER 30: Start en ny linje. BRIAN SCASSELLATI: Jeg glemte for å starte en ny linje, igjen. Samme feil jeg har gjort før. Greit, la oss gå fikse det. Nå, jeg har fortsatt inn koden i det å lage en ny linje. Hvorfor fungerte det ikke? SPEAKER 31: Det er ikke inne i loop. BRIAN SCASSELLATI: Oh, det er ikke inne i loop. Det er riktig. Det sitter utenfor her. Og for loop er alt det er innsiden som tekst. Så jeg kommer til å flytte dette inne for loop. Og jeg skal Tab foran det å viser at det er på rett sted. Og nå, vil vi lagre den på nytt. Vi skal zoome ut. Vi skal bytte over til vår terminal. Zoom inn. Vi vil gjenskape vår kaninen program. Og nå, nå har vi fått våre 10 rammer. [Klapping] BRIAN SCASSELLATI: OK. So. Her er vår nestet for løkker. Vi var i stand til å generere i indre sløyfe hvor mange prikker jeg ønsket å skrive ut i begynnelsen, på slutten. Og den ytre sløyfe kontrollert hvor mange frames jeg var bygningen. Vi startet med en liten kjernen av problemet, og vi bygget ut fra det punktet. Greit. La oss gjøre et skritt. Er du klar? Det er én ting her hvor vi har faktisk slags fikk mer kompleksitet enn vi trenger. La oss ta en titt. Så i vår kanin program, hvis jeg zoome ut her, Jeg faktisk gjør noe av det samme om igjen og om igjen. Hva gjør jeg det er liksom det samme gjentatt to ganger? SPEAKER 32: Skriv ut prikkene. BRIAN SCASSELLATI: Yeah Jeg skrive ut disse prikkene to ganger. Egentlig burde jeg ha denne kommentaren her nede. Jeg skriver ut noen prikker på begynner, rett opp her. Og så skriver jeg ut noen prikker på slutten. Og jeg gjør slags akkurat det samme. Hva vi kommer til å starte arbeider på i de neste ukene er å kunne ta disse blokkene av kode som vi bruker om og om igjen, og gjennom en prosess kalt abstraksjon, vi kommer til å trekke dem ut og skrive dem en gang, slik at vi kan deretter bruke dem om og om igjen. Så la oss prøve det. Klar? Vi kommer til å ta denne blokken med kode. Og jeg kommer til å ta det ut av det. Og jeg kommer til å define-- ned på bunnen, Jeg kommer til å skrive en ny funksjon. Det kommer ikke til å gå tilbake noe. Og jeg kommer til å kalle det printDots. Det kommer til å ta ett argument, et heltall som sier howManyDots jeg skulle skrives ut. Og nå i stedet for å skrive j prikker, vil jeg Skriv ut Tips howManyDots jeg skulle skrives ut. Og det er ett lite problem her. Noen som vet hva det er? Hva må jeg gjøre som er oppført her inne som ikke er definert? PUBLIKUM: [uhørbart] BRIAN SCASSELLATI: Vel hvordan mange punkter er definert rett opp her, men jeg bruker den variabelen jeg. Så jeg kommer til å ta den variabelen jeg og jeg kommer til å definere den ned her i stedet. Så nå kommer det til å opphold oops, fikk de caps lock på somehow-- jeg er kommer til å holde jeg ned her. Så nå her er min lille funksjon eller sub-rutine, og det sier, hvor mange prikker jeg kommer til å skrive ut? Og det kommer til å gå gjennom denne løkken og skrive dem om og om igjen. Da kan jeg endre programmet mitt her oppe. Og hva gjorde jeg kaller den funksjonen? printDots. Så jeg vil kalle printDots. Hvor mange prikker jeg ønsker å skrive ut gjøre første gang før kaninen? PUBLIKUM: j. BRIAN SCASSELLATI: j. Hvor mange prikker jeg ønsker å skrive ut gjøre på slutten, etter at kaninen? 10-j. Og det er en ting jeg mangler. Som du så i forelesning i dag, vi kommer til å erklære printDots opp ovenfor for å gi prototypen. OK. Så det jeg har gjort er at jeg har prøvd å isolere som gjenbrukt en del av koden som jeg har gjort om og om igjen. Og jeg har prøvd å dra den ut, slik at alt som er inneholdt i ett sted. På den måten, hvis jeg har en feil et sted, Jeg bare må fikse det på ett sted. Greit. Så la oss lagre det. Og la oss sørge for at det fungerer. Så la oss gå ut. Vi vil gå igjen til vår terminal. Vi vil zoome inn. Vi vil gjøre at kaninen prosessen. Oh. Og det har gitt meg en advarsel. Hva er det å fortelle meg? Vel i noen av disse ganger, du alltid vil til å bla opp til den aller første error-- nå på dette, har jeg bare fått én. Det forteller meg i bunny.c, på linje 8, kolonne 9, det er et problem. Den sier, du har erklært dette variabel jeg og du ikke har brukt det. Nå som normalt, er det ikke den verste feilen. Det er et enkelt å fikse. Og faktisk, kan vi gå tilbake igjen. Vi kan gå tilbake til Bunny. Og i dette tilfellet, alt vi trenger å gjøre er å kvitte seg med i, fordi vi ikke bruker Jeg innenfor hoved lenger. Vi bare bruker det innenfor vår sub-rutine. Så la oss lagre det. Vi vil gå tilbake. Og zoome inn. Vi vil enda en gang gjøre bunny. Og det igjen er våre 10 rammer. OK. Hver gang du får en procedure-- Yeah. SPEAKER 33: Jeg har a-- Jeg er forvirret. Kan du gå tilbake til koden? BRIAN SCASSELLATI: Jepp. SPEAKER 33: Så, når du skrev prototypen, argumentet du hadde det heter ble kalt howmany? Men, below-- BRIAN SCASSELLATI: Oh yeah. SPEAKER 33: --called dem noe annerledes, jeg forstår ikke. BRIAN SCASSELLATI: Hvorfor er de forskjellige. Så det er et stort spørsmål. Så spørsmålet var, opp her, skrev jeg howmany, og ned nedenfor, skrev jeg howManyDots. Årsaken er at opp i din prototype, det er faktisk ikke betaler oppmerksomhet til de navnene som du setter inn. Alt som virkelig bryr seg om er at det er et heltall. Den ønsker å vite skjema av hva du putter i. Nå stylistically-- oops-- hva jeg burde gjør, er jeg liker å gjøre disse kamp. OK. Fordi det vil være å holde det lettere for meg å huske. Men det var min feil Yeah. SPEAKER 34: Og så for prototype å jobbe, bare skriver den linjen, skriving prototypen, gjør at funksjonen som kommer rett nedenfor det å gå til slutten og hente hva det betyr? BRIAN SCASSELLATI: Hva det betyr er når kompilatoren går gjennom, den går fra toppen av koden til bunnen. Og hva denne prototypen er, er det er i utgangspunktet et løfte. Det sier det kommer til å være en funksjon definert et sted. Det kommer til å bli kalt printDots. Og det kommer til å ta ett argument som kommer til å være et heltall og det kommer til å gå tilbake ingenting, ugyldig type. OK. Jeg lover deg at det kommer til å bli definert et sted nedover veien. Men når du ser det, som du går ned gjennom resten av mitt Hovedfunksjonen, jeg vil å behandle den som en funksjon som tar ett heltall innspill. Og så når kompilatoren går ned gjennom dette, ser det ut til at løftet. Og når det blir ned, holder går, fortsetter å gå, den finner den første gang printDots er nevnt. Og den sier, Oh, du gir meg denne j. j er et heltall. Vel du lovet meg at ville være et heltall og det er rett. Det er greit. Og så til slutt, ned helt nederst, før jeg kommer til slutten av min fil, jeg gjør bra på mitt løfte og jeg definerer det. OK? SPEAKER 35: Så det saves-- den Programmet vil spare mellomrom at det går tilbake og fyller på slutten? BRIAN SCASSELLATI: Det er ikke om minnetildeling. Det er faktisk bare om hva type er du forventer å se. Skulle denne tingen har en argument, eller fem argumenter? Bør ha det hele tall være gitt den, eller strenger? Det er alt det ser å gjøre er å sjekke, er du gi meg rett type argument. OK? Greit. La meg gi dere en annen bit å se på. ASCII kunst er ikke den store modellen av animasjon som den er i dag. Men noen mennesker selvfølgelig ta ting og de presser det til sine ekstreme. Dette er, som David demonstrerte i foredrag, et stykke kode at du bør ikke under noen omstendigheter prøv å kopiere selv. Fordi det er forferdelig stilistisk. Faktisk er det konstruert for å være så vanskelig som mulig å lese. OK. Så, for å gjøre igjen, la oss zoome inn her. Jeg kommer til å gå nå, endre katalog. Jeg kommer til å gå opp ett nivå, tilbake til min arbeidsplass. Jeg vil da endre katalogen til dette annen katalog som jeg har laget. Og dette er den internasjonale Maskeres C Programming Contest. Maskeres midler som vanskelig mulig å forstå. Så vær så snill, ikke bli redd hvis du ser på dette og gå, jeg kan ikke lese det. Det er poenget med det. OK? Men, har vi denne flott program som jeg er skal se på ved bare å skrive mer. Og la oss se om jeg kan zoome ut bare litt, slik at du kan se det Og dette er programmet. Den er oppkalt endo.c. Og det ser ut som dette bøtte med form av bokstavene F-L-U-I-D i den. Dette er faktisk et program. Det er skrevet i de mest obskure måte at forfatterne kunne muligens Skriv det. Men det er en fantastisk liten brikke som genererer en modell av fluiddynamikk. Og så vi kommer til å gi som modell en inngang som ser ut som dette, av en staired satt av containere med litt væske, noen væske, opp på toppen. Og vi vil ha det simulere hva som skjer med den. Så jeg vil kalle den funksjonen, endo. Og jeg skal gi den som input filen som jeg har hatt. Og det er vår resymé av ASCII kunst. En full væske dynamisk simulator kjører på bare noen få linjer med kode. Nå hva er faktisk veldig utrolig om dette lille programmet er at jeg ønsker å stoppe det nå, så jeg kommer til å bruke det som kommando? PUBLIKUM: Ctrl-C. BRIAN SCASSELLATI: Ctrl-C. OK. Så jeg kommer til å bruke Ctrl-C. C Det vil stoppe det. Jeg skal klare igjen. Og nå kommer jeg til å påberope program, kjøre programmet, bruker seg selv som input. Og vi får se væsken dynamisk simulering av det smelter. OK. Vennligst ikke la det programmet være ting som forvirrer deg. Det er bare slik at vi kan ende på noe kult og interessant. OK. Lykke til med oppgavesett. Vi skal være glad for å svare spørsmål etter klasse. Takket mye, folkens.