[MUSIC SPILLE] ANDI PENG: Dette er CS50, og Velkommen til uke to av seksjonen. Dette er faktisk mens uke to av våre class-- faktisk, den første uken vi har hatt delen. Håndsopprekning, hvor mange av dere alle kom til super-delen i forrige uke? OK, det er OK. Det er greit. Hvor mange av dere har sett super-delen i forrige uke? OK. Og dere gjorde fint på oppgavesettet en? Så jeg kommer til å ta det som vi har en haug med virkelig intelligente barn i denne klassen, og ting vil bli bra. OK. Så first-- Først skal vi bare kommer til kort gå over agendaen for i dag. Vi skal snakke om kurs logistikk. Mange av dere sannsynligvis har spørsmål om hvordan ting kjører i dette kurset. Vi vil svare på dem. Vi kommer til kort gå over løkker i saken noen av dere savnet super delen. Vi skal snakke om ASCII kartlegging. Vi skal snakke om matriser, funksjoner, kommandolinjeargumenter. Og til slutt, hva dere sannsynligvis alle virkelig ønsker å være her for å lære om, er din pset2. Vi vil ha noen fine triks og tips for hvordan du gjør det. OK. Også, for det andre har vi masse godteri her. Alle som liker godteri, bare komme opp her. Hente noen. Jeg har en haug. Vi har massevis på kontoret. Jeg vet egentlig ikke ønsker å spise godteri hele dagen. Dere bør spise alt godteri, fordi jeg tok det her for dere. Bare spise godteri. Det vil være godteri hver seksjon. Så først, hvem er jeg? Mitt navn er Andi Peng. Jeg er leder TA av CS50 her på Yale. Og i tillegg til det, vil jeg også be-- hvis noen skulle like-- løpe kompis, skulderen å gråte på. Hvis natten før PSet grunnet, du aner ikke hva som skjer, slo meg opp. Vi vil uttrykke medfølelse sammen, et cetera. Bare vet at jeg er her som en ressurs for deg som frontlinjen i å hjelpe dere å finne ut hvordan å løse problemer i CS50 og utover. Min e-post er andi.peng@yale.edu. Jeg vil også sende ut en enkeltperson send en epost med telefonnummeret mitt i det slik at ikke alle på Internett kan se telefonnummeret mitt. Føl deg fri til å ringe meg når som helst. Seriøst, er telefonen min vanligvis festet til hånden min. Jeg kan ikke svare i løpet av et par minutter. Jeg kan ikke svare innen et par timer. Men jeg kan garantere deg, hvis du e-post meg, hvis du ringer meg, tekst meg, vil jeg svare innen 24 timer. Ofte vil jeg svare før det, fordi jeg forstår at alle har noen problemer, og du vil svarene skal besvares svært raskt. Men hvis du ringer meg 30 minutter før det stykke som skyldes torsdag kvelden-- være like, Andi, hjelpe meg, Jeg har ikke started-- jeg kan gi du som skulder å gråte på. Men det kan være på tide å tenke på hvordan å ikke gjøre det neste gang. OK. Oops. Hvordan kan jeg gå tilbake på? Det vi går. Så i dette kurset, har vi en massevis av støtte for alle. I tillegg til å bare seksjoner her, som du hver uke kommer til å tilbringe 90 fantastiske minutter med meg, vi har også kontortid. Hvor mange av dere har allerede vært til kontortiden for å få hjelp? Flott. Det er virkelig godt å se, fordi vi har en stab på over 45 TAs og instanser trent for dette kurset som er her for å hjelpe dere med psets. Mandager de er holdt i TEAL klasserom i 17 Hill House her ved Yale. Tirsdager og torsdager, de er holdt i commons. 08:00 til 11:00 ganske mye hver ukedag. Kom inn, kom ut. Alle problem, ingen problem-- bare kom inn, og så skal vi hjelpe deg med det. Dernest, i tillegg til kontortiden og seksjoner, vi har også shorts. Har noen sett et par av shorts eller walkthroughs i videoene på nettsiden? OK. Så de er veldig, veldig nyttig. Vår herlige Harvard produksjon teamet der borte på den skolen oppe i nord, de har filmet og produsert disse utrowalkthrough videoer. De tar deg trinn for trinn gjennom hvordan du skal gå om å løse et problem. Ofte, hvis du er forvirret om et enkelt konsept, en enestående konsept, ta en titt, fordi vi trolig ha et kort på den et sted på våre nettsider. Og det er som regel en stor ressurs skal se etter når du er først tapt på hvordan man skal håndtere et problem. For det tredje har vi også study50 og reference50. Så studere 50 på Nettstedet er bare en link. Det er, tror jeg, study.cs50.net eller noe sånt. Bare Google det. Vi har mange lysbilder forberedt. Vi har massevis av shorts og walkthroughs-- ting hele kompilerte veldig fint og ryddig for dere alle å bla gjennom, ser noen begreper at du er forvirret om. Det vil nok bli dekket der borte i study50. Reference50-- lignende. Vi har mange ulike notene lett tilgjengelig for din disposisjon. Og til slutt, har vi det er kalt CS50 Diskuter, et forum der, hvis kvelden før du gjør dine problemer, sier Har du et spørsmål. Logg inn for å CS50 Diskuter. Legge inn spørsmålet ditt. Og deretter ett av hundreds-- kanskje, thousands-- av jevnaldrende ta denne klassen på nettet vil logge inn. Og kanskje noen kan få ditt svar før en TA kan. Det er egentlig bare en online forum som vi kan alle bruke til å diskutere våre problemer. Det er greit. OK. Så problem setter. Vi er i ferd med rett i tykke av oppgavesettet to. Mange av oss har allerede kjempet gjennom oppgavesettet en. Vi vet allerede at kanskje venter for den siste natten for å gjøre din PSet er ikke den smarteste tingen å gjøre i CS50. Tips og tips essensielt for Suksessen blir lest hele spec. Hvor mange av dere har allerede lese spec for PSet 2? OK. Det er et solid beløp. Jeg vet dere har sikkert gjenkjent nå spesifikasjoner er veldig lang. De er veldig, veldig lenge. Det er veldig vanskelig å lese hver linje av at nøye ord for ord. Du ønsker å bare skumme til der den forteller deg å gjøre noe. Jeg kan garantere deg, ikke gjør det. Hvis du gjør det, er du sannsynligvis kommer til å savne et sted hvor den forteller deg hvordan du starter et problem eller den forteller deg hva du skal navn problemet eller den forteller deg, Dette er sannsynligvis den beste måten å begynne å gjøre ditt problem. Og da vil du være tapt. Når du prøver å lese spec halvveis gjennom, mange av de viktige information-- i at du ikke er skal være i stand til å virkelig tilgang. Så les hele spec. Prøv å lese hele spec før du kommer til delen, fordi da, når vi snakke om PSet, Vi kan alle ha en idé av hva som skjer. For det andre er dette et konsept at jeg liker å referere mye gjennom hele kurset semesteret. Men i hovedsak, møte oss halvveis, ikke sant? Meg, som TA og Jason som selvfølgelig Lederen og Scaz som professor og David som professor og alle de andre vakre TAs i dette kurset, assistenter i denne course-- Vi vil gjøre vårt beste for å sikre at du er satt opp for å lykkes i dette kurset. Vi vil holde oversikten. Vi vil holde kontortid. Vi vil svare telefonen samtaler, svare på e-poster, gjøre alt vi kan for å gjøre for at dine spørsmål blir besvart. Men hjelpe oss også. Møt oss halvveis. Hvis du kommer til kontortid ikke å ha gått til del, ikke etter å ha sett forelesninger, har ingen anelse om hva som skjer, være like, hjelpe meg. Jeg kommer til å være som, vel, jeg beklager. Det kan være på tide å låne som skulder å gråte på, fordi jeg er ikke sikker hva jeg kan gjøre for å hjelpe deg hvis du ikke prøver å i det minste hjelpe selv litt i begynnelsen. Møt oss halvveis. Du vet, kan du komme forberedt på å svare og få klar til å engasjere seg i materialet. Det gjør ting så mye enklere for alle involverte. Ja, det er ganske mye det. Gradering. Så på pensum, er det ganske inngående om hvordan vi klasse. Men i hovedsak, nedbryting i dette er 50% av karakteren vil være de, som psets er nydelig, fordi det er hvor du tilbringer den enorme Flertallet av kurset tid på. Quizer 40%, og din endelige prosjektet vil være 10%. Det vil være to quizer gjennom løpet av semesteret. Jeg tror vil dato og klokkeslett er også oppført på pensum. Måten vi vil bli gradering dine psets er at vi har egentlig fire verdier som vi tilordner til hvert klassetrinn. Vi har en verdi på omfang, korrekthet, design og stil. Så som du ser, er den slags vår formelen for beregning psets. Tre gir vi mest vekt på nøyaktighet, fordi åpenbart din coach skal teste for sakene at vi vil at den skal teste for. Dere har alle check50 til din disposisjon. Det er en svært nyttig funksjon at dere kan alle laste opp koden din til våre servere, hvor vi skal sjekke det for deg. Og du har sett dem Frowny ansikter, smilefjes. De er veldig, veldig nyttig. Vennligst ikke være student som liker tries å hardcode i alle svarene på dem. Jeg har definitivt sett en PSet der noen så alle verdier av check50 og de bare hard kodet in-- hvis dette nummeret, skrive ut dette nummeret. Hvis det nummeret, skrive ut det antallet. Ikke gjør det. Selv om teknisk check50 er riktig, din måte å løse Problemet er ikke riktig. Så bare bruke check50 sparsomt. Men også sørge for at du forstå hvordan det fungerer, programmet fungerer i tillegg til check50, fordi vi ikke kan teste hver mulig tilfelle av check50. Vi skal teste noen av dem. Design er egentlig, hvordan godt designet er koden din? Hvis du er kopi lime multippel linjer med kode mange, mange ganger. Kanskje du ikke har helt den beste design i koden. Kanskje det er på tide å legge til at loop. Hovedsak, her er det bare alle om å prøve å gjøre koden din, prøver å skrive koden din så effektivt som mulig, slik at programmet kjører så fort som mulig. Endelig har vi stil. Så stilen er litt av en vilkårlig, subjektivt begrep. Jeg vet at vi offisielt har en stil 50 guide for CS50, hvor det forteller deg, oh, du bør ha en plass her. Du bør slags format koden på denne måten. Du bør nevne ting på denne måten. Jeg vet egentlig ikke bryr seg, per se, hvordan du velger å style koden din, bare så lenge du holder deg konsekvent. For eksempel, hvis du liker å igjen en plass etter den fire før fire loop, bare gjøre det hver gang. Ikke slags gjøre det. Ikke gjør det andre tider. Hvis du liker å holde krøllete bukseseler plass en bestemt måte, bare alltid gjøre det på den måten. Ikke slags gjøre det et sted her og et sted ikke der. Når vi gradering, det er virkelig vanskelig hvis jeg har ingen anelse om hvordan du formaterer koden din, ting er sprø og malplassert. Hvis du bare holde det konsekvent, er det mye lettere for meg som den større å kunne lese koden din. Det er mye enklere for deg som student å være i stand til å se gjennom koden din og se hva som er galt med det slash hvorfor det er problemer. Stilen er en av de enkleste tingene dere kan gjøre for å få full score. Egentlig, hvis du bare bryr seg om du betale fem minutter av oppmerksomhet til koden din hver uke, bør du være å få fulle stil poeng. Til slutt har vi det som kalles multiplikatoren av omfang. Scope-- Jeg vet det er en stor ord, spesielt i denne klassen. Men omfang, alt som betyr er at du forsøker de psets til beste evne. Hvis du slår på tre av fire problemer og ikke engang forsøke siste, er du sannsynligvis kommer til å miste noen poeng på omfang. Selv om du bare starte problemet, gjør ditt beste for å gå gjennom den. Selv om det ikke fungerer, slå den på, fordi det viser og demonstrerer for oss at du prøver, som du forsøkte oppgavesettet etter beste evne. Og så kan vi gi deg full poeng for omfang. Omfanget er også svært viktig for når vi snakke om den laveste PSet poengsum dråpe. Så i løpet av semester, dere har ni psets. Og vi vil faktisk være slippe lavest poengsum av de ni, men bare hvis du har fulle omfanget poeng. Så hvis du slår i en ufullstendig PSet, dessverre kan vi ikke slippe at man, fordi omfanget punkter ble ikke fullført. Så selv om du har det forferdelig uke hvor du er døende, og du er syk eller hunden din dør, dør katten din, og du er overlesset med lekser, bare forsøke PSet. Gjør det til beste evne. Hvis det ikke fungerer, spiller det ingen rolle. Bare skru den på. I det minste kan vi gi du poeng for innsatsen. En for innsats i denne klassen. Minst laveste poengsum dråpe for innsatsen. Så ja. Det er ganske mye det. Har noen spørsmål så langt på hvordan vi karakter i klassen? Eller noen av disse? Noen av disse så far-- seksjoner, kontortid? Kjølig. OK. Så dette er et tema som ikke man virkelig liker å snakke om. Jeg har egentlig ikke lyst til å snakke om det. Dere har egentlig ikke lyst å høre meg snakke om det. Men dessverre, vi alle må snakke om det. Brukte 20 minutter en David foredrag snakke om det. Og som er gjenstand akademisk redelighet. Så vi alle her har sikkert skrevet et essay gang i vår Yale karriere. Vi har sikkert fått en diskusjon der vi har fått beskjed om å ikke plagiere vår essay, fordi at arbeidet er ikke vår. I informatikk, har vi samme type konsept. Alt arbeid som du sender, all kode som du skriver bør være kode som du har skrevet. Bør ikke være kode som du har kopiert fra et annet sted. Bør ikke være kode som du har googlet og plopped og du ikke vet om det fungerer. Du slags har en følelse av hva det gjør, men egentlig ikke. Når du er i tvil, i hovedsak, det er bare å være rimelig. På vår pensum, har vi en hel liste over ting vi ser på som rimelig versus ikke rimelig. For eksempel, rimelig er du og din venn diskutere hva den beste måten å gå om logisk å løse et problem. Det er ganske rimelig. Hva ville ikke være fornuftig er hvis du Gutta fikk sammen, skrev den samme koden, og slått i den samme koden. Det er ikke rimelig. Samme, form av et essay. Hvis du ønsker å diskutere med din venn, hei, dette er hva jeg ønsker å skrive om. Dette er fremgangsmåten jeg vil ta å skrive om det, flott. Det er flott. Vennligst samarbeide med hverandre. Hvis dere starter skriver det samme, slår i samme essay, er at mindre OK. Så når du er i tvil, bare ikke gjør det. Her har vi i CS50, har vi skript som løp for å automatisere for å teste ikke bare riktigheten av koden din, men også det unike koden din. Så vennligst ikke sette oss i posisjon mot å henvise saken til excomm. Vennligst bare for alle, la oss bare gjør dette til en fantastisk opplevelse. Alle lærer bedre, vi alle er lykkeligere, og vi er alle satt opp til lykkes i dette kurset. Noe som er veldig unikt med denne klassen som jeg tror alle burde virkelig ta hensyn til er at vi har det som kalles beklagelsen klausul i vårt pensum. Så egentlig, innen 72 timer, hvis du tror du har gjort noe du ikke er helt sikker på var hensiktsmessig, kan du komme til oss. Vi lover deg at innen 72 timer vi vil håndtere saken selv uten å henvise til en høyere myndighet i administrasjonen. Så hvis du kommer til meg og sier: Andi, hei, jeg er virkelig lei meg, men jeg tror det er et par linjer i min kode i går kveld at jeg slags googlet, fikk ut av Stack Overløp, kopiere og lime, og jeg er veldig, veldig lei meg om det, gi meg beskjed. Vennligst ikke bare la det fester og bare håper at jeg fange den. Vi vil fange den. Bare komme til meg. Gi meg beskjed innen 72 timer. Vi skal finne en løsning. Og vi lover at vi ikke vil referere til universitets myndigheter hovedsak. Så det er i din beste interesse å bare være ærlig med alle involvert i kurset. OK. OK. Så nå, raskt før Jeg går videre, er det noen har spørsmål om logistikk på hvordan kursene vi kommer til å kjøre, hvordan seksjonene skal å kjøre, noe av det? OK. Yeah. PUBLIKUM: [uhørbart]? ANDI PENG: Yeah. Så quizzes-- hvor mange av dere er i mandag / onsdag delen? Hvor mange av dere er i tirsdag / torsdag? OK, så det er en solid split her. Så måten vi driver det ved Yale er at vi kommer til å ha to separate quizzes-- en for hver section-- som vil bli tatt i løpet av klassen. Jeg tror det er oktober slutten av oktober, noe sånt, som i uke én av quizen. Ja, så bare kommer til klassen. På at mandag eller onsdag, du tar quizen. På den tirsdag eller torsdag, du vil ta en annen quiz. Men det samme materiale vil bli dekket. Yeah. Godt spørsmål. Yeah. PUBLIKUM: Hvor skal vi går for å sjekke våre karakterer? ANDI PENG: Yeah. Så jeg skal sende ut en e-post uansett hver uke når quizer er graded-- eller, sorry, når psets er gradert. Psets er vanligvis slått i etter middag eller fredag. Så jeg lover at jeg vil prøv å få dem tilbake til deg ved middagstid av følgende fredag. Når jeg grade en PSet, vil jeg sende ut en melding på karakterboken som forteller deg poengsummen din kan sees på nettet. Så akkurat denne uken, etter at jeg føre gradering forrige ukes psets, dere vil få en e-post varsling fortelle deg, hei dette er hvor du gå å se dine karakterer. Og du kan se hver Fordelingen av karakterene dine. Du kan se kommentarer. Oh, rask ting også. Kommentarfeltet i den store Boken er der jeg vil sannsynligvis tilbringer mesteparten av tiden min gradering. Så en ting som er veldig viktig når dere ser karakterene dine på dine psets er ikke bare på jakt på det fysiske stillingen men også tar deg tid til å virkelig lese mine kommentarer. Ofte som gir deg tilbakemelding om hvordan du løser et problem. Hvis du trenger å gjøre noe litt bedre, konstruktiv kritikk vanligvis er best gitt i de kommentarfeltet. Så vær så snill, vær så snill, jeg kommer å bruke tid på å skrive kommentarer. Vær så snill, ville jeg virkelig pris på det hvis dere vil lese disse kommentarene. OK. Kjølig. Greit. Så vi kommer til å begynne å snakke og bare se gjennom raskt noe av materialet fra uke null bare så vi er på høyre side for starter denne ukens problemer. Så mens loop er en av de tre typer av løkker vi diskutert tidligere i denne klassen. En stund løkke hovedsak er skrevet i syntaks der, mens en bestemt tilstand, gjøre dette gjentatte ganger, ikke sant? Tenk på det i denne grafikken her. Du kommer til å begynne på en visst punkt i koden. Du kommer til å gå inn i løkken tilstand if-- jeg ikke know-- x er mindre enn én. Hvis det er sant, du kommer å utføre sløyfen kroppen. Og du kommer til å fortsette å gjøre som igjen, igjen, igjen, over og over-- som er grunnen til at det er en loop-- inntil tilstanden blir falsk. Så på denne måten, en stund løkke er en av de enklere måter å skrive noen form for tilstand som må gjenta igjen og igjen og igjen. Bare vær forsiktig når du skriver noen form for løkke at du har en exit tilstand som samt en oppdatering til hva det er slik at løkken ikke bare kjøre over og over uendelig. I alle fall, du kommer å ønske å være sikker at du endrer noen aspekter av en kode eller ved slutten av sløyfen bare for å være sikker på at du har en måte av framdrift mot tilstanden at du ønsker å møte til slutt. Betyr det fornuftig for alle? Vi ønsker ikke å være fanget opp i denne spiralen der vi går rundt og rundt og det er ingen måte å bryte sløyfen. Og hver sløyfe hovedsak har en måte å gjøre det. OK. Dernest mange av dere i dine Mario psets sannsynligvis måtte ansette denne type av sløyfen. Det kalles en gjør mens loop. Først av alt, kan noen fortelle meg hva er forskjellen mellom en gjør mens loop og en stund loop er? Yeah. PUBLIKUM: The do mens loop kjører på første [uhørbart]. ANDI PENG: Ja, akkurat. Så en gjør mens loop alltid gjør hva er inne i do, inne i parentesene der og gjør at tilstanden før du sjekker om the-- beklager, gjør at koden før kontrollere for tilstanden. Og dette er spesielt relevant for oss her i denne klassen, fordi de fleste ganger vi kommer til å ønske å be brukeren for noen form for innspill. Og så, avhengig av inngangs de gir oss, så kan vi evaluere, oh, gjør vi trenger å be dem igjen? Så i Mario, hvis brukeren ga deg en negativ høyde, f.eks du kommer til første ledetekst og gjøre det som er inni. Da kommer du til å sjekke stund. Du vet, er negativ en, er at et positivt tall? Hvis det ikke er det, kommer jeg til å gå tilbake og gjenta do og gjenta og gjenta og gjenta til de endelig gi deg et nummer som du liker, at vi alle kan benytte i vår kode. Det er ganske viktig for hovedsak noen brukerundersøkelser. Jeg kan garantere deg noen tid i en PSet der Vi ber deg legge inn noen form for kode, er vi sannsynligvis kommer til å gi deg en test der vi er skal gi deg noe dårlig det er kommer til å prøve å bryte koden din. Hvis vi prøver å be deg om å legge inn en heltall, kan vi bare gi deg en streng og se hvordan du skulle håndtere det. Hvis vi ber deg om å ansette en alder, Vi kan gi deg et negativt tall å se hvordan du skulle håndtere det. Bare sørg for at dere skal teste for tilfeller der du ikke får det beste input, la oss bare si. Og en gjør mens loop er ofte det beste måte å designe din kode så at det oppfyller det omfang. OK. OK. Så dette er trolig den mest kompleks sløyfe ut av de tre som vi har sett på så langt. Og det virker veldig skummelt i begynnelsen. Men jeg kan garantere deg, når dere få taket på hvordan du bruker en for loop, det er en av de mest nyttige ting, de fleste nyttige verktøy i arsenal for fremover i denne klassen. Så for eksempel i Scratch, vi hadde dette veldig enkelt blokk som bare sa gjenta denne bestemte setninger visst antall ganger. Forresten, SAJ-- det er Scaz Andi Jason. Vi ofte signere vår e-post SAJ. Hvis vi sier SAJ, ikke bli forvirret. Det er bare oss. Så i Scratch, kunne vi ha en blokk som sagt, jeg gjentar gjerne SAJ! 10 ganger. Veldig enkelt. Logikken bak det er en veldig, veldig enkelt, ikke sant? Jeg vil først gå gjennom den første gang, og at, den andre gangen og ser at, for tredje gang, slik at videre og så videre, helt til du treffer til 10. Og måten vi ville representere det i kode er bare gjennom en enkelt for løkke. Så for, du kommer til å erklære variabelen her, i dette tilfellet med en int. Vi kommer til å gi det et navn jeg. Vi kommer til å initialisere den til 0. Og stopp utgaven er kommer til å være i er mindre enn 10. Og oppdateringen kommer til å være i ++. Og i sløyfen, det kommer å kjøre til slutt det treffer enden av condition-- der tilfellet, det kommer til å bryte sløyfen. Det bør være ting som du Gutta har all slags sett før og måtte gjøre for din oppgavesettet en. Er det noen som har noen spørsmål om etter looper akkurat nå? OK. Flott. OK. Så for de av dere som har lese PSet spec for denne uken vet at vi er nødt til å ansette noe som kalles ASCII og ASCII-tabellen. Så David i foredraget gikk over kort hvordan datamaskiner essentially-- alt er kodet i en datamaskin i binære, i nuller og enere. Og måten at datamaskiner er i stand til å lagre forskjellige verdier i tillegg til nuller og enere er gjennom kartlegging disse tallene til å representere andre sifre eller vesentlig andre tegn. Slik at i dette tilfellet, en ASCII table-- alt den gjør er kart tegn, eller tegn, til tall. Så kildekoden filen i din computer-- den ser, hei, en haug med nuller og enere, nuller og enere, nuller og enere. Det er det som er lagret i faktiske minnet på datamaskinen. Men når vi mennesker ønsker å kommunisere med datamaskinen, vi want-- si, for eksempel, hvis jeg vil ha den store bokstaver A, Jeg kommer til å trenge noen måte for å fortelle datamaskinen, oh, når jeg skriver med store bokstaver A, mener jeg denne representasjonen i binær. Og så den måten vi gjør det blir kastet en vilkårlig tingen kalt en ASCII-tabellen, hvor vi, som mennesker, som programmerere, for en tid siden, vi vilkårlig besluttet at vi skulle tildele disse tall verdier til disse tegnene. Så dere kan google dette på nettet. Jeg tror det er en link til den i pset-- bare en ASCII kartet bordet, ASCII tabell. Det betyr bare binære numre i tegn. Og det kommer til å bli veldig nyttig for ditt problem sett når du vil beregne noe, eller hvis du vil vise viss tegn eller heltall eller manipulere visse tegn. Det kommer til å bli veldig viktig at dere alle vet hvordan du skal navigere en ASCII-tabellen. Så for eksempel den store bokstaver A er representert ved nummer 65. Og små bokstaver en er representert ved 97. Derfor er det viktig å vite at Forskjellen mellom de to verdiene er 32. Ofte, hvis du trenger å konvertere fra den ene til den annen, er forskjellen 32. Og ikke bekymre deg hvis du er snill forvirret på dette først. Vi vil gå over hvordan vi ville ansette dette i selve koden. OK. Så for de av dere med bærbare datamaskiner ut, gjerne trekke opp en ASCII-tabellen, fordi disse vil trolig krever dere å referere hva tegnene er. OK. Så å vite at visse tegn kartlegge bestemte numre, hvis jeg skulle kjøre bare den første linje som code-- printf en, små bokstaver a, minus store bokstaver A. Er det noen har en gjetning på hva som ville være skrive ut på skjermen akkurat nå? Så først av alt, hva gjør Små bokstaver en representerer? Hvilket nummer er at kodet i ASCII-tabellen. Sorry? PUBLIKUM: 97? ANDI PENG: 97, stor. Og hva er store bokstaver A? PUBLIKUM: 65. ANDI PENG: Så hva er 97 minus 65? PUBLIKUM: 32. ANDI PENG: OK. Så hva tror dere kommer til å skje når jeg innspill som kodelinje inn i datamaskinen min? PUBLIKUM: [uhørlig]. ANDI PENG: Beklager, si opp. Ingen bekymringer. Dette er et veldig trygt miljø, minus kameraet. Vi er alle kommer to-- ingen bekymringer. Bare vi alle kommer til å late som det er bare oss chilling i dette rommet. Ingen bekymringer. Ingen spørsmål er for dumme. Ingen svar er en dum svar. Jeg sannsynligvis kommer til å gjøre feil i løpet av min undervisning. Seriøst, folkens, bare blurt den ut. Vær trygg på deg selv, vet du? Så hva var det? Hvem sa at siste svaret? OK. Rope at fint og klart. PUBLIKUM: 32? ANDI PENG: 32. OK, la oss kjøre denne koden og se om det er det som skjer. OK. Så som dere kan slags se, den typiske notasjonen jeg har satt opp her for hvordan vi ville ansette noen form for program på datamaskinen vår. Vi har vår viktigste funksjon innenfor vår viktigste funksjon. Jeg skal bare kopiere og lim inn denne linjen med kode. Vær også forsiktig når dere kopierer og limer inn koden. Noen ganger visse operatører ikke lime over på riktig måte. I så fall minus skiltet var faktisk en strek. Og slik at maskinen ikke plukke den opp. Så jeg måtte gå tilbake og fysisk skrive inn det. Bare vær forsiktig når du dere gjør det. OK. Vi kommer til å kjøre dette her. Så vi kommer til å cd inn i vår section2. Jeg har kalt dette programmet asciimath. Så husk, når vi kjøre noen program, ønsker vi først å kompilere den ved å kjøre det gjennom vår make. Og så ønsker vi å faktisk kjøre programmet ved å gjøre dot-slash. Så vi kommer til å ./asciimath. Høyre, der vi går. Og vi ser 32. Bra gjort. Du fortjener et sukkertøy. Godteri for deg. Unnskyld. Greit. OK. Så vi kan gå tilbake til vårt eksempel her. Aah, nei. Aah. OK. Jeg skal bare holde det sånn. OK. OK. Så som dere ser, kan vi gjøre mange svært interessante ting, mange svært kule ting, mye veldig kompliserte ting som involverer ASCII-tegn og tall. Når du kommer ned til linje fem, det er mye å følge med. Vi kommer ikke til å gå gjennom seksjonen. Gjerne, hvis du kan, resonnere den ut på papir først på hva som skal skje når du innspill slik en rekke verdier. For eksempel i den siste linje, har vi z-- som representerer en viss number-- a-- som også representerer en visse number-- pluss 1 modulo 26 pluss små bokstaver en. Hvis dere holde lesing gjennom disse, kan se et mønster komme opp i hvordan vi manipulerer koden. Jeg høyt, foreslår etter § dere alle gutta gå videre og innspill de alle i datamaskinen og se hva slags tallene kommer ut og resonnement gjennom hvorfor de er skjer, fordi for dine psets det vil være veldig viktig for deg å forstå hvorfor visse ting skjer. Alle disse slides vil være online. Så ingen bekymringer om å prøve å fysisk kopiere ned notater. Alt er online. Denne delen i seg selv vil være online. All min kildekoden som Jeg kjører vil være online. Yeah. Visste du fortsatt har spørsmål? PUBLIKUM: Hva er modulo? ANDI PENG: OK. Så modulo er en operatør som kommer til å være ganske viktig for gutta sin PSet her. Så den måten at operatørene i C og i programmering arbeid er at du har det som kalles divisjon symbol og modulus symbol, som er akkurat som den prosenttegnet. Så i C, når du gjør et heltall dividert med et heltall med en skråstrek, C har en tendens til å ønske å kutte av alle de desimaler, fordi et heltall ønsker å konvertere til et helt tall. Det kommer ikke til å ønske å være en dobbel med en haug med desimaler alt etter det. Så hvis jeg gjør 3 delt på to, kommer det til å kutte 0,5 og bare gi deg en. Så det er noe å være svært forsiktig med når du er gjøre noen form for matematikk i programmering, er at tallene du får ikke kan være tallene at du tenkte, som er grunnen til avrunding i din siste PSet er så viktig. Modulo gir deg resten. Så for eksempel, hvis jeg gjorde tre modulo 2-- så tre prosenttegn 2-- det vil gi deg resten av det. Så 3 delt på to er 1.5. Det er en rest av en. Det vil gi deg en, som er resten av det. Så når dere er i bevegelse gjennom ASCII-tabellen, modulo vil ende opp med å bli noe som er veldig viktig, og vi vil diskutere det senere. OK. Så noe som er pen, ganske ny og ganske unik at vi har diskutert denne uken begrepet hva en matrise er. Slik matrise er det først type datastruktur at vi kommer til å støter på i denne klassen. All data strukturen er en slags vilkårlig, bokstavelig ting som struktur at vi som programmerere har skapt, at vi har satt i vår kode som kan inneholde andre deler av koden. Så i denne forstand, en array-- Tenk på det som et arkivskap, der hvis du åpner annerledes hyller av arkivskap, du kan få tilgang til forskjellige ting. I minnet, er en matrise bare å gjøre det samme på din datamaskin. Du kan ha forskjellig blocks-- vi kalle dem indices-- av en matrise. Det er akkurat som en blokk, en hylle minne at vi har skapt i din datamaskin som du kan legge inn visse ting i forskjellige områder. Så med en matrise, du alltid må specify-- du må spesifisere erklære en array i følgende format. Du kommer til å først angi datatype som du ønsker å lage av tabellen. Hvis jeg vil ha en rekke heltall, Jeg kommer til å sette int rett der. Hvis jeg vil ha en rekke strenger, Jeg kommer til å sette strenger der, navnet på array, og deretter du kommer til å ha hakeparenteser. Og inne i hakeparentes, er du nødt til størrelsen på array. Noe som er veldig viktig for huske på når du oppretter matriser er at når du oppretter en array, kan denne størrelsen ikke endres. Så hvis du vet at akkurat nå man har en rekke av størrelse 10, du vet at jeg kommer til å ha 10 celler innenfor eller 10 indekser i denne matrisen, og det er aldri kommer for å utvide eller redusere uansett hva, og at det er for tiden bare 10 blokker av plass bevilget i minne som kan lagre opp til 10 ting av det du har satt. Så på denne måten en rekke datatype den datastruktur som er en matrise er svært forskjellig fra noen andre som vi vil bli dekket senere i dette kurset. Yeah. For eksempel, hvis du ønsket å skaper en matrise av størrelse 3 som inneholdt variabler av integer-- Åh, beklager, av temperature-- og temperatur, av Selvfølgelig er et helt tall. Så vi ville skape int, som er den Datatypen for hva vi ønsker å lagre. Vi kommer til å kalle dette temperaturer av hensyn til nomenklatur av navngiving noe som vi alle forstår. Og vi kommer til å ha hakeparenteser. Og vi ønsker tre tall. Så vi kommer til å sette tre på innsiden av det. Noe som er virkelig viktig å huske på er at arrays er null indeksert. Alt det betyr er at du starter med indeksen fra 0, og du kjører opp gjennom størrelsen på matrisen minus en. Så for eksempel her, vi har en rekke størrelse 3. Det kommer til å være i stand å holde tre verdier. Men tallene themselves-- som nummer, matrisen, som indeks, matrisen, er 0 til 2. Så folkens, være veldig, veldig forsiktig når du går gjennom dine problemer fastsatt og skape noen form for array, fordi mye av ganger er det veldig, veldig lett å glemme det. Jeg faktisk ikke har indeksen av tre, som jeg for tiden bare har indeks på 2. Og hvis du prøver å tilgang til tredje indeksen, det kommer til å være det som er kalt null terminator. Det kommer ikke til å faktisk finnes i tabellen. Og datamaskinen er ikke kommer til å like det. Så vær forsiktig når du får tilgang ting bare for å sikre at du husker som arrays er null-indeksert. OK. Slik det første eksempelet er bare en måte for å skape en matrise. Det andre eksemplet jeg har Nedenfor er bare en måte separat for å skape det som er det samme data struktur som vi nettopp har lagt inn. Så i stedet for fysisk å kjøre gjennom og sette i temperatur fra 0 er lik uansett, temperatur 1 er lik uansett, temperatur 2 equals uansett, kunne jeg faktisk bare direkte skape alt på én linje inn temperaturhakeparenteser er lik. Og legg merke til i dette tilfellet, trenger du ikke å angi hvor stor matrise er, fordi datamaskinen kommer til å gå gjennom og se at det er tre elementer i disse klammeparentes. Og det kommer til å vite, OK, Jeg trenger en rekke størrelse 3. Du kommer ikke til å trenge å innspill den på følgende måte. Og også, ja, på den måten. Har noen spørsmål om hvordan vi gjør arrays eller hvor strukturen av en matrise virker? Yeah. PUBLIKUM: [uhørbart]? ANDI PENG: Ja, akkurat. Så hvis du var å erklære og initial en matrise følgende metode, som er den andre veien, kan du bare la dem. Og datamaskinen vet automatisk at det må telle hvor mange elementer er i disse klammeparentes, atskilt med komma. Så her ser de 65, 87, 30. Slik at maskinen vet, oh, det er tre heltall. Jeg vet å skape en rekke navn temperatur med tre elementer i den. Godt spørsmål. Yeah. PUBLIKUM: Er det ikke mulig å opprette en matrise med ulike typer data som kan legges inn i det? For eksempel, med heltall [uhørbart]? ANDI PENG: Med henblikk i denne klassen, nei, akkurat nå. Når du oppretter en data strukturere som en matrise, du forteller datamaskin, hei, jeg trenger deg å bevilge så mye minne i harddisken min, med hver celle er en visst antall bits. Husk at vi har lært i uken null så forskjellig data typer har forskjellige størrelser? Slik at for eksempel en streng er et annet beløp plass enn en røye, som er en annen mengde plass fra et heltall. Og så hvis du ikke spesifiserer, og du mikse og matche hva slags variabler du har, datamaskinens kommer til å bli veldig forvirret. Og det er ikke til å kjenne hvor mye minne til å gi deg. Så for formål høyre nå, datamaskiner kan bare gjenkjenner en type av en matrise. Godt spørsmål. OK. Så naturlig, den andre spørsmålet vi har er, vel, nå som vi har opprettet en matrise, og vi har satt alle disse tingene i matrisen, hvor er vi kommer til å være i stand til å få tilgang til det? Så typisk struktur som vi alltid tilgang til en matrise er vår herlige for loop. Jeg lover dere at vi vil være ser mye av denne karen her. I hovedsak, når du vil å skrive inn verdier i en matrise eller du vil ha tilgang til dem, beste måten å gjøre dette er en for loop, fordi i en for loop, du hvor mange ganger du er skal du ønsker å kjøre gjennom array, fordi du har en stopp utgave, ikke sant? Og hver gang du kjører gjennom, kan du få tilgang et annet element i matrisen. Og også, dette er en grunn til at vanligvis vi starter vår for løkker på 0 verdi, fordi når du åpner arrays, du kan få tilgang til null indeksen. Og så det paralleller veldig pent. Dere kan ha ønsket å skrive for int i lik 1. i er mindre enn eller lik tre. Men det ville ikke fungere helt som godt her, fordi du bare ha elementer av 0, 1, 2 og. Og så hvis du skulle starte inn i ved element 1, 2 og 3, du kommer til å ende opp med å løpe ut av grensene for din array, og dårlige ting kommer til å skje. Så jeg håper dere se naturlig overgang hvorfor i tidligere klasser vi lærte dere hvordan du skal kjøre og formatere en for loop slik at vi var. Det er fordi, nå har vi overført til matriser, Du kan se hvorfor de 0 låner seg veldig pent å få tilgang. Så måten vi gjør det er at-- jeg er bare å skrive den ut her for moro skyld med å skrive den ut. Men jeg har min plassholder, komma. Og selve aksess del som skjer. Navnet på matrisen het temperatur. Så det er temperatur og i-te element i gruppen. Så som for loop går gjennom, det kommer til å starte på 0. Det kommer til å skrive ut 0. indeks over denne matrisen. Så det kommer til å skrive ut ut det første elementet. Så det kommer til å skrive ut ut den andre. Og så skal vi bryte. Er alle klare på hvordan det skjer? Flott. Greit. Så her har vi en måte å si, hvis vi ikke ønsker til hard-kode in-- meg som programmerer. Jeg hadde ikke lyst til å faktisk fysisk satt i hver enkelt element i denne tabellen. Hvis jeg ønsket å i stedet har brukeren oppgi verdier, hva er den beste måten å gjøre det? Vel, her har jeg laget denne herlige funksjon, der jeg kan erklære en matrise. Så int scores-- la oss bare si at vi ønsker å gjøre en matrise som holdt karakterene av alle 18 av studentene her i denne delen. Jeg tror vi har fått en bit mer enn 18 barn i dag. Men for eksempel skyld, la oss bare anta at vi hadde 18. Jeg ville skape en rekke navne score med typen int, fordi score, selvfølgelig, er tall. Og jeg kommer til å ha 18 i hakeparentes, fordi det er hvor mange studenter jeg ønsker å være i stand til å lagre score til. Og måten jeg vil befolke matrisen er at jeg hadde kjøre det gjennom en for loop, av Selvfølgelig, der 0 er min 0. indeksen. Og deretter med 18 blir min stoppe utgave, fordi det er 18 elementer i tabellen. Og så kommer jeg til å gjøre printf, Enter scorer for student-- yada yada yada. Kan noen fortelle meg hvorfor her er jeg utskrift i pluss 1 og ikke jeg? Det er en slags triks spørsmålet, egentlig ikke. Det gjør faktisk ikke fysisk påvirke driften av koden. Yeah. PUBLIKUM: [uhørbart] 0? ANDI PENG: Ja, akkurat. Det er litt vanskelig å si, hei, du er den 0. student i denne klassen. Det er litt rart. Så vi, som mennesker, har egentlig ikke liker å tenke på hvordan datamaskiner tror. Så selv om i datamaskin, er det lagring av verdier i 0-th indeksen, når vi er mennesker, vi gjør egentlig ikke liker å referere til oss som null. Så når jeg bare skrive det, Jeg kommer til å skrive ut og legge En bare for ordens skyld. Så når jeg skriver ut, kommer jeg til å være kunne skrive ut studenter 1 til 18. Det spiller egentlig ikke påvirke driften av koden på noen måte, slik jeg skriver ut. Men vær forsiktig når du er faktisk tilgang til matrisen. Når du ser resultatet I, merke til her er jeg faktisk tilgang til den 0. indeksen og ikke en pluss 0-- eller 1 pluss 1, i dette tilfellet, slik at indeksen at det er faktisk klart. Er alle slags OK på hvordan dette går gjennom og med hver indeks er jeg å sette en verdi i matrisen og skape en matrise med 18 tall at brukeren skal innspill? OK. Kjølig. OK. Vi beveger oss nå inn i noe som er ganske relevant for dette stykket satt også. Jeg vet i foredrag, David-- sorry, hadde du et spørsmål? PUBLIKUM: Kan du forstørre det? ANDI PENG: Ja, så jeg prøvde. Men jeg vet ikke. Av en eller annen grunn, denne versjon av PowerPoint er egentlig ikke fungerer godt med skjermen. Så vi bare skal å holde det slik. Alle disse vil bli lastet opp på nettet. Sorry, folkens. Yeah. OK. Så vi kan også ha strenger. Så hvis dere faktisk notice-- jeg vet Rob gikk over dette i at foredraget at han did-- en streng er faktisk bare en rekke tegn, hvis du tenker på det, ikke sant? En streng er et navn eller en setning eller et ord, ikke sant? Hvis jeg skulle lage en streng som heter Andi-- bare navnet mitt, A-N-D-I. Du tenker på det som bare en variabel. Men faktisk, det er brutt ned til bare en rekke tegn. Så det har en karakter et som er lagret i en matrise verdi. Det fikk en karakter av n lagret i andre indeks og så videre og så videre. Så på en slik måte, vi faktisk har denne typen av struktur satt i plassere for våre strenger. Så her, hvis jeg skulle legge inn Ordet "spise" - så streng ord lik får streng. Hvis jeg skulle skrive ordet "spise", som er fysisk den måten at datamaskinen min lagrer denne strengen i min hukommelse. Og hvis jeg ønsket å kjøre gjennom det og print som out-- så for inn i lik null, husk, i foredrag, vi dekket noe som heter strlen, eller lengden av strengen. Fordi jeg gjør faktisk ikke vet hvor stor matrise er av hva brukerens inputting-- For eksempel, matet jeg ordet "spiser", og jeg vet det er tre tegn, ikke sant? Så jeg kunne sette i et tre der og alt vil være i orden. Men hvis din brukerundersøkelser noe at det er et ulikt antall verdier, du kommer til å ikke være i stand til å virkelig vet at når du programmere koden din. Så måten vi håndterer testtilfeller som det er at vi har noe kalt strlen, som er bare en funksjon som forteller deg hvor lenge en streng er. Så strlen av ordet. Mitt ord er å spise. n er lik strlen av ordet. Kan noen fortelle meg hva som verdien faktisk er der? Hva gjør n representerer retten Nå, i dette eksempel, hvis jeg hadde spise? PUBLIKUM: 3. ANDI PENG: 3, akkurat. Så vi har for int i lik null, lik n tre, egentlig. Og jeg kommer til å kjøre før det er mindre enn 3i ++. Og det kommer til å egentlig gå gjennom og gjøre det samme. Det kommer til å skrive ut hver verdi og gi deg E-A-T. Det er bare betegner en annen måte å skrive den. Det kommer til å være svært nyttig. Yeah. PUBLIKUM: Hva er fordelene med å sette n lik strlen ord inne som for loop [uhørbart]? ANDI PENG: Yeah. Så hvis jeg skulle to-- si, for eksempel, hvis jeg skulle gjøre det og deretter do-- oop-- at i min kode, det ville faktisk være å gjøre som det samme. Men måten at David forklart det under forelesning, hvis noen av dere huske, var at, som mennesker, som programmerere, vi virkelig prøver å programmere vår koden slik at vår datamaskin har å jobbe så minimal som mulig, slik at at koden vår er svært effektiv. Så hvis jeg hadde det der, hva ville skje gjennom min for loop er at jeg vil først erklære en variabel kalt jeg kommer til å være 0. Jeg skal sjekke, oh, hva er de strlen av ordet? Oh, er strlen tre. Så er jeg mindre enn tre? Ja det er det. Jeg kommer til å kjøre. Og så den andre gangen tilbake rundt løkken, jeg kommer til å øke i. Jeg kommer til å være ett. Og jeg kommer til å sjekke, oh, men hva er strlen av ordet? Å, det er tre. Og gjør det synes slags sløsing, hver gang du kjører gjennom løkken, å sjekke funksjonen selv om strlen av ordet endres aldri egentlig? Så det er ekstra strøm til en datamaskin. Når du begynner å snakke om ting som er milliarder og milliarder og milliarder av steder lang, tenk datamaskinen å måtte fysisk gå gjennom og sjekke alle at hver eneste gang. Det er derfor, for å gjøre bare av hensyn til effektivitet, vi har en tendens til å bare gjøre dette, fordi denne måten vi er bare kalle funksjonen en gang i begynnelsen, og at hver gang den går gjennom det som skjer for å lagre verdien 3 der, at du ikke må kontinuerlig sjekke hver gang. Yeah. PUBLIKUM: Sorry. Bare [uhørbart]. Kunne du int n er lik strlen og sette at over utsiden av for loop også? ANDI PENG: Yeah. Du kan gjøre det, absolutt. Grunnen til at vi har det her er fordi måten en for løkke verk er at det kalles en lokal variabel i den forstand at alt du er å skape inne i for loop kun eksisterer inne i for loop. Så variabelen jeg bare eksisterer i disse parentes. Og her variablene n også bare finnes i de parentes. Så hvis du skulle bruke strlen av ordet flere ganger der nede, absolutt den beste måten å gjøre det ville være å erklære den opp toppen slik at du ikke trenger å gjøre det en gang. Yeah. PUBLIKUM: Hvorfor har du en ny linje etter prosent se om du ønsker å sette alle bokstavene ved siden av det skille? ANDI PENG: Åh, jeg ønsket å skrive dem alle på hver linje. Det spiller ingen rolle. Ja, det er en formatering. Det er et godt spørsmål, men. Ja, hvis jeg ønsket å skrive ut alt på bare en linje, Jeg ville ikke ha bindestrek i. OK. Alle gode? OK. Kjølig. Så jeg tror jeg har snakket nok. Dere tur til å kjøre gjennom kode og fortelle meg hva som er galt her. Hvor er feilen? Så som du kan se, har jeg erklært nye utvalget av type string heter klasse. Og jeg har matet Sam, Jess og Kim inn i den. Og jeg forsøker å skrive ut alle elementene i matrisen. Kan noen fortelle meg hvorfor dette kommer til å gi meg problemer? Jeg skal gi dere 10 sekunder på å tenke på dette. OK. Yeah? PUBLIKUM: Er venstre sentrum lik 3 eller [uhørbart]? ANDI PENG: Høyre. Så hvor mange ganger dette er faktisk kommer til å kjøre gjennom dette loop? PUBLIKUM: Four. ANDI PENG: Nettopp. Det kommer til gjennom fire ganger. Det kommer til å kjøre gjennom på 0, 1, 2, og 3, fordi deres element er jeg er mindre enn eller lik tre. Det kommer ikke til å stoppe når det er to. Det kommer til å holde kommer til den treffer tre. Og som vi vet, er det bare tre elementer i vår faktiske utvalg. Hvis vi prøver å få tilgang til den fjerde element eller indeksen av tre, du kommer til å treffe et sted i minnet som ikke eksisterer. Den kalles null terminator. Ingenting kommer til å være der. Datamaskinen er ikke til å være veldig fornøyd med deg. Yeah. Har noen spørsmål på hvorfor det skjedde? Det er et felles område for å unngå. Yeah. PUBLIKUM: Betyr ikke det første skyver også ha en streng med 2? ANDI PENG: No. Så egentlig, når du gjør en matrise, at braketten til høyre der, som number-- alle det forteller deg er hvordan mange elementer jeg har. Det er faktisk ikke fortelle meg indeksene av noe. Så i dette tilfellet, jeg vet jeg vil ha å skrive med tre steder, med tre fysiske steder å hold hva jeg ønsker å holde. Så det er derfor det nummer tre er der. Men hvis jeg ville å faktisk få tilgang til det, hvis jeg ønsket å si, printf klasse brakett nummer, deretter du kommer til å faktisk sette den fysiske indeksen der. Ja, godt spørsmål. PUBLIKUM: Så er den fysiske indeksen skulle være [uhørbart]? ANDI PENG: Jeg beklager. Kan du snakke opp litt? PUBLIKUM: Så er det fysiske index [Uhørbart] hver av boksene? [Uhørbart]? ANDI PENG: Yeah. Så jeg kommer til å gå tilbake til høyre her. Tenke på akkurat her. Vi har en rekke størrelse 3. Det er tre steder, som, fysiske plassholdere i her. Men de er oppkalt 0, 1 og 2. Så hvis jeg ønsket å få tilgang til dem, den måten at jeg tilgang til dem er printf av hva jeg ville her. Du må skrive ut ut navnet på det, fordi da datamaskinen vet, oh, jeg trenger å se i denne matrisen for den 0. indeksen. Yeah. Men størrelsen på den ikke endrer seg. Størrelsen er 3, uavhengig hvordan du merke dem. OK. Alle gode? PUBLIKUM: Så hver gang jeg [uhørbart]? ANDI PENG: OK. Så i dette tilfellet gjør vi egentlig ikke komme inn i det akkurat nå i kurset. Men vet at en string-- som jeg sagt før, en streng er egentlig en rekke tegn. Så hvis jeg oppretter en matrise av strenger, jeg slags har en rekke utvalg tegn, ikke sant? Så i dette tilfelle, fordi jeg har en rekke strenger, hvis du skulle legge inn en veldig lang ord, som fortsatt tar opp bare én plass, fordi det er den ene strengen. Men hvis du skulle tenke på tegnene på at matrisen, så det tar opp mye mer tegn enn noen av de andre ordene er. Ikke veldig viktig for akkurat nå. Men det er bare generelt hvordan det fungerer. OK. Så dette er noe jeg skal la deg gjøre mye i løpet av semesteret. Jeg trenger å hvile stemmen min. Dere trenger å stimulere dere selv. Mange av dere sannsynligvis må sove akkurat nå. Jeg taster inn tilfeldige problemer hvor vi som en klasse eller du med en partner ved siden av deg kommer å tilbringe et par minutter å diskutere om hvordan vi skulle gå om å løse eller lage et program som dette. Så akkurat nå, vi ønsker for å lage en program-- vi kommer til å kalle det upper.c-- at konvertitter en små ord til en overklasse string-- store bokstaver, beklager. Ord i strenger, beklager, er synonymt. Jeg kommer til å endre dem å bety det samme. Yeah. Ta et par minutter. Det trenger ikke å være skrevet på alle språk. Bare i pseudokode eller logisk hvordan vi ville selv gå om du gjør et slikt problem. Yeah. [SIDE SAMTALE] Jeg la også merke til at dere can-- Jeg slags ser allerede programmet. Jeg antar at min mangel på programleder modus er et problem. Men det er greit. [SIDE SAMTALE] Ja, takk, folkens. Komme til å få godteri. Komme til å få godteri. PUBLIKUM: Ja! [SIDE SAMTALE] ANDI PENG: Også, ja, Jeg skal begynne å kaste godteri på folk som ikke svarer på spørsmål. Så du bør alle svar på spørsmål. Eller jeg antar at folk som svarer på spørsmål. Ja, omvendt. [SIDE SAMTALE] PUBLIKUM: [uhørbart] ANDI PENG: Yeah. Yeah. [SIDE SAMTALE] Greit, folkens. Ta ut, 10 flere sekunder. [SIDE SAMTALE] OK, folkens. Så før vi begynner å prøve å faktisk fysisk skrive kode, en god vane å utvikle er at vi vil først slags grunn logisk hvordan vi ville gjøre det. Du ønsker å være sikker, før du fysisk begynner å prøve å kode i Mario, at du gjør Kontroller at du har din pseudokode. Som tar deg gjennom det du trenger for å lage så at når du fysisk skrive programmet senere, du er bedre i stand til å fange feil i din kode og sånt. Så vi kommer til å bare begynne by-- på engelsk, i pseudokode, er det noen som ønsker å gi meg en generisk forklaring om hvordan vi skulle gå om du gjør dette? Yeah. PUBLIKUM: [uhørlig]. ANDI PENG: Jada, ingen bekymringer. PUBLIKUM: Kan du be den eller be noen for å få streng 1-- yeah, streng, og så-- ANDI PENG: Ja, så dette er en god start. Jeg skal begynne å skrive, beklager, som du snakker. So-- PUBLIKUM: --Det små bokstaver tallene er høyere, ikke sant? Eller små bokstaver har høye tall? ANDI PENG: Nettopp. PUBLIKUM: Så da vi trekker 32 fra hva [uhørbart]. ANDI PENG: Great. Så vi slags har en generell følelse av hvordan jobbe med dette problemet. Å vite at vi har på en måte lært den fysiske måten strenger er lagret i minnet, hva gjør du allerede vet at du kommer til å sannsynligvis må skrive inn koden for å gå gjennom streng? PUBLIKUM: For loop. ANDI PENG: A for loop, akkurat. Flott. Så vi slags har en generisk pseudokode nedskrevet den slags gir du notater på hvordan du ville flytte om å løse problemet. Nå som du har dette, du kan referere til den for senere på når du prøver å faktisk skrive koden din. Så vi kan faktisk gå her. Og jeg har en funksjon som heter upper.c-- der det er-- av bare en blank mal akkurat nå som dere kommer til å hjelpe meg å finne ut om hvordan du skriver denne linjen av code-- ikke kodelinje. Det vil være flere linjer med kode. Når du starter noen form blank PSet, hva er det første jeg trenger å huske å gjøre? PUBLIKUM: [uhørlig]. ANDI PENG: Great Jepp. Inkluder. stdio.h. Ofte er dette en av de mest enkle feil folk vil gjøre når de er skriver, er at de vil Husk å inkludere en viktig bibliotek de trenger. Så hvis det er kontortiden, og du er like, Jeg vet ikke hvorfor min kode ikke fungerer. Kan du fortelle meg hvorfor det ikke fungerer? Vi kommer til å si gjorde du #include? Du bør #include det. OK. Så vi har fått standard I / O her. Er at den eneste biblioteket vi kommer til å trenge her? Hva annet skal vi gjøre? Unnskyld. Noen bare skrike det ut? PUBLIKUM: [uhørlig]. ANDI PENG: Det du går. OK. Og hvordan går jeg om å starte noen form av funksjon, noen form for hovedfunksjon innenfor vårt program? Int main. OK. Hva satt jeg inne her? Hva er det første du vil gjøre? Hvis vi ønsker å få en strengen fra brukeren, hva skal vi ha å gjøre på denne første linjen? Sorry, dere bare føler fri til å snakke opp og høyt. Bare rope ut uansett. PUBLIKUM: Be brukeren? ANDI PENG: Hvordan gjør vi det? Ask-- jeg kommer til å skrive "spør brukeren"? PUBLIKUM: printf. ANDI PENG: OK. Printf. Hva ønsker jeg å printf? PUBLIKUM: Skriv inn noe. ANDI PENG: Sånn? Guys, late som om jeg er en datamaskin. Fysisk fortelle meg hvert skritt at jeg må skrive inn her? Gjør jeg noe galt? Bør jeg har skrevet noe? PUBLIKUM: Du trenger anførselstegn. ANDI PENG: Jeg trenger sitater? OK. OK. PUBLIKUM: Og så ny linje. Semikolon. ANDI PENG: Semikolon? OK. Good. PUBLIKUM: Og kanskje spesifisere at du vil ha den i små bokstaver? ANDI PENG: Great. Dere ler av meg glemme å sette et semikolon. Jeg kan garantere deg et sted I løpet av denne klassen, du glemmer å sette semikolon, og det vil ta deg tre timer å finne ut hvorfor koden ikke fungerer. Det har skjedd med oss ​​alle. Det vil trolig skje med deg. Komme i en god vane å bruke semikolon. OK. PUBLIKUM: Ønsker å gjøre den skråstrek? ANDI PENG: Sure. Ønsker du å gjøre den skråstrek? PUBLIKUM: Ja. ANDI PENG: Great. OK. Hva gjør jeg nå? PUBLIKUM: Få streng. ANDI PENG: Få streng. Så hva skriver jeg? Noen? PUBLIKUM: String s. ANDI PENG: String s. PUBLIKUM: GetString. ANDI PENG: Somebody, kan du fortelle meg hvor denne funksjonen GetString kommer fra? PUBLIKUM: String.h. ANDI PENG: String.h? Du tror det er fra string.h? PUBLIKUM: [uhørlig]. ANDI PENG: Det du går. Det er fra CS50.h. Hvis du alltid forvirret av hvor en bibliotekfilen er eller en header fil, google bokstavelig string.h, og jeg skal fortelle deg hva er alle funksjoner som er i string.h. OK. Så nå som jeg har laget en streng og jeg har be brukeren for det, Jeg har lagret det i en variabel navngitte s, hva må jeg gjøre nå? PUBLIKUM: Sjekk om det er i små bokstaver. ANDI PENG: Sorry? PUBLIKUM: Sjekk om det er i små bokstaver. ANDI PENG: Greit, la oss gjøre det. Hvordan gjør jeg det? Faktisk, for formålene av klassen akkurat nå, vi skal bare anta at alt at vi innspill er allerede i små bokstaver. Hvis du ønsker å sjekke, ville du bare legge til et betinget utsagn som sjekket, som kjørte gjennom hver enkelt array element og sjekket om det er mellom visse verdier. Jeg glemmer hva antall verdier av små bokstaver er. Du kan slå det opp på ASCII-tabellen. Men ja, det er et veldig godt poeng. Men akkurat nå er vi bare nødt til å anta at alle strenger vi innspill er små bokstaver. OK. Så hvordan skulle jeg gå om dette problemet neste? PUBLIKUM: For loop. ANDI PENG: For loop? OK. Fortell meg hva jeg skal skrive. PUBLIKUM: For int i lik 0. ANDI PENG: OK. PUBLIKUM: Oh, faktisk, så du gjøre et komma og gjøre n er lik strlen. ANDI PENG: Så viktig ting at jeg tror hun la merke til her er at vi ikke trengte å si int n andre gang vi gjorde dette. Bare vet at i en for loop når du erklære, du faktisk ikke trenger den int av den andre gangen du gjør en variabel. Du kan si n strlen. PUBLIKUM: Of s. ANDI PENG: s. OK. PUBLIKUM: Så et semikolon. ANDI PENG: Sure. PUBLIKUM: Og så [uhørbart] n. Så i ++. ANDI PENG: Great. Greit. Hva ønsker vi inne av dette for loop nå? Husk, hvis vi kommer til å kjøre gjennom en streng, og kjøres gjennom en matrise, vi ønsker å sjekke ting i den. Hva er det vi kommer til å trenge? Dette er slags den vanskelige delen nå. Alle som har en gjetning? OK. Så først, hvordan vi selv få tilgang? Hvordan gjør vi selv først sjekk eller tilgang til et element i matrisen? Hvordan gjør vi det? Hva er notasjonen vi bruker å gjøre det? Hva er navnet på denne matrisen kalt? Det kalles s, ikke sant? Husk, noen streng er alltid en matrise. Så s braketten jeg, ikke sant? Fordi det er nåverdien eller indeksverdien vi sjekker. Og vi kommer til å stille som lik to-- vi ønsker en små bokstaver verdi, ikke sant? Vi vil slå det lower-- Beklager, vi ønsker en stor bokstav. Vi ønsker å snu små bokstaver verdi i store bokstaver. Og så like-- Jeg beklager, hva er ditt navn? PUBLIKUM: Heidi. ANDI PENG: Sorry? PUBLIKUM: Heidi. ANDI PENG: Heidi. Som Heidi sa utgangspunktet, er vi sannsynligvis kommer til å trenge the-- vi er sannsynligvis nødt til å trekke 32 fra hva charc det er, ikke sant? Fordi på en ASCII bord, forskjellen mellom en liten bokstav og en stor bokstav er 32. Så når vi gjør dette, er vi sannsynligvis kommer til å ønske å trekke 32, ikke sant? Så vi kommer til å gjøre s jeg. Har alle forstå hvorfor jeg gjorde det? Fordi akkurat nå, i vår array, vi sjekker den 0. indeksen, ikke sant? Og i den 0. indeksen til streng, det er det første tegnet. Og det tegnet vi skal å anta at det er små bokstaver. Hvis vi ønsker å gjøre det med store bokstaver, vi må trekke fra 32 fra sin verdi, fordi i vår ASCII bord, det er hvordan vi får det til neste tilsvar verdi som gjør det med store bokstaver. Har alle forstår det? Yeah. PUBLIKUM: Kunne du også gjør små bokstaver et minus ANDI PENG: Ja, så det er faktisk veldig bra. Jeg kommer til å komme tilbake til det Spørsmålet etter at vi gjør dette. Yeah. Og så hvis jeg vil se hva som skjer, Jeg sannsynligvis kommer til å ønsker å skrive ut, ikke sant? Noen fortelle meg hva Jeg ønsker å skrive her. PUBLIKUM: printf prosent c backslash [uhørbart]. Det er verdien av [uhørbart] s jeg. ANDI PENG: s jeg, sorry? PUBLIKUM: [uhørlig]. ANDI PENG: Jeg vet ikke. Hva synes du? PUBLIKUM: Vel, wouldn't-- jeg Jeg tror jeg ville ikke bring-- Jeg ville ta det ut inne, fordi [uhørbart]. ANDI PENG: Å, ville du ha gjort det? PUBLIKUM: Yeah. ANDI PENG: La oss la det veien det er, og jeg skal forklare hvorfor senere. Husk, selv når du har et sted holder, du ønsker å sette parentes rundt det. Greit. Så dette bør være en solid funksjon her. La oss kjøre den og se om det kompilerer. Gjør øvre. UH oh. Det ser ikke så bra. Hvorfor skjer dette? Som med alle feil, ønsker du å gå tilbake og starte med den første, fordi vanligvis én feilårsaker mange andre feil etter det. Her ser vi upper.c: 18: 25, som forteller meg i dette programmet heter upper.c, på linje 18, feil implisitt erklære bibliotek med funksjoner strlen med type unassigned-- blah, jeg vet ikke hva som skjer etter det. Alt som forteller meg akkurat nå er at noe skjer på strlen. Og datamaskinen er forvirret, fordi Det er som, jeg vet ikke hva strlen er? Hva gjør det sannsynligvis fortelle deg at du går glipp av? PUBLIKUM: Du mangler [uhørbart]. ANDI PENG: Du har rett. Nettopp. Så det er her det er viktig å sørge for at hver funksjon du bruker i din kode er å ha den korrekte overskriften fil for biblioteket, eller annet du kommer til å få masse feil og koden din ikke kommer å vite hva som skjer. Så vi kommer til å omfatte string.h her. Nå når vi prøver å kompilere øvre. Kompilere riktig. La oss kjøre dette programmet. Så skriver du noe med små bokstaver. Hva gjør dere ønsker å skrive? Rope ut noe. Greit, Charly bare gikk inn. Vi vil skrive Charly navn. Charly med små bokstaver. Og forhåpentligvis, forhåpentligvis, er dette kommer til å rope ut og spytte ut Charly med store bokstaver. Jippi! forstår alle hvor Jeg gikk om å løse det? Måten jeg kan manipulere ved hjelp av heltall å løse noe som Jeg ønsker å gjøre i strenger, fordi tegn og tall kan refereres på samme måte fordi av ASCII kartlegging. Så for å gå tilbake til poenget, hvis jeg ønsket å sette her i stedet for 32 store bokstaver A minus små bokstaver en akkurat som det, ville det fungere like bra, fordi det er rett og slett bare Forskjellen mellom disse to verdier. Hvis jeg ønsker å gjøre dette igjen-- charly. Å nei. Jeg tror vi gikk feil vei, ja? PUBLIKUM: [uhørbart] små bokstaver en. ANDI PENG: Det du går. Jepp. Og ut spytter charly. Så vær forsiktig når du du trekke verdier å huske hvilken som er er større enn den andre. For eksempel, her oppe jeg glemte at små bokstaver en er faktisk større enn store bokstaver A. Så når jeg forsøkt å trekke dem den andre veien rundt, fikk jeg negativ 32. Og maskinen min var like, Jeg vet ikke hva det er. Det er sannsynligheten bare noen tilfeldige verdi som ikke er veldig bra. Og så sørg for at du er trekke i riktig lengde å finne tegnet du ønsker. OK. Er noen forvirret på hvordan vi gikk om å skrive denne funksjonen? OK. Så egentlig, en funksjon allerede finnes i biblioteket heter ctype.h. Bibliotekets kalt ctype.h. Denne funksjonen faktisk er allerede skrevet for deg. Det kalles å over. Og så for det formål dette PSet, du kommer å oppdage at du virkelig ønsker å bruke mange av funksjonene som finnes innenfor CTast biblioteket. Til øvre, lavere, er øvre, er lower-- de er alle funksjoner at du vil være i stand til å bruke veldig, svært raskt i din egen kode som gjør akkurat hva dette betyr. Vi skrev ut hvordan å konvertere en streng til store bokstaver. Men dette er faktisk koden at noen andre har skrevet og at du kan få tilgang til via en annen funksjon. Yeah? PUBLIKUM: Så du bare kopiere en er der inne og gjøre det for hver enkelt bokstav? ANDI PENG: Ja, fordi jeg ikke bryr seg om verdier av en. Jeg bare bryr seg at forskjellen mellom dem er 32, ikke sant? Forskjellen mellom små b og store bokstaver B er også 32. Og forskjellen mellom c og store bokstaver C er alltid 32. Jeg må bare bry seg om Forskjellen mellom de to, fordi alle bokstavene følger samme mønster, ikke sant? Hvis jeg har forskjellen mellom ett av dem, Jeg vet hva forskjellen mellom dem er. Godt spørsmål. Yeah. Alle gode? OK. Oop. OK. Så en annen konsept som er kommer til å være svært nyttig når du fortsette å utvikle koden er denne ideen å skape funksjoner eller abstraksjon. Så akkurat nå, har vi alle tatt algebra. I algebra, er du lært at det er denne fantastiske tingen kalt en funksjon maskin, der hvis du inngang én slags tall, det går gjennom denne fantastiske funksjonen og ut kommer en annen utgang, ikke sant? I kode, skjer det samme i alle slags funksjon. Så jeg kunne fysisk skrive i kroppen min av min kode en hoved uttalelse som faktisk gjør uansett legeme av koden gjør. Men utenom det, kan jeg også skrive mange forskjellige funksjoner som gjør mange forskjellige ting. For eksempel har vi allerede begynte å bruke noen av dem. Printf-- som er en funksjon som noen andre har allerede skrevet at vi kan ringe inn koden vår. Å upper-- i dette tilfellet, upper-- er en annen funksjon Vi har skrevet at vi kan ringe inn koden vår. Og så jeg antar hvorfor vi selv har funksjoner? Hvorfor kan ikke vi bare slenger det alle i samme linje med kode? Det gjør det enkelt for alle. Vel, begrunnelsen bak det er, først av alt, organisasjon. Det er veldig irriterende å gå gjennom noen kode og en funksjon som printf. Hvis dere faktisk visste hva funksjonen printf innebar å skrive, det er liksom 1000 linjer med kode. Hvis hver gang jeg ønsket til printf noe, Jeg måtte skrive 1000 linjer med kode, det ville være veldig irriterende å lese, ikke sant? Det er derfor vi har bare opprettet dette abstrakte funksjonen at vi har allerede noen andre har skrevet et annet sted. Og hver gang vi trenger å bruke det i koden vår, vi må bare si printf. Og det er i stand til å bruke funksjonen noen andre har skrevet i vår kode. Det gjør det lettere organisatorisk å lese koden. Dernest er det forenkling. Det forenkler trinnene vi har å ta for å løse vårt problem. Printf, funksjoner som printf, funksjoner som å over er alle ting som lar oss forenkle vår kode ned slik at det er enklere. Og siste ting er gjenbruk. Så det faktum at vi har en funksjon kalt printf som vi kan kalle mange forskjellige ganger, og gjør at den kan være gjenbrukbare. Hvis jeg skulle skrive printf, Jeg bare skrive det en gang. Det eksisterer bare i at ett sted. Hvis jeg ønsket å gjøre det igjen, ville jeg må kopiere og lime inn alt dette inn i min andre linje med kode. Det er derfor om vi oppretter en funksjon som eksisterer utenfor vår viktigste, Vi kan bare påkalle det og bruke det når vi trenger, slik at det er mye enklere for oss som programmer for å skrive. Så den måten at vi faktisk ville skrive en funksjon er svært lik, ikke sant? Dette er slags første tilfellet der vi vil se en funksjon ta på en stil annerledes enn vår int main annullert. I dette tilfellet, hvis jeg ønsket å skrive en funksjon kalt q, ikke sant? Og int verdi her er alle forteller meg, hva jeg vil dette gjøre funksjon for å gå tilbake til meg? Hvis jeg ønsker å kube et heltall, Jeg kommer til å ønske å legge inn. Disse er de parametere. Jeg kommer til å innganger en verdi av typen int. Og jeg kommer til å gå tilbake en annen type verdi av int. Og her inne, som du kan se, alt jeg gjør er cubing hva mitt innspill er som min utgang og returnere den. Så alt denne funksjonen gjør er tar noen form for heltall. Det multipliserer det av seg selv to ganger slik at det i terninger virkning. Og så returnerer uansett at produksjonen er. Så i dette tilfellet, er det to linjer med kode som vi måtte skrive ekstra. Men hvis vi ønsket å kalle på dette flere ganger, det er mye lettere å skrive at man linjen her som er i kuben enn må gå gjennom flere ganger. Slik måte at den i det vesentlige en hvilken som helst formatering for alle slags funksjon kommer til å eksistere er som her. Så vi har funksjonsnavnet. I dette tilfellet, det heter kube. Og vi kaller det kube fordi det er lett å huske. Du kan kalle det kvadrat og det kan faktisk være i terninger. Spiller ingen rolle. Bare et navn som du er tildele din funksjon. Denne retten her, int, er det type parameteren du trenger. Så hva gjør denne funksjonen trenger for å operere? Vel, det er behov en inngang. Jeg kalte det inngang. Du kan kalle det hva du vil. Men jeg trenger noe av type int. Det kommer til å faktisk utføre hva er inni her, kroppen av funksjon. Og deretter returtypen rett her, dette int-- alt det forteller meg er at denne funksjonen er kommer til å returnere til meg i int. Så det kommer til å ta i et int, og det kommer til å gi deg tilbake en int. Har alle forstår hvordan formatering av denne typen fungerer? Kjølig. OK. Så ikke vær bekymret hvis dette virker litt abstrakt akkurat nå. Dette er noe som vi skal snakke om. Vi vil dykke i dypere senere i kurset. Måten noen form for høyere nivå abstraksjon av disse tingene arbeid er det, i minnet, i datamaskinen, alt er lagret i denne typen av stabelen, skal jeg si. Så der oppe på toppen. Jeg vet ikke om du Gutta kan se at godt. Jeg skal prøve å zoome inn. Her på toppen, vi har den fysiske tekst av hva maskinen er interpreting-- alle nuller og enere som eksistere innenfor vår datamaskin. Og så har vi den initialisert data og initialisert data, det vi kaller globale variabler. Så variabler som eksisterer tvers av alle programmer og på tvers av hele, hovedsak, kode. Ingen grunn til bekymring hvis dere er slags uklar på dette. Det spiller egentlig ingen rolle akkurat nå. Og så har vi det er kalt en haug i en stabel. Tenk på en stabel bokstavelig som akkurat som en stabel av ting, en stabel av forskjellig ting blir skjøvet på toppen av hverandre, som lagrer de forskjellige variabler og syntaks i koden din. Og så her helt nederst, vi har de miljøvariabler av hva du utfører innenfor bare din lille linje med kode. Og vi bare kommer til å zoome inn på selve stakken delen. Så akkurat her, hvis vi skulle zoome på akkurat dette området av stabelen, Dette er hva det ser ut. Og dette er faktisk ganske viktig når dere snakker om funksjoner, fordi merke til at minne på datamaskinen lagrer variablene og funksjonene og parameterne for både funksjon og dine viktigste variablene på forskjellige steder. Så akkurat nå, er hoved den faktiske funksjon som du utfører i en kode. Du har sine parametre lagret her og dets lokale variabler lagret her. Lokal variabel betyr bare en variabel som eksisterer kun innenfor den funksjonen. Og på toppen av det, har du dette egen funksjon kalt kube. Du har som er parametere samt de lokalbefolkningen. Og grunnen til at du kan se her er at det skjer når kube tar i et verdi fra din viktigste funksjon er at faktisk det er å kopiere det over. Så hvis jeg ønsket å cube To og returnere 8, som to faktisk er matet inn som en parameter, og det er kopiert over slik at du har det eksisterende på to forskjellige steder i minnet. Og du må være veldig forsiktig på å huske hvilken av dem du faktisk manipulere. Og et eksempel på hva som skjedde det ville være veldig, veldig dårlig finnes akkurat her. Så akkurat her, har jeg fått, i teorien, et program akkurat her, en hovedfunksjon at jeg erklære en int x lik 1. Jeg erklærer en annen int y lik 2. Og så jeg kjører det gjennom denne funksjonen kalles swap, der jeg antar at det er å bytte de to verdiene. Og så kommer jeg til å skrive dem ut, ikke sant? Det er det jeg ønsker dette programmet å gjøre. Så la oss komme ned og ta en titt. Så hvis jeg faktisk skrive en annen funksjon, som du kan se, vi har vår viktigste funksjon her. Og så har vi vår andre funksjonen her. Void swap. Void betyr bare at det er ikke kommer til å returnere noe. Funksjonen heter kalles swap, og det er kommer til inntak to variabler, int en og int b, fra [uhørbart] -funksjonen. Så egentlig her inne, vi er passerer x og y inn i denne funksjonen. Og hvis vi skulle skape dette-- så vi ønsker å opprette en midlertidig verdi, ikke sant? Vi kommer til å tildele det til en. Og deretter en kommer til å nå lik b. Og b kommer til å være tilbake hvor temp verdien var, som er en, fordi når du ønsker å bytte ting, du kan ikke bare liker bytte dem. Du må holde en ut her slik at det husker hva det er, fordi når du bytte en, du glemmer hva det opprinnelige verdien var, ikke sant? Så i teorien, dette programmet skal fungere, ikke sant? Hvis jeg ønsket å bytte to, bør de bytte. Så la oss kjøre den og se om det fungerer. Så som dere kan se, x var en gang en og y var en gang to. Og hvis jeg skrive den ut, x er fortsatt 1 og y er 2. Hmm, dette programmet ikke synes å være fungerer slik at jeg vil ha det til å fungere. Er det noen som ønsker å ta en sjanse på gjette hvorfor dette skjedde? Det har å gjøre med måten at ulike ting er lagret på forskjellige steder i minnet. OK. Så dere trenger ikke å bekymre deg for mye om dette akkurat nå. Men vet at kuben lokale variabler var a og b, fordi her i vår funksjon, vi har erklært a og b som variablene som eksisterer innen kube, som funksjon. Men som du kan se, er parametrene som det er å ta i ble lagret her. Men vi var faktisk ikke returnere noe. Vi var ikke faktisk endrer x og y. Vi ble bare endre a og b. Vi hadde kopiert x og y inn noe som kalles a og b. Men vi aldri manipulert x og y selv. Er dere ser hvordan det skjer? Er at vi har rett og slett kopiert det over, men vi har faktisk ikke holdt rede på hvor de var i minnet. Og så nå datamaskinen ser, oh, har jeg kjøre denne saken gjennom denne herlige funksjonen. Men x og y er fortsatt x og y. Ingenting har skjedd med dem på grunn av det faktum at disse parametrene og lokale variabler er lagret i en annen sted i minnet. Og dette er et høyere nivå konsept som vi vil begynner å se senere i kurset. Men bare vet at dette er et problem som kan skje og at vi vil finne ut måter å håndtere dette senere i kurset. OK. Greit. Så den siste konseptet vi er virkelig kommer til å dekke som kommer til å være nyttig for PSet denne uken er det som kalles kommandolinjeargumenter. Så Rob i sitt foredrag gikk gjennom slags kort på hvordan disse fungerer. Hovedsak vet at når du skriver som en hovedfunksjon, når vi skrev funksjoner før i det siste, vi hadde int main annullert. Og grunnen til at vi hadde annullert det var fordi våre programmer gjorde ikke trenger å oppgi verdier for å kjøre, ikke sant? Når jeg kjørte Mario, det gjorde jeg ikke trenger å faktisk bare skrive inn noe når jeg kjørte Mario. Jeg kunne be brukeren senere. Men det vil ikke alltid være tilfelle. For eksempel, i denne ukes problem setter, du kommer til å bli spurt om det, i tillegg til å kjøre programmet, du kommer til å ønske å legge inn visse ting i rett som deg kjøre programmet. Så måten vi gjør som kalles en kommandolinje argument, som er som et argument du kan legge inn direkte som du prøver å kjøre programmet. Så notasjonen for dette, det er ganske komplisert utseende, men det er egentlig ikke så vanskelig. Så int main-- det er bare din viktigste funksjon. Into argc komma streng argv parentes. Så alt som er å si er at dette int argc-- alt som forteller deg er at de er antallet argumenter i maskinen, bør forvente. Så en ting som er virkelig viktig å holde orden på er den fysiske navnet på programmet teller som en av disse argumentene. Så hvis jeg ønsket å ha mitt program kjøre pluss en ekstra kommandolinje argument, jeg er faktisk kommer til å ha to. Argc som faktisk kommer til å være to. Og så streng argv bracket-- alle som gjør, det gir meg en tabell med strenger som er kommer til å bare vise og lagre det alle disse kommandolinjeargumentene er. Så for eksempel, hvis jeg ønsket å ha dette program, ./copy INFILE outfile, ikke sant? Det er bare en vanlig Linux-kommando. Hva som faktisk er argc? Hvor mange kommandolinjeargumentene er det egentlig i dette? Alt dette gjør er å lage en kopi av en infile av navnet på en fil og den kopierer den inn en annen fil, ikke sant? Det er alt dette gjør. Som du kan se, jeg gjør det på en linje uten egentlig å måtte programmet. Hva er vår argc i dette tilfellet? Hvor mange argumenter har vi? PUBLIKUM: Tre? ANDI PENG: Vi har tre, akkurat. Så det er veldig intuitivt å bare tenke at det er bare den infile og outfile. Men vet at det fysiske navn program du kjører teller som én. Så i dette tilfellet, er argc faktisk tre. Hva med, hva er argv 0? Husk, alle kommandolinjeargumentene ble lagret i en rekke strenger. Så hvis jeg prøver å få tilgang til det, hva ville argv brakett 0 gi meg? PUBLIKUM: [uhørlig]. ANDI PENG: Nettopp. Det ville gi meg dot slash kopi, fordi det er den 0. element, første element i matrisen min. Hva om argv en? PUBLIKUM: INFILE. ANDI PENG: INFILE, akkurat. Hva om argv 2? PUBLIKUM: utfil. ANDI PENG: outfile. Dette er litt vanskelig nå. Hva tror dere argv 3 kommer til å være å gi meg hvis jeg prøvde å skrive det ut? PUBLIKUM: [uhørbart]? ANDI PENG: Hadde du en hånd opp? Yeah. PUBLIKUM: Et alternativ. ANDI PENG: Nettopp. Så husk på forelesning at vi har ved enden av et løp noe kalt en null terminator? Vi vil komme inn i dette også videre på i klassen. Men vet at i notasjon, måten datamaskinen vet at det er slutten i matrisen er at den setter noe som kalles en null terminator eller en dash null. Så hvis du prøver å få tilgang argv 3, du kommer til å treffe denne dash 0. Dette er enda mer av et lurespørsmål. Hva om argv 4? Så dette er fortid null terminator, forbi grensene for vår array. Hva tror du kommer til å skje når vi prøver å gjøre det? PUBLIKUM: [uhørbart]? ANDI PENG: Sorry? Si at en litt høyere? PUBLIKUM: [uhørlig]. ANDI PENG: Ja. Som er navnet på den Området du vil mest sannsynlig få. Men vet at argv 4-- som lar deg tilgang steder i din datamaskin minne som du virkelig bør ikke være rørende, fordi akkurat nå vet du hva argv er. Du vet at det er en rekke størrelse 3 som har dot kopi, infile og outfile. Hvis du prøver å gå så langt utover det at du er forbi null terminator, datamaskinen din har sannsynligvis lagret noe i argv 4. Og du bør ikke være adgang til argv 4, fordi du har en fil kabinett og du er bare adgang til disse tre hyller. Men hvis du prøver å nå langt utover sokkelen av hvor du får lov, du kommer til å begynne å rote med andre ting i datamaskinens minne. Det kommer til å bli virkelig, virkelig ille. Så bare vet det. Vær svært forsiktig at du ikke bare tilfeldig start tilgang til elementer i en matrise som var ikke i hva du ønsket å lage. Jepp. OK. Så vi kommer til å gjøre en annen terminal eksempel her. OK. Så Rob raskt i forelesning den andre dagen gikk gjennom dette eksempel, hvor han hadde int main int argc streng argv braketter, som er å fortelle meg at jeg er kommer til å ha kommandolinjeargumentene. Han har, hvis argc lik lik 2-- huske, tilsvarer equals betyr sammenligning. Hvis det er lik 2, da er jeg gikk i trykken hallo, uansett først element i matrisen er. Else print, hallo verden. Hva er dette kommer til skje egentlig? Kan noen bare forklare i Engelsk hva dette programmet gjør? Yeah. PUBLIKUM: Hvis noen har skrevet i en kommando og sa at deres fornavn og etternavn, det vil ikke bare skrive ut første og si hei, hva fornavnet ditt er. ANDI PENG: OK, la oss kjøre den. Så for eksempel, hvis jeg skulle gjøre denne filen gjør hallo to-- hallo to-- hva vil du jeg skal skrive? PUBLIKUM: Først og etternavn. ANDI PENG: Fornavn og etternavn? Spaces? PUBLIKUM: Yeah. ANDI PENG: Kan noen fortelle meg akkurat nå, hva er argc? Akkurat der? Oops, beklager. La meg gå tilbake. Hvor mange kommandolinjeargumentene are-- dere kan egentlig ikke se. Men jeg skal prøve å zoome inn. Jeg prøver. Ja, det er tre, ikke sant? Det er dot slash hallo, det er Andi, og det er Peng. Så hva tror dere dette Programmet skal skrive ut? Oh. Åh unnskyld. Feil navn. Det å skrive ut, hallo verden. Er det noen som ønsker å forklare hvorfor det skjer? Yeah? PUBLIKUM: [uhørlig]. ANDI PENG: Nettopp. Så her, er betinget er, hvis argc tilsvarer tilsvarer to. Så bare i tilfelle at det er to kommandolinjeargumenter. Så jeg kommer til å skrive ut, hallo, det er uansett. Men ellers, jeg kommer til å skrive ut bare, hallo verden. Så ikke noen ønsker å gi meg et eksempel på hvordan jeg ville være i stand til å faktisk få det til å skrive ut verdien av argv en? Hva skulle jeg ha for å legge inn her? Bare en ting, ikke sant? Fordi dot hei til allerede teller som det første argumentet. Jeg har bare ett mer. Så dot hei hvis jeg bare gjøre Andi. Hei, Andi. Har alle forstår hvorfor det skjer? Yeah. PUBLIKUM: Så mellomrommet mellom kommandoen line-- er det [uhørbart]? ANDI PENG: No. Slik at plassen i en kommandolinje argument, x, for å fortelle datamaskinen at dette er starten av en ny streng. Så streng argv her-- det butikker alle dine kommandoer argumentene i strenger. Og så plassen i kommandolinjen argument-- alt som gjør er å fortelle deg, dette er ved enden av en streng og det er på tide å gå videre til en annen. Yeah. Dette er ganske viktig for din PSet, fordi du er kommer til å teste disse. Så er det noen som har noen spørsmål om dette? Ok kult. Yeah? PUBLIKUM: Så grunnen til at du ville sette heltall argument calc stedet av [uhørbart] ville være når du vil å skrive inn tilleggsinformasjon til [Uhørbart]? ANDI PENG: Ja, akkurat. Noen programmer krever at du å legge inn en kommandolinje argument som passerer inn og som bruker det. Yeah. PUBLIKUM: Så hva om [uhørbart]? ANDI PENG: Vel, hva gjør jeg å endre deretter i mitt program? PUBLIKUM: Bare tre. ANDI PENG: Hvorfor er det skjer, tror du? PUBLIKUM: Fordi [uhørbart]. PUBLIKUM: Du må endre det til 2 [uhørbart]. PUBLIKUM: 1 og 2. ANDI PENG: 1 og 2, nøyaktig. Så i dette tilfellet, ville du sannsynligvis ønsker å ha to printf statements-- en som trykt argv 1 og den som skrives argv to. Her. Jeg kan faktisk gjøre det virkelig rask. Det du går. Oh. Ikke helt det du ville. Men hvis dere rotet rundt med formateringen, vil den komme ut. Yeah. Kjølig. Jeg vet at vi er en litt kort tid. Men jeg skal bare raskt tilbringe en par minutter går gjennom helpful-- PUBLIKUM: Du har to minutter. ANDI PENG: Jeg har to minutter? Takk. Noen raske PSet tips. Så for denne PSet, jeg anbefaler, som jeg sa, til alle lese spec. Du skal skrive tre programs-- én kalt initials.c, en som heter caesar.c, en som heter vigenere.c. Noen viktige tips som dere virkelig ønsker å holde i mind-- så det er denne funksjonen kalt atoi-- som jeg liker å si, en trois. Uklart om det er faktisk hvordan du sier det. Men alt det gjør, det er å legge inn. Den konverterer en streng til en int. Så en representerer ASCII til jeg heltall. Det er bare å konvertere ASCII Verdiene til heltalls verdier. Så husk argv, matrisen som lagrer alle dine kommandoer linje arguments-- den lagrer dem alle som strenger. Og så hvis du ønsker å være i stand til å har en av dem til å bli et helt tall, du kommer til å ha å bruke denne verdien her. Modulo, som vi dekket tidligere i klassen i dag, kan du ha den Resten av det du har. Så hvis vi har virkelig, virkelig store tall i Caesar, hva om vi har slutten av en rekke Vigenère? Hvordan har du tenkt å være i stand å få det til å bryte rundt? Hvis jeg treffer z og jeg vil ha det å gå tilbake til en, hvordan skal jeg få at for å vikle rundt? Sannsynligvis vil bruke modulo der inne et sted. Dernest, bla rundt biblioteket. ctype.h. Det er et nytt bibliotek vi har. Du finner en rekke virkelig, virkelig nyttig functions-- isupper, islower, toupper, tolower, isalpha, et cetera. Alle funksjoner som vil være svært nyttig når du prøver å finne ut, er dette tegnet en liten bokstav? Hvordan konverterer jeg dette strengen til store bokstaver? Alle disse tingene vil være veldig, svært nyttig for din PSet. OK. Kontortid i kveld er 08:00 til 11.00 i TEAL klasserommet i morgen samt onsdag og torsdag kveld. Arbeidstid er i commons. Svært foreslår dere alle komme i gang med en gang, fordi du ikke ønsker å være at gutt som torsdag kveld har problemer sender PSet og liker, jeg vet ikke hva jeg skal gjøre. Jeg begynte, jeg er ferdig, har jeg sendt inn. Prøv å gi deg selv litt rom, fordi i alltid oppstå kodeproblemer. Du ønsker å være sikker at du gir deg selv mye tid til å være i stand å fullføre psets. Kjølig. Jeg skal henge rundt her. PUBLIKUM: Er dette nettet allerede? ANDI PENG: Jeg vet ikke om det er online allerede, men det vil bli. Jeg skal henge rundt her hvis noen har noen spørsmål allerede. Takk for at du kom.