[Musikken afspilles] ALLISON Buchholtz-AU: Hej alle. Velkommen til din første officiel CS50 sektion. Som du kan se, dette er sektion CS50-lignende, bare at trække op vores dagsorden for i dag. Så, hvem er jeg, som jeg er sikker du er alle spekulerer. Jeg er din TF. Jeg er ikke bare en tilfældig elev hvem udgive din TF. Og jeg har tænkt mig at gå igennem slags har sektioner vil flyde, forventninger, vi har, ressourcer, så videre og så videre. Vi kommer til at tale om arrays, ASCII funktioner, kommandolinje-argumenter, og det er ikke her, men Jeg vil også være at hjælpe du slags tænke igennem din næste pset for denne uge. Som jeg er sikker på du vil alle sætte pris på. Så først question-- hvem er jeg, udover din overstrømmende TF her. Jeg er Alison Buchholtz-Au. Dette er mit andet år TFing CS50. Jeg også TF CS51 i foråret. Du vil måske se igen der hvis du beslutter at tage det. Jeg er også en PAF, så enhver Freshmen-- og hvis du ikke er en freshman, dette er mit tredje år som en rådgivning fyr. Jeg er meget velbevandret i rådgive dig om livet og kurser inden for CS og ikke inden for CS. Jeg er en Computer Science Concentrator. Jeg er en senior i Adams House, bedste hus. Og før jeg skiftede til CS min Sophomore Spring, Jeg var faktisk en biomedicinsk ingeniør. Jeg skulle til at gå til Med skole. Jeg skulle være et traume kirurg. Og det har helt ændret sig, siden jeg tog CS50. Jeg tog naturligvis min Sophomore Fall. Det var min første introduktion til CS nogensinde. Jeg var en af ​​de 78% af jer, der havde nul erfaring kommer ind, og det ændrede fuldstændig mit liv. Og nu arbejder jeg på Microsoft, og din dejlige TF. Og CS50 er formentlig en af de bedste oplevelser at jeg har haft her på Harvard-- både under klassen og være i stand til at hjælpe lære de studerende som dig. Så jeg er virkelig spændt at du er alle her. Hvis du kom i sen, der er slik, som du skal føle fri til at komme grab, eller sende en anden til at få fat i det for dig. det er OK. Jeg ønsker ikke at spise det. Mit værelse har nok chokolade, så y'all bør forsøge og afslutte det. Jeg ved, der er 100 stykker, men ligesom, 4:00 på en mandag, Jeg tror, ​​alle kunne bruge nogle sukker. Så alle jer, der er officielt i min afdeling bør har fået en e-mail fra mig med mit telefonnummer, email address-- velkommen til at tilføje mig på Gchat, er du velkommen til at tilføje mig på Facebook, og også for resten af ​​jer, du kan e-maile mig lige her. Der er to H'er. Alle altid gør ligesom to L's eller to C'er. To H'er i efternavnet. Ellers er det kommer til at hoppe, og Jeg har ikke tænkt mig at få din e-mail. Så velkommen til at kontakte mig, at kontakte mig til enhver tid. Jeg kan ikke komme tilbage til dig inden for 24 minutter men jeg lover at komme tilbage til dig inden for 24 timer. Hvis du kalder mig en halv time før din pset skyldes, at du er ligesom, Jeg har ingen idé om, hvad jeg laver Allison. Hjælp mig. Jeg har tænkt mig at berolige dig ned, men i slutningen af ​​dagen, hvis du ringer mig en halv time før din pset skyldes med intet skrevet, Jeg har tænkt mig at være ligesom, godt, måske det er tid til at bruge den sene dag. Så jeg vil svare på alle dine anmodninger i en meget rettidigt. Min telefon er normalt knyttet til mine hænder. Jeg reagerer typisk meget hurtigere end 24 timer, men jeg kan kun garanti en 24 timers reaktion. Ok. Så hvorfor er vi her? Også, hvis du har spørgsmål på enhver tid, så lad mig det vide. Jeg taler meget. Jeg taler hurtigt, men vær velkommen til at afbryde mig. Det giver mig vejrtrækning værelse. Så sektioner er en tid for os at virkelig bare dykke i, få nogle hands-on erfaring, at gå gennem emnerne, vi nævnte i klassen eller i undervisningsmaterialer, som anbefaler vi at du fyre online. Og vi vil faktisk gå igennem nogle af disse ressourcer i en bit. Så nogle noter om sektion support. CS50-- en af ​​ting, der gør det en af ​​mine foretrukne klasser er følelsen af, at du aldrig er alene. Vi har en stab på over 100 mennesker, der er her for at hjælpe dig. Vi har kontortid Mandag til torsdag. Så der er så mange mennesker, som elsker klassen lige så meget som jeg gør og hvem er virkelig her fordi de ønsker at være her. De fleste af os er studerende, og dette er ligesom en femte klasse ud til resten af ​​vores arbejde. Og det er en masse arbejde, men Vi gør det, fordi vi elsker det, og vi virkelig elsker at lære dig og hjælpe dele vores begejstring for dette emne, og denne klasse. Så skal du tage fordel. Kom tale til os. Jeg bliver ensom, når mine elever ikke tale med mig, så hvis du ønsker, komme hænge ud med mig. Det vil være stor. Så sektion er naturligvis en af ​​dine største ting. Vi vil gå gennem ting at du har lært i foredrag, gøre nogle korte eksempler når vi har tid, og generelt slags få en idé om ting du bør tænke om på dit problem indstillet. Shorts-- hvor mange mennesker der rent faktisk set videoen fra din scratch kort? Nogen genkende mig? Så dem er meget stor. Bør du helt sikkert se dem. En masse arbejde er blevet lagt i dem. Og de er bare beregnet til at være bide stykker på størrelse for dig bare at se for tre eller fire minutter og få et bedre forståelse af et koncept. Walk throughs-- hvordan mange mennesker har set walk-through til tidligere? Zamyla er fantastiske, højre? Ligesom, jeg ville ønske, jeg var Zamyla undertiden. Så helt sikkert bruge dine walk-through. Hun vil bryde det ned i små, mundrette stykker. Og når du har disse enorme specifikationer fra dine problemet sæt, det kommer til at være virkelig vigtigt at være i stand til at bare finde et sted at starte og arbejde langsomt gennem det. Okay, vi har også Study50, som er study50.harvard.edu, tror jeg. Du kan bare Google studere, og det vil komme op. Dette er en af ​​de bedste ressourcer vi har. Det er PowerPoints med noter og øve problemer for dig med løsninger, som du kan faktisk gå igennem. Så hvis du nogensinde ønsker mere praksis, mere, end vi gør i sektioner eller mere end dine problemet sæt, dette er virkelig et sted, jeg opfordre dig til at gå. Det blev bygget sidste sommer ved nogle af mine rigtig gode venner. Og det er forbløffende. I virkeligheden en masse af dias at jeg skal bruge for sektion vil komme fra Study50. Så en masse af TF'er bruge det. Og endelig, da jeg ovennævnte, kontortid. Hvis du har problemer med lektier, er du har problemer med en koncept, kommer til kontortid. Gå tidligt i uge, hvis du kan. Komme ud til quad, fordi det er slags langt. Ingen kan lide at gå derude. Men det er til din fordel, fordi så er du kommer til at have alle disse TFS [Uhørligt] omgiver dig. Og især nu, Blot et tip, torsdage er meget chill lige nu i Mather fordi dine psets forfalder om torsdagen. Og vide ønsker at bruge dine sene dage endnu. Så hvis du har problemer med begreber, der er masser af TF'er der er der for at hjælpe dig. Så kom ud til Mather på torsdag. Hvis du ønsker at se mig, Jeg har tænkt mig at være der. Jeg typisk gøre mit hjemmearbejde, fordi ingen ønsker min hjælp. Så kom og se os. Mød os halvvejs. Så hvor mange mennesker har deltaget foredrag eller set det online? Hvor mange mennesker gik til super sektion i sidste uge? Cool. Det er faktisk et rimeligt antal. Hvor mange af jer har læst din spec for denne uge, for din pset? Ooh, jeg er stolt af jer! Mere slik for y'all. Godt, så hvad vi mener "Møde os halvvejs," er at det afsnit er virkelig kun vil være super nyttige for dig hvis du kommer i at have læst din specifikation for din pset. Fordi når jeg går igennem en oversigt af ting, du bør være på udkig efter, det kommer ikke til at gøre så meget mening, hvis du ved ikke hvad dit problem sæt vil bede dig om at gøre. Hvis du ikke kommer til afsnittet, naturligvis Jeg kan ikke være så nyttige for dig. Jeg har ikke tænkt mig at tage det personligt, hvis behøver du ikke komme til min afdeling lige nu, men absolut bør du. Hvis du ikke kan se dem online. De er der for en grund. Mine vil være lige der. Som du bemærker, er vi ved at blive optaget, så det vil være lige der for jer. Så godt, vil lectures-- det er selvfølgelig hvor du får den start af dit materiale her. Så jeg vil helt sikkert forsøge og hjælpe dig så meget som jeg kan, men jeg kan kun møde dig hidtil. Du er nødt til at slags møde os halvvejs. Grading-- så, alle jer der fik en mail fra mig, du er min officielle sektion. Jeg vil klassificering dine psets. Og jeg vil bare sige, én ting, du bør virkelig være opmærksomme på er kommentarerne. Kommentarerne er ofte mere anvendelige end den faktiske score, vi giver dig. Og kommentarerne er faktisk hvor jeg bruger en masse af min tid når jeg er sortering. Så jeg ville sætte pris på det, hvis du har læst dem. Og de er faktisk, hvordan du vil at lære mere om design og stil og ting, der er en lidt mindre klippe og tørre. Så virkelig opmærksomme på disse bemærkninger. Hvis du har spørgsmål om dem, eller spørgsmål om din score, kan du komme tale med mig enten før sektion, Jeg vil sandsynligvis blive hængende i lobbyen, eller bagefter. Hvis du ønsker at planlægge en-til-en-møder om, hvordan du kan hjælpe med at forbedre senere problemet sæt, bare lad mig det vide. Og så bare et par tips til jer. Så en af ​​de største ting Jeg har altid understrege min sektion når du lære at kode er at skrive ting ud på papir først. Hvis du har et spil plan for hvor din kode skal gå og hvad det skal gøre, og det er brudt ned ind i små bidder af pseudokode kode, du har skrevet ud, du kommer til at være mindre tilbøjelige til at gøre syntaksfejl eller oprette en hvis løkke, ikke har et andet. Hvis du ved, hvor du er går samlet, er du mindre tilbøjelige til at gøre disse små fejl, der vil undertiden tage dig timer til at fastsætte, fordi du er ligesom, hvor jeg mangler dette beslag? På dette notat, skal du bruge Style50. Især når du er gå til kontortid, hvis din kode er alt skiftede over til den ene side, det er selvfølgelig politik at vi kan sige, ordne det så det ser ud som Style50 siger det skal, og så vil vi hjælpe dig. Så det vil gøre dit liv lettere. Det vil gøre vores liv lettere. Alle er gladere. Alle får bedre karakterer. Er det ikke hvad vi alle ønsker? Så skrive ting på papir, inden du nogensinde røre din computer. Tale tingene ud på et højt niveau, og skal du vide, hvor du skal hen. Og hvis du er i tvivl, sidde ned med nogen og gå dem igennem trin for trin hvad din kode er meningen at gøre. Og ni gange ud af 10, vil du være ligesom, åh, jeg glemte en hvis betingelse eller jeg har glemt et semikolon her eller Jeg opdaterer denne variabel forkert. Så dem er mine tips til succes. Så da omkring halvdelen af ​​du ser ligesom du deltog super sektion, Jeg skal bare til meget kort gennemgå loops, som ikke var på vores oprindelige dagsorden. Men de er virkelig vigtigt. Og så jeg har tænkt mig at slags af hastighed gennem dem før vi kommer ind i vores faktiske sektion. Før jeg gør det, er der enhver questions-- logistisk, personligt, er der noget andet, du ønsker at vide om mig eller om sektion eller klasse i almindelighed? Alle gode? OK, cool. Dejligt. Så loops-- jer burde alle genkende disse stykker fra bunden. Så loops er dybest set bare en måde for os at gøre noget nogle antal gange, nogle gentagne handling baseret på nogle betingede. Så vi har tre forskellige typer. Vi har for-løkke, mens, og gør-mens. Så for loops-- vi bare have en meget generelle layout her af en for-løkke. Og det er fantastisk, når du ved, hvordan mange gange noget skal udføre. Når vi taler om andre loops, vil du se, hvorfor det er en vigtig forskel. Men efter sløjfer er for noget sæt. Du ved, du kan enten beregne antallet eller du kender antallet af gange, du ønsker, at dette gentages i begyndelsen. Så hvis du ser her, vi har bare en generel art af skelet ramme for en for-løkke her. Så for-initialisering, det er her dine variabler initialiseres. Med Mario, jeg er sikker på du fyre gjorde noget lignende int Jeg er lig med 0. Det er her, der ville ske i blå. Du har din tilstand, som er, hvad kontrolleres hver gang. Hvis denne betingelse er sand, så resten af ​​koden udfører. Så det vil løbe igen-- og spørge. Og så har vi update, hvor du opdaterer din variabel. Så igen, med ligesom Mario, er jeg sikker du fyre gjorde noget lignende i plus plus. Så hver gang løkken løb, jeg fik opdateret, så at når vi tjekker den mod nogle tilstand, blev det skiftende. Fordi hvis du bare have en statisk variabel, hvis det udførte det første gang, det er bare kommer til at udføre i det uendelige. Så du er nødt til at sørge for du opdatere din variabel ordentligt. Og vi har også kun en visuel repræsentation der. Alle godt? For løkker. Skulle have set disse i din pset. Cool. Så her er bare en nem eksempel. Print Dette er CS50! 10 gange. Og så har vi vores initialisering, som vi ser der, med int i lig 0, for jeg er mindre end 10, og jeg plus plus. Og det vil udskrive denne 10 gange. Så mens loops-- mens løkker stor, når du ikke nødvendigvis nødt til at vide, hvor mange gange det er kommer til at opdatere i begyndelsen. Du skal bare have nogle tilstand, der er kontrolleret. Og dette kunne være noget lignende while-- lad os tage et eksempel fra din pset. Hvis Mario, du forsøger at indtaste et negativt tal. Right? Du skulle re-bede din bruger. Så du kan sige, godt, hvis brugeren inputs noget mindre end nul, re-prompt dem. Og jeg er sikker på, der kan have været noget, som nogle af jer bruges i din kode. Så det er en simpel ting. Du har samtidig nogle betinget der er markeret hver gang koden går til at udføre. Hvis det evalueres til sand, vi køre den. Ellers har vi ikke. Og hvad er egentlig important-- noget jeg tror, ​​at David talte om i lecture-- er seler. Uanset er inden for den seler er, hvad henrettet. Hvis du glemmer dem seler, er det kun vil en linje, der direkte efter imens blev henrettet. Så hvis du har tre ting, der formodes at ske, når dette betingelse evalueres til sand, og du behøver ikke have disse seler, kun den første ting kommer til at ske. Så vær meget bevidste om hvor du lægger dine seler. Hvis du holder dig med Style50, dette vil helt sikkert hjælpe dig. Cool. Så dette er en nedtælling fra 10 til nul. Og som du kan se her, vi initialisere nogle tæller uden for det. En ting, der er anderledes, er vi ikke initialisere vores variable inden for vores while-løkke. Det er initialiseret uden for det. Vi er simpelthen bare at sætte betingende for vores tid. Så i dette tilfælde, er det samtidig Stillingen er større end nul. Og vi printe ud, hvad vores tæller er, og derefter vi formindske vores variabel. Og det er også en anden ting at bemærke. Vores opdatering sker ikke inden for den første del af while-løkke. Det vil rent faktisk ske indenfor seler, kroppen af ​​din tekst. Så gør-mens loops-- gør-mens sløjfer er stor for bruger validering. Så nogle af jer måske har også brugt dette i din pset. Man kan sige, gøre, ligesom, anmode brugeren om input. Og så mens lignende, input er lidt mindre end nummer. Så for en udtrykkelig tilfældet med Mario, det ville være gøre printf, indtaste et heltal, og derefter nogle heltal lig getint. Og så vil faktisk eksekvere denne kode først. Du vil faktisk have en slags heltal. Og så kunne man sige, mens at heltal er mindre end nul. Så hvad det kommer til at gøre, er at det er kommer til at udføre mindst én gang. Det kommer til at kontrollere tilstanden. Hvis tilstanden er sandt, vil det køre igen. Så gør-mens løkker stor for bruger validering, fordi du kender koden kommer til at udføre mindst én gang, hvorimod med mens loops, er du ikke garanteres, at det er kommer til at udføre en gang. Det kommer til at kontrollere tilstanden først og derefter beslutter at udføre det, mens en gør-stykke tid vil udføre koden først og derefter kontrollere at se, om du nødt til at gentage det. Er denne sondring mening for alle? OK. Cool. Så i dette tilfælde, er dette slags af, hvad jeg talte om, denne re-skærmen, indtil du få et positivt tal. Så vi ved, at printf "Indtast et positivt tal" og faktisk beder om at input vil ske mindst én gang. Hvis brugeren er ondt og holder indtaste et negativt tal, der ved, hvor mange gange det vil udføre. Men denne kode er garanteret at udføre mindst én gang. Og det er derfor, det er fantastisk til validering af input. Og du vil bruge det ganske lidt. Okay, nogen spørgsmål indtil videre? Vi er alle gode? Jeg taler for hurtigt? Vi er gode? OK. Awesome Så vi kommer til at gå videre og taler om arrays. Cool. Så arrays er dybest set kun datastrukturer der tillader os at gemme ting af samme type. Så hvis du nogensinde har en array, er det enten bare nødt til int'er eller er det bare nødt til flåd eller er det bare kommer til at have tegn. Du kommer ikke til at have en int med en char med en float med en dobbelt. Én ting. Arrays er blot en størrelse, eller de er bare én type. Så her har vi en bred vifte af størrelse tre med tre heltal i det. De kunne flåd, men vi er vil sige, de er int'er. Så én ting at indse, er, at arrays er et sæt størrelse, når du initialiserer dem, og de er ikke easily-- da du alle er mindre behagelig, du skal bare tænke på dem som ikke være i stand til at strække sig i størrelse. Men stor du begiver dig ud dit array i starten, det er den størrelse, det vil at bo, fordi arrays er løbende blokke af hukommelse. Og når du fyre få i lidt mere om, hvordan hukommelsen er faktisk lagt ud på diske og i hoben og stakken, det vil gøre lidt mere mening. Men du kan bare tænke på lignende, er det blot en række af rum på din disk. Og du kan ikke garantere, at der er vil være fri plads efter den. Du kunne initialisere et array tre og derefter måske du initialisere en anden vifte af fem senere, og det er lige efter det. Så hvis du skulle gå forbi stedet tre i det første array, du ville skrive over noget andet. Så arrays are-- for jer, bare tænke på dem som en fast størrelse. Så skaber en array-- du vil til brug for at gøre dette ganske lidt. Så på samme måde, at vi har en generelle struktur for vores for loops, har vi en dejlig almindelig struktur for vores array. Fordi de er af en type, hele elementer i et array er af en type, du nødt til at initialisere hvad denne type er. Så, som du ser her, har vi en fin lille beslag datatype. Så hvis vi er ved at oprette en int array, vil det være int. Hvis vi opretter en char array, vil det være char. Hvis vi opretter en streng array, vil det være streng. Og derefter navnet på dit array, uanset hvad du gerne vil have det til at være. Så måske er det prøveresultater eller måske Det er studerende, eller måske er det slik. Uanset hvad du beslutter dig for at navngive din array, det er, hvad det vil være. Og så i parentes, vil du har den størrelse, du ønsker. Så vi opbevare 10 elever eller vi lagre 15 typer slik? Hvad ikke. Så i vores eksempel her, Vi skaber et array af størrelse tre, som du fyre se her til højre. Og når vi først initialisere det er alt sat til nul. Så det er bare tænkt ligesom en blank tavle. Vi har alle disse rum har vi alle disse bokse vi kunne sætte vores data ind, men de er bare blank for tiden. Så hvis vi ønsker at faktisk tildele dem disse værdier, vi gøre det så lige under her viser. Så har du, hvad navnet på din array er og hvad indeks, du vil. Så indekset refererer blot til, ligesom, hvad slot vi kigger på. Og en vigtig ting at bemærke er, at arrays er nul-indekseret. Så hvis vi ønsker den første plads i hukommelsen af vores array, går det at være nul. Hvis vi ønsker det andet, vil det være en. Hvis vi ønsker det tredje, vil det være to. Så videre og så videre. Hvilket også er grunden til, konventionelt, når vi gør for loops-- jeg sikker du fyre var undrende, hvorfor skal vi starte ved 0 versus 1? Og det er fordi, når vi overgangen til at bruge arrays, det kort korrekt. Så hvis du ønsker at gentage i et array, er det gør en masse mere mening at gør jeg lig 0, fordi vi ved, svarer til det første sted i hukommelsen. Alle godt med det? Cool. Og derefter på bunden her er bare anden måde at initialisere et array. Du har stadig din datatype og navn, men i stedet for faktisk sætte en størrelse derinde, du kan bare gøre tomme parenteser. Og derefter med disse krøllet seler i bunden, Du kan bare indtaste de data, du ønsker adskilt af kommaer. Og det vil automatisk sige, OK, jeg ser at du har tre ting i disse seler. Så jeg ved, at jeg er nødt til at afsætte tre blokke af hukommelse og derefter gemme dem. Så den første version, du kan bruge Hvis du spørger din bruger til input værdierne, så du kan gennemløber array og ask-- få nogle int indtaste dem. Hvis du kender de værdier på forhånd, det gør en meget mere mening at bruge den anden måde. Men i de fleste tilfælde kan du ikke vide hvad disse værdier vil være. Cool. Andre spørgsmål? Okay. Så adgang elements-- så man af de store ting om arrays er, at de er tilfældige adgang, hvilket betyder, at man behøver ikke at se gennem hver blok. Hvis du ved, at du ønsker, hvad der er i blok to, du kan bare sige, giv mig blok to. Og det er derfor disse indeks er så vigtige, og det er, hvordan vi faktisk adgang til dem. Så i dette tilfælde, som vi så før, når vi tildele værdier i det ene før, havde vi navn og indeks, vi ønskede at få adgang til, right? Så på samme måde, det er alt, vi gøre for rent faktisk at trække, at data ud. Vi har navn og vi har indekset, som vi ønsker. Så i dette tilfælde, for-løkken hernede på bunden, anyone vide, hvad det gør, hvad det ville udskrive? Mmhmm? Præcis. Så ja, det er bare iteration igennem. i er lig med zero-- vi kan gå gennem koden lige hurtigt. i er lig med nul, i er mindre end tre på dette tidspunkt, right? Så der tjekker ud. Og vi siger, OK, print f hvad der er i temperaturen i. Jeg er nul lige her, når vi først gentage, så vi gå til denne første stedet, og vi siger, OK, 65 er den nummer, vi ønsker at udskrive. Så det vil udskrive 65 og derefter lave en ny linje. Jeg vil opdatere, så den udskriver 87. Den opdaterer igen, og det vil 30 udskrive. Alle cool? Awesome. Ok. Så her er form for en ting, jeg sagde hvordan du kan holde styr på andens score og hvorfor du ville bruge den første måde for at formatere det i stedet for denne anden måde. Og dette blot går igennem. Og opdager vi har en klassestørrelse på 30. Og vi initialisere dette vifte af int'er der er af størrelse 30. Og så er vi iteration igennem, og vi er beder brugeren om at indtaste point for hver af disse og derefter tildele den til et bestemt sted i hukommelsen et eller andet sted i dette array. Cool? Giver det mening for alle? Mmhmm? Så hashtag definere klassestørrelse 30 er en præprocessor direktiv som netop betyder det gets-- det har at gøre som kompilering proces. Du kan tænke på det som en global variabel. Den måde, vi gør det er typically-- det giver din kode til at være mere let ændres. Så lad os sige, at vores klasse størrelse pludselig går fra 30 til 15, hvis jeg ikke havde defineret det på denne måde, ville jeg nødt til at gå gennem min hele programmet og ændre alle forekomster af 30 til 15. Men med dette, får jeg at ændre en stedet, og alt andet ændringer. Hvis du nogensinde ønsker at gøre en hash definere i et tilfælde hvor du holder styr på nogle sæt antal scoringer for en klasse eller du bruger et nummer der vil blive anvendt, ligesom, gennem en meget lang program, er det bedre at definere, at i begyndelsen så hvis nogensinde det ændrer sig, får du at ændre en plet i stedet for 100. Ja? STUDENT: Mellem gøre det og bare erklære [uhørligt] over på toppen. ALLISON Buchholtz-AU: Så det har at gøre med efficient-- det er slags uden for hvad vi kan dække i denne sektion. Det har at gøre mere med effektivitet og hvordan tingene faktisk arbejde i indsamling proces. Hvis du vil virkelig vide om det, jeg er glad for at sende dig en e-mail med ressourcerne om det. Hash definere tendens til at være foretrækkes til ting. Og som du kode mere, du slags lære nuancerne på, når du skal bruge en global versus hash definere. Men for tiden, du ikke rigtig har at bekymre sig om det er at det korte svar. Alle godt med det? Og også, hvis du ønsker at bruge en hash definere det er virkelig vigtigt at lægge mærke til at navnet skal være i alle hætter. Vi er ikke bare gør KLASSE størrelse til at være dramatisk. Det bør faktisk være i alle hætter. Cool. Noget andet der? Vi er gode? Dejligt. Velkommen. OK, så jeg vil jer at tage et kig på dette, og se om du kan finde fejlen. Jeg vil give dig et hint. Det er et sted i det for-sløjfe. Mmhmm? STUDENT: Skal være mindre end lig med 2. ALLISON: Så det kunne være mindre end eller lig med 2, eller det kan være mindre end 3. Og hvad er begrundelsen for det? STUDENT: Den [uhørligt], 0, 1, 2. ALLISON: Præcis. Så i en vifte af størrelse n, vi kun har indeks n minus 1. Cool. Og så kan vi få virkelig skøre og få flerdimensionale arrays. Et af de problemer, da jeg tog det i min år, der behøves flerdimensionale arrays, og jeg tror, ​​en af ​​dem kan kræve det år, så være komfortable. Wrap dit hoved omkring det nu. Det vil komme tilbage for at hjemsøge dig, men på den fede måde. Så du kan virkelig bare tænke af multi-dimensionelle arrays som arrays af arrays. Så du kan slags tænke på denne top række som den første bid af hukommelse. Og dette er den anden luns af hukommelse, og den sidste række er den tredje luns af hukommelse. Og inden for det, er der et array. Men selvfølgelig, det er nemmere at skildre som denne. Så du formatere det på samme måde. Dette er et tegn bestyrelsen for tre med tre. Så du har tre rækker og tre kolonner. Vi repræsenterer det på denne måde. Og du ville få adgang til det samme måde, kolonne række. Og så 1,1, som vi ser her. Vi tildeler et nul, nul deroppe. 2,0 og 0,2. Så du vil bare få adgang them-- hvis nogen nogensinde har gjort lineær algebra, på samme måde, du får adgang til et element i en matrice, er det den samme idé her. Så du kan relatere det tilbage til matematik. Du behøver ikke at bekymre sig for meget om dette lige nu. Det er godt at have eksponering, at vide, at du kan gøre det. Du kan skabe nogle crazy number-- du kan skabe skøre arrays er alt hvad jeg har tænkt mig at sige. [Uhørligt] Det bliver en lidt skør, men det er virkelig cool. Awesome. Og så, så vi har et eksempel her. Den beregner en streng længde. Så hvor mange mennesker vidste, at strengene, du bruger er kun arrays af tegn? OK, ja. Så du fyre tror måske, at du ikke har brugte arrays før, men enhver tid du bruger getString i CSView bibliotek, du er faktisk bare beder om et array af tegn. Og vi tager os af alle at i back-end til dig. Men du har brugt arrays, siden du startede. Du vidste bare ikke ved det endnu. Og når du har en karakter-array eller et array, der er lagring af en streng, Den sidste ting er altid, hvad der er kaldes en null terminator, som er det lige her. Og der er ved udgangen af hvert ord, du opbevaring. Så hvis vi ønsker at finde ud af længden af ​​en streng, kan vi sige, godt, du ved, den indholdet af denne blok er ikke lig med vores null terminator. Det betyder, at der er en tegn der, at vi faktisk bekymrer sig om det er en del af ordet. Du øger din længde. Og så når vi faktisk kommer til enden af ​​ordet, vil det afslutte og det vil returnere vores længde for os. Mmhmm? STUDENT: Er rummet tæller som nul terminator? ALLISON: Så en plads ikke en null terminator. Så hvis du har multiple-- et rum er faktisk en specifik ASCII værdi. STUDENT: Hvad er udråbstegn lige igen? ALLISON: Så dette er hvad du refererer til. Hvis du nogensinde høre mig i kontortiden, Jeg altid kalder det, ligesom, bang lig. Så bang er ikke. Så dette er ikke lig. Så hvis du forsøger at se, om noget er falsk, du kender altid gør, bang uanset variablen, og hvis det er falsk, det evalueres til sandt, og du kan gøre fede ting med det. Mere om det senere. Cool. Alt godt der? Awesome. Så nu er det dine guys tid til arbejde, da jeg har talt. Så jeg vil have dig til bare oprette et array med heltal et, to og tre, og derefter få dem printet ud. Du behøver ikke at gøre, ligesom, main, bla, bla, bla, uanset hvad. Jeg vil bare have dig til at initialisere array og derefter oprette en for-løkke til at udskrive dem out-- eller en while-løkke, op til dig. Jeg vil bare give dig et par minutter til at arbejde på det. Jeg har tænkt mig at hvile min stemme. Hvis du har spørgsmål, er jeg glad til at komme rundt og tale med jer. Du er velkommen til at tale med hinanden. Få mere slik. I virkeligheden vil jeg bare gå rundt med slik. Hvordan er det? Vil du have noget? Alle andre i dette rum vil have slik? Du kan også tage mere end én, gutter. Tag en håndfuld, hvis du ønsker. Kan lige så godt. Alle andre gode? OK. Også, jeg kommer til at skabe en anonym Google Form, og du fyre kan bare indsende feedback efter hvert afsnit hvis der er noget, du ønsker at forbedre på eller noget, du vil have lavet. Hvis jeg er en lidt for peppy for dig, kan jeg nedtone det. Jeg vil skabe det og sende det ud til jer alle bagefter. Ok. Så lad os starte små. Hvordan ville vi initialisere vores array? Hvad er typen af ​​vores array? En int, right? OK, så hvad vil du at ringe til din array? Int array, cool. Okay, så vi har int int-array lig, og hvad har vi efter det? STUDENT: [uhørligt] parentes. ALLISON: seler. Og derefter inde i seler? Et komma to komma tre. Cool. Så det er okay. Så nu har vi vores for-løkke. Så i den første del af vores for loop, hvad har vi? STUDENT: Jeg er lig med 0? ALLISON: Så int Jeg er lig med 0, og hvad er vores tilstand? Hvad jeg kommer til at være mindre end? Mindre end tre, og hvordan vi gør vi opdaterer jeg? Jeg plus plus, opdaterer det med én. Og så vil vi have nogle printf af heltal, og hvad er det sidste del, der er faktisk kommer til at sige, hvad vi skal udskrives? Det ville være navnet på den array, som er int array, right? Og hvad der er i parentes af int array? i. [? Så jeg?] Kaldte min eksempel, men der du går. Ikke så slemt. Alle godt? Cool. Så vi er færdig med arrays. Congrats. Du formåede at gentage gennem alle til-- ja? STUDENT: [uhørligt] ALLISON: Ja. STUDENT: Jeg har et spørgsmål. Er du formodes at indrykke seler? ALLISON: Så seler skal linje op med for-løkken, og derefter alt inde i seler skal indrykket. STUDENT: OK, bør det for-løkke blive indrykket? ALLISON: Den for-løkke ikke skal indrykket på dette punkt. Hvis du var i main, hvis vi faktisk havde en hovedfunktion her, det ville blive indrykket fra main. Men i dette tilfælde, er det fint. Ja, spørgsmål. STUDENT: Har du brug for at have parentes efter eksempel? ALLISON: Ja, hvis du er initialisering det på den måde. Så husk, dette er den anden måde for at formatere et array, hvor vi har de seler og derefter vores faktiske data adskilt af kommaer inden for. STUDENT: Jeg troede, at der var beslag til dette eksempel. ALLISON: Nej, de er seler. De er seler. Hvis du formatere den den anden måde, det er seler. Hvis vi skulle sige, int example-- hvis vi ønskede netop en blank array til int'er, det ville være int eksempel konsoller tre. Konsollerne repræsenterer størrelse. Når du har seler, Det er de faktiske data du lægger ind i det på denne måde. Vi kan rulle tilbage virkelig hurtigt. Så i denne ene, det er bare vores indledende array, initialisering. Og her er vi individuelt tildele pletter på dem, så dette repræsenterer indekset for vores array, hvilket er grunden til vi har parentes. Men her, hvis du bemærker, har vi forlod vores parentes uden en størrelse, og vi initialisere det med faktiske data all-in-one med seler. STUDENT: Så hvorfor har vi ikke parentes i dette eksempel? ALLISON: Så i hvilken del? STUDENT: Ville vi ikke Sig, int f.eks parentes lig seler [uhørligt] beslag for eksempel. ALLISON: Åh, undskyld. Du har ret. Vi har parenteser der. Sorry guys, mit dårlige. Ja, du skal have parentes efter f.eks. Du har fuldstændig ret. STUDENT: [uhørligt] ikke at gøre det. ALLISON: Nej, du skal have beslag, fordi ellers er det ikke kommer til at erklære et array. STUDENT: [uhørligt]. Undskyld. ALLISON: Beklager, du har brug for parentes efter f.eks. Typo. God fangst, guld stjerne for dig. Også, hvis du spørger et spørgsmål, hvis du fyre ville bare fortælle mig jeres navne, Jeg ville elske det. Jeg ville elske at være i stand til kender alle jeres navne. Jeg har ikke tænkt mig at kulde ringe til dig, jeg faktisk bare ønsker at kende dine navne. Så vær venlig faktisk fortælle mig jeres navne. LEAH: Leah. ALLISON: Leah. OK, så functions-- jeg kender i korte træk de talte om dette i løbet af foredraget. Så funktioner er slags bare ligesom disse små bid-størrelse ting hvor du passerer i input, noget magiske sker, og du får udgange. Cool. Så faktisk bruges dig en masse af disse allerede. Få int, få snor, print f. Disse er alle funktioner hvor du bare ringe til dem, der er masser af magiske ting foregår i baggrunden at du ikke nødvendigvis se, og du får ud af, hvad du ønsker. Eller i det mindste får du hvad du håber, du ønsker. Og dybest set det punkt funktioner, og en af ​​de vigtigste temaer i CS, er at bryde din kode i håndterbare stykker. Når du begynder at skrive disse rigtig lange programmer, eller i Scratch, når du havde denne store idé til et spil, du har brug for at være i stand til at bryde det ned til, ligesom, OK, hvordan skal jeg begynde? Hvad er de små stykker, som jeg har brug for? Åh, jeg har brug for at spørge bruger til noget. Nu har jeg brug for at udskrive noget. Åh, jeg har brug for at beregne denne værdi. Og lære at bryde op din kode og de store problemer, du har i disse små stykker og skabe funktioner er faktisk en af ​​de store hjørnestene i CS. Så du kan tænke på en funktion, ligesom som en sort boks, en magisk sort boks, at du sætte tingene i og du får nogle output. Og resten af ​​programmet behøver ikke nødvendigvis ved hvad der foregår inden for denne sorte boks. Alt det bekymrer sig om, er, hvad går ind og hvad der kommer ud. Cool. Så hvorfor funktioner? Organization-- som jeg sagde, når du er beskæftiger sig med meget store kodebaser, hvordan du organiserer din kode vil være meget lettere, hvis du bruger funktioner. Fordi du vil være i stand være ligesom, OK, dette er, hvad denne funktion gør, og her er hvad en anden gør. Og du kan let se hvordan de alle passer sammen. Så bryde det op i alt disse håndterbare subdelene. Så simplification-- jeg er sikker på du fyre alt så det, som jeg sagde, med Scratch. Du har denne grand idé, og du er ligesom, hvordan gør alt dette arbejde? Men hvis du nærmer dig det stykkevis, du siger, OK, hvordan gør jeg en sprite flyde på tværs af skærmen? Det er en lille smule lettere. Så god brug af funktionen gør din kode meget nemmere at læse. Det gør det nemmere at fejlsøge der som du kommer ind i din senere problemet sæt, du vil virkelig vil være i stand til at gøre. Og de er også lettere at designe og implementere. De kan kode en lille fungere relativt hurtigt og sørg for at det virker versus prøve at skabe hele denne lange program og derefter slags gå igennem og se, hvad der virker og hvad der ikke. Og så genanvendelighed. Så fungerer kun brug skal skrives én gang, og så kan du bruge dem så mange gange som muligt. Så det er ligesom, øko-venlige i en vis forstand. Hvis du havde ting som print f, hvor du havde til at skrive ud den magi, der går bag udskrive f hver eneste gang du ønskede at udskrive noget, du ville være temmelig syg og træt af det ved udgangen. En af de ting, som du vil lære i senere CS klasser eller en af ​​de bedste råd jeg får er, hvis du kopiere og indsætte kode, bør den sandsynligvis være en funktion. Hvis du har den nøjagtig samme linjer alle hele din kode, hvis du indregnet dem ud, din kode ville sandsynligvis være, ligesom, fem gange kortere og være meget mere let at læse. Og i stedet for at forsøge at fejlfinde alle disse forskellige steder, hvor tingene kan gå galt, har du en funktion at du kommer til fejlfinding. Og jeg lover, en masse af dette kan synes slags abstrakt nu men da du kommer ind senere og senere problem indstiller, det vil gøre en masse mere mening og virkelig blive kørt hjem. Er der nogen spørgsmål om funktioner indtil videre? Hvorfor vi bruger dem? Jeg ved, vi har ikke fået ind i Nitty Gritty endnu. Så definerer en function-- ligesom arrays, vi har brug for nogle slags of-- dette er blot den almindelige produktion. Så dette er en funktion, der er bare i Cube nogle input. Og på den næste side, faktisk, vi har alle disse awesome små ting her. Så kan alle læse at ud af nysgerrighed? Jeg kender den lilla og sort kan være lidt hårdt. Men store ting at know-- så den første en her er vores tilbagevenden type. Så dette er tale om output af denne funktion, når i dette tilfælde, vi sætte nogle tal, hvad vi er få, er, at antallet kubik. Så det burde være en int i dette tilfælde. Måske ville det være en dobbelt eller noget andet senere, men i dette tilfælde, det er en int. Med c, du altid har brug for en tilbagevenden type. Det vil være en int. Det vil være en vis kassebeholdning. Det vil være en dobbelt. Men du skal angive, hvad denne funktion vil vende tilbage. Ellers vil det yell på dig, og det vil ikke kompilere. Du vil være ked af, og jeg vil være ked af det. Og det er bare ikke godt. OK. Og så har vi vores funktion navn. Og som du kan se her, med c der er denne meget konsekvent paradigme. Hvad er din type, hvad er det navn, og derefter nogle andre ting i slutningen. Så vi har vores tilbagevenden type vores funktion navn, og derefter vi har vores header med vores parameter listen. Så parameterliste er, hvad der er denne funktion kommer til at tage i? En parameter liste er blot en synonym for, hvad er vores input? Og på samme måde, som vi nødt til at definere vores funktion og give det en tilbagevenden skriver, hver af vores input skal have en type forbundet med det. Så vi ved, hvad vores funktion kan faktisk arbejde med. Så i dette tilfælde har vi nogle int input. Så igen, vil det være den type og hvad du kalder det. Og så, som du ser her, vi har vores krop. Så vi har nogle int output, at er blot vores input gange selv gange selv, som blot terninger det. Og så vender vi tilbage, at produktionen. Så som du kan se her, har vi en int gange en int gange en int, så det returnerer en int, som er blevet erklæret der. Så alt er sammenhængende. Alt er glade. Din funktion vil køre. Og dette er kun den almindelige ting. Så altid har returtype, navn, og din parameter listen. Hver ting i dit parameter liste eller input, skal have en type forbundet med det. Og så har du din krop her med uanset du ønsker at gøre med dit input. Og så selvfølgelig dig ønsker at vende tilbage noget. Undertiden funktioner vil blot vende tilbage. De behøver faktisk ikke tilbage noget for dig at bruge. Men du er nødt til at vende tilbage på en eller anden måde. Og når du laver dine egne funktioner, vi kan komme ind i det lidt dybere. Personligt, hvis du ønsker, der er en masse forskellige ting, du kan gøre der. Alle godt? Noget på denne liste, som du vil have mig at gå over, at du ikke forstår? Alle er godt der? Cool. Awesome. OK, så vi putter alt dette sammen nu. Så vi har nogle int terning input, så dette er et komplet program her. Indtil nu, har jeg slags været at give dig guys snippets, der kan være at gå i et program. Vi har lige set på funktioner. Men her er et helt program. Så hvor mange af jer husker den ord prototype fra forelæsning? Cool. Vi har fået en. Hvad er dit navn? STEPH: Steph. ALLISON: Steph? OK, awesome. Så behøver du huske, hvad en prototype er? STUDENT: Du siger [uhørligt] før du rent faktisk beskæftige sig med det. ALLISON: Kan du huske hvorfor? STUDENT: Nej. ALLISON: OK. Guld stjerne. Så ja, en prototype, vi har på forhånd, fordi ellers vores compiler vil yell på os. Det kommer til at sige, OK, hvad er denne terning funktion? Ligesom, du bogstaveligt talt har fortalte mig noget om dette. Det er ligesom, når du gå ind i et klasseværelse, og nogen er ligesom, der er en quiz i dag. Og du er ligesom, du aldrig fortalt mig om dette. Jeg er ikke tilfreds med os. Prototypen er dybest set gerne dit pensum siger, kigge. Heads up. Der kommer til at være en quiz på denne dag. Må ikke flipper ud, når du kommer til det. Du kommer til at være fint. Så alt prototypen gør, er at fortælle main, jeg har tænkt mig at bruge denne funktion. Jeg lover, jeg definere det senere. Må ikke flipper ud på mig. Bare samle og gøre, hvad jeg fortæller dig til. Så vi har prototypen der bare for at gøre vores compiler glad. Og det er dybest set et løfte, du har defineret denne funktion senere og at du ikke bare ringer denne tilfældige ting, at det ikke ved, hvad du er vil gøre. Så i dette tilfælde, har vi main her. Vi initialisere nogle heltal x. Det er to. Vi kommer til at printe ud, hvad x er. Vi vil i Cube x. Som du kan se, har vi vores funktion erklæring hernede, at vi talte om tidligere. Det vil terning x, og derefter, hvis vi husk, terningen funktionen faktisk returnerer et heltal til os, der er lagret ix igen, så vi kan udskrive ud otte eller terning x højre nu. Giver det mening for alle? Vi er gode? Ok. Awesome. Ok. Hvor mange af jer Husk dette, så dette er dybest set bare din stak og din bunke, blot en visualisering af hvor hukommelsen er lagret her. Så vi blot ønsker at gøre sikker på, at du forstår hvordan disse er repræsenteret i hukommelsen. Hvis du tager klasser som CS61 og kram senere, du kommer til at lære dette langt mere i dybden, og det er virkelig cool. Jeg kan varmt anbefale det. Men for nu, vil jeg give dig det overblik så du ikke behøver at kender Nitty Gritty. Så toppen blot et tekstsegment som indeholder de faktiske nuller og ettaller, den binære for. Og dette bruges til lagring af globale variabler, hvis du har nogen. Når du bevæger dig ned, vi have, som du kan se her, klargjorte data, initialiseret data, og derefter bunke. Så vi kan ikke rigtig snakke om bunke lige nu. Vi vil komme til det senere. For nu, jeg bare gå til bølge mine hænder og være ligesom, du behøver ikke at vide om dette nu. Men vi vil tale lidt lidt om stakken. Så stakken er where-- vi har zoom ind. Dette er faktisk, hvordan programmet vi bare kiggede på optræder i hukommelsen. Så sker der det, hver gang vi kalder en funktion, vi får, hvad der kaldes en stak ramme, hvilket er en af ​​disse. Så de vigtigste parametre. Så det er de ting at vi går ind i main. Så de er lige her i bunden, fordi det er den første ting, vi kalder. Og så får vi til Mains lokale, og når vi siger, at, mener vi de lokale variable der er lagret i main. Så lokalbefolkningen her ville være ligesom, x er lig med to i dette tilfælde. Fordi der er lokaliseret til main. Skal alle huske rækkevidde, gå over, at der i foredrag? OK. Så, bare de variabler, initialiseres inden vigtigste. Så det er derfor, vi har main [? vokal. ?] Og så inden vigtigste, vi kalder terning. Right? Så får vi en anden ramme med cube parametre. Så i dette tilfælde, kubens parametre er nu x at vi passerede i, de to, som vi passerede i. Og så cube lokalbefolkning, som er hvor selve cubing sker. Og så er det tilbage. Så hvad sker der, er som terning faktisk gør hvad det er meningen at gøre, det vender tilbage. Når det vender tilbage, dette stel blade, og tilbage ned til main. Og så inden vigtigste, vi kan faktisk udskrive det. Så når du vender tilbage noget, når din funktion returnerer, det er ligesom at videregive disse værdier til rammen under det, og derefter forlader. Og tingene er nødt til at udføre i orden. Og når du kommer til større programmer, vi kan gøre køligere og mere kompliceret diagrammer. Men for nu, det er blot en generel oversigt så du har sådan en forståelse af, hvad sker, når du ringer til en funktion og hvordan det faktisk ser i hukommelsen. Cool? Alle godt? Awesome. Så det er en, der er blot forsøger at bytte ting. Som vi ser her, har vi vores funktion prototype så vores compiler ikke yell på os. Vi har nogle main, og vi ønsker at skifte x og y. De har ikke gjort denne demo i foredrag endnu, har de? De har ikke? OK. Så vi kommer til at gå i denne meget kort. Du får ind i dette eksempel mere i dybden, tror jeg, i denne uge. Og så i næste uge kan vi virkelig dykke ned i, hvorfor dette ikke virker. Så vi har dette tomrum funktion her-- swap. Så void betyder blot, at intet er tilbage. Og vi har swap int a og int b. Og vi har nogle midlertidige variabel, der er en. a bliver tildelt til B, og derefter B bliver tildelt temp således at en og BS værdier er nu skiftet. Men plot twist, dette virker ikke. Og en del af det faktisk har at gøre med det faktum, at en og b her, dem, der bliver vedtaget i her, er faktisk kopier af x og y. Så når funktionen faktisk returnerer, den skifter kopierne, men ikke den faktiske x- og y s. Så en måde at tænke på det er at-- foregive disse er swap. OK? Så i main, vi har x og y initialiseret. Men når vi faktisk gå op disse rammer med swap, vi passerer værdier over til det, og de er initialiseret. Og de kun nogensinde bor lige her. Så a og b bor her. Og de bliver byttet. Men når vi vender tilbage, gør vi ikke gøre noget med a og b. en b orlov med vores funktion. Og så x og y forblive den samme. Du får mere ind i, hvordan du løser det, og hvordan vi rent faktisk behandler det senere. Men det er bare én ting at slags huske. Brug den til fremtiden. Må ikke bekymre dig, hvis det ikke gjorde alle forstand i verden. De er kopier er den største ting. Hvis du kommer til at tage noget væk fra det, du har bestået i kopier. Så originalerne forbliver de samme. Alle godt? Cool. Så kommandolinjeargumenter. Jeg er sikker på i starten jer alle havde de store, ligesom, int main hulrum. Og du er ligesom, OK cool. Jeg er faktisk ligeglad. Det er lige hvad jeg skal skrive. Men i dine nye programmer, især i denne pset, og hvorfor er der kridt på jorden? Med din næste pset, er du vil være at se dette. Int main, int arg c, string bue v, parentes. Så fra hvad vi lige lært dag, hvad mener vi, at anden parameter eller at andet element er her? Det er et array. Hvilken type af array? String array, ja. Cool. Så det er hvordan du vil at erklære disse nu. Er der nogen der kan huske hvad disse står for? Nej? Hmm? STUDENT: arg c. ALLISON: Så arg c holder en tæller. Det er en int. Det er et tal, right? Så hvad tror du, at antallet er af? Ja. Så arg c er antallet af strenge at gøre kommandolinjen op. Så hvis vi skulle do-- faktisk, der er eksempler efter dette, så det vil jeg ikke komme foran mig. Det er en række strenge, bare gøre din kommandolinje op. Så når du gør det, ligesom, dot skråstreg Mario, det er en streng, der gør det op. I dette stykke, vil du faktisk være fodring ting i kommandolinjen, som jeg er sikker på du fyre, der har læst spec sav. Så i de tilfælde, måske vil du har to eller tre argumenter. Det kommer til at være en nyttig ting at bruge. Og så arg v, som vi sagde, er bare en streng array. Så der faktisk gemmer det du input til kommandolinjen. Så vi har disse. Du har nogle dot skråstreg kopiere infile outfile. Så hvis arg c er antallet af strenge at vi passerer ind i kommando linje, hvad er vores arg c i dette tilfælde? Tre. Præcis. Så hvad er arg v på nul? Så hvad er den første ting, vi har gemt? Dot skråstreg kopi, præcis. Og derefter det andet ville være infile. Den tredje vil være outfile. Så hvad med arg v tre? Det ville være null, fordi det er I slutningen af ​​vores array, right? Cool. Og hvad så om det sjette en? Det er lidt af et trick spørgsmål. Ish. Ved vi, hvad det er? Det er udefineret. Vi har ingen idé om, hvad det kunne være. Det er hvad der er rigtigt efter array i hukommelsen, og vi har ingen anelse om, hvad det er. Og det er farligt at røre dem, ting, fordi for alle du kender, det er en del af hukommelse, som du bør ikke være adgang til eller null. Og det kan gøre skøre ting. Det kaldes over-indeksering din bundet til dit array. Må ikke gå uden for rammerne af din array, eller dårlige ting kan ske. Du kommer tilbage, og ligesom de love i fysik er blevet ødelagt eller noget. Cool. Giver det mening for alle? Ikke alt for dårlig. Så nu, alle er favorit del, pset gennemgang. Yay! OK. Så for dem af jer der har ikke læst pset spec, du laver nogle virkelig cool stuff med kryptering. Du kommer til at skabe en Ceasar Cipher og en Vigenere Cipher. Du bør absolut læse spec at se, hvordan de arbejder. Og hvis du har nogen problemer omkring hvad det bør faktisk gøre, kan du komme tale med mig, email mig eller tekst mig. Jeg er rundt. Så der er tre vigtigste ting her, at vi ønsker at tale om-- bare lidt af en udvidelse af foredrag. Ting, som du måske ikke kender om, nyttige tips og værktøjer. Så vi kommer til at gøre en hurtig gennemgang af ASCII, fordi det vil være super vigtigt for Vigenere s Cipher. Vi kommer til konvertering af kommandolinje-indgange, som vil være meget nyttigt for Caesar Cipher. Og så modulo. Cool. Så ASCII kortlægger tegn til tal. Dette er en stor diagram. Du skal have denne bogmærke eller andet sted. Du vil have den til Deres første midtvejsevaluering. Jeg er temmelig sikker på at alle har dette skemaet på deres mid-term sheet. Så lære det. Elsker det. Hold det handy. Det vil være nyttigt. Og alt det er, er en kodning der kortlægger alfabetiske, numeriske, og andre tegn til tal for vores computer. Fordi naturligvis i ende, alt, hvad vi opbevarer kommer til at få konverteret ned til nuller og ettaller, så vi har brug for nogle måde at repræsentere tekst og tegn, at vi alle vant til at se som en slags nummer. Så som vi ser her, har vi store bogstaver A, som er dér. Det er 65 år. Og små bogstaver A er 97. Så du kan regne out-- som jeg sagde tidligere, hvis du havde matrix af multiple strygere, hvad hver af dem har en null terminator. Det ville være et mellemrum. Rummet har sin egen special-- Jeg glemmer, hvor det er her. Ah. 32 er rummet. Så alt kort til det. Så vi har ASCII matematik. Pro tip-- i Vigenere s, du kan blive fristet til at konvertere dine numre til heltal, men det er faktisk bedre praksis at være i stand til at bruge tegn som denne når du faktisk manipulere dem. Så hvis du ønsker at bruge tal, du kan. Men en bedre måde, eller en måde, der vi har en tendens til at lide jer til at gøre det, er på denne måde, hvor du er faktisk fratrække tegn. Så jeg vil have dig fyre til slags finde disse ud. Hvorfor ikke du prøve hver anden? Så gør det første, de tredje og femte. Fordi jeg vil være sikker på, at vi taler om alt, hvad vi har brug for at snakke om. Jeg vil blot sige, en af ​​de vigtige ting at-- oh vente, du fyre har ikke set denne ene. OK, så gør de første tre. Lad os gøre det. Fordi vi er nødt til at snakke om modulo. Jeg kender. Math er hårdt. Du kan bruge en lommeregner. Det er OK. Eller trække en ASCII tabel, fordi du sandsynligvis vil ønsker det. Cool. Så jeg vil hurtigt gå jer gennem disse. Så folk har ASCII tabeller trukket op? Hvad er vores numerisk nummer for små bogstaver A? STUDENT: Seven. ALLISON: Så små bogstaver A er 97 og store bogstaver A er 65. Så 97 minus 65? PUBLIKUM: 32? ALLISON: 62, ja. Så i dette tilfælde, hvad ville det udskrive? Det første? Hvis vi har procent d, hvad ville det indikere? STUDENT: En række. ALLISON: Vi udskriver en egentlig nummer. Så vi er faktisk i gang at udskrive 32 her. Og hvis det var procent c, 32 ville give os en plads. Så forstå, at tegn kan udskrives både som tal og som de faktiske tegn er virkelig vigtigt, og betale opmærksom på de faktiske typer at vi laver her. Cool. Så for hver anden af ​​disse, hvad skal vi skal udskrive? STUDENT: En karakter. ALLISON: En karakter. Cool. Så hvis du fyre ønsker at vide, du kan arbejde disse ud på egen hånd. Hvis du har problemer, email mig. Men den anden vil udskrive en lille b. Den tredje vil udskrive en stort B. Den fjerde vil udskrive ud et stort C, og sidste vil være et lille A. Og den sidste en-- vi faktisk går at komme ind i, hvad det skøre procent tegn selv betyder et par dias. Så prøv dem på din egen. Hvis du har problemer, bedes komme tale til mig. Hvis du er typisk i Adams D hall, du skal nok finde mig rundt. Så atoi. Hvor mange af jer har set denne funktion eller hørt om det på alle? Anyone? Cool. Så hvad det egentlig står for er ASCII til heltal. Så hvad du kan gøre er, med Cæsar, for dem, der læser spec, du kommer til at gøre dot skråstreg Caesar efter at du skriver dit program, og så er du nødt til input nogle tal, som du ønsker at indkode din hemmelige besked med. Men, hvis vi husker, alle vores indgange gemmes som strenge. Right? Vi har en arg v matrix det er alt streng type. Så hvis du bare prøve at trække det ene, det vil mener, at den ene eller hvad nummer du har brugt, er faktisk et tegn. Så du kommer til at få nogle vanvittige resultater. Så hvis du rent faktisk ønsker at gøre dette til et heltal som du kan bruge til at manipulere Deres ord eller dit budskab, du ønsker at bruge atoi. atoi blot konverterer din streng til et int. Så hvis vi har en perlerække af 12 år, hvis vi kalder atoi den 12., eller hvad dette input er, det faktisk vil vende tilbage til dig heltal. Ikke det tegn eller strengen 12. Hvilket, når du starter at tilføje, at til tal, vil være meget forskellig, fordi strengen 12 er nogle vanvittige tal i ASCII, men det hele tal 12 er faktisk 12, hvilket er hvad du ønsker. Så du ønsker at sørge for at bruge atoi. Du kommer til at have dette i Cæsar, fordi du brug for int leveres af bruger i kommandolinjen. Men når de sætter det i kommandoen linje, gemmes som en streng til at begynde med. Giver det mening? Du behøver ikke nødvendigvis brug for dette for Vigenere. Med Vigenere, som jeg sagde før, bør du prøve og bruge ASCII matematik, der ligner mere dette, hvor du faktisk ved hjælp af de tegn, som vi er givet til dig. Cool. Alle godt der? Awesome. Så modulo. Så hvad nu hvis du er givet dette enorme antal for Cæsar? Du har denne idé om, at hvis du er på Z, og du er givet en nummer to, det betyder at du need-- Z bliver den anden brev efter sig selv, right? Så du har brug for at en eller anden måde vikles rundt, og modulo er den måde at gøre det. Så alt det gør, er det giver dig resten af opdelingen af ​​den første tal med det andet. Og vi har nogle eksempler for gøre, at en lidt mere konkret. Men dybest set, du bruger modulo når du ønsker at gøre noget wrap around. Så hvis du kun ønsker det numre én gennem otte, kan du bruge modulo på noget andet nummer, og det vil altid returnere et tal fra nul til otte. Så nogle examples-- hvis Vi har 55 modulo 10, det blot giver dig resten af 55 divideret med 10, hvilket ville være 5. Og derefter tre modulo fem, nogen gætte, hvad det ville være? Tre. Så hvis du har et mindre antal før modulo, kan den ikke gå jævnt. Det er nul. Så det bare returnerer selve nummeret. Så otte modulo otte ville være? STUDENT: Zero. ALLISON: Zero. Fordi det går i jævnt. 16 modulo 15? PUBLIKUM: One. ALLISON: Cool. Og så er denne sidste er bare at vise du-- du måske være undrende, OK, hvad er rækkefølgen af ​​operationer her? Har vi deler først? Har vi modulo først? Så modulo holder samme forrang som division eller multiplikation, og dens venstre associative. Så det er på samme måde. Du ville altid gøre parenteser, derefter multiplikation, division, og modulo i rækkefølge fra venstre mod højre. Så standardregler. Bare sætte det i samme kategori som division og multiplikation. Så i dette tilfælde, ville vi har 1 plus 2 giver os 3. Vi formere sig, at med 2, så vi får 6. Vi modulo at ved 2, hvilket giver os? STUDENT: 0. ALLISON: 0. Og så tilføjer vi 2, så vi få 2 i sidstnævnte tilfælde. Så modulo-- du absolut vil tænke måder at indarbejde at når du indpakning omkring alfabetet. Hvis du er på Z, og du er nødt til at flytte sende tre rum for at komme til C, der er det hele konceptet af indpakning omkring. Så jeg vil overlade det til jer at regne ud præcis hvordan du vil bruge det. Men absolut et nyttigt værktøj for din pset denne uge. Jeg kan virkelig godt lide dette. Dette er en af ​​mine foretrukne psets. Så når du gør det, hvis du har venner, kan du, ligesom, sende hinanden hemmelighed beskeder og sørg for at det virker. Fordi det vil dekryptere den eller hvad. Masser af sjov. Og det er i slutningen af ​​afsnittet. Jeg er færdig tidligt. Jeg har stadig 15 minutter med jer, så hvis der er noget, at du gerne vil gå over yderligere, ville jeg være glad for at gøre det. Alle andre spørgsmål om din pset for dem af jer der har påbegyndt eller læs spec. Noget, som vi har talt om i den sidste time og 15 minutter, som du gerne vil have mig at slags opkog, ville jeg være glad for. Eller vi kan kalde det afsluttes, og du kan alle forlade og tage mere slik med dig som du gå. Men hvis der er nogen dvælende spørgsmål, så lad mig det vide. Du kan også komme op og tale med mig bagefter. Jeg lover jeg ikke at bide. Noget andet? Alle er godt? Alles følelse som de kan håndtere dette pset? Du kommer til at være fine fyre. Kontortid er der en grund til. Cool. Okay. Tja, i dette tilfælde, tak jer alle så meget for at komme. Jeg håber at se dig i næste uge. Der vil være mere slik. Der kan være andre seje ting. Og jeg ser frem til at få at kende alle jer dette år.