1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [Speel van musiek] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> David J. MALAN: Goed, dit is CS50. 5 00:00:16,240 --> 00:00:18,010 En dit is week een. 6 00:00:18,010 --> 00:00:22,050 So onthou dat dit die laaste keer in week nul, Ons fokus op Rekenaardenke. 7 00:00:22,050 --> 00:00:25,440 En ons transitioned van wat om Kras, 'n grafiese programmering 8 00:00:25,440 --> 00:00:27,360 taal van ons vriende by MIT se Media Lab. 9 00:00:27,360 --> 00:00:31,730 >> En met nuuts af, het ons ontdek idees soos funksies, en toestande, 10 00:00:31,730 --> 00:00:35,210 en loops, en veranderlikes, en selfs gebeure, en drade, en nog baie meer. 11 00:00:35,210 --> 00:00:37,880 En vandag, ons gaan voortgaan om daardie idees, 12 00:00:37,880 --> 00:00:40,630 en regtig om hulle vir toegestaan, maar vertaal 13 00:00:40,630 --> 00:00:44,220 na 'n ander taal bekend as C. Nou, C is 'n meer tradisionele taal. 14 00:00:44,220 --> 00:00:46,020 Dit is 'n laer vlak taal, as jy wil. 15 00:00:46,020 --> 00:00:47,300 >> Dit is suiwer tekstuele. 16 00:00:47,300 --> 00:00:49,910 En so met die eerste oogopslag, dit is al gaan eerder kriptiese om te kyk 17 00:00:49,910 --> 00:00:51,430 As jy nog nooit voorheen geprogrammeer. 18 00:00:51,430 --> 00:00:53,530 Ons gaan hê semi-dubbele punte, en tussen hakies, 19 00:00:53,530 --> 00:00:55,150 en krullerige draadjies, en nog baie meer. 20 00:00:55,150 --> 00:00:57,240 Maar besef dat selfs al die sintaksis is 21 00:00:57,240 --> 00:01:00,600 oor 'n bietjie kyk onbekende om die meeste van julle, sien verby dat. 22 00:01:00,600 --> 00:01:03,220 En probeer om die idees te sien wat inderdaad bekend, 23 00:01:03,220 --> 00:01:06,750 want hier in week een wat ons sal begin om te doen is om te vergelyk, 24 00:01:06,750 --> 00:01:08,980 aanvanklik, kras teenoor C. 25 00:01:08,980 --> 00:01:12,350 >> So, byvoorbeeld, onthou dat wanneer ons geïmplementeer om die eerste van ons programme 26 00:01:12,350 --> 00:01:16,220 laaste keer, het ons 'n blok wat lyk 'n bietjie iets soos this-- toe 27 00:01:16,220 --> 00:01:19,990 groen vlag gekliek, en dan het ons een of meer stukke van die legkaart onder dit, 28 00:01:19,990 --> 00:01:22,150 in hierdie geval, sê hello world. 29 00:01:22,150 --> 00:01:24,870 So, inderdaad, in Scratch, toe ek op daardie groen vlag 30 00:01:24,870 --> 00:01:27,390 om my te laat loop, sodat te praat, dit is 31 00:01:27,390 --> 00:01:29,520 die blokke wat kry uitgevoer word, of hardloop. 32 00:01:29,520 --> 00:01:32,230 En spesifiek Scratch sê hallo, wêreld. 33 00:01:32,230 --> 00:01:35,377 >> Nou, ek kon vermeld verskillende woorde hier. 34 00:01:35,377 --> 00:01:37,960 Maar ons sal sien dat, wel, baie van hierdie blocks-- en inderdaad, 35 00:01:37,960 --> 00:01:41,880 in C baie functions-- kan wees parametrized of persoonlike 36 00:01:41,880 --> 00:01:43,150 om verskillende dinge te doen. 37 00:01:43,150 --> 00:01:45,520 Trouens, in C as ons wil omskep, nou, 38 00:01:45,520 --> 00:01:47,567 hierdie Scratch-program hierdie ander taal, 39 00:01:47,567 --> 00:01:49,650 ons gaan 'n skrywe bietjie so iets. 40 00:01:49,650 --> 00:01:52,540 >> Toegegee, daar is 'n paar onbekende sintaksis daar heel waarskynlik, int, 41 00:01:52,540 --> 00:01:54,380 en hakies en leeg. 42 00:01:54,380 --> 00:01:57,740 Maar printf-- selfs al is jy sou dink dit sal net druk wees. 43 00:01:57,740 --> 00:02:00,120 Maar druk beteken druk formaat, soos ons binnekort sal sien. 44 00:02:00,120 --> 00:02:02,140 Dit sal letterlik druk om die skerm wat ook al 45 00:02:02,140 --> 00:02:05,990 is binnekant van die hakies, wat natuurlik in hierdie geval is, hello world. 46 00:02:05,990 --> 00:02:09,290 >> Maar jy sal sien 'n paar ander sintaksis, sommige dubbele aanhalingstekens, 47 00:02:09,290 --> 00:02:11,890 dat die hakies aan die einde, die semi-kolon en dies meer. 48 00:02:11,890 --> 00:02:15,027 Daar is dus 'n bietjie van oorhoofse, so te sê, beide kognitief 49 00:02:15,027 --> 00:02:17,860 en sintakties, dat ons gaan om te onthou voor lank. 50 00:02:17,860 --> 00:02:20,720 Maar besef dat met die praktyk, dit sal begin om uit te spring op jou. 51 00:02:20,720 --> 00:02:24,920 >> Trouens, kom ons fokus op wat 'n mens funksie specifically-- in hierdie geval, 52 00:02:24,920 --> 00:02:26,290 sê hallo wêreld. 53 00:02:26,290 --> 00:02:27,560 So sê die funksie. 54 00:02:27,560 --> 00:02:31,320 Hello world is sy parameter, of argument, sy aanpassing. 55 00:02:31,320 --> 00:02:34,320 >> En die ekwivalensie in C is net gaan hier 'n reël wees, 56 00:02:34,320 --> 00:02:38,710 waar printf is gelykstaande aan, sê, die dubbele aangehaal string, hello 57 00:02:38,710 --> 00:02:41,470 wêreld is ekwivalent, natuurlik, na wat in die wit blokkie daar. 58 00:02:41,470 --> 00:02:45,680 En die agteroorskuinsstreep N, al is 'n bietjie vreemde en afwesig is van nuuts af, 59 00:02:45,680 --> 00:02:49,380 eenvoudig gaan die uitwerking Ons sal sien in 'n rekenaar, soos my Mac of 'n rekenaar, 60 00:02:49,380 --> 00:02:51,660 van net die verskuiwing van die wyser na die volgende lyn. 61 00:02:51,660 --> 00:02:53,970 Dit is soos die slaan Tik op jou sleutelbord. 62 00:02:53,970 --> 00:02:55,580 >> So ons sal sien dat weer kort voor lank. 63 00:02:55,580 --> 00:02:58,640 Maar eers, laat ons 'n blik op hierdie ander voorbeeld in die geval van lusse. 64 00:02:58,640 --> 00:03:02,830 Ons het dit vir ewig lus laaste keer, wat was 'n reeks van die legkaart stukke 65 00:03:02,830 --> 00:03:05,490 dat daar iets gedoen letterlik forever-- in hierdie geval, 66 00:03:05,490 --> 00:03:08,360 sê hello world, hello world, Hello World, hello world. 67 00:03:08,360 --> 00:03:10,350 Dit is dus 'n oneindige lus deur ontwerp. 68 00:03:10,350 --> 00:03:14,580 >> In C, as ons wil om dit te implementeer Dieselfde idee, ons kan eenvoudig dit doen. 69 00:03:14,580 --> 00:03:19,570 Terwyl ware, printf hallo world-- nou terwyl net semanties, soort 70 00:03:19,570 --> 00:03:23,090 roep die idee om dit te doen weer iets, en weer, en weer, 71 00:03:23,090 --> 00:03:23,980 en vir hoe lank? 72 00:03:23,980 --> 00:03:27,990 Wel, true-- onthou dat ware net op of een. 73 00:03:27,990 --> 00:03:30,660 >> En waar is, natuurlik, altyd waar nie. 74 00:03:30,660 --> 00:03:33,060 So dit is soort van 'n sinlose verklaring net sê waar nie. 75 00:03:33,060 --> 00:03:36,890 Maar ja, dit is doelbewuste, want as ware is net altyd waar, 76 00:03:36,890 --> 00:03:40,850 as terwyl ware net impliseer, As 'n bietjie indirek, 77 00:03:40,850 --> 00:03:44,070 dat die volgende reëls van die kode tussen diegene krullerige draadjies 78 00:03:44,070 --> 00:03:48,320 moet net weer en weer uit te voer, en weer, en nooit werklik stop. 79 00:03:48,320 --> 00:03:50,230 >> Maar as jy wil hê dat jou lus om op te hou, soos ons 80 00:03:50,230 --> 00:03:54,500 het die vorige keer met iets soos hierdie, herhaal die volgende 50 keer, 81 00:03:54,500 --> 00:03:57,700 in C kan ons dieselfde met wat ons doen bekend as 'n vir loop-- die navraag 82 00:03:57,700 --> 00:03:59,330 nie terwyl, maar vir. 83 00:03:59,330 --> 00:04:03,290 En dan het ons 'n paar nuwe sintaksis hier, met int i gelyk 0, ek minder as 50, 84 00:04:03,290 --> 00:04:03,880 I ++. 85 00:04:03,880 --> 00:04:05,430 En ons sal terug kom. 86 00:04:05,430 --> 00:04:09,660 Maar dit is net hoe ons sou vertaal die stel van Scratch blokke 87 00:04:09,660 --> 00:04:13,079 om 'n stel van C reëls van die kode. 88 00:04:13,079 --> 00:04:14,450 >> Intussen oorweeg veranderlikes. 89 00:04:14,450 --> 00:04:16,540 En, in werklikheid, het ons net sien 'n mens 'n oomblik gelede. 90 00:04:16,540 --> 00:04:21,220 En in die geval van nuuts af, as ons wou 'n veranderlike genaamd Ek verklaar 91 00:04:21,220 --> 00:04:24,590 want ek word heelgetal, net 'n nommer, en ons wil om dit te stel om 'n bietjie waarde, 92 00:04:24,590 --> 00:04:28,410 Ons sal hierdie oranje gebruik blok here-- I by 0. 93 00:04:28,410 --> 00:04:30,800 >> En ons sal sien vandag en buite, net soos verlede week, 94 00:04:30,800 --> 00:04:33,850 programmeerders doen byna altyd begin tel van nul, regtig 95 00:04:33,850 --> 00:04:34,950 deur konvensie. 96 00:04:34,950 --> 00:04:37,250 Maar ook omdat herroeping van Die bespreking van binêre, 97 00:04:37,250 --> 00:04:39,990 die kleinste getal wat jy kan verteenwoordig met enige aantal bisse 98 00:04:39,990 --> 00:04:41,640 is net gaan om te wees 0 self. 99 00:04:41,640 --> 00:04:45,190 En so sal ons oor die algemeen begin inisialisering selfs ons veranderlikes tot 0. 100 00:04:45,190 --> 00:04:47,710 >> En in C om dieselfde te doen, ons gaan int sê 101 00:04:47,710 --> 00:04:50,110 vir heelgetal, ek het net deur konvensie. 102 00:04:50,110 --> 00:04:53,390 Ek kon hierdie veranderlike genoem enigiets wat ek wil, net soos in Scratch. 103 00:04:53,390 --> 00:04:57,770 En dan is gelyk aan 0 net regverkrygendes die waarde 0 van regs 104 00:04:57,770 --> 00:05:01,319 en sit dit in die veranderlike, of die stoor houer daar, aan die linkerkant. 105 00:05:01,319 --> 00:05:04,360 En die semi-kolon as ons sal see-- en Ons het 'n paar van hierdie already-- gesien 106 00:05:04,360 --> 00:05:06,530 net beteken einde van denke. 107 00:05:06,530 --> 00:05:09,430 Gaan voort om iets anders te doen op die lyne wat volg. 108 00:05:09,430 --> 00:05:11,330 >> Nou, wat van Boolse uitdrukkings? 109 00:05:11,330 --> 00:05:14,320 Onthou dat in Scratch, Dit was uitdrukkings 110 00:05:14,320 --> 00:05:16,740 wat óf ware of false-- vrae, 111 00:05:16,740 --> 00:05:18,910 regtig, wat is waar of vals is. 112 00:05:18,910 --> 00:05:21,960 So in die geval van nuuts af, het ons dalk vra 'n eenvoudige vraag soos hierdie, 113 00:05:21,960 --> 00:05:24,586 is ek minder as 50? 114 00:05:24,586 --> 00:05:25,710 So ek, weer, is 'n heelgetal. 115 00:05:25,710 --> 00:05:27,210 Miskien is ons gebruik dit in 'n skrapie program 116 00:05:27,210 --> 00:05:29,310 om tred te hou van 'n telling of iets soos dit. 117 00:05:29,310 --> 00:05:33,810 So hierdie sintaksis hier in Scratch net beteken, is ek minder as 50? 118 00:05:33,810 --> 00:05:37,330 Wel, gelukkig, iets eenvoudig in C. En om te vertaal, 119 00:05:37,330 --> 00:05:41,780 hierdie ons sou net sê ek minder as 50, met behulp van die bekende sleutel 120 00:05:41,780 --> 00:05:42,850 op u sleutelbord. 121 00:05:42,850 --> 00:05:45,141 >> Intussen, as jy wou sê iets meer algemeen, 122 00:05:45,141 --> 00:05:49,890 soos, wel, is x minder as y waar elke van x en y is self veranderlikes? 123 00:05:49,890 --> 00:05:52,280 Ons kan dieselfde ding doen in C, so lank as wat ons het 124 00:05:52,280 --> 00:05:53,942 geskep hierdie veranderlikes reeds. 125 00:05:53,942 --> 00:05:55,650 En ons sal sien hoe om doen wat kort voor lank. 126 00:05:55,650 --> 00:05:58,590 Ons wil net sê x minder as y. 127 00:05:58,590 --> 00:06:00,530 >> So jy begin sien 'n paar ooreenkomste. 128 00:06:00,530 --> 00:06:03,490 En dié mense wat gemaak Kras was beslis 129 00:06:03,490 --> 00:06:05,250 geïnspireer deur 'n paar van hierdie basiese idees. 130 00:06:05,250 --> 00:06:10,350 En jy sal hierdie soort van sien sintaksis in baie languages-- 131 00:06:10,350 --> 00:06:12,160 nie net nuuts af, nie net C, maar Python, 132 00:06:12,160 --> 00:06:14,790 en JavaScript, en ander tale steeds. 133 00:06:14,790 --> 00:06:18,270 >> Kom ons kyk na 'n ander konstruk uit C, die idee van 'n toestand, 134 00:06:18,270 --> 00:06:20,370 om iets te doen voorwaardelik. 135 00:06:20,370 --> 00:06:22,720 As daar iets is waar, doen dit. 136 00:06:22,720 --> 00:06:24,457 As iets anders is waar, dit doen. 137 00:06:24,457 --> 00:06:27,040 Dit is soort van die ontwikkeling ekwivalent van 'n vurk in die pad. 138 00:06:27,040 --> 00:06:29,730 Miskien is dit 'n tweerigting-vurk, 'n drie-manier vurk, of meer. 139 00:06:29,730 --> 00:06:32,800 En in Scratch, kan ons ' gesien iets soos hierdie. 140 00:06:32,800 --> 00:06:34,010 >> So hierdie een is 'n groot een. 141 00:06:34,010 --> 00:06:36,750 Maar kyk na die relatiewe eenvoud van die logika. 142 00:06:36,750 --> 00:06:44,010 As x minder as y is, dan sê x is minder as y, anders as x groter as y, 143 00:06:44,010 --> 00:06:46,230 dan sê x groter as y. 144 00:06:46,230 --> 00:06:48,300 En dan, logies, as jy dink terug te krap 145 00:06:48,300 --> 00:06:52,610 of net jou eie menslike intuïsie, Wel, as x is nie groter as y en x 146 00:06:52,610 --> 00:06:57,000 is nie minder nie as y, dan natuurlik x gaan gelyk aan y wees. 147 00:06:57,000 --> 00:06:59,690 So in hierdie geval, deur nes diegene Scratch blokke, 148 00:06:59,690 --> 00:07:02,580 kan ons bereik 'n drie manier vurk in die pad? 149 00:07:02,580 --> 00:07:04,980 >> Intussen, as ons wil doen wat in C, dit waarskynlik 150 00:07:04,980 --> 00:07:08,420 lyk 'n bietjie simpler-- ten minste sodra jy vertroud is met die sintaksis. 151 00:07:08,420 --> 00:07:12,050 As x is minder as y, printf x is minder as y. 152 00:07:12,050 --> 00:07:16,140 Anders as x groter as y, printf x groter as y. 153 00:07:16,140 --> 00:07:21,210 Anders printf x is gelyk aan y-- en, weer met dié agteroorskuinsstreep eindig net 154 00:07:21,210 --> 00:07:24,160 vir diegene wat nuut lyne sodat as jy eintlik het hierdie soort van program 155 00:07:24,160 --> 00:07:25,940 Dit sou net te beweeg jou muis uiteindelik 156 00:07:25,940 --> 00:07:28,100 na die volgende lyn van die skerm. 157 00:07:28,100 --> 00:07:31,270 >> Nou, intussen Scratch het ander meer gevorderde funksies, net 158 00:07:31,270 --> 00:07:34,320 waarvan sommige ons gaan aanvanklik oor te skuif na die wêreld van C. 159 00:07:34,320 --> 00:07:37,010 En een van hulle was bekend as 'n lys in te krap. 160 00:07:37,010 --> 00:07:39,100 En dit was 'n spesiale tipe veranderlike wat 161 00:07:39,100 --> 00:07:42,840 toegelaat dat jy verskeie dinge te stoor daarin terug, na agter, om terug te ondersteun. 162 00:07:42,840 --> 00:07:45,540 >> In C, beteken dit nie lyste, per se nie, maar iets 163 00:07:45,540 --> 00:07:48,090 wat meer algemeen is genoem skikkings, hoewel ons sal 164 00:07:48,090 --> 00:07:50,590 terug te kom later hierdie semester om te kyk na iets 165 00:07:50,590 --> 00:07:52,780 bekend as 'n lys, of eintlik 'n geskakelde lys. 166 00:07:52,780 --> 00:07:55,510 Maar vir nou, die naaste ekwivalent in C vir ons 167 00:07:55,510 --> 00:07:57,345 gaan iets wees genoem 'n skikking. 168 00:07:57,345 --> 00:07:59,740 En 'n verskeidenheid is bloot 'n spesiale tipe veranderlike 169 00:07:59,740 --> 00:08:03,160 wat jou toelaat om data te stoor terug, na agter, na agter, om terug te. 170 00:08:03,160 --> 00:08:05,840 >> En, inderdaad, in Scratch, As ons wou toegang 171 00:08:05,840 --> 00:08:09,030 die eerste element van 'n skikking of 'n list-- en ek gaan om dit te noem, 172 00:08:09,030 --> 00:08:13,600 deur konvensie, argv, argument vektor, maar meer oor dit kort voor lank. 173 00:08:13,600 --> 00:08:17,090 As ek wil by die eerste element te kry van argv, in die wêreld van Scratch 174 00:08:17,090 --> 00:08:20,930 jy eintlik doen tipies begin tel van 1. 175 00:08:20,930 --> 00:08:22,850 >> En so het ek kan kry item 1 van argv. 176 00:08:22,850 --> 00:08:26,310 Dit is net hoe MIT geïmplementeer die idee van lyste. 177 00:08:26,310 --> 00:08:29,860 Maar in C, ek gaan meer eenvoudig net sê, argv, 178 00:08:29,860 --> 00:08:32,758 wat weer is die naam van my list-- of duidelik te wees, 'n skikking. 179 00:08:32,758 --> 00:08:34,549 En as ek wil die eerste elemente, ek gaan 180 00:08:34,549 --> 00:08:37,890 om vierkantige hakies gebruik, wat jy dalk nie dikwels gebruik onder 'n sleutelbord. 181 00:08:37,890 --> 00:08:40,150 >> Maar 0 net beteken, kry vir my die eerste. 182 00:08:40,150 --> 00:08:42,160 So by geleentheid en as verloop van tyd, ons gaan 183 00:08:42,160 --> 00:08:44,570 om te begin om hierdie digotomieë sien tussen Scratch en C, 184 00:08:44,570 --> 00:08:46,070 waardeur Scratch gebruik een. 185 00:08:46,070 --> 00:08:47,670 Ons in C gebruik 0 hier. 186 00:08:47,670 --> 00:08:49,420 Maar jy sal gou sien Sodra jy verstaan 187 00:08:49,420 --> 00:08:52,920 die fondamente van elke taal, wat hierdie dinge begin al hoe meer kry 188 00:08:52,920 --> 00:08:56,860 vertroud deur oefening en praktyk. 189 00:08:56,860 --> 00:08:59,700 >> So laat ons eintlik nou kyk na 'n program. 190 00:08:59,700 --> 00:09:04,031 Hier sal die eerste van ons C bron-kode vir volledige programme. 191 00:09:04,031 --> 00:09:06,280 En die program gaan ons aan te bied vir oorweging 192 00:09:06,280 --> 00:09:09,340 is die een wat ekwivalent om dit vroeër Scratch stuk. 193 00:09:09,340 --> 00:09:13,210 >> So hier het ons wat waarskynlik die eenvoudigste C program 194 00:09:13,210 --> 00:09:15,410 jy kan skryf wat eintlik nie iets. 195 00:09:15,410 --> 00:09:18,250 Nou, sal ons kyk verby, vir nou, het in te sluit, 196 00:09:18,250 --> 00:09:21,190 standaard io.h, en hierdie hoek hakies, en int en leeg, 197 00:09:21,190 --> 00:09:22,840 en die krullerige draadjies, en dies meer. 198 00:09:22,840 --> 00:09:25,390 >> En laat ons net fokus op wat, ten minste intuïtief, 199 00:09:25,390 --> 00:09:26,860 dalk uit reeds spring op jou. 200 00:09:26,860 --> 00:09:30,300 Trouens, hoof, doen ek nie, noodwendig weet wat dit is, 201 00:09:30,300 --> 00:09:34,580 maar baie soos Scratch het dat wanneer groen vlag gekliek legkaart stuk, 202 00:09:34,580 --> 00:09:39,070 so ook C as 'n programmeertaal 'n hoof stuk kode wat 203 00:09:39,070 --> 00:09:43,380 sal uitgevoer word by verstek. En, inderdaad, dit letterlik gaan belangrikste genoem te word nie. 204 00:09:43,380 --> 00:09:44,720 >> So belangrikste is 'n funksie. 205 00:09:44,720 --> 00:09:48,720 En dit is 'n spesiale funksie wat bestaan in C dat wanneer jy 'n program uit te voer, 206 00:09:48,720 --> 00:09:52,720 Dit is hoof wat kry wat deur verstek. In die wêreld van nuuts af, 207 00:09:52,720 --> 00:09:56,970 Dit was gewoonlik wanneer groen vlag gekliek dat het gelei deur verstek. 208 00:09:56,970 --> 00:10:01,130 >> Intussen het ons gesien voor, printf of gedrukte formaat, dit is 209 00:10:01,130 --> 00:10:05,620 gaan 'n funksie wat kom met wees C, saam met 'n hele klomp van die ander, 210 00:10:05,620 --> 00:10:10,140 wat sal dan van tyd en tyd weer, ten einde presies te doen 211 00:10:10,140 --> 00:10:12,450 soos sy naam suggereer, druk iets. 212 00:10:12,450 --> 00:10:13,500 Wat doen ons wil druk? 213 00:10:13,500 --> 00:10:15,770 Wel, sal ons sien dat deur omringende karakters 214 00:10:15,770 --> 00:10:18,680 soos these-- hello world, agteroorskuinsstreep N dubbele aanhalingstekens, 215 00:10:18,680 --> 00:10:23,040 Ons kan printf presies vertel wat om te druk op die skerm. 216 00:10:23,040 --> 00:10:26,430 >> Maar om te doen dat ons ongelukkig 217 00:10:26,430 --> 00:10:30,010 nodig het om iets wat neem reeds kriptiese om ons mense, 218 00:10:30,010 --> 00:10:34,510 maar ten minste is dit 'n bietjie readable-- skerp sluit, standaard io.h, int, 219 00:10:34,510 --> 00:10:39,340 hoof, leemte, printf, al die magiese inkantasies ons sien net op die skerm. 220 00:10:39,340 --> 00:10:42,470 Maar ons het eintlik aan gaan nog meer arcane. 221 00:10:42,470 --> 00:10:47,140 Eerstens moet ons die kode te vertaal dat ons skryf in masjienkode. 222 00:10:47,140 --> 00:10:51,370 En onthou van verlede week dat masjiene, ten minste die wat ons hier ken, 223 00:10:51,370 --> 00:10:54,450 aan die einde van die dag net verstaan ​​nulle en ene. 224 00:10:54,450 --> 00:10:58,100 >> En my God, as ons moes hierdie skrywe nulle en ene om werklik program, 225 00:10:58,100 --> 00:11:01,260 Dit sou baie, baie vinnig neem die pret uit niks. 226 00:11:01,260 --> 00:11:05,150 Maar dit blyk, per verlede week, dat hierdie patrone van nulle en ene 227 00:11:05,150 --> 00:11:06,400 net het 'n spesiale betekenis. 228 00:11:06,400 --> 00:11:08,500 In sekere kontekste, hulle kan beteken getalle. 229 00:11:08,500 --> 00:11:11,840 >> In sommige kontekste, kan dit beteken briewe, of kleure, of enige aantal 230 00:11:11,840 --> 00:11:14,710 van ander abstraksies daar op. 231 00:11:14,710 --> 00:11:18,450 Maar net soos jou rekenaar het 'n CPU, sentrale verwerkingseenheid, 232 00:11:18,450 --> 00:11:20,390 of die brein binnekant van jou rekenaar. 233 00:11:20,390 --> 00:11:22,240 Dit is gewoonlik Intel binnekant, want dit is 234 00:11:22,240 --> 00:11:24,900 een van die grootste maatskappye dit maak CPUs vir rekenaars. 235 00:11:24,900 --> 00:11:28,910 >> Wel, Intel CPU en ander eenvoudig besluit by voorbaat 236 00:11:28,910 --> 00:11:33,970 dat sekere patrone van nulle en kinders sal spesifieke dinge beteken. 237 00:11:33,970 --> 00:11:37,040 Sekere patrone van nulle en ene sal beteken, druk dit na die skerm, 238 00:11:37,040 --> 00:11:39,710 of voeg hierdie twee getalle, of trek die twee getalle, 239 00:11:39,710 --> 00:11:43,310 of beweeg hierdie stuk van data uit geheue my rekenaar se hier, 240 00:11:43,310 --> 00:11:47,870 of enige aantal ander baie lae vlak, maar uiteindelik nuttig, bedrywighede. 241 00:11:47,870 --> 00:11:53,022 Maar, gelukkig, ons mense is nie van plan nodig om hierdie vlak van detail te ken nie. 242 00:11:53,022 --> 00:11:56,230 Inderdaad, net soos die vorige keer, waar ons onttrek weer, en weer, en weer, 243 00:11:56,230 --> 00:11:58,930 gebou van 'n baie lae vlak primitiewes soos nulle en ene 244 00:11:58,930 --> 00:12:01,160 om 'n hoër vlak konsepte soos getalle en letters, 245 00:12:01,160 --> 00:12:04,330 en kleure, en nog baie meer, so kan ons as programmeerders 246 00:12:04,330 --> 00:12:07,080 staan ​​op die skouers van ander wat voor ons gekom het 247 00:12:07,080 --> 00:12:11,260 en gebruik sagteware wat ander mense het voor us-- geskryf 248 00:12:11,260 --> 00:12:14,340 naamlik programme genoem opstellers. 249 00:12:14,340 --> 00:12:17,770 >> C is 'n taal wat word gewoonlik saamgestel, 250 00:12:17,770 --> 00:12:22,130 wat beteken bekering uit bronkode te masjienkode. 251 00:12:22,130 --> 00:12:25,230 In die besonder, wat dit beteken is dat as jy jou bron het 252 00:12:25,230 --> 00:12:29,530 kode wat jy jouself skryf, soos ons gou sal in 'n oomblik op die skerm, 253 00:12:29,530 --> 00:12:33,140 en jy wil om dit te omskep uiteindelik masjien code-- 254 00:12:33,140 --> 00:12:37,100 diegene nulle en ene wat net jou Mac of jou rekenaar 255 00:12:37,100 --> 00:12:41,230 understands-- jy het 'n eerste voed dat bronkode as 256 00:12:41,230 --> 00:12:46,340 insette om 'n spesiale program genaamd 'n samesteller, 257 00:12:46,340 --> 00:12:48,974 die opbrengs van wat ons sien is masjienkode. 258 00:12:48,974 --> 00:12:51,890 En, inderdaad, die laaste keer wat ons gepraat oor, regtig, aan die einde van die dag, 259 00:12:51,890 --> 00:12:52,610 probleemoplossing. 260 00:12:52,610 --> 00:12:53,360 Jy het insette. 261 00:12:53,360 --> 00:12:54,318 En jy het uitgange. 262 00:12:54,318 --> 00:12:56,560 En jy het 'n soort het van algoritme in die middel. 263 00:12:56,560 --> 00:12:59,830 >> Algoritmes kan sekerlik wees geïmplementeer in sagteware, 264 00:12:59,830 --> 00:13:02,900 soos ons gesien het met pseudokode verlede week en as ons sien met werklike kode 265 00:13:02,900 --> 00:13:03,490 hierdie week. 266 00:13:03,490 --> 00:13:06,430 En so 'n samesteller eintlik net het 'n stel van algoritmes binnekant 267 00:13:06,430 --> 00:13:10,060 daarvan dat weet hoe om omskep die spesiale sleutelwoorde, 268 00:13:10,060 --> 00:13:12,180 soos belangrikste, en printf, en ander wat ons net 269 00:13:12,180 --> 00:13:17,620 sien in die patrone van nulle en Diegene wat Intel binne en ander CPUs 270 00:13:17,620 --> 00:13:20,020 eintlik verstaan. 271 00:13:20,020 --> 00:13:22,460 So, hoe doen ons dit? 272 00:13:22,460 --> 00:13:24,470 Waar kry ons 'n samesteller? 273 00:13:24,470 --> 00:13:26,400 >> Die meeste van ons hier 'n Mac of 'n rekenaar. 274 00:13:26,400 --> 00:13:29,152 En jy met Mac OS, of Windows, Linux, of Solaris, 275 00:13:29,152 --> 00:13:30,860 of enige aantal ander bedryfstelsels. 276 00:13:30,860 --> 00:13:32,568 En, inderdaad, ons kon gaan uit op die web 277 00:13:32,568 --> 00:13:35,710 en af ​​te laai 'n samesteller vir jou Mac of jou rekenaar 278 00:13:35,710 --> 00:13:37,360 vir jou spesifieke bedryfstelsel. 279 00:13:37,360 --> 00:13:39,617 Maar ons sal almal op verskillende bladsye, om so te praat. 280 00:13:39,617 --> 00:13:41,450 Ons wil 'n bietjie het verskillende konfigurasies. 281 00:13:41,450 --> 00:13:43,210 En dinge sou nie almal dieselfde werk. 282 00:13:43,210 --> 00:13:45,280 En, inderdaad, deesdae baie van ons gebruik nie 283 00:13:45,280 --> 00:13:47,516 sagteware wat loop net op ons skootrekenaars. 284 00:13:47,516 --> 00:13:49,390 In plaas daarvan, gebruik ons ​​iets soos 'n leser wat 285 00:13:49,390 --> 00:13:52,930 ons toelaat om toegang te verkry tot die web-gebaseerde programme in die wolk. 286 00:13:52,930 --> 00:13:55,630 En later hierdie semester, Ons sal presies dit te doen. 287 00:13:55,630 --> 00:13:59,660 Ons sal aansoeke skryf of sagteware met behulp van code-- nie C, 288 00:13:59,660 --> 00:14:02,860 maar ander tale soos Python en JavaScript-- wat uitgevoer word in die wolk. 289 00:14:02,860 --> 00:14:05,860 >> En om dit te doen, ons onsself gedurende die semester 290 00:14:05,860 --> 00:14:11,890 sal eintlik gebruik 'n wolk-gebaseerde omgewing bekend as CS50 IO. 291 00:14:11,890 --> 00:14:16,030 Dit is 'n web-gebaseerde programme omgewing, of geïntegreerde ontwikkelingsplan 292 00:14:16,030 --> 00:14:20,610 omgewing, IDE, wat is gebou bo-op 'n paar open source sagteware genoem Wolk 9. 293 00:14:20,610 --> 00:14:22,966 En ons het 'n paar opvoedkundige gemaak vereenvoudigings om dit 294 00:14:22,966 --> 00:14:25,840 ten einde sekere funksies in om weg te steek die eerste weke dat ons nie nodig het, 295 00:14:25,840 --> 00:14:27,770 waarna jy kan openbaar hulle en doen die meeste 296 00:14:27,770 --> 00:14:29,400 enigiets wat jy wil met die omgewing. 297 00:14:29,400 --> 00:14:32,470 >> En dit laat ons ook om pre-installeer sekere sagteware. 298 00:14:32,470 --> 00:14:35,330 Dinge soos 'n sogenaamde CS50 biblioteek, wat ons binnekort sal sien 299 00:14:35,330 --> 00:14:39,210 bied ons in C met 'n paar addisionele funksionaliteit. 300 00:14:39,210 --> 00:14:44,392 So as jy gaan na uiteindelik CS50.io, sal jy gevra om aan te meld, 301 00:14:44,392 --> 00:14:46,350 en sodra jy dit doen en skep 'n rekening vir gratis, 302 00:14:46,350 --> 00:14:52,150 jy in staat is om toegang te verkry tot 'n sal wees omgewing wat lyk baie soos hierdie. 303 00:14:52,150 --> 00:14:53,760 >> Nou, dit is in die verstek. 304 00:14:53,760 --> 00:14:55,650 Alles is mooi en helder op die skerm. 305 00:14:55,650 --> 00:14:57,941 Baie van ons het 'n gewoonte om werk op CS50 stuk wat 306 00:14:57,941 --> 00:14:59,150 redelik laat in die nag. 307 00:14:59,150 --> 00:15:02,400 En so 'n paar van wat jy dalk verkies om draai dit in die nag af, om so te praat. 308 00:15:02,400 --> 00:15:05,550 >> Maar uiteindelik, wat jy gaan om te sien binne CS50 IDE 309 00:15:05,550 --> 00:15:08,340 is drie afsonderlike areas-- 'n gebied aan die linkerkant waar 310 00:15:08,340 --> 00:15:12,604 jou lêers gaan wees in die wolk, 'n gebied op die regter boonste 311 00:15:12,604 --> 00:15:14,270 waar jou kode gaan bewerkbaar te wees. 312 00:15:14,270 --> 00:15:16,650 Jy sal in staat wees om oop te maak individuele tabs vir enige program 313 00:15:16,650 --> 00:15:19,670 dat jy binne skryf hierdie semester van daardie boonste regterkantste hoek. 314 00:15:19,670 --> 00:15:23,070 En dan die meeste arcanely, en tog kragtig, 315 00:15:23,070 --> 00:15:26,610 gaan hierdie ding op die wees bodem bekend as 'n terminale venster. 316 00:15:26,610 --> 00:15:29,450 >> Dit is 'n ou skool Command line interface, 317 00:15:29,450 --> 00:15:32,240 of CLI, wat dit moontlik maak jy opdragte uit te voer 318 00:15:32,240 --> 00:15:35,260 op die computer-- in hierdie geval, die rekenaar in die cloud-- 319 00:15:35,260 --> 00:15:39,090 om dinge soos stel jou kode te doen vanaf bronkode te masjienkode, 320 00:15:39,090 --> 00:15:43,600 om jou programme te hardloop, of om te begin jou webbediener, of toegang tot jou databasis, 321 00:15:43,600 --> 00:15:47,454 en 'n aantal ander tegnieke dat ons sal begin om te gebruik kort voor lank. 322 00:15:47,454 --> 00:15:49,370 Maar om daar te kom, ons is gaan eintlik 323 00:15:49,370 --> 00:15:51,240 om aanlyn te gaan en begin speel. 324 00:15:51,240 --> 00:15:54,399 En om dit te doen, laat ons eerste begin geknutsel met hoof, 325 00:15:54,399 --> 00:15:55,940 en skryf die belangrikste deel van 'n program. 326 00:15:55,940 --> 00:15:59,170 En laat ons gebruik daardie funksie printf, wat ons vroeër gebruik, 327 00:15:59,170 --> 00:16:01,050 eenvoudig om iets te sê. 328 00:16:01,050 --> 00:16:04,910 >> So hier is ek reeds binnekant van CS50 IO. 329 00:16:04,910 --> 00:16:05,930 Ek het aangeteken in advance. 330 00:16:05,930 --> 00:16:07,360 En ek volle gekeur by die venster uit. 331 00:16:07,360 --> 00:16:09,670 En so, uiteindelik, jy Ook in die komende probleme 332 00:16:09,670 --> 00:16:12,960 sal soortgelyke stappe te volg wat sal aanlyn dokumentasie. 333 00:16:12,960 --> 00:16:16,360 So jy hoef nie te bekommerd wees oor absorbeer elke klein tegniese stap 334 00:16:16,360 --> 00:16:17,730 wat Ek doen vandag. 335 00:16:17,730 --> 00:16:19,222 >> Maar jy sal 'n skerm soos hierdie te kry. 336 00:16:19,222 --> 00:16:20,430 Ek toevallig in die nag af. 337 00:16:20,430 --> 00:16:22,944 En jy kan alles op te kikker deur die aanskakel van die nag af. 338 00:16:22,944 --> 00:16:24,860 En aan die einde van die dag, jy gaan om te sien 339 00:16:24,860 --> 00:16:30,090 hierdie drie hoof areas-- die lêer leser aan die linkerkant, die kode oortjies op die top, 340 00:16:30,090 --> 00:16:32,430 en die terminale venster aan die onderkant. 341 00:16:32,430 --> 00:16:34,890 >> Laat my gaan voort en skryf my eerste program. 342 00:16:34,890 --> 00:16:42,300 Ek gaan preemptively gaan na File, Slaan, en red my lêer as hello.c. 343 00:16:42,300 --> 00:16:46,850 Inderdaad, deur konvensie, 'n program wat ons skryf dit is geskryf in die taal C 344 00:16:46,850 --> 00:16:49,739 moet iets genoem dot c, deur konvensie. 345 00:16:49,739 --> 00:16:53,030 So ek gaan dit noem hello.c, omdat Ek wil net hallo vir die wêreld sê. 346 00:16:53,030 --> 00:16:54,820 Nou gaan ek om te vergroot uit en klik op Save. 347 00:16:54,820 --> 00:16:58,180 En al wat ek het hier nou 'n blad waarin ek begin skryf code. 348 00:16:58,180 --> 00:16:59,490 >> Dit is nie van plan om op te stel. 349 00:16:59,490 --> 00:17:00,300 Dit beteken niks. 350 00:17:00,300 --> 00:17:02,750 En sodat selfs wanneer ek tot bekering hierdie om nulle en ene, 351 00:17:02,750 --> 00:17:05,390 die SVE gaan nie hê idee wat aangaan rondom. 352 00:17:05,390 --> 00:17:14,170 Maar as ek lyne skryf wat nie ooreenstem met met conventions-- C wese C se 353 00:17:14,170 --> 00:17:20,150 Weereens, dit language-- met sintaksis soos hierdie, printf hallo world-- en ek het 354 00:17:20,150 --> 00:17:22,210 gekry gemaklik met om dit te doen met verloop van tyd. 355 00:17:22,210 --> 00:17:24,510 So ek dink nie ek het enige tipografiese foute. 356 00:17:24,510 --> 00:17:27,910 >> Maar, sonder uitsondering, die heel eerste keer as jy dit doen, sal jy. 357 00:17:27,910 --> 00:17:31,090 En wat ek nou gaan doen dalk baie goed nie werk vir jou die eerste keer. 358 00:17:31,090 --> 00:17:33,610 En dit is perfek OK, want nou jou 359 00:17:33,610 --> 00:17:37,662 dalk net sien 'n hele klomp van die nuwigheid, maar met verloop van tyd as jy eers vertroud 360 00:17:37,662 --> 00:17:39,870 met hierdie omgewing, en hierdie taal, en ander, 361 00:17:39,870 --> 00:17:42,370 jy begin om dinge te sien dat is óf reg of verkeerd. 362 00:17:42,370 --> 00:17:44,369 >> En dit is wat die onderrig genote en natuurlik 363 00:17:44,369 --> 00:17:48,780 assistente kry so goed in die verloop van tyd, is spot foute of foute in jou kode. 364 00:17:48,780 --> 00:17:52,110 Maar ek beweer dat daar is geen foute in hierdie kode. 365 00:17:52,110 --> 00:17:53,990 So wil ek nou hierdie program uit te voer. 366 00:17:53,990 --> 00:17:57,440 >> Nou op my eie Mac of PC, ek is in die gewoonte om dubbel te kliek ikone 367 00:17:57,440 --> 00:17:59,350 toe ek wil 'n paar program uit te voer. 368 00:17:59,350 --> 00:18:01,080 Maar dit is nie die model hier. 369 00:18:01,080 --> 00:18:04,570 In hierdie omgewing, wat is CS50 IO. 370 00:18:04,570 --> 00:18:07,192 Ons gebruik 'n bedryfstelsel stelsel genoem Linux. 371 00:18:07,192 --> 00:18:09,900 Linux is wat herinner aan 'n ander bedryfstelsel, algemeen bekend 372 00:18:09,900 --> 00:18:10,850 as Unix. 373 00:18:10,850 --> 00:18:16,340 En Linux is veral bekend vir met 'n command line omgewing, CLI. 374 00:18:16,340 --> 00:18:20,070 Nou, ons is met behulp van 'n spesifieke geur van Linux genoem Ubuntu. 375 00:18:20,070 --> 00:18:22,770 En Ubuntu is bloot 'n sekere weergawe van Linux. 376 00:18:22,770 --> 00:18:27,900 >> Maar hierdie Linux se deesdae doen eintlik kom met grafiese gebruikerskoppelvlakke. 377 00:18:27,900 --> 00:18:30,360 En die een wat ons gebeur hier gebruik is web-gebaseerde. 378 00:18:30,360 --> 00:18:32,735 So dit kan selfs 'n blik bietjie anders as iets 379 00:18:32,735 --> 00:18:35,310 jy jouself kan hê gesien of hardloop in die verlede. 380 00:18:35,310 --> 00:18:37,910 >> So ek gaan om voort te gaan nou en doen die volgende. 381 00:18:37,910 --> 00:18:40,950 Ek het hierdie lêer as hello.c gered. 382 00:18:40,950 --> 00:18:47,350 Ek gaan om voort te gaan en tipe clanghello.c So klang 383 00:18:47,350 --> 00:18:49,850 vir die taal C is 'n samesteller. 384 00:18:49,850 --> 00:18:51,952 Dit is vooraf geïnstalleer in CS50 IO. 385 00:18:51,952 --> 00:18:54,910 En jy kan absoluut aflaai en installeer hierdie op jou eie Mac of PC. 386 00:18:54,910 --> 00:18:57,910 >> Maar, weer, jy sal nie al het die pre-opset vir jou gedoen. 387 00:18:57,910 --> 00:19:00,940 So vir nou, ek is net gaan clanghello.c hardloop. 388 00:19:00,940 --> 00:19:03,240 En nou sien hierdie sintaksis hier sal uiteindelik 389 00:19:03,240 --> 00:19:06,930 besef net beteken dat ek in 'n gids of gids genoem Workspace. 390 00:19:06,930 --> 00:19:11,030 Dit dollar teken is net konvensie vir betekenis, tik jou opdragte hier. 391 00:19:11,030 --> 00:19:14,560 >> Dit is wat genoem word 'n vinnige, net deur konvensie is dollar teken. 392 00:19:14,560 --> 00:19:19,130 En as Ek gegaan voor af en klik Gee, blyk niks te gebeur. 393 00:19:19,130 --> 00:19:20,930 Maar dit is eintlik 'n goeie ding. 394 00:19:20,930 --> 00:19:23,650 Die minder wat gebeur op jou skerm, hoe meer waarskynlik 395 00:19:23,650 --> 00:19:26,710 jou kode is korrek te wees, ten minste sintakties. 396 00:19:26,710 --> 00:19:29,120 >> So as ek wil hierdie hardloop program, wat moet ek doen? 397 00:19:29,120 --> 00:19:33,770 Wel, dit blyk dat die verstek naam deur konvensie 398 00:19:33,770 --> 00:19:38,854 vir programme as jy nie spesifiseer 'n naam vir jou program is net a.out. 399 00:19:38,854 --> 00:19:41,270 En dit sintaksis ook sal jy kry vertroud is met kort voor lank. 400 00:19:41,270 --> 00:19:47,500 >> Dot streep net beteken, hey, CS50 IDE, hardloop 'n program genaamd a.out 401 00:19:47,500 --> 00:19:49,400 dit is binne-in my huidige gids. 402 00:19:49,400 --> 00:19:51,520 Dit dot beteken die huidige gids. 403 00:19:51,520 --> 00:19:55,040 En ons sal sien wat ander sulke reekse karakters beteken kort voor lank. 404 00:19:55,040 --> 00:19:58,430 >> So hier gaan ons, Tik, hello world. 405 00:19:58,430 --> 00:20:00,080 En jy sal sien dat wat gebeur het? 406 00:20:00,080 --> 00:20:01,580 Nie net het dit druk hello world. 407 00:20:01,580 --> 00:20:05,990 Dit het ook die wyser na die volgende lyn. 408 00:20:05,990 --> 00:20:07,160 >> En hoekom was dit? 409 00:20:07,160 --> 00:20:12,400 Wat was die kode wat ons voor geskryf wat verseker dat die wyser sou 410 00:20:12,400 --> 00:20:14,882 gaan op die volgende reël? 411 00:20:14,882 --> 00:20:16,840 Snaakse ding oor 'n rekenaar is dit net gaan 412 00:20:16,840 --> 00:20:18,570 letterlik doen wat jy dit vertel om te doen. 413 00:20:18,570 --> 00:20:26,050 >> So as jy dit aan printf hello, komma, ruimte, wêreld, naby kwotasie, 414 00:20:26,050 --> 00:20:29,090 dit letterlik net gaan aan dié karakters te druk. 415 00:20:29,090 --> 00:20:31,980 Maar ek het hierdie spesiale karakter aan die einde, onthou, agteroorskuinsstreep N. 416 00:20:31,980 --> 00:20:34,230 En dit is wat verseker dat die karakter het 417 00:20:34,230 --> 00:20:36,570 na die volgende lyn van die skerm. 418 00:20:36,570 --> 00:20:38,097 >> Trouens, dat ek kan gaan en dit te doen. 419 00:20:38,097 --> 00:20:39,430 Laat my gaan voort en skrap. 420 00:20:39,430 --> 00:20:41,180 Nou, sien dat die bo-op my skerm is daar ' 421 00:20:41,180 --> 00:20:42,890 'n bietjie rooi lig in die blad aandui, 422 00:20:42,890 --> 00:20:45,047 hey, jy het nie jou lêer gestoor. 423 00:20:45,047 --> 00:20:47,880 So ek gaan om voort te gaan met beheer S of opdrag S, stoor die lêer. 424 00:20:47,880 --> 00:20:51,130 Nou is dit goes-- het vir 'n moment-- groen. 425 00:20:51,130 --> 00:20:53,760 En nou is dit terug na net 'n noue ikoon. 426 00:20:53,760 --> 00:21:01,860 >> As ek nou weer uit te voer clanghello.c, Ingaan, dot streep, a.out, Tik, 427 00:21:01,860 --> 00:21:04,110 jy sal sien dat dit steeds gewerk. 428 00:21:04,110 --> 00:21:06,020 Maar dit is waarskynlik 'n bietjie karretjie. 429 00:21:06,020 --> 00:21:08,714 Op die oomblik is, my prompt-- werkplek, en dan is dit dollar teken, 430 00:21:08,714 --> 00:21:10,880 en dan my werklike prompt-- is almal op dieselfde lyn. 431 00:21:10,880 --> 00:21:14,540 So dit beslis 'n estetiese fout, selfs al is dit nie regtig 'n logiese fout. 432 00:21:14,540 --> 00:21:16,250 >> So ek gaan ongedaan te maak wat ek nou net gedoen het. 433 00:21:16,250 --> 00:21:18,560 Ek gaan a.out tik. 434 00:21:18,560 --> 00:21:22,710 Sien ek het bygevoeg die NEWLINE karakter terug. 435 00:21:22,710 --> 00:21:24,280 Ek het die lêer gestoor. 436 00:21:24,280 --> 00:21:31,630 >> So ek gaan a.out tik, and-- dammit, 'n fout, 'n fout wat beteken fout. 437 00:21:31,630 --> 00:21:35,020 So die fout is dat selfs al Ek het ook die agteroorskuinsstreep N daar, 438 00:21:35,020 --> 00:21:41,180 Re-gered, re-hardloop die program, die gedrag was dieselfde. 439 00:21:41,180 --> 00:21:42,640 Hoekom sou dit wees? 440 00:21:42,640 --> 00:21:43,910 >> Ek mis 'n stap, reg? 441 00:21:43,910 --> 00:21:47,620 Dit belangrike stap vroeër was dat jy aan- wanneer jy jou bronkode te verander, 442 00:21:47,620 --> 00:21:49,610 dit blyk ook uit te voer dit deur die samesteller 443 00:21:49,610 --> 00:21:51,102 weer so jy nuwe masjien kode. 444 00:21:51,102 --> 00:21:52,810 En die masjien kode, die nulle en ene, 445 00:21:52,810 --> 00:21:56,260 gaan byna identies te wees nie, maar nie heeltemal so, want ons wil hê, 446 00:21:56,260 --> 00:21:57,510 natuurlik, wat nuwe lyn. 447 00:21:57,510 --> 00:22:02,640 >> So om dit op te los, ek gaan benodig om clanghello.c tik, tik, dot 448 00:22:02,640 --> 00:22:03,800 streep, a.out. 449 00:22:03,800 --> 00:22:08,402 En nou, hello world is terug na die plek waar ek verwag om dit te wees. 450 00:22:08,402 --> 00:22:09,610 So dit is alles goed en wel. 451 00:22:09,610 --> 00:22:13,150 Maar a.out is 'n mooi dom naam vir 'n program, selfs al is dit gebeur om te wees, 452 00:22:13,150 --> 00:22:16,530 vir historiese redes, die default-- beteken vergadering uitgange. 453 00:22:16,530 --> 00:22:20,780 >> Maar laat ek hier voort te gaan en anders doen dit. 454 00:22:20,780 --> 00:22:24,760 Ek wil my Hello World-program om werklik word hallo genoem. 455 00:22:24,760 --> 00:22:28,320 So asof dit 'n ikoon op my lessenaar, sou dit nie a.out. 456 00:22:28,320 --> 00:22:29,730 Dit sou hallo genoem. 457 00:22:29,730 --> 00:22:33,660 >> So om dit te doen, dit blyk dat klang, soos baie programme, 458 00:22:33,660 --> 00:22:37,980 ondersteun command line argumente, of vlae, of skakel, 459 00:22:37,980 --> 00:22:39,600 wat net beïnvloed sy gedrag. 460 00:22:39,600 --> 00:22:45,160 Spesifiek, klang ondersteun 'n streep o vlag, wat dan neem 'n tweede woord. 461 00:22:45,160 --> 00:22:48,190 In hierdie geval, sal ek na willekeur, maar redelik, noem dit hallo. 462 00:22:48,190 --> 00:22:50,710 Maar ek kan dit noem enigiets Ek wil nie, behalwe a.out, wat 463 00:22:50,710 --> 00:22:52,390 eerder behalwe die punt sou wees. 464 00:22:52,390 --> 00:22:55,640 >> En dan net spesifiseer die naam van die lêer Ek wil stel. 465 00:22:55,640 --> 00:22:59,190 So nou al aan die begin van die opdrag Ek het nog klang, 466 00:22:59,190 --> 00:23:01,410 aan die einde van die opdrag Ek het nog steeds die lêernaam, 467 00:23:01,410 --> 00:23:05,520 Ek het nou hierdie command line argumente, hierdie vlae wat sê: 468 00:23:05,520 --> 00:23:11,180 O, by the way, uitset-o, 'n lêer genoem hello, nie die verstek a.out. 469 00:23:11,180 --> 00:23:13,810 >> So as ek druk Enter nou, niks blyk te gebeur. 470 00:23:13,810 --> 00:23:17,900 En tog, nou kan ek dot streep doen hallo. 471 00:23:17,900 --> 00:23:19,089 Dit is dus dieselfde program. 472 00:23:19,089 --> 00:23:21,380 Die nulle en ene is identies aan die einde van die dag. 473 00:23:21,380 --> 00:23:24,210 >> Maar hulle is in twee verskillende files-- a.out, 474 00:23:24,210 --> 00:23:26,490 wat is die eerste weergawe en net so dom genoem, 475 00:23:26,490 --> 00:23:30,250 en nou hello, wat 'n baie meer dwingende naam vir 'n program. 476 00:23:30,250 --> 00:23:33,195 Maar, eerlik, ek het nooit gaan dit weer onthou, 477 00:23:33,195 --> 00:23:34,070 en weer en weer. 478 00:23:34,070 --> 00:23:36,411 En eintlik, as ons skrywe meer ingewikkeld programme, 479 00:23:36,411 --> 00:23:38,160 die bevele jy gaan hê om te skryf 480 00:23:38,160 --> 00:23:40,920 gaan selfs meer ingewikkeld steeds. 481 00:23:40,920 --> 00:23:41,940 >> En so nie te bekommer nie. 482 00:23:41,940 --> 00:23:46,220 Dit blyk dat die mens voor ons het hulle ook besef 483 00:23:46,220 --> 00:23:47,530 het presies dieselfde probleem. 484 00:23:47,530 --> 00:23:50,900 Hulle het ook nie geniet om te tik taamlike lang, arcane opdragte, 485 00:23:50,900 --> 00:23:52,200 laat staan ​​nog onthou hulle. 486 00:23:52,200 --> 00:23:56,070 En so mens voor ons gemaak het ander programme wat dit makliker maak 487 00:23:56,070 --> 00:23:57,670 om jou sagteware te stel. 488 00:23:57,670 --> 00:24:01,609 >> En, inderdaad, een so 'n program genoem te maak. 489 00:24:01,609 --> 00:24:03,150 So ek gaan om voort te gaan en dit te doen. 490 00:24:03,150 --> 00:24:05,691 Ek gaan alles ongedaan ek nou net gedoen het in die volgende manier. 491 00:24:05,691 --> 00:24:07,690 Laat my tik LS. 492 00:24:07,690 --> 00:24:10,980 En jy sal sien drie things-- a.out, en 'n ster, hello 493 00:24:10,980 --> 00:24:12,810 en 'n ster, en hello.c. 494 00:24:12,810 --> 00:24:14,730 Hopelik, moet dit 'n bietjie intuïtief, 495 00:24:14,730 --> 00:24:18,220 sover vroeër was daar Niks in hierdie werkspasie. 496 00:24:18,220 --> 00:24:21,240 Daar was niks wat ek moes geskape het tot ons klas begin. 497 00:24:21,240 --> 00:24:22,840 >> En ek geskep hello.c. 498 00:24:22,840 --> 00:24:24,544 dan het ek opgestel het, en dit genoem a.out. 499 00:24:24,544 --> 00:24:27,460 En dan saamgestel ek dit weer effens anders en dit genoem: hallo. 500 00:24:27,460 --> 00:24:32,830 So ek het drie lêers in hierdie gids, in hierdie gids met die naam Workspace. 501 00:24:32,830 --> 00:24:35,005 Nou kan ek sien dat sowel As ek zoom uit eintlik. 502 00:24:35,005 --> 00:24:37,530 >> As ek hier zoom en kyk na wat boonste regterkantste 503 00:24:37,530 --> 00:24:39,940 hoek, soos belowe links kant van die skerm 504 00:24:39,940 --> 00:24:42,990 is altyd iets om jou te wys Wat is in jou rekening, wat 505 00:24:42,990 --> 00:24:44,790 binnekant van CS50 IO. 506 00:24:44,790 --> 00:24:46,680 En daar is drie lêers daar. 507 00:24:46,680 --> 00:24:49,070 >> So ek wil ontslae te raak van a.out en hallo. 508 00:24:49,070 --> 00:24:51,275 En as jy dalk dink intuïtief, jy 509 00:24:51,275 --> 00:24:53,400 kon soort van beheer kliek of regs kliek op hierdie punt. 510 00:24:53,400 --> 00:24:54,590 En hierdie klein spyskaart verskyn. 511 00:24:54,590 --> 00:24:57,170 Jy kan die lêer af te laai, uit te voer dit, 'n voorbeeld van dit, te verfris, te hernoem, 512 00:24:57,170 --> 00:24:57,700 of wat nie. 513 00:24:57,700 --> 00:25:00,260 >> En ek kon net verwyder, en dit sal weggaan. 514 00:25:00,260 --> 00:25:05,260 Maar laat ons dinge doen met 'n opdrag lyn vir nou, ten einde gemaklik te kry 515 00:25:05,260 --> 00:25:07,010 met hierdie, en doen die volgende. 516 00:25:07,010 --> 00:25:12,345 Ek gaan om voort te gaan en te verwyder a.out deur te tik letterlik rma.out. 517 00:25:12,345 --> 00:25:14,890 Dit blyk dat die bevel vir verwydering of iets te skrap, 518 00:25:14,890 --> 00:25:16,280 is nie verwyder of verwyder. 519 00:25:16,280 --> 00:25:21,260 >> Dit is meer bondig RM, net om te spaar jou 'n paar toetsaanslagen, en druk Enter. 520 00:25:21,260 --> 00:25:24,707 Nou gaan ons 'n bietjie wees kripties verwyder gereelde lêer a.out. 521 00:25:24,707 --> 00:25:27,040 Ek het nie regtig weet wat 'n onreëlmatige lêer nog wil wees. 522 00:25:27,040 --> 00:25:28,660 Maar ek wil om dit te verwyder. 523 00:25:28,660 --> 00:25:30,150 >> So ek gaan y tik vir Ja. 524 00:25:30,150 --> 00:25:31,940 Of ek kan self een uit, en druk Enter. 525 00:25:31,940 --> 00:25:33,440 En, weer, lyk niks gebeur nie. 526 00:25:33,440 --> 00:25:35,840 Maar dit is in die algemeen, 'n goeie ding. 527 00:25:35,840 --> 00:25:40,490 >> As ek LS tik hierdie tyd, Wat moet ek sien? 528 00:25:40,490 --> 00:25:44,930 Hopelik net hallo en hello.c. 529 00:25:44,930 --> 00:25:47,286 Nou, as 'n eenkant, sal jy sien hierdie sterre, sterretjie, 530 00:25:47,286 --> 00:25:48,660 dit is aan die einde van my programme. 531 00:25:48,660 --> 00:25:50,201 En dit is ook vertoon in groen. 532 00:25:50,201 --> 00:25:53,970 Dit is net CS50 IDE se manier van cluing jy in die waarheid te sê 533 00:25:53,970 --> 00:25:55,280 dat dit nie bronkode. 534 00:25:55,280 --> 00:25:58,880 Dit is 'n uitvoerbare, 'n uitvoerbare program wat jy eintlik kan hardloop 535 00:25:58,880 --> 00:26:01,020 deur dit te doen dot streep, en dan is dit naam. 536 00:26:01,020 --> 00:26:05,860 >> Nou, laat ek gaan voort en verwyder hierdie, RM hello, Tik, verwyder gereelde 537 00:26:05,860 --> 00:26:08,010 lêer hello, ja. 538 00:26:08,010 --> 00:26:11,180 En nou as ek tik LS, ons is terug na hello.c. 539 00:26:11,180 --> 00:26:13,917 Probeer om nie te verwyder jou werklike bron-kode. 540 00:26:13,917 --> 00:26:16,250 Selfs al is daar funksies gebou in CS50 IO waar 541 00:26:16,250 --> 00:26:19,870 jy kan gaan deur middel van jou hersiening geskiedenis en rewind betyds as jy per ongeluk 542 00:26:19,870 --> 00:26:23,660 iets verwyder, doen bedag wees soos per die instruksies ja of nee, 543 00:26:23,660 --> 00:26:25,381 van wat jy eintlik wil doen. 544 00:26:25,381 --> 00:26:27,380 En as Ek gegaan na die top linkerhoek hier, 545 00:26:27,380 --> 00:26:30,696 al wat oorbly is hello.c. 546 00:26:30,696 --> 00:26:32,570 Daar is dus trosse van ander opdragte wat jou 547 00:26:32,570 --> 00:26:37,550 kan doen in die wêreld van Linux, waarvan een is, weer, maak. 548 00:26:37,550 --> 00:26:40,180 En ons gaan Maak my program nou soos volg. 549 00:26:40,180 --> 00:26:43,270 >> In plaas daarvan om dit te doen klang, in plaas van om klang-o, 550 00:26:43,270 --> 00:26:45,860 Ek gaan net letterlik tik, maak hallo. 551 00:26:45,860 --> 00:26:49,630 En nou sien ek nie tik maak hello.c. 552 00:26:49,630 --> 00:26:50,910 Ek tik maak hallo. 553 00:26:50,910 --> 00:26:54,840 >> En hierdie program Maak dat kom met CS50 IDE, en nog baie meer 554 00:26:54,840 --> 00:26:57,090 oor die algemeen met Linux, is 'n program wat 555 00:26:57,090 --> 00:26:59,120 gaan 'n program genaamd Hallo maak. 556 00:26:59,120 --> 00:27:03,680 En dit gaan om te aanvaar, deur konvensie, dat indien hierdie program kan gedoen word, 557 00:27:03,680 --> 00:27:09,030 dit gaan word gemaak van 'n bron -kode lêer eindig in dot c, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> So as ek druk Enter nou, kennis dat die opdrag wat sal uitgevoer word 559 00:27:12,210 --> 00:27:14,340 is eintlik selfs meer voor as voorheen. 560 00:27:14,340 --> 00:27:16,670 En dit is omdat ons het gedefinieerde CS50 IO te hê 561 00:27:16,670 --> 00:27:19,878 'n paar ekstra funksies gebou in daardie Ons weet nog net nie nodig nie, maar gou wil. 562 00:27:19,878 --> 00:27:23,470 Maar die belangrikste ding om te besef nou het ek 'n Hallo program. 563 00:27:23,470 --> 00:27:27,080 >> As ek tik LS weer, ek 'n hallo program. 564 00:27:27,080 --> 00:27:32,070 En ek kan dit uit te voer met dot streep a.out, nee, 565 00:27:32,070 --> 00:27:35,590 omdat die hele punt van hierdie oefening was dot streep hallo. 566 00:27:35,590 --> 00:27:38,089 En nou het ek my Hello World-program. 567 00:27:38,089 --> 00:27:39,880 So 'n stap vorentoe, ons is byna altyd net 568 00:27:39,880 --> 00:27:42,088 gaan ons programme op te stel met behulp van die opdrag te maak. 569 00:27:42,088 --> 00:27:45,300 En dan gaan ons dit loop deur dot streep, en die naam van die program. 570 00:27:45,300 --> 00:27:49,610 Maar besef wat maak, is besig om jy, is dit self nie 'n samesteller. 571 00:27:49,610 --> 00:27:53,310 Dis net 'n gerief program wat weet hoe om 'n samesteller aktiveer 572 00:27:53,310 --> 00:27:56,470 om dit uit te voer dat jy jouself kan dit gebruik. 573 00:27:56,470 --> 00:28:00,220 >> Wat ander opdragte bestaan ​​in Linux, en op sy beurt die CS50 IO? 574 00:28:00,220 --> 00:28:03,107 Ons sal gou sien dat daar 'n CD opdrag, Verandering Gids. 575 00:28:03,107 --> 00:28:05,190 Dit laat jou toe binne jou command line interface 576 00:28:05,190 --> 00:28:07,610 om vorentoe te beweeg, en terug, en oop te stel verskillende dopgehou 577 00:28:07,610 --> 00:28:08,860 sonder die gebruik van jou muis. 578 00:28:08,860 --> 00:28:12,470 >> LS ons gesien het, wat staan ​​vir 'n lys die lêers in die huidige gids. 579 00:28:12,470 --> 00:28:14,650 Maak Dir, kan jy waarskynlik begin om af te lei 580 00:28:14,650 --> 00:28:18,150 wat dit beteken now-- gids maak, As jy wil 'n gids te skep. 581 00:28:18,150 --> 00:28:21,270 RM onthef, RM Dir vir verwyder directory-- en hierdie, 582 00:28:21,270 --> 00:28:24,160 weer, is die command line ekwivalente van wat jy 583 00:28:24,160 --> 00:28:26,945 kon doen in CS50 IDE met jou muis. 584 00:28:26,945 --> 00:28:28,820 Maar jy sal gou vind wat soms is dit net 585 00:28:28,820 --> 00:28:30,610 'n baie vinniger te doen dinge met 'n sleutelbord, 586 00:28:30,610 --> 00:28:33,690 en uiteindelik 'n baie meer kragtig. 587 00:28:33,690 --> 00:28:36,440 >> Maar dit is moeilik om te argumenteer dat enigiets wat ons het gedoen tot dusver 588 00:28:36,440 --> 00:28:39,990 is al wat 'n kragtige, wanneer al ons het al gesê is, hello world. 589 00:28:39,990 --> 00:28:43,740 En, in werklikheid, ek hardcoded die woorde Hello World in my program. 590 00:28:43,740 --> 00:28:45,530 Daar is nog geen dinamika. 591 00:28:45,530 --> 00:28:49,320 Kras was 'n bevel van die grootte meer interessant verlede week. 592 00:28:49,320 --> 00:28:51,220 >> En so kom ons daar uit te kom. 593 00:28:51,220 --> 00:28:55,310 Kom ons neem 'n stap in die rigting wat deur manier van sommige van hierdie funksies. 594 00:28:55,310 --> 00:28:59,470 So nie net C kom met printf, en trosse van ander funksies 595 00:28:59,470 --> 00:29:01,850 waarvan sommige sal ons sien met verloop van tyd, dit nie 596 00:29:01,850 --> 00:29:05,760 Maak dit so maklik reg uit van die hek in om die gebruiker se toevoer. 597 00:29:05,760 --> 00:29:08,140 >> Trouens, een van die swakhede van tale soos C, 598 00:29:08,140 --> 00:29:10,140 en selfs Java en nog ander, is dat dit nie gebeur nie 599 00:29:10,140 --> 00:29:15,860 maak dit maklik om net dinge soos heelgetalle van gebruikers, of snare, woorde, 600 00:29:15,860 --> 00:29:19,970 en frases, wat nog te sê dinge soos drywende punt waardes, of reële getalle 601 00:29:19,970 --> 00:29:23,240 met desimale punte, en regtig lang nommers, soos ons binnekort sal sien. 602 00:29:23,240 --> 00:29:27,000 So hierdie lys van funksies hier, hierdie soos ander Scratch stukke van die legkaart 603 00:29:27,000 --> 00:29:31,090 dat ons pre-geïnstalleer in CS50 IDE wat ons sal gebruik vir 'n paar weke 604 00:29:31,090 --> 00:29:34,010 opleiding wiele van spesies, en uiteindelik neem dit af en kyk 605 00:29:34,010 --> 00:29:37,210 onder die enjinkap, miskien, by hoe hierdie dinge geïmplementeer word. 606 00:29:37,210 --> 00:29:40,460 >> Maar om dit te doen, laat ons eintlik skryf 'n program. 607 00:29:40,460 --> 00:29:41,770 Laat my tog gaan voort. 608 00:29:41,770 --> 00:29:44,750 En ek gaan 'n nuwe te skep lêer deur te kliek hierdie klein plus, 609 00:29:44,750 --> 00:29:45,970 en kliek nuwe lêer. 610 00:29:45,970 --> 00:29:49,250 >> Ek gaan hierdie volgende red een as, kom ons sê, string.c, 611 00:29:49,250 --> 00:29:50,750 want ek wil om te speel met snare. 612 00:29:50,750 --> 00:29:53,990 En string in C is net 'n reeks van karakters. 613 00:29:53,990 --> 00:29:56,090 So nou laat ons gaan voort en doen die volgende. 614 00:29:56,090 --> 00:30:01,204 >> Sluit standaard IO.h-- en dit blyk standaard IO, 615 00:30:01,204 --> 00:30:03,360 IO beteken net toevoer en afvoer. 616 00:30:03,360 --> 00:30:05,920 So dit blyk dat hierdie lyn hier is wat 617 00:30:05,920 --> 00:30:08,140 word die naburige ons printf gebruik. 618 00:30:08,140 --> 00:30:10,410 Printf, natuurlik, produseer uitset. 619 00:30:10,410 --> 00:30:15,000 So ten einde printf gebruik, dit blyk uit moet jy hierdie reël van die kode het 620 00:30:15,000 --> 00:30:16,040 aan die bokant van jou lêer. 621 00:30:16,040 --> 00:30:18,456 >> En ons sal terug te kom na wat dit beteken regtig kort voor lank. 622 00:30:18,456 --> 00:30:20,400 Dit blyk dat in enige C program wat ek skryf, 623 00:30:20,400 --> 00:30:23,640 Ek het om dit te begin met kode wat lyk soos volg. 624 00:30:23,640 --> 00:30:26,860 En jy sal sien CS50 IDE, en ander geïntegreerde ontwikkelingsplan 625 00:30:26,860 --> 00:30:30,050 omgewings soos dit, gaan as die beste probeer 626 00:30:30,050 --> 00:30:31,780 hulle kan om jou denke te voltooi. 627 00:30:31,780 --> 00:30:35,930 Trouens, 'n oomblik gelede as ek ongedaan wat ek nou net gedoen het, ek druk Enter. 628 00:30:35,930 --> 00:30:39,160 >> Ek het toe getref oop krullerige stut, getref in te voer. 629 00:30:39,160 --> 00:30:40,430 En dit klaar my gedagte. 630 00:30:40,430 --> 00:30:45,140 Dit het my 'n nuwe lyn, ingekeep nie minder vir mooi stilistiese redes sal ons sien. 631 00:30:45,140 --> 00:30:48,559 En dan is dit outomaties aan my gegee het dat krullerige brace om my denke te voltooi. 632 00:30:48,559 --> 00:30:50,600 Nou, is dit nie altyd raai wat jy wil doen. 633 00:30:50,600 --> 00:30:53,620 Maar 'n groot deel, is dit nie red jou 'n paar toetsaanslagen. 634 00:30:53,620 --> 00:30:59,560 So 'n oomblik gelede, het ons hierdie program-- hallo, wêreld, en dan saamgestel is, 635 00:30:59,560 --> 00:31:00,460 en dan hardloop hy. 636 00:31:00,460 --> 00:31:01,867 Maar daar is geen dinamika hier. 637 00:31:01,867 --> 00:31:03,700 Wat gebeur as ons wou iets anders te doen? 638 00:31:03,700 --> 00:31:07,630 Wel, wat as ek wou eintlik kry 'n string van die gebruiker? 639 00:31:07,630 --> 00:31:11,250 Ek gaan 'n legkaart stuk gebruik genoem presies that-- string te kry. 640 00:31:11,250 --> 00:31:15,860 >> Blyk in C dat wanneer jy nie wil hê om insette te lewer om 'n legkaart stuk, 641 00:31:15,860 --> 00:31:19,360 of meer behoorlik na 'n funksie, jy letterlik net doen oop hakies, 642 00:31:19,360 --> 00:31:20,430 naby hakies. 643 00:31:20,430 --> 00:31:25,540 Dit is dus asof daar geen wit blokkie te tik in. 644 00:31:25,540 --> 00:31:27,720 Die inspraak blok voor het 'n klein wit boks. 645 00:31:27,720 --> 00:31:29,660 Ons het nie nou dat wit boks. 646 00:31:29,660 --> 00:31:33,310 >> Maar as ek roep get string, ek wil die gevolg iewers sit. 647 00:31:33,310 --> 00:31:37,680 So 'n baie algemene paradigma in C is om noem 'n funksie, soos get string hier, 648 00:31:37,680 --> 00:31:41,070 en dan slaan sy terugkeer waarde. 649 00:31:41,070 --> 00:31:44,450 Dit is die gevolg van sy poging in iets. 650 00:31:44,450 --> 00:31:47,630 >> En wat is die bou in programmering, 651 00:31:47,630 --> 00:31:53,450 hetsy in Scratch of nou C, dat ons kan gebruik om werklik iets te slaan? 652 00:31:53,450 --> 00:31:55,990 Noem dit 'n veranderlike, reg? 653 00:31:55,990 --> 00:32:00,320 En in Scratch, doen ons nie regtig omgee wat aangaan in veranderlikes. 654 00:32:00,320 --> 00:32:02,170 >> Maar in hierdie geval, ons eintlik doen. 655 00:32:02,170 --> 00:32:03,719 Ek gaan string sê. 656 00:32:03,719 --> 00:32:05,510 En dan kan ek noem hierdie iets wat ek wil. 657 00:32:05,510 --> 00:32:08,340 Ek gaan om dit te noem naam, kry kry string. 658 00:32:08,340 --> 00:32:10,250 >> En nou selfs al is jy 'n bietjie nuut is tot hierdie, 659 00:32:10,250 --> 00:32:11,984 agterkom dat ek gebrek aan detail. 660 00:32:11,984 --> 00:32:13,150 Ek is vergeet 'n kommapunt. 661 00:32:13,150 --> 00:32:14,400 Ek nodig het om hierdie gedagte te voltooi. 662 00:32:14,400 --> 00:32:17,480 So ek gaan my wyser beweeg, en druk kommapunt daar. 663 00:32:17,480 --> 00:32:19,130 En wat het ek net gedoen? 664 00:32:19,130 --> 00:32:21,440 In hierdie lyn van kode, nommer 5 op die oomblik, 665 00:32:21,440 --> 00:32:23,799 Ek neem Oproep string met geen insette. 666 00:32:23,799 --> 00:32:26,090 Daar is dus geen klein wit boks soos die blok Save het. 667 00:32:26,090 --> 00:32:28,590 >> Ek sê maar net, hey, rekenaar, kry vir my 'n string. 668 00:32:28,590 --> 00:32:31,390 Die gelyk teken is nie regtig 'n gelykaanteken, per se. 669 00:32:31,390 --> 00:32:33,790 Dit is die opdrag operateur, wat beteken, 670 00:32:33,790 --> 00:32:37,860 hey, rekenaar, beweeg die waarde van die reg oor aan die linkerkant. 671 00:32:37,860 --> 00:32:40,480 En in die linker, ek het die volgende. 672 00:32:40,480 --> 00:32:43,580 >> Haai, rekenaar, gee my 'n string-- 'n reeks van karakters. 673 00:32:43,580 --> 00:32:45,637 En noem dat string Naam. 674 00:32:45,637 --> 00:32:47,220 En ek hoef nie eens om dit te noem Naam. 675 00:32:47,220 --> 00:32:49,970 >> Ek kon dit noem, konvensioneel, iets soos S, 676 00:32:49,970 --> 00:32:52,900 baie soos ons gebruik ek om noem die veranderlike i. 677 00:32:52,900 --> 00:32:54,829 Maar nou het ek nodig het om iets te doen met dit. 678 00:32:54,829 --> 00:32:57,370 Dit sou redelik dom te wees Probeer die opstel van hierdie kode, hardloop 679 00:32:57,370 --> 00:32:59,410 hierdie program, selfs al Ek kry 'n string, 680 00:32:59,410 --> 00:33:01,580 want dit is nog steeds net gaan hallo sê wêreld. 681 00:33:01,580 --> 00:33:06,140 >> Maar wat as ek wil om dit te verander. 682 00:33:06,140 --> 00:33:07,940 Hoekom nie ek dit doen? 683 00:33:07,940 --> 00:33:11,632 Persent s, komma s. 684 00:33:11,632 --> 00:33:13,090 En dit is nog steeds 'n bietjie kripties. 685 00:33:13,090 --> 00:33:15,560 >> So laat ek my veranderlikes meer duidelik te maak. 686 00:33:15,560 --> 00:33:17,510 Laat my noem hierdie veranderlike Naam. 687 00:33:17,510 --> 00:33:20,230 En laat ons kyk of ons nie kan terg afgesien wat hier gebeur. 688 00:33:20,230 --> 00:33:22,770 >> So op die lyn vyf, ek kry 'n string. 689 00:33:22,770 --> 00:33:25,620 En ek stoor dit string, ongeag die gebruiker ingetik 690 00:33:25,620 --> 00:33:28,430 op sy of haar sleutelbord, in 'n veranderlike genoem Naam. 691 00:33:28,430 --> 00:33:30,590 En dit blyk dat printf nie net 692 00:33:30,590 --> 00:33:34,220 neem een ​​argument in dubbel aanhalings, een insette in dubbel aanhalings. 693 00:33:34,220 --> 00:33:39,100 >> Dit kan twee, of drie, of meer, soos te neem dat die tweede, of derde, of vierde, 694 00:33:39,100 --> 00:33:42,320 is al die name van veranderlikes, of spesifiek waardes, 695 00:33:42,320 --> 00:33:48,610 wat jy wil aan te sluit in, dinamiese, wat string in aanhalingstekens. 696 00:33:48,610 --> 00:33:52,110 Met ander woorde, wat verkeerd met hierdie sou wees? 697 00:33:52,110 --> 00:33:57,920 As ek sê net hallo naam, agteroorskuinsstreep N, gered my lêer, saamgestel my kode, 698 00:33:57,920 --> 00:34:01,660 en hardloop dit, wat sou gebeur? 699 00:34:01,660 --> 00:34:05,139 >> Dit is net gaan om te sê, hello noem, letterlik N-A-M-E, 700 00:34:05,139 --> 00:34:07,900 wat is 'n soort van dom omdat dis nie anders as die wêreld. 701 00:34:07,900 --> 00:34:10,400 So iets in aanhalingstekens is wat letterlik raak gedruk. 702 00:34:10,400 --> 00:34:12,520 So as ek wil hê 'n plekhouer daar, 703 00:34:12,520 --> 00:34:14,422 Ek moet eintlik om te gebruik 'n paar spesiale sintaksis. 704 00:34:14,422 --> 00:34:17,380 En dit blyk asof jy lees die dokumentasie vir die printf funksie, 705 00:34:17,380 --> 00:34:21,320 Dit sal jou vertel dat As jy gebruik persent s, 706 00:34:21,320 --> 00:34:23,920 jy kan 'n waarde vervang soos volg. 707 00:34:23,920 --> 00:34:27,190 >> Na 'n komma na daardie dubbel kwotasie, jy net 708 00:34:27,190 --> 00:34:29,179 skryf die naam van die veranderlike wat jy wil 709 00:34:29,179 --> 00:34:33,790 aan te sluit in in daardie formaat kode, of formaat specific, 710 00:34:33,790 --> 00:34:35,469 persent s vir snare. 711 00:34:35,469 --> 00:34:39,190 En nou as ek het my lêer gered, Ek gaan terug na my terminale. 712 00:34:39,190 --> 00:34:42,870 En ek tik Maak String, omdat, weer, die naam van hierdie 713 00:34:42,870 --> 00:34:45,510 lêer wat ek gekies het voor is string.c. 714 00:34:45,510 --> 00:34:48,510 >> So ek gaan om te sê Maak String, betree. 715 00:34:48,510 --> 00:34:51,550 Ag, my goedheid, kyk na al die foute wat ons reeds gemaak het. 716 00:34:51,550 --> 00:34:55,540 En dit is-- wat, dit is regtig soos 'n ses, sewe line program? 717 00:34:55,540 --> 00:34:57,790 So is dit waar dit baie kan vinnig oorweldigend. 718 00:34:57,790 --> 00:35:00,890 >> Dit terminale venster nou net regurgitated 719 00:35:00,890 --> 00:35:03,230 'n groot aantal fout boodskappe. 720 00:35:03,230 --> 00:35:07,560 Sekerlik, kan ek nie meer fout boodskappe as wat ek het reëls van die kode. 721 00:35:07,560 --> 00:35:08,680 So, wat gaan aan? 722 00:35:08,680 --> 00:35:10,920 >> Wel, die beste strategie om enige tyd doen jy 723 00:35:10,920 --> 00:35:13,710 moenie teëkom 'n oorweldigende lys van foute soos dié, 724 00:35:13,710 --> 00:35:16,690 is terug blaai, kyk uit vir die opdrag jy net hardloop, wat in my geval 725 00:35:16,690 --> 00:35:18,020 is maak string. 726 00:35:18,020 --> 00:35:21,630 Kyk na wat maak het, en dit is wat lang klang opdrag, geen big deal daar. 727 00:35:21,630 --> 00:35:22,950 >> Maar die rooi is sleg. 728 00:35:22,950 --> 00:35:24,750 Groen probeer wees sagte en hulpvaardig. 729 00:35:24,750 --> 00:35:26,140 Maar dit is nog steeds swak, in hierdie geval. 730 00:35:26,140 --> 00:35:27,510 Maar waar is dit sleg? 731 00:35:27,510 --> 00:35:31,450 >> String.c, lyn vyf, karakter vyf. 732 00:35:31,450 --> 00:35:32,930 So dit is net algemene konvensie. 733 00:35:32,930 --> 00:35:36,060 Iets kolon iets beteken lyn nommer en karakter getal. 734 00:35:36,060 --> 00:35:41,080 Fout, gebruik van swart identifiseerder string. 735 00:35:41,080 --> 00:35:42,900 Het jy standaard in beteken? 736 00:35:42,900 --> 00:35:45,530 >> So, ongelukkig, klang probeer om behulpsaam te wees. 737 00:35:45,530 --> 00:35:46,850 Maar dit is verkeerd, in hierdie geval. 738 00:35:46,850 --> 00:35:49,350 Nee, klang, ek het nie bedoel standaard IO. 739 00:35:49,350 --> 00:35:51,070 Ek het beteken dat op die lyn een, ja. 740 00:35:51,070 --> 00:35:53,420 >> Maar lyn vyf is hierdie een hier. 741 00:35:53,420 --> 00:35:57,040 En klang nie verstaan ​​S-T-R-ek-N-G. 742 00:35:57,040 --> 00:36:01,490 Dit is 'n onverklaarde identifiseerder, 'n woord is dit net nog nooit voorheen gesien het. 743 00:36:01,490 --> 00:36:05,730 En dit is omdat C, die taal ons wil skryf kode in die oomblik, 744 00:36:05,730 --> 00:36:08,070 nie veranderlikes genoem snare het. 745 00:36:08,070 --> 00:36:11,380 >> Dit maak nie, by verstek, ondersteuning iets genaamd 'n string. 746 00:36:11,380 --> 00:36:16,750 Dit is 'n CS50 stuk jargon, maar baie konvensionele. 747 00:36:16,750 --> 00:36:18,600 Maar ek kan dit soos volg op te los. 748 00:36:18,600 --> 00:36:22,090 >> As ek voeg 'n reël van die kode na die top van hierdie program, 749 00:36:22,090 --> 00:36:27,890 sluit CS50.h, wat ook 'n lêer iewers binnekant van CS50 IDE, iewers 750 00:36:27,890 --> 00:36:30,820 op die hardeskyf, so te sê, van die Ubuntu bedryfstelsel 751 00:36:30,820 --> 00:36:33,590 dat Ek hardloop, wat is die lêer wat 752 00:36:33,590 --> 00:36:38,740 gaan die bedryfstelsel te leer stelsel wat 'n string is, net 753 00:36:38,740 --> 00:36:41,930 soos standaard io.h is die lêer in die bedryfstelsel wat 754 00:36:41,930 --> 00:36:44,430 gaan dit leer wat printf is. 755 00:36:44,430 --> 00:36:46,810 >> Inderdaad, sal ons gekry het 'n baie soortgelyke boodskap 756 00:36:46,810 --> 00:36:50,600 As IO standaard het toegelaat IO.h en probeer om printf gebruik. 757 00:36:50,600 --> 00:36:53,632 So ek gaan voort en gaan net Neem beheer L om my skerm skoon te maak. 758 00:36:53,632 --> 00:36:56,340 Of jy kan duidelik tik en dit sal net duidelik dat die terminale venster. 759 00:36:56,340 --> 00:36:58,020 Maar jy kan nog steeds blaai terug in die tyd. 760 00:36:58,020 --> 00:37:01,100 >> En ek gaan tik Maak String. 761 00:37:01,100 --> 00:37:03,660 Kruis my vingers hierdie keer, Tik. 762 00:37:03,660 --> 00:37:05,380 O my God, dit het gewerk. 763 00:37:05,380 --> 00:37:09,280 dit wys my 'n lang kriptiese command dit is wat Maak gegenereer via klang, 764 00:37:09,280 --> 00:37:10,460 maar geen fout boodskappe. 765 00:37:10,460 --> 00:37:12,460 So besef, selfs al jy dalk heeltemal te kry 766 00:37:12,460 --> 00:37:14,480 oorweldig met die aantal fout boodskappe, 767 00:37:14,480 --> 00:37:17,540 Dit mag dalk net hierdie irriterende waterval wees effek, waar klang nie verstaan 768 00:37:17,540 --> 00:37:19,620 een ding wat dit beteken dan verstaan ​​nie die volgende woord, 769 00:37:19,620 --> 00:37:20,560 of die volgende lyn. 770 00:37:20,560 --> 00:37:22,850 En so is dit net verstik op jou kode. 771 00:37:22,850 --> 00:37:24,440 Maar die oplossing kan eenvoudig wees. 772 00:37:24,440 --> 00:37:27,822 En so het altyd fokus op die heel eerste lyn van die produksie. 773 00:37:27,822 --> 00:37:29,530 En as jy dit nie doen nie verstaan ​​dit, kyk net 774 00:37:29,530 --> 00:37:32,480 vir sleutelwoorde wat dalk leidrade, en die lyn nommer, 775 00:37:32,480 --> 00:37:34,650 en die karakter, waar wat fout kan wees. 776 00:37:34,650 --> 00:37:40,328 >> Nou kan ek gaan voort en tik dot streep, string, betree. 777 00:37:40,328 --> 00:37:44,340 Hm, dit is nie te sê hallo enigiets. 778 00:37:44,340 --> 00:37:46,210 Hoekom? 779 00:37:46,210 --> 00:37:48,170 Wel, onthou, waar is dit loop? 780 00:37:48,170 --> 00:37:53,730 >> Dit is waarskynlik vas op die oomblik in 'n lus, as jy wil, op die lyn ses, 781 00:37:53,730 --> 00:37:56,950 omdat Kry String deur ontwerp, geskryf deur CS50 personeel, 782 00:37:56,950 --> 00:38:00,350 is letterlik bedoel om net te sit daar wag, en wag, 783 00:38:00,350 --> 00:38:01,850 en wag vir 'n string. 784 00:38:01,850 --> 00:38:03,792 Alle bedoel ons deur string is menslike insette. 785 00:38:03,792 --> 00:38:04,500 So jy weet wat? 786 00:38:04,500 --> 00:38:05,166 Laat my gaan voort. 787 00:38:05,166 --> 00:38:08,704 En net op 'n bevlieging, laat my tik my naam, Dawid, te gaan. 788 00:38:08,704 --> 00:38:10,120 Nou het ek 'n meer dinamiese program. 789 00:38:10,120 --> 00:38:11,240 Daar word gesê dat, hallo Dawid. 790 00:38:11,240 --> 00:38:16,280 >> As ek gaan voort en loop dit weer, laat ek probeer sê Zamila naam, betree. 791 00:38:16,280 --> 00:38:17,940 En nou het ons 'n dinamiese program. 792 00:38:17,940 --> 00:38:19,380 Ek het nie hard gekodeer wêreld. 793 00:38:19,380 --> 00:38:21,760 Ek het nie hard gekodeer noem, of Dawid, of Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Nou is dit baie meer soos die programme ons weet, waar as dit neem insette, 795 00:38:25,350 --> 00:38:27,870 dit produseer effens anders uitset. 796 00:38:27,870 --> 00:38:31,020 Nou, dit is nie die beste gebruikers ervaring, of UX. 797 00:38:31,020 --> 00:38:33,000 Ek hardloop die program. 798 00:38:33,000 --> 00:38:35,830 >> Ek weet nie wat ek veronderstel om te doen nie, tensy ek eintlik kyk na 799 00:38:35,830 --> 00:38:37,290 of onthou die bronkode. 800 00:38:37,290 --> 00:38:39,640 So kom ons maak die gebruiker ervaar 'n bietjie beter 801 00:38:39,640 --> 00:38:41,240 met die eenvoudigste dinge. 802 00:38:41,240 --> 00:38:44,782 Laat my terug te gaan na hierdie program, en net sê printf. 803 00:38:44,782 --> 00:38:48,870 >> En laat ek gaan voort en sê naam, kolon, en 'n ruimte, en dan 'n kommapunt. 804 00:38:48,870 --> 00:38:51,170 En net vir skoppe, geen teenreaksie N. 805 00:38:51,170 --> 00:38:52,980 En dit is doelbewuste, want ek wil nie 806 00:38:52,980 --> 00:38:54,590 die vinnige om te skuif na die volgende lyn. 807 00:38:54,590 --> 00:38:58,800 >> Ek wil, in plaas daarvan, doen dit, maak string om my kode in nuwe masjien heropstel 808 00:38:58,800 --> 00:39:00,980 -kode dot streep string. 809 00:39:00,980 --> 00:39:02,460 Ag, dit is baie mooier. 810 00:39:02,460 --> 00:39:05,780 Nou ek eintlik weet wat die rekenaar wil hê ek moet doen, gee dit 'n naam. 811 00:39:05,780 --> 00:39:10,020 >> So ek gaan om voort te gaan en tik in Rob, betree, en hallo, Rob. 812 00:39:10,020 --> 00:39:13,640 So, besef, dit is nog steeds aan die einde van die dag, net 'n nege line program. 813 00:39:13,640 --> 00:39:15,090 Maar ons het hierdie baba stappe geneem. 814 00:39:15,090 --> 00:39:18,380 >> Ons het 'n reël waarmee ons was bekend, printf, hello world. 815 00:39:18,380 --> 00:39:19,980 Dan ongedaan ons 'n bietjie van daardie. 816 00:39:19,980 --> 00:39:21,560 En ons eintlik gebruik get string. 817 00:39:21,560 --> 00:39:23,362 En ons geteister dat waarde in 'n veranderlike. 818 00:39:23,362 --> 00:39:26,070 En dan het ons voort en verbeter dit verder met 'n derde lyn. 819 00:39:26,070 --> 00:39:29,220 En dit iteratiewe proses van skryf sagteware is werklik die sleutel. 820 00:39:29,220 --> 00:39:33,420 In CS50, en in die lewe in die algemeen, jy moet in die algemeen nie gaan sit, 821 00:39:33,420 --> 00:39:36,800 'n program in gedagte, en probeer skryf die hele damn ding alles op een slag. 822 00:39:36,800 --> 00:39:40,810 >> Dit sal onvermydelik lei tot manier meer foute as wat ons onsself hier gesien. 823 00:39:40,810 --> 00:39:44,070 Selfs ek, tot vandag toe, voortdurend maak ander dom foute, 824 00:39:44,070 --> 00:39:47,480 is eintlik harder foute wat is moeiliker om uit te vind. 825 00:39:47,480 --> 00:39:52,095 Maar jy sal meer foute die meer te maak reëls van die kode wat jy skryf alles op een slag. 826 00:39:52,095 --> 00:39:54,220 En so hierdie praktyk van, skryf 'n bietjie van die kode 827 00:39:54,220 --> 00:39:57,930 waarmee jy gemaklik is, saam te stel dit, hardloop dit, toets dit meer algemeen, 828 00:39:57,930 --> 00:40:01,370 dan beweeg is-- sodat net soos ons gehou gelaagdheid en gelaagdheid verlede week, 829 00:40:01,370 --> 00:40:04,190 bou van iets baie maklik om iets meer kompleks, 830 00:40:04,190 --> 00:40:05,200 doen hier dieselfde. 831 00:40:05,200 --> 00:40:08,500 Moenie gaan sit, en probeer om skryf 'n hele probleem. 832 00:40:08,500 --> 00:40:10,780 Eintlik neem hierdie baba stappe. 833 00:40:10,780 --> 00:40:15,100 >> Nou, snare is nie almal wat nuttig vir hulleself. 834 00:40:15,100 --> 00:40:18,210 Ons wil eintlik, ideaal, soos om het iets anders in ons toolkit. 835 00:40:18,210 --> 00:40:20,990 So laat ons eintlik presies dit te doen. 836 00:40:20,990 --> 00:40:24,900 >> Laat my tog gaan voort en sweep 'n effens ander program. 837 00:40:24,900 --> 00:40:28,320 En ons sal dit int.c noem, vir heelgetal. 838 00:40:28,320 --> 00:40:30,870 Ek gaan, op soortgelyke wyse, sluit CS550.h. 839 00:40:30,870 --> 00:40:33,060 Ek gaan standaard IO sluit. 840 00:40:33,060 --> 00:40:36,630 En wat gaan redelik algemeen te wees in hierdie eerste paar dae van die klas. 841 00:40:36,630 --> 00:40:39,050 >> En ek gaan gereed myself met 'n hooffunksie. 842 00:40:39,050 --> 00:40:43,370 En nou in plaas van om 'n string, Kom ons gaan voort en kry 'n int. 843 00:40:43,370 --> 00:40:49,285 Kom ons noem dit miskien ek, en noem dit kry int, naby hakies, kommapunt. 844 00:40:49,285 --> 00:40:51,410 En nou kom ons doen iets daarmee, printf. 845 00:40:51,410 --> 00:40:56,190 >> Kom ons sê iets soos hello, agteroorskuinsstreep N, komma i. 846 00:40:56,190 --> 00:41:00,010 So ek pretty much naboots wat ek gedoen het net 'n oomblik gelede. 847 00:41:00,010 --> 00:41:01,660 Ek het 'n plekhouer hier. 848 00:41:01,660 --> 00:41:05,150 Ek moet kook Ek hier komma, want ek wil om i prop in daardie plekhouer. 849 00:41:05,150 --> 00:41:07,250 >> So laat ons gaan voort en probeer opstel van hierdie program. 850 00:41:07,250 --> 00:41:10,060 Die lêer genoem int.c. 851 00:41:10,060 --> 00:41:12,920 So ek gaan om te sê, maak int, betree. 852 00:41:12,920 --> 00:41:16,420 O my God, maar daar is geen big deal nie, reg? 853 00:41:16,420 --> 00:41:17,230 Daar is 'n fout. 854 00:41:17,230 --> 00:41:19,810 >> Daar is 'n sintaktiese fout hier so dat die program kan nie 855 00:41:19,810 --> 00:41:25,460 saamgestel word binne int.c, lyn sewe, karakter 27, fout-formaat 856 00:41:25,460 --> 00:41:28,400 spesifiseer tipe char ster, wat dit ook al is. 857 00:41:28,400 --> 00:41:30,020 Maar die argument tipe is Int. 858 00:41:30,020 --> 00:41:33,110 >> So hier ook ons ​​gaan nie aan- selfs al is vandag 'n baie materiaal, 859 00:41:33,110 --> 00:41:35,710 ons gaan jou oorweldig met absoluut elke kenmerk van C, 860 00:41:35,710 --> 00:41:38,070 en programmering meer algemeen, in net hierdie eerste paar weke. 861 00:41:38,070 --> 00:41:40,400 Daar is dus dikwels gaan wees jargon waarmee jy nie vertroud is. 862 00:41:40,400 --> 00:41:43,350 En, in werklikheid, kar ster is iets ons gaan om terug te kom na 863 00:41:43,350 --> 00:41:44,830 in 'n week of twee se tyd. 864 00:41:44,830 --> 00:41:47,530 >> Maar vir nou, laat ons kyk of ons kan ontleed woorde wat vertroud is. 865 00:41:47,530 --> 00:41:50,750 Formate- so hoor ons formaat specific, formaat kode voor. 866 00:41:50,750 --> 00:41:51,840 Dit is bekend. 867 00:41:51,840 --> 00:41:53,840 Type-- maar die argument verloor tipe int. 868 00:41:53,840 --> 00:41:55,980 Wag 'n bietjie, ek is 'n int. 869 00:41:55,980 --> 00:41:59,230 >> Miskien persent s eintlik het 'n paar gedefinieer betekenis. 870 00:41:59,230 --> 00:42:00,230 En, inderdaad, dit doen. 871 00:42:00,230 --> 00:42:03,101 'N heelgetal, as jy wil printf om dit te vervang, 872 00:42:03,101 --> 00:42:05,350 jy eintlik 'n gebruik verskillende formaat specific. 873 00:42:05,350 --> 00:42:06,890 En jy sal nie weet nie tensy iemand jou vertel, 874 00:42:06,890 --> 00:42:07,973 of jy het dit voorheen gedoen. 875 00:42:07,973 --> 00:42:10,490 Maar persent Ek is wat kan algemeen gebruik word 876 00:42:10,490 --> 00:42:12,240 in printf vir die steek in 'n heelgetal. 877 00:42:12,240 --> 00:42:14,920 Jy kan ook gebruik persent D vir 'n desimale heelgetal. 878 00:42:14,920 --> 00:42:16,490 Maar ek is mooi en eenvoudig hier. 879 00:42:16,490 --> 00:42:17,590 So ons gaan met dit. 880 00:42:17,590 --> 00:42:21,160 >> Nou kan ek gaan voort en tik maak int, Tik. 881 00:42:21,160 --> 00:42:23,328 Dis goed, geen foute. 882 00:42:23,328 --> 00:42:27,260 Dot streep int-- OK, slegte gebruikers ervaring, omdat ek myself nie gesê het 883 00:42:27,260 --> 00:42:27,760 wat om te doen. 884 00:42:27,760 --> 00:42:28,426 Maar dit is goed. 885 00:42:28,426 --> 00:42:29,480 Ek vang op vinnig. 886 00:42:29,480 --> 00:42:36,260 >> En nou dat ek kan gaan voort en tik in Dawid, OK, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 OK, so dit is 'n goeie ding. 888 00:42:37,820 --> 00:42:41,710 Hierdie keer, ek gebruik 'n funksie, 'n legkaart stuk, genaamd get Int. 889 00:42:41,710 --> 00:42:44,230 En dit blyk out-- en ons sal sien dit later in die term-- 890 00:42:44,230 --> 00:42:47,730 die CS50 personeel geïmplementeer kry string in so 'n manier 891 00:42:47,730 --> 00:42:50,350 dat dit sal eers fisies kry 'n string vir jou. 892 00:42:50,350 --> 00:42:54,340 >> Dit het get int geïmplementeer in so 'n manier dat dit sal slegs 893 00:42:54,340 --> 00:42:55,590 kry 'n heelgetal vir jou. 894 00:42:55,590 --> 00:42:57,830 En as jy, die mens, nie saamwerk nie, dis 895 00:42:57,830 --> 00:43:00,590 letterlik net gaan sê weer probeer, weer probeer, weer probeer, 896 00:43:00,590 --> 00:43:05,200 letterlik sit daar herhaling, totdat jy dwing met 'n paar magiese getal, 897 00:43:05,200 --> 00:43:07,670 soos 50, en hallo 50. 898 00:43:07,670 --> 00:43:11,440 >> Of as ons hardloop dit weer en tik 42, hello 42. 899 00:43:11,440 --> 00:43:15,750 En so het die get int funksie binnekant van daardie legkaart stuk 900 00:43:15,750 --> 00:43:19,050 is genoeg logika, genoeg gedagte, om uit te vind, wat is 'n woord? 901 00:43:19,050 --> 00:43:20,330 En wat is 'n nommer? 902 00:43:20,330 --> 00:43:23,165 Slegs die aanvaarding uiteindelik getalle. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> So dit blyk dat hierdie is nie alles wat ekspressiewe. 905 00:43:30,230 --> 00:43:30,910 sover. 906 00:43:30,910 --> 00:43:33,690 So, yay, laaste keer dat ons het redelik vinnig 907 00:43:33,690 --> 00:43:38,320 in die uitvoering van speletjies, en animasie, en artistieke werke in Scratch. 908 00:43:38,320 --> 00:43:42,260 En hier, ons word inhoud met Hello World, en hallo 50. 909 00:43:42,260 --> 00:43:43,696 >> Dit is nie al wat inspirerend. 910 00:43:43,696 --> 00:43:46,070 En, inderdaad, hierdie eerste paar voorbeelde sal 'n tyd neem 911 00:43:46,070 --> 00:43:47,510 om te oprit in opgewondenheid. 912 00:43:47,510 --> 00:43:49,854 Maar ons het soveel meer beheer nou, in werklikheid. 913 00:43:49,854 --> 00:43:51,770 En ons gaan baie vinnig begin gelaagdheid 914 00:43:51,770 --> 00:43:53,870 op die top van hierdie basiese primitiewes. 915 00:43:53,870 --> 00:43:56,370 >> Maar eers, laat ons verstaan wat die beperkings is. 916 00:43:56,370 --> 00:43:58,620 Trouens, een van die dinge Kras nie maklik 917 00:43:58,620 --> 00:44:00,990 Laat ons doen is regtig kyk onder die enjinkap, 918 00:44:00,990 --> 00:44:03,740 en te verstaan ​​wat 'n rekenaar is, wat dit kan doen, 919 00:44:03,740 --> 00:44:05,250 en wat sy beperkinge is. 920 00:44:05,250 --> 00:44:08,580 En, inderdaad, dat 'n gebrek aan begrip, potensieel, langtermyn 921 00:44:08,580 --> 00:44:12,520 kan lei tot ons eie mistakes-- skryf foute, skryf onseker sagteware wat 922 00:44:12,520 --> 00:44:13,880 kry gekap in een of ander manier. 923 00:44:13,880 --> 00:44:17,130 >> So laat ons neem 'n paar stappe in die rigting van verstaan ​​dit 'n bietjie beter deur 924 00:44:17,130 --> 00:44:19,710 manier van sê, die volgende voorbeeld. 925 00:44:19,710 --> 00:44:23,550 Ek gaan om voort te gaan en te implementeer werklike vinnige 'n program genaamd basilisk. 926 00:44:23,550 --> 00:44:25,134 Soos, laat ons 'n paar nommers saam te voeg. 927 00:44:25,134 --> 00:44:27,800 En ek gaan 'n paar hoeke kodeer hier, en net kopieer en plak 928 00:44:27,800 --> 00:44:30,270 waar ek was voor, net sodat ons kan kry gouer gaan. 929 00:44:30,270 --> 00:44:33,090 So nou het ek die basiese begin het van 'n program genaamd basilisk. 930 00:44:33,090 --> 00:44:34,670 >> En laat ons gaan voort en doen dit. 931 00:44:34,670 --> 00:44:38,680 Ek gaan om voort te gaan en sê, intx kry kry Int. 932 00:44:38,680 --> 00:44:39,430 En weet jy wat? 933 00:44:39,430 --> 00:44:40,990 Kom ons maak 'n beter gebruikers ervaring. 934 00:44:40,990 --> 00:44:45,740 >> So laat ons net sê x is, en effektief gevra die gebruiker in staat om ons x gee. 935 00:44:45,740 --> 00:44:50,600 En dan laat ek gaan voort en sê: printf Hoe gaan dit met y is, hierdie keer verwag 936 00:44:50,600 --> 00:44:53,140 twee waardes van die gebruiker. 937 00:44:53,140 --> 00:44:59,759 En dan laat ons net voort te gaan en sê, printf, die som van x en y is. 938 00:44:59,759 --> 00:45:01,300 En nou weet ek nie wil persent s doen. 939 00:45:01,300 --> 00:45:09,080 Ek wil persent ek doen, agteroorskuinsstreep N, en dan prop in som waarde. 940 00:45:09,080 --> 00:45:10,620 >> So, hoe kan ek te werk gaan om dit te doen? 941 00:45:10,620 --> 00:45:11,270 Jy weet wat? 942 00:45:11,270 --> 00:45:12,840 Ek weet hoe om veranderlikes te gebruik. 943 00:45:12,840 --> 00:45:15,140 Laat my net te verklaar 'n nuwe een, int Z. 944 00:45:15,140 --> 00:45:16,770 >> En ek gaan 'n raaiskoot hier neem. 945 00:45:16,770 --> 00:45:21,470 Indien daar gelyke tekens in hierdie taal, miskien kan ek net x plus y doen, 946 00:45:21,470 --> 00:45:23,660 so lank as wat ek my gedink met 'n kommapunt? 947 00:45:23,660 --> 00:45:28,170 Nou kan ek teruggaan hier af, prop in Z, voltooi hierdie gedagte met 'n kommapunt. 948 00:45:28,170 --> 00:45:33,160 En laat ons sien nou, as hierdie rye van lines-- x kry Int. 949 00:45:33,160 --> 00:45:34,770 Y is kry Int. 950 00:45:34,770 --> 00:45:37,980 >> Voeg x en y, slaan die waarde in z-- so, weer, onthou die gelyk teken 951 00:45:37,980 --> 00:45:38,560 is nie reg nie. 952 00:45:38,560 --> 00:45:41,100 Dis opdrag van regs na links. 953 00:45:41,100 --> 00:45:45,180 En laat ons uit te druk dat die som van x en y is nie letterlik Z, 954 00:45:45,180 --> 00:45:46,830 maar wat is binnekant van Z. 955 00:45:46,830 --> 00:45:50,090 So kom ons maak Adder - mooi, geen foute hierdie tyd. 956 00:45:50,090 --> 00:45:53,030 Dot streep Adder, betree, x gaan wees 1. 957 00:45:53,030 --> 00:45:55,380 >> Y gaan wees 2. 958 00:45:55,380 --> 00:45:58,964 En die som van x en y is 3. 959 00:45:58,964 --> 00:46:00,130 So dit is alles goed en wel. 960 00:46:00,130 --> 00:46:03,260 >> So jy sou dink dat wiskunde moet werk in 'n program soos hierdie. 961 00:46:03,260 --> 00:46:04,040 Maar jy weet wat? 962 00:46:04,040 --> 00:46:06,904 Is dit veranderlike, lyn 12, selfs nodig? 963 00:46:06,904 --> 00:46:09,820 Jy hoef nie in die gewoonte te kom van net die stoor van dinge in veranderlikes 964 00:46:09,820 --> 00:46:10,980 net omdat jy kan. 965 00:46:10,980 --> 00:46:13,550 En, in werklikheid, is dit oor die algemeen beskou as slegte ontwerp 966 00:46:13,550 --> 00:46:18,100 As jy is die skep van 'n veranderlike, genoem Z in hierdie geval, die stoor van iets in dit, 967 00:46:18,100 --> 00:46:21,390 en dan onmiddellik gebruik dit, maar nooit weer. 968 00:46:21,390 --> 00:46:24,700 Hoekom gee iets 'n naam soos Z as jy letterlik 969 00:46:24,700 --> 00:46:26,770 gaan gebruik wat ding net een keer, en so 970 00:46:26,770 --> 00:46:29,380 proksimaal tot waar jy geskape dit in die eerste plek, 971 00:46:29,380 --> 00:46:31,052 so naby in terme van reëls van die kode? 972 00:46:31,052 --> 00:46:31,760 So jy weet wat? 973 00:46:31,760 --> 00:46:34,480 Dit blyk dat C is redelik buigsaam. 974 00:46:34,480 --> 00:46:36,586 As ek wil eintlik aan plug-in waardes hier, 975 00:46:36,586 --> 00:46:38,210 Ek het nie nodig om 'n nuwe veranderlike verklaar. 976 00:46:38,210 --> 00:46:41,680 Ek kon net plug-in x plus y, want C verstaan 977 00:46:41,680 --> 00:46:43,390 rekenkundige en wiskundige operateurs. 978 00:46:43,390 --> 00:46:47,140 >> So kan ek net sê, doen dit wiskunde, x plus y, wat ook al die waardes is, 979 00:46:47,140 --> 00:46:50,780 prop die gevolglike heelgetal in daardie string. 980 00:46:50,780 --> 00:46:53,730 So dit kan wees, maar slegs een lyn korter, 981 00:46:53,730 --> 00:46:58,480 'n beter ontwerp, 'n beter program, want daar is minder kode, dus 982 00:46:58,480 --> 00:46:59,921 minder vir my om te verstaan. 983 00:46:59,921 --> 00:47:01,920 En dit is ook net skoner, sover ons nie 984 00:47:01,920 --> 00:47:04,620 die bekendstelling van nuwe woorde, nuwe simbole, soos Z, 985 00:47:04,620 --> 00:47:07,510 selfs al is hulle nie regtig dien veel van 'n doel. 986 00:47:07,510 --> 00:47:12,890 >> Ongelukkig wiskunde is nie alles wat betroubaar soms. 987 00:47:12,890 --> 00:47:15,270 Kom ons gaan voort en doen dit. 988 00:47:15,270 --> 00:47:18,200 Ek gaan om voort te gaan nou en doen die volgende. 989 00:47:18,200 --> 00:47:27,650 >> Kom ons doen printf, persent i, plus persent Ek sal persent i, agteroorskuinsstreep N wees. 990 00:47:27,650 --> 00:47:32,240 En ek gaan this-- xyx plus y doen. 991 00:47:32,240 --> 00:47:34,821 So ek gaan net om te herskryf hierdie effens anders hier. 992 00:47:34,821 --> 00:47:36,320 Laat my net te doen 'n vinnige gesonde verstand tjek. 993 00:47:36,320 --> 00:47:37,986 Weereens, laat ons nie voor ons kry. 994 00:47:37,986 --> 00:47:41,420 Maak adder, dot streep basilisk. 995 00:47:41,420 --> 00:47:44,950 x is 1, y is 2, 1 en 2 is 3. 996 00:47:44,950 --> 00:47:45,870 So dit is 'n goeie. 997 00:47:45,870 --> 00:47:49,060 Maar laat ons nou bemoeilik hierdie 'n bietjie, en die skep van 'n nuwe lêer. 998 00:47:49,060 --> 00:47:53,350 >> Ek gaan hierdie een te roep, sê, SY, meervoud vir heelgetalle. 999 00:47:53,350 --> 00:47:55,980 Laat my begin waar ek 'n oomblik gelede was. 1000 00:47:55,980 --> 00:47:57,770 Maar nou kom ons doen 'n paar ander lyne. 1001 00:47:57,770 --> 00:48:03,430 Laat my gaan voort en doen die volgende, printf, persent i, minus persent i, 1002 00:48:03,430 --> 00:48:08,959 is persent i, komma x, komma yx minus y. 1003 00:48:08,959 --> 00:48:10,750 Dus is ek effens doen verskillende wiskunde is daar. 1004 00:48:10,750 --> 00:48:11,624 Kom ons doen 'n ander een. 1005 00:48:11,624 --> 00:48:16,610 So persent i keer persent Ek is persent i, agteroorskuinsstreep N. 1006 00:48:16,610 --> 00:48:21,430 Kom ons plug-in x en y, en x keer y. 1007 00:48:21,430 --> 00:48:24,530 Ons sal die asterisk gebruik op jou rekenaar vir tye. 1008 00:48:24,530 --> 00:48:26,390 >> Jy hoef nie te gebruik x. x is 'n veranderlike naam hier. 1009 00:48:26,390 --> 00:48:28,270 Jy gebruik die ster vir vermenigvuldiging. 1010 00:48:28,270 --> 00:48:29,020 Kom ons doen 'n baie meer. 1011 00:48:29,020 --> 00:48:34,580 Printf persent ek, verdeel deur persent i, is persent i, 1012 00:48:34,580 --> 00:48:40,460 agteroorskuinsstreep N. xy gedeel deur y-- sodat jy die slash in C gebruik 1013 00:48:40,460 --> 00:48:41,502 om verdeeldheid te doen. 1014 00:48:41,502 --> 00:48:42,460 En laat ons nie een ander. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Res van persent i, verdeel deur persent i, is persent i. 1017 00:48:55,240 --> 00:48:59,550 xy-- en nou restant is wat oorgebly het. 1018 00:48:59,550 --> 00:49:02,980 As jy probeer verdeel 'n deler op 'n teller, 1019 00:49:02,980 --> 00:49:05,570 hoeveel oorbly wat jy kan nie verdeel word? 1020 00:49:05,570 --> 00:49:07,910 >> Daar is dus nie regtig nie, noodwendig, 'n simbool 1021 00:49:07,910 --> 00:49:09,470 Ons het in graad skool hiervoor gebruik. 1022 00:49:09,470 --> 00:49:13,830 Maar daar in C. Jy kan sê x modulo y, waar 1023 00:49:13,830 --> 00:49:18,000 hierdie persent teken in hierdie context-- verwarrend wanneer jy binne-in 1024 00:49:18,000 --> 00:49:20,170 van die dubbele aanhalingstekens, binnekant van printf, persent 1025 00:49:20,170 --> 00:49:21,830 word gebruik as die formaat specific. 1026 00:49:21,830 --> 00:49:25,420 >> Wanneer jy gebruik persent buite wat in 'n wiskundige uitdrukking, 1027 00:49:25,420 --> 00:49:29,910 dis die modulo operateur vir modulêre arithmetic-- vir ons doeleindes 1028 00:49:29,910 --> 00:49:33,650 hier, net beteken, wat is die res van x gedeel deur y? 1029 00:49:33,650 --> 00:49:36,130 So x gedeel deur y x streep y. 1030 00:49:36,130 --> 00:49:38,220 Wat is die res van x gedeel deur y? 1031 00:49:38,220 --> 00:49:41,780 Dis x mod y, as 'n programmeerder sou sê. 1032 00:49:41,780 --> 00:49:48,300 >> So as ek nie foute hier gemaak, laat my gaan voort en maak SY, meervoud, mooi, 1033 00:49:48,300 --> 00:49:50,010 en dot streep SY. 1034 00:49:50,010 --> 00:49:55,270 En laat ons gaan voort en doen, kom ons sê, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Goed, 1 plus 10 is 11, tjek. 1036 00:49:58,390 --> 00:50:01,240 1 minus 10 negatief 9, na te gaan. 1037 00:50:01,240 --> 00:50:03,420 >> 1 keer 10 10, tjek. 1038 00:50:03,420 --> 00:50:07,090 1 gedeel deur 10 is-- OK, ons sal dit een slaan. 1039 00:50:07,090 --> 00:50:09,480 Restant van 1 gedeel deur 10 is 1. 1040 00:50:09,480 --> 00:50:10,680 Dit is korrek. 1041 00:50:10,680 --> 00:50:12,630 Maar daar is 'n fout in hier. 1042 00:50:12,630 --> 00:50:15,390 >> So het die een wat ek het my oorhandig, nie korrek nie. 1043 00:50:15,390 --> 00:50:16,670 Ek bedoel, dit is naby aan 0. 1044 00:50:16,670 --> 00:50:20,670 1 gedeel deur 10, jy weet, as ons sny 'n paar hoeke, seker, dit is zero. 1045 00:50:20,670 --> 00:50:28,050 Maar dit moet regtig wees 10/1, 0.1, of 0.10, 0,1000, of dies meer. 1046 00:50:28,050 --> 00:50:30,600 >> Dit moet regtig nie nul wees. 1047 00:50:30,600 --> 00:50:35,990 Wel, dit blyk dat die rekenaar is doen letterlik wat ons vertel om dit te doen. 1048 00:50:35,990 --> 00:50:39,460 Ons doen wiskunde soos x gedeel deur y. 1049 00:50:39,460 --> 00:50:44,680 En beide x en y, volgens die lyne van-kode vroeër, heelgetalle. 1050 00:50:44,680 --> 00:50:50,440 >> Verder, op die lyn 15, ons is vertel printf, hey, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 'n heelgetal, plug-in 'n heelgetal, plug-in 'n integer-- spesifiek 1052 00:50:54,230 --> 00:50:57,580 x, en dan y, en dan x gedeel deur y. x en y is SY. 1053 00:50:57,580 --> 00:50:59,060 Ons is daar 'n goeie. 1054 00:50:59,060 --> 00:51:01,250 >> Maar wat is x gedeel deur x? 1055 00:51:01,250 --> 00:51:06,790 x gedeel deur y moet wees, wiskundig, 10/01, of 0.1, 1056 00:51:06,790 --> 00:51:11,600 wat 'n reële getal, 'n reële getal met, potensieel, 'n desimale punt. 1057 00:51:11,600 --> 00:51:13,230 Dit is nie 'n heelgetal. 1058 00:51:13,230 --> 00:51:18,290 >> Maar wat is die naaste heelgetal tot 10/01, of 0.1? 1059 00:51:18,290 --> 00:51:21,114 Ja, dit soort van nul. 1060 00:51:21,114 --> 00:51:22,030 0.1 is soos volg veel. 1061 00:51:22,030 --> 00:51:22,890 En 1 is dit baie. 1062 00:51:22,890 --> 00:51:25,870 So 1/10 is nader aan 0 as wat dit is om 'n. 1063 00:51:25,870 --> 00:51:30,800 >> En so what C doen vir us-- soort, want ons het dit aan- 1064 00:51:30,800 --> 00:51:32,600 is truncating dat heelgetal. 1065 00:51:32,600 --> 00:51:40,540 Dit neem die waarde, wat weer is veronderstel om iets soos 0,1000 wees, 1066 00:51:40,540 --> 00:51:41,800 0 en dies meer. 1067 00:51:41,800 --> 00:51:45,320 En dit is truncating alles nadat die desimale punt 1068 00:51:45,320 --> 00:51:47,510 sodat al hierdie dinge dinge, omdat dit nie gebeur nie 1069 00:51:47,510 --> 00:51:51,910 pas in die idee van 'n heelgetal, wat is net 'n nommer soos negatiewe 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 op en af, dit gooi alles weg nadat die desimale punt omdat jy 1071 00:51:55,830 --> 00:51:59,020 kan nie inpas n desimale punt in 'n heelgetal per definisie. 1072 00:51:59,020 --> 00:52:01,290 >> So die antwoord hier is nul. 1073 00:52:01,290 --> 00:52:02,600 So hoe kan ons dit regmaak? 1074 00:52:02,600 --> 00:52:04,400 Ons moet 'n ander oplossing almal saam. 1075 00:52:04,400 --> 00:52:06,880 En ons kan dit doen, soos volg. 1076 00:52:06,880 --> 00:52:12,820 >> Laat my gaan voort en 'n nuwe lêer, die een wat geroep is floats.c. 1077 00:52:12,820 --> 00:52:16,500 En stoor dit hier in die dieselfde gids, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 En laat ek gaan voort en kopieer sommige van daardie kode van vroeër. 1080 00:52:23,260 --> 00:52:27,690 >> Maar in plaas van om 'n int, laat ons dit doen. 1081 00:52:27,690 --> 00:52:31,037 Gee my 'n drywende punt waarde genoem x. waar 'n drywende punt 1082 00:52:31,037 --> 00:52:33,370 waarde is net letterlik iets met 'n drywende punt. 1083 00:52:33,370 --> 00:52:34,410 Dit kan skuif na links, na regs. 1084 00:52:34,410 --> 00:52:35,530 Dit is 'n reële getal. 1085 00:52:35,530 --> 00:52:38,050 >> En laat my nie bel kry int, maar kry vlot, 1086 00:52:38,050 --> 00:52:41,420 wat ook onder die spyskaart van opsies in die C250 biblioteek. 1087 00:52:41,420 --> 00:52:43,220 Kom ons y verander na 'n float. 1088 00:52:43,220 --> 00:52:45,000 So dit raak te kry float. 1089 00:52:45,000 --> 00:52:47,620 >> En nou, ons wil nie aan te sluit in SY. 1090 00:52:47,620 --> 00:52:53,130 Dit blyk ons ​​persent gebruik f vir float, persent f vir float, 1091 00:52:53,130 --> 00:52:54,560 en nou stoor dit. 1092 00:52:54,560 --> 00:53:01,220 En nou, vingers gekruis, maak dryf, mooi, dot streep dryf. 1093 00:53:01,220 --> 00:53:04,280 x gaan een 1. y Gaan weer 10. 1094 00:53:04,280 --> 00:53:08,240 >> En, mooi, OK my Daarbenewens is korrek. 1095 00:53:08,240 --> 00:53:10,240 Ek het gehoop vir meer, maar ek het vergeet om dit te skryf. 1096 00:53:10,240 --> 00:53:13,250 So laat ons gaan en dit regmaak logiese fout. 1097 00:53:13,250 --> 00:53:16,280 >> Kom ons gaan voort en gryp die volgende. 1098 00:53:16,280 --> 00:53:18,080 Ons sal net 'n bietjie kopieer en plak nie. 1099 00:53:18,080 --> 00:53:20,080 En ek gaan minus sê. 1100 00:53:20,080 --> 00:53:21,890 >> En ek gaan keer sê. 1101 00:53:21,890 --> 00:53:24,060 En ek gaan om te sê verdeel. 1102 00:53:24,060 --> 00:53:28,240 En ek is nie van plan om te doen modulo, wat is nie so related hier, 1103 00:53:28,240 --> 00:53:33,690 gedeel deur f, en keer plus-- OK, kom ons dit weer doen. 1104 00:53:33,690 --> 00:53:44,210 >> Maak dryf, dot streep dryf, en 1, 10, and-- mooi, nee, OK. 1105 00:53:44,210 --> 00:53:45,250 So ek is 'n idioot. 1106 00:53:45,250 --> 00:53:47,000 So dit is baie algemeen in rekenaarwetenskap 1107 00:53:47,000 --> 00:53:49,780 om dom foute soos hierdie maak. 1108 00:53:49,780 --> 00:53:53,100 >> Vir opvoedkundige doeleindes, wat ek regtig wou doen 1109 00:53:53,100 --> 00:53:57,410 is hier die wetenskap verander om plus, minus, om tye, 1110 00:53:57,410 --> 00:54:01,140 en om hopelik te verdeel, soos jy opgemerk tydens hierdie oefening. 1111 00:54:01,140 --> 00:54:04,700 So nou kom ons weer saam te stel hierdie program, doen dot streep dryf. 1112 00:54:04,700 --> 00:54:07,950 >> En vir die derde keer, kom ons kyk of dit voldoen aan al my verwagtinge. 1113 00:54:07,950 --> 00:54:21,480 1, 10, betree, ja, OK, 1.000, gedeel deur 10.000, is 0,100000. 1114 00:54:21,480 --> 00:54:24,952 En dit blyk ons ​​kan beheer hoeveel getalle is ná dié desimale punte. 1115 00:54:24,952 --> 00:54:25,660 Ons sal werklik. 1116 00:54:25,660 --> 00:54:26,790 Ons sal terug kom. 1117 00:54:26,790 --> 00:54:28,440 >> Maar nou, in werklikheid, die wiskunde is korrek. 1118 00:54:28,440 --> 00:54:30,090 So, weer, wat is die afhaal hier? 1119 00:54:30,090 --> 00:54:33,050 Dit blyk dat in C, is daar nie net strings-- en, in werklikheid, 1120 00:54:33,050 --> 00:54:36,120 Daar is nie regtig nie, want ons voeg diegene met die CS50 biblioteek. 1121 00:54:36,120 --> 00:54:37,710 Maar daar is nie net SY. 1122 00:54:37,710 --> 00:54:38,990 >> Daar is ook dryf. 1123 00:54:38,990 --> 00:54:42,810 En dit blyk 'n klomp van die ander data tipes ook dat ons sal gebruik kort voor lank. 1124 00:54:42,810 --> 00:54:46,270 Turns out as jy wil 'n enkele karakter, nie 'n string karakters, 1125 00:54:46,270 --> 00:54:47,610 jy kan net 'n kar gebruik. 1126 00:54:47,610 --> 00:54:52,350 >> Blyk dat as jy 'n Bool wil, 'n Boole waarde, waar of onwaar is net, 1127 00:54:52,350 --> 00:54:56,840 te danke aan die CS50 biblioteek, ons het bygevoeg om C die Bool datatipe sowel. 1128 00:54:56,840 --> 00:54:59,180 Maar dit is ook teenwoordig in baie ander tale. 1129 00:54:59,180 --> 00:55:04,130 En dit blyk dat jy soms moet groter getalle kom dan by verstek 1130 00:55:04,130 --> 00:55:05,210 met SY en dryf. 1131 00:55:05,210 --> 00:55:10,590 >> En, in werklikheid, 'n dubbele is 'n aantal wat gebruik maak van nie 32 stukkies, maar 64 stukkies. 1132 00:55:10,590 --> 00:55:14,990 En 'n lang lang is 'n getal wat gebruik nie 32, stukkies, maar 64 stukkies, 1133 00:55:14,990 --> 00:55:19,190 onderskeidelik, vir drywende punt waardes en heelgetalle, onderskeidelik. 1134 00:55:19,190 --> 00:55:22,780 So laat ons eintlik nou sien dit in aksie. 1135 00:55:22,780 --> 00:55:26,150 >> Ek gaan hier voort te gaan en sweep een ander program. 1136 00:55:26,150 --> 00:55:32,020 Hier, ek gaan om voort te gaan en moenie sluit CS50.h. 1137 00:55:32,020 --> 00:55:34,910 En laat my gaan, sluit in standaard IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> En jy sal iets sien funky hier gebeur. 1139 00:55:37,320 --> 00:55:40,592 Dit is nie kleurkodering dinge in op dieselfde manier as dit gedoen het voor. 1140 00:55:40,592 --> 00:55:43,550 En dit blyk dat dit is omdat ek het die ding 'n lêer naam nie gegee nie. 1141 00:55:43,550 --> 00:55:47,270 >> Ek gaan hierdie een te roep sizeof.c, en druk Stoor. 1142 00:55:47,270 --> 00:55:51,039 Kyk wat gebeur met my baie wit-kode teen daardie swart agtergrond. 1143 00:55:51,039 --> 00:55:52,830 Nou, ten minste is daar ' sommige pers in daar. 1144 00:55:52,830 --> 00:55:54,490 En dit is sintaksis uitgelig. 1145 00:55:54,490 --> 00:55:57,700 >> Dit is omdat, heel eenvoudig, ek het vertel die IO watter tipe lêer 1146 00:55:57,700 --> 00:56:01,060 dit is deur te gee dit 'n naam, en spesifiek 'n lêer uitbreiding. 1147 00:56:01,060 --> 00:56:03,620 Nou, laat ons gaan voort en doen dit. 1148 00:56:03,620 --> 00:56:08,910 Ek gaan voort en baie gaan eenvoudig druk die following-- Bool 1149 00:56:08,910 --> 00:56:11,080 is persent LU. 1150 00:56:11,080 --> 00:56:12,950 >> Ons sal terugkom na wat in net 'n oomblik. 1151 00:56:12,950 --> 00:56:15,840 En dan gaan ek Druk grootte van Bool. 1152 00:56:15,840 --> 00:56:18,170 En nou, net om te spaar myself 'n geruime tyd, ek is 1153 00:56:18,170 --> 00:56:20,280 gaan 'n hele doen n klomp van hierdie in 'n keer. 1154 00:56:20,280 --> 00:56:24,620 En, spesifiek, ek gaan verander dit na 'n kar en kar. 1155 00:56:24,620 --> 00:56:27,760 Hierdie een, ek gaan om te verander 'n dubbel en 'n dubbele. 1156 00:56:27,760 --> 00:56:31,440 >> Hierdie een, ek gaan om te verander 'n float en 'n float. 1157 00:56:31,440 --> 00:56:35,670 Hierdie een, ek gaan verander na 'n int en 'n int. 1158 00:56:35,670 --> 00:56:38,660 En hierdie een, ek gaan om te verander na 'n lang lang. 1159 00:56:38,660 --> 00:56:40,840 En dit is nog steeds neem 'n lang tyd, lank lank. 1160 00:56:40,840 --> 00:56:44,572 >> En dan, laastens, het ek myself een te veel, string. 1161 00:56:44,572 --> 00:56:47,030 Dit blyk dat in C, daar is die spesiale operateur genoem 1162 00:56:47,030 --> 00:56:50,260 grootte van wat letterlik gaan, wanneer loop, 1163 00:56:50,260 --> 00:56:52,099 vertel ons die grootte van elk van hierdie veranderlikes. 1164 00:56:52,099 --> 00:56:53,890 En dit is 'n manier, nou, ons kan terug te koppel 1165 00:56:53,890 --> 00:56:57,140 om bespreking verlede week se van data en voorstellings. 1166 00:56:57,140 --> 00:57:00,330 >> Laat my gaan voort en stel grootte van dot streep grootte van. 1167 00:57:00,330 --> 00:57:01,210 En laat ons sien. 1168 00:57:01,210 --> 00:57:05,210 Dit blyk dat in C, spesifiek op CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 spesifiek op die bedryfstelsel Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 wat 'n 64-bit operating stelsel in hierdie geval, 1171 00:57:11,100 --> 00:57:14,189 'n Bool gaan Gebruik een byte aan ruimte. 1172 00:57:14,189 --> 00:57:16,480 Dit is hoe grootte word gemeet, nie in stukkies, maar in grepe. 1173 00:57:16,480 --> 00:57:18,690 En onthou dat een byte is agt stukkies. 1174 00:57:18,690 --> 00:57:22,030 So 'n Bool, selfs al is jy tegnies net 'n 0 of 1, 1175 00:57:22,030 --> 00:57:24,092 dit is 'n bietjie verkwistende hoe ons dit het geïmplementeer. 1176 00:57:24,092 --> 00:57:26,800 Dit is eintlik van plan om 'n hele te gebruik byte-- sodat almal nulle, is miskien 1177 00:57:26,800 --> 00:57:31,050 al kinders, of iets soos dit, of net 'n 1 onder agt stukkies. 1178 00:57:31,050 --> 00:57:34,962 >> A kar, intussen, wat gebruik word vir 'n karakter soos 'n ASCII karakter per verlede week, 1179 00:57:34,962 --> 00:57:36,170 gaan een karakter wees. 1180 00:57:36,170 --> 00:57:42,340 En dit synchs met ons idee van dat dit nie meer as 256 bits-- eerder, 1181 00:57:42,340 --> 00:57:45,360 synchs met dit wat nie langer as 8 stukkies, wat 1182 00:57:45,360 --> 00:57:47,450 gee ons soveel as 256 waardes. 1183 00:57:47,450 --> 00:57:49,680 'N Dubbele gaan wees 8 grepe of 64 stukkies. 1184 00:57:49,680 --> 00:57:50,510 >> 'N float is 4. 1185 00:57:50,510 --> 00:57:51,690 'N int is 4. 1186 00:57:51,690 --> 00:57:52,980 'N Lang, lang is 8. 1187 00:57:52,980 --> 00:57:54,716 En 'n string is 8. 1188 00:57:54,716 --> 00:57:55,840 Maar moenie bekommerd wees oor dit. 1189 00:57:55,840 --> 00:57:57,340 Ons gaan terug skil wat laag. 1190 00:57:57,340 --> 00:57:59,940 Dit blyk, snare kan langer as 8 grepe. 1191 00:57:59,940 --> 00:58:02,310 >> En, inderdaad, ons het geskryf snare reeds, hello world, 1192 00:58:02,310 --> 00:58:03,700 langer as 8 grepe. 1193 00:58:03,700 --> 00:58:06,270 Maar ons sal terug te kom na wat in net 'n oomblik. 1194 00:58:06,270 --> 00:58:09,690 Maar die neem weg hier is die volgende. 1195 00:58:09,690 --> 00:58:15,320 >> Enige rekenaar het slegs 'n beperkte hoeveelheid geheue en ruimte. 1196 00:58:15,320 --> 00:58:17,860 Jy kan net stoor soveel lêers op jou Mac of PC. 1197 00:58:17,860 --> 00:58:23,030 Jy kan net soveel programme in te stoor RAM hardloop in 'n keer, noodwendig, selfs 1198 00:58:23,030 --> 00:58:26,360 met virtuele geheue, want jy het 'n beperkte hoeveelheid RAM. 1199 00:58:26,360 --> 00:58:28,990 >> En net om picture-- as wat jy nog nooit oopgemaak 'n skootrekenaar 1200 00:58:28,990 --> 00:58:31,300 of bestel ekstra geheue vir 'n rekenaar, jy 1201 00:58:31,300 --> 00:58:33,670 dalk nie weet dat binnekant van jou rekenaar 1202 00:58:33,670 --> 00:58:36,590 is iets wat lyk 'n bietjie soos hierdie. 1203 00:58:36,590 --> 00:58:40,540 So dit is net 'n gewone maatskappy met die naam Noodsaaklik dat maak RAM vir rekenaars. 1204 00:58:40,540 --> 00:58:43,620 En RAM is waar programme leef terwyl hulle loop. 1205 00:58:43,620 --> 00:58:46,630 >> So op elke Mac of PC, wanneer jy dubbel klik op 'n program, en dit maak ', 1206 00:58:46,630 --> 00:58:48,921 en dit maak 'n paar Word dokument of iets soos dit, 1207 00:58:48,921 --> 00:58:51,764 dit slaan dit tydelik in RAM, want RAM is vinniger 1208 00:58:51,764 --> 00:58:53,680 as jou hardeskyf, of jou vaste toestand skyf. 1209 00:58:53,680 --> 00:58:56,600 So dit is net waar programme gaan om te lewe as hulle loop, 1210 00:58:56,600 --> 00:58:58,060 of wanneer lêers word gebruik. 1211 00:58:58,060 --> 00:59:00,890 >> So jy dinge wat lyk soos hierdie binnekant van jou laptop, 1212 00:59:00,890 --> 00:59:03,320 of effens groter dinge binnekant van jou lessenaar. 1213 00:59:03,320 --> 00:59:07,440 Maar die belangrikste is jy net 'n eindige aantal van hierdie dinge. 1214 00:59:07,440 --> 00:59:11,230 En daar is slegs 'n beperkte hoeveelheid hardeware sit op hierdie lessenaar reg 1215 00:59:11,230 --> 00:59:11,730 hier. 1216 00:59:11,730 --> 00:59:15,920 >> So, sekerlik, ons kan nie stoor oneindig lang nommers. 1217 00:59:15,920 --> 00:59:19,030 En tog, as jy dink terug aan graad skool, hoeveel syfers kan 1218 00:59:19,030 --> 00:59:21,400 jy moet die regte van 'n desimale punt? 1219 00:59:21,400 --> 00:59:24,680 Vir daardie saak, hoeveel syfers kan jy aan die linkerkant van 'n desimale punt? 1220 00:59:24,680 --> 00:59:26,300 Regtig, oneindig baie. 1221 00:59:26,300 --> 00:59:30,840 >> Nou, kan ons net die mens weet hoe om miljoen spreek, 1222 00:59:30,840 --> 00:59:34,990 en miljard, triljoen, en quadriljoen, en quintillion. 1223 00:59:34,990 --> 00:59:39,370 En ek stoot die grense van my understanding-- of my-- Ek verstaan 1224 00:59:39,370 --> 00:59:41,110 getalle, maar my uitspraak van getalle. 1225 00:59:41,110 --> 00:59:44,720 Maar hulle kan kry oneindig groot met oneindig baie syfers aan die linkerkant 1226 00:59:44,720 --> 00:59:47,050 of aan die regterkant van 'n desimale punt. 1227 00:59:47,050 --> 00:59:50,040 >> Maar rekenaars het net 'n eindige hoeveelheid geheue, 1228 00:59:50,040 --> 00:59:53,510 'n beperkte aantal transistors, 'n eindige aantal gloeilampe binnekant. 1229 00:59:53,510 --> 00:59:57,350 So, wat gebeur wanneer jy uit die ruimte uit te voer? 1230 00:59:57,350 --> 00:59:59,620 Met ander woorde, as jy dink terug aan verlede week 1231 00:59:59,620 --> 01:00:03,160 toe ons gepraat oor getalle self word verteenwoordig in binêre, 1232 01:00:03,160 --> 01:00:05,480 veronderstel dat ons het hierdie 8-bit waarde hier. 1233 01:00:05,480 --> 01:00:08,290 >> En ons het sewe 1 en een 0. 1234 01:00:08,290 --> 01:00:10,827 En veronderstel dat ons wil 1 by hierdie waarde. 1235 01:00:10,827 --> 01:00:12,410 Dit is werklik 'n groot aantal nou. 1236 01:00:12,410 --> 01:00:16,610 >> Dit is 254, as ek reg onthou die wiskunde van verlede week reg. 1237 01:00:16,610 --> 01:00:19,480 Maar wat as ek verander dat regterkantste 0 tot 'n 1? 1238 01:00:19,480 --> 01:00:22,800 Die hele getal van Natuurlik word agt 1 se. 1239 01:00:22,800 --> 01:00:24,050 So ons is nog steeds goed. 1240 01:00:24,050 --> 01:00:27,204 >> En dit waarskynlik verteenwoordig 255, al na gelang van konteks 1241 01:00:27,204 --> 01:00:29,120 Dit kan eintlik verteenwoordig 'n negatiewe getal. 1242 01:00:29,120 --> 01:00:31,240 Maar meer oor dit 'n ander tyd. 1243 01:00:31,240 --> 01:00:34,220 Dit voel soos dit gaan oor so hoog as wat ek kan tel. 1244 01:00:34,220 --> 01:00:35,290 >> Nou, dit is net 8 stukkies. 1245 01:00:35,290 --> 01:00:38,170 En my Mac, sekerlik, het manier meer as 8 stukkies geheue. 1246 01:00:38,170 --> 01:00:39,170 Maar dit het nie eindig. 1247 01:00:39,170 --> 01:00:43,230 So het die Dieselfde argument geld, selfs al is ons meer van hierdie mense op die skerm. 1248 01:00:43,230 --> 01:00:47,020 >> Maar wat gebeur as jy stoor hierdie nommer, 255, 1249 01:00:47,020 --> 01:00:49,290 en jy wil 1 bietjie hoër tel? 1250 01:00:49,290 --> 01:00:51,600 Jy wil gaan 255-256. 1251 01:00:51,600 --> 01:00:55,800 Die probleem is natuurlik dat as jy begin tel op nul soos verlede week, 1252 01:00:55,800 --> 01:00:59,670 jy kan nie so hoog tel as 256, laat staan ​​257 1253 01:00:59,670 --> 01:01:02,584 laat staan ​​nog 258 m want wat gebeur wanneer jy 'n 1 voeg? 1254 01:01:02,584 --> 01:01:05,000 As jy dit doen die ou laerskool benadering, het jy 'n 1 hier, 1255 01:01:05,000 --> 01:01:08,150 en dan 1 plus 1 is 2, maar dit is regtig 'n nul, jy dra die 1, 1256 01:01:08,150 --> 01:01:09,695 voer die 1, dra die 1. 1257 01:01:09,695 --> 01:01:12,620 Al hierdie dinge, hierdie 1'e, gaan na nul. 1258 01:01:12,620 --> 01:01:17,820 En jy likwideer, ja, as iemand uitgewys, 'n 1 op die linkerkant. 1259 01:01:17,820 --> 01:01:22,540 Maar alles wat jy kan eintlik sien en pas in die geheue 1260 01:01:22,540 --> 01:01:27,960 is net agt 0 se wat om te sê op 'n stadium as jy, 'n rekenaar, 1261 01:01:27,960 --> 01:01:32,490 probeer tel hoog genoeg op, jy gaan rond draai, wil dit voorkom, 1262 01:01:32,490 --> 01:01:35,850 aan nul, of dalk selfs negatiewe getalle, wat selfs laer as nul is. 1263 01:01:35,850 --> 01:01:37,260 >> En ons kan soort van sien. 1264 01:01:37,260 --> 01:01:39,900 Laat my gaan voort en skryf 'n ware vinnige program hier. 1265 01:01:39,900 --> 01:01:43,690 Laat my gaan voort en skryf 'n program genaamd oorloop. 1266 01:01:43,690 --> 01:01:49,980 Sluit CS50.h, sluit standaard IO.h-- O, 1267 01:01:49,980 --> 01:01:51,730 Ek het regtig gemis my accentuering. 1268 01:01:51,730 --> 01:01:54,440 So laat ons hierdie save as overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> En nou int main void-- en kort voor lank is, sal ons 1270 01:01:57,084 --> 01:01:59,500 kom terug na wat verduidelik waarom Ons hou skryf int main leemte. 1271 01:01:59,500 --> 01:02:02,080 Maar vir nou, laat ons net doen dit, neem dit as vanselfsprekend aanvaar. 1272 01:02:02,080 --> 01:02:06,200 Kom ons gee myself 'n int, en inisialiseer dit tot 0. 1273 01:02:06,200 --> 01:02:11,716 >> Kom ons doen dan vir int i kry zero-- eintlik, laat ons doen 'n oneindige lus 1274 01:02:11,716 --> 01:02:12,590 en kyk wat gebeur. 1275 01:02:12,590 --> 01:02:22,440 Terwyl waar is, dan kom ons N druk is persent i, agteroorskuinsstreep N, plug-in N. 1276 01:02:22,440 --> 01:02:27,200 Maar, nou, laat ons doen n kry n plus 1. 1277 01:02:27,200 --> 01:02:29,660 >> So met ander woorde, op elke iterasie van hierdie oneindige lus, 1278 01:02:29,660 --> 01:02:32,550 Kom ons neem waarde N se en voeg 1 tot dit, en dan 1279 01:02:32,550 --> 01:02:34,350 stoor die resultaat terug in N aan die linkerkant. 1280 01:02:34,350 --> 01:02:37,150 En, in werklikheid, ons het sintaksis gesien effens soos hierdie, kortliks. 1281 01:02:37,150 --> 01:02:39,730 'N koel truuk is in plaas van al hierdie dinge uitskryf, 1282 01:02:39,730 --> 01:02:42,770 jy kan eintlik sê 'n N plus gelyk 1. 1283 01:02:42,770 --> 01:02:47,480 >> Of as jy regtig wil fancy te wees, jy kan sê N plus plus kommapunt. 1284 01:02:47,480 --> 01:02:50,130 Maar hierdie laaste twee is net wat ons sintaktiese suiker sou noem 1285 01:02:50,130 --> 01:02:50,790 vir die eerste ding. 1286 01:02:50,790 --> 01:02:53,456 >> Die eerste ding is meer eksplisiete, heeltemal fyn, heeltemal korrek. 1287 01:02:53,456 --> 01:02:55,470 Maar dit is meer algemeen, sal ek sê. 1288 01:02:55,470 --> 01:02:57,210 So sal ons dit vir 'n oomblik doen. 1289 01:02:57,210 --> 01:03:01,685 >> Kom ons maak oorloop, wat klink nogal onheilspellend, dot streep oorloop. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Kom ons kyk, N raak redelik groot. 1292 01:03:09,852 --> 01:03:11,310 Maar laat ons dink, hoe groot kan N kry? 1293 01:03:11,310 --> 01:03:12,870 >> N is 'n int. 1294 01:03:12,870 --> 01:03:16,400 Ons het 'n oomblik gelede met die grootte van voorbeeld wat 'n int is vier grepe. 1295 01:03:16,400 --> 01:03:22,070 Ons weet uit verlede week, vier grepe is 32 stukkies, want 8 keer 4, dit is 32. 1296 01:03:22,070 --> 01:03:23,460 Dit gaan wees 4 miljard. 1297 01:03:23,460 --> 01:03:25,802 >> En ons is tot 800,000. 1298 01:03:25,802 --> 01:03:28,510 Dit gaan vir ewig neem om tel so hoog as wat ek moontlik kan. 1299 01:03:28,510 --> 01:03:30,635 So ek gaan om voort te gaan, Soos jy kan kort voor lank, 1300 01:03:30,635 --> 01:03:34,910 en druk beheer C-- eerlik, beheer C, 'n baie, waar beheer C algemeen 1301 01:03:34,910 --> 01:03:36,034 middel kanselleer. 1302 01:03:36,034 --> 01:03:38,200 Ongelukkig, as gevolg van hierdie loop in die wolk, 1303 01:03:38,200 --> 01:03:41,190 somtyds was die wolk is spoeg uit soveel dinge, 1304 01:03:41,190 --> 01:03:44,180 soveel uitset, gaan dit neem 'n kort rukkie vir my insette 1305 01:03:44,180 --> 01:03:45,630 om die wolk te kry. 1306 01:03:45,630 --> 01:03:49,240 So selfs al het ek getref Beheer C 'n paar sekondes gelede 1307 01:03:49,240 --> 01:03:53,110 dit is beslis die kant effek van 'n oneindige lus. 1308 01:03:53,110 --> 01:03:56,070 >> En so in sulke gevalle, ons is gaan laat dit wees. 1309 01:03:56,070 --> 01:03:59,050 En ons gaan na 'n ander te voeg terminale venster hier 1310 01:03:59,050 --> 01:04:03,186 met die plus, wat natuurlik nie doen so nie, want dit is nog steeds dink. 1311 01:04:03,186 --> 01:04:05,310 En laat ons gaan voort en wees 'n bietjie meer redelik is. 1312 01:04:05,310 --> 01:04:07,768 >> Ek gaan om voort te gaan en te doen dit slegs eindig baie keer. 1313 01:04:07,768 --> 01:04:10,047 Kom ons gebruik 'n for-lus, wat ek verwys na vroeër. 1314 01:04:10,047 --> 01:04:10,630 Kom ons doen dit. 1315 01:04:10,630 --> 01:04:13,430 Gee my 'n ander veranderlike int i kry 0. 1316 01:04:13,430 --> 01:04:17,430 Ek is minder as, kom ons sê, 64 I ++. 1317 01:04:17,430 --> 01:04:24,010 Laat My dan nou voort te gaan en uit te druk uit N is persent i, komma N. 1318 01:04:24,010 --> 01:04:27,547 En dan n-- dit is nog steeds vir ewig gaan neem. 1319 01:04:27,547 --> 01:04:28,130 Kom ons doen dit. 1320 01:04:28,130 --> 01:04:30,620 >> N kry n keer 2. 1321 01:04:30,620 --> 01:04:34,140 Of ons kan fancy wees en doen tye gelyk 2. 1322 01:04:34,140 --> 01:04:37,120 Maar laat ons net sê N gelyk self, keer 2. 1323 01:04:37,120 --> 01:04:39,321 Met ander woorde, in hierdie nuwe weergawe van die program, 1324 01:04:39,321 --> 01:04:41,820 Ek wil nie vir ewig wag uit soos 800,000 tot 4 miljard. 1325 01:04:41,820 --> 01:04:43,070 Kom ons kry dit oor met. 1326 01:04:43,070 --> 01:04:44,920 >> Kom ons eintlik dubbel N elke keer. 1327 01:04:44,920 --> 01:04:47,660 Wat, onthou, verdubbeling is die teenoorgestelde van wat natuurlik. 1328 01:04:47,660 --> 01:04:50,035 En terwyl verlede week het ons weer iets, en weer, 1329 01:04:50,035 --> 01:04:52,200 en weer, super vinnig, verdubbeling sal sekerlik 1330 01:04:52,200 --> 01:04:58,080 kry ons van 1 tot die grootste moontlike waarde wat ons kan reken op 'n int. 1331 01:04:58,080 --> 01:04:59,750 >> So laat ons doen presies dit. 1332 01:04:59,750 --> 01:05:01,720 En ons sal terug kom kort voor lank. 1333 01:05:01,720 --> 01:05:04,180 Maar dit, weer, is net soos die herhaling blok in Scratch. 1334 01:05:04,180 --> 01:05:05,600 En jy sal dit gebruik voor lank. 1335 01:05:05,600 --> 01:05:10,170 >> Dit beteken net telling van nul tot, maar nie gelyk aan 64. 1336 01:05:10,170 --> 01:05:14,285 En op elke iterasie van hierdie lus, hou net die verhoog i. 1337 01:05:14,285 --> 01:05:18,990 So ek ++ - en hierdie algemene konstruk on line 7 is net 'n super algemene manier 1338 01:05:18,990 --> 01:05:22,290 herhaal 'n paar lyne van kode, sommige aantal kere. 1339 01:05:22,290 --> 01:05:23,362 Watter reëls van die kode? 1340 01:05:23,362 --> 01:05:25,570 Hierdie krullerige draadjies, as jy dalk opgetel van nou af, 1341 01:05:25,570 --> 01:05:26,780 beteken, doen die volgende. 1342 01:05:26,780 --> 01:05:29,510 >> Dit is op dieselfde nuuts af, wanneer dit het die geel blokkies 1343 01:05:29,510 --> 01:05:32,680 en ander kleure wat soort omhels of drukkie ander blokke. 1344 01:05:32,680 --> 01:05:34,750 Dit is wat die krullerige draadjies hier doen. 1345 01:05:34,750 --> 01:05:40,200 So as ek my sintaksis right-- jy kan die wortel simbool in C middel sien 1346 01:05:40,200 --> 01:05:42,706 dis hoeveel keer ek was probeer om hierdie probleem op te los. 1347 01:05:42,706 --> 01:05:45,330 So laat ons ontslae te raak van daardie een geheel en al, en sluit dit venster. 1348 01:05:45,330 --> 01:05:46,520 En ons sal die nuwe een te gebruik. 1349 01:05:46,520 --> 01:05:51,980 Maak oorloop, dot streep oorloop, Tik, alles reg, 1350 01:05:51,980 --> 01:05:53,090 dit lyk sleg by die eerste. 1351 01:05:53,090 --> 01:05:56,200 Maar laat ons blaai terug in die tyd, want Ek het dit 64 keer. 1352 01:05:56,200 --> 01:05:58,700 >> En sien die eerste keer, N is 1. 1353 01:05:58,700 --> 01:06:03,110 Tweede keer, N is 2, dan 4, dan 8, dan 16. 1354 01:06:03,110 --> 01:06:09,450 En dit blyk dat sodra Ek kry min of meer 1 miljard, 1355 01:06:09,450 --> 01:06:12,800 As ek weer verdubbel dit, wat moet my gee 2000000000. 1356 01:06:12,800 --> 01:06:14,980 Maar dit blyk, is dit reg op die punt. 1357 01:06:14,980 --> 01:06:18,930 >> En so is dit eintlik oorloop 'n int uit 1000000000 1358 01:06:18,930 --> 01:06:23,514 om min of meer negatief 2 miljard, omdat 'n heelgetal, 1359 01:06:23,514 --> 01:06:25,430 In teenstelling met die getalle wat ons is verlede week in die veronderstelling, 1360 01:06:25,430 --> 01:06:28,397 kan beide positief en negatief wees in werklikheid en in 'n rekenaar. 1361 01:06:28,397 --> 01:06:30,730 En so ten minste een van daardie stukkies is effektief gesteel. 1362 01:06:30,730 --> 01:06:34,190 So het ons regtig net 31 stukkies, of 2000000000 moontlike waardes. 1363 01:06:34,190 --> 01:06:38,220 >> Maar vir nou, die afhaal is nogal eenvoudig, ongeag hierdie getalle is 1364 01:06:38,220 --> 01:06:42,280 en alles wat die wiskunde is, iets sleg gebeur uiteindelik, 1365 01:06:42,280 --> 01:06:46,980 want uiteindelik jy probeer om verwisselen die stukkies een te veel keer. 1366 01:06:46,980 --> 01:06:51,060 En jy effektief gaan van al 1 se miskien al 0 se, of miskien 1367 01:06:51,060 --> 01:06:54,260 slegs 'n paar ander patroon dat dit Dit is duidelik dat, afhangende van konteks, 1368 01:06:54,260 --> 01:06:56,342 kan geïnterpreteer word as 'n negatiewe getal. 1369 01:06:56,342 --> 01:06:59,300 En so sal dit die hoogste dit lyk asof ek kan reken in hierdie spesifieke program 1370 01:06:59,300 --> 01:07:01,210 is slegs ongeveer 1000000000. 1371 01:07:01,210 --> 01:07:02,760 Maar daar is 'n gedeeltelike oplossing hier. 1372 01:07:02,760 --> 01:07:03,480 Jy weet wat? 1373 01:07:03,480 --> 01:07:07,600 >> Laat my verander van 'n int om 'n lang lang. 1374 01:07:07,600 --> 01:07:10,633 En laat my hier gaan voort en say-- ek gaan hê 1375 01:07:10,633 --> 01:07:12,290 om dit te verander na 'n unsigned long. 1376 01:07:12,290 --> 01:07:16,860 Of, kom ons kyk, ek onthou nog nooit. 1377 01:07:16,860 --> 01:07:19,920 >> Kom ons gaan voort en maak oorloop. 1378 01:07:19,920 --> 01:07:21,860 Nee, dis nie dit, LLD, dankie. 1379 01:07:21,860 --> 01:07:23,430 So soms klang kan nuttig wees. 1380 01:07:23,430 --> 01:07:27,550 Ek het nie onthou wat die formaat specific was vir 'n lang lang. 1381 01:07:27,550 --> 01:07:28,950 >> Maar, inderdaad, klang het vir my gesê. 1382 01:07:28,950 --> 01:07:31,570 Groen is 'n soort van 'n goeie, steeds beteken dat jy 'n fout gemaak. 1383 01:07:31,570 --> 01:07:33,190 Dit is aan die raai dat ek bedoel LLD. 1384 01:07:33,190 --> 01:07:38,750 >> So laat my toe om dit advies, 'n lang lank desimale getal, behalwe dat. 1385 01:07:38,750 --> 01:07:43,190 En laat ek tik dit, dot streep loop, Tik. 1386 01:07:43,190 --> 01:07:45,020 En nou wat is cool is dit. 1387 01:07:45,020 --> 01:07:49,140 >> As ek terug in die tyd te blaai, het ons nog begin tel op dieselfde place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Let op, kry ons al die pad tot by 1000000000. 1390 01:07:54,860 --> 01:07:57,070 Maar dan moet ons veilig tot 2 miljard. 1391 01:07:57,070 --> 01:08:01,300 >> Dan kom ons by 4000000000, dan 8 miljard, 17000000000. 1392 01:08:01,300 --> 01:08:03,340 En ons gaan hoër en hoër, en hoër. 1393 01:08:03,340 --> 01:08:05,740 Uiteindelik, dit ook breek. 1394 01:08:05,740 --> 01:08:09,350 >> Uiteindelik, met 'n lang lang, wat is die 64-bit waarde, nie 1395 01:08:09,350 --> 01:08:13,660 'n 32-bit waarde, as jy reken te hoog is, draai jy rond 0. 1396 01:08:13,660 --> 01:08:16,410 En in hierdie geval, gebeur ons eindig met 'n negatiewe getal. 1397 01:08:16,410 --> 01:08:17,550 >> So dit is 'n probleem. 1398 01:08:17,550 --> 01:08:20,439 En dit blyk dat hierdie probleem is nie alles wat arcane. 1399 01:08:20,439 --> 01:08:23,060 Selfs al het ek het doelbewus veroorsaak dit met hierdie foute, 1400 01:08:23,060 --> 01:08:26,149 dit blyk ons ​​sien dit soort van alle rondom ons, of ten minste 'n paar van ons doen. 1401 01:08:26,149 --> 01:08:28,939 >> So in Lego Star Wars, as jy al ooit die spel gespeel het, 1402 01:08:28,939 --> 01:08:33,830 dit blyk jy kan gaan rond breek dinge in LEGO wêreld, 1403 01:08:33,830 --> 01:08:36,640 en die invordering van muntstukke, in wese. 1404 01:08:36,640 --> 01:08:39,200 En as jy al ooit gespeel hierdie wedstryd te veel tyd, 1405 01:08:39,200 --> 01:08:42,630 aangesien dit naamlose individuele hier het, die totale aantal 1406 01:08:42,630 --> 01:08:46,700 munte wat jy kan in te samel is, wil dit voorkom asof, 4 miljard. 1407 01:08:46,700 --> 01:08:48,240 >> Nou, met dit is eintlik afgerond. 1408 01:08:48,240 --> 01:08:50,239 So LEGO probeer hou dinge gebruikersvriendelik. 1409 01:08:50,239 --> 01:08:53,779 Hulle het dit nie presies doen 2 tot die 32 krag, per verlede week. 1410 01:08:53,779 --> 01:08:55,310 Maar 4000000000 is 'n rede. 1411 01:08:55,310 --> 01:08:58,979 Dit blyk, gebaseer op hierdie inligting, dat LEGO, en die maatskappy wat 1412 01:08:58,979 --> 01:09:02,624 het hierdie werklike sagteware, besluit dat die maksimum aantal munte 1413 01:09:02,624 --> 01:09:04,540 die gebruiker kan ophoop is inderdaad, 4 miljard, 1414 01:09:04,540 --> 01:09:12,069 omdat hulle gekies het in hul kode nie 'n lang lang om te gebruik, glo, 1415 01:09:12,069 --> 01:09:16,140 maar net 'n heelgetal, 'n ongetekende heelgetal, slegs 'n positiewe heelgetal, wie se 1416 01:09:16,140 --> 01:09:18,089 Max waarde is min of meer wat. 1417 01:09:18,089 --> 01:09:19,380 Wel, hier is nog 'n snaakse een. 1418 01:09:19,380 --> 01:09:23,500 So in die spel Civilization, wat sommige van julle dalk vertroud wees met 1419 01:09:23,500 --> 01:09:26,660 dit blyk dat jare gelede daar was 'n fout in hierdie wedstryd waarby 1420 01:09:26,660 --> 01:09:28,750 As jy die rol van Gandhi in die spel, 1421 01:09:28,750 --> 01:09:34,020 in plaas van hom dat dit baie pasifis, plaas was ongelooflik, ongelooflik 1422 01:09:34,020 --> 01:09:36,399 aggressiewe, in sekere omstandighede. 1423 01:09:36,399 --> 01:09:40,529 In die besonder, die manier waarop Civilization werke is dat as jy, die speler, 1424 01:09:40,529 --> 01:09:44,680 neem demokrasie, jou aggressie telling kry 1425 01:09:44,680 --> 01:09:48,130 decremented deur twee, so minus minus, en dan minus minus. 1426 01:09:48,130 --> 01:09:50,569 >> So jy trek 2 uit jou werklike iterating. 1427 01:09:50,569 --> 01:09:56,650 Ongelukkig, as jou iterating is aanvanklik 1, en jy trek 2 daaruit 1428 01:09:56,650 --> 01:09:59,050 na die aanneming van demokrasie soos Gandhi hier mag 1429 01:09:59,050 --> 01:10:02,200 gedoen het, want hy het baie passive-- was 1 op die skaal van aggressie. 1430 01:10:02,200 --> 01:10:04,830 Maar as hy aanvaar demokrasie, dan Hy gaan van 1 tot negatiewe 1. 1431 01:10:04,830 --> 01:10:11,470 >> Ongelukkig was hulle gebruik van ongetekende getalle, 1432 01:10:11,470 --> 01:10:15,400 wat beteken dat hulle behandel selfs negatiewe getalle asof hulle positief. 1433 01:10:15,400 --> 01:10:19,780 En dit blyk dat die positiewe ekwivalent van negatiewe 1, 1434 01:10:19,780 --> 01:10:23,480 in tipiese rekenaarprogramme, is 255. 1435 01:10:23,480 --> 01:10:27,250 So as Gandhi neem demokrasie het, en dus 1436 01:10:27,250 --> 01:10:32,470 sy aggressie telling verminder, dit eintlik rolle om te 255 1437 01:10:32,470 --> 01:10:35,470 en maak hom die mees aggressiewe karakter in die spel. 1438 01:10:35,470 --> 01:10:36,930 So jy kan Google op hierdie punt. 1439 01:10:36,930 --> 01:10:39,380 En dit was inderdaad 'n toevallige programmering fout, 1440 01:10:39,380 --> 01:10:43,010 maar dit is nogal ingevoer die leersaamhede sedertdien. 1441 01:10:43,010 --> 01:10:44,360 >> Dit is al wat pret en cute. 1442 01:10:44,360 --> 01:10:47,760 Meer skrikwekkend is wanneer werklike werklike wêreld toestelle, en nie speletjies, 1443 01:10:47,760 --> 01:10:48,820 het hierdie selfde foute. 1444 01:10:48,820 --> 01:10:54,500 Trouens, net 'n jaar gelede 'n artikel het uit oor die Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> En die artikel op die eerste oogopslag lees 'n bietjie arcane. 1446 01:10:56,850 --> 01:11:01,480 Maar dit gesê het, 'n sagteware kwesbaarheid in Boeing se 1447 01:11:01,480 --> 01:11:04,790 nuwe 787 Dreamliner straler het die potensiaal om vlieëniers veroorsaak 1448 01:11:04,790 --> 01:11:07,220 om beheer oor te verloor die vliegtuig, moontlik 1449 01:11:07,220 --> 01:11:11,750 in die middel van die vlug, die FAA-amptenare gewaarsku aanbied onlangs. 1450 01:11:11,750 --> 01:11:14,520 Dit was die bepaling dat 'n model 787 1451 01:11:14,520 --> 01:11:19,770 vliegtuig wat is aangedryf voortdurend vir 248 dae 1452 01:11:19,770 --> 01:11:24,880 kan al wisselstroom verloor, AC, elektriese krag as gevolg van die kragopwekker 1453 01:11:24,880 --> 01:11:28,892 beheer eenhede, GCUs, gelyktydig gaan in gebreke bly veilige modus. 1454 01:11:28,892 --> 01:11:29,850 Dit is soort van my verloor. 1455 01:11:29,850 --> 01:11:35,390 Maar die memorandum vermeld, OK, nou het ek dit, die toestand is veroorsaak deur 'n sagteware 1456 01:11:35,390 --> 01:11:38,590 teen interne om die kragopwekker beheer 1457 01:11:38,590 --> 01:11:44,860 eenhede wat oorloop na 248 dae van deurlopende krag. 1458 01:11:44,860 --> 01:11:47,070 Ons is die uitreiking van hierdie kennisgewing aan verlies te voorkom 1459 01:11:47,070 --> 01:11:49,300 van alle AC elektriese krag, wat tot gevolg kan hê 1460 01:11:49,300 --> 01:11:50,980 verlies van beheer van die vliegtuig. 1461 01:11:50,980 --> 01:11:55,380 >> So, letterlik, daar is 'n paar heelgetal, of 'n ekwivalent data tipe, 1462 01:11:55,380 --> 01:11:57,960 wat gebruik word in sagteware in 'n werklike vliegtuig 1463 01:11:57,960 --> 01:12:00,756 dat as jy jou vliegtuig te hou lank genoeg, wat blykbaar 1464 01:12:00,756 --> 01:12:03,880 kan die geval wees as jy net hardloop hulle voortdurend en nooit Skakel 1465 01:12:03,880 --> 01:12:06,810 jou vliegtuig, dit lyk of laat sy batterye sterf, 1466 01:12:06,810 --> 01:12:09,840 sal uiteindelik tel op en op, en op, en op, en op, en op. 1467 01:12:09,840 --> 01:12:12,150 >> En, deur die natuur, 'n eindige hoeveelheid geheue 1468 01:12:12,150 --> 01:12:15,880 oorloop, om terug te rol tot nul of 'n negatiewe waarde, 1469 01:12:15,880 --> 01:12:19,920 'n newe-effek van wat is die skrikwekkend werklike realiteit 1470 01:12:19,920 --> 01:12:23,970 dat die vliegtuig dalk nodig moet weer begin, effektief, 1471 01:12:23,970 --> 01:12:27,290 of te laat val, erger, want dit vlieg. 1472 01:12:27,290 --> 01:12:29,230 So hierdie soort kwessies is nog steeds met ons, 1473 01:12:29,230 --> 01:12:33,130 even-- dit was 'n 2015 artikel, des te meer vreesaanjaend 1474 01:12:33,130 --> 01:12:36,100 wanneer jy nie noodwendig verstaan, waardeer, of antisipeer 1475 01:12:36,100 --> 01:12:38,640 hierdie soort van foute. 1476 01:12:38,640 --> 01:12:42,030 >> So dit blyk daar is een ander slegte ding oor datavoorstelling. 1477 01:12:42,030 --> 01:12:47,080 Dit blyk dat selfs dryf is soort gebrekkig, want dryf ook 1478 01:12:47,080 --> 01:12:51,440 Ek voorgestelde is 32 stukkies, of Miskien 64 As jy 'n dubbele gebruik. 1479 01:12:51,440 --> 01:12:53,070 Maar dit is nog steeds eindig. 1480 01:12:53,070 --> 01:12:57,070 >> En die vangs is dat as jy kan sit 'n oneindige aantal getalle 1481 01:12:57,070 --> 01:12:59,460 nadat die desimale punt daar is geen manier wat jy 1482 01:12:59,460 --> 01:13:02,690 kan al die moontlike verteenwoordig getalle wat ons geleer 1483 01:13:02,690 --> 01:13:04,990 in graad skool kan bestaan ​​in die wêreld. 1484 01:13:04,990 --> 01:13:08,870 'N Rekenaar, in wese, moet kies 'n subset van die nommers 1485 01:13:08,870 --> 01:13:10,200 om akkuraat verteenwoordig. 1486 01:13:10,200 --> 01:13:12,450 >> Nou, die rekenaar kan ronde miskien 'n bietjie, 1487 01:13:12,450 --> 01:13:17,900 en kan jy toelaat dat rofweg winkel enige nommer wat jy kan moontlik wil. 1488 01:13:17,900 --> 01:13:20,940 Maar net intuïtief, as jy het 'n beperkte aantal bisse, 1489 01:13:20,940 --> 01:13:24,560 jy kan dit net verwisselen in so baie beperkte maniere. 1490 01:13:24,560 --> 01:13:26,570 Sodat jy kan nie moontlik gebruik 'n beperkte aantal 1491 01:13:26,570 --> 01:13:29,880 van permutasie van stukkies, patrone van nulle en ene, 1492 01:13:29,880 --> 01:13:32,940 om 'n oneindige verteenwoordig aantal getalle, 1493 01:13:32,940 --> 01:13:37,370 wat daarop dui dat rekenaars mag baie goed wees lieg vir ons soms. 1494 01:13:37,370 --> 01:13:38,770 >> Trouens, laat ons dit doen. 1495 01:13:38,770 --> 01:13:41,239 Laat my terug te gaan na CS50 IO. 1496 01:13:41,239 --> 01:13:43,030 Laat my gaan voort en skep 'n klein program 1497 01:13:43,030 --> 01:13:47,940 genoem onakkuraatheid, om te wys dat rekenaars is inderdaad vaag. 1498 01:13:47,940 --> 01:13:51,910 >> En laat ek gaan voort en begin met sommige van daardie kode voor, 1499 01:13:51,910 --> 01:13:53,830 en nou net die volgende te doen. 1500 01:13:53,830 --> 01:14:03,640 Laat my gaan voort en doen printf, persent f, agteroorskuinsstreep N, 1 gedeel deur 10. 1501 01:14:03,640 --> 01:14:07,430 Met ander woorde, kom ons duik dieper om 10/1, soos 1 en gedeel deur 10. 1502 01:14:07,430 --> 01:14:09,760 Sekerlik, kan 'n rekenaar verteenwoordig 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> So laat ons gaan voort en maak onakkuraatheid. 1504 01:14:13,620 --> 01:14:14,390 Kom ons sien. 1505 01:14:14,390 --> 01:14:16,210 Formaat spesifiseer tik dubbel. 1506 01:14:16,210 --> 01:14:18,160 Maar die argument verloor tipe int. 1507 01:14:18,160 --> 01:14:19,040 Wat gaan aan? 1508 01:14:19,040 --> 01:14:21,970 >> Ag, interessante, so dit is 'n les geleer uit voor. 1509 01:14:21,970 --> 01:14:26,050 Ek sê, hey, rekenaar show vir my 'n float met persent f. 1510 01:14:26,050 --> 01:14:28,200 Maar ek gee dit 2 SY. 1511 01:14:28,200 --> 01:14:31,120 So dit blyk, kan ek dit regmaak dit in 'n paar maniere. 1512 01:14:31,120 --> 01:14:38,430 >> Ek kon net draai een in 1.0, en 10 in 10.0, wat, inderdaad, 1513 01:14:38,430 --> 01:14:42,390 het die uitwerking van die omskakeling hulle in floats-- nog hopelik 1514 01:14:42,390 --> 01:14:43,180 ewe veel. 1515 01:14:43,180 --> 01:14:45,880 Of dit blyk daar is iets Ons sal weer sien kort voor lank. 1516 01:14:45,880 --> 01:14:47,170 Jy kan die getalle gegooi. 1517 01:14:47,170 --> 01:14:49,880 >> Jy kan, met behulp van hierdie hakies uitdrukking, kan jy sê: 1518 01:14:49,880 --> 01:14:52,560 hey, rekenaar, neem hierdie 10, wat ek weet, is 'n int. 1519 01:14:52,560 --> 01:14:54,660 Maar dit te hanteer, asseblief, asof dit 'n float. 1520 01:14:54,660 --> 01:14:56,680 Maar dit voel onnodig kompleks. 1521 01:14:56,680 --> 01:14:59,040 >> Vir ons doeleindes vandag, laat ons net letterlik 1522 01:14:59,040 --> 01:15:02,700 maak hulle swaai punt waardes met 'n desimale punt, soos hierdie. 1523 01:15:02,700 --> 01:15:07,060 Laat my gaan voort en tik, maak onakkuraatheid, goeie, dot streep 1524 01:15:07,060 --> 01:15:08,870 onakkuraatheid, betree. 1525 01:15:08,870 --> 01:15:10,990 OK, ons is op soek goeie. 1526 01:15:10,990 --> 01:15:18,194 >> 1 gedeel deur 10, volgens my Mac hier, is inderdaad 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Nou, is ek geleer in graad skool daar moet 'n oneindige aantal 0'e wees. 1528 01:15:21,360 --> 01:15:23,151 So laat ons ten minste probeer om 'n paar van diegene sien. 1529 01:15:23,151 --> 01:15:26,770 Dit blyk dat printf is 'n bietjie liefhebber steeds as ons het al met behulp. 1530 01:15:26,770 --> 01:15:30,890 Dit blyk jy hoef nie te spesifiseer net persent f, of net persent i. 1531 01:15:30,890 --> 01:15:33,830 Jy kan eintlik spesifiseer mate van beheer opsies hier. 1532 01:15:33,830 --> 01:15:36,470 >> Spesifiek, ek gaan om te sê, hey, printf, 1533 01:15:36,470 --> 01:15:39,660 eintlik wys my 10 desimale punte. 1534 01:15:39,660 --> 01:15:40,820 So dit lyk 'n bietjie vreemd. 1535 01:15:40,820 --> 01:15:42,845 Maar jy sê persent, dot, hoeveel nommers 1536 01:15:42,845 --> 01:15:44,970 jy wil om te sien na die desimale punt, en dan is f 1537 01:15:44,970 --> 01:15:48,340 vir plat, net omdat dit is wat die dokumentasie sê. 1538 01:15:48,340 --> 01:15:50,080 Laat my gaan voort en behalwe dat. 1539 01:15:50,080 --> 01:15:52,460 >> En sien ook Ek kry moeg van tik dinge. 1540 01:15:52,460 --> 01:15:55,900 Dus is ek net die opstel van die up en Down Arrow op my sleutels hier. 1541 01:15:55,900 --> 01:15:58,710 En as ek hou slaan op, jy kan al die gebooie te sien 1542 01:15:58,710 --> 01:16:01,090 wat ek gemaak het, of verkeerd gemaak. 1543 01:16:01,090 --> 01:16:04,630 >> En ek gaan nou voort te gaan en nie eintlik gebruik dat, blykbaar. 1544 01:16:04,630 --> 01:16:11,416 Maak onakkuraatheid, dot streep imprecision-- so 1545 01:16:11,416 --> 01:16:13,290 wat ek geleer in graad skool tjeks uit. 1546 01:16:13,290 --> 01:16:19,010 Selfs as ek druk dit tot 10 desimale plaas dit inderdaad is 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Maar jy weet wat? 1548 01:16:19,840 --> 01:16:21,150 >> Kom ons kry 'n bietjie gulsig. 1549 01:16:21,150 --> 01:16:23,990 Kom ons sê, soos, wys my 55 wys na die desimale. 1550 01:16:23,990 --> 01:16:26,160 Kom ons dit regtig neem program vir 'n spin. 1551 01:16:26,160 --> 01:16:31,170 Laat my remake met make onakkuraatheid, dot streep, onakkuraatheid. 1552 01:16:31,170 --> 01:16:32,390 >> En hier gaan ons. 1553 01:16:32,390 --> 01:16:34,420 Jou kinderdae was 'n leuen. 1554 01:16:34,420 --> 01:16:48,410 Blykbaar, 1 gedeel deur 10 is inderdaad 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Wat gaan aan? 1556 01:16:49,740 --> 01:16:53,360 Wel, dit blyk dat as jy soort kyk ver genoeg in die onderliggende 1557 01:16:53,360 --> 01:16:55,950 voorstelling van hierdie nommer, dit eintlik 1558 01:16:55,950 --> 01:17:00,400 is nie presies 1/10, of 0.1 en 'n oneindige aantal nulle. 1559 01:17:00,400 --> 01:17:01,630 Nou, hoekom is dit? 1560 01:17:01,630 --> 01:17:06,250 >> Wel, selfs al is dit 'n eenvoudige aantal vir ons mense, 1 gedeel deur 10, 1561 01:17:06,250 --> 01:17:10,910 dit is nog steeds een van oneindig baie getalle wat ons kon uitdink. 1562 01:17:10,910 --> 01:17:14,490 Maar 'n rekenaar kan slegs verteenwoordig eindig baie so nommers. 1563 01:17:14,490 --> 01:17:18,710 En so, doeltreffend, wat die rekenaar wys ons is sy naaste 1564 01:17:18,710 --> 01:17:22,940 benadering tot die aantal ons wil om te glo is 10/01, 1565 01:17:22,940 --> 01:17:27,760 of regtig advertensie 0,10000 infinitum. 1566 01:17:27,760 --> 01:17:30,425 >> Inteendeel, al is, dit is so na as dit kan kry. 1567 01:17:30,425 --> 01:17:32,300 En, inderdaad, as jy kyk onder die enjinkap, 1568 01:17:32,300 --> 01:17:37,050 want ons is hier deur te kyk 55 syfers na die desimale, 1569 01:17:37,050 --> 01:17:39,990 ons eintlik sien dat die werklikheid. 1570 01:17:39,990 --> 01:17:42,610 Nou as 'n eenkant, as jy het ' ooit die movie-- gesien 1571 01:17:42,610 --> 01:17:45,780 die meeste van julle seker haven't-- maar Superman 3 paar jaar gelede, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor hierdie wese aged werklikheid in sy maatskappy 'n baie steel 1573 01:17:49,500 --> 01:17:53,500 van breuke en breuke van pennies, omdat die geselskap as ek reg onthou, 1574 01:17:53,500 --> 01:17:57,210 dit was 'n while-- wese was weggooi enigiets wat nie pas 1575 01:17:57,210 --> 01:17:58,790 in die idee van sent. 1576 01:17:58,790 --> 01:18:01,480 >> Maar as jy optel al hierdie klein, klein, klein getalle weer, 1577 01:18:01,480 --> 01:18:04,960 en weer, en weer, kan jy, soos in sy saak, maak 'n goeie bedrag van die geld. 1578 01:18:04,960 --> 01:18:08,010 >> Dieselfde idee is afgeruk deur 'n meer onlangse, maar nog steeds nou ouer 1579 01:18:08,010 --> 01:18:10,500 fliek, genaamd kantoorruimte, waar die ouens in die fliek, 1580 01:18:10,500 --> 01:18:13,501 het dieselfde ding, geskroef dit op heeltemal, beland met heeltemal te veel 1581 01:18:13,501 --> 01:18:14,666 geld in hul bankrekening. 1582 01:18:14,666 --> 01:18:15,800 Dit was alles baie verdag. 1583 01:18:15,800 --> 01:18:19,290 Maar aan die einde van die dag, onakkuraatheid is oral om ons. 1584 01:18:19,290 --> 01:18:22,240 >> En dit is ook kan wees skrikwekkend die geval. 1585 01:18:22,240 --> 01:18:25,590 Dit blyk dat Superman 3 en kantoorspasie ter syde stel, daar 1586 01:18:25,590 --> 01:18:28,460 kan 'n paar baie werklike wêreld gevolge 1587 01:18:28,460 --> 01:18:32,290 van die realiteite van vaag voorstelling van data 1588 01:18:32,290 --> 01:18:34,770 dat selfs ons mense te vandag beveel nie noodwendig 1589 01:18:34,770 --> 01:18:38,230 verstaan ​​asook ons ​​moet, of onthou so dikwels as ons moet. 1590 01:18:38,230 --> 01:18:42,950 En, inderdaad, die volgende clip is uit 'n blik op 'n paar baie werklike wêreld 1591 01:18:42,950 --> 01:18:47,730 gevolge van wat gebeur as jy nie waardeer die onakkuraatheid wat 1592 01:18:47,730 --> 01:18:50,065 kan gebeur in getalle verteenwoordiging. 1593 01:18:50,065 --> 01:18:51,300 >> [Video speel] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, Ons het al begin aanvaar die dikwels frustrerende probleme wat 1595 01:18:55,620 --> 01:19:00,310 saam met toets-- foute, virusse, en sagteware glitches, 1596 01:19:00,310 --> 01:19:03,130 vir klein pryse te betaal vir die gerief. 1597 01:19:03,130 --> 01:19:07,800 Maar in 'n hoë-tegnologie en 'n hoë spoed militêre en ruimteprogram aansoeke, 1598 01:19:07,800 --> 01:19:12,800 die kleinste probleem Groot in die ongeluk. 1599 01:19:12,800 --> 01:19:18,900 >> Op 4 Junie 1996, wetenskaplikes bereid om 'n onbemande Ariane 5 raket launch. 1600 01:19:18,900 --> 01:19:21,220 Dit was die uitvoering van wetenskaplike satelliete ontwerp 1601 01:19:21,220 --> 01:19:24,600 om presies hoe die vestig aarde se magneetveld interaksie 1602 01:19:24,600 --> 01:19:27,410 met sonkrag winde. 1603 01:19:27,410 --> 01:19:30,800 Die vuurpyl is gebou vir die Europese Ruimte-agentskap, 1604 01:19:30,800 --> 01:19:34,370 en gelig van sy fasiliteit aan die kus van Frans-Guyana. 1605 01:19:34,370 --> 01:19:37,540 >> -Op Sowat 37 sekondes in die vlug, het hulle eerste 1606 01:19:37,540 --> 01:19:39,270 opgemerk iets verkeerd gaan. 1607 01:19:39,270 --> 01:19:42,250 Die spuitkoppe is draaibare in 'n manier wat hulle regtig nie. 1608 01:19:42,250 --> 01:19:46,580 Rondom 40 sekondes in die vlug, Dit is duidelik dat die voertuig was in die moeilikheid. 1609 01:19:46,580 --> 01:19:48,850 >> En dit is wanneer hulle gemaak 'n besluit om dit te verwoes. 1610 01:19:48,850 --> 01:19:52,780 Die reeks veiligheidsbeampte, met geweldige guts, druk die knoppie, 1611 01:19:52,780 --> 01:19:58,150 opgeblaas die vuurpyl voordat dit kon 'n gevaar vir die openbare veiligheid. 1612 01:19:58,150 --> 01:20:01,060 >> -Dit Was die eerste vaart van die Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 En sy verwoesting het plaas as gevolg van 'n fout 1614 01:20:03,960 --> 01:20:05,822 ingebed in sagteware die vuurpyl se. 1615 01:20:05,822 --> 01:20:08,280 -Die Probleem op die Ariane was dat daar 'n getal wat 1616 01:20:08,280 --> 01:20:10,600 vereis 64 stukkies uit te druk. 1617 01:20:10,600 --> 01:20:13,590 En hulle wou omskep dit 'n 16-bis getal. 1618 01:20:13,590 --> 01:20:15,610 Hulle aanvaar dat die getal is nooit gaan 1619 01:20:15,610 --> 01:20:20,980 baie groot te wees, dat die meeste van diegene syfers in 'n 64-bis getal was nulle. 1620 01:20:20,980 --> 01:20:22,440 Hulle was verkeerd. 1621 01:20:22,440 --> 01:20:25,060 >> -Die Onvermoë van een sagteware program om te aanvaar 1622 01:20:25,060 --> 01:20:29,510 die aard van die getal wat deur 'n ander was al teen die wortel van die versuim. 1623 01:20:29,510 --> 01:20:34,350 Sagteware-ontwikkeling het 'n baie duur deel van nuwe tegnologie. 1624 01:20:34,350 --> 01:20:38,140 Die Ariane vuurpyl het baie gewees suksesvolle, soveel van die sagteware 1625 01:20:38,140 --> 01:20:41,550 geskep vir dit ook was gebruik in die Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -Die Basiese probleem is dat die Ariane 5 was vinniger, vinniger vinniger. 1627 01:20:47,940 --> 01:20:51,450 En die sagteware het nie verantwoordelik vir daardie. 1628 01:20:51,450 --> 01:20:55,060 >> -Die Vernietiging van die vuurpyl was 'n groot finansiële ramp, 1629 01:20:55,060 --> 01:20:58,790 al as gevolg van 'n minuut sagteware fout. 1630 01:20:58,790 --> 01:21:01,210 Maar dit was nie die eerste time data omskakeling probleme 1631 01:21:01,210 --> 01:21:04,820 het moderne vuurpyl tegnologie geteister. 1632 01:21:04,820 --> 01:21:08,050 >> -In 1991, met die begin van die eerste Golfoorlog, 1633 01:21:08,050 --> 01:21:10,570 die Patriot Vuurpyl ervaar 'n soortgelyke soort 1634 01:21:10,570 --> 01:21:12,800 van getal omskakeling probleem. 1635 01:21:12,800 --> 01:21:16,090 En as gevolg daarvan, 28 mense, 28 Amerikaanse soldate, 1636 01:21:16,090 --> 01:21:19,080 gedood, en oor 100 ander gewond, 1637 01:21:19,080 --> 01:21:22,780 wanneer die Patriot, wat veronderstel was om te beskerm teen die inkomende scuds, 1638 01:21:22,780 --> 01:21:25,830 versuim het om 'n missiel te vuur. 1639 01:21:25,830 --> 01:21:31,670 >> -Wanneer Irak Koeweit, en Amerika van stapel gestuur Desert Storm in die vroeë 1991, 1640 01:21:31,670 --> 01:21:35,780 Patriot missiel batterye ontplooi te beskerm Saoedi-Arabië en Israel 1641 01:21:35,780 --> 01:21:39,230 uit Irak Scud missiel aanvalle. 1642 01:21:39,230 --> 01:21:43,810 Die Patriot is 'n Amerikaanse medium-reeks oppervlak te lug stelsel, vervaardig 1643 01:21:43,810 --> 01:21:45,770 deur die Raytheon maatskappy. 1644 01:21:45,770 --> 01:21:52,340 >> -Die Grootte van die Patriot Interceptor self is oor ongeveer 20 voet lank. 1645 01:21:52,340 --> 01:21:55,230 En dit weeg ongeveer 2000 pond. 1646 01:21:55,230 --> 01:21:59,320 En dit dra 'n plofkop van ongeveer, Ek dink dit is min of meer 150 pond. 1647 01:21:59,320 --> 01:22:03,930 En die Warhead self is n hoë plofstof, wat 1648 01:22:03,930 --> 01:22:07,330 het fragmente rondom dit. 1649 01:22:07,330 --> 01:22:11,680 Die omhulsel van die Warhead is ontwerp om op te tree soos bokhael. 1650 01:22:11,680 --> 01:22:14,110 >> -Die Missiele gedra vier per houer, 1651 01:22:14,110 --> 01:22:17,130 en word deur 'n semi sleepwa. 1652 01:22:17,130 --> 01:22:24,930 >> -Die Patriot anti-missiel-stelsel gaan terug nou ten minste 20 jaar. 1653 01:22:24,930 --> 01:22:28,420 Dit is oorspronklik ontwerp as 'n lug verdediging missiel 1654 01:22:28,420 --> 01:22:30,720 skiet vyand vliegtuie. 1655 01:22:30,720 --> 01:22:34,500 In die eerste Golfoorlog, wanneer die oorlog het saam, 1656 01:22:34,500 --> 01:22:39,745 die weermag wou om dit te gebruik om skiet scuds, nie vliegtuie. 1657 01:22:39,745 --> 01:22:43,620 >> Die Irakse lugmag was nie so veel van 'n probleem. 1658 01:22:43,620 --> 01:22:46,670 Maar die leër was bekommerd oor scuds. 1659 01:22:46,670 --> 01:22:50,170 En so het hulle probeer om die opgradering van die Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting 'N vyand missiel wat teen mach 5 1661 01:22:52,800 --> 01:22:55,830 gaan word uitdagende genoeg. 1662 01:22:55,830 --> 01:22:58,490 Maar toe die Patriot is inderhaas na die diens, 1663 01:22:58,490 --> 01:23:02,860 die weermag was nie bewus van 'n Irakse verandering wat gemaak 1664 01:23:02,860 --> 01:23:05,930 hul scuds byna onmoontlik om te tref. 1665 01:23:05,930 --> 01:23:10,740 >> -Wat Gebeur het, is die scuds wat gekom in was onstabiel. 1666 01:23:10,740 --> 01:23:11,692 Hulle is wiebel. 1667 01:23:11,692 --> 01:23:14,910 Die rede hiervoor was die Irak, ten einde 1668 01:23:14,910 --> 01:23:18,280 600 kilometer te kry uit 'n 300 kilometer 1669 01:23:18,280 --> 01:23:21,700 afstand missiel, het gewig uit die voorkant Warhead. 1670 01:23:21,700 --> 01:23:23,390 Hulle het die Warhead ligter. 1671 01:23:23,390 --> 01:23:27,330 >> So het die Patriot is probeer om die Scud te kom. 1672 01:23:27,330 --> 01:23:30,230 En die meeste van die tyd, die oorweldigende meerderheid van die tyd, 1673 01:23:30,230 --> 01:23:32,940 Dit sou net vlieg deur die Scud. 1674 01:23:32,940 --> 01:23:37,260 Sodra die Patriot-stelsel operateurs besef die Patriot gemis sy teiken, 1675 01:23:37,260 --> 01:23:41,690 hulle ontplof die Patriot se Warhead om moontlike slagoffers as dit te vermy 1676 01:23:41,690 --> 01:23:44,570 is toegelaat om op die grond val. 1677 01:23:44,570 --> 01:23:48,790 >> -dat Was wat die meeste mense sien, die groot vuurballe in die lug, 1678 01:23:48,790 --> 01:23:54,550 en misverstaan ​​as afsnitte van Scud hoofde. 1679 01:23:54,550 --> 01:23:56,630 >> -Although In die nag skies, verskyn Patriotte 1680 01:23:56,630 --> 01:24:00,370 om suksesvol te wees vernietig Scuds, by Dhahran, 1681 01:24:00,370 --> 01:24:03,360 Daar kan geen fout wees oor sy prestasie. 1682 01:24:03,360 --> 01:24:07,970 Daar, die Patriot se radarstelsel verlore spoor van 'n inkomende Scud, 1683 01:24:07,970 --> 01:24:10,721 en nooit van stapel gestuur as gevolg 'n sagteware fout. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Dit was die Israeli's wat die eerste keer ontdek dat hoe langer die stelsel was op, 1686 01:24:18,940 --> 01:24:22,690 hoe groter is die tyd verskil geword het, as gevolg van 'n klok ingesluit 1687 01:24:22,690 --> 01:24:24,810 in die rekenaar se stelsel. 1688 01:24:24,810 --> 01:24:28,210 >> -oor Twee weke voor die tragedie in Dhahran, 1689 01:24:28,210 --> 01:24:30,770 die Israeli's gerapporteer word aan die Departement van verdediging 1690 01:24:30,770 --> 01:24:32,590 dat die stelsel is tyd verloor. 1691 01:24:32,590 --> 01:24:35,360 Na ongeveer agt uur of hardloop, Hulle het opgemerk dat die stelsel 1692 01:24:35,360 --> 01:24:37,720 is besig om merkbaar minder akkuraat. 1693 01:24:37,720 --> 01:24:41,900 Die Departement van verdediging het gereageer deur vertel al die Patriot batterye 1694 01:24:41,900 --> 01:24:44,950 om nie die stelsels te verlaat vir 'n lang tyd. 1695 01:24:44,950 --> 01:24:49,160 Hulle het nooit gesê wat 'n lang tyd was-- agt uur, 10 uur, 1000 ure. 1696 01:24:49,160 --> 01:24:51,360 Niemand het geweet. 1697 01:24:51,360 --> 01:24:53,380 >> -Die Patriot battery gestasioneer by die barakke 1698 01:24:53,380 --> 01:24:58,350 by Dhahran en sy gebrekkige interne klok het meer as 100 uur is op 1699 01:24:58,350 --> 01:25:01,670 op die aand van 25 Februarie. 1700 01:25:01,670 --> 01:25:05,917 >> -Dit Nagespoor tyd om 'n akkuraatheid van ongeveer 'n tiende van 'n sekonde. 1701 01:25:05,917 --> 01:25:08,000 Nou, 'n tiende van 'n sekonde is 'n interessante nommer, 1702 01:25:08,000 --> 01:25:11,920 want dit kan nie uitgedruk in binêre presies wat 1703 01:25:11,920 --> 01:25:16,820 beteken dit kan nie presies uitgedruk in enige moderne digitale rekenaar. 1704 01:25:16,820 --> 01:25:18,540 Dit is moeilik om te glo. 1705 01:25:18,540 --> 01:25:21,210 >> Maar gebruik dit as 'n voorbeeld. 1706 01:25:21,210 --> 01:25:23,540 Kom ons neem die nommer een derde plek. 1707 01:25:23,540 --> 01:25:27,350 Een derde kan nie uitgedruk in desimale presies. 1708 01:25:27,350 --> 01:25:32,080 Een derde is 0,333 aangaan vir oneindigheid. 1709 01:25:32,080 --> 01:25:36,480 >> Daar is geen manier om dit te doen met absolute akkuraatheid in desimale. 1710 01:25:36,480 --> 01:25:39,560 Dit is presies die soort van probleem wat gebeur het in die Patriot. 1711 01:25:39,560 --> 01:25:44,100 Hoe langer die stelsel hardloop, die erger die tyd fout is. 1712 01:25:44,100 --> 01:25:48,890 >> -na 100 ure van die operasie, die fout in die tyd was slegs sowat 'n derde 1713 01:25:48,890 --> 01:25:50,600 van 'n sekonde. 1714 01:25:50,600 --> 01:25:54,210 Maar in terme van die fokus op 'n missiel wat teen mach 5, 1715 01:25:54,210 --> 01:25:58,710 Dit het gelei tot 'n dop dwaling van meer as 600 meter. 1716 01:25:58,710 --> 01:26:02,120 Dit sou 'n fatale fout wees vir die soldate op wat 1717 01:26:02,120 --> 01:26:08,940 gebeur is 'n Scud bekendstelling was waargeneem deur vroeë waarskuwing satelliete 1718 01:26:08,940 --> 01:26:12,860 en hulle het geweet dat die Scud was kom in hul algemene rigting. 1719 01:26:12,860 --> 01:26:15,320 Hulle het nie geweet waar dit vandaan kom. 1720 01:26:15,320 --> 01:26:18,250 >> -Dit Was nou tot die radar komponent van die Patriot-stelsel 1721 01:26:18,250 --> 01:26:23,190 verdedig Dhahran op te spoor en te hou spoor van die inkomende vyand missiel. 1722 01:26:23,190 --> 01:26:24,609 >> -Die Radar was baie slim. 1723 01:26:24,609 --> 01:26:26,650 Dit sou eintlik dop die posisie van die Scud, 1724 01:26:26,650 --> 01:26:30,350 en dan voorspel waar dit waarskynlik sou die volgende keer die radar gestuur word 1725 01:26:30,350 --> 01:26:31,420 'n pols uit. 1726 01:26:31,420 --> 01:26:33,110 Dit is 'n reeks hek genoem. 1727 01:26:33,110 --> 01:26:37,660 >> -Then, Sodra die Patriot besluit genoeg tyd het 1728 01:26:37,660 --> 01:26:42,450 geslaag om terug te gaan en kyk die volgende plek vir hierdie bespeur voorwerp, 1729 01:26:42,450 --> 01:26:43,600 Dit gaan terug. 1730 01:26:43,600 --> 01:26:48,650 So wanneer dit gaan terug na die verkeerde plek, dan sien geen voorwerp. 1731 01:26:48,650 --> 01:26:52,160 En hy besluit dat daar geen voorwerp, dit was 'n valse opsporing, 1732 01:26:52,160 --> 01:26:53,930 en daal die spoor. 1733 01:26:53,930 --> 01:26:57,030 >> -Die Inkomende Scud verdwyn van die radarskerm. 1734 01:26:57,030 --> 01:27:00,260 En sekondes later, is dit klap in die kamp. 1735 01:27:00,260 --> 01:27:06,150 Die Scud vermoor 28, en was die laaste een afgevuur tydens die eerste Golfoorlog. 1736 01:27:06,150 --> 01:27:11,960 >> Dit is tragies dat die opgedateer sagteware aangekom by Dhahran die volgende dag. 1737 01:27:11,960 --> 01:27:14,930 Die sagteware fout gehad vasgestel, afsluiting 1738 01:27:14,930 --> 01:27:19,806 een hoofstuk in die onstuimige geskiedenis van die Patriot raket. 1739 01:27:19,806 --> 01:27:20,729 >> [Video speel] 1740 01:27:20,729 --> 01:27:23,520 David J. MALAN: So dit is al te sê dat hierdie kwessies van oorloop 1741 01:27:23,520 --> 01:27:25,860 en onakkuraatheid is al te ware. 1742 01:27:25,860 --> 01:27:26,920 So, hoe het ons hier? 1743 01:27:26,920 --> 01:27:28,895 Ons het begin met net praat oor printf. 1744 01:27:28,895 --> 01:27:31,270 Weereens, dit funksie wat druk iets op die skerm, 1745 01:27:31,270 --> 01:27:33,450 en ons daarna bekendgestel 'n paar ander funksies 1746 01:27:33,450 --> 01:27:34,945 van die sogenaamde CS50 se biblioteek. 1747 01:27:34,945 --> 01:27:36,910 En ons sal voortgaan om te sien hierdie op die regte tyd. 1748 01:27:36,910 --> 01:27:40,760 En ons, veral, gebruik get string, en kry int, en nou ook vlot, 1749 01:27:40,760 --> 01:27:44,410 en nog ander nog sal ons teëkom en gebruik onsself voor lank. 1750 01:27:44,410 --> 01:27:47,220 >> Maar soms, het ons reeds gesien dat 'n behoefte 1751 01:27:47,220 --> 01:27:50,520 om terug te slaan wat die funksies hand? 1752 01:27:50,520 --> 01:27:52,920 Hulle oorhandig ons terug 'n string, of 'n int, of 'n float. 1753 01:27:52,920 --> 01:27:56,070 En soms moet ons dit sit string, of int, of float, iewers. 1754 01:27:56,070 --> 01:28:00,100 >> En om te hoor slaan, onthou net soos in Scratch, ons het veranderlikes. 1755 01:28:00,100 --> 01:28:03,260 Maar anders as in Scratch, in C het ons werklike tipes 1756 01:28:03,260 --> 01:28:05,530 van variables-- data tipes, meer generally-- 1757 01:28:05,530 --> 01:28:08,640 onder hulle, 'n string, 'n int, 'n dryf, en hierdie ander steeds. 1758 01:28:08,640 --> 01:28:12,321 >> En so wanneer ons verklaar veranderlikes in C, Ons sal maar moet ons datatipes verklaar. 1759 01:28:12,321 --> 01:28:14,820 Dit is nie iets wat ons sal moet later doen in die semester 1760 01:28:14,820 --> 01:28:16,810 as ons die oorgang na ander tale. 1761 01:28:16,810 --> 01:28:19,610 Maar vir nou, hoef ons 'n priori by voorbaat, 1762 01:28:19,610 --> 01:28:24,370 verduidelik aan die rekenaar watter tipe veranderlike wil ons dit aan ons gee. 1763 01:28:24,370 --> 01:28:27,290 >> Nou het intussen te druk diegene soorte datatipes, 1764 01:28:27,290 --> 01:28:29,570 ons moet vertel printf wat om te verwag. 1765 01:28:29,570 --> 01:28:32,450 En ons sien persent s vir strykers, en persent ek vir heelgetalle, 1766 01:28:32,450 --> 01:28:33,790 en 'n paar ander reeds. 1767 01:28:33,790 --> 01:28:37,237 En dit is net vereistes vir die visuele aanbieding 1768 01:28:37,237 --> 01:28:38,070 van daardie inligting. 1769 01:28:38,070 --> 01:28:42,080 >> En elkeen van hierdie kan eintlik wees parametrized of tweaked in een of ander manier, 1770 01:28:42,080 --> 01:28:45,370 As jy wil beheer te bevorder die tipe uitset wat jy kry. 1771 01:28:45,370 --> 01:28:49,604 En, in werklikheid, dit blyk dat nie net is daar agteroorskuinsstreep N vir 'n nuwe reël. 1772 01:28:49,604 --> 01:28:52,520 Daar is iets anders genoem agteroorskuinsstreep r vir 'n return, wat 1773 01:28:52,520 --> 01:28:54,360 is meer verwant is aan 'n ou skool tikmasjien, 1774 01:28:54,360 --> 01:28:57,690 en ook Windows gebruik vir baie jare. 1775 01:28:57,690 --> 01:28:59,690 >> Daar is agteroorskuinsstreep t vir oortjies. 1776 01:28:59,690 --> 01:29:03,170 Blyk dat as jy wil dubbel kwotasie binnekant van 'n string, 1777 01:29:03,170 --> 01:29:05,000 Onthou dat ons gebruik dubbel kwotasie dubbel 1778 01:29:05,000 --> 01:29:07,900 aanhaling op die links en regs eindig van ons snare tot dusver. 1779 01:29:07,900 --> 01:29:09,420 Dit wil voorkom asof dinge verwar. 1780 01:29:09,420 --> 01:29:12,503 >> As jy wil 'n dubbel kwotasie in te sit die middel van 'n string-- en, inderdaad, 1781 01:29:12,503 --> 01:29:13,670 Dit is verwarrend om te sien. 1782 01:29:13,670 --> 01:29:17,120 En so moet jy om te ontsnap, om so te praat, 'n dubbele kwotasie met iets 1783 01:29:17,120 --> 01:29:18,860 soos, letterlik, agteroorskuinsstreep dubbel kwotasie. 1784 01:29:18,860 --> 01:29:20,230 En daar is 'n paar ander nog. 1785 01:29:20,230 --> 01:29:24,540 En ons sal meer van daardie sien in die werklike gebruik kort voor lank. 1786 01:29:24,540 --> 01:29:27,930 >> So laat ons nou die oorgang vanaf data, en verteenwoordiging, 1787 01:29:27,930 --> 01:29:30,820 en rekenkundige operateurs, al waarvan het ons 'n paar gebou 1788 01:29:30,820 --> 01:29:32,070 blokke waarmee om te speel. 1789 01:29:32,070 --> 01:29:34,481 Maar nou kom ons eintlik te gee ons die res van die woordeskat 1790 01:29:34,481 --> 01:29:36,230 dat ons reeds verlede week met Scratch 1791 01:29:36,230 --> 01:29:39,350 deur die neem van 'n blik op 'n paar ander konstrukte in C-- nie almal van hulle. 1792 01:29:39,350 --> 01:29:41,680 Maar die idees wat ons is oor te eintlik net sien 1793 01:29:41,680 --> 01:29:45,610 beklemtoon die vertaling van een taal, Scratch, na 'n ander, C. 1794 01:29:45,610 --> 01:29:48,470 >> En met verloop van tyd, sal ons haal meer gereedskap vir ons toolkit, 1795 01:29:48,470 --> 01:29:49,820 so te sê, sintakties. 1796 01:29:49,820 --> 01:29:54,190 En, inderdaad, sal jy sien dat die idees is nou eerder vertroud van verlede week. 1797 01:29:54,190 --> 01:29:55,200 So laat ons dit doen. 1798 01:29:55,200 --> 01:29:58,870 >> Kom ons gaan voort en sweep 'n program wat gebruik maak van eintlik 'n paar uitdrukkings, 1799 01:29:58,870 --> 01:30:00,720 'n Boole-uitdrukking. 1800 01:30:00,720 --> 01:30:02,810 Laat my hier gaan voort en die skep van 'n nuwe lêer. 1801 01:30:02,810 --> 01:30:06,090 Ek sal hierdie condition.c noem. 1802 01:30:06,090 --> 01:30:09,350 >> Laat my gaan voort en sluit die CS50 biblioteek. 1803 01:30:09,350 --> 01:30:12,640 En laat ek gaan voort en sluit standaard IO.h vir ons funksies, 1804 01:30:12,640 --> 01:30:14,690 en printf, en nog baie meer onderskeidelik. 1805 01:30:14,690 --> 01:30:18,900 Kom ek gee myself dat boiler van int main leemte, wie se verduideliking ons sal 1806 01:30:18,900 --> 01:30:20,360 kom terug na die toekoms. 1807 01:30:20,360 --> 01:30:23,820 >> Nou kan ek gaan voort en gee myself 'n int via get Int. 1808 01:30:23,820 --> 01:30:25,970 laat my dan voort te gaan en dit te doen. 1809 01:30:25,970 --> 01:30:30,150 Ek wil om te sê as ek is less-- laat onderskei tussen positiewe, negatiewe, 1810 01:30:30,150 --> 01:30:31,260 of nul waardes. 1811 01:30:31,260 --> 01:30:36,630 >> So as ek minder as nul is, laat my moet net hierdie program net sê, 1812 01:30:36,630 --> 01:30:42,370 negatiewe, agteroorskuinsstreep N, anders As ek is groter as nul. 1813 01:30:42,370 --> 01:30:47,030 Nou is ek natuurlik gaan om te sê printf positiewe, agteroorskuinsstreep N. 1814 01:30:47,030 --> 01:30:50,690 En dan anders if-- ek kan dit doen. 1815 01:30:50,690 --> 01:30:53,410 >> Ek kon doen as ek gelyk 0. 1816 01:30:53,410 --> 01:30:55,840 Maar ek wil maak op minste een fout reeds. 1817 01:30:55,840 --> 01:30:59,480 Onthou dat die gelyk teken is nie gelyk, soos ons mense weet dit. 1818 01:30:59,480 --> 01:31:01,010 >> Maar dit is die opdrag operateur. 1819 01:31:01,010 --> 01:31:05,640 En ons wil nie te neem 0 op die reg en sit dit in Ek aan die linkerkant. 1820 01:31:05,640 --> 01:31:11,810 So om hierdie verwarring te voorkom, of miskien misbruik van die gelykaanteken, 1821 01:31:11,810 --> 01:31:14,740 mense besluit 'n paar jaar gelede wat in baie programmeertale 1822 01:31:14,740 --> 01:31:18,000 wanneer jy wil om te kyk vir gelykheid tussen die links en regs, 1823 01:31:18,000 --> 01:31:19,635 jy eintlik gebruik gelyk gelykes. 1824 01:31:19,635 --> 01:31:21,010 So jy druk op die gelykaanteken twee keer. 1825 01:31:21,010 --> 01:31:25,600 As jy wil toewys van regs na links, gebruik jy 'n enkele gelykaanteken. 1826 01:31:25,600 --> 01:31:29,360 So kan ons this-- anders doen As ek gelyk is gelyk aan nul. 1827 01:31:29,360 --> 01:31:31,710 >> Ek kan dan gaan open my krullerige draadjies, 1828 01:31:31,710 --> 01:31:36,087 en sê: printf 0, agteroorskuinsstreep N, gedoen. 1829 01:31:36,087 --> 01:31:38,170 Maar onthou hoe hierdie vurke in die pad kan werk. 1830 01:31:38,170 --> 01:31:39,836 En regtig, net te dink oor die logika. 1831 01:31:39,836 --> 01:31:41,510 Ek is 'n aantal. 1832 01:31:41,510 --> 01:31:43,320 Dit is 'n heelgetal, spesifiek. 1833 01:31:43,320 --> 01:31:48,600 En dit beteken dat dit gaan minder wees as 0, of groter as 0, of 0. 1834 01:31:48,600 --> 01:31:51,600 So daar is 'n soort van hierdie geïmpliseerde verstek geval. 1835 01:31:51,600 --> 01:31:54,920 >> En so kan ons, net soos Kras, wegdoen met die ander as, 1836 01:31:54,920 --> 01:31:55,747 en net sê anders. 1837 01:31:55,747 --> 01:31:57,830 Logies, as jy die programmeerder weet daar is net 1838 01:31:57,830 --> 01:32:01,635 drie emmers waarin 'n scenario kan fall-- die eerste, 1839 01:32:01,635 --> 01:32:03,510 die tweede, of die derde in hierdie nie case-- doen 1840 01:32:03,510 --> 01:32:07,100 pla die toevoeging van die bykomende presisie en die addisionele logika daar. 1841 01:32:07,100 --> 01:32:09,690 Gaan net voort met die standaard geval hier van ander mense. 1842 01:32:09,690 --> 01:32:11,950 >> Nou, laat ons gaan voort Hierna spaar, maak 1843 01:32:11,950 --> 01:32:15,760 voorwaardes dot streep conditions-- nie 'n groot gebruikerskoppelvlak, 1844 01:32:15,760 --> 01:32:18,914 omdat ek nie waarna die gebruiker, soos ek vroeër genoem. 1845 01:32:18,914 --> 01:32:19,580 Maar dit is goed. 1846 01:32:19,580 --> 01:32:20,454 Ons sal dit eenvoudig te hou. 1847 01:32:20,454 --> 01:32:21,890 Kom ons probeer die getal 42. 1848 01:32:21,890 --> 01:32:23,240 En dit is positief. 1849 01:32:23,240 --> 01:32:26,120 Kom ons probeer die getal negatiewe 42, negatief. 1850 01:32:26,120 --> 01:32:28,244 >> Kom ons probeer die waarde 0. 1851 01:32:28,244 --> 01:32:29,160 En, inderdaad, dit werk. 1852 01:32:29,160 --> 01:32:33,900 Nou, sal jy sien met probleme voor lang, toetsing dinge drie keer, 1853 01:32:33,900 --> 01:32:34,980 waarskynlik nie voldoende. 1854 01:32:34,980 --> 01:32:37,438 Jy wil dalk 'n paar toets groter getalle, 'n kleiner 1855 01:32:37,438 --> 01:32:40,520 getalle, 'n hoek gevalle, soos ons sal kom om hulle te beskryf. 1856 01:32:40,520 --> 01:32:42,500 >> Maar vir nou, hierdie is 'n mooi eenvoudige program. 1857 01:32:42,500 --> 01:32:45,160 En ek is redelik seker dat, logies, dat dit val in drie gevalle. 1858 01:32:45,160 --> 01:32:49,360 En, inderdaad, selfs al het ons net gefokus op die moontlike nadele 1859 01:32:49,360 --> 01:32:53,480 van onakkuraatheid en oorloop, in werklikheid waar baie probleme CS50 se 1860 01:32:53,480 --> 01:32:56,000 ons is nie van plan om te bekommer oor, al die tyd, 1861 01:32:56,000 --> 01:32:59,050 dié kwessies van oorloop en onakkuraatheid, want, in werklikheid, in C, 1862 01:32:59,050 --> 01:33:01,889 dit is eintlik nie alles wat maklik om te doen te vermy. 1863 01:33:01,889 --> 01:33:04,180 As jy wil om te tel tot groter en groter, en groter, 1864 01:33:04,180 --> 01:33:07,510 dit blyk daar is tegnieke wat jy kan gebruik, wat dikwels dinge genoem 1865 01:33:07,510 --> 01:33:11,240 biblioteke, versamelings kode, wat ander mense geskryf het wat jy kan gebruik, 1866 01:33:11,240 --> 01:33:13,910 en ander tale soos Java en ander, eintlik 1867 01:33:13,910 --> 01:33:15,800 maak dit 'n baie makliker om selfs hoër te tel. 1868 01:33:15,800 --> 01:33:19,810 So dit is regtig 'n paar van hierdie gevare 'n funksie van die taal wat jy gebruik. 1869 01:33:19,810 --> 01:33:22,710 En in die komende weke sal ons sien hoe gevaarlik C regtig 1870 01:33:22,710 --> 01:33:24,950 kan wees as jy dit nie behoorlik gebruik. 1871 01:33:24,950 --> 01:33:27,610 Maar van daar af, en met Python, en JavaScript, sal 1872 01:33:27,610 --> 01:33:32,620 Ons laag op 'n paar ekstra beskerming, en loop minder van die risiko's. 1873 01:33:32,620 --> 01:33:35,820 >> So laat ons 'n bietjie meer interessante logika in ons program. 1874 01:33:35,820 --> 01:33:39,110 So laat ek gaan voort en skep 'n program genaamd Logiese 1875 01:33:39,110 --> 01:33:43,804 net sodat ek kan speel met 'n paar werklike logika, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Ek sal net kopieer en plak 'n paar kode van vroeër so ek terug te kry 1877 01:33:46,870 --> 01:33:49,950 om hierdie mooi beginpunt. 1878 01:33:49,950 --> 01:33:53,980 >> Laat my hierdie keer doen char C. Ek is gaan dit 'n naam van C te gee 1879 01:33:53,980 --> 01:33:58,510 net omdat dit is konvensionele, kry 'n karakter van die gebruiker. 1880 01:33:58,510 --> 01:34:00,730 En laat ons voorgee soos Ek is die implementering deel 1881 01:34:00,730 --> 01:34:04,130 van daardie Rm program, die Verwyder program voor wat daartoe gelei dat die gebruiker 1882 01:34:04,130 --> 01:34:05,400 om 'n lêer te verwyder. 1883 01:34:05,400 --> 01:34:06,750 Hoe kan ons dit doen? 1884 01:34:06,750 --> 01:34:11,090 >> Ek wil sê, as C is gelyk aan gelyk, kwotasie unquote, 1885 01:34:11,090 --> 01:34:16,304 y, dan gaan ek om te aanvaar dat die gebruiker ja gekies. 1886 01:34:16,304 --> 01:34:17,470 Ek gaan net om te druk ja. 1887 01:34:17,470 --> 01:34:19,440 As dit is eintlik skryf die verwydering program, 1888 01:34:19,440 --> 01:34:21,420 Ons kan die lêer verwyder met meer reëls van die kode. 1889 01:34:21,420 --> 01:34:22,461 Maar ons sal dit eenvoudig te hou. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Anders as c gelyk gelyk n-- en nou hier, ek gaan om te sê, 1892 01:34:31,250 --> 01:34:32,980 die gebruiker moet nie beteken het. 1893 01:34:32,980 --> 01:34:34,360 En dan anders, jy weet wat? 1894 01:34:34,360 --> 01:34:36,200 Ek weet nie wat anders weet die gebruiker gaan tik. 1895 01:34:36,200 --> 01:34:38,533 So ek gaan net om te sê dat dit is 'n fout, wat ook al 1896 01:34:38,533 --> 01:34:40,070 hy of sy eintlik getik. 1897 01:34:40,070 --> 01:34:41,180 >> So, wat gaan hier aan? 1898 01:34:41,180 --> 01:34:44,530 Daar is 'n fundamentele verskil teenoor wat ek gedoen het in die verlede. 1899 01:34:44,530 --> 01:34:49,300 Dubbele aanhalingstekens, dubbele aanhalingstekens, dubbel aanhalings, en, nog, aanhalingstekens, 1900 01:34:49,300 --> 01:34:50,170 aanhalingstekens. 1901 01:34:50,170 --> 01:34:52,860 Dit blyk in C, wat toe jy wil 'n string te skryf, 1902 01:34:52,860 --> 01:34:56,680 jy wel dubbele aanhalingstekens, net soos ons gebruik al die tyd met printf. 1903 01:34:56,680 --> 01:35:02,030 >> Maar as jy wil om te gaan met net 'n enkele karakter, 'n sogenaamde kar, 1904 01:35:02,030 --> 01:35:03,780 dan is jy eintlik gebruik aanhalingstekens. 1905 01:35:03,780 --> 01:35:05,450 Diegene van julle wat het geprogrammeer voor, kan jy nie ' 1906 01:35:05,450 --> 01:35:07,850 moes bekommer oor hierdie onderskeid in sekere tale. 1907 01:35:07,850 --> 01:35:09,450 In C, dit maak nie saak. 1908 01:35:09,450 --> 01:35:12,560 En so toe ek 'n kar te kry en ek wil om daardie kar vergelyk met behulp van gelykes 1909 01:35:12,560 --> 01:35:18,350 gelyk aan 'n brief soos y of N, ek doen, Inderdaad, moet die aanhalingstekens het. 1910 01:35:18,350 --> 01:35:19,770 >> Nou, laat ons gaan voort en doen dit. 1911 01:35:19,770 --> 01:35:26,180 Kom ons gaan voort en maak nie logiese dot streep logies. 1912 01:35:26,180 --> 01:35:27,305 En nou is ek wat gevra word. 1913 01:35:27,305 --> 01:35:30,638 So, vermoedelik, 'n beter gebruikers ervaring sou my eintlik sê wat om te doen hier. 1914 01:35:30,638 --> 01:35:33,030 Maar ek gaan net blindelings sê y vir ja, OK, lekker. 1915 01:35:33,030 --> 01:35:35,780 >> Kom ons weer uit te voer nie, N vir nee, mooi. 1916 01:35:35,780 --> 01:35:39,610 Veronderstel soos sekere mense wat ek ken, my Caps Lock is op al te dikwels. 1917 01:35:39,610 --> 01:35:43,740 So ek doen kapitaal Y, betree, fout. 1918 01:35:43,740 --> 01:35:46,130 OK, dit is nie presies wat ek verwag het nie. 1919 01:35:46,130 --> 01:35:48,170 Trouens, die rekenaar is letterlik wat doen 1920 01:35:48,170 --> 01:35:51,794 Ek het dit aan do-- kyk vir klein y en klein N. 1921 01:35:51,794 --> 01:35:53,960 Dit voel nie soos 'n goeie gebruikers ervaring, al is. 1922 01:35:53,960 --> 01:35:59,010 Laat my vra en aanvaar óf kleinletters of hoofletters. 1923 01:35:59,010 --> 01:36:02,090 So dit blyk, wil jy dalk om iets te sê soos in Scratch, 1924 01:36:02,090 --> 01:36:08,150 soos letterlik of C is gelyk aan gelyk kapitaal enkele aangehaal y. 1925 01:36:08,150 --> 01:36:11,400 Blyk, beteken C nie hierdie letterlike navraag of. 1926 01:36:11,400 --> 01:36:12,880 >> Maar dit het twee vertikale bars. 1927 01:36:12,880 --> 01:36:15,463 Jy het om te skuif gewoonlik hou, As jy met behulp van 'n Amerikaanse sleutelbord, 1928 01:36:15,463 --> 01:36:18,910 en druk die vertikale bar sleutel bo jou terugkeer sleutel. 1929 01:36:18,910 --> 01:36:22,410 Maar hierdie vertikale bar vertikale bar beteken of. 1930 01:36:22,410 --> 01:36:26,220 >> As, daarenteen, ons wou om te sê en, soos in Scratch, 1931 01:36:26,220 --> 01:36:28,180 Ons kan ampersand ampersand doen. 1932 01:36:28,180 --> 01:36:31,330 Dit maak geen logiese sin hier, want 'n mens kan nie moontlik 1933 01:36:31,330 --> 01:36:37,110 getik beide y en klein y en kapitaal Y as dieselfde karakter. 1934 01:36:37,110 --> 01:36:39,470 So of is dit wat ons van plan is hier. 1935 01:36:39,470 --> 01:36:46,280 >> So as ek doen dit in beide plekke, of c gelyk gelyk kapitaal N, nou tik, 1936 01:36:46,280 --> 01:36:49,390 logiese, tik logies. 1937 01:36:49,390 --> 01:36:51,200 Nou kan ek y tik. 1938 01:36:51,200 --> 01:36:53,920 En ek kan dit weer doen met kapitaal Y, of kapitaal N. 1939 01:36:53,920 --> 01:36:56,630 En ek kon voeg in bykomende kombinasies steeds. 1940 01:36:56,630 --> 01:36:58,810 >> Dit is dus 'n logiese program sover nou 1941 01:36:58,810 --> 01:37:01,940 Ek is logies nagaan vir hierdie waarde of hierdie waarde. 1942 01:37:01,940 --> 01:37:06,420 En ek hoef nie te, noodwendig, kom met nog twee ifs of anders ifs. 1943 01:37:06,420 --> 01:37:09,960 Ek kan eintlik kombineer sommige van die verwant logika saam op hierdie manier. 1944 01:37:09,960 --> 01:37:11,950 So sou dit beter wees ontwerp as net 1945 01:37:11,950 --> 01:37:17,490 en gesê: As C is gelyk aan kleinletters y, druk ja, anders as c gelyk kapitaal Y, 1946 01:37:17,490 --> 01:37:20,074 druk ja, anders as c gelyk lower-- met ander woorde, 1947 01:37:20,074 --> 01:37:21,990 jy hoef nie te hê meer en meer takke. 1948 01:37:21,990 --> 01:37:28,840 Jy kan 'n paar van die ekwivalent kombineer takke logies, soos in hierdie manier. 1949 01:37:28,840 --> 01:37:34,150 >> So laat ons 'n blik op net een finale bestanddeel, 'n laaste konstruk, 1950 01:37:34,150 --> 01:37:34,847 dat C laat. 1951 01:37:34,847 --> 01:37:36,930 En ons sal terug te kom in die toekoms vir ander nog. 1952 01:37:36,930 --> 01:37:41,400 En dan sal ons die gevolgtrekking deur te kyk by nie die korrektheid van code-- 1953 01:37:41,400 --> 01:37:46,070 kry-kode vir work-- maar die ontwerp van kode, en plant die saad vroeg. 1954 01:37:46,070 --> 01:37:51,337 >> So laat ek gaan voort en open 'n nuwe lêer hier. 1955 01:37:51,337 --> 01:37:51,920 Jy weet wat? 1956 01:37:51,920 --> 01:37:54,450 Ek gaan weer implementeer dat dieselfde program, 1957 01:37:54,450 --> 01:37:55,940 maar met 'n ander bou. 1958 01:37:55,940 --> 01:38:00,110 >> So laat ek gou gee myself toegang tot CS50.h sluit 1959 01:38:00,110 --> 01:38:04,150 vir die CS50 biblioteek, standaard Io.h vir printf. 1960 01:38:04,150 --> 01:38:06,510 Gee my int main leemte. 1961 01:38:06,510 --> 01:38:09,310 En dan hier, laat my gaan voort en doen dit. 1962 01:38:09,310 --> 01:38:12,010 >> Char c kry kry kar, net soos voorheen. 1963 01:38:12,010 --> 01:38:16,770 En ek gaan 'n nuwe konstruk gebruik now-- skakel, op watter karakter? 1964 01:38:16,770 --> 01:38:19,820 So skakelaar is soort van soos skakel 'n treinspoor. 1965 01:38:19,820 --> 01:38:22,070 Of, regtig, dit is 'n soort van 'n as anders as anders as, 1966 01:38:22,070 --> 01:38:23,980 maar 'n bietjie anders geskryf. 1967 01:38:23,980 --> 01:38:25,490 >> 'N Skakelaar lyk soos volg. 1968 01:38:25,490 --> 01:38:29,060 Jy het skakelaar, en dan wat karakter of nommer wat jy wil om te kyk na, 1969 01:38:29,060 --> 01:38:32,000 dan 'n paar krullerige draadjies graag in Kras, sê net doen hierdie dinge. 1970 01:38:32,000 --> 01:38:33,480 En dan moet jy verskillende gevalle. 1971 01:38:33,480 --> 01:38:34,830 >> Jy hoef nie te gebruik as en anders. 1972 01:38:34,830 --> 01:38:37,050 Jy gebruik letterlik die woord geval. 1973 01:38:37,050 --> 01:38:38,790 En jy sal so iets sê. 1974 01:38:38,790 --> 01:38:43,820 >> So in die geval van 'n klein y, of in die geval van 'n kapitale Y, 1975 01:38:43,820 --> 01:38:47,350 gaan voort en druk ja. 1976 01:38:47,350 --> 01:38:49,020 En dan breek uit die skakelaar. 1977 01:38:49,020 --> 01:38:49,580 Dis dit. 1978 01:38:49,580 --> 01:38:50,880 Ons is klaar. 1979 01:38:50,880 --> 01:38:57,270 >> Anders as, om so te praat, kleinletters N, of kapitaal N, 1980 01:38:57,270 --> 01:39:02,560 dan voort te gaan en uit te druk uit nie, en dan breek. 1981 01:39:02,560 --> 01:39:08,022 Else-- en hierdie soort is die standaard geval indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 en net vir 'n Goeie maat, alhoewel logies hierdie onderbreking is nie nodig 1983 01:39:10,980 --> 01:39:12,896 omdat ons aan die einde van die skakelaar in elk geval, 1984 01:39:12,896 --> 01:39:14,520 Ek is nou uit te breek van die skakelaar. 1985 01:39:14,520 --> 01:39:16,280 So dit lyk 'n bietjie anders. 1986 01:39:16,280 --> 01:39:18,272 >> Maar, logies, dis eintlik ekwivalent. 1987 01:39:18,272 --> 01:39:19,980 En hoekom sou jy gebruik een oor die ander? 1988 01:39:19,980 --> 01:39:23,220 Soms, net persoonlike voorkeur, Soms is die estetika, 1989 01:39:23,220 --> 01:39:25,420 As Ek loer na hierdie Nou, daar is iets 1990 01:39:25,420 --> 01:39:27,510 te sê vir die leesbaarheid van hierdie kode. 1991 01:39:27,510 --> 01:39:30,690 Ek bedoel, wat nog te sê die feit dat hierdie kode is nuut in baie van ons in die kamer. 1992 01:39:30,690 --> 01:39:33,515 >> Maar dit net soort is mooi. 1993 01:39:33,515 --> 01:39:37,760 Jy sien klein y, kapitaal Y, kleinletters N, kapitaal N standaard, 1994 01:39:37,760 --> 01:39:40,150 dit net soort van spring uit na jou op 'n manier 1995 01:39:40,150 --> 01:39:42,200 dat, waarskynlik, miskien die vorige voorbeeld 1996 01:39:42,200 --> 01:39:45,780 met die IFS, en die vertikale bars, en die ander IFS, kan nie. 1997 01:39:45,780 --> 01:39:51,600 So is dit regtig 'n kwessie van persoonlike keuse, regtig, of leesbaarheid, 1998 01:39:51,600 --> 01:39:52,360 van die kode. 1999 01:39:52,360 --> 01:39:58,230 >> Maar in terme van funksionaliteit, laat my gaan voort en maak 'n skakelaar, dot streep 2000 01:39:58,230 --> 01:40:05,830 skakelaar, en nou tik in klein y, kapitaal Y, klein N, kapitaal N, 2001 01:40:05,830 --> 01:40:09,250 Dawid weer probeer, want dit is nie 'n enkele karakter. 2002 01:40:09,250 --> 01:40:12,050 Kom ons doen x, fout, soos verwag. 2003 01:40:12,050 --> 01:40:15,640 En, logically-- en dit is iets wat Ek sou raai in general-- selfs 2004 01:40:15,640 --> 01:40:17,790 alhoewel ons net krap die oppervlak van 'n paar van hierdie eienskappe. 2005 01:40:17,790 --> 01:40:20,560 >> En dit kan nie voor die hand liggend te wees wanneer jy jouself gaan sit by die klavier, 2006 01:40:20,560 --> 01:40:21,370 hoe werk dit? 2007 01:40:21,370 --> 01:40:22,240 Wat sou dit doen? 2008 01:40:22,240 --> 01:40:25,630 Die wonderlike ding oor wat 'n skootrekenaar, of lessenaar, of toegang 2009 01:40:25,630 --> 01:40:29,290 tot 'n rekenaar met 'n samesteller, en met 'n kode redakteur soos hierdie, 2010 01:40:29,290 --> 01:40:32,990 is jy kan byna altyd beantwoord hierdie vrae vir jouself net deur te probeer. 2011 01:40:32,990 --> 01:40:36,570 >> Byvoorbeeld, as die retoriese vraag aan die hand was, 2012 01:40:36,570 --> 01:40:39,540 Wat gebeur as jy vergeet jou breek stellings? 2013 01:40:39,540 --> 01:40:41,400 Wat eintlik 'n baie algemene ding om te doen, 2014 01:40:41,400 --> 01:40:43,540 want dit lyk nie soos jy regtig nodig het. 2015 01:40:43,540 --> 01:40:46,790 Hulle het nie regtig voltooi jou gedink soos 'n hakies of 'n krullerige 2016 01:40:46,790 --> 01:40:47,714 stut doen. 2017 01:40:47,714 --> 01:40:49,630 Kom ons gaan voort en heropstel die kode en sien. 2018 01:40:49,630 --> 01:40:53,690 So maak skakelaar, dot streep skakelaar. 2019 01:40:53,690 --> 01:40:56,435 Kom ons tik in kleinletters y, die top geval, Tik. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 So ek getik y. 2022 01:41:00,700 --> 01:41:04,420 >> Die program het gesê ja, nee, fout, asof dit die verandering van sy verstand. 2023 01:41:04,420 --> 01:41:09,280 Maar dit soort was, want wat gebeur met 'n skakelaar is die eerste geval wat 2024 01:41:09,280 --> 01:41:13,899 wedstryd in wese beteken, hey rekenaar, uit te voer al die kode daaronder. 2025 01:41:13,899 --> 01:41:16,690 En as jy nie sê breek, of moenie sê breek, of nie breek nie sê: 2026 01:41:16,690 --> 01:41:19,540 die rekenaar gaan waai deur al die lyne 2027 01:41:19,540 --> 01:41:22,779 en uit te voer almal van hulle tot dit op daardie krullerige brace. 2028 01:41:22,779 --> 01:41:24,320 So het die remme is inderdaad nodig. 2029 01:41:24,320 --> 01:41:27,120 Maar 'n wegneemete hier is, wanneer twyfel, probeer iets. 2030 01:41:27,120 --> 01:41:29,510 Miskien red eers jou kode, of stoor dit in 'n ekstra lêer 2031 01:41:29,510 --> 01:41:32,930 as jy regtig bekommerd oor geknoei en om te herstel 2032 01:41:32,930 --> 01:41:34,430 die werk wat jy weet werk. 2033 01:41:34,430 --> 01:41:35,410 >> Maar probeer dinge. 2034 01:41:35,410 --> 01:41:38,074 En moenie so bang wees nie, miskien, van wat die rekenaar kan doen, 2035 01:41:38,074 --> 01:41:39,490 of dat jy dalk iets breek. 2036 01:41:39,490 --> 01:41:42,790 Jy kan altyd terugkeer 'n paar vorige weergawe. 2037 01:41:42,790 --> 01:41:45,640 >> So laat ons eindig deur te kyk by die ontwerp van die kode. 2038 01:41:45,640 --> 01:41:49,020 Ons het hierdie vermoë nou skryf voorwaardes, en skryf lissies 2039 01:41:49,020 --> 01:41:50,850 en veranderlikes, en oproep funksies. 2040 01:41:50,850 --> 01:41:54,590 So, eerlik, ons is soort van terug by waar ons was 'n week gelede met nuuts af, 2041 01:41:54,590 --> 01:42:00,120 al is dit met 'n minder dwingende tekstuele omgewing as Scratch toelaat. 2042 01:42:00,120 --> 01:42:03,990 >> Maar let op hoe vinnig ons verkry wat woordeskat, selfs al is dit 2043 01:42:03,990 --> 01:42:07,570 gaan 'n rukkie neem om te sink in, sodat ons nou hierdie woordeskat kan gebruik 2044 01:42:07,570 --> 01:42:10,320 meer interessante programme te skryf. 2045 01:42:10,320 --> 01:42:12,940 En laat ons 'n baba stap rigting wat, soos volg. 2046 01:42:12,940 --> 01:42:14,890 Laat my gaan voort en 'n nuwe lêer hier. 2047 01:42:14,890 --> 01:42:17,750 >> Ek gaan hierdie skakel prototype.c, en stel 2048 01:42:17,750 --> 01:42:20,954 vir die eerste keer, die vermoë om jou eie funksies te maak. 2049 01:42:20,954 --> 01:42:22,870 Sommige van julle mag hê gedoen met nuuts af, 2050 01:42:22,870 --> 01:42:25,430 waardeur jy kan skep jou eie persoonlike blokke in Scratch, 2051 01:42:25,430 --> 01:42:27,892 en dan sleep hulle in plek waar jy wil in C. 2052 01:42:27,892 --> 01:42:30,100 En in die meeste programme tale, kan jy presies doen 2053 01:42:30,100 --> 01:42:33,580 that-- maak jou eie funksies, as hulle nie reeds bestaan ​​nie. 2054 01:42:33,580 --> 01:42:38,660 >> So, byvoorbeeld, laat my gaan voort en sluit CS50.h, en sluit 2055 01:42:38,660 --> 01:42:43,110 standaard IO.h, int main leemte. 2056 01:42:43,110 --> 01:42:46,020 En nou het ons 'n place holder gereed om te gaan. 2057 01:42:46,020 --> 01:42:48,550 Ek hou druk dinge soos mense se name vandag. 2058 01:42:48,550 --> 01:42:51,910 En dit voel like-- sou nie lekker wees as daar 2059 01:42:51,910 --> 01:42:53,936 was 'n funksie genoem gedrukte naam? 2060 01:42:53,936 --> 01:42:55,060 Ek hoef nie te printf gebruik. 2061 01:42:55,060 --> 01:42:56,976 Ek hoef nie te onthou al formaat kodes die. 2062 01:42:56,976 --> 01:43:00,050 Hoekom nie ek, of waarom het nie iemand voor my, 2063 01:43:00,050 --> 01:43:02,980 skep 'n funksie genoem druk naam gegee dat sommige naam, 2064 01:43:02,980 --> 01:43:03,980 eenvoudig druk dit uit? 2065 01:43:03,980 --> 01:43:08,700 >> Met ander woorde, as ek sê, hey, rekenaar, gee my 'n string 2066 01:43:08,700 --> 01:43:11,870 deur die gebruiker te vra vir sulke, via CS50 se get string funksie. 2067 01:43:11,870 --> 01:43:15,090 Haai, rekenaar, sit dit string in die veranderlike in die linkerkant, 2068 01:43:15,090 --> 01:43:16,150 en noem dit is. 2069 01:43:16,150 --> 01:43:22,150 En dan, hey rekenaar, gaan voort en druk wat persoon se naam, gedoen. 2070 01:43:22,150 --> 01:43:26,240 >> Nou, sou dit lekker wees, want hierdie program, heel gepas genaamd, 2071 01:43:26,240 --> 01:43:29,170 vertel my wat dit veronderstel is om te doen by wyse van name diegene funksie se. 2072 01:43:29,170 --> 01:43:32,930 Laat my gaan en maak prototipe, Tik. 2073 01:43:32,930 --> 01:43:34,930 En, helaas, hierdie is nie van plan om te vlieg. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, lyn 7, karakter 5, fout, implisiete verklaring 2075 01:43:39,430 --> 01:43:42,960 funksie gedrukte naam is ongeldig in C99, C99 2076 01:43:42,960 --> 01:43:45,130 wat beteken dat 'n weergawe van C wat uitgekom het in 1999. 2077 01:43:45,130 --> 01:43:45,730 Dis al. 2078 01:43:45,730 --> 01:43:48,780 >> So ek weet nie wat al hierdie dinge beteken nie. 2079 01:43:48,780 --> 01:43:50,810 Maar ek doen fout erken in rooi. 2080 01:43:50,810 --> 01:43:51,770 Dit is redelik voor die hand liggend. 2081 01:43:51,770 --> 01:43:53,769 >> En dit blyk dat met die groen karakter hier, 2082 01:43:53,769 --> 01:43:57,520 die probleem is met die naam gedrukte media, oop hakie se naby hakie, kommapunt. 2083 01:43:57,520 --> 01:44:01,800 Maar implisiete verklaring van funksie wat ons gesien het kortliks vroeër. 2084 01:44:01,800 --> 01:44:04,880 Dit beteken, eenvoudig, dat klang weet nie wat ek bedoel. 2085 01:44:04,880 --> 01:44:09,000 >> Ek het 'n woordeskat woord gebruik dat dit nooit gesien of voorheen geleer. 2086 01:44:09,000 --> 01:44:11,950 En so het ek nodig het om dit te leer wat hierdie funksie beteken. 2087 01:44:11,950 --> 01:44:13,590 So ek gaan om voort te gaan en dit te doen. 2088 01:44:13,590 --> 01:44:17,970 >> Ek gaan om voort te gaan en te implementeer my eie funksie genoem Print Naam. 2089 01:44:17,970 --> 01:44:24,720 En ek gaan om te sê, soos volg, wat doen dit, printf, hello, persent 2090 01:44:24,720 --> 01:44:27,760 s, agteroorskuinsstreep N, naam, kommapunt. 2091 01:44:27,760 --> 01:44:29,250 So, wat het ek net doen? 2092 01:44:29,250 --> 01:44:31,325 >> So dit blyk, na implementeer jou eie funksie, 2093 01:44:31,325 --> 01:44:33,845 ons soort leen sommige van dieselfde struktuur as hoof 2094 01:44:33,845 --> 01:44:35,720 dat ons net gewees het as vanselfsprekend aanvaar, en ek 2095 01:44:35,720 --> 01:44:37,730 weet net kopieer en plak pretty much wat 2096 01:44:37,730 --> 01:44:39,170 Ek het al skryf in die verlede. 2097 01:44:39,170 --> 01:44:40,570 Maar hier sien die patroon. 2098 01:44:40,570 --> 01:44:43,750 Int, Hoofstraat, nietig, ons sal uitmekaar terg kort voor lank wat dit eintlik beteken. 2099 01:44:43,750 --> 01:44:46,160 >> Maar vir vandag, net let op die parallelisme. 2100 01:44:46,160 --> 01:44:48,210 Leemte, druk naam, string naam, dus is daar 2101 01:44:48,210 --> 01:44:50,310 'n pers navraag, wat ons gaan begin 2102 01:44:50,310 --> 01:44:54,067 roep 'n terugkeer tipe, die naam van die funksie, en dan die insette. 2103 01:44:54,067 --> 01:44:56,400 So, eintlik, kan ons distilleer hierdie soort van soos verlede week 2104 01:44:56,400 --> 01:44:59,030 as dit is die naam of die algoritme van die kode is ons 2105 01:44:59,030 --> 01:45:00,761 gaan die write-- algoritme onderliggende 2106 01:45:00,761 --> 01:45:02,010 die kode wat ons gaan skryf. 2107 01:45:02,010 --> 01:45:03,180 >> Dit is sy insette. 2108 01:45:03,180 --> 01:45:04,670 Dit is sy produksie. 2109 01:45:04,670 --> 01:45:08,730 Hierdie funksie, druk naam, is ontwerp om 'n string genoem naam te neem, 2110 01:45:08,730 --> 01:45:11,350 of wat ook al, as toevoer, en dan nietig. 2111 01:45:11,350 --> 01:45:13,904 Dit hoef nie iets terug te keer, soos kry string of kry int doen. 2112 01:45:13,904 --> 01:45:15,570 So dit gaan my hand iets terug. 2113 01:45:15,570 --> 01:45:17,960 Dit is net gaan om 'n hê newe-effek, om so te praat, 2114 01:45:17,960 --> 01:45:19,570 van die druk van n persoon se naam. 2115 01:45:19,570 --> 01:45:22,260 So sien, reël 7, ek kan naam gedrukte noem. 2116 01:45:22,260 --> 01:45:25,920 Line 10, kan ek definieer of implementeer naam druk. 2117 01:45:25,920 --> 01:45:28,450 Maar, helaas, dit is nie genoeg nie. 2118 01:45:28,450 --> 01:45:31,230 >> Laat my gaan voort en heropstel hierdie na te slaan. 2119 01:45:31,230 --> 01:45:33,910 Whoa, nou, ek het dit gemaak Erger nog, wil dit voorkom asof. 2120 01:45:33,910 --> 01:45:37,027 So implisiete verklaring van funksie gedrukte naam is ongeldig. 2121 01:45:37,027 --> 01:45:38,360 En, weer, daar is meer foute. 2122 01:45:38,360 --> 01:45:41,430 Maar as ek gewaarsku vroeër, selfs As jy oorweldig met te kry, 2123 01:45:41,430 --> 01:45:44,850 of 'n bietjie hartseer om so baie te sien foute, net fokus op die eerste 2124 01:45:44,850 --> 01:45:47,500 aanvanklik, want dit mag dalk net 'n waterval effek gehad het. 2125 01:45:47,500 --> 01:45:51,970 So C, of ​​klang meer spesifiek, nog nie naam gedrukte erken. 2126 01:45:51,970 --> 01:45:54,580 >> En dit is omdat klang, deur ontwerp, is 'n soort van stom. 2127 01:45:54,580 --> 01:45:56,280 Dit maak net wat jy dit vertel om te doen. 2128 01:45:56,280 --> 01:46:00,950 En dit doen net so in die orde waarin jy dit sê om te doen. 2129 01:46:00,950 --> 01:46:05,270 >> So ek het groot op die lyn vier gedefinieer, soos ons is besig met mooi dikwels. 2130 01:46:05,270 --> 01:46:07,980 Ek het naam gedrukte gedefinieer op die lyn 10. 2131 01:46:07,980 --> 01:46:11,793 Maar ek probeer om te gebruik Druk naam op die lyn sewe. 2132 01:46:11,793 --> 01:46:13,670 >> Dit is nog te vroeg, nie nog bestaan. 2133 01:46:13,670 --> 01:46:19,150 So kan ek slim wees, en wees soos, OK, so laat ons net saamspeel, 2134 01:46:19,150 --> 01:46:23,680 en beweeg naam gedrukte up hier, en weer saam te stel. 2135 01:46:23,680 --> 01:46:24,550 O my God. 2136 01:46:24,550 --> 01:46:25,260 Dit het gewerk. 2137 01:46:25,260 --> 01:46:26,670 Dit was so eenvoudig soos dit. 2138 01:46:26,670 --> 01:46:28,120 >> Maar die logika is presies dit. 2139 01:46:28,120 --> 01:46:30,870 Jy moet klang leer wat dit is deur die definisie van die funksie eerste. 2140 01:46:30,870 --> 01:46:31,920 Dan kan jy dit gebruik. 2141 01:46:31,920 --> 01:46:33,940 Maar, eerlik, dit voel soos 'n glybaan. 2142 01:46:33,940 --> 01:46:35,773 >> So elke keer as ek hardloop 'n probleem, ek is net 2143 01:46:35,773 --> 01:46:39,450 gaan na vore te bring en 'n afskrif van die kode Ek skryf, kap dit en plak dit hier. 2144 01:46:39,450 --> 01:46:41,370 En, waarlik, ons kon bedink 'n paar scenario's 2145 01:46:41,370 --> 01:46:43,286 waar 'n mens funksie mag nodig om 'n ander te roep. 2146 01:46:43,286 --> 01:46:46,030 En jy moet net nie kan sit elke funksie bo elke ander. 2147 01:46:46,030 --> 01:46:47,930 >> dit blyk so daar buite se 'n beter oplossing. 2148 01:46:47,930 --> 01:46:50,100 Ons kan laat dit wees. 2149 01:46:50,100 --> 01:46:53,677 En, eerlik, dit is oor die algemeen mooi, en gerieflik, en 'n goeie ontwerp 2150 01:46:53,677 --> 01:46:56,760 om gevolg, weer belangrikste voorop te stel,, hoof nes toe groen vlag gekliek, 2151 01:46:56,760 --> 01:46:59,027 dit is die funksie wat sal uitgevoer word by verstek. 2152 01:46:59,027 --> 01:47:01,110 So jy kan net so goed sit dit aan die bokant van die lêer 2153 01:47:01,110 --> 01:47:03,560 sodat wanneer jy of enige ander menslike kyk na die lêer 2154 01:47:03,560 --> 01:47:06,360 jy weet wat aangaan net deur die lees van hoof eerste. 2155 01:47:06,360 --> 01:47:15,360 So dit blyk, kan ons klang vertel proaktief, hey, klang, On line vier, 2156 01:47:15,360 --> 01:47:17,940 Ek belowe om te implementeer 'n funksie genoem Print 2157 01:47:17,940 --> 01:47:22,600 Naam wat 'n string genoem naam neem as invoer, en opbrengste niks, nietig. 2158 01:47:22,600 --> 01:47:24,770 En ek sal kry om te uitvoering daarvan later. 2159 01:47:24,770 --> 01:47:25,680 >> Hier kom Main. 2160 01:47:25,680 --> 01:47:29,130 Main nou op die lyn 9 kan gebruik Print Naam, want klang 2161 01:47:29,130 --> 01:47:32,600 vertrou dat, uiteindelik, Dit sal die definisie teëkom 2162 01:47:32,600 --> 01:47:34,880 van die implementering van Print Naam. 2163 01:47:34,880 --> 01:47:37,390 So na my lêer spaar, laat my gaan voort en maak prototipe, 2164 01:47:37,390 --> 01:47:38,498 lyk goed hierdie tyd. 2165 01:47:38,498 --> 01:47:43,470 Dot streep, prototipe, laat my gaan voort en tik in 'n naam. 2166 01:47:43,470 --> 01:47:48,440 David, hallo Dawid Zamila, hello Zamila, en, inderdaad, nou is dit werk. 2167 01:47:48,440 --> 01:47:52,200 >> So het die bestanddeel hier is dat ons het het 'n persoonlike funksie, soos 'n persoonlike 2168 01:47:52,200 --> 01:47:54,219 Scratch blok ons ​​noem dit. 2169 01:47:54,219 --> 01:47:57,010 Maar in teenstelling met Scratch waar jy kan net skep dit en begin dit te gebruik, 2170 01:47:57,010 --> 01:47:59,330 nou het ons 'n wees bietjie meer pedanties, 2171 01:47:59,330 --> 01:48:03,410 en eintlik lei klang te gebruik, of om dit te verwag. 2172 01:48:03,410 --> 01:48:09,140 Nou, as 'n eenkant, waarom al hierdie tyd het ons net blindelings nie op geloof insluitend 2173 01:48:09,140 --> 01:48:12,170 CS50.h, en met standaard IO.h? 2174 01:48:12,170 --> 01:48:15,190 >> Wel, dit blyk, onder 'n paar ander dinge, 2175 01:48:15,190 --> 01:48:18,550 al is dit in die kol h lêers, wat gebeur met lêers. 2176 01:48:18,550 --> 01:48:20,460 Hulle is header lêers, om so te praat. 2177 01:48:20,460 --> 01:48:23,270 Hulle is nog steeds geskryf in C. Maar hulle is 'n ander tipe lêer. 2178 01:48:23,270 --> 01:48:28,690 >> Vir nou, kan jy pretty much aanvaar dat alles wat binne-in CS50.h 2179 01:48:28,690 --> 01:48:33,360 is 'n paar one-liners soos hierdie, nie vir funksies genoem Print Naam, 2180 01:48:33,360 --> 01:48:36,840 maar vir Kry String, Kry Vlot, en 'n paar ander. 2181 01:48:36,840 --> 01:48:41,510 En daar is soortgelyke prototipes, een liners, binnekant van standaard IO.h 2182 01:48:41,510 --> 01:48:46,241 vir printf, wat nou in my eie Print Naam funksie. 2183 01:48:46,241 --> 01:48:49,490 So met ander woorde, die hele tyd wat ons het pas blindelings kopieer en plak 2184 01:48:49,490 --> 01:48:51,780 sluit dit sluit dat, wat gaan aan? 2185 01:48:51,780 --> 01:48:55,310 Dit is net soort van leidrade om klang oor wat funksies 2186 01:48:55,310 --> 01:49:00,170 is inderdaad geïmplementeer, net elders in verskillende lêers 2187 01:49:00,170 --> 01:49:02,440 Elders op die stelsel. 2188 01:49:02,440 --> 01:49:05,160 >> So het ons naam gedrukte geïmplementeer. 2189 01:49:05,160 --> 01:49:07,910 Dit het wel hierdie newe-effek van druk iets op die skerm. 2190 01:49:07,910 --> 01:49:10,170 Maar dit beteken nie eintlik hand my iets terug. 2191 01:49:10,170 --> 01:49:12,200 Hoe kan ons te werk gaan implementering van 'n program wat 2192 01:49:12,200 --> 01:49:14,510 beteken oorhandig my iets terug? 2193 01:49:14,510 --> 01:49:15,580 >> Wel, laat ons probeer om hierdie. 2194 01:49:15,580 --> 01:49:21,360 Laat my gaan voort en te implementeer 'n lêer met die naam return.c 2195 01:49:21,360 --> 01:49:24,530 sodat ons kan demonstreer hoe iets soos Kry String, of Kry Int, 2196 01:49:24,530 --> 01:49:27,340 is eintlik terugkeer iets terug na die gebruiker. 2197 01:49:27,340 --> 01:49:29,840 Kom ons gaan voort en definieer int main leemte. 2198 01:49:29,840 --> 01:49:33,230 >> En, weer, in die toekoms, sal ons verduidelik wat dit int en daardie leemte 2199 01:49:33,230 --> 01:49:34,090 is eintlik. 2200 01:49:34,090 --> 01:49:35,840 Maar vir vandag, sal ons neem dit as vanselfsprekend. 2201 01:49:35,840 --> 01:49:39,970 Ek gaan voort en printf te gaan, vir 'n goeie gebruikers ervaring, x is. 2202 01:49:39,970 --> 01:49:44,360 En dan gaan ek om te wag vir die gebruiker om my te gee x met get Int. 2203 01:49:44,360 --> 01:49:48,459 >> En dan gaan ek voort te gaan en druk x om die vierkante. 2204 01:49:48,459 --> 01:49:50,500 So wanneer jy net 'n sleutelbord, mense wat algemeen 2205 01:49:50,500 --> 01:49:52,600 gebruik die klein wortel simbool op die sleutelbord 2206 01:49:52,600 --> 01:49:55,330 om verteenwoordig die krag van, of die eksponent van. 2207 01:49:55,330 --> 01:49:58,960 So x kwadraat is teenwoordig i. 2208 01:49:58,960 --> 01:50:00,660 >> En nou gaan ek dit doen. 2209 01:50:00,660 --> 01:50:03,940 Ek kon net do-- wat x kwadraat? x kwadraat is x keer x. 2210 01:50:03,940 --> 01:50:06,690 >> En ons het dit 'n paar tyd gelede reeds vandag. 2211 01:50:06,690 --> 01:50:08,730 Dit voel nie soos alles wat veel vordering. 2212 01:50:08,730 --> 01:50:09,570 Jy weet wat? 2213 01:50:09,570 --> 01:50:13,100 Kom ons benut 'n paar van daardie idee van verlede tyd van abstraksie. 2214 01:50:13,100 --> 01:50:16,080 >> Sou dit nie lekker wees as daar is 'n funksie genoem 2215 01:50:16,080 --> 01:50:18,460 vierkante wat presies dit doen? 2216 01:50:18,460 --> 01:50:20,640 Dit nog, aan die einde van die dag, doen dieselfde wiskunde. 2217 01:50:20,640 --> 01:50:22,410 Maar laat ons abstrakte weg van die idee van die neem 2218 01:50:22,410 --> 01:50:25,280 een getal vermenigvuldig met 'n ander, en net te gee dit 'n naam, 2219 01:50:25,280 --> 01:50:27,360 soos vierkante hierdie waarde. 2220 01:50:27,360 --> 01:50:29,560 >> En, met ander woorde, in C, laat ons 'n funksie 2221 01:50:29,560 --> 01:50:32,660 genoem vierkante wat presies dit doen. 2222 01:50:32,660 --> 01:50:34,600 Dit gaan vierkante genoem te word nie. 2223 01:50:34,600 --> 01:50:35,790 Dit gaan 'n int neem. 2224 01:50:35,790 --> 01:50:37,820 En ons sal net sal noem dit n, by verstek. 2225 01:50:37,820 --> 01:50:39,403 >> Maar ons kan dit noem enigiets wat ons wil. 2226 01:50:39,403 --> 01:50:42,900 En almal wat dit gaan doen, letterlik, is terug 2227 01:50:42,900 --> 01:50:45,810 die gevolg van n keer n. 2228 01:50:45,810 --> 01:50:48,980 Maar omdat dit terugkeer iets wat 2229 01:50:48,980 --> 01:50:53,690 is die sleutelwoord in pers ons het nog nooit tevore gesien het nie, ek, op die lyn 11, 2230 01:50:53,690 --> 01:50:55,410 kan nie net sê leemte hierdie tyd. 2231 01:50:55,410 --> 01:51:01,320 >> Leemte in die voorbeeld wat ons nou net gesien het eerder van naam druk, net beteken, 2232 01:51:01,320 --> 01:51:02,190 doen iets. 2233 01:51:02,190 --> 01:51:04,170 Maar moenie die hand my iets terug. 2234 01:51:04,170 --> 01:51:06,790 In hierdie geval, wil ek om terug te keer n keer n, 2235 01:51:06,790 --> 01:51:08,460 of wat dit ook al is, dat die getal. 2236 01:51:08,460 --> 01:51:12,460 >> So kan ek nie sê, hey, rekenaar, Ek terugkeer niks, nietig. 2237 01:51:12,460 --> 01:51:16,166 Dit gaan om terug te keer, deur die natuur, 'n int. 2238 01:51:16,166 --> 01:51:17,790 En so dit is alles wat hier aangaan. 2239 01:51:17,790 --> 01:51:20,070 >> Die insette te kwadreer gaan 'n int wees. 2240 01:51:20,070 --> 01:51:24,760 En sodat ons dit kan gebruik, moet dit 'n naam, N. Dit gaan uitvoer 2241 01:51:24,760 --> 01:51:26,240 'n int wat nie 'n naam nie nodig. 2242 01:51:26,240 --> 01:51:29,590 Ons kan dit laat belangrikste, of wie ook al is die gebruik van my om hierdie waarde as ons onthou 2243 01:51:29,590 --> 01:51:31,120 wil met sy eie veranderlike. 2244 01:51:31,120 --> 01:51:33,230 >> En, weer, die enigste nuwe navraag hier is terug. 2245 01:51:33,230 --> 01:51:34,480 En ek is net besig met 'n wiskunde. 2246 01:51:34,480 --> 01:51:41,825 As ek wou eintlik onnodig te wees, Ek kan sê int produk kry n keer n. 2247 01:51:41,825 --> 01:51:44,170 >> En dan kan ek sê: Keer terug produk. 2248 01:51:44,170 --> 01:51:47,360 Maar, weer, om my punt vroeër van dit net nie goed ontwerp te 2249 01:51:47,360 --> 01:51:50,060 soos, hoekom stel 'n naam, 'n simbool, soos die produk, 2250 01:51:50,060 --> 01:51:51,570 net om onmiddellik terug te keer nie? 2251 01:51:51,570 --> 01:51:53,670 Dit is 'n bietjie skoner, 'n bietjie stywer, sodat 2252 01:51:53,670 --> 01:51:59,380 te praat, net om terug n keer sê N, ontslae te raak van hierdie lyn geheel en al. 2253 01:51:59,380 --> 01:52:02,860 >> En dit is net minder-kode te lees, minder geleentheid vir foute. 2254 01:52:02,860 --> 01:52:05,180 En laat ons kyk of hierdie eintlik nou werk. 2255 01:52:05,180 --> 01:52:09,380 Nou, ek gaan om te gaan voor en terugkeer maak. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, implisiete verklaring van funksie. 2257 01:52:11,460 --> 01:52:14,080 Ek hierdie fout gemaak voor, nie 'n groot deal. 2258 01:52:14,080 --> 01:52:18,950 Laat my net te tik, of na vore te bring en kopieer, presies dieselfde funksie prototipe, 2259 01:52:18,950 --> 01:52:21,342 of handtekening, van die funksie hier. 2260 01:52:21,342 --> 01:52:22,800 Of ek kon die hele funksie te beweeg. 2261 01:52:22,800 --> 01:52:23,841 >> Maar dit is 'n bietjie lui. 2262 01:52:23,841 --> 01:52:24,870 So sal ons dit nie doen nie. 2263 01:52:24,870 --> 01:52:27,960 Nou, laat ek terugkeer maak weer, dot streep terugkeer. 2264 01:52:27,960 --> 01:52:32,790 >> x is 2. x kwadraat is 4. x is 3. x kwadraat is 9. 2265 01:52:32,790 --> 01:52:35,300 En die funksie lyk nou om saam te werk. 2266 01:52:35,300 --> 01:52:36,550 So, wat is die verskil hier? 2267 01:52:36,550 --> 01:52:42,520 Ek het 'n funksie wat vierkante genoem word, in hierdie geval, wat ek in 'n inset. 2268 01:52:42,520 --> 01:52:43,830 En ek terug 'n uitset. 2269 01:52:43,830 --> 01:52:46,210 En tog, wat voorheen as Ek maak die ander voorbeeld 2270 01:52:46,210 --> 01:52:51,640 van vroeër, wat was genoem prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Ek het druk naam, wat leemte teruggekeer, om so te praat, 2272 01:52:54,770 --> 01:52:58,730 Of dit teruggekeer niks, en eenvoudig 'n newe-effek. 2273 01:52:58,730 --> 01:53:00,230 >> So, wat gaan hier aan? 2274 01:53:00,230 --> 01:53:03,520 Wel, kyk na die funksie kry string vir net 'n oomblik. 2275 01:53:03,520 --> 01:53:06,570 Ons het al met behulp van die funksie kry string in die volgende manier. 2276 01:53:06,570 --> 01:53:10,464 >> Ons het 'n funksie te kry string, soos insluit CS50.h, 2277 01:53:10,464 --> 01:53:16,624 sluit standaard IO.h, int, hoof, nietig. 2278 01:53:16,624 --> 01:53:18,790 En dan elke keer as ek het genoem get string tot dusver, 2279 01:53:18,790 --> 01:53:23,260 Ek het gesê iets soos, string s kry kry string, want get string-- 2280 01:53:23,260 --> 01:53:27,880 Kom ons noem dit get.c-- get string self terug 'n string wat ek kan dan 2281 01:53:27,880 --> 01:53:32,050 gebruik, en sê: hello, komma, persent s, agteroorskuinsstreep N, s. 2282 01:53:32,050 --> 01:53:35,660 >> Dit is dus in dieselfde voorbeeld, werklik, dat ons moes vroeër. 2283 01:53:35,660 --> 01:53:37,920 So kry string 'n waarde terug. 2284 01:53:37,920 --> 01:53:41,260 Maar 'n oomblik gelede, druk string nie 'n waarde terugkeer. 2285 01:53:41,260 --> 01:53:42,721 Dit het net 'n newe-effek. 2286 01:53:42,721 --> 01:53:44,220 So dit is 'n fundamentele verskil. 2287 01:53:44,220 --> 01:53:46,710 Ons het verskillende gesien tipes funksies nou, 2288 01:53:46,710 --> 01:53:49,490 waarvan sommige teruggekeer waardes, waarvan sommige nie. 2289 01:53:49,490 --> 01:53:51,890 So miskien is dit string, of int, of float. 2290 01:53:51,890 --> 01:53:53,480 Of miskien is dit net leemte. 2291 01:53:53,480 --> 01:53:55,710 >> En die verskil is dat hierdie funksies wat 2292 01:53:55,710 --> 01:53:59,940 kry data en stuur 'n waarde is eintlik bring iets terug na die tafel, 2293 01:53:59,940 --> 01:54:01,110 By wyse van spreke. 2294 01:54:01,110 --> 01:54:03,710 So laat ons gaan voort en kyk na 'n laaste stel 2295 01:54:03,710 --> 01:54:09,129 voorbeelde wat 'n gevoel gee, nou, van hoe ons kan inderdaad abstrakte beter, 2296 01:54:09,129 --> 01:54:11,670 en beter, en beter, of meer, en nog baie meer, en meer, ten einde 2297 01:54:11,670 --> 01:54:13,810 om te skryf, uiteindelik, 'n beter kode. 2298 01:54:13,810 --> 01:54:16,860 Kom ons gaan voort, en in die gees van nuuts af, doen die volgende. 2299 01:54:16,860 --> 01:54:21,700 >> Laat my gaan voort en sluit CS50.h en standaard IO.h. 2300 01:54:21,700 --> 01:54:24,010 Laat my gaan voort en gee myself 'n int, hoof, nietig. 2301 01:54:24,010 --> 01:54:27,380 En laat my voort te gaan, noem dit cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> En laat ek gaan voort en net soos nuuts af, druk hoes / N. 2303 01:54:35,510 --> 01:54:37,170 En ek wil dit drie keer te doen. 2304 01:54:37,170 --> 01:54:39,670 Dus is ek natuurlik net gaan kopieer en plak drie keer. 2305 01:54:39,670 --> 01:54:46,440 Ek gaan nou om hoes dot streep hoes. 2306 01:54:46,440 --> 01:54:50,120 Kom ons gee myself 'n bietjie meer ruimte hier, Gee, hoes, hoes, hoes. 2307 01:54:50,120 --> 01:54:53,970 >> Daar is, natuurlik, reeds 'n geleentheid vir verbetering. 2308 01:54:53,970 --> 01:54:55,679 Ek het gekopieer en geplak 'n paar keer vandag. 2309 01:54:55,679 --> 01:54:58,261 Maar dit was net so ek het nie moet soveel karakters tik. 2310 01:54:58,261 --> 01:55:00,250 Ek het nog verander wat die lyne van kode is. 2311 01:55:00,250 --> 01:55:04,240 >> Hierdie drie lyne identies, wat voel lui en wel, 2312 01:55:04,240 --> 01:55:07,110 en is waarskynlik nie die regte benadering. 2313 01:55:07,110 --> 01:55:11,029 So met dit wat bestanddeel kon ons verbeter die kode? 2314 01:55:11,029 --> 01:55:12,570 Ons hoef nie te kopieer en plak kode. 2315 01:55:12,570 --> 01:55:15,070 >> En, inderdaad, enige tyd wat jy voel jouself kopieer en plak, 2316 01:55:15,070 --> 01:55:17,700 en nie eens die verandering kode, kans is daar 'n beter manier. 2317 01:55:17,700 --> 01:55:19,470 En, inderdaad, daar is. 2318 01:55:19,470 --> 01:55:22,510 Laat my gaan voort en doen 'n for-lus, selfs al is die sintaksis dalk nie 2319 01:55:22,510 --> 01:55:24,570 kom nog natuurlik. 2320 01:55:24,570 --> 01:55:29,494 >> Doen dit drie keer, net deur dit te doen die following-- 2321 01:55:29,494 --> 01:55:31,160 en ek toevallig weet uit die praktyk. 2322 01:55:31,160 --> 01:55:32,810 Maar ons het 'n aantal voorbeelde nou. 2323 01:55:32,810 --> 01:55:34,950 En jy sal sien aanlyn meer verwysings steeds. 2324 01:55:34,950 --> 01:55:37,790 >> Dit is die sintaksis op lyn 6, wat baie soos Scratch wat herhaal 2325 01:55:37,790 --> 01:55:40,090 blok, herhaal die volgende drie keer. 2326 01:55:40,090 --> 01:55:41,340 Dit is 'n bietjie magiese vir nou. 2327 01:55:41,340 --> 01:55:43,050 Maar dit sal meer kry, en meer bekend. 2328 01:55:43,050 --> 01:55:45,050 >> En dit gaan herhaal lyn agt drie keer, 2329 01:55:45,050 --> 01:55:52,390 sodat as ek weer saam te stel make hoes, dot streep hoes, hoes, hoes, hoes. 2330 01:55:52,390 --> 01:55:54,030 Dit werk nog steeds op dieselfde manier. 2331 01:55:54,030 --> 01:55:55,550 So dit is alles goed en wel. 2332 01:55:55,550 --> 01:55:58,200 Maar dit is nie baie onttrek. 2333 01:55:58,200 --> 01:55:59,371 >> Dit is perfek korrek. 2334 01:55:59,371 --> 01:56:01,370 Maar dit voel asof daar 'n geleentheid kan wees, 2335 01:56:01,370 --> 01:56:03,750 soos in die wêreld van Kras, soort begin 2336 01:56:03,750 --> 01:56:07,530 'n paar semantiek hier by te voeg, sodat Ek het nie net 'n paar vir lus, 2337 01:56:07,530 --> 01:56:09,867 en 'n funksie wat sê hoes, of nie hoes. 2338 01:56:09,867 --> 01:56:10,450 Jy weet wat? 2339 01:56:10,450 --> 01:56:12,620 Laat ek probeer om 'n wees bietjie koeler as dit, 2340 01:56:12,620 --> 01:56:16,090 en eintlik skryf 'n funksie wat het 'n paar newe-effekte, noem dit hoes. 2341 01:56:16,090 --> 01:56:20,830 >> En dit neem geen insette en terugkeer geen waarde as uitset. 2342 01:56:20,830 --> 01:56:22,680 Maar jy weet wat dit doen? 2343 01:56:22,680 --> 01:56:29,370 Dit maak this-- printf, kwotasie unquote, hoes. 2344 01:56:29,370 --> 01:56:32,380 >> En nou hier, ek gaan om voort te gaan en vir Int gaan, 2345 01:56:32,380 --> 01:56:36,070 Ek kry nul, ek minder as 3, i plus plus. 2346 01:56:36,070 --> 01:56:39,770 Ek gaan printf nie doen nie, wat waarskynlik 'n lae implementering vlak 2347 01:56:39,770 --> 01:56:40,270 detail. 2348 01:56:40,270 --> 01:56:41,353 Ek gee nie om hoe om te hoes. 2349 01:56:41,353 --> 01:56:43,240 Ek wil net die hoes funksie gebruik. 2350 01:56:43,240 --> 01:56:44,840 En ek is net gaan hoes noem. 2351 01:56:44,840 --> 01:56:46,204 >> Nou, let op die digotomie. 2352 01:56:46,204 --> 01:56:49,370 Wanneer jy 'n funksie te roep, as jy dit nie doen nie wil gee insette, heeltemal fyn. 2353 01:56:49,370 --> 01:56:51,780 Doen oop hakie, naby hakie, en jy klaar is. 2354 01:56:51,780 --> 01:56:56,271 >> Wanneer jy 'n funksie definieer, of verklaar prototipe n funksie se 2355 01:56:56,271 --> 01:56:58,770 As jy vooraf weet dit is nie van plan om enige argumente te neem, 2356 01:56:58,770 --> 01:57:01,170 sê leemte in dié tussen hakies daar. 2357 01:57:01,170 --> 01:57:05,660 En dit maak seker dat jy sal nie per ongeluk misbruik dit. 2358 01:57:05,660 --> 01:57:07,020 Laat my gaan voort en maak hoes. 2359 01:57:07,020 --> 01:57:08,540 En, natuurlik, ek het 'n fout gemaak. 2360 01:57:08,540 --> 01:57:10,410 >> Dammit, daar is dat implisiete verklaring. 2361 01:57:10,410 --> 01:57:11,325 Maar dit is goed. 2362 01:57:11,325 --> 01:57:12,590 Dit is 'n maklike oplossing. 2363 01:57:12,590 --> 01:57:18,240 Ek hoef net die prototipe hoër op in my lêer as ek eintlik wat dit gebruik. 2364 01:57:18,240 --> 01:57:20,070 >> So nou laat ek maak hoes weer mooi. 2365 01:57:20,070 --> 01:57:20,790 Nou, dit werk. 2366 01:57:20,790 --> 01:57:22,930 Maak hoes, hoes, hoes, hoes. 2367 01:57:22,930 --> 01:57:25,930 So jy dink dat ons regtig net meer as ingenieurswese hierdie probleem. 2368 01:57:25,930 --> 01:57:26,763 En, inderdaad, ons is. 2369 01:57:26,763 --> 01:57:28,870 Dit is nie 'n goeie kandidaat van 'n program 2370 01:57:28,870 --> 01:57:31,930 op die oomblik vir refactoring, en doen wat 2371 01:57:31,930 --> 01:57:35,645 genoem hiërargiese ontbinding, waar jy 'n paar kode te neem, en dan 2372 01:57:35,645 --> 01:57:38,790 jy soort van faktor dinge uit, sodat meer semantiek skryf vir hulle 2373 01:57:38,790 --> 01:57:40,930 en onthou dit uiteindelik langer termyn. 2374 01:57:40,930 --> 01:57:43,490 Maar dit is 'n boublok in die rigting meer gesofistikeerde programme 2375 01:57:43,490 --> 01:57:45,600 dat ons sal begin skryf kort voor lank dat 2376 01:57:45,600 --> 01:57:50,090 laat ons toe om die woordeskat te hê waarmee 'n beter kode te skryf. 2377 01:57:50,090 --> 01:57:52,920 En, inderdaad, kom ons kyk of ons kan nie verder te veralgemeen. 2378 01:57:52,920 --> 01:57:57,984 >> Dit lyk 'n bietjie lam dat ek, hoof, hoef te bekommer oor die darn vir lus, 2379 01:57:57,984 --> 01:57:59,400 en roep hoes weer en weer. 2380 01:57:59,400 --> 01:58:03,050 Hoekom kan ek nie sê nie net hoes, asseblief hoes drie maal geslaan? 2381 01:58:03,050 --> 01:58:08,170 Met ander woorde, waarom kan ek net insette te hoes en dit te doen? 2382 01:58:08,170 --> 01:58:11,270 >> Hoekom kan ek nie sê net, in hoof hoes drie keer. 2383 01:58:11,270 --> 01:58:13,150 En nou, hierdie is 'n soort van magiese. 2384 01:58:13,150 --> 01:58:14,540 Dit is hier baie iteratiewe. 2385 01:58:14,540 --> 01:58:15,940 En dit is inderdaad 'n baba stap. 2386 01:58:15,940 --> 01:58:19,250 >> Maar net die vermoë om op te sê lyn agt, hoes drie keer, 2387 01:58:19,250 --> 01:58:20,730 dit is net soveel meer leesbare. 2388 01:58:20,730 --> 01:58:24,210 En, plus, ek hoef nie te weet of om hoe hoes geïmplementeer word. 2389 01:58:24,210 --> 01:58:26,460 En, inderdaad, later in die termyn en vir finale projekte, 2390 01:58:26,460 --> 01:58:29,150 As jy 'n projek met pak 'n klasmaat of twee klasmaats, 2391 01:58:29,150 --> 01:58:32,370 jy besef dat jy gaan moet, of wil, verdeel die werk. 2392 01:58:32,370 --> 01:58:34,650 >> En jy gaan wil om te besluit vooruit, wie gaan om te doen wat, 2393 01:58:34,650 --> 01:58:35,483 en in watter stukke? 2394 01:58:35,483 --> 01:58:37,520 En sou dit nie lekker wees As jy, byvoorbeeld, 2395 01:58:37,520 --> 01:58:40,100 neem beheer van die skryf hoof, gedoen. 2396 01:58:40,100 --> 01:58:43,470 En jou kamermaat, of jou vennoot meer algemeen, 2397 01:58:43,470 --> 01:58:45,230 sorg vir die implementering van hoes. 2398 01:58:45,230 --> 01:58:49,540 >> En hierdie afdeling, hierdie mure van onttrekking, 2399 01:58:49,540 --> 01:58:52,310 of lae onttrekking as jy sal, is super kragtige, 2400 01:58:52,310 --> 01:58:55,480 want veral vir groter, meer komplekse programme en stelsels, 2401 01:58:55,480 --> 01:59:00,070 Dit kan verskeie mense op te bou dinge saam, en uiteindelik 2402 01:59:00,070 --> 01:59:02,680 steek hulle werk saam op hierdie manier. 2403 01:59:02,680 --> 01:59:05,332 Maar, natuurlik, ons moet nou los hoes. 2404 01:59:05,332 --> 01:59:07,290 Ons moet hoes vertel dat, hey, jy weet wat? 2405 01:59:07,290 --> 01:59:11,230 Jy gaan moet 'n te neem input-- so nie nietig nie, maar int en nou. 2406 01:59:11,230 --> 01:59:15,170 Kom ons gaan voort en in hoes die int. Ek kry nul. 2407 01:59:15,170 --> 01:59:16,890 >> Ek is minder as hoeveel keer. 2408 01:59:16,890 --> 01:59:18,550 Ek het drie voor. 2409 01:59:18,550 --> 01:59:20,420 Maar dit is nie wat ek wil hê. 2410 01:59:20,420 --> 01:59:25,520 Ek wil hoes te veralgemeen na ondersteun 'n aantal iterasies. 2411 01:59:25,520 --> 01:59:28,800 >> So, inderdaad, dit is N wat ek wil, ongeag die gebruiker sê vir my. 2412 01:59:28,800 --> 01:59:31,620 Nou kan ek voort te gaan en sê Druk hoes. 2413 01:59:31,620 --> 01:59:34,750 En maak nie saak hoeveel die gebruiker gaan in, 2414 01:59:34,750 --> 01:59:36,890 Ek sal Itereer wat baie keer. 2415 01:59:36,890 --> 01:59:39,160 >> So aan die einde van die dag, program is identies. 2416 01:59:39,160 --> 01:59:42,820 Maar let op al hierdie dinge kan selfs in 'n ander lêer. 2417 01:59:42,820 --> 01:59:45,620 Inderdaad, ek weet nie op die oomblik hoe printf geïmplementeer word. 2418 01:59:45,620 --> 01:59:47,980 >> Ek weet nie op die oomblik hoe kry string, of kry int, of kry float 2419 01:59:47,980 --> 01:59:48,646 geïmplementeer word. 2420 01:59:48,646 --> 01:59:50,930 En ek wil nie hulle sien op my skerm. 2421 01:59:50,930 --> 01:59:55,320 Soos dit is, ek begin om te fokus op my program, nie daardie funksies. 2422 01:59:55,320 --> 01:59:59,070 >> En so, wel, so gou as wat jy begin factoring kode soos hierdie uit, 2423 01:59:59,070 --> 02:00:01,397 kon ons beweeg selfs hoes om 'n aparte lêer? 2424 02:00:01,397 --> 02:00:02,730 Iemand anders kan dit te implementeer. 2425 02:00:02,730 --> 02:00:06,810 En jy en jou program word die baie mooi, en baie leesbaar, 2426 02:00:06,810 --> 02:00:10,830 waarskynlik, regtig vier line program net daar. 2427 02:00:10,830 --> 02:00:13,510 >> So laat ons nou gaan voort en maak 'n mens meer verandering. 2428 02:00:13,510 --> 02:00:16,180 Let daarop dat my prototipe moet verander tot bo. 2429 02:00:16,180 --> 02:00:18,390 So laat ek dit regmaak so Ek kry nie geskree. 2430 02:00:18,390 --> 02:00:22,580 >> Maak hoes, laat my hoes keer hardloop meer, nog doen dieselfde ding. 2431 02:00:22,580 --> 02:00:26,010 Maar nou, sien ons 'n bestanddeel vir 'n finale weergawe. 2432 02:00:26,010 --> 02:00:26,940 Jy weet wat? 2433 02:00:26,940 --> 02:00:29,040 Ek wil nie net hoes, noodwendig nie. 2434 02:00:29,040 --> 02:00:30,802 Ek wil iets meer algemeen. 2435 02:00:30,802 --> 02:00:31,510 So jy weet wat? 2436 02:00:31,510 --> 02:00:32,450 Ek wil om dit te doen. 2437 02:00:32,450 --> 02:00:37,140 Ek wil hê, net soos Scratch doen, 'n sê blok, maar nie net 2438 02:00:37,140 --> 02:00:38,680 sê iets sommige aantal kere. 2439 02:00:38,680 --> 02:00:41,510 Ek wil hê dit moet 'n baie spesifieke string sê. 2440 02:00:41,510 --> 02:00:43,850 En daarom doen ek nie, dit wil sê net hoes. 2441 02:00:43,850 --> 02:00:47,660 Ek wil hê dit moet sê wat string is geslaag in. 2442 02:00:47,660 --> 02:00:49,960 >> So sien, het ek veralgemeen dit so dat dit nou 2443 02:00:49,960 --> 02:00:53,110 sê voel soos 'n goeie naam vir hierdie, soos nuuts af, 2444 02:00:53,110 --> 02:00:55,530 neem twee argumente, in teenstelling met krap. 2445 02:00:55,530 --> 02:00:56,570 Een daarvan is 'n string. 2446 02:00:56,570 --> 02:00:57,300 Een daarvan is 'n int. 2447 02:00:57,300 --> 02:00:58,130 >> En ek kon hulle skakel. 2448 02:00:58,130 --> 02:01:00,713 Ek het net soort van soos die idee van sê die string eerste, en dan 2449 02:01:00,713 --> 02:01:01,940 Hoeveel keer later. 2450 02:01:01,940 --> 02:01:03,970 Leemte beteken dit nog steeds niks terug. 2451 02:01:03,970 --> 02:01:06,428 Dit is net 'n visuele kant effekte, soos met [? Jordan,?] 2452 02:01:06,428 --> 02:01:08,240 'n verbale newe-effek van skree. 2453 02:01:08,240 --> 02:01:12,630 Dit beteken nog iets N tye, 0 tot, maar nie gelyk aan n. 2454 02:01:12,630 --> 02:01:14,540 Dit beteken N totale keer. 2455 02:01:14,540 --> 02:01:16,540 En dan net druk wat dit ook al string is. 2456 02:01:16,540 --> 02:01:19,060 So ek het regtig veralgemeen hierdie reël van die kode. 2457 02:01:19,060 --> 02:01:22,460 So nou, hoe kan ek implementeer die hoes funksie? 2458 02:01:22,460 --> 02:01:25,520 >> Ek kan leemte hoes doen. 2459 02:01:25,520 --> 02:01:28,501 En ek kan nog steeds in hoe baie keer jy wil hoes. 2460 02:01:28,501 --> 02:01:29,250 Maar jy weet wat? 2461 02:01:29,250 --> 02:01:31,240 Ek kan nou liewer sê. 2462 02:01:31,240 --> 02:01:36,540 >> Ek kan noem sê met die woord hoes, verby in n. 2463 02:01:36,540 --> 02:01:40,410 En as ek wil ook implementeer, net vir die pret, 'n nies funksie, 2464 02:01:40,410 --> 02:01:42,290 Ek kan 'n paar aantal kere nies. 2465 02:01:42,290 --> 02:01:47,300 En ek kan hou hergebruik N, omdat sien dat m in hierdie konteks of omvang 2466 02:01:47,300 --> 02:01:49,470 net bestaan ​​binne hierdie funksie. 2467 02:01:49,470 --> 02:01:52,767 >> En N in hierdie konteks net bestaan ​​binne hierdie funksie hier. 2468 02:01:52,767 --> 02:01:54,600 So sal ons terug te kom hierdie kwessies van omvang. 2469 02:01:54,600 --> 02:02:01,160 En hier, ek is net gaan om te sê, achoo, en dan n keer, kommapunt. 2470 02:02:01,160 --> 02:02:04,340 >> En nou, ek het net nodig om te leen hierdie funksie handtekeninge hier. 2471 02:02:04,340 --> 02:02:06,290 So hoes is korrek. 2472 02:02:06,290 --> 02:02:10,090 Leemte nies is nou korrek. 2473 02:02:10,090 --> 02:02:12,390 >> En ek moet nog net sê. 2474 02:02:12,390 --> 02:02:18,990 So ek gaan om te sê, sê string s, int N, kommapunt. 2475 02:02:18,990 --> 02:02:22,010 So ek het te veel ontwerp die klink uit hierdie program. 2476 02:02:22,010 --> 02:02:23,760 >> En dit doen nie noodwendig dit is 2477 02:02:23,760 --> 02:02:26,343 wat jy moet doen wanneer skryf selfs die eenvoudigste van programme. 2478 02:02:26,343 --> 02:02:29,280 Neem iets wat natuurlik eintlik eenvoudig, baie kort, 2479 02:02:29,280 --> 02:02:31,800 en re-implementeer die gebruik van te veel kode. 2480 02:02:31,800 --> 02:02:34,560 Maar jy eintlik sien, en in tyd terugkyk op hierdie voorbeelde, 2481 02:02:34,560 --> 02:02:38,610 en besef, o, dit is die stappe Ons het om werklik te veralgemeen, 2482 02:02:38,610 --> 02:02:40,797 iets faktor uit, totdat aan die einde van die dag 2483 02:02:40,797 --> 02:02:42,380 my kode is eintlik redelik redelike. 2484 02:02:42,380 --> 02:02:45,960 Want as ek wil om te hoes drie keer nies dan drie keer, 2485 02:02:45,960 --> 02:02:50,420 Ek is net gaan om dit te tik, program maak hoes, en hardloop hoes. 2486 02:02:50,420 --> 02:02:53,620 En ek het drie hoes en drie nies. 2487 02:02:53,620 --> 02:02:55,990 >> En so dit is 'n basiese paradigma, as jy wil, 2488 02:02:55,990 --> 02:03:00,110 vir hoe ons kan gaan eintlik die uitvoering van 'n program. 2489 02:03:00,110 --> 02:03:03,220 Maar laat ons net sien nou hoe dit is Ons het al almal hierdie keer doen, 2490 02:03:03,220 --> 02:03:06,940 en wat 'n paar van die finale stukke agter hierdie eenvoudige opdrag. 2491 02:03:06,940 --> 02:03:09,620 Aan die einde van die dag, ons het al met behulp van klang as ons samesteller. 2492 02:03:09,620 --> 02:03:11,494 Ons het al skryf bron kode, omskakeling dit 2493 02:03:11,494 --> 02:03:12,820 via klang in masjienkode. 2494 02:03:12,820 --> 02:03:15,540 >> En ons het al met behulp Maak net ons toetsaanslagen so te fasiliteer 2495 02:03:15,540 --> 02:03:20,740 dat ons nie hoef te onthou diegene inkantasies van klang self. 2496 02:03:20,740 --> 02:03:22,640 Maar wat is Maak eintlik? 2497 02:03:22,640 --> 02:03:24,750 En op sy beurt, wat Klang eintlik? 2498 02:03:24,750 --> 02:03:28,790 >> Dit blyk egter ons vereenvoudig bespreking vandag deur te sê: 2499 02:03:28,790 --> 02:03:33,090 jy bronkode te neem, slaag dit as insette om 'n samesteller wat jy gee 2500 02:03:33,090 --> 02:03:35,750 uitset van masjien kode, blyk daar's 2501 02:03:35,750 --> 02:03:37,420 'n paar verskillende stappe in daar. 2502 02:03:37,420 --> 02:03:41,940 En samestelling gebeur met die sambreel wees term vir 'n hele klomp van die stappe. 2503 02:03:41,940 --> 02:03:43,970 Maar laat ons net terg dit uit regtig vinnig. 2504 02:03:43,970 --> 02:03:48,070 >> Dit blyk dat ons is besig met meer dinge elke keer as ek 'n program uit te voer, 2505 02:03:48,070 --> 02:03:50,990 of elke keer as ek stel 'n program vandag. 2506 02:03:50,990 --> 02:03:55,020 So preprocessing verwys na this-- enigiets in 'n C program, 2507 02:03:55,020 --> 02:03:58,720 soos ons sal sien weer en weer, wat begin met hierdie hash simbool, 2508 02:03:58,720 --> 02:04:03,320 of die hashtag simbool hier, beteken dit is 'n voorverwerker richtlijn. 2509 02:04:03,320 --> 02:04:07,330 Dit beteken dat, in hierdie geval, hey rekenaar, doen iets met 'n lêer 2510 02:04:07,330 --> 02:04:09,430 voordat jy eintlik stel my eie kode. 2511 02:04:09,430 --> 02:04:15,220 >> In hierdie geval, hash sluit is, wese, C se manier om te sê, 2512 02:04:15,220 --> 02:04:19,325 hey rekenaar, gaan kry die inhoud van CS50.h en plak dit hier. 2513 02:04:19,325 --> 02:04:22,170 Hey rekenaar, gaan kry die inhoud van standaard IO.h, 2514 02:04:22,170 --> 02:04:24,690 waar dit is op die hardeskyf, plak dit hier. 2515 02:04:24,690 --> 02:04:27,390 So die dinge gebeur eerste tydens preprocessing. 2516 02:04:27,390 --> 02:04:28,880 >> En klang doen al hierdie dinge vir ons. 2517 02:04:28,880 --> 02:04:30,510 En dit doen dit so darn vinnige, doen jy nie eens 2518 02:04:30,510 --> 02:04:32,000 sien vier verskillende dinge gebeur. 2519 02:04:32,000 --> 02:04:34,100 Maar dit is die eerste so 'n stap. 2520 02:04:34,100 --> 02:04:35,560 >> Wat gebeur eintlik nou? 2521 02:04:35,560 --> 02:04:38,320 Wel, die volgende amptelike stap is die opstel van. 2522 02:04:38,320 --> 02:04:40,385 En dit blyk dat samestelling van 'n program 2523 02:04:40,385 --> 02:04:44,060 tegnies beteken gaan uit bronkode, die dinge wat ons het 2524 02:04:44,060 --> 02:04:47,890 skryf vandag, iets genoem vergadering kode, iets 2525 02:04:47,890 --> 02:04:49,260 wat lyk 'n bietjie anders. 2526 02:04:49,260 --> 02:04:51,050 >> En, in werklikheid, ons kan dit sien baie vinnig. 2527 02:04:51,050 --> 02:04:53,890 Laat my eintlik in my IDE gaan. 2528 02:04:53,890 --> 02:04:58,050 Laat my gaan voort en oop hello.c, wat is die heel eerste program waarmee ons 2529 02:04:58,050 --> 02:04:59,120 begin vandag. 2530 02:04:59,120 --> 02:05:04,130 En laat ek gaan voort en hardloop klang n bietjie anders, klang-e, hello.c, 2531 02:05:04,130 --> 02:05:07,720 wat eintlik gaan Gee my 'n ander lêer hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> En ons sal waarskynlik nooit weer sien hierdie soort kode. 2533 02:05:10,330 --> 02:05:13,030 As jy 'n laer vlak te neem stelsels klas soos CS61, 2534 02:05:13,030 --> 02:05:14,920 jy sal 'n baie meer te sien van hierdie soort kode. 2535 02:05:14,920 --> 02:05:17,020 Maar dit is saamsteltaal. 2536 02:05:17,020 --> 02:05:22,050 Dit is X86 saamsteltaal dat die SVE wat onderliggende 2537 02:05:22,050 --> 02:05:24,460 CS50 IO eintlik verstaan. 2538 02:05:24,460 --> 02:05:27,060 >> En kriptiese as dit nie kyk, dit is iets wat 2539 02:05:27,060 --> 02:05:29,180 die rekenaar verstaan ​​baie goed. 2540 02:05:29,180 --> 02:05:30,790 Sub Q, dit is 'n Trek. 2541 02:05:30,790 --> 02:05:31,660 Daar is bewegings. 2542 02:05:31,660 --> 02:05:35,730 >> Daar is 'n beroep funksies hier, x oring, 'n beweging, 'n add, 'n pop, 2543 02:05:35,730 --> 02:05:36,430 'n terugkeer. 2544 02:05:36,430 --> 02:05:38,850 Daar is dus 'n paar baie lae instruksies vlak 2545 02:05:38,850 --> 02:05:41,280 dat CPUs verstaan ​​dat Ek verwys na vroeër. 2546 02:05:41,280 --> 02:05:43,100 Dit is wat Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Daar is patrone van nulle en ene wat 2548 02:05:45,030 --> 02:05:51,800 karteer om hierdie arcanely bewoorde, maar ietwat goed genoem, instruksies, 2549 02:05:51,800 --> 02:05:52,780 By wyse van spreke. 2550 02:05:52,780 --> 02:05:54,780 Dit is wat gebeur wanneer jy stel jou kode. 2551 02:05:54,780 --> 02:05:58,560 Jy kry vergadering taal uit dit uit, wat 2552 02:05:58,560 --> 02:06:04,680 beteken die derde stap is om te vergader dat die gemeente kode in, uiteindelik, 2553 02:06:04,680 --> 02:06:09,080 masjien code-- nulle en ene, nie die teks wat ons nou net gesien 'n oomblik gelede. 2554 02:06:09,080 --> 02:06:13,370 >> So pre-verwerking beteken dat vind en te vervang, en 'n paar ander dinge. 2555 02:06:13,370 --> 02:06:16,430 Samestelling neem jou bron kode van C, bronkode 2556 02:06:16,430 --> 02:06:18,980 dat ons geskryf het, te vergadering kode wat ons net kyk na. 2557 02:06:18,980 --> 02:06:22,170 Bling neem dat die gemeente -kode vir nulle en ene 2558 02:06:22,170 --> 02:06:24,680 dat die SVE werklik verstaan ​​aan die einde van die dag. 2559 02:06:24,680 --> 02:06:27,630 En aansluiting is die laaste stap dit gebeur vir us-- weer, 2560 02:06:27,630 --> 02:06:29,830 so vinnig ons nie stip handel notice-- wat sê: 2561 02:06:29,830 --> 02:06:32,460 hey rekenaar, neem al die nulle en ene wat 2562 02:06:32,460 --> 02:06:36,750 gevolg van die samestelling van Dawid se kode, en sy belangrikste funksie in hierdie geval. 2563 02:06:36,750 --> 02:06:39,160 >> En hey rekenaar, gaan kry al die nulle en ene 2564 02:06:39,160 --> 02:06:42,180 dat die CS50 personeel geskryf binne-in die CS50 biblioteek. 2565 02:06:42,180 --> 02:06:43,440 Meng dié in met Dawid se. 2566 02:06:43,440 --> 02:06:46,648 En hey rekenaar, gaan kry al die nulle en diegene wat iemand anders geskryf jaar 2567 02:06:46,648 --> 02:06:47,470 gelede vir printf. 2568 02:06:47,470 --> 02:06:49,880 En voeg diegene in die hele ding, sodat ons het 2569 02:06:49,880 --> 02:06:52,870 het my nulle en ene, die nulle en ene CS50 personeel se 2570 02:06:52,870 --> 02:06:55,370 die printf nulle en ene, en enigiets anders wat ons gebruik. 2571 02:06:55,370 --> 02:07:00,410 >> Hulle het almal bymekaar te kry gekombineer in een program genaamd, in hierdie geval, hallo. 2572 02:07:00,410 --> 02:07:03,141 So van nou af, sal ons net gebruik die woord opstel. 2573 02:07:03,141 --> 02:07:06,390 En ons sal as vanselfsprekend aanvaar dat wanneer sê ons, stel jou program, dit beteken, 2574 02:07:06,390 --> 02:07:08,849 hey doen die pre-verwerking, vervaardiging, en 'n skakel. 2575 02:07:08,849 --> 02:07:11,890 Maar daar is eintlik 'n paar sappige dinge gaan daar onder die enjinkap. 2576 02:07:11,890 --> 02:07:13,723 En veral as jy kry nuuskierig 'n geruime tyd, 2577 02:07:13,723 --> 02:07:15,900 jy kan begin skeer rondom by hierdie laer vlak. 2578 02:07:15,900 --> 02:07:19,660 Maar vir nou, besef dat onder die wegneemetes vir vandag 2579 02:07:19,660 --> 02:07:23,420 is eenvoudig die begin van 'n proses, 2580 02:07:23,420 --> 02:07:26,700 om gemaklik met iets soos hello world. 2581 02:07:26,700 --> 02:07:29,575 Trouens, die meeste van wat ons vandag het beslis sal nie sink in super vinnig. 2582 02:07:29,575 --> 02:07:31,491 En dit sal 'n paar te neem tyd, en 'n paar praktyk. 2583 02:07:31,491 --> 02:07:33,864 En die kans is, sal jy sorteer van wil jou sleutelbord getref 2584 02:07:33,864 --> 02:07:34,780 of gil op die skerm. 2585 02:07:34,780 --> 02:07:35,880 En dit alles is OK. 2586 02:07:35,880 --> 02:07:38,320 Alhoewel, miskien probeer om nie te doen dit in die biblioteek soveel. 2587 02:07:38,320 --> 02:07:40,820 >> En uiteindelik, sal jy in staat wees al is, om te begin 2588 02:07:40,820 --> 02:07:44,580 sien patrone, beide in 'n goeie-kode wat jy geskryf het en in foute 2589 02:07:44,580 --> 02:07:45,370 wat jy gemaak het. 2590 02:07:45,370 --> 02:07:48,965 En net soos die proses van besig om 'n TF of 'n CA is soos, 2591 02:07:48,965 --> 02:07:51,590 jy begin om 'n beter en beter te sien wat patrone, 2592 02:07:51,590 --> 02:07:53,774 en net die oplossing van jou eie probleme uiteindelik. 2593 02:07:53,774 --> 02:07:56,940 In die tussentyd, sal daar genoeg wees ons vir jou steun, en kry jy 2594 02:07:56,940 --> 02:07:57,481 deur middel van hierdie. 2595 02:07:57,481 --> 02:07:59,450 En in die skryf-ups vir al die probleme 2596 02:07:59,450 --> 02:08:01,366 sal jy gelei word deur al die opdragte 2597 02:08:01,366 --> 02:08:05,330 dat ek beslis weet uit baie oefening teen hierdie tyd, 2598 02:08:05,330 --> 02:08:07,380 maar kon gevlieg oor 'n mens se kop vir nou. 2599 02:08:07,380 --> 02:08:08,580 En dit is heeltemal fyn. 2600 02:08:08,580 --> 02:08:11,230 >> Maar uiteindelik, jy gaan om te begin om te sien patrone na vore. 2601 02:08:11,230 --> 02:08:14,260 En sodra jy verby al die dom besonderhede, soos tussen hakies, 2602 02:08:14,260 --> 02:08:16,710 en krullerige draadjies, en semi-dubbele punte, en die dinge, eerlik, 2603 02:08:16,710 --> 02:08:19,360 dit is glad nie intellektueel interessant. 2604 02:08:19,360 --> 02:08:22,690 En dit is nie die doel van enige inleidende klas. 2605 02:08:22,690 --> 02:08:24,410 Dit is die idees wat gaan saak. 2606 02:08:24,410 --> 02:08:26,659 >> Dit is die loops, en die voorwaardes, en die funksies, 2607 02:08:26,659 --> 02:08:30,552 en meer kragtig die onttrekking, en die factoring van kode, 2608 02:08:30,552 --> 02:08:33,510 en die goeie ontwerp, en die goeie styl, en uiteindelik die korrektheid 2609 02:08:33,510 --> 02:08:37,330 van jou kode, wat uiteindelik gaan die meeste saak. 2610 02:08:37,330 --> 02:08:40,925 So volgende week, sal ons hierdie neem idees wat ons die eerste keer gesien in Scratch 2611 02:08:40,925 --> 02:08:42,800 en het nou vertaal C. En ons sal begin 2612 02:08:42,800 --> 02:08:45,740 in te voer die eerste van die Natuurlik se werklike wêreld domeine. 2613 02:08:45,740 --> 02:08:50,140 >> Ons sal fokus op die wêreld van sekuriteit, en meer spesifiek kriptografie, 2614 02:08:50,140 --> 02:08:51,980 die kuns van skommeling inligting. 2615 02:08:51,980 --> 02:08:54,000 En een van die eerste probleme wat jy jouself 2616 02:08:54,000 --> 02:08:56,840 sal kry om verder te skryf speel met 'n paar van die sintaksis 2617 02:08:56,840 --> 02:08:59,880 en die oplossing van 'n logiese probleme, uiteindelik kort voor lank, 2618 02:08:59,880 --> 02:09:03,960 is om werklik klouter, of enkripteer, en uiteindelik decrypt inligting. 2619 02:09:03,960 --> 02:09:06,470 En alles wat ons gedoen het Vandag sal die redelik lae 2620 02:09:06,470 --> 02:09:09,190 vlak, is net gaan om voorsiening te maak ons een, en een neem, 2621 02:09:09,190 --> 02:09:13,550 en nog 'n stap in die rigting van bo skryf nog die mees interessante kode. 2622 02:09:13,550 --> 02:09:15,050 >> So meer oor dit volgende week. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [Video speel] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> -Wat Kan jy my vertel oor die laaste keer wat jy hom sien? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Wat Kan ek sê, regtig? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Ek bedoel, dit was soos enige ander pre-produksie repetisie, 2631 02:09:35,340 --> 02:09:40,510 behalwe dat daar iets was het hy gesê aan die einde wat vas met my. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -Dit Was CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -dat 'N snit almal, groot taak op repetisie. 2636 02:09:52,190 --> 02:09:53,070 >> middagete -dat se? 2637 02:09:53,070 --> 02:09:54,986 >> -Yeah, Ek en jy kan gryp 'n broodjie in 'n bietjie. 2638 02:09:54,986 --> 02:09:58,380 Laat my net evaluate met David regtig vinnig. 2639 02:09:58,380 --> 02:09:59,160 David? 2640 02:09:59,160 --> 02:10:01,260 David? 2641 02:10:01,260 --> 02:10:03,110 >> [Einde TERUGSPEEL]