JASON Hirschhorn: Välkommen till CS50 avsnitt, alla. Mitt namn är Jason Hirschhorn. Jag är en hel del yours TFs, men en hel del folk kommer förhoppningsvis att ansluta oss nätet, förlängning elever eller studenter försöker titta igenom avsnittet om de missade sitt avsnitt som vecka eller bara fånga upp om de ville att se över en del material. Så enligt den kursplan som alla av er har läst, korrigera? Jag ser en hel del av huvudet nickar. Sektioner ger dig möjligheter att utforska banans material i en mer intim miljö, liksom dyka in praktiska aktiviteter. Så det är i princip vad vi kommer att göra varje vecka. Vi kommer att gå igenom vad vi har bestämdes vara den viktigaste ämnen som behandlas i föreläsning, och de sannolikt också mest användbara och mest sannolikt att komma upp på problemsamlingar och i frågesporter, och i din kodning liv utanför CS50. Så vi kommer att gå in i dessa ämnen, diskutera dem, gå igenom dem, besvara alla frågor ni har, och då vi kommer att göra en hel del praxis problem i kodning. Du tog alla bärbara datorer, vilket är fantastiskt. Detta är en datavetenskap klass. Men en hel del av de övningar vi gör, du behöver inte din bärbara datorer för. Du kan göra dem på ett papper. Det är hur du ska göra dem på frågesporter. Och faktiskt, det är ett bra sätt att verkligen vet att du hur man gör något om du inte har Check 50 till förlita sig på eller göra för att förlita sig på, berättar du gjorde något fel. Så du är välkommen till kod på apparat eller run.cs50.net, som är annat verktyg som låter dig koda på nätet, men jag skulle också rekommendera, om du har inte provat det, med hjälp av ett ark av papper och försöker dessa metoder problem på ett pappersark. Eftersom igen, det är i slutändan vad du kommer att bli ombedd att göra på frågesporter. Så låt oss börja med våra agenda för idag. Vi kommer att gå igenom några normer för vår avdelning, då vi kommer att dyka in matriser, funktioner och kommandoraden argument, vilket är vad ni har täckt den gångna veckans föreläsning och sedan måndag, och vad du kommer att täcka mer i morgon. Och slutligen, vi ska att prata om pset2. Om jag kunde få en handuppräckning om du har inte tittat på problemet set två specifikation. Vi säger alla. Fantastic. Vi pratar om problemsamlingar i lite, men om du läser den problembild specifikation, det är allt du behöver göra. Om du läser detta innan du kommer till klass och avsnitt på tisdag, kommer du vara en bra position. Vi kan gå igenom problemet set, vilket är vad vi tänker att göra i slutet. Vi kommer att gå igenom logiken, se till alla är på samma sida. Jag vill att du ska kunna lämna tisdag känsla mycket bekväm med vad du behöver göra för denna veckas problem set, och om du inte gör det kommer jag gärna stanna efter och arbeta med er. Men det är en sak som du måste göra men jag tror skulle vara riktigt smart, bara att läsa problemet set specifikation av klassen på tisdag, som det låter som en Många av er gjorde. Jag börjar med en agenda varje klass så du vet vart vi ska. Detta är också till hjälp för personer som tittar online eftersom varje avsnitt är färgkodade, så om du vill komma tillbaka och bara titta på 10 minuter i stället än hela 90-minuters avsnitt, du kan bara gå till de färgkodade avsnitt och titta på den delen. Så jag har försökt att bryta upp dem i fin moduler som gör att du kan - om du vill komma tillbaka och se, eller andra elever som är precis tittar på en avdelning för att granska - att hitta specifik sak som de vill uppmärksamma och lära sig mer om. Söt. Normer. Jag är en FOP ledare på campus. Jag vet inte om någon gjorde FOP. Var det någon som gör FOP? En person gjorde FOP. Två personer gjorde FOP. Awesome. Så FOP är det första året Outdoor Orientering Program. Vi tar freshmen i skogen och göra de mest magiska upplevelser sina liv, rätt? Yeah. Låter lagom. Så jag ville bara starta vår allra första avsnitt med att diskutera vissa normer för klassen och vår relation eftersom jag tror de är mycket viktiga. Först och främst, så de av er som är min avdelning har fått och har diskuterats i det e-post, jag älskar det här. Detta är min favorit del av året. Jag har varit så upphetsad. Jag har varit här i flera timmar i dag. Jag har inte lämnat denna byggnad förutom att gå äta eftersom jag älskar CS50 avsnitt, jag älskar undervisning, jag älskar att arbeta med er. En av mina högsta prioriteringar, om inte min prioritet nummer ett, inte bara för denna klass men med min andra klasser och extracurriculars, är att stödja er, och hjälpa er, och göra mitt bästa för att se till att du killar har en underbar, rolig, produktiv, engagerande, spännande uppleva i denna klass. Det är vad jag strävar efter att. Det är därför jag älskar att göra det. Det är mitt nummer en sak, stödja er. Om du har några frågor om föreläsningen, problemet set, avsnitt, liv, även om du vill prata om liv, är du välkommen att nå ut. Du har mitt mobilnummer, du har min e-post adress, du har mitt Gchat. Du kan kontakta mig på någon eller alla av dem när, men förmodligen inte kommer att få en insats närhelst. Jag försöker och komma tillbaka inom 24 timmar. Ofta kommer det att vara inom 20 minuter eller 24 minuter. Jag borde ha sagt att för att göra det parallellt. Men du kommer att få ett svar ganska snabbt. Om du texten mig en timme innan problem set är beroende, kommer jag lugna er ner och göra djupandningsövningar med dig, men om du inte har startat, du förmodligen inte kommer att sluta, och Jag kan inte riktigt hjälpa dig där ute även om jag ska försöka mitt bästa. Så jag kommer att göra allt Jag kan stödja dig. Tveka inte att nå ut om det är i avsnittet igen, kontorstid om du ser mig, eller ens utanför. Jag är glad att inrätta en tid för att träffa och arbeta igenom problemen med eller gå över material. Så det är nummer ett, support. Jag ska göra allt jag kan stödja dig. Nummer två, möte i mitten. Så mycket som jag skulle vilja vara, jag inte allsmäktig eller allsmäktig eller allvetande, så jag vet inte alla tid om vad jag gör är att få över, om hur jag undervisar ämne hjälper dig att lära dig det, eller om du är förvirrad på ett ämne men inte räcka upp handen eller fråga mig eller skicka mig ett mail. Eller även om du, återigen, är förvirrad om något på problemet set. Om du inte når ut till mig, Jag kan inte veta det säkert. Jag ska göra mitt bästa för att checka in på er, se till att allt är går bra, försöker lära saker på ett sätt som kommer att bidra till de flesta av dina inlärningsstilar, men om det finns något jag kan göra, låt mig veta. Längs dessa linjer, om du vill ha lite hjälp med problemet set, jag är mer än glada att hjälpa dig med problemet set. Vi kommer att göra en hel del att mot den andra hälften av detta avsnitt. Men om du inte har läst det problemet sätter tillbaka och har inte sett på promenad igenom och har inte sett shortsen och förväntar mig att lära dig allt som har videofilmade på nätet eller att du kan hitta på CS50 Studien, det är inte riktigt rättvist att mig eller till dina andra kamrater. Så snälla, jag är mer än lycklig att hjälpa dig, men ni fick träffa mig mitten. Vi har massor av resurser för du finns på CS50. Jag nämnde några av dem. Ta nytta av dem. Om du är förvirrad, jag är mer än nöjd att hjälpa dig att förklara dem i ett annat sätt, men det är inte rättvist om studenter visar upp på kontorstid, har inte startat något, och det är Torsdag kväll och de väntar TF att gå dem genom varje enskild sak för problem som beror vid middagstid nästa dag. Vettigt? Återigen, vänligen träffa oss i mitten. Och slutligen, höga förväntningar. Jag kommer att vara betygssättning alla som är I min avdelning, eller scoring din problemsamlingar. Du har inte gått tillbaka problem ange noll eller ett ännu. Vi ber om ursäkt för det. Det tog oss ett tag att slutligen reglera sektioner och nu Vi kan börja betygssättning. Jag ska få dem tillbaka till dig så snart som möjligt. De är några av mina advisees ute. Jag ska få dem tillbaka till dig så snart som möjligt. Och för problem set två, vi ska vara på schema och vi börjar få dem att du ganska snabbt efter du sätter dem i. När du får ditt problem ställa tillbaka, du kommer att få poäng, som ni vet från läser kursplanen - korrekthet, utformning, omfattning och stil poäng. Du får också kommentarer. Kommentarerna är viktigare än poängen. Jag tror att det är säkert att säga att. Scores är bara ett nummer från ett till fem. Det är svårt att läsa in dem. Det är svårt att förbättra sig från dem. Men synpunkterna kommer att peka ut specifika saker du gjorde bra eller områden du kan förbättra och ge dig några idéer för framtiden eller alternativa sätt att göra saker. Så snälla, snälla, snälla läs igenom kommentarerna. Jag lägger mycket tid på dessa synpunkter. Vänligen läs igenom dem och inte bara bläddra ner till botten av PDF, leta efter din poäng, eller gå online och hitta din poäng, och sedan ignorera kommentarerna. Det är inte hur du är kommer att bli bättre. Det är inte hur du ska öka dina poäng i slutändan, precis genom att titta på poängen. Vänligen titta på dessa synpunkter. Och längs raden av höga förväntningar, igen, som jag sa, du kan görs från ett till fem. Tvåor, treor och fyror är stora majoriteten av poäng du kommer att få. Ones och femmor är båda riktigt sällsynta. Det finns alltid saker vi kan göra bättre. När jag koda ett program, det finns alltid något jag kunde ha gjort bättre. Så istället för att säga att du får fem hela tiden på allt och gjorde allt perfekt, tror jag inte någon av oss verkligen tror att vi - eller Förhoppningsvis gör vi inte allt perfekt hela tiden. Så bli inte orolig om du fick inte en fem. En fem inte mappa inte på en A, en fyra inte mappa inte på en B, en tre gör inte kartan på ett C. Det är inte hur poängen fungerar. Som David har sagt många gånger, terminen slut alla dina poäng och input från mig, din TF, träffas och fastställa ett slutbetyg för dig. Men återigen, det är inte fem, A, fyra, B, et cetera. Så jag kommer att ha höga förväntningar för er. Jag kommer att förvänta sig bra problem uppsättningar och jag kommer att ge dig feedback som sådan. Och det kommer inte att betyda att du är kommer att få en sämre kvalitet. Du är graderade i termer av dina framsteg från vecka noll till kursens slut. Och slutligen, i termer av hög förväntningar i klassen, jag älskar när människor deltar. Jag förstår vissa människor känner sig mer eller mindre bekväm deltagande. Andra människor deltar inte genom att höja sin hand och pratar hela tiden. Men vi i denna klass kommer att vara gör en massa små problem, en hel del av mini frågor, och sedan några större kodning problem. Så definitivt arbeta dessa övningar ute när vi gör dem på din dator eller på ett pappersark. Men jag ska också ge dig lite tid innan någon har någonsin att svara på några av de frågor jag frågar. Så eftersom jag kommer att ge dig lite tid till tänka på det, eftersom vi kommer att göra saker på partner ibland, Jag kommer att förvänta sig att alla att vara engagerade något. Och i brist på en bättre term, det kommer förmodligen att vara cold calling, vilket är där alla kommer att ha en chans att tänka på svaret, och sedan Jag uppmanar er, och sedan du ska säga svaret. Oroa dig inte eller vara rädd om det. Jag har gjort det tidigare och vi har hittat att det är mycket mer framgångsrika, också läsa pedagogisk forskning om det till bestämma huruvida eller inte det var en bra taktik. Det är till stor hjälp, särskilt om du Ge eleverna tid att tänka på svar och låt dem inte bara komma ut och säga det rätt utanför bat. Men om du inte känner dig bekväm svara, jag är också ganska bra på avkänning det ut, och vi kommer inte att sätta dig på plats, särskilt på kameran, även om ingen av du är på kameran just nu. Så de är de normer jag har. En sak längs linjerna att träffa i mitten. Jag ska ge er mycket feedback. Vänligen ge mig feedback liksom. Det finns en hemsida, sayat.me/cs50. Så det är en ärlig feedback. Om du vill ge det under avsnittet, Jag får ett mail när det händer. Vi tar en paus i lite, så jag ska titta igenom den feedback då. Om du någonsin har någon feedback, vänligen ge det till mig där. Om du ger mig feedback på Q, det är underbart, men det är guiden som du gör i slutet. Men det kommer att vara vid terminens slut så Jag kommer inte att kunna ta något av det återkoppling och förvandla det till undervisning ni bättre. Så snälla, om du har några feedback, ge det till mig. Jag älskar feedback. Säkerhetskopiera till FOP, får vi respons hela tiden. Du kan ge mig plussidan, bra saker, deltan, saker jag kan förbättra. Du kan kommentera min outfits. Det kommer inte att vara så hjälpsamma, men du är Välkommen att kommentera på någon och allt. Snälla, snälla ge mig feedback. Jag värdesätter det mycket och det betyder mycket för mig. En mer norm, kul. Vi kommer att ha mycket roligt. Förhoppningsvis i den här kursen kommer du ha mycket roligt. Vi kommer att ha godis på avsnittet. Vi ska ha musik. Vi kommer förhoppningsvis att lära känna annan något bra, så jag vill ha detta är en rolig, engagerande upplevelse. Jag vet att några av er har somnat in föreläsningarna du hade tidigare idag, så förhoppningsvis som inte kommer vara fallet nu. Och om det är fallet nu, precis snarkar inte eftersom det kan fångas på kameran. Söt. Har du frågor, kommentarer eller funderingar innan jag går vidare om något vi har pratade om? Bra. Så vi kommer att gå i arrayer först. Detta är hur man gör en array. Vi har sett det här förut. Du har en datatyp, har du en namn, och då har du en storlek. Just här, jag vill skapa två matriser. Den första är en rad tecken, och den har 26 utrymmen. Den andra är en samling av värderingar, och den har tre utrymmen för tre heltal. Ja? STUDENT: Är alla dessa bilder tillgängliga någonstans för oss? JASON Hirschhorn: Bra fråga. Frågan var, är alla dessa bilder finns? Ja. Alla dessa bilder kommer att finnas tillgängliga, och i framtiden, ska jag maila dem till dig innan avsnitt. Men idag, eftersom det är den första vecka, vi hade en sen start. Så oftast får du dessa bilder, men de kommer att vara tillgängliga på nätet och Jag kommer att skicka dem till dig direkt efter klassen. Fler frågor? Så återigen, arrayer är lådor, i brist på ett bättre ord, som innehar flera delar av en datatyp, och de är bredvid varandra i minnet. Och så igen, detta är hur du kan göra två typer av matriser. Så efter du har gjort din array med att första raden - int poäng, fäste tre, stäng fäste - du vill initiera den. Du vill lägga några värderingar i det. Och detta är hur du lägger några värderingar i där, bara välja Indice och skriver numret. Låt oss dra detta på tavlan. Kan alla se? Alla kan se. Söt. Så det kommer att bli min array med namnet Scores. Som ni ser, det är storleken tre. Det finns tre rutor i det. Var och en kan passa vad typ av datatyp? STUDENT: Integer. JASON Hirschhorn: Ett heltal i detta. Vi skrev int poäng, och det första ordet är den datatyp som kommer att gå in rutorna i matrisen. Så jag kan passa tre. Varför har jag noll upp finns på bordet? Varför står det betyget noll är lika med 1? Påminn mig om ditt namn. STUDENT: Kurt. JASON Hirschhorn: Kurt. STUDENT: Ja. JASON Hirschhorn: Varför? STUDENT: Eftersom det första indexet är noll, börjar vi räkna på noll. JASON Hirschhorn: Så vi börjar räkna vid noll. Det är precis rätt. Detta är den förvirrande delen och vilja resa upp dig, speciellt när du är försöka iterera genom arrayer, som vi ska göra i en bit. Vi börjar räkna vid noll. Så om jag vill hänvisa till den första box, det är inte lådan en. Tyvärr är det box noll. Den andra är en låda, och i detta fallet, är den tredje i en ruta två. Vad sägs om ruta tre? Var är ruta tre? Eller om jag vill göra poäng, fäste tre, nära fästet, vad är det? Så du sa nulltecknet. Alla andra tankar? Vad är poäng fäste tre fäste? STUDENT: Det finns inte riktigt eftersom du definierat endast som värderingar, fäste tre. JASON Hirschhorn: Så du säger Det finns egentligen inte. I vissa fall, när vi har att göra med strängar, vanligtvis vi ska sätta ett null tecken i slutet. Vi kommer till det i en sekund. Men i detta fall finns finns ingen tredje rutan här. Så den sista rutan i varje array är storlek minus 1. Så om vi har en samling av storlek n, den första rutan är noll, är det sista en vid n minus 1. Och i det här fallet, existerar det inte. Det finns något här i minne men det är inte vårt. Vi äger inte det. Vi ber inte om det. Så om vi försöker komma åt det, vilket vi kommer gör i en bit, vi kommer förmodligen att hamna i trubbel. I det här fallet, jag initierar min array med tre variabler. Vi sätter en etta i ruta noll, två i fält ett och tre i ruta två. Har någon några frågor om att initiera en array? Så vi gick över detta just nu. Scores, fäste tre, nära Konsol, som inte existerar. Vi noll indexeras i datavetenskap, så vi börja räkna på noll. Den sista rutan tillgänglig för oss, är det den tredje rutan, men det kallas box nummer två. Nedtill är detta en alternativ sätt att initiera arrayer. Så istället för att skapa arrayen på ett linje, fyllning den första rutan, sedan den andra rutan, sedan den tredje rutan, du kan göra allt på en rad. Så i den linjen, båda uppsättningarna. Detta skapar samma exakta array som vad vi skapat här, men det bara gör det på en rad. Nu har vi skapat vår array. Vanligtvis när du skapar en array, du vill göra något med det, oavsett som är fyll den eller få saker ur det och skriva ut dem på skärmen. I det här fallet, kommer vi genom vår värderingar array, som vi initieras på den första raden här uppe i grått. Och sedan på den andra linjen, börjar vi iteration genom uppsättningen. Har någon några frågor om strukturen av en for-loop? Så detta är den för slingan. Vi har vår ursprungliga tillstånd, och sedan vår sista villkor, och då vi iterera, jag, varje slinga. Och i klammerparenteser i detta för loop, vad händer om jag skulle köra det här programmet? Kan någon berätta för mig vad vi skulle få? [? Matu? ?] Matu: Skriv ut alla poängen på varje rad. Det skulle skriva ut varje poäng på en separat rad. JASON Hirschhorn: Vad exakt skulle den ut? STUDENT: Det skulle skriva ut en, sedan två, sedan tre. JASON Hirschhorn: Exakt. Det skulle skriva ut en, sedan två, sedan tre, var och en på separata rader, eftersom vi går igenom arrayen och du kommer se att andra den printf uttalande, poäng i. Så på den första omgången genom vår för loop, lika i noll, vilket betyder att vi är få värdet på betyget noll - vilket, om vi går tillbaka till vårt schema, är en - och fylla i - Åh, säger c.. Det borde vara% d. Jag ska fixa det i lite när Jag räcker ut det till er. Men vi presenterar ett heltal så det borde vara% d rätt här, inte% c. Vad är% c för? STUDENT: Tecken. JASON Hirschhorn: Karaktär, exakt. Vad är det andra? Om du inte vill göra% d för en heltal, vad kan du göra? Elev: Jag. JASON Hirschhorn:% i, exakt. Så några frågor om iteration genom uppsättningen? Så vad händer om vi gör detta? Istället för att göra i är mindre än tre, vi i är mindre än eller lika med tre. Vad händer när vi kör den här koden? Ja, Annie? STUDENT: De kommer att skriva ut konstiga saker på fjärde raden. JASON Hirschhorn: Så du sa, är det kommer att skriva ut konstiga grejer på fjärde raden? Har någon ett svar på hennes fråga? Så oddsen är att när vi kommer till - så på den fjärde rundan genom vår för loop, precis som du trodde, Annie, det ska vara tjog konsol tre, vilket vi har redan räknat ut inte existerar, och vi kommer att försöka och åt att skriva ut den ut, använda det på något sätt. Så datorn kommer förmodligen bli arg på oss. Du har helt rätt. Det kan avsluta programmet helt och hållet. Det kanske skriva ut något verkligen konstigt. Du kan inte säga säkert. Oddsen är att det kommer förmodligen bli arg på du och bara sluta direkt. Men detta är ett vanligt misstag du har där du bara av med en i slutet, och detta är ett fel som kommer att plåga dig hela din kodning. Ett sätt jag gillar att göra är bara på en whiteboard, gå igenom varje iteration av slingan på handen eller på papper för att se vad som händer, och då du allmänhet inser, oh vänta, ska jag inte har gått till mindre än eller lika med tre. Jag borde ha stannat vid två, vilket är vad händer om ditt tillstånd är mindre än tre. Några frågor hittills? Söt. Så du har alla dina datorer öppen. Vi kommer att ge dig 02:58 minuter för att skriva ett program som skapar en array med heltalen en genom fem och sedan skriver ut varje heltal på en ny rad. Och om du har några frågor, upp handen. Jag är glad att komma med. Som sagt, låt oss ta tre minuter att skriva detta. Är alla OK om jag går till en nytt fönster och stänga detta? Jag är ledsen om du inte har haft en chans till slut, men vi kommer att göra det tillsammans just nu. Så upp på skärmen, har är jag # cs50.h, # include stdio.h. Kan någon berätta för mig vad dessa två linjer gör? Michael? STUDENT: De inkluderar biblioteken att CS50 gjorts och att Steve har sparas för dig att använda för att göra ditt liv enklare. JASON Hirschhorn: Så du sa att de omfattar bibliotek, en som CS50 gjort, cs50.h, och en som är bara standard, kommer med C-paketet, stdio.h. Vad menar du inkludera biblioteken, men? Kan du vara lite mer specifik? STUDENT: Det gör det så att du kan använda vissa kodord för att ha en fungera hända utan att behöva gå och göra funktionen c själv. JASON Hirschhorn: Kan du ge mig ett exempel? STUDENT: Gilla printf är en du kan använda. JASON Hirschhorn: Printf. Så du sa printf är en av dem funktioner där i stället för att skriver printf på egen hand, printf är ingår faktiskt i stdio.h, så du kan bara använda det och ta att det kommer att fungera. I stdio.h, om du öppnat den filen, skulle det omfatta hur printf verk, all kod för printf? Varför skakar du på huvudet? STUDENT: Eftersom header-filen bara innefattar funktionen deklarationen. JASON Hirschhorn: Exakt rätt. Huvudet filen innehåller bara funktionen deklarationen. Så i princip, när du kompilerar detta, slå Gör Count, som vi ska göra i en andra, vet kompilatorn att om du använder printf, printf existerar. Det kommer att definieras någonstans. Det är inte ett problem för dig att använda den. Och sedan senare, det ska inkludera ettor och nollor som faktiskt innehåller printf genomförande och sammanfoga dem med din kod. Hur gör du säker på att den innehåller ettor och nollor för, säg, få string? STUDENT: Få sträng är i cs50.h. JASON Hirschhorn: Höger. Så att säga att få strängen existerar, funktionen deklarationen. Men sedan de ettor och nollor, det binära fil som faktiskt innehåller genomföra hämta snöre? Hur gör du säker på att går med ditt program? STUDENT: Passera linker i kommandoraden argument. JASON Hirschhorn: Passera linker på kommandoraden argument. Hur gör du det? STUDENT: Det är-L linjen i clang JASON Hirschhorn: Exakt rätt. Du säger-L CS50, rätt? Det inkluderar de ettor och nollor. Elev: Men du gör det för dig, eller hur? JASON Hirschhorn: Exakt. Gör inte det för dig, men så småningom, du kommer inte ha Gör, eller måste du göra en göra på egen hand, så det är en bra sak att komma ihåg. Om du skulle använda en av dessa andra bibliotek, inte bara du har att skriva # include och då biblioteket. Du måste också koppla den i. Och dessa två saker är annorlunda. -L CS50 är annorlunda än # include cs50.h. Sedan har vi int main void klammerparenteser, och nu ska vi koden inuti main. Den första raden jag har här är en kommentar som säger, skapar en array med ints ett till fem. Vad är ett bra ord för att beskriva vad jag har just nu på skärmen, precis kommentarer inuti main? Vad kallar vi det? STUDENT: Pseudokod. JASON Hirschhorn: Pseudokod. Tack, Jeffrey. Det är precis rätt. Pseudokod. Har ni sett pseudokod innan? Räck upp handen om du har använt pseudokod innan problemet som en. Ungefär hälften av er. Jag rekommenderar starkt med pseudokod för att bryta ner problem i mindre, mer lätt att bita av bitar. Dessutom, om du gör det pseudokod du ha dina synpunkter redan i stor utsträckning inbyggd, så du behöver inte gå tillbaka och försöka lista ut vad du gjorde. Så kan någon ge mig denna första raden att skapa en array med ints en genom fem? Du? STUDENT: Int och sedan kan du ringa oavsett antal, och sedan fyrkant bracket fem. JASON Hirschhorn: So int tal, hakparentes fem. STUDENT: Lika med, och sedan klammerparenteser. JASON Hirschhorn: Lika med, klammerparenteser. STUDENT: Ett, två, tre, fyra. JASON Hirschhorn: Ett, två, tre, fyra, fem. STUDENT: Och sedan klammerparenteser och sedan semikolon. JASON Hirschhorn: Och lockigt hängslen och semikolon. Utmärkt. Skriv ut varje int på en ny rad. Kan någon annan ge mig att koden, snälla? [? Matu? ?] Gå vidare. STUDENT: För ( JASON Hirschhorn: För ( STUDENT: int i = 0 JASON Hirschhorn: int i = 0 STUDENT: Semikolon i mindre än fem. JASON Hirschhorn: Semikolon, Jag är mindre än 5. STUDENT: Semikolon, i + +. JASON Hirschhorn: Semikolon, i + +. STUDENT: Stängda parenteser, sedan öppna stag. JASON Hirschhorn: Stängt parenteser och två hängslen. Inuti tandställning? STUDENT: Och sedan printf "% d / n" JASON Hirschhorn: Sorry, hålla på. Printf "% d / n, stängt citat. STUDENT: Och sedan stängt citat, kommatecken, räkna, fäste jag. JASON Hirschhorn: Comma, räkna, fäste jag. STUDENT: Tyvärr, siffror fäste i.. JASON Hirschhorn: Numbers, fäste jag. STUDENT: Förlåt. Och sedan stängda parenteser, semikolon. JASON Hirschhorn: Stängt parenteser, semikolon. Jag kommer att spara det. Vi kommer att göra räkningen. Och hur kör jag räkna? STUDENT: omvänt snedstreck. STUDENT: Dot snedstreck - JASON Hirschhorn:. / Räkna, exakt. Tack. . / Räkna. Ett, två, tre, fyra, fem på nya linjer. Ser ut som det fungerade. Ja, Noah? STUDENT: Du kan också göra mindre än eller lika med fyra, som jag är mindre än eller lika med fyra? Finns det någon fördel att göra mindre än fem, eller bara ett annat sätt att skriva det? JASON Hirschhorn: Så frågan är du kunde ha gjort i är mindre än eller lika med fyra i stället för i är mindre än fem. Skulle det ha fungerat på samma? STUDENT: Det borde. JASON Hirschhorn: Ja. Det skulle helt ha fungerar likadant. Stylistically är det generellt sett mindre än, och du kommer att se i en sekund när vi strängar, kan du använda något heter strlen, som du har sett tidigare, för att få längden av strängen. Och du kan inte göra mindre än eller lika strlen. Du kan göra mindre än eller lika strlen minus ett. Så det är bara trevligare att göra mindre än strlen. Ja? STUDENT: Och i själva frågesporter, göra Vi måste ge synpunkter på vår kod också? JASON Hirschhorn: Frågan var i frågesporter, gör du måste ge kommentarer? Så vi ska prata mer om frågesporter när de kommer upp, men i allmänhet, en bra tumregel är när du är skriva kod, lämna kommentarer. Om du får koden fel men kommentera höger, kan du få några kredit både från mig om jag klassificera du på ett problem set eller på en frågesport. Så kommentarer är alltid bra att tillhandahålla. Söt. Räkna. Utmärkt jobb. Låt oss gå vidare. Strängar. Strängar. Vi har sett detta tidigare i föreläsningen. Det blåste mig när jag först hittade detta. Det förmodligen inte blåsa någons tänka på här, men det är OK. Strängar är arrayer av tecken, och de slutar med, som du sa tidigare, null terminator, som är detta / 0 karaktär. Om vi ​​ska dra en sträng på ombord, ska vi dra hit den. Så hur länge är denna sträng? Ursäkta. Hur lång är denna sträng? STUDENT: [OHÖRBAR]. JASON Hirschhorn: Four? Varför är det fyra? STUDENT: Eftersom femte plats ankommer på den null karaktär. JASON Hirschhorn: Så femte plats ankommer på den null karaktär. Så om jag skulle köra strlen på detta, skulle det ge mig fyra. Rätta. Och arrayen, men om jag skulle initiera denna array, hur många platser skulle jag be om? STUDENT: Fem. JASON Hirschhorn: Five. Jag skulle behöva be om fem, men jag kan bara sätta fyra tecken här eftersom jag måste sätta den null terminator på slutet. Så vi kommer att skriva in "ohai" och sätta null terminator i slutet. Vi ska säga detta är sträng s motsvarar detta. Vad är s fäste noll? s fäste noll, Annie? STUDENT: O. JASON Hirschhorn: O, exakt. s fäste en? s bracket fem? s bracket fem? STUDENTEN finns inte. JASON Hirschhorn: Finns inte. Exakt rätt. Cool. Eventuella frågor om förståelse strängar som arrayer av tecken? OK, då. En mer program för er. Skriv ett program som frågar användaren för en sträng sedan skriver ut varje tecken på en ny rad. Så låt oss ta tre minuter att skriva detta program, och sedan kommer vi att koda det som en grupp. Ursäkta. Visste du måste se det här? STUDENT: Nej JASON Hirschhorn: OK. Låt oss ta en minut att koda detta, eller åtminstone komma igång med det. Så du kan fortsätta arbeta, men jag ska att börja gå igenom det. Så som förut, har jag på skärmen # Include cs50.h, # include stdio.h. int main tomrum. Inne viktigaste är klammerparenteser, har jag två kommentarer, pseudocode. En är be om en sträng från användaren. Den andra är att skriva ut varje tecken på en ny rad. Så Anna, kan du ge mig fråga för en sträng från användaren? STUDENT: Printf. JASON Hirschhorn: Printf? STUDENT: Ja. ( JASON Hirschhorn: ( STUDENT: "ge mig en sträng. JASON Hirschhorn: "ge mig en str - oops - sträng. STUDENT: / n ") semikolon. JASON Hirschhorn: Avsluta strängen, slutna parenteser, semikolon. STUDENT: Ja. Och sedan nästa rad, sträng s = få strängen. JASON Hirschhorn: String s = få strängen. STUDENT: Ja. Och sedan () JASON Hirschhorn: () STUDENT: Semikolon. JASON Hirschhorn: Semikolon. Fantastic. Så jag kommer att få en sträng och Jag ska spara den i vad? Vad är variabel som heter som du har skapat? STUDENT: String s. JASON Hirschhorn: Den rörliga kallas s. Det är typ string. Exakt. Nästa sak vi vill är att skriva ut varje tecken på en ny rad. Vem kan ge mig den koden? [OHÖRBAR]? Kan du ge det till mig? STUDENT: Visst. JASON Hirschhorn: Låt oss göra det. Och ledsen. Jag gillar inte att upprepa vad du säger eftersom du får det rätt, men jag behöva upprepa det så att när de transkribera detta, kan de få alla texten ut på transkriptioner. Så du kan bara fortsätta prata. Tyvärr har jag att säga det över dig. Jag är ledsen, men - STUDENT: Det är bra. För int i = 0 JASON Hirschhorn: För int i = 0 Elev: Jag är mindre än - JASON Hirschhorn: Semikolon. STUDENT: Före detta, kan vi sätta en variabel så du får int namnet längd? JASON Hirschhorn: Åh, gör du inte vill sätta semikolon? OK. Så vad vill du göra efter noll? STUDENT: Jag vill få stränglängd av s och ange att en variabel? JASON Hirschhorn: OK, så hur gör jag det? Elev: Så du gör int längd = JASON Hirschhorn: Int längd = STUDENT: S-T-R-L-E-N. JASON Hirschhorn: S-T-R-L-E-N - STUDENT: Av s. Konsoler. JASON Hirschhorn: (s). STUDENT: Och så tror jag att du måste sätta ett semikolon mellan de två ints. JASON Hirschhorn: Ett semikolon efter noll? STUDENT: Ja. Lägg sedan ett semikolon efter det, och du säger, jag är mindre än längden. Jag är mindre än längden, vilket är variabeln. STUDENT: Och sedan semikolon. JASON Hirschhorn: Semikolon. Elev: Jag + +. JASON Hirschhorn: i + +. Det är vår för slinga. OK, inuti for-slingan. STUDENT: Och sedan göra printf. JASON Hirschhorn: Printf. STUDENT: Konsoler. JASON Hirschhorn: parenteser, citattecken. STUDENTEN parenteser, citationstecken,% c / n. JASON Hirschhorn:% C, OK. STUDENTEN / n. JASON Hirschhorn: / n. STUDENT: Stängt offerter. JASON Hirschhorn: Stängt offerter. STUDENT: Komma. JASON Hirschhorn: Komma. STUDENT: S. JASON Hirschhorn: S. STUDENT: Konsol i.. JASON Hirschhorn: Konsol i.. STUDENTEN och sedan stängas parenteser. JASON Hirschhorn: Stängt parentes. STUDENT: Och sedan semikolon. JASON Hirschhorn: Semikolon. Fantastic. Så låt oss spara detta. Gör stava. Oh boy. Jag har ett par fel. Första felet på rad 11, den säger, förväntad uttryck, och det är att ge mig ett fel som den andra int, det är fel. Det något fel runt där. Vet någon vad fel det är? Kurt? Elev: Jag tror att det är tänkt att vara ett kommatecken och inte ett semikolon. JASON Hirschhorn: OK, kommatecken istället för semikolon. Så är det allt vi behöver för att fixa? STUDENT: Nej JASON Hirschhorn: Vad annat behöver vi att fixa? STUDENT: Vi måste inkludera string.h. JASON Hirschhorn: Inkludera string.h. Där behöver jag inkludera det? STUDENT: Samma plats du bland andra grejer, rätt efter inkluderar stdio.h. JASON Hirschhorn: Vi får se om det går först eftersom allmänhet, jag gillar att fixa en sak först, och sedan köra det, och sedan se vilka fel vi får. Så vi kommer att rensa terminalen med styrning n, låt oss gör spell. Så ett annat fel på rad 11. Förväntad semikolon. Och jag är fortfarande få fel på denna linje. Så det har inte gett mig ett felmeddelande som säger det förstår inte vad strlen är, men det ger mig fel på denna linje, så vad är fel? Mark? Marcus. STUDENT: Måste man ta bort den andra int deklarationen? JASON Hirschhorn: Ta bort den andra int. Låt oss prova det här. Nu rensa terminalen. Gör stava. Fel. Underförstått förklara bibliotek funktion strlen. Så nu ser vi det felet. Vad behöver vi ta med? STUDENT: string.h. JASON Hirschhorn: Inkludera string.h, Vi ska göra # include string.h på toppen av skärmen. Låt oss spara, göra stava. Nu sammanställs. Så återigen, de saker som vi behövde för att minns linje 12 i vår för loop när vi ställer upp, int i = 0, längd = strlen (s). Detta är en fantastisk strategi. Stilen i detta är stor, utformningen av detta är stor. Vi kan gå in i dessa skäl senare, men detta sätt behöver du bara ringa strlen gång i stället för varje enskild gång du kör genom öglan. Men, måste du använda ett kommatecken där och du behöver inte int igen. Om du förklara både de variablerna tillsammans, du behöver inte int igen. Och sedan om du ska använda strlen, vilket är ett annat bibliotek Funktionen är inte inkluderade i stdio.h eller cs50.h, göra att du inkluderar string.h. Kurt? STUDENT: Alltså, om du inte behöver säga vilken typ längd, gör att menar att det måste vara en int? Du kan inte ha två olika typer det? JASON Hirschhorn: Så du kan har två olika typer. Längd är en int här, though. Längd är en int eftersom det är kommatecken och sedan samma sak. STUDENT: Så det förutsätter att det kommer att vara samma som den första? JASON Hirschhorn: Exakt. Vi kommer inte att göra detta nu, men du kan innefatta två variabler på samma linje genom att använda någon datatyp. Så int x, skulle y skapa två variabler. Så int x, y, om vi gör det, ger det mig en oanvänd variabel x och y eftersom Vi använder inte dem. Så sätter tomrum innan är bara en tjusiga trick om du inte använder något, för att använda det. Men som ni ser, skapar jag x och y på samma rad med ett kommatecken. Det skapar två heltal rätt där. Så ja, helt möjligt att skapa två saker på samma linje separerade med ett kommatecken. Låt oss bli av med dem, men. Så det finns spell. Tack killar för att koda det för oss. Låt oss göra det en gång, kör det. Ge mig en sträng. [OHÖRBAR], gjorde du det mesta av det. Vad är strängen? STUDENT: Hej. JASON Hirschhorn: Hej. H-E-L-L-O, varje tecken på en rad. Ser bra ut. Låt oss köra den igen. Alltid ska kolla för hörn fall. Vad är ett bra hörn fall att kolla? STUDENT: Ett antal? JASON Hirschhorn: Ett antal. Så jag ska sätta in 1, och den skriver ut 1. Det är inte fråga om brev, så det verkar som nummer fungerar. Bra hörnet fall att kolla. Vad är ett bra hörn fall att kolla? STUDENT: En tom sträng. JASON Hirschhorn: Hm? STUDENT: som en tom sträng. JASON Hirschhorn: Tom sträng. Så låt oss inte sätta in något. Och vad får skrivas ut? STUDENT: Ingenting. JASON Hirschhorn: Ingenting. Verkar som om det fungerar. Du kan prova fler hörn fall, men allmänt tal, är en annan data- bra att prova, liksom ingenting. Ingenting, noll, negativ är alltid bra saker att prova och saker som du ska testa, saker verkligen vi ska testa för och Check 50 kommer att testa. Eventuella frågor om spell.c? OK, låt oss gå tillbaka. Jag har en mer program för er att skriva. Det kallas students.c. Detta är ett program som frågar användaren om fem namn, sedan slumpmässigt väljer och skriver ut ett av namnen. Detta program är lite mer inblandade än de två sista vi skrev, så varför inte vi tar fem minuter att koda den individuellt, och sedan kommer vi koda den som en grupp. Detta program omfattar också vissa saker du kanske inte har sett förut, så om Har du en fråga om, hur gör Jag gör det, räck upp handen. Jag ska komma över och peka dig i rätt riktning. Men vi också göra det eftersom detta kommer att vara ett bra sätt att införa någon ämnen som är knepigt. Så det fungerar, eller hur? STUDENT: Ja. JASON Hirschhorn: När du sätter i ett Problemet set, det finns många sätt att göra det, men vissa är mer elegant än andra. Låt oss dyka i. # Include cs50.h. # Include stdio.h. int main tomrum, klammerparenteser. Inne i klammerparenteser, Jag har två kommentarer. Den första är att be, den användaren för fem namn. Den andra är, slumpmässigt välja och skriva ut ett av namnen. Så låt oss göra den första, be användaren för fem namn. Vem har frågat användaren om fem namn och kan berätta för mig hur man gör det? Endast två personer gjorde den första delen. Tre personer gjorde den första delen. Fyra, fem. Tom, hur gör du det? STUDENT: Du skulle deklarera en sträng och sedan namnet, konsol fem. JASON Hirschhorn: String namnge fästet fem. Så vad är denna linje gör, string name bracket fem? STUDENT: Du skulle deklarera en array av strängar. JASON Hirschhorn: Detta är en array av strängar. Hur många strängar går att passa in här? STUDENT: Fem. JASON Hirschhorn: Five. Utmärkt. Vi kommer att kalla det namn eftersom vi kommer att få flera sådana. OK, nästa? STUDENT: Och då du ha en for-loop - JASON Hirschhorn: För loop. STUDENT: - för i = 0. JASON Hirschhorn: for (int i = 0. STUDENT: Semikolon. JASON Hirschhorn: Semikolon. STUDENT: Jag är mindre än fem. JASON Hirschhorn: Jag är mindre än fem. STUDENT: Semikolon. JASON Hirschhorn: Semikolon. Elev: Jag + +. JASON Hirschhorn: i + +. STUDENTEN och sedan stängas parenteser. JASON Hirschhorn: Stängt parenteser, och sedan några klammerparenteser. Inne i klammerparenteser? STUDENT: Och sedan printf. JASON Hirschhorn: Printf. STUDENT: Öppna parenteser, namn% d. JASON Hirschhorn: Förlåt? STUDENT: Name. JASON Hirschhorn: Namn. STUDENT: Och sedan utrymme, och sedan% d. JASON Hirschhorn: Namn, utrymme,% d. STUDENT: Och sedan / n, och sedan stängs. JASON Hirschhorn: So namn, utrymme, % D / n, slutna parenteser. STUDENT: Comma, i + 1. Jag är ledsen. Stängt citat, och sedan komma, i +1. JASON Hirschhorn: Stängt citationstecken, kommatecken, i +1. STUDENT: Ja. Och sedan nästa rad - JASON Hirschhorn: i + 1. STUDENT: Ja. Och sedan nästa bild är namnen fäste i.. JASON Hirschhorn: Nästa rad är namnen fäste i.. STUDENTEN = få strängen. JASON Hirschhorn: = Get - kapitalet G-E-T - sträng. Oj, sorry. STUDENT: öppen, stängd parentes och därefter - JASON Hirschhorn: Öppen, stängd paren. STUDENT: Semikolon. JASON Hirschhorn: Semikolon. OK, så du initiera arrayen av strängar, namn, och sedan gå igenom en för slinga, och fem gånger skriva ut vissa uppmana till användaren och sedan lagra fem strängar. Har någon anpassningar av denna? Tom, jag tror alla håller med dig. Ser ganska bra. OK. Varför gjorde du i +1, men? STUDENT: Jag menar, inte har att vara, men i +1 så att det är namn man att nämna fem. Annars skulle det vara namnet noll för att nämna fyra. JASON Hirschhorn: Så du gjorde jag en eftersom det annars skulle ha skrivas ut noll till fyra eftersom det är hur datorer tror, ​​men människor egentligen inte läsa sånt. Det är en annan sak du stöter på. Ibland när du skriver ut något till användaren, kommer du vill göra det till en Lite snyggare, och gör I en i detta fall är en sätt att göra det vackrare. Jag ser också fem gånger, string namn är fem, är jag mindre än fem. Jag vet var du fick fem. Du fick det från mig berätta du fem namn. Men om vi ville göra koden en lite mer robust, en sak som vi kan göra är här ute, utanför int, vi kunde göra något sånt här, # Define, och vi kunde göra NAMN 5. Så i princip överallt där jag skriver kapital N, huvudstad A, huvudstad M, huvudstad E, huvudstad S, den strängen, kommer den att ersätta att med 5 i koden. Eller låt oss bara kalla det - vi kommer bara kalla det NUMMER. Så jag definiera alla caps NUMBER vara 5. Så nu var jag har nummer 5, jag kan ersätta det med versaler NUMMER. Och nu, om jag vill ändra antalet av namn, är allt jag behöver göra denna linje, linje fyra, där jag har # Define nummer 5, ändra det till 10, eller ändra det till 4. När din kod blir längre, du är inte kommer att minnas alla de platser du sätta hur många namn du ville ha, och i För att du inte missa något, är detta ett bra sätt att göra det, för att hitta något upp överst och sedan bara använda det uttrycket överallt i din kod. Marcus? STUDENT: Är det stilistiskt föredragna än globalt definiera en konstanta n? JASON Hirschhorn: Så är det stilistiskt föredra än globalt definierar en konstant n? Så du säger att du kan göra, int antal = 5? STUDENT: Har de konsonanter i C eller nej? JASON Hirschhorn: Eller const - i lika. Så du säger bara en global variabel? STUDENT: Ja. JASON Hirschhorn: Så stilistiskt, det finns ingen nödvändighet en rättighet svara, men båda dessa är bättre än att bara kasta dessa slumpmässiga siffror hela din kod. Vi kallar dem magic numbers. När jag tittar på din kod eller när någons läsa igenom det, de vill inte bara dessa slumptal som inte vettiga. Även numret 26, som i allmänhet är antalet bokstäver i alfabetet, det är bättre att definiera ALFABETET uppe och spara numret 26 i den strängen, om det är vettigt. Eller på problem som man, i stället för - igen, vi pratar inte om det här på tiden, men i stället för att bara kasta i ett 25 överallt eller en 10, kan du spara numret 25 som KVARTAL eller 10 som DIME, och det gör det lättare för vem som läser igenom din kod till förstår varför du valde det numret. Och även för dig, om du någonsin vill uppdatera din kod, det gör det lite mer robust. Yeah? STUDENT: Är den här koden kommer också att vara tillgängliga för oss efter? JASON Hirschhorn: Alla dessa koder att vi har skrivit tillsammans är kommer att skickas till dig killar och tillgängliga. Ja. Så be användaren om fem namn. Slumpmässigt välja och skriva ut ett av namnen. Vem gjorde den här linjen? Detta är den svåraste linjen här. Tyvärr, Tom. Du gjorde ett riktigt bra jobb, men Detta är lite knepigare. Marcus gå vidare. STUDENT: Tja först, kommer du att måste inkludera stdlib.h och time.h. JASON Hirschhorn: Så du säger på toppen, inkluderar två fler bibliotek. Du vill att jag ska inkludera S-T-D-L-I-B dot H, Standard Library, och vad var den andre? STUDENT: Time.h. JASON Hirschhorn: # include time.h. Så dessa är två fler bibliotek. Jag antar nu att vi kommer att använda funktioner som finns i dessa två, vilket är varför du behövde att inkludera dem? STUDENT: Så då, först är du kommer att vilja skriva srand. JASON Hirschhorn: srand. STUDENT: (tid (0) JASON Hirschhorn: Förlåt. Srand (tid ( STUDENT: 0. JASON Hirschhorn: 0. STUDENT:)), semikolon. JASON Hirschhorn: En annan sluten föräldra? Semikolon. Jag ska bara byta din nolla med NULL. Det kommer att göra ungefär samma sak, men allmänhet, ser du NULL, vilket Vi pratar om det här linje i en sekund. STUDENT: Stilistiskt bättre? JASON Hirschhorn: Generellt människor rätt NULL, men samma sak. STUDENT: Och sedan int namn. JASON Hirschhorn: Int namn. STUDENTEN = JASON Hirschhorn: = STUDENT: Rand. JASON Hirschhorn: Rand. STUDENT: () JASON Hirschhorn: () STUDENT: Modulo nummer. JASON Hirschhorn: Vad är modulo? Tecknet? Den procent tecknet? STUDENT: Procent karaktär. Modulo nummer som du definierat upp överst. JASON Hirschhorn: Modulo NUMMER. STUDENT: Och sedan semikolon. JASON Hirschhorn: Semikolon. STUDENT: Och sedan ny linje, printf. JASON Hirschhorn: Printf. STUDENT: ( JASON Hirschhorn: ( STUDENT: " JASON Hirschhorn: " STUDENT:% s / n JASON Hirschhorn:% s / n STUDENT: " JASON Hirschhorn:% s / n " STUDENT: kommatecken, mellanslag namn. JASON Hirschhorn: Space - STUDENT: Åh, antar jag, vad vi kallar det här? JASON Hirschhorn: Vi kallade det namn. STUDENT: Öppet fäste, namn. JASON Hirschhorn: Öppet fäste, namn. STUDENT: Stängt fäste. JASON Hirschhorn: Stängt fäste. STUDENT:) JASON Hirschhorn:) STUDENT: Semikolon. JASON Hirschhorn: Semikolon. OK, låt oss rädda. Låt oss göra den här koden. Studenter. Låt oss köra den här koden. Studenter. Inte. / Elev. . / Elever. Nämn en. Vi säger David. Namn två, RJ. Nämn tre, Rob. Namn fyra, Lucas. Namn fem, Joseph. Och sedan skriver ut Joseph igen. Så låt mig köra igen. Låt mig göra samma namn. David, RJ, Rob, Lucas, Joseph. Och det gav mig David den här gången. Så jag gjorde samma sak, men det gav mig en annan sak, och det är därför att, naturligtvis, vi ber för ett slumpmässigt namn. Så jag tror, ​​baserat bort av mig vandra runt i rummet, att de flesta människor förmodligen fick den första delen till höger, inrätta den arrayen och sedan få alla namn. Jag pratar om linjerna 10 till 16. Men raderna 18 till 21 är förmodligen några saker du inte har sett förut, så låt oss gå igenom dem. Denna linje, srand tid NULL är i huvudsak - ledsen, låt oss hoppa ner en linje, rand (). Det ger dig ett slumptal, ett slumpmässigt heltal. Och om du träffar mannen rand, vilket en hel del du gjorde - M-A-N rummet R-A-N-D - i terminalen som denna, M-A-N space R-A-N-D, slå Enter. Du skulle komma upp i handboken och skulle kunna läsa att rand kommandot utgångar num pseudoslumpdata byte efter sådd slumptalet generatorn en gång. Så det är en beskrivning. Det är vad Rand, ger du ett slumpmässigt nummer när du kallar den funktionen. Tyvärr är det inte riktigt random för om du bara ringa random utan att få det lite frö, en del utgångspunkt, kommer det alltid välja samma en och den använder en formel att bestämma nästa en. Så om du ringer rand, det ska bara ger dig samma sak. Det kommer att bli väldigt förutsägbar. Det faktiskt inte vara slumpmässigt. Så vad vi behöver göra, per Marcus instruktioner till mig, var frö rand med något annat, vilket är vad den srand funktionen gör. Det frön rand med något lite mer slumpmässigt än samma sak, och han seedning det med tiden NULL, vilket är, precis enligt konvention, den nuvarande tid i sekunder. Så du antar att alla inte är går att köra koden på exakt Samma sekund, så det är ett säkert kort att tid NULL kommer att vara annorlunda varje gång denna kod körs. Säker satsning som alltså, srand viljan frö rand med något annat varje enda gång. Så genom konvention, när vi vill ha en slumptal, skriver vi denna linje, srand tid NULL, att ge oss en mycket mer slumpmässigt frö, och sedan kör vi rand, vilket ger oss ett slumptal. Yeah? STUDENT: Kan du säga vad du menar med frö? JASON Hirschhorn: Seed som i - så Rand kommer att plocka några antal och det kommer att använda en del formel för att komma dit. Så det kommer att börja med något och sedan förvandla det till bygger något bort av den formeln. Om du ger alltid det samma sak, det alltid kommer att förvandla den till det samma sak. Så att första du ge det är fröet. Så du vill ge den något annorlunda att börja med, och så det kommer att vända det till något annat. Och sedan slutligen, rad 20, denna% kallas modulo, och det är förvirrande. Det är något som är lite annorlunda här att du egentligen inte ha i verkliga livet matematik. Men i huvudsak, när du tar en jätte nummer och du delar i C, vad händer med resten? STUDENT: Det blir stympad. JASON Hirschhorn: får det stympade. Så 20 delat med 3 är vad? Vad återgår det till dig, 20 dividerat med 3. Tyvärr, 10 dividerat med 3. Vad återgår det till dig? STUDENT: [OHÖRBAR]. JASON Hirschhorn: 10 dividerat med 3 bara returnerar 3, inte 3 resterande 1. Så vad 10 modulo 3 returer är bara resten, 1. Så om du ville veta vad 10 delat med 3 faktiskt var, skulle du göra 10 dividerat med 3, skulle du få din 3, och sedan du skulle göra 10 modulo 3, och du skulle få ett 1. Så du skulle inse att 10 delat av 3 är 3, resten 1. Och i denna linje, skulle Rand vara alla heltal, huvudsakligen. Så modulo säger, dela det med nummer, vilket i detta fall är 5. Och om du någonsin dela med ett nummer, heltal måste alltid vara mindre än det numret. Så om du dividerar med ett nummer 5, resten kommer alltid att vara noll till fyra. Det är precis hur matematik fungerar. Så ett stort antal moduloed av en mindre Antalet kommer alltid tillbaka resten och kommer alltid att återvända någon tal som är mindre än det antal du dividerat med. Har någon några frågor om modulo, eftersom det kommer att komma in mycket, mycket praktiskt, så jag vill vara säker alla förstår det? Cool. Och vi såg att detta program fungerade. OK, vi går vidare. Så nästa, kommer vi att gå in i funktioner, och vi kommer att gå genom resten av det här ganska snabbt eftersom jag vill komma till kommandoradsargument. Så fungerar är väsentligt, som ni har sett, svarta lådor. De tar saker som kallas parametrar, de gör något för dem, antingen ändra dem eller skapa vissa biverkningar, och slutligen, spottar de något, vilket är returvärdet. Kan någon ge mig en anledning varför vi skulle använda funktionerna? Någon? En anledning till varför vi skulle använda funktionerna? Någon? Jag såg två händer. Vad är en bra anledning? Marcus? STUDENT: Om du måste ringa samma stycke kod flera gånger. JASON Hirschhorn: OK, om du behöver att ringa samma bit av koda flera gånger. Jeff, du har en annan anledning? STUDENT: Bara så att du kan koda mindre. JASON Hirschhorn: Du kan koda mindre. Rätt. Om du vill göra något en hel del - i föregående kod, skulle jag ha skriven hämta sträng fem gånger, men en för loop gör att det ser trevligare och du måste skriva mindre kod. Funktioner är en liknande idé. Om jag vill göra samma sak en hel del, flytta den till en funktion och kalla det fungera varje gång. Det kommer att göra det där för dig. Det är en stor anledning att använda funktionerna. Så anatomi en funktion. En funktion kommer i allmänhet se ut så här. Det börjar med returtyp, Du kommer att få namnet. Det tar argumenten, annars känd som de parametrar, och inuti dessa Klammerparenteserna, kommer du skriv din kod. Vi har sett en funktion en hel del. Det är viktigaste. Här är viktigaste överlappar som anatomi jag hade tidigare. Vad betyder nämligen int just här? Vad betyder int? När jag skriver int main (void). STUDENT: Return typ? JASON Hirschhorn: Förlåt? STUDENT: Avkastningen typen. JASON Hirschhorn: Int är tillbaka typ, exakt rätt. Huvudsakliga returnerar en int. Vad är viktigaste? STUDENT: Function namn. JASON Hirschhorn: Main är den namnet på funktionen. Exakt rätt. Och ogiltiga? Vad är ogiltig innanför parenteserna? STUDENT: Det tar inte någon extern värde. JASON Hirschhorn: Så void - höger. Inuti parenteserna, sätter vi parametrar eller argument de Funktionen tar, vad går i den svarta lådan. När du skriver ogiltiga, säger du detta tar ingenting i. Så int main void betyder main s inte ta något i. Inne i klammerparenteser, har vi några koden, och då ser vi i slutet returnera noll. Vad betyder avkastning noll? Nåväl, vi pratade om returtyp. Huvudsakliga måste returnera en int. Det är vad den här raden gör. Den returnerar en int, noll. Självklart har vi inte sett att en hel grund i programmering vi gör med de maskiner vi gör och kompilatorer vi använder idag, du behöver inte denna linje. Main är speciell nog att den vet När du når slutet av huvud, precis returnera noll om allt gick bra. Faktum är att om något inte går bra, huvud kommer ofta tillbaka en annan Antalet betyda att något gick fel med ditt program. Så generellt när du ser koden, du skriv inte returnera noll, men det är bra att veta att det händer bakom scener eftersom när du skriver en annan typ av funktion, du kommer att behöva inkludera en returledning. Om du säger jag ska returnera en int, måste du skriva tillbaka något. Om du säger void upp här på början, void main tomrum, för exempel, då är det inte återvänder någonting - void betyder ingenting - så du behöver inte att returledningen. Men du skriver någonsin något som inte ogiltig för återlämnande typ, behöver du en rad som säger retur och du måste sätta något där som matchar den typ. Eventuella frågor om detta? Söt. Scope. Detta är något som vi har berörde också. Varje variabel, som vi vet, har en viss omfattning, och det är i princip talar om där variabeln kan eller inte kan refereras. Och jag gillar att säga vad som händer i klammerparenteser stannar inuti klammerparenteser. Så till exempel, om vi ser på denna kod, vi definierar en global variabel utanför main, int a, här uppe på toppen. Vi kallar en annan int en insida huvud. Vi har några fler klammerparenteser, och vi kallar en annan int a. Vi har tre a s i koden. Dessa är inte samma sak. Jag har skapat tre olika variabler. Sedan innanför dessa inre lockigt hängslen, säger jag a = 4. Vilket ett är att tala om, den första, den andra, eller den tredje? STUDENT: Den tredje. JASON Hirschhorn: Det talar om den tredje. Samtliga av dem en faktiskt kan vara talade om i denna exempel eftersom deras räckvidd allt går in i dessa innersta klammerparenteser. Men när du ringer saker på samma namn, det finns något som kallas gömda. Så du endast behandla eller åtgärda eller använd senaste variabel, eller en närmast dig. Så här inne, är det tredje ett närmast till den raden, a = 4, så det påverkar den tredje. Och den sista raden, a = 2, vari a är att tala om, den första, andra, eller tredje en? STUDENT: Second. JASON Hirschhorn: Det talar kring den andra en. Naturligtvis, en den tredje är närmast den i koden, men den tredje en existerar inte utanför dessa klammerparenteser. När du kommer till det stängda lockigt stag, det är som det är borta, väsentligen. Så de enda två du har kvar är de första två, och naturligtvis, nu det är närmast den andra en. Så det är en bra sak att ihåg om räckvidd. Till exempel, jag är säker på att du har stött på detta i en do while-slinga. Om du initiera variabel inuti do while-slinga och sedan försöker komma åt den utanför, förmodligen du fick någon varning så, här variabel existerar inte. Det är på grund av omfattningen idé, att saker existerar endast innanför dessa klammerparenteser. Klammerparenteserna är som en jätte kram som du ger till din kod, är en annan sätt att tänka på det. Så detta är en annan funktion, något för er till koden, hellofunction.c. Vi kommer att hoppa över det för nu, men detta är något jag uppmuntrar dig att öva på egen hand. Skriv ett program i vilka huvudsakliga samtal annan funktion som skriver ut en hälsning till användaren. Det är i huvudsak tar hallå världen och abstrahera att printf in annan funktion. Men vi kommer inte att göra det just nu eftersom vi inte har så mycket tid kvar som jag skulle ha velat. Så fungerar deklaration. Vi har sett det här förut också. Om du vill skriva en annan funktion, måste du låta datorn veta och main vet att den existerar. Så vad vi gör är över huvud, skriver vi returtypen, namn, och parametrar, och sedan ner under huvud, här nere, kopierar vi faktiskt att linjen och sedan skriva själva koden. Så här sättet, om du anropa funktionen i huvud upptill, vet main som hej finns, till exempel, om jag var att ringa hej, och då ser det ut att genomförandet ner nedan. Vad händer om jag inte är här line up top, annullera hello (void)? Om jag inte inkluderar denna linje och viktigaste samtalen hej, jag kommer att få ett felmeddelande. Jag kommer att få ett fel eftersom kompilatorn vet inte att denna sak existerar. Detta liknar varför vi inkluderar # cs50.h. Vad väsentligen cs50.h gör sätter få strängen uppe. Det är att sätta få int uppe. Det är att sätta alla de funktioner prototyper upp inför main så att när du kallar dem i huvud, vet main att dessa saker existerar. Det är vad dessa. H. filerna gör. Och så om du ska göra din egen funktion, har du att se du sätter den prototyp där uppe. Eventuella frågor om detta hittills? Kommandoradsargument. Detta är vad vi kommer att avsluta på, och sedan förhoppningsvis kommer vi klämma in lite pset. Jag vet inte om vi kommer att kunna pressa att på grund av tid, men med er som är här, och om du killar vill säga efter för lite, vi kan gå över det utanför. Men vi kommer att avsluta med kommandoradsargument för de sista 15 minuterna. Vi vaken, Michael? Du är vaken? Bra. Jag vet inte om du sover med stängda ögon. Det skulle vara knepigt. Kommandoradsargument. De är ett sätt att överföra information i ett program. Så småningom kommer vi att stöta på andra. Men i huvudsak kommer vi att sluta skriver int main (void) om vi vill ta vissa kommandoradsargument. Vi kommer att skriva denna sak kallas int main (int argc, string argv, konsoler. Det är förvirrande. Det är en massa bokstäver som inte är i human engelska, så vi kommer att packa dem just nu. Argc står för argument count - och igen, alla dessa kommer finnas tillgängligt på nätet - och det är antalet argument. Argv står för argumentet vektor, och de är argumenten själva. Det är en array av strängar. Vi har faktiskt sett en array av strängar innan idag. Vi skapade en i den sista program som vi kodat. Så här är ett exempel. Jag skriver. / Ohai CS50 avsnitt på min kommandorad. Argc i detta fall är lika med 3. Argv bracket 0 är ohai, argv bracket 1 är CS50 är argv fäste 2 avsnitt. Återigen, är argc antalet argument, och att resa dig upp lite bit, räknar vi alltid namnet på den funktion som det första argumentet. Så i detta fall finns det tre argument, namnet på den funktion och sedan de två som jag skrivit i. Därefter kommer vi att rädda dem argument själva i argv. Och igen, precis som vi såg tidigare, gjorde vi detta i förra programmet vi kodat. Du kan gå igenom rad ArGV och få dessa strängar. Det är i huvudsak vad vi gjorde på I slutet av vårt sista program. Vi valde ett slumpmässigt namn och gick sedan till Namnen fäste oavsett och tryckt ut strängen finns där. Ovanpå bara en array, eftersom strängar själva är arrayer, som talade om, kan du ha arrayer av matriser, som är huvudsak vad argv är. Ett sätt du kan tänka detta är rader och kolumner. Jag kan dra det just nu. Så argv - det är inte radera. Låt oss dra i ohai. Så om jag skrev in, ohai CS50 avsnitt, Jag kommer att stympa avsnittet för detta exempel. Men i huvudsak, min multi-dimensionell array, ohai CS50, vi ska göra sekt. Så här kan jag komma åt - om jag bara ge argv ett nummer - Detta är fel. Vad är fel i detta diagram? STUDENT: Börja vid noll. JASON Hirschhorn: Det bör börja med noll. Jag borde nog också rotera det, men eftersom jag har redan dragit det på, jag kommer att lämna den på det för nu. Men det börjar på noll. Det är rätt. Jag är ledsen om det är litet. Kan ni sorts se? Så om jag gör argv 0, kommer jag få alla ohai. Om jag gör argv 1, ska jag få alla CS50. Om jag gör argv 2, ska jag få alla sekt. Men nu, som sagt, strängar är arrayer själva. Så vad jag kan göra är att jag kan behandla detta som en flerdimensionell array, och jag kan göra något i stil med argv 0, 0, vilket ger mig bara tecken 0. Argv 0, 1, vilket ger mig bara timmar. Argv 1, 3, vilket ger mig bara detta 0 här nere i CS50. Så därför att strängar själva är arrayer, vi sätter det i en annan matris. Vi har nu matris med matriser, och vi kan indexera in i vår första samling och då index in i vår andra array. Och som du förväntar dig, gör vi det genom att bara sätta dessa två - Vi gör hakparenteserna bara intill varandra. Så i detta exempel är argv en CS50 och argv 1, 2, som vi sa, är bara 5. Har någon några frågor om flerdimensionella arrayer? Ni gör awesome. Söt. Så vi har ett annat program just här, och detta är den sista sak vi kommer att göra just nu. Så jag vill att du ska skriva ett program som tar en användarens fullständiga namn, två och endast två kommandoradsargument, och slutligen, skriva ut en hälsning till användaren som innehåller deras förnamn. Så varför inte du ta tre eller fyra minuter att göra detta, och sedan går vi över den som en grupp, och då ska vi slå upp? Och återigen, här, när vi säger ta en användarens fullständiga namn per beskrivningen av detta problem, bör det vara kommandot line argument, inte med hjälp av få sträng. Ja, Marcus? STUDENT: Så när du säger två kommandot line argument, är att förutom . den / springa, eller - JASON Hirschhorn: Bra fråga. Gör, inklusive. / Run, tre kommandoradsargument. Eller inklusive. / Personlig, i detta fall, eftersom det är namnet på denna fil. Så argc skulle vara tre. Men jag vill bara två argument ges till programmet. Jag bör ange att. Jag ska göra den förändringen innan jag lägger dessa och skicka dem till er. STUDENT: Vad händer om du ha ett mellannamn? JASON Hirschhorn: Om du har en mitten namn, du är ute på tur. Jag är ledsen. Eller om du bara gå med Shakira, du är också ute på tur. Yeah? STUDENT: Så när folk inte har cs50.h, inte definierar de argv som char stjärna argv? Eller kallas det fortfarande sträng argv? JASON Hirschhorn: Ja. Så sträng, återigen, maskera vi över vad exakt som händer där. Det kommer att packas upp kanske på onsdag, men snart. Det är som stödhjul. Eftersom grunden är det samma sak. Så låt oss ta en minut till programmet detta, och då kommer vi att gå över det som en grupp, och sedan som sagt, klä dig. Och jag tror att de fortfarande är extra godis, så ni bör förhoppningsvis ta det, eller ta det. Ledsen om du fortfarande skriva, men jag vill dyka in och vi kan avsluta det tillsammans. Så jag har skrivit på, # include cs50.h, # include stdio.h. int main (void), klammerparentes, lockigt stag, insida tre rader pseudokod, ta en användarens fullständiga namn, två och endast två kommandoraden argument, skriva ut en hälsning till användaren som innehåller deras förnamn. Så det första, ta användarens fullständiga namn. Vem kan hjälpa mig att ta en användarens fullständiga namn? Hur gör jag den delen? Har ni göra det första delen? Ta en användarens fullständiga namn. Jo, för att en kommandorad argument, vad ska jag skriva? Vad ska jag byta om min funktionsdeklarationen? STUDENT: Du vill inte det att vara ogiltiga längre. JASON Hirschhorn: Exakt. Jag vill inte att det ska vara ogiltig. Vad vill jag att det ska? STUDENT: Int argc. JASON Hirschhorn: Int argc. STUDENT: String argv. JASON Hirschhorn: String argv. STUDENT: Konsol, fäste. JASON Hirschhorn: Konsol, bracket. Det är precis rätt, och det är faktiskt hur jag ska få användarens fullständiga namn. De kommer att lägga den där. Så att man har gjort. Så nu vill jag två och endast två kommandoradsargument. Så Noa, vad är ett sätt jag kan kontrollera antalet kommandot line argument jag har? STUDENT: Du gör en if-sats. JASON Hirschhorn: Om uttalande, exakt. Vad vill jag då tillståndet? STUDENT: Om argc större än 3. JASON Hirschhorn: Om argc är större än 3. Om argc större än 3, vad gör jag? STUDENT: Return 1. JASON Hirschhorn: Avkastning 1. Kommer att se till att jag har två och endast två? STUDENT: Nej Om argc är större än 3 och mindre än 2. JASON Hirschhorn: Om argc är större än 3 och argc är mindre än 2. Vad är ett sätt jag kan skriva detta i just en linje, eller utan att använda det och boolesk operator? STUDENT: Det är inte lika med 2. JASON Hirschhorn: Om argc inte är lika med 2. Exakt. Så om argc inte är lika med 2, som kommer att ge mig det här programmet, personifierat, när jag kör den, och som kommer att ge mig hur många kommandoradsargument? Hur många kommer jag leta efter? Ursäkta. Låt mig omformulera det. Om argc = 2, hur många saker användaren skriver in på linjen? STUDENT: One. JASON Hirschhorn: Bara en. Så innan, du hade rätt, Noah. Vad behöver jag faktiskt att sätta dit? STUDENT: Det motsvarar 3. JASON Hirschhorn: argc inte är lika med 3. Jag vill lika 3 eftersom jag vill personlig plus de andra två. Så om argc inte lika 3, returnera 1. Varför sa du tillbaka 1? Elev: Därför att betyder att det är fel. JASON Hirschhorn: Det betyder att det är fel, och vad är det som kommer att göra? STUDENT: Re-fråga användaren. JASON Hirschhorn: Det kommer att sluta programmet, så det kommer att köra igen, men vi har inte något in här för att be om dem igen. Jag bad inte om det. Så det är precis rätt. Avkastning 1 bara avslutas programmet. Bra. Och skriva ut en hälsning till användaren som innehåller deras förnamn. Hur kan jag göra det? Anna? STUDENT: Printf. JASON Hirschhorn: Printf. STUDENTEN (" JASON Hirschhorn: ( STUDENT: "hello JASON Hirschhorn: "hello STUDENT:% s JASON Hirschhorn:% s STUDENTEN / n JASON Hirschhorn: / n STUDENT: ", JASON Hirschhorn: ", STUDENT: argv JASON Hirschhorn: Förlåt? STUDENT: argv JASON Hirschhorn: argv STUDENT: Square fästen 1. JASON Hirschhorn: Hakparenteser? STUDENTEN 1. JASON Hirschhorn: 1. STUDENT: Och) semikolon. JASON Hirschhorn:) semikolon. Låt oss köra. Gör personifierade. . / Personlig. Det slutade precis. Varför tog det sluta? STUDENT: Du har inte lagt några argument. JASON Hirschhorn: Jag gjorde inte sätta några argument i. Ser bra ut. Ni bekänt det. Så återigen, du gick in i argv och du kontrolleras i början argc. De är två viktiga saker att komma ihåg. Så i våra två sista minuter innan vi lämnar, kommer vi inte få till pset två, men som sagt, om du vill bo efter i 10 minuter, skulle jag han glad att gå över med er logiken för dessa problemområden uppsättningar. Vi hade en hel del att täcka idag så jag fick inte till dem. Generellt tycker jag att inkludera att i slutet. Så om du vill stanna kvar, stanna kvar i 10 minuter. Vi kommer att göra det. Då, som jag nämnde i början, pset noll och ett, får vi att återkoppling tillbaka till dig som snart som möjligt. Målet är att få pset en återkoppling, kommentarerna delen, innan pset två beror. Så om du gjort några misstag eller stilistiskt, skulle det vara bättre, du har den informationen så att du kommer inte att göra samma saker i pset två. Och sedan i framtiden, kommer du att få alla av din pset feedback och kommentarer tillbaka innan nästa gång det är dags. Slutligen, om jag kunde sätta i en annan kontakt för återkoppling. Detta är ditt första avsnittet. Det var min första avsnittet undervisning i år. Gå dit. Skriv grejer, bra och dåliga, och jag kommer att använda den för att göra avsnitt bättre nästa gång. Och sist, igen, om du behöver någonting, låt mig veta. Jag är mer än gärna hjälpa er. Om du bara vill ha godis, jag kommer att ha extra godis. Jag är glad att föra den till dig. Detta kommer att bli en fantastisk kurs. Detta är en av, om inte min favorit Naturligtvis har jag tagit i hela mitt liv, och jag hoppas att det kommer att vara att underbart för dig. Så jag vill göra allt i min makt att göra det som häftigt för dig. Jag kommer att skicka ut ett mail om du är I min avdelning eller Noah, och kommer att försöka schemalägga med var och en av ni en gång för att checka in under det nästa par veckor så jag kan få en känsla för vad din CS bakgrund är, och det kommer också att hjälpa mig skräddarsy dessa sektioner för att bättre passa dina behov. Så det är vad jag har uppradade. Återigen, jag ser dig utanför Om du vill vara där. Detta var vecka två avsnitt. Tack killar så mycket.