1 00:00:00,000 --> 00:00:02,880 >> [Musik spiller] 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 starten på uge to. 4 00:00:13,500 --> 00:00:18,400 Så lad os dykke lige ind i noget der er fejlbehæftet, så at sige. 5 00:00:18,400 --> 00:00:24,015 Så herovre er CS50 IDE og jeg har trukket op på forhånd dette screen-- pokkers 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 Okay. 9 00:00:26,260 --> 00:00:29,060 Jeg har trukket op denne skærm her, som har et meget simpelt program. 10 00:00:29,060 --> 00:00:32,659 Hvis vi rulle ned, de fleste dette er bare kommentarer, 11 00:00:32,659 --> 00:00:36,730 men her i linje 13 gennem 17 har vi et program. 12 00:00:36,730 --> 00:00:40,580 >> Det er syntaktisk gyldigt, hvilket betyder, at hvis Jeg kompilere det, det vil kompilere og køre, 13 00:00:40,580 --> 00:00:41,920 men det er fejlbehæftet. 14 00:00:41,920 --> 00:00:47,330 Dette program hævder i kommentarerne op toppen, at det skal printe 10 stjerner, 15 00:00:47,330 --> 00:00:48,870 men det gør det ikke. 16 00:00:48,870 --> 00:00:53,290 Og baseret på din oplevelse, eller snart at være erfaring med C, 17 00:00:53,290 --> 00:00:56,820 kan du logisk skelne hvorfor dette er i virkeligheden, buggy? 18 00:00:56,820 --> 00:00:57,804 Ja? 19 00:00:57,804 --> 00:00:59,220 PUBLIKUM: Det går fra nul til 10. 20 00:00:59,220 --> 00:01:01,884 Det er 11 iterationer. 21 00:01:01,884 --> 00:01:02,550 SPEAKER 1: Ja. 22 00:01:02,550 --> 00:01:06,030 Så går det fra nul op gennem og lig med 10, 23 00:01:06,030 --> 00:01:08,140 hvilket naturligvis er 11 iterationer. 24 00:01:08,140 --> 00:01:10,020 Så det vil print, ja, 11 stjerner. 25 00:01:10,020 --> 00:01:13,040 Så datalogi konvention i de fleste programmeringssprog 26 00:01:13,040 --> 00:01:15,270 er faktisk blot at begynde at tælle ved nul, 27 00:01:15,270 --> 00:01:18,800 men tælle op til, men ikke gennem værdi, som du rent faktisk bekymrer sig om. 28 00:01:18,800 --> 00:01:21,216 >> Nu, dette er en ting, tager lidt at vænne sig til 29 00:01:21,216 --> 00:01:25,350 og endda Scratch, udformet som det er for ikke programmører eller ikke computer 30 00:01:25,350 --> 00:01:28,070 forskere og for børn stort set, er designet til at have 31 00:01:28,070 --> 00:01:29,570 du begynde at tælle generelt ved en. 32 00:01:29,570 --> 00:01:30,277 Og det er fint. 33 00:01:30,277 --> 00:01:33,110 Du kan absolut begynde at tælle på en, hvis det er mere behageligt. 34 00:01:33,110 --> 00:01:37,210 Og tælle op til og gennem 10, men du vil indse især i denne uge 35 00:01:37,210 --> 00:01:39,950 og ud over det bare så mange ting i programmering 36 00:01:39,950 --> 00:01:42,465 antage, at 0 er den første ciffer, som du tælle, 37 00:01:42,465 --> 00:01:45,590 at du kommer til at finde det lettere bare for at komme ind i denne vane med udgangspunkt 38 00:01:45,590 --> 00:01:49,490 fra nul og tælle op til værdien du interesserer dig lige nu fra 39 00:01:49,490 --> 00:01:49,990 Hent gå. 40 00:01:49,990 --> 00:01:50,990 >> Så har det fast, at. 41 00:01:50,990 --> 00:01:53,670 Vi har ændret mindre end eller lig med bare mindre end. 42 00:01:53,670 --> 00:01:56,050 Lad os tage et kig på et andet eksempel her. 43 00:01:56,050 --> 00:01:59,585 >> Så dette program også hævder i sin kommentarer op toppen, at det skal udskrives 44 00:01:59,585 --> 00:02:02,260 ti stjerner, men det gør ikke. 45 00:02:02,260 --> 00:02:05,540 Hvad er fejlen her? 46 00:02:05,540 --> 00:02:07,930 >> Så Hvad-- og undskyld, lad os være klar. 47 00:02:07,930 --> 00:02:08,610 10 stjerner. 48 00:02:08,610 --> 00:02:11,644 En pr linje, men det gør ikke. 49 00:02:11,644 --> 00:02:14,810 Så i virkeligheden, lad mig gå videre og kompilere denne ene, fordi det er en smule mindre 50 00:02:14,810 --> 00:02:16,900 rydde baseret på denne beskrivelse. 51 00:02:16,900 --> 00:02:18,720 Lad mig gå ind i vores kilde mappe. 52 00:02:18,720 --> 00:02:25,110 Gøre buggy én prik skråstreg, buggy én. 53 00:02:25,110 --> 00:02:28,680 OK, jeg kan se 11 stjerner, som er stadig problematisk, 54 00:02:28,680 --> 00:02:30,090 men de er også alle i én linje. 55 00:02:30,090 --> 00:02:31,500 Hvad er problemet her? 56 00:02:31,500 --> 00:02:32,339 Ja. 57 00:02:32,339 --> 00:02:33,255 PUBLIKUM: [uhørligt]. 58 00:02:33,255 --> 00:02:36,194 59 00:02:36,194 --> 00:02:36,860 SPEAKER 1: Ja. 60 00:02:36,860 --> 00:02:40,210 Så dette er en underfundighed, som du kan genkalde mig at gøre kort omtale af. 61 00:02:40,210 --> 00:02:42,793 Selvom alt ser smuk, og det er pænt indrykket, 62 00:02:42,793 --> 00:02:45,850 og den slags ser Scratch-lignende i denne linje 16 og 17 er, 63 00:02:45,850 --> 00:02:47,600 ja, indrykket under dette for-løkke. 64 00:02:47,600 --> 00:02:48,400 Det er uden betydning. 65 00:02:48,400 --> 00:02:50,460 Computeren ikke kender eller se hvide rum. 66 00:02:50,460 --> 00:02:52,910 Hvide rum er bare for os mennesker, stilistisk. 67 00:02:52,910 --> 00:02:57,010 Computeren kender, når du har krøllede parenteser, som ville, ja, 68 00:02:57,010 --> 00:02:58,280 løse dette problem. 69 00:02:58,280 --> 00:03:02,350 >> Så hvis vi faktisk gik ind og udtrykkeligt sat i disse krøllede parenteser 70 00:03:02,350 --> 00:03:05,220 der ville løse dette problem ved at gør det klart for compileren 71 00:03:05,220 --> 00:03:07,930 at jeg faktisk ønsker at udføre to linjer kode igen, 72 00:03:07,930 --> 00:03:09,220 og igen og igen. 73 00:03:09,220 --> 00:03:11,680 Men hvad er den grundlæggende forklaring? 74 00:03:11,680 --> 00:03:12,180 Højre? 75 00:03:12,180 --> 00:03:15,260 Vi har ikke strengt brug krøllede seler hele tiden, 76 00:03:15,260 --> 00:03:18,210 selvom det er nok bedst praksis for at komme ind i denne vane alligevel 77 00:03:18,210 --> 00:03:20,878 selvom det tilføjer to tegn til din kode. hvorfor? 78 00:03:20,878 --> 00:03:22,380 >> PUBLIKUM: [uhørligt]? 79 00:03:22,380 --> 00:03:24,630 SPEAKER 1: Ja, så er en anden løsning helt. 80 00:03:24,630 --> 00:03:25,130 Højre? 81 00:03:25,130 --> 00:03:28,250 Især hvis ved første øjekast du ikke virkelig værdsætte, hvad der foregår. 82 00:03:28,250 --> 00:03:31,070 Nå, helt sikkert vi kunne bare gøre to ting på én gang 83 00:03:31,070 --> 00:03:32,710 og blot undgå problemet helt. 84 00:03:32,710 --> 00:03:36,080 Og det er fint, men nu, for nutidens formål, hvad 85 00:03:36,080 --> 00:03:38,200 er forklaringen på fejlen? 86 00:03:38,200 --> 00:03:39,810 Hvorfor var alle de stjerner på én linje? 87 00:03:39,810 --> 00:03:40,806 Ja? 88 00:03:40,806 --> 00:03:43,296 >> PUBLIKUM: Det ser ud til, at hvis du har en linje kode, 89 00:03:43,296 --> 00:03:46,649 du kan gøre det uden dem. 90 00:03:46,649 --> 00:03:47,440 SPEAKER 1: Præcis. 91 00:03:47,440 --> 00:03:48,750 Dette er blot et menneske konvention. 92 00:03:48,750 --> 00:03:50,750 Folk indser, at det er en lidt irriterende eller kedelige 93 00:03:50,750 --> 00:03:53,470 at nødt til at sætte krøllede parenteser alle af tiden, hvis alt du ønsker at gøre 94 00:03:53,470 --> 00:03:55,090 er udføre en linje kode. 95 00:03:55,090 --> 00:03:57,660 Så besluttede mennesker nogle tid siden, at det er fint. 96 00:03:57,660 --> 00:04:01,180 Hvis du ønsker at lægge alle dine løkke på bare, at én linje som dette, 97 00:04:01,180 --> 00:04:04,030 det er fint med en enkelt semikolon i slutningen. 98 00:04:04,030 --> 00:04:07,210 Men du kan kun gøre én sådan linje uden de krøllede parenteser. 99 00:04:07,210 --> 00:04:09,900 >> Så når CS50 stil guide som vil henvise dig til, 100 00:04:09,900 --> 00:04:11,980 vil du se, at der generelt det er god vane 101 00:04:11,980 --> 00:04:14,920 at komme ind i dette, indtil du er ganske behageligt forvilde 102 00:04:14,920 --> 00:04:17,404 fra disse former for konventioner og gør dine egne ting. 103 00:04:17,404 --> 00:04:18,820 Så længe du er selv konsekvent. 104 00:04:18,820 --> 00:04:21,540 Og vi vil tale mere om style en lille smule senere i dag. 105 00:04:21,540 --> 00:04:23,200 >> Så lad mig åbne et andet program. 106 00:04:23,200 --> 00:04:24,930 Selvfølgelig bør vi fastsætte, at 10 så godt. 107 00:04:24,930 --> 00:04:32,470 Lad mig gå videre og skrive en reel hurtig program, som jeg vil kalde, 108 00:04:32,470 --> 00:04:38,140 lad os sige, loop dot C. Så loop dot C. Og i loop dot C jeg har tænkt mig at have, 109 00:04:38,140 --> 00:04:41,970 omfatter standard I / O dot H int main tomrum. 110 00:04:41,970 --> 00:04:44,020 Og lad os nu bare gøre, ja, en løkke. 111 00:04:44,020 --> 00:04:46,020 Så 4 int jeg får nul. 112 00:04:46,020 --> 00:04:48,660 I er mindre end f.eks 50. 113 00:04:48,660 --> 00:04:49,950 Jeg plus, plus. 114 00:04:49,950 --> 00:04:53,350 Og derefter i her lad os gå videre og gøre udskrive F. 115 00:04:53,350 --> 00:04:56,400 Og så er jeg ønsker at udskrive I og en ny linje, semikolon. 116 00:04:56,400 --> 00:05:00,015 >> Og dette skulle udskrive alle de tal fra nul op til 50? 117 00:05:00,015 --> 00:05:02,900 118 00:05:02,900 --> 00:05:03,680 Et par hoved nikker. 119 00:05:03,680 --> 00:05:04,270 Et par nos. 120 00:05:04,270 --> 00:05:05,339 Hvad er fejlen allerede? 121 00:05:05,339 --> 00:05:06,630 Hvad er den nemme fejl gjorde jeg? 122 00:05:06,630 --> 00:05:07,170 Ja. 123 00:05:07,170 --> 00:05:08,544 >> PUBLIKUM: [uhørligt]. 124 00:05:08,544 --> 00:05:09,210 SPEAKER 1: Ja. 125 00:05:09,210 --> 00:05:11,520 Så selvom det ser som dette er, hvad jeg agter, 126 00:05:11,520 --> 00:05:13,920 minde om, at jeg også er bare en ASCII-tegn. 127 00:05:13,920 --> 00:05:14,955 >> Så hvis jeg siger, print "I." 128 00:05:14,955 --> 00:05:16,670 Det er bogstaveligt talt går at udskrive I. Så hvis jeg 129 00:05:16,670 --> 00:05:20,030 ønsker at plug-in en pladsholder værdi, jeg faktisk nødt til at gøre dette 130 00:05:20,030 --> 00:05:22,630 og derefter plug-i værdi af I dynamisk. 131 00:05:22,630 --> 00:05:25,200 Ellers er jeg bare gå til få 50 i'er på skærmen. 132 00:05:25,200 --> 00:05:28,140 >> Så lad mig gå videre og gør denne løkke, køre den, 133 00:05:28,140 --> 00:05:30,650 og faktisk har vi alle vejen op gennem 49. 134 00:05:30,650 --> 00:05:34,140 Og hvis jeg går tilbage i tid, jeg ser tallet nul ved begyndelsen. 135 00:05:34,140 --> 00:05:36,050 >> Nå, hvad hvis jeg slags skrue op? 136 00:05:36,050 --> 00:05:37,800 Hvad hvis jeg gør dette? 137 00:05:37,800 --> 00:05:40,120 Bare fordi jeg ikke tænker. 138 00:05:40,120 --> 00:05:40,970 Hvad er dette program. 139 00:05:40,970 --> 00:05:43,970 Når re kompileret og køre, vil gø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 designet til nul. 144 00:05:49,124 --> 00:05:51,899 Så betingelsen er falsk. 145 00:05:51,899 --> 00:05:52,940 SPEAKER 1: Ja, præcis. 146 00:05:52,940 --> 00:05:55,110 Al koden er korrekt, syntaktisk. 147 00:05:55,110 --> 00:05:57,310 Dette vil kompilere, det kode vil køre, men det er ikke 148 00:05:57,310 --> 00:06:00,110 vil gøre noget nyttigt fordi jeg initialisere jeg til nul. 149 00:06:00,110 --> 00:06:02,240 Vi derefter kontrollere, er jeg mere end 50? 150 00:06:02,240 --> 00:06:03,810 Det er klart, nej, det er ikke. 151 00:06:03,810 --> 00:06:05,760 Så løkken aldrig udfører overhovedet. 152 00:06:05,760 --> 00:06:09,580 >> Hvad hvis vi gør noget lidt mere hensynsløs? 153 00:06:09,580 --> 00:06:12,890 Så hvad hvis vi bryder int jeg får nul. 154 00:06:12,890 --> 00:06:15,640 Og lad mig bruge imens loop, som var en anden tilstand. 155 00:06:15,640 --> 00:06:21,810 Og mens jeg siger, mens jeg er større end eller lig med nul, og derefter i her jeg 156 00:06:21,810 --> 00:06:26,070 gå videre og gemme filen, gør løkke. 157 00:06:26,070 --> 00:06:27,070 Og jeg er ved at køre den. 158 00:06:27,070 --> 00:06:30,230 Hvad skal jeg se denne tid med en while-løkke? 159 00:06:30,230 --> 00:06:30,852 Ja. 160 00:06:30,852 --> 00:06:32,120 >> PUBLIKUM: En uendelig løkke? 161 00:06:32,120 --> 00:06:35,360 >> SPEAKER 1: En uendelig løkke? 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 altid nul. 164 00:06:38,120 --> 00:06:38,786 SPEAKER 1: Ja. 165 00:06:38,786 --> 00:06:40,100 Så bliver jeg initialiseres som nul. 166 00:06:40,100 --> 00:06:44,470 Selvfølgelig har jeg er altid større end eller lig med 0 som følge heraf. 167 00:06:44,470 --> 00:06:46,460 Så jeg bare at se uendeligt. 168 00:06:46,460 --> 00:06:49,850 Og nu har det kommet op en gang eller to gange for at kursets hoveder. 169 00:06:49,850 --> 00:06:52,417 Hvad sker der, når du har en uendelig løkke? 170 00:06:52,417 --> 00:06:53,314 >> PUBLIKUM: Kontrol C. 171 00:06:53,314 --> 00:06:53,980 SPEAKER 1: Ja. 172 00:06:53,980 --> 00:06:56,250 Så Kontrol C i sidste ende vil reagere. 173 00:06:56,250 --> 00:06:59,520 Desværre har vi udskrives Millioner og atter millioner af nuller allerede 174 00:06:59,520 --> 00:07:01,520 og så computeren har slags fik foran mig. 175 00:07:01,520 --> 00:07:03,394 Så går det til at ignorere mig for en lille smule. 176 00:07:03,394 --> 00:07:06,560 Men hvis du bare slå Kontrol C et par gange på din Mac eller pc-tastatur, 177 00:07:06,560 --> 00:07:08,790 til sidst skal det, ja, opsige. 178 00:07:08,790 --> 00:07:11,770 Og hvis ikke, vil vi vise dig nogle teknikker inden længe, ​​hvor du 179 00:07:11,770 --> 00:07:14,850 kan faktisk magt dræbe programmer, meget gerne i Windows og Mac OS, 180 00:07:14,850 --> 00:07:15,562 hvis nødvendigt. 181 00:07:15,562 --> 00:07:16,770 Men lad os prøve noget andet. 182 00:07:16,770 --> 00:07:19,895 Lad os faktisk tilvækst I. Er dette stadig vil være uendelig? 183 00:07:19,895 --> 00:07:22,870 184 00:07:22,870 --> 00:07:25,140 Lad mig køre dette. 185 00:07:25,140 --> 00:07:27,090 Og nu kan du slags se, hvad der sker. 186 00:07:27,090 --> 00:07:30,140 Dette er også er en uendelig løkke. 187 00:07:30,140 --> 00:07:33,080 Men det er lidt af et trick spørgsmål. 188 00:07:33,080 --> 00:07:35,460 Er det kommer til at udskrive tal for evigt? 189 00:07:35,460 --> 00:07:36,647 >> PUBLIKUM: Nej. 190 00:07:36,647 --> 00:07:37,230 SPEAKER 1: Nej. 191 00:07:37,230 --> 00:07:37,620 Hvorfor? 192 00:07:37,620 --> 00:07:38,820 Jeg hørte nogle nos herovre. 193 00:07:38,820 --> 00:07:41,859 Someone-- Ja. 194 00:07:41,859 --> 00:07:44,275 PUBLIKUM: Du har ikke nok bits til virkelig holde ud. 195 00:07:44,275 --> 00:07:44,730 SPEAKER 1: Okay. 196 00:07:44,730 --> 00:07:46,000 Så jeg har ikke nok bits til at holde ud. 197 00:07:46,000 --> 00:07:47,124 Så, hvad der kommer til at ske? 198 00:07:47,124 --> 00:07:49,320 Det er bare kommer til at stoppe? 199 00:07:49,320 --> 00:07:52,542 >> PUBLIKUM: På et tidspunkt det vil lukke til-- 200 00:07:52,542 --> 00:07:54,500 SPEAKER 1: Det vil lukke løkken ned, men hvorfor? 201 00:07:54,500 --> 00:07:57,950 Hvad vil der ske på allersidst i sine grænser? 202 00:07:57,950 --> 00:07:58,479 Ja? 203 00:07:58,479 --> 00:08:00,520 PUBLIKUM: Det vil cykle tilbage til negative tal. 204 00:08:00,520 --> 00:08:02,900 SPEAKER 1: At negative tal, eller hvis vi bare behandle positive, 205 00:08:02,900 --> 00:08:03,570 nul i det mindste. 206 00:08:03,570 --> 00:08:04,550 Så ja, absolut. 207 00:08:04,550 --> 00:08:08,059 Husk på, at vi så sidste gang, at hvis du tilvækst dine bits en alt for mange gange, 208 00:08:08,059 --> 00:08:10,225 og dig der forgrunden overløb kapaciteten af ​​din int 209 00:08:10,225 --> 00:08:13,058 eller hvad den datatype er, du er kommer til at ombryde omkring, sandsynligvis, 210 00:08:13,058 --> 00:08:14,020 to negative tal. 211 00:08:14,020 --> 00:08:16,644 Eller hvis du har angive, at din rækkevidde bør kun være positiv, 212 00:08:16,644 --> 00:08:18,560 som du kan gøre, men vi ikke har set det endnu, 213 00:08:18,560 --> 00:08:21,420 du måske ender i det mindste tilbage på nul. 214 00:08:21,420 --> 00:08:22,410 Selv om der faktisk ja. 215 00:08:22,410 --> 00:08:24,320 I dette tilfælde negative tal, i hvilket tilfælde 216 00:08:24,320 --> 00:08:26,870 løkken kommer til at afslutte fordi jeg er ikke i virkeligheden, 217 00:08:26,870 --> 00:08:29,220 større end eller lig med nul, hvis det er negativt. 218 00:08:29,220 --> 00:08:31,780 >> Så desværre, hvordan længe vil vi vente? 219 00:08:31,780 --> 00:08:35,490 Lige nu er vi op til hvad, 2 millioner-ish? 220 00:08:35,490 --> 00:08:37,705 Vi er som 2 milliarder, Vi er nødt til at vente 221 00:08:37,705 --> 00:08:39,330 indtil vi rent faktisk kan se dette symptom. 222 00:08:39,330 --> 00:08:46,200 Men vi kan se det lidt hurtigere, maybe-- lad os se om vi kan afbryde. 223 00:08:46,200 --> 00:08:46,700 Kom nu. 224 00:08:46,700 --> 00:08:49,500 225 00:08:49,500 --> 00:08:51,331 Selv menuerne dukker langsomt. 226 00:08:51,331 --> 00:08:51,830 Okay. 227 00:08:51,830 --> 00:08:54,270 Så vil vi komme tilbage til det inden længe. 228 00:08:54,270 --> 00:08:56,320 Det er en god time-- fanden, hvalpe. 229 00:08:56,320 --> 00:08:58,280 >> Det er et godt tidspunkt for nogle annonceringer. 230 00:08:58,280 --> 00:09:01,225 Så hvis du kan lide at engagere sig i YHack, 231 00:09:01,225 --> 00:09:03,600 som er en begivenhed at være sponsoreret af vores venner på Yale. 232 00:09:03,600 --> 00:09:05,990 Og faktisk nogle af kursets TF'er på Yale er involveret i dette. 233 00:09:05,990 --> 00:09:08,610 YHack er en international hack-a-thon hosted af og holdt 234 00:09:08,610 --> 00:09:12,395 på Yale, der samler 1.500 ligesindede hackere og annoncer 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 af interesse, tage et kig her. 237 00:09:14,610 --> 00:09:17,401 Hvis dette er alt for kortvarigt på skærm, tage et kig på dagens dias 238 00:09:17,401 --> 00:09:19,622 til webadressen for yhack.org. 239 00:09:19,622 --> 00:09:21,080 Så også et par hurtige kort. 240 00:09:21,080 --> 00:09:24,410 Så officielt sektioner vil begynde næste uge både her og New Haven. 241 00:09:24,410 --> 00:09:27,660 Husk på, du vil være at få en e-mail senere denne weekend mest sandsynlige. 242 00:09:27,660 --> 00:09:29,390 Det tager lang tid til CS50 til afsnittet 243 00:09:29,390 --> 00:09:32,080 givet alle mennesker i klasse og alle flytte rundt. 244 00:09:32,080 --> 00:09:34,871 Og alle Undervisning Fellows ' skemaer er også stadig størkne, 245 00:09:34,871 --> 00:09:38,110 men stay tuned for en e-mail, og hvis behov være, kan du re-sektion der efter. 246 00:09:38,110 --> 00:09:39,580 >> Study.cs50.net. 247 00:09:39,580 --> 00:09:43,280 Så selv hvis du er en konstant deltager på sektioner, indse, at næsten alle 248 00:09:43,280 --> 00:09:46,786 af de ressourcer, vi bruger i sektioner er offentligt tilgængelige på CS50 249 00:09:46,786 --> 00:09:48,460 Studere på denne URL her. 250 00:09:48,460 --> 00:09:51,630 Så hvis du ville nogensinde lyst til at re bedømmelse materiale fra afsnit, eller læse videre, 251 00:09:51,630 --> 00:09:54,170 eller du kan ikke gøre det nogle uge, indse, at prøve dias, 252 00:09:54,170 --> 00:09:58,210 og problemer, og definitioner, og flere er alle der. 253 00:09:58,210 --> 00:10:00,645 >> Kontortid genoptage dag, og i morgen, og onsdag, 254 00:10:00,645 --> 00:10:03,020 og torsdag kontrollere kursets hjemmeside for tidsplanen. 255 00:10:03,020 --> 00:10:05,690 >> Og også, lancerer nu i dag er CS50 Diskuter. 256 00:10:05,690 --> 00:10:09,230 Så hvis og når du har spørgsmål til hinanden eller for kurset personale, 257 00:10:09,230 --> 00:10:12,099 og er generelt arbejder på nogle problemer sæt, 258 00:10:12,099 --> 00:10:15,015 indse, at du ikke nødvendigvis nødt til at henvende sig til den menneskelige næste dig. 259 00:10:15,015 --> 00:10:17,810 Hvis der er ingen der, kan du nå ud til os og klassekammerater 260 00:10:17,810 --> 00:10:19,890 online ved CS50 Diskuter. 261 00:10:19,890 --> 00:10:22,600 Så dette er en diskussion bord for kurset, 262 00:10:22,600 --> 00:10:24,550 og indse, at dette er måske det bedste 263 00:10:24,550 --> 00:10:28,480 sted at starte, når du har spørgsmål, når uden for kontortid 264 00:10:28,480 --> 00:10:29,470 i særdeleshed. 265 00:10:29,470 --> 00:10:31,070 >> Frokoster vil starte op i denne uge også. 266 00:10:31,070 --> 00:10:33,170 Hos Fire and Ice [Uhørligt] i New Haven. 267 00:10:33,170 --> 00:10:35,379 Tag et kig på kursets hjemmeside for at RSVP. 268 00:10:35,379 --> 00:10:36,753 Komme først, først tjene for det. 269 00:10:36,753 --> 00:10:39,380 Hvis du ikke får i denne uge vi vil gøre disse mest hver fredag 270 00:10:39,380 --> 00:10:40,400 løbetid. 271 00:10:40,400 --> 00:10:41,830 >> OK, og nu et ord om sortering. 272 00:10:41,830 --> 00:10:44,690 Især da vi træder problem sæt en, som er ude i denne uge, 273 00:10:44,690 --> 00:10:46,670 og problemet sæt to og derefter. 274 00:10:46,670 --> 00:10:51,680 Hvordan vi går om at evaluere P sæt og evaluering af kvaliteten heraf? 275 00:10:51,680 --> 00:10:55,560 Så det er fire akser, som vi bruger i CS50, og de er disse fire her. 276 00:10:55,560 --> 00:10:59,200 >> Anvendelsesområde, som fanger på en numerisk basis, hvor meget af P sæt 277 00:10:59,200 --> 00:10:59,860 har du tackle. 278 00:10:59,860 --> 00:11:02,890 Det er nogenlunde svarer til indsats, og det er vores måde at fange 279 00:11:02,890 --> 00:11:05,190 har du forsøger halvdelen af ​​P sæt, alle P sæt. 280 00:11:05,190 --> 00:11:08,860 Dette er en nem en til at få perfekt scores på hvis du gør, ja, 281 00:11:08,860 --> 00:11:11,020 prøve hver aspekt af P sæt. 282 00:11:11,020 --> 00:11:12,010 Så holder det i tankerne. 283 00:11:12,010 --> 00:11:13,420 >> Korrekthed er nøjagtigt. 284 00:11:13,420 --> 00:11:17,760 Har din kode arbejde som specifikationen og da stabe 'prøveopløsning 285 00:11:17,760 --> 00:11:19,730 tyder på, at din kode bør faktisk arbejde. 286 00:11:19,730 --> 00:11:23,260 Check 50, hvis du ikke har mødt den endnu, er i P indstille en specifikation 287 00:11:23,260 --> 00:11:25,060 og vil generelt give dig ja / nej svar 288 00:11:25,060 --> 00:11:26,518 om, hvorvidt din kode er korrekt. 289 00:11:26,518 --> 00:11:30,680 Mindst så vidt vi skal hen at evaluere det baseret på tests 290 00:11:30,680 --> 00:11:32,430 at vi kører inden for programmet. 291 00:11:32,430 --> 00:11:33,850 >> Design er meget mere subjektive. 292 00:11:33,850 --> 00:11:35,994 Dette er, hvor godt skrevet, er din kode. 293 00:11:35,994 --> 00:11:38,410 Og det er noget, får du bedre til over tid, 294 00:11:38,410 --> 00:11:41,201 og det er noget, som vi vil give mere kvalitativ feedback på. 295 00:11:41,201 --> 00:11:43,350 Og ved design jeg måske betyde inden længe du 296 00:11:43,350 --> 00:11:47,650 kunne blive fristet i nogle P indstillet til at gøre noget loopingly, 297 00:11:47,650 --> 00:11:51,590 men at have måske tre eller fire, eller fem indlejrede forgrunden sløjfer eller indlejret mens 298 00:11:51,590 --> 00:11:52,090 loops. 299 00:11:52,090 --> 00:11:54,130 Det bør generelt begynde at gøre dig krybe 300 00:11:54,130 --> 00:11:56,070 og vil generelt være betragtes som dårlig design. 301 00:11:56,070 --> 00:11:59,490 Og du vil begynde at se i klassen og ud af klassen gode måder at gøre tingene på, 302 00:11:59,490 --> 00:12:02,920 dårlige måder at gøre ting, som kunne alle være korrekte, men ikke 303 00:12:02,920 --> 00:12:04,304 nødvendigvis godt designet. 304 00:12:04,304 --> 00:12:05,220 Ligesom at skrive et essay. 305 00:12:05,220 --> 00:12:08,100 Du kan være i stand til at sætte ord på en side, der er grammatisk korrekt, 306 00:12:08,100 --> 00:12:10,016 men essay eller afhandling, de er i, er bare 307 00:12:10,016 --> 00:12:11,810 helt usammenhængende eller overbevisende. 308 00:12:11,810 --> 00:12:15,930 Og så der kan være analogen i skriftlig verden af ​​dårlige eller gode design. 309 00:12:15,930 --> 00:12:18,490 >> Og stil, også er temmelig subjektive. 310 00:12:18,490 --> 00:12:20,060 Men i det mindste vi forventer konsistens. 311 00:12:20,060 --> 00:12:21,480 Dette er hvor smuk er din kode. 312 00:12:21,480 --> 00:12:22,840 Er tingene pænt indrykket? 313 00:12:22,840 --> 00:12:26,600 Er dine variabler godt navngivet / Er alle af dine parenteser og krøllede parenteser 314 00:12:26,600 --> 00:12:27,920 linie som de burde være? 315 00:12:27,920 --> 00:12:31,490 Vi har en CS50 stil vejledning som problemet sæt vil pege dig på. 316 00:12:31,490 --> 00:12:33,730 De mere komfortabel er velkommen til at afvige fra det 317 00:12:33,730 --> 00:12:35,771 så længe du er selv konsekvent. 318 00:12:35,771 --> 00:12:38,020 Og også dette er en lektion vi vil styrke i afsnit. 319 00:12:38,020 --> 00:12:40,990 Så hvis alt dette var lidt hurtig, indser P sæt og sektioner 320 00:12:40,990 --> 00:12:42,900 vil gå mere i dybden inden længe. 321 00:12:42,900 --> 00:12:45,490 >> Men generelt har vi meget få skovle til CS50. 322 00:12:45,490 --> 00:12:48,170 Resultaterne er generelt på en skala af en til tre, eller 04:59. 323 00:12:48,170 --> 00:12:50,836 Vi er literally-- og jeg kan ikke sige det nok i den første uge. 324 00:12:50,836 --> 00:12:51,582 Tre er god. 325 00:12:51,582 --> 00:12:54,290 Så selvom, ja, tre ud fem normalt, matematisk, 326 00:12:54,290 --> 00:12:57,240 kunne være en 60 procent 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 i virkeligheden, vi forventer de fleste elever i klassen 329 00:13:01,050 --> 00:13:04,280 at starte udtrykket omkring toere og treere og firere. 330 00:13:04,280 --> 00:13:05,510 Sandsynligvis ikke så mange femmere. 331 00:13:05,510 --> 00:13:06,661 Ikke alt for mange dem. 332 00:13:06,661 --> 00:13:08,910 Men generelt at starte i at sweet spot i kurven 333 00:13:08,910 --> 00:13:11,694 således at som tiden skrider frem, der er faktisk plads til, 334 00:13:11,694 --> 00:13:13,360 og muligheder for øvre progression. 335 00:13:13,360 --> 00:13:15,810 Så skal du ikke sætte lighedstegn mellem tre med 60%. 336 00:13:15,810 --> 00:13:17,410 Det er meget mere abstrakt end det. 337 00:13:17,410 --> 00:13:20,160 Formlen som beregner vi kvaliteter vægtes som følger. 338 00:13:20,160 --> 00:13:21,610 Korrekthed er værd mest. 339 00:13:21,610 --> 00:13:23,010 Design er lidt mindre værd. 340 00:13:23,010 --> 00:13:24,490 Stil er lidt mindre værd. 341 00:13:24,490 --> 00:13:26,950 Og det generelt indfanger den tid, 342 00:13:26,950 --> 00:13:29,800 der går ind i at få hver af disse akser lige højre. 343 00:13:29,800 --> 00:13:31,810 Style er super nemt, bør være super hurtig, 344 00:13:31,810 --> 00:13:33,657 men det er en nem vane at få doven om. 345 00:13:33,657 --> 00:13:35,490 Korrekthed kan tage du det meste af tiden. 346 00:13:35,490 --> 00:13:38,990 Jagter ned nogle fejl måske tage den ekstra time eller mere, 347 00:13:38,990 --> 00:13:41,737 og så, scoring sidste ende indfanger det. 348 00:13:41,737 --> 00:13:43,070 Og ja, nu er en mere alvorlig ord. 349 00:13:43,070 --> 00:13:45,240 Da CS50 har skelnen, for bedre 350 00:13:45,240 --> 00:13:47,440 eller værre, at være måske bedre bekendtskab 351 00:13:47,440 --> 00:13:50,065 med spørgsmål om akademisk ærlighed end de fleste andre kursus. 352 00:13:50,065 --> 00:13:53,720 Og ja, det er at min viden, der vi sender flere studerende, desværre, 353 00:13:53,720 --> 00:13:56,690 af disciplinære formål hvert år som følge. Så 354 00:13:56,690 --> 00:13:59,040 af hensyn til fuld videregivelse, lad os tale kort 355 00:13:59,040 --> 00:14:02,820 om, hvad der foregår i CS50, og hvad du kan gøre, og hvad du kan være opmærksom på. 356 00:14:02,820 --> 00:14:05,530 >> Så her siden 2007, hvor Jeg arvede kurset, 357 00:14:05,530 --> 00:14:07,870 er antallet af Ad Board sager. 358 00:14:07,870 --> 00:14:10,690 Ad Board er Harvards disciplinære krop, eller nu Honor Counsel, 359 00:14:10,690 --> 00:14:13,790 til hvilke tilfælde der er nævnt, når studerende gør noget, at kursets 360 00:14:13,790 --> 00:14:15,470 pensum anser urimeligt. 361 00:14:15,470 --> 00:14:17,220 Der er ingen reel mønster her, vil jeg sige. 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 af sager, der er nævnt. 364 00:14:22,262 --> 00:14:23,970 Antallet af studerende der er involveret? 365 00:14:23,970 --> 00:14:25,290 Det også varierer. 366 00:14:25,290 --> 00:14:27,930 Typisk sidste år for Eksempelvis 29 studerende på Harvard 367 00:14:27,930 --> 00:14:29,740 var Ad Boarded, så at sige. 368 00:14:29,740 --> 00:14:32,670 29 af dem nuværende studerende, to af dem forud studerende, 369 00:14:32,670 --> 00:14:35,610 der var samarbejde på en eller anden uheldig måde. 370 00:14:35,610 --> 00:14:38,400 Og derefter i form af procentdel, er det normalt omkring 3% 371 00:14:38,400 --> 00:14:41,360 af klassen, som desværre gør disse former for beslutninger. 372 00:14:41,360 --> 00:14:44,470 >> Så sidste år var 3,5% af CS50 s studerende 373 00:14:44,470 --> 00:14:46,820 der var Ad Boarded, så at sige. 374 00:14:46,820 --> 00:14:48,490 >> Så hvad betyder alt dette betyde? 375 00:14:48,490 --> 00:14:49,660 Og hvad gør vi rent faktisk gør? 376 00:14:49,660 --> 00:14:52,930 >> Så for fuld offentliggørelse, vi absolut, som dataloger, 377 00:14:52,930 --> 00:14:57,620 har softwareværktøjer til vores rådighed og det er meget let for os, i retfærdighed, 378 00:14:57,620 --> 00:15:00,980 at andre klassekammerater, der ikke krydser disse linier til at krydse sammenligne 379 00:15:00,980 --> 00:15:04,570 hvert indsendelse i år mod enhver indsendelse til de seneste otte år. 380 00:15:04,570 --> 00:15:05,445 Software gør dette. 381 00:15:05,445 --> 00:15:07,440 Og i sidste ende er det menneskers øjne, der beslutter 382 00:15:07,440 --> 00:15:11,410 om der skal henvise nogle noget for yderligere jury, 383 00:15:11,410 --> 00:15:12,737 men softwaren sikkert hjælper. 384 00:15:12,737 --> 00:15:15,820 Og dette, helt ærligt, er grunden til, at jeg tror, vi har så store tal i CS50. 385 00:15:15,820 --> 00:15:18,540 Det er ikke fordi CS50 studerende eller CS studerende mere 386 00:15:18,540 --> 00:15:20,840 generelt er mindre ærlig end nogen andre studerende, 387 00:15:20,840 --> 00:15:22,340 det er bare vi har den værktøjer og teknikker 388 00:15:22,340 --> 00:15:24,095 med til at tage denne første passage. 389 00:15:24,095 --> 00:15:25,960 >> Men vi gør holde øje på alle disse ting 390 00:15:25,960 --> 00:15:30,340 samt igen af ​​hensyn til anerkender det arbejde, der bliver lagt 391 00:15:30,340 --> 00:15:32,397 i en super flertal af klassen. 392 00:15:32,397 --> 00:15:34,230 Og kurset politik på akademisk ærlighed, 393 00:15:34,230 --> 00:15:37,021 selvom det er en flok af stk lang med en masse af kugler 394 00:15:37,021 --> 00:15:40,490 som er forhåbentlig ganske læsbart, det virkelig koges ned til at være rimelig. 395 00:15:40,490 --> 00:15:44,000 Og den bedste tommelfingerregel, at vi tilbyde op inden pensum 396 00:15:44,000 --> 00:15:46,020 er det, essensen af alt arbejde, som du 397 00:15:46,020 --> 00:15:47,850 underkaste sig dette kursus skal være din egen. 398 00:15:47,850 --> 00:15:51,510 Og ja, i næsten alle de nævnte tilfælde for disciplinære foranstaltninger 399 00:15:51,510 --> 00:15:55,640 Det var på grund af nogle studerende sent en nat typisk vendte hans eller hendes kode 400 00:15:55,640 --> 00:15:58,130 løbet direkte til en klassekammerat, som derefter blev vedtaget den 401 00:15:58,130 --> 00:16:00,840 i sin helhed eller betydeligt deraf. 402 00:16:00,840 --> 00:16:02,680 >> Men virkelig, det er OK. 403 00:16:02,680 --> 00:16:04,684 Og ja, på kontoret timer, de sedler 404 00:16:04,684 --> 00:16:07,850 du er blevet udleveret, hvis du kom med kontor timer i sidste uge opfordrer så meget. 405 00:16:07,850 --> 00:16:09,710 Du er absolut velkommen og opmuntret 406 00:16:09,710 --> 00:16:12,340 for at diskutere problemet sæt med klassekammerater. 407 00:16:12,340 --> 00:16:14,461 For at hjælpe hinanden, når snuble. 408 00:16:14,461 --> 00:16:17,710 Men generelt den tommelfingerregel bør være dette, "når du beder om hjælp, 409 00:16:17,710 --> 00:16:20,412 du kan vise din kode til andre, men du kan ikke se deres. " 410 00:16:20,412 --> 00:16:22,620 Så med andre ord, hvis jeg kæmper med nogle P sæt 411 00:16:22,620 --> 00:16:25,290 og jeg sidder der i spisesal, eller i biblioteket, 412 00:16:25,290 --> 00:16:28,470 eller i klasseværelset forsøger at finde nogle fejl, 413 00:16:28,470 --> 00:16:30,340 Jeg kan helt sikkert vise min kode på min skærm 414 00:16:30,340 --> 00:16:32,590 til den person, der sidder ved siden til mig, helt sikkert personalet, 415 00:16:32,590 --> 00:16:33,600 men også en klassekammerat. 416 00:16:33,600 --> 00:16:36,580 Men hvis den løsning, min klassekammerat tilbyder er, åh, 417 00:16:36,580 --> 00:16:39,200 her bare tage et kig på, hvad Jeg gjorde, som krydser linjen. 418 00:16:39,200 --> 00:16:43,120 >> Og jeg ville turde sige, det er generelt en rimelig ting for de fleste mennesker 419 00:16:43,120 --> 00:16:45,030 til meget nemt få øje på linje. 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 nu en af ​​de mere kontroversielle aspekter 422 00:16:49,070 --> 00:16:52,529 af CS50 pensum, som jeg troede, jeg ville tale til afslutningsvis her 423 00:16:52,529 --> 00:16:53,820 er den såkaldte beklagelse klausul. 424 00:16:53,820 --> 00:16:55,340 Så her er alt det med småt. 425 00:16:55,340 --> 00:16:58,090 Men generelt har vi set løbet af de sidste 8 plus år 426 00:16:58,090 --> 00:17:01,510 at, ja, næsten alle CS50 s tilfælde af eksamenssnyd 427 00:17:01,510 --> 00:17:04,390 har været resultatet af lige fattige beslutningstagning sent om natten. 428 00:17:04,390 --> 00:17:07,144 Resultatet af stress, resultatet på grund af manglende spise, mangel på søvn, 429 00:17:07,144 --> 00:17:09,560 for mange P-apparater, alt for mange deadlines, for mange forpligtelser. 430 00:17:09,560 --> 00:17:13,520 Stress opbygning i en 2:00, 03:00 AM, 04:00, med en deadline truende. 431 00:17:13,520 --> 00:17:17,020 De fleste elever i disse tilfælde har lige lavet dårlige beslutninger 432 00:17:17,020 --> 00:17:20,619 at de kan meget vel beklager Næste morgen hvis ikke minutter senere, 433 00:17:20,619 --> 00:17:25,490 men indtil sidste år var der ingen frigivelse ventil, disse studerende kunne 434 00:17:25,490 --> 00:17:29,140 faktisk åbne op til faktisk behandle problem hoved på uden frygt for at blive 435 00:17:29,140 --> 00:17:30,850 startet fra college helt. 436 00:17:30,850 --> 00:17:33,260 >> Og, ja, vi introducerede denne beklagelse klausul sidste år, 437 00:17:33,260 --> 00:17:35,970 som siger, at hvis der inden 72 timer, tre dage, 438 00:17:35,970 --> 00:17:37,970 krydse nogle linje foreskrevet i pensum 439 00:17:37,970 --> 00:17:41,178 du kommer frem til en af ​​kursets hoveder, og vi vil få en snak om det. 440 00:17:41,178 --> 00:17:43,720 Der er stadig være nogle udfald, i modsætning til, hvad der er 441 00:17:43,720 --> 00:17:44,990 blevet rapporteret for det modsatte. 442 00:17:44,990 --> 00:17:49,190 Der er stadig nogle resultat, som er handlingsrettet af kurset, 443 00:17:49,190 --> 00:17:51,611 generelt nulstilling en P sæt eller tage en anden 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 det højere var resultatet kan være meget mere alvorlige. 446 00:17:58,460 --> 00:18:01,810 Og, ja, til at dele, hvad der skete sidste år, i de otte år, og nu 447 00:18:01,810 --> 00:18:04,950 ni år, for at undervise dette kursus og efter fifle med forskellige knapper, 448 00:18:04,950 --> 00:18:07,866 dreje forskellige skiver i det forløbne flere år på akademisk ærlighed, 449 00:18:07,866 --> 00:18:11,920 og se pr dataene ikke tilsyneladende indvirkning, selv af taler som denne, 450 00:18:11,920 --> 00:18:15,490 dette var hænder ned den bedste ting Vi har introduceret pædagogisk 451 00:18:15,490 --> 00:18:18,090 i otte år sammen disse linjer i CS50. 452 00:18:18,090 --> 00:18:21,010 >> 19 studerende kom frem under denne klausul sidste år. 453 00:18:21,010 --> 00:18:23,389 Vi tog ingen handling for syv af de studerende, 454 00:18:23,389 --> 00:18:25,430 fastslå, at de var unødigt bekymret. 455 00:18:25,430 --> 00:18:27,304 De havde faktisk ikke, krydset en linje, men det 456 00:18:27,304 --> 00:18:28,960 var en god snak at have alligevel. 457 00:18:28,960 --> 00:18:31,190 Vi nulstilles 11 af de scoringer der blev indsendt. 458 00:18:31,190 --> 00:18:33,840 Og i et tilfælde vi stillede et studerende til at gøre et problem indstillet. 459 00:18:33,840 --> 00:18:36,370 Men mere overbevisende, ærligt, med disse 19 chats, 460 00:18:36,370 --> 00:18:39,020 som var måde mere, end jeg forventes at have, hver af dem 461 00:18:39,020 --> 00:18:41,370 10 minutter til måske en time lange, bragte også 462 00:18:41,370 --> 00:18:44,920 at tænde en række spørgsmål vedrørende familiære problemer, ven spørgsmål, 463 00:18:44,920 --> 00:18:46,940 psykiske problemer at vi så i indgreb, 464 00:18:46,940 --> 00:18:50,200 med den studerendes velsignelse, bosiddende dekan eller venner, eller et andet nummer 465 00:18:50,200 --> 00:18:51,450 af support ressourcer. 466 00:18:51,450 --> 00:18:54,454 Så at dette var langt en af de bedste anvendelser af vor tid 467 00:18:54,454 --> 00:18:55,870 og en af ​​de bedste interventioner. 468 00:18:55,870 --> 00:18:58,870 >> Med det sagt, nej det havde indgang på opklaringsprocenten 469 00:18:58,870 --> 00:19:00,909 af akademisk uredelighed mere generelt. 470 00:19:00,909 --> 00:19:02,950 Og jeg tør sige, denne delmængde af studerende sidste år 471 00:19:02,950 --> 00:19:06,350 var en demografisk, at vi tidligere aldrig identificeret før 472 00:19:06,350 --> 00:19:08,140 og havde aldrig forbundet med før. 473 00:19:08,140 --> 00:19:10,020 Og så, disse var vidunderlige succeshistorier 474 00:19:10,020 --> 00:19:13,390 selv om de blev bragt frem i lyset i mindre end optimale forhold. 475 00:19:13,390 --> 00:19:15,640 Så holde dette i tankerne som du gør, måske, 476 00:19:15,640 --> 00:19:17,390 nogle fattige beslutning selv sent om natten, 477 00:19:17,390 --> 00:19:20,151 at der er brug så længe som den studerende i denne situation 478 00:19:20,151 --> 00:19:23,400 ejer op og kommer frem, så vi kan have den slags chat og beskæftige sig med det 479 00:19:23,400 --> 00:19:27,310 på en måde, der er pædagogisk, og derefter vi kan sætte det bag os den næste dag. 480 00:19:27,310 --> 00:19:30,335 >> Så uden videre, tage brodden af ​​denne samtale, 481 00:19:30,335 --> 00:19:35,080 grunden er hvalpene op sige bare for at bryde isen et øjeblik. 482 00:19:35,080 --> 00:19:39,560 Og desværre, de er alle søvn, men hvad skulle ske her 483 00:19:39,560 --> 00:19:41,760 var alle skulle til ærefrygt og art slappe 484 00:19:41,760 --> 00:19:43,910 efter at meget tunge samtale. 485 00:19:43,910 --> 00:19:46,930 Men tilsyneladende jeg sætte hvalpene til at sove. 486 00:19:46,930 --> 00:19:50,070 Men hvis du går til CS50 s hjemmeside skråstreg hvalpe, 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 Især måske 2:00 eller 03:00, eller 4:00 om natten 489 00:19:55,280 --> 00:19:57,480 at se lidt afstresning der. 490 00:19:57,480 --> 00:19:58,805 Så det er skråstreg hvalpe. 491 00:19:58,805 --> 00:20:01,700 492 00:20:01,700 --> 00:20:02,200 Okay. 493 00:20:02,200 --> 00:20:03,020 Var det ikke sjovt? 494 00:20:03,020 --> 00:20:04,200 OK. 495 00:20:04,200 --> 00:20:07,140 Så tilbage til nogle computer videnskab, hvis jeg må. 496 00:20:07,140 --> 00:20:10,600 >> Så minde om, at sidste gang vi startede ser ikke blot på main, som 497 00:20:10,600 --> 00:20:13,930 var standard funktion, når grønt flag klikkede tilsvarende, 498 00:20:13,930 --> 00:20:16,999 men vi har også begyndte kort skrive nogle af vores egne funktioner. 499 00:20:16,999 --> 00:20:20,040 Og således har ingen af ​​disse funktioner har været særligt store eller kødfulde. 500 00:20:20,040 --> 00:20:24,570 Du får i dem større funktioner formentlig, P sæt 2, P sæt 3, 501 00:20:24,570 --> 00:20:26,410 absolut P sæt 4 og fremefter. 502 00:20:26,410 --> 00:20:29,340 Lige nu er de fleste af dine programmer, hvis ikke alle af dem, i hvert fald for P 503 00:20:29,340 --> 00:20:31,550 sæt 1 kan helt gøres i main. 504 00:20:31,550 --> 00:20:33,810 Hvis dit program er kun fem linjer, 10 linjer, 505 00:20:33,810 --> 00:20:37,070 endda 20 linjer lang, perfekt rimeligt at skrive det 506 00:20:37,070 --> 00:20:40,930 alle i main og ikke at over komplicere din kode, men hvad vi laver i dag 507 00:20:40,930 --> 00:20:44,360 og senere forsøger også at indføre nogle gode design teknikker 508 00:20:44,360 --> 00:20:48,660 således at så din kode bliver mere kompliceret og da problemerne 509 00:20:48,660 --> 00:20:51,690 du ønsker at løse får sværere og mere interessant du har, en slags, 510 00:20:51,690 --> 00:20:55,850 værktøjerne i din værktøjskasse, som at designe gode løsninger til dem. 511 00:20:55,850 --> 00:21:01,210 >> Så lad os tage et hurtigt kig tilbage på dette program fra min sidste uge, som 512 00:21:01,210 --> 00:21:06,550 var funktioner nul dot C og bemærke, at ganske enkelt 513 00:21:06,550 --> 00:21:10,310 det ser sådan ud med to funktioner, vigtigste og udskrive navn. 514 00:21:10,310 --> 00:21:13,160 Og tænker tilbage eller måske reverse engineering i dag, 515 00:21:13,160 --> 00:21:16,880 hvad var motivationen for at indføre en funktion på linje 28 kaldes, 516 00:21:16,880 --> 00:21:18,180 Print navn? 517 00:21:18,180 --> 00:21:21,745 Eller hvad var dette et eksempel på i form af et princip 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 Nogle mumler. 521 00:21:27,300 --> 00:21:28,830 Hvad? 522 00:21:28,830 --> 00:21:32,210 >> Ja så Funktionel nedbrydning er lidt af den fancy måde at sige, 523 00:21:32,210 --> 00:21:34,690 nedbrydes dit program i dens bestanddele 524 00:21:34,690 --> 00:21:37,530 og derefter bruge de dele at samle en helhed. 525 00:21:37,530 --> 00:21:39,620 Så det er også bare lidt af en mundfuld allerede 526 00:21:39,620 --> 00:21:42,050 men det er måske endda en bedre eksempel på noget 527 00:21:42,050 --> 00:21:43,081 lige ringet abstraktion. 528 00:21:43,081 --> 00:21:43,580 Højre? 529 00:21:43,580 --> 00:21:46,950 Abstraktion bliver en af de tilbagevendende temaer i CS50 530 00:21:46,950 --> 00:21:49,085 og også datalogi mere generelt, da det er 531 00:21:49,085 --> 00:21:53,060 en teknik, som du kan løse problemer mere effektivt, fordi du 532 00:21:53,060 --> 00:21:56,807 kan skrive løsninger mere intuitivt og på en måde, der skalerer 533 00:21:56,807 --> 00:21:58,390 og er forståeligt af andre mennesker. 534 00:21:58,390 --> 00:21:59,860 Hvad mener jeg med det? 535 00:21:59,860 --> 00:22:04,340 >> Så velsagtens det er meget mere læsbar at se på et program som dette, 536 00:22:04,340 --> 00:22:05,990 super kort, selvom det er. 537 00:22:05,990 --> 00:22:10,050 Når du ser på linje 22, at der er en funktion kaldes, print navn. 538 00:22:10,050 --> 00:22:12,620 Det navn alene siger, hvad den gør. 539 00:22:12,620 --> 00:22:15,780 Denne funktion tilsyneladende tager input mellem dens parenteser, 540 00:22:15,780 --> 00:22:18,600 og tilsyneladende gør noget, formentlig udskriver navnet. 541 00:22:18,600 --> 00:22:20,880 Og så, selvom vi absolut kunne have 542 00:22:20,880 --> 00:22:25,280 gjort, hvad vi gjorde for en uge siden, hvilket var bare tage denne faktiske linje kode, 543 00:22:25,280 --> 00:22:28,710 slippe af med denne, og få slip for denne alle sammen, 544 00:22:28,710 --> 00:22:31,436 vi slags abstraheret væk begrebet udskrive et navn. 545 00:22:31,436 --> 00:22:33,060 Jeg er ligeglad, hvis du bruger print def. 546 00:22:33,060 --> 00:22:35,601 Jeg er ligeglad, hvis du har en procent S og en omvendt skråstreg N. Disse 547 00:22:35,601 --> 00:22:37,270 er utroligt mystiske detaljer. 548 00:22:37,270 --> 00:22:40,090 Hvad jeg ligeglad som en programmør udskriver et navn. 549 00:22:40,090 --> 00:22:43,414 Og ja, hvad bedre måde at gøre det end ved at kalde en funktion, print navn? 550 00:22:43,414 --> 00:22:46,330 Og ja, der var en af ​​de motivationer for at gøre noget som dette. 551 00:22:46,330 --> 00:22:50,370 Gøre koden mere læselig, mere genbruges, og også selvstændig beskrivende. 552 00:22:50,370 --> 00:22:52,120 Lad os nu tage et kig på et andet eksempel, 553 00:22:52,120 --> 00:22:56,220 som var funktioner én, som vi havde herovre. 554 00:22:56,220 --> 00:23:00,367 >> Så denne ene er måske endnu mere overbevisende, fordi i dette tilfælde, 555 00:23:00,367 --> 00:23:01,700 Jeg ønsker ikke at bare få en int. 556 00:23:01,700 --> 00:23:03,320 Jeg ønsker at få en positiv int. 557 00:23:03,320 --> 00:23:06,470 Og det viser sig at få en positiv int du skal gøre en masse benarbejde. 558 00:23:06,470 --> 00:23:06,969 Højre? 559 00:23:06,969 --> 00:23:09,600 Det er ikke en simpel én linje kalder ligesom print navn var, 560 00:23:09,600 --> 00:23:11,480 hvilket er ganske vist mindre overbevisende. 561 00:23:11,480 --> 00:23:16,000 >> For at få en positiv int, logically-- lad mig rulle ned for at skjule dette. 562 00:23:16,000 --> 00:23:18,887 Hvad har du at gøre? 563 00:23:18,887 --> 00:23:20,720 Ligesom alle de værktøjer, vi har i øjeblikket er 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 Få Int, og få Float, Få Lang Lang, får String, 566 00:23:26,990 --> 00:23:29,260 men den eneste, germane, lige nu er Get Int. 567 00:23:29,260 --> 00:23:32,970 Så hvis det eneste værktøj, du har i dit værktøjskassen er Get Int, 568 00:23:32,970 --> 00:23:35,505 hvordan vi går om at gennemføre det for at få positiv int? 569 00:23:35,505 --> 00:23:35,929 >> PUBLIKUM: Opret en log og tjek om de input, de gav 570 00:23:35,929 --> 00:23:36,762 var positiv eller ej. 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 Præcis. 574 00:23:41,200 --> 00:23:43,950 Et andet værktøj, vi har i vores værktøjskasse fra en uge eller to siden 575 00:23:43,950 --> 00:23:45,419 er bare looping konstruktion. 576 00:23:45,419 --> 00:23:48,210 Og så, ja, hvis vi bruger et stykke loop, eller en gør while-løkke, eller en forgrunden 577 00:23:48,210 --> 00:23:50,850 loop vi kunne sandsynligvis komme væk med en af ​​de i en eller anden form. 578 00:23:50,850 --> 00:23:55,140 Vi kan implementere begrebet get positiv int ved bare at bruge Get Int, 579 00:23:55,140 --> 00:23:57,830 og så bare holde kalde det igen og holde chikane brugeren 580 00:23:57,830 --> 00:24:00,320 indtil han eller hun faktisk giver os, hvad vi ønsker. 581 00:24:00,320 --> 00:24:03,260 >> Og så nu, dette indvinding af processen 582 00:24:03,260 --> 00:24:05,680 for at få en positiv int i en funktion kaldet 583 00:24:05,680 --> 00:24:08,930 Få Positiv Int er lidt mere overbevisende, fordi se på dette. 584 00:24:08,930 --> 00:24:10,990 Disse er ligesom 10 plus linjer kode, der 585 00:24:10,990 --> 00:24:15,090 er involveret i at få en positiv int, og jeg ved ikke rigtig pleje, hvordan du gør det. 586 00:24:15,090 --> 00:24:17,850 Alt, hvad jeg ligeglad er, at du kan gøre det, og så har jeg 587 00:24:17,850 --> 00:24:21,660 skjulte alle disse detaljer bag et funktion kaldet Få Positive int det, 588 00:24:21,660 --> 00:24:23,430 ja, har denne gøre, mens løkke. 589 00:24:23,430 --> 00:24:27,660 >> Og se i sidste uge for syntaksen der, men det bare erklærer N, 590 00:24:27,660 --> 00:24:29,800 og det udskriver det instruktion til brugeren. 591 00:24:29,800 --> 00:24:33,330 Det opfordrer Få Int og derefter kontrollerer denne betingelse igen og igen, 592 00:24:33,330 --> 00:24:35,230 og igen, indtil brugeren samarbejder. 593 00:24:35,230 --> 00:24:38,000 >> Så nu, et par sundhedstjek. 594 00:24:38,000 --> 00:24:40,370 For dem måske kender med nogle programmering, 595 00:24:40,370 --> 00:24:46,410 hvorfor er N erklærede, hvorfor jeg opretter N uden for gøre, mens løkken? 596 00:24:46,410 --> 00:24:50,370 Hvorfor er det på linje 29 og ikke på den måde 33, for eksempel. 597 00:24:50,370 --> 00:24:53,529 >> PUBLIKUM: Fordi når du erklære den udenfor, den slags 598 00:24:53,529 --> 00:24:56,688 mere, jo større scope-- 599 00:24:56,688 --> 00:24:58,146 >> SPEAKER 1: God. 600 00:24:58,146 --> 00:24:59,604 >> PUBLIKUM: DET-- hvis du erklærer det inde i løkken, [uhørligt] 601 00:24:59,604 --> 00:25:00,979 fordi den ikke kender til det. 602 00:25:00,979 --> 00:25:02,819 603 00:25:02,819 --> 00:25:03,610 SPEAKER 1: Præcis. 604 00:25:03,610 --> 00:25:06,330 Hvis jeg kan simplify-- det er et spørgsmål om omfanget. 605 00:25:06,330 --> 00:25:11,530 Og omfang refererer til den sammenhæng, som en variabel eksisterer eller er anvendeligt. 606 00:25:11,530 --> 00:25:15,050 Og dejligt tommelfingerregel er, at generelt, når du erklærer eller oprette 607 00:25:15,050 --> 00:25:21,642 en variabel, du kan kun bruge det inde af de nærmeste omfavne krøllede parenteser. 608 00:25:21,642 --> 00:25:22,600 Så hvad betyder det? 609 00:25:22,600 --> 00:25:26,551 Hvis jeg i stedet fortryde denne og gå med noget, der føles lidt enklere. 610 00:25:26,551 --> 00:25:27,050 Højre? 611 00:25:27,050 --> 00:25:29,360 >> Linje 32 bare ser renere for mig nu. 612 00:25:29,360 --> 00:25:31,500 Jeg gør begge ting på gang og derefter tildele 613 00:25:31,500 --> 00:25:33,070 højre til venstre. 614 00:25:33,070 --> 00:25:35,180 Problemet er nu baseret på denne definition af anvendelsesområdet 615 00:25:35,180 --> 00:25:41,130 er, at N kan anvendes i linjer 31 og 32 inde i denne sløjfe, 616 00:25:41,130 --> 00:25:45,100 men hvor ved denne definition kan det ikke bruges? 617 00:25:45,100 --> 00:25:45,660 På linje hvad? 618 00:25:45,660 --> 00:25:46,160 Ja. 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 Bestemt 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 uden for krøllede parenteser. 626 00:25:56,450 --> 00:25:58,200 Og så i virkeligheden, så lad os se hvad der sker. 627 00:25:58,200 --> 00:25:58,700 Højre? 628 00:25:58,700 --> 00:26:00,722 Dette kan virke lidt intuitiv eller måske ikke, 629 00:26:00,722 --> 00:26:02,680 men lad os se, hvad compiler har at sige, når 630 00:26:02,680 --> 00:26:04,730 vi går ind i dagens kilde mappe. 631 00:26:04,730 --> 00:26:08,950 Make-funktion én. 632 00:26:08,950 --> 00:26:11,231 Åh gud. 633 00:26:11,231 --> 00:26:12,980 Nå, jeg endelig færdig at, ved den måde. 634 00:26:12,980 --> 00:26:14,030 Okay. 635 00:26:14,030 --> 00:26:15,510 Og hvad er problemet her? 636 00:26:15,510 --> 00:26:17,430 Meget mystiske at se på. 637 00:26:17,430 --> 00:26:19,570 Men her er hvad jeg typed-- gøre funktionen én. 638 00:26:19,570 --> 00:26:21,640 Her er, hvad gør induceret, som faktisk er 639 00:26:21,640 --> 00:26:23,705 ved hjælp af compiler klang med nogle af disse flag 640 00:26:23,705 --> 00:26:25,080 at vi vil se igen inden længe. 641 00:26:25,080 --> 00:26:26,829 Og igen, ser altid ved den første fejl, 642 00:26:26,829 --> 00:26:30,540 fordi det måske bare have en cascading meningsløs effekt på andre linjer. 643 00:26:30,540 --> 00:26:34,410 >> Så hvad dette betyder, at den Problemet er i funktion 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 i kolonne eller karakter, 13. 646 00:26:39,712 --> 00:26:42,670 Så når din tekst editor, der kan hjælpe dig med at identificere, hvor problemet er. 647 00:26:42,670 --> 00:26:47,079 Så hvis jeg rulle op, hvad der er linie 32? 648 00:26:47,079 --> 00:26:49,120 Det er faktisk denne ene der er allerede fremhævet 649 00:26:49,120 --> 00:26:50,607 lige her-- ubrugt variabel n. 650 00:26:50,607 --> 00:26:51,440 Men det er ikke ubrugt. 651 00:26:51,440 --> 00:26:52,320 Jeg bruger det. 652 00:26:52,320 --> 00:26:56,110 Men compiler er forvirret, fordi det eksisterer kun inde i dette omfang. 653 00:26:56,110 --> 00:26:57,727 Og så jeg kan ikke bruge det her. 654 00:26:57,727 --> 00:26:58,560 Jeg kan ikke bruge det her. 655 00:26:58,560 --> 00:27:01,320 Og compiler derfor ikke engang passe, at jeg prøver. 656 00:27:01,320 --> 00:27:03,940 Det synes at være ubrugt inden for sit faktiske omfang. 657 00:27:03,940 --> 00:27:08,854 >> Så vi kan udvide anvendelsesområdet ved at gøre præcis, hvad vi startede med-- int n. 658 00:27:08,854 --> 00:27:11,020 Og selv om det ikke ser så elegant, måske, 659 00:27:11,020 --> 00:27:15,110 og vi tager en ekstra linie her, nu er det i omfang overalt. 660 00:27:15,110 --> 00:27:15,970 Så lad os prøve igen. 661 00:27:15,970 --> 00:27:19,040 Så gør funktionen én. 662 00:27:19,040 --> 00:27:19,610 Nice. 663 00:27:19,610 --> 00:27:23,370 Og nu hvis jeg hvis jeg løber funktion en, lad os give det negative 10, 664 00:27:23,370 --> 00:27:27,170 negative 1, 0, 1, og det faktisk virker. 665 00:27:27,170 --> 00:27:28,610 >> Så der er en anden løsning her. 666 00:27:28,610 --> 00:27:29,280 Du ved hvad? 667 00:27:29,280 --> 00:27:31,230 Hvad hvis jeg virkelig er brydning med dette? 668 00:27:31,230 --> 00:27:33,140 Jeg ved ikke, hvor den n er meningen at gå. 669 00:27:33,140 --> 00:27:33,723 Du ved hvad? 670 00:27:33,723 --> 00:27:39,220 Jeg bare at sætte det hele måde på toppen af ​​min fil her. 671 00:27:39,220 --> 00:27:42,835 Hvad ville det gøre, tror du? 672 00:27:42,835 --> 00:27:43,335 Ja? 673 00:27:43,335 --> 00:27:44,251 >> PUBLIKUM: [uhørligt]. 674 00:27:44,251 --> 00:27:47,964 675 00:27:47,964 --> 00:27:48,630 SPEAKER 1: Ja. 676 00:27:48,630 --> 00:27:50,560 Så jeg har gjort det globale, så at sige. 677 00:27:50,560 --> 00:27:54,430 Hvis du har en variabel, der er udenfor alle dine funktioner, der er tilladt, 678 00:27:54,430 --> 00:27:58,780 og koden skal kompilere, og n vil nu være tilgængelig ikke kun i get 679 00:27:58,780 --> 00:28:02,490 positive int, men også i main-- som er lidt bekymrende, fordi der er 680 00:28:02,490 --> 00:28:04,864 allerede et n i main, så mere på, at på bare et moment-- 681 00:28:04,864 --> 00:28:06,530 men dette ville blive betragtet som dårligt design. 682 00:28:06,530 --> 00:28:06,910 Okay. 683 00:28:06,910 --> 00:28:08,570 Hvis du nødt til at ty til noget lignende, åh, jeg vil 684 00:28:08,570 --> 00:28:10,125 bare sætte det op her, fordi koden synes at kompilere 685 00:28:10,125 --> 00:28:12,180 er generelt ikke den bedste praksis. 686 00:28:12,180 --> 00:28:14,590 Snarere du ønsker at vælge den snævrest mulige omfang 687 00:28:14,590 --> 00:28:18,720 til dine variabler, hvilket ville betyde gå med vores oprindelige design, som 688 00:28:18,720 --> 00:28:19,920 er lige her. 689 00:28:19,920 --> 00:28:24,400 >> Nu som en sidebemærkning, hvis du havde en identisk navngivet variabel her, 690 00:28:24,400 --> 00:28:27,750 vejen C ville håndtere denne-- selv om dette ikke vil ske for often-- 691 00:28:27,750 --> 00:28:30,150 er, at dette stadig helt fint ind her. 692 00:28:30,150 --> 00:28:35,000 Men denne definition af n i overensstemmelse 22 vil skygge den globale én. 693 00:28:35,000 --> 00:28:38,190 Så denne ene vil arbejde inden for vigtigste, og den globale én 694 00:28:38,190 --> 00:28:41,670 rent faktisk vil gælde, når du er i få positiv int men mere om det 695 00:28:41,670 --> 00:28:43,890 en anden gang, men blot for dem nysgerrige. 696 00:28:43,890 --> 00:28:45,970 >> Så kort sagt, vi løse dette her. 697 00:28:45,970 --> 00:28:49,220 Lad os nu drille hinanden to andre stykker før vi ser på en sidste linje kode 698 00:28:49,220 --> 00:28:50,170 i dette program. 699 00:28:50,170 --> 00:28:52,170 Få positiv int. 700 00:28:52,170 --> 00:28:54,450 På venstre side af sit ord er det ord int. 701 00:28:54,450 --> 00:28:56,860 Hvad betyder det betyde tror du? 702 00:28:56,860 --> 00:28:58,900 Indtil videre har vi mest set ugyldige. 703 00:28:58,900 --> 00:28:59,400 Ja? 704 00:28:59,400 --> 00:29:01,810 >> PUBLIKUM: Det er den type variabel, du spørger om. 705 00:29:01,810 --> 00:29:04,550 >> SPEAKER 1: Ja det er den type, lad mig ikke sige variabel, men den type af værdi 706 00:29:04,550 --> 00:29:05,990 at jeg beder tilbage til. 707 00:29:05,990 --> 00:29:08,070 Og ja, det er intuitiv her, forhåbentlig. 708 00:29:08,070 --> 00:29:08,200 Højre? 709 00:29:08,200 --> 00:29:10,250 Hvis du ønsker at få en positiv int, hvad er det du 710 00:29:10,250 --> 00:29:12,920 ønsker function-- ligesom vores frivillige fra sidste uge 711 00:29:12,920 --> 00:29:15,720 at aflevere dig tilbage et stykke papir med en int på det? 712 00:29:15,720 --> 00:29:19,190 Og så har vi præciseret, at såkaldte returtype af denne funktion 713 00:29:19,190 --> 00:29:20,450 er at få positiv int. 714 00:29:20,450 --> 00:29:22,990 Hvis vi ikke ønsker, at det returnere noget, du siger ugyldig. 715 00:29:22,990 --> 00:29:25,270 Hvis du vil have det til at vende tilbage en streng, du siger streng. 716 00:29:25,270 --> 00:29:27,310 Hvis du vil have det til at vende tilbage en flyder, siger du flyde. 717 00:29:27,310 --> 00:29:30,440 Men den eneste, der gælder her logisk, fordi jeg bruger get int, 718 00:29:30,440 --> 00:29:34,130 selvom jeg begrænser det til positive værdier, er at vende tilbage en int. 719 00:29:34,130 --> 00:29:38,380 >> Så omvendt, hvad betyder det at der er et tomrum i parentes? 720 00:29:38,380 --> 00:29:40,130 Hvad gør parentes generelt definere? 721 00:29:40,130 --> 00:29:40,588 Ja? 722 00:29:40,588 --> 00:29:42,880 >> PUBLIKUM: Det betyder funktionens faktisk ikke få det. 723 00:29:42,880 --> 00:29:44,650 >> SPEAKER 1: Det betyder funktionens faktisk ikke at få hvad? 724 00:29:44,650 --> 00:29:45,430 >> PUBLIKUM: Et input. 725 00:29:45,430 --> 00:29:46,763 >> SPEAKER 1: Et input, overhovedet. 726 00:29:46,763 --> 00:29:49,870 Så ja, hvis parentes her du angiver ugyldig, 727 00:29:49,870 --> 00:29:51,650 det betyder bare jeg ønsker ikke nogen input. 728 00:29:51,650 --> 00:29:53,269 Jeg vil løse problemet selv. 729 00:29:53,269 --> 00:29:55,810 Og ja, behøver du ikke at fortælle få positiv int noget. 730 00:29:55,810 --> 00:29:59,630 Du skal bare sige, få positiv int, og at Funktionen vil gå ud og gøre sit ting. 731 00:29:59,630 --> 00:30:02,970 >> Men der har været et lille trick jeg har spillet her hele denne gang 732 00:30:02,970 --> 00:30:04,970 for at sikre denne kode samler. 733 00:30:04,970 --> 00:30:09,620 Bemærk at int-- få positiv int void-- er på linje 27. 734 00:30:09,620 --> 00:30:14,530 Men for nogle tilsyneladende underlige grund det er også heroppe på linie 16. 735 00:30:14,530 --> 00:30:18,530 Og bare for god foranstaltning vil jeg gentage dette, så er det helt identiske. 736 00:30:18,530 --> 00:30:21,640 Og jeg har sagt prototype med en lille en-line kommentar. 737 00:30:21,640 --> 00:30:28,850 Hvad sker der, hvis jeg sletter det, og nu køres igen gøre funktionen 1, ind. 738 00:30:28,850 --> 00:30:29,350 Hovsa. 739 00:30:29,350 --> 00:30:32,527 740 00:30:32,527 --> 00:30:33,110 Vent et minut. 741 00:30:33,110 --> 00:30:34,764 Hvor er min fane? 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 Stå ved. 745 00:30:39,620 --> 00:30:41,570 Make-funktion 1. 746 00:30:41,570 --> 00:30:42,150 Der vi går. 747 00:30:42,150 --> 00:30:42,310 OK. 748 00:30:42,310 --> 00:30:43,400 Havde ikke gemt det ordentligt. 749 00:30:43,400 --> 00:30:45,220 Så tænk, jeg der er en lille bug her, hvor jeg ikke er 750 00:30:45,220 --> 00:30:46,636 se fanen navn i øjeblikket. 751 00:30:46,636 --> 00:30:47,940 Så hvad der foregår her? 752 00:30:47,940 --> 00:30:52,210 Implicit erklæring om funktion få positiv int er ugyldig i C99. 753 00:30:52,210 --> 00:30:53,940 Så forvirrende igen. 754 00:30:53,940 --> 00:30:55,200 Så hvad er dette vejledende for? 755 00:30:55,200 --> 00:30:57,287 Tja, det viser sig, at C er temmelig dum. 756 00:30:57,287 --> 00:30:59,912 Tja, det er programmering sprog, eller rettere compiler er. 757 00:30:59,912 --> 00:31:02,940 Det kun ved, hvad du har lærte det, og det er kun 758 00:31:02,940 --> 00:31:05,640 går noget at vide Hvis du lært det før. 759 00:31:05,640 --> 00:31:07,960 Med andre ord, i vigtigste i øjeblikket, jeg er 760 00:31:07,960 --> 00:31:10,900 forsøger at kalde en funktion kaldes få positive int. 761 00:31:10,900 --> 00:31:14,120 Men compileren ikke vil at bemærke, at få positiv int 762 00:31:14,120 --> 00:31:16,500 Der findes indtil linie 26. 763 00:31:16,500 --> 00:31:21,360 Og så hvad compileren gør, er bare fejl, så snart det bliver til linje 17, 764 00:31:21,360 --> 00:31:23,700 siger implicit erklæring af at få positive int, som 765 00:31:23,700 --> 00:31:27,740 er bare en fancy måde at sige, jeg ikke ved, hvad får positiv int er endnu. 766 00:31:27,740 --> 00:31:31,240 >> Andre sprog som Java og Python og Ruby kunne se fremad. 767 00:31:31,240 --> 00:31:32,240 C ikke. 768 00:31:32,240 --> 00:31:35,110 Og så den måde, vi løse dette er en af ​​to måder. 769 00:31:35,110 --> 00:31:40,160 Enten en, hvis problemet er, at få positiv int er ikke set før, 770 00:31:40,160 --> 00:31:42,150 godt, lad mig bare flytte det til toppen. 771 00:31:42,150 --> 00:31:43,650 Det ville løse dette problem. 772 00:31:43,650 --> 00:31:46,790 Men generelt er det betragtes som bedre teknik 773 00:31:46,790 --> 00:31:50,220 at sætte din vigtigste funktion i det toppen, så et menneske at læse din kode 774 00:31:50,220 --> 00:31:52,710 ved, hvad programmet gør, fordi vigtigste er ikke begravet alle 775 00:31:52,710 --> 00:31:53,960 vejen på bunden eller i midten. 776 00:31:53,960 --> 00:31:55,130 Det er helt i top. 777 00:31:55,130 --> 00:31:56,410 Så der ikke føler sig ideelt. 778 00:31:56,410 --> 00:31:58,326 Og du kan faktisk få i situationer, hvor 779 00:31:58,326 --> 00:32:00,820 Hvis en funktionskald en anden, der kalder en anden, 780 00:32:00,820 --> 00:32:04,630 du kan komme ind et problem, hvor hverken kan gå over den anden, logisk. 781 00:32:04,630 --> 00:32:05,920 Det er bare ikke muligt. 782 00:32:05,920 --> 00:32:09,290 >> Og så vej til arbejde omkring dette er at bare tage 783 00:32:09,290 --> 00:32:13,200 funktionen underskrift, så at speak-- den første linje, hvor det er declared-- 784 00:32:13,200 --> 00:32:16,850 og bare kopiere, indsætte den i top, men ikke med krøllet 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 ligesom en lille hint af hvad der skal komme. 787 00:32:20,840 --> 00:32:26,630 Og faktisk hele denne tid, hvor vi har set ting som standard io.h 788 00:32:26,630 --> 00:32:33,040 og cs50.h, Tilsvarende i disse prik h-filer er der andre prototyper. 789 00:32:33,040 --> 00:32:35,250 Og vi vil se, at inden længe. 790 00:32:35,250 --> 00:32:39,340 >> Så kort, når du har et program i en fil med flere funktioner 791 00:32:39,340 --> 00:32:42,300 udover vigtigste, du næsten altid ønsker at erklære dem 792 00:32:42,300 --> 00:32:45,360 blot ved hjælp af deres første line, efterfulgt af et semikolon, 793 00:32:45,360 --> 00:32:48,410 på toppen af ​​filen. 794 00:32:48,410 --> 00:32:50,460 Det var en masse på én gang. 795 00:32:50,460 --> 00:32:53,130 Nogen spørgsmål? 796 00:32:53,130 --> 00:32:53,920 Nogen spørgsmål? 797 00:32:53,920 --> 00:32:54,530 Okay. 798 00:32:54,530 --> 00:32:59,760 >> Så lad os gå videre derefter til noget som hoste. 799 00:32:59,760 --> 00:33:00,260 Oh. 800 00:33:00,260 --> 00:33:00,570 Hvor montering. 801 00:33:00,570 --> 00:33:01,220 Okay. 802 00:33:01,220 --> 00:33:02,260 Hoste. 803 00:33:02,260 --> 00:33:05,080 Så her er en C gennemførelse af et program 804 00:33:05,080 --> 00:33:07,560 vi gjorde den anden dag i Scratch netop simpelthen bare 805 00:33:07,560 --> 00:33:08,691 siger hoste, hoste, hoste. 806 00:33:08,691 --> 00:33:09,190 Okay. 807 00:33:09,190 --> 00:33:11,136 Og nogen sagde et par dage siden, at der er 808 00:33:11,136 --> 00:33:12,760 en måde at rense denne kode op allerede. 809 00:33:12,760 --> 00:33:12,880 Okay? 810 00:33:12,880 --> 00:33:15,440 Så snart du kopierer og indsætte sandsynligvis dårligt design. 811 00:33:15,440 --> 00:33:18,725 Mindst en gang vi kommer til fire eller fem eller 20 hoste, det føles dårlig praksis. 812 00:33:18,725 --> 00:33:19,850 Vi bare holde kopiere, indsætte. 813 00:33:19,850 --> 00:33:22,213 Hvad er den oplagte løsning til rengøring af dette program op? 814 00:33:22,213 --> 00:33:23,120 >> PUBLIKUM: Loop. 815 00:33:23,120 --> 00:33:23,350 >> SPEAKER 1: Ja. 816 00:33:23,350 --> 00:33:24,070 Så brug en løkke. 817 00:33:24,070 --> 00:33:27,697 Og vi kan bruge en til-loop, et stykke loop, helst antal fremgangsmåder. 818 00:33:27,697 --> 00:33:29,780 Og ja, det er hvad vi gør i version en her. 819 00:33:29,780 --> 00:33:32,250 Jeg har i stedet omskrevet det i version en af ​​cough.c 820 00:33:32,250 --> 00:33:35,170 at være lige hoste inden for en for-løkke. 821 00:33:35,170 --> 00:33:38,240 Okay, men der er en mulighed nu at slags starten 822 00:33:38,240 --> 00:33:41,630 at udforme det lidt mere som den lektie, vi lærte et øjeblik siden, 823 00:33:41,630 --> 00:33:46,190 som er denne-- antage, at jeg ønskede at skabe en funktion kaldet hoste, 824 00:33:46,190 --> 00:33:49,730 Lad os overveje for bare et øjeblik hvad det kommer til at se ud. 825 00:33:49,730 --> 00:33:51,900 Så hvis jeg vil have noget til at hoste, jeg har bare brug for 826 00:33:51,900 --> 00:33:53,800 at bruge print f inde i funktion. 827 00:33:53,800 --> 00:33:55,030 Og faktisk er jeg. 828 00:33:55,030 --> 00:33:56,990 Og i virkeligheden, alt dette tid, hver gang du er 829 00:33:56,990 --> 00:33:59,000 udskrivning noget at skærmen, en programmør 830 00:33:59,000 --> 00:34:00,610 ville kalde det en bivirkning. 831 00:34:00,610 --> 00:34:02,990 Det er mig ikke rakte tilbage nogen en værdi. 832 00:34:02,990 --> 00:34:06,170 Det er mig at tage nogle handling der kan være visuelt indlysende. 833 00:34:06,170 --> 00:34:10,672 Men denne funktion hoste, betyder det tilbage noget baseret på dens første linje? 834 00:34:10,672 --> 00:34:12,880 Nej, fordi den type som er ugyldig, hvilket betyder blot 835 00:34:12,880 --> 00:34:14,250 det er ikke rakte mig noget tilbage. 836 00:34:14,250 --> 00:34:16,791 Det kan gøre noget visuelt, men det er ikke rakte mig 837 00:34:16,791 --> 00:34:18,639 bakke et stykke papir ligesom sidste uge. 838 00:34:18,639 --> 00:34:21,310 >> Er det brug for input? 839 00:34:21,310 --> 00:34:21,810 Nej. 840 00:34:21,810 --> 00:34:23,134 Og så det er ugyldigt her også. 841 00:34:23,134 --> 00:34:25,600 Så dette er også slags over-engineering dette problem. 842 00:34:25,600 --> 00:34:26,099 Højre? 843 00:34:26,099 --> 00:34:28,820 Jeg har lavet programmet mere komplekse, flere linjer kode, 844 00:34:28,820 --> 00:34:31,889 Jeg har ikke gjort det nogen mere funktionel, men det 845 00:34:31,889 --> 00:34:34,210 ville være et springbræt, måske for en bredere 846 00:34:34,210 --> 00:34:36,830 forbindelse med mere komplicerede kode. 847 00:34:36,830 --> 00:34:38,150 Men hvad med det her? 848 00:34:38,150 --> 00:34:42,050 Hvad har jeg done-- bare et blik på dette uden at se på kommentar 849 00:34:42,050 --> 00:34:46,076 på toppen af ​​file-- hvad har Jeg fundamentalt gjort her med min hoste 850 00:34:46,076 --> 00:34:47,409 implementering, der er anderledes? 851 00:34:47,409 --> 00:34:48,327 Ja, i tilbage? 852 00:34:48,327 --> 00:34:51,384 >> PUBLIKUM: Gør det, så du kan har en karakter slukke. 853 00:34:51,384 --> 00:34:52,050 SPEAKER 1: Ja. 854 00:34:52,050 --> 00:34:53,270 Så det føles slags rart. 855 00:34:53,270 --> 00:34:53,389 Højre? 856 00:34:53,389 --> 00:34:56,600 Det er ligesom at tilføje en funktion til din program eller din funktion, i dette tilfælde. 857 00:34:56,600 --> 00:34:57,830 Det er stadig returnerer ingenting. 858 00:34:57,830 --> 00:35:00,538 Det kunne have en visuel bivirkning, fordi det kalder print f. 859 00:35:00,538 --> 00:35:02,800 Men nu har jeg parametriseret den funktion, som 860 00:35:02,800 --> 00:35:06,470 betyder, at jeg har angivet taget input af typen int og kalder det n, 861 00:35:06,470 --> 00:35:08,510 men jeg kunne kalde det noget, jeg vil. 862 00:35:08,510 --> 00:35:11,550 I virkeligheden kunne det bare være gange for at være endnu mere eksplicit. 863 00:35:11,550 --> 00:35:13,310 Og så kunne jeg bare ændre dette her. 864 00:35:13,310 --> 00:35:16,450 Men pointen er, at det er sådan jeg oprette en funktion, der tager input. 865 00:35:16,450 --> 00:35:19,530 Og hvis du husker spejlvende gennem måske online i en 866 00:35:19,530 --> 00:35:23,000 af walk-throughs, den fjerde og sidste hoste eksempel 867 00:35:23,000 --> 00:35:27,150 du vil opdage her jeg har generaliseret min kode further-- slags abstraheret 868 00:35:27,150 --> 00:35:27,690 det yderligere. 869 00:35:27,690 --> 00:35:31,390 Ligesom hoste og nyse, begge er om ligesom at sige noget eller gøre 870 00:35:31,390 --> 00:35:32,330 en slags lyd. 871 00:35:32,330 --> 00:35:34,725 Gem ville være svarende Scratch blok. 872 00:35:34,725 --> 00:35:37,350 Og så hvad jeg gjorde i denne version, som vi kan bare blik på, 873 00:35:37,350 --> 00:35:43,170 er hoste er ligesom at sige, [hoste], hoste, og i mellemtiden, nysen er 874 00:35:43,170 --> 00:35:44,570 som at sige, [Achoo]. 875 00:35:44,570 --> 00:35:46,900 Og så jeg har generaliseret gennemførelsen af ​​dem 876 00:35:46,900 --> 00:35:48,970 ved nu at gennemføre denne generiske funktion, 877 00:35:48,970 --> 00:35:51,490 sige, som er interessant for nutidens formål 878 00:35:51,490 --> 00:35:54,300 kun fordi det stadig ikke har en returtypen. 879 00:35:54,300 --> 00:35:56,398 Men hvor mange indgange har det? 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 at tage i to argumenter, 883 00:35:59,263 --> 00:36:00,710 bare adskille dem med et komma. 884 00:36:00,710 --> 00:36:03,110 Og hvis du vil derefter kalder denne funktion, 885 00:36:03,110 --> 00:36:05,800 bemærke, at du bare kalder sige, tilbud, citat slut, 886 00:36:05,800 --> 00:36:09,090 for det første argument, fælles n, for det andet argument. 887 00:36:09,090 --> 00:36:12,130 Så igen, vi bare har nu byggesten, så vi rent faktisk kan 888 00:36:12,130 --> 00:36:15,686 gennemføre nogle af vores egne funktioner. 889 00:36:15,686 --> 00:36:16,570 Okay. 890 00:36:16,570 --> 00:36:19,690 Eventuelle spørgsmål om disse? 891 00:36:19,690 --> 00:36:22,400 >> Så lad os nu skrælle et lag i så fald tilbage. 892 00:36:22,400 --> 00:36:24,840 Og målet i sidste ende, er næste uges problem sæt 893 00:36:24,840 --> 00:36:27,710 kommer til at være på cryptogrophy-- kunsten scrambling oplysninger. 894 00:36:27,710 --> 00:36:30,640 Og specifikt oplysningerne vil få dig kryptere eller dekryptere 895 00:36:30,640 --> 00:36:31,605 bliver tekst. 896 00:36:31,605 --> 00:36:33,980 Og så den slags invitationer Spørgsmålet i dag ligesom godt, 897 00:36:33,980 --> 00:36:38,480 hvad der foregår under kølerhjelmen med tekst uden ASCII fra uge nul, 898 00:36:38,480 --> 00:36:40,730 og hvordan kan vi faktisk begynde at manipulere den? 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 tekst, som kunne indlæses ind ligesom get strengen funktionen. 901 00:36:47,380 --> 00:36:52,540 Og starter nu, når du ser en streng som denne-- Z-A-M-Y-L-en-- 902 00:36:52,540 --> 00:36:56,550 begynde at tænke på det som om hver af disse tegn er i en kasse med dens 903 00:36:56,550 --> 00:36:57,050 egen. 904 00:36:57,050 --> 00:36:59,460 Og ja, i en uge eller så er tid, idet hver af disse kasser 905 00:36:59,460 --> 00:37:04,280 kommer til at repræsentere meget specifikt en blok af memory-- en bid af hukommelse. 906 00:37:04,280 --> 00:37:07,050 Så hver af disse breve, I sidste ende vil repræsentere 8 bit. 907 00:37:07,050 --> 00:37:10,560 Og vi vil faktisk se, hvad der foregår på undersiden af ​​emhætten i min computer. 908 00:37:10,560 --> 00:37:13,440 >> Men for det ikke tilstrækkeligt bare for at se på Zamyla 909 00:37:13,440 --> 00:37:17,520 gennem denne linse, hvorved hver af disse breve er i sin egen boks. 910 00:37:17,520 --> 00:37:22,697 Og pænt nok i C vi kan adgang til hver af disse kasser direkte. 911 00:37:22,697 --> 00:37:25,530 Så hvis du ønsker at få den første bogstav i hendes navn, super nemt i C. 912 00:37:25,530 --> 00:37:28,410 Hvis du ønsker at få det sidste brev, super nemt såvel 913 00:37:28,410 --> 00:37:30,240 med et stykke ny syntaks. 914 00:37:30,240 --> 00:37:36,250 >> Så jeg har tænkt mig at gå videre ind i CS50 IDE og åbne op strengen nul prik C. 915 00:37:36,250 --> 00:37:40,270 Og i dette eksempel her, der er et par nye ting foregår. 916 00:37:40,270 --> 00:37:44,360 Så først på linje 19, vi har set denne before-- get streng. 917 00:37:44,360 --> 00:37:49,840 Så bare som en hurtig tilregnelighed check, hvis nogen kunne tilbyde op verbalt 918 00:37:49,840 --> 00:37:52,662 en lægmand forklaring på hvad der foregår på linje 19. 919 00:37:52,662 --> 00:37:55,370 Ligesom bare omsætte dette til Engelsk, at en værelseskammerat ikke i CS50 920 00:37:55,370 --> 00:37:56,416 kunne forstå. 921 00:37:56,416 --> 00:37:56,916 Ja. 922 00:37:56,916 --> 00:37:59,749 >> PUBLIKUM: Have brugeren indtaster en snor og gemme det i en variabel s. 923 00:37:59,749 --> 00:38:01,934 924 00:38:01,934 --> 00:38:02,600 SPEAKER 1: God. 925 00:38:02,600 --> 00:38:05,579 Har brugerinput en streng og gemme det i en variabel s. 926 00:38:05,579 --> 00:38:06,120 Det er godt. 927 00:38:06,120 --> 00:38:08,090 Så på højre hånd side, kalder vi får streng. 928 00:38:08,090 --> 00:38:10,340 Der returnerer en værdi der ikke fik tildelt 929 00:38:10,340 --> 00:38:14,230 fra højre side til venstre side ind i en variabel kaldet s, der er 930 00:38:14,230 --> 00:38:15,950 designet til at gemme en streng. 931 00:38:15,950 --> 00:38:16,800 Præcis. 932 00:38:16,800 --> 00:38:20,000 >> Så nu linje 22, pr kommentaren på linje 21, 933 00:38:20,000 --> 00:38:22,780 naturligvis udskriver denne streng et 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 og fremmest, vi initialisere jeg til 0. 936 00:38:27,040 --> 00:38:31,061 Og så hvordan får vi til I slutningen af ​​Zamyla navn? 937 00:38:31,061 --> 00:38:32,810 Nå, i slutningen af Zamyla navn, kunne jeg 938 00:38:32,810 --> 00:38:38,151 manuelt skrive det sidste tegn af hendes navn eller anden måde, eller antallet af det. 939 00:38:38,151 --> 00:38:38,650 Højre? 940 00:38:38,650 --> 00:38:43,500 Hvis vi går tilbage her-- Z-A-M-L-- Y-L-en-- så jeg kunne skrive i. 941 00:38:43,500 --> 00:38:47,340 Hvad er indekset for Zamyla sidste brev? 942 00:38:47,340 --> 00:38:52,517 Hvis dette er 0-- tale som en programmer-- 0, 1, 2, 3, 4, 5, 943 00:38:52,517 --> 00:38:56,570 Jeg heard-- så ja, det sidste bogstav i Zamyla navn er den sjette, 944 00:38:56,570 --> 00:38:58,890 men hvis vi tæller fra 0, Det kommer til at blive nummer 5. 945 00:38:58,890 --> 00:39:01,320 Så holder det i tankerne her. 946 00:39:01,320 --> 00:39:04,929 >> Det viser sig, der er en funktion i C kaldte strlen, og tilbage i dag 947 00:39:04,929 --> 00:39:06,720 og i dag stadig, en masse programmører 948 00:39:06,720 --> 00:39:09,524 vælge at synkronisere navne for deres funktioner, der lyder som ordene 949 00:39:09,524 --> 00:39:10,440 de prøver at sige. 950 00:39:10,440 --> 00:39:12,590 Så strlen er streng længde. 951 00:39:12,590 --> 00:39:18,168 Og så hvad ville streng længde S vende tilbage når Zamyla er input? 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øjre? 955 00:39:22,590 --> 00:39:23,940 Hvad er længden af ​​Zamyla navn? 956 00:39:23,940 --> 00:39:24,440 Højre? 957 00:39:24,440 --> 00:39:26,240 Og netop i virkeligheden seks bogstaver. 958 00:39:26,240 --> 00:39:26,740 Højre? 959 00:39:26,740 --> 00:39:28,940 Og så hvad betyder det for vores løkke? 960 00:39:28,940 --> 00:39:32,130 Vi kommer til at gå fra 0 op til seks, som 961 00:39:32,130 --> 00:39:33,650 kommer til at give os fem iterationer. 962 00:39:33,650 --> 00:39:34,890 Hvad gør vi på hver iteration? 963 00:39:34,890 --> 00:39:36,870 Nå, procent C, nogen gættet den anden dag, 964 00:39:36,870 --> 00:39:38,710 betyder en pladsholder for hvad? 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 karakterer som en streng. 968 00:39:42,877 --> 00:39:45,251 Og så her er den nye linje at vi har fået udskrivning ud. 969 00:39:45,251 --> 00:39:46,580 Og så her er den nye syntaks. 970 00:39:46,580 --> 00:39:51,130 Hvis du ønsker at udskrive den i'te tegn i strengen S, så at sige, 971 00:39:51,130 --> 00:39:54,060 kan du blot sige navn på strengen S, 972 00:39:54,060 --> 00:39:58,230 og derefter åbne firkantede beslag, og derefter lukket firkantet beslag, med en i 973 00:39:58,230 --> 00:39:58,780 midten. 974 00:39:58,780 --> 00:40:01,430 Og det er slags rart i, at den slags ligner en firkant 975 00:40:01,430 --> 00:40:06,210 ligesom firkanter, hvor Zamyla s Der findes tegn på, at billedet der. 976 00:40:06,210 --> 00:40:09,970 >> Så hvis jeg rent faktisk køre dette nu, lad os se hvad der sker. 977 00:40:09,970 --> 00:40:15,190 Gøre strengen 0 dot skråstreg snor 0, og så er jeg 978 00:40:15,190 --> 00:40:16,720 kommer til at skrive i Zamyla navn. 979 00:40:16,720 --> 00:40:19,428 Der er ingen hurtig, fordi jeg ikke bruge print f, men det er fint. 980 00:40:19,428 --> 00:40:20,660 Jeg ved bare, hvad de skal gøre. 981 00:40:20,660 --> 00:40:23,240 Og ja, det udskrives Zamyla navn, én pr linje. 982 00:40:23,240 --> 00:40:25,760 >> Lad os nu være lidt letsindigt. 983 00:40:25,760 --> 00:40:28,461 Antag, at jeg ikke vidste om strlen og jeg regnede, 984 00:40:28,461 --> 00:40:31,460 okay, er ingen kommer til at have en navngive større end ligesom 50 tegn. 985 00:40:31,460 --> 00:40:36,360 Lad os gå videre og kompilere dette og gentag det, og skriv derefter i Zamyla 986 00:40:36,360 --> 00:40:37,160 igen. 987 00:40:37,160 --> 00:40:40,850 Logisk, hvad er Programmet vil forsøge at udskrive? 988 00:40:40,850 --> 00:40:49,545 Z-A-M-Y-L-A og derefter som 45 ukendte bytes af hukommelse. 989 00:40:49,545 --> 00:40:51,670 Og ja, vi vil komme tilbage til denne idé om hukommelse. 990 00:40:51,670 --> 00:40:54,180 Men bare logisk, hvis Zamyla navn er denne lange, 991 00:40:54,180 --> 00:40:56,450 som pr billedet her, hvad vi siger 992 00:40:56,450 --> 00:40:59,810 er at holde udskrivning, holde udskrivning, holde trykning, holde udskrivning, holde udskrivning, 993 00:40:59,810 --> 00:41:03,781 hele vejen til den 50. karakter, som der ved, hvad der vil ske. 994 00:41:03,781 --> 00:41:05,030 Så lad os faktisk tage et kig. 995 00:41:05,030 --> 00:41:06,720 Lad os skrive i Zamyla. 996 00:41:06,720 --> 00:41:07,250 Interessant. 997 00:41:07,250 --> 00:41:08,190 Vi fik heldig. 998 00:41:08,190 --> 00:41:09,700 Bare en hel masse hvid plads. 999 00:41:09,700 --> 00:41:09,930 Oh. 1000 00:41:09,930 --> 00:41:11,120 Der er en funky karakter. 1001 00:41:11,120 --> 00:41:14,577 Det ser lidt ligesom en underlig spørgsmål markere der, men der er Zamyla navn. 1002 00:41:14,577 --> 00:41:15,660 Lad os få virkelig hensynsløs. 1003 00:41:15,660 --> 00:41:20,000 Hvad med at vi udskriver 500 blokke i det ukendte? 1004 00:41:20,000 --> 00:41:24,380 Lad os gå videre og gøre det så godt, og derefter re-run. 1005 00:41:24,380 --> 00:41:27,980 Og lad os fuld skærm det, fordi vi nødt til at se mere plads. 1006 00:41:27,980 --> 00:41:30,460 Zamyla. 1007 00:41:30,460 --> 00:41:31,830 Fik heldig igen. 1008 00:41:31,830 --> 00:41:33,070 >> Tør vi får mere hensynsløse? 1009 00:41:33,070 --> 00:41:36,070 Lad os få mere hensynsløs. 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 Okay. 1013 00:41:41,890 --> 00:41:42,990 Make strengen 0. 1014 00:41:42,990 --> 00:41:44,720 Dette vil være vores sidste demo. 1015 00:41:44,720 --> 00:41:47,261 Zamyla. 1016 00:41:47,261 --> 00:41:48,632 UH. 1017 00:41:48,632 --> 00:41:50,010 UH. 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 lige nu, som er faktisk slags praktisk. 1020 00:41:54,407 --> 00:41:55,990 Hvad jeg forsøger at få at-- okay. 1021 00:41:55,990 --> 00:41:57,614 Og nu er jeg bare kommer til at blive hensynsløs. 1022 00:41:57,614 --> 00:41:58,570 500.000. 1023 00:41:58,570 --> 00:42:03,860 Make-- lad os fuld skærm 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 Der vi går. 1028 00:42:13,390 --> 00:42:15,610 Jeg har ingen idé om, hvad det er, men det lyder slemt. 1029 00:42:15,610 --> 00:42:16,110 Okay. 1030 00:42:16,110 --> 00:42:20,322 Og i virkeligheden, snart, hvis du er blandt de få heldige i kontortiden 1031 00:42:20,322 --> 00:42:22,780 og problemet indstille en, du kan meget vel støde dette. 1032 00:42:22,780 --> 00:42:25,490 Segmentering fejl faktisk gør har en veldefineret mening. 1033 00:42:25,490 --> 00:42:28,450 Det betyder, at nogle slags fejl vedrørende et segment af hukommelse. 1034 00:42:28,450 --> 00:42:30,490 Og i lægmandssprog, det betyder, at vi rørt 1035 00:42:30,490 --> 00:42:34,780 memory-- vi brugte RAM i min computer at jeg ikke skulle have haft adgang til. 1036 00:42:34,780 --> 00:42:37,050 Og det er, hvad der er både kraftfuld og også farligt 1037 00:42:37,050 --> 00:42:39,910 om C er, at du rent faktisk har uhindret adgang 1038 00:42:39,910 --> 00:42:45,910 til hele dit program hukommelse eller byte eller RAM, mere specifikt. 1039 00:42:45,910 --> 00:42:49,510 >> Så selv om Zamyla navn er kun seks tegn, 1040 00:42:49,510 --> 00:42:51,450 Jeg kan stadig gå nogen steder i hukommelsen, jeg ønsker. 1041 00:42:51,450 --> 00:42:53,491 Og som en sidebemærkning, hvis du har nogensinde læst nogle artiklen 1042 00:42:53,491 --> 00:42:55,610 i årenes løb om nogle server eller nogle program 1043 00:42:55,610 --> 00:42:58,654 blive revnet eller hacket, der er draget fordel af noget 1044 00:42:58,654 --> 00:43:00,820 kaldes en buffer overflow udnytte, at vi vil faktisk 1045 00:43:00,820 --> 00:43:04,970 tale om i et par uger, det er generelt at henvise til en eller anden måde snyder 1046 00:43:04,970 --> 00:43:09,090 en computer til at gå godt ud over grænserne for hukommelse 1047 00:43:09,090 --> 00:43:11,410 at det skal have, og at finde noget saftigt 1048 00:43:11,410 --> 00:43:13,530 ved, at en memory-- adgangskode, måske, en måde 1049 00:43:13,530 --> 00:43:16,990 omgå nogle serienummeret check eller blot generelt i stand 1050 00:43:16,990 --> 00:43:20,360 at narre computeren udfører kode, som ikke var hensigten. 1051 00:43:20,360 --> 00:43:22,360 Men lad os vende tilbage til realitet for bare et øjeblik 1052 00:43:22,360 --> 00:43:24,550 hvor dette program blev implementeret med strlen, 1053 00:43:24,550 --> 00:43:26,110 og introducere en ting op her. 1054 00:43:26,110 --> 00:43:30,030 Hvad er nyt blandt disse tre bedste linjer? 1055 00:43:30,030 --> 00:43:30,910 >> Så string dot h. 1056 00:43:30,910 --> 00:43:35,490 Det viser sig, at der er dette bibliotek kaldet String Dot H eller String Bibliotek, 1057 00:43:35,490 --> 00:43:38,490 hvis header fil, så at sige, er streng dot h, der giver mig 1058 00:43:38,490 --> 00:43:40,860 adgang til denne strlen funktion. 1059 00:43:40,860 --> 00:43:43,841 Hvis jeg udelader, at compileren er kommer til at råbe på mig i en eller anden form. 1060 00:43:43,841 --> 00:43:44,590 Men ved du hvad? 1061 00:43:44,590 --> 00:43:46,090 Lad os nu få virkelig nuanceret. 1062 00:43:46,090 --> 00:43:50,820 På linje 22, er der noget slags af inefficient-- dårligt designet, 1063 00:43:50,820 --> 00:43:53,990 arguably-- om denne linje kode. 1064 00:43:53,990 --> 00:43:56,280 Tænk tilbage på, hvordan for-løkke gennemføres 1065 00:43:56,280 --> 00:44:00,140 og hvilke skridt ske igen og igen og igen-- initialiseringen, 1066 00:44:00,140 --> 00:44:04,110 tilstanden, kode, får udført, så tilvækst 1067 00:44:04,110 --> 00:44:07,880 eller ændringen, så tilstanden, så koden, så ændringen, så 1068 00:44:07,880 --> 00:44:11,280 tilstanden, så koden, derefter ændringen, og så videre. 1069 00:44:11,280 --> 00:44:15,320 Så hvad der kunne være en lille bekymrende eller dårligt gjort her? 1070 00:44:15,320 --> 00:44:16,387 Ja, i blåt. 1071 00:44:16,387 --> 00:44:18,220 PUBLIKUM: strlen er kaldte mange, mange gange. 1072 00:44:18,220 --> 00:44:20,654 1073 00:44:20,654 --> 00:44:21,320 SPEAKER 1: Ja. 1074 00:44:21,320 --> 00:44:23,700 Så strlen kaldes mange gange, men hvad er 1075 00:44:23,700 --> 00:44:27,113 længden af ​​Zamyla navn for første gang løkken udfører? 1076 00:44:27,113 --> 00:44:27,860 >> PUBLIKUM: Seks. 1077 00:44:27,860 --> 00:44:28,110 >> SPEAKER 1: Seks. 1078 00:44:28,110 --> 00:44:30,976 Nå, hvad er længden af ​​hendes navn anden gang koden henretter? 1079 00:44:30,976 --> 00:44:31,432 >> PUBLIKUM: Seks. 1080 00:44:31,432 --> 00:44:31,890 >> SPEAKER 1: Okay. 1081 00:44:31,890 --> 00:44:32,720 Det er stadig seks. 1082 00:44:32,720 --> 00:44:33,220 Højre? 1083 00:44:33,220 --> 00:44:35,260 Zarla navn har ikke ændret sig, selv om jeg søger 1084 00:44:35,260 --> 00:44:38,240 på kun en del af bogstaverne i hendes navn. 1085 00:44:38,240 --> 00:44:41,349 Og så det faktum, at jeg er effektivt stille dette spørgsmål, hvad er 1086 00:44:41,349 --> 00:44:44,640 længden af ​​Zamyla, hvad er længden af Zamyla, hvad er længden af ​​Zamyla, 1087 00:44:44,640 --> 00:44:47,990 seks separate gange, eller syv selv, er bare dum, 1088 00:44:47,990 --> 00:44:50,390 fordi det er uforanderlige det svar. 1089 00:44:50,390 --> 00:44:53,550 Og så hvad jeg kunne faktisk gør, er denne-- i snor én 1090 00:44:53,550 --> 00:44:55,680 Jeg har en marginalt bedre version her. 1091 00:44:55,680 --> 00:45:00,110 There-- whoops-- snor to jeg har en marginalt bedre version, hvor 1092 00:45:00,110 --> 00:45:05,010 Jeg gør denne-- stedet for bare initialisering jeg til 0, jeg også med et komma 1093 00:45:05,010 --> 00:45:07,990 erklære en anden variabel kaldet n- Jeg behøver ikke at sige int igen. 1094 00:45:07,990 --> 00:45:09,220 Jeg burde ikke i virkeligheden. 1095 00:45:09,220 --> 00:45:10,380 Men jeg siger n. 1096 00:45:10,380 --> 00:45:13,610 Og så er jeg initialisere n til Den strlen af ​​n, så der nu 1097 00:45:13,610 --> 00:45:17,110 hvor mange gange har strlen gå udføres i alt? 1098 00:45:17,110 --> 00:45:17,610 Bare én gang. 1099 00:45:17,610 --> 00:45:20,257 Og så dette er, hvad vi mener tidligere om bedre design. 1100 00:45:20,257 --> 00:45:23,090 Faktisk, når din kode er korrekt, gå tilbage og tænker igennem, 1101 00:45:23,090 --> 00:45:26,820 bruger jeg så lidt hukommelse eller så få sekunder 1102 00:45:26,820 --> 00:45:30,409 eller millisekunder af computer tid som muligt at gennemføre nogle problemer? 1103 00:45:30,409 --> 00:45:32,200 Og jeg har tænkt mig at rulle op og blot nævne 1104 00:45:32,200 --> 00:45:34,283 at der er denne omtale af null i denne version, 1105 00:45:34,283 --> 00:45:36,390 men vi vil vende tilbage til inden længe. 1106 00:45:36,390 --> 00:45:41,010 Fordi for nu, lad os tage et kig på, hvor det kommer til at lede os. 1107 00:45:41,010 --> 00:45:44,110 Så man viser det sig, at nu hvor vi har mulighed for 1108 00:45:44,110 --> 00:45:46,860 at se på de enkelte tegn, vi kan udnytte noget 1109 00:45:46,860 --> 00:45:50,807 fra uge 0, der var meget mystiske og slags uinteressant på det tidspunkt. 1110 00:45:50,807 --> 00:45:53,390 Men nu, og især når vi komme til at kryptering i en uge, 1111 00:45:53,390 --> 00:45:54,820 det vil være temmelig kraftig. 1112 00:45:54,820 --> 00:45:57,450 Det viser sig, at med nogle data types-- ints og flåd 1113 00:45:57,450 --> 00:46:00,300 og tegn og strenge og andre things-- nogle af dem 1114 00:46:00,300 --> 00:46:02,800 kan meget nemt omdannes til en anden. 1115 00:46:02,800 --> 00:46:05,840 >> For eksempel, når vi talte om ASCII nogen tid ago-- her 1116 00:46:05,840 --> 00:46:07,796 den store bogstaver A gennem M, prik, prik, 1117 00:46:07,796 --> 00:46:12,530 dot-- vi sagde, at der er en kortlægning mellem disse bogstaver og tal. 1118 00:46:12,530 --> 00:46:14,970 Og i virkeligheden, det gælder, til små bogstaver samt. 1119 00:46:14,970 --> 00:46:17,470 Små bogstaver a er 97, hovedstaden a er 65. 1120 00:46:17,470 --> 00:46:20,860 Og der er en række i ASCII, som er lige denne kortlægning 1121 00:46:20,860 --> 00:46:23,240 system til alle de andre bogstaver. 1122 00:46:23,240 --> 00:46:25,030 Så hvad betyder det? 1123 00:46:25,030 --> 00:46:28,390 Tja, jeg har tænkt mig at gå videre og åbne op reelle hurtigt noget, der hedder 1124 00:46:28,390 --> 00:46:31,240 ASCII 0, hvoraf de fleste er kommentarer. 1125 00:46:31,240 --> 00:46:33,860 Og igen online kan du altid blik gennem kommentarerne. 1126 00:46:33,860 --> 00:46:36,180 >> Og tage et kig hvad dette vil gøre. 1127 00:46:36,180 --> 00:46:38,410 Så det har fået en hovedfunktion. 1128 00:46:38,410 --> 00:46:41,490 Jeg har hårdt kodet numrene bare for nu, fordi jeg ved, hvad jeg laver. 1129 00:46:41,490 --> 00:46:42,950 Jeg ved, hvad jeg ønsker at se her. 1130 00:46:42,950 --> 00:46:45,220 Og jeg har initialiseret I til 65. 1131 00:46:45,220 --> 00:46:48,490 Og jeg tælle op gennem 26 bogstaver i alt. 1132 00:46:48,490 --> 00:46:52,990 Og hvad skal jeg udskrive én linje ad gangen 1133 00:46:52,990 --> 00:46:54,930 hvis du kan fortolke dette fremhævede linje? 1134 00:46:54,930 --> 00:46:55,970 Hvad bliver udskrevet? 1135 00:46:55,970 --> 00:46:56,797 Ja. 1136 00:46:56,797 --> 00:46:57,264 >> PUBLIKUM: Skal du at udskrive det brev, 1137 00:46:57,264 --> 00:46:59,805 svarer til kort over brev værdi og heltal? 1138 00:46:59,805 --> 00:47:01,199 1139 00:47:01,199 --> 00:47:01,990 SPEAKER 1: Præcis. 1140 00:47:01,990 --> 00:47:04,740 Jeg har tænkt mig at udskrive brevet svarende til heltal, 1141 00:47:04,740 --> 00:47:06,131 og omvendt, som følger. 1142 00:47:06,131 --> 00:47:08,880 Nå det, nogen sagde tidligere, er blot en pladsholder for en char. 1143 00:47:08,880 --> 00:47:09,490 Er det stadig. 1144 00:47:09,490 --> 00:47:12,280 Dette er naturligvis en pladsholder for en int-- ikke en ny linje. 1145 00:47:12,280 --> 00:47:18,140 Og nu mærke til, min første værdi, Jeg tilslutte til denne pladsholder 1146 00:47:18,140 --> 00:47:22,320 er ikke bare I. Jeg siger, i parentes, char I, 1147 00:47:22,320 --> 00:47:26,700 som i parentes char er fortæller compileren, behandler jeg 1148 00:47:26,700 --> 00:47:28,490 ikke som hvad det er, som er et tal. 1149 00:47:28,490 --> 00:47:30,490 Behandle det som en faktisk karakter. 1150 00:47:30,490 --> 00:47:34,490 Hvorimod den anden værdi jeg tilslutte in-- jeg-- skal bare være et tal. 1151 00:47:34,490 --> 00:47:38,140 >> Så hvis jeg kompilere denne program-- så dette er lave ASCII 0, 1152 00:47:38,140 --> 00:47:41,720 dot skråstreg ASCII 0-- jeg bare få denne handy lille diagram, der 1153 00:47:41,720 --> 00:47:44,950 viser mig alle de mulige tilknytninger uden at skulle tænke det 1154 00:47:44,950 --> 00:47:46,450 igennem eller finde ud af det på min egen. 1155 00:47:46,450 --> 00:47:48,783 Og jeg er også udskrive, mærke til de små bogstaver, 1156 00:47:48,783 --> 00:47:51,410 fordi et par linjer senere, jeg også udskrive denne kortlægning 1157 00:47:51,410 --> 00:47:53,737 så godt, som er lige til siger, at når du forstår 1158 00:47:53,737 --> 00:47:55,570 hvad der foregår nedenunder hætten, kan du 1159 00:47:55,570 --> 00:47:57,111 automatisk konvertere frem og tilbage. 1160 00:47:57,111 --> 00:48:00,160 Og i virkeligheden, hvis nogen af ​​jer nogensinde gjorde det i folkeskolen 1161 00:48:00,160 --> 00:48:03,490 eller hørt om nogen, mythically tage en note 1162 00:48:03,490 --> 00:48:05,620 og sende den til sin eller hendes ven i klassen, 1163 00:48:05,620 --> 00:48:08,300 men du scrambled den breve med som A bliver B, 1164 00:48:08,300 --> 00:48:11,240 og B bliver C, eller noget mere kompliceret end som så, ja, 1165 00:48:11,240 --> 00:48:13,410 hvordan ville du gå om gennemførelsen af ​​denne som barn? 1166 00:48:13,410 --> 00:48:16,340 Nå, du lige slags vide A bliver B, B bliver C, 1167 00:48:16,340 --> 00:48:19,700 men matematisk, hvad var det barn gør? 1168 00:48:19,700 --> 00:48:22,050 Hvad lavede du tilføje til hvert bogstav? 1169 00:48:22,050 --> 00:48:23,340 Effektivt, 1. 1170 00:48:23,340 --> 00:48:27,740 >> Så når du skifter A til B, det er slags som at skifte fra 65 til 66, 1171 00:48:27,740 --> 00:48:29,590 hvilket matematisk betyder blot tilføje 1. 1172 00:48:29,590 --> 00:48:33,300 Og så hvis du skulle implementere at lidt misvisende teknik 1173 00:48:33,300 --> 00:48:36,380 til din lærer i kode, du kunne gøre lige netop det bare 1174 00:48:36,380 --> 00:48:38,552 ved tilsætning af et enkelt bogstav sammen. 1175 00:48:38,552 --> 00:48:40,260 Så inden længe er vi kommer til at se, hvordan vi 1176 00:48:40,260 --> 00:48:43,300 kan drage fordel af det faktisk virkelig scramble og unscramble 1177 00:48:43,300 --> 00:48:43,991 information. 1178 00:48:43,991 --> 00:48:47,240 I mellemtiden, ved, at vi har startet at indføre en par andre biblioteker 1179 00:48:47,240 --> 00:48:48,990 her-- strengen én dag. 1180 00:48:48,990 --> 00:48:51,180 Og en meget hjælpsom websted forhåbentlig vil du finde 1181 00:48:51,180 --> 00:48:55,010 kaldes reference.cs50.net, som lærerstaben har sat sammen, 1182 00:48:55,010 --> 00:48:57,510 så hvis du ønsker at se op hvordan strlen værker, 1183 00:48:57,510 --> 00:48:59,300 du kan begynde at skrive funktionens navn, 1184 00:48:59,300 --> 00:49:02,890 klik strlen der, og derefter en mindre behagelig forklaring 1185 00:49:02,890 --> 00:49:03,700 kommer til at blive vist. 1186 00:49:03,700 --> 00:49:06,880 Eller hvis du ønsker det officielle Linux-baserede forklaring, 1187 00:49:06,880 --> 00:49:08,945 du kan klikke mere comfy øverst til højre, og det 1188 00:49:08,945 --> 00:49:12,070 vil præsentere de samme oplysninger, men i mere komplekse udtryk. 1189 00:49:12,070 --> 00:49:15,070 Det er en nyttig ressource til faktisk ved, hvad alt gør. 1190 00:49:15,070 --> 00:49:17,320 >> Næste gang vi kommer til at tage et kig på Ovaltine 1191 00:49:17,320 --> 00:49:20,070 og mere, og introducere os selv til en verden af ​​kryptografi. 1192 00:49:20,070 --> 00:49:21,930 Inden da, vil vi se du senere i denne uge. 1193 00:49:21,930 --> 00:49:23,390 Og nu, Colton Ogden. 1194 00:49:23,390 --> 00:49:26,730 Se dig på onsdag. 1195 00:49:26,730 --> 00:49:30,216 >> [Musik spiller] 1196 00:49:30,216 --> 00:49:33,702 >> [Musik spiller] 1197 00:49:33,702 --> 00:49:38,682 1198 00:49:38,682 --> 00:49:42,200 >> SPEAKER 1: Hvad [BLEEP] laver du? 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 du spiser det? 1201 00:49:47,160 --> 00:49:47,860 Med hænderne? 1202 00:49:47,860 --> 00:49:54,050 1203 00:49:54,050 --> 00:49:57,940 >> [Musik spiller] 1204 00:49:57,940 --> 00:50:03,453