PROFESSOR: Så dagsordenen for denne uge, ikke så meget stuff. Men forhåbentlig meget, meget hjælpsomme og relevant for jer i denne uge. Men vi kommer til at tilbringe måske 15, 20 minutter bare hurtigt taler om link listen. Link lister kommer til at dækkes på quizzen. Så måske ville det være meget nyttigt at lære lidt om, hvad det er. Vi kommer til at tilbringe det store størstedelen af ​​dagens afsnit gå over quiz nul praksis problemer. Og så vil vi spare måske 20, 30 minutter i slutningen for eventuelle dvælende spørgsmål nogen har. Og så den sidste fem minutter, jeg vil at give en pumpe op tale for quizzen. Du fyre alle ønsker at være her for at. Fordi det kommer til at være et godt tidspunkt. Okay, så nogle materiale på linket listen. Hvordan de er typisk struktureret er du har, hvad der kaldes en knude, ikke? Du har disse ting kaldet knuder, der er structs. Jeg vil gå over, hvordan du opretter en knude i det næste dias. Men det væsentlige alle forbundet lister er er data, som er blevet sat sammen via pointere. Og så den fordel, vi har til anvendelse af en sammenkædet liste løbet, måske, som et array, er det faktum, at i et array du har brug for en sammenhængende blok af memory alle i samme sted, en efter den anden, for at kunne have det. Hvorimod en linket liste, kunne du har tilfældige små bidder af hukommelse hele din computer hængte sammen af ​​pointere. Og på denne måde, du kan få adgang til oplysninger der kommer den ene efter den anden, efter den anden uden at behøve blot en enorm chunk hukommelse i computeren eller andet sted. Og så dette er en af ​​de største grunde til, at vi bruger link listen. For det andet er det meget let at dynamisk ændre størrelsen på linket listen, fordi i array, når du erklærer et array, du har et bestemt sæt værdi. Lad os sige, at jeg ønskede at skabe et array af 10 heltal. Jeg skaber en vifte af 10 heltal, og det er det. Det er 10. Jeg ved ikke, hvad de skal gøre efter det. Hvis jeg ønskede at gøre det 11, kan ikke gøre det. Hvis jeg ønsker at gøre det 9, kan ikke gøre det. Mens det i et link listen, kan du tilføje og slette og indsætte hvor du vil. Du kan dynamisk ændre størrelsen på din strukturere her, din datastruktur. Og det giver os en masse mere ekstra fleksibilitet at vi typisk ikke har med arrays. Enhver forvirret på den grundlæggende struktur, hvordan et link liste eller hvorfor vi er nødt til at bruge en over et array? Ja, vi vil gå over i detaljer hvordan man rent faktisk oprette en. Men det er bare lidt generel forstand lige nu. Afkøle. Og så arrays hængte sammen af disse dejlige små ting kaldet knuder. Alle en node er er en form for struct. Husk, en struct er, hvis du ønskede at skabe en bestemt type variabel i C, der ikke allerede eksisterer, du som programmør, kan faktisk skabe den selv. Og så denne type data struktur kaldes en node, rent faktisk er blevet skabt af os, at eksisterer ikke inden C på egen hånd. Og den måde, som du oprette en er du har overskriften på typedef struct, som fortæller compileren jeg ved at skabe en struct. Vi vil navngive den "knude". Og inde vi skal at erklære en variabel i, som vil gemme en værdi. Og så er vi også kommer til at har en pointer kaldet "næste" der peger på den næste knude i link-listen. Og så du er færdig at off ved blot at gentage node igen, så compileren ved, OK det er i slutningen af ​​min struct. Og så på den måde, vi er slags at skabe en sød lille vifte slags ting med en værdi og med en pegepind. Og du kan linke dem alle sammen med de pointere. Så de alle slags kan være bundet sammen i en kæde. Afkøle. Kan du høre, at lidt bedre? Publikum: Ja. PROFESSOR: Okay. Så den måde, som du fyre kan se, en typisk link liste er struktureret er du har et hoved. Du har hovedet værdi, som ikke er bliver påpeget af en anden pointer. Men det kommer til at pege på, eller reference, en anden node. Knudepunktet efter kommer til at henvise til node efter det, og så videre og så videre indtil du til sidst ramt I slutningen af ​​dit link listen. Og du bare ikke vil have en pointer der. Og så tænke som, på en kæde, eller endda hvis nogen af ​​jer lavet, ved jeg ikke, lignende med Fruit Loops da du var lille. Du ville strengen dem sammen og bære dem rundt om halsen. Synes det er præcis de samme ting. Du har disse små ting, som du kan strengen sammen dette punkt til én efter det, at den ene efter det, og så videre og så videre indtil du har en kæde af en datastruktur som du kan bruge som du vil. Så den måde, at det vi ville typisk indsætte eller slette enhver node fra et link listen er meget forskellige afhængigt af hvor denne node er. Så for eksempel, fordi pointere er altid peger på en specifik værdi, når du sletter eller indsætte en node, du vil være sikker på, at markøren er alle peger på de rigtige ting. Så hvis du ville potentielt indsætte en ny node med værdien af ​​en inde i en sorterede link liste, vi alle kender her fra det billede, der kommer til gå i mellem hoved og to, ikke? Fordi man passer lige der. Men den måde, som vi ville gøre det er ved først dereferere markøren fra hoved og at fremsende disse til én. Men vi kommer ind i et problem her. Kan nogen se, hvad problemet er, hvis vi skulle først dereference markøren fra hoved til en? Hvilket problem kan vi løbe ind i, hvis vi forsøger for at føje denne til forsiden af ​​vores array? PUBLIKUM: [uhørligt] PROFESSOR: Præcis. Så her har vi en pointer, der var når der peger fra hoved til to. Men hvis du slippe af med det pointer, du peger den til en, vi nu har ingen idé hvor de skal gå for at finde to. Fordi som jeg sagde før, har du en kæmpe luns af hukommelse i computeren. Alle disse knudepunkter kunne tilfældigt afbrudt i ethvert sted i din computer. Og du ved ikke, hvordan at gå om at finde det. Og så er du nødt til at have pejlemærker peger på alle knuder i slutningen. Eller andet, hvis du ved et uheld dereference én uden først at tildelingen en værdi først, er du bare kommer til at tabe alt bagefter. Så det, vi kommer til at gør, er, du ville først ønsker at oprette en markør på node, du vil indsætte. Pege på, hvor du vil indsætte det til, og så bagefter du kunne pege hovedet tilbage til én. Giver det mening for alle her? Stor. Tænk på det som ligesom en kæde. Hvis du tilføjer en kæde, det er slags intuitiv hvordan du ville gå om at indsætte det. OK, så det er faktisk meget kortere end jeg troede det ville være, fem minutters spiel på link lister. Bare så du fyre har den grundlæggende idé om, hvad det er. Her har vi dagsordenen for quizzen nul. Lad ikke dette skræmme dig. Jeg ved, det er en masse information. Det ser meget skræmmende. Det er også en masse, jeg tror, ​​CSC slags udtryk. Ting som hexadecimale strenge, pegepinde, tildelinger dynamisk hukommelse er meget skræmmende klingende vilkår. Men vi kommer til at bryde dem ned, gøre nogle praksis problemer så du fyre alle er klar til denne test. Hvor mange af jer har allerede begyndt at studere? OK, du fyre sikkert gerne at begynde at komme i gang på, at fordi quizzen er i morgen. Eller torsdag for nogle af jer. Ja, så vi kommer til at gå over nogle praksis problemer. Hvis du fyre alle ønsker at tage ud et ark papir, en blyant. Vi kommer til at bare tilbringe Langt størstedelen af ​​dagens afsnit gå over noget af det, så du fyre har en idé om, hvad de skal forvente af quizzen. OK. Et par af logistisk detaljer så godt, for nogen som ikke har været til linket der, hvis du går til cs50.yale.edu, på forsiden denne side er der et link der siger "Om Quiz Zero." Link tager dig der. Hvis du ikke har læst den, kan du læse den. Fordi det fortæller dig virkelig vigtigt oplysninger om quiz. Jeg har tænkt mig at trække det ud fra at bare fordi, fysisk, hvis du fyre ikke ved, hvor at gå, vil vi have problemer. Og så hvis din sidste i form med A til N, gå til jura auditorium. Og hvis dine sidste starter med P til Z, gå til Davies Auditorium. Og dette kun gælder for mennesker i onsdag sektion. Hvis du tager quizzen på Torsdag du går til SSS 114 hvor din forelæsning typisk er. PUBLIKUM: [uhørligt] PROFESSOR: O til Z, er du nødt at gå til Davies auditorium. Jeg har tænkt mig at ændre det, ikke? Oh, yeah, du bare mislykkes automatisk. Oh yeah, det er dig Christa. Ja, min dårlige. Jep, O til Z, er du nødt at gå til Davies Auditorim. Jeg har tænkt mig at løse dette, når jeg uploader. Ja. Og så også noget vigtigt at tænke er, at onsdag hvis du er officielt indskrevet i onsdag afsnittet du skal tage din quiz på onsdag. Og hvis du er tilmeldt torsdag du skal tage din quiz torsdag. Og det er i løbet af klassen tid. Hvor, jeg synes det er ligesom 1:00 til 02:15 på onsdage og fra 2:30 til 03:45 om torsdagen. Hvis du har en uforsonlig konflikter, Dean undskyldninger er det eneste, Desværre kan vi tage. Fordi vi har haft en Langt størstedelen af ​​anmodninger at skifte fra onsdag til torsdag. Som vi kan ikke ære medmindre vi har en Dean anmodning. OK. Så før vi går i gang på en par af de praksis problemer, Jeg er bare kommer til at gå over Andys nyttige tips til succes. Gutter, når du studerer, du virkelig ønsker at øve skrive kode i hånden. Første gang jeg nogensinde tog en CS quiz, havde jeg ikke praksis skrive kode manuelt før, og det var meget chokerende ved, hvor svært det var. Når du fyre ikke komme ind i vane at skrive ud af alt, det kommer meget naturligt at være kunne have automatisk kompletteret beslag og semikoloner der. Når du skriver det ud i hånden, nogle gange er det meget, meget nemt at glemme et semikolon, eller glemmer at lukke et beslag, eller glemmer at lukke et kolon, eller sådan noget. Så når du skriver koden i hånden, det er en meget anderledes fornemmelse. Så du fyre, når du arbejder gennem nogle af de praksis problemer, det ville godt at virkelig øve i dag. Eller i morgen, formoder jeg, hvis du er tage quizzen på torsdag. For det andet har vi det sidste, ligesom, otte år værd af praksis quizzer online. Dette års quiz vil sandsynligvis være meget, meget lig dem alle. De er alle meget ens. Du slags komme ind i stil af type spørgsmål at vi spørger, hvilken type funktioner, som vi vil skrive det i, et cetera, et cetera. Så tag den praksis quizzer, især under tidspres. 75 minutter til at gøre quizzen er ikke en masse tid. Det er meget, meget lang. Og så du fyre virkelig ønsker at sikre, at du fyre er for vane at skrive kode ved hånden hurtigt. Fordi du ikke ønsker den første tid til at se en quiz af denne længde være på din quiz. Du fyre virkelig ønsker at sikre, at du øve på forhånd. For det fjerde, du ønsker at gennemgå forelæsning og § dias. Du behøver ikke at huske ting. Faktisk er alle tilladt en et ark hvidt papir noter foran og bagpå. Du fyre kan skrive eller skrive. Hvis du finder dig selv behøver at huske noget, sætte den ned på dette ark. Jeg garanterer dig, behøver du ikke ønsker at blive hængende i midten af ​​denne quiz være som, oh yeah, hvad er runtime af denne art versus den slags. Bare sætte den ned og kopiere det direkte fra din note ark. Så kan du faktisk bare bruge din hjernen til at tænke over de problemer snarere end at skulle huske fakta. Og så virkelig drage fordel af eventuelle niche detaljer at du tror, ​​du har brug for at huske, plop det ned om revisionen ark. OK, nogen spørgsmål logistisk vedrørende quizzen før vi begynder nogle quiz problemer praksis? Ja? PUBLIKUM: Jeg har ikke haft en chance at se på quizzen [uhørligt] men det vil være anvendelse meste, Eller er der også kommer til at være, lignende, viden spørgsmål? PROFESSOR: Det er en masse. Så den måde, som jeg ville beskrev quizzen is-- Jeg sat sammen nogle praksis problemer at jeg trak fra alle quizzer. Men du vil se, at der er to vigtigste typer af spørgsmål, vi vil bede dig om. Den ene er et meget lavt niveau detalje ting. Vi giver dig en lille bid af kode og siger, er der en fejl her? Hvad ville være at udskrive her? Hvad vil denne kode producere, et cetera. Så meget lavt niveau oplysninger detaljer. Og på bagsiden, vil vi have meget højt niveau videnbaserede spørgsmål. Kan du forklare, hvad det forskellen mellem en binær søgning og en lineær søgning er? Hvorfor skulle vi ønsker at bruge en over den anden? Måske, hvad der er GDB? Hvorfor ønsker vi at bruge GDB? Højere niveau, mere grundlæggende forståelse spørgsmål. Så vil du se en blanding af de to af dem på din quiz. Noget andet, før vi hovedet lige ind i det? OK. PUBLIKUM: Endnu. PROFESSOR: Åh, en mere. Undskyld. PUBLIKUM: Ja, det er i orden. Så du siger 75 minutter er for kort, ligesom det er usandsynligt at vi vil slutte? Eller lignende, 75 minutter er præcis så meget tid som vi ville brug for, hvis vi var passende forberedt? PROFESSOR: OK, så det quiz er udfordrende. Det er absolut udfordrende. Du vil finde dig selv på kort tid. Du er sandsynligvis kommer til at ramme, ligesom 10, 15 minutter til at gå, og være ligesom, lort. Jeg har så meget tilbage at gøre. Og det er helt fint. Alle kommer til at føle på samme måde. Bare være meget opmærksom på hvor meget tid du har. Og så det er derfor jeg fortælle dig fyre gøre den praksis quizzer. Fordi det virkelig giver en stor ansvarsfølelse af, hvad quizzen vil være ligesom. Så hvis du finde dig selv at blive stand til færdig praksis quizzer i en god mængde af tid, kan du pace selv godt, så vil du ikke have et problem onsdag eller torsdag. Afkøle. Så hvis alle wants-- jeg tror de fleste mennesker har papirark ud allerede. Jeg har tænkt mig at væsentlige blot give dig prøvens spørgsmål, giver jer, ligesom en par minutter til at gøre dem. Og vi vil gå over som en klasse hvad svarene på dem er. Så det er et meget typisk tidlig spørgsmål vi får spørge dig, bare at konvertere numre mellem forskellige baser. Binære, som du fyre kan tilbagekaldelse, er basen to. Decimal er basis 10, eller hvad vi som mennesker typisk fortolke. Hexadecimal er basis 16, som er nul til ni samt A til F. Så der er fire tal jeg er beder jer til at konvertere her. Jeg vil give dig lyst, tre til fire minutter til at tænke igennem, hvordan vi ville gå om at løse dette. PUBLIKUM: Er vi lov regnemaskiner? PROFESSOR: Du vil ikke brug for regnemaskiner, ja. Jeg tror grundlæggende kommer, tror jeg, er alle du fyre vil blive bedt om at gøre. Og bare så jeg slags har en følelse af når alle er færdig, se op, bølge, ved jeg ikke, smil, ser glad, hvis du er færdig. Ja. Måske et par minutter mere. OK, lad os bringe det ind. Jeg vilje vil giver jer mindre tid end du sandsynligvis nødt til at gøre nogle af disse problemer, simpelthen fordi jeg vil være sikker på, at vi komme igennem en masse problemer. Så ingen bekymringer, hvis du ikke har en chance for at afslutte. Helt OK, så længe du har en idé om, hvordan man kan gå om dette. Så lad os gå videre og gøre den første. Så først, er der nogen ønsker at fortælle mig i binær, hvad gør hver af disse cifre repræsentere i form af deres værdier? Ja? PUBLIKUM: To til power nul, 00:58. PROFESSOR: Præcis. Så. Lige så typisk når vi er i bunden 10 alle disse repræsenterer, er, ligesom, 10 til basis af nul, ikke? Det er din ens plads. Alle dine 10 sted er er 10 til potensen af ​​en. Du 100 sted er 10 til magten for to. Uanset basen du er i går at gøre med præcis de samme ting, bare med en anden base. Så binær, alt hvad der er, er bunden to. Du kommer til at konvertere alle de cifre i to til uanset magt af dette ciffer. Og så i denne forstand, vi kan have en lettere måde for at kunne tilføje op eller adderer alle tallene i rækkefølge at konvertere til basis 10. Så er der nogen ønsker at fortælle mig, hvad det Svaret på det første er i bunden ti? PUBLIKUM: To, [uhørligt] PROFESSOR: Ja. PUBLIKUM: 42. PROFESSOR: 42, der du går. Så den måde, vi fik dette svar var gør to første, som er to. Plus to tredje, som er otte. Plus to til den femte, som er hvad der er tilovers. Du opsummere dem op, og det er 42. Er der nogen forvirret om, hvordan vi fik det? Så grundlæggende kommer, som Jeg sagde, du bør være OK. Hvis ikke, godt, kan vi praktiserer det også. Men det er i orden. Afkøle. Er der nogen ønsker at give mig Svaret på det andet en så godt? 50? God. Enhver forvirret om, hvordan vi fik at enten? Cool, jeg får svar på næste dias. Så ingen bekymringer, hvis du skal kopiere det ned. OK, så hexadecimal er en smule tricky. men jeg har tænkt mig at vise jer en genvej til, hvordan du gør det. Så hexadecimal, som du Husk, det er jo være 16. Og fordi vi som mennesker ikke faktisk have 16 numre til at repræsentere det, vi går fra nul til ni, som vores første 10 værdier, og så har vi A til F, som er de næste seks værdier. Og så den nemmeste måde at gå fra enhver binært tal til hexadecimal er at bryde dem op i to halvdele. Og så enhver binært tal vi vil give vil du sandsynligvis have otte cifre. Du kan bare bryde dem op i midten. Så den første en-- en en, én én, en, en, én én. Slags tror det op, du ved, tegne en skråstreg eller et komma i mellem dem. Og du kan bare konvertere direkte uanset dette er til den første antal hexadecimal, og hvad her er at den anden af ​​hexadecimal. Så husk fra almindelig notation, hvad gør hexadecimale værdier starte med? PUBLIKUM: Zero. PROFESSOR: 0X. Så vi ved, at hver gang vi beder dig at konvertere et vilkårligt antal til hexadecimal, eller helst du se nogen nummer, der starter med 0X, du ved, at det er en hexadecimal værdi. Og så du vil blive bedt om at afgøre, hvad disse to cifre er. Og den måde du gør det, sammentælle op at halvdelen og optælling op at halvdelen. Så i dette eksempel, hvad ville man, én, én, man være? Hvilken værdi ville det være? Det ville være F, ikke? Det ville være 15. Så det ville være F. One, én, en, en her er også F. Så en, én, én, en, en, én, en, én i hexadecimal, alt det er, er 0xFF. Fordi denne halvdel repræsenterede F, værdien af ​​15, og denne halve repræsenteret F, værdien 15. Fordi husk, vi er tælle fra nul til ni. A er som 10, B er ligesom 11, F er 15. Giver det mening for alle, hvordan vi fik fra binær til hexadecimalt? PUBLIKUM: Og så hvordan vi får 15 fra den ene, en, en, én? PROFESSOR: Ja, det er binært, ikke? Forestil dig dette er blot et binært tal. Så du har to til nulte, som er en. PUBLIKUM: Åh, OK. Så du bare alt det ud. PROFESSOR: Ja, og derefter du bare alt det ud. Det er alt det er. PUBLIKUM: OK. PROFESSOR: OK. PUBLIKUM: Så du går fra binær til decimal til hexadecimal? PROFESSOR: Det er den nemmeste måde at gøre det, ja. Du kommer ikke til til decimal, fordi decimal kun har nul til ni. Vi er bare sådan opdele denne i to. PUBLIKUM: [uhørligt] bruge decimal for at finde hvad det matcher op til i hexadecimal. PROFESSOR: Jeg mener, du er sammentælle op ved hjælp af grundlæggende matematik. Publikum: Ja. PROFESSOR: Ja, temmelig meget. Det er en smule forvirrende. Men bare vide, at du kan opdele op uanset denne værdi er i bare halvdele. Se, hvad er det i binær? Hvilket nummer er det? Det kommer til at blive noget fra nul til F. Her vil også være noget fra nul til F. Og så kan du bare sætte de to lige der. PUBLIKUM: OK. PROFESSOR: Yep. OK. Så du fyre ønsker at prøve den næste så? Zero, en, nul én, en, nul, en nul. Jeg vil give jer gerne 30 sekunder, da du sikkert ikke vidste det trick til, hvordan du gør dette tidligere. OK, nogen ønsker at få denne ene et skud? 0X5A. PROFESSOR: 0X5A. 5a. God. Så dette her ville være-- du ønsker til at fortælle os, hvordan du fik det? Først hvordan fik du fem? PUBLIKUM: Fordi nul, en, nul, en er fem. PROFESSOR: Er alle forstår hvorfor nul, en, nul, en er fem? Du har en her. Du har intet i to til den første. I to til det andet, du har en, der er fire. Så du tilføje fire plus den ene, har du fem. Alle godt? OK. Og så, hvad dette være, og hvorfor? Hvilket nummer er A svarer til? PUBLIKUM: 10. PROFESSOR: Og hvad det i bund to? PUBLIKUM: [uhørligt] PROFESSOR: Præcis. Så denne anden værdi her ville være 0X5A. Alle godt om, hvordan du konvertere? Det er en meget enklere end du tror det er. Jeg vil bare være sikker på, du kender nyttige tips og tricks til, hvordan du gør det. PUBLIKUM: Hvorfor kan du bare opdele det i midten sådan? Bare være ligesom, OK, jeg kun kommer til at bekymre sig om disse første [uhørligt]? PROFESSOR: Fordi det er faktisk den måde hexadecimale værdier er repræsenteret. 0X, der rent faktisk betyder intet andet end at fortælle dig at det er et hexadecimalt tal. Og dette repræsenterer altid de første fire cifre. Og dette repræsenterer altid de sidste fire cifre. Og så disse to cifre bare svarer til forskellige bits. PUBLIKUM: Så vi vil always-- PROFESSOR: Du er altid kommer til at få otte bits værdi. PUBLIKUM: Er det ligesom en ting herfra, eller at en ting hele? PROFESSOR: Det er bare en ting i computere, JEP. PUBLIKUM: OK. Awesome. Professor: Også, så i dette eksempel vi konverteret fra binær til decimal, og fra binær til hexadecimal. Du fyre ønsker at sikre, at du også øve gå den anden vej rundt. Så hvis jeg gav dig 0xFF, kunne du trække det ud i binær, ikke? Du konvertere F til binær, som er en, en, en, én, konvertere F til binær, som er en, en, en, én. Så vi kan bede dig om at gøre den anden vej rundt. Så decimal til binær eller hexadecimal til binær. Så du ønsker at gøre sikker på du kender begge veje. Vi vil sandsynligvis spørge dig en kombination af de to. Ja, du har et spørgsmål? Jeg kan see-- du er god? Publikum: Ja. PROFESSOR: OK. Er jeg god til at slette dette? Stor. Okay, så svarene er her, hvis nogen er nysgerrig senere og få forvirret. OK. PUBLIKUM: Betyder det noget, hvis vi sætter vores bogstaver i capitol eller små bogstaver? PROFESSOR: Det gør, fordi i hexadecimal, efter sædvane, alle tegn er store bogstaver. Så A til F er kommer til at være store bogstaver. Hvis du sætter et lille et, jeg ikke kender hvis vi nødvendigvis ville markere det forkert. Men teoretisk, det er ikke teknisk hvordan du skulle have det. Så de bør alle være store bogstaver. Ja, godt spørgsmål. OK. Andet spørgsmål. Overvej dette dejlige program her. Jeg vil stille spørgsmålet, Jeg kommer tilbage dette. Så det første, hvad der er indeni standard io.h der er af interesse for programmet? For det andet, hvad betyder ugyldig tilkendegiver på linje tre? Og for det tredje, hvad betyder returnere nul fra vigtigste, som linje seks, generelt betyde? Hvis du fyre ønsker at skrive dem ned, da jeg er nødt til at skifte tilbage til dias bare så du kan se koden. Dette er et eksempel på, lignende, måske en højere niveau spørgsmål, hvor vi beder dig hvilke ting betyder i et program. Alle godt for mig at gå tilbage til dias? OK, cool. Så jeg vil give dig fyre som måske tre minutter til at se på denne ene virkelig hurtig. OK, så denne ene er ligesom forholdsvis let, begrebsmæssigt. Er der nogen ønsker at fortælle mig, hvad der er først inden om af hash, herunder vores standard io.h biblioteket fil? Hvorfor har vi brug for, at biblioteket medtaget til dette program? Hvad her har vi brug for det til? Ja? PUBLIKUM: Er at når du sætte det printf? PROFESSOR: Præcis. Så printf, hver gang du tage input fra brugeren og udskrive noget til skærmen, det er standard input, output bibliotek. Tænk på det som way-- input, output. Har jeg en udgang? Ja jeg gør. Så jeg ved, at jeg altid har tænkt mig at brug for standardisere i.o biblioteket. Så printf er den funktion hvorved vi har brug for at få adgang og hashtag omfatte standard i.o biblioteket. OK. For det andet hvad betyder ugyldig betyde? Vi har den int main (void), hvad betyder ugyldiggøre her mener her on line tre? Ja, i ryggen. PUBLIKUM: [uhørligt] PROFESSOR: Præcis. Så husk, vi har lært startende med vores pset at du kan faktisk specificere kommandolinje argumenter, dit program, at du hovedfunktion, tager dig, brugeren, kald det. Hvis vi har tomrum, der betyder, at du kunne bare køre programmet direkte uden nogen kommandolinjeargumenter. Alle klar på det? OK. Og endelig hvorfor vi gider at gøre denne tilbagevenden nul ting her? Hvorfor har vi selv har en int main? Hvorfor kan vi ikke bare har void main tomrum? Ja? PUBLIKUM: Bare så vi kan være sikker på, at programmet er afslutter succes, som i modsætning til, hvis det blev nummereret. Og vi ville vide, at det er en anden form for fejl. PROFESSOR: Ja, præcis. Dette er blot et meget konventionelle ting, som vi gør, er, at lige ved udgangen af dit program, bare for at sikre at din vigtigste funktion kører korrekt, vi altid ønsker at gøre afkast nul. Selvom vi kan nødvendigvis ikke se, at trykt nogen steder. Fordi som programmører, du ved, hvis du har mange forskellige linjer kode og du ved ikke, hvor disse går galt, og hvis der sker en fejl, du ønsker at sørge for, at du får denne fejl. Og så typisk, hvis noget går forkert, vi vil have et afkast på en bare at sikre, at vi ved, at det er. Så hvis du ser en tilbagevenden nul, som typisk betyder, dit program er henrettet med succes. God? Afkøle. OK, det andet program her. Overveje det. Og hvis du fyre se en flyde, kan du fyre sandsynligvis har en god idé om, hvad Jeg er ved at spørge dig. Så når dette program henretter, som du kan se, Jeg erklære en flyder inde i min vigtigste funktion. Jeg navngive det "svare," og jeg indstilling at svarende til en divideret med 10. Jeg udskrivning ud, til én decimal, at flyde. Og så er jeg tilbage nul. Så når udførelsen af ​​programmet, tænker tilbage på grådige nu, dette program udskriver 0.0. Som vi alle ved, forhåbentlig vi alle ved, en divideret med 10 ikke er en 0,00, det er 0,1. Men forklare, hvorfor dette program mener at 1 divideret med 10 udskrifter til 0,1 andre end 0,1? Jeg vil give jer måske gerne 30 sekunder til bare hurtigt at tænke over det og jeg vil gå tilbage til programmet. OK. Nogen ønsker at give det et skud? I tre sætninger eller mindre, fordi der typisk er vi kommer til at begrænse alle svar til tre sætninger eller mindre så du ikke bare gylpe tilfældige ting på din quiz. Ja, tage et skud. PUBLIKUM: Så jeg tror der er denne ting kaldet, ligesom, [uhørligt] Så der kan være, for eksempel, der kan være ligesom, 0,09, at hvor du udskrive den første ciffer, ville det være til 0,0? PROFESSOR: Luk, ikke helt. Christabell? PUBLIKUM: Du dividere et og 10, og de er begge heltal. Og så den måde, at det vil at gemme det som et heltal. Og så nærmeste heltal ville være 0,0. Og så det er 0,1. PROFESSOR: Ja, det er rigtig godt. Det er det rigtige svar. Så det er et meget forvirrende koncept for en masse børn. Og jeg virkelig ønsker at sikre, at dette er forstærket i alles hoved. Så det, vi kalder flydende punkt unøjagtighed, hvor grunden en masse af dine programmer i grådige fungerede oprindeligt var fordi du har glemt at kaste din variabel. Så hvad Christabell sagde var helt korrekt. En flyder i sig selv er upræcis. Fordi der i en computer, til højre, har vi en endelig mængde bits hukommelse vi kan bruge til at repræsentere tal. Så for eksempel, denne CS50 id is-- Jeg synes det er en 64-bit computer. En flyder kun kan repræsenteres af en begrænset mængde af disse bits. Og så 0,1 med uendelige nuller, Det er var 0,1 er, ikke? Men vi kan faktisk ikke gemme dette nummer i vores computer. Vi har bare ikke tilstrækkelig hukommelse til at gøre det. Og så den nærmeste tilnærmelse af hvad der er gemt i hukommelsen, er faktisk noget 0.000 noget, noget, noget, noget. Som, når du afkorter det, runder ned til 0,0. Og så dette eksempel er blot en der demonstrerer masser af emner vi har, når vi arbejder forsøger at fejlagtigt lave matematik uden støbning som en anden heltal. Så bare være på vagt over for dette sker. På quizzer, hvis vi giver dig en blok af kode, og det er ligesom, hvad udskriver i slutningen? Og hvis det er nogle tilfældige værdi, du fyre skal vide, hvorfor det sker. Ja? PUBLIKUM: Trunkér er at slippe af med alt efter et bestemt punkt? [Uhørligt] PROFESSOR: Ja, så faktisk dette er en virkelig dårligt eksempel, fordi 0,100 uanset faktisk vil afkorte ned til 0,1. Men hvis du skulle køre det-- jeg ikke husk, fordi sidste år de kørte det på et andet program. De løb det i noget, der hedder det CS50 Appliance, som er forskellig fra ID. Det var en 32-bit-system, tror jeg. Og så der var forskellige numre. Men det væsentlige, bare vide, at hele konceptet med trunkering og hvordan det bare skærer ting ud. Og så hvis det rounds-- PUBLIKUM: Uden afrunding. PROFESSOR: Præcis. Ja. Afkøle. Hi, i ryggen. Vi er bare at gå over nogle quiz anmeldelse spørgsmål. Okay. Så overveje et andet program her. Jeg har tænkt mig at give jer fyre en par minutter til at læse over dette. Det er noget, var for en meget for nylig, at jeg synes blæste en masse af jer fyre sind. Men vi kommer til at tale gennem denne igen bare at sikre, at du forstå det helt. OK. OK. Nogen har brug for mere tid til at læse denne kode? OK. Så det forekommer mig, at i dette program er jeg oprette to strenge ved hjælp getString. En kaldet s og en kaldet t. Og hvis de er lige lig med hinanden, det skal udskrives "Du skrive det samme. " Men elsewise ville det udskrives, "du indtastet forskellige ting, "ikke? Virker meget, meget enkel. Men, men hvis jeg rent faktisk forsøger at skrive dette program, Det lader til, at selv når jeg input præcis de samme strenge, det stadig udskriver, "du indtastet forskellige ting! " Er der nogen ønsker at tage en skudt på, hvorfor dette program altid svarer, at de input er forskellige, selv når ordene selv er de samme? Så hvis jeg skulle input-- David kærlighed at bruge et eksempel som mor, ikke? Små bogstaver M-O-M til S, T lig små bogstaver M-O-M. Hvis jeg kørte dette gennem denne kode, hvorfor skulle det udskrive "du har skrevet forskellige ting?" Er der nogen der har brug for mere tid til at tænke over dette? OK, jeg tror, ​​vi er gode. Ja? PUBLIKUM: OK, så det er noget om hvor den er gemt i hukommelsen, ikke? PROFESSOR: Yep. PUBLIKUM: Hvor det er ligesom, hvis det string s opbevares ved hukommelsen spot-- Jeg opfinde denne-- er nul. PROFESSOR: Selvfølgelig. PUBLIKUM: Og snor t opbevares ved hukommelsen stedet, lignende, 167, og derefter nul ikke er lig 167. PROFESSOR: Præcis. OK, så husk denne utrolige åbenbaring vi forklarede jer denne sidste uge, at strings ikke rigtig eksisterer? Når vi skaber noget, der hedder streng er vi i virkeligheden skabe noget, der hedder char stjerne. Hvilket alt det er, er en pointer til en streng eller et array af chars. Og så i dette eksempel, hvis jeg var indtaste M-O-M vejen at min computer ville gemme det er inden hukommelse omvendt skråstreg nul, ikke? Disse fire tegn, tegn, ville blive gemt et sted. Og så disse fire tegn, omvendt skråstreg nul, gemmes et andet sted hen, ikke? Jeg har ingen idé om, hvor adresserne er, de er et eller andet sted i min computer. Men jeg ved ikke præcis ved, hvor de er. Når jeg opretter en streng s, alt det er virkelig er en pegepind til start af denne streng. Og når jeg opretter denne t-værdien, alt hvad der er en pointer til her. Og så når du forsøger at sidestille og tjek at se, om s er ligemænd lig med t, computeren er egentlig bare at vende tilbage til du adressen på denne m og adressen på denne m. Og fordi de er to separate stykker data der er lagret i to forskellige adresser i computeren, din computer er aldrig vil genkende dem som værende det samme. Er der nogen ønsker at giver et skud på, hvad vi ville have at gøre, hvis vi ønskede at rette dette og har en korrekt kørende program i stedet? Tænk over, at der for et par sekunder. Hvad skal vi nødt til at skifte til hente dette program fungerer den måde, vi ønsker det til at fungere? Ja, ønsker at tage et stik på det? PUBLIKUM: Kan vi forsøge at dereference den pointer og kontrollere gennem array? PROFESSOR: Det er én måde at gøre det. Så, hvad er dit navn igen? Jeg er ked af, at minde mig. Zee: Zee. PROFESSOR: Ja, så hvad Zee foreslået ville absolut arbejde. Højre? Vi kunne dereference markøren og faktisk gå og adgang de fysiske data inde på her. Og vi kan bare sammenligne hele skærmen. Vi kan sige, OK, pointer, give mig, hvad der er indeni her. Det ville returnere en meter. Og jeg vil sige, pointer, give mig, hvad der er indeni her. Returnere en m. Gør dem kamp? Ja. Så vi videre. Vi holder kontrol af hele to strenge hele vejen op til slutningen og se, om de er ens, hvis alle værdier er ens. Og hvis alle værdier er ens, så vi ved, strengene er sande. Absolut, det er, hvordan vi ville gøre det? Er der nogen forvirret på noget af dette? Hele konceptet af, hvordan strygere er virkelig bare pointere, og hvordan de egentlig ikke eksisterer? Og hvorfor vi får fejl lide den måde, vi får det? Fordi jeg garantere jer, pointers og snor allokering og hukommelse kommer til at komme op. Ja? PUBLIKUM: [uhørligt] dereference det, du bare sætte en stjerne [uhørligt] PROFESSOR: Right. Så for at derererence en pointer middel at gå til denne adresse af markøren og få de data, værdien der. Og den måde at gøre det er stjerne pointer. Du må ikke forveksle det. PUBLIKUM: [uhørligt]. PROFESSOR: Ja. PUBLIKUM: Så du kan bare skrive hvis stjerne er lige ligemænd stjerne t. PROFESSOR: Nå, nej. Ingen. PUBLIKUM: Det er ikke godt nok, ikke? PROFESSOR: Det er ikke, fordi du er kun kontrollere det første bogstav. Du er sandsynligvis kommer til at brug for en form af en løkke, der gentager gennem hver eneste tegn i begge strenge. Ja. Så hvis du ville bare kontrollere at se hvis de begyndte med det samme, du kan gøre, hvis, stjerne s er lig med stjerne t. Så ved du, at mindst de begyndte med det samme tegn. Ja? PUBLIKUM: Så den måde du gør det ville være som en indlejret for løkke eller pointer? PROFESSOR: Ja. Temmelig blot en for-løkke. Husk, David i klassen nævnt fri syntaktiske sukker? Og han havde denne meget forvirrende ting af stjerne t plus en, hvor det ville integrere igennem, og det flytter markøren? Jo lettere måde at gøre dette er blot t i. Så det er bare et array. Den måde, som du ville have en for løkke, der løb fra nul til jeg, hvor i er længden af streng, kunne du bare skriver, at i stedet for at gøre det Hele pointer, henvises ting. Så disse ting er præcis tilsvarende i din computer. Du fyre sandsynligvis ikke skal vide, at, men det er godt at bare lidt have i ryggen dit sind. Bare vide, at computeren anerkender forskellige blokke af kode som det samme. Da dette er bare langt mere bruger venlige for os at præsentere det, som det er et array. Det er bare nemmere. PUBLIKUM: Så brug strlen at kunne lide, get-- PROFESSOR: Ja. PUBLIKUM: OK. PROFESSOR: Du kunne bruge strlen eller, hvis du havde ikke strlen du kan bare gøre op indtil du rammer backslash nul for begge. Enten ville arbejde. Ja. PUBLIKUM: Så det er til dereference hver enkelt tegn, hvis vi var faktisk skrive denne kode, vi kunne bare gøre t parentes i gerne med stjernen foran det? PROFESSOR: Ja, lig lig s beslag i, og derefter holde bevæger jeg ned, indtil du rammer enden. Ja, det er hvad du ville gøre. Og jeg vil faktisk har en næste eksempel på, hvornår vi faktisk skrive strlen så du fyre vil slags af komme til at lege med det en smule. Så er alle klar på bare hukommelse, strygere, pegepinde, kvalitet adresser? Nogle højere koncepter niveau, som du vil sikkert behov for at vide om quizzen i morgen. Okay. God. Yep. OK, så en ting, som vi vil også spørge Dem, som vi gør hvert år på en quiz, er, antage, at du har glemt (som vi synes at glemme at gøre årligt) hvor header fil strlen deklareres. Og så vi er nødt til at omskrive det os. Her er en liste over retningslinjer at vi kan præsentere dig fyre, hvor du får at antage, at s strengen vil ikke være null. Du kan antage, at s vil være afsluttet med en omvendt skråstreg nul. Så du ved det er, hvad det vil ende med. Og for eksempel, at længde hej ville være fem. Så du kan antage, at goddag vil være fem, H-E-L-L-O. Du behøver ikke at antage, at backside nul regnskab for længden. Denne sidste ting her, ikke bekymre sig om heltalsoverløb. Er der nogen der kan huske hvad heltalsoverløb er? PUBLIKUM: Går ud over den Længden af ​​[højttalersystemet]. PROFESSOR: Ja, kan du forklare lidt, hvad betyder det? PUBLIKUM: Så jeg tror det går tilbage til at trunkere eksempel tidligere. Men hvis du har lige så mange numre at gå ud over antallet af bit at du faktisk kan tildele den at det vil bare slags afskåret. PROFESSOR: Ja, så på en typisk computer, hvor mange bits har vi? PUBLIKUM: 32? PROFESSOR: Ja, 32, til højre. Og så det er, hvad, fire milliarder, to milliarder? Fire milliarder, op til fire milliarder positive heltal, ikke? To milliarder negativ, to milliarder positive, afhænger af, hvordan du ønsker at gøre det. Og så dybest set vi kan have nok heltal, der kan gå op til to til 31 minus 1, ikke? Fordi når vi ramt to til den 32., gør vi ikke har så meget hukommelse i vores computer. Og så, i teorien, jeg kunne komme op med en række det er, ligesom, to til den 46.. Det er et kæmpe-ass nummer, men teoretisk kunne du. Og så heltalsoverløb er, hvis du forsøger at skabe et heltal, der går ud over, hvad din computer er i stand til at lagre. Og så du fyre til dette eksempel ikke har at bekymre sig om os at give dig en kæmpe streng, der er to til den 32. tegn lang. Det ville være virkelig betyder. Okay, så jeg bare vil give du fyre base struktur af denne. Du kommer til at skabe en funktion kaldet int strlen hvor en aflevering ind, en char stjerne, eller snor, pointer til strengen kaldes s. Okay, alle kopier det ned. Afkøle. Oops-- anden vej. Så dette er lidt ligesom en hårdere stykke problem, så jeg vil give jer måske fem til seks minutter til slags brainstorm og skrive denne funktion ud. PUBLIKUM: Vi har ikke tegner sig for [uhørligt], Vi behøver ikke at bruge heltal? PROFESSOR: Nej, det gør du ikke. Jeg vil give jer et tip. En while-løkke kan være meget nyttigt her. Ja. Her er slik. Candy vil også være tilgængelige for quizzen, tror jeg. Så jer vil være alle sukkersød op i morgen. Kan jeg-- du fik det. PUBLIKUM: OK. PROFESSOR: Ja. Måske 30 sekunder mere eller deromkring. Okay, hvis du er ikke gjort, ingen bekymringer. Vi vil bevæge sig gennem det sammen. OK. Så jeg har tænkt mig at bare layoutet den grundstruktur for denne funktion her. Int strlen. Først er der nogen ønsker at fortælle mig, hvad det int betyder? Vi er nødt til at have i denne funktion. PUBLIKUM: strlen [uhørligt]. PROFESSOR: Præcis. Så uanset hvad der sker herinde, vi nødt til at vende tilbage et heltal. Og som angivet i spec, vi ønsker at return-- Gå efter det gutter, bare holde ud. Det er alle gode. Spise det hele, så jeg ikke behøver at tage det tilbage, faktisk. Int bare betyder, at du er kommer til at vende tilbage et heltal. Hvad er det char stjerne s? Hvad betyder det? PUBLIKUM: Ligesom, hvad der bliver input i. PROFESSOR: Præcis. Og hvad er næsten den samme som char stjerne? PUBLIKUM: String? PROFESSOR: Præcis. Så alt vi gør er at give dette en pointer til en streng. OK. Afkøle. Også, glem ikke, hvis vi glemmer at give dig disse beslag, glem ikke at skrive dem selv. Fordi teoretisk, din kode er forkert, hvis du glemmer at skrive dem. Bare altid være opmærksom. Ligesom, små ting at du ikke mærke til når du programmerer på din bærbare computer, fordi din bærbare computer gør det for dig? Glem ikke, når du skriver i hånden. Ja? PUBLIKUM: Men hvordan forkert? Ligesom, får vi hele problemet forkert? PROFESSOR: Nej, nej. Må ikke bekymre dig. Det er faktisk teoretisk muligt for dig at få fuld point på et spørgsmål selv om din kode vil aldrig kørt i det virkelige liv. Jeg foreslår, at du ikke forsøger at gøre det ske. For eksempel, som hvis alt det er her er rigtigt, men du glemmer et kolon eller en konsol, din kode rent faktisk vil ikke køre. Men vi kan være barmhjertig. Ja? PUBLIKUM: Har du nødt til at kommentere på vores håndskrift? PROFESSOR: Nej, nej, nej bekymringer om der. Ingen kommentere. Stil skal være god. Ligesom, ikke smush alt på én linje. Vi vil ikke være glad med dig, hvis du gør det. Er der nogen ønsker at give mig den første linje? Tip, det er meget nemt. Ja? PUBLIKUM: Int, n er lig med nul. Netop oprettet tæller. PROFESSOR: Så vi ønsker nogle slags en tæller, ikke? Jeg bare for at nævne det "tæller" af hensyn til læsbarheden. Hvad ønsker vi at sætte det lig med? PUBLIKUM: Zero. PROFESSOR: Yep. Semikolon. Det er også meget mærkelige tegning semikoloner. Bare øve at gøre det. Så vi vil gerne først have en tæller af typen int. Fordi vi ønsker at tælle op, hvordan mange tegn eller bogstaver er i denne streng, ikke? Meget let første skridt. OK, måske en smule mere kompliceret nu, hvordan skal vi gøre det? Er der nogen ønsker at give mig linje kode der kan være i stand til at hjælpe løkke gennem hvad det er? Ja, modig sjæl i ryggen? PUBLIKUM: OK, så mens punkt asterisker, den yeah, stjernen i s, er ikke lig med nul, så gør noget? PROFESSOR: Det er rigtig, rigtig tæt på. Virkelig tæt. Så jeg har tænkt mig at tage fat to ting med det. Først og fremmest, det er ikke ligefrem nul. Hvad er det? Det er null terminator, som er backslash nul. Så de er forskellige i forhold til, hvordan de er gemt. Så du er virkelig tæt. Og for det andet, ønsker vi ikke bare flytte markøren. Vi vil faktisk adgang til værdierne, ikke? Og så hvordan gør vi det? Meget let. Tænker ikke pointere, tænker ikke minder. Gå tilbage til uge to af dette kursus. PUBLIKUM: [uhørligt]. PROFESSOR: Som i, husker du? Hvad er strenge? Hvordan bliver de gemt i hukommelsen? PUBLIKUM: De er rejst. PROFESSOR: De er rejst. Så hvordan gør vi adgang hver karakter inde? PUBLIKUM: [uhørligt]. PROFESSOR: Præcis. Så while-- hvad der foregår inde her? S for - PUBLIKUM: I. PROFESSOR: Åh, er jeg ikke eksisterer, gør det? PUBLIKUM: Åh, tæller? PROFESSOR: Vi kan bare bruge optælling, kan vi ikke? PUBLIKUM: Undskyld, jeg kaldte det i. PROFESSOR: Ja, det er alle gode. Vi har en variabel op her, det er allerede blevet erklæret som vores tæller. Så hvorfor vi ikke bare bruge det at bevæge sig gennem while-løkke? Giver det mening? Så mens s af count-- der nogen ønsker at give mig, hvad der sker efter her? PUBLIKUM: Det gør ikke lige. PROFESSOR: ikke lig, ikke? Det er det bang lig, udråbstegn lig, uanset hvad du fyre ønsker at kalder det ikke equal-- PUBLIKUM: [uhørligt]. PROFESSOR: Ja. Husk ét tilbud er for en char, dobbelte anførselstegn er for en streng. Vær forsigtig, når du bruger dem. Så når vi kigger gennem arrayet, det sidste tegn, vi ved, vi ikke ønsker at det er backslash nul. Så mens. Vi er ikke ved afslutningen af ​​strengen. Hvad ønsker vi at gøre inde? PUBLIKUM: Vi ønsker at føje til tæller så det tæller plus plus? PROFESSOR: Præcis. Så her vil vi gøre tælle, tælle plus plus. Mangler en mere linje. Vi er der næsten. Hvad skal vi glemmer at gøre? PUBLIKUM: Vender tilbage nul? PROFESSOR: Du ønsker at returnere nul? PUBLIKUM: Nej, vender tilbage til strlen. Vente. PROFESSOR: Hvilket er gemt i? PUBLIKUM: Count. Tælle. PROFESSOR: Præcis. Så her vil vi vende tilbage tæller. Fordi hvad vi er gør her ultimately-- vi har en tæller variabel, der er kommer til at inkrementere gennem vores streng. Vi kommer til at holde ud, holde gå, rundt og rundt i denne sløjfe. Og mens vi er ikke på slutningen af ​​denne streng, som er nul terminator. Og hver gang vi går igennem det, vi tilføjer til vores tæller. Og vi går videre sammen i dette array. Og i slutningen, når vi ramte null terminator, vi ved, åh, vi kan bryde, returnere optællingen. Vi har vores strlen. Er alle får, hvordan dette blev gennemført? Mens loops-- jeg ved, at vi ikke har gjort for meget med dem, men de er som regel meget, meget nyttigt, hvis du ved ikke, hvad du stopper tilstand nødvendigvis må være. Spørgsmål? PUBLIKUM: Kan vi skriver null på mens tilstand? PROFESSOR: Mens? Ja, så i dette problem, jeg havde dig fyre antage, at s ikke vil være null. Fordi husk, teoretisk, hvis jeg gav dig en pointer, der var for stor hukommelse, det ville give dig den null, ikke? Det er, hvad operativsystemet Systemet ville gøre. Så hvis jeg ikke fortælle dig at påtage s ville være nul, er du nødt til at tjekke. Så heroppe, ville du gøre, hvis s lig er lig nul, vende tilbage en. Noget i den stil. PUBLIKUM: [uhørligt] nul. PROFESSOR: OK, jeg vil fortælle dig, hvorfor vi ikke kan gøre det. Fordi husker i hukommelsen, højre, her. Vi vil gå her. Du har fået gigantiske blokke hukommelse alle med gitre der lagrer forskellige værdier, ikke? Og så alle en streng is-- for eksempel, hvis vi skal input hej, det ville være H-E-L-L-O backslash nul, højre? Og så hvem ved, ligesom tilfældig ting, der er i her efter det. Vi ved faktisk ikke, hvad der er der. Og så hvis du skulle gøre i stedet for omvendt skråstreg nul, null, kan det ikke være null. Fordi det bare kan betyde nogle tilfældige andre ting som ikke hører hjemme i din streng. Og så den måde, at vi altid ved, at en streng ender er med en omvendt skråstreg nul. Og så der er altid, hvordan vi check for at se enden af ​​en snor. Null, alt det betyder er, hvis du har en ikke-eksisterende pointer, først og fremmest, eller hvis din hukommelse er lige så stor, at du kan ikke returnere det, så det ville være nul. Så vær meget forsigtig, når differentiere forskellen mellem null og backslash nul. Ja. Alle OK med dette? OK. Så havde jeg jer skrive strlen. Indpasses kunne vi også bede dig skrive ud A til I, så husk at "Atwoa" eller hvad du fyre vil kalde det? Denne funktion i Vigenere og Cæsar, at konverterer en ASCII værdi til et heltal? Det også er kommet op på tidligere quizzer funktioner, vi har bedt dig om at skrive. Stort set enhver funktion at du har brugt, og er meget let at skrive dig selv, sensorer kan lide, er lavere, er øverste, for at sænke, til øverste. Funktioner, der ville konvertere en snor fra med små bogstaver til store bogstaver. Vi ved alle, hvordan man gør det, ikke? Det er temmelig let. Blot ønsker at sikre, at du can-- det er den samme tankegang. Du skal bare gentage gennem og du vende tingene. Du enten tælle eller når du slå tingene anderledes. Jeg ville suggest-- I ved ikke om vi skal at bede dig om at huske, hvad kapital A eller kapital Z, eller små bogstaver A eller små bogstaver z er i Ascii, men jeg vil foreslå måske skrive det ned i tilfælde Det gør vi. Bare så du fyre har en reference. Ligesom store bogstaver A er, hvad, 197? Og så små bogstaver er ligesom 50 noget. 65, ja, der du går. Så bare temmelig meget kender Forskellen mellem dem er 32. Det er temmelig vigtigt. Ja. Er jeg god på dette? OK. PUBLIKUM: Vi kunne teoretisk skrive nogle af disse ned samt på vores little-- PROFESSOR: Du teoretisk kunne bare kopiere funktionen ned. Det er sandt. PUBLIKUM: Ikke [uhørligt]. Professor: Du fyre har et ark. Du fyre har en note ark. Du kan skrive det. Du kan skrive det. Du kan gøre hvad du vil med det. Ja. Så teoretisk, hvis du vil, gå til. PUBLIKUM: [uhørligt] men vi kan ikke rigtig nødvendigvis behøver at huske værdien, kan vi bare bruge til øverste eller lavere funktion, ikke? PROFESSOR: Ja. Men hvis vi gav dig et spørgsmål der siger skriv til øverste, så ville du nødt til at skrive det. Så du fyre kan antage, at du fyre har adgang til alle funktioner, men hvis du vil bruge til at øvre eller til lavere, hvad vil du også nødt til at gøre? PUBLIKUM: [uhørligt] bruge CS50 [uhørligt] PROFESSOR: Er det CS50.h? Vær forsigtig der. Så til øverste, for at sænke, er øverste, er lavere, funktioner, der involverer strenghåndtering er alle inden for enten den Ascii eller inden for matematik biblioteket eller inden strengen biblioteket. Så hvis du fyre bruger dem funktioner, være omhyggelig med at huske at medtage denne header. Så måske også noget, man vil medtage i dit ark, hvad er header? Hvad er de biblioteker du har brugt? Hvilke funktioner er inden for disse biblioteker? Det er vigtigt. Ja? PUBLIKUM: Kunne vi bare cop ud og gøre hashtag gennem absolut hvert bogstav, vi nogensinde har set ligesom på alle spørgsmålene? PROFESSOR: Du kunne. Jeg ved ikke, hvor glad vi vil være at lønklasse at quizzen når hvert stykke kode er dobbelt så længe det skal være. Jeg ved det ikke, vi måske tage et punkt for stil. Men teoretisk din kode ville være rigtigt. Du fyre kunne cop ud og bare omfatter alt. Det er også fint, ja. PUBLIKUM: [uhørligt]. PROFESSOR: Ja. Jeg vil foreslå ikke at gøre det selv. Ja. PUBLIKUM: Cool. PROFESSOR: Godt spørgsmål. PUBLIKUM: Så det værst tænkelige scenarie. PROFESSOR: Den værste tilfælde. Hvis du helt glemmer, du kunne gøre det. Ja. Jep, koden er lige der. Jeg brugte n i stedet for tæller, men, du vide, hvad flyder din båd. PUBLIKUM: Vent, så vi ville ikke have at hashtag omfatter fordi vi er starter ved int? PROFESSOR: Ja, jeg bare ud fra, at Vi blev bedt om at skrive funktionen. Hvis du ønskede at være sikker, du kunne sandsynligvis sætte det der. Men jeg bare ikke gider, ja. Jeg ved ikke engang, om du brug for bibliotek for dette. Fordi du er ikke rigtig udskrivning ud af noget eller noget, ikke? Ja, jeg ved ikke, om du har brug for et bibliotek. OK. Dette er også en smule mere sammen linjerne i hukommelsen manipulation. Denne form for lidt tricky. Tænk over dette. Du har en funktion kaldet funk. Jeg kunne have navngivet det uanset hvad, men jeg vælger at kalde det funk. Jeg har det over min vigtigste. Husk, du vil have en funktion efter din vigtigste, du ønsker at sikre, at du omfatter prototypen på toppen. Men i dette tilfælde var det så kort at jeg følte, at jeg kunne bare omfatter det oven på vigtigste. Jeg behøvede ikke at have prototypen, fordi det er allerede skrevet ovenfor. Så alt jeg gør i min vigtigste funktion skaber heltal x er lig 10. Jeg ringer min funk-funktion, og derefter udskrive op noget. Og så er der faktisk hvad funk gør. Du fyre ønsker at tænke igennem dette. Fordi det er lidt tricky. Det er meget, meget vanskeligt, faktisk. Tænk igennem, hvad dette program ville være udlæsning. Jeg vil give jer to minutter. Gode ​​diskussioner? Publikum: Ja. PROFESSOR: Ja. Okay, så dette er vanskelig for en grund. Og det er derfor, jeg ønskede at bringe dette til alles opmærksomhed. Er der nogen ønsker at give mig et forslag, et forsøg? Hvad ville det udskrive? Helt fint, hvis du tager fejl. Ja? PUBLIKUM: Jeg synes det er 100 og derefter 10 på to separate linjer. PROFESSOR: Og en 10? Er der nogen der har andre gæt? Ja? PUBLIKUM: Måske kun 10, fordi funk ikke returnere noget? PROFESSOR: OK, så vi har gæt nummer et er, at gætte nummer to er bare at udskrive 10. Er der nogen der har andre gæt? OK. Så lad os gå gennem dette, ikke? Når du får et stykke kode, ikke bare se på det og være ligesom, ah, der er så mange ting! Jeg er så forvirret! Ligesom, berolige dig selv ned. Bare vide, at du bare kunne se gennem koden linje for linje. Det er alt det er. Det er som at læse en bog. Så med enhver funktion, vi starter altid ved main. Så vi kommer til at starter ved int main tomrum, selv programmets allerede kørt ned, ikke? Start ved i main tomrum. Int x er lig med 10. Så jeg har tænkt mig at slette dette. Jeg har tænkt mig at tegne hukommelsen lige så du fyre kan slags se, hvad der sker. Husk hernede har vi vores stack? Heroppe har vi vores dynge et sted heroppe. Stak vokser op, ikke? Og inden for stakken, har du lysnettet funktion samt alle mains lokale variable. Så her, int x svare til 10. Inden for vores vigtigste funktion er vi at skabe en variabel kaldet x. Vi indstilling at lige til 10. Her har du nogle x, og du er indstilling, at lige til 10, til højre, inden vigtigste. Alle godt? Fungere. Så nu, inden vores vigtigste funktion, vi kalder den funktion, vi har skrevet ovenfor. Så vi nu indtaste den anden funktion. Vi kommer til at oprette en anden variabel int x er lig med 100. Hvad sker der her på stakken? Hvad sker der, når du kalder en funktion, der skaber nye variabler? Hvad sker der her på stakken? PUBLIKUM: [uhørligt] bunker på toppen? PROFESSOR: Ja. Så det faktisk skaber en kopi. Og den slags bunker på toppen. Tænk på den stack-- en stak af bøger, en stak af noget. Bunker på toppen, først i sidste ud, sidst ind, først ud. Så det kommer til at skabe en x her. Det kommer til at have alle funcs variabler. Stor. Så nu har vi to forskellige x'er at repræsenterer to meget forskellige ting. Så vi kommer til at udskrive ud heltal af x. Så lad os udskrive 100, ikke? Fordi her er det 100. Så det er det første, at det kommer til at udskrive. Da denne funktion returnerer ingenting, nu, at funktion, den linie i main gøres. Alle godt med mig indtil videre? Så er vi nu gennem to ud af tre linjer af vores vigtigste funktion. Nu skal vi til den tredje linje. Vi kommer til at printf. Hvad er det x indenfor main? Hvad betyder det repræsenterer? Hvilken værdi er x nu? PUBLIKUM: 100. PROFESSOR: Det er 100? PUBLIKUM: Stadig 10. PROFESSOR: Stadig 10. Ja. Fordi husk, inden vores funk, x er lig med 100. Men hvis vi vende tilbage til vores vigtigste funktion, at variablen er lagret i en andet sted på vores stack. Så nu er vi nødt til at gå tilbage til vigtigste stak, lysnettet lokale variable. Og her x er lig med 10. Og så vi kommer til at udskrive 10. Så hun var fuldstændig ret. Vi kommer til at have den produktion på 100 og 10. Ja? PUBLIKUM: Når du malloc, er det bunke eller stak, der er [uhørligt]? PROFESSOR: Når du malloc, du tager hukommelse fra den bunke og tildele det. Så du ikke behøver at rode med noget af dette. Så jeg gætter de større takeaway her er noget, der hedder rækkevidde. For dem af jer, der var på revisionen session i aftes, vi talte kort om dette. Scope definerer hvordan og når dine variabler eksisterer. Eller inden for, hvad der rammer eksisterer dine variabler. Stort set den tommelfingerregel generelt er, din variables-- hvis du opretter dem inde krøllet braces-- de findes kun inde disse krøllede parenteser. Så for eksempel i vores funktion funk, kan du se disse to seler. Hvis du opretter noget inde i det, chancerne er alt du laver er skabe en stabel og lagring, at der. Samme ting i main. Det er bare gemt inde i main. Også du ønsker at være meget, meget forsigtige her. Fordi omfang også låner sig til forskellige eksempler. Så for eksempel en for loop, for int i er lig med 0. Jeg er mindre end, ved jeg ikke, 10. Jeg plus plus. Og du har fået koden inde i det, ikke? Hvor gør denne variabel, Jeg, faktisk kun eksisterer? Kun indersiden af ​​din for-løkke. Så jeg vil vædde mange af jer har sandsynligvis stødt denne fejl, når du laver programmer i din psets. Hvor mange af jer har prøvet at bruge i uden for en for-løkke og havde en fejl? Ligesom en objekt uden visning heltal eller sådan noget? Grunden til, at der sker er fordi her er du at skabe noget, som kun findes inden for din for-løkke. Og hvis du forsøger at bruge det, jeg ikke faktisk eksisterer uden for det. Så dybest set en computer siger, jeg ved ikke, hvad du taler om. Alt jeg ved er, at en jeg var her, men nu ikke længere. Så hvis jeg var at skabe et for-løkke indeni, ikke? Og jeg har tænkt mig at oprette en anden, ligesom int j, og har det gøre hvad. Og du har en kode inde på denne løkke, kun j findes her. Men som også findes inden i. Og så j kun eksisterer under denne for-løkke, mens jeg eksisterer i det hele. Alle klar? Samme ting med betingede udsagn Hvis du ønsker at oprette noget. Samme ting med, mens sløjfer, hvis du vil oprette noget. Det er noget at være meget, meget forsigtige. Så det var en rigtig god problem i fornemme, at det demonstrerede to ting. Det demonstrerede første, omfang. Og det påvist også allokering hukommelse. Fordi du fyre skal vide, at funktioner vokser opad i stablen. Og at når du ringer funktioner, du opretter væsentlige en ny stak hukommelse. Som er meget forskellig fra hvad din lysnettet hukommelse er. Ja. Puha! Alle OK på det? Det var forvirrende. Meget gode emner til at gå over, fordi du sandsynligvis kommer til at få nogle tricky ting som at der på quizzen. Ja. Afkøle. Jeg vil sætte du får 100 på én linje og derefter 10 på den anden. Ja, meget god. OK, nu er du fyre får chancen for at være TAS. Du kommer til at svare på alle de dejlige e-mails, at jeg nogle gange får. Så Kære Andi, jeg ser jeg synes noget er går galt med min compiler. Jeg er sikker på, at min kode er korrekt, men jeg får hele tiden en segmentering fejl hver gang jeg kører. Hvad sker der? Please hjælp, masser af kærlighed. Hvis du fyre fik noget lignende at hvordan ville du reagere? Det er faktisk meget almindelig spørgsmål, vi vil bede dig. Er, hvis vi vil give dig en scenarie, giver vi os dit bedste gæt på, hvad der foregår. Nogen der har en kniv på, hvad der foregår? Ja? PUBLIKUM: Måske derefererede den null, noget i retning af markøren peger på noget null. PROFESSOR: Ja, det ville være en eksempel på, hvornår der ville ske. Men hvad er det større billede af, hvad der foregår her? PUBLIKUM: Er det du prøver at få adgang til hukommelse, som du ikke er formodes at have adgang til? PROFESSOR: Præcis. Så tænk på en seg fejl, en off grænser, begrænset område i hukommelsen at du ikke skal være rørende. Så temmelig meget, når du forsøger at index-- som for eksempel, du har erklæret en vifte fra nul til ni. Men du forsøger at røre den 10. værdi, behøver du ikke har adgang til det. Fordi du ikke har erklæret den. Og så din computer går at se på det være ligesom, uh oh, du forsøger at gå uden for rammerne af et indeks. Jeg har tænkt mig at give dig en segmentering fejl. Tænk på som segment, ikke? En ekstra segment, fejlen er når du forsøger at bryde noget og du bør ikke være der. Segmentering fejl er når som helst du forsøger at røre ved ting at du ikke skal være rørende. Så almindelige eksempler er et indeks. Selvfølgelig, hvis du forsøger at røre ved, der var nul, det ville også fungere så godt. Hvis markøren forsøgte at røre ting, der ikke bør røre, der kunne også arbejde så godt. Mest typisk vil du se i et array. Alle godt? PUBLIKUM: Så hvis du ønsker at få adgang til det 10. punkt og der er kun en grænse ni eller noget. PROFESSOR: Ja, præcis. Rimeligt meget. Afkøle. Kære Andi. Så vi har fået disse vidunderlige ting kaldet slags. Hvis Flet sort-- som vi saven i eksempel når David gjorde det hele ting i class-- hvorfor, hvis det er så meget hurtigere end nogen af ​​de andre former, hvorfor vi selv gider at kende nogen af ​​de andre former? Hvad er dette spørgsmål virkelig beder dig? Hvad er de tre word-- PUBLIKUM: Hvad er det trade-off? PROFESSOR: Præcis. Det er, hvad spørgsmålet beder. Hvad er det trade-off mellem Mergesort vers andre former? PUBLIKUM: Tager hukommelse, right? PROFESSOR: Har du forklare, at lidt mere? Først lad os forklare Merge butik. Hvordan mergesort virker? PUBLIKUM: Så det virker ved dividere alt i halve og derefter sætte det sammen og omfordeling det i orden, ligesom hver gang du flette sæt. PROFESSOR: Temmelig meget. Så jeg kan trække det ud, men det ville tage mig fem minutter til at trække det ud. Se tilbage på til afsnittet dias hvor vi dækkede mergesort. Nøjagtig. Så den måde mergesort værker er det opdeler ting i halve, og så er det bare ser på første værdier af dem alle og sorterer kun det. Løbende skaber nye arrays og sætter tingene mere og mere i orden. Og så mens det er virkelig, virkelig hurtigt, fordi it's-- du ved, en binær søgning er n log n. Du skaber så mange forskellige arrays, som du er ved anvendelse af en stor mængde hukommelse. Og så mens det er hurtigere, afvejningen her er, at du bruger mere hukommelse. Og så tip, sorterer og søgninger blev dækket meget mere i år end de har været i år tidligere. Du fyre bør se, at udslag på quizzen. Jeg ville helt sikkert bruge tid går over, hvad alle de forskellige slags er, hvor binær søgning, hvordan lineær søgning arbejde. Sådan måske pseudokode kode dem ud. Hvad er de kører tider? Noget som kører tider er meget let at kopiere ned på en note ark, højre? Det er virkelig svært, når du er i midten testen og du er nødt til at finde ud af. Kopier den ned. Jeg garanterer dig, du er vil få brug for at vide, at. Hvad er de afvejninger? Worst case, bedste case scenarier for dem alle, meget få at vide. Ja? PUBLIKUM: Har vi brug for at vide, hvordan man kode mergesort? Ligesom, har vi brug for at husker den rekursive? PROFESSOR: Jeg tvivler meget det, bare fordi det er ligesom temmelig kompliceret. Men det kan ikke være umuligt, hvis vi bede dig om at bruge pseudokode det ud. Ja. Jep, OK, en mere. Dette kan være kommet op i du sidste brik i lidt. Ja? Har alle høre det? OK, så temmelig meget første af alt, hvilken type program ville være at give dig et output som denne? Husk vi bad dig om at lære om denne nye type debugging værktøj? Hvad var navnet på den? Valgrind, højre Det var et program, hvor man kunne kalde det kunne holde styr på alle den hukommelse, du er bruge i dit program, og foregik. Så hvis du har noget, ligesom, helt tabt, 40 bytes i en blok. Sandsynligvis du ikke huske at frigøre den. For hvis du bruger bytes af hukommelse, det betyder at du har adgang til, at hukommelsen, men du har ikke været i stand til at frigøre. Så du ønsker at gøre sikker på, at du er også hjælp free-- det er en function-- at befri alle af hukommelsen omfordelt ved malloc. Afkøle. Så dette dias, vil jeg have det op. Det er overalt i en masse foredrag, i en masse afsnit dias. Du virkelig ønsker at sikre, du bare vide alt dette. Enten i din note ark eller hvis du ønsker at huske det, er du velkommen til. Det er virkelig, virkelig, virkelig vigtigt. Også en meget god spørgsmål, vi kan stille. Hvorfor er Udvælgelse sort-- se på Udvælgelse sort-- alle runtime er n potens. Uanset hvordan listen kommer til dig som, så hvorfor er Selection sort-- Jeg vil give jer 30 anden mener om dette. Fordi det er slags forvirrende. Det indebærer en vis begrebsmæssig eftertanke. Hvorfor skulle de køre tider være den samme i både de værste og bedste case scenarier? Ja? PUBLIKUM: Fordi Selection sortere hver position eller plads i denne lille vifte ting eller hvad. Så selv i bedste fald, selv om det helt er sorteret, det ville stadig være ligesom, OK, en. I mit første sted jeg har en. Og gå gennem dem alle. OK, den ene er den mindste. Og så går det igen og er ligesom, OK, to er den mindste af alle de ting. Men det har stadig til kontrollere hver og én. PROFESSOR: Ja. Altså for eksempel, lad os bare sige Vi har en liste, der allerede er sorteret, et array 04:59. Den måde, Selection slags er, at det går igennem, kontrollerer disse to. Så kontrollerer det de to. Og så tjekker det, og det kontrollerer. Det holder kontrol dem alle, uanset om eller ej Det er faktisk sorteres. Fordi det er simpelthen den måde den slags virker. Og så dette spørgsmål er lidt ligesom en konceptuel spørgsmål, vi vil bede. Hvor første, du vide, hvad valg Sorter er, højre, for at kunne at besvare spørgsmålet. Du skal være i stand til at forstå begrebsmæssigt, hvad der foregår. Og så kan du anvende det og tror, ​​OK lad os bare forestille os værst tænkelige scenarie. De er alle i faldende rækkefølge. Hvordan ville det påvirke det? Hvad hvis det er stigende orden? Hvis det allerede er ordnet? Hvordan ville det påvirke runtime? Og så valg Sorter, vil du bemærke at det faktisk ikke noget. Fordi du tjekker alle de værdier uanset hvad der sker. Og så gode ting at huske. Hvorfor nogle slags adskiller sig fra andre og hvordan man bedst og værst tænkelige scenarier ville påvirke dem alle. Jeg har tænkt mig at virkelig ramt i sorterer fordi det vil være på quizzen. Ja. OK. Der er seks minutter tilbage. Jeg kan tage tre minutter af spørgsmål. Jeg kan også hænge ligesom 20 minutter efter sektion Hvis du ønsker at stille spørgsmål så godt. Er der nogen bare har virkelig kort spørgsmål eller konceptuelle spørgsmål de er uklart, om lige nu? Ja? PUBLIKUM: Kan du tale lidt lidt om bitvis operatører? PROFESSOR: Ja. Så bitvise operatører er noget, som du sandsynligvis måske bare ønsker at sætte på din plade. Så quickly-- Jeg ønsker ikke at gå for meget i dybden fordi Harvard, i deres bedømmelse session, dækket det temmelig godt. Bitvis operatør, der er fem af dem, ikke? Der er denne, som er x eller funktion, der er tegnet, som er og. Pipe, som er eller. Og så har du to forskellige typer af skift. Hvis jeg giver dig to værdier, hvis Jeg giver dig, ligesom, en og en. Hvad ville det evalueres til? Hvis jeg giver dig ægte og sandt, sandt? Hvad med sandt eller falsk? Stadig sandt, ikke? Fordi der er en eller. Vi vil sandsynligvis give dig tal. Så husk, en er lig sandt, nul lig falsk. Og vi kan give dig disse ting og bede dig om at fortælle os, hvad der sker. Harvard dækker det inden for den første 10 minutter af deres undersøgelse session virkelig, virkelig godt. Så du fyre ønsker at gøre sikker på at du ser tilbage på det. PUBLIKUM: Er pisa5 vil være på quizzen? PROFESSOR: Nej. Må ikke engang se på pisa5 lige nu. Det er svært. Bare ikke engang gider kigge på pisa5. Men som nogle hints og forslag, jeg vil foreslå du starter pisa5 så snart quizzen er slut. Dette vil være den sværeste uge, men så du fyre vil blive bestået det på bakkerne af rullende grønne og hvalpe, og det er fint. Denne klasse får betydelig lettere efter det femte pset. PUBLIKUM: Kontortid er søndag, mandag? PROFESSOR: Ja, så kontortid vil søndag til mandag for pset. Kontortid aften væsentlige vil bare være en anmeldelse af quizzen. Hvis nogen ønsker at komme ind og spørge TAS et spørgsmål, vil vi være der. Jeg tager måske endnu et spørgsmål hvis nogen har et spørgsmål? Ja? PUBLIKUM: Når du er definerer knuder, [uhørligt] hvis du siger node stjerne og derefter næste, gør computeren automatisk forstå, at du er henvise til en anden pointer? PROFESSOR: Nej. PUBLIKUM: Du skal sammenlænke det [uhørligt]? PROFESSOR: Så dybest set den struct af en node er, huske, det er ligesom du opretter noden og så har du en pegepind kaldes næste. Alt du gør er at have strukturen er. Du er nødt til at tildele at pointer eller andet sted. Så computerne ikke ved, hvad det gør endnu. Du er nødt til rent faktisk at tildele den, når du opretter din linkede liste. Og det er, hvad hovedsageligt pset 5 vil være på. Så ingen bekymringer om noget af det lige nu. PUBLIKUM: Så vi behøver ikke at fokuserer for meget på linket liste, bare den generelle opfattelse? PROFESSOR: Bare temmelig meget stakke, køer, link lister, træer, hash tabeller. Bare være i stand til at vide, hvad de er. Vi kommer ikke til at spørge du kan lide noget konkret fordi vi ikke har virkelig gjort et pset at dækker noget af det endnu. Så i de sidste to minutter før Jeg sætte dig fri til at dræbe denne quiz. Temmelig meget, ligesom, tænke over, hvordan langt du fyre er kommet i denne klasse. Jeg husker, da uge to af denne klasse, nogle af jer tilbringe tre timer at skrive vand. Hvor lang tid vil det tage dig fyre til at skrive vand nu? 30 sekunder, måske? Tænk på, hvor meget jer har lært. CS er en virkelig, virkelig hårdt emne. Der er ingen tvivl om det. Det er svært, det er derfor ingen studerer det. Det er bare svært. Og det er helt fint. Og jeg er virkelig stolt over, at alle har gjort det så langt. Psets er ikke let. De tager en masse tid. Jer, vil jeg aldrig bede dig om at skrive spillet af 15 eller Vigenere på pset. Ingen grund til at bare flipper ud over det. Alt vi tester her er at vurdere din konceptuelle viden, samt som nogle af dine grundlæggende færdigheder i kodning. Testen er udviklet til være virkelig udfordrende. Ligesom, er det designet for dig at ikke få 100. Den er også designet for dig at sandsynligvis ikke være i stand til at slutte i 75 minutter. Og det er helt fint. Jeg er en studerende selv. Jeg ved, jeg hader det, når jeg går ud af en quiz være ligesom, lort. Det var virkelig hårdt. Sandsynligvis hvad der kommer til happen-- og det er helt fint, Jeg fortæller jer lige nu. Midlerne på disse ting er ikke høje overhovedet. Og for dem af jer, der har været at få, ligesom, treere på dit problem sæt, det betyder ikke, du er kommer til at få en 60 procent i denne klasse. Hvis du får 60% på quiz, der ikke betyde, at du kommer til at få en D i denne klasse. Vi ser, især jeg, for dem af jer i min afdeling, Jeg se, hvor hårdt du fyre alle arbejder. Og jeg holde styr på det. Du fyre vil være fint. Der er ingen institutionelle hukommelse af lykke i slutningen af ​​semesteret. Fordi alle Harvard børnene fortæller deres venner, åh, vil du være fint. Ingen fortæller jer det her. Så jeg er nødt til at fortælle jer det her. Du fyre vil være fint. Jeg er så stolt af alle jer. Testen vil være svært. Undersøgelse for det, og bagefter bare smide det væk. Gør dig klar til at lære nye ting. Og spiser slik. Vi har har masser af slik. Få en god nats søvn. Må ikke ikke sove, fordi der ville være virkelig dårlig. CS er en masse logik. Hvis du ikke sove, kan du ikke fungere, og din hjerne kan ikke fungere. Og jeg vil være her for den næste 20 minutter, hvis nogen ønsker at hænge. Du fyre kommer til at dræbe den. Held og lykke.