[MUSIC SPILLE] ALLISON Buchholtz-AU: Hei alle sammen. Velkommen til din første offisielle CS50 delen. Som du kan se er dette § CS50-aktig, bare å trekke opp vår dagsorden for i dag. Så, hvem er jeg, som jeg er sikker dere alle lurer på. Jeg er din TF. Jeg er ikke bare en tilfeldig student hvem har utgi din TF. Og jeg kommer til å gå gjennom slags har deler vil flyte, forventningene vi har, ressurser, så videre og så videre. Vi kommer til å snakke om arrays, ASCII funksjoner, kommandolinjeargumenter, og det er ikke på her, men Jeg vil også være å hjelpe du slags tenke gjennom din neste PSet for denne uken. Som jeg er sikker på at du vil alle setter pris på. Så, først question-- hvem er jeg, i tillegg til din sprudlende TF her. Jeg er Alison Buchholtz-Au. Dette er mitt andre år TFing CS50. Jeg har også TF CS51 på våren. Du kan se igjen det hvis du velger å ta den. Jeg er også en PAF, så noen Freshmen-- og hvis du ikke er en førsteårsstudent, dette er mitt tredje år som en veiledning fyr. Jeg er veldig godt bevandret i gi deg råd om livet og kurs innen CS og ikke innenfor CS. Jeg er en Computer Science konsentrator. Jeg er en senior i Adams House, beste huset. Og før jeg byttet til CS mitt Sophomore Spring, Jeg var faktisk en biomedisinsk ingeniør. Jeg hadde tenkt å gå til Med skolen. Jeg kom til å bli et traume kirurg. Og det har helt endret siden jeg tok CS50. Jeg tok kurset mitt Sophomore Fall. Det var min første introduksjon til CS noensinne. Jeg var en av de 78% av dere som hadde null erfaring som kommer inn, og det helt forandret livet mitt. Og nå jobber jeg på Microsoft, og din vakre TF. Og CS50 er trolig en av de beste opplevelsene at jeg har hatt her på Harvard-- både tar klassen og være i stand til å hjelpe lære elevene som deg. Så jeg er veldig spent at du er alle her. I tilfelle du kom i sent, det er godteri, som du bør føle fri til å komme grip, eller sende noen andre til å hente det for deg. det er OK. Jeg ønsker ikke å spise det. Rommet mitt har nok sjokolade, så y'all bør prøve og fullføre det. Jeg vet det er 100 stykker, men som, fire på en mandag, Jeg tror alle kunne bruke litt sukker. Så alle dere som er offisielt i min seksjon burde ha fått en e-post fra meg med telefonnummeret mitt, e-post address-- gjerne legge meg på Gchat, gjerne legge meg på Facebook, og også for resten av dere, du kan sende meg rett her. Det er to H-tallet. Alle alltid gjør som to L's eller to C-tallet. To H menn i etternavnet. Ellers kommer det til å sprette, og Jeg kommer ikke til å få e-posten din. Så gjerne send meg, å kontakte meg når som helst. Jeg kan ikke komme tilbake til deg innen 24 minutter, men jeg lover å komme tilbake til deg innen 24 timer. Hvis du ringer meg en halvtime før din PSet skyldes, du blir som, Jeg aner ikke hva jeg gjør Allison. Hjelp meg. Jeg kommer til å roe deg ned, men på slutten av dagen, hvis du ringer meg en halvtime før din PSet skyldes med ingenting skrevet, Jeg kommer til å være som, vel, kanskje det er på tide å bruke det sen dag. Så jeg vil svare på alle dine forespørsler i en svært betimelig måte. Telefonen min er vanligvis festet til hendene mine. Jeg vanligvis svare mye raskere enn 24 timer, men jeg kan bare garanti en 24 timers reaksjon. OK. Så hvorfor er vi her? Også, hvis du har spørsmål på helst, vennligst gi meg beskjed. Jeg snakker mye. Jeg snakker fort, men vær så snill gjerne avbryte meg. Det gir meg puste rommet også. Så seksjoner er en tid for oss å egentlig bare dykke i, få litt hands-on erfaring, for å gå gjennom emner som vi nevnte i klassen eller i læremateriell som Vi anbefaler til dere på nettet. Og vi vil faktisk gå gjennom noen av disse ressursene i en bit. Så noen notater på seksjonen støtte. CS50-- en av tingene som gjør det er en av mine favoritt klasser er følelsen av at du er aldri alene. Vi har en stab på over 100 folk som er her for å hjelpe deg. Vi har kontortid Mandag til torsdag. Så det er så mange mennesker som elsker klassen like mye som jeg gjør og hvem er egentlig her fordi de ønsker å være her. De fleste av oss er studenter, og dette er som en femte klasse i tillegg til resten av vårt arbeid. Og det er mye arbeid, men Vi gjør det fordi vi elsker det, og vi elsker å lære deg og bidra til å dele vår begeistring for dette temaet og denne klassen. Så kan du ta fordel. Komme å snakke med oss. Jeg får ensom når elevene mine ikke snakke med meg, så hvis du vil, kommer til å henge ut med meg. Det vil være stor. Så delen er åpenbart en av dine største ting. Vi vil gå gjennom ting at du lærte på forelesning, gjøre noen korte eksempler når vi har tid, og generelt slags få en idé om ting du bør tenke om for din oppgavesettet. Shorts-- hvor mange som faktisk sett videoen fra scratch kort? Alle som kjenner meg? Så de er veldig stor. Du bør absolutt se dem. Mye arbeid har blitt satt inn i dem. Og de er bare ment å være bite-size stykker for deg å bare se for tre eller fire minutter og få en bedre forståelse av et konsept. Gå throughs-- hvordan mange mennesker har sett walk-throughs for foregående? Zamyla er utrolig, ikke sant? Som, jeg skulle ønske jeg var Zamyla noen ganger. Så definitivt bruke walk-throughs. Hun vil bryte det ned i små, bite-size stykker. Og når du har disse enorme spesifikasjoner fra dine oppgavesett, det kommer til å være veldig viktig å være i stand til å bare finne et sted å starte og arbeide langsomt gjennom den. Greit, vi har også Study50, som er study50.harvard.edu, tror jeg. Du kan bare Google studere, og det vil komme opp. Dette er en av beste ressursene vi har. Det er Powerpoints med noter og praksis problemer for deg med løsninger som du kan faktisk gå gjennom. Så hvis du noen gang ønsker mer praksis mer enn vi gjør i seksjoner eller mer enn dine oppgavesett, er dette virkelig et sted jeg oppfordrer deg til å gå. Den ble bygget i fjor sommer etter noen av mine virkelig gode venner. Og det er utrolig. Faktisk, mange av lysbildene at jeg skal bruke for Seksjon vil komme fra Study50. Så mye av TFS bruke den. Og til slutt, som jeg nevnte, kontortid. Hvis du har problemer med lekser, er du har problemer med en konsept, kommer til kontortid. Gå tidlig i uken hvis du kan. Få ut til quad, fordi det er slags langt. Ingen liker å gå der ute. Men det er til din fordel, fordi da er du kommer til å ha alle disse TFS, [Uhørbart] omgir deg. Og spesielt nå, bare et tips, tors er veldig chill akkurat nå i Mather fordi psets forfaller på torsdager. Og å vite ønsker å bruke sene dager ennå. Så hvis du har problemer med konsepter, det er mange TFS som er der for å hjelpe deg. Så komme ut til Mather på torsdag. Hvis du ønsker å se meg, Jeg kommer til å være der. Jeg vanligvis gjør mine egne lekser, fordi ingen ønsker min hjelp. Så kom og se oss. Møt oss halvveis. Så hvor mange som har deltatt på foredrag eller sett det på nettet? Hvor mange mennesker gikk til super seksjon i forrige uke? Cool. Det er faktisk en god del. Hvor mange av dere har lest din spec for denne uken, for PSet? Ooh, jeg er stolt av dere! Mer godteri for y'all. Bra, så hva vi mener "Møte oss halvveis," er at delen er egentlig bare kommer til å være super nyttig for deg hvis du kommer i å ha lest din spesifikasjon for din PSet. Fordi når jeg går gjennom en oversikt ting du bør være på jakt etter, det er ikke til å gjøre så mye fornuftig hvis du vet ikke hva problemet satt kommer til å be deg om å gjøre. Hvis du ikke kommer til seksjonen, selvsagt Jeg kan ikke være så nyttig for deg. Jeg kommer ikke til å ta det personlig hvis du kommer ikke til min seksjon akkurat nå, men definitivt bør du. Hvis du ikke kan, se dem på nettet. De er der for en grunn. Mine vil være der. Som du ser, vi blir tatt opp, så det vil være der for dere. I tillegg, kommer til å lectures-- det er åpenbart hvor du får den start av materialet her. Så jeg vil definitivt prøve og hjelpe deg så mye som jeg kan, men jeg kan bare møte deg så langt. Du må slags møte oss halvveis. Grading-- det, alle dere som fikk en epost fra meg, du er min offisielle delen. Jeg vil bli gradering dine psets. Og jeg vil bare si en ting som du bør virkelig ta hensyn til er kommentarene. Kommentarene er ofte mer nyttig enn det faktiske resultatet vi gir deg. Og kommentarene er faktisk hvor jeg bruker mye av min tid når jeg er gradering. Så jeg ville sette pris på det hvis du leser dem. Og de er faktisk hvordan du skal for å lære mer om design og stil og ting som er en litt mindre kutt og tørr. Så egentlig ta hensyn til disse kommentarene. Hvis du har spørsmål om dem, eller spørsmål om poengsummen din, kan du komme å snakke med meg enten før delen, Jeg vil sannsynligvis bli hengende ut i lobbyen, eller etterpå. Hvis du vil planlegge en-til-en møter om hvordan du kan bidra til å forbedre senere oppgavesett, bare gi meg beskjed. Og så bare et par tips for dere. Så en av de største tingene Jeg har alltid stress til min seksjon når du lære hvordan å kode er å skrive ting ut på papir først. Hvis du har en plan for hvor koden må gå og hva den trenger for å gjøre, og det er brutt ned i små biter av pseudo koden du har skrevet ut, du kommer til å være mindre sannsynlig å gjøre syntaksfeil eller lage en if løkke som har ikke annet. Hvis du vet hvor du er går samlet, er du mindre sannsynlighet for å gjøre disse bittesmå feil som noen ganger tar deg timer å fikse, fordi du er som, der jeg mangler denne braketten? På dette notatet, vennligst bruk Style50. Spesielt når du er kommer til kontortiden, Hvis koden er alt byttet over til den ene siden, det er selvfølgelig policy at vi kan si, fikse det slik at det ser ut som Style50 sier det skal, og så vil vi hjelpe deg. Så det vil gjøre livet ditt enklere. Det vil gjøre livet enklere. Alle er lykkeligere. Alle får bedre karakterer. Er det ikke det vi alle ønsker? Så skrive ting ut på papir før du noen gang berøre datamaskinen. Talk ting ut på et høyt nivå, og sørg for at du vet hvor du skal. Og hvis du er usikker, sitte ned med noen og gå dem gjennom steg for steg hva koden er ment å gjøre. Og ni ganger av 10, vil du være liker, oh, jeg glemte en if tilstand eller jeg har glemt et semikolon her eller Jeg oppdaterer denne variabelen galt. Så de er mine tips for å lykkes. Så siden omtrent halvparten av dere ser som om du deltok super delen, Jeg skal bare veldig kort gå gjennom looper, som ikke var på vår opprinnelige agenda. Men de er veldig viktig. Og så kommer jeg til å slag av hastighet gjennom de før vi kommer inn våre faktiske delen. Før jeg gjør det, er det noen questions-- logistisk, personlig, er det noe annet du vil å vite om meg eller om seksjon eller klasse generelt? All good? OK, kult. Lovely. Så loops-- dere bør alle gjenkjenne disse brikkene fra bunnen av. Så sløyfer er i utgangspunktet bare en måte for oss å gjøre noe et visst antall ganger, noe gjentas handling basert på noen betinget. Så vi har tre forskjellige typer. Vi har for loop, mens, og gjør-stund. Så for loops-- vi bare har en veldig generell layout her for en for loop. Og dette er flott for når du vet hvordan mange ganger noe må utføre. Når vi snakker om andre løkker, vil du se hvorfor det er et viktig skille. Men etter looper er for noe sett. Du vet at du kan enten beregne antall eller du vet hvor mange ganger du vil dette gjentatt i begynnelsen. Så hvis du ser her, vi har bare en generell form av skjelettet ramme for en for loop her. Så for-initialisering, dette er hvor variablene er initialisert. Med Mario, jeg er sikker på at dere gjorde noe sånt int i lik 0. Det er der det ville skje i blått. Du har din tilstand, som er det som er sjekket hver gang. Hvis denne tilstanden er sant, så resten av koden utfører. Da vil den kjøre igjen-- og spørre. Og så har vi oppdateringen, der du oppdaterer din variabel. Så, igjen, med like Mario, er jeg sikker dere gjorde noe som jeg pluss pluss. Slik at hver gang sløyfen løp, jeg fikk oppdatert slik at når vi sjekker det mot noen tilstand, ble det endring. Fordi hvis du bare ha en statisk variabel, hvis den utfører første gang, er det bare kommer til å kjøre uendelig. Så må du sørge for at du oppdatere variabel riktig. Og vi har også bare en visuell representasjon der. Alle gode? For sløyfer. Burde ha sett disse i PSet. Cool. Så her er bare en enkel eksempel. Skriv ut Dette er CS50! 10 ganger. Og så har vi vår initialisering, slik vi ser det, med int i er lik 0, for jeg er mindre enn 10, og jeg pluss pluss. Og det vil skrive ut at 10 ganger. Så mens loops-- mens løkker stor når du gjør det ikke nødvendigvis må vite hvor mange ganger det er kommer til å oppdatere i begynnelsen. Du har bare noen tilstand som er sjekket. Og dette kan være noe sånt som while-- La oss ta et eksempel fra din PSet. Hvis Mario, du prøver å legg inn et negativt tall. Høyre? Du skulle re-be din bruker. Så du kan si, vel, hvis brukeren innganger noe mindre enn null, re-ledeteksten dem. Og jeg er sikker på at kan ha vært noe som noen av dere brukes i koden din. Så det er en enkel ting. Du har mens, noen betinget som er sjekket hver gang koden går til å utføre. Hvis den behandles som sann, vi kjøre den. Ellers gjør vi ikke. Og hva er egentlig important-- noe jeg tror at David snakket om i lecture-- er bukseseler. Det som er innenfor bukseseler er hva som er utført. Hvis du glemmer de bukseseler, det bare kommer å være linjen direkte etter stund ble henrettet. Så hvis du har tre ting som er ment å skje når dette betingelsen har verdien true, og du ikke har disse tannregulering, kun det første kommer til å skje. Så vær veldig bevisste på hvor du setter dine bukseseler. Hvis du holder deg med Style50, Dette vil definitivt hjelpe deg. Cool. Så dette er en nedtelling fra 10 til null. Og som du ser her, vi initial noen counter utenfor det. En ting som er annerledes er vi er ikke initialisering vår variabel innenfor vår mens loop. Det er initialisert utenfor det. Vi er rett og slett bare å sette betingelse for vår tid. Så i dette tilfellet, er det samtidig tellingen er større enn null. Og vi skrive ut hva vår teller er, og da vi minske vår variabel. Og det er også en annen ting å legge merke til. Vår oppdateringen ikke skjer innen den første delen av mens sløyfen. Det vil faktisk skje innen bukseseler, kroppen av teksten. Så-så lenge loops-- gjør-mens sløyfer er stor for brukervalidering. Så noen av dere kanskje har også brukt dette i din PSet. Du kan si, gjøre, som, be brukeren om inndata. Og deretter, mens, som, i -inngangen er mindre enn noen nummer. Så for en eksplisitt tilfelle med Mario, det ville være å gjøre printf, oppgi et heltall, og deretter noen heltall lik getint. Og så det vil faktisk utføre denne koden først. Du vil faktisk ha en slags heltall. Og så kan du si, mens at heltall er mindre enn null. Så hva det kommer til å gjøre, er det kommer til å utføre minst én gang. Det kommer til å sjekke tilstanden. Dersom betingelsen er sant, vil det løpe igjen. Så gjør-mens sløyfer er stor for bruker validering, fordi du vet koden kommer til å utføre i det minste en gang, mens med mens looper, er du ikke garantert at det er kommer til å kjøre en gang. Det kommer til å sjekke tilstanden først og deretter bestemme seg for å kjøre den, mens en gjør-mens vilje utføre koden først og deretter sjekke for å se om du trenger for å gjenta det. Betyr det skillet fornuftig for alle? OK. Cool. Slik at i dette tilfellet, er denne typen av hva jeg snakket om, Dette re-instruksjonene til du får et positivt tall. Så vi vet at printf "Legge inn et positivt tall" og faktisk ber om at inngang vil skje minst en gang. Hvis brukeren er ondt og holder skrive inn et negativt tall, som vet hvor mange ganger det skal utføre. Men denne kode er garantert til å utføre minst én gang. Og det er derfor det er flott for validering av inndata. Og du vil bruke den ganske mye. Greit, noen spørsmål så langt? Vi er alt bra? Snakker jeg for fort? Vi er bra? OK. Awesome Så vi kommer til å gå videre og snakke om arrays. Cool. Så arrays er i utgangspunktet bare datastrukturer som tillater oss å lagre ting av samme type. Så hvis du noen gang har en rekke, er det enten bare nødt til ints eller det bare kommer til å ha flyter eller det bare kommer til å ha tegn. Du kommer ikke til å ha en int med en char med en flåte med en dobbel. En ting. Arrays er bare én størrelse, eller de er bare én type. Så her har vi en rekke størrelse tre med tre heltall i den. De kunne flyter, men vi er kommer til å si at de er ints. Så en ting å innse er at arrays er et sett størrelse når du initial dem, og de er ikke easily-- siden dere alle er mindre komfortable, du bør bare tenke på dem som ikke er i stand til å strekke seg i størrelse. Men stor du setter ut array i begynnelsen, det er størrelsen det kommer å bo, fordi arrays er kontinuerlige minneblokker. Og når dere får inn i en litt mer på hvordan minne er faktisk lagt ut på disker og i heap og stakk, det vil gjøre litt mer fornuftig. Men du kan bare tenke på lignende, det er bare en rad med plasser på disken din. Og du kan ikke garantere at det er kommer til å bli ledig plass etter det. Du kan initialisere en matrise på tre og så kanskje du initial annen rekke på fem senere, og det er rett etter det. Så hvis du skulle gå forbi stedet tre i det første array, du skulle skrive over noe annet. Så arrays are-- for dere, bare tenke på dem som en fast størrelse. Så skaper en array-- du kommer til å trenge å gjøre dette ganske mye. Så på samme måte som vi har en generelle strukturen for vår for looper, vi har en fin general strukturen for vår array. Fordi de er av en type, hele elementer i en matrise er av en type, du trenger å initial hva denne typen er. Så, som du ser her, har vi en fin liten brakett datatype. Så hvis vi skaper en int array, vil det være int. Hvis vi skaper en char array, vil det være røye. Hvis vi skaper en streng array, vil det være streng. Og så navnet på array, hva du ønsker den skal være. Så kanskje det er prøveresultater eller kanskje det er studenter eller kanskje det er godteri. Uansett hva du velger å navngi array, det er hva det vil være. Og så, i parentes, vil du har den størrelsen du ønsker. Så er vi lagrer 10 studenter eller vi lagre 15 typer godteri? Hva ikke. Så i vårt eksempel her, vi skaper en rekke av størrelse tre, som dere se her til høyre. Og når vi først initial det, alt er satt til null. Så det er bare trodde som en blank tavle. Vi har alle disse områder, vi har alle disse boksene vi kunne sette våre data inn i, men de er bare blank for tiden. Så hvis vi ønsker å faktisk tildele dem disse verdiene, vi gjøre det så rett under her viser. Så du har det navnet på matrise er og hva indeksen du vil. Så indeksen bare refererer til, ut, hva sporet vi ser på. Og en viktig ting å legge merke til er at arrays er null-indeksert. Så hvis vi ønsker den første plass i minnet av vår rekke, kommer det til å være null. Hvis vi ønsker den andre, vil det være en. Hvis vi ønsker den tredje, vil det være to. Så videre og så videre. Som også er grunnen, konvensjonelt, når vi gjør for loops-- jeg er sikker dere skulle lure på, hvorfor vi starter på 0 mot 1? Og det er fordi når vi overgangen inn ved hjelp av matriser, maps det riktig. Så hvis du ønsker å iterere inn i en matrise, det gjør mye mer fornuftig å gjør jeg er lik 0, fordi vi vet som vil tilsvare til det første sted i minnet. Alle bra med det? Cool. Og så på bunnen her er bare en annen måte å initialisere en matrise. Du har fortsatt din datatype og navnet, men i stedet for faktisk sette en størrelse i det, du kan bare gjøre tomme parentes. Og så med disse krøllete klammeparenteser nederst, du kan bare legge inn data som du vil ha atskilt med komma. Og som automatisk si, OK, jeg ser at du har tre ting i disse bukseseler. Så jeg vet at jeg trenger å bevilge tre minneblokker og deretter lagre dem. Så den første versjonen du kan bruke Hvis du spør din bruker å legge inn verdier, slik at du kan iterere gjennom rekke og ask-- få litt int å legge dem. Hvis du vet verdiene på forhånd, det gjør en mye mer fornuftig å bruke den andre måten. Men i de fleste tilfeller, kan du ikke vet hva disse verdiene skal være. Cool. Eventuelle andre spørsmål? Alright. Så får tilgang elements-- så en av de store tingene om arrays er at de er tilfeldig tilgang, noe som betyr at du trenger ikke å se gjennom hver blokk. Hvis du vet at du ønsker hva som er i blokk to, du kan bare si: gi meg blokkere to. Og det er derfor disse Indeksene er så viktig, og det er hvordan vi faktisk tilgang til dem. Så i dette tilfellet, som vi så før når vi tilordne verdier, i en før, hadde vi navnet og index vi ønsket å få tilgang, ikke sant? Så på samme måte, det er alt vi gjøre for å faktisk trekke det data ut. Vi har navn og vi har indeksen som vi ønsker. Slik at i dette tilfellet, for loop her nede på bunnen, anyone vet hva det gjør, hva det ville skrive ut? Mmhmm? Nettopp. Så ja, det er bare itera gjennom. jeg er lik zero-- vi kan gå gjennom koden like raskt. i er lik null, i er mindre enn tre på dette punktet, ikke sant? Så som sjekker ut. Og vi sier, OK, print f hva er temperaturen i. Jeg er null rett her når vi først iterere, så vi går til denne første spot, og vi sier, OK, er 65 den antall vi ønsker å skrive ut. Så det vil skrive ut 65 og deretter gjøre en ny linje. Jeg vil oppdatere, så det skrives 87. Den oppdaterer igjen, og det vil skrive ut 30. Alle kult? Awesome. OK. Så her er litt av ett ting jeg sa hvordan du kan holde styr på noens poengsum og hvorfor du ville bruke den første måte klargjør den i stedet for den andre vei. Og dette bare går gjennom. Og legg merke til vi har en klassestørrelse på 30. Og vi initialisering dette rekke ints som er av størrelse 30. Og så er vi itera gjennom og vi er ber brukeren om å angi skårer for hver av disse og deretter tildele den til et bestemt sted i minnet eller annet sted i denne matrisen. Cool? Betyr det fornuftig for alle? Mmhmm? Så hashtag definere klassestørrelse 30 er en preprosessor direktivet som betyr akkurat det gets-- det har å gjøre som kompilering prosessen. Du kan tenke på det som en global variabel. Måten vi gjør det er typically-- det gjør koden din å være mer lett endres. Så la oss si at vår klassestørrelse plutselig går 30-15, hvis jeg ikke hadde definert det på denne måten, ville jeg må gå gjennom hele mitt program og endre alle forekomster av 30-15. Men med dette, jeg kommer til å endre en spot, og alt annet endringer. Hvis du noen gang ønsker å gjøre en hash definere i en sak hvor du holder styr på noen angi antall karakterer for en klasse eller du bruker et nummer som vil bli brukt, som, gjennom en svært lang program, er det bedre å definere at ved begynnelsen slik at hvis noen gang den endres, får du å endre ett sted i stedet for 100. Ja? STUDENT: Mellom gjøre det og bare erklære [uhørbart] over på toppen. ALLISON Buchholtz-AU: Så det har å gjøre med efficient-- det er litt utenfor rammen av hva vi kan dekke i denne delen. Det har å gjøre mer med effektiviteten og hvordan ting faktisk arbeide i kompilering prosessen. Hvis du ønsker å virkelig vite om det, er jeg glad for å sende deg en e-post med ressurser om det. Hash definere en tendens til å være foretrukket for ting. Og som du kode mer, du slags lære nyansene av når du bør bruke en global versus hash definere. Men for tiden, du egentlig ikke har å bekymre deg om det er at det korte svaret. Alle bra med det? Og også, hvis du vil å bruke en hash definere, det er veldig viktig å legge merke til at navnet bør være i alle caps. Vi er ikke bare å gjøre Klassestørrelse å være dramatisk. Det bør faktisk være i store bokstaver. Cool. Noe annet er det? Vi er bra? Lovely. Velkommen. OK, så jeg ønsker dere å ta en titt på dette og se om du kan finne feilen. Jeg skal gi deg et hint. Det er et sted ved at for-sløyfe. Mmhmm? STUDENT: Bør være mindre enn eller lik 2. ALLISON: Så det kan være mindre enn eller lik 2, eller det kan være mindre enn 3. Og hva er begrunnelsen for det? STUDENT: Den [uhørbart], 0, 1, 2. ALLISON: Nettopp. Så i en rekke størrelse n, vi bare ha indekser av n minus 1. Cool. Og da kan vi få veldig gale og få flerdimensjonale matriser. Ett av problemene når jeg tok det i min år kreves multi-dimensjonale arrays, og jeg tror en av dem kan kreve det i år, så være komfortabel. Vikle hodet rundt det nå. Det vil komme tilbake å hjemsøke deg, men på en kul måte. Så du kan egentlig bare tenke av flerdimensjonale matriser som matriser av arrays. Så du kan slags tenker på denne toppen rad som første del av minnet. Og dette er den andre del av minnet, og den siste raden er tredje del av minnet. Og innen det, finnes det en matrise. Men selvfølgelig, er det lettere å skildre som dette. Så du initialisere det på samme måte. Dette er et tegn Styret i tre av tre. Så du har tre rader og tre kolonner. Vi representerer det på denne måten. Og du vil få tilgang til det samme måte, kolonne for rad. Og så 1,1 som vi ser her. Vi tildeler en null, null der oppe. 2,0 og 0,2. Så du ville bare få tilgang them-- hvis noen noensinne har gjort lineær algebra, på samme måte som du får tilgang til et element i en matrise, er det den samme ideen her. Så du kan relatere det tilbake til matematikk. Du trenger ikke å bekymre deg for mye om dette akkurat nå. Det er godt å ha eksponering, å vite at du kan gjøre det. Du kan lage noen gal number-- du kan lage sprø arrays er alt jeg kommer til å si. [Uhørbart] Det blir litt gal, men det er veldig kult. Awesome. Og så, så vi har et eksempel her. Den beregner en streng lengde. Så hvor mange som visste at strengene som du bruker er bare matriser av tegn? OK, ja. Så dere kan tro at du ikke har brukte matriser før, men helst du bruker getstring i CSView bibliotek, er du faktisk bare å be om en rekke tegn. Og vi tar vare på alle at i back-end for deg. Men du har brukt arrays siden du startet. Du bare ikke vet det ennå. Og når du har et tegn array eller en matrise som er lagring av en streng, det siste er alltid hva som er kalt en null terminator, som er denne retten her. Og det er på slutten av hvert ord som du vil lagre. Så hvis vi ønsker å finne ut av lengden på en streng, kan vi si, vel, du vet, den Innholdet i denne blokken er ikke lik vår null terminator. Det betyr at det ikke er noen tegnet det at vi faktisk bryr seg om det er en del av ordet. Du øke lengden. Og så når vi faktisk får til slutten av ordet, det vil si opp og det vil returnere vår lengde for oss. Mmhmm? STUDENT: Har plass teller som null terminator? ALLISON: Så en plass er ikke et avsluttende null. Så hvis du har multiple-- en plass er faktisk en bestemt ASCII verdi. STUDENT: Hva er utrops lik igjen? ALLISON: Så, dette er hva du refererer til. Hvis du noen gang høre meg i kontortiden, Jeg har alltid kaller det, som, lik bang. Så bang er det ikke. Så dette er ikke likeverdige. Så hvis du prøver å se om noe er falskt, du vet alltid gjør, bang uansett variabelen er, og om det er falsk, det evalueres til sant og du kan gjøre kule ting med det. Mer om det senere. Cool. Alt bra der? Awesome. Så nå er det gutta 'tid til fungere, siden jeg har snakket. Så jeg vil at du skal bare lage en matrise heltallene med en, to og tre, og deretter få dem skrevet ut. Du trenger ikke å gjøre, som, Hoved, blah, blah, blah, uansett. Jeg vil bare du skal initial matrise og deretter opprette en for loop å skrive dem out-- eller en stund loop, opp til deg. Jeg vil bare gi deg et par minutter til å jobbe med det. Jeg kommer til å hvile stemmen min. Hvis du har noen spørsmål, jeg er glad å komme rundt og snakke med dere. Føl deg fri til å snakke med hverandre. Få mer godteri. Faktisk vil jeg bare gå rundt med godteri. Hvordan er det? Du ønsker noen vet? Noen andre i dette rommet vil ha godteri? Du kan også ta mer enn én, folkens. Ta en håndfull hvis du vil. Kan like godt. Alle andre bra? OK. Dessuten kommer jeg til å opprette en anonym Google Form, og dere kan bare sende inn tilbakemeldinger etter hver seksjon hvis det er noe du ønsker å forbedre eller noe du vil ha gjort. Hvis jeg er litt for peppy for deg, kan jeg tone det ned. Jeg skal lage det og sende det ut til dere alle etterpå. OK. Så la oss starte i det små. Hvordan ville vi initial vår array? Hva er den type vår array? En int, ikke sant? OK, så hva gjør du ønsker å ringe array? Int array, kult. Greit, så vi har int int matrise lik, og hva har vi etter det? STUDENT: [uhørbart] parentes. ALLISON: tannregulering. Og så inni bukseseler? Én komma to komma tre. Cool. Så det er all right. Så nå har vi vår for loop. Så i den første delen av vår for loop, hva har vi? STUDENT: Jeg er lik 0? ALLISON: Så int i er lik 0, og hva er da vår tilstand? Hva er det jeg kommer til å være mindre enn? Mindre enn tre, og hvordan vi oppdaterer vi gjør jeg? Jeg pluss pluss, oppdatere den med én. Og så skal vi ha printf noen av heltallet, og hva er det siste del som faktisk er kommer til å si hva vi skal skrive? Det ville være navnet på array, som er int array, ikke sant? Og det som står i parentes av int array? i. [? Så jeg?] Ringte min eksempel, men det du går. Ikke så ille. Alle gode? Cool. Så vi er ferdige med arrays. Congrats. Du klarte å iterere gjennom alle the-- ja? STUDENT: [uhørbart] ALLISON: Ja. STUDENT: Jeg har et spørsmål. Har du tenkt å rykke bukseseler? ALLISON: Så bukseseler bør stille opp med for loop, og deretter alt innsiden av bukseseler bør innrykket. STUDENT: OK, bør det for loop skal rykkes inn? ALLISON: Den for loop ikke må rykkes inn på dette punktet. Hvis du var i main, hvis vi faktisk hadde en hovedfunksjon her, det ville bli innrykket fra hoved. Men i dette tilfellet, er det fint. Ja, spørsmålet. STUDENT: du må ha Do parentes etter eksempel? ALLISON: Ja, hvis du er initial det på den måten. Så husk, dette er den andre måte å initialisere en matrise der vi har tannregulering og deretter våre faktiske data atskilt med komma innenfor. STUDENT: Jeg trodde det var braketter for at f.eks. ALLISON: Nei, de er tannregulering. De er tannregulering. Hvis du klargjør den at andre måten, er det bukseseler. Hvis vi skulle si, int example-- hvis vi ville bare en tom array for ints, det ville være int eksempel tre braketter. Konsollene representerer størrelsen. Når du har tannregulering, det er den faktiske data du setter inn det på denne måten. Vi kan bla tilbake veldig fort. Så i denne, dette er bare vår første gruppe, initialisering. Og her er vi individuelt tildele plassene til dem, slik at dette representerer den indeks på vår array, det er derfor vi har parentes. Men her, hvis du legger merke til, har vi forlatt våre brak uten størrelse, og vi initialisere den med faktiske data alt-i-ett med bukseseler. STUDENT: Så hvorfor ikke vi har parentes i dette eksempelet? ALLISON: Så, i hvilken del? STUDENT: Ville ikke vi si, int eksempel brak tilsvarer parenteser [uhørbart] braketter for eksempel. ALLISON: Oh, sorry. Du har rett. Vi har brak der. Beklager folkens, min dårlige. Ja, du bør ha parentes etter eksempel. Du har helt rett. STUDENT: [uhørbart] ikke gjør det. ALLISON: Nei, du må ha braketter, fordi ellers er det ikke kommer til å erklære en matrise. STUDENT: [uhørbart]. Beklager om det. ALLISON: Beklager, du trenger parentes etter eksempel. Typo. God fangst, gullstjerne for deg. Også, hvis du spør et spørsmål, hvis dere ville bare fortelle meg ditt navn, Jeg ville elske det. Jeg vil gjerne være i stand til å vet alle navn. Jeg kommer ikke til å kaldt ringe deg, jeg faktisk trenger bare ønsker å vite navnene deres. Så vær så snill faktisk fortelle meg navnene deres. LEAH: Leah. ALLISON: Leah. OK, så functions-- jeg vet i korte trekk de snakket om dette under forelesning. Så funksjoner er slags bare som disse små bite-size ting hvor du passere i innganger, noe magisk som skjer, og du får utganger. Cool. Så du har faktisk brukt en mange av disse allerede. Få int, får streng, print f. Disse er alle funksjoner der du bare ringe dem, det er massevis av magiske ting skjer i bakgrunnen at du ikke nødvendigvis ser, og du får ut det du ønsker. Eller i det minste få deg hva du håper du vil. Og utgangspunktet poenget med funksjoner, og en av de viktigste temaene i CS, er å bryte koden i håndterbare biter. Når du begynner å skrive disse virkelig lange programmer, eller i Scratch når du hadde Dette grand idé for et spill, du må være i stand til å bryte den ned til, som, OK, hvordan skal jeg begynne? Hva er de små biter som jeg trenger? Åh, jeg trenger å spørre bruker for noe. Nå trenger jeg å skrive ut noe. Åh, jeg trenger å beregne denne verdien. Og lære å bryte opp kode og de store problemene du har i disse små biter og skape funksjoner er faktisk en av store hjørnesteiner i CS. Så du kan tenke på en funksjon like som en svart boks, en magisk svart boks, at du setter ting inn og du får noen effekt. Og resten av programmet trenger ikke nødvendigvis å vite hva som skjer innenfor den svarte boksen. Alt som bryr seg om er hva går inn og hva som kommer ut. Cool. Så hvorfor fungerer? Organization-- som jeg sa, når du er arbeider med meget store kode baser, hvordan du organiserer koden vil være mye enklere hvis du bruker funksjoner. Fordi du vil være i stand å være, som, OK, dette er hva denne funksjonen gjør og her er hva en annen gjør. Og du kan enkelt se hvordan de passer sammen. Så bryte den opp i det hele tatt disse håndterbare subparts. Så simplification-- Jeg er sikker på at dere alt så dette, som jeg sa, med Scratch. Du har denne store ideen, og du er som, hvordan alt dette arbeidet? Men hvis du nærmer deg det stykkevis, sier du, OK, hvordan gjør jeg en sprite flyter over skjermen? Det er litt enklere. Så god bruk av funksjonen gjør koden din mye lettere å lese. Det gjør det lettere å feilsøke hvilke som du kommer inn i de senere oppgavesett, du kommer til å virkelig ønsker å være i stand til å gjøre. Og de er også enklere å designe og implementere. Du kan kode opp en liten fungere relativt raskt og sikre at det fungerer versus prøver å lage hele denne lange programmet og deretter slags gå gjennom og se hva som fungerer og hva som ikke. Og deretter gjenbruk. Så fungerer bare trenger skal skrives en gang, og deretter kan du bruke dem så mange ganger som mulig. Så det er liksom miljøvennlig i en forstand. Hvis du hadde ting som print f, der du måtte skrive ut den magien som går bak ut f hver eneste gang du ønsket å skrive ut noe, du ville være ganske syk og lei av det ved utgangen. En av de tingene som du vil lærer i senere CS klasser, eller en av de beste rådene jeg får er, hvis du skal kopiere og lime kode, bør det trolig være en funksjon. Hvis du har nøyaktig samme linjer alle i hele koden, hvis du priset dem ut, koden din ville trolig være, som, fem ganger kortere og være mye mer lett å lese. Og i stedet for å prøve å feilsøke alle disse forskjellige stedene hvor ting som kan gå galt, har du en funksjon at du kommer til å feilsøke. Og jeg lover, mye av dette kan virke slags abstrakt nå, men som du kommer inn senere og senere oppgavesett, det vil gjøre mye mer fornuftig og virkelig bli kjørt hjem. Er det noen spørsmål om funksjoner så langt? Hvorfor vi bruker dem? Jeg vet at vi ikke har fått inn i nitty gritty ennå. Så definere en function-- akkurat som arrays, vi trenger en slags of-- dette er bare den generelle utgang. Så dette er en funksjon som finnes i bare kommer til å kube noen innspill. Og på neste side, faktisk, har vi alle disse awesome småting her. Så, alle kan lese som, ut av nysgjerrighet? Jeg vet den lilla og svart kan være litt vanskelig. Men store ting å know-- så den første en her er vår returtype. Så dette er snakk om utgangs av denne funksjonen når, i dette tilfellet, vi satt i noen tall, hva vi er får er at antall terninger. Så det bør være en int i dette tilfellet. Kanskje det ville være en dobbel eller noe annet senere, men i dette tilfellet det er en int. Med c, du trenger alltid en returtype. Det vil være en int. Det vil være en flåte. Det vil være en dobbel. Men du må spesifisere hva denne funksjonen kommer til å returnere. Ellers vil det kjefte på deg, og det vil ikke kompilere. Du vil være trist, og jeg skal være trist. Og det er bare ikke bra. OK. Og så har vi vår funksjon navn. Og som du kan se her, med c det er denne veldig konsekvent paradigme. Hva er din type, hva er navnet, og litt andre ting på slutten. Så vi har vår returtype, vår funksjon navn, og deretter vi har vår header med vår parameterliste. Så parameterlisten er, hva er denne funksjonen kommer til å ta i? En parameterliste er ganske enkelt en synonym for, hva er våre innganger? Og på samme måte som vi må definere vår funksjon og gi den en avkastning skriver, hver av våre innganger behov for å ha en type forbundet med den. Så vi vet hva vår funksjon faktisk kan jobbe med. Så i dette tilfellet, har vi noen int innspill. Så igjen, vil det være den type og hva du kaller det. Og så, som du ser her har vi vår kropp. Så vi har noen int utgang, som er bare vår inngangs ganger selv ganger i seg selv, som bare terninger den. Og da er vi tilbake som utgang. Så som du ser her, har vi en int ganger en int ganger en int, så det returnerer en int, som har blitt erklært der. Så alt er sammenhengende. Alt er lykkelig. Din funksjon vil kjøre. Og dette er bare den generelle ting. Så alltid ha returtype, navn og din parameterliste. Hver ting i din parameterlisten, eller innspill, behov for å ha en type forbundet med den. Og så har du din kropp her med hva du ønsker å gjøre med dine innspill. Og så åpenbart du ønsker å returnere noe. Noen ganger funksjoner vil bare tilbake. De gjør faktisk ikke tilbake noe for deg å bruke. Men du må gå tilbake på noen måte. Og når du gjør dine egne funksjoner, vi kan komme inn som en litt dypere. Personlig, hvis du vil, det er mange forskjellige ting du kan gjøre der. Alle gode? Noe på denne listen som du vil ha meg å gå over, at du ikke forstår? Alle er bra der? Cool. Awesome. OK, så vi setter alt dette sammen nå. Så vi har noen int kube input, så Dette er et komplett program her. Frem til nå, har jeg slags vært å gi deg guys snutter som kan gå i et program. Vi har nettopp vært å se på funksjoner. Men her er et helt program. Så hvor mange av dere husker ordet prototype fra forelesning? Cool. Vi har fått ett. Hva heter du? STEPH: Steph. ALLISON: Steph? OK, awesome. Så husker du hva en prototype er? STUDENT: Du sier [uhørbart] før du faktisk forholde seg til det. ALLISON: Husker du hvorfor Do? STUDENT: Nei. ALLISON: OK. Gullstjerne. Så ja, en prototype vi har på forhånd, fordi ellers vår kompilatoren kommer til å kjefte på oss. Det kommer til å si, OK, hva er denne kuben funksjon? Liker, du bokstavelig talt har fortalte meg ingenting om dette. Det er som når du gå inn i et klasserom, og noen er som, det er en quiz i dag. Og du er som du aldri fortalt meg om dette. Jeg er ikke fornøyd med oss. Prototypen er i utgangspunktet som pensum sier, ser. Heads up. Det kommer til å bli en quiz på denne dagen. Ikke frik ut når du kommer til det. Du kommer til å bli bra. Så alt prototypen gjør er å fortelle Hoved, kommer jeg til å bruke denne funksjonen. Jeg lover jeg å definere det senere. Ikke frik ut på meg. Bare kompilere og gjøre det jeg ber deg. Så vi har prototypen det bare for å gjøre vår kompilatoren lykkelig. Og det er i utgangspunktet et løfte om at du har definert denne funksjonen senere og at du ikke er bare å ringe dette tilfeldig ting som det vet ikke hva du er kommer til å gjøre. Så i dette tilfellet, har vi hoved her. Vi initial noen heltall x. Det er to. Vi kommer til å skrive ut hva x er. Vi kommer til å kube x. Som du ser, har vi vår funksjon erklæring her nede at vi snakket om tidligere. Det vil kube x, og deretter, hvis vi husk, kuben funksjonen faktisk returnerer et heltall til USA, som er lagret ix igjen, slik at vi kan skrive ut ut åtte, eller kube x akkurat nå. Betyr det fornuftig for alle? Vi er bra? OK. Awesome. OK. Hvor mange av dere Husk dette så dette er i utgangspunktet bare din stack og din haug, bare en visualisering av hvordan minnet er lagret her. Så vi bare ønsker å gjøre sikker på at du forstår hvordan disse er representert i minnet. Hvis du tar klasser som CS61 og sånt senere, du kommer til å lære dette langt mer i dybden, og det er virkelig kult. Jeg anbefaler det. Men for nå, vil jeg gi deg bred oversikt slik at du ikke trenger å vet nitty modig. Slik at toppen bare et tekstsegment som inneholder faktiske nuller og enere, det binære for. Og dette er brukt til lagring globale variabler hvis du har noen. Når du beveger deg ned, vi har, som du ser her, initialisert data, initialisert data, og deretter haug. Så vi egentlig ikke snakke om haugen akkurat nå. Vi vil komme til det senere. For nå er jeg bare kommer til å vinke hendene mine og være like, du trenger ikke å vite om dette nå. Men vi vil snakke litt litt om stabelen. Så stabelen er where-- vi har zoom inn. Dette er faktisk hvordan programmet Vi bare så på oppstår i minnet. Så det som skjer er, hver gang vi kaller en funksjon, vi får det som kalles en stabel ramme, som er en av disse. Så viktigste parametere. Så de er de tingene at vi går over i hoved. Så de er rett her på bunnen, fordi det er den første tingen vi kaller. Og så får vi hoved s lokalbefolkningen, og når vi sier det, mener vi de lokale variabler som er lagret i hoved. Så lokalbefolkningen her ville være som, x er lik to i dette tilfellet. Fordi det er lokalisert til hoved. Har alle husker omfang, gå over at i foredraget? OK. Så, bare de variablene som er initialisert innenfor hoved. Så det er derfor vi har hoved [? vokal. ?] Og deretter innen hoved, vi kaller kube. Høyre? Så får vi et annet bilde med kube parametre. Så i dette tilfellet, kubes parametere er nå x at vi passerte i, de to som vi passerte i. Og så kuben lokalbefolkningen, som er hvor selve cubing skjer. Og så den returnerer. Så det som skjer er som cube faktisk gjør hva det er ment å gjøre, går den tilbake. Når den returnerer, etterlater denne rammen, og returnert ned til hoved. Og deretter innen main, vi faktisk kan skrive den ut. Så når du returnerer noe, når funksjonen returnerer, det er som å formidle disse verdiene til rammen under den og deretter forlate. Og ting må utføre i orden. Og når du kommer til større programmer, vi kan gjøre kjøligere og mer komplisert diagrammer. Men for nå, er dette bare en generell oversikt så du har slag av en forståelse av hva skjer når du ringer en funksjon og hvordan det faktisk ser ut i minnet. Cool? Alle gode? Awesome. Så dette er en som er bare prøver å bytte ting. Som vi ser her, har vi vår funksjon prototype slik at vår kompilatoren ikke kjefte på oss. Vi har noen viktigste, og vi ønsker å bytte x og y. De har ikke gjort denne demoen i foredraget ennå, har de? De har ikke det? OK. Så vi kommer til å gå i løpet av denne svært kort. Du vil komme inn i dette eksempelet mer i dybden, tror jeg, denne uken. Og så neste uke kan vi virkelig dykke inn i hvorfor dette ikke fungerer. Så vi har dette tomrommet funksjon her-- swap. Så ugyldig betyr bare at ingenting er returnert. Og vi har swap int a og int b. Og vi har noen midlertidig variabel som er en. en blir fordelt til b, og deretter b blir fordelt til temp slik at en og b ' verdier er nå slått. Men, vri, dette ikke fungerer. Og en del av det faktisk har å gjøre med det faktum at en og b her, de som blir vedtatt i her, er faktisk kopier av x og y. Så når funksjonen faktisk kommer tilbake, den slår kopiene, men ikke selve x- og y-s. Så en måte å tenke på det er at-- late disse er swap. OK? Så i hovedsak har vi x og y initialisert. Men når vi faktisk gå opp til disse rammer med swap, vi passerer de verdier over til det, og de er initialisert. Og de bare noensinne bor rett her. Så a og b bor her. Og de blir byttet. Men når vi kommer tilbake, gjør vi ikke gjøre noe med a og b. en og b permisjon med vår funksjon. Og så x og y blir den samme. Du får mer i hvordan å fikse det og hvordan vi faktisk forholde seg til det senere. Men det er bare én ting til slags huske på. Bruk den for fremtiden. Ikke bekymre deg hvis det ikke gjøre all den betydning i verden. De er kopier er den største tingen. Hvis du kommer til å ta noe bort fra det, gikk du på kopier. Så originalene forbli den samme. Alle gode? Cool. Så kommandolinjeargumenter. Jeg er sikker på at i begynnelsen dere alle hadde de store, som, int viktigste hulrom. Og du er som, OK kult. Jeg vet egentlig ikke bryr seg. Dette er bare hva jeg har å skrive. Men i dine nye programmer, spesielt i denne PSet, og hvorfor er det kritt på bakken? Med din neste PSet, er du kommer til å bli seende dette. Int main, int arg c, string arc v, parentes. Så, fra det vi nettopp lært i dag, hva vi tror at andre parameter eller at andre elementet er her? Det er en matrise. Hvilken type array? String array, ja. Cool. Så det er slik du skal å være erklære disse nå. Er det noen som husker hva disse står for? Nei? Hmm? STUDENT: arg c. ALLISON: Så arg c holder en teller. Det er en int. Det er et tall, ikke sant? Så hva tror du at tallet er over? Yeah. Så arg c er antall strenger som utgjør kommandolinjen. Så hvis vi skulle do-- faktisk, det finnes eksempler etter dette, så jeg vil ikke komme i forkant av meg selv. Det er en rekke strenger som bare gjøre opp din kommandolinje. Så når du gjør det, liker, dot slash Mario, det er en streng som gjør den opp. I dette stykket, vil du faktisk være fôring ting inn i kommandolinjen, som jeg er sikker på at dere som har lest spec sag. Så i slike tilfeller, kanskje du vil ha to eller tre argumenter. Det kommer til å være en nyttig ting å bruke. Og så arg v, som vi sa, er bare en streng array. Så som faktisk lagrer hva du innspill til kommandolinjen. Så vi har disse. Du har noen dot slash kopiere infile utfil. Så, hvis arg c antall strenger at vi kjører inn kommandoen linje, hva er vår arg c i dette tilfellet? Tre. Nettopp. Så hva er arg v null? Så hva er det første vi har lagret? Dot slash kopiere, akkurat. Og deretter den andre ville være infile. Den tredje ville være outfile. Så hva med arg v tre? Det ville være null, fordi det er slutten av vår array, ikke sant? Cool. Og hva om den sjette en? Det er litt av en lurespørsmål. Ish. Vet vi hva det er? Det er udefinert. Vi har ingen anelse om hva det kunne være. Det er det som er riktig etter at matrisen i minnet, og vi har ingen anelse hva det er. Og det er farlig å berøre de ting, fordi for alt du vet, det er en del av minnet som du bør ikke være tilgang til eller null. Og det kan gjøre gale ting. Det kalles over-indeksering din bundet til array. Ikke gå utenfor grensene for din array, eller dårlige ting kan skje. Du kommer tilbake og, som, lover i fysikk har blitt ødelagt eller noe. Cool. Betyr det fornuftig for alle? Ikke så ille. Så nå er alle favoritt del, PSet gjennomgang. Yay! OK. Så for de av dere som har ikke lest PSet spec, du gjør noen virkelig kule ting med kryptografi. Du kommer til å skape en Caesar Cipher og en Vigenèrechifferet. Du bør definitivt lese spec for å se hvordan de arbeidet. Og hvis du har noen problemer om hva det skal faktisk være å gjøre, kan du komme å snakke med meg, send meg eller tekst meg. Jeg rundt. Så er det tre hoved ting her som vi ønsker å snakke om-- bare slags av en utvidelse av forelesning. Ting som du kanskje ikke vet om, nyttige tips og verktøy. Så vi kommer til å gjøre en rask gjennomgang av ASCII, fordi det kommer til å bli super viktig for Vigenère sin Cipher. Vi kommer til konvertering av kommandolinje innganger, som vil være svært nyttig for Caesar Cipher. Og så modulo. Cool. Så, kart ASCII tegn til tall. Dette er en flott diagram. Du bør ha dette bokmerke eller annet sted. Du vil ha det for din første mid-term. Jeg er ganske sikker på at alle har denne diagram på sin mid-term sheet. Så lære det. Elsker det. Holde det praktiske. Det vil være nyttig. Og alle er det er en koding som kart alfabetisk, numerisk, og andre tegn til tall for vår datamaskin. På grunn selvfølgelig, i slutt, alt vi lagrer kommer til å bli konvertert ned til nuller og enere, så vi trenger noen måte å representere tekst og tegn som vi alle vant til å se som en slags nummer. Så som vi ser her, har vi store bokstaver A, som ligger rett der. Det er 65. Og små bokstaver A er 97. Så du kan finne out-- som jeg sa tidligere, hvis du hadde utvalg av multippel strenger, hvilke hver av dem et avsluttende null. Det ville være et mellomrom. Space har sin egen spesiell-- Jeg glemmer hvor den er her. Ah. 32 er plassen. Så alt er tilordnet den. Så vi har ASCII matematikk. Pro tip-- i Vigenère tallet, du kan bli fristet å konvertere tall til heltall, men det er faktisk bedre praksis å være i stand til å bruke figurer som dette når du faktisk manipulere dem. Så hvis du ønsker å bruke tall, kan du. Men en bedre måte, eller en måte som vi har en tendens til å like dere å gjøre det, er på denne måten hvor du er faktisk trekke tegn. Så jeg ønsker dere til slags finne disse ut. Hvorfor ikke prøve alle andre? Så gjør den første, en tredjedel, og den femte. Fordi jeg vil være sikker på at vi snakker om alt vi trenger å snakke om. Jeg bare kommer til å si, en av de viktige ting to-- oh vent, dere har ikke sett denne. OK så gjør de tre første. La oss gjøre det. Fordi vi må snakke om modulo. Jeg vet. Matematikk er vanskelig. Du kan bruke en kalkulator. Det er OK. Eller dra opp en ASCII-tabellen, fordi er du sannsynligvis kommer til å ønske det. Cool. Så jeg vil raskt gå dere gjennom disse. Så folk har ASCII-tabeller trukket opp? Hva er vår numerisk nummer for små bokstaver A? STUDENT: Seven. ALLISON: Så små bokstaver A er 97 og store bokstaver A er 65. Så 97 minus 65? PUBLIKUM: 32? ALLISON: 62, ja. Så i dette tilfelle, hva ville det skrive ut? Det første? Hvis vi har prosent d, hva ville det tyde på? STUDENT: Et tall. ALLISON: Vi skriver ut ut en faktisk nummer. Så vi faktisk kommer å skrive ut 32 her. Og hvis dette var prosent c, 32 ville gi oss en plass. Så det å forstå at tegn kan skrives ut både som tall og som de faktiske tegn er veldig viktig, og betaler hensyn til de faktiske typer som vi gjør her. Cool. Så for annenhver en av disse, hva skal vi skrive ut? STUDENT: Et tegn. ALLISON: Et tegn. Cool. Så hvis dere ønsker å vite, du kan arbeide disse ut på egen hånd. Hvis du har problemer, send meg. Men den andre vil skrive ut en liten bokstav b. Den tredje vil skrive ut en store bokstaver B. Den fjerde vil skrive ut ut med store bokstaver C, og siste vil være en liten bokstav A. Og den siste one-- vi faktisk kommer å komme inn i hva som gal prosent tegnet betyr selv i et par lysbilder. Så prøve dem på egen hånd. Hvis du har problemer, kan du komme å snakke med meg. Hvis du er typisk i Adams D hall, vil du sannsynligvis finne meg rundt. Så, atoi. Hvor mange av dere har sett dette funksjon eller hørt om det i det hele tatt? Anyone? Cool. Så hva det faktisk står for er ASCII til heltall. Så det du kan gjøre er, med Cæsar, for de som leser spec, du kommer til å gjøre dot slash Caesar etter at du har skrive programmet, og så kommer du til å innspill noen nummer som du ønsker å kode hemmelig melding med. Men, hvis vi husker, all vår inngangene blir lagret som strenger. Høyre? Vi har en arg v matrise det er alt typen streng. Så hvis du bare prøve å trekke det ene, det vil tror at at en eller uansett hvor mange du brukte er faktisk et tegn. Så du kommer til å få noen gale resultater. Så hvis du faktisk ønsker å snu dette til et heltall som du kan bruke til å manipulere ordet eller meldingen, vil du ønsker å bruke atoi. atoi bare konverterer strengen til en int. Så hvis vi har en streng på 12, hvis vi kaller atoi på 12, eller hva den inngangen er, det faktisk vil gå tilbake til deg heltallet. Ikke tegnet eller strengen 12. Som, når du starter å legge til at til tall, vil være svært forskjellig, fordi strengen 12 er noen sprø nummer i ASCII, men heltallet 12 er faktisk 12, som er det du ønsker. Så du vil være sikker på å bruke atoi. Du kommer til å ha denne i Cæsar, fordi du trenger int levert av brukeren i kommandolinjen. Men når de setter den i kommandoen linje, lagres som en streng til å begynne med. Betyr det fornuftig? Du trenger ikke nødvendigvis trenger dette for Vigenère. Med Vigenère, som jeg sa før, bør du prøve og bruke ASCII matematikk som ser mer ut som dette, der du faktisk er ved hjelp av tegn som vi er gitt til deg. Cool. Alle bra det? Awesome. Så modulo. Så hva om du får denne enorme antall for Caesar? Du har denne ideen om at hvis du er på Z, og du er gitt et nummer to, det betyr at du need-- Z blir den andre bokstav etter seg selv, ikke sant? Så du må liksom vikle rundt, og modulo er måten å gjøre det. Så alt det gjør er det gir deg resten av delingen av første nummeret av den andre. Og vi har noen eksempler til gjør at litt mer betong. Men i utgangspunktet, bruker du modulo når du ønsker å gjøre noe sjal rundt. Så hvis du bare vil ha de tallene en til åtte, du kan bruke modulo på en annen nummer, og det vil alltid returnere et tall fra null til åtte. Så noen examples-- hvis Vi har 55 modulo 10, det bare gir deg resten av 55 dividert med 10, noe som ville være 5. Og så tre modulo fem, noen gjette hva som ville være? Tre. Så hvis du har et mindre antall før modulo, kan det ikke gå i jevnt. Det er null. Så det bare returnerer antall selv. Så åtte modulo åtte ville bli? STUDENT: Zero. ALLISON: Zero. Fordi det går i jevnt. 16 modulo 15? PUBLIKUM: One. ALLISON: Cool. Og da denne siste er bare for å vise you-- du kanskje lurer på, OK, hva er rekkefølgen av operasjoner her? Har vi dele først? Har vi modulo først? Så modulo innehar samme presedens som divisjon eller multiplikasjon, og dens venstre assosiativ. Så det er på samme måte. Du vil alltid gjøre parentes, deretter multiplikasjon, divisjon, og modulo i rekkefølge fra venstre til høyre. Så vanlige regler. Bare sette den i samme kategori som divisjon og multiplikasjon. Så i dette tilfellet, ville vi har en pluss to gir oss tre. Vi multipliserer det med to, slik at vi får seks. Vi modulo at ved 2, som gir oss? STUDENT: 0. ALLISON: 0. Og så legger vi to, så vi får 2 i det siste tilfellet. Så modulo-- du definitivt kommer til å være å tenke på måter å innlemme at når du innpakning rundt hele alfabetet. Hvis du er på Z, og du må flytte videresende tre mellomrom for å komme til C, det er at hele konseptet av innpakning rundt. Så jeg vil la det til dere å regne ut hvordan akkurat du skal bruke den. Men definitivt et nyttig verktøy for din PSet denne uken. Jeg liker dette. Dette er en av mine favoritt psets. Så etter at du gjør det, hvis du har venner, du kan, i likhet med, sende hverandre hemmelighet meldinger og sikre at det fungerer. Fordi det vil dekryptere den eller hva. Masse moro. Og det er slutten av avsnitt. Jeg er ferdig tidlig. Jeg har fortsatt 15 minutter med dere, så hvis det er noe at du ønsker å gå over videre, vil jeg være glad for å gjøre det. Eventuelle andre spørsmål om din PSet for de av dere som har startet eller lese spec. Alt som vi har snakket om i den siste timen og 15 minutter som du vil at jeg til slags rehash, vil jeg gjerne. Eller vi kan kalle det avsluttes, og du kan alle forlate og ta mer godteri med deg som du går. Men hvis det ikke er noen langvarig spørsmål, vennligst gi meg beskjed. Du kan også komme opp og snakke med meg etterpå. Jeg lover at jeg ikke bite. Noe mer? Alle er bra? Alles følelsen som de kan håndtere dette PSet? Du kommer til å være fin gutta. Arbeidstid er der for en grunn. Cool. Alright. Vel, i så fall, takk dere alle så mye for å komme. Jeg håper å se deg neste uke. Det vil være mer godteri. Det kan være andre kule ting. Og jeg ser frem til å få å vite alle dere i år.