1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> Spreker 1: Alle reg. 3 00:00:13,650 --> 00:00:14,390 Welkom terug. 4 00:00:14,390 --> 00:00:19,260 Dit is Week Twee van CS50, en ons het Tot dusver is die gebruik van funksies, maar 5 00:00:19,260 --> 00:00:20,830 grootliks geneem om hulle as vanselfsprekend aanvaar. 6 00:00:20,830 --> 00:00:23,430 Ons het printf gebruik wat die newe-effek van die druk 7 00:00:23,430 --> 00:00:24,110 dinge wat op die skerm. 8 00:00:24,110 --> 00:00:25,790 Ons het gewoond raak-int, kry dryf. 9 00:00:25,790 --> 00:00:29,230 >> Maar wat as jy eintlik wil skep jou eie funksies, soos sommige van 10 00:00:29,230 --> 00:00:31,740 jy kan reeds begin het om te doen vir Probleem Stel een, al is 11 00:00:31,740 --> 00:00:33,140 nie streng nodig? 12 00:00:33,140 --> 00:00:37,150 Wel, laat ons gaan voort en heroorweeg wat probleem van net die gebruiker te vra vir 13 00:00:37,150 --> 00:00:40,660 hul naam en druk iets op die skerm, maar probeer om te faktor uit 'n paar 14 00:00:40,660 --> 00:00:44,000 van die ooreenkomste wat ons het gesien in ons kode dusver. 15 00:00:44,000 --> 00:00:45,120 So ek bedoel die volgende. 16 00:00:45,120 --> 00:00:47,315 >> Ek gaan om voort te gaan en die skep van 'n nuwe program, bel 17 00:00:47,315 --> 00:00:49,320 dit hello.c as gewoonlik. 18 00:00:49,320 --> 00:00:53,730 Ek gaan om voort te gaan en myself te gee sluit in standaard io.h aan die bokant. 19 00:00:53,730 --> 00:00:57,040 Ek gaan ook myself preemptively die CS50 biblioteek sodat 20 00:00:57,040 --> 00:00:59,080 Ek het nie geskree raak by die samesteller. 21 00:00:59,080 --> 00:01:02,400 En nou is ek gaan om voort te gaan en verklaar int, hoof, nietig. 22 00:01:02,400 --> 00:01:09,020 >> En dan in hier, dit is waar ek wil om te begin funksies uit te kontrakteer aan 23 00:01:09,020 --> 00:01:12,090 'n paar ander funksie wat ek self is gaan skryf nie, maar dit beteken nie 24 00:01:12,090 --> 00:01:13,820 tans bestaan. 25 00:01:13,820 --> 00:01:19,210 Byvoorbeeld, veronderstel dat ek wou Skryf 'n funksie wat dit moontlik maak om my te 26 00:01:19,210 --> 00:01:23,830 druk hallo, komma, en dan 'n paar gebruiker se naam. 27 00:01:23,830 --> 00:01:29,010 Eerder as om voort te printf doen hallo,% s, sou dit nie lekker wees as 28 00:01:29,010 --> 00:01:33,380 Daar was net 'n funksie genoem printf nie, maar druk naam? 29 00:01:33,380 --> 00:01:36,600 >> So in ander woorde, ek wil in staat wees om skryf 'n program wat nie 'n bietjie 30 00:01:36,600 --> 00:01:37,710 iets soos hierdie. 31 00:01:37,710 --> 00:01:42,070 Eerstens, ek gaan om te sê printf jou naam, en daardeur waarna die gebruiker om 32 00:01:42,070 --> 00:01:46,150 gee my sy of haar naam, en dan is ek gaan die bekende string s te gebruik om te 33 00:01:46,150 --> 00:01:47,290 verklaar 'n string. 34 00:01:47,290 --> 00:01:50,420 Gee my 'n veranderlike van tipe string, noem dit s, en die winkel in wat die 35 00:01:50,420 --> 00:01:52,120 gevolg van die roeping kry snaar. 36 00:01:52,120 --> 00:01:56,060 Maar nou in weke verlede, sou ek ietwat tediously gedoen hallo,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> En in ander woorde, het ons gesien dat hierdie byvoorbeeld 'n klomp van die tye, en dit is 'n 39 00:02:02,570 --> 00:02:05,280 triviale voorbeeld, want daar is net een reël van die kode so dit is regtig nie 'n 40 00:02:05,280 --> 00:02:06,860 big deal te hou tik in weer. 41 00:02:06,860 --> 00:02:09,990 Maar veronderstel dat hierdie reël van die kode eintlik is besig om 'n las, en 42 00:02:09,990 --> 00:02:12,900 dit is nie een lyn van kode, maar dit is 10 reëls van die kode 'n paar weke van nou af, 43 00:02:12,900 --> 00:02:15,190 en jy is net moeg van kopieer en plak of 44 00:02:15,190 --> 00:02:17,180 tik dieselfde kode. 45 00:02:17,180 --> 00:02:22,100 Sou dit nie lekker wees om in plaas daarvan om dit te doen printf hallo,% s en so meer, 46 00:02:22,100 --> 00:02:26,500 sou dit nie lekker wees as daar net 'n funksie genoem gedrukte naam wat 47 00:02:26,500 --> 00:02:27,560 neem 'n argument - 48 00:02:27,560 --> 00:02:29,120 Met ander woorde, wat dit neem om insette - 49 00:02:29,120 --> 00:02:30,620 en dan kommapunt. 50 00:02:30,620 --> 00:02:33,240 Sodat funksie, sou dit nie lekker wees as wat bestaan ​​het? 51 00:02:33,240 --> 00:02:36,690 Dan sou ek nie hoef te bekommer oor wat printf is, wat% s en al 52 00:02:36,690 --> 00:02:39,400 hierdie kompleksiteit wat nie alles wat interessant. 53 00:02:39,400 --> 00:02:40,570 Dit is nuttig. 54 00:02:40,570 --> 00:02:44,700 >> So druk naam, ongelukkig, was nie uitgevind sowat 40 plus jaar gelede. 55 00:02:44,700 --> 00:02:45,980 Niemand het gedink dat dit te skryf. 56 00:02:45,980 --> 00:02:48,300 Maar dit is die skoonheid van 'n programmeertaal, net soos in 57 00:02:48,300 --> 00:02:52,930 Kras jy kan definieer persoonlike blokke, so in C en die meeste enige taal, kan jy 58 00:02:52,930 --> 00:02:57,260 definieer jou eie funksies, kan jy definieer jou eie funksies. 59 00:02:57,260 --> 00:03:01,710 So selfs al kry ons hoofsaaklik deur outomaties vir gratis, kan ons verklaar 60 00:03:01,710 --> 00:03:02,730 ons eie funksies. 61 00:03:02,730 --> 00:03:05,670 >> So ek gaan 'n paar kamer hier maak tot bo, en ek gaan om te verklaar my 62 00:03:05,670 --> 00:03:08,210 eie funksie wat gaan 'n om te kyk bietjie vreemd op die eerste, maar ons sal kom 63 00:03:08,210 --> 00:03:09,400 terug na hierdie kort voor lank. 64 00:03:09,400 --> 00:03:12,310 Ek gaan leemte te sê, en daardeur dui dat hierdie funksie verrig 65 00:03:12,310 --> 00:03:16,040 iets, het 'n newe-effek, maar dit nie terug vir my iets in die 66 00:03:16,040 --> 00:03:18,810 dieselfde manier wat kry int of kry string self doen. 67 00:03:18,810 --> 00:03:22,450 En ek gaan hierdie funksie gee 'n Naam van gedrukte naam, en ek gaan 68 00:03:22,450 --> 00:03:26,470 spesifiseer dat hierdie man gaan neem 'n string, en ek gaan dit te noem 69 00:03:26,470 --> 00:03:27,600 string naam. 70 00:03:27,600 --> 00:03:32,100 Ek kon noem dit iets wat ek wil hê nie, maar ek wil my kode om self-dokumentasie. 71 00:03:32,100 --> 00:03:34,770 Met ander woorde, as een van julle sou Hierdie lêer oopmaak en dit lees, kan jy 72 00:03:34,770 --> 00:03:39,020 soort aflei uit die naam van daardie insette watter rol dit veronderstel is om te speel. 73 00:03:39,020 --> 00:03:42,270 >> En nou hieronder wat, ek gaan oop te maak krullerige stut en geslote krullerige stut, 74 00:03:42,270 --> 00:03:47,140 en so sien ek dieselfde het gevolg patroon op die lyne vier deur sewe as 75 00:03:47,140 --> 00:03:51,622 Ek het na aanleiding van 'n goeie week plus nou tussen, sê, lyne en nege 76 00:03:51,622 --> 00:03:53,400 14 wat komponeer hoof. 77 00:03:53,400 --> 00:03:56,160 Met ander woorde, druk naam is 'n ander funksie. 78 00:03:56,160 --> 00:03:58,990 Nou, is die samesteller nie gaan om te weet hierdie ding om outomaties bel 79 00:03:58,990 --> 00:04:02,670 want ek het letterlik net uitgevind het, maar dit sal weet nog steeds om te bel hoof 80 00:04:02,670 --> 00:04:08,710 outomaties, en dan natuurlik in lyn 13, Ek roep my eie funksie. 81 00:04:08,710 --> 00:04:12,805 En omdat ek verklaar dat die funksie up on line vier voordat hoof, 82 00:04:12,805 --> 00:04:16,579 dit gaan die vertaler te leer wat quote, unquote, "druk naam" 83 00:04:16,579 --> 00:04:18,140 beteken en wat dit behoort te doen. 84 00:04:18,140 --> 00:04:22,700 So ek is soort van gee dit 'n nuwe persoonlike sluit in die konteks van, sê, krap. 85 00:04:22,700 --> 00:04:27,240 >> So hier is, kan ek sit dit baie algemeen of herhalende patroon van die kode ek hou 86 00:04:27,240 --> 00:04:32,300 skryf in die klas, printf % S hallo,% s / n, "- 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 wat wil ek hier sit? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 So ek wil naam te maak in hierdie konteks. 91 00:04:41,420 --> 00:04:43,440 So sien 'n bietjie van 'n digotomie hier. 92 00:04:43,440 --> 00:04:47,680 Omdat ek verklaar my eie funksie en ek het ietwat arbitrêr genoem 93 00:04:47,680 --> 00:04:50,880 druk dit naam, en omdat ek vermeld in hakies dat hierdie 94 00:04:50,880 --> 00:04:55,035 funksie neem een ​​argument, die tipe Dit is 'n string - so dit is 'n woord 95 00:04:55,035 --> 00:05:00,010 of frase of iets soos dit - en Ek noem dat die argument naam, dat 96 00:05:00,010 --> 00:05:04,770 beteken die enigste veranderlike wat in omvang, so te sê, is naam. 97 00:05:04,770 --> 00:05:07,780 >> S bestaan ​​net tussen wat twee krulhakies, natuurlik? 98 00:05:07,780 --> 00:05:12,990 Wel, regtig, net soos reël 10 deur 14, so hou net op Maandag kan nie gebruik 99 00:05:12,990 --> 00:05:17,650 S, maar wat ek kan doen is verby S in druk naam. 100 00:05:17,650 --> 00:05:21,030 Druk naam is net so gebeur dit te gee 'n alias, 'n sinoniem, 'n bynaam, 101 00:05:21,030 --> 00:05:24,400 noem dit die naam, en nou gebruik dit in hierdie lyn. 102 00:05:24,400 --> 00:05:26,840 So nou laat my red nie, zoom uit. 103 00:05:26,840 --> 00:05:31,250 >> Laat my gaan voort en maak hallo. 104 00:05:31,250 --> 00:05:32,400 Lyk goed. 105 00:05:32,400 --> 00:05:36,110 Het nie spoeg uit enige foute. / Hallo Tik.. 106 00:05:36,110 --> 00:05:37,020 Wat is my naam? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 En hallo David. 109 00:05:39,270 --> 00:05:41,820 So nie alles wat opwindend, maar nou net dink. 110 00:05:41,820 --> 00:05:44,310 Jy het nou dieselfde bestanddeel soos ons gedoen het in Scratch te 111 00:05:44,310 --> 00:05:45,420 maak ons ​​eie funksies. 112 00:05:45,420 --> 00:05:46,770 >> Maar daar is 'n bietjie van 'n Gotcha. 113 00:05:46,770 --> 00:05:50,620 Veronderstel dat ek regtig nie gedink het nie dit deur en ek eintlik sonder 114 00:05:50,620 --> 00:05:54,250 om werklik te dink oor dit geskryf daardie funksie hier. 115 00:05:54,250 --> 00:05:55,420 Voel heel redelik. 116 00:05:55,420 --> 00:05:58,440 In Scratch is daar geen idee van die plek in jou skrifte. 117 00:05:58,440 --> 00:06:00,670 Jy kan sit een hier, een hier, een hier, en dit kan begin 118 00:06:00,670 --> 00:06:03,310 'n bietjie morsig om te kyk as jy dit nie doen nie lê dit uit netjies, maar dit beteken nie 119 00:06:03,310 --> 00:06:05,910 saak waar fisies die skrifte was op die skerm. 120 00:06:05,910 --> 00:06:09,660 Ongelukkig in C - en dit is in teenstelling met tale soos Java en Python 121 00:06:09,660 --> 00:06:13,600 en ander wat jy dalk vertroud wees met - ongelukkig in C, om nie 122 00:06:13,600 --> 00:06:15,830 saak nie, want kyk wat is gaan nou gebeur. 123 00:06:15,830 --> 00:06:19,010 >> Die standaard funksie wat gaan uit te voer, is, natuurlik, hoof. 124 00:06:19,010 --> 00:06:22,290 Hoof gaan druk naam te noem op lyn agt, maar ongelukkig is, die 125 00:06:22,290 --> 00:06:26,660 samesteller sal nie eens weet dat gedrukte naam bestaan ​​totdat dit kry om lyn 11, 126 00:06:26,660 --> 00:06:28,520 wat ongelukkig gaan dit te laat wees. 127 00:06:28,520 --> 00:06:30,660 So laat ons doen maak hallo. 128 00:06:30,660 --> 00:06:32,950 En nou damn, twee foute gegenereer. 129 00:06:32,950 --> 00:06:36,050 So nou laat my blaai tot op die Eerstens, as ons moet altyd doen, en 130 00:06:36,050 --> 00:06:39,560 sien dat dit skree op my, "Implisiete verklaring van funksie 131 00:06:39,560 --> 00:06:40,540 druk naam. " 132 00:06:40,540 --> 00:06:43,860 >> So het ons hierdie boodskap voor gesien, implisiete verklaring van funksie. 133 00:06:43,860 --> 00:06:48,080 Toe het ons gesien dat die soort van fout? 134 00:06:48,080 --> 00:06:49,180 Toe ek nie soos 'n biblioteek. 135 00:06:49,180 --> 00:06:53,470 As ek vergeet cs50.h en ek sou kry geskree vir kry string of kry int. 136 00:06:53,470 --> 00:06:56,880 Maar in hierdie geval, hierdie funksie druk naam is nie in 'n biblioteek, reg? 137 00:06:56,880 --> 00:07:00,230 Dit is letterlik in hierdie lêer, sodat wat is werklik die probleem? 138 00:07:00,230 --> 00:07:04,660 >> Wel ongelukkig in C, neem dit wat jy so ongelooflik letterlik dat as jy 139 00:07:04,660 --> 00:07:08,640 wil 'n funksie genoem gedrukte naam bestaan ​​nie, jy het om te implementeer 140 00:07:08,640 --> 00:07:11,940 daardie funksie by die top van jou kode, sodat dit toeganklik te verlaag 141 00:07:11,940 --> 00:07:15,070 funksies, maar eerlik, wat raak slordige baie vinnig. 142 00:07:15,070 --> 00:07:18,160 Persoonlik, Ek hou om hoof eerste want dan is dit baie duidelik wat hierdie 143 00:07:18,160 --> 00:07:19,890 program nie met die eerste oogopslag. 144 00:07:19,890 --> 00:07:23,290 En plus, kan jy in die vreemde hoek gevalle waar as x wil noem 145 00:07:23,290 --> 00:07:27,530 y y maar kan noem x, jy moet net fisies kan eintlik nie sit een 146 00:07:27,530 --> 00:07:28,540 bo die ander. 147 00:07:28,540 --> 00:07:31,230 >> Maar dit blyk in C, kan ons los hierdie baie eenvoudig. 148 00:07:31,230 --> 00:07:34,010 Ek gaan 'n bietjie van die ruimte wat hier, en ek is net gaan om te 149 00:07:34,010 --> 00:07:38,170 preemptively, al is dit 'n bietjie kere, gaan die te leer 150 00:07:38,170 --> 00:07:42,320 samesteller dat daar 'n funksie genoem gedrukte naam, wat dit neem om 'n string, 151 00:07:42,320 --> 00:07:46,330 en ek gaan om te bel dit noem kommapunt. 152 00:07:46,330 --> 00:07:50,220 >> So dit nou in lyn vier, wat ons het nie gesien het nie, is 'n verklaring 153 00:07:50,220 --> 00:07:53,940 van 'n funksie gedrukte naam, maar dit is net 'n belofte dat hierdie funksie sal 154 00:07:53,940 --> 00:07:56,620 uiteindelik gedefinieer word, uiteindelik geïmplementeer word. 155 00:07:56,620 --> 00:08:00,180 Dit is nou ek kan uitlos omdat dit is nou die definisie, die 156 00:08:00,180 --> 00:08:04,090 implementering, soort van die laaste myl van die implementering van hierdie 157 00:08:04,090 --> 00:08:05,130 spesifieke funksie. 158 00:08:05,130 --> 00:08:08,450 So gesê dit is dom, dit is irriterende, maar dit is die manier C is, en dit is 159 00:08:08,450 --> 00:08:12,050 want dit neem jou baie letterlik en, soos 'n rekenaar eerlik moet, 160 00:08:12,050 --> 00:08:16,020 net nie presies wat jy vertel om dit te doen, en wat bestel is belangrik. 161 00:08:16,020 --> 00:08:18,940 >> So hou dit in gedagte en weer begin om te kennis van die herhaling van patrone. 162 00:08:18,940 --> 00:08:21,850 Kans is wat jy wil, as jy nie reeds begin boodskappe te ontmoet 163 00:08:21,850 --> 00:08:24,700 soos hierdie wat met die eerste oogopslag lyk heeltemal kripties, maar as jy begin 164 00:08:24,700 --> 00:08:29,000 om te kyk vir hierdie belangrike woorde soos "Implisiete verklaring," melding gemaak van 'n 165 00:08:29,000 --> 00:08:32,380 funksie in hierdie geval - en eerlik, jy soms selfs 'n bietjie groen 166 00:08:32,380 --> 00:08:35,010 wortel simbool wat vir jou vertel waar die kwessie is waarskynlik - 167 00:08:35,010 --> 00:08:40,980 jy kan begin om jou manier om te werk deur middel van nog nie gesien fout boodskappe. 168 00:08:40,980 --> 00:08:45,860 Enige vrae oor die skryf van jou eie funksie op hierdie manier? 169 00:08:45,860 --> 00:08:47,540 >> Kom ons doen iets wat 'n bietjie meer aantreklik. 170 00:08:47,540 --> 00:08:51,760 Eerder as om net iets te doen wat 'n newe-effek van die druk, laat my gaan 171 00:08:51,760 --> 00:08:55,340 voor en slaan 'n nuwe lêer, en ons sal noem dit positive.c, selfs al is dit 172 00:08:55,340 --> 00:08:57,600 gaan 'n bietjie anders versus laaste tyd. 173 00:08:57,600 --> 00:09:01,910 En hierdie keer, ek wil om weer te implementeer laaste keer se positive.C voorbeeld, wat 174 00:09:01,910 --> 00:09:04,430 is dwing om die gebruiker te gee vir my 'n positiewe heelgetal. 175 00:09:04,430 --> 00:09:07,280 Maar ek het om te gebruik int laaste tyd kry. 176 00:09:07,280 --> 00:09:10,780 Sou dit nie lekker gewees het as daar 'n funksie genoem kry positiewe int 177 00:09:10,780 --> 00:09:13,610 dat ek kon net uitkontrakteer stukkie van die funksie te? 178 00:09:13,610 --> 00:09:16,480 Dus is die verskil hier is ons sal implementeer kry positiewe int, maar in teenstelling met 179 00:09:16,480 --> 00:09:20,330 Druk naam wat 'n newe-effek - dit het nie weer iets vir my soos 180 00:09:20,330 --> 00:09:21,710 'n nommer of 'n string - 181 00:09:21,710 --> 00:09:25,510 kry positiewe int is, natuurlik, gaan terug, hopelik, 'n positiewe int. 182 00:09:25,510 --> 00:09:26,170 >> So laat ons dit doen. 183 00:09:26,170 --> 00:09:30,840 Sluit cs50.h, sluit in standaard io.h. 184 00:09:30,840 --> 00:09:33,520 Int main nietig. 185 00:09:33,520 --> 00:09:42,160 En nou hier, ek gaan om voort te gaan en kom ons sê int, noem dit 'n, is gelyk aan 186 00:09:42,160 --> 00:09:44,270 kry positiewe int. 187 00:09:44,270 --> 00:09:49,080 En net soos jy int bestaan ​​reeds omdat die personeel wat dit geskryf het, ek gaan 188 00:09:49,080 --> 00:09:53,950 om aan te neem vir die oomblik wat kry positiewe int bestaan, en nou gaan ek 189 00:09:53,950 --> 00:09:57,730 om voort te gaan en te sê printf, Dankie vir die% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> So as ek nou stel hierdie program, wat gaan gebeur in my terminale 192 00:10:07,770 --> 00:10:09,075 venster aan die onderkant van die skerm? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Ek gaan waarskynlik dat dieselfde fout as tevore. 195 00:10:13,900 --> 00:10:14,570 So kom ons probeer dit. 196 00:10:14,570 --> 00:10:16,450 Maak positiewe. 197 00:10:16,450 --> 00:10:19,900 En weer, implisiete verklaring van funksie, kry positiewe int. 198 00:10:19,900 --> 00:10:21,970 So kan ons los dit in 'n paar van die maniere. 199 00:10:21,970 --> 00:10:27,310 Ek gaan om dit eenvoudig te hou en net sit my verklaring hier en kry 200 00:10:27,310 --> 00:10:28,120 positiewe int. 201 00:10:28,120 --> 00:10:29,720 Ek nodig het om die sogenaamde handtekening. 202 00:10:29,720 --> 00:10:32,410 Die handtekening verwys net aan die estetika van die 203 00:10:32,410 --> 00:10:34,090 eerste reël van die program. 204 00:10:34,090 --> 00:10:37,420 So, wat moet kry positiewe int terugkeer? 205 00:10:37,420 --> 00:10:37,970 >> So 'n int. 206 00:10:37,970 --> 00:10:41,540 Ek ideaal bedoel, sou dit terug iets soos positiewe int, maar dat 207 00:10:41,540 --> 00:10:42,160 bestaan ​​nie. 208 00:10:42,160 --> 00:10:45,280 Ons het nie gesien dat onder ons data tipes, so ons het om te gaan met die 209 00:10:45,280 --> 00:10:47,170 feit dat ons baie min data tipes om te werk met. 210 00:10:47,170 --> 00:10:50,360 Maar ons kan terugkeer 'n int en net vertrou dat dit positief sal wees. 211 00:10:50,360 --> 00:10:52,690 Dit gaan om genoem te word kry positiewe int. 212 00:10:52,690 --> 00:10:55,122 >> En nou hoe oor sy argumente? 213 00:10:55,122 --> 00:10:56,440 Neem dit enige insette? 214 00:10:56,440 --> 00:10:58,280 Is dit nodig om enige insette? 215 00:10:58,280 --> 00:11:00,900 Daarom is dit nie nodig om te weet vooruit nie. 216 00:11:00,900 --> 00:11:03,220 Kry string nie, kry int nie. 217 00:11:03,220 --> 00:11:06,430 Printf nie - dit moet 'n paar te hê insette geslaag het in dit - en gedrukte naam 218 00:11:06,430 --> 00:11:09,020 moes 'n paar insette, maar kry positiewe int nie. 219 00:11:09,020 --> 00:11:11,530 So ek gaan uitdruklik vertel die samesteller nietig. 220 00:11:11,530 --> 00:11:13,470 Leemte is die afwesigheid van iets anders. 221 00:11:13,470 --> 00:11:17,990 So leemte beteken niks gaan binne van die hakies, kommapunt. 222 00:11:17,990 --> 00:11:20,840 >> En nou op die bodem van my lêer - en weer, ek is net 'n soort van anale 223 00:11:20,840 --> 00:11:23,640 hier om hoof aan die bokant, wat is goeie praktyk, want op hierdie manier, 224 00:11:23,640 --> 00:11:26,220 elke keer as jy of iemand anders open jou lêer, die 225 00:11:26,220 --> 00:11:27,400 funksie is reg daar. 226 00:11:27,400 --> 00:11:29,660 Jy kan duik in van square one. 227 00:11:29,660 --> 00:11:34,190 So nou is ek gaan om dit te dupliseer, kry positiewe int leemte, maar ek is nie 228 00:11:34,190 --> 00:11:35,430 gaan 'n kommapunt te nou getref het. 229 00:11:35,430 --> 00:11:38,280 Ek gaan krulhakies oop te maak, en nou het ek nodig het om te leen 230 00:11:38,280 --> 00:11:39,700 'n paar idees van Maandag. 231 00:11:39,700 --> 00:11:44,450 >> So as jy onthou, ons het iets graag die volgende doen terwyl 232 00:11:44,450 --> 00:11:45,830 iets is waar. 233 00:11:45,830 --> 00:11:46,630 En wat het ek gedoen? 234 00:11:46,630 --> 00:11:51,540 Ek het so iets gee vir my 'n positiewe heelgetal is, 235 00:11:51,540 --> 00:11:52,430 n bietjie van 'n vinnige. 236 00:11:52,430 --> 00:11:53,540 Ek kan enige woorde wat ek wil hê. 237 00:11:53,540 --> 00:11:54,960 En dan het ek gebruik wat? 238 00:11:54,960 --> 00:11:59,530 Int n gelyk kry int, geen argumente om dit te. 239 00:11:59,530 --> 00:12:00,550 >> En kennis van die verskil. 240 00:12:00,550 --> 00:12:04,680 Wanneer jy na 'n funksie, wanneer jy gebruik 'n funksie, het jy nie sit in nietig. 241 00:12:04,680 --> 00:12:08,570 Jy moet net doen wanneer waarby 'n funksie, die onderrig van die samesteller wat 242 00:12:08,570 --> 00:12:09,780 dit moet verwag. 243 00:12:09,780 --> 00:12:11,650 So jy hoef nie te sit nietig self daar. 244 00:12:11,650 --> 00:12:12,940 >> Maar nou, wat was my toestand? 245 00:12:12,940 --> 00:12:19,670 Wel, n is nie gelyk aan positiewe, maar dit is net pseudo-kode. 246 00:12:19,670 --> 00:12:22,530 So hoe druk ek dit meer skoon? 247 00:12:22,530 --> 00:12:24,090 So minder as of gelyk aan nul. 248 00:12:24,090 --> 00:12:26,250 So weer, sien jy kan doen minder as of gelyk aan. 249 00:12:26,250 --> 00:12:28,100 Selfs al is dit twee afsonderlike simbole, kan jy dit doen op 250 00:12:28,100 --> 00:12:29,350 jou sleutelbord as sodanig. 251 00:12:29,350 --> 00:12:33,950 >> Maar daar is nog 'n probleem wat Ek verfrommeld laaste tyd ook. 252 00:12:33,950 --> 00:12:36,950 Ek het om te verklaar - 253 00:12:36,950 --> 00:12:37,460 Presies. 254 00:12:37,460 --> 00:12:39,640 Ek het n te verklaar buite van die lus. 255 00:12:39,640 --> 00:12:44,180 So ek nodig het om te sit n 'hier, en ek doen nie weer wil verklaar dat dit in hier 256 00:12:44,180 --> 00:12:46,480 sodat ek kry 'n nuwe veranderlike. 257 00:12:46,480 --> 00:12:48,860 Ek wil net 'n waarde toe te ken in hier. 258 00:12:48,860 --> 00:12:54,320 >> En nou is ek nie heeltemal wat hier gedoen word. 259 00:12:54,320 --> 00:12:57,290 Laat my voor myself kry en maak asof ek gedoen het. 260 00:12:57,290 --> 00:13:01,220 Maak positiewe, en nou daar is 'n nuwe fout. 261 00:13:01,220 --> 00:13:04,550 Beheer bereik einde van nie-leemte funksie. 262 00:13:04,550 --> 00:13:07,760 So nuwe fout boodskap, maar as jy soort van terg uitmekaar elk van die woorde, dit 263 00:13:07,760 --> 00:13:09,620 waarskynlik sinspeel op wat verkeerd is. 264 00:13:09,620 --> 00:13:11,240 >> Beheer. 265 00:13:11,240 --> 00:13:14,250 Beheer beteken net aan die einde werksaamhede in 'n program. 266 00:13:14,250 --> 00:13:16,510 Die rekenaar is in beheer en iets wat verkeerd geloop het. 267 00:13:16,510 --> 00:13:18,510 So dit bereik die einde van 'n nie-leemte funksie. 268 00:13:18,510 --> 00:13:21,760 Watter funksie is dit blykbaar verwys na? 269 00:13:21,760 --> 00:13:24,790 Watter funksie is nie-leemte? 270 00:13:24,790 --> 00:13:27,400 So kry positiewe int, en 'n bietjie verwarrend in daardie goed, 271 00:13:27,400 --> 00:13:29,010 Dit is soort van nietig. 272 00:13:29,010 --> 00:13:33,070 Dit het 'n spesifikasie van leemte vir sy argumente, maar sy produksie gaan 273 00:13:33,070 --> 00:13:34,540 wees van die tipe n. 274 00:13:34,540 --> 00:13:37,260 So het die woord aan die linkerkant is die sogenaamde terugkeer tipe. 275 00:13:37,260 --> 00:13:40,320 Die woord aan die binnekant is hier die nul of meer argumente 276 00:13:40,320 --> 00:13:41,970 dat 'n funksie neem. 277 00:13:41,970 --> 00:13:44,060 >> So, wat moet ek doen? 278 00:13:44,060 --> 00:13:47,650 Op hierdie punt in my kode, lyn 21 waar die flikkerende spoedige is nou, ek 279 00:13:47,650 --> 00:13:51,430 het 'n positiewe int binne van die veranderlike genaamd n. 280 00:13:51,430 --> 00:13:55,200 Hoe gee ek dit terug na die hoof? 281 00:13:55,200 --> 00:13:55,960 Letterlik. 282 00:13:55,960 --> 00:13:59,320 Terug n kommapunt. 283 00:13:59,320 --> 00:14:04,090 >> So net soos Colton teruggekeer van 'n stukkie van die papier met 'n antwoord op my deur die val 284 00:14:04,090 --> 00:14:07,020 dat die stuk papier in die klein swart boks op die tafel, wat om te doen in 285 00:14:07,020 --> 00:14:10,100 kode, kan jy letterlik net skryf, terug n, en dit is asof Colton was 286 00:14:10,100 --> 00:14:12,140 uitreiking van my iets fisiese terug. 287 00:14:12,140 --> 00:14:15,870 In hierdie geval, wat aan die gebeur is kry positiewe int gaan hand terug 288 00:14:15,870 --> 00:14:19,220 wat is vermoedelik 'n positiewe integer aan wie? 289 00:14:19,220 --> 00:14:21,380 Waar kom daardie waarde eindig? 290 00:14:21,380 --> 00:14:29,080 Wat eindig in hierdie veranderlike, n, en dan sal ons voortgaan met die lyn nege. 291 00:14:29,080 --> 00:14:31,920 >> So met ander woorde, in volgorde van bedrywighede, is hierdie program begin 292 00:14:31,920 --> 00:14:34,430 uitvoering, en die samesteller besef, oh, wil jy die biblioteek? 293 00:14:34,430 --> 00:14:36,310 Laat my gaan gryp net die binnekant van dit. 294 00:14:36,310 --> 00:14:37,750 O, jy wil die standaard IO biblioteek? 295 00:14:37,750 --> 00:14:39,660 Laat my gaan gryp net die binnekant van dit. 296 00:14:39,660 --> 00:14:44,510 Wat sê die samesteller sê aan homself wanneer dit tref lyn vier? 297 00:14:44,510 --> 00:14:47,980 O, jy het belowe om die te implementeer funksie genoem kry positiewe, maar 298 00:14:47,980 --> 00:14:50,820 ons sal terug te kry om dit later, iets langs die lyne. 299 00:14:50,820 --> 00:14:53,450 >> Int belangrikste leemte beteken net hier is die ingewande van my program. 300 00:14:53,450 --> 00:14:54,990 Line sewe is net 'n krullerige stut. 301 00:14:54,990 --> 00:14:59,540 Line agt sê aan die linkerkant, gee me 32 stukkies vir 'n heelgetal is, noem dit 'n. 302 00:14:59,540 --> 00:15:02,160 Op die regterkant, is dit sê kry positiewe int. 303 00:15:02,160 --> 00:15:07,120 Nou laat breek die storie, want nou Ek hou nie beweeg my wyser af. 304 00:15:07,120 --> 00:15:11,720 My wyser gaan nou hier omdat nou kry positiewe int voer. 305 00:15:11,720 --> 00:15:13,100 Int n verklaar word. 306 00:15:13,100 --> 00:15:14,040 Doen die volgende. 307 00:15:14,040 --> 00:15:16,090 Printf gee my 'n positiewe heelgetal. 308 00:15:16,090 --> 00:15:19,740 >> Kry 'n int van die gebruiker, stoor dit in n, en miskien doen dit weer en weer. 309 00:15:19,740 --> 00:15:23,010 Dit loop beteken dat hierdie kode mag voer op en af ​​soos hierdie weer 310 00:15:23,010 --> 00:15:25,810 en weer, maar wanneer die gebruiker uiteindelik werk saam en gee my 'n positiewe 311 00:15:25,810 --> 00:15:31,750 int, ek getref lyn 21, op watter punt die aantal teruggegee word, en watter een 312 00:15:31,750 --> 00:15:34,280 moet ek nou uitlig? 313 00:15:34,280 --> 00:15:35,070 Nege. 314 00:15:35,070 --> 00:15:39,010 Beheer, om so te spreek, terug nege uit te voer. 315 00:15:39,010 --> 00:15:40,650 Dit is die lyn wat is nou in beheer. 316 00:15:40,650 --> 00:15:43,250 >> So dit is wat almal is al gebeur hierdie tyd onder die enjinkap nie, maar 317 00:15:43,250 --> 00:15:46,480 wanneer ons gebruik funksies soos printf of selfs 'n string wat iemand anders 318 00:15:46,480 --> 00:15:50,600 geskryf vir jou, is beheer oorhandig af om iemand anders se kode lyn 319 00:15:50,600 --> 00:15:51,290 deur reël vir reël. 320 00:15:51,290 --> 00:15:53,770 Dit is net ons kon dit nie sien nie, en ons kon nie regtig beeld dit in hierdie 321 00:15:53,770 --> 00:15:57,620 program, want dit is in 'n ander lêer op die hardeskyf 322 00:15:57,620 --> 00:16:00,000 unbeknownst aan ons. 323 00:16:00,000 --> 00:16:02,100 So laat ons eintlik saam te stel en hardloop dit nou. 324 00:16:02,100 --> 00:16:03,890 >> Maak positiewe. 325 00:16:03,890 --> 00:16:05,260 Stel, wat se vordering. 326 00:16:05,260 --> 00:16:06,650 / Positief.. 327 00:16:06,650 --> 00:16:08,020 Gee my 'n positiewe heelgetal. 328 00:16:08,020 --> 00:16:08,800 Kom ons moeilik wees. 329 00:16:08,800 --> 00:16:10,430 Negatiewe 1. 330 00:16:10,430 --> 00:16:11,360 Zero. 331 00:16:11,360 --> 00:16:13,370 Kom ons gee dit 50. 332 00:16:13,370 --> 00:16:18,100 Dankie vir die 50, en so beheer het nou teruggekeer. 333 00:16:18,100 --> 00:16:21,750 Enige vrae, dan, op daardie? 334 00:16:21,750 --> 00:16:23,180 Ja? 335 00:16:23,180 --> 00:16:25,630 >> [Onhoorbaar]. 336 00:16:25,630 --> 00:16:26,130 >> Sê weer. 337 00:16:26,130 --> 00:16:27,860 O, goeie vraag. 338 00:16:27,860 --> 00:16:31,100 Sodat jy kan 'n parallel hier sien dat Ek is soort van die sny van 'n hoek op. 339 00:16:31,100 --> 00:16:35,420 In lyn 12, ek sê, kry positiewe int gee 'n int, maar deur dieselfde 340 00:16:35,420 --> 00:16:39,660 logika, is dit nou staan ​​om te redeneer dat in lyn ses, ek sê dat hoof opbrengste 341 00:16:39,660 --> 00:16:44,040 'n int, maar wat het ons nog nooit gehad het in enige van ons programme? 342 00:16:44,040 --> 00:16:46,470 Ons het nog nooit melding gemaak van hierdie sleutel woord terugkeer. 343 00:16:46,470 --> 00:16:49,970 >> So dit blyk dat in C, ten minste die weergawe van dit wat ons gebruik 344 00:16:49,970 --> 00:16:55,750 het in 1999, tegnies, is dit gebeur outomaties vir jou. 345 00:16:55,750 --> 00:16:59,300 Elke keer as jy 'n program te implementeer en jy implementering van 'n funksie genoem hoof, 346 00:16:59,300 --> 00:17:04,230 daardie funksie sal terugkeer zero deur verstek as jy nie anders sê nie, 347 00:17:04,230 --> 00:17:05,849 en 'n nul is net 'n konvensie. 348 00:17:05,849 --> 00:17:09,430 Die wêreld terugkeer nul daardeur wat aandui dat alles goed gaan, 349 00:17:09,430 --> 00:17:13,040 effektief laat ons met 4000000000 moontlike dinge wat kan gaan 350 00:17:13,040 --> 00:17:17,530 verkeerde sodat as ons terugkeer een, wat dalk 'n kode dui dit beteken dat hierdie 351 00:17:17,530 --> 00:17:18,310 ding verkeerd geloop het. 352 00:17:18,310 --> 00:17:20,589 Ons kon terugkeer twee, wat beteken hierdie ander ding verkeerd geloop het. 353 00:17:20,589 --> 00:17:23,440 Ons kon terugkeer 4000000000, wat beteken dat hierdie ander ding verkeerd geloop het. 354 00:17:23,440 --> 00:17:27,170 >> En as jy nou dink oor jou eie PC of Mac, kan jy onthou dat 355 00:17:27,170 --> 00:17:29,610 soms jy kriptiese fout boodskappe van sagteware wat jy 356 00:17:29,610 --> 00:17:32,650 gebruik, en soms is dit 'n menslike vriendelike beskrywing, maar daar is 357 00:17:32,650 --> 00:17:35,265 dikwels 'n kode of 'n aantal op die skerm? 358 00:17:35,265 --> 00:17:37,800 As dit nie na vore kom, hou net 'n oog uit vir dit. 359 00:17:37,800 --> 00:17:40,790 Dit is tipies wat hierdie kodes verwys. 360 00:17:40,790 --> 00:17:44,200 Hulle is ingesluit in Microsoft Word en ander programme so dat as jy leer om 'n 361 00:17:44,200 --> 00:17:48,850 bug verslag met die maatskappy, kan jy hulle sê, o, ek het fout nommer 45. 362 00:17:48,850 --> 00:17:51,750 En 'n paar programmeerder terug by die maatskappy kan sien wat in sy of haar 363 00:17:51,750 --> 00:17:54,940 kode en sê, o, dit is, want ek het hierdie fout en dit is waarom die gebruiker 364 00:17:54,940 --> 00:17:56,240 het hierdie boodskap. 365 00:17:56,240 --> 00:17:59,490 >> Maar eerlik, dit is net 'n bietjie aandag aftrek en 'n bietjie geduld te 366 00:17:59,490 --> 00:18:02,130 aflei dat, ten minste op ons eerste paar programme, so ons het 367 00:18:02,130 --> 00:18:02,970 is weglating nie. 368 00:18:02,970 --> 00:18:07,450 Maar al hierdie tyd elke een van jou funksies hoof het in die geheim het hierdie 369 00:18:07,450 --> 00:18:11,600 lyn outomaties bygevoeg vir jou deur die samesteller, net deur die konvensie te 370 00:18:11,600 --> 00:18:13,172 red jy 'n geruime tyd. 371 00:18:13,172 --> 00:18:14,620 >> [Onhoorbaar]. 372 00:18:14,620 --> 00:18:16,250 >> Jy hoef nie dit in te sluit in die belangrikste. 373 00:18:16,250 --> 00:18:16,700 Dit is fyn. 374 00:18:16,700 --> 00:18:20,260 Jy hoef nie om dit te sluit indien jy implementering van 'n funksie soos hierdie. 375 00:18:20,260 --> 00:18:22,850 Anders sal die funksie plat uit sal nie werk nie. 376 00:18:22,850 --> 00:18:24,480 Maar in die belangrikste, is dit nie nodig nie. 377 00:18:24,480 --> 00:18:28,450 In 'n week of twee, sal ons begin om in daardie gewoonte wanneer ons wil begin 378 00:18:28,450 --> 00:18:29,690 dui foute. 379 00:18:29,690 --> 00:18:32,550 Regtig 'n goeie vraag. 380 00:18:32,550 --> 00:18:36,880 >> So vinnig verbale breek om te noem dat hierdie Vrydag, sal ons nie met 'n middagete 381 00:18:36,880 --> 00:18:39,980 per se nie, maar ons sal gesien word ete saam met sommige van die studente en personeel. 382 00:18:39,980 --> 00:18:42,940 As jy wil ons aan te sluit, voel vry om te gaan na cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 06:00 die Vrydag. 384 00:18:45,030 --> 00:18:47,990 Ruimte is, soos altyd, beperkte, maar ons sal voort te gaan doen dit op 'n byna 385 00:18:47,990 --> 00:18:51,420 weeklikse basis as ruimte loop uit hierdie week. 386 00:18:51,420 --> 00:18:56,160 >> So het die fotonische lewe wat ons opgehou het om op Maandag was dat snare kan eintlik 387 00:18:56,160 --> 00:19:00,520 word geïndekseer in, wat beteken dat net jy kan kry by die eerste karakter, die 388 00:19:00,520 --> 00:19:03,770 tweede karakter, die derde karakter en so meer, want jy kan 389 00:19:03,770 --> 00:19:07,860 effektief te dink aan 'n string, soos hallo, as in hierdie geval vyf 390 00:19:07,860 --> 00:19:09,670 briewe binnekant van bokse. 391 00:19:09,670 --> 00:19:13,370 En jy kan kry by elk van dié bokse met wat sintaksis het ons 392 00:19:13,370 --> 00:19:15,230 stel op Maandag? 393 00:19:15,230 --> 00:19:16,760 Diegene vierkantige hakies op u sleutelbord. 394 00:19:16,760 --> 00:19:18,980 Dit is net bedoel om te gaan na plek nul. 395 00:19:18,980 --> 00:19:22,840 >> Ons begin tel by nul, so bracket zero kenne h, bracket een 396 00:19:22,840 --> 00:19:25,170 kenne dat e, en so meer. 397 00:19:25,170 --> 00:19:28,490 En so het al die tyd wanneer ons het al met behulp van toue en tik in "hallo" 398 00:19:28,490 --> 00:19:31,250 en "wêreld" en ander dinge op die skerm, dit is gestoor 399 00:19:31,250 --> 00:19:32,820 in bokse soos hierdie. 400 00:19:32,820 --> 00:19:33,370 En neem 'n raaiskoot. 401 00:19:33,370 --> 00:19:37,470 Wat beteken elke boks verteenwoordig fisies binnekant van jou rekenaar? 402 00:19:37,470 --> 00:19:38,250 >> [Onhoorbaar]. 403 00:19:38,250 --> 00:19:39,150 >> Jammer? 404 00:19:39,150 --> 00:19:39,580 >> Karakters. 405 00:19:39,580 --> 00:19:44,760 >> So 'n karakter, seker in die geval van snare en 'n karakter is net 406 00:19:44,760 --> 00:19:46,800 agt stukkies of een byte. 407 00:19:46,800 --> 00:19:49,550 So het jy waarskynlik ten minste vaagweg vertroud is met die feit dat jou 408 00:19:49,550 --> 00:19:50,500 rekenaar geheue. 409 00:19:50,500 --> 00:19:52,110 Dit het twee tipes geheue ten minste. 410 00:19:52,110 --> 00:19:54,810 Een daarvan is die hardeskyf waar jy red stop permanent, en dit is 411 00:19:54,810 --> 00:19:57,400 tipies groot sodat jy kan flieks en musiek, en so meer. 412 00:19:57,400 --> 00:20:04,010 >> Dan het jy 'n ander tipe van die geheue genoem geheue, R-A-M, Random Access 413 00:20:04,010 --> 00:20:07,510 Geheue, en dit is die tipe van die geheue wat gebruik word wanneer jou rekenaar is 414 00:20:07,510 --> 00:20:11,520 hardloop, maar as jy verloor krag of jou battery sterf, enigiets wat gestoor 415 00:20:11,520 --> 00:20:15,300 in die geheue verdwyn as jy krag verloor geheel en al, want dit is nie 416 00:20:15,300 --> 00:20:16,060 aanhoudend. 417 00:20:16,060 --> 00:20:19,120 Jy het gewoonlik, hierdie dae, 'n gig van dit, twee gigs, miskien meer. 418 00:20:19,120 --> 00:20:23,490 En die onderstebo van die geheue, is dat dit baie baie, baie vinniger as hardeskywe 419 00:20:23,490 --> 00:20:27,390 of selfs soliede toestand dryf hierdie dae, maar dit is gewoonlik duurder so 420 00:20:27,390 --> 00:20:28,480 jy het minder van dit. 421 00:20:28,480 --> 00:20:32,400 >> So vandag se gesprek verwys regtig na RAM, dat die tipe van die geheue wat 422 00:20:32,400 --> 00:20:35,270 bestaan ​​slegs terwyl daar is krag gevoer word in jou rekenaar. 423 00:20:35,270 --> 00:20:40,530 So wanneer jy tik in H-E-L-L-O, Tik op die klawerbord, is die H gaan in een 424 00:20:40,530 --> 00:20:44,550 byte van die geheue, is die E gaan in 'n ander greep van die geheue, is as 425 00:20:44,550 --> 00:20:45,800 die res van die woord. 426 00:20:45,800 --> 00:20:49,010 So onthou wat ons in staat was om laaste tyd om te doen, was dit. 427 00:20:49,010 --> 00:20:53,940 Laat my gaan voort en maak die lêer dat ons geroep string.c, en onthou 428 00:20:53,940 --> 00:20:56,860 dat dit lyk 'n bietjie iets soos hierdie. 429 00:20:56,860 --> 00:20:59,860 Laat my terug eintlik rol en verander dit presies wat dit lyk, 430 00:20:59,860 --> 00:21:02,654 string lengte van s. 431 00:21:02,654 --> 00:21:04,560 >> So kyk na die program hier. 432 00:21:04,560 --> 00:21:08,530 Ons sluit die CS50 biblioteek so wat ons kan gebruik om tou. 433 00:21:08,530 --> 00:21:11,400 Ons sluit standaard io.h sodat ons kan printf gebruik. 434 00:21:11,400 --> 00:21:13,580 Hoekom het ons sluit string.h? 435 00:21:13,580 --> 00:21:16,980 Dit was 'n nuwe, gister gesê. 436 00:21:16,980 --> 00:21:18,230 So ons wou string lengte. 437 00:21:18,230 --> 00:21:19,090 Str leng. 438 00:21:19,090 --> 00:21:21,470 Mense besluit jaar gelede, laat ons net wees bondige. 439 00:21:21,470 --> 00:21:24,290 In plaas van om dit "string lengte," Kom ons noem dit "str leng" en laat die 440 00:21:24,290 --> 00:21:28,540 wêreld figuur wat uit, en so is dit wat ons kry toegang tot met string.h. 441 00:21:28,540 --> 00:21:29,390 >> Dit is bekend. 442 00:21:29,390 --> 00:21:30,320 Dit is bekend. 443 00:21:30,320 --> 00:21:31,450 Dit is bekend. 444 00:21:31,450 --> 00:21:32,370 Dit is 'n bietjie nuwe. 445 00:21:32,370 --> 00:21:35,420 In lyn 22 - en ons sal terug te kom hierdie, maar vir nou weet - 446 00:21:35,420 --> 00:21:37,880 en jy sal net weet dit uit met lees die dokumentasie of indien 447 00:21:37,880 --> 00:21:39,010 jy het geweet C reeds - 448 00:21:39,010 --> 00:21:41,510 kry string soms kan skroef. 449 00:21:41,510 --> 00:21:45,130 As die gebruiker is regtig opponerende of saamwerk nie en hy of sy net 450 00:21:45,130 --> 00:21:49,450 nie tik enigiets aan die klawerbord of tipes so baie op die sleutelbord wat 451 00:21:49,450 --> 00:21:53,760 dit oorweldig die rekenaar se geheue, in teorie, kry string kon terugkeer 452 00:21:53,760 --> 00:21:56,270 iets anders as 'n string van die karakters. 453 00:21:56,270 --> 00:22:01,930 Dit kon terugkeer 'n spesiale waarde genoem NULL in hoofletters, N-U-L-L, en dit is 454 00:22:01,930 --> 00:22:03,390 net 'n sogenaamde brandwag waarde. 455 00:22:03,390 --> 00:22:08,010 Dit is 'n spesiale waarde wat dui iets sleg gebeur in hierdie geval. 456 00:22:08,010 --> 00:22:10,520 Dit is die afwesigheid van 'n string. 457 00:22:10,520 --> 00:22:16,190 >> So nul Ek check vir net sodat lang storie kort, str leng en 458 00:22:16,190 --> 00:22:20,230 ander funksies wat kom met C, indien hulle verwag 'n string, maar jy verby hulle 459 00:22:20,230 --> 00:22:23,630 die afwesigheid van 'n string, as jy slaag dit uitdruklik, die rekenaar of die program 460 00:22:23,630 --> 00:22:25,000 sal net blatante crash. 461 00:22:25,000 --> 00:22:25,610 Dit sal hang. 462 00:22:25,610 --> 00:22:27,250 Dit sal gooi 'n paar fout boodskap. 463 00:22:27,250 --> 00:22:28,690 Slegte dinge sal gebeur. 464 00:22:28,690 --> 00:22:31,130 Dus, selfs al is dit nog steeds nie goed gedefinieerde - 465 00:22:31,130 --> 00:22:33,730 Dit sal meer sin maak in 'n week of twee - in lyn 22, is dit net 'n 466 00:22:33,730 --> 00:22:38,790 voorbeeld van self verdediging foutkontroles net in geval een keer uit 467 00:22:38,790 --> 00:22:42,040 'n miljoen iets verkeerd gaan, op minste my program sal nie crash. 468 00:22:42,040 --> 00:22:45,960 >> So as S nie gelyk aan iets wat sleg is, Ek het dit vir lus, en dit was 469 00:22:45,960 --> 00:22:47,710 waar ons gehad het dat die ander nuwe stuk van sintaksis. 470 00:22:47,710 --> 00:22:51,580 Ek het 'n lus vir iterating uit nul tot die lengte van s. 471 00:22:51,580 --> 00:22:56,140 En dan is hier, ek was 'n druk uit s bracket ek nie, maar hoekom het ek gebruik% c al 472 00:22:56,140 --> 00:23:00,770 'n skielike in plaas van% s selfs alhoewel s is 'n string? 473 00:23:00,770 --> 00:23:02,110 Dit is 'n karakter, reg? 474 00:23:02,110 --> 00:23:06,560 S is 'n string, maar s bracket iets, s bracket ek waar ek is nul 475 00:23:06,560 --> 00:23:10,380 of een of twee, dit is 'n individu karakter in die string, en so is dit vir 476 00:23:10,380 --> 00:23:14,970 dat, moet printf om ingelig te word dat dit is inderdaad 'n karakter om te verwag. 477 00:23:14,970 --> 00:23:18,096 >> En dan onthou, wat het hierdie program eintlik doen? 478 00:23:18,096 --> 00:23:19,848 >> Gedruk is dit in kolomme. 479 00:23:19,848 --> 00:23:21,120 >> Ja, presies. 480 00:23:21,120 --> 00:23:24,990 Dit is net gedruk die woord wat ek tik in 'n kolom, een karakter per lyn. 481 00:23:24,990 --> 00:23:26,190 So laat ons sien dit weer. 482 00:23:26,190 --> 00:23:27,810 So maak string. 483 00:23:27,810 --> 00:23:30,200 Saamgestel OK. / String.. 484 00:23:30,200 --> 00:23:35,560 Laat my tik in H-E-L-L-O, ingaan en wel ek dit kry, een per lyn. 485 00:23:35,560 --> 00:23:37,280 >> So laat my nie een optimalisering hier. 486 00:23:37,280 --> 00:23:40,240 As jy daaroor dink, veral as jy het geprogrammeer voor, is daar 487 00:23:40,240 --> 00:23:43,340 waarskynlik 'n ondoeltreffendheid in lyn 24. 488 00:23:43,340 --> 00:23:46,160 Met ander woorde, is dit nie noodwendig die beste ontwerp. 489 00:23:46,160 --> 00:23:50,200 Eenvoudig, ten minste een keer jy onthou wat str leng is, maar dit is 490 00:23:50,200 --> 00:23:52,640 doen iets stom potensieel. 491 00:23:52,640 --> 00:23:54,863 Wat kan dit wees? 492 00:23:54,863 --> 00:23:56,280 >> [Onhoorbaar]. 493 00:23:56,280 --> 00:23:56,800 >> Presies. 494 00:23:56,800 --> 00:24:00,340 Dit is kontrole vir die lengte van s elke keer, selfs al is 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O is altyd iets tot vyf karakters. 496 00:24:02,980 --> 00:24:05,490 Elke keer deur hierdie lus, die vyf is nie verander. 497 00:24:05,490 --> 00:24:08,750 Ek kan die verhoog word ek nie, maar wat is die lengte van s op elke 498 00:24:08,750 --> 00:24:09,690 herhaling van die lus? 499 00:24:09,690 --> 00:24:15,810 Dit is vyf, is dit vyf, is dit vyf, en maar ek is tog vra om hierdie 500 00:24:15,810 --> 00:24:18,320 bevraagteken weer en weer en weer. 501 00:24:18,320 --> 00:24:20,750 Nou eerlik, die rekenaar is so damn vinnig, is niemand gaan 'n om op te let 502 00:24:20,750 --> 00:24:23,780 verskil in hierdie geval, maar hierdie soort van swak ontwerp besluite te kan 503 00:24:23,780 --> 00:24:28,330 begin toe te voeg tot as die opsteller self nie probeer om dit op te los vir jou wat 504 00:24:28,330 --> 00:24:30,630 dit gewoonlik nie wil nie, by minste in die toestel. 505 00:24:30,630 --> 00:24:31,540 >> So ek gaan om dit te doen. 506 00:24:31,540 --> 00:24:34,580 Ek gaan 'n komma te voeg na my eerste veranderlike, i. 507 00:24:34,580 --> 00:24:37,310 Ek gaan om te gee myself 'n ander veranderlike, noem dit 'n net deur 508 00:24:37,310 --> 00:24:41,330 konvensie van getalle, en dan is ek gaan om te wys n die waarde van string 509 00:24:41,330 --> 00:24:42,530 lengte van s. 510 00:24:42,530 --> 00:24:46,060 En dan gaan ek te verander my toestand te wees wat? 511 00:24:46,060 --> 00:24:51,960 Ek gaan my toestand te verander aan terwyl ek minder as n. 512 00:24:51,960 --> 00:24:55,700 >> So nou, hoeveel keer is ek die monitor van die lengte van s? 513 00:24:55,700 --> 00:25:00,110 Keer, maar dit is OK ek om seker te maak teen n weer en weer, want nou diegene 514 00:25:00,110 --> 00:25:03,170 waardes is eintlik nie verander. 515 00:25:03,170 --> 00:25:06,020 Nou vir nou, weet net dat wanneer jy noem 'n funksie, is daar 'n bietjie van ' 516 00:25:06,020 --> 00:25:09,930 oorhoofse, nie genoeg om jou te ontmoedig regtig ooit met behulp van funksies, maar 517 00:25:09,930 --> 00:25:12,750 seker as daar is 'n reël van die kode graag dat - en die lyne sal kry 518 00:25:12,750 --> 00:25:15,490 meer interessant voor lank - waar daar is 'n geleentheid om te dink, as ek 519 00:25:15,490 --> 00:25:18,320 Hierdie kode, hoeveel keer sal dit uit te voer? 520 00:25:18,320 --> 00:25:20,950 Jy sal begin om te sien met verloop van tyd die prestasie van jou programme kan 521 00:25:20,950 --> 00:25:21,660 inderdaad verander. 522 00:25:21,660 --> 00:25:24,110 >> Trouens, een van die probleem sit ons het gedoen in die afgelope jare behels 523 00:25:24,110 --> 00:25:27,600 implementering, as jy kan onthou uit week nul, 'n speltoetser, maar 'n 524 00:25:27,600 --> 00:25:31,380 speltoetser wat bedoel is om te ondersteun 'n woordeboek van 150,000 plus 525 00:25:31,380 --> 00:25:32,860 woorde wat ons gee julle. 526 00:25:32,860 --> 00:25:37,100 Jy sal 'n kode te skryf wat laai daardie woorde in die geheue, so in 527 00:25:37,100 --> 00:25:40,700 bokse soos ons gesien het op die skerm 'n oomblik gelede, en dan so vinnig as wat jy 528 00:25:40,700 --> 00:25:43,740 kan, jy moet in staat wees om 'n antwoord vraag van die vorm, is hierdie woord 529 00:25:43,740 --> 00:25:44,280 gespel? 530 00:25:44,280 --> 00:25:45,420 Is hierdie woord verkeerd gespel? 531 00:25:45,420 --> 00:25:46,770 Is hierdie woord verkeerd gespel? 532 00:25:46,770 --> 00:25:49,525 >> En in iets soos dit wat ons het gedoen in die afgelope jare is omskep dit in, 533 00:25:49,525 --> 00:25:53,500 al is dit op 'n opt-in opsionele basis, 'n kompetisie van spesies, waardeur die 534 00:25:53,500 --> 00:25:59,470 studente wat die minder geheue en minder gebruik tyd, minder CPU siklusse, beland 535 00:25:59,470 --> 00:26:02,640 borrel tot by die top van 'n bietjie leier raad of die posisie wat ons aan 536 00:26:02,640 --> 00:26:04,770 die kursus se tuisblad soos ons gedoen in die afgelope jaar. 537 00:26:04,770 --> 00:26:08,100 So weer, heeltemal opsioneel, maar dit praat met die ontwerp geleenthede 538 00:26:08,100 --> 00:26:11,250 wat voorlê sodra ons begin bou bo-op sommige van hierdie 539 00:26:11,250 --> 00:26:14,010 basiese boustene. 540 00:26:14,010 --> 00:26:16,780 >> So laat my gaan terug na hierdie diagram vir net 'n oomblik en openbaar 'n bietjie 541 00:26:16,780 --> 00:26:17,610 iets meer. 542 00:26:17,610 --> 00:26:21,400 Dit is inderdaad 'n string, en ons het geneem voordeel van 'n paar biblioteke, 543 00:26:21,400 --> 00:26:25,150 standaard io.h wat - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, onder andere. 546 00:26:27,860 --> 00:26:31,540 cs50.h, wat kry int en kry string en so meer, string.h, wat 547 00:26:31,540 --> 00:26:32,570 het str leng. 548 00:26:32,570 --> 00:26:34,800 Maar dit blyk daar is nog 'n ander. 549 00:26:34,800 --> 00:26:38,540 Eerlik, daar is baie, baie van kop lêers wat verklaar funksies 550 00:26:38,540 --> 00:26:43,320 vir biblioteke, maar dit is ctype.h eintlik gaan om 'n bietjie te wees 551 00:26:43,320 --> 00:26:46,900 voordelig, want ek gaan om voort te gaan en te implementeer 'n 552 00:26:46,900 --> 00:26:48,120 ander program hier. 553 00:26:48,120 --> 00:26:52,420 >> Laat my gaan voort en maak iets Ek het vooraf genoem 554 00:26:52,420 --> 00:26:55,750 capitalize.c, en laat ons 'n blik op hoe dit werk. 555 00:26:55,750 --> 00:27:00,340 Let daarop dat ek gebruik, in hierdie weergawe daarvan, drie bekende lêers. 556 00:27:00,340 --> 00:27:04,110 Let daarop dat in line 18, ek is om 'n reël van die teks. 557 00:27:04,110 --> 00:27:07,660 Kennisgewing in reël 21, ek beweer dat die volgende kode gaan 558 00:27:07,660 --> 00:27:12,170 kapitaliseer s, wat die gebruiker getik in, en hoe doen ek dit? 559 00:27:12,170 --> 00:27:13,300 Wel, ek neem - 560 00:27:13,300 --> 00:27:14,750 les geleer het uit vorige keer - 561 00:27:14,750 --> 00:27:18,370 Ek verklaar ek en N en iterating oor die karakters in die string. 562 00:27:18,370 --> 00:27:22,720 En wat is dan die blok kode in lyn 24 deur 27 563 00:27:22,720 --> 00:27:24,550 doen in leketaal? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Kleinletter terug. 566 00:27:29,730 --> 00:27:30,430 >> Presies. 567 00:27:30,430 --> 00:27:35,920 As s bracket i - so as die i-de karakter van s, wat 'n spesifieke 568 00:27:35,920 --> 00:27:40,220 kar in die string, is groter as of gelyk om 'n klein letter en - 569 00:27:40,220 --> 00:27:42,670 onthou dat dubbele ampersand gewys en - 570 00:27:42,670 --> 00:27:46,810 en dieselfde karakter, s bracket i, is minder as of gelyk Z te onderkas, 571 00:27:46,810 --> 00:27:50,600 Dit beteken dit is 'n A-of B of 'n C of dot, dot, dot, of 'n Z, wat beteken 572 00:27:50,600 --> 00:27:51,340 dit is klein. 573 00:27:51,340 --> 00:27:52,900 Wat wil ek doen in daardie geval? 574 00:27:52,900 --> 00:27:55,010 Wel, ek kan dit doen 'n bietjie kripties, maar 575 00:27:55,010 --> 00:27:56,160 laat se terg hierdie uitmekaar. 576 00:27:56,160 --> 00:28:00,210 >> Ek gaan printf noem, druk% c want ek wil om dit te herdruk 577 00:28:00,210 --> 00:28:01,580 karakter op die skerm. 578 00:28:01,580 --> 00:28:06,650 Ek is dan gaan s bracket ek, die te neem i-de karakter in s, en dan die rede waarom 579 00:28:06,650 --> 00:28:12,330 doen ek dit bietjie truuk hier, onderkas 'n minus kapitaal A? 580 00:28:12,330 --> 00:28:16,352 Wat is dit gaan te gee my, in die algemeen? 581 00:28:16,352 --> 00:28:18,600 >> [Onhoorbaar]. 582 00:28:18,600 --> 00:28:19,390 >> Presies. 583 00:28:19,390 --> 00:28:20,860 Ek weet nie regtig nie onthou nie - 584 00:28:20,860 --> 00:28:24,390 dit was 65 vir kapitale A. Ek het nie regtig onthou wat kleinletter a is, 585 00:28:24,390 --> 00:28:25,540 Maar maak nie saak. 586 00:28:25,540 --> 00:28:26,580 Die rekenaar weet. 587 00:28:26,580 --> 00:28:30,380 So deur te sê, onderkas n minus kapitaal A, dit is vreemd om te wees 588 00:28:30,380 --> 00:28:33,530 aftrek van 'n kar van 'n ander, maar wat karakters onder die enjinkap? 589 00:28:33,530 --> 00:28:34,520 Hulle is net nommers. 590 00:28:34,520 --> 00:28:36,980 So ook al die nommers is, Laat die rekenaar onthou 591 00:28:36,980 --> 00:28:38,240 eerder as om my die mens. 592 00:28:38,240 --> 00:28:41,710 >> So 'n klein letter minus kapitaal A gaan gee my 'n verskil maak. 593 00:28:41,710 --> 00:28:45,370 Dit gebeur te wees 32, en dit sou die saak vir die klein b en kapitaal B 594 00:28:45,370 --> 00:28:45,930 en so meer. 595 00:28:45,930 --> 00:28:47,710 Dit bly konstant, gelukkig. 596 00:28:47,710 --> 00:28:51,930 So het ek in wese probeer sê, neem die klein letter, trek af wat 597 00:28:51,930 --> 00:28:55,340 standaard verskil, en dat effektief veranderinge s bracket ek uit 598 00:28:55,340 --> 00:28:59,400 onderkas te, natuurlik, hoofletters, sonder my regtig na te dink 599 00:28:59,400 --> 00:29:03,040 oor of onthou, wat was daardie getalle het ons gepraat oor wanneer die agt 600 00:29:03,040 --> 00:29:04,800 vrywilligers het op die verhoog? 601 00:29:04,800 --> 00:29:08,800 Nou intussen, in die ander, al is dit nie 'n klein letter, soos bepaal 602 00:29:08,800 --> 00:29:10,400 deur lyn 24, net druk dit uit. 603 00:29:10,400 --> 00:29:12,590 Ek wil net die aan te raak karakters wat 604 00:29:12,590 --> 00:29:14,410 eintlik oorspronklik onderkas. 605 00:29:14,410 --> 00:29:15,150 >> So laat ons sien. 606 00:29:15,150 --> 00:29:17,400 Maak kapitaliseer. 607 00:29:17,400 --> 00:29:18,470 Saamgestel, OK. 608 00:29:18,470 --> 00:29:19,730 / Kapitaliseer.. 609 00:29:19,730 --> 00:29:23,530 En laat my tik in H-E-L-L-O in klein, Tik. 610 00:29:23,530 --> 00:29:26,370 En sien dat dit omgeskakel in hoofletters. 611 00:29:26,370 --> 00:29:27,940 Laat ek dit weer met 'n ander woord. 612 00:29:27,940 --> 00:29:32,720 Hoe oor die D-A-V-ek-D met die eerste D gekapitaliseer as 'n naam is tipies? 613 00:29:32,720 --> 00:29:33,560 Betree. 614 00:29:33,560 --> 00:29:34,870 Let daarop dat dit nog korrek is. 615 00:29:34,870 --> 00:29:40,250 Dit is net outputted dat die eerste D onveranderd via wat anders bou. 616 00:29:40,250 --> 00:29:42,170 >> So in gedagte hou, dan, 'n Paar van die dinge hier. 617 00:29:42,170 --> 00:29:45,060 Een, as jy ooit wil twee om te kyk voorwaardes in 'n keer, en jy kan hulle 618 00:29:45,060 --> 00:29:46,500 saam soos ons voorspel het. 619 00:29:46,500 --> 00:29:49,900 Jy kan vergelyk karakters in hierdie manier en doeltreffend te behandel karakters soos 620 00:29:49,900 --> 00:29:53,050 getalle, maar eerlik, dit is so damn kriptiese ek nooit gaan om te onthou 621 00:29:53,050 --> 00:29:56,510 hoe om vorendag te kom met hierdie van nuuts af sonder redenasie deur dit vir 'n hele 622 00:29:56,510 --> 00:29:57,140 'n bietjie van die tyd. 623 00:29:57,140 --> 00:30:00,590 >> Sou dit nie gewees het lekker as iemand daar het 'n funksie genoem is 624 00:30:00,590 --> 00:30:05,390 verlaag wat kon antwoord vir my waar of vals, hierdie karakter is klein? 625 00:30:05,390 --> 00:30:09,350 Wel, gelukkig, elkeen het ctype.h het presies dit. 626 00:30:09,350 --> 00:30:15,540 Laat my gaan hier en voeg ctype vir c tipes, en nou laat my gaan hier en 627 00:30:15,540 --> 00:30:18,820 herskryf die lyn as volg. 628 00:30:18,820 --> 00:30:27,510 >> So as dit genoem is laer, ek eis, s bracket i, dan gaan ek om te verwyder 629 00:30:27,510 --> 00:30:29,400 hierdie twee lyne heeltemal. 630 00:30:29,400 --> 00:30:32,570 So nou iemand anders, ek hoop, geskryf 'n funksie genoem laer is, en dit 631 00:30:32,570 --> 00:30:36,250 blyk uit hulle gedoen het en hulle verklaar dit binnekant van ctype.h. 632 00:30:36,250 --> 00:30:39,480 En nou gaan ek reël 27 te verlaat alleen, ek gaan lyn 31 te verlaat 633 00:30:39,480 --> 00:30:41,890 alleen nie, maar sien hoe baie ek het strenger my kode. 634 00:30:41,890 --> 00:30:42,690 Dit is nou skoner. 635 00:30:42,690 --> 00:30:47,250 Dit is minder moeilik om te kyk deur want nou die funksie, ook, is 636 00:30:47,250 --> 00:30:50,080 so wonderlik vernoem dit net doen wat dit sê. 637 00:30:50,080 --> 00:30:51,520 >> So nou is ek gaan om dit te red. 638 00:30:51,520 --> 00:30:52,930 Ek gaan om te vergroot. 639 00:30:52,930 --> 00:30:56,650 En net soos in Scratch jy kan hê Boolse, boolse waar of 640 00:30:56,650 --> 00:31:01,530 vals is, dit is presies wat verlaag effektief opbrengste. 641 00:31:01,530 --> 00:31:02,960 Laat my heropstel. 642 00:31:02,960 --> 00:31:04,500 Laat my re-run. 643 00:31:04,500 --> 00:31:07,350 En nou, laat ons probeer dit weer, H-E-L-L-O, Tik. 644 00:31:07,350 --> 00:31:07,970 Dit is redelik goed. 645 00:31:07,970 --> 00:31:10,150 En probeer dit weer, maak seker dat ek het nie skroef iets up. 646 00:31:10,150 --> 00:31:11,670 Dit word gekapitaliseer as well. 647 00:31:11,670 --> 00:31:14,190 >> Maar dit is nie goed genoeg nie, want die ander ding wat ek gaan nooit te 648 00:31:14,190 --> 00:31:19,090 onthou nie, tensy ek werk deur dit regtig versigtig op, sê, papier 649 00:31:19,090 --> 00:31:19,920 hierdie damn lyn. 650 00:31:19,920 --> 00:31:23,450 Sou dit nie lekker wees as daar 'n funksie genoem na die boonste? 651 00:31:23,450 --> 00:31:26,930 Wel, dit blyk daar is in ctype.h as well. 652 00:31:26,930 --> 00:31:30,150 Ek gaan om voort te gaan en tik - 653 00:31:30,150 --> 00:31:31,340 laat my bring dat die lyn terug. 654 00:31:31,340 --> 00:31:36,430 In plaas van hierdie hier, laat my gaan voort en sê, plaasvervanger vir die% c die 655 00:31:36,430 --> 00:31:42,110 gevolg van die roeping van hierdie funksie te bo op die i-de karakter van s. 656 00:31:42,110 --> 00:31:45,430 En nou sien dit raak 'n bietjie gebalanseer. 657 00:31:45,430 --> 00:31:48,870 Ek het om tred te hou van hoeveel hakies Ek het geopen en gesluit. 658 00:31:48,870 --> 00:31:50,050 >> So nou is dit selfs skoner. 659 00:31:50,050 --> 00:31:53,460 Nou is hierdie program is om 'n beter en 'n beter ontwerp waarskynlik omdat dit 660 00:31:53,460 --> 00:31:56,450 baie, baie meer leesbare, maar dit is nie laat regstel. 661 00:31:56,450 --> 00:31:57,600 Maak kapitaliseer. 662 00:31:57,600 --> 00:31:58,930 / Kapitaliseer.. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-O. Kom ons loop dit weer D-'n-V-ek-D. OK, so ons is nog steeds in 664 00:32:03,220 --> 00:32:04,250 redelik goeie vorm. 665 00:32:04,250 --> 00:32:06,030 >> Maar nou na die boonste. 666 00:32:06,030 --> 00:32:09,720 Ek stel voor dat daar is 'n meer verfyning ons kan maak wat jou sal wees 667 00:32:09,720 --> 00:32:12,820 baie mooi, wat kan regtig draai up hierdie kode en regtig gee ons vyf 668 00:32:12,820 --> 00:32:15,150 uit vyf vir die ontwerp, byvoorbeeld. 669 00:32:15,150 --> 00:32:16,510 Wat sal lekker wees om ontslae te raak van? 670 00:32:16,510 --> 00:32:20,770 Wel, kyk hoe damn lank hierdie blok kode is net iets eenvoudig om te doen. 671 00:32:20,770 --> 00:32:23,850 >> Nou as 'n eenkant, as jy dalk ' gesien in super artikel die afgelope 672 00:32:23,850 --> 00:32:27,570 naweek, het jy nie nodig het om die streng krulhakies wanneer jy net een het 673 00:32:27,570 --> 00:32:32,180 reël van die kode, selfs al het ons voorgestel hou hulle so dat dit maak veel 674 00:32:32,180 --> 00:32:36,190 meer duidelik, soos in Scratch se U-vormige blokke, wat binne in die tak. 675 00:32:36,190 --> 00:32:40,170 Maar sou dit nie lekker wees as na die boonste, wanneer die lig van sy insette, het dit in 676 00:32:40,170 --> 00:32:44,730 hoofletters as dit nie, en wat sou wonderlik wees in die teenoorgestelde geval as 677 00:32:44,730 --> 00:32:47,210 dit is reeds hoofletters? 678 00:32:47,210 --> 00:32:49,620 Net verby dit deur en laat dit alleen. 679 00:32:49,620 --> 00:32:50,660 >> So miskien is dit nie dat. 680 00:32:50,660 --> 00:32:52,990 Ek kan probeer en hoop net dat dit nie, maar laat my 681 00:32:52,990 --> 00:32:54,450 stel 'n ander ding. 682 00:32:54,450 --> 00:32:57,440 In plaas van die gebruik van hierdie ingeboude terminale venster af hier, onthou dat 683 00:32:57,440 --> 00:33:01,130 hierdie vierkantige swart ikoon gee jou 'n groter terminale venster wat ek kan volle 684 00:33:01,130 --> 00:33:02,260 skerm indien ek wil hê? 685 00:33:02,260 --> 00:33:05,820 So dit blyk dat hulle is soort van snaaks genoem nie, maar daar is hierdie dinge genoem 686 00:33:05,820 --> 00:33:10,970 man bladsye, handleiding bladsye, man vir 'n kort, en ek kan toegang tot hierdie 687 00:33:10,970 --> 00:33:14,515 tik man - 688 00:33:14,515 --> 00:33:15,570 wat ek wil om te tik? 689 00:33:15,570 --> 00:33:17,830 Man na die boonste. 690 00:33:17,830 --> 00:33:21,090 >> En nou agterkom as daar 'n funksioneer binnekant van die rekenaar, in 691 00:33:21,090 --> 00:33:23,970 hierdie geval die toestel, wat net die bedryfstelsel Linux, gaan dit 692 00:33:23,970 --> 00:33:27,920 gee my 'n ietwat kriptiese stel uitvoer, maar jy sal vind in die tyd wat 693 00:33:27,920 --> 00:33:31,720 Dit is altyd geformateer pretty much die dieselfde so jy begin om gewoond te raak aan dit. 694 00:33:31,720 --> 00:33:35,130 Let op die top na die boonste en blykbaar is dieselfde dokumentasie 695 00:33:35,130 --> 00:33:35,680 vir te verlaag. 696 00:33:35,680 --> 00:33:38,740 Wie het dit geskryf is sny 'n paar hoeke en sit dit alles op een bladsy. 697 00:33:38,740 --> 00:33:40,720 Hierdie dinge 'doel in lewe is 'n te omskep 698 00:33:40,720 --> 00:33:42,780 brief aan boonste of klein. 699 00:33:42,780 --> 00:33:46,290 >> Let daarop dat onder Oorsig, die man bladsy word die onderrig van my wat lêer Ek het 700 00:33:46,290 --> 00:33:48,130 in te sluit om hierdie saak te gebruik. 701 00:33:48,130 --> 00:33:51,320 Dit gee my die handtekeninge vir hierdie funksies, beide van hulle, 702 00:33:51,320 --> 00:33:53,510 al het ons nou net omgee vir een. 703 00:33:53,510 --> 00:33:54,730 Hier is nou 'n beskrywing. 704 00:33:54,730 --> 00:33:58,800 Na die boonste vat die brief c na hoofletters indien moontlik. 705 00:33:58,800 --> 00:34:02,280 >> Nog steeds nie dat insiggewend, maar laat my nou kyk onder terugkeer waarde, die ding 706 00:34:02,280 --> 00:34:03,520 dit is terug oorhandig. 707 00:34:03,520 --> 00:34:08,600 Dus is die waarde wat is dat van die omskep brief of c indien die 708 00:34:08,600 --> 00:34:09,870 sukses nie moontlik was nie. 709 00:34:09,870 --> 00:34:11,202 Wat is c? 710 00:34:11,202 --> 00:34:12,560 >> Die oorspronklike karakter. 711 00:34:12,560 --> 00:34:15,370 >> Die oorspronklike karakter en ons weet wat deur die weer, gaan aan die 712 00:34:15,370 --> 00:34:19,179 samevatting, en elkeen wat dit geskryf het funksie het net besluit dat die insette 713 00:34:19,179 --> 00:34:22,909 om na die boonste en onderste is net arbitrêr gaan genoem word c. 714 00:34:22,909 --> 00:34:24,909 Hulle kon genoem het dit die meeste enigiets hulle wil hê, maar hulle het dit 715 00:34:24,909 --> 00:34:26,270 eenvoudig as c. 716 00:34:26,270 --> 00:34:27,880 So het ek geraadpleeg die man bladsy. 717 00:34:27,880 --> 00:34:31,870 Hierdie sin gerus stel my dat indien dit is nie 'n klein letter, is dit 718 00:34:31,870 --> 00:34:34,969 gaan gee my net terug c, wat volmaak nie, wat beteken dat ek kan ontslae te raak van 719 00:34:34,969 --> 00:34:36,199 my anders toestand. 720 00:34:36,199 --> 00:34:39,679 >> So laat my gaan terug na gedit, en nou laat ek net dit doen. 721 00:34:39,679 --> 00:34:41,960 Ek gaan my printf verklaring te kopieer. 722 00:34:41,960 --> 00:34:45,969 Ek gaan voort en reg binne te gaan die lus vir die druk wat uit en kry 723 00:34:45,969 --> 00:34:48,760 ontslae te raak van nou hierdie hele As konstruk. 724 00:34:48,760 --> 00:34:51,860 Was nie 'n slegte idee nie, en dit was baie baie korrek en in ooreenstemming met 725 00:34:51,860 --> 00:34:54,100 alles wat ons verkondig het, maar net nie nodig nie. 726 00:34:54,100 --> 00:34:57,070 Sodra jy besef sommige biblioteek funksie bestaan ​​dat iemand anders 727 00:34:57,070 --> 00:35:01,340 geskryf het, of miskien het jy elders geskryf het in die lêer, kan jy dit gebruik en regtig 728 00:35:01,340 --> 00:35:02,690 begin toeneem die kode. 729 00:35:02,690 --> 00:35:06,080 >> En as ek sê dinge soos goeie styl, die feit dat die persoon wat die 730 00:35:06,080 --> 00:35:11,490 funksioneer na die boonste, of voorheen is laer is wonderlik nuttig omdat 731 00:35:11,490 --> 00:35:12,900 hulle is baie beskrywende. 732 00:35:12,900 --> 00:35:16,120 Jy wil nie jou funksies te roep x en y en z, wat 733 00:35:16,120 --> 00:35:19,620 baie, baie minder betekenis. 734 00:35:19,620 --> 00:35:25,160 Enige vrae oor die reeks van verbeterings? 735 00:35:25,160 --> 00:35:28,010 >> So is dit voldoende om een ​​van die om te sê wegneemetes is selfs as jou eie probleem 736 00:35:28,010 --> 00:35:30,960 stel - dalk jou probleem stel een nie, maar beslis P sit twee en verder, selfs 737 00:35:30,960 --> 00:35:34,380 wanneer hulle is korrek nie noodwendig beteken hulle is perfek net 738 00:35:34,380 --> 00:35:36,155 nog of besonder goed ontwerp. 739 00:35:36,155 --> 00:35:38,420 Dit is die ander as te begin dink. 740 00:35:38,420 --> 00:35:41,730 So dit was 'n string binnekant van jou rekenaar se geheue, maar as jy 'n 741 00:35:41,730 --> 00:35:46,180 hele klomp van die karakters soos H-E-L-L-O binnekant van die geheue, en veronderstel 742 00:35:46,180 --> 00:35:51,330 dat jy in jou program noem kry string verskeie kere so dat jy 743 00:35:51,330 --> 00:35:54,200 noem kry string een keer, dan sal jy noem kry string weer. 744 00:35:54,200 --> 00:35:55,880 Wel, wat gaan aan gebeur oor tyd? 745 00:35:55,880 --> 00:35:59,170 >> Met ander woorde, as jy 'n lyn van kode, al is dit buite konteks, soos 746 00:35:59,170 --> 00:36:02,120 string s kry - 747 00:36:02,120 --> 00:36:02,960 Kom ons doen dit. 748 00:36:02,960 --> 00:36:05,270 String naam is gelyk aan kry snaar. 749 00:36:05,270 --> 00:36:08,590 So veronderstel dat die lyn van kode is bedoel die gebruiker om sy of haar naam te vra. 750 00:36:08,590 --> 00:36:14,580 Hierdie volgende lyn van kode is bedoel om te vra die gebruiker om sy of haar skool, en 751 00:36:14,580 --> 00:36:15,920 hierdie volgende lyn, en so meer. 752 00:36:15,920 --> 00:36:18,150 Veronderstel dat ons vra die gebruiker vir 'n ander en 753 00:36:18,150 --> 00:36:19,750 'n ander en 'n ander string. 754 00:36:19,750 --> 00:36:22,390 Hulle gaan om te bly in die geheue op dieselfde tyd. 755 00:36:22,390 --> 00:36:24,280 Een is nie van plan om die ander te afranselen. 756 00:36:24,280 --> 00:36:26,420 Skool is nie vervang die ander. 757 00:36:26,420 --> 00:36:28,520 Maar waar het hulle al beland in die geheue? 758 00:36:28,520 --> 00:36:32,030 >> Wel, as ons begin om te trek op die skerm, wat ons kan gebruik om hierdie ding 759 00:36:32,030 --> 00:36:35,800 hier soos 'n swartbord, indien dit swart reghoek verteenwoordig my rekenaar 760 00:36:35,800 --> 00:36:39,800 geheue, ek gaan na willekeur begin deel dit op in klein blokkies, 761 00:36:39,800 --> 00:36:42,120 waarvan elk een greep van die geheue. 762 00:36:42,120 --> 00:36:46,560 Eerlik, as jy 'n GB RAM hierdie dae, jy het 'n miljard grepe 763 00:36:46,560 --> 00:36:49,540 van die geheue in jou rekenaar, so 'n miljard van hierdie blokkies. 764 00:36:49,540 --> 00:36:52,110 So is dit voldoende om te sê, dit is nie regtig te skaal. 765 00:36:52,110 --> 00:36:58,250 >> Maar ons kon hou teken al hierdie duidelik nie vierkante te skaal, en dit 766 00:36:58,250 --> 00:37:01,260 gesamentlik verteenwoordig my rekenaar se geheue. 767 00:37:01,260 --> 00:37:03,136 Nou kan ons net doen dot, dot, dot. 768 00:37:03,136 --> 00:37:06,260 So met ander woorde, as ek nou gevra word om die gebruiker get string te gee vir my 'n 769 00:37:06,260 --> 00:37:07,350 string, wat gebeur? 770 00:37:07,350 --> 00:37:14,270 As die gebruiker in "hallo", wat eindig up in H-E-L-L-O. Maar veronderstel die 771 00:37:14,270 --> 00:37:15,720 gebruiker dan tipes in - 772 00:37:15,720 --> 00:37:17,250 Eintlik moet ek dit nie gedoen het hallo, want ons vra 773 00:37:17,250 --> 00:37:18,330 hulle vir hul name. 774 00:37:18,330 --> 00:37:20,580 So laat ons gaan terug as ek dit kan doen. 775 00:37:20,580 --> 00:37:26,130 >> So as ek tik in D-A-V-ek-D vir my naam, maar onthou dat die tweede lyn van 776 00:37:26,130 --> 00:37:29,220 kode is kry string weer hul skool te kry. 777 00:37:29,220 --> 00:37:32,090 Waar is die woord wat die gebruiker tipes in te gaan om te gaan volgende? 778 00:37:32,090 --> 00:37:38,290 Wel, miskien is dit gaan om te gaan in H-A-R-V-A-R-D. So selfs al het ek 779 00:37:38,290 --> 00:37:41,560 getrek dit as twee rye, dit is net 'n hele klomp van die grepe in jou 780 00:37:41,560 --> 00:37:42,710 rekenaar se geheue. 781 00:37:42,710 --> 00:37:46,560 Daar is 'n probleem is nou, want nou as ek gebruik van geheue in hierdie baie redelike 782 00:37:46,560 --> 00:37:49,910 maar soort van naïewe manier, wat kan jy nie glo onderskei? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 Waar 'n mens begin en waar een eindig, reg? 785 00:37:54,680 --> 00:37:55,860 Hulle is soort van vervaag saam. 786 00:37:55,860 --> 00:37:57,920 >> So dit blyk uit die rekenaar doen dit nie. 787 00:37:57,920 --> 00:38:04,720 Laat my eintlik blaai terug in die tyd 'n paar karakters, en in plaas van Harvard 788 00:38:04,720 --> 00:38:09,570 gaan onmiddellik na die gebruiker se naam, kry die gebruiker eintlik, agter 789 00:38:09,570 --> 00:38:12,000 die skerms, 'n spesiale karakter plaas deur die 790 00:38:12,000 --> 00:38:13,885 rekenaar vir hom of haar. 791 00:38:13,885 --> 00:38:19,470 / 0, andersins bekend as die NuL karakter lastig genoem N-U-L, nie 792 00:38:19,470 --> 00:38:22,190 N-U-L-L, maar jy skryf dit as / 0. 793 00:38:22,190 --> 00:38:27,130 Dis net al nul stukkies is 'n merker in tussen die eerste woord wat die gebruiker se 794 00:38:27,130 --> 00:38:28,290 getik en die tweede. 795 00:38:28,290 --> 00:38:33,020 >> So Harvard eintlik eindig nou op as hierdie volgorde van die karakters 796 00:38:33,020 --> 00:38:36,110 en een meer / 0. 797 00:38:36,110 --> 00:38:41,690 So in ander woorde, deur met hierdie brandwag waardes, agt aangrensende nul 798 00:38:41,690 --> 00:38:45,220 stukkies, kan jy nou begin om te onderskei een karakter van 'n ander. 799 00:38:45,220 --> 00:38:49,720 So al die tyd wat "hallo" is eintlik "hallo" met 'n / 0, en 800 00:38:49,720 --> 00:38:53,580 Intussen is daar dalk baie goed wees nogal 'n bietjie meer geheue 801 00:38:53,580 --> 00:38:56,400 binnekant van die rekenaar. 802 00:38:56,400 --> 00:38:57,810 >> Laat ek 'n ander ding nou. 803 00:38:57,810 --> 00:39:01,800 Dit blyk dat al hierdie blokkies het ons die opstel, is dit, ja, 804 00:39:01,800 --> 00:39:06,140 snare, maar meer algemeen, hierdie dinge is skikkings. 805 00:39:06,140 --> 00:39:10,590 'N skikking is net 'n stuk van die geheue dit is terug na Terug na terug, 806 00:39:10,590 --> 00:39:15,130 en jy gewoonlik gebruik om 'n skikking by wyse Die vierkant hakienotasie. 807 00:39:15,130 --> 00:39:18,210 So ons gaan hierdie nogal 'n bietjie te sien verloop van tyd, maar laat my gaan voort en 808 00:39:18,210 --> 00:39:21,160 oop te maak, kom ons noem dit ouderdomme. 809 00:39:21,160 --> 00:39:23,920 En sien wat ons kan doen met dieselfde truuks, 'n bietjie 810 00:39:23,920 --> 00:39:25,750 bietjie meer hier sintaks. 811 00:39:25,750 --> 00:39:29,270 >> So in lyn 17 van hierdie program - eintlik, ek hardloop die program eerste 812 00:39:29,270 --> 00:39:30,770 sodat ons kan sien wat die ding doen nie. 813 00:39:30,770 --> 00:39:33,530 Laat my noem maak ouderdomme stel hierdie program. 814 00:39:33,530 --> 00:39:34,950 / Ouderdomme.. 815 00:39:34,950 --> 00:39:36,480 Hoeveel mense is in die kamer? 816 00:39:36,480 --> 00:39:38,020 Noem dit drie. 817 00:39:38,020 --> 00:39:39,575 Ouderdom van die eerste persoon? 818 00:39:39,575 --> 00:39:42,710 18, 19, en 20. 819 00:39:42,710 --> 00:39:46,770 En nou ietwat belaglik, ek het net het 'n program wat eeue diegene 820 00:39:46,770 --> 00:39:47,740 drie mense. 821 00:39:47,740 --> 00:39:50,390 >> So is daar duidelik 'n geleentheid vir 'n paar fun rekenkundige hier. 822 00:39:50,390 --> 00:39:51,560 Gelukkig het die wiskunde korrek is. 823 00:39:51,560 --> 00:39:54,720 18 na 19, 19 het tot 20 en so meer. 824 00:39:54,720 --> 00:39:58,510 Maar wat regtig bedoel om te wees illustrasie hier is hoe ons dit stoor 825 00:39:58,510 --> 00:40:00,190 hierdie drie mense se ouderdomme. 826 00:40:00,190 --> 00:40:02,370 Laat my zoem op wat is hier aan die gang. 827 00:40:02,370 --> 00:40:06,240 >> So die eerste, die eerste paar lyne moet word steeds redelik vertroud. 828 00:40:06,240 --> 00:40:08,770 Ek is net waarna die gebruiker vir die aantal mense in die kamer. 829 00:40:08,770 --> 00:40:11,490 Toe ek gebruik kry int en doen terwyl te doen dit weer en weer en weer. 830 00:40:11,490 --> 00:40:15,780 Ons het gesien dat die patroon voor, maar reël 27 is 'n nuwe en eintlik baie 831 00:40:15,780 --> 00:40:18,160 nuttig, en sal word meer nuttig. 832 00:40:18,160 --> 00:40:21,620 Let daarop dat wat anders is in lyn 27 is dat ek blyk te wees verklaar 'n 833 00:40:21,620 --> 00:40:23,960 int genoem ouderdomme, maar wag. 834 00:40:23,960 --> 00:40:27,140 Dit is nie net int ouderdomme. 835 00:40:27,140 --> 00:40:30,130 Daar is hierdie vierkantige hakies, binnekant van wat n. 836 00:40:30,130 --> 00:40:35,150 >> So het die bracket n in hierdie konteks nie binnekant van 'n printf verklaring hier, maar 837 00:40:35,150 --> 00:40:44,370 in hierdie enigste lyn 27, die lyn is sê, gee my 'n ints, wat elk 838 00:40:44,370 --> 00:40:46,080 is van die tipe int. 839 00:40:46,080 --> 00:40:49,870 So dit is 'n emmer, so te sê, van, in hierdie geval, drie heelgetalle terug na 840 00:40:49,870 --> 00:40:52,770 terug na terug sodat ek effektief het drie veranderlikes. 841 00:40:52,770 --> 00:40:54,890 Die alternatief te wees duidelik, sou wees nie. 842 00:40:54,890 --> 00:40:57,400 >> As ek wou die eerste student se ouderdom, kan ek dit doen. 843 00:40:57,400 --> 00:40:59,520 As ek wou die tweede student se ouderdom het ek kan dit doen. 844 00:40:59,520 --> 00:41:01,860 As ek wou die derde student se ouderdom, kan ek dit doen. 845 00:41:01,860 --> 00:41:04,320 En God verbied ons moet almal se ouderdom in hierdie kamer - 846 00:41:04,320 --> 00:41:07,670 Ek bedoel, dit is 'n heck van 'n baie van die kopie, plak weer en weer en weer. 847 00:41:07,670 --> 00:41:10,870 En plus een keer Ek stel hierdie program, As 'n ander student loop in meer uit 848 00:41:10,870 --> 00:41:14,200 van daardie deur, nou my nommer veranderlikes is verkeerd. 849 00:41:14,200 --> 00:41:17,450 >> So, wat is lekker om oor 'n skikking is as Sodra jy begin voel jouself 850 00:41:17,450 --> 00:41:20,190 kopieer en plak, is die kans wat nie die beste benadering. 851 00:41:20,190 --> 00:41:22,240 'N skikking is 'n dinamiese potensieel. 852 00:41:22,240 --> 00:41:24,610 Ek weet nie vooraf hoe baie mense gaan wees in die kamer, 853 00:41:24,610 --> 00:41:28,670 maar ek weet ek moet n van hulle, en ek sal uit te vind n wanneer die tyd kom. 854 00:41:28,670 --> 00:41:35,500 Hierdie lyn van die kode nou beteken, gee my 'n stuk van die geheue wat lyk soos hierdie 855 00:41:35,500 --> 00:41:40,380 waar die aantal bokse op die skerm is heeltemal afhanklik van n wat 856 00:41:40,380 --> 00:41:42,010 die gebruiker getik in 857 00:41:42,010 --> 00:41:44,850 >> So nou die res van hierdie program is eintlik redelik soortgelyk aan wat ons 858 00:41:44,850 --> 00:41:46,860 net gedoen het met die karakters. 859 00:41:46,860 --> 00:41:49,970 Kennisgewing Ek het 'n lus vir begin in lyn 30. 860 00:41:49,970 --> 00:41:54,920 So reg nadat ek die skikking, het ek Itereer van y is gelyk aan nul tot n. 861 00:41:54,920 --> 00:41:58,890 Ek het net hierdie leersame printf boodskap net sê, gee my die ouderdom 862 00:41:58,890 --> 00:42:03,690 van die persoon #% i, so nommer een, nommer twee, nommer drie. 863 00:42:03,690 --> 00:42:04,730 En hoekom het ek dit doen? 864 00:42:04,730 --> 00:42:08,870 Eerlik, mense verkies om te tel van die een op up terwyl die rekenaar wetenskaplikes, 865 00:42:08,870 --> 00:42:09,620 nul up. 866 00:42:09,620 --> 00:42:11,700 rekenaar wetenskaplikes is nie van plan om gebruik hierdie soort van program, so ons is 867 00:42:11,700 --> 00:42:13,990 gaan net begin tel by een soos normale mense. 868 00:42:13,990 --> 00:42:17,630 >> En nou in lyn 33, die effens sien verskillende stuk van sintaksis. 869 00:42:17,630 --> 00:42:23,710 Die i-de ouderdom in daardie veranderlike van tipe skikking gaan 'n int te kry. 870 00:42:23,710 --> 00:42:25,770 En nou laastens, dit is net rekenkundige hier. 871 00:42:25,770 --> 00:42:29,200 Ek het besluit om in 'n aparte lus om te eis 'n tyd verby, en nou in hierdie 872 00:42:29,200 --> 00:42:31,400 afsonderlike lus, hierdie lyne uit te voer. 873 00:42:31,400 --> 00:42:35,810 >> 'N jaar van nou af, persoon wat ek sal wees i jaar oud, maar kennis van hierdie is nie die 874 00:42:35,810 --> 00:42:36,500 veranderlike i. 875 00:42:36,500 --> 00:42:38,390 Dit is nou% i vir int. 876 00:42:38,390 --> 00:42:43,210 En kennis as die eerste plekhouer, ek plug in i plus 1, sodat ons tel soos 'n 877 00:42:43,210 --> 00:42:44,250 normale persoon. 878 00:42:44,250 --> 00:42:49,190 En dan vir die waarde van hul ouderdom, vir i jaar oud, ek neem ouderdomme bracket 879 00:42:49,190 --> 00:42:52,980 Ek - en hoekom doen ek plus een hier? 880 00:42:52,980 --> 00:42:53,760 Hulle het net bejaardes. 881 00:42:53,760 --> 00:42:55,030 Dit is my dom keuse van programme. 882 00:42:55,030 --> 00:42:56,810 Hulle het net tussen die ouderdomme van een jaar. 883 00:42:56,810 --> 00:42:59,770 Ek kan tik in enige getal wat Ek het eintlik daar wil hê nie. 884 00:42:59,770 --> 00:43:02,430 >> So, wat is eintlik al die relevansie hier? 885 00:43:02,430 --> 00:43:07,610 Wel, laat ek eintlik blaai terug hier en verf 'n prentjie 886 00:43:07,610 --> 00:43:10,830 van wat voorlê. 887 00:43:10,830 --> 00:43:15,720 Wat ons sal moet doen met ons volgende Probleem sit twee is rondspeel in die 888 00:43:15,720 --> 00:43:17,070 wêreld van kriptografie. 889 00:43:17,070 --> 00:43:22,500 So dit is 'n string van die karakters, so 'n volgorde van verskeie karakters, en wat 890 00:43:22,500 --> 00:43:23,750 sê dit? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 Dit is nie in die aanlyn-weergawe van die skyfies. 893 00:43:30,600 --> 00:43:35,880 >> So ek beweer dat dit gelyk het, 'n stupid advertensie van baie jare 894 00:43:35,880 --> 00:43:39,950 gelede wat kan eintlik onthou een van sy oorsprong. 895 00:43:39,950 --> 00:43:42,740 So, dit is 'n voorbeeld van enkripsie of kriptografie. 896 00:43:42,740 --> 00:43:46,150 Dit blyk dat as jy wil eintlik stuur inligting of deel 897 00:43:46,150 --> 00:43:49,310 inligting met iemand veilig, soos 'n boodskap soos hierdie, kan jy 898 00:43:49,310 --> 00:43:50,500 klouter die letters. 899 00:43:50,500 --> 00:43:53,170 Maar tipies, die woorde is nie roer lukraak. 900 00:43:53,170 --> 00:43:56,365 Hulle is verschuiving in een of ander manier of verander in een of ander manier sodat - oops. 901 00:43:56,365 --> 00:43:59,040 Dit is 'n prettige spoiler vir die volgende keer. 902 00:43:59,040 --> 00:44:04,390 >> So kan jy die kaart wat is blykbaar O aan B. Let daarop dat lyne 903 00:44:04,390 --> 00:44:05,420 kapitalisasie-wyse. 904 00:44:05,420 --> 00:44:07,960 Blykbaar r word e. 905 00:44:07,960 --> 00:44:14,000 Blykbaar F-H-E-R word S-U-R-E. So dit blyk daar is 'n afbeelding, en in 906 00:44:14,000 --> 00:44:18,720 hierdie geval is daar 'n redelik dom kartering of iemand het gedink dit uit? 907 00:44:18,720 --> 00:44:21,440 Dit is iets wat die naam SC 13, draai 13. 908 00:44:21,440 --> 00:44:24,760 Dit is die domste van enkripsie meganismes, omdat dit letterlik net 909 00:44:24,760 --> 00:44:29,160 voeg 13 aan elkeen van die letters, dom in die sin dat as jy net 910 00:44:29,160 --> 00:44:31,890 het 'n bietjie van die vrye tyd op jou hande en 'n potlood, of jy dink net dit 911 00:44:31,890 --> 00:44:35,260 deur in jou kop, kan jy probeer alle moontlike toevoegings - een, twee, 912 00:44:35,260 --> 00:44:38,470 drie, dot, dot, dot, 25 tot net draai die hele alfabet, en 913 00:44:38,470 --> 00:44:40,860 uiteindelik, sal jy uitvind wat hierdie boodskap is. 914 00:44:40,860 --> 00:44:43,700 So as jy iets soos hierdie in graad skool verby boodskappe aan jou 915 00:44:43,700 --> 00:44:46,830 beste vriend, as jou graad skool onderwyser bloot deur die 916 00:44:46,830 --> 00:44:50,320 boodskap en brute gedwing om die oplossing, jy mag gekry het 917 00:44:50,320 --> 00:44:52,550 'n antwoord deur dit. 918 00:44:52,550 --> 00:44:54,970 >> Nou natuurlik, in die werklike wêreld, kriptografie is meer gesofistikeerd. 919 00:44:54,970 --> 00:45:00,120 Dit is 'n teks uit 'n rekenaar stelsel wat gebruikers en 920 00:45:00,120 --> 00:45:03,630 wagwoorde, soos byna almal van ons doen, en dit is wat jou wagwoord sterkte 921 00:45:03,630 --> 00:45:07,260 lyk as wat gestoor word op jou harde ry, maar in geïnkripteer vorm. 922 00:45:07,260 --> 00:45:11,050 Dit is nie net 'n rotasie van letters, A is B en B is C. Dit is 923 00:45:11,050 --> 00:45:15,620 veel meer gesofistikeerd, maar dit gebruik wat algemeen bekend as geheime sleutel 924 00:45:15,620 --> 00:45:16,690 kriptografie. 925 00:45:16,690 --> 00:45:20,210 Hierdie foto vertel die volgende storie met 'n paar ikone. 926 00:45:20,210 --> 00:45:22,250 >> Aan die linkerkant, ons het wat ons bel plain text. 927 00:45:22,250 --> 00:45:25,420 In die wêreld van kriptografie, plain teks is net die oorspronklike boodskap 928 00:45:25,420 --> 00:45:29,050 geskryf in Engels of Frans of enige taal hoegenaamd nie. 929 00:45:29,050 --> 00:45:32,405 As jy wil om dit te enkripteer, sal ons slaag dit picturaal deur 'n slot, so 930 00:45:32,405 --> 00:45:35,580 sommige van soort algoritme, 'n funksie of program dat iemand geskryf 931 00:45:35,580 --> 00:45:39,880 wat deurmekaar die briewe hopelik meer complicatedly as net die aanbring van 13 932 00:45:39,880 --> 00:45:40,980 aan elkeen van hulle. 933 00:45:40,980 --> 00:45:43,780 >> Wat jy uit dat die proses in die middel is daar genoem word cyphertext. 934 00:45:43,780 --> 00:45:44,850 So soort van 'n sexy woord. 935 00:45:44,850 --> 00:45:47,630 Dit beteken net dit is die geënkripteerde weergawe van die gewone teks. 936 00:45:47,630 --> 00:45:52,570 En net as jy het wat dieselfde geheime, 13 of minus 13, is jy in staat te 937 00:45:52,570 --> 00:45:54,970 decrypt 'n boodskap soos dit. 938 00:45:54,970 --> 00:45:57,770 >> So in Probleem sit twee, een van die dinge wat sal jy doen as in die Hacker 939 00:45:57,770 --> 00:46:01,860 Edition, sal jy 'n kode te skryf aan kraak hierdie wagwoorde, uitzoeken 940 00:46:01,860 --> 00:46:05,170 wat hulle was en hoe hulle geïnkripteer, al doen ons gee jou 'n bietjie 941 00:46:05,170 --> 00:46:06,460 van leiding langs die pad. 942 00:46:06,460 --> 00:46:09,320 In die Standard Edition, stel ons 'n paar van die karakters, enkripsie 943 00:46:09,320 --> 00:46:12,400 meganismes, een genaamd Caesar, een genoem Vigenere, wat nog 944 00:46:12,400 --> 00:46:16,100 rotasie getalle waar 'n raak iets, B raak iets, maar 945 00:46:16,100 --> 00:46:18,820 jy het om dit te doen nie programmaties want daar sal inderdaad 'n geheim 946 00:46:18,820 --> 00:46:22,840 sleutel wat betrokke is wat gewoonlik 'n aantal of 'n navraag wat slegs die 947 00:46:22,840 --> 00:46:26,420 sender en die ontvanger van hierdie boodskappe moet verstaan. 948 00:46:26,420 --> 00:46:28,660 >> Nou, dit het eintlik inkarnasies in die werklike wêreld. 949 00:46:28,660 --> 00:46:32,910 Dit, byvoorbeeld, is klein wees Annie se geheime dekodeerder ring, en jy 950 00:46:32,910 --> 00:46:35,180 eintlik kan implementeer rotasie getalle - 951 00:46:35,180 --> 00:46:37,930 A word iets, B word iets - met 'n paar van die wiele, 952 00:46:37,930 --> 00:46:40,840 een aan die buitekant, een aan die binnekant so dat as jy draai die wiel of 953 00:46:40,840 --> 00:46:44,170 die ring, kan jy eintlik reël om die letters met verskillende letters, 954 00:46:44,170 --> 00:46:45,430 om 'n geheime kode. 955 00:46:45,430 --> 00:46:48,110 En so as die fotonische lewe vir vandag, wat ek gedink ek wil doen, is om 'n bietjie van 956 00:46:48,110 --> 00:46:52,170 throwback dat as jy draai op die TV op 24 Desember, kan jy kyk na die 957 00:46:52,170 --> 00:46:55,390 movie ad nauseum vir 24 uur in 'n ry. 958 00:46:55,390 --> 00:47:06,030 Maar vir vandag, sal ek dit oopmaak hier en gee ons net twee minute van 'n 959 00:47:06,030 --> 00:47:13,493 pedagogies betrokke Christmas Story met 'n bietjie mede vernoem Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [Video speel] 961 00:47:14,400 --> 00:47:17,420 >> -Laat dit bekend aan alles en almal wat Ralph Parker word benoem 962 00:47:17,420 --> 00:47:20,650 lid van die Little Orphan Annie geheime sirkel en die reg tot al 963 00:47:20,650 --> 00:47:23,460 die eer en voordele voorkom daartoe. 964 00:47:23,460 --> 00:47:25,990 >> Onderteken, Little Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Onderteken, Pierre André in ink. 966 00:47:30,100 --> 00:47:34,270 Honneurs-en voordele wat reeds op die ouderdom van nege. 967 00:47:34,270 --> 00:47:39,440 >> [Skree op Radio] 968 00:47:39,440 --> 00:47:40,770 >> Kom, laat ons kry op met dit. 969 00:47:40,770 --> 00:47:44,965 Ek hoef nie al daardie jazz oor smokkelaars en Pirates. 970 00:47:44,965 --> 00:47:48,270 >> -Luister môreaand vir die sluiting avontuur van die swart 971 00:47:48,270 --> 00:47:49,650 seerower skip. 972 00:47:49,650 --> 00:47:53,320 Nou, dit is tyd vir Annie's Secret Boodskap vir u lede 973 00:47:53,320 --> 00:47:55,720 van die geheime sirkel. 974 00:47:55,720 --> 00:47:56,580 Onthou, kinders. 975 00:47:56,580 --> 00:48:01,720 Slegs lede van Annie's Secret Circle kan ontsyfer Annie se geheime boodskap. 976 00:48:01,720 --> 00:48:05,872 Onthou, Annie, afhangende van jou. 977 00:48:05,872 --> 00:48:08,670 Stel jou penne te B2. 978 00:48:08,670 --> 00:48:11,000 Hier is die boodskap. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Ek is in my eerste geheime vergadering. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre was in groot stem vanaand. 983 00:48:21,650 --> 00:48:24,830 Ek kan jou vertel dat vanaand se boodskap was werklik belangrik is. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25. 985 00:48:26,400 --> 00:48:28,540 Dit is 'n boodskap van Annie haarself. 986 00:48:28,540 --> 00:48:30,086 Onthou, vertel nie vir enigiemand. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Sekondes later, is ek in die enigste kamer in die huis waar 'n seuntjie van nege 989 00:48:38,710 --> 00:48:42,668 kon sit in privaatheid en dekodeer. 990 00:48:42,668 --> 00:48:47,628 Ha, B. Ek het na die volgende. 991 00:48:47,628 --> 00:48:53,060 E. Die eerste woord is "wees." S. Dit is makliker kom nou. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 Dit is R. 994 00:48:55,940 --> 00:48:56,900 >> -Kom, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Ek moet gaan. 996 00:48:57,860 --> 00:48:59,780 >> -I'll regs af wees, Ma. 997 00:48:59,780 --> 00:49:01,030 Gee gefluit. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Maak seker om te. 1000 00:49:08,220 --> 00:49:09,500 Maak seker dat jy wat? 1001 00:49:09,500 --> 00:49:11,660 Wat was Little Orphan Annie probeer om te sê? 1002 00:49:11,660 --> 00:49:12,844 Maak seker dat jy wat? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie het Randy het om te gaan. 1004 00:49:14,732 --> 00:49:16,148 Sal jy asseblief kom? 1005 00:49:16,148 --> 00:49:17,092 >> -Alle reg, Ma. 1006 00:49:17,092 --> 00:49:18,510 Ek kom gou uit wees. 1007 00:49:18,510 --> 00:49:20,270 >> -Ek is besig om nader te nou. 1008 00:49:20,270 --> 00:49:21,823 Die spanning was verskriklik. 1009 00:49:21,823 --> 00:49:23,045 Wat was dit? 1010 00:49:23,045 --> 00:49:26,510 Die lot van die planeet kan hang in die weegskaal. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, Randy's moet gaan. 1012 00:49:28,985 --> 00:49:32,680 >> -I'll reg uit te wees vir huil hardop. 1013 00:49:32,680 --> 00:49:33,956 >> -Amper daar. 1014 00:49:33,956 --> 00:49:35,140 My vingers vlieg. 1015 00:49:35,140 --> 00:49:36,880 My gedagte was 'n staal trap. 1016 00:49:36,880 --> 00:49:38,010 Elke porie vibreer. 1017 00:49:38,010 --> 00:49:39,878 Dit was amper duidelik. 1018 00:49:39,878 --> 00:49:43,210 Ja, ja, ja, ja, ja. 1019 00:49:43,210 --> 00:49:49,030 >> -Maak seker dat jou Ovaltine te drink. 1020 00:49:49,030 --> 00:49:50,280 Ovaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 'N morsige kommersiële? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Die seun van 'n teef. 1025 00:50:00,694 --> 00:50:01,900 >> [Einde video-vertoning] 1026 00:50:01,900 --> 00:50:04,260 >> Spreker 1: Dit is CS50, en dat sal Probleem sit twee wees. 1027 00:50:04,260 --> 00:50:06,305 Sien julle volgende week. 1028 00:50:06,305 --> 00:50:08,800 >> Spreker 2: By die volgende CS50, dit gebeur. 1029 00:50:08,800 --> 00:50:11,060 >> Spreker 1: So een onderwerp ons het nie gekyk na dusver is 1030 00:50:11,060 --> 00:50:12,220 wat van die funksie wysers. 1031 00:50:12,220 --> 00:50:14,540 Nou, 'n funksie wyser is net die adres van 'n openbare 1032 00:50:14,540 --> 00:50:17,000 funksie nie, maar baie soos - 1033 00:50:17,000 --> 00:50:18,250 seun van 'n - 1034 00:50:18,250 --> 00:50:19,670