1 00:00:00,000 --> 00:00:02,880 >> [MUSIC SPILLE] 2 00:00:02,880 --> 00:00:10,580 3 00:00:10,580 --> 00:00:13,500 >> SPEAKER 1: Dette er CS50 og Dette er begynnelsen av uke to. 4 00:00:13,500 --> 00:00:18,400 Så, la oss hoppe rett inn i noe som er buggy, så å si. 5 00:00:18,400 --> 00:00:24,015 Så, over her er CS50 IDE og jeg har trukket opp på forhånd denne screen-- jævla 6 00:00:24,015 --> 00:00:25,070 det. 7 00:00:25,070 --> 00:00:25,760 Spoiler alert. 8 00:00:25,760 --> 00:00:26,260 Greit. 9 00:00:26,260 --> 00:00:29,060 Jeg har trukket opp denne skjermen her, som har et meget enkelt program. 10 00:00:29,060 --> 00:00:32,659 Hvis vi bla nedover, mest dette er bare kommentarer, 11 00:00:32,659 --> 00:00:36,730 men her i ledningene 13 via 17 har vi et program. 12 00:00:36,730 --> 00:00:40,580 >> Det er syntaktisk gyldig, noe som betyr at hvis Jeg kompilere den, det vil kompilere og kjøre, 13 00:00:40,580 --> 00:00:41,920 men det er buggy. 14 00:00:41,920 --> 00:00:47,330 Dette programmet hevder i kommentarfeltet opp toppen at det skal skrives ut 10 stjerner, 15 00:00:47,330 --> 00:00:48,870 men det gjør det ikke. 16 00:00:48,870 --> 00:00:53,290 Og basert på erfaring, eller snart å være erfaring med C, 17 00:00:53,290 --> 00:00:56,820 kan du logisk skjelne hvorfor dette er, faktisk, buggy? 18 00:00:56,820 --> 00:00:57,804 Yeah? 19 00:00:57,804 --> 00:00:59,220 PUBLIKUM: Det går fra null til ti. 20 00:00:59,220 --> 00:01:01,884 Det er 11 gjentakelser. 21 00:01:01,884 --> 00:01:02,550 SPEAKER 1: Yeah. 22 00:01:02,550 --> 00:01:06,030 Så, det kommer fra null opp gjennom og lik 10, 23 00:01:06,030 --> 00:01:08,140 som selvfølgelig er 11 gjentakelser. 24 00:01:08,140 --> 00:01:10,020 Så det kommer til å print, ja, 11 stjerner. 25 00:01:10,020 --> 00:01:13,040 Så, informatikk konvensjonen i de fleste programmeringsspråk 26 00:01:13,040 --> 00:01:15,270 er faktisk bare å begynne å telle på null, 27 00:01:15,270 --> 00:01:18,800 men telle opp til, men ikke gjennom verdi at du faktisk bryr deg om. 28 00:01:18,800 --> 00:01:21,216 >> Nå er dette en ting som tar litt tid å venne seg til 29 00:01:21,216 --> 00:01:25,350 og selv Scratch, utformet som det er for ikke-programmerere eller ikke datamaskin 30 00:01:25,350 --> 00:01:28,070 forskere og for barn i stor grad, er utformet for å ha 31 00:01:28,070 --> 00:01:29,570 du begynner å telle vanligvis på en. 32 00:01:29,570 --> 00:01:30,277 Og det er greit. 33 00:01:30,277 --> 00:01:33,110 Du kan absolutt begynne å telle på en hvis det er mer behagelig. 34 00:01:33,110 --> 00:01:37,210 Og telle opp til og gjennom 10, men vil du innse spesielt denne uken 35 00:01:37,210 --> 00:01:39,950 og utover det så mange ting i programmering 36 00:01:39,950 --> 00:01:42,465 antar at 0 er den første sifret som du telle, 37 00:01:42,465 --> 00:01:45,590 at du kommer til å synes det er lettere bare for å komme inn i denne vanen med start 38 00:01:45,590 --> 00:01:49,490 fra null og teller opp til verdien du bryr deg om akkurat nå fra 39 00:01:49,490 --> 00:01:49,990 får gå. 40 00:01:49,990 --> 00:01:50,990 >> Så, har som fikset dette. 41 00:01:50,990 --> 00:01:53,670 Vi endret mindre enn eller tilsvarer i underkant. 42 00:01:53,670 --> 00:01:56,050 La oss ta en titt på et andre eksempel her. 43 00:01:56,050 --> 00:01:59,585 >> Så også hevder dette programmet i sin sier opp toppen at det skal skrives ut 44 00:01:59,585 --> 00:02:02,260 ti stjerner, men det gjør det ikke. 45 00:02:02,260 --> 00:02:05,540 Hva er feil her? 46 00:02:05,540 --> 00:02:07,930 >> Så, what-- og sorry, la det være klart. 47 00:02:07,930 --> 00:02:08,610 10 stjerner. 48 00:02:08,610 --> 00:02:11,644 Én per linje, men det gjør det ikke. 49 00:02:11,644 --> 00:02:14,810 Så, faktisk, la meg gå videre og kompilere dette fordi det er litt mindre 50 00:02:14,810 --> 00:02:16,900 tømme basert på den beskrivelsen. 51 00:02:16,900 --> 00:02:18,720 La meg gå inn i vår kilde katalogen. 52 00:02:18,720 --> 00:02:25,110 Gjør buggy én prikk slash, buggy en. 53 00:02:25,110 --> 00:02:28,680 OK, jeg ser 11 stjerner, som er fortsatt problematisk, 54 00:02:28,680 --> 00:02:30,090 men de er også alle på én linje. 55 00:02:30,090 --> 00:02:31,500 Hva er problemet her? 56 00:02:31,500 --> 00:02:32,339 Yeah. 57 00:02:32,339 --> 00:02:33,255 PUBLIKUM: [uhørlig]. 58 00:02:33,255 --> 00:02:36,194 59 00:02:36,194 --> 00:02:36,860 SPEAKER 1: Yeah. 60 00:02:36,860 --> 00:02:40,210 Så dette er en finesse som du kan husker meg å lage kort omtale av. 61 00:02:40,210 --> 00:02:42,793 Selv om alt ser pen, og det er pent rykket inn, 62 00:02:42,793 --> 00:02:45,850 og den slags ser Scratch-lignende ved at ledningen 16 og 17 er, 63 00:02:45,850 --> 00:02:47,600 ja, rykket inn under dette for loop. 64 00:02:47,600 --> 00:02:48,400 Det er uvesentlig. 65 00:02:48,400 --> 00:02:50,460 Datamaskinen ikke vet eller se tomrom. 66 00:02:50,460 --> 00:02:52,910 Tomrom er bare for oss mennesker, stilistisk. 67 00:02:52,910 --> 00:02:57,010 Datamaskinen vet når du har klammeparentes, som ville, faktisk, 68 00:02:57,010 --> 00:02:58,280 løse dette problemet. 69 00:02:58,280 --> 00:03:02,350 >> Så, hvis vi faktisk gikk inn og eksplisitt satt i disse klammeparentes 70 00:03:02,350 --> 00:03:05,220 som vil løse dette problemet ved å gjøre klart til kompilatoren 71 00:03:05,220 --> 00:03:07,930 at jeg faktisk ønsker å utføre to linjer med kode igjen, 72 00:03:07,930 --> 00:03:09,220 og igjen, og igjen. 73 00:03:09,220 --> 00:03:11,680 Men hva er den fundamentale forklaringen? 74 00:03:11,680 --> 00:03:12,180 Høyre? 75 00:03:12,180 --> 00:03:15,260 Vi trenger ikke strengt tatt trenger klammeparentes hele tiden, 76 00:03:15,260 --> 00:03:18,210 selv om det er nok best praksis å komme inn som vane uansett 77 00:03:18,210 --> 00:03:20,878 selv om det legger to- tegnene i koden din. hvorfor? 78 00:03:20,878 --> 00:03:22,380 >> PUBLIKUM: [uhørbart]? 79 00:03:22,380 --> 00:03:24,630 SPEAKER 1: Ja, så det er en annen løsning helt. 80 00:03:24,630 --> 00:03:25,130 Høyre? 81 00:03:25,130 --> 00:03:28,250 Spesielt hvis ved første øyekast har du ikke virkelig setter pris på hva som skjer. 82 00:03:28,250 --> 00:03:31,070 Vel, sikkert vi kunne bare gjøre to ting på en gang 83 00:03:31,070 --> 00:03:32,710 og bare unngå problemet helt. 84 00:03:32,710 --> 00:03:36,080 Og det er greit, men nå, for dagens formål, hva 85 00:03:36,080 --> 00:03:38,200 er forklaringen på bug? 86 00:03:38,200 --> 00:03:39,810 Hvorfor var alle disse stjernene på én linje? 87 00:03:39,810 --> 00:03:40,806 Yeah? 88 00:03:40,806 --> 00:03:43,296 >> PUBLIKUM: Det virker som om du har en linje med kode, 89 00:03:43,296 --> 00:03:46,649 du kan gjøre det uten dem. 90 00:03:46,649 --> 00:03:47,440 SPEAKER 1: Nettopp. 91 00:03:47,440 --> 00:03:48,750 Dette er bare et menneske konvensjonen. 92 00:03:48,750 --> 00:03:50,750 Folk skjønner at det er en litt irriterende eller kjedelig 93 00:03:50,750 --> 00:03:53,470 til å sette klammeparentes alle av tiden hvis alt du ønsker å gjøre 94 00:03:53,470 --> 00:03:55,090 er utføre en linje med kode. 95 00:03:55,090 --> 00:03:57,660 Så bestemte mennesker noen tid siden at det er fint. 96 00:03:57,660 --> 00:04:01,180 Hvis du ønsker å sette alle dine sløyfe på nettopp det en linje som dette, 97 00:04:01,180 --> 00:04:04,030 det er fint med singelen semikolon på slutten. 98 00:04:04,030 --> 00:04:07,210 Men du kan bare gjøre en slik linje uten klammeparentes. 99 00:04:07,210 --> 00:04:09,900 >> Så, når CS50 stilguide som vil henvise deg til, 100 00:04:09,900 --> 00:04:11,980 vil du se at generelt Det er god vane 101 00:04:11,980 --> 00:04:14,920 å komme inn i dette før du er ganske komfortabel villfarelse 102 00:04:14,920 --> 00:04:17,404 fra slike konvensjoner og gjør dine egne ting. 103 00:04:17,404 --> 00:04:18,820 Så lenge du er selvstendig konsekvent. 104 00:04:18,820 --> 00:04:21,540 Og vi skal snakke mer om style litt senere i dag. 105 00:04:21,540 --> 00:04:23,200 >> Så, la meg åpne opp ett annet program. 106 00:04:23,200 --> 00:04:24,930 Selvfølgelig bør vi fikse det 10 også. 107 00:04:24,930 --> 00:04:32,470 La meg gå videre og skrive et ekte rask program som jeg skal ringe, 108 00:04:32,470 --> 00:04:38,140 la oss si, loop dot C. Så, loop dot C. Og i sløyfe dot C kommer jeg til å ha, 109 00:04:38,140 --> 00:04:41,970 inkluderer standard I / O dot H int main annullert. 110 00:04:41,970 --> 00:04:44,020 Og nå kan vi bare gjøre, ja, en sløyfe. 111 00:04:44,020 --> 00:04:46,020 Så får 4 int jeg null. 112 00:04:46,020 --> 00:04:48,660 Jeg er mindre enn for eksempel 50. 113 00:04:48,660 --> 00:04:49,950 Jeg pluss, pluss. 114 00:04:49,950 --> 00:04:53,350 Og så her la oss gå videre og skrives ut F. 115 00:04:53,350 --> 00:04:56,400 Og så vil jeg skrive jeg og en ny linje, semikolon. 116 00:04:56,400 --> 00:05:00,015 >> Og dette bør skrive ut alle tall fra null til 50? 117 00:05:00,015 --> 00:05:02,900 118 00:05:02,900 --> 00:05:03,680 Noen hodet nikker. 119 00:05:03,680 --> 00:05:04,270 Noen nos. 120 00:05:04,270 --> 00:05:05,339 Hva er feilen allerede? 121 00:05:05,339 --> 00:05:06,630 Hva er den enkle feilen jeg gjorde? 122 00:05:06,630 --> 00:05:07,170 Yeah. 123 00:05:07,170 --> 00:05:08,544 >> PUBLIKUM: [uhørlig]. 124 00:05:08,544 --> 00:05:09,210 SPEAKER 1: Yeah. 125 00:05:09,210 --> 00:05:11,520 Så selv om det ser ut som dette er hva jeg har tenkt, 126 00:05:11,520 --> 00:05:13,920 husker at jeg er også bare en ASCII karakter. 127 00:05:13,920 --> 00:05:14,955 >> Så, hvis jeg sier, print "I." 128 00:05:14,955 --> 00:05:16,670 Det er bokstavelig talt kommer å skrive ut I. Så hvis jeg 129 00:05:16,670 --> 00:05:20,030 vil plug-in plassholder verdien jeg faktisk trenger å gjøre dette 130 00:05:20,030 --> 00:05:22,630 og plugg-i Verdien av I dynamisk. 131 00:05:22,630 --> 00:05:25,200 Ellers er jeg bare kommer til å får 50 I sin på skjermen. 132 00:05:25,200 --> 00:05:28,140 >> Så, la meg gå videre og gjøre denne loop, kjøre den, 133 00:05:28,140 --> 00:05:30,650 og, ja, vi har alle veien opp gjennom 49. 134 00:05:30,650 --> 00:05:34,140 Og hvis jeg blar tilbake i tid jeg ser tallet null ved begynnelsen. 135 00:05:34,140 --> 00:05:36,050 >> Vel, hva om jeg slags skru opp? 136 00:05:36,050 --> 00:05:37,800 Hva gjør jeg dette? 137 00:05:37,800 --> 00:05:40,120 Bare fordi jeg ikke tenke. 138 00:05:40,120 --> 00:05:40,970 Hva er dette programmet. 139 00:05:40,970 --> 00:05:43,970 Når re utarbeidet og løpe, kommer til å gjøre logisk? 140 00:05:43,970 --> 00:05:44,870 >> PUBLIKUM: Ingenting. 141 00:05:44,870 --> 00:05:45,661 >> SPEAKER 1: Ingenting. 142 00:05:45,661 --> 00:05:47,156 Hvorfor det? 143 00:05:47,156 --> 00:05:49,124 >> PUBLIKUM: Jeg er konstruert for null. 144 00:05:49,124 --> 00:05:51,899 Så, er tilstanden falsk. 145 00:05:51,899 --> 00:05:52,940 SPEAKER 1: Ja, akkurat. 146 00:05:52,940 --> 00:05:55,110 All koden er korrekt, syntaktisk. 147 00:05:55,110 --> 00:05:57,310 Dette vil kompilere, dette koden vil kjøre, men det er ikke 148 00:05:57,310 --> 00:06:00,110 kommer til å gjøre noe nyttig fordi jeg initial jeg til null. 149 00:06:00,110 --> 00:06:02,240 Vi så sjekk, er jeg større enn 50? 150 00:06:02,240 --> 00:06:03,810 Selvfølgelig, nei, det er ikke det. 151 00:06:03,810 --> 00:06:05,760 Slik at sløyfen ikke utfører i det hele tatt. 152 00:06:05,760 --> 00:06:09,580 >> Hva hvis vi gjør noe litt mer uvøren? 153 00:06:09,580 --> 00:06:12,890 Så, hva om vi liker int jeg får null. 154 00:06:12,890 --> 00:06:15,640 Og nå la meg bruke mens løkke, som var en annen tilstand. 155 00:06:15,640 --> 00:06:21,810 Og mens jeg si, mens jeg er større enn eller lik null, og deretter i her jeg 156 00:06:21,810 --> 00:06:26,070 gå videre og lagre filen, gjør loop. 157 00:06:26,070 --> 00:06:27,070 Og jeg er i ferd med å kjøre den. 158 00:06:27,070 --> 00:06:30,230 Hva jeg kommer til å se dette tid med en stund loop? 159 00:06:30,230 --> 00:06:30,852 Yeah. 160 00:06:30,852 --> 00:06:32,120 >> PUBLIKUM: En uendelig loop? 161 00:06:32,120 --> 00:06:35,360 >> SPEAKER 1: En uendelig loop? 162 00:06:35,360 --> 00:06:36,662 Ja, og hvorfor? 163 00:06:36,662 --> 00:06:38,120 PUBLIKUM: Fordi det er alltid null. 164 00:06:38,120 --> 00:06:38,786 SPEAKER 1: Yeah. 165 00:06:38,786 --> 00:06:40,100 Så, jeg initialisert som null. 166 00:06:40,100 --> 00:06:44,470 Klart jeg er alltid større enn eller lik 0 som et resultat. 167 00:06:44,470 --> 00:06:46,460 Så, jeg skal bare se denne uendelig. 168 00:06:46,460 --> 00:06:49,850 Og nå, dette har kommet opp en gang eller to ganger til kursets hoder. 169 00:06:49,850 --> 00:06:52,417 Hva skjer når du har en uendelig loop? 170 00:06:52,417 --> 00:06:53,314 >> PUBLIKUM: Kontroll C. 171 00:06:53,314 --> 00:06:53,980 SPEAKER 1: Yeah. 172 00:06:53,980 --> 00:06:56,250 Så kontroll C vil til slutt svare. 173 00:06:56,250 --> 00:06:59,520 Dessverre har vi skrevet ut millioner og millioner av nuller allerede 174 00:06:59,520 --> 00:07:01,520 og slik at maskinen har slags fikk foran meg. 175 00:07:01,520 --> 00:07:03,394 Så det kommer til å ignorere meg for en liten bit. 176 00:07:03,394 --> 00:07:06,560 Men hvis du bare trykke Kontroll C noen ganger på din Mac eller PC-tastaturet 177 00:07:06,560 --> 00:07:08,790 slutt bør det faktisk avslutte. 178 00:07:08,790 --> 00:07:11,770 Og hvis ikke, vil vi vise deg noen teknikker før lenge der du 179 00:07:11,770 --> 00:07:14,850 kan faktisk tvangs drepe programmer, mye som i Windows og Mac OS, 180 00:07:14,850 --> 00:07:15,562 hvis behovet være. 181 00:07:15,562 --> 00:07:16,770 Men la oss prøve noe annet. 182 00:07:16,770 --> 00:07:19,895 La oss faktisk øke I. Er dette fortsatt kommer til å være uendelig? 183 00:07:19,895 --> 00:07:22,870 184 00:07:22,870 --> 00:07:25,140 La meg kjøre denne. 185 00:07:25,140 --> 00:07:27,090 Og nå kan du på en måte se hva som skjer. 186 00:07:27,090 --> 00:07:30,140 Også dette er en uendelig loop. 187 00:07:30,140 --> 00:07:33,080 Men dette er litt av en lurespørsmål. 188 00:07:33,080 --> 00:07:35,460 Dette kommer til å skrive ut tall for alltid? 189 00:07:35,460 --> 00:07:36,647 >> PUBLIKUM: No. 190 00:07:36,647 --> 00:07:37,230 SPEAKER 1: Nei. 191 00:07:37,230 --> 00:07:37,620 Hvorfor? 192 00:07:37,620 --> 00:07:38,820 Jeg hørte noen nos over her. 193 00:07:38,820 --> 00:07:41,859 Someone-- Yeah. 194 00:07:41,859 --> 00:07:44,275 PUBLIKUM: Du har ikke nok biter å virkelig holde det gående. 195 00:07:44,275 --> 00:07:44,730 SPEAKER 1: All right. 196 00:07:44,730 --> 00:07:46,000 Så jeg har ikke nok biter å holde det gående. 197 00:07:46,000 --> 00:07:47,124 Så, hva kommer til å skje? 198 00:07:47,124 --> 00:07:49,320 Det er bare kommer til å slutte? 199 00:07:49,320 --> 00:07:52,542 >> PUBLIKUM: På et tidspunkt det vil stenge the-- 200 00:07:52,542 --> 00:07:54,500 SPEAKER 1: Det vil stenge løkken ned, men hvorfor? 201 00:07:54,500 --> 00:07:57,950 Hva kommer til å skje på helt på slutten av dens grenser? 202 00:07:57,950 --> 00:07:58,479 Yeah? 203 00:07:58,479 --> 00:08:00,520 PUBLIKUM: Det vil sykle tilbake til negative tall. 204 00:08:00,520 --> 00:08:02,900 SPEAKER 1: Å negative tall, eller hvis vi bare behandle positive, 205 00:08:02,900 --> 00:08:03,570 null minst. 206 00:08:03,570 --> 00:08:04,550 Så ja, absolutt. 207 00:08:04,550 --> 00:08:08,059 Husker at vi så forrige gang at hvis du øke din biter en for mange ganger, 208 00:08:08,059 --> 00:08:10,225 og du der forgrunnen overløp kapasiteten på int 209 00:08:10,225 --> 00:08:13,058 eller hva datatypen er, du er kommer til å vikle rundt, sannsynligvis, 210 00:08:13,058 --> 00:08:14,020 to negative tall. 211 00:08:14,020 --> 00:08:16,644 Eller hvis du har spesifisere at din utvalg bør bare være positive, 212 00:08:16,644 --> 00:08:18,560 som du kan gjøre, men vi har ikke sett det ennå, 213 00:08:18,560 --> 00:08:21,420 du kan ende opp med minst tilbake på null. 214 00:08:21,420 --> 00:08:22,410 Selv om, faktisk ja. 215 00:08:22,410 --> 00:08:24,320 I dette tilfelle negativ tall, i hvilket tilfelle 216 00:08:24,320 --> 00:08:26,870 løkken kommer til å terminere fordi jeg ikke er, faktisk, 217 00:08:26,870 --> 00:08:29,220 større enn eller lik null hvis det er negativt. 218 00:08:29,220 --> 00:08:31,780 >> Så, dessverre, hvordan lenge ville vi må vente? 219 00:08:31,780 --> 00:08:35,490 Akkurat nå er vi opp til hva, 2 millioner-ish? 220 00:08:35,490 --> 00:08:37,705 Vi er som 2 milliarder, vi er nødt til å vente 221 00:08:37,705 --> 00:08:39,330 før vi faktisk kan se dette symptomet. 222 00:08:39,330 --> 00:08:46,200 Men vi kan se det litt raskere, maybe-- la oss se om vi kan avbryte. 223 00:08:46,200 --> 00:08:46,700 Kom igjen. 224 00:08:46,700 --> 00:08:49,500 225 00:08:49,500 --> 00:08:51,331 Selv menyene dukker opp sakte. 226 00:08:51,331 --> 00:08:51,830 Greit. 227 00:08:51,830 --> 00:08:54,270 Så vil vi komme tilbake til det før lenge. 228 00:08:54,270 --> 00:08:56,320 Det er en god tid-- faen, valper. 229 00:08:56,320 --> 00:08:58,280 >> Det er en god tid for noen kunngjøringer. 230 00:08:58,280 --> 00:09:01,225 Så, hvis du kanskje har lyst å engasjere seg i YHack, 231 00:09:01,225 --> 00:09:03,600 som er en hendelse som sponset av våre venner på Yale. 232 00:09:03,600 --> 00:09:05,990 Og, ja, noen av kursets TFS ved Yale er involvert i dette. 233 00:09:05,990 --> 00:09:08,610 YHack er en internasjonal hack-a-thon vert og holdt 234 00:09:08,610 --> 00:09:12,395 ved Yale, og bringer sammen 1500 likesinnede hackere og reklamer alle 235 00:09:12,395 --> 00:09:13,120 over hele verden. 236 00:09:13,120 --> 00:09:14,610 Hvis dette er av interesse, ta en titt her. 237 00:09:14,610 --> 00:09:17,401 Hvis dette er for en kort stund på skjermen, ta en titt på dagens lysbilder 238 00:09:17,401 --> 00:09:19,622 URL for yhack.org. 239 00:09:19,622 --> 00:09:21,080 Så også et par korte beskjeder. 240 00:09:21,080 --> 00:09:24,410 Så offisielt seksjoner vil starte neste uke både her og New Haven. 241 00:09:24,410 --> 00:09:27,660 Husk at du skal få en e-post senere denne helgen mest sannsynlig. 242 00:09:27,660 --> 00:09:29,390 Det tar lang tid for CS50 til del, 243 00:09:29,390 --> 00:09:32,080 gitt alle mennesker i klasse og alle flytte rundt. 244 00:09:32,080 --> 00:09:34,871 Og alle Undervisning Fellows ' tidsplaner er også fortsatt størkne, 245 00:09:34,871 --> 00:09:38,110 men følg med for en e-post, og hvis behov bli, kan du re-seksjonen der etter. 246 00:09:38,110 --> 00:09:39,580 >> Study.cs50.net. 247 00:09:39,580 --> 00:09:43,280 Så, selv om du er en konstant deltaker på seksjoner, innser at nesten alle 248 00:09:43,280 --> 00:09:46,786 av ressursene vi bruker i seksjoner er offentlig tilgjengelig på CS50 249 00:09:46,786 --> 00:09:48,460 Studere på denne nettadressen her. 250 00:09:48,460 --> 00:09:51,630 Så, hvis du noen gang lyst til å re gjennomgang materiale fra seksjon, eller les videre, 251 00:09:51,630 --> 00:09:54,170 eller du kan ikke gjøre det noen uke, innse at vareprøve lysbilder, 252 00:09:54,170 --> 00:09:58,210 og problemer, og definisjoner, og flere er der også. 253 00:09:58,210 --> 00:10:00,645 >> Kontortid gjenoppta dag, og i morgen, og onsdag 254 00:10:00,645 --> 00:10:03,020 og torsdag sjekke kursets nettsiden for tidsplanen. 255 00:10:03,020 --> 00:10:05,690 >> Og også, lanserer nå i dag er CS50 Diskuter. 256 00:10:05,690 --> 00:10:09,230 Så, hvis og når du har spørsmål til hverandre eller for kurset er ansatte, 257 00:10:09,230 --> 00:10:12,099 og er generelt arbeider på noen problem sett, 258 00:10:12,099 --> 00:10:15,015 skjønner at du ikke nødvendigvis må slå til menneskets neste du. 259 00:10:15,015 --> 00:10:17,810 Hvis det er ingen der, kan du nå ut til oss og klassekamerater 260 00:10:17,810 --> 00:10:19,890 online via CS50 Diskuter. 261 00:10:19,890 --> 00:10:22,600 Så dette er en diskusjon Styret for kurset, 262 00:10:22,600 --> 00:10:24,550 og innse at dette er kanskje den beste 263 00:10:24,550 --> 00:10:28,480 sted å begynne når du har spørsmål når utenom kontortid 264 00:10:28,480 --> 00:10:29,470 spesielt. 265 00:10:29,470 --> 00:10:31,070 >> Lunsjer starter opp denne uken også. 266 00:10:31,070 --> 00:10:33,170 På Fire and Ice [Uhørbart] i New Haven. 267 00:10:33,170 --> 00:10:35,379 Ta en titt på kursets nettside for å RSVP. 268 00:10:35,379 --> 00:10:36,753 Først til mølla for det. 269 00:10:36,753 --> 00:10:39,380 Hvis du ikke får i denne uken vi vil gjøre disse mest hver fredag 270 00:10:39,380 --> 00:10:40,400 under begrepet. 271 00:10:40,400 --> 00:10:41,830 >> OK, og nå et ord om gradering. 272 00:10:41,830 --> 00:10:44,690 Spesielt nå som vi går inn problem satt en, som er ute denne uken, 273 00:10:44,690 --> 00:10:46,670 og problemet satt to og etterpå. 274 00:10:46,670 --> 00:10:51,680 Hvordan kan vi gå om evaluering P sett og vurdere kvaliteten av disse? 275 00:10:51,680 --> 00:10:55,560 Så, det er fire akser som vi bruker i CS50, og de er disse fire her. 276 00:10:55,560 --> 00:10:59,200 >> Omfang, som fanger på en numerisk basis hvor mye av P settet 277 00:10:59,200 --> 00:10:59,860 fikk du takle. 278 00:10:59,860 --> 00:11:02,890 Det tilsvarer omtrent med innsats, og det er vår måte å fange 279 00:11:02,890 --> 00:11:05,190 fikk du prøve halve P angitt, alle av P-apparatet. 280 00:11:05,190 --> 00:11:08,860 Dette er et enkelt å få perfekt score på hvis du gjør det, faktisk, 281 00:11:08,860 --> 00:11:11,020 prøve alle sider av P-apparatet. 282 00:11:11,020 --> 00:11:12,010 Så, ha det i bakhodet. 283 00:11:12,010 --> 00:11:13,420 >> Korrekthet er akkurat det. 284 00:11:13,420 --> 00:11:17,760 Har din kode arbeid som spesifikasjonen og som staber prøveløsningen 285 00:11:17,760 --> 00:11:19,730 foreslår at koden bør faktisk fungerer. 286 00:11:19,730 --> 00:11:23,260 Sjekk 50, hvis du ikke har møtt det ennå, er i P satt én spesifikasjon 287 00:11:23,260 --> 00:11:25,060 og vil generelt gi deg ja / nei svar 288 00:11:25,060 --> 00:11:26,518 med hensyn til om koden er riktig. 289 00:11:26,518 --> 00:11:30,680 Minst så langt som vi kommer å vurdere den basert på tester 290 00:11:30,680 --> 00:11:32,430 at vi kjører i dette programmet. 291 00:11:32,430 --> 00:11:33,850 >> Design er mye mer subjektive. 292 00:11:33,850 --> 00:11:35,994 Dette er hvor godt skrevet er koden din. 293 00:11:35,994 --> 00:11:38,410 Og dette er noe som vil du bli bedre på over tid, 294 00:11:38,410 --> 00:11:41,201 og det er noe som vi vil gi mer kvalitative tilbakemeldinger på. 295 00:11:41,201 --> 00:11:43,350 Og ved utforming kanskje jeg mener før lenge du 296 00:11:43,350 --> 00:11:47,650 kan bli fristet i noen P satt til å gjøre noe loopingly, 297 00:11:47,650 --> 00:11:51,590 men for å ha kanskje tre eller fire, eller fem kjedede forgrunnen sløyfer eller nestet mens 298 00:11:51,590 --> 00:11:52,090 sløyfer. 299 00:11:52,090 --> 00:11:54,130 Som generelt bør begynne å gjøre deg flau 300 00:11:54,130 --> 00:11:56,070 og vil generelt være anses som dårlig design. 301 00:11:56,070 --> 00:11:59,490 Og du vil begynne å se i klassen og ut av klasse gode måter å gjøre ting på, 302 00:11:59,490 --> 00:12:02,920 dårlige måter å gjøre ting som kan alle være riktig, men ikke 303 00:12:02,920 --> 00:12:04,304 nødvendigvis godt utformet. 304 00:12:04,304 --> 00:12:05,220 Som å skrive et essay. 305 00:12:05,220 --> 00:12:08,100 Du kan være i stand til å sette ord på en side som er grammatisk korrekt, 306 00:12:08,100 --> 00:12:10,016 men essay eller Oppgaven de er i er bare 307 00:12:10,016 --> 00:12:11,810 helt usammenhengende eller unpersuasive. 308 00:12:11,810 --> 00:12:15,930 Og slik som kan være analog i skrevet verden av dårlig eller god design. 309 00:12:15,930 --> 00:12:18,490 >> Og stil, også er ganske subjektiv. 310 00:12:18,490 --> 00:12:20,060 Men minst forventer vi konsistens. 311 00:12:20,060 --> 00:12:21,480 Dette er hvor pen er koden din. 312 00:12:21,480 --> 00:12:22,840 Er ting pent innrykket? 313 00:12:22,840 --> 00:12:26,600 Er dine variabler vel hete / Er alle av parenteser og klammeparentes 314 00:12:26,600 --> 00:12:27,920 justert som de burde være? 315 00:12:27,920 --> 00:12:31,490 Vi har en CS50 stilguide som problemet settet vil henvise deg på. 316 00:12:31,490 --> 00:12:33,730 De mer komfortabel er velkommen til å fjerne seg fra det 317 00:12:33,730 --> 00:12:35,771 så lenge du er selv konsekvent. 318 00:12:35,771 --> 00:12:38,020 Og også dette er en lærepenge vi vil forsterke i pkt. 319 00:12:38,020 --> 00:12:40,990 Så, hvis alt dette var en liten rask, realisere P sett og seksjoner 320 00:12:40,990 --> 00:12:42,900 vil gå mer i dybden før lenge. 321 00:12:42,900 --> 00:12:45,490 >> Men generelt har vi svært få bøtter for CS50. 322 00:12:45,490 --> 00:12:48,170 Poeng er generelt på en skala fra en til tre, eller en til fem. 323 00:12:48,170 --> 00:12:50,836 Vi er literally-- og jeg kan ikke si dette nok i den første uken. 324 00:12:50,836 --> 00:12:51,582 Tre er bra. 325 00:12:51,582 --> 00:12:54,290 Så, selv om, ja, tre av fem normalt, matematisk, 326 00:12:54,290 --> 00:12:57,240 kan være en 60 prosent eller som en D minus. 327 00:12:57,240 --> 00:12:58,840 Tre er faktisk godt. 328 00:12:58,840 --> 00:13:01,050 Og, faktisk, vi forventer de fleste elevene i klassen 329 00:13:01,050 --> 00:13:04,280 å starte begrepet rundt toere og treere og firere. 330 00:13:04,280 --> 00:13:05,510 Sannsynligvis ikke så mange femmere. 331 00:13:05,510 --> 00:13:06,661 Ikke altfor mange seg. 332 00:13:06,661 --> 00:13:08,910 Men generelt å starte i at sweet spot i kurven 333 00:13:08,910 --> 00:13:11,694 slik at etter hvert som tiden går det er faktisk plass til, 334 00:13:11,694 --> 00:13:13,360 og muligheter for øvre progresjon. 335 00:13:13,360 --> 00:13:15,810 Så, vennligst ikke sette likhetstegn mellom tre med 60%. 336 00:13:15,810 --> 00:13:17,410 Det er mye mer abstrakt enn det. 337 00:13:17,410 --> 00:13:20,160 Formelen som vi beregner karakterer er vektet som følger. 338 00:13:20,160 --> 00:13:21,610 Korrekthet er mest verdt. 339 00:13:21,610 --> 00:13:23,010 Design er verdt litt mindre. 340 00:13:23,010 --> 00:13:24,490 Stil er verdt litt mindre. 341 00:13:24,490 --> 00:13:26,950 Og dette vanligvis registrerer hvor lenge 342 00:13:26,950 --> 00:13:29,800 som går inn får hver av disse aksene akkurat. 343 00:13:29,800 --> 00:13:31,810 Stil er superenkelt, bør være super rask, 344 00:13:31,810 --> 00:13:33,657 men det er en enkel vane å bli lat om. 345 00:13:33,657 --> 00:13:35,490 Korrekthet kan ta dere mesteparten av tiden. 346 00:13:35,490 --> 00:13:38,990 Jakte ned noen bug makt ta det ekstra time eller mer, 347 00:13:38,990 --> 00:13:41,737 og så, poeng slutt fanger det. 348 00:13:41,737 --> 00:13:43,070 Og så, nå en mer alvorlig ord. 349 00:13:43,070 --> 00:13:45,240 Siden CS50 har utmerkelse, for bedre 350 00:13:45,240 --> 00:13:47,440 eller verre, av å være kanskje bedre kjent 351 00:13:47,440 --> 00:13:50,065 med spørsmål om akademisk ærlighet enn de fleste andre kurs. 352 00:13:50,065 --> 00:13:53,720 Og ja, det er så vidt jeg vet at vi sende flere studenter, dessverre, 353 00:13:53,720 --> 00:13:56,690 for disiplinære formål hvert år som et resultat. Så, 354 00:13:56,690 --> 00:13:59,040 i interessen til full avsløring, la oss snakke kort 355 00:13:59,040 --> 00:14:02,820 om hva som foregår i CS50, og hva du kan gjøre, og hva du kan være oppmerksom på. 356 00:14:02,820 --> 00:14:05,530 >> Så, her siden 2007, da Jeg arvet kurset, 357 00:14:05,530 --> 00:14:07,870 er antall Ad styresaker. 358 00:14:07,870 --> 00:14:10,690 Ad Styret er Harvards disiplinære kroppen, eller nå Honor Counsel, 359 00:14:10,690 --> 00:14:13,790 til hvilke saker er referert når elevene gjøre noe som kursets 360 00:14:13,790 --> 00:14:15,470 pensum anser som urimelige. 361 00:14:15,470 --> 00:14:17,220 Det er ingen reell mønster her, vil jeg si. 362 00:14:17,220 --> 00:14:19,530 Det svinger over år, men generelt 363 00:14:19,530 --> 00:14:22,262 Dette er antallet saker som oversendes. 364 00:14:22,262 --> 00:14:23,970 Antallet studenter som er involvert? 365 00:14:23,970 --> 00:14:25,290 Det varierer også. 366 00:14:25,290 --> 00:14:27,930 Vanligvis, i fjor for eksempel 29 studenter ved Harvard 367 00:14:27,930 --> 00:14:29,740 var Ad Boarded, så å si. 368 00:14:29,740 --> 00:14:32,670 29 av dem nåværende studenter, To av dem tidligere studenter, 369 00:14:32,670 --> 00:14:35,610 som ble samarbeidet i noen uheldige måte. 370 00:14:35,610 --> 00:14:38,400 Og da i form av prosenten, er det vanligvis om lag 3% 371 00:14:38,400 --> 00:14:41,360 av klassen som, dessverre, gjør slike beslutninger. 372 00:14:41,360 --> 00:14:44,470 >> Så, i fjor var det 3,5% av CS50 student body 373 00:14:44,470 --> 00:14:46,820 som var Ad Boarded, så å si. 374 00:14:46,820 --> 00:14:48,490 >> Så, hva betyr alt dette bety? 375 00:14:48,490 --> 00:14:49,660 Og hva gjør vi egentlig gjøre? 376 00:14:49,660 --> 00:14:52,930 >> Så, for full offentliggjøring, vi absolutt, som dataforskere, 377 00:14:52,930 --> 00:14:57,620 har verktøy til rådighet og det er veldig lett for oss i rettferdighet, 378 00:14:57,620 --> 00:15:00,980 at andre klassekamerater som ikke er krysse disse linjene krysse sammenligne 379 00:15:00,980 --> 00:15:04,570 hver innlevering i år mot alle innlevering for de siste åtte årene. 380 00:15:04,570 --> 00:15:05,445 Programvaren gjør dette. 381 00:15:05,445 --> 00:15:07,440 Og til syvende og sist er det menneskelige øyne som bestemmer 382 00:15:07,440 --> 00:15:11,410 om ikke å referere noen rolle for videre pådømmelse, 383 00:15:11,410 --> 00:15:12,737 men programvaren hjelper sikkert. 384 00:15:12,737 --> 00:15:15,820 Og dette, ærlig, er grunnen til at jeg tror vi har slike store tall i CS50. 385 00:15:15,820 --> 00:15:18,540 Det er ikke fordi CS50 studenter eller CS studentene mer 386 00:15:18,540 --> 00:15:20,840 generelt er noe mindre ærlige enn andre studenter, 387 00:15:20,840 --> 00:15:22,340 det er bare vi har verktøy og teknikker 388 00:15:22,340 --> 00:15:24,095 med å ta dette første passering. 389 00:15:24,095 --> 00:15:25,960 >> Men vi kan holde et øye på alle disse tingene 390 00:15:25,960 --> 00:15:30,340 så vel, igjen, av hensyn til erkjenner det arbeidet som blir satt 391 00:15:30,340 --> 00:15:32,397 i av en super flertall av klassen. 392 00:15:32,397 --> 00:15:34,230 Og kurset politikk på akademisk redelighet, 393 00:15:34,230 --> 00:15:37,021 selv om det er en haug med paragrafer lang med en haug med kuler 394 00:15:37,021 --> 00:15:40,490 som er forhåpentligvis ganske lesbar, det virkelig koker ned til å være rimelig. 395 00:15:40,490 --> 00:15:44,000 Og det beste tommelfingerregel som vi tilby opp i pensum 396 00:15:44,000 --> 00:15:46,020 Dette, essensen av alt arbeidet som du 397 00:15:46,020 --> 00:15:47,850 sender til dette kurset må være din egen. 398 00:15:47,850 --> 00:15:51,510 Og ja, i nesten alle av dem saker til disiplinærtiltak 399 00:15:51,510 --> 00:15:55,640 det var på grunn av noen student sent en natt vanligvis slått sin kode 400 00:15:55,640 --> 00:15:58,130 løpet outright til en klassekamerat, som deretter vedtatt det 401 00:15:58,130 --> 00:16:00,840 i sin helhet eller betydelig av disse. 402 00:16:00,840 --> 00:16:02,680 >> Men egentlig er dette OK. 403 00:16:02,680 --> 00:16:04,684 Og ja, på kontoret timer, de papirlapper 404 00:16:04,684 --> 00:16:07,850 du har blitt overlevert hvis du kom med kontor timer forrige uke oppfordrer så mye. 405 00:16:07,850 --> 00:16:09,710 Du er helt velkommen og oppmuntret 406 00:16:09,710 --> 00:16:12,340 å diskutere oppgavesett med klassekamerater. 407 00:16:12,340 --> 00:16:14,461 Å hjelpe hverandre når snubler. 408 00:16:14,461 --> 00:16:17,710 Men generelt tommelfingerregel bør være dette ", når du ber om hjelp, 409 00:16:17,710 --> 00:16:20,412 du kan vise koden din til andre, men du kan ikke se deres ". 410 00:16:20,412 --> 00:16:22,620 Så, med andre ord, hvis jeg sliter med noen P sett 411 00:16:22,620 --> 00:16:25,290 og jeg sitter der i spisesal, eller i biblioteket, 412 00:16:25,290 --> 00:16:28,470 eller i klasserommet prøver å finne noen feil, 413 00:16:28,470 --> 00:16:30,340 Jeg kan sikkert vise min kode på skjermen min 414 00:16:30,340 --> 00:16:32,590 til den personen som sitter ved siden for meg, i hvert fall de ansatte, 415 00:16:32,590 --> 00:16:33,600 men også en klassekamerat. 416 00:16:33,600 --> 00:16:36,580 Men hvis oppløsningen som min klassekamerat tilbyr er, oh, 417 00:16:36,580 --> 00:16:39,200 her bare ta en titt på hva Jeg gjorde, som krysser linjen. 418 00:16:39,200 --> 00:16:43,120 >> Og jeg tør si det er generelt en fornuftig ting for folk flest 419 00:16:43,120 --> 00:16:45,030 å veldig lett få øye på linjen. 420 00:16:45,030 --> 00:16:47,195 Og så, se pensum for flere detaljer. 421 00:16:47,195 --> 00:16:49,070 Og nå en av de mer kontroversielle aspekter 422 00:16:49,070 --> 00:16:52,529 av CS50 pensum som jeg trodde jeg ville snakke med i konklusjonen her 423 00:16:52,529 --> 00:16:53,820 er den såkalte beklagelse klausulen. 424 00:16:53,820 --> 00:16:55,340 Så, her er alle de fine print. 425 00:16:55,340 --> 00:16:58,090 Men generelt har vi sett i løpet av de siste 8 år pluss 426 00:16:58,090 --> 00:17:01,510 at, ja, nesten alle av CS50 s tilfeller av fusk 427 00:17:01,510 --> 00:17:04,390 har vært et resultat av nettopp dårlig beslutnings sent på kvelden. 428 00:17:04,390 --> 00:17:07,144 Et resultat av stress, resultatet av mangel på spising, mangel på søvn, 429 00:17:07,144 --> 00:17:09,560 for mange P-apparater, for mange tidsfrister, for mange forpliktelser. 430 00:17:09,560 --> 00:17:13,520 Stress bygge opp i en 02:00, 03:00 AM, 04:00, med frist truende. 431 00:17:13,520 --> 00:17:17,020 De fleste studenter i disse tilfellene har nettopp gjort dårlige beslutninger 432 00:17:17,020 --> 00:17:20,619 at de kan godt angre Neste morgen om ikke minutter senere, 433 00:17:20,619 --> 00:17:25,490 men inntil i fjor var det ingen utløsningsventilen at disse studentene kunne 434 00:17:25,490 --> 00:17:29,140 åpen faktisk opp til å faktisk ta opp problemet på hodet uten frykt for å bli 435 00:17:29,140 --> 00:17:30,850 oppstartet fra college helt. 436 00:17:30,850 --> 00:17:33,260 >> Og, ja, vi introdusert Dette angrer klausulen i fjor, 437 00:17:33,260 --> 00:17:35,970 som sier at hvis innen 72 timer, tre dager, 438 00:17:35,970 --> 00:17:37,970 krysse noen linje foreskrevet i pensum 439 00:17:37,970 --> 00:17:41,178 du kommer frem til en av kursets hoder, og vi vil ta en prat om det. 440 00:17:41,178 --> 00:17:43,720 Det er fortsatt noen utfallet, i motsetning til hva som er 441 00:17:43,720 --> 00:17:44,990 Det er rapportert om det motsatte. 442 00:17:44,990 --> 00:17:49,190 Det er fortsatt noen utfall som er handlekraftige av kurset, 443 00:17:49,190 --> 00:17:51,611 generelt nullstilling en P sett eller ta en annen handling, 444 00:17:51,611 --> 00:17:53,610 men vi vil, ja, håndtere det selv og ikke 445 00:17:53,610 --> 00:17:58,460 henvise den høyere var utfallet kan være mye mer alvorlig. 446 00:17:58,460 --> 00:18:01,810 Og, ja, til å fortelle hva som skjedde i fjor, i åtte år, og nå 447 00:18:01,810 --> 00:18:04,950 ni år, med undervisning dette kurset og etter fiksing og triksing med ulike knotter, 448 00:18:04,950 --> 00:18:07,866 snu ulike ringer det siste flere år på akademisk redelighet, 449 00:18:07,866 --> 00:18:11,920 og ser per dataene godtas åpen innvirkning, selv av taler som dette, 450 00:18:11,920 --> 00:18:15,490 Dette var uten tvil den beste tingen vi har introdusert pedagogisk 451 00:18:15,490 --> 00:18:18,090 i åtte år sammen disse linjene i CS50. 452 00:18:18,090 --> 00:18:21,010 >> 19 studenter kom frem under denne klausulen i fjor. 453 00:18:21,010 --> 00:18:23,389 Vi tok ingen handling for sju av disse studentene, 454 00:18:23,389 --> 00:18:25,430 å bestemme at de var unødig bekymret. 455 00:18:25,430 --> 00:18:27,304 De hadde ikke i virkeligheten krysset en linje, men 456 00:18:27,304 --> 00:18:28,960 var en god samtale å ha likevel. 457 00:18:28,960 --> 00:18:31,190 Vi nullet 11 av resultatet som ble sendt inn. 458 00:18:31,190 --> 00:18:33,840 Og i ett tilfelle vi spurte en student til å gjøre et problem satt. 459 00:18:33,840 --> 00:18:36,370 Men mer overbevisende, ærlig, med disse 19 samtaler, 460 00:18:36,370 --> 00:18:39,020 som var mye mer enn jeg forventes å ha, og hver av dem 461 00:18:39,020 --> 00:18:41,370 10 minutter til kanskje en time lang, også brakt 462 00:18:41,370 --> 00:18:44,920 å tenne en rekke spørsmål angående familiære problemer, venneproblemer, 463 00:18:44,920 --> 00:18:46,940 psykiske problemer at vi da engasjert, 464 00:18:46,940 --> 00:18:50,200 med studentens velsignelse, bosatt dekan, eller venner, eller et annet nummer 465 00:18:50,200 --> 00:18:51,450 støtteressurser. 466 00:18:51,450 --> 00:18:54,454 Så at dette var uten tvil en av de beste bruker av vår tid 467 00:18:54,454 --> 00:18:55,870 og en av de beste intervensjoner. 468 00:18:55,870 --> 00:18:58,870 >> Med det sagt, det hadde ingen innspill på frekvensen av gjenkjenning 469 00:18:58,870 --> 00:19:00,909 av fusk mer generelt. 470 00:19:00,909 --> 00:19:02,950 Og jeg tør si, dette undergruppe av studenter i fjor 471 00:19:02,950 --> 00:19:06,350 var en demografisk at vi tidligere aldri identifisert før 472 00:19:06,350 --> 00:19:08,140 og hadde aldri koblet med før. 473 00:19:08,140 --> 00:19:10,020 Og så var disse fantastiske suksesshistorier 474 00:19:10,020 --> 00:19:13,390 selv om de ble brakt til lys i løpet av mindre enn optimale forhold. 475 00:19:13,390 --> 00:19:15,640 Så, ha dette i tankene som du gjør, kanskje, 476 00:19:15,640 --> 00:19:17,390 noen dårlig avgjørelse selv sent på kvelden, 477 00:19:17,390 --> 00:19:20,151 at det er regress så lenge som student i den situasjonen 478 00:19:20,151 --> 00:19:23,400 eier opp og komme frem, slik at vi kan har den slags prat og håndtere det 479 00:19:23,400 --> 00:19:27,310 på en måte som er pedagogisk, og deretter vi kan legge det bak oss neste dag. 480 00:19:27,310 --> 00:19:30,335 >> Så uten videre, ta kant av av denne samtalen, 481 00:19:30,335 --> 00:19:35,080 grunnen til valpene er opp er bare for å bryte isen for et øyeblikk. 482 00:19:35,080 --> 00:19:39,560 Og dessverre, de er alle søvn, men det som skulle skje her 483 00:19:39,560 --> 00:19:41,760 var alle skulle til ærefrykt og slags slappe 484 00:19:41,760 --> 00:19:43,910 etter at svært tung samtale. 485 00:19:43,910 --> 00:19:46,930 Men tydeligvis satte jeg valpene til å sove. 486 00:19:46,930 --> 00:19:50,070 Men hvis du går til CS50 s nettside slash valper, 487 00:19:50,070 --> 00:19:51,610 du kan se dem hele dagen lang. 488 00:19:51,610 --> 00:19:55,280 Spesielt kanskje 2:00, eller 03:00 eller 04:00 om natten 489 00:19:55,280 --> 00:19:57,480 å se litt stress lettelse der. 490 00:19:57,480 --> 00:19:58,805 Så det er slash valper. 491 00:19:58,805 --> 00:20:01,700 492 00:20:01,700 --> 00:20:02,200 Greit. 493 00:20:02,200 --> 00:20:03,020 Var ikke det morsomt? 494 00:20:03,020 --> 00:20:04,200 OK. 495 00:20:04,200 --> 00:20:07,140 Så, tilbake til noen datamaskin vitenskap, hvis jeg kan. 496 00:20:07,140 --> 00:20:10,600 >> Så husker at sist gang vi startet ser ikke bare på main, som 497 00:20:10,600 --> 00:20:13,930 var standard funksjon, når grønne flagget klikket tilsvarende, 498 00:20:13,930 --> 00:20:16,999 men vi har også startet kort skriver noen av våre egne funksjoner. 499 00:20:16,999 --> 00:20:20,040 Og hittil har ingen av disse funksjonene har vært spesielt stor eller kjøttfulle. 500 00:20:20,040 --> 00:20:24,570 Du vil komme inn i de større funksjoner sannsynligvis, P satt to, P satt tre, 501 00:20:24,570 --> 00:20:26,410 definitivt P satt fire og framover. 502 00:20:26,410 --> 00:20:29,340 Akkurat nå de fleste av programmene dine, om ikke alle av dem, i hvert fall for P 503 00:20:29,340 --> 00:20:31,550 sett 1 kan gjøres helt i main. 504 00:20:31,550 --> 00:20:33,810 Hvis programmet er bare fem linjer, 10 linjer, 505 00:20:33,810 --> 00:20:37,070 selv 20 linjer lange, perfekt rimelig å skrive det 506 00:20:37,070 --> 00:20:40,930 alt i hoved og ikke over komplisere koden din, men hva vi gjør i dag 507 00:20:40,930 --> 00:20:44,360 og videre prøver å også introdusere noen gode design teknikker 508 00:20:44,360 --> 00:20:48,660 slik at så koden blir mer komplisert og som problemene 509 00:20:48,660 --> 00:20:51,690 du ønsker å løse får hardere og mer interessant du har, liksom, 510 00:20:51,690 --> 00:20:55,850 verktøyene i verktøykassen som å designe gode løsninger på disse. 511 00:20:55,850 --> 00:21:01,210 >> Så, la oss ta en rask titt tilbake på dette programmet fra min forrige uke, noe som 512 00:21:01,210 --> 00:21:06,550 var funksjoner null dot C. Og Legg merke til at, ganske enkelt, 513 00:21:06,550 --> 00:21:10,310 det ser ut som dette med to- funksjoner, viktigste og print navn. 514 00:21:10,310 --> 00:21:13,160 Og tenker tilbake eller kanskje reverse engineering i dag, 515 00:21:13,160 --> 00:21:16,880 hva var motivasjonen for å innføre en funksjon i linje 28 kalt, 516 00:21:16,880 --> 00:21:18,180 print navn? 517 00:21:18,180 --> 00:21:21,745 Eller hva var dette et eksempel på i det gjelder et prinsipp eller takeaway, 518 00:21:21,745 --> 00:21:22,605 hvis du ville. 519 00:21:22,605 --> 00:21:26,560 520 00:21:26,560 --> 00:21:27,300 Noen bilyd. 521 00:21:27,300 --> 00:21:28,830 Hva? 522 00:21:28,830 --> 00:21:32,210 >> Ja så Funksjonell Nedbrytnings er litt fancy måte å si: 523 00:21:32,210 --> 00:21:34,690 brytes ned programmet i sine enkelte bestanddeler 524 00:21:34,690 --> 00:21:37,530 og deretter bruke disse delene å sette sammen en helhet. 525 00:21:37,530 --> 00:21:39,620 Så, for det er bare snill av en munnfull allerede, 526 00:21:39,620 --> 00:21:42,050 men dette er kanskje en bedre eksempel på noe 527 00:21:42,050 --> 00:21:43,081 bare kalt abstraksjon. 528 00:21:43,081 --> 00:21:43,580 Høyre? 529 00:21:43,580 --> 00:21:46,950 Abstraksjon kommer til å være en av de tilbakevendende tema i CS50 530 00:21:46,950 --> 00:21:49,085 og også informatikk mer generelt, siden det er 531 00:21:49,085 --> 00:21:53,060 en teknikk du kan løse med hvilke problemer mer effektivt fordi du 532 00:21:53,060 --> 00:21:56,807 kan skrive løsninger mer intuitivt og på en måte som skalerer 533 00:21:56,807 --> 00:21:58,390 og er forståelig for andre mennesker. 534 00:21:58,390 --> 00:21:59,860 Hva jeg mener med det? 535 00:21:59,860 --> 00:22:04,340 >> Så kanskje det er mye mer lesbar å se på et program som dette, 536 00:22:04,340 --> 00:22:05,990 super kort om det er. 537 00:22:05,990 --> 00:22:10,050 Når du ser på linje 22 som det er en funksjon som heter, print navn. 538 00:22:10,050 --> 00:22:12,620 Det navnet alene sier hva den gjør. 539 00:22:12,620 --> 00:22:15,780 At funksjonen tar tilsynelatende inngang mellom sine parentes, 540 00:22:15,780 --> 00:22:18,600 og tilsynelatende gjør noe, formodentlig skriver navnet. 541 00:22:18,600 --> 00:22:20,880 Og så, selv om vi absolutt kunne ha 542 00:22:20,880 --> 00:22:25,280 gjort det vi gjorde for en uke siden, som var bare ta denne faktiske linje med kode, 543 00:22:25,280 --> 00:22:28,710 bli kvitt dette, og få kvitt denne alle sammen, 544 00:22:28,710 --> 00:22:31,436 vi slags abstrahert bort tanken om å skrive et navn. 545 00:22:31,436 --> 00:22:33,060 Jeg bryr meg ikke om du bruker print def. 546 00:22:33,060 --> 00:22:35,601 Jeg bryr meg ikke om du har en prosent S og en backslash N. Disse 547 00:22:35,601 --> 00:22:37,270 er utrolig uforståelige detaljer. 548 00:22:37,270 --> 00:22:40,090 Det jeg bryr meg om som en programmerer skriver et navn. 549 00:22:40,090 --> 00:22:43,414 Og så, hva bedre måte å gjøre det enn ved å kalle en funksjon, print navn? 550 00:22:43,414 --> 00:22:46,330 Og så, som var en av motivasjonene for å gjøre noe som dette. 551 00:22:46,330 --> 00:22:50,370 Å gjøre koden mer lesbar, mer gjenbrukbare, og også selv beskrivende. 552 00:22:50,370 --> 00:22:52,120 Nå, la oss ta en titt på et annet eksempel, 553 00:22:52,120 --> 00:22:56,220 som var funksjoner ett, som vi hadde over her. 554 00:22:56,220 --> 00:23:00,367 >> Så, dette er en kanskje enda mer bevisende fordi, i dette tilfellet 555 00:23:00,367 --> 00:23:01,700 Jeg ønsker ikke å bare få en int. 556 00:23:01,700 --> 00:23:03,320 Jeg ønsker å få en positiv int. 557 00:23:03,320 --> 00:23:06,470 Og det viser seg å få en positiv int du trenger å gjøre en haug med legwork. 558 00:23:06,470 --> 00:23:06,969 Høyre? 559 00:23:06,969 --> 00:23:09,600 Det er ikke en enkel en linje ringe ut print navn var, 560 00:23:09,600 --> 00:23:11,480 som er riktignok mindre overbevisende. 561 00:23:11,480 --> 00:23:16,000 >> For å få en positiv int, logically-- la meg bla ned igjen for å skjule dette. 562 00:23:16,000 --> 00:23:18,887 Hva må du gjøre? 563 00:23:18,887 --> 00:23:20,720 Som alle de verktøyene vi har i øyeblikket 564 00:23:20,720 --> 00:23:24,440 ting som print def fra Standard Bibliotek og også fra CS50 bibliotek 565 00:23:24,440 --> 00:23:26,990 vi har Get Int, og Get Float, Få Long Long, får String, 566 00:23:26,990 --> 00:23:29,260 men den eneste, Germane, akkurat nå er Get Int. 567 00:23:29,260 --> 00:23:32,970 Så, hvis det eneste verktøyet du har i din verktøykasse er Get Int, 568 00:23:32,970 --> 00:23:35,505 hvordan går vi om å implementere det å få positive int? 569 00:23:35,505 --> 00:23:35,929 >> PUBLIKUM: Lag en logg og kontroller av om innspill som de ga 570 00:23:35,929 --> 00:23:36,762 var positiv eller ikke. 571 00:23:36,762 --> 00:23:39,390 572 00:23:39,390 --> 00:23:40,640 >> SPEAKER 1: Perfekt. 573 00:23:40,640 --> 00:23:41,200 Nøyaktig. 574 00:23:41,200 --> 00:23:43,950 Et annet verktøy vi har i vår verktøykasse fra en uke eller to siden 575 00:23:43,950 --> 00:23:45,419 er bare looping konstruere. 576 00:23:45,419 --> 00:23:48,210 Og så, ja, hvis vi bruker en stund sløyfe, eller en gjør mens loop, eller en forgrunnen 577 00:23:48,210 --> 00:23:50,850 sløyfe vi kunne sannsynligvis komme unna med en hvilken som helst av de som er i en eller annen form. 578 00:23:50,850 --> 00:23:55,140 Vi kan implementere begrepet get positiv int ved bare å bruke Get Int, 579 00:23:55,140 --> 00:23:57,830 og så bare fortsette å kalle det igjen og holde plaging brukeren 580 00:23:57,830 --> 00:24:00,320 før han eller hun faktisk gir oss det vi vil ha. 581 00:24:00,320 --> 00:24:03,260 >> Og så nå, dette abstraksjon av prosessen 582 00:24:03,260 --> 00:24:05,680 for å få en positiv int inn i en funksjon som kalles 583 00:24:05,680 --> 00:24:08,930 Få Positive Int er litt mer overbevisende fordi se på dette. 584 00:24:08,930 --> 00:24:10,990 Disse er som 10 pluss linjer med kode som 585 00:24:10,990 --> 00:24:15,090 er involvert i å få en positiv int, og jeg egentlig ikke bryr seg hvordan du gjør det. 586 00:24:15,090 --> 00:24:17,850 Alt jeg bryr meg er at du kan gjøre det, og så har jeg 587 00:24:17,850 --> 00:24:21,660 skjulte alle disse detaljene bak en funksjon kalt Få Positive int det, 588 00:24:21,660 --> 00:24:23,430 ja, har dette gjøre mens loop. 589 00:24:23,430 --> 00:24:27,660 >> Og se forrige uke for syntaksen der, men det bare erklærer N, 590 00:24:27,660 --> 00:24:29,800 og det skrives ut instruksjon for brukeren. 591 00:24:29,800 --> 00:24:33,330 Det kaller Få Int og deretter det sjekker denne tilstanden igjen og igjen, 592 00:24:33,330 --> 00:24:35,230 og igjen inntil brukeren samarbeider. 593 00:24:35,230 --> 00:24:38,000 >> Så nå, noen få feilsjekkene. 594 00:24:38,000 --> 00:24:40,370 For de som kanskje kjenner med litt programmering, 595 00:24:40,370 --> 00:24:46,410 hvorfor er N erklært, hvorfor må jeg lage N utenfor do mens loop? 596 00:24:46,410 --> 00:24:50,370 Hvorfor er det på linje 29 og ikke på lignende 33, for eksempel. 597 00:24:50,370 --> 00:24:53,529 >> PUBLIKUM: Fordi når du erklære den utenfor, det slag 598 00:24:53,529 --> 00:24:56,688 mer, jo større scope-- 599 00:24:56,688 --> 00:24:58,146 >> SPEAKER 1: Good. 600 00:24:58,146 --> 00:24:59,604 >> PUBLIKUM: --og hvis du deklarerer den inne i loop, [uhørbart] 601 00:24:59,604 --> 00:25:00,979 fordi den ikke vet om det. 602 00:25:00,979 --> 00:25:02,819 603 00:25:02,819 --> 00:25:03,610 SPEAKER 1: Nettopp. 604 00:25:03,610 --> 00:25:06,330 Hvis jeg kan simplify-- det er en sak av omfang. 605 00:25:06,330 --> 00:25:11,530 Og omfang refererer til den konteksten som en variabel eksisterer eller er brukbare. 606 00:25:11,530 --> 00:25:15,050 Og det fine tommelfingerregel her er at vanligvis når du deklarerer eller opprette 607 00:25:15,050 --> 00:25:21,642 en variabel du kan bare bruke det inne av de nærmeste omfavner klammeparentes. 608 00:25:21,642 --> 00:25:22,600 Så hva betyr det? 609 00:25:22,600 --> 00:25:26,551 Hvis jeg i stedet angre denne og gå med noe som føles litt enklere. 610 00:25:26,551 --> 00:25:27,050 Høyre? 611 00:25:27,050 --> 00:25:29,360 >> Linje 32 bare ser renere for meg nå. 612 00:25:29,360 --> 00:25:31,500 Jeg gjør begge ting på en gang og deretter tildele 613 00:25:31,500 --> 00:25:33,070 høyre hånd til venstre hånd. 614 00:25:33,070 --> 00:25:35,180 Problemet nå basert på at definisjonen av omfanget 615 00:25:35,180 --> 00:25:41,130 er at N kan brukes i linjer 31 og 32 på innsiden av denne løkke, 616 00:25:41,130 --> 00:25:45,100 men der etter at definisjonen kan den ikke brukes? 617 00:25:45,100 --> 00:25:45,660 I tråd hva? 618 00:25:45,660 --> 00:25:46,160 Yeah. 619 00:25:46,160 --> 00:25:47,490 >> PUBLIKUM: 35. 620 00:25:47,490 --> 00:25:49,180 >> SPEAKER 1: 35. 621 00:25:49,180 --> 00:25:50,480 Definitivt ikke 35. 622 00:25:50,480 --> 00:25:52,349 Og også hvor ellers? 623 00:25:52,349 --> 00:25:52,890 PUBLIKUM: 34. 624 00:25:52,890 --> 00:25:55,040 SPEAKER 1: Selv 34 er problematisk fordi det er 625 00:25:55,040 --> 00:25:56,450 utsiden av klammeparentes. 626 00:25:56,450 --> 00:25:58,200 Og så faktisk, la oss se hva som skjer. 627 00:25:58,200 --> 00:25:58,700 Høyre? 628 00:25:58,700 --> 00:26:00,722 Dette kan virke litt intuitive eller kanskje ikke, 629 00:26:00,722 --> 00:26:02,680 men la oss se hva kompilatoren har å si når 630 00:26:02,680 --> 00:26:04,730 vi går inn i dagens kilde katalogen. 631 00:26:04,730 --> 00:26:08,950 Gjør funksjon en. 632 00:26:08,950 --> 00:26:11,231 Herregud. 633 00:26:11,231 --> 00:26:12,980 Vel, jeg endelig ferdig som, forresten. 634 00:26:12,980 --> 00:26:14,030 Greit. 635 00:26:14,030 --> 00:26:15,510 Og hva er problemet her? 636 00:26:15,510 --> 00:26:17,430 Veldig uforståelige å se på. 637 00:26:17,430 --> 00:26:19,570 Men her er hva jeg typed-- lage funksjon en. 638 00:26:19,570 --> 00:26:21,640 Her er det som gjør indusert, som er faktisk 639 00:26:21,640 --> 00:26:23,705 hjelp av kompilatoren klang med noen av disse flaggene 640 00:26:23,705 --> 00:26:25,080 at vi vil se igjen før lenge. 641 00:26:25,080 --> 00:26:26,829 Og igjen, alltid se ved den første feilen, 642 00:26:26,829 --> 00:26:30,540 fordi det kan bare ha en gjennomgripende meningsløs effekt på andre linjer. 643 00:26:30,540 --> 00:26:34,410 >> Så hva dette betyr er at Problemet er i funksjon 1.c. 644 00:26:34,410 --> 00:26:36,890 Det er på linje 32. 645 00:26:36,890 --> 00:26:39,712 Og det er på kolonnen, eller tegn, 13. 646 00:26:39,712 --> 00:26:42,670 Så når din tekst editor som kan hjelpe deg med å identifisere hvor problemet er. 647 00:26:42,670 --> 00:26:47,079 Så hvis jeg blar opp, hva er linje 32? 648 00:26:47,079 --> 00:26:49,120 Det er faktisk dette en som allerede er fremhevet 649 00:26:49,120 --> 00:26:50,607 rett her-- ubrukt variabelen n. 650 00:26:50,607 --> 00:26:51,440 Men det er ikke ubrukt. 651 00:26:51,440 --> 00:26:52,320 Jeg bruker det. 652 00:26:52,320 --> 00:26:56,110 Men kompilatoren er forvirret, fordi det bare finnes inne i dette omfanget. 653 00:26:56,110 --> 00:26:57,727 Og så jeg kan ikke bruke den her. 654 00:26:57,727 --> 00:26:58,560 Jeg kan ikke bruke det her. 655 00:26:58,560 --> 00:27:01,320 Og kompilatoren dermed ikke engang bryr seg at jeg prøver. 656 00:27:01,320 --> 00:27:03,940 Det synes å være ubrukt innenfor sin faktiske omfang. 657 00:27:03,940 --> 00:27:08,854 >> Så vi kan utvide omfanget ved å gjøre akkurat det vi startet with-- int n. 658 00:27:08,854 --> 00:27:11,020 Og selv om det ikke skjer se så elegant, kanskje, 659 00:27:11,020 --> 00:27:15,110 og vi tar en ekstra linje her, nå er det i omfang overalt. 660 00:27:15,110 --> 00:27:15,970 Så la oss prøve igjen. 661 00:27:15,970 --> 00:27:19,040 Så gjør funksjonen en. 662 00:27:19,040 --> 00:27:19,610 Fin. 663 00:27:19,610 --> 00:27:23,370 Og nå hvis jeg hvis jeg kjører funksjon en, la oss gi den negative 10, 664 00:27:23,370 --> 00:27:27,170 negative 1, 0, 1, og det faktisk fungerer. 665 00:27:27,170 --> 00:27:28,610 >> Så det er en annen løsning her. 666 00:27:28,610 --> 00:27:29,280 Vet du hva? 667 00:27:29,280 --> 00:27:31,230 Hva om jeg virkelig er bryting med dette? 668 00:27:31,230 --> 00:27:33,140 Jeg vet ikke hvor n er ment å gå. 669 00:27:33,140 --> 00:27:33,723 Vet du hva? 670 00:27:33,723 --> 00:27:39,220 Jeg bare kommer til å sette det hele helt på toppen av min fil her. 671 00:27:39,220 --> 00:27:42,835 Hva ville dette gjør, tror du? 672 00:27:42,835 --> 00:27:43,335 Yeah? 673 00:27:43,335 --> 00:27:44,251 >> PUBLIKUM: [uhørlig]. 674 00:27:44,251 --> 00:27:47,964 675 00:27:47,964 --> 00:27:48,630 SPEAKER 1: Yeah. 676 00:27:48,630 --> 00:27:50,560 Så jeg har gjort det globale, så å si. 677 00:27:50,560 --> 00:27:54,430 Hvis du har en variabel som er utenfor alle dine funksjoner som er tillatt, 678 00:27:54,430 --> 00:27:58,780 og koden skal kompilere, og n vil nå være tilgjengelig ikke bare i få 679 00:27:58,780 --> 00:28:02,490 positiv int, men også i main-- som er litt bekymringsfullt fordi det er 680 00:28:02,490 --> 00:28:04,864 allerede en n i main, så mer på at i bare en moment-- 681 00:28:04,864 --> 00:28:06,530 men dette vil bli vurdert dårlig design. 682 00:28:06,530 --> 00:28:06,910 Greit. 683 00:28:06,910 --> 00:28:08,570 Hvis du må ty til noe sånt, oh, vil jeg 684 00:28:08,570 --> 00:28:10,125 bare sette den opp her fordi koden ser ut til å kompilere 685 00:28:10,125 --> 00:28:12,180 er vanligvis ikke den beste praksis. 686 00:28:12,180 --> 00:28:14,590 Heller du ønsker å velge den smal mulig omfang 687 00:28:14,590 --> 00:28:18,720 for variablene, noe som ville bety kommer med vår første design, som 688 00:28:18,720 --> 00:28:19,920 er rett her. 689 00:28:19,920 --> 00:28:24,400 >> Nå som en side, hvis du har et identisk heter variabel her, 690 00:28:24,400 --> 00:28:27,750 måten c ville håndtere dette-- selv om dette ikke vil skje for often-- 691 00:28:27,750 --> 00:28:30,150 er at dette er fortsatt helt greit her. 692 00:28:30,150 --> 00:28:35,000 Men denne definisjonen av n i kø 22 vil skygge det globale. 693 00:28:35,000 --> 00:28:38,190 Så dette vil arbeide innenfor Hoved, og den globale én 694 00:28:38,190 --> 00:28:41,670 faktisk vil gjelde når du er i få positive int Men mer om det 695 00:28:41,670 --> 00:28:43,890 annen gang, men bare for de nysgjerrige. 696 00:28:43,890 --> 00:28:45,970 >> Så kort sagt, vi fikse dette her. 697 00:28:45,970 --> 00:28:49,220 Nå la oss erte hverandre to andre stykker før vi ser på en siste linje med kode 698 00:28:49,220 --> 00:28:50,170 i dette programmet. 699 00:28:50,170 --> 00:28:52,170 Få positive int. 700 00:28:52,170 --> 00:28:54,450 På venstre side av dens ord er ordet int. 701 00:28:54,450 --> 00:28:56,860 Hva betyr det bety tror du? 702 00:28:56,860 --> 00:28:58,900 Så langt har vi mest sett ugyldig. 703 00:28:58,900 --> 00:28:59,400 Yeah? 704 00:28:59,400 --> 00:29:01,810 >> PUBLIKUM: Det er den type variabel som du spør om. 705 00:29:01,810 --> 00:29:04,550 >> SPEAKER 1: Ja det er den typen, la meg si ikke variable, men den type verdien 706 00:29:04,550 --> 00:29:05,990 at jeg spør tilbake for. 707 00:29:05,990 --> 00:29:08,070 Og ja, det er intuitive her, forhåpentligvis. 708 00:29:08,070 --> 00:29:08,200 Høyre? 709 00:29:08,200 --> 00:29:10,250 Hvis du ønsker å få en positiv int, hva er det du 710 00:29:10,250 --> 00:29:12,920 ønsker function-- som vår frivillige fra forrige uke 711 00:29:12,920 --> 00:29:15,720 å levere deg tilbake et stykke papir med en int på den? 712 00:29:15,720 --> 00:29:19,190 Og så har vi presisert at såkalt returtype av denne funksjonen 713 00:29:19,190 --> 00:29:20,450 er å få positiv int. 714 00:29:20,450 --> 00:29:22,990 Hvis vi ikke vil ha det til tilbake noe, du sier annullert. 715 00:29:22,990 --> 00:29:25,270 Hvis du vil at den skal komme tilbake en streng, sier du streng. 716 00:29:25,270 --> 00:29:27,310 Hvis du vil at den skal komme tilbake en flåte, sier du flyte. 717 00:29:27,310 --> 00:29:30,440 Men det eneste som gjelder her logisk, fordi jeg bruker get int, 718 00:29:30,440 --> 00:29:34,130 selv om jeg begrenser det til positive verdier, er å returnere en int. 719 00:29:34,130 --> 00:29:38,380 >> Så omvendt, hva betyr det at det er et tomrom i parentes? 720 00:29:38,380 --> 00:29:40,130 Hva gjør parentes generelt definerer? 721 00:29:40,130 --> 00:29:40,588 Yeah? 722 00:29:40,588 --> 00:29:42,880 >> PUBLIKUM: Det betyr funksjonens faktisk ikke får det. 723 00:29:42,880 --> 00:29:44,650 >> SPEAKER 1: Det betyr funksjonens faktisk ikke får det? 724 00:29:44,650 --> 00:29:45,430 >> PUBLIKUM: En inngang. 725 00:29:45,430 --> 00:29:46,763 >> SPEAKER 1: En input, overhodet. 726 00:29:46,763 --> 00:29:49,870 Så ja, hvis parentes her du angir ugyldig, 727 00:29:49,870 --> 00:29:51,650 det betyr bare at jeg vil ikke ha noen innspill. 728 00:29:51,650 --> 00:29:53,269 Jeg skal håndtere problemet selv. 729 00:29:53,269 --> 00:29:55,810 Og ja, du trenger ikke å fortell få positive int noe. 730 00:29:55,810 --> 00:29:59,630 Du bare si, få positive int, og at funksjonen vil gå av og gjøre sine ting. 731 00:29:59,630 --> 00:30:02,970 >> Men det har vært et lite triks jeg har spilt her hele tiden 732 00:30:02,970 --> 00:30:04,970 å sørge for at denne koden kompilerer. 733 00:30:04,970 --> 00:30:09,620 Legg merke til at int-- få positive int void-- er på linje 27. 734 00:30:09,620 --> 00:30:14,530 Men for noen tilsynelatende merkelig grunn det er også opp her på linje 16. 735 00:30:14,530 --> 00:30:18,530 Og bare for godt mål vil jeg gjenta dette så det er helt identiske. 736 00:30:18,530 --> 00:30:21,640 Og jeg har sagt prototype med en liten en-linje kommentar. 737 00:30:21,640 --> 00:30:28,850 Hva skjer hvis jeg sletter det, og Nå kjør gjøre funksjon 1, taster. 738 00:30:28,850 --> 00:30:29,350 Uff da. 739 00:30:29,350 --> 00:30:32,527 740 00:30:32,527 --> 00:30:33,110 Vent et minutt. 741 00:30:33,110 --> 00:30:34,764 Hvor er min kategorien? 742 00:30:34,764 --> 00:30:35,263 Huh? 743 00:30:35,263 --> 00:30:37,969 744 00:30:37,969 --> 00:30:39,620 Vent litt. 745 00:30:39,620 --> 00:30:41,570 Gjør funksjon 1. 746 00:30:41,570 --> 00:30:42,150 Det vi går. 747 00:30:42,150 --> 00:30:42,310 OK. 748 00:30:42,310 --> 00:30:43,400 Hadde ikke lagret den på riktig måte. 749 00:30:43,400 --> 00:30:45,220 Så jeg tror det er en liten bug her hvor jeg ikke 750 00:30:45,220 --> 00:30:46,636 se kategorinavnet i øyeblikket. 751 00:30:46,636 --> 00:30:47,940 Så hva er det som skjer her? 752 00:30:47,940 --> 00:30:52,210 Implisitt erklæring funksjon få positive int er ugyldig i C99. 753 00:30:52,210 --> 00:30:53,940 Så forvirrende igjen. 754 00:30:53,940 --> 00:30:55,200 Så hva er dette et tegn på? 755 00:30:55,200 --> 00:30:57,287 Vel, det viser seg at C er ganske dum. 756 00:30:57,287 --> 00:30:59,912 Vel, det er programmerings språk, eller snarere kompilatoren er. 757 00:30:59,912 --> 00:31:02,940 Det bare vet hva du har lært det, og det er bare 758 00:31:02,940 --> 00:31:05,640 kommer til å vite noe hvis du lært det før. 759 00:31:05,640 --> 00:31:07,960 Med andre ord, i Hoved i øyeblikket, er jeg 760 00:31:07,960 --> 00:31:10,900 prøver å kalle en funksjon kalte få positive int. 761 00:31:10,900 --> 00:31:14,120 Men kompilatoren ikke kommer å legge merke til at få positive int 762 00:31:14,120 --> 00:31:16,500 Det finnes til linje 26. 763 00:31:16,500 --> 00:31:21,360 Og så hva kompilatoren gjør er bare feil så snart det blir til linje 17, 764 00:31:21,360 --> 00:31:23,700 sier implisitt erklæring av få positive int, som 765 00:31:23,700 --> 00:31:27,740 er bare en fancy måte å si, vet jeg ikke vet hva får positive int er ennå. 766 00:31:27,740 --> 00:31:31,240 >> Andre språk som Java og Python og Ruby kan se fremover. 767 00:31:31,240 --> 00:31:32,240 C ikke. 768 00:31:32,240 --> 00:31:35,110 Og så måten vi fikse Dette er en av to måter. 769 00:31:35,110 --> 00:31:40,160 Enten en, hvis problemet er at få positive int har ikke vært sett før, 770 00:31:40,160 --> 00:31:42,150 vel, la meg bare flytte den til toppen. 771 00:31:42,150 --> 00:31:43,650 Det ville løse dette problemet. 772 00:31:43,650 --> 00:31:46,790 Men generelt er det anses bedre teknikk 773 00:31:46,790 --> 00:31:50,220 å sette din viktigste funksjon i det toppen slik at et menneske leser koden din 774 00:31:50,220 --> 00:31:52,710 vet hva programmet gjør, fordi hoved er ikke begravet alle 775 00:31:52,710 --> 00:31:53,960 helt på bunnen eller i midten. 776 00:31:53,960 --> 00:31:55,130 Det er helt på toppen. 777 00:31:55,130 --> 00:31:56,410 Så det føles ikke ideelt. 778 00:31:56,410 --> 00:31:58,326 Og du kan faktisk få inn i situasjoner der 779 00:31:58,326 --> 00:32:00,820 hvis en funksjonskall en annen, som krever en annen, 780 00:32:00,820 --> 00:32:04,630 du kan få inn i en sak der verken kan gå over den andre, logisk. 781 00:32:04,630 --> 00:32:05,920 Det er bare ikke mulig. 782 00:32:05,920 --> 00:32:09,290 >> Og så vei til jobb rundt dette er å bare ta 783 00:32:09,290 --> 00:32:13,200 funksjonen underskrift, så å speak-- den første linjen hvor det er declared-- 784 00:32:13,200 --> 00:32:16,850 og bare kopiere, lime den på toppen, men ikke med krøllete braces-- 785 00:32:16,850 --> 00:32:17,980 bare med et semikolon. 786 00:32:17,980 --> 00:32:20,840 Det er som et lite hint av det som skal komme. 787 00:32:20,840 --> 00:32:26,630 Og faktisk hele denne tiden når vi har sett ting som standard io.h 788 00:32:26,630 --> 00:32:33,040 og cs50.h, på samme måte, i disse dot h-filer er det andre prototyper. 789 00:32:33,040 --> 00:32:35,250 Og vi vil se at før lenge. 790 00:32:35,250 --> 00:32:39,340 >> Så kort sagt, når du har et program i en fil med flere funksjoner 791 00:32:39,340 --> 00:32:42,300 foruten hoved, du nesten alltid ønsker å erklære dem 792 00:32:42,300 --> 00:32:45,360 bare ved hjelp av sin første linje, etterfulgt av et semikolon, 793 00:32:45,360 --> 00:32:48,410 på toppen av filen. 794 00:32:48,410 --> 00:32:50,460 Det var mange på en gang. 795 00:32:50,460 --> 00:32:53,130 Noen spørsmål? 796 00:32:53,130 --> 00:32:53,920 Noen spørsmål? 797 00:32:53,920 --> 00:32:54,530 Greit. 798 00:32:54,530 --> 00:32:59,760 >> Så la oss gå videre da til noe som hoste. 799 00:32:59,760 --> 00:33:00,260 Oh. 800 00:33:00,260 --> 00:33:00,570 Hvordan passer. 801 00:33:00,570 --> 00:33:01,220 Greit. 802 00:33:01,220 --> 00:33:02,260 Hoste. 803 00:33:02,260 --> 00:33:05,080 Så her er en c gjennomføringen av et program 804 00:33:05,080 --> 00:33:07,560 vi gjorde den andre dagen i Skrap at veldig rett og slett bare 805 00:33:07,560 --> 00:33:08,691 sier hoste, hoste, hoste. 806 00:33:08,691 --> 00:33:09,190 Greit. 807 00:33:09,190 --> 00:33:11,136 Og noen sa noen dager siden at det er 808 00:33:11,136 --> 00:33:12,760 en måte å rense denne koden opp allerede. 809 00:33:12,760 --> 00:33:12,880 Greit? 810 00:33:12,880 --> 00:33:15,440 Så snart du kopierer og limer sannsynligvis dårlig design. 811 00:33:15,440 --> 00:33:18,725 Minst en gang vi får fire eller fem eller 20 hoste, føles det dårlig praksis. 812 00:33:18,725 --> 00:33:19,850 Vi bare holde kopiere, lime. 813 00:33:19,850 --> 00:33:22,213 Hva er den åpenbare løsningen til rengjøring dette programmet opp? 814 00:33:22,213 --> 00:33:23,120 >> PUBLIKUM: Loop. 815 00:33:23,120 --> 00:33:23,350 >> SPEAKER 1: Yeah. 816 00:33:23,350 --> 00:33:24,070 Så bruk en loop. 817 00:33:24,070 --> 00:33:27,697 Og vi kan bruke en for-loop, en stund loop, en rekke tilnærminger. 818 00:33:27,697 --> 00:33:29,780 Og ja, det er det vi gjør i versjon en her. 819 00:33:29,780 --> 00:33:32,250 Jeg har i stedet skrevet om det i versjon en av cough.c 820 00:33:32,250 --> 00:33:35,170 å være bare hoste innen et for-løkke. 821 00:33:35,170 --> 00:33:38,240 Greit, men det er en sjansen nå til slags start 822 00:33:38,240 --> 00:33:41,630 å utforme denne litt mer lik leksjonen vi lært et øyeblikk siden, 823 00:33:41,630 --> 00:33:46,190 som er dette-- antar at jeg ønsket for å lage en funksjon kalt hoste, 824 00:33:46,190 --> 00:33:49,730 la oss vurdere for bare et øyeblikk hva det kommer til å se ut. 825 00:33:49,730 --> 00:33:51,900 Så hvis jeg vil ha noe å hoste, jeg trenger bare 826 00:33:51,900 --> 00:33:53,800 å bruke print f inne funksjonen. 827 00:33:53,800 --> 00:33:55,030 Og ja jeg er. 828 00:33:55,030 --> 00:33:56,990 Og faktisk all denne tid, helst du er 829 00:33:56,990 --> 00:33:59,000 utskrift noe å skjermen, en programmerer 830 00:33:59,000 --> 00:34:00,610 vil kalle det en bivirkning. 831 00:34:00,610 --> 00:34:02,990 Det er ikke meg å overlate tilbake noen en verdi. 832 00:34:02,990 --> 00:34:06,170 Det er meg å ta noen handling som kan være visuelt tydelig. 833 00:34:06,170 --> 00:34:10,672 Men denne funksjonen hoste, betyr det tilbake noe basert på sin første linje? 834 00:34:10,672 --> 00:34:12,880 Nei, fordi returtype er ugyldig, noe som betyr bare 835 00:34:12,880 --> 00:34:14,250 det er ikke levere meg noe tilbake. 836 00:34:14,250 --> 00:34:16,791 Det kan være å gjøre noe visuelt, men det er ikke levere meg 837 00:34:16,791 --> 00:34:18,639 tilbake et stykke papir som forrige uke. 838 00:34:18,639 --> 00:34:21,310 >> Betyr det trenger noen innspill? 839 00:34:21,310 --> 00:34:21,810 Nei. 840 00:34:21,810 --> 00:34:23,134 Og så det er tomrom her også. 841 00:34:23,134 --> 00:34:25,600 Så også dette er slags over-ingeniør dette problemet. 842 00:34:25,600 --> 00:34:26,099 Høyre? 843 00:34:26,099 --> 00:34:28,820 Jeg har gjort programmet mer komplekse, flere linjer med kode, 844 00:34:28,820 --> 00:34:31,889 Jeg har ikke gjort det noe mer funksjonell, men denne 845 00:34:31,889 --> 00:34:34,210 ville være et springbrett, kanskje, for en bredere 846 00:34:34,210 --> 00:34:36,830 sammenheng med mer komplisert kode. 847 00:34:36,830 --> 00:34:38,150 Men hva om dette? 848 00:34:38,150 --> 00:34:42,050 Hva har jeg done-- bare skotter på dette uten å se på den kommentaren 849 00:34:42,050 --> 00:34:46,076 på toppen av file-- hva har Jeg fundamentalt gjort her med min hoste 850 00:34:46,076 --> 00:34:47,409 implementering som er annerledes? 851 00:34:47,409 --> 00:34:48,327 Ja, i ryggen? 852 00:34:48,327 --> 00:34:51,384 >> PUBLIKUM: Gjør det slik at du kan har en karakter slå av. 853 00:34:51,384 --> 00:34:52,050 SPEAKER 1: Yeah. 854 00:34:52,050 --> 00:34:53,270 Så dette føles litt fint. 855 00:34:53,270 --> 00:34:53,389 Høyre? 856 00:34:53,389 --> 00:34:56,600 Det er som å legge til en funksjon i program eller funksjon, i dette tilfellet. 857 00:34:56,600 --> 00:34:57,830 Det fortsatt returnerer ingenting. 858 00:34:57,830 --> 00:35:00,538 Det kan ha en visuell bivirkning, fordi den som ringer print f. 859 00:35:00,538 --> 00:35:02,800 Men nå har jeg parametrized funksjon, som 860 00:35:02,800 --> 00:35:06,470 betyr at jeg har angitt tatt input av typen int og kaller det n, 861 00:35:06,470 --> 00:35:08,510 men jeg kan kalle det noe jeg ønsker. 862 00:35:08,510 --> 00:35:11,550 Faktisk kunne det bare være ganger for å bli enda mer eksplisitt. 863 00:35:11,550 --> 00:35:13,310 Og så kunne jeg bare endre dette her. 864 00:35:13,310 --> 00:35:16,450 Men poenget er at dette er hvordan jeg lage en funksjon som tar innspill. 865 00:35:16,450 --> 00:35:19,530 Og hvis du husker bla gjennom kanskje online i ett 866 00:35:19,530 --> 00:35:23,000 av walk-throughs, den fjerde og siste hoste f.eks 867 00:35:23,000 --> 00:35:27,150 du vil legge merke til her jeg har generalisert koden min further-- slags abstrahert 868 00:35:27,150 --> 00:35:27,690 det videre. 869 00:35:27,690 --> 00:35:31,390 Som hoste og nyse, begge er omtrent som å si noe eller gjøre 870 00:35:31,390 --> 00:35:32,330 en slags lyd. 871 00:35:32,330 --> 00:35:34,725 Lagre ville være tilsvar Scratch blokk. 872 00:35:34,725 --> 00:35:37,350 Og så hva jeg gjorde i denne versjonen, som vi kan bare blikk på, 873 00:35:37,350 --> 00:35:43,170 er hoste er akkurat som å si: [hoste] hoste, og i mellomtiden, er nysing 874 00:35:43,170 --> 00:35:44,570 som å si, [Achoo]. 875 00:35:44,570 --> 00:35:46,900 Og så jeg har generalisert gjennomføringen av disse 876 00:35:46,900 --> 00:35:48,970 nå implementere dette generisk funksjon, 877 00:35:48,970 --> 00:35:51,490 si, som er interessant for dagens formål 878 00:35:51,490 --> 00:35:54,300 bare fordi det fremdeles ikke har en returtype. 879 00:35:54,300 --> 00:35:56,398 Men hvor mange innganger har den? 880 00:35:56,398 --> 00:35:56,981 PUBLIKUM: Two. 881 00:35:56,981 --> 00:35:57,430 SPEAKER 1: Two. 882 00:35:57,430 --> 00:35:59,263 Og så hvis du ønsker å ta i to argumenter, 883 00:35:59,263 --> 00:36:00,710 bare skille dem med komma. 884 00:36:00,710 --> 00:36:03,110 Og hvis du vil deretter kalle den funksjonen, 885 00:36:03,110 --> 00:36:05,800 Legg merke til at du bare kalle sier, sitat, unquote, 886 00:36:05,800 --> 00:36:09,090 for det første argumentet, felles n, for det andre argumentet. 887 00:36:09,090 --> 00:36:12,130 Så igjen, vi må bare nå byggeklosser, slik at vi faktisk kan 888 00:36:12,130 --> 00:36:15,686 gjennomføre noen av våre egne funksjoner. 889 00:36:15,686 --> 00:36:16,570 Greit. 890 00:36:16,570 --> 00:36:19,690 Eventuelle spørsmål om disse? 891 00:36:19,690 --> 00:36:22,400 >> Så nå la oss skrelle tilbake et lag hvis så. 892 00:36:22,400 --> 00:36:24,840 Og målet, til slutt, er neste ukes problem sett 893 00:36:24,840 --> 00:36:27,710 kommer til å være på cryptogrophy-- kunsten scrambling informasjon. 894 00:36:27,710 --> 00:36:30,640 Og spesielt informasjonen vil ha deg kryptere eller dekryptere 895 00:36:30,640 --> 00:36:31,605 kommer til å være tekst. 896 00:36:31,605 --> 00:36:33,980 Og så den slags invitasjoner spørsmålet i dag som godt, 897 00:36:33,980 --> 00:36:38,480 hva som skjer under panseret med tekst utover ASCII fra uke null, 898 00:36:38,480 --> 00:36:40,730 og hvordan kan vi faktisk begynner å manipulere det? 899 00:36:40,730 --> 00:36:43,070 Så her er Zamyla navn. 900 00:36:43,070 --> 00:36:47,380 Og i teksten, som kan bli matet inn som get streng funksjonen. 901 00:36:47,380 --> 00:36:52,540 Og starter nå, når du ser en streng som dette-- Z-A-M-Y-L-A-- 902 00:36:52,540 --> 00:36:56,550 begynne å tenke på det som om hver av disse figurer er i en boks av dens 903 00:36:56,550 --> 00:36:57,050 egne. 904 00:36:57,050 --> 00:36:59,460 Og ja, i en uke eller så er tid, hver av disse bokser 905 00:36:59,460 --> 00:37:04,280 kommer til å representere svært spesifikt en blokk med memory-- en bit av minne. 906 00:37:04,280 --> 00:37:07,050 Slik at hver av disse bokstavene, til slutt, vil representere 8 bits. 907 00:37:07,050 --> 00:37:10,560 Og vi vil faktisk se hva som skjer på under panseret på min datamaskin. 908 00:37:10,560 --> 00:37:13,440 >> Men for ikke det tilstrekkelig bare å se på Zamyla 909 00:37:13,440 --> 00:37:17,520 gjennom denne linse, hvorved hver av Disse bokstaver er i en egen boks. 910 00:37:17,520 --> 00:37:22,697 Og pent nok i C vi kan tilgang til hver av disse boksene direkte. 911 00:37:22,697 --> 00:37:25,530 Så hvis du ønsker å få den første brev av navnet hennes, super lett C. 912 00:37:25,530 --> 00:37:28,410 Hvis du ønsker å få den siste brev, super lett også 913 00:37:28,410 --> 00:37:30,240 med et stykke av nye syntaksen. 914 00:37:30,240 --> 00:37:36,250 >> Så jeg kommer til å gå videre inn i CS50 IDE og åpne opp strengen null dot C. 915 00:37:36,250 --> 00:37:40,270 Og i dette eksempel her, er det et par nye ting skjer. 916 00:37:40,270 --> 00:37:44,360 Så først i linje 19, vi har sett denne before-- get streng. 917 00:37:44,360 --> 00:37:49,840 Så akkurat som en rask tilregnelighet sjekk, hvis noen kunne tilby opp verbalt 918 00:37:49,840 --> 00:37:52,662 en lekmann forklaring hva som skjer i linje 19. 919 00:37:52,662 --> 00:37:55,370 Som bare oversette dette til Engelsk at en samboer ikke i CS50 920 00:37:55,370 --> 00:37:56,416 kan forstå. 921 00:37:56,416 --> 00:37:56,916 Yeah. 922 00:37:56,916 --> 00:37:59,749 >> PUBLIKUM: Ha brukerundersøkelser en streng og lagre den i en variabel s. 923 00:37:59,749 --> 00:38:01,934 924 00:38:01,934 --> 00:38:02,600 SPEAKER 1: Good. 925 00:38:02,600 --> 00:38:05,579 Har brukerundersøkelser en streng og lagre den i en variabel s. 926 00:38:05,579 --> 00:38:06,120 Det er flott. 927 00:38:06,120 --> 00:38:08,090 Så på høyre hånd side, kaller vi får streng. 928 00:38:08,090 --> 00:38:10,340 Som returnerer en verdi som ikke får tildelt 929 00:38:10,340 --> 00:38:14,230 fra høyre til venstre side inn i en variabel kalt s som er 930 00:38:14,230 --> 00:38:15,950 utviklet for å lagre en streng. 931 00:38:15,950 --> 00:38:16,800 Nøyaktig. 932 00:38:16,800 --> 00:38:20,000 >> Så nå linje 22, per kommentaren i linje 21, 933 00:38:20,000 --> 00:38:22,780 åpenbart skriver at strengen ett tegn per linje. 934 00:38:22,780 --> 00:38:23,740 Men hvordan? 935 00:38:23,740 --> 00:38:27,040 Så først av alt, vi initial jeg til 0. 936 00:38:27,040 --> 00:38:31,061 Og deretter hvordan kommer vi oss til slutten av Zamyla navn? 937 00:38:31,061 --> 00:38:32,810 Vel, på slutten av Zamyla navn, jeg kunne 938 00:38:32,810 --> 00:38:38,151 manuelt skrive i det siste tegnet av hennes navn eller annen måte, eller antall det. 939 00:38:38,151 --> 00:38:38,650 Høyre? 940 00:38:38,650 --> 00:38:43,500 Hvis vi går tilbake her-- Z-A-M-L-- Y-L-A-- så jeg kunne skrive på. 941 00:38:43,500 --> 00:38:47,340 Hva er indeksen for Zamyla siste brevet? 942 00:38:47,340 --> 00:38:52,517 Hvis dette er 0-- snakker som en programmer-- 0, 1, 2, 3, 4, 5, 943 00:38:52,517 --> 00:38:56,570 Jeg heard-- så ja, den siste bokstaven i Zamyla navn er den sjette, 944 00:38:56,570 --> 00:38:58,890 men hvis vi telle fra 0, det kommer til å bli nummer fem. 945 00:38:58,890 --> 00:39:01,320 Så hold det i tankene her. 946 00:39:01,320 --> 00:39:04,929 >> Det viser seg at det er en funksjon i C kalles strlen, og tilbake i dag 947 00:39:04,929 --> 00:39:06,720 og til denne dag fortsatt, mange programmerere 948 00:39:06,720 --> 00:39:09,524 velge å synkronisere navn for deres funksjoner som høres ut som ordene 949 00:39:09,524 --> 00:39:10,440 de prøver å si. 950 00:39:10,440 --> 00:39:12,590 Så strlen er streng lengde. 951 00:39:12,590 --> 00:39:18,168 Og så hva ville streng lengde S tilbake når Zamyla er inngang? 952 00:39:18,168 --> 00:39:19,569 >> PUBLIKUM: Five. 953 00:39:19,569 --> 00:39:22,090 >> SPEAKER 1: Z-A-M-Y-L. Seks. 954 00:39:22,090 --> 00:39:22,590 Høyre? 955 00:39:22,590 --> 00:39:23,940 Hva er lengden på Zamyla navn? 956 00:39:23,940 --> 00:39:24,440 Høyre? 957 00:39:24,440 --> 00:39:26,240 Og bare i virkeligheten, seks bokstaver. 958 00:39:26,240 --> 00:39:26,740 Høyre? 959 00:39:26,740 --> 00:39:28,940 Og så hva betyr det for vår loop? 960 00:39:28,940 --> 00:39:32,130 Vi kommer til å gå fra 0 opp til seks, som 961 00:39:32,130 --> 00:39:33,650 kommer til å gi oss fem gjentakelser. 962 00:39:33,650 --> 00:39:34,890 Hva gjør vi på hver iterasjon? 963 00:39:34,890 --> 00:39:36,870 Vel, prosent C, noen gjettet den andre dagen, 964 00:39:36,870 --> 00:39:38,710 betyr en plassholder for hva? 965 00:39:38,710 --> 00:39:39,335 >> PUBLIKUM: Char. 966 00:39:39,335 --> 00:39:40,293 SPEAKER 1: Bare en char. 967 00:39:40,293 --> 00:39:42,877 Så en enkelt character-- ikke flere tegn som en streng. 968 00:39:42,877 --> 00:39:45,251 Og så her er den nye linjen at vi har fått skrive ut. 969 00:39:45,251 --> 00:39:46,580 Og så her er den nye syntaksen. 970 00:39:46,580 --> 00:39:51,130 Hvis du ønsker å skrive ut i-te tegnet i strengen S, så å si, 971 00:39:51,130 --> 00:39:54,060 kan du bare si det navn på strengen S, 972 00:39:54,060 --> 00:39:58,230 og deretter åpne hakeparentes, og deretter lukket hakeparentes, med en jeg 973 00:39:58,230 --> 00:39:58,780 midten. 974 00:39:58,780 --> 00:40:01,430 Og det er litt hyggelig at den slags ser ut som en firkantet 975 00:40:01,430 --> 00:40:06,210 akkurat som de rutene hvor Zamyla s tegn finnes på det bildet der. 976 00:40:06,210 --> 00:40:09,970 >> Så hvis jeg faktisk kjøre denne nå, la oss se hva som skjer. 977 00:40:09,970 --> 00:40:15,190 Gjør string 0 dot slash string 0, og da er jeg 978 00:40:15,190 --> 00:40:16,720 kommer til å skrive i Zamyla navn. 979 00:40:16,720 --> 00:40:19,428 Det er ingen spørsmål, fordi jeg ikke bruke print f, men det er fint. 980 00:40:19,428 --> 00:40:20,660 Jeg bare vet hva de skal gjøre. 981 00:40:20,660 --> 00:40:23,240 Og faktisk, skriver den ut Zamyla navn, ett per linje. 982 00:40:23,240 --> 00:40:25,760 >> Nå la oss være litt uvøren. 983 00:40:25,760 --> 00:40:28,461 Anta at jeg ikke visste om strlen og jeg skjønte, 984 00:40:28,461 --> 00:40:31,460 all right, ingen kommer til å ha en nevne større enn som 50 tegn. 985 00:40:31,460 --> 00:40:36,360 La oss gå videre og rekompilere dette og kjør den, og deretter inn i Zamyla 986 00:40:36,360 --> 00:40:37,160 igjen. 987 00:40:37,160 --> 00:40:40,850 Logisk, hva er Programmet skal prøve å skrive ut? 988 00:40:40,850 --> 00:40:49,545 Z-A-M-Y-L-A så som 45 ukjente byte minne. 989 00:40:49,545 --> 00:40:51,670 Og ja, vi kommer tilbake til denne ideen minne. 990 00:40:51,670 --> 00:40:54,180 Men bare logisk, hvis Zamyla navn er dette lenge, 991 00:40:54,180 --> 00:40:56,450 i henhold til bildet her, hva vi sier 992 00:40:56,450 --> 00:40:59,810 er å fortsette å skrive ut, fortsette å skrive ut, holde utskrift, hold utskrift, hold utskrift, 993 00:40:59,810 --> 00:41:03,781 helt til den 50. karakter, som hvem vet hva som kommer til å skje. 994 00:41:03,781 --> 00:41:05,030 Så la oss faktisk ta en titt. 995 00:41:05,030 --> 00:41:06,720 La oss skrive inn Zamyla. 996 00:41:06,720 --> 00:41:07,250 Interessant. 997 00:41:07,250 --> 00:41:08,190 Vi hadde flaks. 998 00:41:08,190 --> 00:41:09,700 Bare en hel haug med hvite området. 999 00:41:09,700 --> 00:41:09,930 Oh. 1000 00:41:09,930 --> 00:41:11,120 Det er en funky karakter. 1001 00:41:11,120 --> 00:41:14,577 Det ser litt ut som en merkelig spørsmål markere det, men det er Zamyla navn. 1002 00:41:14,577 --> 00:41:15,660 La oss få virkelig hensynsløs. 1003 00:41:15,660 --> 00:41:20,000 Hva om vi skrive ut 500 blokker i det ukjente? 1004 00:41:20,000 --> 00:41:24,380 La oss gå videre og gjøre dette i tillegg, og deretter re-run. 1005 00:41:24,380 --> 00:41:27,980 Og la oss fullskjerm det, fordi vi trenger å se mer plass. 1006 00:41:27,980 --> 00:41:30,460 Zamyla. 1007 00:41:30,460 --> 00:41:31,830 Hadde flaks igjen. 1008 00:41:31,830 --> 00:41:33,070 >> Tør vi få mer uvøren? 1009 00:41:33,070 --> 00:41:36,070 La oss få mer uvøren. 1010 00:41:36,070 --> 00:41:39,350 50.000 tegn. 1011 00:41:39,350 --> 00:41:41,390 Dette er mest sikkert ikke en god idé. 1012 00:41:41,390 --> 00:41:41,890 Greit. 1013 00:41:41,890 --> 00:41:42,990 Gjør string 0. 1014 00:41:42,990 --> 00:41:44,720 Dette vil være vår siste demo. 1015 00:41:44,720 --> 00:41:47,261 Zamyla. 1016 00:41:47,261 --> 00:41:48,632 Ugh. 1017 00:41:48,632 --> 00:41:50,010 Ugh. 1018 00:41:50,010 --> 00:41:50,680 OK. 1019 00:41:50,680 --> 00:41:54,407 Så min hukommelse er virkelig tom akkurat nå, som er faktisk slags praktisk. 1020 00:41:54,407 --> 00:41:55,990 Det jeg prøver å få to-- all right. 1021 00:41:55,990 --> 00:41:57,614 Og nå er jeg bare kommer til å få hensynsløs. 1022 00:41:57,614 --> 00:41:58,570 500000. 1023 00:41:58,570 --> 00:42:03,860 Make-- la oss fullskjerms det. 1024 00:42:03,860 --> 00:42:04,990 Enter. 1025 00:42:04,990 --> 00:42:05,490 Zamyla. 1026 00:42:05,490 --> 00:42:12,050 1027 00:42:12,050 --> 00:42:13,390 Det vi går. 1028 00:42:13,390 --> 00:42:15,610 Jeg har ingen anelse om hva som er, men det høres ille. 1029 00:42:15,610 --> 00:42:16,110 Greit. 1030 00:42:16,110 --> 00:42:20,322 Og faktisk, snart, hvis du er blant de heldige få i kontortiden 1031 00:42:20,322 --> 00:42:22,780 og i oppgavesettet en, du kan godt møte dette. 1032 00:42:22,780 --> 00:42:25,490 Segmentering feil faktisk gjør har en veldefinert mening. 1033 00:42:25,490 --> 00:42:28,450 Det betyr en slags feil knyttet til et segment av hukommelse. 1034 00:42:28,450 --> 00:42:30,490 Og i lekmann vilkår, betyr det at vi rørte 1035 00:42:30,490 --> 00:42:34,780 memory-- vi brukte RAM i datamaskinen min at jeg ikke skulle ha hatt tilgang til. 1036 00:42:34,780 --> 00:42:37,050 Og det er det som er både kraftig og også farlig 1037 00:42:37,050 --> 00:42:39,910 om C er at du faktisk har uhemmet tilgang 1038 00:42:39,910 --> 00:42:45,910 til helheten av programmet minne eller byte eller RAM, mer spesifikt. 1039 00:42:45,910 --> 00:42:49,510 >> Så selv om Zamyla navn er bare seks tegn, 1040 00:42:49,510 --> 00:42:51,450 Jeg kan fortsatt gå noe minne jeg vil. 1041 00:42:51,450 --> 00:42:53,491 Og som en side, hvis du har inne har lest noen artikkel 1042 00:42:53,491 --> 00:42:55,610 gjennom årene om noen server eller noen program 1043 00:42:55,610 --> 00:42:58,654 får sprukket eller hacket som er tatt nytte av noe 1044 00:42:58,654 --> 00:43:00,820 kalles en buffer overflow utnytte at vi faktisk 1045 00:43:00,820 --> 00:43:04,970 snakke om i et par uker, det er generelt henviser til en eller annen måte å lure 1046 00:43:04,970 --> 00:43:09,090 en datamaskin til å gå bra utover grensene for minne 1047 00:43:09,090 --> 00:43:11,410 at den skal ha, og finne noe saftig 1048 00:43:11,410 --> 00:43:13,530 i at memory-- en passord, kanskje, en vei 1049 00:43:13,530 --> 00:43:16,990 omgå noen serienummer sjekk, eller bare generelt stand 1050 00:43:16,990 --> 00:43:20,360 å lure datamaskinen utfører kode som ikke var ment. 1051 00:43:20,360 --> 00:43:22,360 Men la oss komme tilbake til virkeligheten for bare et øyeblikk 1052 00:43:22,360 --> 00:43:24,550 hvor dette programmet var implementert med strlen, 1053 00:43:24,550 --> 00:43:26,110 og introdusere en ting her oppe. 1054 00:43:26,110 --> 00:43:30,030 Hva er nytt blant disse tre øverste linjene? 1055 00:43:30,030 --> 00:43:30,910 >> Så streng dot h. 1056 00:43:30,910 --> 00:43:35,490 Det viser seg at det er dette biblioteket heter String Dot H, eller String Library, 1057 00:43:35,490 --> 00:43:38,490 som header fil, så å si, er streng dot h som gir meg 1058 00:43:38,490 --> 00:43:40,860 tilgang til denne strlen funksjonen. 1059 00:43:40,860 --> 00:43:43,841 Hvis jeg utelater det, er kompilatoren kommer til å kjefte på meg i en eller annen form. 1060 00:43:43,841 --> 00:43:44,590 Men vet du hva? 1061 00:43:44,590 --> 00:43:46,090 La oss nå få virkelig nyansert. 1062 00:43:46,090 --> 00:43:50,820 I tråd 22, det er noe slag av inefficient-- dårlig utformet, 1063 00:43:50,820 --> 00:43:53,990 arguably-- om denne linjen med kode. 1064 00:43:53,990 --> 00:43:56,280 Tenk tilbake til hvordan for-loop er implementert 1065 00:43:56,280 --> 00:44:00,140 og hvilke skritt skje igjen og igjen og igjen-- initialisering, 1066 00:44:00,140 --> 00:44:04,110 tilstanden, koden blir henrettet, da tilveksten 1067 00:44:04,110 --> 00:44:07,880 eller endringen, og tilstanden, deretter koden, da endringen, deretter 1068 00:44:07,880 --> 00:44:11,280 tilstanden, da koden Da endringen, og så videre. 1069 00:44:11,280 --> 00:44:15,320 Så hva kan være litt bekymringsfullt eller dårlig gjort her? 1070 00:44:15,320 --> 00:44:16,387 Ja, i blått. 1071 00:44:16,387 --> 00:44:18,220 PUBLIKUM: strlen er kalt mange, mange ganger. 1072 00:44:18,220 --> 00:44:20,654 1073 00:44:20,654 --> 00:44:21,320 SPEAKER 1: Yeah. 1074 00:44:21,320 --> 00:44:23,700 Så strlen kalles mange ganger, men det er 1075 00:44:23,700 --> 00:44:27,113 lengden av Zamyla navn på første gang sløyfen utfører? 1076 00:44:27,113 --> 00:44:27,860 >> PUBLIKUM: Six. 1077 00:44:27,860 --> 00:44:28,110 >> SPEAKER 1: Seks. 1078 00:44:28,110 --> 00:44:30,976 Vel, hva er lengden på hennes navn andre gang koden utfører? 1079 00:44:30,976 --> 00:44:31,432 >> PUBLIKUM: Six. 1080 00:44:31,432 --> 00:44:31,890 >> SPEAKER 1: All right. 1081 00:44:31,890 --> 00:44:32,720 Det er fortsatt seks. 1082 00:44:32,720 --> 00:44:33,220 Høyre? 1083 00:44:33,220 --> 00:44:35,260 Zarla navn har ikke endret, selv om jeg ser 1084 00:44:35,260 --> 00:44:38,240 bare en del av bokstavene i navnet hennes. 1085 00:44:38,240 --> 00:44:41,349 Og så det faktum at jeg er effektivt spør dette spørsmålet, hva er 1086 00:44:41,349 --> 00:44:44,640 lengden på Zamyla, hva er lengden av Zamyla, hva er lengden på Zamyla, 1087 00:44:44,640 --> 00:44:47,990 seks separate ganger, eller sju selv, er bare dumt, 1088 00:44:47,990 --> 00:44:50,390 fordi det er uforanderlige det svaret. 1089 00:44:50,390 --> 00:44:53,550 Og så det jeg kunne faktisk gjøre er dette-- i streng én 1090 00:44:53,550 --> 00:44:55,680 Jeg har en marginalt bedre versjon her. 1091 00:44:55,680 --> 00:45:00,110 Det-- whoops-- string to jeg har en marginalt bedre versjon, hvor 1092 00:45:00,110 --> 00:45:05,010 Jeg gjør dette-- stedet for bare initialisering jeg til 0, jeg også med komma 1093 00:45:05,010 --> 00:45:07,990 erklære en ny variabel kalt N- Jeg trenger ikke å si int igjen. 1094 00:45:07,990 --> 00:45:09,220 Jeg burde ikke, faktisk. 1095 00:45:09,220 --> 00:45:10,380 Men jeg sier n. 1096 00:45:10,380 --> 00:45:13,610 Og da jeg initial n til den strlen av n, slik at nå 1097 00:45:13,610 --> 00:45:17,110 hvor mange ganger har strlen bli henrettet i total? 1098 00:45:17,110 --> 00:45:17,610 Bare en gang. 1099 00:45:17,610 --> 00:45:20,257 Og så dette er hva vi mener tidligere om bedre design. 1100 00:45:20,257 --> 00:45:23,090 Faktisk når koden er riktig, kommer tilbake og tenke gjennom, 1101 00:45:23,090 --> 00:45:26,820 jeg bruker så lite hukommelse eller så få sekunder 1102 00:45:26,820 --> 00:45:30,409 eller millisekunder av datamaskinen tid som mulig å gjennomføre noen problem? 1103 00:45:30,409 --> 00:45:32,200 Og jeg kommer til å rulle opp og bare nevne 1104 00:45:32,200 --> 00:45:34,283 at det er denne omtale fra null i denne versjon, 1105 00:45:34,283 --> 00:45:36,390 men vi vil komme tilbake til det før lenge. 1106 00:45:36,390 --> 00:45:41,010 Fordi for nå, la oss ta en titt på hvor dette kommer til å føre oss. 1107 00:45:41,010 --> 00:45:44,110 Så en, viser det seg at nå som vi har muligheten 1108 00:45:44,110 --> 00:45:46,860 å se på individuelle tegn, kan vi utnytte noe 1109 00:45:46,860 --> 00:45:50,807 fra uke 0 som var veldig uforståelige og liksom uinteressant på den tiden. 1110 00:45:50,807 --> 00:45:53,390 Men nå, og spesielt når vi komme til kryptografi i en uke, 1111 00:45:53,390 --> 00:45:54,820 det kommer til å bli ganske kraftig. 1112 00:45:54,820 --> 00:45:57,450 Det viser seg at med noen data types-- ints og flyter 1113 00:45:57,450 --> 00:46:00,300 og tegn og strenger og andre things-- noen av dem 1114 00:46:00,300 --> 00:46:02,800 kan veldig enkelt konverteres til en annen. 1115 00:46:02,800 --> 00:46:05,840 >> For eksempel, når vi snakket om ASCII litt tid ago-- her er 1116 00:46:05,840 --> 00:46:07,796 den store bokstaver A gjennom M, prikk, prikk, 1117 00:46:07,796 --> 00:46:12,530 dot-- vi sa at det er en kartlegging mellom disse bokstaver og tall. 1118 00:46:12,530 --> 00:46:14,970 Og faktisk, det gjelder for små bokstaver også. 1119 00:46:14,970 --> 00:46:17,470 Små bokstaver en er 97, kapital en er 65. 1120 00:46:17,470 --> 00:46:20,860 Og det er et tall i ASCII, som er bare denne kartleggingen 1121 00:46:20,860 --> 00:46:23,240 system for alle de andre bokstaver. 1122 00:46:23,240 --> 00:46:25,030 Så hva betyr det? 1123 00:46:25,030 --> 00:46:28,390 Vel, jeg kommer til å gå videre og åpne opp real raskt noe som kalles 1124 00:46:28,390 --> 00:46:31,240 ASCII 0, de fleste som er kommentarer. 1125 00:46:31,240 --> 00:46:33,860 Og igjen på nettet du kan alltid blikk gjennom kommentarene. 1126 00:46:33,860 --> 00:46:36,180 >> Og ta en titt på hva dette kommer til å gjøre. 1127 00:46:36,180 --> 00:46:38,410 Så det har en hovedfunksjon. 1128 00:46:38,410 --> 00:46:41,490 Jeg har hardkodet tallene bare for nå, fordi jeg vet hva jeg gjør. 1129 00:46:41,490 --> 00:46:42,950 Jeg vet hva jeg ønsker å se her. 1130 00:46:42,950 --> 00:46:45,220 Og jeg har initialisert jeg til 65. 1131 00:46:45,220 --> 00:46:48,490 Og jeg telle opp gjennom 26 bokstaver totalt. 1132 00:46:48,490 --> 00:46:52,990 Og hva skal jeg skrive ut én linje av gangen 1133 00:46:52,990 --> 00:46:54,930 hvis du kan tolke Dette markerte linjen? 1134 00:46:54,930 --> 00:46:55,970 Hva blir skrevet ut? 1135 00:46:55,970 --> 00:46:56,797 Yeah. 1136 00:46:56,797 --> 00:46:57,264 >> PUBLIKUM: Skal du for å skrive brevet som 1137 00:46:57,264 --> 00:46:59,805 korresponderer med kartet over brev verdi og heltall? 1138 00:46:59,805 --> 00:47:01,199 1139 00:47:01,199 --> 00:47:01,990 SPEAKER 1: Nettopp. 1140 00:47:01,990 --> 00:47:04,740 Jeg kommer til å skrive ut brev svarende til heltallsverdi, 1141 00:47:04,740 --> 00:47:06,131 og vice versa, som følger. 1142 00:47:06,131 --> 00:47:08,880 Vel dette, noen sa tidligere, er bare en plassholder for en char. 1143 00:47:08,880 --> 00:47:09,490 Det er det fortsatt. 1144 00:47:09,490 --> 00:47:12,280 Dette, selvfølgelig, er en plassholder for en int-- ikke en ny linje. 1145 00:47:12,280 --> 00:47:18,140 Og nå legger merke til, min første verdien som Jeg plugge inn for at plassholder 1146 00:47:18,140 --> 00:47:22,320 er ikke bare I. jeg sier, i parentes, røye jeg, 1147 00:47:22,320 --> 00:47:26,700 som parentes røye er forteller kompilatoren, behandler jeg 1148 00:47:26,700 --> 00:47:28,490 ikke som det som det er, som er et nummer. 1149 00:47:28,490 --> 00:47:30,490 Behandle det som en faktisk karakter. 1150 00:47:30,490 --> 00:47:34,490 Mens den andre verdien jeg plugging in-- I-- bør bare være et tall. 1151 00:47:34,490 --> 00:47:38,140 >> Så hvis jeg kompilere dette program-- så dette er å få ASCII 0, 1152 00:47:38,140 --> 00:47:41,720 dot slash ASCII 0-- jeg bare få denne hendige lille diagrammet som 1153 00:47:41,720 --> 00:47:44,950 viser meg alle mulige kartlegginger uten å måtte tenke det 1154 00:47:44,950 --> 00:47:46,450 gjennom eller finne ut av det på min egen. 1155 00:47:46,450 --> 00:47:48,783 Og jeg også skrive ut, legge merke til de små bokstaver, 1156 00:47:48,783 --> 00:47:51,410 fordi noen få linjer senere, jeg også skrive ut denne kartleggingen 1157 00:47:51,410 --> 00:47:53,737 også, som er bare å si at når du forstår 1158 00:47:53,737 --> 00:47:55,570 hva som skjer under panseret, kan du 1159 00:47:55,570 --> 00:47:57,111 automatisk konvertere frem og tilbake. 1160 00:47:57,111 --> 00:48:00,160 Og faktisk, hvis noen av dere noensinne gjorde dette i grunnskolen 1161 00:48:00,160 --> 00:48:03,490 eller hørt om noen mythically ta et notat 1162 00:48:03,490 --> 00:48:05,620 og passerer det til sin eller hennes venn i klassen, 1163 00:48:05,620 --> 00:48:08,300 men du egge den brev av som A blir B, 1164 00:48:08,300 --> 00:48:11,240 og B blir C, eller noe mer komplisert enn som så, vel, 1165 00:48:11,240 --> 00:48:13,410 hvordan ville du gå om implementere det som en gutt? 1166 00:48:13,410 --> 00:48:16,340 Vel, du bare vet slags A blir B, blir C B, 1167 00:48:16,340 --> 00:48:19,700 men matematisk, hva var den ungen gjør? 1168 00:48:19,700 --> 00:48:22,050 Hva var det du legger til hver bokstav? 1169 00:48:22,050 --> 00:48:23,340 Effektivt, 1. 1170 00:48:23,340 --> 00:48:27,740 >> Så når du endrer A til B, er at typen som endrer 65-66, 1171 00:48:27,740 --> 00:48:29,590 som matematisk betyr bare legge en. 1172 00:48:29,590 --> 00:48:33,300 Og så hvis du skulle implementere at litt villedende teknikk 1173 00:48:33,300 --> 00:48:36,380 for læreren i koden, du kan gjøre akkurat som bare 1174 00:48:36,380 --> 00:48:38,552 ved tilsetning av en enkelt bokstav sammen. 1175 00:48:38,552 --> 00:48:40,260 Så før lenge, vi er kommer til å se hvordan vi 1176 00:48:40,260 --> 00:48:43,300 kan dra nytte av det å faktisk genuint krafse og unscramble 1177 00:48:43,300 --> 00:48:43,991 informasjon. 1178 00:48:43,991 --> 00:48:47,240 I mellomtiden, vet at vi har startet å innføre et par andre bibliotek 1179 00:48:47,240 --> 00:48:48,990 her-- strengen én dag. 1180 00:48:48,990 --> 00:48:51,180 Og en veldig nyttig side forhåpentligvis vil du finne 1181 00:48:51,180 --> 00:48:55,010 kalles reference.cs50.net, som lærerstaben har satt sammen, 1182 00:48:55,010 --> 00:48:57,510 slik at hvis du vil se opp hvor strlen fungerer, 1183 00:48:57,510 --> 00:48:59,300 du kan begynne å skrive funksjonens navn, 1184 00:48:59,300 --> 00:49:02,890 klikk strlen der, og deretter en mindre behagelig forklaring 1185 00:49:02,890 --> 00:49:03,700 kommer til å vises. 1186 00:49:03,700 --> 00:49:06,880 Eller hvis du vil ha den offisielle Linux-baserte forklaring, 1187 00:49:06,880 --> 00:49:08,945 du kan klikke mer skjegg øverst til høyre, og det 1188 00:49:08,945 --> 00:49:12,070 vil presentere den samme informasjonen, men i mer komplekse termer. 1189 00:49:12,070 --> 00:49:15,070 Det er en nyttig ressurs for å faktisk vet hva alt gjør. 1190 00:49:15,070 --> 00:49:17,320 >> Neste gang vi kommer til å ta en titt på Ovaltine 1191 00:49:17,320 --> 00:49:20,070 og mer, og presentere oss til en verden av kryptografi. 1192 00:49:20,070 --> 00:49:21,930 Før da, vi får se du senere denne uken. 1193 00:49:21,930 --> 00:49:23,390 Og nå, Colton Ogden. 1194 00:49:23,390 --> 00:49:26,730 Ser deg på onsdag. 1195 00:49:26,730 --> 00:49:30,216 >> [MUSIC SPILLE] 1196 00:49:30,216 --> 00:49:33,702 >> [MUSIC SPILLE] 1197 00:49:33,702 --> 00:49:38,682 1198 00:49:38,682 --> 00:49:42,200 >> SPEAKER 1: Hva [Bleep] er det du gjør? 1199 00:49:42,200 --> 00:49:45,720 >> SPEAKER 1: Jeg spiser min dessert? 1200 00:49:45,720 --> 00:49:47,160 Hvordan spiser du det? 1201 00:49:47,160 --> 00:49:47,860 Med hendene? 1202 00:49:47,860 --> 00:49:54,050 1203 00:49:54,050 --> 00:49:57,940 >> [MUSIC SPILLE] 1204 00:49:57,940 --> 00:50:03,453