PROFESSOR: Så agendaen for denne uken, ikke så mye ting. Men forhåpentligvis veldig, veldig nyttig og relevant for dere denne uken. Men vi kommer til å tilbringe kanskje 15, 20 minutter bare raskt snakker om koblingen listen. Link lister skal dekkes på quiz. Så kanskje det ville være svært nyttig å lære litt om hva det er. Vi kommer til å bruke den enorme Flertallet av dagens avsnitt gå over quiz null praksis problemer. Og så får vi spare kanskje 20, 30 minutter på slutten for noen langvarig spørsmål noen har. Og så, den siste fem minutter, jeg kommer å gi en pumpe opp tale for quiz. Dere ønsker alle å være her for det. Fordi det kommer til å være en god tid. All right, så noen Materialet på linklisten. Hvordan de er vanligvis strukturert er du har det som kalles en node, ikke sant? Du har disse tingene kalles noder, som er structs. Jeg skal gå over hvordan du oppretter en node i neste lysbilde. Men i hovedsak alle koblet listene er data som har blitt satt sammen via pekere. Og så fordelen vi har ved hjelp av en lenket liste over, kanskje, som en matrise, er det faktum at i en matrise du trenger en sammenhengende blokk av hukommelse alle på samme sted, ett etter den andre, for å være i stand til å ha den. Mens en lenket liste, kan du har tilfeldige små biter av minne hele datamaskinen satt sammen av pekere. Og på denne måten kan få tilgang til informasjon som kommer en etter annen, etter hverandre uten bare en stor del av minne i datamaskinen et sted. Og så dette er en av de store grunner til at vi bruker koblingen listen. For det andre, er det veldig lett å dynamisk endre størrelsen på linken listen fordi i array, når du deklarerer en array, du har en viss innstilt verdi. La oss si at jeg ønsket å lage en rekke 10 heltall. Jeg oppretter en matrise av 10 heltall, og det er det. Det er 10. Jeg vet ikke hva jeg skal gjøre etter det. Hvis jeg ønsket å gjøre det 11, ikke kan gjøre det. Hvis jeg ønsker å gjøre det ni, ikke kan gjøre det. Mens det i en link liste, kan du legge til og slette og sett hvor du vil. Du kan dynamisk endre størrelsen din strukturere her, datastruktur. Og det gir oss mye mer ekstra fleksibilitet at vi ikke vanligvis har med arrays. Alle som forvirret på den grunnleggende Strukturen av hvordan en koblingsliste er eller hvorfor vi må bruke en over en matrise? Ja, vi vil gå over i detalj hvordan du faktisk lage en. Men dette er bare slags generell følelse akkurat nå. Kjølig. Og så arrays er satt sammen av disse herlige små tingene kalles noder. Alt en node er en type struct. Husk, en struct er hvis du ønsket for å skape en viss type variabel i C som ikke allerede eksistere, du som programmerer, faktisk kan lage det selv. Og så denne type data struktur kalles en node, faktisk har blitt skapt av oss, at ikke eksisterer innenfor C på egen hånd. Og måten du opprette én er at du har overskriften på typedef struct, som forteller kompilatoren jeg er i ferd med å opprette en struct. Vi skal gi den navnet "node". Og inne skal vi å erklære en variabel i, som kommer til å lagre en verdi. Og da har vi også kommer til å har en peker som heter "neste" som peker til neste node i linklisten. Og så er du ferdig med det av ved bare å gjenta node igjen så kompilatoren vet, OK det er slutten på min struct. Og så på denne måten, er typen vi å skape en søt liten matrise type ting med en verdi og med en peker. Og du kan koble dem alle sammen med disse pekere. Slik at de kan være alle slags satt sammen i en kjede. Kjølig. Kan du høre det litt bedre? PUBLIKUM: Yeah. PROFESSOR: All right. Så måten, som dere kan se, en typisk kobling liste er strukturert er du en leder. Du har hodet verdi som ikke er å peke med en hvilken som helst annen peker. Men det kommer til å peke på, eller referanse, en annen node. Noden etter kommer til å referere til node etter det, og så videre og så videre til du til slutt treffer slutten av linken din liste. Og du bare ikke vil ha en peker der. Og så, tenke som, på en kjede, eller til og med hvis noen av dere har gjort, vet jeg ikke, som med Fruit Loops da du var liten. Du ville henge dem sammen og bære dem rundt halsen. Tror det er akkurat det samme. Du har disse små tingene som du kan sette sammen som peker til én etter at den, til den ene etter den, og så videre og så videre til du har en kjede av en datastruktur som du kan bruke som du vil. Så den måten at dette ville vi vanligvis setter inn eller sletter enhver node fra en kobling listen er veldig annerledes avhengig av hvor den noden er. Så, for eksempel, fordi pekere er alltid peker på en bestemt verdi, når du sletter eller sette inn en node, du vil være sikker på at pekeren er alle peker på de riktige tingene. Så hvis du ønsket å potensielt sette inn en ny node med verdien av ett inne en sortert lenke listen, vi vet alle her fra bildet som kommer til å gå i mellom hode og to, ikke sant? Fordi man passer rett der. Men på hvilken måte vi ville gjøre det er ved første dereferencing pekeren fra hodet og sende det til en. Men vi kommer inn på et problem her. Kan noen se hva problemet er hvis vi skulle først dereference pekeren fra hodet til én? Hva problemet kan vi kjøre inn hvis vi prøver å legge denne til forsiden av vår array? PUBLIKUM: [uhørbart] PROFESSOR: Nettopp. Så her har vi en peker som var gang peker fra hodet til to. Men hvis du bli kvitt det pekeren, peker du det til en, vi nå har ingen anelse hvor du skal gå for å finne to. Fordi som jeg sa tidligere, har du fått en giganten mengde minne i datamaskinen. Alle disse nodene kunne være tilfeldig ispedd i noen plass i datamaskinen. Og du ikke vet hvordan å gå om å finne det. Og så må du ha pekere peker til alle noder på slutten. Eller annet hvis du ved et uhell dereference én uten først tildelings en verdi først, er du bare kommer til å miste alt etterpå. Så hva vi kommer til å gjør er, du ville først ønsker å opprette en peker på noden du vil sette inn. Peke det til der du ønsker å sette det til, og så etterpå du kunne peke hodet tilbake til en. Betyr det fornuftig å alle her? Flott. Tenk på det som akkurat som en kjede. Hvis du legger til en kjede, det er slags intuitiv hvordan ville du gå om å sette inn det. OK, så det er faktisk mye kortere enn jeg trodde det ville være, en fem-minutters spiel på link lister. Bare så dere har grunnleggende idé om hva det er. Her har vi agendaen for quiz null. Ikke la dette skremme deg. Jeg vet det er mye informasjon. Det ser veldig skummelt. Det er også mye, jeg tror, ​​CSC slags vilkår. Ting som heksadesimale strenger, pekere, dynamisk minnetildeling er veldig skumle lyder vilkår. Men vi kommer til å bryte dem ned, gjøre noen praktiske problemer slik at dere alle er klare for denne testen. Hvor mange av dere har allerede begynt å studere? OK, dere sannsynligvis vil å begynne å komme i gang på det, fordi det quiz er i morgen. Eller torsdag for noen av dere. Ja, så vi kommer til å gå over noen praksis problemer. Hvis dere ønsker alle å ta ut et ark, en blyant. Vi skal bare bruke den aller fleste av dagens avsnitt gå over noe av det så dere har en idé om hva du kan forvente på quiz. OK. Et par av logis detaljer også, for noen som ikke har vært til at linken der, hvis du går til cs50.yale.edu, på forsiden denne siden er det en link som sier "Om Quiz Zero." Link tar deg dit. Hvis du ikke har lest den, kan du lese den. Fordi den forteller deg veldig viktig informasjon om quiz. Jeg kommer til å trekke dette ut fra at bare fordi, fysisk, Hvis dere ikke vet hvor å gå, vil vi ha problemer. Og så hvis din siste i form med A til N, gå til law school auditorium. Og hvis dine siste starter med P til Z, gå til Davies Auditorium. Og dette gjelder bare for mennesker i onsdag delen. Hvis du tar quizen på Torsdag, går du til SSS 114 hvor din forelesning er typisk. PUBLIKUM: [uhørbart] PROFESSOR: O til Z, du kommer å gå til Davies auditorium. Jeg kommer til å endre det, ikke sant? Oh, yeah, du bare ikke klarer automatisk. Oh yeah, det er deg Christa. Ja, min dårlige. Jepp, O til Z, du kommer å gå til Davies Auditorim. Jeg kommer til å fikse dette når jeg laster opp. Yeah. Og da også noe viktig å sinn er at onsdag, hvis du er offisielt innrullert i onsdag delen, du må ta quizen på onsdag. Og hvis du er registrert i torsdag, du må ta quiz torsdag. Og det er i klassen tid. Der, jeg tror det er som 1:00 til 02:15 på onsdager og 2:30 til 3:45 på torsdager. Hvis du har en uforsonlige konflikter, Dean unnskyldninger er det eneste, dessverre kan vi ta. Fordi vi har hatt en aller fleste av forespørsler å bytte fra onsdag til torsdag. Som vi ikke kan respektere mindre vi har en Dean forespørsel. OK. Så før vi kommer i gang på en par av praksis problemer, Jeg bare kommer til å gå over Andys nyttige tips for å lykkes. Dere, når du studerer, du virkelig ønsker å øve skrive kode for hånd. Første gang jeg noensinne tok en CS quiz, ikke hadde jeg praksis å skrive kode for hånd før, og det var ekstremt sjokkerende over hvor vanskelig det var. Når dere ikke komme inn i vane å skrive ut alt, det kommer veldig naturlig å være i stand til å ha autocompleted braketter og semikolon der. Når du skriver det ut for hånd, noen ganger er det veldig, veldig lett å glemme et semikolon, eller glemmer å lukke en brakett, eller glemmer å lukke et kolon, eller noe sånt. Så når du skriver kode for hånd, det er en helt annen følelse. Så dere, når du jobber gjennom noen av praksis problemer, det ville godt å virkelig øve i dag. Eller i morgen, antar jeg, hvis du er ta quizen på torsdag. Dernest har vi den siste, som, åtte år igjen av praksis quizer online. Årets quiz vil trolig være veldig, veldig lik dem alle. De er alle svært like. Du får slags inn i stilen på den type spørsmål at vi ber, type funksjoner som vi vil skrive det på, et cetera, et cetera. Så ta de praktiske tester, spesielt under tidspress. 75 minutter å gjøre quizen er ikke mye tid. Det er veldig, veldig lenge. Og så dere virkelig ønsker å sørge for at dere er i vane med å skrive kode for hånd raskt. Fordi du ikke vil at den første tid til å se en quiz av den lengden være på quiz. Du gutta virkelig vil være sikker at du øver på forhånd. Fjerde, ønsker du å gjennomgå foredrag og seksjons lysbilder. Du trenger ikke å huske ting. Egentlig er alle tillatt en ett ark av hvitt papir notater, foran og bak. Dere kan skrive eller skrive. Hvis du befinner deg som ønsker å lære utenat noe, satte den ned på dette arket. Jeg kan garantere deg, trenger du ikke ønsker å bli sittende fast i midten av at quiz å være som, oh yeah, hva er runtime av denne typen versus den slags. Bare sette den ned og kopiere den rett fra notatet ark. Så kan du faktisk bare bruke hjernen til å tenke på de problemene heller enn å måtte huske fakta. Og så virkelig dra nytte av eventuelle nisje detaljer at du tror du trenger å huske, plop det ned på anmeldelsen ark. OK, noen spørsmål logistisk om quiz før vi begynner noen quiz problemer øve? Yeah? PUBLIKUM: Jeg har ikke hatt en sjanse å se på quiz [uhørbart] men det kommer til å være applikasjon for det meste, eller er det også kommer til å være, lignende, kunnskapsspørsmål? PROFESSOR: Det er mye. Så, slik at jeg ville beskrev quiz er-- jeg satt sammen noen praksis problemer at jeg trakk fra alle quizer. Men vil du se at det er to hovedtyper typer spørsmål vil vi be deg. Det ene er et svært lavt nivå detalj av ting. Vi vil gi deg en liten mengde koder og sier, er det en feil her? Hva ville være å skrive ut her? Hva vil denne koden produsere, et cetera. Så veldig lavt nivå informasjon detaljer. Og på baksiden, vil vi ha svært høyt nivå kunnskapsbaserte spørsmål. Kan du forklare hva Forskjellen mellom en binær søk og en lineær søk er? Hvorfor skulle vi ønske å bruke en over den andre? Kanskje, hva er GDB? Hvorfor ønsker vi å bruke GDB? Høyere nivå, mer fundamental forståelse spørsmål. Så vil du se en blanding av to av dem på quiz. Noe annet før vi hodet rett inn i det? OK. PUBLIKUM: En mer. PROFESSOR: Å, en. Unnskyld. PUBLIKUM: Ja, det er greit. Så du sier 75 minutter er for kort, som det er lite sannsynlig at vi vil fullføre? Eller, som, 75 minutter er akkurat så mye tid som vi trenger hvis vi var hensiktsmessig forberedt? PROFESSOR: OK, så quiz er utfordrende. Det er definitivt utfordrende. Du vil finne deg selv på kort tid. Du er sannsynligvis kommer til å treffe, som 10, 15 minutter å gå, og være som, dritt. Jeg har så mye igjen å gjøre. Og det er helt greit. Alle kommer til å føle det samme. Bare være veldig bevisst på hvor mye tid du har. Og så det er derfor jeg forteller deg gutta gjør de praktiske tester. Fordi det gir en god følelse av hva quiz kommer til å være like. Så hvis du finner deg selv å være stand til ferdig praksisen quizer i en god mengde tid, kan du tempoet selv også, vil du ikke ha et problem på onsdag eller torsdag. Kjølig. Så hvis alle wants-- jeg tror folk flest har papirark allerede ute. Jeg skal egentlig bare gi deg testspørsmål, gi dere, som en noen minutter å gjøre dem. Og vi vil gå over som en klasse hva svarene på dem er. Så dette er en veldig typisk tidlig spørsmålet vi vil spør deg, bare å konvertere tall mellom forskjellige baser. Binære, som dere kan husker, er basen to. Desimal er basen 10, eller hva vi som mennesker vanligvis tolke. Heksadesimal er basen 16, som er null til ni samt A til F. Så det er fire tall jeg er ber dere å konvertere her. Jeg skal gi deg lyst, tre til fire minutter på å tenke gjennom hvordan vi ville gå om å løse dette. PUBLIKUM: Er vi lov kalkulatorer? PROFESSOR: Du vil ikke trenger kalkulatorer, ja. Jeg tror grunnleggende tillegg, tror jeg, er alle dere vil bli bedt om å gjøre. Og bare så jeg slags har en følelse av når alle er ferdige, se opp, bølge, vet jeg ikke, smile, ser lykkelig hvis du er ferdig. Yeah. Kanskje et par minutter til. OK, la oss ta det inn. Jeg hensikt å gå til gi dere mindre tid enn du sannsynligvis trenger å gjøre noen av disse problemene, rett og slett fordi jeg vil være sikker på at vi får gjennom en haug med problemer. Så ingen grunn til bekymring hvis du ikke gjorde det har en sjanse til å fullføre. Helt OK så lenge du har en idé om hvordan du skal gå om dette. Så la oss gå videre og gjøre den første. Så først, ikke at noen skal fortelle meg i binær, hva gjør hver av disse tallene representerer i form av sine verdier? Yeah? PUBLIKUM: To til strøm null, 2-1. PROFESSOR: Nettopp. Så. Høyre, så typisk når vi er i basen 10 alle disse representerer er, som, 10 til bunnen av null, til høyre? Det er din sin plass. All din 10 plass er er 10 til kraften i en. Du 100 plass er 10 til kraften i to. Uansett hva basen du er i går å gjøre med akkurat det samme, bare med en annen base. Så binære, er alt som er basen to. Du kommer til å konvertere alle sifre i to til hva makt av at sifret. Og så i denne forstand, vi kan ha en enklere måte for å være i stand til å legge opp eller summere alle tallene i rekkefølge å konvertere til basen 10. Så ikke at noen skal fortelle meg hva Svaret på det første er i basen ten? PUBLIKUM: To, [uhørbart] PROFESSOR: Yeah. PUBLIKUM: 42. PROFESSOR: 42, der du går. Så måten vi fikk dette svaret var gjøre to første, som er to. Pluss to, den tredje, som er åtte. Pluss to til femte, hvilken er det som er til overs. Du oppsummere dem opp, og det er 42. Er noen forvirret om hvordan vi fikk det? Så grunnleggende tillegg som Jeg sa, du bør være OK. Hvis ikke, vel, vi kan øve det også. Men det er all right. Kjølig. Ønsker noen å gi meg svare til det andre i tillegg? 50? God. Noen forvirret om hvordan vi fikk det heller? Cool, jeg vil ha svar på neste lysbilde. Så ingen grunn til bekymring hvis du må kopiere det ned. OK, så heksadesimale er litt mer komplisert. men jeg kommer til å vise dere en snarvei for hvordan du gjør det. Så heksadesimale, som du husk, alt det er å være 16. Og fordi vi som mennesker gjør faktisk ikke har 16 tall å representere det, vi går fra null til ni, som vår første 10 verdier, og da vi gjør A til F, som er de neste seks verdier. Og så den enkleste måten å gå fra noen binære tall til heksadesimale er å bryte dem opp i halvdeler. Og så noen binært tall vi vil gi vil du sannsynligvis ha åtte sifre. Du kan bare bryte dem opp i midten. Så det første one-- én én, man en, en, en, en en. Slags tror det opp, vet du, tegner en skråstrek eller et komma i mellom dem. Og du kan bare konvertere direkte uansett Dette er den første nummer med heksadesimal, og hva her er å den andre på heksadesimal form. Så husker fra vanlig notasjon, hva gjør begynne heksadesimale verdier med? PUBLIKUM: Zero. PROFESSOR: 0X. Så vi vet at hver gang vi ber deg å konvertere et tall til heksadesimal, eller helst du se noen nummer som starter med 0X, du vet at det er en heksadesimal verdi. Og så kommer du til å bli bedt om å bestemme hva disse to siffer er. Og måten du gjør det, tallying opp at halvparten og tallying opp at halvparten. Så i dette eksempel, hva ville en, en, en, en være? Hvilken verdi ville det være? Det ville være F, ikke sant? Det vil være 15. Så dette ville være F. One, en, en, en her er også F. Så man, en, en, en, en, en, en, en i heksadesimal, alt er det er 0xFF. Fordi dette halvparten representert F, verdien på 15, og denne halvparten representert F, verdien 15. Fordi husk, vi er telle fra null til ni. En er som 10, B er som 11, F er 15. Betyr det fornuftig for alle hvordan vi fikk fra binær til heksadesimal? PUBLIKUM: Og så hvordan kom vi 15 fra den ene, en, en, en? PROFESSOR: Ja, dette er binært, ikke sant? Tenk deg dette er bare et binært tall. Så du har to til nulte, som er en. PUBLIKUM: Oh, OK. Så du bare totalt det ut. PROFESSOR: Ja, og så du bare totalt det ut. Det er alt det er. PUBLIKUM: OK. PROFESSOR: OK. PUBLIKUM: Så du går fra binær til desimaltall til heksadesimale? PROFESSOR: Det er enkleste måten å gjøre det, ja. Du kommer ikke til desimal fordi desimal bare har null til ni. Vi er bare slags å dele dette opp i to. PUBLIKUM: [uhørbart] bruker desimal å finne hva det samsvarer opp til i heksadesimal. PROFESSOR: Jeg mener, du er tallying opp ved hjelp av grunnleggende matematikk. PUBLIKUM: Yeah. PROFESSOR: Ja, ganske mye. Det er litt forvirrende. Men bare vet at du kan dele opp hva denne verdien er i bare halvdelene. Se, hva er dette i binær? Hvilket nummer er det? Det kommer til å være noe fra null til F. Her er også kommer til å være noe fra null til F. Og så kan du bare sette de to rett der. PUBLIKUM: OK. PROFESSOR: Jepp. OK. Så dere vil prøve den neste da? Zero, en, null en, en, null, en null. Jeg skal gi dere som 30 sekunder, siden du sannsynligvis ikke visste triks til hvordan å gjøre dette tidligere. OK, noen ønsker å få dette en sjanse? 0x5A. PROFESSOR: 0x5A. 5a. God. Så dette her ville be-- du ønsker å fortelle oss hvordan du fikk det? Først, hvordan fikk du de fem? PUBLIKUM: Fordi null, en, null, er en fem. PROFESSOR: Har alle forstår hvorfor null, en, null, er en five? Du har en her. Du har ingenting i to til den første. I to til den andre, du har en, noe som er fire. Så du legge til fire pluss den ene, har du fem. Alle gode? OK. Og så hva dette kan være og hvorfor? Hva nummeret ikke A tilsvarer? PUBLIKUM: 10. PROFESSOR: Og hva dette i basen to? PUBLIKUM: [uhørbart] PROFESSOR: Nettopp. Så denne andre verdien her vil være 0x5A. Alle gode på hvordan å konvertere? Det er mye enklere enn du tror det er. Jeg vil bare være sikker du vet nyttige tips og triks for hvordan du gjør det. PUBLIKUM: Hvorfor kan du bare dele den i midten sånn? Bare være som, OK, jeg bare kommer til å bryr seg om disse først [uhørbart]? PROFESSOR: Fordi det er faktisk den måte heksadesimale verdier er representert. 0X, som faktisk betyr ingenting annet enn å fortelle deg at det er et heksadesimalt tall. Og dette alltid representerer de første fire siffer. Og dette alltid representerer de fire siste sifrene. Og så disse to sifre bare tilsvarer forskjellige biter. PUBLIKUM: Så vil vi always-- PROFESSOR: Du er alltid kommer til å få åtte verdi bits. PUBLIKUM: Er det akkurat som en ting her eller at en ting hele? PROFESSOR: Det er bare en ting i datamaskiner, Jepp. PUBLIKUM: OK. Awesome. PROFESSOR: Også, så i dette eksemplet vi konvertert fra binær til desimal, og fra binære til heksadesimale. Dere vil være sikker på at du også praksis går den andre veien rundt. Så hvis jeg ga deg 0xFF, kunne du trekke det ut i binært, ikke sant? Du konvertere F i binær, som er en, en, en, en, konvertere F til binær, som er en, en, en, en. Så vi kan be deg om å gjøre den andre veien rundt. Så desimal til binær, eller heksadesimale til binær. Så du ønsker å gjøre sikker på at du kjenner begge veier. Vi vil sannsynligvis be deg om en Kombinasjonen av de to. Ja, har du et spørsmål? Jeg kan see-- du er flink? PUBLIKUM: Yeah. PROFESSOR: OK. Er jeg god til å slette dette? Flott. Greit, så svarene er her hvis noen er nysgjerrig senere og bli forvirret. OK. PUBLIKUM: Spiller det noen rolle om vi satt brevene våre i hovedstaden eller små bokstaver? PROFESSOR: Det gjør det, fordi i heksadesimal, etter konvensjonen, alle tegnene er store bokstaver. Så A til F er kommer til å være store bokstaver. Hvis du setter inn en liten en, jeg vet ikke hvis vi nødvendigvis ville markere det galt. Men teoretisk, det er ikke teknisk hvordan du skal ha det. Så de bør alle være store bokstaver. Ja, godt spørsmål. OK. Andre spørsmålet. Tenk på dette herlige programmet her. Jeg vil stille spørsmålet: Jeg skal komme tilbake dette. Så, for det første, hva som er inne i standard io.h som er av interesse for programmet? For det andre, hva gjør ugyldig betegne på linje tre? Og for det tredje, hva betyr retur null fra Hoved, som seks, vanligvis bety? Hvis dere ønsker å skrive dem ned, siden jeg må bytte tilbake til lysbildet bare så du kan se kode. Dette er et eksempel på, som, kanskje en høyere nivå spørsmålet hvor vi ber deg hva ting betyr i et program. Alle bra for meg å gå tilbake til raset? Ok kult. Så jeg vil gi dere som kanskje tre minutter for å se på dette en virkelig rask. OK, så dette er som ganske enkelt, konseptuelt. Ikke ønsker at noen skal fortelle meg hva som er først inne ved hash inkludert vår standard io.h bibliotekfilen? Hvorfor trenger vi det biblioteket inkludert for dette programmet? Hva her trenger vi det for? Yeah? PUBLIKUM: Er det da du sette det printf? PROFESSOR: Nettopp. Så printf, helst du ta en input fra brukeren og print noe til skjermen, det er standard inngang, utgang bibliotek. Tenk på det som måte-- input, output. Har jeg en utgang? Ja, det gjør jeg. Så jeg vet at jeg alltid kommer til å trenger standardisere i.o biblioteket. Så printf er funksjonen der vi trenger for å få tilgang og hashtag inkludere standard i.o bibliotek. OK. For det andre hva betyr ugyldig bety? Vi har int main (void), hva gjør ugyldig her mener her på linje tre? Ja, i ryggen. PUBLIKUM: [uhørbart] PROFESSOR: Nettopp. Så husk, vi har lært starter med vår PSet kan du faktisk spesifisere kommandolinje argumenter som ditt program, som du Hovedfunksjonen tar som deg, brukeren, kall det. Hvis vi har ugyldig, betyr at du som kunne bare kjøre programmet direkte uten kommandolinjeargumenter. Alle klare på det? OK. Og til slutt hvorfor skal vi bry gjør denne avkastningen null ting her? Hvorfor gjør vi selv har en int main? Hvorfor kan vi ikke bare ha void main tomrommet? Yeah? PUBLIKUM: Bare slik at vi kan være sikker på at programmet er avslutter med hell, som i motsetning til hvis det ble nummerert. Og vi ville vite at det er en annen type feil. PROFESSOR: Ja, akkurat. Dette er bare en veldig konvensjonelle ting som vi gjør, det er bare ved slutten av programmet, bare for å være sikker som din viktigste funksjon kjører riktig, Vi ønsker alltid å gjøre gjengjeld null. Selv om vi kan nødvendigvis ikke se at trykket overalt. Fordi som programmerere, vet du, hvis du har mange forskjellige linjer med kode og du ikke vet hvor disse går galt, og hvis en feil skjer du vil sørg for at du får denne feilen. Og så typisk hvis noe går galt vi vil ha en avkastning på en bare å sørge for at vi vet at det er. Så hvis du ser en avkastning null, som vanligvis betyr at programmet er utført med hell. God? Kjølig. OK, andre programmet her. Tenk det. Og hvis dere ser en flyte, dere kan sannsynligvis har en god idé om hva Jeg skal til å spørre deg. Så når dette programmet utfører, som du kan se, Jeg erklære en dupp inne i min hovedfunksjon. Jeg kalte den "svarer", og jeg er innstillingen som tilsvarer en dividert med 10. Jeg skriver ut, til en desimal, som flyter. Og så kommer jeg tilbake null. Så når du kjører programmet, tenker tilbake til grådig nå, Dette programmet skriver 0.0. Som vi alle vet, forhåpentligvis vi alle vet, en dividert med 10 er ikke en 0,00, det er 0,1. Men forklare hvorfor dette programmet mener at en delt på 10 utskrifter til 0,1 annet enn 0,1? Jeg skal gi dere kanskje som 30 sekunder for å bare raskt tenke på at og jeg skal gå tilbake til programmet. OK. Alle som ønsker å gi det en sjanse? I tre setninger eller mindre, fordi vanligvis vi er kommer til å begrense alle svar til tre setninger eller mindre slik at du ikke bare regurgitate tilfeldige ting på din quiz. Ja, ta en sjanse. PUBLIKUM: Så jeg tror det er denne ting som heter, som, [uhørbart] Slik at det kan være, for eksempel, det kan være, for eksempel, 0,09, at der du skrive ut den første siffer, ville det være til 0,0? PROFESSOR: Close, ikke helt. Christabell? PUBLIKUM: Du dele ett og 10, og de er begge heltall. Og så den måten at det kommer til å lagre det som et heltall. Og så det nærmeste heltall ville være 0,0. Og så det er 0,1. PROFESSOR: Ja, det er veldig bra. Det er det rette svaret. Så dette er en veldig forvirrende konsept for mange av barna. Og jeg virkelig ønsker å være sikker på at Dette er forsterket i alles hode. Så det vi kaller flytende punkt upresishet, hvor grunnen til at mange av programmene i grådige fungerte ikke i utgangspunktet var fordi du glemte å kaste din variabel. Så hva Christabell sa var helt riktig. En flottør er iboende upresise. Fordi i en datamaskin, til høyre, har vi en endelig mengde biter av minne vi kan bruke til å representere tall. Så, for eksempel, dette CS50 ID er-- Jeg tror det er en 64-biters datamaskin. En flottør kan bare være representert med en begrenset mengde av disse bits. Og så 0,1 med uendelige nuller, som var 0.1 er, ikke sant? Men vi kan faktisk ikke lagre det nummeret i vår datamaskin. Vi har bare ikke nok minne til å gjøre det. Og så den nærmeste tilnærming av hva som er lagret i minnet er faktisk noe sånt som 0.000 noe, noe, noe, noe. Som, når du avkorte det, runder ned til 0,0. Og så dette eksemplet er bare ett som demonstrerer mange problemer vi har når vi er prøver å feilaktig gjøre matte uten å felle som et annet heltall. Så bare være skeptisk til at dette skjer. På spørrekonkurranser, hvis vi gir deg en blokk med kode og det er som, hva skriver ut på slutten? Og hvis det er noen tilfeldige verdien du Gutta bør vite hvorfor det skjer. Yeah? PUBLIKUM: avkorte er å kvitte seg med alt etter et visst punkt? [Uhørbart] PROFESSOR: Ja, så egentlig dette er en veldig dårlig eksempel fordi 0,100 uansett faktisk ville avkorte ned til 0,1. Men hvis du skulle kjøre it jeg ikke huske, fordi i fjor de kjørte den på et annet program. De kjørte den i noe som kalles den CS50 Appliance, som er forskjellig fra ID. Det var en 32-bit system, tror jeg. Og så var det forskjellige tall. Men egentlig, bare vet at hele konseptet med avkutting og hvor det bare skjærer ting av. Og så hvis det rounds-- PUBLIKUM: Uten avrunding. PROFESSOR: Nettopp. Yeah. Kjølig. Hei, i ryggen. Vi skal bare over noen quiz gjennomgang spørsmål. Greit. Så vurdere et annet program her. Jeg kommer til å gi dere en par minutter å lese over dette. Dette er noe som var for en svært nylig at jeg tror blåste mye du guys sinn. Men vi kommer til å snakke gjennom dette igjen bare å sikre at du forstå det helt. OK. OK. Noen trenger mer tid til å lese gjennom denne koden? OK. Så det virker for meg at i dette programmet er jeg opprette to strenger ved hjelp GetString. Ett kalt s og en som heter t. Og hvis de er lik lik til hverandre, det skal skrives ut "You skriver det samme. " Men elsewise, ville det ut, "Du skrev forskjellige ting, "ikke sant? Virker veldig, veldig enkelt. Men, men hvis jeg faktisk prøver å skrive dette programmet, det synes at selv når jeg inngangs nøyaktig samme strenger, det fortsatt skrives ut, "Du skrev forskjellige ting! " Er det noen som ønsker å ta en skutt på hvorfor dette programmet alltid svarer at inngangene er forskjellige, selv når ordene selv er det samme? Så hvis jeg skulle input-- David kjærlighet å bruke et eksempel som mamma, ikke sant? Små bokstaver M-O-M til S, T lik små M-O-M. Hvis jeg kjørte dette gjennom den koden, hvorfor skulle det skrive ut "du skrev forskjellige ting?" Er det noen som trenger mer tid til å tenke på dette? OK, jeg tror vi er bra. Yeah? PUBLIKUM: OK, så det er noe om hvor det er lagret i minnet, ikke sant? PROFESSOR: Jepp. PUBLIKUM: Hvor det er, hvis dette string s er lagret på minne spot-- Jeg oppfinne dette-- er null. PROFESSOR: Sure. PUBLIKUM: Og streng t er lagret på minne sted, som, 167, og deretter null ikke er lik 167. PROFESSOR: Nettopp. OK, så husk dette utro åpenbaring vi forklart til dere denne siste uken, som strenger egentlig ikke eksisterer? Når vi skaper noe som kalles string vi er i virkeligheten, skape noe som kalles røye stjerne. Som alt er det er en peker til en streng eller til en rekke tegn. Og så i dette eksempel, hvis jeg var til inngang M-O-M måten at maskinen min ville oppbevare det er innenfor minne backslash null, ikke sant? De fire tegn, tegn, ville bli lagret et sted. Og så disse fire tegn, backslash null, lagres et annet sted, ikke sant? Jeg har ingen anelse om hvor adressene er, de er et sted i min datamaskin. Men jeg vet ikke nøyaktig hvor de er. Når jeg oppretter en streng s, alt som egentlig er er en peker til start av denne strengen. Og når jeg lage denne t-verdi, alt som er en peker til her. Og så når du prøver å likestille og sjekke for å se om s er lik lik til t, datamaskinen er egentlig bare å returnere til deg adressen til denne m og adressen til den m. Og fordi de er to- separate biter av data som er lagret i to forskjellige adresser i datamaskinen, datamaskinen er aldri kommer til å gjenkjenne dem som det samme. Er det noen som ønsker å gi en sjanse på det vi ville ha å gjøre hvis vi ønsket å korrigere dette, og ha en riktig kjørende program i stedet? Tenk at for et par sekunder. Hva må vi gjøre for å endre til få dette programmet fungerer slik vi ønsker det skal fungere? Ja, ønsker å ta en stikke på det? PUBLIKUM: Kan vi prøve å dereference den pekeren og sjekke gjennom array? PROFESSOR: Det er én måte å gjøre det. Så, hva er navnet ditt igjen? Jeg beklager, minn meg. Zee: Zee. PROFESSOR: Ja, så hva Zee foreslo ville absolutt fungere. Høyre? Vi kunne dereference pekeren og faktisk gå og tilgang de fysiske data på innsiden av her. Og vi kan bare sammenligne hele skjermen. Vi kan si, OK, peker, gi meg hva som er inni her. Det ville returnere en meter. Og jeg vil si, peker, gi meg hva som er inni her. Returnere et m. Gjør de kampen? Ja. Da kan vi gå videre. Vi fortsette å sjekke hele to trenger hele veien opp til slutten og se om de er like, hvis alle verdiene er like. Og hvis alle verdiene er like, da vet vi strengene er sanne. Absolutt, det er hvordan vi ville gjøre det? Er det noen som forvirret på noe av dette? Hele konseptet med hvordan strenger er egentlig bare pekere, og hvordan de egentlig ikke eksisterer? Og hvorfor får vi feil liker måten vi får det? Fordi jeg garantere dere, pekere og streng tildeling og minne kommer til å komme opp. Yeah? PUBLIKUM: [uhørbart] dereference det, du bare sette en stjerne [uhørbart] PROFESSOR: Høyre. Så for å derererence en peker middel å gå til denne adressen på pekeren og oppnå dataene, den verdi der. Og måten å gjøre det på er stjerne pekeren. Ikke forveksle det. PUBLIKUM: [uhørlig]. PROFESSOR: Yeah. PUBLIKUM: Så du kan bare skrive hvis stjerne s lik likhets stjerne t. PROFESSOR: Vel, nei. Nei. PUBLIKUM: Det er ikke bra nok, ikke sant? PROFESSOR: Det er ikke fordi du er bare sjekke den første bokstaven. Er du sannsynligvis kommer til å trenger noen form for en løkke som gjentas gjennom hver enkelt karakter i begge strenger. Yeah. Så hvis du ønsket å bare sjekke for å se hvis de begynte med det samme, du kan gjøre hvis, stjerne s er lik stjerne t. Da vet du at minst de startet med samme tegn. Yeah? PUBLIKUM: Så veien du det ville være som en innebygd for loop eller peker? PROFESSOR: Yeah. Ganske mye bare en for loop. Husk, David i klassen nevnt gratis syntaktisk sukker? Og han hadde denne svært forvirrende ting av stjerne t pluss ett, der det ville integrere gjennom og den flytte pekeren? Jo enklere måte å gjøre Dette er bare av t i. Så det er bare en matrise. Den måten at du ville ha en for sløyfe som gikk fra null til i, der i er lengden av streng, kan du bare skrive at i stedet for å gjøre det Hele pekeren, referanse ting. Så disse tingene er nøyaktig tilsvarende i datamaskinen. Dere vil sannsynligvis ikke trenger å vite det, men det er godt å bare slags har i ryggen tankene dine. Bare vet at datamaskinen gjenkjenner ulike blokker av kode som det samme. Fordi dette er bare langt mer brukervennlig vennlig for oss å presentere det som det er en matrise. Det er bare enklere. PUBLIKUM: Så bruk strlen å like, get-- PROFESSOR: Yeah. PUBLIKUM: OK. PROFESSOR: Du kan bruke strlen eller, hvis du hadde ikke strlen du kan bare gjøre opp til du treffer backslash null for begge. Enten ville fungere. Yeah. PUBLIKUM: Så det er å dereference hver enkelttegn om vi var faktisk skrive denne koden, vi bare kunne gjøre t brak jeg liker med stjernen foran den? PROFESSOR: Ja, tilsvarer tilsvarer s brakett i, og deretter fortsette å bevege seg i ned inntil du treffer slutten. Ja, det er det du vil gjøre. Og jeg vil faktisk ha en neste eksempel på når vi faktisk skrive strlen så dere vil kind av få å leke seg med den litt. Så er alle klare på bare minne, strenger, pekere, kvalitet adresser? Noen høyere nivå konsepter som du vil sikkert behov for å vite på quiz i morgen. Greit. God. Jepp. OK, så en ting som vi vil også be du, som vi gjør hvert år på en quiz, er, anta at du har glemt (som vi synes å glemme å gjøre årlig) der header fil strlen er deklarert. Og så må vi skrive det selv. Her er en liste over retningslinjer at vi kan presentere deg Gutta hvor du får til å anta at s strengen vil ikke være null. Du kan anta at s vil være avsluttet med en omvendt skråstrek null. Så du vet det er det det kommer til å slutte med. Og, for eksempel, at Lengden på Hallo ville være fem. Så du kan anta at hallo vil være fem, H-E-L-L-O. Du trenger ikke å anta at backside null står for lengden. Denne siste ting her, gjør ikke bekymre heltall overløp. Er det noen som husker hva heltallsoverflyt er? PUBLIKUM: Går utover Lengden på [uhørbart]. PROFESSOR: Ja, kan du forklare litt, hva betyr det? PUBLIKUM: Så tror jeg det går tilbake til avkorting eksempel tidligere. Men hvis du har bare så mange tall som går utover det antall bits at du faktisk kan tildele den at det vil bare slags avskåret. PROFESSOR: Ja, så på en typisk datamaskin, hvor mange biter har vi? PUBLIKUM: 32? PROFESSOR: Ja, 32, høyre. Og så det er hva, fire milliarder kroner, to milliarder? Fire milliarder kroner, opp til fire milliarder positive heltall, ikke sant? To milliarder negative, to milliarder positive, avhenger av hvordan du ønsker å gjøre det. Og så i utgangspunktet kan vi ha nok heltall som kan gå opp til to til 31. minus en, ikke sant? Fordi når vi traff to til den 32., gjør vi ikke har så mye minne i datamaskinen vår. Og så, i teorien, jeg kunne komme opp med en rekke det vil si, som, to til 46te. Det er en stor-ass tall, men teoretisk du kunne. Og så heltallsoverflyt er hvis du prøver å skape et heltall som går utover hva datamaskinen er i stand til å lagre. Og så du fyrene for dette eksempelet har ikke å bekymre seg for oss å gi deg en gigantisk streng som er to til den 32. tegn lang. Det ville være virkelig mener. Greit, så jeg skal bare gi dere basestrukturen av dette. Du kommer til å skape en funksjon kalt int strlen der et pass i en char stjerne, eller streng, pekeren til strengen kalt s. Greit, alle kopierer det ned. Kjølig. Oops-- annen måte. Så dette er typen som en hardere stykke problem, så jeg skal gi dere kanskje fem til seks minutter til slags idédugnad og skrive denne funksjonen ut. PUBLIKUM: Vi gjør ikke konto for [uhørbart], Vi trenger ikke å bruke heltall? PROFESSOR: Nei, det gjør du ikke. Jeg skal gi dere et hint. En stund løkke kan være svært nyttig her. Yeah. Her er sukkertøy. Candy vil også være tilgjengelig for quiz, tror jeg. Så dere vil være alt sukret opp i morgen. Kan I-- du fikk den. PUBLIKUM: OK. PROFESSOR: Yeah. Kanskje 30 sekunder eller så. Greit, hvis du er ikke gjort, ingen bekymringer. Vi vil gå gjennom dette sammen. OK. Så jeg kommer til å bare oppsettet på grunnstrukturen for denne funksjonen her. Int strlen. Først, ikke vil at noen skal fortelle meg hva som int betyr? Vi må ha i denne funksjonen. PUBLIKUM: strlen [uhørbart]. PROFESSOR: Nettopp. Så uansett hva som skjer her inne, vi trenger å returnere et heltall. Og som angitt i den spec, ønsker vi å return-- Gå for det folkens, bare holde det gående. Det er alt bra. Spise alt slik at jeg ikke har å ta det tilbake, faktisk. Int bare betyr at du er kommer til å være tilbake et heltall. Hva er dette røye stjerne s? Hva betyr det? PUBLIKUM: Liker, hva som mottas i. PROFESSOR: Nettopp. Og hva er nesten det samme som røye stjerne? PUBLIKUM: String? PROFESSOR: Nettopp. Så alt vi gjør er å gi dette en peker til en streng. OK. Kjølig. Du må heller ikke glemme, hvis vi glemmer for å gi deg disse beslagene, ikke glem å skrive dem selv. Fordi teoretisk, er koden feil hvis du glemmer å skrive dem. Bare alltid ta hensyn. Som, småting at du ikke legger merke når du programmerer på den bærbare datamaskinen, fordi den bærbare datamaskinen gjør det for deg? Ikke glem når du skriver for hånd. Yeah? PUBLIKUM: Men hvor feil? Liker, får vi hele problemet galt? PROFESSOR: Nei, nei. Ikke bekymre deg. Det er faktisk teoretisk mulig for deg å få full poeng på et spørsmål selv om koden din vilje aldri kjørt i det virkelige liv. Jeg foreslår at du ikke prøve å gjøre det skje. For eksempel, som om alt som er her er riktig, men du glemmer et kolon eller en brakett, koden vil faktisk ikke kjøre. Men vi kan være barmhjertig. Yeah? PUBLIKUM: Må du kommentere vår håndskrift? PROFESSOR: Nei, nei, nei bekymringer om at. Ingen kommenterer. Stil bør være god. Liker, ikke smush alt på én linje. Vi vil ikke være fornøyd med deg hvis du gjør det. Er det noen som ønsker å gi meg den første linjen? Hint, er det veldig enkelt. Yeah? PUBLIKUM: Int, n er lik null. Bare sette opp disken. PROFESSOR: Så vi ønsker noen liksom en teller, ikke sant? Jeg skal bare nevne det "teller" av hensyn til lesbarhet. Hva ønsker vi å sette den lik? PUBLIKUM: Zero. PROFESSOR: Jepp. Semikolon. Det er også veldig rare tegne semikolon. Bare praksis gjør det. Så vi ønsker å først ha en teller av typen int. Fordi vi ønsker å telle opp hvor mange tegn eller bokstaver er i denne strengen, ikke sant? Veldig enkel første skrittet. OK, kanskje litt mer komplisert nå, hvordan skal vi gjøre det? Er det noen som ønsker å gi meg linje med kode som kan være i stand til å hjelpe sløyfe gjennom hva dette er? Ja, modig sjel i ryggen? PUBLIKUM: OK, så mens punkt stjernene, den ja, stjernen i s, ikke er lik null, og deretter gjøre noe? PROFESSOR: Det er veldig, veldig nær. Veldig nære. Så jeg kommer til å ta opp to ting med det. Først av alt, det er ikke akkurat null. Hva er dette? Det er null terminator, som er backslash null. Så de er forskjellige i forhold til hvordan de er lagret. Så du er veldig nære. Og for det andre, ønsker vi ikke å bare flytte pekeren. Vi ønsker å faktisk tilgang verdiene, ikke sant? Og så hvordan gjør vi det? Meget lett. Ikke tenk på pekere, tenker ikke på minner. Gå tilbake til uke to av dette kurset. PUBLIKUM: [uhørlig]. PROFESSOR: Per, husker du? Hva er strenger? Hvor er de lagret i minnet? PUBLIKUM: De er hevet. PROFESSOR: De er hevet. Så hvordan skal vi få tilgang hvert tegn inne? PUBLIKUM: [uhørlig]. PROFESSOR: Nettopp. Så while-- hva som foregår inni her? S av - PUBLIKUM: I. PROFESSOR: Åh, jeg eksisterer ikke, gjør det vel? PUBLIKUM: Å, telle? PROFESSOR: Vi kan bare bruke teller, kan vi ikke? PUBLIKUM: Beklager, jeg kalte det i. PROFESSOR: Ja, det er alt bra. Vi har en variabel opp her som er allerede blitt erklært som vår teller. Så hvorfor ikke vi bare bruke den å gå gjennom mens loop? Gir det mening? Så mens s av count-- er det noen som vil ha å gi meg hva som skjer etter her? PUBLIKUM: Det er ikke lik. PROFESSOR: Har ikke like, ikke sant? Det er bang lik, utropstegn er lik, hva dere ønsker å kaller det ikke equal-- PUBLIKUM: [uhørlig]. PROFESSOR: Yeah. Husk enkelt sitat er for en røye, anførselstegn er for en streng. Vær forsiktig når du bruker dem. Så når vi ser gjennom rekken, det siste tegnet, vi vet at vi ikke vil ha det å være backslash null. Så mens. Vi er ikke ved slutten av strengen. Hva ønsker vi å gjøre inne? PUBLIKUM: Vi ønsker å legge til teller så det teller pluss pluss? PROFESSOR: Nettopp. Så her vi kommer til å gjøre telle, telle pluss pluss. Mangler en mer linje. Vi er nesten der. Hva skal vi glemme å gjøre? PUBLIKUM: Retur null? PROFESSOR: Du ønsker å returnere null? PUBLIKUM: Nei, tilbake til strlen. Vente. PROFESSOR: Hvilken er lagret i? PUBLIKUM: Tell. Telle. PROFESSOR: Nettopp. Så her vi kommer til å returnere teller. Fordi hva vi er gjør her ultimately-- vi har en teller variabel som er kommer til å øke gjennom vår streng. Vi kommer til å holde det gående, holde går, rundt og rundt i denne sløyfen. Og mens vi er ikke på slutten av denne streng, som er null terminator. Og hver gang vi går gjennom det, vi legger til vår teller. Og vi kommer videre sammen i denne matrisen. Og på slutten, når vi treffer null terminator, vi vet, oh, kan vi bryte, returnere teller. Vi har vår strlen. Har alle får hvordan dette ble gjennomført? Mens loops-- Jeg vet at vi ikke har gjort for mye med dem, men de er vanligvis veldig, veldig nyttig hvis du vet ikke hva du stoppe betingelse nødvendigvis må være. Spørsmål? PUBLIKUM: Kan vi skrive null på mens tilstanden? PROFESSOR: Mens? Ja, så i dette problemet hadde jeg deg Gutta anta at s ikke vil være null. Fordi husk, teoretisk, hvis jeg ga deg en peker som var for stor for minne, det vil gi deg null, ikke sant? Det er det drifts system ville gjøre. Så hvis jeg ikke fortelle deg å anta s vil være null, må du sjekke. Så her oppe, ville du gjøre, hvis s lik lik null, returnere en. Noe sånt. PUBLIKUM: [uhørlig] null. PROFESSOR: OK, jeg skal fortelle du hvorfor vi ikke kan gjøre det. Fordi huske i minnet, til høyre, her. Vi vil gå her. Du har fått gigantiske blokker minne alle med nett som lagrer ulike verdier, ikke sant? Og så alt en streng er-- for eksempel, hvis vi skal innspill hallo, ville det være H-E-L-L-O backslash null, ikke sant? Og så hvem vet, som tilfeldig ting som er her etter det. Vi vet ikke egentlig vet hva som er der. Og så hvis du skulle gjøre i stedet for omvendt skråstrek null, null, kan det ikke være null. Fordi det bare kan bety noen tilfeldige andre ting som ikke hører hjemme i din streng. Og så den måten at vi alltid vet at en streng ender er med en omvendt skråstrek null. Og så det er alltid hvordan vi sjekk for å se slutten på en streng. Null, er alt som betyr at hvis du har en ikke-eksisterende pekeren, først av alt, eller hvis hukommelsen er bare så stort at du kan ikke returnere den, så det ville være null. Så vær veldig forsiktig når differensiere forskjellen mellom null og backslash null. Yeah. Alle OK med dette? OK. Så jeg måtte dere skrive ut strlen. Feasibly vi kan også be deg skrive ut A til jeg, husk at "Atwoa" eller hva dere vil kalle det? Som funksjon i Vigenère og Caesar, som konverterer et Ascii verdien til et tall? Det har også kommet opp på tidligere quizer av funksjonene vi har bedt deg om å skrive. Ganske mye noen funksjon at du har brukt, og er veldig lett å skrive selv, sensorer liker er lavere, er øvre, lavere, til øvre. Funksjoner som ville konvertere en string fra små bokstaver til store bokstaver. Vi vet alle hvordan du gjør det, ikke sant? Det er ganske enkelt. Vil bare være sikker på at du can-- det er den samme tankeprosessen. Du bare iterere gjennom og du slår ting. Du enten telle eller når du slår ting annerledes. Jeg ville suggest-- jeg vet ikke om vi kommer å be deg om å huske hva hovedstaden A eller kapital Z, eller små bokstaver A eller små bokstaver z er i Ascii, men jeg vil foreslå kanskje skrive det ned i tilfelle vi gjør. Bare så dere har en referanse. Som store bokstaver A er, hva, 197? Og så små bokstaver er som 50 noe. 65, ja, der du går. Så bare ganske mye vet Forskjellen mellom dem er 32. Det er ganske viktig. Yeah. Er jeg god på dette? OK. PUBLIKUM: Vi kunne teoretisk skrive noen av disse ned så vel på vår little-- PROFESSOR: Du teoretisk bare kunne kopiere funksjon ned. Det er sant. PUBLIKUM: Ikke [uhørbart]. PROFESSOR: Dere har et ark. Dere har et notat ark. Du kan skrive det. Du kan skrive det. Du kan gjøre hva du vil med den. Yeah. Så teoretisk sett, hvis ønsker du å gå for. PUBLIKUM: [uhørbart] men vi har egentlig ikke nødvendigvis trenger å huske verdien, kan vi bare bruke til øvre eller lavere funksjon, ikke sant? PROFESSOR: Yeah. Men hvis vi ga deg et spørsmål som sier skrive til øvre, så ville du trenger å skrive det. Så dere kan anta at du gutta har tilgang til alle funksjoner, men hvis du ønsker å bruke til øvre eller til lavere, hva har du også til å gjøre? PUBLIKUM: [uhørbart] bruke CS50 [uhørbart] PROFESSOR: Er det CS50.h? Vær forsiktig der. Så til videregående, for å senke, er øvre, er lavere, funksjoner som involverer streng manipulasjon er alle innen enten Ascii eller innenfor matematikk bibliotek eller i strengen biblioteket. Så hvis dere bruker dem funksjoner, være nøye med å huske å inkludere at spissen. Så kanskje også noe du ønsker å inkludere i ark, hva er overskriften? Hva er bibliotekene du har brukt? Hvilke funksjoner som er inni disse bibliotekene? Det er viktig. Yeah? PUBLIKUM: Kunne vi bare cop ut og gjøre hashtag gjennom absolutt hver bokstav vi noensinne sett som på alle spørsmålene? PROFESSOR: Du kunne. Jeg vet ikke hvor glad vi kommer til å være å gradere at quiz når hvert stykke kode er dobbelt så lang som den trenger å være. Jeg vet ikke, vi kan ta av et poeng for stil. Men teoretisk din kode ville være riktig. Dere kunne cop ut og bare inkluderer alt. Det er fint også, ja. PUBLIKUM: [uhørlig]. PROFESSOR: Yeah. Jeg foreslår at du ikke gjør det selv. Yeah. PUBLIKUM: Cool. PROFESSOR: Godt spørsmål. PUBLIKUM: Så, i verste fall. PROFESSOR: The worst case. Hvis du helt glemmer, du kunne gjøre det. Yeah. Jepp, er kode rett der. Jeg brukte n stedet for telling, men du vet, hva flyter båten din. PUBLIKUM: Vent, så vi ville ikke ha å hashtag inkluderer fordi vi er starter på int? PROFESSOR: Ja, jeg bare antok at vi ble bedt om å skrive funksjonen. Hvis du ønsket å være sikker, du trolig kunne sette den der. Men jeg bare ikke bry, ja. Jeg vet ikke engang om du trenger noen bibliotek for dette. Fordi du virkelig ikke ut ut noe eller noe, ikke sant? Ja, jeg vet ikke om du trenger et bibliotek. OK. Dette er også litt mer langs linjene minne manipulasjon. Denne typen litt vanskelig. Tenk på dette. Du har en funksjon som heter func. Jeg kunne ha kalt det uansett, men jeg velger å kalle det func. Jeg har det ovenfor min viktigste. Husk at du ønsker å ha en funksjon etter din viktigste, du vil være sikker på at du omfatter prototypen på toppen. Men i dette tilfellet var det så korte at jeg følte at jeg kunne bare inkludere den oppå den viktigste. Jeg trenger ikke å ha prototypen, fordi det er allerede skrevet ovenfor. Så alt jeg gjør i min hovedfunksjon skaper heltall x er lik 10. Jeg ringer min func funksjon, og deretter skrive opp noe. Og så er det faktisk hva func gjør. Dere ønsker å tenke gjennom dette. Fordi det er litt vanskelig. Det er veldig, veldig vanskelig, faktisk. Tenk gjennom hva dette Programmet vil være gi ut. Jeg skal gi dere to minutter. Gode ​​diskusjoner? PUBLIKUM: Yeah. PROFESSOR: Yeah. Greit, så dette er vanskelig for en grunn. Og dette er grunnen til at jeg ønsket å bringe dette til alles oppmerksomhet. Er det noen som ønsker å gi meg et forslag, et forsøk? Hva ville denne skrive ut? Helt greit hvis du tar feil. Yeah? PUBLIKUM: Jeg tror det er 100 og deretter 10 på to separate linjer. PROFESSOR: Og en 10? Er det noen som har andre gjetninger? Yeah? PUBLIKUM: Kanskje bare 10 fordi func er ikke tilbake noe? PROFESSOR: OK, så vi har gjetning nummer én er at gjetning nummer to er bare kommer til å skrive ut 10. Er det noen som har andre gjetninger? OK. Så la oss gå gjennom dette, ikke sant? Når du får et stykke kode, ikke bare se på det og være like, ah, det er så mye ting! Jeg er så forvirret! Liker, roe deg ned. Bare vet at du bare kunne se gjennom koden linje for linje. Det er alt det er. Det er som å lese en bok. Så med noen funksjon, vi starter alltid på hoved. Så vi kommer til å starter på int main ugyldig, selv programmets allerede kjørt, ikke sant? Start med i hoved ugyldig. Int x lik 10. Så jeg kommer til å slette denne. Jeg kommer til å trekke minnet bare så du Gutta kan slags se hva som skjer. Husk ned her vi har vår stack? Her oppe har vi vår heap et sted her oppe. Stack vokser opp, ikke sant? Og innen stabelen, har du lysnettet funksjon samt alle nett lokale variabler. Så her, int x lik 10. Innenfor vår viktigste funksjon er vi å skape en variabel kalt x. Vi innstilling som lik 10. Her har du noen x, og du er innstilling som lik 10, ikke sant, innenfor hoved. Alle gode? Funksjon. Så nå, i vår hoved funksjon, vi kaller funksjonen vi har skrevet ovenfor. Så vi nå går inn i andre funksjonen. Vi kommer til å lage en annen variabel int x er lik 100. Hva skjer her på stakken? Hva skjer når du kaller en funksjon som skaper nye variabler? Hva skjer her på stakken? PUBLIKUM: [uhørbart] hauger på toppen? PROFESSOR: Yeah. Slik at det faktisk skaper en kopi. Og den slags hauger på toppen. Tenk på stack-- en stabel av bøker, en stabel med noe. Hauger på toppen, først i siste ut, sist inn, først ut. Så det kommer til å skape en x her. Det kommer til å ha alle funcs variabler. Flott. Så nå har vi to forskjellige x-er som representerer to svært forskjellige ting. Vi så kommer til å skrive ut ut heltall av x. Så la oss skrive ut 100, ikke sant? Fordi her er det 100. Så det er det første at det kommer til å skrive ut. Ettersom denne funksjonen returnerer ingenting, nå som funksjon, den linjen i hoved er ferdig. Alle bra med meg så langt? Så vi er nå gjennom to ut av tre linjer av våre viktigste funksjon. Nå skal vi til den tredje linjen. Vi kommer til å printf. Hva er dette x innenfor hoved? Hva betyr det representerer? Hvilken verdi er x nå? PUBLIKUM: 100. PROFESSOR: Det er 100? PUBLIKUM: Fortsatt 10. PROFESSOR: Fortsatt 10. Yeah. Fordi husk, innen vår func, x er lik 100. Men hvis vi går tilbake tilbake til vår viktigste funksjon, det variable er lagret i en annet sted på stacken. Så nå må vi gå tilbake til Hoved stabelen, nett lokale variabler. Og her x er lik 10. Og så vi kommer til å skrive ut 10. Så hun var helt rett. Vi kommer til å ha den produksjon på 100 og 10. Yeah? PUBLIKUM: Når du malloc, er det haug eller stabel som er [uhørbart]? PROFESSOR: Når du malloc, du tar minne fra haugen og fordele den. Slik at du ikke trenger å rote med noe av dette. Så jeg antar det større takeaway her er noe som kalles omfang. For de av dere som var på gjennomgangen økten i går kveld, vi snakket kort om dette. Omfang definerer hvordan og når variabler eksisterer. Eller innenfor hvilke rammer gjøre dine variabler eksisterer. Ganske mye tommelfingerregelen generelt er, din variables-- hvis du oppretter dem inne krøllete braces-- de eksisterer bare inne disse klammeparentes. Så for eksempel i vår funksjon func, ser du de to tannregulering. Hvis du oppretter noe på innsiden av det, sjansene er alt du gjør er å skape en stabel og lagre det der. Samme i hoved. Det er bare lagret inne i hoved. Du ønsker også å være veldig, veldig forsiktig her. Fordi omfanget låner også seg til forskjellige eksempler. Så for eksempel en for loop, for int i lik 0. Jeg er mindre enn, vet jeg ikke, 10. Jeg pluss pluss. Og du har kode på innsiden av det, ikke sant? Hvor kommer denne variabelen, jeg, faktisk bare eksisterer? Bare innsiden av for loop. Så jeg vedder på mange av dere har sannsynligvis støtt på denne feilen når du gjør programmene i dine psets. Hvor mange av dere har prøvd å bruke i utenfor en for løkke og hadde en feil? Som en unreferenced heltall eller noe sånt? Grunnen til at det skjer er fordi her du er skape noe som bare eksisterer innenfor din for loop. Og hvis du prøver å bruke det, det gjør jeg ikke faktisk eksisterer utenfor det. Så i utgangspunktet en datamaskin si, jeg vet ikke hva du snakker om. Alt jeg vet er at en jeg var her, men nå ikke lenger. Så hvis jeg skulle lage en for loop inne, ikke sant? Og jeg kommer til å opprette en ny, som int j, og har det gjøre hva. Og du har en kode på innsiden av som loop, bare j finnes her. Men som også eksisterer innenfor i. Og så j bare finnes innenfor dette for loop, mens jeg eksisterer i hele greia. Alle klare? Samme med betinget utsagn Hvis du ønsker å skape noe. Samme med mens sløyfer hvis du ønsker å skape noe. Det er noe å være veldig, veldig forsiktig med. Så dette var en virkelig god problem i forstand at det demonstrert to ting. Det viste først, omfang. Og det demonstrert også minnetildeling. Fordi dere skal vite at funksjoner vokse oppover i stabelen. Og at når du ringer funksjoner, du oppretter i det vesentlige en ny stabel av hukommelsen. Det er veldig forskjellig fra hva din nett minne er. Yeah. Puh! Alle OK på det? Det var forvirrende. Meget gode emner til å gå over, fordi du er sannsynligvis kommer til å få litt kinkig ting som det på quiz. Yeah. Kjølig. Jeg skal sette deg få 100 på ett linje og deretter 10 på den andre. Ja, veldig bra. OK, nå dere vil få sjansen til å være de TAs. Du kommer til å svare på alle de herlige e-poster som jeg noen ganger får. Så, kjære Andi, jeg ser Jeg tror noe er går galt med min kompilatoren. Jeg er sikker på at koden min er riktig, men jeg får stadig en segmentering feil hver gang jeg kjører. Hva er det som skjer? Vennligst hjelp, masse kjærlighet. Hvis dere fikk noe sånt at hvordan ville du svare? Dette er faktisk veldig vanlig spørsmålene vi vil stille deg. Er hvis, vi vil gi deg en scenario, vil vi gi oss din beste gjetning på hva som skjer. Alle som har en stab på hva som skjer? Yeah? PUBLIKUM: Kanskje dereferenced den null, noe som pekeren peker på noe null. PROFESSOR: Ja, det ville være en eksempel på når det ville skje. Men hva er det større bildet av hva som skjer her? PUBLIKUM: Er det du prøver å få tilgang til minne som du ikke skal ha tilgang til? PROFESSOR: Nettopp. Så tenk på en SEG feil, en off grenser, begrenset område i minnet at du ikke skal være rørende. Så ganske mye når du prøver å index-- som for eksempel du har erklært en matrise fra null til ni. Men du prøver å røre det 10nde verdi, trenger du ikke har tilgang til det. Fordi du ikke har erklært det. Og så datamaskinen skal å se på det være like, uh oh, du prøver å gå utenfor rammene av en indeks. Jeg kommer til å gi deg en segmentering feil. Tenker på som segment, ikke sant? En ekstra segment, er feilen når du prøver å bryte noe og du bør ikke være der. Segmentering feil er når som helst du prøve å ta ting at du ikke skal være rørende. Så vanlige eksempler er en indeks. Selvfølgelig, hvis du prøver å røre det var null, som også vil fungere så godt. Hvis pekeren prøvde å berøre ting som ikke skal berøres, som også kan fungere like bra. Mest typisk vil se dette i en matrise. Alle gode? PUBLIKUM: Så hvis du vil for å få tilgang til den 10. punktet og det er bare en grense ni eller noe. PROFESSOR: Ja, akkurat. Mer eller mindre. Kjølig. Kjære Andi. Så vi har fått disse fantastiske ting som heter sorterer. Hvis Merge sort-- som vi sag i eksempel når David gjorde hele ting i class-- hvorfor, hvis det er så mye raskere enn hvilken som helst av de andre former, hvorfor skal vi bry vite hvilken som helst av de andre former? Hva er dette spørsmålet egentlig spør du? Hva er de tre word-- PUBLIKUM: Hva er trade-off? PROFESSOR: Nettopp. Det er det spørsmålet som spør. Hva er trade-off mellom Flett slags vers noen andre typer? PUBLIKUM: Tar minne, ikke sant? PROFESSOR: Liker du forklare det litt mer? Først la oss forklare Merge butikken. Hvordan Merge slags arbeid? PUBLIKUM: Så det fungerer ved dele alt inn i halvparten og deretter sette det sammen og reallocating det i orden, som hver gang du fletter settene. PROFESSOR: Ganske mye. Så jeg kan trekke ut av dette, men det ville ta meg fem minutter til å trekke det ut. Se tilbake på til seksjons lysbilder der vi dekket Merge sort. Nettopp. Så veien Merge sorterings verk er det deler ting i to, og da er det bare ser på første verdier av dem alle og sorterer bare det. Kontinuerlig skaper nye arrays og setter ting mer og mer i orden. Og så lenge det er virkelig, virkelig fort fordi it's-- du vet, en binær søk er n log n. Du oppretter så mange ulike matriser som du er ved hjelp av en stor mengde minne. Og så lenge det er raskere, handel av her er at du bruker mer minne. Og så, hint, sorterer og søk ble dekket mye mer i år enn de har vært i år tidligere. Dere skal se at reflekteres derfor på quizen. Jeg ville definitivt bruke tid på å gå om hva alle de forskjellige typer er, hvordan binære søk, hvordan lineær søk arbeid. Hvordan kanskje pseudo kode dem ut. Hva er de kjører tider? Noe sånt som kjører tider er svært lett å kopiere ned på et notat ark, høyre? Det er veldig vanskelig når du er i midten test og du må finne ut av. Kopier den ned. Jeg kan garantere deg at du er skal du trenger å vite det. Hva er de avveininger? Verste fall beste fall scenarier for dem alle, veldig få vite. Yeah? PUBLIKUM: Trenger vi å vet hvordan å kode Merge slag? Liker, trenger vi å husker den rekursive? PROFESSOR: Jeg tviler sterkt på det, bare fordi det er som ganske komplisert. Men det kan ikke være umulig hvis vi ber deg om å bruke pseudo det ut. Yeah. Jepp, OK, en mer. Dette kan ha kommet opp i du siste brikken i en bit. Yeah? Har alle høre det? OK, så ganske mye første av alt, hva slags program ville være å gi deg en utgang som dette? Husk at vi ba deg om å lære om denne nye typen debugging verktøy? Hva var navnet på det? Valgrind, rett Det var et program der du kan kalle det kunne holde styr på alt minnet du er hjelp i programmet, og var på gang. Så hvis du har noe, som, definitivt tapt, 40 bytes i en blokk. Sannsynligvis er du ikke huske å frigjøre den. Fordi hvis du bruker byte minne, det betyr at du har tilgang til dette minnet, men du har ikke vært i stand til å frigjøre. Så du ønsker å gjøre sikker på at du også bruker free-- det er en function-- å frigjøre alle av minnet overflyttes av malloc. Kjølig. Så dette lysbildet, vil jeg ha den opp. Det er overalt i mange forelesninger, i mye seksjons lysbilder. Du virkelig ønsker å være sikker du bare vet alt dette. Enten i note ark eller hvis du ønsker å huske det, gjerne. Det er veldig, veldig, veldig viktig. Også en veldig god Spørsmålet som vi kan spørre. Hvorfor er Selection sort-- se på Utvalg sort-- alle runtimes er n squared. Uavhengig av hvordan listen gjelder deg som, så hvorfor er Selection sort-- Jeg skal gi dere 30 andre mener om dette. Fordi det er slags forvirrende. Det innebærer noen konseptuell tanke. Hvorfor skulle de kjøre ganger være den samme i både de verste og beste fall scenarier? Yeah? PUBLIKUM: Fordi Selection sort hver posisjon eller plass i denne lille utvalg ting eller hva som helst. Så selv i beste fall selv om det er perfekt sortert, det ville fortsatt å være som, OK, man. I mitt første omgang har jeg en. Og gå gjennom dem alle. OK, er en av de minste. Og så går det igjen og er like, OK, to- er den minste av alle de tingene. Men det har fortsatt å sjekk hver og en. PROFESSOR: Yeah. Så for eksempel, la oss bare si vi har en liste, som allerede er sortert, en rekke 04:59. Måten Selection sorterer er at det går gjennom, det sjekker disse to. Deretter sjekker den de to. Og så sjekker, og det sjekker. Det holder å sjekke dem alle, uavhengig av hvorvidt det er faktisk sortert. Fordi det er rett og slett måten sorteringsarbeid. Og så dette spørsmålet er typen som en konseptuell spørsmål vi vil spørre. Der først, du vet hva Utvalg slags er, rett, for å kunne å svare på spørsmålet. Du må være i stand til å forstå konseptuelt hva som skjer. Og så kan du bruke det og tenker, OK la oss bare tenke worst case scenario. De er alle i synkende rekkefølge. Hvordan vil det påvirke det? Hva om det er stigende rekkefølge? Hvis det er allerede sortert? Hvordan vil det påvirke kjøretider? Og så Selection sort, vil du merke at det ikke egentlig rolle. Fordi du sjekker alle verdier uavhengig av hva som skjer. Og så gode ting å huske. Hvorfor noen slags forskjellig fra andre og hvordan man best og verst tenkelige scenarier ville påvirke dem alle. Jeg kommer til å virkelig truffet i slag fordi det vil være på quiz. Yeah. OK. Det er seks minutter igjen. Jeg kan ta tre minutter av spørsmål. Jeg kan også henge rundt for som 20 minutter etter avsnitt Hvis du ønsker å stille spørsmål også. Er det noen som bare har veldig kort spørsmål eller konseptuelle spørsmål de er usikre på akkurat nå? Yeah? PUBLIKUM: Kan du fortelle litt litt om bitvis operatører? PROFESSOR: Yeah. Så bitvis operatører er noe som du sannsynligvis kanskje bare ønsker å sette på arket. Så quickly-- jeg ikke ønsker å gå for mye i dybden fordi Harvard, i sin anmeldelse sesjon, dekket det ganske godt. Bitvis operatør, er det fem av dem, ikke sant? Det er dette, som er x eller funksjon, det er tegnet, som er den og. Rør, som er eller. Og da har du to forskjellige skift. Hvis jeg gir deg to verdier, om Jeg gir deg, som, en og en. Hva ville det vurdere å? Hvis jeg gir deg ekte og sant, sant? Hva om sant eller usant? Fremdeles sant, ikke sant? Fordi det er en eller. Vi vil mest sannsynlig gi deg tall. Så husk, en er lik sant, er lik null falske. Og vi kan gi deg disse tingene og ber deg om å fortelle oss hva som skjer. Harvard dekker det innenfor den første 10 minutter av sin studie sesjon virkelig, virkelig godt. Så dere ønsker å gjøre at du ser tilbake på det. PUBLIKUM: Er pisa5 kommer til å være på quiz? PROFESSOR: No. Ikke engang se på pisa5 akkurat nå. Det er vanskelig. Bare ikke engang gidder å se på pisa5. Men som noen hint og forslag, jeg foreslår at du starter pisa5 så snart quiz er over. Dette vil være den vanskeligste uke, men da gutta vil bli overlevert det på åsene av rullende grønne og valper, og det er greit. Denne klassen blir betydelig lettere etter den femte PSet. PUBLIKUM: Arbeidstid er søndag, mandag? PROFESSOR: Ja, så kontortid vil søndag til mandag for PSet. Arbeidstid kveld hovedsak vil bare være en vurdering for quiz. Hvis noen ønsker å komme inn og spør Tas et spørsmål, vil vi være der. Jeg tar kanskje et spørsmål hvis noen har spørsmål? Yeah? PUBLIKUM: Når du er definere noder, [uhørbart] hvis du sier node stjerne og deretter neste, gjør datamaskinen automatisk forstår at du er henvise til en annen peker? PROFESSOR: No. PUBLIKUM: Du må kobler på nytt det [uhørbart]? PROFESSOR: Så i utgangspunktet struct av en node er, huske, det er som du oppretter node og da har du en peker som heter neste. Alt du gjør er å ha strukturen der. Du må tilordne at pekeren et sted. Så datamaskinene ikke vet hva det gjør ennå. Du må faktisk tildele det når du oppretter din lenket liste. Og det er det hovedsakelig PSet 5 vil være på. Så ingen bekymringer om noe av det akkurat nå. PUBLIKUM: Så vi trenger ikke å fokusere for mye på lenken listen, bare den generelle oppfatningen? PROFESSOR: Bare ganske mye stabler, køer, link lister, trær, hash tabeller. Bare være i stand til å vite hva de er. Vi kommer ikke til å be du liker noe konkret fordi vi ikke har virkelig gjort en PSet at dekker noe av det ennå. Så i de to siste minuttene før Jeg sette deg fri til å drepe denne quizen. Ganske mye, liker, tenke på hvordan langt dere har kommet i denne klassen. Jeg husker da uke to av denne klassen, noen av dere tilbringe tre timer å skrive vann. Hvor lang tid vil det ta deg gutta til å skrive vann nå? 30 sekunder, kanskje? Tenk på hvor mye dere har lært. CS er et veldig, veldig vanskelig tema. Det er ingen tvil om det. Det er vanskelig, det er derfor ingen som studerer det. Det er bare vanskelig. Og det er helt greit. Og jeg er veldig stolt av at alle har gjort det så langt. Psets er ikke lett. De tar mye tid. Dere, jeg vil aldri be deg om å skrive spillet av 15 eller Vigenère på PSet. Du trenger ikke å bare frik ut om det. Alt vi tester her er å evaluere din begrepsmessig kunnskap, samt som noen av de grunnleggende ferdighetene til koding. Testen er utformet for å være veldig utfordrende. Liker, det er utformet for deg å ikke få 100. Det er også designet for deg å sannsynligvis ikke være i stand til å fullføre i 75 minutter. Og det er helt greit. Jeg er en student selv. Jeg vet, jeg hater det når jeg går ut av en quiz være, dritt. Det var veldig vanskelig. Sannsynligvis hva som kommer til happen-- og det er helt greit, Jeg forteller dere akkurat nå. Midlene på disse tingene ikke er høy i det hele tatt. Og for de av dere som har fått, som, treere på din oppgavesett, det betyr ikke at du er kommer til å få en 60 prosent i denne klassen. Hvis du får 60% på quiz, som ikke mener du kommer til å får en D i denne klassen. Vi ser, spesielt jeg, for de av dere i min del, Jeg ser hvor hardt dere er alle arbeider. Og jeg holde styr på det. Dere vil bli bra. Det er ingen institusjonell hukommelse av lykke ved slutten av semesteret. Fordi alle Harvard barna forteller deres venner, oh, vil du bli bra. Ingen forteller dere det her. Så jeg må fortelle dere at her. Dere vil bli bra. Jeg er så stolt av alle dere. Testen vil være vanskelig. Studere for det, og etterpå bare kaste den bort. Gjør deg klar til å lære nye ting. Og spise godteri. Vi har har masse godteri. Få en god natts søvn. Ikke ikke sove, fordi det ville være virkelig ille. CS er mye logikk. Hvis du ikke sove, kan du ikke fungere, og hjernen kan ikke fungere. Og jeg vil være her for de neste 20 minutter hvis noen ønsker å henge rundt. Dere kommer til å drepe den. Lykke til.