[Musik spiller] JASON Hirschhorn: OK, alle. Velkommen til afdeling. Dette er CS50, vores meget første super sektion. Som I alle ved, næste uge regelmæssige afsnit vil starte, men i denne uge er vi alle sammen. Der er mig selv. Mit navn er Jason. Jeg er lektor i datalogi. Vi har Andi, hvem der er leder TA af CS50. Og SCAZ, professor Brian Scassellati, han er en professor i datalogi. Vi er de CS50 hoveder på Yale. Du kan altid maile os heads@cs50.yale.edu. Vi vil være på foredrag. Vi vil være på kontortid. Hvis der er nogensinde noget, vi kan gøre for dig, alt hvad du har brug for, velkommen til at nå ud til os. Så hvad skal vi gøre i dag? Eller inden da, hvad er kommer op i denne uge? Så kontortid er mandag, tirsdag, Onsdag og torsdag, fra 8:00 til 11:00. Der er en tidsplan på hjemmesiden. Sektioner, som jeg nævnte, starter i næste uge. Og du vil finde ud denne uge, hvad tid dit sektion er, hvad dag det er, og hvem din TA er. Problem Set 1 skyldes på torsdag middag, fredag ​​ved middagstid med en sen dag. Ja, har du ni sene dage. Og der er ni problem sæt. Og kan kun bruge én sen dag pr problemer sæt. Ja, i kraft, alt problem sæt forfalder fredag ​​middag. Det er alt. Alt, detaljer er på pensum. Hver fredag ​​har vi frokoster. Vi kan godt lide at gøre denne store selvfølgelig føle sig en smule mindre. Så du er velkommen til at RSVP. Gratis frokost med kolleger klassekammerater og personale. cs50.yale.edu/rsvp. Alle disse ting, Jeg har på skærmen, og mere, kan du finde cs50.yale.edu eller cs50.harvard.edu, hvis du går til Harvard og ser dette online. Også på disse websteder, der er et væld af ressourcer for dig. Hver forelæsning har ikke kun videoen af foredraget, men også bemærker. Nogen vil se foredrag og tage noter for dig. Så du kan bare betale opmærksomhed under foredrag, eller du kan bruge deres noter / vores bemærker at supplere dine egne noter. Der er dias online. Kilden code-- alt David går hen i foredrag, eller SCAZ går over foredrag, der kildekoden er tilgængelig online så godt, som ligesom jeg, nævnte videoer. Sektioner, ligeledes vil alle blive filmet. Alle disse slides vil være tilgængelige. Alt dette kodeks vil være til rådighed for dig. Der er shorts på den hjemmeside, hvor CS50 medarbejdere tilbringer fem til 10 minutter gennemgår emner for dig. Nogle af dem, du har allerede stødt på i problemområder sæt. Kontortid, som jeg nævnte, mandage gennem torsdage, 8:00 til 11:00. CS50 Study er en fantastisk ressource. Der er praksis problemer, prøve dias, kendte fejl at de studerende kan lide at løbe ind i, for væsentlige hvert emne, vi vil dække i dette kursus. Og endelig, om dette dias mindst, Reference50 som giver dig information på alle de C-funktioner du nogensinde kunne muligvis håbe at bruge og mange, mange flere. Igen, der dot dot dot på bunden af ​​skærmen er at vise, at der er endda flere ressourcer på disse to hjemmesider: cs50.yale.edu, cs50.harvard.edu. Så hvad gør vi i dag? Nå, først vil jeg give man ser på ressourcerne. Allerede gjorde at en. Se på os. Nu, vi kommer til at gå over datatyper og operatører i C. Så Andi vil komme herop og gå over biblioteker i C, printf (), en funktion, som du allerede kender eller vil hurtigt blive meget velkendt. Og du vil også gå over betingede og loops. Og så til sidst, SCAZ vil gå over CS50-id. Hvis du ikke har dove i allerede i Problem Set 1, samt hvordan man bruger terminal og nyttige kommandoer og derefter give dig nogle demoer og praksis kodning i CS50-id. Før jeg hopper ind på dette indholdet på denne side, Er der nogen har nogen spørgsmål indtil nu? Great. OK. Skifte gear. [Skifte gear] Det var mig skiftende gear i en manuel bil. Så datatyper i C, kan du ikke bare have en variabel x og har det være på linje 10, et helt tal, måske nummer 1, på linie 20, et decimaltal 10.5, og derefter en par linjer senere en streng, jeg elsker CS50. I C, kan variabler kun én ting, og kun én ting. Og så er du nødt til at give dem typer. Og på dette board, vi har en liste over typer. Der er tegn, som står for tegn. Så det er et bogstav A, B, C, D. Det kan også være et rum, eller der kan også være en ny linje karakter. Der er hele tal, der er lige tal, hele numbers-- eller heltal rather-- men ingen decimaler. For decimaler, vi har floating point tal. Floating point tal er tal med decimaler. Så er der længes, som er væsentlige længere heltal. Du vil opdage, at en lang er 8 hvorimod en int er 4. Jeg kommer til det i en anden. Det er fordi længes kan gemme selv flere heltal end en int kan lagre. Dobbelt er en lang flyde. Og endelig har vi streng, som er en type at du sikkert har brugt før. Hvis du inkluderer hashtag # includeCS50.h i din kildefil, så kan du bruge en snor type. Det er faktisk ikke bygget ind i C. Der er et par andre typer samt. Men disse er de vigtigste dem med som du vil bruge, og støder på. C som igen nævnte jeg, hver variable-- det kan kun være én type og kun en type. Det er fordi C er en statisk skrevet sprog, i modsætning til dynamisk maskinskrevne sprog hvor, hvis du opretter en variabel du kan ændre, hvad der er gemt i det som du går på i dit program. Herovre på højre hånd side, jeg har de forskellige størrelser af disse typer af data i bytes. Så en karakter er 1 byte. Det er 8 bit. Og det betyder, fordi 8 bits der er otte 0'er og 1'ere. Vi så disse demoer i første uge med at binære pærer. Med 8 bit eller 1 byte, vi kan repræsentere tal fra 0 til 255. Højre. Hvis alle 8 bit er 0, der er 0. Hvis den første bit er 1, der er nummeret én, og så videre, hele vejen op til 255. Og det er derfor for tegn, du kan har i alt væsentligt op til 255 af dem, men det er rigeligt til at dække alle de tegn, vi skal bruge. For heltal, kan du have 0 og så har du 2 til 32 minus 1. Det er, hvor mange muligheder du har for heltal. I lang, har du 0 til 2 til 64 minus 1. Så du har mange, mange, flere muligheder for længes. Strenge, det er et spørgsmålstegn fordi det er en cliffhanger til senere. Ja. Jeg kunne fortælle alle er på kanten af ​​deres sæde, ligesom hvad er det spørgsmålstegnet? Det er en cliffhanger. Vi vil med tiden dække størrelse strygere og tale mere om strenge. Fordi strengen er faktisk en af ​​støttehjul vi lægger på i denne kursus i begyndelsen og derefter tage ud senere på, fordi strenge i C faktisk pointere til karakter arrays. Men igen, det er en cliffhanger til senere. Før jeg går videre spørgsmål, kommentarer, bekymringer om dette dias? OK. Jeg må være en fantastisk explainer. Også når du programmerer, du kommer til at bruge disse operatører. Virkelig simple tegn, der kan gøre simple operationer, som du sandsynligvis allerede meget fortrolig. For eksempel, på højre side ser vi tilføje. For at tilføje, du bare gøre en Plus tegn. Og så har du måske to variable x og y. Du kan gøre x + y i din kode. Måske du ønsker at-- sige dig har nummeret 7 og 3, du ønsker at gemme, at i en variabel kaldet sum. Du kan gøre int for den type, rum sum, navnet på variablen, = 7 + 3; Hvad ville det butik i sum? Nogen? Hvis jeg havde i summen = 7 + 3. Hvad ville der opbevares i sum? Du kan bare råbe det ud. PUBLIKUM: 10. JASON Hirschhorn: 10! Det er helt rigtigt. Hvad med i summen = 7 - 3, med Jeg bare bruge bindestreg tegn. Hvad kommer til at opbevares? PUBLIKUM: 4. JASON Hirschhorn: 4. Sum er sandsynligvis den forkerte navn for denne variabel, ville men 4 opbevares. At formere i C, skal du bruge lidt Stjerne karakter, behøver du ikke bruge en x. At dele, bruge en Forward Slash ikke division symbol. Og at modulo Brug Procent symbol. Så lad os sige, at jeg ønsker at se int z = 7% 3, hvad ville blive lagret i z? Så det er væsentligt spørger hvad betyder modulo gøre? Er der nogen vide, hvad modulo gør? Ja. Y4. SPEAKER 1: Det er resten. JASON Hirschhorn: Det er den Resten, når du deler. Så 7 divideret med 3 er 2 resterende 1. Så 1 ville blive gemt. Du klarede subtraktion, men det er, hvordan det fungerer. Det er, hvad modulo operatøren gør. Det tager en række deler den med et andet nummer og vender tilbage til dig resten. Så igen, 7% 3 giver dig 1, fordi 7 divideret med 3 er 2 resterende 1, og returnerer resten. Hvad med lad os gå tilbage op et skridt til denne deling tegn. Hvis jeg gjorde 7 / divideret med 3 gør nogen ved, hvad det ville vende tilbage? SPEAKER 2: 2. JASON Hirschhorn: Hvorfor 2 og ikke 2.333? SPEAKER 2: Jeg synes, det skærer ud efter hele tal. JASON Hirschhorn: Så det er helt rigtigt. I C, hvis du gør opdeling af to heltal 7 divideret med 3, det får det svar, som i dette tilfælde 2,3333 evigt og den konstaterer, at kommaet og hugger alt ud efter kommaet og det bare vender du 2. Så hvis jeg gjorde 8 divideret med 3. Det faktisk, vi kender at for at vende tilbage 2,666, men det hugger alt ud på decimaltegnet, afkorter det hele, og bare vender tilbage til dig 2. Så 6 divideret med 3, 7 opdelt med 3, 8 divideret med 3, er alle kommer til at vende tilbage til dig 2. Er der nogen vide, eller har et gæt, til, hvordan jeg rent faktisk kunne få den fulde svar, hvis jeg ønsker at decimal? Ja. Fortsæt. SPEAKER 3: Brug en flyder? JASON Hirschhorn: Hvad mener du? SPEAKER 3: Fordi du sagde det float er for tal [uhørligt] JASON Hirschhorn: Right. Så det er helt rigtigt. 7 er et helt tal. Men hvis jeg ønskede at vende det i et decimaltal, Jeg ville have til at gemme, at som 7,0 fordi computeren er virkelig stupid-- vi så, at med PB og J example-- det vil kun gøre præcis hvad du fortæller det. Så hvis du skriver 7, det tror, ​​det er et heltal. Hvis du skriver 7,0, selv om vi kender disse ting er ækvivalente, det behandler det som en decimaltal. Så hvis du gjorde 7,0 divideret med 3 eller divideres med 3,0, Det vil sige, OK, nu vi har at gøre med flåd. Jeg vil vende tilbage til dig 2.333333 evigt. Men ikke virkelig evigt, fordi som vi så også i foredrag, disse flydende komma tal er ikke ligefrem præcis. Så hvis du ønsker at decimal, eller en del af denne decimal, så er du nødt til at use-- en af ​​dem skal være et decimaltal og computeren har til at forstå at dette er en floating point, du er beskæftiger sig med, ikke er et heltal. Eventuelle spørgsmål vedrørende denne tabel på højre side, indtil videre? Eller din venstre side, din venstre, din venstre side. Ja. SPEAKER 4: Right. For ligesom en regelmæssig heltal, ville du write-- ville du nødt til at skrive flyde? JASON Hirschhorn: Ja så. Tja, hvis du vil oprette en variabel, der er en svømmer, du nødt til at sige flyde z er lig noget. SPEAKER 4: OK. JASON Hirschhorn: Men hvis jeg ønskede at gøre 7 divideret med 3 og få det decimal, Jeg ville gøre flyde z = 7,0 / med 3,0; og der ville give mig den flydende punkt nummer. SPEAKER 4: OK. JASON Hirschhorn: Hvis jeg gjorde noget lignende int z = 7 / med 3, der ville give mig et heltal, fordi de er alle heltal. Giver det mening? SPEAKER 4: Ja. JASON Hirschhorn: OK. Great. Andre spørgsmål om det bord? Virkelig? Jeg er så spændt. OK. Så nogle andre ting, du vil bruge, oftentimes i betingelser eller løkker, er disse typer af operators-- disse typer af booleske udtryk. Og som vi har lært, == er, hvad du bruger til at kontrollere, om to ting er ens. Så her jeg tjekker hvis x == y, lad os igen antage, at x er 7, og y er 3. Så hvis jeg skrev 7 == 3, hvad ville det vende tilbage til mig? Er det sandt eller falsk? PUBLIKUM: Falsk. JASON Hirschhorn: OK. Jeg føler, at alle kan få denne ene. Så alle, hvad ville det vende tilbage? PUBLIKUM: Falsk. JASON Hirschhorn: Falsk. Great. 7 ikke er lig 3. Så 7 == 3 ville returnere false. Du har en ikke lighedstegn, så hvis jeg kontrolleres 7! = 3, hvad ville det vende tilbage? PUBLIKUM: Sandt. JASON Hirschhorn: Sandt. Fremragende. Nogen var meget eftertrykkelig i bagsiden og værdsætter. Så har du mindre end operatør, mindre end eller lig med operatøren, større end operatør, større end eller lig med operatøren. Så endnu en sanity check. Hvis jeg havde 7 er større end eller lig med 3. Hvad ville det vende tilbage? PUBLIKUM: Sandt. JASON Hirschhorn: Sandt. Ja. At baglokalet, bagsiden af rummet, fantastisk. Du kan kombinere disse udtryk, hvis du kan lide, så godt, med en logisk, og som er && Eller en logisk OR som er || ||. Og så nu kan du teste to ting together-- Er det sjovt? Hvorfor er det sjovt? Så hvis jeg ville, kan jeg sige, er 7 større end 3 og 2 er mindre end 4? Tja, hvis 7 er større end 3, det er sandt. 2 er mindre end 4, det er sandt. Så hele denne ting ville vende tilbage sandt. Hvis jeg testede 7 er større end 3 og-- Jeg er bare plukke tilfældige tal her-- 4 er mindre end 2, godt, det er falsk. Så sandt og falsk make falsk. Og du kan gå på og du kombinerer som mange betingelser sammen som du ønsker. Er der nogen har spørgsmål, kommentarer, bekymringer indtil nu? Og jeg ser nogle af jer at tage billeder af mig i skærmen, som jeg værdsætter. Forhåbentlig er det ikke snapchat. Forhåbentlig det er til dine noter. Men alle disse går at være tilgængelige online. Så du behøver ikke at tage billeder af dette. Som jeg nævnte, alt vil være tilgængelige online for dig. OK. Jeg er ved at få scenen, så gør nogen ønsker at sige noget før det sker? Spørgsmål? [Indskyde VOICES] JASON Hirschhorn: Åh, stop. Du fyre er for nice. OK. Jeg har tænkt mig at mærke ud. Lad os gå. ANDI Peng: Vi kommer til at gøre en akavet mic forandring nu. JASON Hirschhorn: Jeg er kommer til at tage dette fra. ANDI Peng: Sætter pris på den støtte, gutter. Kan du høre mig? Er det godt? Perfekt. Smuk. Lad mig bare guffe det i. OK. Så jeg er ved at gøre som en kæmpe oplysninger dumpe på jer lige nu. Og ingen bekymringer overhovedet, hvis du er ikke efter hver eneste lille linje af, hvad Jeg er ved at vise dig. Som Jason sagde, alt er helt online. Bare vi vil forsøge at indføre alle til de begreber, der er omfattet i nogle af disse slides. Så bare følge med. Ingen bekymringer, hvis du ikke forstår alt; Men hvis på noget tidspunkt du føler dig fortabt, hæve din hånd, stopper vi, ingen bekymringer. Cool. Så jeg tror, ​​at noget, at David har allerede slags nævnt i foredrag og Jason har slags hentydet til i dag er, hvad et bibliotek er. Så i programmering, vi har disse ting kaldes biblioteker. Hvor det væsentlige, alt de er bare et sæt funktioner, der er væsentlige bare kode, der er allerede er skrevet af en anden, at vi alle kan brug inden for vores programmer. Så hvordan gør en normal bibliotek arbejde, ikke? Du indtaster biblioteket døren. Du har alle disse bøger, du kan trække ud og du kan få adgang til oplysninger inden for disse bøger. Samme ting i programmering. Du har et bibliotek, der allerede er skrevet af andre mennesker. Og den måde, at du kan, som programmør eller en elev, kan få adgang til at biblioteket er gennem hashtag # include. For eksempel i C vi har tre C-- mest almindeligt anvendt tre C-standard libraries-- input / output bibliotek, strengen bibliotek, og math-biblioteket. Så inden dit første par problem sæt, de vil være de tre at du primært bruger. Så som David allerede forklaret i foredrag standard I / O-bibliotek, eller standard input / output-bibliotek gør netop dette. Det giver dig, i din kode, indtaste noget fra brugeren og output, på skærmen, i det væsentlige udskrive det til skærmen. Og så hver gang du bruger nogen funktioner, for eksempel funktionen printf (), som vi kommer til at gå over den næste dias, sørg for at inkludere standard-I / O bibliotek eller andet, du kommer ikke til at kunne bruge printf () funktion. Fordi du, som programmøren faktisk aldrig skrev, at funktionen, du bare bruge nogen andens kode i din egen kode. Giver det mening alle? Cool. Og så har vi hovedsagelig komme ind på den string.h biblioteket og math.h bibliotek, .h blot betyder bibliotek, andre biblioteker, som du i sidste ende være at bruge i din kode. Dog med henblik af dette bibliotek, vi have-- af denne class-- vi også hvad der kaldes CS50 bibliotek, cs50.h, hvor vi, for din orientering har skabt mange vigtige og nyttige funktioner. Så du som programmør kan piggyback off hvad vi har allerede skrevet, så denne funktion er tilgængelig for dig til eget brug. Jeg vil være der dækker et par de funktioner, der almindeligvis anvendes, men ved, at disse er alle googleable online. Du er velkommen, trække op CS50 biblioteket og så har du alle de funktioner der. Ja. SPEAKER 5: Så hvis du ikke var ved hjælp af software, leveres til os af klassen, gør det mener vi ville have til at hente og finde denne overskrift fil os selv og fortælle den computer, hvor det er? ANDI Peng: Great spørgsmål. Præcis. Så det er ligesom hvis du ikke er fysisk til stede på et bibliotek, der er ingen måde for dig at faktisk gå og få adgang til det. Så det samme med programmering i C, du nødt til at sørge for, at du bruger vores apparat, fordi biblioteket er allerede blevet indarbejdet i det. Og så når du hashtag # include, bibliotekets der. Ja. Godt spørgsmål. Alle godt? Cool. Okay. Så vi kommer til at ramme, væsentlige, hvad der er den første funktion, Vi som programmører er skal bruge inden for vores kode. Dette kaldes printf () funktion. Så printf () funktion, som jeg har allerede sagt i sidste dias, er inkluderet i standard I / O, standard input / output, bibliotek. Så sørg for uanset hvad du using-- Åh, lad mig få fat i laseren pointer-- når du bruger printf () funktion, du er nødt til også at omfatte standard-I / O bibliotek eller andet, når du kompilere, du kommer til at få en fejl fordi computeren bliver, Åh, jeg ved ikke, hvor printf () er, du ikke fortæller mig, hvor printf () er. Nå printf () er inkluderet i standard I / O, så når du bruger printf (), Sørg for at have, at linje over din kode. Så for eksempel printf () her er en funktion. Alt det gør, er udskrift noget i parenteserne til brugeren. Vil nogen gerne tage et stik på, hvad denne linje kode til højre her kommer til at printe ud? Derfor er svaret er på skærmen. Nogen? Verdi: Den nederste. ANDI Peng: Verdi, hvorfor du ikke gå videre og sige hele erklæring? VERDI: Hej, mit navn er Andi, og jeg er 20 år gammel. ANDI Peng: Ah, dejligt. Så i denne linje, vi kommer til at udskrive, Hej, mit navn er Andi, og jeg er 20 år, hvilket er i virkeligheden en sand sætning. Syntaks. Så par syntaktiske spørgsmål, jer vil være sikker på du ved. Citater. Dobbelte anførselstegn fortælle computer, alt inde kommer til at blive udskrevet. Alt inde dåse bare være præcis hvordan du skriver det, med undtagelse af almindeligvis ved udgangen, vi kommer til at ønsker at inkludere en hash-- åh sorry-- en streg n. Så en bindestreg n. Er der nogen ønsker at tage et gæt på, hvad der gør vores kode? Ja. SPEAKER 6: Sætter det på en ny linje. ANDI Peng: Præcis. Så alt dette gør, er tillade uanset hvad der sker efter dette, efter denne sætning, der skal udskrives til en ny linje. Så når du skriver din kode, du behøver ikke tilfældigt have ting tidsmæssigt til enden at du ikke ønsker. At alt bliver pænt udskrives en linje og så starter vi på følgende linje. Er der nogen der kan huske, hvad det semikolon gør, når vi kodning? Ja. SPEAKER 7: Erklæring. ANDI Peng: Beklager? SPEAKER 7: Er det ende erklæringen? ANDI Peng: Ja. Så i C eller programmering sproget, semikolon betegner slutningen af ​​en linje programmering. Så for eksempel i engelsk bruger vi periode sige, oh dette er enden en sætning. I programmering, samme ting, vi har en semikolon at betegne slutningen af ​​en linje. Ofte, når du er begynder at programmere, du vil indse dig glemmer at tilføje et semikolon og så skal du prøve at køre din kode, og det virker ikke. Og du er ligesom, Ah, det gør jeg ikke hvorfor, det skal virke. Chancerne er du sandsynligvis glemt en semikolon eller en konsol eller noget sted. Så det er vigtigt at huske. Cool. Okay, håndsoprækning, hvordan mange mennesker her har nogensinde taget AP Computer Science eller programmeret i Java før, nogensinde? OK. Dejligt. Det vil ikke være gældende da, men i Java, du har noget, der hedder System.out.println som ikke findes i C. Så i C, når du ønsker at tilføje i variabler til noget, du ønsker at udskrive, er der en bestemt syntaks, vi kommer til at bruge. Det kaldes den placeholding-- væsentlige Vi tilføjer pladsholdere på plads af heltal eller variablen at vi ønsker at udskrive. Så som du fyre kan se, vi har inkluderet et nyt bibliotek header fil her. Den CS50 biblioteket. Og indeholdt i denne CS50 bibliotek er en fælles funktion, vi kommer til at bruge i vores kursus kaldet GetInt (). Er der nogen ønsker at tage en kniv på hvad GetInt () kan muligvis gøre. PUBLIKUM: [uhørligt] ANDI Peng: Beklager. Kunne ikke høre dig. Maddie, nogen. Maddie: Åh, det beder dig for et heltal. ANDI Peng: Præcis. Så denne funktion, anden funktion, der er allerede blevet skrevet af en anden at vi kan opfordre nu. Alt det er, er bede dig, brugeren, indtaste hvad du vil som koden kører, og det gemmer whatever-- i dette tilfælde er vi GetInt () - ing, så det betyder vi er opnå et heltal. Og vi kommer til at gemme at der i et andet heltal at vi lige har gjort kaldet alder. Det mening for alle? Cool. Så nu, at vi har gemt denne heltal, at vi har bedt fra brugeren, i denne variabel, vi har skabt af typen int kaldet alder, vi kan gå videre og sted at i vores printf () funktion. Så syntaksen normalt for printf () er at uanset hvor i dit faktiske fysiske linje, du vil inkludere, at heltal, du gør dette symbol lige der, procentsymbolet, med type variabel, som du ønsker. Så i dette tilfælde alder er et helt tal. Så du kommer til at omfatte % Jeg fordi det er et heltal. Og så efter din erklæring, du vil at gøre komma, og navnet på variablen. Så her, vi kommer til at udskrive ud, Hej, mit navn er Andi, og jeg er tomme år. Hashta-- eller sorry--, alder med hvad jeg input. Så hvis jeg var at indtaste 20 min GetInt () her, det ville udskrive præcis det samme. Men, hvis jeg ønskede at indtaste noget andet, ligesom måske 40 eller 45, så ville du se, at afspejlet følgelig i koden. Så dette er et eksempel af noget, som udskriver ud og ser til dig, som om det er de samme ting, men under hætten af computeren er der faktisk meget forskellige ting sker. Cool. Okay. Så hvad nu hvis vi ønsker flere variabler? Temmelig let. Samme ting. Vi har også en ny funktion her kaldet getString (), også inden for CS50 bibliotek, at alt det gør, er bede brugeren for en streng, som er blot et sæt af tegn, så gerne en sætning eller lignende et navn. Så i dette tilfælde, ville vi have to pladsholdere% s for streng, og% i for heltal. Og vi kommer til at følge at ved de to variabler vi vil medtage, i den rækkefølge at de vises i sætningen. Så for eksempel, mit navn er blank, jeg vil have et navn der, så jeg har tænkt mig at have navnet først. Og så bagefter, jeg ønsker alder, ønsker at have alder sekund. Og så hvis jeg ønskede at input, Hej, mit navn Andi, og jeg er 20 år gammel. Hvis jeg indtastet Andi og 20, den præcis de samme ting ville udskrive; Men nu har vi fået to gemt variabler af navn samt INT. Ja. SPEAKER 8: Ville det være i stand til at køre, hvis du har skiftet navn og alder i slutningen af ​​det? ANDI Peng: Ja. Det er virkelig godt spørgsmål. Så lang historie kort, nej. Fordi navn og age-- hvad type variabel er navn? SPEAKER 8: String. ANDI Peng: Og hvad type variabel er alder? SPEAKER 8: Heltal. ANDI Peng: Så her har vi en pladsholder til snor og heltal, ikke? Så hvis du skulle skifte disse, computeren kommer ikke til at vide. Det kommer til at kontrollere, om en streng, og hvis du forsøger at give det en int, det vil være ligesom vent Jeg er forvirret, du fortalte mig, jeg skulle være færre hukommelse til en int. Og lige her, når det forventer et heltal og du giver den et navn og en streng stedet, det er også kommer til at være meget forvirrende, det vil ikke køre, præcis som du har brug for det. Så her, navngivning og syntaks er meget vigtigt for køre kode. Alle godt? Ja. Maddie. Maddie: Her, jeg ved, vi har kigget på eksempler i klassen, hvor de spørger hvad er din alder, hvad er dit navn. Her ville det være det doesn't-- hvis vi skulle til at køre denne kode, det ville ikke bede om det? Men du ville bare input to tal og så ville det køre sådan? ANDI Peng: Ja, præcis. Så hvis du ønskede for det at display, skal du indtaste din alder, du kan bare tilføje en printf () funktion Det siger, Indtast venligst din alder, ovenover. Det er et godt spørgsmål. Ja. SPEAKER 9: Så ville allerede være inkluderet i GetInt () [uhørligt]. ANDI Peng: Nej, det er faktisk ikke. Så alt dette gør, er bare beder en tom skærm til brugeren at indtaste noget. Hvis du vil have det, hvis du vil have det til at udskrive ud af noget, der fortæller brugeren lignende, giv mig din alder, så er du skulle printf (), der selv. Fordi alle bruger denne funktion til forskellige ting, du kunne gemme alder, du kunne gemme adresse, du kunne gemme telefonnumre. Og så det er virkelig op til dine fyre individuelle anvendelser for, hvad du vil have det til at sige. Ja. SPEAKER 10: Så, bare for at afklare, hvor gør du indtaster navn og alder så den dukker op i stedet for% s? ANDI Peng: Som i bruger? SPEAKER 10: Ja, ligesom hvordan gør jeg gøre det-- hvor skal jeg sætte Andi, og hvor kan jeg sætte 20? ANDI Peng: Ja. Så hvis du skulle faktisk køre denne kode, Jeg er faktisk ikke kører kode, det er bare her lige nu. Hvis jeg skulle køre koden, ville jeg kompilere koden, gøre filen, køre koden, og så ville der bare være to pladser til mig for at indtaste det. Ja. Du fyre vil se, når du spiller rundt med koden selv. Okay vi vil flytte i næste afsnit af det, vi vil være der dækker i dag. Vi kommer til at gå over, hvad betingede udsagn er. Så hvis du fyre huske og huske fra foredrag, betingede udsagn, alle de er er et sæt af instruktioner til computeren i som, hvis en bestemt betingelse er sand, du udfører koden indersiden af ​​denne betingelse. Så i Scratch-- væsentlige den store tema fra i dag er, at du fyre har allerede alle set logikken bag alt at vi dækker. Og alt vi laver er oversætte noget der var meget intuitiv i Scratch, og hårde kodning det ind i syntaks, vi skal bruge for den klasse, der er C. Så logisk, al denne blok var er, at stykke kode lige der. Ja. OK. Vi får også ind i en if ... else erklæring, som er blot et ekstra lag af kompleksitet til hvis redegørelse hvor computeren tager et kig på dette , og ser, hvis denne betingelse er sand, skal du gøre hvad er inde i disse to beslag, else-- så lidt ligesom den standard, hvis det ikke opfylder Stand- gøre dette. Det er ligesom en gaffel i vejen. Hvis det regner udenfor, jeg sætter på en regnjakke, ellers noget ellers ved jeg ikke sætte på en regnjakke. Betyder det logik mening at alle? Cool. Okay. Så som en hård eksempel på det, at vi ville se i C er, hvis jeg ønskede at skabe et variabel kaldet lektier timer. Og hvis lektier timer er mindre end fem, jeg siger Livet er stor. Det er vidunderligt. , Siger Men Kampen er real-- hvilket er, hvad vi alle på mandag eftermiddag op Science Hill er sandsynligvis gør lige nu-- PUBLIKUM: [LAUGHING] ANDI Peng: De måde, vi ville, tak for det. Den måde, vi ville hardcode dette i C er if-- lad os antage, vi allerede har en variabel af typen int kaldte lektier timer lige her. Hvis lektier timer er mindre end fem printf (), Livet er stor. Husk at holde / n fordi du ønsker en ny linje efter. Else print, Kampen er reel. Er alle forstå, hvordan Jeg skiftet fra denne blok ind i denne blok af kode? Cool. Okay. Så nu vil vi tage et kig på flere If udsagn helt. Så lad os antage det Formålet med dette program var vi bede brugeren om en karakter. Vi bevirke en hjælp GetInt () for en klasse, og de input en værdi, og du ønsker at vise hvilken type kvalitet, de fik. Så hvis jeg var at designe et program, jeg betyder typisk i alle vores øjne, 90-100 er en A, 80-90 er en B, og så videre og så videre. Hvad er der galt med dette stykke kode, at det ikke gør, hvad jeg vil have det til at gøre. Ja. SPEAKER 11: de har lavere grænser, men de har ikke øvre grænser. ANDI Peng: Præcis. Har alle høre, hvad hun sagde? Der kommer til at være øverste grænser, men ingen nedre grænser. Beklager, anden vej rundt, nedre grænser, ingen øvre grænser. Så vil du gerne tage et stik til at sige hvad der ville blive udskrevet på denne skærmen, hvis jeg skulle køre denne kode. SPEAKER 11: En fejl? ANDI Peng: En fejl? Stor gæt, ikke helt rigtigt. Er der nogen, der har en anden stab? Ja, Aaron. AARON: Hvis du lægger i noget større end 90, det ville vise alle de kvaliteter, du fik. Det ville vise du fik en A, du fik en B, du fik en C. ANDI Peng: Ja. Det er helt rigtigt. Så ville det være vidunderligt. Men de er indbyrdes eksklusiv, tror jeg. Hvis jeg skulle til at køre dette stykke kode. Og så lad os bare sige, jeg indtastet den kvalitet af 95. Så 95 er nu gemt i INT kaldt lønklasse. Og så C er et sprog der løber op fra top til bund, så det kommer til at altid køre op til bunden. Så det kommer til at komme her, læse, hvis kvalitet er større end eller lig med 90, printf (), du fik en A. Fremragende, jeg har en 95, det er større end 90. Det kommer til at udskrive, Jeg fik en A. Det kommer at tage et kig på dette, hvis, går det sige, godt 95 er også større end 80, det kommer til at udskrive du fik også en Got en B udråbstegn, og så videre og så videre. Så som vi alle kan se, dette er en fælles fejl der kan opstå, når vi er skrive kode til at se ud for. Enhver, spørgsmål om hvorfor det skete? Great. OK. Så hvordan kan vi løse dette, er naturligvis det logiske næste spørgsmål. Nå, har vi disse smukke ting kaldet hvis ellers hvis ellers hvis ellers udsagn. Så du kan se, hvis du ønsker at ændre dette problem, du ønskede at gøre hver af de betingelser gensidigt udelukkende, du vil tilføje en andet ... if-sætning. Og disse af course-- tænke på dem som stiger eller lignende trin på ladder-- du kan tilføje så mange af disse som du ønsker for så mange betingelser, som du ønsker. Så her, hvis jeg inputted klasse til at være 95. Hvis kvalitet er større end 95, printf (), fik jeg en A. Great. Det kommer til at se et andet ... hvis og det kommer til at vide, åh nej, Jeg har allerede henrettet den ellers først. Jeg know-- eller det første if-- jeg ved, at Jeg behøver ikke at se på nogen af ​​disse fordi en af ​​dem har allerede været sandt. Så det kommer til at løbe fra toppen og ned. Så snart den første er sandt, så det kommer til at springe over alle de andre af de andet ... hvis'er. Giver det mening? Så på den måde har du forskellige niveauer af kontrol og så snart én af dem er falsk, det Resten er også, vil de ikke selv tjekke. Cool. Okay. Så dette er et eksempel på en anden slags betingede udsagn vi ser sjældnere, men vi vil se dem og bruge dem. Og de er ofte mere effektive til visse tilfælde. Så vi har det, der hedder en switch-statement. Så før vi dækket, hvad der er en anden erklæring, en hvis ... ellers erklæring. Her har vi hvad er kaldes switch udsagn. Så når bruger vi afbryder udsagn er nøglen? Så i en switch-statement, du normalt typisk faktisk du Kan kun input heltal til din variabel, du tjekker. Så hvis jeg ønskede at kontrollere at se hvis en bestemt number-- f.eks en klasse, hvis jeg fik en 90. Jeg vil have det til at se, om det er en A, B eller C. Jeg kunne have en sag her. , Sagen har imidlertid at være en anden konstant. Så i denne forstand switch-statement kan kun tjekke for ligestilling af to tal. Det betyder ikke tjekke for noget andet. Så det er noget at være meget forsigtig med når du bruger dette. Så her, hvis jeg ønskede at kontrollere at se hvis min klasse på 90 er lig med 90 eller 80 eller 70 eller 60, og derefter udskrive den tilsvarende kvalitet, Jeg ville være i stand til at skrive, at i en switch-statement. Så det kommer til at komme her, check er denne helt tal lig med denne konstante? Hvis ikke, vil det springe. Er det lig med en konstant to, og så videre og så videre, indtil du rammer standard hvis ingen af ​​dem er ens. Så snart en af ​​dem er indstillet til at være lig, det kommer til at gøre dette linje kode og pause. Hvilket betyder, at det kommer til at ramme den køre, pause, og bare helt springe til bunden af ​​koden. Så i den forstand den slags funktioner ligesom en hvis ellers hvis andet, hvis erklæring. Så her er et konkret eksempel for jer. Så lad os antage, at jeg ønskede at oprette en variabel kaldet Grundlagt. Og jeg vil gerne bede brugeren om at indtaste året, at deres skole blev grundlagt. Så jeg kan oprette en switch-statement her. Og lad os bare sige, jeg input 1636. Denne kode kommer til at se switch Grundlagt som er lig 1636. Det kommer til at se sagen 1636, åh de er lige, printf () Skulle du ikke være på den skole oppe nordpå? Fordi vi antager, at de ikke gør gå her, hvis de går til Harvard, pause og springe til slutningen. Hvis jeg var at indtaste 1701, hvilket Jeg går ud fra vi alle ville input, det ville springe denne sag, kommer ned til tilfælde to, som er 1701, og udskrive Velkommen til Yale! Break, springe til slutningen. Else du sandsynligvis tager dette kursus online hvor case-- fantastisk velkomst at Yale-- det kommer til at gå til standard print, Hello Internet! Og bryde. Ja. SPEAKER 12: Kan du bruge andet i stedet for misligholdelse der? ANDI Peng: Nej, fordi måde, at hele denne funktion kontakten er bygget, syntaksen du nødt til at bruge, er tilfældet tilfældet standard. Det er ligesom det, hvis ellers hvis dette en det er tilfældet sag standard. Ja. SPEAKER 13: Du måske allerede sagt det, men kan du have mere end to sager? ANDI Peng: Ja, kunne du have så mange tilfælde som du ønsker. Tænk på det som ligesom uendeligt tilføje på. SPEAKER 14: Hvis du skiftede 1701 med 1636, det ikke rigtigt gøre en forskel ret? Det er bare kommer til at være kontrol for det. ANDI Peng: Det er en rigtig godt spørgsmål. Og vi vil komme ind på dette senere, men blot ved, det er kontakten erklæring infinitely-- det er mere effektiv end det, og hvis ellers hvis fordi den opererer ved hjælp af en anden type funktion, giver dig mulighed for, at væsentlige, at bare springe direkte til den Hvis du har brug for at være på. Ja. SPEAKER 14: Cool. Tak. ANDI Peng: Ja SPEAKER 14: Og du ikke kunne gør tilfælde lignende og større end. ANDI Peng: Nej. Så det er hvad der begrænser om switch-statement er, at du har at have konstanter kun, kun heltal. Ja. OK. Så det er noget, du fyre vil støde sjældnere for, men jeg ville bare at indføre den i sagen. Vi har her, hvad der er kaldes et ternært operatør. Hvor væsentlige, det er ligesom en hvis erklæring samlet i én linje. Her, vil jeg gå videre til den næste linje, den næste side, fordi det er nemmere at se. Så vi har alle set denne ret? Dette er temmelig let at følge. Hvis jeg ønskede at gøre en variabel kaldet string opkaldt s, hvis et bestemt antal Jeg giver det er mindre end 100, jeg ønsker at tildele lav til strengen, andet, jeg ønsker at tildele høj. Dette her gør præcis det samme disse otte linjer kode gør. Så her jeg ønsker at skabe en variabel streng. Og det er den tilstand, jeg er kontrol, om et tal er mindre end 100, så du tildele værdien af ​​lave, ellers tildele værdien af ​​high. Disse slides vil være online, ingen bekymringer hvis du fyre ikke får dette ned. Dette er blot en enklere måde, en mere effektiv måde at skrive kode. OK. Så nu vil vi indtaste hvad, for de fleste mennesker er som en meget, meget forvirrende ting at tænke på i første omgang. Sløjfen sektion. Så i dag, vi kommer til at tale omkring tre typer af løkker. Vi kommer til at starte med et stykke loop, derefter tale om en gør while-løkke, og derefter snakke om efter sløjfer. Så det væsentlige, for de mere visuelle elever derude, Vi har i det væsentlige, en grafisk skildring af, hvad en while-løkke gør. Så i et programmeringssprog, ville du begynde og indtast løkken på et bestemt tidspunkt. Du tjekker en betingelse. Og hvis betingelsen er sand, du udfører koden indeni. Og du kommer tilbage omkring og du tjekke. Hvis det er stadig sandt du holde kører denne kode rundt og rundt i en løkke. Det andet, at betingelsen bliver falsk, du kommer til at bryde og afslutte løkken. Og det er i det væsentlige den syntaks du vil bruge. Mens en bestemt betingelse er sand gør dette, hvis det ikke er sandt, du kommer til at springe til slutningen og komme videre med dit program. OK. Er der nogen der har et eksempel på, hvad der kan ske potentielt hvis jeg forsøger at køre dette stykke kode? Af den måde, SAJ-- det er SCAZ, Andi, Jason-- vi vil underskrive vores e-mails, Kærlighed, SAJ. Det er os. OK. Nogen der har et eksempel, eller har en idé om, hvad det ville udskrive? Slags en trick spørgsmål. Så her, husk tilstanden vi tjekker efter, er mens sandt. Så mens det er sandt, er det kommer til at udskrive, jeg elsker SAJ! Er der noget tidspunkt, hvor vi havde ændre dette til noget andet? Nej, ikke? Så her har vi stødt hvad er nok vil være aflytning en masse dine programmer, den uendelige løkke. Du vil opdage, at hvis du køre denne stykke kode, det bare kommer til at holde trykning, jeg elsker SAJ! Mens vi sætter pris på den støtte, vi ønsker ikke dine computere til at gå ned, fordi du holde udskrivning Jeg elsker SAJ! Så please, please, undgå uendelig løkke fordi det aldrig vil at vurdere, falsk og du er aldrig at forlade løkken. Og du kommer til at indsuges evigt. Cool. OK. Den anden type af sløjfe vi vil tale om i dag er den gøre, mens løkken, gøre, mens løkke. Og det hedder en gør while-løkke fordi du har en gør og et stykke tid. Så det er temmelig ligner et stykke loop, men en lille smule anderledes. Her er du nødt til at gøre uanset er inde i denne mens en bestemt betingelse er sand. Så hvis jeg var C og computeren er jeg kører ned dette stykke kode, Jeg tager et kig på toppen. Jeg går til C, siger jeg gøre dette. Og derefter kontrollere jeg, mens dette er sandt, jeg er nødt til at gentage det. Men mens det er falsk, så jeg komme videre og jeg aldrig gå tilbage til at sløjfe igen. Kan nogen tage et stik på, hvad forskellen mellem denne løkke og et vi kiggede bare på var praktisk. Ja. SPEAKER 15: Betingelsen kommer efter i stedet for før? ANDI Peng: Præcis. Så hun sagde den tilstand kommer efter, ikke før. I sidste ende er forskellen mellem dette og while-løkken er, at du bare vil gøre uanset er inde i dette uanset om din tilstand er eller ej sandt, og derefter kontrollere tilstanden. Så i dette tilfælde, er du always-- på denne måde, du altid sikre hvad der er indeni kører mindst gang før kontrol for at se hvis du vil have det til at køre igen. Og her er et eksempel på, når vi ville bruge det. Så for eksempel, hvis jeg ville have en variabel af typen int navngivet alder, og jeg ønsker at bede brugeren om deres alder, Jeg har tænkt mig at gøre printf () Hvad er din alder? alder = GetInt (), som er at spørge brugeren. Og nogle mennesker vil være virkelig irriterende. Og du ikke ønsker bugs i dit program for nogen indlæsning lignende, Åh jeg er negativ 4 år eller hvad. I hvilket tilfælde, hvis de gøre det, det evaluerer til sand, hvilket betyder, at jeg har tænkt mig at nødt til at holde gå tilbage og gøre dette. Så dette kommer til at holde re-spørge brugeren at give dig som en rigtig alder nummer, og det er kommer til at holde tilbage og annullere Fortryd det, indtil de giver dig en rigtig alder større end en eller ikke er nul. Så vink, vink. Dette vil være meget, meget nyttig for et af dine pset problemer. Ja. SPEAKER 16: Ups, sorry. ANDI Peng: Yep. SPEAKER 16: Er der ikke at være en røvhul, men-- ANDI Peng: Ingen bekymringer. SPEAKER 16: --are der forskellige regler her, eller har du bare glemme at sætte citatet? ANDI Peng: Oh Yeah. Beklager, det er helt min dårlige. Det var helt sikkert formodes at være et tilbud. God fangst. Det ville ikke have kørt. OK. Så den sidste type af loop vil vi tale om og i sidste ende, form af de Komplekset er for-løkken. Må ikke bekymre dig, hvis du ikke gør ved, hvad det betyder. Det er temmelig forvirrende i starten. Vi vil gå over et eksempel. Alt, hvad der sker i en for-løkke er, at du har tre udsagn at du kommer til at omfatte. Så for en bestemt ting, er du kommer til at initialisere en variabel. Du kommer til at tilføje den betingelse til som denne løkke fortsætter med at køre. Og derefter, ved udgangen af loop, er du nødt til at opdatere den. Du kan opdatere variabel at du ønsker at holde styr på. Så vi bruger typisk efter sløjfer til, når vi ønsker at køre en løkke for en vis mængde gange og vi ved allerede, Åh jeg ønsker denne løkke til at udføre som 10 gange, så du do-- jeg gå over et eksempel på næste side. Så her for eksempel i Scratch, hvis du ønskede noget at gentage 10 gange, alle du havde at sige var, gentag 10 gange jeg elsker SAJ! som er en mere acceptabel show af støtte til os snarere end uendelig løkke. Her hvordan du ville overgang til C og skrive det er for int-- jeg har tænkt mig at oprette eller erklære en variabel af typen int navngivet i. Jeg har tænkt mig at initialisere den til 0, så jeg = 0; og dette vil være min tilstand. Så jeg er mindre end 10. Og så i end-- den sidste sætning, du er kommer til at have, er opdateringen af hvad der sker med den variable i i slutningen af ​​din for-løkke. Så det er lidt forvirrende, fordi forskellige dele af denne linje sker på forskellige typer af sløjfen. Men jeg vil gå over en pseudokode eksempel på denne og måske forklare dette bare en smule bedre. Så her. Det er løkken vi lige har set. Hovedsagelig i pseudokode, hvad der sker i dette program, er først Jeg skaber Jeg, initialisering det til 0. Jeg kontrol for at se, hvis jeg er mindre end 10, i hvilket tilfælde første gang, det er fordi 0 er mindre end 10. Således sløjfen til at løbe. Og så jeg har tænkt mig at udskrive denne linje. Og derefter ved slutningen af ​​denne linie, lige her, jeg kommer til at gøre tilvækst i, i ++, alt det middel er forøgelse det efter én. Så jeg er nu 1. Fordi det var engang 0, hvis jeg tilvækst, det er, er det nu 1. Og så jeg har tænkt mig at gå tilbage til begyndelsen af ​​sløjfen og jeg kontrollere tilstanden. Er betingelsen stadig sandt? Ja, 1 er stadig mindre end 10. Så det kommer til at udskrive det igen, gå og derefter tilvækst i, og tjek betingelsen kontinuerligt, uafbrudt, indtil du til sidst får til det punkt, hvor i er 10. Du kommer til at udskrive denne 10 gange og så er jeg kommer til at svare til 10. Du kommer til at kontrollere tilstanden. Er 10 mindre end 10? Nej, det er falsk. Således er denne løkke ikke vil til at køre, går det at bryde, og du kommer til at fortsætte med din kode. Så som du fyre kan se, er dette er en virkelig stor eksempel af en løkke, du kan programmere i, at kører for et bestemt antal gange. Hver eneste klare? Ja. SPEAKER 17: Hvad med tilvækst eksponentielt, er det anderledes kodning? ANDI Peng: Du can-- vi vil gå i denne i det næste dias. Godt spørgsmål. Er anyone-- inden jeg flytter on-- nogen overhovedet forvirret, fordi dette er en virkelig hård koncept. Ingen bekymringer, hvis you're-- OK. Cool. Okay. Bare en generel dias. Denne while-løkke er at gøre det præcis det samme for-løkken var. Det er bare skrevet forskelligt. Du fyre kan gennemlæse dias på din bekvemmelighed senere. Men bare vide, at der er flere måder at skrive det samme ske med forskellige loops. OK. Så nu får vi i spørgsmålet om, hvad hvis vi har en løkke inde i en løkke. Vi får ind reelle Inception type stuff her. Når du ønsker at gøre ting flere gange inde i andre ting at gøre ting flere gange, du ønsker, hvad der kaldes en indlejret for løkke. For dem af jer, der først ser dette og få meget forvirret, er alt, hvad vi gør her er at have en for-løkke, hvor vi har en variabel af rækken. Men inde i det, har vi også en anden for-løkke af en variabel kaldet kolonne. Og jeg stærkt foreslå jer alle der er forvirret først holde track-- trække det ud, tegne det ud. Forsøg ikke at bare årsag gennem det, trække det ud. I dit hoved, på dette stykke af papir, eller hvad, skrive række, holde styr på, hvad række er lig med. Skriv kolonne, holde styr af hvilken søjle er lig med. Og holde styr på, hvad der er udskrivning ud med hver iteration. Hver gentagelse af denne løkke, hver iteration af denne større løkke, bare holde følge logikken. Og jeg garanterer dig, du vil elske, hvad du ser, fordi det er også meget gældende på dit problem sæt. Cool. Okay. Så det vigtigste at du fyre er sandsynligvis alle tænker lige nu, er dit problem Sæt 1s, som skyldes torsdag / fredag. I dit water.c program, tip du kommer til at have at bede brugeren om et input. Inden din mario.c program du kommer til at have at bruge en indlejret for løkke, som er en for-løkke inde i en for-løkke, at udskrive en blok af pyramide, hovedsagelig Ligesom hvad Mario har at hoppe igennem. Og derefter i din greedy-- eller måske Making Change, hvis nogen af ​​jer gutter nogensinde har hørt om at-- du er nødt til at være meget forsigtig med de første floating point-værdier. Husk flydende decimaler og heltal er ikke det samme. Hold styr på, hvor den ene er der. Og du kommer til at bruge betingede udsagn, så godt. Okay, sidste ting. Jeg har et par minutter tilbage. Style. Så dette er noget, der ikke faktisk bevirke effektivitet, eller den faktiske drift af din kode. Det påvirker dog os som dine gradere, som dine læsere. Det påvirker dig selv, hvis du er forsøger at finde et problem. Det påvirker læsbarheden af ​​din kode. Så stil, ligesom når du forsøger at style en essay til engelsk, hvis du havde ikke stykker, du har alt slags af rodet sammen på én linje, det gør det virkelig svært for nogen at læse dit essay, selv om dine punkter er logisk lyd. Samme ting i programmering. Du kan have grueligt obskure kode, som SCAZ vil dække, og det kan stadig køre og funktion. Men for os, som din dejlige TAS, som vil læser og evaluere dine PSets, det er ikke særlig rart. Så vær venlig, af hensyn af os og dig selv, når du forsøger at løse et problem i din kode, og du forsøger at læse din egen kode, gør sikker på at du følger nogle konventioner at vi kommer til at gå over. Så først. Giv dine variabler meningsfulde navne. Hvis du ønsker at gemme et heltal kaldet alder, skal du navngive det alder. Må ikke kalde den højde. Når du forsøger at gemme en alder i højden, det gør alting meget forvirrende for os. Vi kan ikke lide at blive forvirret. Du kan ikke lide at blive forvirret. Ingen kan lide at blive forvirret. Hvis du vil skabe noget, name it noget meningsfuldt. Men i for-løkke, single Karakter variabler er normalt fint. Og i for-løkke, hvis du vil bare i, og j, k, er du velkommen til bare at gøre det. Konsekvent initialisering. Så hvad betyder det? Det betyder teknisk set, teoretisk, du kan starte og skabe flere variabler på samme linje. Så for eksempel, kan jeg oprette et heltal kaldes scaz_age, og heltal kaldet andi_age = 20, og et heltal kaldes jason_age på samme linje. Og jeg kan også tildele kun en af dem og ikke de andre til værdier. Vi beder dig venligst ikke gøre det. Fordi her du hovedsageligt har oprettet tre variable, men kun én af dem faktisk har en værdi. Og så når vi er forsøger at læse din kode, eller hvis du forsøger at reparere et problem i din kode, det er meget forvirrende at følge. Så bare for din læsbarhed, for vores læsbarhed, ikke gør det. Konsekvent krøllede parenteser. Nogle mennesker kan lide at sætte deres krøllede parenteser i forskellige steder. Det gør ikke rigtig noget. Bare sørg for at du er konsekvent i din egen kode på, hvor du kan lide at sætte dem. Konsekvent afstand. Hvis du sætter et mellemrum efter et for-løkke, gør altid det. Må ikke bare gerne slags gøre det på nogle steder, gør det ikke i andre. Bare være konsekvent. For det andet, hvis nogen ønsker at gennemlæse CS50 Style Guide, vi officielt har en stil guide, fortæller dig alle disse konventioner, plus mere. Det er online. Det er ligesom cs50.net/style eller sådan noget. Du kan google det. Sammenhæng er nøglen. Så fortvivl ikke, hvad andre mennesker gør, bare sørg for, at du er konsekvent i din egen kode. Nogen har spørgsmål om det? Ja. SPEAKER 18: Så den rigtige ting at gøre med initialiseringen er lige har dem alle i et separat linje, er, at hvad du siger? ANDI Peng: Så jeg sjældent har dette ske. Men hvis du ville, hvis du ønsker at være ligesom at spare plads i din kode, eller hvad, kan du gøre dette. Vi beder om, at du bare ikke initialisere én ting, og ikke de andre. Så hvis du ønsker at gøre int scaz_age, int andi_age, int jason_age, det er fint. Bare ikke initialisere en og ikke de andre er alt. Spørgsmål? Okay. Jeg har tænkt mig at passere off mikrofon, og laser pointer, og stafetten videre til SCAZ på dette punkt. Dette er akavet. Her er den. BRIAN Scassellati: Tak. Hvordan er det for en lyd? Lyden er god? . Fremragende. OK. Så hej alle. Jeg har tænkt mig at forsøge at arbejde sig igennem et praktisk eksempel med dig. Og vi kommer til at bruge CS50 s udviklingsmiljø, hvad der kaldes Integrated Development Environment. Og du har set dette påvist i forelæsning. Og i Problem Set 1, du er vil have en mulighed at bruge det, og lege med det, og vænne sig til det, fordi vi kommer til at bruge det gennem resten af ​​semestret. Så i denne IDE, du har, hvad der ser ud som en meget traditionel fil browser over på den ene side. Du har fået en del op toppen, hvor du skal hen at se din kildekode, din Cfile, den kode, du skriver. Og ned bunden, vil du har et terminalvindue som du vil bruge til både kompilere dit program og til at køre eller udføre dit program. OK. Så bare for at give os en lille smule fundament, idet terminalvindue, du kommer til at være ved hjælp af et sæt af kommandoer der er standard kommandoer i hele de fleste af Unix eller Linux-systemer. Og så hvis du nogensinde har brugt enhver form for Unix, Ubuntu, eller et af de andre varianter, disse kommer til at se velkendte. Hvis du ikke har, så fortvivl ikke. Der er ikke noget kompliceret om dem. De er bare bruger en anden syntaks, en anden navngivning konvention, end du har set før. Så for at liste ud filerne inden for en bestemt mappe, de kommer til at bruge en Kommandoen hedder ls eller liste. Hvis du ønsker at se alt med alle detaljer, du skal bruge en kommando line argument med ls -l. Og der vil vise dig alt mere detaljeret, herunder tilladelserne for en fil. For at ændre mappen, du vil bruge kommandoen cd. Og du vil være i stand til at ændre mappe både at gå til din hjemmemappe. Det er bare cd alle ved selv, cd med to prikker vil returnere dig op en niveau til din tidligere mappe. Og du kan også cd til en undermappe ved at skrive i cd og navnet på denne undermappe. Du kan også oprette nye mapper. Og vi kommer til at gå gennem denne i bare et minut. Men blot at sætte alt på skærmen. Så du kan se dem. Du vil også have mulighed for til at manipulere filer direkte fra kommandolinjen. Du vil være i stand til at kopiere dem, til flytte dem eller for at fjerne dem, det vil sige, effektivt, at slette dem. Den CS50 IDE giver dig fuld magt kommandolinjeargumenter. Og det betyder, kan du også gør meget farlige ting. OK. For eksempel kan man fjerne eller det er delete, en fil uden at spørge for en bekræftelse. Og du kan endda fjerne recursively-- det er Dash r flag-- en hel underbibliotek og alle dens indhold. OK. De er angivet i rødt, fordi du skal tænke "Danger", hver gang du ser disse ting. OK. Okay. Nu endelig de ting, der er vil være virkelig værdifuldt for dig, er der er et par gode tricks at kende som du navigerer gennem denne terminal vindue. Først, kan du rydde skærmen i enhver tid ved blot at skrive i klar. Og du kommer til at se mig gøre det ganske ofte. Du kan også bare vise teksten til en fil ved at skrive mere og derefter filnavnet. Du vil derefter være i stand til at rulle tilbage og tilbage med at bare med mellemrumstasten og piletasterne. Hvis du har, som vi gjorde i dag i foredrag, et program, der kører kontinuerligt i uendelig løkke, du kan stoppe programmet fra at udføre ved at skrive i kontrol, der holder Ctrl-C. Og du kan have at gøre dette flere gange. Computeren får langt foran dig. Og du nogle gange nødt til at give det et par forsøg før det rent faktisk vil komme igennem. Du vil også være i stand til sortere gennem kommandoerne at du lige har skrevet ved hjælp af op-tasten, piletast, og derefter pil ned. Og hvad der er mest nyttige er stedet af at skrive ud lange filnavne, vil du være i stand til at anvende Tab til autofuldføre et par instruktioner. Nu vil vi demonstrere alle dem i bare et sekund. Så hvis du ikke kan huske dem, så fortvivl ikke. Det er ting, som du vil samle op og bruge som vi hen ad vejen. OK. Så i modsætning til i C-- Scratch-- C er en kompileret sprog. Det betyder, at vi kommer til at tage en kilde file-- det er den tekst, som du skriver, de kommandoer, som du skriver, det printf () erklæringer, løkkerne, alt else-- og vi vil at tage denne fil og aflevere det ud til et program kaldet compileren. Compileren vil derefter tage at tekst, som du har skrevet og omsætte den til de binære instruktioner at din computer er faktisk går brug. Det kaldes objektet eller den eksekverbare fil. Hvis man ser på denne fil, du vil at se den kode, du har skrevet. Hvis man ser på denne fil, du vil at se en tilfældig sekvens af tegn der gør overhovedet ingen mening. Det er, fordi det er den binære. Det er ikke ment for dig at være læser. Men enhver tid, du ønsker at køre noget, hvad du vil skal køre er det objekt fil. Så når vi arbejder med disse filer, vil vi skrive en fil i C. Vi vil derefter kompilere den ved hjælp af en kommando som make, som vil påberåbe sig compiler klang for C-sprog. Og der vil producere et objekt fil, som en ud, eller i dette tilfælde, navn, min fil, som jeg har lagt i. Okay. Så lad os faktisk prøve dette. Så jeg kom op med et eksempel af det, jeg ønskede at forsøge. Og en af ​​de ting, fascinerer mig, er animation. Så vi kommer til at forsøge at gøre en lille smule af animation hjælp kun ASCII-tegn. Tegn vi kan printe ud nemt nu. Så her er mit bedste forsøg at skabe for dig animationen af ​​en kanin der løber gennem det høje græs. Der er han. OK. Så han ikke kører endnu, men han er stod der i det høje græs. Nu, hvis jeg var en animator, i den gamle skole version af animation, hvad jeg ville gøre, er jeg ville producere et billede af denne bunny i græsset. Og så ville jeg producere anden picture-- en anden, hvad de kaldte cell-- at havde bunny kun let flyttes. Og derefter en tredje, der havde bunny flyttede lidt længere. Og jeg ville producere en hel Sekvensen af ​​disse celler. Nogle hvor bunny er overstået på venstre kanten. Og derefter bevæger sig langsomt, en med en mod midten. Og derefter fra midten over til højre. Og hvis jeg var dengang, virkelig heldig, jeg kunne sætte det sammen og jeg kunne animere dem. Og der er min kanin løber gennem græsset. Det er min store PowerPoint trick for dagen. OK. Så dette er så godt som det bliver. OK. Så her endnu en gang, her er vores bunny løber gennem græsset. SPEAKER 19: Igen. BRIAN Scassellati: One mere tid, okay. Der er din kanin. OK. Så i dag, hvad vi vil at gøre, er vi vil at forsøge at automatisere processen til fremstilling af disse celler. Vi vil ikke helt komme til det punkt, at være i stand til at sætte dem alle sammen. Men, vi vil forsøge at automatisere genereringsprocessen denne sekvens. Og det er meget af det animation dag er. Det vil sige, behøver du ikke gøre ting nødvendigvis ved at tegne alt i hånden. Vi bruger en computer til at automatisere dele af denne proces. OK. Så lad mig skifte over nu på vores CS50 IDE. Og jeg har skabt for os-- og lad mig zoome ind her lidt bit-- jeg har oprettet for os et udgangspunkt. Hver gang, at vi beder dig om at sidde ned og skrive et stykke kode, hvad vi virkelig beder dig om at gøre er vi beder om at løse et problem. Og den måde, at du skal tænke på at gøre det er ved at starte med nogle simpel del af denne løsning. Og derefter bygge ud fra den del. Og det er, hvad vi vil gøre i dag. Så snarere end at forsøge på én gang til skrive hele bundt af kode, der er kommer til at producere dem 10 animation celler, vi kommer til at starte i stedet med et stykke, der virker. Og så vil vi bygge en lidt omkring denne og lidt mere og lidt mere. Nu det gode ved løse problemer på denne måde er, at det vil give dig mulighed for at starte altid med noget, som du kender værker og introducere en gradvis ændring. Og det er en fantastisk måde at lære at kode, fordi hver gang du foretager et forandring, kan du se hvilken betydning det har. OK. Så her er vores udgangspunkt. OK. Så i starten af ​​min fil, Jeg har hash #included stdio.h. Det er, så jeg kan få den printf () funktion til at arbejde. Jeg så har jeg min vigtigste funktion. Og det ser stadig lidt mystiske eller obskure til nogle af jer. Det er ok. Alt det siger, er, at den vigtigste funktion tager ingen arguments-- void midler intet i C. Og det afkast ved konventionen et heltal. Main altid returnerer et heltal, normalt en kode siger ting gik godt eller ikke gik godt. OK. Men vigtigste er at have det danner for os lige nu. Jeg har derefter sat i tre linjer kode. Og sammen med hver linje i kode, jeg har lagt en kommentar. Nu er en af ​​de ting, Vi vil insistere på, at du gør det, og det er sådan en vigtig programmering praksis, er altid at kommentere din kode. Altid skrive ned i en Engelsk kommentar noget at du tror kode er meningen at gøre. På den måde, senere, når du kommer tilbage til det, kan du se på det, og du kan sige, Åh, jeg kan huske, hvad jeg var forsøger at gøre med dette. Eller når en TA sætter sig med dig for at forsøge at hjælpe dig på kontortid, de kan se på dette og gå, jeg se, hvad du forsøger at gøre, men i stedet er det hvad der virkelig sker. OK. Så jeg har fået tre dele til min kode, Jeg har tænkt mig at først og fremmest print nogle prikker i starten. Jeg vil derefter udskrive mit ekstremt fancy bunny. Og derefter nogle lidt af prikker i slutningen. Og disse tre print udsagn bør virke bekendt for dig på dette punkt. Alt, jeg gør i hver af dem er jeg udskrive en sekvens af tegn. Der er ingen involverede variabler. Alt er bare flad. OK. Så hvis jeg går ned nu til min terminal-- lad os se om jeg kan få dette tilbage out-- og jeg har tænkt mig at skrive klart igen. SPEAKER 20: Har vi bruger dobbelt skråstreg til at kommentere? BRIAN Scassellati: Can bruge double-- ja. Der er flere måder at efterlade kommentarer i C. One måde er at bruge dobbelt skråstreg. Den anden er at bruge en skråstreg og en stjerne og derefter lukke med en stjerne og en skråstreg. Okay. Først og fremmest, jeg har tænkt mig at begynde at navigere rundt her. Så hvis jeg går til mit hjem bibliotek, Jeg har skiftet mapper der, Jeg har tænkt mig at se og se, hvad der er i denne mappe, ls, liste ud. Jeg har tænkt mig at se, at jeg har fik to undermapper. Lad os gøre dette til en lidt større her, så vi alle kan se det. Jeg kan se, at jeg har fik to undermapper. Jeg vil ændre mappen at gå i arbejdsområdet. Og jeg har tænkt mig at kun skrive ud del af det, og så bare hit Tab. Og det vil fuldføre resten for mig. Fancy. Jeg vil se, og se i arbejdsområde. Og lige nu, jeg arbejder på SuperSection at vi underviser lige nu. Så jeg vil gå ind i denne mappe. Og endelig, se og se. Og jeg har fået denne fil bunny.c. Okay så lad mig klart endnu en gang. Og jeg har tænkt mig at nu-- igen er jeg stadig opholder sig i denne mappe og det fortæller mig jeg er i at SuperSection mappe. Jeg har tænkt mig at gå videre og gøre mit program bunny. Og denne kommando, gør bunny, mens klingende en lille smule mærkeligt, også påberåber sig klang compiler. Og det er produceret til mig et output, der er en eksekverbar funny-- et eksekverbar fil kaldet bunny. OK. Jeg kan da, og det lyder endnu værre, udføre bunny. OK. Og lad os se, hvad den gør. OK. Det er en lille smule hvad jeg forventede. Jeg har fået min bunny billede derinde, men jeg slags ville have det helt af sig selv. Hvad gjorde jeg savner? SPEAKER 21: Slash l eller skråstreg n. BRIAN Scassellati: Slash n. OK. Så lad os gå tilbage herude. Og jeg får ud af det. Og jeg vil gå tilbage til denne. Og lad os tage et kig nu fra min vigtigste funktion her. Så hvad skal jeg gøre? Jeg ønsker at afslutte linjen. Så jeg vil sætte i en kommentar. Jeg vil sætte i en printf (). Og hvad skal jeg sætte i? / n. OK. Hvad skal jeg nødt til at ende det med? Semikolon. Okay. Nu, en af ​​de virkelig vigtige ting er at sørge hver gang du foretager en ændring i din kode, at du gemmer det. Hvis du ikke har gemt din kode, er du kommer til at lægge mærke til en lille stjerne deroppe. Og det stjerne siger dig har ikke gemt denne kode. Hvis jeg kompilere det lige nu, er det ikke kommer til at afspejle nogen af ​​disse ændringer, fordi compileren ser på filen der er på disken, ikke den fil, der er åbne i din editor. Okay. Så lad os gemme det og så vil vi gå lige på hernede, kommer tilbage ud. Kom ned til min terminal. Og lad os rydde plads igen. Og vi kan gå videre og endnu tid gøre vores bunny-program. Og udføre bunny. Det virkede ikke enten. Forkert skråstreg. Så hvis du ser på, hvad jeg har fået, satte jeg en / n derinde, men jeg havde den forkerte skråstreg. Alt det, din computer gør, er meget eksplicit. OK? Et lille fejl af tegnsætning, og pludselig du ikke får, hvad du ønsker. Okay. Så lad os zoome ud igen. Vi vil gå tilbage. Godt gøre det meget hurtig reparation. Vi vil sætte den rigtige skråstreg i. Vi vil gemme det. Vi vil ind igen. Af en eller anden grund, det er ikke at være glad, men lad os gå videre og vi vil gå tilbage til terminalen her. Ryd det op. Vi vil zoome ind. Og en gang mere, vil vi gøre bunny. Og nu ganske rigtigt, det virker. Hurra. OK. Så lad os prøve at gøre denne lidt mere generelt. Lad os se, om stedet for bare udskrive en bestemt ramme, lad os se om vi kan gøre dette så vi kan få alle 10 af disse animerede billeder at vi ønskede at have. Så igen, lad os tage et skridt ad gangen. Lad os først generalisere det, ikke så jeg gør alle de rammer, men så gør jeg nogen ramme, som jeg måske ønsker. Så hvad er forskellen mellem rammerne? Er bunny det samme? Publikum: Ja. BRIAN Scassellati: Ja. Hvad er forskellen? PUBLIKUM: holdning. BRIAN Scassellati: Dens holdning, ikke? Og hvordan gør jeg styre sin position? Hvor mange prikker jeg er sætte i begyndelsen og hvor mange prikker jeg er sætte i slutningen. Så jeg havde fem på begynder og fem ved udgangen. Lad os erstatte fem med en for-løkke. OK. Og jeg har tænkt mig at skabe en for loop nu, kommer til at sige, Jeg har tænkt mig at udskrive nogle tal af prikker i begyndelsen. Jeg har tænkt mig at bruge en variabel. Lad os sige, hvad med jeg som tælleren i min løkke. Og jeg har tænkt mig at erklære den op øverst. Og så i for-løkken Jeg har brug for at gøre tre ting. Det første, jeg skal gøre er jeg nødt til at initialisere jeg. Hvad skal jeg initialisere det at begynde at være? 0. OK. Så jeg er nødt til at sige, hvad der er opsigelsen tilstand? Hvornår skal jeg stoppe? Nå hvor mange prikker gør du ønsker at udskrive på denne ene? PUBLIKUM: Five. BRIAN Scassellati: Five igen? Hvad med lad os gøre noget anderledes, gjorde vi fem. Lad os vise, at det er anderledes. SPEAKER 22: Two. BRIAN Scassellati: Two. OK. Så hvis jeg vil have to prikker, hvad skal jeg sætte her? PUBLIKUM: Tre. BRIAN Scassellati: Tre. OK. Hvor mange gange er, at kommer til at gå igennem? Det kommer til at gå gennem tre gange, 0, 1, og 2, højre? Okay, lad os gå tilbage til to. Nu får vi to prikker. Og hvad gør jeg ønsker at gøre hver gang jeg går gennem løkken? Hvad skal ændres hver gang jeg går igennem? SPEAKER 23: Tilføj en prik. BRIAN Scassellati: Jeg er nødt til at holde ud. Jeg har tænkt mig at tilføje en prik. Jeg har tænkt mig at udskrive en prik, hver gang gennem løkken. Men hvordan skal jeg holde styr på, hvordan mange gange jeg har været gennem løkken? Jeg bruger i, at variable, der tæller. Så hver gang igennem, vil jeg at forøge tælleren med én. Nu, det er det samme for mig som at sige, i = i + 1. Det er ok. Jeg kunne gøre det at-- Jeg kan godt lide stenografi, så jeg har tænkt mig at sige, jeg ++. OK. Lad os gøre det samme hernede på bunden. Kun jeg slags gjorde at en. Jeg har tænkt mig at lade dig fyre gøre dette én helt. Okay. Så hvad skal jeg skrive her? Her er min for-løkke. Jeg har tænkt mig at gøre en printf (), og jeg har tænkt mig at gøre det så, at jeg kun udskrive én prik på denne bund. Hvad skal jeg skrive inde i denne for-løkke nu? Nå, først og fremmest hvad variabler skal jeg bruge? SPEAKER 24: j. BRIAN Scassellati: jeg kunne bruge j. Kan jeg bruge den samme? Kan jeg bruge jeg igen? Ja. Det er OK, fordi Is at jeg bruger heroppe, Jeg har ikke brug for dem igen, når Jeg kommer ned til dette punkt. Så hvad skal jeg initialisere jeg til? SPEAKER 25: 10. BRIAN Scassellati: 0. Hvad skal jeg tjekke? Hvor mange prikker har jeg brug for nu i slutningen hvis jeg har to prikker i starten? Jeg har brug for otte i slutningen, så hvad skal jeg kontrollere, jeg mindre than-- PUBLIKUM: syv, otte, ni. BRIAN Scassellati: Jeg hørte syv. Jeg hørte otte. Og jeg hørte ni. OK. Så vi er alle i den rigtige ball-- Jason siger 10. OK. Hvis jeg havde brug for to prikker til den første, hvor mange gør Jeg-- og jeg har brug otte prikker til sidste en-- jeg sætte en to op over, hvad skal jeg sætte dernede? PUBLIKUM: Otte. BRIAN Scassellati: Otte. Fordi det kommer til at tæller nul gennem syv. Og det er otte gange gennem løkken. OK. Og hvad skal jeg gøre i slutningen? PUBLIKUM: Jeg ++. BRIAN Scassellati: Jeg ++. Okay. Så det ser temmelig godt der. Lad os prøve det og lad os se, hvad den gør. OK. Så vi kommer til at gemme det. Nice og gemt. Vi vil zoome ud igen. Vi vil prøve her i terminalen. Vi vil zoome ind. Ups. Vi får, en gang mere, gøre vores bunny-program. Og gå videre og udføre bunny. Og der er det. Så der er vores kanin. Hvor den har to prikker i begyndelsen og otte prikker ud i slutningen. Alle stadig med mig? OK. Så vi byggede det op. Vi byggede en kanin, en bestemt ramme. Nu har vi været i stand til generalisere at bygge flere, forskellige typer af rammer. Lad os nu gå videre, og har det generere ikke kun en ramme, men lad os generere 10 rammer, hvor vi langsomt gøre bunny flytte alle vejen på tværs af feltet. Okay. Lad os gå tilbage. Og vi vil prøve nu. Så hvad gør jeg virkelig brug for at ændre her? Hvad skal jeg ændre? SPEAKER 26: Du skal først ændre antallet af prikker maksimum i begyndelsen. For hvis vi gør 10 prikker, det vil få brug for at op til skalere. BRIAN Scassellati: Ja. Så lige nu har jeg det slags hardwired til altid at gøre to prikker i begyndelsen og altid gøre otte prikker i slutningen. Jeg ønsker at opbygge en anden loop, ikke? Fordi jeg ønsker ikke at bygge kun et kanin billede, Jeg ønsker at opbygge 10 bunny billeder. Så jeg har brug for at bygge et andet loop, og da jeg går gennem denne løkke, Jeg ønsker at ændre, hvor mange prikker jeg udskrive i begyndelsen og hvor mange prikker jeg udskrive i slutningen, baseret på hvilken cyklus gennem løkken Jeg er med. Okay. Så lad os få en anden tæller. Nogen før sagt j, så vi vil gøre en anden j. Og nu, vi vil opbygge en anden for løkke. Hvad sker indeni, løkke? Denne ting har at gå inde i løkken, ikke? Har bunny have at gå ind i løkken? Skal jeg have en kanin i hver af disse 10 rammer? PUBLIKUM: Uh-huh. BRIAN Scassellati: Ja. Jeg vil have en kanin i hvert af de 10 frames, ikke? Hvad med prikkerne på enden, har jeg brug for det? OK. Så jeg har tænkt mig at indrykke dem alle. Jeg har tænkt mig at fremhæve alle dette, og jeg har tænkt mig at ramme Tab. Og det kommer til at skubbe dem over en lille smule, så det er nemt for mig for at se, hvad der er i løkken. Og så vil jeg afslutte det. Lad os sige. OK? Nu, i denne løkke, Jeg er building-- hovsa, gøre det, så du kan see-- Jeg har fået min tæller j. Jeg startede det på 0. Hvor mange gange skal jeg ønsker at gå gennem denne løkke? PUBLIKUM: 10 gange. BRIAN Scassellati: 10 gange. Så hvad nummer skal jeg sætte her? PUBLIKUM: 9, 10. BRIAN Scassellati: 9, 10, nogen er nødt til at sige 11, ikke? Jeg ønskede to prikker før og sætte i mindre end 2. Jeg ønskede otte prikker, Jeg sætter jeg mindre end 8. Nu vil jeg gå gennem 10 gange, så jeg sætte j mindre than-- PUBLIKUM: 10. BRIAN Scassellati: 10. Der vi går. Og hvad gør jeg i slutningen at j? ++, Tilvækst det. OK. Nu, her er den tricky del, hvad er kommer til at ske lige nu, hvis jeg gør dette? Skal jeg udskrive 10 billeder? SPEAKER 27: Jeg tror de vil alle være den samme. BRIAN Scassellati: De vil alle være den samme, ikke? Fordi alle af dem er stadig i gang at sætte to prikker i begyndelsen. Men jeg vil ikke have dem alle til har to prikker begyndelsen. Hvor mange prikker gør jeg ønsker i starten? PUBLIKUM: Ændring. BRIAN Scassellati: Jeg ønsker det at ændre, ikke? Så hvad gør jeg har her, der er skiftende hver gang løkken går igennem? PUBLIKUM: Antallet af prikker, j. BRIAN Scassellati: j, antallet af prikker. Så jeg kan ændre dette til at være j. Første gang gennem loop, hvad er det kommer til at være? Hvad skal jeg sætte j til først? PUBLIKUM: 0. BRIAN Scassellati: Så hvor mange gange skal jeg gøre det? 0. Anden gang gennem løkken, j s kommer til at være 1, fordi jeg tilvækst det. Hvor mange prikker skal jeg printe? 1. Tredje gang gennem løkken, hvor mange prikker skal jeg printe? PUBLIKUM: Tre. BRIAN Scassellati: j vil være 3. Hvor mange prikker skal jeg printe? Åh, undskyld, j kommer til at være 2. Hvor mange prikker skal jeg printe? PUBLIKUM: 2. BRIAN Scassellati: 2. OK, så jeg har tænkt mig at holde forøgelse, at når vi går sammen. Hvad med dernede? Hvad går ned her? Jeg vil ikke have 8 altid i slutningen længere? SPEAKER 28: 10. BRIAN Scassellati: Jeg vil have 10 prikker? Jeg vil have det til at ændre sig, også. Så hvordan skal jeg have det at ændre? PUBLIKUM: [uhørligt]. BRIAN Scassellati: Tja, hvis jeg har fem prikker i begyndelsen, hvor mange dot s får jeg i slutningen? PUBLIKUM: Five. BRIAN Scassellati: Hvis jeg har seks prikker i begyndelsen, hvor mange får jeg i slutningen? PUBLIKUM: Fire. BRIAN Scassellati: Hvis jeg fik syv prikker i begyndelsen, hvor mange får jeg i slutningen? PUBLIKUM: Tre. BRIAN Scassellati: Hvis jeg har fik j prikker i begyndelsen, hvor mange får jeg i slutningen? 10-j. OK. Så lad os prøve at ud. Så jeg har tænkt mig at redde vores bunny-program. Endnu engang vil vi zoome ud. Vi vil gå ned til vores terminal. Vi vil klare det. Og zoome ind. Vi vil gøre vores bunny program igen. Og vi vil udføre den. Uh-oh. Hold nu, lad os zoome ud. Fik jeg 10 frames? Nå, hvordan mange kaniner kan jeg se deroppe? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Jeg fik 10 frames. Er de alle det samme? Publikum: Ja. Nej. BRIAN Scassellati: Nej. Det første, den bunny er langt til venstre. Og herovre, bunny er langt på SPEAKER 29: Right. BRIAN Scassellati: Så hvad gjorde jeg glemmer at gøre? SPEAKER 30: Start en ny linje. BRIAN Scassellati: Jeg har glemt at starte en ny linje, igen. Samme fejl, jeg gjorde før. Okay, lad os gå ordne det. Nu har jeg stadig fik koden derinde til at lave en ny linje. Hvorfor har det ikke virker? SPEAKER 31: Det er ikke inde i løkken. BRIAN Scassellati: Åh, det er ikke inden for omkredsen. Det er rigtigt. Det sidder udenfor her. Og for-løkken er alt der er inde denne tekst. Så jeg har tænkt mig at flytte dette inde for-løkken. Og jeg vil Tab foran det til viser, at det er i det rigtige sted. Og nu vil vi gemme det igen. Vi vil zoome ud. Vi vil skifte over til vores terminal. Zoom ind. Vi vil genskabe vores bunny-program. Og nu, nu har vi fået vores 10 frames. [Klapper] BRIAN Scassellati: OK. So. Her er vores indlejret efter sløjfer. Vi var i stand til at generere i indre sløjfe hvor mange prikker jeg ønskede at udskrive i starten, i slutningen. Og den ydre sløjfe styret hvor mange billeder jeg byggede. Vi startede med en lille kernen af ​​problemet, og vi bygget fra dette punkt. Okay. Lad os gøre endnu et skridt. Er du klar? Der er én ting i her, hvor vi har faktisk slags fik mere komplekse, end vi har brug for. Lad os tage et kig. Så i vores kanin program, hvis jeg zoome ud her, Jeg rent faktisk gør noget af det samme ting igen og igen. Hvad gør jeg, det er en slags det samme gentages to gange? SPEAKER 32: Udskriv prikker. BRIAN Scassellati: Ja Jeg udskrive disse prikker to gange. Virkelig, skulle jeg have denne kommentar hernede. Jeg udskrive nogle prikker på begynder, lige op her. Og så vil jeg udskrive nogle prikker i slutningen. Og jeg gør slags nøjagtig det samme. Hvad vi kommer til at starte arbejder på i de næste par uger er at kunne tage disse blokke af kode, vi bruger igen og igen, og gennem en proces kaldet abstraktion, vi kommer til at trække dem ud og skrive dem én gang, så vi kan derefter genbruge dem igen og igen. Så lad os prøve det. Klar? Vi kommer til at tage denne blok af kode. Og jeg har tænkt mig at tage den ud af der. Og jeg har tænkt mig at define-- ned til bunden, Jeg har tænkt mig at skrive en ny funktion. Det kommer ikke til at returnere noget. Og jeg har tænkt mig at kalde det printDots. Det kommer til at tage en argument, at et helt tal siger howManyDots jeg skulle udskrives. Og nu i stedet for at udskrive j prikker, jeg vil Print Tip howManyDots jeg skulle udskrives. Og der er én lille problem her. Nogen ved, hvad det er? Hvad har jeg, der er opført herinde der ikke er defineret? PUBLIKUM: [uhørligt] BRIAN Scassellati: Nå, hvordan mange prikker er defineret helt op her, men jeg bruger denne variabel i. Så jeg har tænkt mig at tage denne variabel i og jeg har tænkt mig at definere den ned i her stedet. Så nu er det kommer til at stay-- Ups, Fik caps lock på somehow-- jeg vil holde jeg ned i her. Så nu her er min lille funktion eller sub-rutine, og det siger, hvor mange prikker skal jeg printe? Og det vil gå igennem denne løkke og udskrive dem igen og igen. Jeg kan derefter ændre mit program op her. Og hvad gjorde jeg kalder denne funktion? printDots. Så jeg ringer printDots. Hvor mange prikker jeg ønsker at udskrive første gang inden bunny? PUBLIKUM: j. BRIAN Scassellati: j. Hvor mange prikker jeg ønsker at udskrive i slutningen, efter bunny? 10-j. Og der er én ting, jeg mangler. Som du så i forelæsning i dag, vi kommer til at erklære printDots op ovenfor til opnåelse af prototypen. OK. Så hvad jeg har gjort, er jeg har prøvet at isolere der genbruges del af koden at jeg har gjort igen og igen. Og jeg har prøvet at trække det ud, så alle der er indeholdt i ét sted. På den måde, hvis jeg har en fejl et eller andet sted, Jeg behøver kun at ordne det på ét sted. Okay. Så lad os gemme det. Og lad os sørge for det virker. Så lad os gå ud. Vi vil gå igen til vores terminal. Vi vil zoome ind. Vi vil gøre, at bunny proces. Oh. Og det har givet mig en advarsel. Hvad er det fortæller mig? Godt i enhver af disse gange, du altid ønsker at rulle op til den allerførste error-- nu på denne ene, har jeg kun fik en. Det fortæller mig bunny.c, på linje 8, kolonne 9, der er et problem. Den siger, at du har erklæret dette variabel i og du ikke har brugt den. Nu normalt, det er ikke værst fejl. Det er en let at løse. Og i virkeligheden, kan vi gå igen. Vi kan gå tilbage til bunny. Og i dette tilfælde, alle vi skal gøre er at slippe af med i, fordi vi ikke bruger Jeg indenfor main længere. Vi er lige ved hjælp af det inden for vores sub-rutine. Så lad os redde dette. Vi vil gå tilbage. Og zoome ind. Vi vil endnu en gang gøre bunny. Og der igen er vores 10 frames. OK. Enhver tid du er givet en procedure-- Ja. SPEAKER 33: Jeg har en-- Jeg er forvirret. Kan du gå tilbage til den kode? BRIAN Scassellati: Yep. SPEAKER 33: Så når du skrev din prototype, det argument, du havde det opkaldt blev kaldt howmany? Men, below-- BRIAN Scassellati: Oh yeah. SPEAKER 33: --called dem noget anderledes, forstår jeg ikke. BRIAN Scassellati: Hvorfor er de forskellige. Så det er et godt spørgsmål. Så var spørgsmålet, op her, jeg skrev howmany, og nede, skrev jeg howManyDots. Årsagen er, at op i din prototype, Det er faktisk ikke opmærksom til de navne, du lægger i. Alt det virkelig bekymrer sig om er, at det er et heltal. Den ønsker at kende formen af, hvad du lægger i. Nu stylistically-- oops-- hvad jeg skal gør, er jeg gerne gøre disse kamp. OK. Fordi det vil være at holde det lettere for mig at huske. Men det var min fejl Ja. SPEAKER 34: Og så for det prototype til at arbejde, bare skrive denne linje, skriver prototypen, tillader denne funktion, der kommer lige under det til at gå til enden og hente hvad det betyder? BRIAN Scassellati: Hvad det betyder er, når compileren går igennem, den går fra toppen af din kode til bunden. Og hvad denne prototype er, er det er dybest set et løfte. Den siger, at der vil være en funktion defineret sted. Det kommer til at blive kaldt printDots. Og det kommer til at tage et argument der kommer til at være et heltal og det kommer til at vende tilbage ingenting, ugyldig type. OK. Jeg lover dig, at det vil være defineret et eller andet sted nede ad vejen. Men hver gang du ser at, som du går ned gennem resten af ​​mit vigtigste funktion, jeg vil du til at behandle det som en funktion der tager et heltal input. Og så når compileren går ned gennem denne, det ser, at løfte. Og når det bliver ned, holder vil, holder vil, den finder for første gang printDots er nævnt. Og det siger, Åh, du giver mig j. j er et heltal. Nå du lovede mig, at ville være et heltal, og det er rigtigt. Det er ok. Og så endelig, ned i bunden, før jeg kommer til slutningen af ​​min fil, jeg gør godt på mit løfte og jeg definere det. OK? SPEAKER 35: Så det saves-- den Programmet vil spare mellemrum at det går tilbage og udfylder i slutningen? BRIAN Scassellati: Det er ikke om fordelingen hukommelse. Det er faktisk bare om, hvad type er du forventer at se. Skulle denne ting har en argument, eller fem argumenter? Skal have det hele tal være givet til det, eller strygere? Det er alt, det ser at gøre, er at kontrollere, giver du mig rigtige form for argumentation. OK? Okay. Lad mig efterlade dig med et andet lidt at se på. ASCII kunst er ikke den store model animation, som det er i dag. Men nogle mennesker selvfølgelig tage tingene og de skubbe det til deres ekstremer. Dette er, som David påvist i forelæsning, et stykke kode at du må under ingen omstændigheder forsøge at duplikere jer selv. Fordi det er forfærdeligt stilistisk. Faktisk er det designet til at være så svært som muligt at læse. OK. Så for at gøre igen, lad os zoome ind her. Jeg har tænkt mig at gå nu, ændre mappe. Jeg har tænkt mig at gå op en niveau, tilbage til min arbejdsplads. Jeg vil så ændre mappe ind i denne anden mappe, som jeg har oprettet. Og dette er den internationale Korrumperet C Programming Contest. Korrumperet midler som hårdt muligt at forstå. Så venligst ikke være bange, hvis man ser på dette og gå, kan jeg ikke læse det. Det er meningen med det. OK? Men, vi har denne vidunderlige program, som jeg er kommer til at se på ved blot at skrive mere. Og lad os se om jeg kan zoome ud bare en smule, så du kan se det Og det er programmet. Det er opkaldt endo.c. Og det ser sådan spand med form af bogstaverne F-L-U-I-D i det. Dette er faktisk et program. Den er skrevet i de mest obskure måde, at forfatterne kunne eventuelt skrive det. Men det er en vidunderlig lille stykke, der genererer en model for fluiddynamik. Og så vil vi give denne model et input, som ser sådan ud, af et staired sæt af beholdere med noget væske, nogle flydende, op øverst. Og vi vil have det simulere hvad der sker med det. Så jeg vil kalde denne funktion, endo. Og jeg vil give det, at input fil, som jeg har haft. Og der er vores indbegrebet af ASCII-kunst. En fuld fluiddynamisk simulator kører på blot et par linjer kode. Nu, hvad er faktisk rigtig forbløffende om dette lille program er, at jeg ønsker at stoppe det nu, så jeg har tænkt mig at bruge, hvad kommandoen? PUBLIKUM: Kontrol-C. BRIAN Scassellati: Kontrol-C. OK. Så jeg vil bruge Ctrl-C. C Det vil stoppe det. Jeg vil rydde igen. Og nu jeg har tænkt mig at påberåbe sig program, udføre programmet, ved hjælp af sig selv som input. Og vi vil se væsken dynamik simulering af det smelter. OK. Vær venlig ikke at lade dette program være den ting, der forvirrer dig. Det er bare så vi kan slutte på noget cool og interessant. OK. Held og lykke med dit problem sæt. Vi vil være glade for at besvare spørgsmål efter klasse. Tak meget, gutter.