[MUSIK SPELA] JASON Hirschhorn: OK, alla. Välkommen till avsnitt. Detta är CS50, vår första super sektion. Som ni alla vet, nästa vecka regelbundna sektioner kommer att starta, men den här veckan är vi alla tillsammans. Det är jag själv. Mitt namn är Jason. Jag är lektor i datavetenskap. Vi har Andi, som är chef TA CS50. Och SCAZ, professor Brian Scassellati, Han är professor i datavetenskap. Vi är CS50 huvuden vid Yale. Du kan alltid maila oss heads@cs50.yale.edu. Vi kommer att vara på föreläsningar. Vi kommer att vara på kontorstid. Om det någonsin något vi kan göra för dig, allt du behöver, gärna nå ut till oss. Så vad ska vi göra idag? Eller innan dess, vad är kommer upp den här veckan? Så kontorstid är måndag, tisdag, Onsdag och torsdag, från 8:00 till 11:00. Det finns ett schema på hemsidan. Sektioner, som jag nämnde, börjar nästa vecka. Och du hittar denna vecka vad tid din avsnitt är, vilken dag det är, och vem som är din TA är. Problem Set 1 beror på torsdag kl middagstid fredag ​​vid lunchtid med en sen dag. Ja, du har nio sena dagar. Och det finns nio problemsamlingar. Och kan bara använda ett sen dag per problem set. Ja, i själva verket alla problem uppsättningar beror fredag ​​kl. Det var allt. Allt som information finns på kursinnehåll. Varje fredag ​​har vi luncher. Vi gillar att göra denna stora Naturligtvis känns lite mindre. Så du är välkommen att RSVP. Gratis lunch med kolleger klasskamrater och personal. cs50.yale.edu/rsvp. Alla dessa saker som Jag har på skärmen, och mer kan du hitta cs50.yale.edu eller cs50.harvard.edu, om du går till Harvard och tittar på detta online. Även på dessa webbplatser, det finns massor av resurser för dig. Varje föreläsning har inte bara video av föreläsningen, men noterar också. Någon kommer att titta på föreläsa och göra anteckningar för dig. Så du kan bara betala uppmärksamhet under föreläsningar, eller så kan du använda sina anteckningar / vår noterar att komplettera dina egna anteckningar. Det finns bilder på nätet. Källan code-- allt David går över i föreläsning, eller SCAZ går över föreläsning, att källkoden finns tillgänglig på nätet liksom, som jag nämnde videor. Sektioner, likaså kommer alla att filmas. Alla dessa bilder kommer att finnas tillgängliga. Allt detta kod kommer vara tillgängliga för dig. Det finns shorts på den webbplats där CS50 anställda tillbringar fem till 10 minuter går igenom teman för dig. Några av dem du redan har påträffas i problemsamlingar. Kontorstid, som jag nämnde, måndagar genom torsdagar, 8:00 till 11:00. CS50 Studien är en fantastisk resurs. Det finns övningsproblem, Provhållarna, kända buggar att eleverna gillar att springa i, för i huvudsak varje ämne vi kommer att täcka i denna kurs. Och slutligen, på den här bilden åtminstone, Reference50 som ger dig information på alla de C-funktioner du någonsin kan hoppas att använda och många, många fler. Återigen, som dot dot dot på den nedre delen av skärmen är för att indikera att det finns tom mer resurser på dessa två webbplatser: cs50.yale.edu, cs50.harvard.edu. Så, vad gör vi i dag? Tja, först ska jag ge man tittar på resurserna. Redan gjorde det en. Titta på oss. Nu, vi kommer att gå över datatyper och operatörer i C. Då Andi kommer att komma upp hit och gå över bibliotek i C, Printf (), en funktion som du redan bekanta eller kommer snabbt bli mycket bekant. Och du kommer också att gå över villkors och loopar. Och sedan slutligen, SCAZ kommer att gå över CS50 ID. Om du inte har duva i redan i Problem Set 1, samt hur man använder terminal och användbara kommandon och sedan ge dig några demos och praxis kodning i CS50 ID. Innan jag hoppar in i denna Innehållet på denna sida, Är det någon som har några frågor så här långt? Bra. OK. Växling. [Växling] Det var jag flytta kugghjul i en manuell bil. Så datatyper i C, du kan inte bara ha en variabel x och har det på linje 10, ett heltal, kanske antalet 1, på ledningen 20, ett decimaltal 10,5, och sedan ett par linjer senare en sträng, jag älskar CS50. I C, kan variabler bara vara en sak och endast en sak. Och så du måste ge dem typer. Och på detta forum, vi har en förteckning över sådana. Det finns tecken som står för tecken. Så det är en bokstav A, B, C, D. Det kan också vara en plats, eller som också kan vara en ny rad tecken. Det är heltal, som är lika siffror, hela numbers-- eller heltal rather-- men inga decimaler. För decimaler, vi har flyttal. Flyttal är tal med decimaler. Sedan finns det longs, vilka är väsentligen längre heltal. Du kommer att märka att en lång är 8 medan en int är 4. Jag kommer till det på en sekund. Det beror på longs kan lagra ännu fler heltal än en int kan lagra. Double är en lång float. Och slutligen, vi har sträng, som är en typ att du antagligen har använt tidigare. Om du inkluderar hashtag # includeCS50.h i källfilen, då kan du använda en sträng typ. Det är faktiskt inte inbyggd i C. Det finns ett par andra typer också. Men dessa är de viktigaste områdena med som du kommer att använda och möter. C som, återigen jag nämnde, varje variable-- det kan bara vara en typ och endast en typ. Det beror på C är en statiskt skrivit språk, i motsats dynamiskt typade språk där om du skapar en variabel Du kan ändra vad som lagras i det som du går på i ditt program. Över här på höger sida, jag har olika storlekar av dessa typer av data i bitgrupper. Så ett tecken är en byte. Det är 8 bitar. Och det betyder eftersom 8 bitar finns det åtta 0s och 1s. Vi såg dessa demonstrationer i den första vecka med att binära glödlampor. Med 8 bitar eller ett byte, vi kan representera siffror från 0 till 255. Höger. Om samtliga 8 bitar är 0 som är 0. Om den första biten är 1, är att antalet en, och så vidare, hela vägen upp till 255. Och det är därför för tecken som du kan har i huvudsak upp till 255 av dem, men det finns massor att täcka alla karaktärerna vi måste använda. För heltal, kan du 0 och så har du 2 till 32 minus 1. De är hur många alternativ du har för heltal. För en lång, har du 0 till 2 till 64 minus ett. Så du har många, många, fler alternativ för longs. Strings, det är ett frågetecken eftersom det är en cliffhanger till senare. Yeah. Jag skulle kunna berätta allas på kanten av sitt säte, precis vad är det frågetecken? Det är en cliffhanger. Vi kommer så småningom att omfatta storleken på strängar och prata mer om strängar. Eftersom strängen är faktiskt ett av stödhjulen Vi ska ta på detta kurs i början och sedan ta bort senare på grund strängar i C är faktiskt pekare karaktärers arrayer. Men återigen, det är en cliffhanger till senare. Innan jag går vidare frågor, kommentarer, rör om den här bilden? OK. Jag måste vara en fantastisk explainer. Även när du programmerar, du kommer att använda dessa operatörer. Riktigt enkla tecken som kan göra enkla operationer, som du förmodligen redan mycket bekant. Till exempel, på den högra sidan ser vi tillägga. För att lägga till, du bara gör ett plustecken. Och så du kan ha två variablerna x och y. Du kan göra x + y i koden. Kanske vill du att-- säga dig har nummer 7 och 3, du vill lagra den i en variabel som kallas summa. Du kan göra int för denna typ, utrymme summan, namnet på variabeln, = 7 + 3; Vad skulle det butik i summan? Någon? Om jag hade summan = 7 + 3. Vad skulle lagras i sum? Du kan bara skrika ut det. PUBLIK: 10. JASON Hirschhorn: 10! Det är precis rätt. Vad sägs om i sum = 7-3, Jag använder just det streck tecken. Vad kommer att förvaras? PUBLIK: 4. JASON Hirschhorn: 4. Summan är förmodligen fel namn för denna variabel, skulle men 4 lagras. Att föröka sig i C, använd den lilla Star karaktär, behöver du inte använda en x. Att dela, använda en Forward Slash inte uppdelningen symbolen. Och för att modulo använder Percent symbol. Så låt oss säga att jag vill se int z = 7% 3, vad skulle lagras i z? Så, det är i huvudsak frågar vad gör modulo göra? Är det någon som vet vad modulo gör? Yeah. y 4. TALARE 1: Det är resten. JASON Hirschhorn: Det är den resten när du delar. Så 7 delat med tre är två resterande 1. Så en skulle lagras. Du gjorde subtraktion, men det är så det fungerar. Det är vad modulooperatorn gör. Det tar ett antal delar det med ett annat nummer och återgår till dig påminnelsen. Så återigen, 7% 3 ger dig en, eftersom 7 delat med tre är två resterande 1, och returnerar resten. Vad sägs om låt oss gå tillbaka upp ett steg för att denna delning tecken. Om jag gjorde 7 / dividerat med 3 gör någon som vet vad det skulle återvända? TALARE 2: 2. JASON Hirschhorn: Varför 2 och inte 2.333? TALARE 2: Jag tror att det skär av efter heltal. JASON Hirschhorn: Så det är exakt rätt. I C, om du gör uppdelningen av två heltal 7 dividerat med 3, det blir det svar som i detta fall 2,3333 evigt och det finner att decimalkommat och hugger allting efter decimalkommat och det bara tar dig tillbaka 2. Så om jag gjorde åtta dividerat med 3. Som faktiskt, vi vet att återvända 2,666, men det hugger allting på decimaltecknet, stympar allt, och bara tillbaka till dig 2. Så 6 dividerat med 3, 7 uppdelad av 3, 8 delat med 3, alla kommer att återvända till dig 2. Är det någon som vet, eller har en gissning, hur jag faktiskt kunde få hela svaret om jag vill att decimal? Yeah. Varsegod. TALARE 3: Använd en flottör? JASON Hirschhorn: Vad menar du? TALARE 3: Eftersom du sa float är för nummer [OHÖRBAR] JASON Hirschhorn: Rätt. Så, det är exakt rätt. 7 är ett heltal. Men om jag ville göra det i ett flyttal, Jag skulle behöva lagra den som 7.0 eftersom datorn är verkligen stupid-- vi såg att med PB och J example-- Det kommer bara göra exakt vad du säger det. Så om du skriver 7, det tror att det är ett heltal. Om du skriver 7,0, trots att vi vet dessa saker är likvärdiga, det behandlar det som en flyttal. Så om du gjorde 7,0 uppdelad genom tre, eller delat med 3,0, det skulle säga, OK, nu vi har att göra med flöten. Jag återkommer till dig 2.333333 evigt. Men inte riktigt för evigt, eftersom som vi såg också i föreläsning, dessa flyttal är inte exakt exakta. Så om du vill ha det decimal, eller en del av detta decimal, då måste man use-- en av dem måste vara ett flyttal och datorn måste förstå att detta är ett flyttal du att göra med, inte är ett heltal. Eventuella frågor om tabellen på den högra sidan, så här långt? Eller vänster sida, din vänster, vänster sida. Yeah. TALARE 4: Rätt. För precis som en vanlig heltal, skulle du write-- skulle du behöva skriva flyta? JASON Hirschhorn: Ja så. Tja, om du vill skapa en variabel som är en flottör, du behöver säga float z är lika med något. TALARE 4: OK. JASON Hirschhorn: Men om jag ville gör 7 dividerat med 3 och få den decimal, Jag skulle göra float z = 7,0 / med 3,0; och som skulle ge mig flyttals nummer. TALARE 4: OK. JASON Hirschhorn: Om jag gjorde något som int z = 7 / med 3, som skulle ge mig ett heltal, eftersom de är alla heltal. Betyder det vettigt? TALARE 4: Ja. JASON Hirschhorn: OK. Bra. Alla andra frågor om tabellen? Verkligen? Jag är så upphetsad. OK. Så några andra saker du kommer att använda, ofta under förhållanden eller slingor, är dessa typer av operators-- dessa typer av booleska uttryck. Och som vi lärt oss, == är vad du använda för att kontrollera om två saker är lika. Så här jag kontrollera om x == y, låt oss återigen anta att x är 7 och y är 3. Så om jag skrev 7 == 3, vad skulle det tillbaka till mig? Är det sant eller falskt? PUBLIK: Falskt. JASON Hirschhorn: OK. Det känns som om alla kan få detta. Så alla, vad skulle det tillbaka? PUBLIK: Falskt. JASON Hirschhorn: Falskt. Bra. 7 inte är lika 3. Så 7 == 3 skulle returnera false. Du har en inte likhetstecken, så om jag kontrolleras 7! = 3, vad skulle det tillbaka? PUBLIK: Sant. JASON Hirschhorn: Sant. Utmärkt. Någon var mycket eftertrycklig i ryggen och uppskattar det. Då har du mindre än operatör, mindre än eller lika med operatören, större än operatör, större än eller lika med operatören. Så ytterligare en sanity check. Om jag hade 7 är större än eller lika med 3. Vad skulle det tillbaka? PUBLIK: Sant. JASON Hirschhorn: Sant. Ja. Det bakre rummet, baksidan i rummet, fantastiska. Du kan kombinera dessa uttryck om du vill, liksom, med en logisk och som && Eller en logisk OR som är || ||. Och så nu kan du testa två saker together-- Är det roligt? Varför är det roligt? Så om jag ville, jag kan säga är 7 större än 3 OCH 2 är mindre än 4? Tja, om 7 är större än 3, det är sant. 2 är mindre än 4, det är sant. Så det hela skulle återvända sant. Om jag testade 7 är större än 3 och-- Jag bara plocka slumptal här-- 4 är mindre än 2, ja, det är falskt. Så sant och falskt falska. Och du kan gå på och du kombinerar som många villkor tillsammans som ni vill. Är det någon som har några frågor, kommentarer, oro hittills? Och jag ser några av er att ta bilder Av mig på skärmen, vilket jag uppskattar. Förhoppningsvis är det inte snapchat. Förhoppningsvis är det för dina anteckningar. Men alla dessa kommer att vara tillgänglig på nätet. Så du behöver inte ta bilder av detta. Som jag nämnde, allt kommer att finnas tillgängliga på nätet för dig. OK. Jag är på väg att få utanför scenen, så gör någon vill säga något innan det händer? Frågor? [Inplacering UTTRYCKER] JASON Hirschhorn: Sluta. Ni är också trevligt. OK. Jag kommer att märka ut. Nu går vi. ANDI PENG: Vi kommer att göra en besvärlig mic förändring nu. JASON Hirschhorn: Jag är kommer att ta det här. ANDI PENG: Uppskatta stöd, killar. Hör du mig? Är det bra? Perfekt. Vackert. Låt mig bara stoppa det i. OK. Så, jag är på väg att göra som en jätte Information dumpa på er just nu. Och inga bekymmer alls om du är inte följa varje liten rad om vad Jag ska visa dig. Som Jason sagt, allt är helt online. Bara att vi ska försöka att införa alla att de begrepp som omfattas i några av dessa bilder. Så bara följa med. Inga bekymmer om du inte förstår allt; emellertid, om vid någon punkt du känner förlorade, höja din sidan, slutar vi, inga bekymmer. Häftigt. Så jag tror att något som David har redan slags nämns i föreläsning och Jason har typ av anspelat till dagens är vad ett bibliotek är. Så i programmering, vi har dessa saker som kallas bibliotek. Om huvudsak alla de är bara en uppsättning av funktioner, är att i huvudsak bara kod som är redan skrivits av någon annan som vi kan alla användning inom våra program. Så hur fungerar en normal biblioteksarbetet, eller hur? Du kommer in i biblioteket dörren. Du har alla dessa böcker som du kan dra ut och du kan få tillgång till information inom dessa böcker. Samma sak i programmering. Du har ett bibliotek som redan har skrivits av andra människor. Och det sätt som du kan, som programmerare eller en student, kan få tillgång till det biblioteket är genom hashtag #include. Till exempel i C vi har tre C-- mest vanligen används tre C-standard libraries-- input / output-bibliotek, strängen bibliotek, och matematik biblioteket. Så inom ditt första par problem sätter, de som kommer att vara den tre att du i första hand använder. Så David redan förklaras i föreläsning, standard-I / O-bibliotek, eller standard input / output bibliotek gör just detta. Det gör att du, i din kod, för att mata något från användaren och utgång som till skärmen, i huvudsak skriva ut det till skärmen. Och så varje gång du använder någon funktion, till exempelvis funktionen printf (), som vi kommer att gå igenom nästa bild, se till att inkludera standard I / O bibliotek eller annat du inte kommer att kunna använda printf () funktion. Eftersom du, som programmerare aldrig skrev denna funktion, du bara använder någon annans kod i din egen kod. Låter det vettigt alla? Häftigt. Och då får vi i huvudsak på den string.h biblioteket och math.h bibliotek, -h bara betyder bibliotek, andra bibliotek som du så småningom att använda i din kod. Emellertid för syften av detta bibliotek, vi också have-- av denna class-- Vi har även det som kallas CS50 biblioteket cs50.h, där vi, för din läsning har skapat många viktiga och användbara funktioner. Så att du som programmerare kan kombitrafik bort vad vi har redan skrivit så att den här funktionen är tillgänglig för dig för din användning. Jag kommer att täcka ett par de funktioner som vanligen används, men vet att det är alla googleable nätet. Känn dig fri, dra upp CS50 biblioteket och då har du alla funktioner där. Yeah. TALARE 5: Så om du inte var hjälp av programvaran som ges till oss av klassen, gör det menar vi skulle behöva ladda ner och hitta denna rubrik fil oss och berätta den dator där det är? ANDI PENG: Bra fråga. Exakt. Så det är som om du inte fysiskt närvarande på ett bibliotek, det finns inget sätt för dig att faktiskt gå och få tillgång till den. Så samma sak med programmering i C, du måste se till att du använder vår apparaten eftersom biblioteket är redan införlivats i den. Och sedan när du Hashtag #include, bibliotekets där. Yeah. Bra fråga. Alla bra? Häftigt. Okej. Så vi kommer att slå, i huvudsak, vad är den första funktionen som vi som programmerare är kommer att använda i vår kod. Detta kallas printf () funktionen. Så, printf) funktion (som jag har redan sagt i den sista bilden, ingår i standard-I / O, standard input / output, bibliotek. Så se till att vad du än using-- åh, låt mig ta lasern pointer-- när du använder printf) funktion (, du måste inkludera standard I / O bibliotek eller annars, när du kompilerar, du kommer att få ett felmeddelande eftersom datorn kommer att se ut, åh jag vet inte var printf () är, du inte talar om för mig var printf () är. Väl printf () ingår i standard I / O, så när du använder printf (), se till att ha det raden ovanför din kod. Så till exempel, printf () här är en funktion. Allt det gör är skriva ut något inom parentes för användaren. Skulle någon vilja ta ett knivhugg på vad den här kodraden rätt här kommer att skriva ut? Därför är svaret på skärmen. Någon? VERDI: Botten. ANDI PENG: Verdi, varför inte du gå framåt och säga hela uttalandet? VERDI: Hej, mitt namn Andi, och jag är 20 år gammal. ANDI PENG: Ah, härlig. Så i denna linje vi kommer att skriva ut, Hej, mitt namn är Andi, och jag är 20 år gammal, som är i själva verket en sann berättelse. Syntax. Så par syntaktiska problem som ni vill vara säker på att du vet. Citat. Citationstecken berättar dator som allt inuti kommer att skrivas ut. Allt inuti burken bara vara exakt hur du skriver det, med undantag för vanligen i slutet, vi kommer att vilja inkludera en hash-- oh sorry-- ett streck n. Så ett streck n. Finns det någon som vill ta en gissning på vad som gör att vår kod? Yeah. HÖGTALARE 6: sätter den på en ny rad. ANDI PENG: Exakt. Så allt detta innebär är tillåta vad som än händer efter detta, efter detta uttalande, som ska skrivas ut till en ny rad. Så att när du skriver din kod du inte slumpmässigt har saker uppsatt till slutet att du inte vill ha. Att allt blir prydligt tryckt en rad och då kan vi börja på nästa rad. Kommer någon ihåg vad det semikolon gör när vi kodning? Yeah. SPEAKER 7: policy. ANDI PENG: Förlåt? SPEAKER 7: Är det avsluta uttalande? ANDI PENG: Ja. Så i C eller programmering språk, semikolon anger slutet på en programmerings linje. Så till exempel, på engelska vi använder perioden att säga, oh detta är slutet en mening. I programmering, samma sak, vi har en semikolon för att ange slutet av en rad. Ofta när du är börjar programmera, du inser att du glömmer att lägga till ett semikolon och sedan försöker köra din kod och det fungerar inte. Och du är som, Ah, det gör jag inte vet varför det borde arbeta. Chansen är glömde du förmodligen en semikolon eller en konsol eller något någonstans. Så, är det viktigt att komma ihåg. Häftigt. Okej, handuppräckning, hur många människor här har någonsin tagit AP datavetenskap eller programmeras i Java innan, någonsin? OK. Lovely. Det kommer inte att vara tillämpliga då, men i Java, du har något som kallas System.out.println som inte existerar i C. Så i C, när du vill lägga till i variabler i vad du vill att skriva ut, det finns en specifik syntax vi ska använda. Det heter placeholding-- väsentligen vi lägger platshållare på plats av heltal eller variabeln att vi vill skriva ut. Så när ni ser har vi inkluderat ett nytt bibliotek header-fil här. Den CS50 bibliotek. Och innehöll inom den CS50 bibliotek är en vanlig funktion vi kommer att använda i vår kurs som heter getInt (). Är det någon som vill ta en stab på vad getInt () kan möjligen göra. PUBLIK: [OHÖRBAR] ANDI PENG: Förlåt. Det gick inte att höra dig. Maddie, vem som helst. Maddie: Åh, uppmanas du ett heltal. ANDI PENG: Exakt. Så denna funktion, en annan funktion som redan skrivits av någon annan att vi kan åkalla nu. Allt som är är att uppmana dig, användaren, ange vad du vill som koden är igång och det lagrar whatever-- i det här fallet är vi getInt () - ing, så det innebär att vi är erhålla ett heltal. Och vi kommer att lagra att i ett annat heltal att vi bara har gjort kallas ålder. Det vettigt för alla? Häftigt. Så nu när vi har lagrat detta heltal, att vi har föranlett från användaren, i denna variabel, vi har skapad av typen int kallas ålder, vi kan gå vidare och plats som i vår printf () funktionen. Så syntax vanligtvis printf () är att oavsett var i din faktiska fysiska linje du vill inkludera det heltal, du gör det symbol just där, procentsymbolen, med typ av variabel som du vill. Så i detta fall ålder är ett heltal. Så du kommer att inkludera % i eftersom det är ett heltal. Och sedan efter uttalande, du kommer att göra komma och namn på variabeln. Så här kommer vi att skriva ut ut, Hej, mitt namn är Andi, och jag är tomma år gammal. Hashta-- eller, sorry--, ålder med vad jag ingång. Så om jag skulle ingång 20 för min getInt () här, det skulle skriva ut exakt samma sak. Men, om jag ville ingångs något annat, som kanske 40 eller 45, då skulle du se att återspeglas följaktligen i koden. Så det här är ett exempel av något som det skriver ut och ser till dig som om det är samma sak, men under huven av datorn finns faktiskt mycket olika saker händer. Häftigt. Okej. Så vad händer om vi vill ha flera variabler? Ganska lätt. Samma sak. Vi har också en ny funktion här kallad getString (), också ingår i CS50 biblioteket att allt det gör är att fråga användaren efter en sträng, som är bara en uppsättning tecken, så som en mening eller liknande namn. Så i detta fall skulle vi ha två platshållare% s för sträng och% i för heltal. Och vi kommer att följa att genom de två variablerna Vi vill inkludera i den ordning att de förekommer i meningen. Så till exempel, är mitt namn tom, jag vill ha ett namn där, så jag kommer att ha namnet först. Och sedan efteråt, jag vill ålder, vill ha ålders sekund. Och så om jag ville ingång, Hej, mitt namn är Andi, och jag är 20 år gammal. Om jag inmatade Andi och 20, den exakt samma sak skulle skriva ut; Men nu har vi två lagrade variabler namn samt int. Yeah. SPEAKER 8: Skulle det vara kunna köra om du bytt namn och ålder i slutet av det? ANDI PENG: Ja. Det är riktigt bra fråga. Så lång historia kort, nej. Eftersom namn och age-- vad typ av variabel är namn? SPEAKER 8: String. ANDI PENG: Och vad typ av variabel är ålder? HÖGTALARE 8: Heltal. ANDI PENG: Så här har vi en platshållare för stråk och heltal, eller hur? Så om du skulle byta dessa, datorn kommer inte att veta. Det kommer att söka efter en sträng, och om du försöker ge det en int, det kommer att bli vänta Jag är förvirrad, du sa att jag borde vara tilldela minne för en int. Och just här, när den förväntar ett heltal och du ge den ett namn och en sträng i stället, det kommer också att vara mycket förvirrande, det kommer inte att köra precis som du behöver det. Så här, namn och syntax är mycket viktigt för att köra kod. Alla bra? Yeah. Maddie. Maddie: Här vet jag att vi har tittat på exempel i klass, där de ber vad är din ålder, vad är ditt namn. Här skulle det vara det doesn't-- om vi skulle köra den här koden, Det skulle inte be om det? Men du skulle bara mata in två siffror och då skulle det köras så? ANDI PENG: Ja, exakt. Så om du ville för att det ska display, ange din ålder, du kan bara lägga en printf funktion () som säger, Ange din ålder, ovanför den. Det är en bra fråga. Yeah. TALARE 9: Så skulle redan vara ingår i getInt () [OHÖRBAR]. ANDI PENG: Nej, faktiskt är det inte. Så allt detta innebär är bara uppmanas en tom skärm till användaren att mata in något. Om du vill ha det, om du vill att det ska skrivas ut ut något som talar om för användaren som, Kan du ge mig din ålder, då du skulle behöva printf () att själv. Eftersom alla använder denna funktion för olika saker, du kan lagra ålder, du kan lagra adress, du kan lagra telefonnummer. Och så är det verkligen upp till dina killar individuella användningsområden för vad du vill att den ska säga. Yeah. TALARE 10: Så, bara för att klargöra, där gör du ange namn och ålder så att den dyker upp i stället för% s? ANDI PENG: Som i användarens? TALARE 10: Ja, precis hur gör jag gör det-- där lägger jag Andi, och där lägger jag 20? ANDI PENG: Ja. Så om du skulle faktiskt kör den här koden Jag faktiskt inte köra kod, detta är bara här just nu. Om jag skulle köra koden, skulle jag kompilera koden, göra filen, köra koden, och då skulle det bara vara två platser för mig att mata in den. Yeah. Ni kommer att se när du spelar runt med koden själv. Okej vi kommer att flytta in i nästa sektion av vad vi kommer att täcka i dag. Vi kommer att gå igenom vad villkorssatser är. Så om ni minns och minns från föreläsning, villkorssatser, allt de är är en uppsättning instruktioner till datorn i som om ett visst villkor är sant, du köra koden insidan av detta villkor. Så i Scratch-- huvudsakligen den stora temat från och med idag är att ni har redan alla sett logiken bakom allt att vi bevakar. Och allt vi gör är översätta något som var mycket intuitivt i Scratch och hårt kodning det i syntaxen kommer vi att använda för den klass som är C. Så logiskt, var allt detta block är denna del av koden direkt. Yeah. OK. Vi får också in en if ... annars uttalande som är bara en extra skikt komplexitet till if där datorn tar en titt på detta och ser, om detta villkor är sant, gör vad är inuti dessa två konsoler, else-- så ungefär som standard om det uppfyller inte Skick- göra detta. Det är som en gaffel i vägen. Om det regnar utanför, satte jag på en regnjacka, annars något annars jag inte sätta på en regnjacka. Betyder det logiken vettigt att alla? Häftigt. Okej. Så som en hård exempel på detta att vi skulle få se i C är om jag ville skapa en variabel som kallas inlämnings timmarna. Och om inlämnings timmar är mindre än fem, jag säger Liv är stort. Det är underbart. Men säger Kampen är real-- vilket är vad vi alla på denna måndag eftermiddag upp Science Hill är förmodligen gör just now-- PUBLIK: [skrattar] ANDI PENG: De sätt som vi skulle, tack för det. Det sätt som vi skulle hårdkoda detta i C är if-- låt oss anta Vi har redan en variabel av typen int kallade läxor timmar här. Om inlämnings timmar är mindre än fem printf (), är livet bra. Kom ihåg att hålla / n eftersom du vill ha en ny rad efter. Else tryck, är Kampen verkliga. Förstår alla hur Jag gått från detta block i detta block av kod? Häftigt. Okej. Så nu ska vi ta en titt på flera If uttalanden sammanlagt. Så låt oss anta Syftet med detta program var vi uppmana användaren för en klass. Vi prompten med getInt () för en klass, och de mata in ett värde, och du vill visa vilken typ av klass som de fick. Så om jag skulle utforma ett program, jag innebär normalt i alla våra ögon, 90-100 är en A, är 80-90 en B, och så vidare och så vidare. Vad är fel med detta kodsnutt att det inte är göra vad jag vill att det ska göra. Yeah. HÖGTALARE 11: de har lägre gränser, men de har inte övre gränser. ANDI PENG: Exakt. Har alla höra vad hon sa? Det kommer att vara övre gränser, men inte lägre gränser. Tyvärr, tvärtom, nedre gränser, inga övre gränser. Så vill du ta en stab på att säga vad skulle skrivas ut på detta skärm om jag skulle köra den här koden. TALARE 11: Ett fel? ANDI PENG: Ett fel? Stor gissning, inte helt rätt. Är det någon som har en annan stab? Ja, Aaron. AARON: Om du sätter in något som är större än 90, det skulle visa alla kvaliteter du fick. Det skulle visa att du har ett A, du fick en B, fick du ett C. ANDI PENG: Ja. Det är precis rätt. Så skulle det vara underbart. Men de är ömsesidigt exklusiv, tror jag. Om jag skulle köra denna del av koden. Och låt oss bara säga att jag inmatas betyget 95. Så 95 är nu lagrad i int kallas klass. Och så C är ett språk som går upp topp till botten, så det kommer att alltid köra upp och ned. Så det kommer att komma hit, läs om klass är större än eller lika med 90, printf () du fick ett A. Bra, jag har en 95, det är mer än 90. Det kommer att skrivas ut, Jag fick ett A. Det kommer att ta en titt på detta om det kommer säger väl 95 är också större än 80, det kommer att skriva ut du fick också en fått B utropstecken, och så vidare och så vidare. Så som vi alla kan se, detta är en vanlig bugg som kan uppstå när vi är skriva kod att hålla utkik efter. Vem som helst, frågor om varför detta hände? Bra. OK. Så hur ska vi fixa detta, är uppenbarligen logiska nästa fråga. Tja, har vi dessa vackra saker som kallas om annat om annat om else uttalanden. Så du kan se, om du ville att ändra på det problemet, du ville göra var och en av villkor ömsesidigt uteslutande, du vill lägga till en annan ... if-sats. Och dessa av course-- tänka på dem som lejdare eller liknande pinnar på ladder-- du kan lägga till så många av dessa som du vill ha så många villkor som du vill. Så här, om jag inmatade grad att vara 95. Om betyget är större än 95, printf (), fick jag en A. store. Det kommer att se ett annat ... om och det kommer att veta, Åh nej, Jag har redan verk först annat. Jag vet-- eller första if-- jag vet att Jag behöver inte titta på någon av dessa eftersom en av dem har redan varit sant. Så det kommer att löpa från toppen och nedåt. Så snart som den första en är sant, då det kommer att hoppa över alla de andra av de annars ... ifs. Betyder det vettigt? Så, på detta sätt du har olika nivåer av kontroll och så fort en av dem är falsk, den resten är också, kommer de inte ens kontrollera. Häftigt. Okej. Så detta är ett exempel på en annan typ av villkorad uttalande vi ser mindre ofta, men vi får se dem och använda dem. Och de är ofta mer effektiv för vissa fall. Så vi har vad som kallas en switch uttalande. Så innan vi omfattas vad är en annan uttalande, en om ... annat uttalande. Här har vi vad är kallas switch uttalanden. Så när vi använder switch uttalanden är nyckeln? Så i en switch uttalande, du vanligtvis typiskt faktiskt du kan bara mata in heltal för din variabel som du kollar. Så om jag ville kontrollera om en viss number-- t.ex. en klass, om jag fick en 90. Jag vill att det ska se om det är en A, B eller C. jag kunde ha ett fall här. Emellertid har fallet att vara en annan konstant. Så i denna mening, switch uttalande kan bara kontrollera för jämställdhet av två tal. Det kontrollerar inte för något annat. Så det är något att vara mycket försiktig med när du använder detta. Så här, om jag ville kontrollera om mitt betyg av 90 är lika med 90 eller 80 eller 70 eller 60, och sedan skriva ut motsvarande grad, Jag skulle kunna skriva att i en switch uttalande. Så det kommer att komma hit, är check Detta heltal lika med denna konstanta? Om inte, kommer det att hoppa. Är det lika med konstant två, och så vidare och så vidare, tills du träffar standard om ingen av dem är lika. Så snart som en av dem sätts till att vara lika, det kommer att göra detta kodrad och paus. Vilket innebär att det kommer att drabba det köra, bryta, och bara helt hoppa till botten av koden. Så i den meningen den typ av funktioner som en om annat om annat if. Så här är ett konkret exempel för er. Så låt oss anta att jag ville skapa en variabel som heter år grundades. Och jag vill att uppmana användaren att mata in året som skolan grundades. Så jag kan skapa en switch uttalande här. Och låt oss bara säga, jag ingång 1636. Denna kod här kommer att se switch år grundades vilket motsvarar 1636. Det kommer att se fall 1636, åh de är lika, printf () Borde inte du vara vid den skolan uppe i norr? Eftersom vi antar de inte gå hit om de går till Harvard, bryta och hoppa till slutet. Om jag skulle ingång 1701, som Jag antar vi alla skulle ingång, det skulle hoppa över det här fallet, kommer ned till fall två, som är 1701, och skriva ut Välkommen till Yale! Break, hoppa till slutet. Annars har du förmodligen tar den här kursen nätet i vilket case-- häftigt välkomna att Yale-- det kommer att gå till standardutskrifts, Hej Internet! Och bryta. Yeah. TALARE 12: Kan man använda annat i stället för standard finns? ANDI Peng: Nej, eftersom den sätt att hela denna funktion switch byggs, syntaxen du behöver använda är fallet fallet standard. Det är som om annat om detta ett det fall fall standard. Yeah. TALARE 13: Du kanske redan sagt detta, men kan du ha mer än två fall? ANDI PENG: Ja, du kan har så många fall som du vill. Tänk på det som bara gillar oändligt tillsätta på. TALARE 14: Om du bytte 1701 med 1636, det inte verkligen göra en skillnad eller hur? Det kommer bara att kontrollera om det. ANDI PENG: Det är en riktigt bra fråga. Och vi kommer att beröra detta senare, men bara vet att det är växeln uttalande infinitely-- det är effektivare än det och om annars om att det fungerar med användning av en annan typ av funktion som kan du, att i huvudsak bara hoppa direkt till önskad Om du behöver vara på. Yeah. TALARE 14: Cool. Tack. ANDI PENG: Ja TALARE 14: Och du inte kunde gör fall liknande och större än. ANDI PENG: Nej Så, det är vad som begränsar om switch uttalande är att du har att ha konstanter endast endast heltal. Yeah. OK. Så detta är något som du killar kommer att stöta på mindre ofta, men jag ville bara införa det i fallet. Vi har här vad som är kallas ett ternärt operatör. Där i allt väsentligt, det är precis som en if-sats kompileras till en rad. Här ska jag gå in på nästa rad, den nästa sida, eftersom det är lättare att se. Så vi har alla sett denna rättighet? Detta är ganska lätt att följa. Om jag ville göra en variabel som heter sträng som heter s, om ett visst antal Jag ger det är mindre än 100, jag vill tilldela låg på strängen, annat jag vill tilldela hög. Detta här gör exakt samma sak de åtta rader kod gör. Så här jag vill skapa en variabel sträng. Och detta är villkoret jag kontroll, om ett nummer är mindre än 100, då du tilldelar värdet av låga, annars tilldela värdet på hög. Dessa bilder kommer att vara online, inga bekymmer om ni inte får ner det. Detta är bara ett enklare sätt, en mer effektivt sätt att skriva kod. OK. Så nu ska vi ange vad för de flesta människor är som en mycket, mycket förvirrande sak att tänka på först. Slingsektionen. Så idag ska vi prata ungefär tre typer av slingor. Vi kommer att börja med ett tag loop, sedan tala om en gör while-slinga, och sedan tala om för loopar. Så i huvudsak, för de mer visuell inlärare ute, Vi har i huvudsak en grafisk skildring av vad en while-slinga gör. Så i en programmering, skulle du börjar och ange slingan vid en viss punkt. Du kontrollerar ett tillstånd. Och om villkoret är sant, du kör koden inuti. Och du kommer tillbaka runt och du kontrollera. Om det fortfarande är sant att du hålla kör denna kod runt och runt i en slinga. Men den andra att villkoret blir falskt, du kommer att bryta och avsluta slingan. Och detta är i huvudsak syntax du ska använda. Medan ett visst villkor är true gör detta, om det inte är sant, du kommer att hoppa till slutet och gå vidare med ditt program. OK. Har någon ett exempel på vad som kan potentiellt inträffa om jag försöker köra denna del av koden? Förresten, SAJ-- det är SCAZ, Andi, Jason-- vi avsluta vår e-post, Kärlek, SAJ. Det är oss. OK. Någon har ett exempel, eller har en idé om vad detta skulle skriva ut? Typ av en kuggfråga. Så här, kom ihåg villkoret Vi kollar efter medan sant. Så medan detta är sant, är det tryckningen, jag älskar SAJ! Finns det någon plats där vi hade ändra detta till något annat? Nej, rätt? Så här har vi stött vad är nog kommer att buggning en massa dina program, det oändliga loop. Du kommer att upptäcka att om du köra denna del av koden, det är bara kommer att hålla tryckning, jag älskar SAJ! Medan vi uppskattar det stöd, Vi vill inte ha dina datorer att krascha eftersom du fortsätta att skriva ut Jag älskar SAJ! Så snälla, snälla, undvika den oändliga slingan eftersom det aldrig kommer att utvärdera till false och du kommer aldrig att lämna slingan. Och du kommer att sugas in för evigt. Häftigt. OK. Den andra typen av slingan vi pratar om i dag är do while-slingan, göra medan loop. Och det kallas en gör while-slinga eftersom du har en gör och ett tag. Så det här är ganska lik ett tag slinga, men lite annorlunda. Här, du kommer att göra oavsett insida av detta medan ett visst villkor är sant. Så om jag var C och datorn är jag kör ner denna del av koden, Jag tar en titt på toppen. Jag går till C, säger jag gör det här. Och då jag kontrollera, medan det är sant, jag måste upprepa det. Men medan detta är falskt, då jag gå vidare och jag aldrig gå tillbaka till den slingan igen. Kan vem som helst ta en stab på vad skillnaden mellan denna slinga och en vi bara såg på var praktiskt. Yeah. HÖGTALARE 15: Villkoret kommer efter i stället för före? ANDI PENG: Exakt. Så hon sade villkoret kommer efter, inte före. I slutändan, skillnaden mellan detta och while-loopen är att du bara ska göra vad är inuti denna oavsett om ditt tillstånd är eller inte sant, och sedan kontrollera skicket. Så i det här fallet, är du always-- på detta sätt, du alltid att se vad som finns inuti körs minst en gång innan du kontrollerar att se Om du vill att den ska köras igen. Och här är ett exempel om när vi skulle använda den. Så till exempel, om jag ville ha en variabel av typen int namnges ålder, och jag vill uppmana användaren för deras ålder, Jag kommer att göra printf () Hur gammal är du? ålder = getInt (), som är att användaren tillfrågas. Och en del människor kommer att bli riktigt irriterande. Och du inte vill buggar i din program för någon inmatning liknande, Åh jag är negativ 4 år eller vad som helst. I vilket fall, om de gör det, utvärderar detta till true, vilket betyder att jag kommer att måste hålla gå tillbaka och göra detta. Så detta kommer att hålla åter att användaren tillfrågas för att ge dig som en riktig Antalet och det är kommer att hålla gå tillbaka och göra om det tills de ger dig en riktig ålder större än ett, eller inte är noll. Så antyda, antyda. Detta kommer att vara mycket, mycket användbar för en av dina PSET problem. Yeah. TALARE 16: Whoops, sorry. ANDI PENG: Japp. TALARE 16: Finns det inte att vara ett svin, men-- ANDI PENG: Inga bekymmer. TALARE 16: --are det olika regler här, eller har du bara glömma att sätta citatet? ANDI PENG: Oh Yeah. Tyvärr, det är helt min dåliga. Det var definitivt tänkt att vara ett citat. God fångst. Det skulle inte ha kört. OK. Så den sista typ av loop vi ska prata om och slutligen slaget av mest komplex är för loop. Oroa dig inte om du inte vet vad det betyder. Det är ganska förvirrande i början. Vi ska gå över ett exempel. Allt som händer i en for-loop är att du har tre uttalanden att du kommer att omfatta. Så för en viss sak, du är kommer att initiera en variabel. Du kommer att lägga till villkoret att som denna slinga kommer att hålla igång. Och sedan, vid slutet av den loop, du kommer att uppdatera den. Du kan uppdatera variabeln som du vill hålla reda på. Så vi brukar använda för slingor för när vi vill köra en slinga för en visst antal gånger och vi redan vet, Åh jag vill denna slinga att köra som 10 gånger, då du do-- jag ska gå över ett exempel på nästa sida. Så här till exempel, i Scratch, om du ville ha något att upprepa 10 gånger, allt du hade att säga var, upprepa 10 gånger jag älskar SAJ! vilket är en mer acceptabel show av stöd för oss snarare än den oändlig slinga. Här, hur du skulle övergång till C och skriva det vill säga för int-- jag kommer att skapa eller deklarera en variabel av typen int namnges i. Jag kommer att initiera den till 0, så i = 0; och detta kommer att bli mitt tillstånd. Så i är mindre än 10. Och sedan i end-- det sista uttalandet är du kommer att ha är en uppdatering av vad som händer med variabeln i I slutet av din för loop. Så det är ganska förvirrande, eftersom olika delar av denna linje händer vid olika typer av slingan. Men jag ska gå över en pseudo exempel på detta och kanske förklara detta bara lite bättre. Så här. Det är loopen vi bara såg. Väsentligen i pseudokod, vad som händer i det här programmet, först jag skapar i, initiera den till 0. Jag kontroll för att se om jag är mindre än 10, i vilket fall första gången är det eftersom 0 är mindre än 10. Slingan sålunda kommer att köra. Och sedan kommer jag att skriva denna linje. Och sedan i slutet av denna linje, rätt Här kommer jag att göra ökning i, i ++, allt det betyder är inkrementera den med ett. Så är jag nu en. Eftersom det var en gång 0, om jag öka det är, det är nu en. Och sedan kommer jag att gå tillbaka till början av slingan och jag kontrollera tillståndet. Är villkoret fortfarande sant? Ja, det är en fortfarande mindre än 10. Så det kommer att skriva ut igen, gå och sedan öka i och kontrollera tillståndet kontinuerligt, kontinuerligt tills du så småningom få till den punkt där jag är 10. Du kommer att skriva ut detta 10 gånger och sedan jag kommer att motsvara 10. Du kommer att kontrollera tillståndet. Är 10 mindre än 10? Nej, det är falskt. Således är denna slinga kommer inte att köra, kommer det att bryta, och du kommer att fortsätta med din kod. Så när ni kan se här är ett riktigt bra exempel av en slinga kan du programmera in att löper under en angiven mängd gånger. Var och en tydlig? Yeah. TALARE 17: Hur ökning exponentiellt, är det annorlunda kodning? ANDI PENG: Du can-- vi ska gå över detta i nästa bild. Bra fråga. Är anyone-- innan jag flyttar on-- någon alls förvirrad, eftersom detta är en riktigt tuff koncept. Inga bekymmer, om you're-- OK. Häftigt. Okej. Bara en allmän bild. Detta medan slinga gör exakt samma sak för slingan var. Det är just skrivit annorlunda. Ni kan granska bilderna när det passar dig senare. Men bara vet att det finns flera sätt att skriva samma sak att hända med olika slingor. OK. Så nu får vi i frågan om vad om vi har en slinga i en slinga. Vi får in real Inception typ grejer här. När du vill göra saker flera tider inuti annat att göra saker flera gånger, du vill ha vad som kallas en kapslad for-loop. För er som först ser detta och blir väldigt förvirrad, är allt vi gör här är att ha en for-loop där vi har en variabel av rad. Men inne i det, vi har också en annan för slinga av en variabel som heter kolumn. Och jag föreslår starkt er alla som är förvirrade att först hålla track-- dra ut det här, dra ut det. Försök inte att bara orsak genom den, dra ut. I huvudet på denna del av papper, eller vad som helst, skriver rad, hålla reda på vad raden är lika med. Skriv kolonn, hålla koll av vilken kolumn är lika med. Och hålla reda på vad som är utskrift med varje iteration. Varje iteration av denna slinga, varje iteration av det större slingan, bara hålla efter logiken. Och jag garanterar dig, Du kommer att älska det du ser, eftersom det är också mycket gäller för din problemsamlingar. Häftigt. Okej. Så det viktigaste att ni är förmodligen alla tänka på just nu, är dina Problem Set 1s, som beror torsdag / fredag. I din water.c program, Tips Du kommer att ha att fråga användaren om en insignal. Inom din mario.c programmet du kommer att ha att använda en kapslad för loop, som är en for-loop inne i en for-loop, att skriva ut ett block av pyramid, huvudsakligen precis vad Mario måste gå igenom. Och sedan i din greedy-- eller kanske Möjligheter till förändring, om någon av er har någonsin hört talas om that-- du kommer att behöva vara mycket försiktig med första flyttalsvärden. Minns flytande decimaler och heltal är inte samma sak. Håll reda på vilka en som är vilken. Och du kommer att använda villkorssatser, liksom. Okej, sista. Jag har fått ett par minuter kvar. Style. Så detta är något som inte faktiskt påverka effektiviteten, eller den faktiska driften av din kod. Men påverkar det oss som dina väghyvlar, som dina läsare. Det påverkar dig, om du är försöker hitta ett problem. Det påverkar läsbarheten i din kod. Så stil, som när du försöker styla en uppsats för engelska, om du behövde stycken, du har allt slag av virrvarr tillsammans på en rad, det gör det verkligen svårt för vem som helst att läsa din uppsats, även om dina poäng är logiskt ljud. Samma sak i programmering. Du kan ha fruktansvärt obskyra kod som SCAZ kommer att omfatta, och det kan fortfarande köra och funktion. Men för oss, som din vackra terapiområden, som kommer att läsa och utvärdera dina PSets, det är inte mycket trevligt. Så snälla, till förmån av oss och dig själv, när du försöker att åtgärda ett problem i din kod, och du försöker läsa din egen kod, gör att du följer vissa konventioner att vi kommer att gå över. Så först. Ge dina variabler meningsfulla namn. Om du vill spara ett heltal kallas ålder, vänligen name it ålder. Inte name it höjd. När du försöker lagra en ålder i höjd, det gör allt mycket förvirrande för oss. Vi tycker inte att förväxla. Du tycker inte att förväxla. Ingen gillar att bli förvirrad. Om du ska skapa något, name it något meningsfullt. Men i för loop, singel tecken variabler är oftast bra. Och för loop, om du vill bara att jag, och j, k, känn dig fri att bara göra det. Konsekvent initiering. Så vad betyder det? Det innebär tekniskt sett, teoretiskt, Du kan initiera och skapa flera variabler på samma linje. Så till exempel, kan jag skapa ett heltal kallas scaz_age, och heltal kallas andi_age = 20, och ett heltal kallas jason_age på samma rad. Och jag kan också tilldela endast en av dem och inte de andra till värden. Vi ber er inte gör det. För här har du i huvudsak skapat tre variabler, men bara en av dem faktiskt har ett värde. Och sedan när vi är försöker läsa din kod, eller om du försöker att åtgärda ett problem i din kod, det är mycket förvirrande att följa. Så bara för läsbarhet, för vår läsbarhet, inte gör det. Konsekvent klammerparenteserna. Vissa människor gillar att sätta sina klamrar på olika platser. Det spelar egentligen ingen roll. Se bara till att du är konsekvent i ditt egen kod på var du vill placera dem. Konsekvent avstånd. Om du sätter ett mellanslag efter en for-loop, alltid göra det. Inte precis som typ av gör det på vissa ställen, gör det inte i andra. Bara vara konsekvent. För det andra, om någon skulle vilja att granska CS50 Style Guide, vi officiellt har en stilguide som berättar alla dessa konventioner, plus mer. Det är på nätet. Det är som cs50.net/style eller något sådant. Du kan google det. Konsekvens är nyckeln. Så oroa dig inte vad andra människor gör, bara se till att du är konsekvent i din egen kod. Någon som har några frågor om det? Yeah. TALARE 18: Så rätt sak att göra med initieringen är bara har dem alla i en separat linjen, är det vad du säger? ANDI PENG: Så jag sällan har detta hända. Men om du ville, om du ville att vara som att spara utrymme i din kod, eller vad som helst, kan du göra det här. Vi ber att du bara inte initiera en sak och inte de andra. Så om du vill göra int scaz_age, int andi_age, int jason_age, det är bra. Bara inte initiera en och inte de andra är alla. Frågor? Okej. Jag kommer att passera utanför mikrofon och laserpekaren, och stafettpinnen till SCAZ på denna punkt. Det här är pinsamt. Här är det. BRIAN Scassellati: Tack. Hur är det för ljud? Ljudet är bra? . Utmärkt. OK. Så, hi everyone. Jag ska försöka att arbeta igenom ett praktiskt exempel med dig. Och vi kommer att använda CS50: s utvecklingsmiljö, vad som kallas Integrated Development Environment. Och du har sett denna demonstreras i föreläsning. Och i Problem Set 1, du är kommer att ha en möjlighet att använda den, och leka med det och vänja sig vid det, eftersom vi kommer att använda det genom resten av terminen. Så i detta IDE, har du vad som ser som en mycket traditionell filbläddrare över på ena sidan. Du har en del upp toppen där du ska att se din källkod, din Cfile, den kod som du skriver. Och ner botten, kommer du har ett terminalfönster där du kan använda för att både kompilera ditt program och att springa eller köra programmet. OK. Så bara för att ge oss en liten bit av Grunden i detta terminalfönster du kommer att vara med hjälp av en uppsättning kommandon som är standardkommandon i hela de flesta av Unix eller Linux-system. Och så om du någonsin använt någon form av Unix, Ubuntu, eller någon av de andra smaker, dessa kommer att se bekant. Om du inte har, oroa dig inte. Det finns inget komplicerat om dem. De är bara med hjälp av en annan syntax, en annan namngivning konvention än du har sett förut. Så för att lista ut filerna inom en viss katalog, de kommer att använda en kommando som heter ls eller lista. Om du vill se allt med alla detaljer, du kommer att använda ett kommando line argument med ls -l. Och det kommer att visa dig allt mera i detalj, inklusive behörigheterna för en fil. För att ändra katalog, du kommer att använda kommandot cd. Och du kommer att kunna byta katalog både att gå till din hemkatalog. Det är bara cd allt av själv, cd med två prickar kommer du tillbaka upp en nivå till föregående katalog. Och du kan även cd till en katalogen genom att skriva i cd och namnet på den katalogen. Du kan också skapa nya kataloger. Och vi kommer att gå genom detta på bara en minut. Men bara för att sätta allt på skärmen. Så att du kan se dem. Du har även möjlighet att manipulera filer direkt från kommandoraden. Du kommer att kunna kopiera dem till flytta dem eller ta bort dem, det vill säga, på ett effektivt sätt, för att ta bort dem. Den CS50 IDE ger dig full makt kommandoradsargument. Och det betyder att du kan också göra mycket farliga saker. OK. Till exempel kan du ta bort, eller det är radera, en fil utan att fråga en bekräftelse. Och du kan även ta bort recursively-- det är strecket r flag-- en hel katalogen och alla dess innehåll. OK. De är listade i rött eftersom du bör tänka "Danger" varje gång du ser dessa saker. OK. Okej. Nu äntligen, det som är kommer att bli riktigt värdefull för dig, finns det några bra knep att veta så du navigerar genom denna terminalfönster. Först, kan du rensa skärmen på helst genom att bara skriva i klartext. Och du kommer att se mig göra det ganska ofta. Du kan också bara visa texten till en fil genom att skriva mer och sedan filnamnet. Du kommer då att kunna bläddra tillbaka och vidare med det bara med mellanslagstangenten och piltangenterna. Om du har, som vi gjorde i dag i föreläsning, ett program som kontinuerligt körs i oändlig loop, du kan stoppa programmet från att köra genom att skriva kontroll, som håller ned Ctrl-C. Och du kan ha att göra detta flera gånger. Datorn får långt före dig. Och du ibland behöver ge det ett par försök innan det faktiskt kommer att gå igenom. Du kommer också att kunna sortera igenom kommandona att du bara skrivit med upp nyckeln, piltangent, och sedan nedåtpil. Och vad är mest användbara är istället för att skriva ut långa filnamn, du kommer att kunna använda Tab för att Komplettera automatiskt några instruktioner. Nu ska vi visa alla de på bara en sekund. Så om du inte kommer ihåg dem, oroa dig inte. Detta är saker som du kommer plocka upp och använda när vi går längs. OK. Så i C-- skillnad i Scratch-- C är en kompilerad språk. Det betyder att vi kommer att ta en källa file-- det är den text som du skriver, de kommandon som du skriver, den printf () uttalanden, loopar, allt else-- och vi kommer att ta filen och lämna bort till ett program som kallas kompilator. Kompilatorn tar då denna text som du har skrivit och översätta det till de binära instruktioner att datorn är faktiskt går användning. Det kallas objektet eller körbar fil. Om du tittar på den här filen, du kommer att se koden som du har skrivit. Om du tittar på den här filen, du kommer att visa en slumpmässig sekvens av tecken som gör ingen mening alls. Det beror på att detta är den binära. Det är inte menat för dig att läsa. Men när du vill köra något, vad du ska vara igång är det här objektet fil. Så när vi arbetar med dessa filer, ska vi skriva en fil i C. Vi ska sedan sammanställa det med hjälp av en kommando som make som kommer att åberopa kompilatorn klang för C-språket. Och som kommer att producera ett föremål fil, som en ut, eller i detta fall, namn, min fil, som jag har lagt ned. Okej. Så låt oss verkligen försöka detta. Så jag kom upp med ett exempel av vad jag ville prova. Och en av de saker som fascinerar mig är animation. Så vi ska försöka att göra lite animation med bara ASCII-tecken. Tecken vi kan skriva ut lätt nu. Så här är min bästa försök att skapa för dig animeringen av en kanin som löper genom det höga gräset. Där är han. OK. Så han är inte igång ännu, men han är stod där i det höga gräset. Nu om jag var en animatör, i den gamla skolan version av animation, vad jag skulle göra är att jag skulle producera en bild av denna kanin i gräset. Och då skulle jag producerar annan picture-- annan vad de kallade cell-- att hade kaninen endast något flyttas. Och sedan en tredje som hade kanin flyttade lite längre. Och jag skulle producera en hel sekvensen av dessa celler. Några där kaninen är över på den vänstra sidan. Och sedan rör sig långsamt, en med ett mot mitten. Och sedan från mitten över till höger. Och om jag var då, egentligen lycklig, kunde jag sätta ihop och jag kunde animera dem. Och det finns min kanin löper genom gräset. Det är min stora PowerPoint trick för dagen. OK. Så det här är så bra som det blir. OK. Så här en gång, här är vår kanin körs genom gräset. TALARE 19: Igen. BRIAN Scassellati: One mer tid, okej. Det är din kanin. OK. Så idag vad vi ska göra är att vi kommer för att försöka automatisera processen vid produktionen av dessa celler. Vi kommer inte riktigt komma till den punkt av att kunna sätta dem alla tillsammans. Men vi kommer att försöka att automatisera processen att generera denna sekvens. Och det är mycket av det animation idag är. Det vill säga, behöver du inte göra saker nödvändigtvis genom att dra allt för hand. Vi använder en dator för att automatisera delar av denna process. OK. Så låt mig byta nu vår CS50 IDE. Och jag har skapat för oss-- och låt jag zooma in här lite bit-- jag har skapats för oss en utgångspunkt. Varje gång som vi ber dig att sitta ner och skriva en bit kod, vad vi verkligen ber dig att göra är vi ber att lösa ett problem. Och det sätt som du bör tycker om att göra det är genom att starta med några enkel del av denna lösning. Och sedan bygga ut från den del. Och det är vad vi ska göra idag. Så snarare än att försöka allt på en gång till skriva hela gäng kod som är kommer att producera de 10 animerings celler, vi kommer att starta i stället med ett stycke som fungerar. Och då kommer vi att bygga en lite runt det och lite mer och lite mer. Nu är bra lösa problem på detta sätt är att det gör att du kan starta alltid med något som du vet fungerar och införa en gradvis förändring. Och det är ett bra sätt att lära sig att koda, eftersom varje gång du gör en förändring, ser du vilken inverkan den har. OK. Så här är vår utgångspunkt. OK. Så i början av min fil, Jag har hash #included stdio.h. Det är så att jag kan få printf () ska fungera. Jag då jag har min huvudsakliga funktion. Och detta fortfarande ser lite svårbegripliga eller obskyr till några av er. Det är ok. Allt den säger är att den viktigaste funktionen tar ingen arguments-- void medel ingenting i C. Och det avkastning genom konventionen ett heltal. Huvud returnerar alltid ett heltal, oftast en kod säga saker gick bra eller inte att gå bra. OK. Men huvud måste ha att utgöra för oss just nu. Jag har sedan i tre rader kod. Och tillsammans med varje rad kod, har jag lagt en kommentar. Nu en av de saker som Vi kommer att insistera på att du gör, och det är en så viktig praxis programmering, är att alltid kommentera din kod. Skriv alltid ner i en Engelska kommentar något att du tror att kod är tänkt att göra. På så sätt, senare när du kommer tillbaka till det kan du titta på det och du kan säga, åh, jag minns vad jag var försöker göra med detta. Eller när en TA sitter med dig försöka hjälpa dig på kontorstid, De kan titta på detta och gå, jag se vad du försökte göra, utan detta är vad som verkligen händer. OK. Så jag har tre delar till min kod, Jag tänker först och främst print ut några punkter i början. Jag ska sedan skriva ut min extremt snygga kanin. Och sedan några bit av punkter i slutet. Och dessa tre utskrifts uttalanden bör ser bekant för dig på denna punkt. Allt som jag gör i vart och ett av dem är jag utskrift av en sekvens av tecken. Det finns inga inblandade variabler. Allt är bara platt. OK. Så om jag går ner nu till min terminal-- låt oss se om jag kan få den tillbaka out-- och jag kommer att skriva klart igen. TALARE 20: Har vi använder Dubbla snedstreck kommentera? BRIAN Scassellati: Kan Använd double-- ja. Det finns flera sätt att lämna kommentarer i C. One sätt är att använda den dubbla snedstreck. Det andra är att använda ett snedstreck och en stjärna och sedan avsluta med en stjärna och ett snedstreck. Okej. Först av allt, jag ska börja navigera runt här. Så om jag går till min hemkatalog Jag har ändrat kataloger där, Jag kommer att titta och se vad som är i den katalogen, ls, lista ut. Jag kommer att se att jag har fick två underkataloger. Låt oss göra detta lite större här så att vi kan alla se det. Jag kan se att jag har fick två underkataloger. Jag ska byta katalog att gå in i arbetsutrymmet. Och jag kommer att bara skriva ut en del av det, och sedan bara trycka Tab. Och det kommer att fullfölja resten för mig. Fancy. Jag ska titta och se i arbetsytan. Och just nu jobbar jag på SuperSection att vi undervisar just nu. Så jag ska gå in i den katalogen. Och slutligen, titta och se. Och jag har fått den filen bunny.c. Okej så låt mig klart. Och jag kommer att now-- igen jag fortfarande vistas i den katalogen och det säger att jag är i att SuperSection katalogen. Jag kommer att gå vidare och göra mitt program kanin. Och det kommandot, gör kanin, samtidigt låter lite konstigt, även åberopar klang kompilatorn. Och det produceras för mig en utgång som är en körbar funny-- en körbar fil som heter kanin. OK. Jag kan då, och detta låter ännu värre, kör kanin. OK. Och låt oss se vad det gör. OK. Det är en liten bit av vad jag hade förväntat mig. Jag har min kanin bild i det, men jag typ av ville helt av sig själv. Vad har jag missat? TALARE 21: Slash l eller snedstreck n. BRIAN Scassellati: Slash n. OK. Så låt oss gå tillbaka hit. Och jag ska komma ur det. Och jag ska gå tillbaka till detta. Och låt oss ta en titt nu från min huvuduppgift här. Så vad skall jag göra? Jag vill avsluta linjen. Så jag ska sätta i en kommentar. Jag ska sätta in en printf (). Och vad jag har att sätta in? / n. OK. Vad har jag att avsluta det med? Semikolon. Okej. Nu, ett av de riktigt viktiga saker är att se varje gång du gör en ändring i koden, att du sparar det. Om du inte har sparat din kod, du är kommer att märka en liten stjärna uppe. Och den stjärnan säger att du har inte sparat denna kod. Om jag sammanställer det just nu, är det inte kommer att återspegla något av dessa förändringar, eftersom kompilatorn tittar på filen som är på skivan, inte den fil som är öppnas i din editor. Okej. Så låt oss spara den och sedan går vi ända fram hit, kom tillbaka ut. Kom ner till min terminal. Och låt oss rensa rymden igen. Och vi kan gå vidare och ytterligare tid att göra vår kanin program. Och kör kanin. Det fungerade inte heller. Fel snedstreck. Så om man tittar på vad jag har, ställde jag en / n där, men jag hade fel snedstreck. Allt som datorn gör är mycket tydlig. OK? En litet misstag av skiljetecken, och plötsligt du inte får vad du vill. Okej. Så låt oss zooma ut igen. Vi ska gå tillbaka. Väl göra det mycket snabb reparation. Vi kommer att sätta rätt snedstreck i. Vi sparar den. Vi kommer in igen. Av någon anledning är det inte vara lycklig, men låt oss gå vidare och vi ska gå tillbaka till terminalen här. Rensa upp. Vi kommer att zooma in. Och en gång, ska vi göra bunny. Och nu mycket riktigt, det fungerar. Hurra. OK. Så låt oss försöka göra detta lite mer generellt. Låt oss se om istället för att bara utskrift en viss ram, Låt oss se om vi kan göra det här så att vi kan få alla 10 av dessa animerade ramar att vi ville ha. Så återigen, låt oss ta detta ett steg i taget. Låt oss först generalisera det, inte så att jag gör alla ramar, men så gör jag något ram som jag kanske vill. Så vad är skillnaden mellan ramarna? Är kaninen samma sak? PUBLIK: Ja. BRIAN Scassellati: Ja. Vad är skillnaden? PUBLIK: Position. BRIAN Scassellati: Dess läge, rätt? Och hur gör jag kontrollera dess position? Hur många prickar jag sätta i början och hur många prickar Jag är sätta på slutet. Så jag hade fem på början och fem i slutet. Låt oss ersätta det fem med en for-loop. OK. Och jag kommer att skapa en för loop nu som kommer att säga, Jag kommer att skriva ut ett visst antal av prickar i början. Jag kommer att använda en variabel. Låt oss säga, hur jag som räknaren i mitt slinga. Och jag kommer att förklara den där uppe. Och sedan i for-slingan Jag måste göra tre saker. Det första jag behöver göra är jag måste initiera i. Vad ska jag initiera det börjar bli? 0. OK. Då måste jag säga, vad är termine skick? När ska jag sluta? Nå hur många punkter gör du vill skriva ut på den här? PUBLIK: Five. BRIAN Scassellati: Fem igen? Vad sägs om låt oss göra något annorlunda, gjorde vi fem. Låt oss visa att det är annorlunda. TALARE 22: Två. BRIAN Scassellati: Två. OK. Så om jag vill ha två punkter, vad ska jag sätta här? PUBLIK: Tre. BRIAN Scassellati: Tre. OK. Hur många gånger är att kommer att gå igenom? Det kommer att gå igenom tre gånger, 0, 1 och 2, eller hur? Okej, låt oss gå tillbaka till två. Nu får vi två punkter. Och vad gör jag vill göra varje gång jag går genom öglan? Vad måste förändras varje gång jag går igenom? TALARE 23: Lägg till en prick. BRIAN Scassellati: Jag måste fortsätta. Jag kommer att lägga till en punkt. Jag kommer att skriva en punkt, varje gång genom slingan. Men hur ska jag hålla reda på hur många gånger jag har varit genom öglan? Jag använder mig att variabel, den räknaren. Så varje gång igenom, jag kommer att inkrementera räknaren med ett. Nu är det samma för mig som säger i = i + 1. Det är ok. Jag kunde göra det that-- Jag gillar stenografi, så jag kommer att säga att jag ++. OK. Låt oss göra samma sak här nere på botten. Bara jag slags gjorde det en. Jag kommer att låta er gör detta ett helt. Okej. Så vad ska jag skriva här? Här är min for-loop. Jag kommer att göra en printf () och jag kommer att göra det så att jag bara skriva ut en prick på denna botten. Vad ska jag skriva inuti denna för loop nu? Jo, först och främst vad variabler ska jag använda? TALARE 24: j. BRIAN Scassellati: Jag skulle kunna använda j. Kan jag använda samma en? Kan jag använda mig igen? Yeah. Det är OK, eftersom Is som jag använder här uppe, Jag behöver inte dem igen när Jag komma ner till denna punkt. Så vad ska jag initiera jag till? HÖGTALARE 25: 10. BRIAN Scassellati: 0. Vad ska jag kontrollera? Hur många punkter måste jag nu i slutet om jag har två punkter i början? Jag behöver åtta i slutet, så vad ska jag kolla, jag mindre than-- Publik: Sju, åtta, nio. BRIAN Scassellati: Jag hörde sju. Jag hörde åtta. Och jag hörde nio. OK. Så vi är alla i höger ball-- Jason säger 10. OK. Om att jag behövde två punkter för den första en, hur många gör Jag-- och jag behöver åtta punkter för sist en-- Jag satte en två upp ovan, vad ska jag lägga ner nedan? PUBLIK: Åtta. BRIAN Scassellati: Åtta. Eftersom det kommer att räkna noll till sju. Och det är åtta gånger genom slingan. OK. Och vad ska jag göra i slutet? PUBLIK: i ++. BRIAN Scassellati: i ++. Okej. Så det är ser ganska bra där. Låt oss prova det och låt oss se vad det gör. OK. Så vi kommer att spara den. Trevligt och sparas. Vi kommer att zooma ut. Vi ska försöka här i terminalen. Vi kommer att zooma in. Oj. Vi ska, en gång, göra vår kanin program. Och gå vidare och utföra kaninen. Och det är det. Så det är vår kanin. Om det har två punkter i början och åtta punkter ut i slutet. Alla fortfarande med mig? OK. Så vi byggde upp. Vi byggde en kanin, en viss bildruta. Nu har vi kunnat generalisera att för att bygga mer, olika typer av ramar. Nu går vi vidare, och har det generera inte bara en ram, men låt oss generera 10 ramar, där vi långsamt gör kaninen gå all vägen över fältet. Okej. Låt oss gå tillbaka. Och vi ska försöka nu. Så vad gör jag verkligen behöver ändra här? Vad behöver jag för att ändra? TALARE 26: måste du först ändra antalet punkter maximum i början. För om vi gör 10 punkter, det kommer att behöva upp till skala. BRIAN Scassellati: Ja. Så just nu har jag det slags kabelanslutet att alltid göra två punkter i början och alltid gör åtta punkter i slutet. Jag vill bygga en annan slinga, eller hur? Eftersom jag inte vill bygga bara en kanin bild, Jag vill bygga 10 kanin bilder. Så jag behöver för att bygga en annan slinga, och när jag går igenom denna slinga, Jag vill ändra hur många prickar jag ut i början och hur många punkter jag ut i slutet, baserat på vilken cykel genom öglan Jag är i. Okej. Så låt oss få en annan disk. Någon har före nämnda j, så vi kommer att göra en annan j. Och nu ska vi bygga en annan för loop. Vad går insidan som loop? Det här måste gå innanför slingan, eller hur? Har kaninen har att gå in slingan? Behöver jag en kanin i vart och ett av dessa 10 ramar? PUBLIK: Uh-huh. BRIAN Scassellati: Ja. Jag vill ha en kanin i varje av de 10 ramar, eller hur? Vad sägs om prickarna på Till slut behöver jag det? OK. Så jag kommer att dra in dem alla. Jag kommer att belysa alla detta, och jag kommer att slå Tab. Och det kommer att driva dem över lite, så att det är lätt för mig att se vad som finns i slingan. Och sen ska jag avsluta det. Låt oss säga. OK? Nu, i denna slinga som Jag är building-- hoppsan, göra det så att du kan see-- Jag har min disk j. Jag började på 0. Hur många gånger vill jag att gå igenom denna loop? Publik: 10 gånger. BRIAN Scassellati: 10 gånger. Så vilket nummer ska jag sätta här? Publik: 9, 10. BRIAN Scassellati: 9, 10, Någon måste säga 11, eller hur? Jag ville ha två punkter före och satte i mindre än 2. Jag ville ha åtta punkter, Jag satte jag mindre än 8. Nu vill jag gå igenom 10 gånger, så jag satte j mindre than-- PUBLIK: 10. BRIAN Scassellati: 10. Det går vi. Och vad gör jag i slutet för att j? ++, Inkrementera den. OK. Nu, här är den knepiga delen, vad är kommer att hända just nu om jag gör det? Kommer jag att skriva ut 10 bildrutor? TALARE 27: Jag tror de alla kommer att vara densamma. BRIAN Scassellati: De kommer alla vara samma, eller hur? Eftersom alla av dem pågår fortfarande att sätta två punkter i början. Men jag vill inte att de alla till har två prickar början. Hur många punkter gör jag vill i början? PUBLIK: Ändra. BRIAN Scassellati: Jag vill att det ska förändras, eller hur? Så vad har jag här som är föränderliga varje gång slingan går igenom? PUBLIK: Antal punkter, j. BRIAN Scassellati: j, antalet punkter. Så jag kan ändra detta är j. Första gången genom loop, vad som kommer att bli? Vad gör jag satt j till först? PUBLIK: 0. BRIAN Scassellati: Så hur många gånger jag kommer att göra detta? 0. Den andra gången genom slingan, j: s kommer att bli en eftersom jag öka det. Hur många prickar ska jag skriva ut? 1. Tredje gången genom slingan, hur många prickar ska jag skriva ut? PUBLIK: Tre. BRIAN Scassellati: j kommer att bli tre. Hur många prickar ska jag skriva ut? Åh, förlåt, j kommer att bli två. Hur många prickar ska jag skriva ut? PUBLIK: 2. BRIAN Scassellati: 2. OK, så jag kommer att hålla uppräkning att när vi går längs. Vad sägs om där nere? Vad går här nere? Jag vill inte ha 8 alltid i slutet längre? HÖGTALARE 28: 10. BRIAN Scassellati: Jag vill ha 10 punkter? Jag vill att det ska ändra, alltför. Så hur gör jag vill att det ska förändras? PUBLIK: [OHÖRBAR]. BRIAN Scassellati: Tja, om jag har fem punkter i början, Hur många dot: s får jag i slutet? PUBLIK: Five. BRIAN Scassellati: Om jag har sex punkter i början, Hur många får jag i slutet? PUBLIK: Fyra. BRIAN Scassellati: Om jag fick sju punkter i början, Hur många får jag i slutet? PUBLIK: Tre. BRIAN Scassellati: Om jag har fick j prickar i början, Hur många får jag i slutet? 10-j. OK. Så låt oss prova det ut. Så jag kommer att rädda vår kanin program. Än en gång vi ska zooma ut. Vi ska gå ner till vår terminal. Vi kommer att klara det. Och zooma in. Vi ska göra vårt bunny program igen. Och vi kommer att köra den. Hoppsan. Vänta, låt oss zooma ut. Fick jag 10 bildrutor? Bra, hur många kaniner ser jag där uppe? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Jag fick 10 bildrutor. Är de alla samma? PUBLIK: Ja. Nej. BRIAN Scassellati: Nej Det första en, den kanin är långt till vänster. Och här borta, är kaninen långt på TALARE 29: Rätt. BRIAN Scassellati: Så, vad gjorde jag glömmer att göra? TALARE 30: Starta en ny rad. BRIAN Scassellati: Jag glömde att starta en ny linje, igen. Samma misstag som jag gjorde förut. Okej, låt oss fixa det. Nu, jag har fortfarande koden i där för att göra en ny rad. Varför fungerade det inte? TALARE 31: Det är inte inne i slingan. BRIAN Scassellati: Åh, det är inte inuti slingan. Det är rätt. Det sitter här utanför. Och för slingan är allt det är insidan som text. Så jag kommer att flytta detta inne i loopen. Och jag ska Tab framför det till visar att det är på rätt plats. Och nu ska vi spara det igen. Vi kommer att zooma ut. Vi kommer att gå över till vår terminal. Zooma in. Vi kommer att göra om vårt bunny program. Och nu, nu har vi fått våra 10 bildrutor. [APPLÅDER] BRIAN Scassellati: OK. So. Här är vår kapslade loopar. Vi skulle kunna generera i inre slinga hur många punkter som jag ville att skriva ut i början, i slutet. Och den yttre slingan styrs hur många bilder jag byggde. Vi började med en liten kärna av problemet, och vi byggde ut från den punkten. Okej. Låt oss göra ett steg. Är du redo? Det finns en sak här där vi har faktiskt typ av fick mer komplicerade än vi behöver. Låt oss ta en titt. Så i vårt kanin program, om jag zooma ut här, Jag faktiskt göra en del av samma sak om och om igen. Vad gör jag det är typ av samma sak upprepades två gånger? TALARE 32: Skriv prickar. BRIAN Scassellati: Ja Jag skriva ut dessa punkter två gånger. Egentligen skulle jag ha den här kommentaren här nere. Jag skriva ut vissa punkter på början, ända fram här. Och då jag skriva ut vissa punkter i slutet. Och jag gör typ av exakt samma sak. Vad vi kommer att börja arbetar inom de närmaste veckorna är att kunna ta dessa block av kod som vi använder om och om igen, och genom en process kallas abstraktion, vi kommer att dra ut dem och skriva dem en gång så att vi sedan kan återanvända dem om och om igen. Så låt oss prova det. Är du redo? Vi kommer att ta detta block av kod. Och jag kommer att ta det därifrån. Och jag kommer att define-- ned på botten, Jag kommer att skriva en ny funktion. Det kommer inte att återvända något. Och jag kommer att kalla det printDots. Det kommer att ta ett argument, ett heltal som säger howManyDots Jag borde skriva ut. Och nu i stället för att skriva ut j prickar, jag print berätta howManyDots jag ska skriva ut. Och det finns ett litet problem här. Någon som vet vad det är? Vad har jag som är listade här som inte är definierat? PUBLIK: [OHÖRBAR] BRIAN Scassellati: Nå hur många prickar definieras rätt upp här, men jag använder den variabeln i. Så jag kommer att ta att variabeln i och jag kommer att definiera det i här stället. Så nu det kommer att stay-- oops, fick Caps Lock på somehow-- jag kommer att hålla nere i här. Så nu här är min lilla funktion eller sub-rutin, och det står, hur många prickar ska jag skriva ut? Och det kommer att gå igenom denna loop och skriva ut dem om och om igen. Jag kan sedan ändra mitt program här. Och vad jag kallar denna funktion? printDots. Så jag ringer printDots. Hur många punkter jag vill skriva ut första gången före kaninen? PUBLIK: j. BRIAN Scassellati: j. Hur många punkter jag vill skriva ut i slutet, efter kaninen? 10-j. Och det finns en sak som jag saknar. Som du såg i föreläsning idag, vi kommer att förklara printDots upp ovan för att ge prototypen. OK. Så vad jag har gjort är att jag har försökt att isolera det åter del av kod att jag har gjort om och om igen. Och jag har försökt att dra ut så att allt som finns i ett rum. På så sätt, om jag har fel någonstans, Jag behöver bara fixa det på ett ställe. Okej. Så låt oss spara den. Och låt oss se till att det fungerar. Så låt oss gå ut. Vi ska gå igen till vår terminal. Vi kommer att zooma in. Vi kommer att göra det bunny process. Oh. Och det har gett mig en varning. Vad det säger mig? Väl i någon av dessa gånger, du alltid vill för att bläddra fram till den allra första error-- nu på den här, har jag bara fick ett. Det säger mig i bunny.c, on line 8, kolumn 9, det finns ett problem. Den säger, du har förklarat detta variabel i och du inte har använt det. Nu normalt, det är inte det värsta felet. Det är en lätt att åtgärda. Och i själva verket kan vi gå igen. Vi kan gå tillbaka till bunny. Och i detta fall, alla vi behöver göra är att bli av med i, eftersom vi inte använder Jag inom huvud längre. Vi bara använda det inom vårt under rutin. Så låt oss spara den. Vi ska gå tillbaka. Och zooma in. Vi ska ännu en gång göra bunny. Och det är återigen våra 10 bildrutor. OK. Varje gång du har gett en procedure-- Ja. TALARE 33: Jag har en-- jag är förvirrad. Kan du gå tillbaka till koden? BRIAN Scassellati: Japp. TALARE 33: Så när du skrev prototypen, argumentet du hade namngav hette howmany? Men, below-- BRIAN Scassellati: Oh yeah. HÖGTALARE 33: --called dem något annorlunda, jag förstår inte. BRIAN Scassellati: Varför är de olika. Så det är en stor fråga. Så frågan var, upp Här skrev jag howmany, och nere, skrev jag howManyDots. Anledningen är att i din prototyp, det är faktiskt inte uppmärksam till de namn som du sätter in. Allt som verkligen bryr sig om är att det är ett heltal. Det vill veta formuläret av vad du lägger in. Nu stylistically-- oops-- vad jag borde gör, är jag vilja göra dessa match. OK. Eftersom det kommer att hålla det lättare för mig att komma ihåg. Men det var mitt misstag Yeah. HÖGTALARE 34: Och så för prototyp för att arbeta, bara skriver den linjen, skriver prototypen, gör denna funktion som kommer precis under det att gå till slutet och hämta vad det betyder? BRIAN Scassellati: Vad det innebär är när kompilatorn går igenom, den går från toppen av koden till botten. Och vad denna prototyp är, är det är i princip ett löfte. Den säger, det kommer att bli en funktion som definieras någonstans. Det kommer att bli kallade printDots. Och det kommer att ta ett argument det kommer att vara ett heltal och det kommer att återvända ingenting, void typ. OK. Jag lovar dig att det kommer att bli definieras någonstans på vägen. Men varje gång du ser att när du går ner genom resten av mitt huvudsakliga funktion, jag vill du att behandla det som en funktion som tar ett heltal ingång. Och så när kompilatorn går ner genom detta, ser det det löftet. Och när det blir ner, håller kommer, fortsätter att gå, den finner första gången printDots nämns. Och den säger, Åh, du ger mig j. j är ett heltal. Tja du lovade mig som skulle vara ett heltal och det är rätt. Det är ok. Och slutligen, ned längst ned, innan jag kommer till slutet av min fil, jag gör bra på mitt löfte och jag definierar det. OK? HÖGTALARE 35: Så saves-- det Programmet kommer att spara tomma utrymmen att det går fram och fyller i slutet? BRIAN Scassellati: Det är inte om minnesallokering. Det är faktiskt bara om vad typ du förväntar sig att se. Om denna sak har en argument, eller fem argument? Bör ha det heltal vara ges till den eller strängar? Det är allt det ser göra är att kontrollera, du ger mig rätt sorts argument. OK? Okej. Låt mig avsluta med en annan bit att titta på. ASCII-konst är inte den stora modellen av animation som det är idag. Men vissa människor naturligtvis ta saker och de driva det till sina ytterligheter. Detta är, som David visade i föreläsning, en bit kod att du bör under inga omständigheter Försök att duplicera er. Eftersom det är fruktansvärt stilistiskt. I själva verket är det utformad för att vara så svårt som möjligt att läsa. OK. Så, för att göra igen, låt oss zooma in här. Jag kommer att gå nu, ändra katalog. Jag kommer att gå upp en nivå, tillbaka till min arbetsyta. Jag kommer då att ändra katalog till detta annan katalog som jag har skapat. Och detta är International Förvrängd C Programming Contest. Förvrängd medel som hårt som möjligt att förstå. Så snälla, inte vara rädd om du ser på detta och gå, kan jag inte läsa det. Det är poängen med det. OK? Men, har vi här underbart program som jag kommer att titta på genom att bara skriva mer. Och låt oss se om jag kan zooma ut bara lite, så att du kan se det Och detta är programmet. Den är uppkallad endo.c. Och det ser ut så här hink med typ av bokstäverna F-L-U-I-D i den. Detta är faktiskt ett program. Den är skriven i de mest obskyra sätt att författarna kan tänkas Skriv det. Men det är en underbar liten bit som genererar en modell för fluiddynamik. Och så ska vi ge denna modell en ingång som ser ut så här, av en staired set av behållare med en del vätska, några flytande, upp på toppen. Och vi kommer att ha det simulera vad som händer med det. Så jag ringer denna funktion, endo. Och jag ska ge det som indatafil som jag har haft. Och det är vår symbol för ASCII-konst. En fullständig vätska dynamisk simulator kör på bara några rader kod. Nu vad är faktiskt riktigt häpnadsväckande om denna lilla program är att jag vill stoppa det nu, så jag kommer att använda det kommando? PUBLIK: Ctrl-C. BRIAN Scassellati: Ctrl-C. OK. Så jag kommer att använda Ctrl-C. C Det ska stoppa det. Jag ska rensa igen. Och nu ska jag åberopa program, köra programmet, använder sig som indata. Och vi får se vätske dynamiska simulering av den smälta. OK. Please do not let programmet vara det som förvirrar dig. Det är bara så att vi kan hamna på något häftigt och intressant. OK. Lycka till med dina problem uppsättningar. Vi ska vara glada att svara frågor efter klass. Tack mycket, killar.