1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [Muziek] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> DAVID J. MALAN: Oké, dit is CS50. 5 00:00:16,240 --> 00:00:18,010 En dit is een week. 6 00:00:18,010 --> 00:00:22,050 Zo herinneren dat de laatste keer in week nul, richtten we ons op computational denken. 7 00:00:22,050 --> 00:00:25,440 En we overgegaan van dat voor Scratch, een grafische programmeeromgeving 8 00:00:25,440 --> 00:00:27,360 de taal van onze vrienden aan het MIT Media Lab. 9 00:00:27,360 --> 00:00:31,730 >> En met Scratch, hebben we te verkennen ideeën zoals functies en voorwaarden, 10 00:00:31,730 --> 00:00:35,210 en loops, en variabelen, en zelfs evenementen en draden, en nog veel meer. 11 00:00:35,210 --> 00:00:37,880 En vandaag, we gaan blijven gebruiken die ideeën, 12 00:00:37,880 --> 00:00:40,630 en echt het nemen van hen voor verleend, maar vertalen 13 00:00:40,630 --> 00:00:44,220 andere taal bekend als C. Nu C is een meer traditionele taal. 14 00:00:44,220 --> 00:00:46,020 Het is een lager niveau taal, als je wil. 15 00:00:46,020 --> 00:00:47,300 >> Het is puur tekstueel. 16 00:00:47,300 --> 00:00:49,910 En zo op het eerste gezicht, het is allemaal nogal cryptisch te kijken 17 00:00:49,910 --> 00:00:51,430 Als je nog nooit hebt geprogrammeerd. 18 00:00:51,430 --> 00:00:53,530 We gaan te hebben puntkomma, en tussen haakjes, 19 00:00:53,530 --> 00:00:55,150 en accolades, en nog veel meer. 20 00:00:55,150 --> 00:00:57,240 Maar beseffen dat zelfs hoewel de syntax is 21 00:00:57,240 --> 00:01:00,600 op het punt om een ​​beetje kijken onbekende voor de meeste van jullie, zie verleden dat. 22 00:01:00,600 --> 00:01:03,220 En proberen om de ideeën te zien dat zijn inderdaad bekend, 23 00:01:03,220 --> 00:01:06,750 want hier in week een wat we zullen beginnen te doen is om te vergelijken, 24 00:01:06,750 --> 00:01:08,980 in eerste instantie, Scratch versus C. 25 00:01:08,980 --> 00:01:12,350 >> Dus bijvoorbeeld herinneren dat wanneer we geïmplementeerd de eerste van onze programma's 26 00:01:12,350 --> 00:01:16,220 de vorige keer hadden we een blok dat uitzag een beetje zoiets als wanneer dit-- 27 00:01:16,220 --> 00:01:19,990 groene vlag klikte, en toen moesten we één of meer puzzelstukjes eronder, 28 00:01:19,990 --> 00:01:22,150 in dit geval zeggen, hello wereld. 29 00:01:22,150 --> 00:01:24,870 Dus inderdaad, in Scratch, wanneer ik op dat groene vlag 30 00:01:24,870 --> 00:01:27,390 mijn programma uit te voeren, zodat spreken, zijn 31 00:01:27,390 --> 00:01:29,520 de blokken die krijgen uitgevoerd, of lopen. 32 00:01:29,520 --> 00:01:32,230 En, in het bijzonder, Scratch zei, hello, wereld. 33 00:01:32,230 --> 00:01:35,377 >> Nu, ik kon hebt opgegeven verschillende woorden hier. 34 00:01:35,377 --> 00:01:37,960 Maar we zullen zien dat, inderdaad, veel Deze blocks-- en inderdaad, 35 00:01:37,960 --> 00:01:41,880 C in vele functions-- kan geparametriseerd of aangepaste 36 00:01:41,880 --> 00:01:43,150 om verschillende dingen te doen. 37 00:01:43,150 --> 00:01:45,520 In feite, als we in C wilt converteren, nu, 38 00:01:45,520 --> 00:01:47,567 dit Scratch programma deze andere talen, 39 00:01:47,567 --> 00:01:49,650 we gaan naar een schrijven beetje zoiets als dit. 40 00:01:49,650 --> 00:01:52,540 >> Toegegeven, er enige onbekende syntax er het meest waarschijnlijk, int, 41 00:01:52,540 --> 00:01:54,380 en haakjes, en leegte. 42 00:01:54,380 --> 00:01:57,740 Maar printf-- hoewel je zou doen denk dat het gewoon druk zijn. 43 00:01:57,740 --> 00:02:00,120 Maar druk betekent druk geformatteerd, zoals we snel zullen zien. 44 00:02:00,120 --> 00:02:02,140 Dit zal letterlijk afgedrukt om het scherm wat 45 00:02:02,140 --> 00:02:05,990 ligt binnen de haakjes, die Uiteraard is in dit geval, hello wereld. 46 00:02:05,990 --> 00:02:09,290 >> Maar je zult merken een aantal andere syntax, sommige dubbele aanhalingstekens, 47 00:02:09,290 --> 00:02:11,890 dat de haakjes aan het einde, de puntkomma en dergelijke. 48 00:02:11,890 --> 00:02:15,027 Dus er is een beetje van de overhead, zo te zeggen, zowel cognitief 49 00:02:15,027 --> 00:02:17,860 en syntactisch, dat we gaan te hebben om te onthouden voordat lang. 50 00:02:17,860 --> 00:02:20,720 Maar beseffen dat met de praktijk, Dit zal beginnen te springen op je af. 51 00:02:20,720 --> 00:02:24,920 >> In feite, laten we focussen op die ene functie specifically-- in dit geval, 52 00:02:24,920 --> 00:02:26,290 zeg hallo wereld. 53 00:02:26,290 --> 00:02:27,560 Dat zeggen is de functie. 54 00:02:27,560 --> 00:02:31,320 Hallo wereld is de parameter, of argumenten, zijn maatwerk. 55 00:02:31,320 --> 00:02:34,320 >> En de gelijkwaardigheid in C is gewoon ga hier deze één lijn, 56 00:02:34,320 --> 00:02:38,710 waarbij printf komt overeen met, bijvoorbeeld, dubbele tekenreeks tussen aanhalingstekens, hello 57 00:02:38,710 --> 00:02:41,470 wereld gelijk natuurlijk naar wat er in de witte doos daar. 58 00:02:41,470 --> 00:02:45,680 En de backslash n, hoewel een beetje vreemd en afwezig Scratch, 59 00:02:45,680 --> 00:02:49,380 gewoon gaat om het effect we moeten zien in een computer, net als mijn Mac of een pc, 60 00:02:49,380 --> 00:02:51,660 Het wegnemen van de cursor naar de volgende regel. 61 00:02:51,660 --> 00:02:53,970 Het is als het raken Enter op uw toetsenbord. 62 00:02:53,970 --> 00:02:55,580 >> Dus we zullen zien dat nog eens het duurde niet lang. 63 00:02:55,580 --> 00:02:58,640 Maar laten we eerst eens een kijkje nemen op deze andere bijvoorbeeld bij lussen. 64 00:02:58,640 --> 00:03:02,830 We hadden dit voor altijd lus laatste keer, dat was een reeks van puzzelstukjes 65 00:03:02,830 --> 00:03:05,490 dat er iets deed letterlijk forever-- in casu 66 00:03:05,490 --> 00:03:08,360 zeg, hello wereld, hello wereld, hello wereld, hello wereld. 67 00:03:08,360 --> 00:03:10,350 Dus het is een oneindige lus door het ontwerp. 68 00:03:10,350 --> 00:03:14,580 >> In C, als we willen om dit te implementeren hetzelfde idee, we kunnen gewoon doen. 69 00:03:14,580 --> 00:03:19,570 Terwijl de echte, printf hello wereld-- nu terwijl slechts semantisch, soort 70 00:03:19,570 --> 00:03:23,090 roept het idee van het doen van weer iets, en opnieuw, en opnieuw, 71 00:03:23,090 --> 00:03:23,980 en voor hoe lang? 72 00:03:23,980 --> 00:03:27,990 Nou, true-- herinneren dat waar is net aan of één. 73 00:03:27,990 --> 00:03:30,660 >> En waar is natuurlijk altijd waar. 74 00:03:30,660 --> 00:03:33,060 Dus het is een soort van een zinloze verklaring alleen maar te zeggen waar. 75 00:03:33,060 --> 00:03:36,890 Maar inderdaad, dit is een bewuste, want als het waar is gewoon altijd waar, 76 00:03:36,890 --> 00:03:40,850 dan terwijl de ware alleen al impliceert, als een beetje indirect 77 00:03:40,850 --> 00:03:44,070 dat de volgende regels code tussen die accolades 78 00:03:44,070 --> 00:03:48,320 moet gewoon opnieuw, en opnieuw uit te voeren, en opnieuw, en nooit stoppen. 79 00:03:48,320 --> 00:03:50,230 >> Maar als je wilt dat uw lus te stoppen, als we 80 00:03:50,230 --> 00:03:54,500 vorige keer met iets als dit, herhaalt u de volgende 50 keer, 81 00:03:54,500 --> 00:03:57,700 in C kunnen we hetzelfde met wat er te doen genoemd voor loop-- het zoekwoord 82 00:03:57,700 --> 00:03:59,330 niet zijnde tijdje, maar voor. 83 00:03:59,330 --> 00:04:03,290 En dan hebben we een aantal nieuwe syntax hier, met int i gelijk is aan 0, i minder dan 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 En we zullen hierop terugkomen. 86 00:04:05,430 --> 00:04:09,660 Maar dit is gewoon hoe we zouden vertaalt de set van Scratch blokken 87 00:04:09,660 --> 00:04:13,079 om een ​​set van C regels code. 88 00:04:13,079 --> 00:04:14,450 >> Ondertussen overwegen variabelen. 89 00:04:14,450 --> 00:04:16,540 En, in feite hebben we gewoon zag men een ogenblik geleden. 90 00:04:16,540 --> 00:04:21,220 En bij Scratch, als we wilde een variabele met de naam i verklaren 91 00:04:21,220 --> 00:04:24,590 voor i zijn integer, maar een getal, en we willen deze ingesteld op een bepaalde waarde, 92 00:04:24,590 --> 00:04:28,410 we zouden dit orange gebruiken blokkeren hier-- I bij 0. 93 00:04:28,410 --> 00:04:30,800 >> En we zullen zien vandaag en voorbij, net als vorige week, 94 00:04:30,800 --> 00:04:33,850 programmeurs doen bijna altijd beginnen te tellen van nul, echt 95 00:04:33,850 --> 00:04:34,950 volgens afspraak. 96 00:04:34,950 --> 00:04:37,250 Maar ook omdat recall uit onze bespreking van binaire, 97 00:04:37,250 --> 00:04:39,990 het kleinste getal kunt u vertegenwoordigen elk aantal bits 98 00:04:39,990 --> 00:04:41,640 is gewoon gaat worden 0 zelf. 99 00:04:41,640 --> 00:04:45,190 En dus zullen we over het algemeen beginnen initialiseren zelfs onze variabelen 0. 100 00:04:45,190 --> 00:04:47,710 >> En C hetzelfde te doen, we gaan int zeggen 101 00:04:47,710 --> 00:04:50,110 voor integer, ik gewoon volgens afspraak. 102 00:04:50,110 --> 00:04:53,390 Ik kon deze variabele hebben opgeroepen wat ik wil, net als in Scratch. 103 00:04:53,390 --> 00:04:57,770 En dan gelijk is aan 0 net rechtverkrijgenden de waarde 0 van rechts 104 00:04:57,770 --> 00:05:01,319 en zet het in de variabele, of de voorraadhouder daar links. 105 00:05:01,319 --> 00:05:04,360 En de puntkomma zoals we zullen see-- en we hebben een paar van deze already-- gezien 106 00:05:04,360 --> 00:05:06,530 betekent gewoon het einde van het denken. 107 00:05:06,530 --> 00:05:09,430 Ga verder met iets anders te doen de lijnen die volgen. 108 00:05:09,430 --> 00:05:11,330 >> Nu, hoe zit het met Booleaanse expressies? 109 00:05:11,330 --> 00:05:14,320 Bedenk dat in Scratch, deze waren uitdrukkingen 110 00:05:14,320 --> 00:05:16,740 die true of false-- vragen, 111 00:05:16,740 --> 00:05:18,910 echt, die ofwel waar of onwaar. 112 00:05:18,910 --> 00:05:21,960 Dus in het geval van Scratch, kunnen we een eenvoudige vraag als deze, 113 00:05:21,960 --> 00:05:24,586 is dat ik minder dan 50? 114 00:05:24,586 --> 00:05:25,710 Dus i, nogmaals, een geheel getal. 115 00:05:25,710 --> 00:05:27,210 Misschien zijn we te gebruiken in een Scratch-programma 116 00:05:27,210 --> 00:05:29,310 om bij te houden van een score of zoiets. 117 00:05:29,310 --> 00:05:33,810 Dus dit syntax hier in Scratch gewoon betekent, is dat ik minder dan 50? 118 00:05:33,810 --> 00:05:37,330 Nou, gelukkig, is er iets eenvoudig in C. En te vertalen, 119 00:05:37,330 --> 00:05:41,780 Dit zouden we alleen maar zeggen dat ik minder dan 50, volgens de bekende sleutel 120 00:05:41,780 --> 00:05:42,850 op uw toetsenbord. 121 00:05:42,850 --> 00:05:45,141 >> Ondertussen, als je wilde zeg iets meer in het algemeen, 122 00:05:45,141 --> 00:05:49,890 als, nou ja, is x kleiner dan y waar elke van x en y zelf variabelen? 123 00:05:49,890 --> 00:05:52,280 We kunnen hetzelfde doen in C, zolang we hebben 124 00:05:52,280 --> 00:05:53,942 creëerde deze variabelen al. 125 00:05:53,942 --> 00:05:55,650 En we zullen zien hoe doe dat duurde niet lang. 126 00:05:55,650 --> 00:05:58,590 We zouden gewoon zeggen x kleiner dan y. 127 00:05:58,590 --> 00:06:00,530 >> Dus je begint zie een aantal overeenkomsten. 128 00:06:00,530 --> 00:06:03,490 En die mensen die gemaakt Scratch waren zeker 129 00:06:03,490 --> 00:06:05,250 geïnspireerd door een aantal van deze fundamentele ideeën. 130 00:06:05,250 --> 00:06:10,350 En je zult dit soort te zien syntax in vele languages-- 131 00:06:10,350 --> 00:06:12,160 niet alleen Scratch, niet alleen C, maar Python, 132 00:06:12,160 --> 00:06:14,790 en JavaScript, en andere talen nog steeds. 133 00:06:14,790 --> 00:06:18,270 >> Laten we eens kijken naar een ander construct vanaf het begrip van een aandoening, 134 00:06:18,270 --> 00:06:20,370 iets te doen voorwaardelijk. 135 00:06:20,370 --> 00:06:22,720 Als iets waar is, doe dit. 136 00:06:22,720 --> 00:06:24,457 Als er iets anders waar is, dat doen. 137 00:06:24,457 --> 00:06:27,040 Het is een soort van de programmering equivalent van een splitsing in de weg. 138 00:06:27,040 --> 00:06:29,730 Misschien is het een twee-weg vork, een drieweg vork of meer. 139 00:06:29,730 --> 00:06:32,800 En in Scratch, zouden we hebben gezien iets als dit. 140 00:06:32,800 --> 00:06:34,010 >> Dus dit is een grote. 141 00:06:34,010 --> 00:06:36,750 Maar rekening houden met de relatieve eenvoud van de logica. 142 00:06:36,750 --> 00:06:44,010 Indien x kleiner dan y is, dan zeg x minder dan y, anders als x groter is dan y, 143 00:06:44,010 --> 00:06:46,230 dan zeg x is groter dan y. 144 00:06:46,230 --> 00:06:48,300 En dan, logisch, als je denkt terug naar Scratch 145 00:06:48,300 --> 00:06:52,610 of gewoon je eigen menselijke intuïtie, en, als x niet groter dan y en x 146 00:06:52,610 --> 00:06:57,000 ten minste y, dan natuurlijk x gaat y gelijk zijn. 147 00:06:57,000 --> 00:06:59,690 Dus in dit geval, door het nestelen die Scratch blokken, 148 00:06:59,690 --> 00:07:02,580 kunnen we het bereiken van een drie weg vork in de weg? 149 00:07:02,580 --> 00:07:04,980 >> Ondertussen, als we willen dat doen in C, is het misschien wel 150 00:07:04,980 --> 00:07:08,420 ziet er een beetje simpler-- ten minste als je eenmaal bekend bent met de syntaxis. 151 00:07:08,420 --> 00:07:12,050 Als x kleiner dan y, printf x kleiner dan y. 152 00:07:12,050 --> 00:07:16,140 Anders als x groter is dan y, printf x groter is dan y. 153 00:07:16,140 --> 00:07:21,210 Else printf x is gelijk aan y-- en, weer, met die schuine streep eindigt net 154 00:07:21,210 --> 00:07:24,160 voor degenen die nieuwe lijnen, zodat als je eigenlijk liep dit soort programma's 155 00:07:24,160 --> 00:07:25,940 het zou gewoon verplaatsen cursor uiteindelijk 156 00:07:25,940 --> 00:07:28,100 naar de volgende regel van het scherm. 157 00:07:28,100 --> 00:07:31,270 >> Nu, ondertussen Scratch verwekte meer geavanceerde functies, maar 158 00:07:31,270 --> 00:07:34,320 waarvan sommige we gaan in eerste instantie over te stappen naar de wereld van C. 159 00:07:34,320 --> 00:07:37,010 En een van hen was riep een lijst in Scratch. 160 00:07:37,010 --> 00:07:39,100 En dit een speciale type variabele die 161 00:07:39,100 --> 00:07:42,840 staat je toe om meerdere dingen op te slaan in het terug, naar achter, naar achter, naar achteren. 162 00:07:42,840 --> 00:07:45,540 >> In C, heeft het niet lijsten, per se, maar iets 163 00:07:45,540 --> 00:07:48,090 die meer algemeen genoemd arrays, hoewel we 164 00:07:48,090 --> 00:07:50,590 terug te komen later dit semester te kijken naar iets 165 00:07:50,590 --> 00:07:52,780 riep een lijst, of eigenlijk een gekoppelde lijst. 166 00:07:52,780 --> 00:07:55,510 Maar voor nu, het dichtst equivalent in C ons 167 00:07:55,510 --> 00:07:57,345 gaat iets te zijn een array genoemd. 168 00:07:57,345 --> 00:07:59,740 En een array is simpelweg een speciaal type variabele 169 00:07:59,740 --> 00:08:03,160 die u toelaat om gegevens op te slaan terug, aan rug, aan rug, terug. 170 00:08:03,160 --> 00:08:05,840 >> En inderdaad, in Scratch, als we wilden om toegang te krijgen 171 00:08:05,840 --> 00:08:09,030 het eerste element van een matrix of een list-- en ik ga noemen, 172 00:08:09,030 --> 00:08:13,600 volgens afspraak, argv, argument vector, maar meer op dat duurde niet lang. 173 00:08:13,600 --> 00:08:17,090 Als ik bij het eerste element te krijgen van argv, in de wereld van Scratch 174 00:08:17,090 --> 00:08:20,930 je eigenlijk doen doorgaans beginnen te tellen vanaf 1. 175 00:08:20,930 --> 00:08:22,850 >> En dus ik zou kunnen krijgen punt 1 van argv. 176 00:08:22,850 --> 00:08:26,310 Dat is gewoon hoe MIT geïmplementeerd het begrip lijsten. 177 00:08:26,310 --> 00:08:29,860 Maar in C, ga ik meer gewoon zeggen, argv, 178 00:08:29,860 --> 00:08:32,758 die weer de naam van mijn list-- of helder zijn, een matrix. 179 00:08:32,758 --> 00:08:34,549 En als ik wil de eerste elementen, ik ga 180 00:08:34,549 --> 00:08:37,890 aan vierkante haken te gebruiken, die u misschien niet vaak gebruikt onder een toetsenbord. 181 00:08:37,890 --> 00:08:40,150 >> Maar 0 betekent gewoon, geef me de eerste. 182 00:08:40,150 --> 00:08:42,160 Zo af en toe en als Na verloop van tijd, we gaan 183 00:08:42,160 --> 00:08:44,570 om te beginnen met deze tweedelingen zien tussen Kras en C, 184 00:08:44,570 --> 00:08:46,070 waarbij Scratch maakt gebruik van een. 185 00:08:46,070 --> 00:08:47,670 Wij in C gebruiken 0 hier. 186 00:08:47,670 --> 00:08:49,420 Maar je zult snel zien als je eenmaal begrijpt 187 00:08:49,420 --> 00:08:52,920 de fundamenten van elke taal, dat deze dingen beginnen om des te meer te krijgen 188 00:08:52,920 --> 00:08:56,860 vertrouwd in de praktijk en de praktijk. 189 00:08:56,860 --> 00:08:59,700 >> Dus laten we eigenlijk nu kijken naar een programma. 190 00:08:59,700 --> 00:09:04,031 Hier zijn de eerste van onze C broncode van complete programma's. 191 00:09:04,031 --> 00:09:06,280 En het programma dat we gaan aan te bieden ter overweging 192 00:09:06,280 --> 00:09:09,340 is degene die gelijkwaardig dat eerder Scratch stuk. 193 00:09:09,340 --> 00:09:13,210 >> Dus hier, we hebben wat misschien wel de eenvoudigste C-programma 194 00:09:13,210 --> 00:09:15,410 je kunt schrijven dat daadwerkelijk iets doet. 195 00:09:15,410 --> 00:09:18,250 Nu zullen we kijken verleden, voor nu, heeft onder meer, 196 00:09:18,250 --> 00:09:21,190 standaard io.h, en deze hoek beugels en int, en leegte, 197 00:09:21,190 --> 00:09:22,840 en de accolades en dergelijke. 198 00:09:22,840 --> 00:09:25,390 >> En laten we gewoon concentreren op welke althans intuïtief, 199 00:09:25,390 --> 00:09:26,860 misschien al uit springen op je af. 200 00:09:26,860 --> 00:09:30,300 In feite, de belangrijkste, dat doe ik niet per se weten wat dit is, 201 00:09:30,300 --> 00:09:34,580 maar net als Kras hadden dat toen groene vlag klikte puzzelstuk, 202 00:09:34,580 --> 00:09:39,070 zo heeft C als programmeertaal hebben een belangrijke stukje code dat 203 00:09:39,070 --> 00:09:43,380 wordt uitgevoerd door gebrek. En inderdaad, Het is letterlijk gaat de belangrijkste te noemen. 204 00:09:43,380 --> 00:09:44,720 >> Dus belangrijkste is een functie. 205 00:09:44,720 --> 00:09:48,720 En het is een speciale functie die bestaat in C dat wanneer u een programma uitvoert, 206 00:09:48,720 --> 00:09:52,720 is het belangrijkste dat wordt gerund door standaard. In de wereld van Scratch, 207 00:09:52,720 --> 00:09:56,970 het was meestal als groene vlag klikte dat werd gerund door gebrek. 208 00:09:56,970 --> 00:10:01,130 >> Ondertussen hebben we dit eerder gezien, printf of afdrukken opgemaakt, dat is 209 00:10:01,130 --> 00:10:05,620 gaan naar een functie die wordt geleverd met zijn C, samen met een heleboel anderen, 210 00:10:05,620 --> 00:10:10,140 dat zal van tijd en tijd opnieuw, om precies 211 00:10:10,140 --> 00:10:12,450 zoals de naam al doet vermoeden, af te drukken iets. 212 00:10:12,450 --> 00:10:13,500 Wat willen we om af te drukken? 213 00:10:13,500 --> 00:10:15,770 Nou, we zullen zien dat door bijvoeging karakters 214 00:10:15,770 --> 00:10:18,680 zoals these-- hello wereld, backslash n dubbele aanhalingstekens, 215 00:10:18,680 --> 00:10:23,040 we kunnen printf precies vertellen wat af te drukken op het scherm. 216 00:10:23,040 --> 00:10:26,430 >> Maar om te doen dat wij helaas 217 00:10:26,430 --> 00:10:30,010 nodig hebben om iets dat te nemen al cryptische om ons mensen, 218 00:10:30,010 --> 00:10:34,510 maar in ieder geval is het enigszins readable-- scherpe omvatten standaard io.h, int, 219 00:10:34,510 --> 00:10:39,340 main, leegte, printf, alle van de magische bezweringen zagen we gewoon op het scherm. 220 00:10:39,340 --> 00:10:42,470 Maar we hebben eigenlijk ga nog meer mysterieus. 221 00:10:42,470 --> 00:10:47,140 We moeten eerst de code te vertalen dat we schrijven in machine code. 222 00:10:47,140 --> 00:10:51,370 En herinneren van vorige week dat de machines, tenminste degene die we hier kennen, 223 00:10:51,370 --> 00:10:54,450 aan het eind van de dag enige begrijpen nullen en enen. 224 00:10:54,450 --> 00:10:58,100 >> En mijn God, als we deze schrijven nullen en enen daadwerkelijk programma, 225 00:10:58,100 --> 00:11:01,260 Het zou heel, heel snel neem het plezier van om het even wat. 226 00:11:01,260 --> 00:11:05,150 Maar het blijkt, per week, dat deze patronen van nullen en enen 227 00:11:05,150 --> 00:11:06,400 gewoon hebben een speciale betekenis. 228 00:11:06,400 --> 00:11:08,500 In sommige contexten, ze zou kunnen betekenen nummers. 229 00:11:08,500 --> 00:11:11,840 >> In sommige contexten, zouden ze betekenen letters of kleuren, of een aantal 230 00:11:11,840 --> 00:11:14,710 van andere abstracties daar op. 231 00:11:14,710 --> 00:11:18,450 Maar net als uw computer heeft een CPU, Central Processing Unit, 232 00:11:18,450 --> 00:11:20,390 of de hersenen binnenkant van uw computer. 233 00:11:20,390 --> 00:11:22,240 Het is meestal Intel binnen, want dat is 234 00:11:22,240 --> 00:11:24,900 een van de grootste bedrijven dat maakt CPU's voor computers. 235 00:11:24,900 --> 00:11:28,910 >> Nou, Intel CPU's en anderen gewoon hebben besloten op voorhand 236 00:11:28,910 --> 00:11:33,970 qua 'nullen en degenen stelt specifieke dingen betekenen. 237 00:11:33,970 --> 00:11:37,040 Bepaalde patronen van enen en nullen zal betekenen, afdrukken naar het scherm, 238 00:11:37,040 --> 00:11:39,710 of voeg deze twee getallen, of aftrekken van deze twee getallen, 239 00:11:39,710 --> 00:11:43,310 of verplaats dit stuk van de gegevens uit het geheugen van mijn computer hier, 240 00:11:43,310 --> 00:11:47,870 of een aantal andere zeer laag niveau, maar uiteindelijk nuttig, operaties. 241 00:11:47,870 --> 00:11:53,022 Maar gelukkig, wij mensen zijn niet van plan nodig hebben om dit niveau van detail te kennen. 242 00:11:53,022 --> 00:11:56,230 Inderdaad, net als de vorige keer, waar we geabstraheerde opnieuw, en opnieuw, en opnieuw, 243 00:11:56,230 --> 00:11:58,930 de bouw van een zeer laag niveau primitieven zoals nullen en enen 244 00:11:58,930 --> 00:12:01,160 naar een hoger niveau concepten dezelfde cijfers en letters, 245 00:12:01,160 --> 00:12:04,330 en kleuren, en nog veel meer, dus kunnen wij als programmeurs 246 00:12:04,330 --> 00:12:07,080 staan ​​op de schouders van anderen die ons zijn gekomen 247 00:12:07,080 --> 00:12:11,260 en het gebruik van software die andere mensen hebben voordat ons-- geschreven 248 00:12:11,260 --> 00:12:14,340 namelijk programma's, genaamd compilers. 249 00:12:14,340 --> 00:12:17,770 >> C is een taal die gewoonlijk samengesteld, 250 00:12:17,770 --> 00:12:22,130 wat betekent omgezet van broncode machine code. 251 00:12:22,130 --> 00:12:25,230 Met name wat dit betekent is dat als je hebt je bron gekregen 252 00:12:25,230 --> 00:12:29,530 code die je zelf schrijft, als we binnenkort zal in slechts een moment op het scherm, 253 00:12:29,530 --> 00:12:33,140 en je wilt om te zetten uiteindelijk tot machine code-- 254 00:12:33,140 --> 00:12:37,100 die nullen en enen dat alleen je Mac of pc 255 00:12:37,100 --> 00:12:41,230 understands-- je hebt een eerste voeden dat source code in als 256 00:12:41,230 --> 00:12:46,340 ingevoerd in een speciale programma genaamd een compiler, 257 00:12:46,340 --> 00:12:48,974 de uitgang waarvan we zullen zien is machinecode. 258 00:12:48,974 --> 00:12:51,890 En inderdaad, de laatste keer dat we spraken over, echt, aan het eind van de dag, 259 00:12:51,890 --> 00:12:52,610 probleemoplossing. 260 00:12:52,610 --> 00:12:53,360 Je hebt ingangen. 261 00:12:53,360 --> 00:12:54,318 En je hebt uitgangen. 262 00:12:54,318 --> 00:12:56,560 En je hebt een soort gekregen algoritme in het midden. 263 00:12:56,560 --> 00:12:59,830 >> Algoritmen kan zeker worden geïmplementeerd in software, 264 00:12:59,830 --> 00:13:02,900 zoals we zagen met pseudocode vorige week en zoals we zullen zien met de werkelijke code 265 00:13:02,900 --> 00:13:03,490 deze week. 266 00:13:03,490 --> 00:13:06,430 En dus een compiler eigenlijk alleen maar heeft een set van algoritmen binnen 267 00:13:06,430 --> 00:13:10,060 ervan die weten hoe ze omzetten van de speciale trefwoorden, 268 00:13:10,060 --> 00:13:12,180 als belangrijkste, en printf, en anderen dat we net 269 00:13:12,180 --> 00:13:17,620 zag in de patronen van nullen en degenen die Intel inside en andere CPU 270 00:13:17,620 --> 00:13:20,020 daadwerkelijk begrijpt. 271 00:13:20,020 --> 00:13:22,460 Dus hoe kunnen we dit doen? 272 00:13:22,460 --> 00:13:24,470 Waar halen we een compiler? 273 00:13:24,470 --> 00:13:26,400 >> De meesten van ons hier een Mac of een pc. 274 00:13:26,400 --> 00:13:29,152 En je draait Mac OS, of Windows of Linux of Solaris, 275 00:13:29,152 --> 00:13:30,860 of elk aantal andere besturingssystemen. 276 00:13:30,860 --> 00:13:32,568 En inderdaad, we konden ga uit op het web 277 00:13:32,568 --> 00:13:35,710 en downloaden van een compiler voor je Mac of pc 278 00:13:35,710 --> 00:13:37,360 voor uw specifieke besturingssysteem. 279 00:13:37,360 --> 00:13:39,617 Maar we zouden allemaal op verschillende pagina's, om zo te zeggen. 280 00:13:39,617 --> 00:13:41,450 We zouden iets hebben verschillende configuraties. 281 00:13:41,450 --> 00:13:43,210 En de dingen zouden niet allemaal hetzelfde werken. 282 00:13:43,210 --> 00:13:45,280 En inderdaad, deze dagen velen van ons niet gebruiken 283 00:13:45,280 --> 00:13:47,516 software die draait alleen op onze laptops. 284 00:13:47,516 --> 00:13:49,390 In plaats daarvan gebruiken we iets zoals een browser die 285 00:13:49,390 --> 00:13:52,930 stelt ons in staat om toegang te krijgen op het web gebaseerde applicaties in de cloud. 286 00:13:52,930 --> 00:13:55,630 En later dit semester, zullen we precies dat doen. 287 00:13:55,630 --> 00:13:59,660 We zullen applicaties te schrijven of software met behulp van code-- niet C, 288 00:13:59,660 --> 00:14:02,860 maar andere talen zoals Python en JavaScript-- die worden uitgevoerd in de cloud. 289 00:14:02,860 --> 00:14:05,860 >> En dat doen wij onszelf tijdens het semester 290 00:14:05,860 --> 00:14:11,890 ook daadwerkelijk gebruik maken van een cloud-gebaseerde milieu bekend als CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 Dit is een web-based programmeren milieu, of geïntegreerde ontwikkeling 292 00:14:16,030 --> 00:14:20,610 milieu, IDE, dat is gebouwd bovenop een aantal open source software genaamd Cloud 9. 293 00:14:20,610 --> 00:14:22,966 En we hebben een aantal pedagogische gemaakt vereenvoudigingen te 294 00:14:22,966 --> 00:14:25,840 om bepaalde functies in te verbergen de eerste weken dat we niet nodig hebben, 295 00:14:25,840 --> 00:14:27,770 waarna je kunt onthullen hen en doen de meeste 296 00:14:27,770 --> 00:14:29,400 alles wat je wilt met de omgeving. 297 00:14:29,400 --> 00:14:32,470 >> En het stelt ons ook om pre-installatie van bepaalde software. 298 00:14:32,470 --> 00:14:35,330 Dingen zoals een zogenaamd CS50 bibliotheek, die we binnenkort zullen zien 299 00:14:35,330 --> 00:14:39,210 geeft ons in C met een aantal extra functionaliteit. 300 00:14:39,210 --> 00:14:44,392 Dus als je naar, uiteindelijk, CS50.io, wordt u gevraagd om in te loggen, 301 00:14:44,392 --> 00:14:46,350 en zodra je en maak een account gratis, 302 00:14:46,350 --> 00:14:52,150 bent u in staat om toegang te krijgen tot een zal zijn omgeving die ziet er heel graag dit. 303 00:14:52,150 --> 00:14:53,760 >> Nu, dit is in de standaardmodus. 304 00:14:53,760 --> 00:14:55,650 Alles is mooi en helder op het scherm. 305 00:14:55,650 --> 00:14:57,941 Velen van ons hebben een gewoonte van werken aan CS50 stuk dat is 306 00:14:57,941 --> 00:14:59,150 vrij laat in de nacht. 307 00:14:59,150 --> 00:15:02,400 En dus sommige van jullie misschien de voorkeur aan zet hem in nachtmodus, om zo te zeggen. 308 00:15:02,400 --> 00:15:05,550 >> Maar uiteindelijk, wat je bent gaan zien binnen CS50 IDE 309 00:15:05,550 --> 00:15:08,340 drie afzonderlijke areas-- een gebied aan de linkerkant, waar 310 00:15:08,340 --> 00:15:12,604 uw bestanden zullen worden in de wolk, een gebied in de rechterbovenhoek 311 00:15:12,604 --> 00:15:14,270 waar uw code zal worden bewerkt. 312 00:15:14,270 --> 00:15:16,650 Je zult in staat om te openen individuele tabbladen voor elk programma 313 00:15:16,650 --> 00:15:19,670 dat je binnen dit schrijf semester van die rechter bovenhoek. 314 00:15:19,670 --> 00:15:23,070 En dan de meeste arcanely, en toch krachtig, 315 00:15:23,070 --> 00:15:26,610 gaat dit ding aan het worden bodem bekend als een terminal-venster. 316 00:15:26,610 --> 00:15:29,450 >> Dit is een oude school Command Line Interface, 317 00:15:29,450 --> 00:15:32,240 of CLI, waarmee je opdrachten uit te voeren 318 00:15:32,240 --> 00:15:35,260 de computer-- in casu de computer in de cloud-- 319 00:15:35,260 --> 00:15:39,090 om dingen zoals compileren uw code te doen vanuit de broncode naar machine code, 320 00:15:39,090 --> 00:15:43,600 om uw programma's te draaien, of om te beginnen met uw webserver, of om toegang te krijgen tot de database, 321 00:15:43,600 --> 00:15:47,454 en een aantal andere technieken dat we beginnen te gebruiken voordat lang. 322 00:15:47,454 --> 00:15:49,370 Maar om er te komen, we zijn gaat eigenlijk 323 00:15:49,370 --> 00:15:51,240 om online te gaan en beginnen te spelen. 324 00:15:51,240 --> 00:15:54,399 En om dat te doen, laten we eerst beginnen sleutelen aan de belangrijkste, 325 00:15:54,399 --> 00:15:55,940 en schrijf het hoofddeel van het programma. 326 00:15:55,940 --> 00:15:59,170 En laten we gebruik maken van die functie printf, die we eerder gebruikt, 327 00:15:59,170 --> 00:16:01,050 gewoon om iets te zeggen. 328 00:16:01,050 --> 00:16:04,910 >> Dus hier ben ik al binnenkant van CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Ik heb ingelogd op voorhand. 330 00:16:05,930 --> 00:16:07,360 En ik volledig gescreend het raam. 331 00:16:07,360 --> 00:16:09,670 En dus, uiteindelijk, je Ook in de komende problemen 332 00:16:09,670 --> 00:16:12,960 zal soortgelijke stappen volgen, dat zal online documentatie. 333 00:16:12,960 --> 00:16:16,360 U hoeft dus geen zorgen te maken over absorberen van elke kleine technische stap 334 00:16:16,360 --> 00:16:17,730 dat doe ik hier vandaag. 335 00:16:17,730 --> 00:16:19,222 >> Maar je zult een scherm zoals dit te krijgen. 336 00:16:19,222 --> 00:16:20,430 Ik toevallig in de nachtmodus. 337 00:16:20,430 --> 00:16:22,944 En je kunt alles fleuren up door het uitschakelen van de nachtmodus. 338 00:16:22,944 --> 00:16:24,860 En aan het einde van de dag, zul je zien 339 00:16:24,860 --> 00:16:30,090 deze drie belangrijkste areas-- het bestand browser links, de code tabbladen bovenin, 340 00:16:30,090 --> 00:16:32,430 en het terminalvenster onderaan. 341 00:16:32,430 --> 00:16:34,890 >> Laat me ga je gang en schrijf mijn eerste programma. 342 00:16:34,890 --> 00:16:42,300 Ik ga om preventief te gaan naar Bestand, Save, en sla mijn dossier als hello.c. 343 00:16:42,300 --> 00:16:46,850 Sterker nog, volgens afspraak, elk programma dat we schrijven dat is geschreven in de taal C 344 00:16:46,850 --> 00:16:49,739 moet iets worden genoemd dot c, volgens afspraak. 345 00:16:49,739 --> 00:16:53,030 Dus ik ga om het te noemen hello.c, omdat Ik wil alleen maar hallo tegen de wereld te zeggen. 346 00:16:53,030 --> 00:16:54,820 Nu ga ik om te vergroten out en klik op Opslaan. 347 00:16:54,820 --> 00:16:58,180 En alles wat ik heb hier nu een tab waar kan ik beginnen met het schrijven van code. 348 00:16:58,180 --> 00:16:59,490 >> Dit is niet van plan om te compileren. 349 00:16:59,490 --> 00:17:00,300 Dit betekent niets. 350 00:17:00,300 --> 00:17:02,750 En dus zelfs als ik bekeerd dit nullen en enen, 351 00:17:02,750 --> 00:17:05,390 de CPU zal geen hebben idee wat er gaande is rond. 352 00:17:05,390 --> 00:17:14,170 Maar als ik lijnen te schrijven die niet overeenkomen met conventions-- C wezen C's, 353 00:17:14,170 --> 00:17:20,150 nogmaals, dit language-- met syntax zoals dit, printf hallo wereld-- en ik heb 354 00:17:20,150 --> 00:17:22,210 gotten comfortabel met dit te doen in de tijd. 355 00:17:22,210 --> 00:17:24,510 Dus ik denk niet dat ik gemaakt eventuele typefouten. 356 00:17:24,510 --> 00:17:27,910 >> Maar, onveranderlijk, de allereerste keer dat je dit doet, zal je. 357 00:17:27,910 --> 00:17:31,090 En wat ik nu ga doen zou zeer ook niet voor de eerste keer. 358 00:17:31,090 --> 00:17:33,610 En dat is perfect in orde, want nu je 359 00:17:33,610 --> 00:17:37,662 misschien gewoon zien een heleboel nieuwheid, maar na verloop van tijd als je eenmaal bekend bent 360 00:17:37,662 --> 00:17:39,870 met deze omgeving, en deze taal, en anderen, 361 00:17:39,870 --> 00:17:42,370 zult u beginnen om dingen te zien dat zijn ofwel juist of onjuist. 362 00:17:42,370 --> 00:17:44,369 >> En dit is wat de onderwijs fellows en natuurlijk 363 00:17:44,369 --> 00:17:48,780 assistenten krijgen zo goed in de loop der tijd, wordt spotten fouten of bugs in de code. 364 00:17:48,780 --> 00:17:52,110 Maar ik beweren dat er zijn geen bugs in deze code. 365 00:17:52,110 --> 00:17:53,990 Dus wil ik nu om dit programma uit te voeren. 366 00:17:53,990 --> 00:17:57,440 >> Nu op mijn eigen Mac of pc, ik ben in de gewoonte van te dubbelklikken pictogrammen 367 00:17:57,440 --> 00:17:59,350 wanneer ik wil een aantal programma uit te voeren. 368 00:17:59,350 --> 00:18:01,080 Maar dat is niet het model hier. 369 00:18:01,080 --> 00:18:04,570 In deze omgeving, dat is CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Wij maken gebruik van een besturingssysteem systeem genaamd Linux. 371 00:18:07,192 --> 00:18:09,900 Linux doet denken aan een ander besturingssysteem, algemeen bekend 372 00:18:09,900 --> 00:18:10,850 Unix. 373 00:18:10,850 --> 00:18:16,340 En Linux is vooral bekend om het hebben van een Command Line Milieu, CLI. 374 00:18:16,340 --> 00:18:20,070 Nu, we zijn met behulp van een specifieke smaak van Linux genaamd Ubuntu. 375 00:18:20,070 --> 00:18:22,770 En Ubuntu is gewoon een bepaalde versie van Linux. 376 00:18:22,770 --> 00:18:27,900 >> Maar deze Linux doen deze dagen eigenlijk komen met grafische user interfaces. 377 00:18:27,900 --> 00:18:30,360 En degene die we toevallig hier worden gebruikt, is web-based. 378 00:18:30,360 --> 00:18:32,735 Dus dit zou zelfs een blik beetje anders dan iets 379 00:18:32,735 --> 00:18:35,310 je jezelf zou kunnen hebben gezien of draaien in het verleden. 380 00:18:35,310 --> 00:18:37,910 >> Dus ik ga om verder te gaan nu en doe het volgende. 381 00:18:37,910 --> 00:18:40,950 Ik heb dit bestand als hello.c opgeslagen. 382 00:18:40,950 --> 00:18:47,350 Ik ga om te gaan en Type clanghello.c Dus Clang 383 00:18:47,350 --> 00:18:49,850 de taal C is een compiler. 384 00:18:49,850 --> 00:18:51,952 Het is vooraf geïnstalleerd in CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 En je kunt absoluut downloaden installeer dit op je eigen Mac of pc. 386 00:18:54,910 --> 00:18:57,910 >> Maar, nogmaals, zou je niet al hebben de pre-configuratie voor u gedaan. 387 00:18:57,910 --> 00:19:00,940 Dus voor nu, ik ben gewoon gaat clanghello.c draaien. 388 00:19:00,940 --> 00:19:03,240 En let nu op deze syntaxis hier zal uiteindelijk 389 00:19:03,240 --> 00:19:06,930 beseffen betekent dat ik in een map of directory met de naam Workspace. 390 00:19:06,930 --> 00:19:11,030 Dit dollarteken is enkel conventie naar betekenis, typt u uw commando's hier. 391 00:19:11,030 --> 00:19:14,560 >> Het is wat heet een prompt, net Volgens afspraak is dollarteken. 392 00:19:14,560 --> 00:19:19,130 En als ik nu ga je gang en klik op Enter, lijkt er niets te zijn gebeurd. 393 00:19:19,130 --> 00:19:20,930 Maar dat is eigenlijk een goede zaak. 394 00:19:20,930 --> 00:19:23,650 Hoe minder er gebeurt op uw scherm, hoe groter de kans 395 00:19:23,650 --> 00:19:26,710 uw code is juist te zijn, tenminste syntactisch. 396 00:19:26,710 --> 00:19:29,120 >> Dus als ik wil dit uitvoeren programma, wat moet ik doen? 397 00:19:29,120 --> 00:19:33,770 Nou, het blijkt dat de standaardnaam volgens afspraak 398 00:19:33,770 --> 00:19:38,854 voor programma's als je niet opgeeft een naam van uw programma is gewoon a.out. 399 00:19:38,854 --> 00:19:41,270 En deze syntaxis ook, zul je vertrouwd te raken met het duurde niet lang. 400 00:19:41,270 --> 00:19:47,500 >> Dot slash betekent gewoon, hey, CS50 IDE, uitvoeren van een programma genaamd a.out 401 00:19:47,500 --> 00:19:49,400 Dat is in mijn huidige directory. 402 00:19:49,400 --> 00:19:51,520 Dat stip betekent dat de huidige directory. 403 00:19:51,520 --> 00:19:55,040 En we zullen zien wat andere dergelijke sequenties tekens betekent dat duurde niet lang. 404 00:19:55,040 --> 00:19:58,430 >> Dus hier gaan we, Enter, hello wereld. 405 00:19:58,430 --> 00:20:00,080 En je zult merken, dat wat is er gebeurd? 406 00:20:00,080 --> 00:20:01,580 Niet alleen heeft het af te drukken hello wereld. 407 00:20:01,580 --> 00:20:05,990 Het bewoog ook de cursor naar de volgende regel. 408 00:20:05,990 --> 00:20:07,160 >> En waarom was dat? 409 00:20:07,160 --> 00:20:12,400 Wat was de code die we eerder schreven dat ervoor gezorgd dat de cursor zou 410 00:20:12,400 --> 00:20:14,882 Ga op de volgende regel? 411 00:20:14,882 --> 00:20:16,840 Grappig ding over een computer is dat het alleen maar 412 00:20:16,840 --> 00:20:18,570 letterlijk doen wat je hem vertelt wat te doen. 413 00:20:18,570 --> 00:20:26,050 >> Dus als je het vertellen printf hello, komma, ruimte, wereld, in de buurt citaat, 414 00:20:26,050 --> 00:20:29,090 Het is letterlijk alleen maar die tekens afgedrukt. 415 00:20:29,090 --> 00:20:31,980 Maar ik had deze bijzondere karakter aan het eind, rappel, backslash n. 416 00:20:31,980 --> 00:20:34,230 En dat is wat verzekerd dat het karakter ging 417 00:20:34,230 --> 00:20:36,570 naar de volgende regel van het scherm. 418 00:20:36,570 --> 00:20:38,097 >> In feite, laat me gaan en dit te doen. 419 00:20:38,097 --> 00:20:39,430 Laat me gaan en deze te verwijderen. 420 00:20:39,430 --> 00:20:41,180 Nu, merken dat de bovenkant van mijn scherm is er 421 00:20:41,180 --> 00:20:42,890 een beetje rood licht in het tabblad aangeeft, 422 00:20:42,890 --> 00:20:45,047 hey, je hebt niet het bestand opgeslagen. 423 00:20:45,047 --> 00:20:47,880 Dus ik ga om te gaan met controle S of commando S, sla het bestand op. 424 00:20:47,880 --> 00:20:51,130 Nu goes-- ging voor een moment-- green. 425 00:20:51,130 --> 00:20:53,760 En nu is het terug naar gewoon een nauwe icoon. 426 00:20:53,760 --> 00:21:01,860 >> Als ik nu weer te lopen clanghello.c, Enter, dot slash, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 je zult zien dat het nog steeds gewerkt. 428 00:21:04,110 --> 00:21:06,020 Maar het is misschien wel een beetje buggy. 429 00:21:06,020 --> 00:21:08,714 Op dit moment, mijn prompt-- werkruimte, en dan dat dollarteken, 430 00:21:08,714 --> 00:21:10,880 en dan mijn werkelijke prompt-- is allemaal op dezelfde lijn. 431 00:21:10,880 --> 00:21:14,540 Dus dit zeker een esthetische bug, ook al is het niet echt een logische bug. 432 00:21:14,540 --> 00:21:16,250 >> Dus ik ga om ongedaan te maken wat ik net deed. 433 00:21:16,250 --> 00:21:18,560 Ik ga a.out opnieuw uit te voeren. 434 00:21:18,560 --> 00:21:22,710 Let op, ik heb toegevoegd de newline karakter terug. 435 00:21:22,710 --> 00:21:24,280 Ik heb het bestand opgeslagen. 436 00:21:24,280 --> 00:21:31,630 >> Dus ik ga a.out opnieuw uit te voeren, en-- dammit, een bug, een bug betekent vergissing. 437 00:21:31,630 --> 00:21:35,020 Dus de bug is dat hoewel Ik voegde de backslash n daar, 438 00:21:35,020 --> 00:21:41,180 re-opgeslagen, opnieuw liep het programma, het gedrag was hetzelfde. 439 00:21:41,180 --> 00:21:42,640 Waarom zou dat zijn? 440 00:21:42,640 --> 00:21:43,910 >> Ik mis een stap, toch? 441 00:21:43,910 --> 00:21:47,620 Die belangrijke stap eerder was dat je hebt to-- wanneer u uw source code te wijzigen, 442 00:21:47,620 --> 00:21:49,610 het blijkt ook draaien het door de compiler 443 00:21:49,610 --> 00:21:51,102 weer zo krijg je nieuwe machine code. 444 00:21:51,102 --> 00:21:52,810 En de machine code, de nullen en enen, 445 00:21:52,810 --> 00:21:56,260 zullen bijna identiek zijn, maar niet perfect, want we nodig hebben, 446 00:21:56,260 --> 00:21:57,510 natuurlijk, dat nieuwe regel. 447 00:21:57,510 --> 00:22:02,640 >> Dus om dit op te lossen, ga ik nodig naar clanghello.c opnieuw uit te voeren, in te voeren, dot 448 00:22:02,640 --> 00:22:03,800 slash, a.out. 449 00:22:03,800 --> 00:22:08,402 En nu, hello wereld is terug naar waar ik verwacht dat het is. 450 00:22:08,402 --> 00:22:09,610 Dus dit is allemaal prima en goed. 451 00:22:09,610 --> 00:22:13,150 Maar a.out is een vrij domme naam voor een programma, hoewel het zo uitkomt 452 00:22:13,150 --> 00:22:16,530 om historische redenen, de default-- betekent assemblage uitgangen. 453 00:22:16,530 --> 00:22:20,780 >> Maar laat me hier ga je gang en anders doen dit. 454 00:22:20,780 --> 00:22:24,760 Ik wil dat mijn programma Hello World om daadwerkelijk te hello genoemd. 455 00:22:24,760 --> 00:22:28,320 Dus als het ware een icoon op mijn desktop, zou het niet worden a.out. 456 00:22:28,320 --> 00:22:29,730 Het zou hallo genoemd. 457 00:22:29,730 --> 00:22:33,660 >> Dus om dit te doen, zo blijkt dat Clang, net als vele programma's, 458 00:22:33,660 --> 00:22:37,980 ondersteunt command line argumenten, of vlaggen, of schakelaars, 459 00:22:37,980 --> 00:22:39,600 die eenvoudig te beïnvloeden zijn gedrag. 460 00:22:39,600 --> 00:22:45,160 In het bijzonder, Clang ondersteunt een streepje o vlag, die vervolgens met een tweede woord. 461 00:22:45,160 --> 00:22:48,190 In dit geval zal ik willekeurig, maar redelijk, noem het hello. 462 00:22:48,190 --> 00:22:50,710 Maar ik zou kunnen noemen om het even wat Ik wil, behalve a.out, die 463 00:22:50,710 --> 00:22:52,390 plaats naast het punt zou zijn. 464 00:22:52,390 --> 00:22:55,640 >> En dan gewoon geeft u de naam van het bestand dat ik wil compileren. 465 00:22:55,640 --> 00:22:59,190 Dus nu ook al aan het begin van de opdracht heb ik nog steeds Clang, 466 00:22:59,190 --> 00:23:01,410 Aan het einde van de opdracht Ik heb nog steeds de bestandsnaam, 467 00:23:01,410 --> 00:23:05,520 Ik heb nu deze command line argumenten, deze vlaggen die zeggen, 468 00:23:05,520 --> 00:23:11,180 oh, door de manier, output-o, een bestand riep hallo, niet de standaard a.out. 469 00:23:11,180 --> 00:23:13,810 >> Dus als ik druk op Enter nu, niets lijkt te zijn gebeurd. 470 00:23:13,810 --> 00:23:17,900 En toch, nu kan ik dot slash doen hallo. 471 00:23:17,900 --> 00:23:19,089 Dus het is hetzelfde programma. 472 00:23:19,089 --> 00:23:21,380 De nullen en enen zijn identiek aan het eind van de dag. 473 00:23:21,380 --> 00:23:24,210 >> Maar ze zijn in twee verschillende files-- a.out, 474 00:23:24,210 --> 00:23:26,490 dat de eerste versie en gewoon dom genoemd, 475 00:23:26,490 --> 00:23:30,250 en nu hallo, wat een veel aantrekkelijker naam voor een programma. 476 00:23:30,250 --> 00:23:33,195 Maar, eerlijk gezegd, ik ben nooit gaat dit opnieuw te herinneren, 477 00:23:33,195 --> 00:23:34,070 en opnieuw, en opnieuw. 478 00:23:34,070 --> 00:23:36,411 En, eigenlijk, als we schrijven meer ingewikkelde programma's, 479 00:23:36,411 --> 00:23:38,160 de opdrachten die u bent gaat te hebben om te schrijven 480 00:23:38,160 --> 00:23:40,920 gaan om wraak te nemen meer gecompliceerd nog steeds. 481 00:23:40,920 --> 00:23:41,940 >> En dus geen zorgen te maken. 482 00:23:41,940 --> 00:23:46,220 Het blijkt dat mensen eerder wij hebben ook zij gerealiseerd 483 00:23:46,220 --> 00:23:47,530 had exact hetzelfde probleem. 484 00:23:47,530 --> 00:23:50,900 Ook zij vond het niet te hoeven typt vrij lang, geheimzinnige commando's, 485 00:23:50,900 --> 00:23:52,200 laat staan ​​hen herinneren. 486 00:23:52,200 --> 00:23:56,070 En dus mensen vóór ons hebben gemaakt Software die het makkelijker 487 00:23:56,070 --> 00:23:57,670 om uw software te compileren. 488 00:23:57,670 --> 00:24:01,609 >> En inderdaad een dergelijke programma heet te maken. 489 00:24:01,609 --> 00:24:03,150 Dus ik ga om te gaan en dit te doen. 490 00:24:03,150 --> 00:24:05,691 Ik ga alles ongedaan te maken I net deed op de volgende manier. 491 00:24:05,691 --> 00:24:07,690 Laat me het type LS. 492 00:24:07,690 --> 00:24:10,980 En je zult merken drie things-- a.out, en een ster, hello 493 00:24:10,980 --> 00:24:12,810 en een ster, en hello.c. 494 00:24:12,810 --> 00:24:14,730 Hopelijk moet dit een beetje intuïtief, 495 00:24:14,730 --> 00:24:18,220 voorzover eerder was niets in deze werkruimte. 496 00:24:18,220 --> 00:24:21,240 Er was niets dat ik had gemaakt totdat we klasse begonnen. 497 00:24:21,240 --> 00:24:22,840 >> En ik heb gemaakt hello.c. 498 00:24:22,840 --> 00:24:24,544 dan heb ik gecompileerd, en noemde het a.out. 499 00:24:24,544 --> 00:24:27,460 En vervolgens samengesteld ik het weer licht anders en noemde het hallo. 500 00:24:27,460 --> 00:24:32,830 Dus ik heb drie bestanden in deze map, in deze map genaamd Workspace. 501 00:24:32,830 --> 00:24:35,005 Nu, ik kan zien dat ook als ik uitzoomen eigenlijk. 502 00:24:35,005 --> 00:24:37,530 >> Als ik hier te zoomen en kijk naar die rechtsboven 503 00:24:37,530 --> 00:24:39,940 hoek, zoals beloofd de linker kant van het scherm 504 00:24:39,940 --> 00:24:42,990 gaat altijd om te laten zien wat er in je account, wat is 505 00:24:42,990 --> 00:24:44,790 binnenkant van CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 En er is drie bestanden daar. 507 00:24:46,680 --> 00:24:49,070 >> Dus ik wil om zich te ontdoen van a.out en hallo. 508 00:24:49,070 --> 00:24:51,275 En zoals je misschien stel intuïtief, je 509 00:24:51,275 --> 00:24:53,400 kan sorteren of control click of klik met de rechtermuisknop op dit punt. 510 00:24:53,400 --> 00:24:54,590 En deze kleine menu verschijnt. 511 00:24:54,590 --> 00:24:57,170 U kunt het bestand te downloaden, lopen het, een voorbeeld van het, vernieuwen, hernoemen, 512 00:24:57,170 --> 00:24:57,700 of wat al niet. 513 00:24:57,700 --> 00:25:00,260 >> En ik kon gewoon verwijderen, en het zou weggaan. 514 00:25:00,260 --> 00:25:05,260 Maar laten we dingen doen met een opdracht lijn voor nu, om zo comfortabel te krijgen 515 00:25:05,260 --> 00:25:07,010 met dit, en doe het volgende. 516 00:25:07,010 --> 00:25:12,345 Ik ga om te gaan en te verwijderen a.out door te typen letterlijk rma.out. 517 00:25:12,345 --> 00:25:14,890 Het blijkt, de opdracht voor verwijderen of iets te verwijderen, 518 00:25:14,890 --> 00:25:16,280 is niet te verwijderen of te verwijderen. 519 00:25:16,280 --> 00:25:21,260 >> Het is beknopter RM, gewoon om te besparen u enkele toetsaanslagen, en druk op Enter. 520 00:25:21,260 --> 00:25:24,707 Nu gaan we wat te zijn cryptisch verwijderen reguliere file a.out. 521 00:25:24,707 --> 00:25:27,040 Ik weet niet echt wat een onregelmatige bestand nog zou zijn. 522 00:25:27,040 --> 00:25:28,660 Maar ik wil om het te verwijderen. 523 00:25:28,660 --> 00:25:30,150 >> Dus ik ga naar het type van Y voor ja. 524 00:25:30,150 --> 00:25:31,940 Of ik kon het uittypen, en druk op Enter. 525 00:25:31,940 --> 00:25:33,440 En, nogmaals, niets lijkt te gebeuren. 526 00:25:33,440 --> 00:25:35,840 Maar dat is, over het algemeen, een goede zaak. 527 00:25:35,840 --> 00:25:40,490 >> Als ik LS typ deze keer, wat moet ik zien? 528 00:25:40,490 --> 00:25:44,930 Hopelijk gewoon hallo en hello.c. 529 00:25:44,930 --> 00:25:47,286 Nu, als een terzijde, zul je merkt deze ster, sterretje, 530 00:25:47,286 --> 00:25:48,660 dat aan het einde van mijn programma. 531 00:25:48,660 --> 00:25:50,201 En ze zijn ook weergegeven in het groen. 532 00:25:50,201 --> 00:25:53,970 Dat is gewoon CS50 IDE's weg van cluing je in het feit 533 00:25:53,970 --> 00:25:55,280 dat dat niet de broncode. 534 00:25:55,280 --> 00:25:58,880 Dat is een uitvoerbaar, een uitvoerbare programma dat je daadwerkelijk kunt draaien 535 00:25:58,880 --> 00:26:01,020 door het doen van dot slash, en dan is het de naam. 536 00:26:01,020 --> 00:26:05,860 >> Nu, laat me ga je gang en verwijder dit, rm hello, Enter, verwijderen regelmatige 537 00:26:05,860 --> 00:26:08,010 file hello, ja. 538 00:26:08,010 --> 00:26:11,180 En nu als ik typ LS, We zijn terug naar hello.c. 539 00:26:11,180 --> 00:26:13,917 Probeer niet te verwijderen van uw eigenlijke broncode. 540 00:26:13,917 --> 00:26:16,250 Ook al zijn er functies ingebouwd in CS50 IDE, waar 541 00:26:16,250 --> 00:26:19,870 kunt u via uw revisiegeschiedenis en terugspoelen in de tijd als je per ongeluk 542 00:26:19,870 --> 00:26:23,660 iets te verwijderen, doen rekening te houden volgens deze prompts ja of nee, 543 00:26:23,660 --> 00:26:25,381 van wat je eigenlijk wilt doen. 544 00:26:25,381 --> 00:26:27,380 En als ik ga naar de top linkerhoek hier, 545 00:26:27,380 --> 00:26:30,696 alles wat overblijft is hello.c. 546 00:26:30,696 --> 00:26:32,570 Dus er is trossen andere opdrachten die u 547 00:26:32,570 --> 00:26:37,550 kan uitvoeren in de wereld van Linux, een daarvan is, wederom, maken. 548 00:26:37,550 --> 00:26:40,180 En we gaan maken mijn programma nu als volgt uit. 549 00:26:40,180 --> 00:26:43,270 >> In plaats van het doen van Clang, in plaats van het doen van clang-o, 550 00:26:43,270 --> 00:26:45,860 Ik ga gewoon letterlijk type, merk hello. 551 00:26:45,860 --> 00:26:49,630 En nu ziet, ik ben niet typen maken hello.c. 552 00:26:49,630 --> 00:26:50,910 Ik ben het typen maken hallo. 553 00:26:50,910 --> 00:26:54,840 >> En dit programma te maken dat wordt geleverd met CS50 IDE, en nog veel meer 554 00:26:54,840 --> 00:26:57,090 meestal met Linux, is een programma dat 555 00:26:57,090 --> 00:26:59,120 gaat om een ​​programma genaamd Hallo te maken. 556 00:26:59,120 --> 00:27:03,680 En het gaat om aan te nemen, volgens afspraak, dat als dit programma kan worden gemaakt, 557 00:27:03,680 --> 00:27:09,030 het zal worden gemaakt van een bron code bestand dat eindigt op punt c, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Dus als ik druk op Enter nu, merken dat de opdracht die wordt uitgevoerd 559 00:27:12,210 --> 00:27:14,340 is eigenlijk nog langer eerder dan voorheen. 560 00:27:14,340 --> 00:27:16,670 En dat is omdat we hebben voorgeconfigureerde CS50 IDE te hebben 561 00:27:16,670 --> 00:27:19,878 een aantal extra functies ingebouwd in dat we nog gewoon niet nodig hebt, maar binnenkort wel. 562 00:27:19,878 --> 00:27:23,470 Maar het belangrijkste ding om te beseffen is nu heb ik een Hallo programma. 563 00:27:23,470 --> 00:27:27,080 >> Als ik typ LS nogmaals, ik hebben een hello programma. 564 00:27:27,080 --> 00:27:32,070 En ik kan het uit te voeren met dot slash a.out, nee, 565 00:27:32,070 --> 00:27:35,590 omdat het hele punt van deze oefening was dot slash hallo. 566 00:27:35,590 --> 00:27:38,089 En nu heb ik mijn programma Hello World. 567 00:27:38,089 --> 00:27:39,880 Dus vooruit, we bijna altijd gewoon 568 00:27:39,880 --> 00:27:42,088 gaan om onze programma's te compileren met de opdracht te maken. 569 00:27:42,088 --> 00:27:45,300 En dan gaan we ze uit te voeren door dot slash en de naam van het programma. 570 00:27:45,300 --> 00:27:49,610 Maar beseffen wat maken doet voor u, is het dan niet zelf een compiler. 571 00:27:49,610 --> 00:27:53,310 Het is gewoon een gemak programma die weet hoe je een compiler triggeren 572 00:27:53,310 --> 00:27:56,470 zo lopen dat je jezelf kunt gebruiken. 573 00:27:56,470 --> 00:28:00,220 >> Welke andere opdrachten bestaan Linux, en op zijn beurt de CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 We zullen snel zien dat er een CD commando Change Directory. 575 00:28:03,107 --> 00:28:05,190 Hierdoor kunt u binnen je command line interface 576 00:28:05,190 --> 00:28:07,610 om vooruit te komen, en weer terug, en open verschillende mappen 577 00:28:07,610 --> 00:28:08,860 zonder gebruik te maken van uw muis. 578 00:28:08,860 --> 00:28:12,470 >> LS we zagen, wat staat voor lijst de bestanden in de huidige directory. 579 00:28:12,470 --> 00:28:14,650 Maak Dir, kunt u waarschijnlijk beginnen te concluderen 580 00:28:14,650 --> 00:28:18,150 wat deze betekenen now-- directory te maken, als je wilt naar een map te maken. 581 00:28:18,150 --> 00:28:21,270 RM voor verwijdert, RM Dir voor verwijderen directory-- en deze, 582 00:28:21,270 --> 00:28:24,160 nogmaals, zijn de command line equivalenten van wat je 583 00:28:24,160 --> 00:28:26,945 kon doen in CS50 IDE met je muis. 584 00:28:26,945 --> 00:28:28,820 Maar je zult al snel merken dat soms is het gewoon 585 00:28:28,820 --> 00:28:30,610 een stuk sneller te doen dingen met een toetsenbord, 586 00:28:30,610 --> 00:28:33,690 en uiteindelijk een stuk krachtiger. 587 00:28:33,690 --> 00:28:36,440 >> Maar het is moeilijk om te betogen dat alles wat we hebben gedaan tot nu toe 588 00:28:36,440 --> 00:28:39,990 is alles wat krachtig, wanneer alle wij hebben gezegd is, hello wereld. 589 00:28:39,990 --> 00:28:43,740 En, in feite, ik hardcoded de woorden hello wereld in mijn programma. 590 00:28:43,740 --> 00:28:45,530 Er is nog geen dynamiek. 591 00:28:45,530 --> 00:28:49,320 Scratch was een orde van grootte interessanter vorige week. 592 00:28:49,320 --> 00:28:51,220 >> En dus laten we daar te komen. 593 00:28:51,220 --> 00:28:55,310 Laten we eens een stap in de richting die door manier van sommige van deze functies. 594 00:28:55,310 --> 00:28:59,470 Dus niet alleen C worden geleverd met printf, en bossen van andere functies 595 00:28:59,470 --> 00:29:01,850 waarvan sommige we zullen zien na verloop van tijd, is het niet 596 00:29:01,850 --> 00:29:05,760 maken het allemaal zo gemakkelijk direct uit van de poort bij het verkrijgen van gebruikersinvoer. 597 00:29:05,760 --> 00:29:08,140 >> In feite is één van de tekortkomingen van talen als C, 598 00:29:08,140 --> 00:29:10,140 en zelfs Java en toch anderen, is dat het niet doet 599 00:29:10,140 --> 00:29:15,860 maken het gemakkelijk om gewoon dingen zoals gehele getallen van gebruikers of koorden, woorden, 600 00:29:15,860 --> 00:29:19,970 en zinnen, laat staan ​​zaken als floating point waarden, of reële getallen 601 00:29:19,970 --> 00:29:23,240 met cijfers na de komma, en echt lange nummers, zoals we binnenkort zullen zien. 602 00:29:23,240 --> 00:29:27,000 Dus deze lijst met functies hier, deze zijn net als andere Scratch puzzelstukjes 603 00:29:27,000 --> 00:29:31,090 die we hebben vooraf geïnstalleerd in CS50 IDE die we zullen gebruiken voor een paar weken 604 00:29:31,090 --> 00:29:34,010 als zijwieltjes van soorten, en uiteindelijk nemen ze af, en kijk 605 00:29:34,010 --> 00:29:37,210 onder de motorkap, misschien op hoe deze dingen worden toegepast. 606 00:29:37,210 --> 00:29:40,460 >> Maar om dit te doen, laten we eigenlijk een programma schrijven. 607 00:29:40,460 --> 00:29:41,770 Laat me nu ga je gang. 608 00:29:41,770 --> 00:29:44,750 En ik ga een nieuw te creëren bestand door te klikken op deze kleine plus, 609 00:29:44,750 --> 00:29:45,970 en te klikken op Nieuw bestand. 610 00:29:45,970 --> 00:29:49,250 >> Ik ga naar deze volgende besparen een als, laten we zeggen, string.c, 611 00:29:49,250 --> 00:29:50,750 want ik wil spelen met strijkers. 612 00:29:50,750 --> 00:29:53,990 En string in de C is gewoon een reeks tekens. 613 00:29:53,990 --> 00:29:56,090 Dus laten we nu doorgaan en doe het volgende. 614 00:29:56,090 --> 00:30:01,204 >> Zijn standaard IO.h-- en het blijkt standaard IO, 615 00:30:01,204 --> 00:30:03,360 IO betekent gewoon input en output. 616 00:30:03,360 --> 00:30:05,920 Dus het blijkt dat deze lijn hier is wat 617 00:30:05,920 --> 00:30:08,140 wordt het naastgelegen ons printf gebruiken. 618 00:30:08,140 --> 00:30:10,410 Printf natuurlijk uitvoer levert. 619 00:30:10,410 --> 00:30:15,000 Dus om printf gebruiken, zo blijkt out moet je deze regel code hebben 620 00:30:15,000 --> 00:30:16,040 op de top van uw dossier. 621 00:30:16,040 --> 00:30:18,456 >> En we zullen terugkomen naar wat dat betekent echt het duurde niet lang. 622 00:30:18,456 --> 00:30:20,400 Het blijkt dat in elke C programma dat ik schrijf, 623 00:30:20,400 --> 00:30:23,640 Ik heb om het te starten met code die er zo uitziet. 624 00:30:23,640 --> 00:30:26,860 En je zult merken CS50 IDE, en andere geïntegreerde ontwikkeling 625 00:30:26,860 --> 00:30:30,050 omgevingen zoals het, gaan zo goed proberen 626 00:30:30,050 --> 00:30:31,780 ze kunnen om je gedachten af ​​te maken. 627 00:30:31,780 --> 00:30:35,930 In feite, een ogenblik geleden als ik het ongedaan maken wat ik net deed, ik druk op Enter. 628 00:30:35,930 --> 00:30:39,160 >> Ik raak geopend krullend brace, sloeg weer op Enter. 629 00:30:39,160 --> 00:30:40,430 En het klaar met mijn gedachte. 630 00:30:40,430 --> 00:30:45,140 Het gaf me een nieuwe regel, ingesprongen niet minder voor sfeervolle stilistische redenen zien we wel. 631 00:30:45,140 --> 00:30:48,559 En dan is het automatisch gaf me dat accolade aan mijn gedachten af ​​te maken. 632 00:30:48,559 --> 00:30:50,600 Nu, is het niet altijd raden wat je wilt doen. 633 00:30:50,600 --> 00:30:53,620 Maar grotendeels, doet bespaart u toetsaanslagen. 634 00:30:53,620 --> 00:30:59,560 Dus even geleden, liepen we dit program-- hello, wereld, en dan gecompileerd, 635 00:30:59,560 --> 00:31:00,460 en dan liep het. 636 00:31:00,460 --> 00:31:01,867 Maar er is geen dynamiek hier. 637 00:31:01,867 --> 00:31:03,700 Wat als we wilden iets anders te doen? 638 00:31:03,700 --> 00:31:07,630 Nou, wat als ik wilde eigenlijk krijgen een string van de gebruiker? 639 00:31:07,630 --> 00:31:11,250 Ik ga een puzzelstukje te gebruiken riep precies dat-- snaar te krijgen. 640 00:31:11,250 --> 00:31:15,860 >> Blijkt in C dat als je niet wilt een bijdrage te leveren aan een puzzelstukje, 641 00:31:15,860 --> 00:31:19,360 of meer naar behoren aan een functie, je letterlijk gewoon open haakje, 642 00:31:19,360 --> 00:31:20,430 haakje sluiten. 643 00:31:20,430 --> 00:31:25,540 Dus het is alsof er geen witte doos te typen in. 644 00:31:25,540 --> 00:31:27,720 De inspraak blok vóór had een kleine witte doos. 645 00:31:27,720 --> 00:31:29,660 We nu niet hebben dat witte doos. 646 00:31:29,660 --> 00:31:33,310 >> Maar als ik bel get koord, I willen het resultaat ergens te zetten. 647 00:31:33,310 --> 00:31:37,680 Dus een veel voorkomende paradigma in C is bel een functie, zoals get touwtje hier, 648 00:31:37,680 --> 00:31:41,070 en bewaar de return waarde. 649 00:31:41,070 --> 00:31:44,450 Het is het gevolg van de inspanning in iets. 650 00:31:44,450 --> 00:31:47,630 >> En wat is de bouwen in de programmering, 651 00:31:47,630 --> 00:31:53,450 hetzij in Scratch of nu C, dat we kunnen gebruiken om daadwerkelijk iets te slaan? 652 00:31:53,450 --> 00:31:55,990 Noemde het een variabele, toch? 653 00:31:55,990 --> 00:32:00,320 En in Scratch, dat doen we niet echt schelen wat er gaande was in variabelen. 654 00:32:00,320 --> 00:32:02,170 >> Maar in dit geval, we eigenlijk doen. 655 00:32:02,170 --> 00:32:03,719 Ik ga naar een string te zeggen. 656 00:32:03,719 --> 00:32:05,510 En toen kon ik noem dit wat ik wil. 657 00:32:05,510 --> 00:32:08,340 Ik ga noemen naam, krijgt te krijgen string. 658 00:32:08,340 --> 00:32:10,250 >> En nu zelfs als je een beetje new to this, 659 00:32:10,250 --> 00:32:11,984 opmerken dat ik weinig detail. 660 00:32:11,984 --> 00:32:13,150 Ik ben het vergeten van een puntkomma. 661 00:32:13,150 --> 00:32:14,400 Ik moet deze gedachte af te maken. 662 00:32:14,400 --> 00:32:17,480 Dus ik ga mijn cursor te verplaatsen, en sloeg puntkomma daar. 663 00:32:17,480 --> 00:32:19,130 En wat heb ik net gedaan? 664 00:32:19,130 --> 00:32:21,440 In deze lijn van code, nummer 5 op dit moment, 665 00:32:21,440 --> 00:32:23,799 Ik bel get snaar zonder ingangen. 666 00:32:23,799 --> 00:32:26,090 Dus er is geen kleine witte doos zoals het blok Save heeft. 667 00:32:26,090 --> 00:32:28,590 >> Ik zeg alleen maar, hey, computer, geef me een string. 668 00:32:28,590 --> 00:32:31,390 Het isgelijkteken is niet echt een isgelijkteken, per se. 669 00:32:31,390 --> 00:32:33,790 Het is de opdracht operator, wat betekent, 670 00:32:33,790 --> 00:32:37,860 hey, computer, verplaats de waarde van rechts naar links. 671 00:32:37,860 --> 00:32:40,480 En in de linker, heb ik het volgende. 672 00:32:40,480 --> 00:32:43,580 >> Hey, computer, geef me een string-- een reeks tekens. 673 00:32:43,580 --> 00:32:45,637 En noem die string Name. 674 00:32:45,637 --> 00:32:47,220 En ik heb niet eens te noemen Naam. 675 00:32:47,220 --> 00:32:49,970 >> Ik zou kunnen noemen, conventioneel, zoiets als S, 676 00:32:49,970 --> 00:32:52,900 net zoals we gewend i te bellen met de variabele i. 677 00:32:52,900 --> 00:32:54,829 Maar nu moet ik iets mee doen. 678 00:32:54,829 --> 00:32:57,370 Het zou nogal dom te zijn probeer het samenstellen van deze code, hardlopen 679 00:32:57,370 --> 00:32:59,410 Dit programma, hoewel Ik krijg een string, 680 00:32:59,410 --> 00:33:01,580 want het is nog steeds gewoon gaan om hallo te zeggen wereld. 681 00:33:01,580 --> 00:33:06,140 >> Maar wat als ik wil dit veranderen. 682 00:33:06,140 --> 00:33:07,940 Waarom ik dit doe? 683 00:33:07,940 --> 00:33:11,632 Procent s, komma s. 684 00:33:11,632 --> 00:33:13,090 En dit is nog steeds een beetje cryptisch. 685 00:33:13,090 --> 00:33:15,560 >> Dus laat me mijn variabelen duidelijker te maken. 686 00:33:15,560 --> 00:33:17,510 Laat ik noem deze variabele Naam. 687 00:33:17,510 --> 00:33:20,230 En laten we kijken of we niet kunnen plagen behalve wat hier gebeurt. 688 00:33:20,230 --> 00:33:22,770 >> Dus op lijn vijf, krijg ik een string. 689 00:33:22,770 --> 00:33:25,620 En ik ben het opslaan van die string, ongeacht de gebruiker heeft getypt 690 00:33:25,620 --> 00:33:28,430 op zijn of haar toetsenbord, in een variabele met de naam naam. 691 00:33:28,430 --> 00:33:30,590 En het blijkt dat printf niet alleen 692 00:33:30,590 --> 00:33:34,220 neem een ​​argument in dubbel citaten, één ingang tussen dubbele aanhalingstekens. 693 00:33:34,220 --> 00:33:39,100 >> Het kan twee, of drie, of meer, zoals nemen dat de tweede of derde of vierde, 694 00:33:39,100 --> 00:33:42,320 zijn de namen van alle variabelen, of specifiek waarden, 695 00:33:42,320 --> 00:33:48,610 die u wilt aan te sluiten op, dynamisch, die string in aanhalingstekens. 696 00:33:48,610 --> 00:33:52,110 Met andere woorden, wat mis met deze zou zijn? 697 00:33:52,110 --> 00:33:57,920 Als ik net zei hello naam, backslash n, redde mijn dossier, opgesteld mijn code, 698 00:33:57,920 --> 00:34:01,660 en liep dit, wat er zou gebeuren? 699 00:34:01,660 --> 00:34:05,139 >> Het gaat gewoon om te zeggen, hello naam, letterlijk N-A-M-E, 700 00:34:05,139 --> 00:34:07,900 dat is een soort van dom omdat het is niet anders uit de wereldgeschiedenis. 701 00:34:07,900 --> 00:34:10,400 Dus alles tussen aanhalingstekens is wat letterlijk wordt afgedrukt. 702 00:34:10,400 --> 00:34:12,520 Dus als ik wil hebben een placeholder daar, 703 00:34:12,520 --> 00:34:14,422 Ik moet eigenlijk te gebruiken een aantal speciale syntax. 704 00:34:14,422 --> 00:34:17,380 En het blijkt dat als je leest het documentatie voor de printf functie, 705 00:34:17,380 --> 00:34:21,320 het zal u vertellen dat als je gebruik maakt procent s, 706 00:34:21,320 --> 00:34:23,920 U kunt een waarde vervangen als volgt. 707 00:34:23,920 --> 00:34:27,190 >> Na een komma daarna dubbele aanhalingstekens, je gewoon 708 00:34:27,190 --> 00:34:29,179 de naam van de variabele die u wilt 709 00:34:29,179 --> 00:34:33,790 aan te sluiten in dat formaat code, of format specifier, 710 00:34:33,790 --> 00:34:35,469 procent s voor strijkers. 711 00:34:35,469 --> 00:34:39,190 En nu als ik heb mijn bestand op te slaan, Ik ga terug naar mijn terminal. 712 00:34:39,190 --> 00:34:42,870 En ik typ Maak String, omdat wederom de naam van deze 713 00:34:42,870 --> 00:34:45,510 bestand dat ik koos voor is string.c. 714 00:34:45,510 --> 00:34:48,510 >> Dus ik ga zeggen Maak String, in te voeren. 715 00:34:48,510 --> 00:34:51,550 Oh mijn god, kijk naar alle de fouten die we al hebben gemaakt. 716 00:34:51,550 --> 00:34:55,540 En dat is-- wat, dit is echt zoals een zes, zeven line programma? 717 00:34:55,540 --> 00:34:57,790 Dus dit is waar het zeer kan snel overweldigend. 718 00:34:57,790 --> 00:35:00,890 >> Deze terminal venster heeft nu slechts uitgebraakt 719 00:35:00,890 --> 00:35:03,230 een groot aantal foutmeldingen. 720 00:35:03,230 --> 00:35:07,560 Zeker, heb ik niet meer fout berichten dan ik regels code. 721 00:35:07,560 --> 00:35:08,680 Dus wat is er aan de hand? 722 00:35:08,680 --> 00:35:10,920 >> Nou, de beste strategie om op elk moment heb je 723 00:35:10,920 --> 00:35:13,710 heb ontmoet een overweldigende lijst met fouten als dat, 724 00:35:13,710 --> 00:35:16,690 is terug te bladeren, op zoek naar het commando je gewoon liep, wat in mijn geval 725 00:35:16,690 --> 00:35:18,020 is het maken van string. 726 00:35:18,020 --> 00:35:21,630 Kijk naar wat maken deed, en dat is dat lang Clang bevel, geen big deal daar. 727 00:35:21,630 --> 00:35:22,950 >> Maar de rode is slecht. 728 00:35:22,950 --> 00:35:24,750 Groen probeert te vriendelijk en behulpzaam. 729 00:35:24,750 --> 00:35:26,140 Maar het is nog steeds slecht, in dit geval. 730 00:35:26,140 --> 00:35:27,510 Maar waar is het slecht? 731 00:35:27,510 --> 00:35:31,450 >> String.c, lijn vijf, karakter vijf. 732 00:35:31,450 --> 00:35:32,930 Dus dit is gewoon gezond conventie. 733 00:35:32,930 --> 00:35:36,060 Iets colon iets betekent lijnnummer en karakter nummer. 734 00:35:36,060 --> 00:35:41,080 Fout, het gebruik van niet-aangegeven identifier string. 735 00:35:41,080 --> 00:35:42,900 Bedoelde u standaard in bedoelt? 736 00:35:42,900 --> 00:35:45,530 >> Dus, helaas, Clang probeert om behulpzaam te zijn. 737 00:35:45,530 --> 00:35:46,850 Maar het is verkeerd, in dit geval. 738 00:35:46,850 --> 00:35:49,350 Nee, Clang, ik bedoelde niet standaard IO. 739 00:35:49,350 --> 00:35:51,070 Ik bedoelde dat op lijn één, ja. 740 00:35:51,070 --> 00:35:53,420 >> Maar lijn vijf is dit hier. 741 00:35:53,420 --> 00:35:57,040 En Clang niet begrijpen S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 Het is een gedeclareerde identifier, een word het gewoon nog nooit eerder gezien. 743 00:36:01,490 --> 00:36:05,730 En dat komt omdat C, de taal we zijn het schrijven van code in op dit moment, 744 00:36:05,730 --> 00:36:08,070 niet variabelen genoemd snaren. 745 00:36:08,070 --> 00:36:11,380 >> Het maakt niet standaard, steun zoiets als een string. 746 00:36:11,380 --> 00:36:16,750 Dat is een stuk van de CS50 jargon, maar zeer conventioneel. 747 00:36:16,750 --> 00:36:18,600 Maar ik kan dit als volgt op te lossen. 748 00:36:18,600 --> 00:36:22,090 >> Als ik voeg een regel code naar de top van dit programma, 749 00:36:22,090 --> 00:36:27,890 omvatten CS50.h, dat is een ander bestand ergens binnenkant van CS50 IDE, ergens 750 00:36:27,890 --> 00:36:30,820 op de harde schijf, om zo te zeggen, van het Ubuntu-besturingssysteem 751 00:36:30,820 --> 00:36:33,590 dat ik ben bijna, dat is het bestand dat is 752 00:36:33,590 --> 00:36:38,740 gaan naar de operatiekamer te onderwijzen systeem wat een string is, net 753 00:36:38,740 --> 00:36:41,930 als standaard io.h is het bestand in het besturingssysteem dat is 754 00:36:41,930 --> 00:36:44,430 gaan om het te leren wat printf is. 755 00:36:44,430 --> 00:36:46,810 >> Sterker nog, we zouden hebben gekregen een vergelijkbaar bericht 756 00:36:46,810 --> 00:36:50,600 Als IO standaard had toegegeven IO.h en probeerde te printf gebruiken. 757 00:36:50,600 --> 00:36:53,632 Dus ik ga je gang en gewoon gaan Take Control L naar mijn scherm te wissen. 758 00:36:53,632 --> 00:36:56,340 Of je kunt duidelijk typen en het zal gewoon duidelijk de terminal-venster. 759 00:36:56,340 --> 00:36:58,020 Maar je kunt nog steeds schuiven terug in de tijd. 760 00:36:58,020 --> 00:37:01,100 >> En ik ga opnieuw uit te voeren maken String. 761 00:37:01,100 --> 00:37:03,660 Kruis mijn vingers deze keer, Enter. 762 00:37:03,660 --> 00:37:05,380 Oh mijn god, het werkte. 763 00:37:05,380 --> 00:37:09,280 het toont me een lange cryptische opdracht dat is wat Zorg gegenereerd via Clang, 764 00:37:09,280 --> 00:37:10,460 maar geen foutmeldingen. 765 00:37:10,460 --> 00:37:12,460 Dus realiseren, terwijl je zou helemaal te krijgen 766 00:37:12,460 --> 00:37:14,480 overweldigd door de aantal foutmeldingen, 767 00:37:14,480 --> 00:37:17,540 het misschien gewoon dit vervelende cascading zijn effect, waarbij Clang niet begrijpt 768 00:37:17,540 --> 00:37:19,620 één ding, wat betekent dat het dan begrijpt niet het volgende woord, 769 00:37:19,620 --> 00:37:20,560 of de volgende regel. 770 00:37:20,560 --> 00:37:22,850 En zo is het gewoon verslikt zich in uw code. 771 00:37:22,850 --> 00:37:24,440 Maar de oplossing kan eenvoudig zijn. 772 00:37:24,440 --> 00:37:27,822 En dus altijd gericht op de allereerste regel uitvoer. 773 00:37:27,822 --> 00:37:29,530 En als je dat niet doet begrijpen, kijk maar 774 00:37:29,530 --> 00:37:32,480 voor zoekwoorden die zou kunnen zijn aanwijzingen, en het lijnnummer, 775 00:37:32,480 --> 00:37:34,650 en het karakter, waar de die fout zou kunnen zijn. 776 00:37:34,650 --> 00:37:40,328 >> Laat me nu ga je gang en typ dot slash, koord, in te voeren. 777 00:37:40,328 --> 00:37:44,340 Hm, het is niet te zeggen hallo niets. 778 00:37:44,340 --> 00:37:46,210 Waarom? 779 00:37:46,210 --> 00:37:48,170 Nou, herinneren, waar is het draait? 780 00:37:48,170 --> 00:37:53,730 >> Het is waarschijnlijk vast te zitten op het moment in een lus, als je wil, op lijn zes, 781 00:37:53,730 --> 00:37:56,950 omdat Get String door het ontwerp, geschreven door CS50 personeel, 782 00:37:56,950 --> 00:38:00,350 is letterlijk bedoeld om gewoon zitten daar te wachten, en wachten, 783 00:38:00,350 --> 00:38:01,850 en wachten op een koord. 784 00:38:01,850 --> 00:38:03,792 Alle bedoelen we door string is mensenwerk. 785 00:38:03,792 --> 00:38:04,500 Dus weet je wat? 786 00:38:04,500 --> 00:38:05,166 Laat me ga je gang. 787 00:38:05,166 --> 00:38:08,704 En net op een bevlieging, laat me typ mijn naam, David, in te voeren. 788 00:38:08,704 --> 00:38:10,120 Nu heb ik een meer dynamisch programma. 789 00:38:10,120 --> 00:38:11,240 Het zei, hallo David. 790 00:38:11,240 --> 00:38:16,280 >> Als ik ga je gang en voer dit opnieuw, laat me proberen zeggen Zamila, voer. 791 00:38:16,280 --> 00:38:17,940 En nu hebben we een dynamisch programma. 792 00:38:17,940 --> 00:38:19,380 Ik heb niet hard gecodeerde wereld. 793 00:38:19,380 --> 00:38:21,760 Ik heb niet hard gecodeerde te noemen, of David, of Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Nu is het veel meer als de programma's wij weten, waar als het te nemen input, 795 00:38:25,350 --> 00:38:27,870 produceert iets andere uitgang. 796 00:38:27,870 --> 00:38:31,020 Nu, dit is niet de beste user experience, of UX. 797 00:38:31,020 --> 00:38:33,000 Ik run het programma. 798 00:38:33,000 --> 00:38:35,830 >> Ik weet niet wat ik moet te doen, tenzij ik eigenlijk kijken 799 00:38:35,830 --> 00:38:37,290 of denk aan de broncode. 800 00:38:37,290 --> 00:38:39,640 Dus laten we de gebruiker ervaring een beetje beter 801 00:38:39,640 --> 00:38:41,240 met de eenvoudigste dingen. 802 00:38:41,240 --> 00:38:44,782 Laat me terug te gaan naar deze programma, en gewoon zeggen printf. 803 00:38:44,782 --> 00:38:48,870 >> En laat me ga je gang en zeg naam, dikke darm, en een spatie en vervolgens een puntkomma. 804 00:38:48,870 --> 00:38:51,170 En net voor de lol, geen speling n. 805 00:38:51,170 --> 00:38:52,980 En dat is opzettelijk, omdat ik niet wil 806 00:38:52,980 --> 00:38:54,590 de prompt om naar de volgende regel. 807 00:38:54,590 --> 00:38:58,800 >> Ik wil in plaats daarvan dit doen, maken koord mijn code in nieuwe machine opnieuw te compileren 808 00:38:58,800 --> 00:39:00,980 code dot slash string. 809 00:39:00,980 --> 00:39:02,460 Ah, dit is veel mooier. 810 00:39:02,460 --> 00:39:05,780 Nu heb ik eigenlijk weten wat de computer wil dat ik doe, geef het een naam. 811 00:39:05,780 --> 00:39:10,020 >> Dus ik ga om verder te gaan en typ in Rob, voer, en hallo, Rob. 812 00:39:10,020 --> 00:39:13,640 Dus, realiseren, dit nog steeds aan het einde van de dag, slechts negen line programma. 813 00:39:13,640 --> 00:39:15,090 Maar we hebben deze kleine stapjes genomen. 814 00:39:15,090 --> 00:39:18,380 >> We schreven een regel waarmee we waren bekend, printf, hello wereld. 815 00:39:18,380 --> 00:39:19,980 Dan ongedaan we een beetje van dat. 816 00:39:19,980 --> 00:39:21,560 En we eigenlijk wennen string. 817 00:39:21,560 --> 00:39:23,362 En we gooiden die waarde in een variabele. 818 00:39:23,362 --> 00:39:26,070 En toen gingen we verder en verbeterd het verder met een derde lijn. 819 00:39:26,070 --> 00:39:29,220 En dit iteratieve proces het schrijven van software is echt sleutel. 820 00:39:29,220 --> 00:39:33,420 In CS50, en in het leven in het algemeen, moet je over het algemeen niet zitten, 821 00:39:33,420 --> 00:39:36,800 hebben een programma in het achterhoofd, en probeer het schrijven de hele verdomde ding allemaal tegelijk. 822 00:39:36,800 --> 00:39:40,810 >> Het zal onvermijdelijk leiden tot manier meer fouten dan wij ons hier zagen. 823 00:39:40,810 --> 00:39:44,070 Zelfs ik, tot op de dag, voortdurend maak andere domme fouten, 824 00:39:44,070 --> 00:39:47,480 zijn eigenlijk moeilijker fouten die zijn moeilijker te achterhalen. 825 00:39:47,480 --> 00:39:52,095 Maar u zult meer fouten meer maken regels code schrijf je alles in één keer. 826 00:39:52,095 --> 00:39:54,220 En dus is deze praktijk, Schrijf een klein stukje code 827 00:39:54,220 --> 00:39:57,930 dat je prettig bij voelt, compileren het, voer het uit, test het meer in het algemeen, 828 00:39:57,930 --> 00:40:01,370 verplaats on-- dus net als wij blijven gelaagdheid en gelaagdheid van vorige week, 829 00:40:01,370 --> 00:40:04,190 het bouwen van iets heel eenvoudig iets ingewikkelder, 830 00:40:04,190 --> 00:40:05,200 hier doen hetzelfde. 831 00:40:05,200 --> 00:40:08,500 Ga niet zitten, en probeer te schrijf een hele probleem. 832 00:40:08,500 --> 00:40:10,780 Eigenlijk neem deze kleine stapjes. 833 00:40:10,780 --> 00:40:15,100 >> Nu, strings zijn niet allemaal die bruikbaar zijn op zich. 834 00:40:15,100 --> 00:40:18,210 We zouden eigenlijk, idealiter, was gelijk hebben iets anders in onze toolkit. 835 00:40:18,210 --> 00:40:20,990 Dus laten we eigenlijk precies dat te doen. 836 00:40:20,990 --> 00:40:24,900 >> Laat me nu ga je gang en zweep een iets ander programma. 837 00:40:24,900 --> 00:40:28,320 En we zullen dit int.c noemen, want integer. 838 00:40:28,320 --> 00:40:30,870 Ik ga, net, omvatten CS550.h. 839 00:40:30,870 --> 00:40:33,060 Ik ga standaard IO bevatten. 840 00:40:33,060 --> 00:40:36,630 En dat gaat vrij normaal te zijn in deze eerste dagen van de klas. 841 00:40:36,630 --> 00:40:39,050 >> En ik ga klaar mij met een hoofdfunctie. 842 00:40:39,050 --> 00:40:43,370 En nu in plaats van om een ​​koord, laten we ga je gang en krijg een int. 843 00:40:43,370 --> 00:40:49,285 Laten we noemen het i, en noemen het krijgen int, dicht parens, puntkomma. 844 00:40:49,285 --> 00:40:51,410 En laten we nu doen iets mee, printf. 845 00:40:51,410 --> 00:40:56,190 >> Laten we zeggen dat iets dergelijks hello, backslash n, komma i. 846 00:40:56,190 --> 00:41:00,010 Dus ik ben vrij veel nabootsen wat ik deed slechts een moment geleden. 847 00:41:00,010 --> 00:41:01,660 Ik heb een placeholder hier. 848 00:41:01,660 --> 00:41:05,150 Ik heb ik hier komma, want ik wil tot ik de stekker in die placeholder. 849 00:41:05,150 --> 00:41:07,250 >> Dus laten we gaan vooruit en proberen het samenstellen van dit programma. 850 00:41:07,250 --> 00:41:10,060 Het bestand heet int.c. 851 00:41:10,060 --> 00:41:12,920 Dus ik ga zeggen, maken int, in te voeren. 852 00:41:12,920 --> 00:41:16,420 Oh, mijn God, maar geen big deal, toch? 853 00:41:16,420 --> 00:41:17,230 Er is een vergissing. 854 00:41:17,230 --> 00:41:19,810 >> Er is een syntactische fout hier zodanig dat het programma niet kan 855 00:41:19,810 --> 00:41:25,460 worden opgesteld binnen int.c, lijn zeven, karakter 27, error-formaat 856 00:41:25,460 --> 00:41:28,400 specificeert het type char ster, wat dat ook is. 857 00:41:28,400 --> 00:41:30,020 Maar het argument type is int. 858 00:41:30,020 --> 00:41:33,110 >> Dus ook hier, we gaan niet to-- ook al is vandaag de dag is veel materiaal, 859 00:41:33,110 --> 00:41:35,710 we gaan je overdonderen met absoluut elke eigenschap van C, 860 00:41:35,710 --> 00:41:38,070 en programmeren algemeen, in alleen deze eerste paar weken. 861 00:41:38,070 --> 00:41:40,400 Dus er wordt vaak gaat worden jargon waarmee je niet vertrouwd bent. 862 00:41:40,400 --> 00:41:43,350 En inderdaad, char ster iets we gaan om terug te komen 863 00:41:43,350 --> 00:41:44,830 in een week of twee de tijd. 864 00:41:44,830 --> 00:41:47,530 >> Maar voor nu, laten we eens kijken of we kunnen ontleden woorden die vertrouwd zijn. 865 00:41:47,530 --> 00:41:50,750 Formats-- dus hoorden we formaat specifier, formaat code voor. 866 00:41:50,750 --> 00:41:51,840 Dat is bekend. 867 00:41:51,840 --> 00:41:53,840 Motortype- maar het argument type int. 868 00:41:53,840 --> 00:41:55,980 Wacht even, ik is een int. 869 00:41:55,980 --> 00:41:59,230 >> Misschien procent s eigenlijk heeft een aantal gedefinieerde betekenis. 870 00:41:59,230 --> 00:42:00,230 En inderdaad doet. 871 00:42:00,230 --> 00:42:03,101 Een geheel getal, als je wilt printf om het te vervangen, 872 00:42:03,101 --> 00:42:05,350 je eigenlijk een te gebruiken ander formaat specifier. 873 00:42:05,350 --> 00:42:06,890 En je zou niet weten tenzij iemand die je verteld, 874 00:42:06,890 --> 00:42:07,973 of je had het al eerder gedaan. 875 00:42:07,973 --> 00:42:10,490 Maar procent i is wat kan gewoonlijk worden gebruikt 876 00:42:10,490 --> 00:42:12,240 in printf voor het aansluiten van een integer. 877 00:42:12,240 --> 00:42:14,920 U kunt ook gebruik maken procent d voor een decimale integer. 878 00:42:14,920 --> 00:42:16,490 Maar ik is mooi en eenvoudig hier. 879 00:42:16,490 --> 00:42:17,590 Dus we gaan mee. 880 00:42:17,590 --> 00:42:21,160 >> Laat me nu ga je gang en herhaling make int, Enter. 881 00:42:21,160 --> 00:42:23,328 Dat is goed, geen fouten. 882 00:42:23,328 --> 00:42:27,260 Dot slash int-- OK, slechte gebruikerservaring, omdat ik mezelf niet heb verteld 883 00:42:27,260 --> 00:42:27,760 wat moeten we doen. 884 00:42:27,760 --> 00:42:28,426 Maar dat is prima. 885 00:42:28,426 --> 00:42:29,480 Ik ben het vangen op snel. 886 00:42:29,480 --> 00:42:36,260 >> En nu laat ik ga je gang en Typ in David, OK, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 OK, dus dit is een goede zaak. 888 00:42:37,820 --> 00:42:41,710 Deze keer, ik ben met behulp van een functie, een stukje van de puzzel, de zogenaamde get int. 889 00:42:41,710 --> 00:42:44,230 En het blijkt out-- en we zullen zie deze later in de term-- 890 00:42:44,230 --> 00:42:47,730 de CS50 personeel heeft geïmplementeerd krijgen snaar zodanig 891 00:42:47,730 --> 00:42:50,350 dat het zal alleen fysiek krijgen een string voor je. 892 00:42:50,350 --> 00:42:54,340 >> Het is get int geïmplementeerd in zodanig dat het zal alleen 893 00:42:54,340 --> 00:42:55,590 krijgen een geheel voor u. 894 00:42:55,590 --> 00:42:57,830 En als je, de mens, niet meewerken, het is 895 00:42:57,830 --> 00:43:00,590 letterlijk gewoon gaan zeggen opnieuw te proberen, opnieuw proberen, opnieuw proberen, 896 00:43:00,590 --> 00:43:05,200 letterlijk zitten looping, totdat je verplichten met een aantal magische getal, 897 00:43:05,200 --> 00:43:07,670 zoals 50, en hallo 50. 898 00:43:07,670 --> 00:43:11,440 >> Of als we lopen dit opnieuw en typ in 42, 42 hello. 899 00:43:11,440 --> 00:43:15,750 En dus is de get int functie binnenkant van dat stukje van de puzzel 900 00:43:15,750 --> 00:43:19,050 is genoeg logica, genoeg gedachte, om erachter te komen, wat is een woord? 901 00:43:19,050 --> 00:43:20,330 En wat is een getal? 902 00:43:20,330 --> 00:43:23,165 Alleen accepteren uiteindelijk getallen. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Zo blijkt dat is niet zo expressief. 905 00:43:30,230 --> 00:43:30,910 dusver. 906 00:43:30,910 --> 00:43:33,690 Dus, yay, laatste keer dat we ging vrij snel 907 00:43:33,690 --> 00:43:38,320 in de uitvoering van games, en animatie, en artistieke werken in Scratch. 908 00:43:38,320 --> 00:43:42,260 En hier zijn we tevreden zijn met hello wereld, en hallo 50. 909 00:43:42,260 --> 00:43:43,696 >> Het is niet zo inspirerend. 910 00:43:43,696 --> 00:43:46,070 En inderdaad, deze eerste voorbeelden zal enige tijd duren 911 00:43:46,070 --> 00:43:47,510 om oprit in opwinding. 912 00:43:47,510 --> 00:43:49,854 Maar we hebben nog veel meer controle nu, in feite. 913 00:43:49,854 --> 00:43:51,770 En we gaan zeer snel aan de slag gelaagdheid 914 00:43:51,770 --> 00:43:53,870 op de top van deze fundamentele primitieven. 915 00:43:53,870 --> 00:43:56,370 >> Maar laten we eerst begrijpen wat beperkingen. 916 00:43:56,370 --> 00:43:58,620 In feite is een van de dingen Scratch niet gemakkelijk 917 00:43:58,620 --> 00:44:00,990 laten we doen is echt kijken onder de motorkap, 918 00:44:00,990 --> 00:44:03,740 en begrijpen wat een computer is, wat het kan doen, 919 00:44:03,740 --> 00:44:05,250 en wat de beperkingen zijn. 920 00:44:05,250 --> 00:44:08,580 En inderdaad, dat het gebrek aan begrip, potentieel op lange termijn 921 00:44:08,580 --> 00:44:12,520 kan leiden tot onze eigen mistakes-- schrijven bugs, het schrijven van onveilige software die 922 00:44:12,520 --> 00:44:13,880 wordt gehackt op een bepaalde manier. 923 00:44:13,880 --> 00:44:17,130 >> Dus laten we eens een paar stappen in de richting begrijpen dit een beetje beter door 924 00:44:17,130 --> 00:44:19,710 manier, zeg, het volgende voorbeeld. 925 00:44:19,710 --> 00:44:23,550 Ik ga om verder te gaan en uit te voeren echt snel een programma genaamd Adder. 926 00:44:23,550 --> 00:44:25,134 Net als, laten we een aantal nummers samen te voegen. 927 00:44:25,134 --> 00:44:27,800 En ik ga sommige bochten coderen hier, en gewoon kopiëren en plakken 928 00:44:27,800 --> 00:44:30,270 waar ik vroeger was, net dus we kunnen krijgen sneller gaan. 929 00:44:30,270 --> 00:44:33,090 Dus nu heb ik de basis begin kreeg van een programma genaamd Adder. 930 00:44:33,090 --> 00:44:34,670 >> En laten we gaan en dit te doen. 931 00:44:34,670 --> 00:44:38,680 Ik ga om te gaan en laten we zeggen, INTX krijgt krijgen int. 932 00:44:38,680 --> 00:44:39,430 En weet je wat? 933 00:44:39,430 --> 00:44:40,990 Laten we een betere gebruikerservaring. 934 00:44:40,990 --> 00:44:45,740 >> Dus laten we gewoon zeggen x is, en effectief vraagt ​​de gebruiker om ons x geven. 935 00:44:45,740 --> 00:44:50,600 En laat mij dan ga je gang en zeggen: printf wat dacht je van y is, deze keer verwacht 936 00:44:50,600 --> 00:44:53,140 twee waarden van de gebruiker. 937 00:44:53,140 --> 00:44:59,759 En dan laten we gewoon doorgaan en bijvoorbeeld printf, de som van x en y. 938 00:44:59,759 --> 00:45:01,300 En nu wil ik niet om procent s doen. 939 00:45:01,300 --> 00:45:09,080 Ik wil procent i doen, backslash n, en steek de stekker in somwaarde. 940 00:45:09,080 --> 00:45:10,620 >> Dus hoe kan ik dat doen? 941 00:45:10,620 --> 00:45:11,270 Weet je wat? 942 00:45:11,270 --> 00:45:12,840 Ik weet hoe ik variabelen. 943 00:45:12,840 --> 00:45:15,140 Laat me verklaren een nieuwe, int z. 944 00:45:15,140 --> 00:45:16,770 >> En ik ga een gok hier te nemen. 945 00:45:16,770 --> 00:45:21,470 Als er gelijk tekenen in deze taal, misschien kan ik gewoon x plus y doen, 946 00:45:21,470 --> 00:45:23,660 zolang ik uiteindelijk mijn dacht met een puntkomma? 947 00:45:23,660 --> 00:45:28,170 Nu kan ik terug gaan hier beneden, plug in z, eindigen deze gedachte met een puntkomma. 948 00:45:28,170 --> 00:45:33,160 En laten we nu zien, of deze sequenties van lines-- x krijgen int. 949 00:45:33,160 --> 00:45:34,770 Y krijgen int. 950 00:45:34,770 --> 00:45:37,980 >> Voeg x en y, slaan de waarde in z-- Dus nogmaals, denk aan de gelijk-teken 951 00:45:37,980 --> 00:45:38,560 is niet gelijk. 952 00:45:38,560 --> 00:45:41,100 Het is opdracht van rechts naar links. 953 00:45:41,100 --> 00:45:45,180 En laten we uitprinten dat de som van x en y niet letterlijk z, 954 00:45:45,180 --> 00:45:46,830 maar wat is de binnenkant van z. 955 00:45:46,830 --> 00:45:50,090 Dus laten we Adder - nice, geen fouten deze keer. 956 00:45:50,090 --> 00:45:53,030 Dot slash Adder, in te voeren, x gaat worden 1. 957 00:45:53,030 --> 00:45:55,380 >> Y gaat worden 2. 958 00:45:55,380 --> 00:45:58,964 En de som van x en y 3. 959 00:45:58,964 --> 00:46:00,130 Dus dat is allemaal prima en goed. 960 00:46:00,130 --> 00:46:03,260 >> Dus je zou denken dat wiskunde zou moeten werken in een programma als dit. 961 00:46:03,260 --> 00:46:04,040 Maar weet je wat? 962 00:46:04,040 --> 00:46:06,904 Is deze variabele, lijn 12, zelfs noodzakelijk? 963 00:46:06,904 --> 00:46:09,820 U hoeft niet in de gewoonte te krijgen van alleen het opslaan van dingen in de variabelen 964 00:46:09,820 --> 00:46:10,980 gewoon omdat je kunt. 965 00:46:10,980 --> 00:46:13,550 En, in feite, het is over het algemeen weloverwogen slecht ontwerp 966 00:46:13,550 --> 00:46:18,100 als je het creëren van een variabele, genaamd z in dat geval slaan iets in, 967 00:46:18,100 --> 00:46:21,390 en dan meteen het gebruik ervan, maar nooit weer. 968 00:46:21,390 --> 00:46:24,700 Waarom geven iets een naam als z als je letterlijk 969 00:46:24,700 --> 00:46:26,770 gaan gebruiken dat wat slechts een keer, en zo 970 00:46:26,770 --> 00:46:29,380 proximale naar de plaats waar u hebt gemaakt het in de eerste plaats, 971 00:46:29,380 --> 00:46:31,052 zo dicht in termen van regels code? 972 00:46:31,052 --> 00:46:31,760 Dus weet je wat? 973 00:46:31,760 --> 00:46:34,480 Het blijkt dat C is vrij flexibel. 974 00:46:34,480 --> 00:46:36,586 Als ik wil eigenlijk plug-in waarden hier, 975 00:46:36,586 --> 00:46:38,210 Ik heb geen behoefte aan een nieuwe variabele verklaren. 976 00:46:38,210 --> 00:46:41,680 Ik kon gewoon plug-in x plus y, omdat C begrijpt 977 00:46:41,680 --> 00:46:43,390 rekenkundige en wiskundige operatoren. 978 00:46:43,390 --> 00:46:47,140 >> Dus ik kan alleen maar zeggen, doe dit math, x plus y, welke deze waarden, 979 00:46:47,140 --> 00:46:50,780 Sluit de resulterende integer in die string. 980 00:46:50,780 --> 00:46:53,730 Dus dit zou kunnen zijn, hoewel slechts één lijn korter, 981 00:46:53,730 --> 00:46:58,480 een beter ontwerp, een beter programma, omdat er minder code, dus 982 00:46:58,480 --> 00:46:59,921 minder voor mij om te begrijpen. 983 00:46:59,921 --> 00:47:01,920 En het is ook gewoon schoner, voor zover we niet 984 00:47:01,920 --> 00:47:04,620 de invoering van nieuwe woorden, nieuwe symbolen, zoals z, 985 00:47:04,620 --> 00:47:07,510 ook al zijn ze niet echt serveren veel van een doel. 986 00:47:07,510 --> 00:47:12,890 >> Helaas, wiskunde is niet dat alles betrouwbaar soms. 987 00:47:12,890 --> 00:47:15,270 Laten we gaan en dit te doen. 988 00:47:15,270 --> 00:47:18,200 Ik ga om verder te gaan nu en doe het volgende. 989 00:47:18,200 --> 00:47:27,650 >> Laten we het doen printf, i procent, plus procent i, zal procent i, backslash n zijn. 990 00:47:27,650 --> 00:47:32,240 En ik ga dit-- xyx plus y doen. 991 00:47:32,240 --> 00:47:34,821 Dus ik ga gewoon herschrijven dit iets anders hier. 992 00:47:34,821 --> 00:47:36,320 Laat me gewoon een snel sanity check. 993 00:47:36,320 --> 00:47:37,986 Nogmaals, laten we niet vooruit lopen. 994 00:47:37,986 --> 00:47:41,420 Maak adder, dot slash adder. 995 00:47:41,420 --> 00:47:44,950 x is 1, y is 2, 1 plus 2 is 3. 996 00:47:44,950 --> 00:47:45,870 Dus dat is goed. 997 00:47:45,870 --> 00:47:49,060 Maar laten we nu compliceren deze een beetje, en het creëren van een nieuw bestand. 998 00:47:49,060 --> 00:47:53,350 >> Ik ga dit één noemen, zeggen, ints, meervoud van gehele getallen. 999 00:47:53,350 --> 00:47:55,980 Laat ik beginnen waar ik daarnet was. 1000 00:47:55,980 --> 00:47:57,770 Maar nu laten we een paar andere lijnen. 1001 00:47:57,770 --> 00:48:03,430 Laat me ga je gang en doe het volgende, printf, i procent, minus procent i, 1002 00:48:03,430 --> 00:48:08,959 is procent i, komma x, komma yx minus y. 1003 00:48:08,959 --> 00:48:10,750 Dus ik ben een beetje bezig verschillende wiskunde daar. 1004 00:48:10,750 --> 00:48:11,624 Laten we een ander. 1005 00:48:11,624 --> 00:48:16,610 Dus procent i tijden procent i procent i, backslash n. 1006 00:48:16,610 --> 00:48:21,430 Laten we plug-in x en y en x maal y. 1007 00:48:21,430 --> 00:48:24,530 We zullen het sterretje te gebruiken op uw computer voor tijden. 1008 00:48:24,530 --> 00:48:26,390 >> U hoeft geen gebruik maken van x. x een variabele naam hier. 1009 00:48:26,390 --> 00:48:28,270 U gebruikt de ster voor vermenigvuldiging. 1010 00:48:28,270 --> 00:48:29,020 Laten we nog één. 1011 00:48:29,020 --> 00:48:34,580 Printf procent I, verdeeld door procent i, is procent i, 1012 00:48:34,580 --> 00:48:40,460 backslash n. xy gedeeld door y-- zodat je de slash in C gebruiken 1013 00:48:40,460 --> 00:48:41,502 om verdeeldheid te doen. 1014 00:48:41,502 --> 00:48:42,460 En laten we één ander. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Rest van i procent, verdeeld door procent i, is procent i. 1017 00:48:55,240 --> 00:48:59,550 xy-- en nu rest is wat er overblijft. 1018 00:48:59,550 --> 00:49:02,980 Wanneer u het delen van een noemer in een teller, 1019 00:49:02,980 --> 00:49:05,570 hoeveel er nog over die je kon niet splitsen uit? 1020 00:49:05,570 --> 00:49:07,910 >> Dus er is niet echt, noodzakelijkerwijs een symbool 1021 00:49:07,910 --> 00:49:09,470 we hebben in de lagere school gebruikt. 1022 00:49:09,470 --> 00:49:13,830 Maar in C. U kunt zeggen x modulo y, waarbij 1023 00:49:13,830 --> 00:49:18,000 Dit procent teken in deze context-- verwarrend als je binnen bent 1024 00:49:18,000 --> 00:49:20,170 van de dubbele aanhalingstekens, binnenkant van printf, procent 1025 00:49:20,170 --> 00:49:21,830 wordt gebruikt als het format specifier. 1026 00:49:21,830 --> 00:49:25,420 >> Wanneer u procent buiten dat in een wiskundige uitdrukking, 1027 00:49:25,420 --> 00:49:29,910 het is de modulo operator voor modulaire arithmetic-- voor onze doeleinden 1028 00:49:29,910 --> 00:49:33,650 hier, maar betekent, wat is de restant van x gedeeld door y? 1029 00:49:33,650 --> 00:49:36,130 Dus x gedeeld door y x y slash. 1030 00:49:36,130 --> 00:49:38,220 Wat is de rest van x gedeeld door y? 1031 00:49:38,220 --> 00:49:41,780 Het is x mod y, als programmeur zou zeggen. 1032 00:49:41,780 --> 00:49:48,300 >> Dus als ik geen fouten gemaakt hier, laat me ga je gang en maak ints, meervoud, aardig, 1033 00:49:48,300 --> 00:49:50,010 en dot slash ints. 1034 00:49:50,010 --> 00:49:55,270 En laten we gaan en te doen, laten we zeggen, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Oké, 1 plus 10 is 11, check. 1036 00:49:58,390 --> 00:50:01,240 1 min 10 negatief is 9, te controleren. 1037 00:50:01,240 --> 00:50:03,420 >> 1 maal 10 is 10, check. 1038 00:50:03,420 --> 00:50:07,090 1 gedeeld door 10 is-- OK, we zullen dat overslaan. 1039 00:50:07,090 --> 00:50:09,480 Rest van 1 gedeeld door 10 is 1. 1040 00:50:09,480 --> 00:50:10,680 Dat is correct. 1041 00:50:10,680 --> 00:50:12,630 Maar er is een bug in hier. 1042 00:50:12,630 --> 00:50:15,390 >> Dus degene die ik mijn overhandigen, niet correct. 1043 00:50:15,390 --> 00:50:16,670 Ik bedoel, het is dicht bij 0. 1044 00:50:16,670 --> 00:50:20,670 1 gedeeld door 10, weet je, als we snijden sommige bochten, zeker, het is nul. 1045 00:50:20,670 --> 00:50:28,050 Maar het moet echt 1/10, 0,1 of 0,10, 0,1000, of dergelijke. 1046 00:50:28,050 --> 00:50:30,600 >> Het moet niet echt nul. 1047 00:50:30,600 --> 00:50:35,990 Nou, het blijkt dat de computer is doen letterlijk wat we te horen dat het te doen. 1048 00:50:35,990 --> 00:50:39,460 We doen wiskunde als x gedeeld door y. 1049 00:50:39,460 --> 00:50:44,680 En zowel x en y, volgens de lijnen van de code eerder, zijn gehele getallen. 1050 00:50:44,680 --> 00:50:50,440 >> Bovendien, op lijn 15, we zijn vertellen printf, hey, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 een integer, plug-in een integer, plug-in een specifiek integer-- 1052 00:50:54,230 --> 00:50:57,580 x, y en dan, en dan x gedeeld door y. x en y zijn gehele getallen. 1053 00:50:57,580 --> 00:50:59,060 We zijn er goed. 1054 00:50:59,060 --> 00:51:01,250 >> Maar wat is x gedeeld door x? 1055 00:51:01,250 --> 00:51:06,790 x gedeeld door Y moeten zijn, wiskundig, 1/10 of 0,1, 1056 00:51:06,790 --> 00:51:11,600 die een reëel getal, een getal hebben, in potentie, een komma. 1057 00:51:11,600 --> 00:51:13,230 Het is geen geheel getal. 1058 00:51:13,230 --> 00:51:18,290 >> Maar wat is de dichtstbijzijnde integer naar 1/10 of 0,1? 1059 00:51:18,290 --> 00:51:21,114 Ja, het soort nul. 1060 00:51:21,114 --> 00:51:22,030 0.1 is als dit veel. 1061 00:51:22,030 --> 00:51:22,890 En 1 is dit veel. 1062 00:51:22,890 --> 00:51:25,870 Dus 1/10 dichter bij 0 dan is één. 1063 00:51:25,870 --> 00:51:30,800 >> En dus wat C doet voor ons-- soort, omdat we te horen dat to-- 1064 00:51:30,800 --> 00:51:32,600 afknotten wordt dat getal. 1065 00:51:32,600 --> 00:51:40,540 Het is het nemen van de waarde, die weer verondersteld om iets als 0,1000 te zijn, 1066 00:51:40,540 --> 00:51:41,800 0 enzovoort. 1067 00:51:41,800 --> 00:51:45,320 En het is alles beknotten na de komma 1068 00:51:45,320 --> 00:51:47,510 zodat alles materiaal, omdat het niet reageert 1069 00:51:47,510 --> 00:51:51,910 passen in het begrip van een integer, die is maar een getal als negatief 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 op en neer, gooit alles weg na de komma, omdat je 1071 00:51:55,830 --> 00:51:59,020 past niet een komma een integer per definitie. 1072 00:51:59,020 --> 00:52:01,290 >> Het antwoord hier nul. 1073 00:52:01,290 --> 00:52:02,600 Dus hoe kunnen we dit oplossen? 1074 00:52:02,600 --> 00:52:04,400 We moeten een andere oplossing allemaal samen. 1075 00:52:04,400 --> 00:52:06,880 En we kunnen dit doen, als volgt. 1076 00:52:06,880 --> 00:52:12,820 >> Laat me ga je gang en maak een nieuwe file, deze zogenaamde floats.c. 1077 00:52:12,820 --> 00:52:16,500 En sla het hier in de dezelfde directory, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 En laat me ga je gang en kopieer een deel van die code uit eerder. 1080 00:52:23,260 --> 00:52:27,690 >> Maar in plaats van het krijgen een int, laten we dit doen. 1081 00:52:27,690 --> 00:52:31,037 Geef me een floating point waarde genaamd x. wanneer een drijvende komma 1082 00:52:31,037 --> 00:52:33,370 waarde is gewoon letterlijk iets met een floating point. 1083 00:52:33,370 --> 00:52:34,410 Het kan naar links, naar rechts. 1084 00:52:34,410 --> 00:52:35,530 Het is een reëel getal. 1085 00:52:35,530 --> 00:52:38,050 >> En laat me niet te bellen krijgen int, maar krijgen vlotter, 1086 00:52:38,050 --> 00:52:41,420 die ook onder de menu van opties in de C250 bibliotheek. 1087 00:52:41,420 --> 00:52:43,220 Laten we y veranderen naar een float. 1088 00:52:43,220 --> 00:52:45,000 Dus dit wordt te krijgen zweven. 1089 00:52:45,000 --> 00:52:47,620 >> En nu, we willen niet aan te sluiten in ints. 1090 00:52:47,620 --> 00:52:53,130 Het blijkt dat we moeten procent gebruiken f voor float, procent f voor float, 1091 00:52:53,130 --> 00:52:54,560 en nu opslaan. 1092 00:52:54,560 --> 00:53:01,220 En nu, vingers gekruist, maken praalwagens, leuke, dot slash praalwagens. 1093 00:53:01,220 --> 00:53:04,280 x gaat naar een 1. y zijn Gaat weer 10. 1094 00:53:04,280 --> 00:53:08,240 >> En, mooi, OK mijn toevoeging is correct. 1095 00:53:08,240 --> 00:53:10,240 Ik hoopte op meer, maar ik vergat om het te schrijven. 1096 00:53:10,240 --> 00:53:13,250 Dus laten we gaan en bevestig deze denkfout. 1097 00:53:13,250 --> 00:53:16,280 >> Laten we doorgaan en pak de volgende. 1098 00:53:16,280 --> 00:53:18,080 We zullen gewoon een beetje kopiëren en plakken doen. 1099 00:53:18,080 --> 00:53:20,080 En ik ga minus zeggen. 1100 00:53:20,080 --> 00:53:21,890 >> En ik ga keer zeggen. 1101 00:53:21,890 --> 00:53:24,060 En ik ga zeggen verdeeld. 1102 00:53:24,060 --> 00:53:28,240 En ik ben niet van plan te doen modulo, die niet zo germane hier 1103 00:53:28,240 --> 00:53:33,690 gedeeld door f, en tijden plus-- Oké, laten we dit opnieuw doen. 1104 00:53:33,690 --> 00:53:44,210 >> Maak praalwagens, dot slash praalwagens, en 1, 10, en-- mooi, nee, OK. 1105 00:53:44,210 --> 00:53:45,250 Dus ik ben een idioot. 1106 00:53:45,250 --> 00:53:47,000 Dus dit is heel gebruikelijk in de informatica 1107 00:53:47,000 --> 00:53:49,780 tot domme fouten als deze te maken. 1108 00:53:49,780 --> 00:53:53,100 >> Voor pedagogische doeleinden, wat ik echt wilde doen 1109 00:53:53,100 --> 00:53:57,410 Hier werd de wetenschap veranderen tot plus, min, de tijden, 1110 00:53:57,410 --> 00:54:01,140 en hopelijk te verdelen, zoals u opgevallen tijdens deze oefening. 1111 00:54:01,140 --> 00:54:04,700 Dus laten we nu opnieuw compileren deze programma, doe dot slash praalwagens. 1112 00:54:04,700 --> 00:54:07,950 >> En voor de derde keer, laten we kijken of het voldoet aan mijn verwachtingen. 1113 00:54:07,950 --> 00:54:21,480 1, 10, voer, ja, OK, 1.000, gedeeld door 10.000, is 0,100000. 1114 00:54:21,480 --> 00:54:24,952 En het blijkt dat we kunnen controleren hoeveel nummers zijn na die cijfers achter de komma. 1115 00:54:24,952 --> 00:54:25,660 We eigenlijk wil. 1116 00:54:25,660 --> 00:54:26,790 We zullen hierop terugkomen. 1117 00:54:26,790 --> 00:54:28,440 >> Maar nu in feite de wiskunde is correct. 1118 00:54:28,440 --> 00:54:30,090 Dus nogmaals, wat is het hier mee te nemen? 1119 00:54:30,090 --> 00:54:33,050 Het blijkt dat in C, zijn er niet pas strings-- en, in feite, 1120 00:54:33,050 --> 00:54:36,120 er zijn niet echt, want we toe te voegen die met de CS50 bibliotheek. 1121 00:54:36,120 --> 00:54:37,710 Maar er zijn niet alleen ints. 1122 00:54:37,710 --> 00:54:38,990 >> Er zijn ook drijft. 1123 00:54:38,990 --> 00:54:42,810 En het blijkt een heleboel andere data types ook, dat we gebruiken het duurde niet lang. 1124 00:54:42,810 --> 00:54:46,270 Blijkt dat als je wilt een enkele karakter, niet een reeks tekens, 1125 00:54:46,270 --> 00:54:47,610 je kunt gewoon een char te gebruiken. 1126 00:54:47,610 --> 00:54:52,350 >> Blijkt dat als je een Bool wilt, een Booleaanse waarde, waar of onwaar alleen, 1127 00:54:52,350 --> 00:54:56,840 dankzij de CS50 bibliotheek, we hebben toegevoegd aan C de Bool datatype ook. 1128 00:54:56,840 --> 00:54:59,180 Maar het is ook aanwezig in vele andere talen. 1129 00:54:59,180 --> 00:55:04,130 En het blijkt dat je soms moet grotere aantallen dan komen standaard 1130 00:55:04,130 --> 00:55:05,210 met ints en praalwagens. 1131 00:55:05,210 --> 00:55:10,590 >> En in feite een dubbele een getal dat gebruik maakt van niet 32 ​​bits, maar 64 bits. 1132 00:55:10,590 --> 00:55:14,990 En een lange lange is een nummer dat maakt niet 32, maar 64-bits bits, 1133 00:55:14,990 --> 00:55:19,190 respectievelijk voor floating point waarden en getallen respectievelijk. 1134 00:55:19,190 --> 00:55:22,780 Dus laten we nu eigenlijk Kijk hoe dit werkt. 1135 00:55:22,780 --> 00:55:26,150 >> Ik ga hier verder te gaan en opkloppen een ander programma. 1136 00:55:26,150 --> 00:55:32,020 Hier ga ik om verder te gaan en niet bevatten CS50.h. 1137 00:55:32,020 --> 00:55:34,910 En laat me gaan, zijn onder andere standaard io.h. 1138 00:55:34,910 --> 00:55:37,320 >> En je zult iets opmerken funky gebeurt hier. 1139 00:55:37,320 --> 00:55:40,592 Het is niet kleurcodering dingen in op dezelfde wijze als voorheen. 1140 00:55:40,592 --> 00:55:43,550 En het blijkt, dat komt omdat ik hebben het ding een bestandsnaam niet gegeven. 1141 00:55:43,550 --> 00:55:47,270 >> Ik ga dit ene noemen sizeof.c, en druk op Opslaan. 1142 00:55:47,270 --> 00:55:51,039 En let op wat gebeurt er met mijn zeer witte code tegen deze zwarte achtergrond. 1143 00:55:51,039 --> 00:55:52,830 Nu, in ieder geval is er sommige paarse daar. 1144 00:55:52,830 --> 00:55:54,490 En het is syntax gemarkeerd. 1145 00:55:54,490 --> 00:55:57,700 >> Dat komt omdat, heel eenvoudig, ik heb vertelde de IDE wat voor soort bestand 1146 00:55:57,700 --> 00:56:01,060 het is door het geven van een naam en in het bijzonder een bestandsextensie. 1147 00:56:01,060 --> 00:56:03,620 Nu, laten we gaan en dit te doen. 1148 00:56:03,620 --> 00:56:08,910 Ik ga je gang en zeer go gewoon uitprinten de following-- Bool 1149 00:56:08,910 --> 00:56:11,080 is procent LU. 1150 00:56:11,080 --> 00:56:12,950 >> We zullen terug te komen op dat in slechts een moment. 1151 00:56:12,950 --> 00:56:15,840 En dan ga ik afdrukformaat van Bool. 1152 00:56:15,840 --> 00:56:18,170 En nu, gewoon om te besparen mijzelf enige tijd, ben ik 1153 00:56:18,170 --> 00:56:20,280 gaat een hele doen stelletje deze in een keer. 1154 00:56:20,280 --> 00:56:24,620 En, in het bijzonder, ik ga dit veranderen naar een char en char. 1155 00:56:24,620 --> 00:56:27,760 Deze, ik ga om te veranderen een tweepersoonsbed en een double. 1156 00:56:27,760 --> 00:56:31,440 >> Deze, ik ga om te veranderen om een ​​vlotter en een vlotter. 1157 00:56:31,440 --> 00:56:35,670 Deze, ik ga wijzigen in een int en een int. 1158 00:56:35,670 --> 00:56:38,660 En deze, ga ik te veranderen naar een lange lange. 1159 00:56:38,660 --> 00:56:40,840 En het is nog steeds het nemen van een lange tijd, lang lang. 1160 00:56:40,840 --> 00:56:44,572 >> En dan, ten slotte, gaf ik zelf een te veel, string. 1161 00:56:44,572 --> 00:56:47,030 Het blijkt dat in C, is er de speciale gebruiker genaamd 1162 00:56:47,030 --> 00:56:50,260 grootte van dat is letterlijk gaan, wanneer deze wordt uitgevoerd, 1163 00:56:50,260 --> 00:56:52,099 vertel ons de grootte van elk van deze variabelen. 1164 00:56:52,099 --> 00:56:53,890 Dit is een manier, nu, we kunnen terug verbinden 1165 00:56:53,890 --> 00:56:57,140 om de discussie van vorige week van gegevens en representatie. 1166 00:56:57,140 --> 00:57:00,330 >> Laat me gaan en samen te stellen grootte van de dot slash grootte van. 1167 00:57:00,330 --> 00:57:01,210 En laten we eens kijken. 1168 00:57:01,210 --> 00:57:05,210 Het blijkt dat in C, specifiek op de CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 specifiek op de besturingssysteem Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 die een 64-bits besturingssysteem systeem in casu 1171 00:57:11,100 --> 00:57:14,189 een Bool gaat Gebruik een byte ruimte. 1172 00:57:14,189 --> 00:57:16,480 Dat is hoe de grootte wordt gemeten, niet in bits, maar in bytes. 1173 00:57:16,480 --> 00:57:18,690 En herinneren dat één byte is acht bits. 1174 00:57:18,690 --> 00:57:22,030 Dus een Bool, ook al heb je technisch gezien alleen maar een 0 of 1, 1175 00:57:22,030 --> 00:57:24,092 het is een beetje verspilling hoe we het hebben geïmplementeerd. 1176 00:57:24,092 --> 00:57:26,800 Het is eigenlijk gaat om een ​​geheel te gebruiken byte-- dus allemaal nullen, zijn misschien 1177 00:57:26,800 --> 00:57:31,050 allemaal enen, of iets dergelijks, of slechts een 1 onder de acht bits. 1178 00:57:31,050 --> 00:57:34,962 >> Een char ondertussen voor een teken als een ASCII-teken per vorige week, 1179 00:57:34,962 --> 00:57:36,170 zal een karakter. 1180 00:57:36,170 --> 00:57:42,340 En die synchroniseert met onze notie van Het is niet meer dan 256 bits-- plaats, 1181 00:57:42,340 --> 00:57:45,360 synchroniseert met het feit dat er geen langer dan 8 bits, die 1182 00:57:45,360 --> 00:57:47,450 geeft ons wel 256 waarden. 1183 00:57:47,450 --> 00:57:49,680 Een dubbele gaat zijn 8 bytes of 64 bits. 1184 00:57:49,680 --> 00:57:50,510 >> Een float is 4. 1185 00:57:50,510 --> 00:57:51,690 Een int is 4. 1186 00:57:51,690 --> 00:57:52,980 Een lange, lange is 8. 1187 00:57:52,980 --> 00:57:54,716 En een string 8. 1188 00:57:54,716 --> 00:57:55,840 Maar maak je geen zorgen over. 1189 00:57:55,840 --> 00:57:57,340 We gaan terug te pellen die laag. 1190 00:57:57,340 --> 00:57:59,940 Het blijkt, strings kan langer dan 8 bytes. 1191 00:57:59,940 --> 00:58:02,310 >> En inderdaad, we hebben geschreven strings al, hello wereld, 1192 00:58:02,310 --> 00:58:03,700 langer dan 8 bytes. 1193 00:58:03,700 --> 00:58:06,270 Maar we zullen terug te komen op dat in slechts een moment. 1194 00:58:06,270 --> 00:58:09,690 Maar de afhaaldienst hier is het volgende. 1195 00:58:09,690 --> 00:58:15,320 >> Elke computer heeft slechts een eindige hoeveelheid geheugen en ruimte. 1196 00:58:15,320 --> 00:58:17,860 U kunt alleen op te slaan zo veel bestanden op je Mac of pc. 1197 00:58:17,860 --> 00:58:23,030 U kunt alleen zo veel programma's in op te slaan RAM draaien tegelijk noodzakelijkerwijs ook 1198 00:58:23,030 --> 00:58:26,360 virtueel geheugen, omdat je hebt een beperkte hoeveelheid RAM. 1199 00:58:26,360 --> 00:58:28,990 >> En alleen maar om picture-- als je hebt nog nooit opende een laptop 1200 00:58:28,990 --> 00:58:31,300 of te bestellen extra geheugen voor een computer, je 1201 00:58:31,300 --> 00:58:33,670 misschien niet weten dat binnenkant van uw computer 1202 00:58:33,670 --> 00:58:36,590 is iets dat eruit ziet een beetje als dit. 1203 00:58:36,590 --> 00:58:40,540 Dus dit is gewoon een gemeenschappelijke onderneming met de naam Cruciaal dat maakt RAM voor computers. 1204 00:58:40,540 --> 00:58:43,620 En RAM is waar programma's leven, terwijl ze draaien. 1205 00:58:43,620 --> 00:58:46,630 >> Dus op elke Mac of pc, wanneer u dubbelklikt klik op een programma en het opent, 1206 00:58:46,630 --> 00:58:48,921 en het opent een aantal Word-document of zoiets, 1207 00:58:48,921 --> 00:58:51,764 slaat tijdelijk in RAM, omdat RAM sneller 1208 00:58:51,764 --> 00:58:53,680 dan uw harde schijf of je solid state disk. 1209 00:58:53,680 --> 00:58:56,600 Dus het is gewoon waar programma gaan om te leven als ze draaien, 1210 00:58:56,600 --> 00:58:58,060 of wanneer bestanden worden gebruikt. 1211 00:58:58,060 --> 00:59:00,890 >> Dus je moet dingen die eruit zien als dit de binnenkant van uw laptop, 1212 00:59:00,890 --> 00:59:03,320 of iets grotere dingen binnenkant van uw bureaublad. 1213 00:59:03,320 --> 00:59:07,440 Maar het belangrijkste is dat je alleen een eindig aantal van deze dingen. 1214 00:59:07,440 --> 00:59:11,230 En er is slechts een beperkte hoeveelheid hardware zitten op dit bureau rechts 1215 00:59:11,230 --> 00:59:11,730 hier. 1216 00:59:11,730 --> 00:59:15,920 >> Dus, zeker, we kunnen niet bewaren oneindig lange nummers. 1217 00:59:15,920 --> 00:59:19,030 En toch, als je denkt terug naar basisschool, hoeveel cijfers kan 1218 00:59:19,030 --> 00:59:21,400 je moet de juiste van een komma? 1219 00:59:21,400 --> 00:59:24,680 Wat dat betreft, hoeveel cijfers kan je moet aan de linkerkant van een komma? 1220 00:59:24,680 --> 00:59:26,300 Echt, oneindig veel. 1221 00:59:26,300 --> 00:59:30,840 >> Nu, misschien alleen wij mensen weten hoe te miljoen uit te spreken, 1222 00:59:30,840 --> 00:59:34,990 en miljard, biljoen, en biljard, en triljoen. 1223 00:59:34,990 --> 00:59:39,370 En ik ben tegen de grenzen van mijn understanding-- of my-- ik begrijp 1224 00:59:39,370 --> 00:59:41,110 getallen, maar mijn uitspraak van getallen. 1225 00:59:41,110 --> 00:59:44,720 Maar ze kunnen krijgen oneindig groot met oneindig veel cijfers links 1226 00:59:44,720 --> 00:59:47,050 of rechts van een komma. 1227 00:59:47,050 --> 00:59:50,040 >> Maar computers hebben slechts een eindige hoeveelheid geheugen, 1228 00:59:50,040 --> 00:59:53,510 een eindig aantal transistors, een eindig aantal lampen binnen. 1229 00:59:53,510 --> 00:59:57,350 Dus wat gebeurt er als u opraken van de ruimte? 1230 00:59:57,350 --> 00:59:59,620 Met andere woorden, als je denk terug aan vorige week 1231 00:59:59,620 --> 01:00:03,160 toen we spraken over aantallen zelf voorgesteld in binaire, 1232 01:00:03,160 --> 01:00:05,480 Stel dat we hebben Deze 8-bit waarde hier. 1233 01:00:05,480 --> 01:00:08,290 >> En we hebben zeven 1 en een 0. 1234 01:00:08,290 --> 01:00:10,827 En stel dat we willen 1 aan deze waarde. 1235 01:00:10,827 --> 01:00:12,410 Dit is echt een groot aantal op dit moment. 1236 01:00:12,410 --> 01:00:16,610 >> Dit is 254, als ik herinner de wiskunde van vorige week goed. 1237 01:00:16,610 --> 01:00:19,480 Maar wat als ik veranderen die meest rechtse 0 een 1? 1238 01:00:19,480 --> 01:00:22,800 Het gehele getal van Natuurlijk, wordt acht 1's. 1239 01:00:22,800 --> 01:00:24,050 Dus we zijn nog steeds goed. 1240 01:00:24,050 --> 01:00:27,204 >> En dat is waarschijnlijk vertegenwoordigt 255, hoewel afhankelijk van de context 1241 01:00:27,204 --> 01:00:29,120 Het kon eigenlijk vertegenwoordigen een negatief getal. 1242 01:00:29,120 --> 01:00:31,240 Maar meer daarover een andere keer. 1243 01:00:31,240 --> 01:00:34,220 Dit voelt als het over zo hoog als ik kan tellen. 1244 01:00:34,220 --> 01:00:35,290 >> Nu, het is slechts 8 bits. 1245 01:00:35,290 --> 01:00:38,170 En mijn Mac, zeker, heeft veel meer dan 8 bits geheugen. 1246 01:00:38,170 --> 01:00:39,170 Maar het heeft wel eindig. 1247 01:00:39,170 --> 01:00:43,230 Dus hetzelfde argument geldt, zelfs als we meer van dezen op het scherm. 1248 01:00:43,230 --> 01:00:47,020 >> Maar wat gebeurt er als je opslaan van dit aantal, 255, 1249 01:00:47,020 --> 01:00:49,290 en u wilt 1 stuk hoger tellen? 1250 01:00:49,290 --> 01:00:51,600 U wilt gaan 255-256. 1251 01:00:51,600 --> 01:00:55,800 Het probleem is natuurlijk dat als je beginnen te tellen bij nul als vorige week, 1252 01:00:55,800 --> 01:00:59,670 kun je niet zo hoog te tellen 256, laat staan ​​257, 1253 01:00:59,670 --> 01:01:02,584 laat staan ​​258, m want wat gebeurt er als je een 1 toe te voegen? 1254 01:01:02,584 --> 01:01:05,000 Als je de oude lagere school aanpak, zet je een 1 hier, 1255 01:01:05,000 --> 01:01:08,150 en dan 1 plus 1 is 2, maar dat is echt een nul, je draagt ​​de 1, 1256 01:01:08,150 --> 01:01:09,695 dragen de 1, dragen de 1. 1257 01:01:09,695 --> 01:01:12,620 Al deze dingen, deze 1 is, naar nul. 1258 01:01:12,620 --> 01:01:17,820 En je eindigt, ja, als iemand wees erop, een 1 aan de linkerkant. 1259 01:01:17,820 --> 01:01:22,540 Maar alles wat je kunt eigenlijk zien en past in het geheugen 1260 01:01:22,540 --> 01:01:27,960 slechts acht 0, dat wil zeggen op een gegeven moment als je een computer, 1261 01:01:27,960 --> 01:01:32,490 probeerde te tellen hoog genoeg, je bent gaat rond wikkelen, zo lijkt het, 1262 01:01:32,490 --> 01:01:35,850 naar nul, of misschien zelfs negatief getallen, die zelfs lager zijn dan nul. 1263 01:01:35,850 --> 01:01:37,260 >> En we kunnen soort van dit te zien. 1264 01:01:37,260 --> 01:01:39,900 Laat me ga je gang en schrijf een echt snel programma hier. 1265 01:01:39,900 --> 01:01:43,690 Laat me ga je gang en schrijf een programma genaamd overloop. 1266 01:01:43,690 --> 01:01:49,980 Omvatten CS50.h, omvatten standaard IO.h-- oh, 1267 01:01:49,980 --> 01:01:51,730 Ik miste mijn syntax highlighting. 1268 01:01:51,730 --> 01:01:54,440 Dus laten we dit op te slaan als overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> En nu int main void-- en het duurde niet lang, we 1270 01:01:57,084 --> 01:01:59,500 kom terug om uit te leggen waarom we blijven schrijven int main leegte. 1271 01:01:59,500 --> 01:02:02,080 Maar voor nu, laten we gewoon doen , nemen het voor lief. 1272 01:02:02,080 --> 01:02:06,200 Laten we geef mezelf een int, en initialiseren op 0. 1273 01:02:06,200 --> 01:02:11,716 >> Laten we het dan doen voor int ik krijg zero-- eigenlijk, laten we een oneindige lus 1274 01:02:11,716 --> 01:02:12,590 en zie wat er gebeurt. 1275 01:02:12,590 --> 01:02:22,440 Tijdens het waar is, dan laten we n uitprinten is procent i, backslash n, plug-in n. 1276 01:02:22,440 --> 01:02:27,200 Maar nu, laten we het doen n krijgt n plus 1. 1277 01:02:27,200 --> 01:02:29,660 >> Met andere woorden, op elke iteratie van deze oneindige lus, 1278 01:02:29,660 --> 01:02:32,550 laten we de waarde n's, en voeg 1 tot en met, en dan 1279 01:02:32,550 --> 01:02:34,350 sla het resultaat terug n links. 1280 01:02:34,350 --> 01:02:37,150 En, in feite, we hebben syntax gezien iets als dit, kort. 1281 01:02:37,150 --> 01:02:39,730 Een koele truc is in plaats dit alles uit te schrijven, 1282 01:02:39,730 --> 01:02:42,770 kun je eigenlijk zeggen een n plus gelijk is aan 1. 1283 01:02:42,770 --> 01:02:47,480 >> Of als je echt wilt fancy, je kunt zeggen n plus plus puntkomma. 1284 01:02:47,480 --> 01:02:50,130 Maar deze laatste twee zijn gewoon wat we syntactische suiker zou noemen 1285 01:02:50,130 --> 01:02:50,790 voor de eerste zaak. 1286 01:02:50,790 --> 01:02:53,456 >> Het eerste ding is meer expliciet, helemaal prima, helemaal correct. 1287 01:02:53,456 --> 01:02:55,470 Maar dit komt vaker voor, zeg ik. 1288 01:02:55,470 --> 01:02:57,210 Dus we zullen dit voor slechts een moment te doen. 1289 01:02:57,210 --> 01:03:01,685 >> Laten we nu te maken overflow, wat klinkt nogal onheilspellend, dot slash overflow. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Laten we eens kijken, n wordt steeds vrij groot. 1292 01:03:09,852 --> 01:03:11,310 Maar laten we denken, hoe groot kan n krijgen? 1293 01:03:11,310 --> 01:03:12,870 >> n een int. 1294 01:03:12,870 --> 01:03:16,400 We zagen een moment geleden met de omvang van de Bijvoorbeeld dat een int is vier bytes. 1295 01:03:16,400 --> 01:03:22,070 We weten van vorige week, vier bytes is 32 bits, want 8 keer 4, dat is 32. 1296 01:03:22,070 --> 01:03:23,460 Dat gaat worden 4 miljard. 1297 01:03:23,460 --> 01:03:25,802 >> En we zijn tot 800.000. 1298 01:03:25,802 --> 01:03:28,510 Dit gaat nemen voor eeuwig tellen als hoog als ik kan. 1299 01:03:28,510 --> 01:03:30,635 Dus ik ga om verder te gaan, Zoals u wellicht het duurde niet lang, 1300 01:03:30,635 --> 01:03:34,910 en sloeg Controle C-- eerlijk gezegd, Controle C, een stuk, waarin controle C in het algemeen 1301 01:03:34,910 --> 01:03:36,034 middelen te annuleren. 1302 01:03:36,034 --> 01:03:38,200 Helaas, omdat deze wordt uitgevoerd in de cloud, 1303 01:03:38,200 --> 01:03:41,190 soms de cloud uitspugen zo veel spullen, 1304 01:03:41,190 --> 01:03:44,180 zo veel output, het gaat om neem een ​​tijdje voor mijn inbreng 1305 01:03:44,180 --> 01:03:45,630 naar de cloud te krijgen. 1306 01:03:45,630 --> 01:03:49,240 Dus hoewel ik hit Controle C een paar seconden geleden, 1307 01:03:49,240 --> 01:03:53,110 dit is zeker de kant effect van een oneindige lus. 1308 01:03:53,110 --> 01:03:56,070 >> En dus in dergelijke gevallen, we zijn gaat verlaten dat. 1309 01:03:56,070 --> 01:03:59,050 En we gaan naar een ander toe te voegen terminalvenster hier 1310 01:03:59,050 --> 01:04:03,186 met de plus, wat natuurlijk niet doet als dat, aangezien het nog steeds denken. 1311 01:04:03,186 --> 01:04:05,310 En laten we ga je gang en wees een beetje meer redelijk. 1312 01:04:05,310 --> 01:04:07,768 >> Ik ga om te gaan en te doen dit alleen maar een eindig aantal malen. 1313 01:04:07,768 --> 01:04:10,047 Laten we gebruik maken van een lus, die ik zinspeelde eerder. 1314 01:04:10,047 --> 01:04:10,630 Laten we dit doen. 1315 01:04:10,630 --> 01:04:13,430 Geef me een andere variabele int i krijgt 0. 1316 01:04:13,430 --> 01:04:17,430 i is kleiner dan, laten we zeggen, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 En nu laat ik ga je gang en af ​​te drukken out n procent i, komma n. 1318 01:04:24,010 --> 01:04:27,547 En dan is dit nog steeds N-- gaat altijd te nemen. 1319 01:04:27,547 --> 01:04:28,130 Laten we dit doen. 1320 01:04:28,130 --> 01:04:30,620 >> n krijgt n keer 2. 1321 01:04:30,620 --> 01:04:34,140 Of we kunnen fancy en doe tijden gelijk is aan 2. 1322 01:04:34,140 --> 01:04:37,120 Maar laten we maar zeggen n is gelijk aan zichzelf, keer 2. 1323 01:04:37,120 --> 01:04:39,321 Met andere woorden, in deze nieuwe versie van het programma, 1324 01:04:39,321 --> 01:04:41,820 Ik wil niet eeuwig wachten uit als 800.000 tot 4 miljard. 1325 01:04:41,820 --> 01:04:43,070 Laten we krijgen dit over met. 1326 01:04:43,070 --> 01:04:44,920 >> Laten we eigenlijk het dubbele van n elke keer. 1327 01:04:44,920 --> 01:04:47,660 Welke, recall, verdubbeling is de tegenovergestelde van het hebben, natuurlijk. 1328 01:04:47,660 --> 01:04:50,035 En terwijl vorige week hebben we weer iets, en opnieuw, 1329 01:04:50,035 --> 01:04:52,200 en opnieuw, super snel, verdubbeling zal zeker 1330 01:04:52,200 --> 01:04:58,080 krijgen ons van 1 tot en met de grootst mogelijke waarde die we kunnen rekenen op een int. 1331 01:04:58,080 --> 01:04:59,750 >> Dus laten we precies doen dit. 1332 01:04:59,750 --> 01:05:01,720 En we zullen hierop terugkomen het duurde niet lang. 1333 01:05:01,720 --> 01:05:04,180 Maar, nogmaals, is net als de herhaling blok in Scratch. 1334 01:05:04,180 --> 01:05:05,600 En je zult dit gebruiken het duurde niet lang. 1335 01:05:05,600 --> 01:05:10,170 >> Dit betekent gewoon tellen van nul tot, maar niet gelijk aan 64. 1336 01:05:10,170 --> 01:05:14,285 En op elke variant van dit lus, gewoon blijven verhogen van i. 1337 01:05:14,285 --> 01:05:18,990 So i ++ - en deze algemene construct op lijn 7 is gewoon een super voorkomende manier 1338 01:05:18,990 --> 01:05:22,290 repeterende aantal regels code bepaald aantal keren. 1339 01:05:22,290 --> 01:05:23,362 Welke regels code? 1340 01:05:23,362 --> 01:05:25,570 Deze accolades, zoals u kunnen afgeleid uit nu, 1341 01:05:25,570 --> 01:05:26,780 betekent, doe dan het volgende. 1342 01:05:26,780 --> 01:05:29,510 >> Het is in zoals Scratch, wanneer het heeft de gele blokken 1343 01:05:29,510 --> 01:05:32,680 en andere kleuren dat soort omhelzen of knuffelen andere blokken. 1344 01:05:32,680 --> 01:05:34,750 Dat is wat die krullend beugels zijn hier doen. 1345 01:05:34,750 --> 01:05:40,200 Dus als ik mijn syntax right-- u kan de wortel symbool in C middelen zien 1346 01:05:40,200 --> 01:05:42,706 dat is hoe vaak ik was proberen om dit probleem op te lossen. 1347 01:05:42,706 --> 01:05:45,330 Dus laten we te ontdoen van die ene in totaal, en sluit dat venster. 1348 01:05:45,330 --> 01:05:46,520 En we zullen de nieuwe te gebruiken. 1349 01:05:46,520 --> 01:05:51,980 Maak overloop, dot slash overloop, Enter, oke, 1350 01:05:51,980 --> 01:05:53,090 Het ziet er slecht uit op het eerste. 1351 01:05:53,090 --> 01:05:56,200 Maar laten scrollen terug in de tijd, want ik deed dit 64 keer. 1352 01:05:56,200 --> 01:05:58,700 >> En let op de eerste keer, n 1 is. 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 het schijnt dat zodra Ik krijg tot ongeveer 1 miljard, 1355 01:06:09,450 --> 01:06:12,800 als ik weer verdubbelen, dat moet me 2 miljard. 1356 01:06:12,800 --> 01:06:14,980 Maar het blijkt, het is direct aan de vooravond. 1357 01:06:14,980 --> 01:06:18,930 >> En zo is het eigenlijk overflows een int van 1 miljard 1358 01:06:18,930 --> 01:06:23,514 tot ongeveer negatieve 2 miljard, omdat een integer, 1359 01:06:23,514 --> 01:06:25,430 Anders dan de nummers we werden vorige week de veronderstelling, 1360 01:06:25,430 --> 01:06:28,397 kunnen zowel positief als negatief zijn in werkelijkheid en een computer. 1361 01:06:28,397 --> 01:06:30,730 En dus tenminste een van die bits effectief gestolen. 1362 01:06:30,730 --> 01:06:34,190 Zodat we echt hebben slechts 31 bits, of 2 miljard mogelijke waarden. 1363 01:06:34,190 --> 01:06:38,220 >> Maar voor nu, de afhaalmaaltijd is vrij eenvoudig, wat deze getallen 1364 01:06:38,220 --> 01:06:42,280 en wat de wiskunde is, er iets ergs gebeurt uiteindelijk, 1365 01:06:42,280 --> 01:06:46,980 want uiteindelijk je probeert te permuteren de bits een te veel tijd. 1366 01:06:46,980 --> 01:06:51,060 En u effectief gaan van alle 1 tot misschien wel alle 0's, of misschien 1367 01:06:51,060 --> 01:06:54,260 gewoon een ander patroon dat het duidelijk, afhankelijk van de context, 1368 01:06:54,260 --> 01:06:56,342 kan worden geïnterpreteerd als een negatief getal. 1369 01:06:56,342 --> 01:06:59,300 En zo zou het de hoogste Ik schijn kan tellen in dit specifieke programma 1370 01:06:59,300 --> 01:07:01,210 is slechts ongeveer 1 miljard. 1371 01:07:01,210 --> 01:07:02,760 Maar er is een gedeeltelijke oplossing. 1372 01:07:02,760 --> 01:07:03,480 Weet je wat? 1373 01:07:03,480 --> 01:07:07,600 >> Laat me te veranderen van een int naar een lange lange. 1374 01:07:07,600 --> 01:07:10,633 En laat me hier ga je gang en say-- ik ga moeten 1375 01:07:10,633 --> 01:07:12,290 om dit te veranderen naar een unsigned long. 1376 01:07:12,290 --> 01:07:16,860 Of, laten we eens kijken, ik zelf herinner me nooit. 1377 01:07:16,860 --> 01:07:19,920 >> Laten we doorgaan en maak overflow. 1378 01:07:19,920 --> 01:07:21,860 Nee, dat is het niet, LLD, dank je. 1379 01:07:21,860 --> 01:07:23,430 Dus soms Clang kan nuttig zijn. 1380 01:07:23,430 --> 01:07:27,550 Ik heb niet herinneren wat het formaat specifier was voor een lange lange. 1381 01:07:27,550 --> 01:07:28,950 >> Maar inderdaad, Clang vertelde me. 1382 01:07:28,950 --> 01:07:31,570 Groen is een soort van goede, nog steeds betekent dat je een fout hebt gemaakt. 1383 01:07:31,570 --> 01:07:33,190 Het is gissen, dat bedoelde ik LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Dus laat me het advies, een lange lang decimaal getal, behalve dat. 1385 01:07:38,750 --> 01:07:43,190 En laat me opnieuw uit te voeren is, dot slash overflow, Enter. 1386 01:07:43,190 --> 01:07:45,020 En nu, wat cool is dit. 1387 01:07:45,020 --> 01:07:49,140 >> Als ik terug in de tijd te bladeren, we nog steeds beginnen tellen op hetzelfde plaats-- 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, krijgen we alle manier tot 1 miljard euro. 1390 01:07:54,860 --> 01:07:57,070 Maar dan zijn we veilig naar 2 miljard. 1391 01:07:57,070 --> 01:08:01,300 >> Dan krijgen we 4 miljard, dan 8 miljard, 17 miljard. 1392 01:08:01,300 --> 01:08:03,340 En we gaan hoger, en hoger en hoger. 1393 01:08:03,340 --> 01:08:05,740 Uiteindelijk, ook dit pauzes. 1394 01:08:05,740 --> 01:08:09,350 >> Uiteindelijk, met een lange lange, dat de 64-bits waarde, niet 1395 01:08:09,350 --> 01:08:13,660 een 32-bits waarde, als je telt te hoog, wikkel je rond 0. 1396 01:08:13,660 --> 01:08:16,410 En in dit geval gebeurt we eindigen met een negatief getal. 1397 01:08:16,410 --> 01:08:17,550 >> Dus dit is een probleem. 1398 01:08:17,550 --> 01:08:20,439 En het blijkt dat dit probleem is niet zo mysterieus. 1399 01:08:20,439 --> 01:08:23,060 Hoewel ik heb met opzet veroorzaakte het met deze fouten, 1400 01:08:23,060 --> 01:08:26,149 Het blijkt dat we het zien natura van alle om ons heen, of op zijn minst een deel van ons doen. 1401 01:08:26,149 --> 01:08:28,939 >> Dus in Lego Star Wars, indien je ooit het spel gespeeld, 1402 01:08:28,939 --> 01:08:33,830 het blijkt dat je kunt gaan rond breken van dingen in LEGO wereld, 1403 01:08:33,830 --> 01:08:36,640 en het verzamelen van munten, wezen. 1404 01:08:36,640 --> 01:08:39,200 En als je ooit hebt gespeeld dit spel veel te veel tijd, 1405 01:08:39,200 --> 01:08:42,630 als deze niet nader genoemde persoon Hier heeft het aantal 1406 01:08:42,630 --> 01:08:46,700 munten die je kunt verzamelen is, naar het schijnt, 4 miljard. 1407 01:08:46,700 --> 01:08:48,240 >> Nu, met het eigenlijk afgerond. 1408 01:08:48,240 --> 01:08:50,239 Dus LEGO probeerde te houden dingen gebruiksvriendelijk. 1409 01:08:50,239 --> 01:08:53,779 Ze hebben het niet precies 2 tot de 32 macht, per week. 1410 01:08:53,779 --> 01:08:55,310 Maar 4 miljard is een reden. 1411 01:08:55,310 --> 01:08:58,979 Het lijkt erop dat, op basis van deze informatie, dat LEGO, en het bedrijf dat 1412 01:08:58,979 --> 01:09:02,624 maakte deze eigenlijke software, besloot het maximum aantal munten 1413 01:09:02,624 --> 01:09:04,540 de gebruiker kan ophopen is inderdaad 4 miljard, 1414 01:09:04,540 --> 01:09:12,069 omdat zij kozen in hun code geen lange lang is om, blijkbaar, 1415 01:09:12,069 --> 01:09:16,140 maar gewoon een integer, een niet-ondertekende integer, maar een positief geheel getal, waarvan 1416 01:09:16,140 --> 01:09:18,089 max waarde is ongeveer dat. 1417 01:09:18,089 --> 01:09:19,380 Nou, hier is een andere grappige. 1418 01:09:19,380 --> 01:09:23,500 Dus in het spel Civilization, die sommigen van u wellicht bekend zijn, met 1419 01:09:23,500 --> 01:09:26,660 het blijkt dat jaren geleden is er was een bug in dit spel, waarbij 1420 01:09:26,660 --> 01:09:28,750 als je de rol van Gandhi in het spel, 1421 01:09:28,750 --> 01:09:34,020 in plaats van hem zeer pacifist, in plaats daarvan was ongelooflijk, ongelooflijk 1422 01:09:34,020 --> 01:09:36,399 agressief, in bepaalde omstandigheden. 1423 01:09:36,399 --> 01:09:40,529 Vooral de manier waarop beschaving werken is dat als je de speler, 1424 01:09:40,529 --> 01:09:44,680 vast te stellen democratie, uw agressiviteit score krijgt 1425 01:09:44,680 --> 01:09:48,130 gedecrementeerd door twee, zo min minus, en dan minus minus. 1426 01:09:48,130 --> 01:09:50,569 >> Dus u aftrekken 2 uit uw werkelijke iteratie. 1427 01:09:50,569 --> 01:09:56,650 Helaas, als je itereren is aanvankelijk 1, en u aftrekken 2 daaruit 1428 01:09:56,650 --> 01:09:59,050 na de goedkeuring van de democratie als Gandhi hier misschien 1429 01:09:59,050 --> 01:10:02,200 hebben gedaan, omdat hij erg passive-- was 1 op de schaal van agressiviteit. 1430 01:10:02,200 --> 01:10:04,830 Maar als hij aanneemt democratie, dan Hij gaat van 1 naar negatief 1. 1431 01:10:04,830 --> 01:10:11,470 >> Helaas waren ze gebruik unsigned getallen, 1432 01:10:11,470 --> 01:10:15,400 wat betekent dat ze behandeld zelfs negatief getallen alsof ze waren positief. 1433 01:10:15,400 --> 01:10:19,780 En het blijkt dat de positieve equivalent van negatieve 1, 1434 01:10:19,780 --> 01:10:23,480 in typische computerprogramma's, is 255. 1435 01:10:23,480 --> 01:10:27,250 Dus als Gandhi goedkeurt democratie, en daarom 1436 01:10:27,250 --> 01:10:32,470 Zijn agressiviteit score afgenomen, het eigenlijk rollen rond 255 1437 01:10:32,470 --> 01:10:35,470 en maakt hem de meest agressieve personage in het spel. 1438 01:10:35,470 --> 01:10:36,930 Zo kunt u Google op dit punt. 1439 01:10:36,930 --> 01:10:39,380 En het was inderdaad een toevallige programmering bug, 1440 01:10:39,380 --> 01:10:43,010 maar dat is heel ingevoerd de overlevering sinds die tijd. 1441 01:10:43,010 --> 01:10:44,360 >> Dat is allemaal leuk en schattig. 1442 01:10:44,360 --> 01:10:47,760 Meer beangstigend is wanneer werkelijke echte wereld apparaten, en niet spelen, 1443 01:10:47,760 --> 01:10:48,820 hebben dezelfde bugs. 1444 01:10:48,820 --> 01:10:54,500 In feite, net een jaar geleden een artikel kwam komen over de Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> En het artikel op het eerste oogopslag leest een beetje mysterieus. 1446 01:10:56,850 --> 01:11:01,480 Maar het zei dit, een software kwetsbaarheid in Boeing 1447 01:11:01,480 --> 01:11:04,790 nieuwe 787 Dreamliner jet heeft potentieel piloten veroorzaken 1448 01:11:04,790 --> 01:11:07,220 om de controle over te verliezen het vliegtuig eventueel 1449 01:11:07,220 --> 01:11:11,750 in het midden van de vlucht, de FAA ambtenaren waarschuwde luchtvaartmaatschappijen onlangs. 1450 01:11:11,750 --> 01:11:14,520 Het was de vaststelling dat een model 787 1451 01:11:14,520 --> 01:11:19,770 vliegtuig dat werd aangedreven continu gedurende 248 dagen 1452 01:11:19,770 --> 01:11:24,880 kunnen alle wisselstroom verliezen, AC, elektrische vermogen door de generator 1453 01:11:24,880 --> 01:11:28,892 controle-eenheden, GCUs, gelijktijdig in te gaan op fail safe mode. 1454 01:11:28,892 --> 01:11:29,850 Het is een soort van mij te verliezen. 1455 01:11:29,850 --> 01:11:35,390 Maar de memo gezegd, OK, nu heb ik dat, de aandoening veroorzaakt door een software 1456 01:11:35,390 --> 01:11:38,590 tegen interne de generator control 1457 01:11:38,590 --> 01:11:44,860 eenheden die zal overstromen na 248 dagen continu vermogen. 1458 01:11:44,860 --> 01:11:47,070 We zijn de uitgifte van dit opmerken om verlies te voorkomen 1459 01:11:47,070 --> 01:11:49,300 van alle AC elektrische macht, wat kan resulteren 1460 01:11:49,300 --> 01:11:50,980 in verlies van controle over het vliegtuig. 1461 01:11:50,980 --> 01:11:55,380 >> Dus, letterlijk, er een integer, of een gelijkwaardige gegevens soort, 1462 01:11:55,380 --> 01:11:57,960 gebruikt in software in een echte vliegtuig 1463 01:11:57,960 --> 01:12:00,756 dat als je je vliegtuig te houden lang genoeg, die blijkbaar 1464 01:12:00,756 --> 01:12:03,880 kan het geval zijn als je alleen loopt ze voortdurend en nooit loskoppelen 1465 01:12:03,880 --> 01:12:06,810 je vliegtuig, zo lijkt het, of laten de batterijen sterven, 1466 01:12:06,810 --> 01:12:09,840 zal uiteindelijk tellen, en omhoog, en omhoog, en omhoog, en omhoog, en omhoog. 1467 01:12:09,840 --> 01:12:12,150 >> En, door de natuur, een eindige hoeveelheid geheugen 1468 01:12:12,150 --> 01:12:15,880 zal overstromen, rollen terug naar nul of een negatieve waarde, 1469 01:12:15,880 --> 01:12:19,920 bijwerking daarvan is de angstaanjagend echte werkelijkheid 1470 01:12:19,920 --> 01:12:23,970 dat het vliegtuig zou kunnen hebben opnieuw worden opgestart, effectief, 1471 01:12:23,970 --> 01:12:27,290 of zou kunnen vallen, nog erger, als het vliegt. 1472 01:12:27,290 --> 01:12:29,230 Dus dit soort problemen zijn nog steeds bij ons, 1473 01:12:29,230 --> 01:12:33,130 even-- dit was een 2015 artikel, des te meer angstaanjagend 1474 01:12:33,130 --> 01:12:36,100 als je niet per se te begrijpen, te waarderen of te anticiperen 1475 01:12:36,100 --> 01:12:38,640 dat soort fouten. 1476 01:12:38,640 --> 01:12:42,030 >> Dus het blijkt dat er een ander slechte ding over data representatie. 1477 01:12:42,030 --> 01:12:47,080 Het blijkt dat zelfs praalwagens zijn soort gebrekkig, omdat drijvers, ook, 1478 01:12:47,080 --> 01:12:51,440 Ik stelde zijn 32 bits, of misschien 64 als je een dubbel gebruiken. 1479 01:12:51,440 --> 01:12:53,070 Maar dat is nog steeds eindig. 1480 01:12:53,070 --> 01:12:57,070 >> En de vangst is dat als je kunt zet een oneindig aantal nummers 1481 01:12:57,070 --> 01:12:59,460 na de komma, er is geen manier waarop je 1482 01:12:59,460 --> 01:13:02,690 kunnen alle mogelijke vormen nummers die we werden onderwezen 1483 01:13:02,690 --> 01:13:04,990 op de lagere school kunnen bestaan ​​in de wereld. 1484 01:13:04,990 --> 01:13:08,870 Een computer wezen moet Kies een subset van de getallen 1485 01:13:08,870 --> 01:13:10,200 om nauwkeurig te vertegenwoordigen. 1486 01:13:10,200 --> 01:13:12,450 >> Nu, de computer kan round misschien een beetje, 1487 01:13:12,450 --> 01:13:17,900 en kunt u toestaan ​​tot ongeveer winkel elk nummer dat u zou kunnen wensen. 1488 01:13:17,900 --> 01:13:20,940 Maar net intuïtief, als je een eindig aantal bits, 1489 01:13:20,940 --> 01:13:24,560 je kunt ze alleen permuteren op zoveel manieren eindig. 1490 01:13:24,560 --> 01:13:26,570 Dus je kan onmogelijk Gebruik een eindig aantal 1491 01:13:26,570 --> 01:13:29,880 permutatie van bits, patronen van nullen en enen, 1492 01:13:29,880 --> 01:13:32,940 een oneindige vertegenwoordigen aantal getallen, 1493 01:13:32,940 --> 01:13:37,370 wat suggereert dat computers zou kunnen heel goed liegen tegen ons soms. 1494 01:13:37,370 --> 01:13:38,770 >> In feite, laten we dit doen. 1495 01:13:38,770 --> 01:13:41,239 Laat me teruggaan naar CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Laat me ga je gang en het creëren van een klein programma 1497 01:13:43,030 --> 01:13:47,940 riep Onnauwkeurigheid, aan te tonen dat computers zijn inderdaad onnauwkeurig. 1498 01:13:47,940 --> 01:13:51,910 >> En laat me ga je gang en beginnen met een deel van die code van vóór, 1499 01:13:51,910 --> 01:13:53,830 en nu gewoon doen het volgende. 1500 01:13:53,830 --> 01:14:03,640 Laat me ga je gang en doe printf, procent f, backslash n, 1 gedeeld door 10. 1501 01:14:03,640 --> 01:14:07,430 Met andere woorden, laten we duiken dieper 1/10, als 1 en gedeeld door 10. 1502 01:14:07,430 --> 01:14:09,760 Zeker, kan een computer vertegenwoordigen 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Dus laten we gaan door en maak onnauwkeurigheid. 1504 01:14:13,620 --> 01:14:14,390 Laten we eens kijken. 1505 01:14:14,390 --> 01:14:16,210 Format bepaalt het type double. 1506 01:14:16,210 --> 01:14:18,160 Maar het argument heeft type int. 1507 01:14:18,160 --> 01:14:19,040 Wat gebeurd er? 1508 01:14:19,040 --> 01:14:21,970 >> Oh, interessant, dus het is een les geleerd van voor. 1509 01:14:21,970 --> 01:14:26,050 Ik zeg, hey, computer-show me een vlotter met een procent f. 1510 01:14:26,050 --> 01:14:28,200 Maar ik ben het geven van 2 ints. 1511 01:14:28,200 --> 01:14:31,120 Dus het blijkt, kan ik dit oplossen dit in een paar manieren. 1512 01:14:31,120 --> 01:14:38,430 >> Ik kon het gewoon weer een in 1.0, en 10 tot 10,0, dat zou inderdaad 1513 01:14:38,430 --> 01:14:42,390 hebben het effect van het omzetten ze in floats-- toch hopelijk 1514 01:14:42,390 --> 01:14:43,180 hetzelfde nummer. 1515 01:14:43,180 --> 01:14:45,880 Of het blijkt dat er iets we zullen weer te zien het duurde niet lang. 1516 01:14:45,880 --> 01:14:47,170 Je kon de nummers uitbrengen. 1517 01:14:47,170 --> 01:14:49,880 >> U kunt met behulp van deze haakjes expressie, kun je zeggen, 1518 01:14:49,880 --> 01:14:52,560 hey, computer, neem deze 10, waarvan ik weet dat een int. 1519 01:14:52,560 --> 01:14:54,660 Maar behandelen, dan kunt u, alsof het een vlotter. 1520 01:14:54,660 --> 01:14:56,680 Maar dit voelt onnodig complex. 1521 01:14:56,680 --> 01:14:59,040 >> Voor ons doel van vandaag, laten we gewoon letterlijk 1522 01:14:59,040 --> 01:15:02,700 maken ze floating point waarden met een komma, zoals deze. 1523 01:15:02,700 --> 01:15:07,060 Laat me ga je gang en herhaling, maken onnauwkeurigheid, goed, dot slash 1524 01:15:07,060 --> 01:15:08,870 onnauwkeurigheid, in te voeren. 1525 01:15:08,870 --> 01:15:10,990 Oké, we zijn er goed uit. 1526 01:15:10,990 --> 01:15:18,194 >> 1 gedeeld door 10, volgens mijn Mac hier, is inderdaad 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Nu, leerde ik op de lagere school is er moet een oneindig aantal 0 te zijn. 1528 01:15:21,360 --> 01:15:23,151 Dus laten we op zijn minst proberen een aantal van die te zien. 1529 01:15:23,151 --> 01:15:26,770 Het blijkt dat printf is een beetje liefhebber nog dan we heb gebruikt. 1530 01:15:26,770 --> 01:15:30,890 Het blijkt dat je niet hoeft aan te geven gewoon procent f, of gewoon procent i. 1531 01:15:30,890 --> 01:15:33,830 Je kunt eigenlijk opgeven enige controle mogelijkheden. 1532 01:15:33,830 --> 01:15:36,470 >> In het bijzonder, ik ga te zeggen, hey, printf, 1533 01:15:36,470 --> 01:15:39,660 eigenlijk toon me 10 cijfers achter de komma. 1534 01:15:39,660 --> 01:15:40,820 Dus het ziet er een beetje raar. 1535 01:15:40,820 --> 01:15:42,845 Maar u zegt procent, dot, hoeveel nummers 1536 01:15:42,845 --> 01:15:44,970 je wilt zien na de komma, en dan is f 1537 01:15:44,970 --> 01:15:48,340 voor platte, alleen maar omdat dat is wat de documentatie zegt. 1538 01:15:48,340 --> 01:15:50,080 Laat me ga je gang en op te slaan dat. 1539 01:15:50,080 --> 01:15:52,460 >> En let ook, ik krijg moe van het overtypen dingen. 1540 01:15:52,460 --> 01:15:55,900 Dus ik ben gewoon het instellen van de up en pijl omlaag op mijn sleutels hier. 1541 01:15:55,900 --> 01:15:58,710 En als ik blijf raken op, u kunnen alle opdrachten zien 1542 01:15:58,710 --> 01:16:01,090 die ik gemaakt heb, of verkeerd gemaakt. 1543 01:16:01,090 --> 01:16:04,630 >> En ik ga nu verder te gaan en eigenlijk niet gebruiken, blijkbaar. 1544 01:16:04,630 --> 01:16:11,416 Maak onnauwkeurigheid, dot slash imprecision-- zo 1545 01:16:11,416 --> 01:16:13,290 wat ik werd onderwezen in basisschool klopt. 1546 01:16:13,290 --> 01:16:19,010 Zelfs als ik af te drukken op 10 decimaal plaatst het, inderdaad, is 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Maar weet je wat? 1548 01:16:19,840 --> 01:16:21,150 >> Laten we een beetje hebberig. 1549 01:16:21,150 --> 01:16:23,990 Laten we zeggen, als, laat me 55 punten achter de komma. 1550 01:16:23,990 --> 01:16:26,160 Laten we dit echt te nemen Programma voor een spin. 1551 01:16:26,160 --> 01:16:31,170 Laat me remake met make onnauwkeurigheid, dot slash, onnauwkeurigheid. 1552 01:16:31,170 --> 01:16:32,390 >> En hier gaan we. 1553 01:16:32,390 --> 01:16:34,420 Je jeugd was een leugen. 1554 01:16:34,420 --> 01:16:48,410 Blijkbaar, 1 gedeeld door 10 inderdaad 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Wat is er aan de hand? 1556 01:16:49,740 --> 01:16:53,360 Nou, het blijkt dat, als je soort kijk ver genoeg uit in de onderliggende 1557 01:16:53,360 --> 01:16:55,950 weergave van deze nummer, het eigenlijk 1558 01:16:55,950 --> 01:17:00,400 is niet exact 1/10, of 0,1 en een oneindig aantal nullen. 1559 01:17:00,400 --> 01:17:01,630 Nu, waarom is dat? 1560 01:17:01,630 --> 01:17:06,250 >> Nou, ook al is dit een eenvoudige nummer ons mensen, 1 gedeeld door 10, 1561 01:17:06,250 --> 01:17:10,910 het is nog steeds een van de oneindig veel nummers die we konden bedenken. 1562 01:17:10,910 --> 01:17:14,490 Maar een computer kan alleen vertegenwoordigen eindig veel dus nummers. 1563 01:17:14,490 --> 01:17:18,710 En dus, effectief, wat de computer toont ons is de dichtstbijzijnde 1564 01:17:18,710 --> 01:17:22,940 aanpassing aan het aantal we willen geloven is 1/10, 1565 01:17:22,940 --> 01:17:27,760 of eigenlijk ad infinitum 0,10000. 1566 01:17:27,760 --> 01:17:30,425 >> Veeleer is dit echter zo dicht als het kan krijgen. 1567 01:17:30,425 --> 01:17:32,300 En inderdaad, als je kijkt onder de motorkap, 1568 01:17:32,300 --> 01:17:37,050 als wij zijn hier door te kijken 55 cijfers achter de komma, 1569 01:17:37,050 --> 01:17:39,990 we eigenlijk zien dat de werkelijkheid. 1570 01:17:39,990 --> 01:17:42,610 Nu als een terzijde, als je hebt ooit de movie-- gezien 1571 01:17:42,610 --> 01:17:45,780 de meeste van jullie waarschijnlijk haven't-- maar Superman 3 enkele jaren geleden, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor dit wezen leveraged werkelijkheid in zijn bedrijf om veel te stelen 1573 01:17:49,500 --> 01:17:53,500 van fracties en fracties van centen, omdat de company-- als ik me goed herinner, 1574 01:17:53,500 --> 01:17:57,210 het is al een while-- wezen was weggooien van iets dat niet paste 1575 01:17:57,210 --> 01:17:58,790 in het begrip cent. 1576 01:17:58,790 --> 01:18:01,480 >> Maar als je optelt al deze klein, klein, kleine aantallen weer, 1577 01:18:01,480 --> 01:18:04,960 en opnieuw, en opnieuw, kunt u, net als in zijn geval, maak een goede hoeveelheid geld. 1578 01:18:04,960 --> 01:18:08,010 >> Diezelfde idee werd opgelicht door een meer recente, maar nu nog ouder 1579 01:18:08,010 --> 01:18:10,500 film, genaamd Office Space, waar de jongens in die film, 1580 01:18:10,500 --> 01:18:13,501 deed hetzelfde, verpest volledig, eindigde met veel te veel 1581 01:18:13,501 --> 01:18:14,666 geld op hun bankrekening. 1582 01:18:14,666 --> 01:18:15,800 Het was allemaal zeer verdacht. 1583 01:18:15,800 --> 01:18:19,290 Maar aan het eind van de dag, onnauwkeurigheid is overal om ons heen. 1584 01:18:19,290 --> 01:18:22,240 >> En ook dat kan zijn angstwekkend het geval. 1585 01:18:22,240 --> 01:18:25,590 Het blijkt dat Superman 3 en Office Space terzijde, er 1586 01:18:25,590 --> 01:18:28,460 kunnen een aantal zeer reële wereld vertakkingen 1587 01:18:28,460 --> 01:18:32,290 de realiteit van onnauwkeurige representatie van data 1588 01:18:32,290 --> 01:18:34,770 dat zelfs wij mensen aan deze dag niet per se 1589 01:18:34,770 --> 01:18:38,230 begrijpen zo goed als we moeten, of onthoud zo vaak als we moeten. 1590 01:18:38,230 --> 01:18:42,950 En inderdaad, de volgende clip uit een kijkje bij enkele zeer reële wereld 1591 01:18:42,950 --> 01:18:47,730 vertakkingen van wat er gebeurt als je niet waarderen de onnauwkeurigheid die 1592 01:18:47,730 --> 01:18:50,065 kan gebeuren getallen representatie. 1593 01:18:50,065 --> 01:18:51,300 >> [VIDEO AFSPELEN] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, We hebben allemaal te accepteren de vaak frustrerende problemen 1595 01:18:55,620 --> 01:19:00,310 te gaan met them-- bugs, virussen, en software glitches, 1596 01:19:00,310 --> 01:19:03,130 voor kleine prijzen te betalen voor het gemak. 1597 01:19:03,130 --> 01:19:07,800 Maar in de high-tech en hoge snelheid militaire en ruimtevaartprogramma toepassingen, 1598 01:19:07,800 --> 01:19:12,800 het kleinste probleem worden vergroot tot een ramp. 1599 01:19:12,800 --> 01:19:18,900 >> Op 4 juni 1996, wetenschappers voorbereid om een ​​onbemande Ariane 5-raket te lanceren. 1600 01:19:18,900 --> 01:19:21,220 Het vervoerde wetenschappelijke satellieten ontworpen 1601 01:19:21,220 --> 01:19:24,600 precies hoe de vaststelling aardmagnetische veld wisselwerking 1602 01:19:24,600 --> 01:19:27,410 met zonne-wind. 1603 01:19:27,410 --> 01:19:30,800 De raket werd gebouwd voor het Europees Ruimteagentschap, 1604 01:19:30,800 --> 01:19:34,370 en getild uit de faciliteit aan de kust van Frans-Guyana. 1605 01:19:34,370 --> 01:19:37,540 >> -Bij Ongeveer 37 seconden in de vlucht, zij eerst 1606 01:19:37,540 --> 01:19:39,270 merkte er iets fout gaat. 1607 01:19:39,270 --> 01:19:42,250 De mondstukken zijn in zwenkbare een manier om ze echt niet moeten doen. 1608 01:19:42,250 --> 01:19:46,580 Ongeveer 40 seconden in de vlucht, duidelijk, het voertuig in de problemen zat. 1609 01:19:46,580 --> 01:19:48,850 >> En dat is wanneer ze maakten een beslissing te vernietigen. 1610 01:19:48,850 --> 01:19:52,780 De range safety officer, met enorme lef, drukte op de knop, 1611 01:19:52,780 --> 01:19:58,150 blies de raket, voordat het kon uitgegroeid tot een gevaar voor de openbare veiligheid. 1612 01:19:58,150 --> 01:20:01,060 >> -Dit Was het meisje reis van de Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 En de vernietiging nam plaats als gevolg van een fout 1614 01:20:03,960 --> 01:20:05,822 ingebed in de software van de raket. 1615 01:20:05,822 --> 01:20:08,280 -Het Probleem op de Ariane was dat er een nummer dat 1616 01:20:08,280 --> 01:20:10,600 vereiste 64 bits uit te drukken. 1617 01:20:10,600 --> 01:20:13,590 En ze wilden bekeren naar een 16-bits getal. 1618 01:20:13,590 --> 01:20:15,610 Zij aangenomen dat de nummer werd nooit 1619 01:20:15,610 --> 01:20:20,980 zeer groot zijn, dat de meeste van deze cijfers in een 64-bits getal waren nullen. 1620 01:20:20,980 --> 01:20:22,440 Ze hadden het verkeerd. 1621 01:20:22,440 --> 01:20:25,060 >> -de Onvermogen van een softwareprogramma te accepteren 1622 01:20:25,060 --> 01:20:29,510 het soort getal gegenereerd door een ander was de oorzaak van de storing. 1623 01:20:29,510 --> 01:20:34,350 Software ontwikkeling was geworden van een zeer kostbaar deel van nieuwe technologie. 1624 01:20:34,350 --> 01:20:38,140 De Ariane-raket zijn erg geweest succesvolle, zoveel van de software 1625 01:20:38,140 --> 01:20:41,550 gecreëerd ook was gebruikt in de Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -De Fundamentele probleem was dat de Ariane 5 was sneller versnelde sneller. 1627 01:20:47,940 --> 01:20:51,450 En de software niet had goed voor. 1628 01:20:51,450 --> 01:20:55,060 >> -De Vernietiging van de raket was een enorme financiële ramp, 1629 01:20:55,060 --> 01:20:58,790 allemaal te wijten aan een minuut softwarefout. 1630 01:20:58,790 --> 01:21:01,210 Maar dit was niet de eerste time data conversie problemen 1631 01:21:01,210 --> 01:21:04,820 had moderne rakettechnologie geplaagd. 1632 01:21:04,820 --> 01:21:08,050 >> -In 1991, met de start van de eerste Golfoorlog, 1633 01:21:08,050 --> 01:21:10,570 de Patriot Missile kende een soortgelijke 1634 01:21:10,570 --> 01:21:12,800 van het aantal conversie probleem. 1635 01:21:12,800 --> 01:21:16,090 En daardoor 28 mensen, 28 Amerikaanse soldaten, 1636 01:21:16,090 --> 01:21:19,080 werden gedood, en ongeveer 100 anderen gewond, 1637 01:21:19,080 --> 01:21:22,780 wanneer de Patriot, die verondersteld werd om te beschermen tegen inkomende Scuds, 1638 01:21:22,780 --> 01:21:25,830 niet aan een raket te vuren. 1639 01:21:25,830 --> 01:21:31,670 >> -Wanneer Irak Koeweit binnenviel, en Amerika gelanceerd Desert Storm in het begin van 1991, 1640 01:21:31,670 --> 01:21:35,780 Patriot Missile batterijen werden ingezet te beschermen Saoedi-Arabië en Israël 1641 01:21:35,780 --> 01:21:39,230 van de Iraakse Scud raketaanvallen. 1642 01:21:39,230 --> 01:21:43,810 De Patriot is een Amerikaanse middellange afstand oppervlak aan de lucht systeem, gefabriceerd 1643 01:21:43,810 --> 01:21:45,770 door de Raytheon bedrijf. 1644 01:21:45,770 --> 01:21:52,340 >> -De Grootte van de Patriot interceptor zelf is ongeveer ongeveer 20 voet lang. 1645 01:21:52,340 --> 01:21:55,230 En hij weegt ongeveer 2.000 pond. 1646 01:21:55,230 --> 01:21:59,320 En het draagt ​​een kernkop van ongeveer, Ik denk dat het ongeveer 150 pond. 1647 01:21:59,320 --> 01:22:03,930 En de kernkop zelf een hoog explosieve, die 1648 01:22:03,930 --> 01:22:07,330 heeft fragmenten eromheen. 1649 01:22:07,330 --> 01:22:11,680 De behuizing van de kernkop is ontworpen om te fungeren als hagel. 1650 01:22:11,680 --> 01:22:14,110 >> -De Raketten worden uitgevoerd vier per container, 1651 01:22:14,110 --> 01:22:17,130 en worden vervoerd door een oplegger. 1652 01:22:17,130 --> 01:22:24,930 >> -De Patriot anti-raketsysteem teruggaat nu minstens 20 jaar. 1653 01:22:24,930 --> 01:22:28,420 Het werd oorspronkelijk ontworpen als luchtafweer raket 1654 01:22:28,420 --> 01:22:30,720 neer te schieten vijandelijke vliegtuigen. 1655 01:22:30,720 --> 01:22:34,500 In de eerste Golfoorlog, wanneer die oorlog kwam, 1656 01:22:34,500 --> 01:22:39,745 het leger wilden gebruiken om neer te schieten Scuds, niet vliegtuigen. 1657 01:22:39,745 --> 01:22:43,620 >> De Iraakse Luchtmacht was niet zo veel van een probleem. 1658 01:22:43,620 --> 01:22:46,670 Maar het leger was bezorgd over Scuds. 1659 01:22:46,670 --> 01:22:50,170 En dus probeerde ze te upgrade van de Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Een vijand raket reizen op mach 5 1661 01:22:52,800 --> 01:22:55,830 zou worden uitdagend genoeg. 1662 01:22:55,830 --> 01:22:58,490 Maar toen de Patriot werd in allerijl in dienst, 1663 01:22:58,490 --> 01:23:02,860 het leger was niet op de hoogte van een Iraakse wijziging die gemaakt 1664 01:23:02,860 --> 01:23:05,930 hun Scuds bijna onmogelijk te raken. 1665 01:23:05,930 --> 01:23:10,740 >> Wat is er gebeurd is de Scuds dat kwamen in waren instabiel. 1666 01:23:10,740 --> 01:23:11,692 Ze waren wiebelen. 1667 01:23:11,692 --> 01:23:14,910 De reden hiervoor was de Irakezen, met het oog 1668 01:23:14,910 --> 01:23:18,280 tot 600 kilometer krijgen uit een 300 kilometer 1669 01:23:18,280 --> 01:23:21,700 afstandsraketten, nam het gewicht aan de voorkant kernkop. 1670 01:23:21,700 --> 01:23:23,390 Ze maakten de kernkop lichter. 1671 01:23:23,390 --> 01:23:27,330 >> Dus nu de Patriot is proberen de Scud komen. 1672 01:23:27,330 --> 01:23:30,230 En meestal, de overgrote meerderheid van de tijd, 1673 01:23:30,230 --> 01:23:32,940 het zou gewoon vliegen door de Scud. 1674 01:23:32,940 --> 01:23:37,260 Zodra de Patriot netbeheerders realiseerde de Patriot miste zijn doel, 1675 01:23:37,260 --> 01:23:41,690 ze ontploft de Patriot's kernkop mogelijke slachtoffers of vermijden 1676 01:23:41,690 --> 01:23:44,570 mocht op de grond vallen. 1677 01:23:44,570 --> 01:23:48,790 >> -dat Was wat de meeste mensen zag, die grote vuurballen in de lucht, 1678 01:23:48,790 --> 01:23:54,550 en verkeerd begrepen als onderschept van Scud kernkoppen. 1679 01:23:54,550 --> 01:23:56,630 >> -hoewel In de nacht luchten, verscheen Patriots 1680 01:23:56,630 --> 01:24:00,370 succesvol zijn vernietigen Scuds op Dhahran, 1681 01:24:00,370 --> 01:24:03,360 kon er geen vergissing zijn over de prestatie. 1682 01:24:03,360 --> 01:24:07,970 Er is de Patriot's radarsysteem verloren spoor van een inkomende Scud, 1683 01:24:07,970 --> 01:24:10,721 en nooit gelanceerd als gevolg om een ​​software fout. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Het was de Israëli's die voor het eerst ontdekt dat hoe langer het systeem op, 1686 01:24:18,940 --> 01:24:22,690 hoe groter de tijd discrepantie werd, als gevolg van een klok ingebed 1687 01:24:22,690 --> 01:24:24,810 in de computer van het systeem. 1688 01:24:24,810 --> 01:24:28,210 >> -Over Twee weken voor de tragedie in Dhahran, 1689 01:24:28,210 --> 01:24:30,770 de Israëli's gemeld aan het ministerie van Defensie 1690 01:24:30,770 --> 01:24:32,590 dat het systeem werd tijd te verliezen. 1691 01:24:32,590 --> 01:24:35,360 Na ongeveer acht uur of hardlopen, ze merkten dat het systeem 1692 01:24:35,360 --> 01:24:37,720 was steeds merkbaar minder nauwkeurig. 1693 01:24:37,720 --> 01:24:41,900 Het ministerie van Defensie reageerde door vertellend allen van de Patriot-batterijen 1694 01:24:41,900 --> 01:24:44,950 niet de systemen verlaten voor een lange tijd. 1695 01:24:44,950 --> 01:24:49,160 Ze hebben nooit gezegd wat een lange tijd was-- acht uur, 10 uur, 1000 uur. 1696 01:24:49,160 --> 01:24:51,360 Niemand wist. 1697 01:24:51,360 --> 01:24:53,380 >> -De Patriot batterij gestationeerd op de kazerne 1698 01:24:53,380 --> 01:24:58,350 in Dhahran en de gebrekkige interne klok waren meer dan 100 uur geweest op 1699 01:24:58,350 --> 01:25:01,670 in de nacht van 25 februari. 1700 01:25:01,670 --> 01:25:05,917 >> -Het Bijgehouden tijd met een nauwkeurigheid ongeveer een tiende seconde. 1701 01:25:05,917 --> 01:25:08,000 Nu, een tiende van een seconde is een interessant getal, 1702 01:25:08,000 --> 01:25:11,920 want het kan niet worden uitgedrukt in binaire precies die 1703 01:25:11,920 --> 01:25:16,820 betekent kan niet exact worden uitgedrukt in elke moderne digitale computer. 1704 01:25:16,820 --> 01:25:18,540 Het is moeilijk te geloven. 1705 01:25:18,540 --> 01:25:21,210 >> Maar gebruik dit als een voorbeeld. 1706 01:25:21,210 --> 01:25:23,540 Laten we de nummer een derde plaats. 1707 01:25:23,540 --> 01:25:27,350 Een derde kan niet uitgedrukt in decimale precies. 1708 01:25:27,350 --> 01:25:32,080 Een derde is 0,333 er aan de hand voor oneindigheid. 1709 01:25:32,080 --> 01:25:36,480 >> Er is geen manier om dat te doen met absolute nauwkeurigheid in decimalen. 1710 01:25:36,480 --> 01:25:39,560 Dat is precies het soort probleem dat gebeurde in de Patriot. 1711 01:25:39,560 --> 01:25:44,100 Hoe langer het systeem liep, de slechter de fout werd. 1712 01:25:44,100 --> 01:25:48,890 >> -Na 100 uur van de werking, de fout in de tijd was slechts ongeveer eenderde 1713 01:25:48,890 --> 01:25:50,600 van een seconde. 1714 01:25:50,600 --> 01:25:54,210 Maar in termen van gericht op een raket reizen op mach 5, 1715 01:25:54,210 --> 01:25:58,710 het resulteerde in een tracking fout van meer dan 600 meter. 1716 01:25:58,710 --> 01:26:02,120 Het zou een fatale fout zijn de soldaten wat 1717 01:26:02,120 --> 01:26:08,940 gebeurd is een Scud lancering was gedetecteerd door vroegtijdige waarschuwing satellieten 1718 01:26:08,940 --> 01:26:12,860 en ze wisten dat de Scud was komen in hun algemene richting. 1719 01:26:12,860 --> 01:26:15,320 Ze wisten niet waar het vandaan kwam. 1720 01:26:15,320 --> 01:26:18,250 >> -Het Was nu aan de radar component van het Patriot-systeem 1721 01:26:18,250 --> 01:26:23,190 het verdedigen van Dhahran te vinden en te houden bijhouden van de inkomende vijandelijke raket. 1722 01:26:23,190 --> 01:26:24,609 >> -De Radar was erg slim. 1723 01:26:24,609 --> 01:26:26,650 Het zou eigenlijk bijhouden de positie van de Scud, 1724 01:26:26,650 --> 01:26:30,350 en dan voorspellen waar het waarschijnlijk zal de volgende keer dat de radar gezonden 1725 01:26:30,350 --> 01:26:31,420 een puls uit. 1726 01:26:31,420 --> 01:26:33,110 Dat werd een reeks gate genoemd. 1727 01:26:33,110 --> 01:26:37,660 >> -Dan, Zodra de Patriot beslist genoeg tijd heeft 1728 01:26:37,660 --> 01:26:42,450 doorgegeven om terug te gaan en de volgende locatie voor dit gedetecteerde object, 1729 01:26:42,450 --> 01:26:43,600 het gaat terug. 1730 01:26:43,600 --> 01:26:48,650 Dus als het ging terug naar de verkeerde plaats het dan ziet geen object. 1731 01:26:48,650 --> 01:26:52,160 En het besluit dat er geen sprake was object was een valse detectie, 1732 01:26:52,160 --> 01:26:53,930 en daalt het spoor. 1733 01:26:53,930 --> 01:26:57,030 >> -De Inkomende Scud verdwenen van het radarscherm. 1734 01:26:57,030 --> 01:27:00,260 En seconden later, sloeg in de kazerne. 1735 01:27:00,260 --> 01:27:06,150 De Scud gedood 28 en was de laatste een in brand gestoken tijdens de eerste Golfoorlog. 1736 01:27:06,150 --> 01:27:11,960 >> Tragisch, de bijgewerkte software aangekomen bij Dhahran de volgende dag. 1737 01:27:11,960 --> 01:27:14,930 De software fout had is vastgesteld, het sluiten 1738 01:27:14,930 --> 01:27:19,806 één hoofdstuk in de onrustige geschiedenis van de Patriot raketten. 1739 01:27:19,806 --> 01:27:20,729 >> [VIDEO AFSPELEN] 1740 01:27:20,729 --> 01:27:23,520 DAVID J. MALAN: Dus dit is allemaal zeggen dat deze kwesties van overflow 1741 01:27:23,520 --> 01:27:25,860 en onnauwkeurigheid zijn al te reëel. 1742 01:27:25,860 --> 01:27:26,920 Dus hoe zijn we hier? 1743 01:27:26,920 --> 01:27:28,895 We begonnen met het net over printf. 1744 01:27:28,895 --> 01:27:31,270 Nogmaals, deze functie drukt iets op het scherm, 1745 01:27:31,270 --> 01:27:33,450 en we daarna geïntroduceerd enkele andere functies 1746 01:27:33,450 --> 01:27:34,945 de zogenaamde CS50 bibliotheek. 1747 01:27:34,945 --> 01:27:36,910 En we blijven zien deze te zijner tijd. 1748 01:27:36,910 --> 01:27:40,760 En wij, in het bijzonder, wennen koord, en krijg int, en nu ook vlotter, 1749 01:27:40,760 --> 01:27:44,410 en weer anderen nog steeds zullen we tegenkomen en gebruik maken van ons het duurde niet lang. 1750 01:27:44,410 --> 01:27:47,220 >> Maar af en toe, hebben bleek al behoefte 1751 01:27:47,220 --> 01:27:50,520 om terug te slaan wat die functies de hand? 1752 01:27:50,520 --> 01:27:52,920 Ze overhandigen ons terug een string, of een int of een float. 1753 01:27:52,920 --> 01:27:56,070 En soms moeten we dat te zetten tekenreeks of int of float, ergens. 1754 01:27:56,070 --> 01:28:00,100 >> En om die dingen op te slaan, te herinneren gewoon zoals in Scratch, hebben we variabelen. 1755 01:28:00,100 --> 01:28:03,260 Maar in tegenstelling tot in Scratch, in C hebben wij alleen types 1756 01:28:03,260 --> 01:28:05,530 van variables-- data soorten, meer generally-- 1757 01:28:05,530 --> 01:28:08,640 waaronder een koord, int, een drijven, en die anderen nog. 1758 01:28:08,640 --> 01:28:12,321 >> En dus toen we verklaren variabelen in C, we moeten onze data types te verklaren. 1759 01:28:12,321 --> 01:28:14,820 Dit is niet iets wat we zullen moeten later doen in het semester 1760 01:28:14,820 --> 01:28:16,810 we overgang naar andere talen. 1761 01:28:16,810 --> 01:28:19,610 Maar voor nu, moeten we a priori vooraf, 1762 01:28:19,610 --> 01:28:24,370 uitleggen aan de computer welk type variabele willen we dat het ons geeft. 1763 01:28:24,370 --> 01:28:27,290 >> Nu, ondertussen, afdrukken dat soort types data, 1764 01:28:27,290 --> 01:28:29,570 we moeten zeggen printf wat te verwachten. 1765 01:28:29,570 --> 01:28:32,450 En we zagen procent s voor strijkers, en i procent voor integers, 1766 01:28:32,450 --> 01:28:33,790 en een paar anderen al. 1767 01:28:33,790 --> 01:28:37,237 En die zijn gewoon eisen voor de visuele presentatie 1768 01:28:37,237 --> 01:28:38,070 van die informatie. 1769 01:28:38,070 --> 01:28:42,080 >> En elk van deze kan eigenlijk geparametriseerd of getweaked op een bepaalde manier, 1770 01:28:42,080 --> 01:28:45,370 als je wilt controle verder het type van de output die je krijgt. 1771 01:28:45,370 --> 01:28:49,604 En inderdaad blijkt dat niet alleen is er backslash n voor een nieuwe regel. 1772 01:28:49,604 --> 01:28:52,520 Er is iets anders opgeroepen backslash r voor een harde return, die 1773 01:28:52,520 --> 01:28:54,360 is meer verwant is aan een oude school schrijfmachine, 1774 01:28:54,360 --> 01:28:57,690 en ook Windows voor vele jaren. 1775 01:28:57,690 --> 01:28:59,690 >> Er is backslash t voor tabs. 1776 01:28:59,690 --> 01:29:03,170 Blijkt, dat als je wilt dubbele aanhalingstekens binnen van een string, 1777 01:29:03,170 --> 01:29:05,000 herinneren dat we hebben gebruikt dubbele aanhalingstekens double 1778 01:29:05,000 --> 01:29:07,900 citaat op de linker en de rechter uiteinden van onze strings tot nu toe. 1779 01:29:07,900 --> 01:29:09,420 Dat lijkt om dingen te verwarren. 1780 01:29:09,420 --> 01:29:12,503 >> Wilt u een dubbele quote in te zetten het midden van een string-- en, inderdaad, 1781 01:29:12,503 --> 01:29:13,670 Het is verwarrend om te zien. 1782 01:29:13,670 --> 01:29:17,120 En dus je moet ontsnappen, om zo te spreken, een dubbel aanhalingsteken met iets 1783 01:29:17,120 --> 01:29:18,860 als, letterlijk, backslash dubbel aanhalingsteken. 1784 01:29:18,860 --> 01:29:20,230 En er is een paar andere nog. 1785 01:29:20,230 --> 01:29:24,540 En we zullen meer van deze te zien in het werkelijke gebruik het duurde niet lang. 1786 01:29:24,540 --> 01:29:27,930 >> Dus laten we nu de overgang van data, en vertegenwoordiging, 1787 01:29:27,930 --> 01:29:30,820 en rekenkundige operatoren, alle die gaf ons een aantal gebouw 1788 01:29:30,820 --> 01:29:32,070 blokken om mee te spelen. 1789 01:29:32,070 --> 01:29:34,481 Maar laten we nu eigenlijk te geven ons de rest van de woordenschat 1790 01:29:34,481 --> 01:29:36,230 die we al hadden vorige week met Scratch 1791 01:29:36,230 --> 01:29:39,350 door het nemen van een kijkje bij enkele andere constructies in C-- niet allemaal. 1792 01:29:39,350 --> 01:29:41,680 Maar de ideeën die we zijn over om echt gewoon zien 1793 01:29:41,680 --> 01:29:45,610 benadrukken de vertaling van één taal, Scratch, naar de andere, C. 1794 01:29:45,610 --> 01:29:48,470 >> En na verloop van tijd, zullen we pick-up meer instrumenten voor onze toolkit, 1795 01:29:48,470 --> 01:29:49,820 zo te zeggen, syntactisch. 1796 01:29:49,820 --> 01:29:54,190 En inderdaad, zult u zien dat de ideeën zijn nu eerder bekend van vorige week. 1797 01:29:54,190 --> 01:29:55,200 Dus laten we dit doen. 1798 01:29:55,200 --> 01:29:58,870 >> Laten we ga je gang en zweep een programma dat gebruik maakt eigenlijk een aantal uitdrukkingen, 1799 01:29:58,870 --> 01:30:00,720 een Booleaanse uitdrukking. 1800 01:30:00,720 --> 01:30:02,810 Laat me hier ga je gang en maak een nieuw bestand. 1801 01:30:02,810 --> 01:30:06,090 Ik zal dit condition.c noemen. 1802 01:30:06,090 --> 01:30:09,350 >> Laat me ga je gang en omvatten de CS50 bibliotheek. 1803 01:30:09,350 --> 01:30:12,640 En laat me ga je gang en omvatten standaard IO.h voor onze functies, 1804 01:30:12,640 --> 01:30:14,690 en printf, en nog veel meer respectievelijk. 1805 01:30:14,690 --> 01:30:18,900 Ik geef mezelf dat standaardtekst van int main leegte, wiens verklaring we zullen 1806 01:30:18,900 --> 01:30:20,360 terug te komen in de toekomst. 1807 01:30:20,360 --> 01:30:23,820 >> Laat me nu ga je gang en geef mijzelf een int via get int. 1808 01:30:23,820 --> 01:30:25,970 Laat mij dan ga je gang en dit te doen. 1809 01:30:25,970 --> 01:30:30,150 Ik wil zeggen dat als ik is less-- laten onderscheid tussen positieve, negatieve, 1810 01:30:30,150 --> 01:30:31,260 of nul waarden. 1811 01:30:31,260 --> 01:30:36,630 >> Dus als ik minder dan nul is, laat me moet gewoon dit programma gewoon zeggen, 1812 01:30:36,630 --> 01:30:42,370 negatief, backslash n, anders Als i groter is dan nul. 1813 01:30:42,370 --> 01:30:47,030 Nu ben ik natuurlijk gaan zeggen printf positief, backslash n. 1814 01:30:47,030 --> 01:30:50,690 En dan anders if-- ik dit kon doen. 1815 01:30:50,690 --> 01:30:53,410 >> Ik kon doen als ik gelijk is aan 0. 1816 01:30:53,410 --> 01:30:55,840 Maar ik zou gaan maken op minstens één fout al. 1817 01:30:55,840 --> 01:30:59,480 Bedenk dat het isgelijkteken is niet gelijk, want wij mensen kennen. 1818 01:30:59,480 --> 01:31:01,010 >> Maar het is de opdracht operator. 1819 01:31:01,010 --> 01:31:05,640 En we willen niet te nemen 0 op de rechts en zet het in i aan de linkerkant. 1820 01:31:05,640 --> 01:31:11,810 Dus om deze verwarring te vermijden, of misschien wel misbruik van het isgelijkteken, 1821 01:31:11,810 --> 01:31:14,740 de mens besloot enkele jaren geleden dat in vele programmeertalen 1822 01:31:14,740 --> 01:31:18,000 wanneer u wilt controleren voor de gelijkheid tussen links en rechts 1823 01:31:18,000 --> 01:31:19,635 u daadwerkelijk gebruikt is gelijk aan gelijken. 1824 01:31:19,635 --> 01:31:21,010 Zodat je op de isgelijkteken tweemaal. 1825 01:31:21,010 --> 01:31:25,600 Wanneer u wilt toewijzen van rechts naar links, gebruikt u één isgelijkteken. 1826 01:31:25,600 --> 01:31:29,360 Dus we konden dit-- anders doen als ik gelijk gelijk is aan nul. 1827 01:31:29,360 --> 01:31:31,710 >> Ik zou dan gaan open mijn accolades, 1828 01:31:31,710 --> 01:31:36,087 en zeggen: printf 0, backslash n, gedaan. 1829 01:31:36,087 --> 01:31:38,170 Maar vergeet niet hoe deze vorken in de weg kan werken. 1830 01:31:38,170 --> 01:31:39,836 En, echt, denk maar aan de logica. 1831 01:31:39,836 --> 01:31:41,510 i is een getal. 1832 01:31:41,510 --> 01:31:43,320 Het is een geheel getal, in het bijzonder. 1833 01:31:43,320 --> 01:31:48,600 En dat betekent dat het gaat om minder dan 0 of groter dan 0 of 0. 1834 01:31:48,600 --> 01:31:51,600 Dus er is een soort van deze impliciete default case. 1835 01:31:51,600 --> 01:31:54,920 >> En dus we konden, net als Scratch, afzien van de anders als, 1836 01:31:54,920 --> 01:31:55,747 en gewoon zeggen anders. 1837 01:31:55,747 --> 01:31:57,830 Logisch, als je de programmeur weet dat er alleen 1838 01:31:57,830 --> 01:32:01,635 drie emmers waarin een scenario kan fall-- de eerste, 1839 01:32:01,635 --> 01:32:03,510 de tweede of de derde in deze niet case-- doen 1840 01:32:03,510 --> 01:32:07,100 moeite toevoeging van de extra precisie en de additionele logica daar. 1841 01:32:07,100 --> 01:32:09,690 Gewoon doorgaan met de default geval is van het andere. 1842 01:32:09,690 --> 01:32:11,950 >> Nu, laten we gaan vooruit na deze besparing, maken 1843 01:32:11,950 --> 01:32:15,760 voorwaarden dot slash conditions-- niet een grote user interface, 1844 01:32:15,760 --> 01:32:18,914 want ik ben niet wordt gevraagd de gebruiker, zoals ik al eerder zei. 1845 01:32:18,914 --> 01:32:19,580 Maar dat is prima. 1846 01:32:19,580 --> 01:32:20,454 We zullen het simpel te houden. 1847 01:32:20,454 --> 01:32:21,890 Laten we proberen het nummer 42. 1848 01:32:21,890 --> 01:32:23,240 En dat is positief. 1849 01:32:23,240 --> 01:32:26,120 Laten we proberen het aantal 42 negatief, negatief. 1850 01:32:26,120 --> 01:32:28,244 >> Laten we proberen de waarde 0. 1851 01:32:28,244 --> 01:32:29,160 En inderdaad, het werkt. 1852 01:32:29,160 --> 01:32:33,900 Nu, zie je met problemen voordat lang, het testen van dingen drie keer, 1853 01:32:33,900 --> 01:32:34,980 waarschijnlijk niet voldoende. 1854 01:32:34,980 --> 01:32:37,438 Wilt u waarschijnlijk een aantal testen grotere aantallen, enkele kleinere 1855 01:32:37,438 --> 01:32:40,520 cijfers, een hoekje gevallen, we komen om hen te beschrijven. 1856 01:32:40,520 --> 01:32:42,500 >> Maar voor nu, is dit een vrij eenvoudig programma. 1857 01:32:42,500 --> 01:32:45,160 En ik ben er vrij zeker van, logisch, dat uit drie gevallen. 1858 01:32:45,160 --> 01:32:49,360 En, inderdaad, hoewel we gewoon gericht op de mogelijke nadelen 1859 01:32:49,360 --> 01:32:53,480 van onnauwkeurigheid en overloop, in werkelijkheid waar veel problemen CS50's, 1860 01:32:53,480 --> 01:32:56,000 we zijn niet van plan te maken over, de hele tijd, 1861 01:32:56,000 --> 01:32:59,050 die kwesties van de overloop en onnauwkeurigheid, omdat in feite in C, 1862 01:32:59,050 --> 01:33:01,889 het is eigenlijk niet zo makkelijk om die dingen te vermijden. 1863 01:33:01,889 --> 01:33:04,180 Als u wilt tellen groter en groter en groter, 1864 01:33:04,180 --> 01:33:07,510 Het blijkt dat er zijn technieken die je kunt gebruiken, vaak met dingen genoemd 1865 01:33:07,510 --> 01:33:11,240 bibliotheken, collecties van de code, die andere mensen schreven die u kunt gebruiken, 1866 01:33:11,240 --> 01:33:13,910 en andere talen zoals Java en anderen, in feite 1867 01:33:13,910 --> 01:33:15,800 maakt het een stuk makkelijker nog hogere tellen. 1868 01:33:15,800 --> 01:33:19,810 Het is dus echt sommige gevaren een functie van de taal die u gebruikt. 1869 01:33:19,810 --> 01:33:22,710 En in de komende weken zullen we zien hoe gevaarlijk C echt 1870 01:33:22,710 --> 01:33:24,950 kan zijn als je het niet goed gebruiken. 1871 01:33:24,950 --> 01:33:27,610 Maar daar, en Python en JavaScript, zal 1872 01:33:27,610 --> 01:33:32,620 we laag op een aantal extra beveiligingen, en lopen minder van die risico's. 1873 01:33:32,620 --> 01:33:35,820 >> Dus laten we een beetje meer interessante logica in ons programma. 1874 01:33:35,820 --> 01:33:39,110 Dus laat me ga je gang en maak een programma genaamd Logical 1875 01:33:39,110 --> 01:33:43,804 gewoon zo kan ik spelen met enkele eigenlijke logica, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Ik zal gewoon kopiëren en plakken sommige code uit eerdere dus ik terug 1877 01:33:46,870 --> 01:33:49,950 om dit mooie uitgangspunt. 1878 01:33:49,950 --> 01:33:53,980 >> Laat me dit keer doe char C. Ik ben gaan om het een naam te geven C 1879 01:33:53,980 --> 01:33:58,510 gewoon omdat het conventionele, krijgt een personage uit de gebruiker. 1880 01:33:58,510 --> 01:34:00,730 En laten we doen alsof Ik ben de uitvoering van een deel 1881 01:34:00,730 --> 01:34:04,130 van die Rm-programma, het verwijderen programma daarvoor gevraagd de gebruiker 1882 01:34:04,130 --> 01:34:05,400 om een ​​bestand te verwijderen. 1883 01:34:05,400 --> 01:34:06,750 Hoe kunnen we dit doen? 1884 01:34:06,750 --> 01:34:11,090 >> Ik wil zeggen, als C is gelijk aan evenaart, citaat unquote, 1885 01:34:11,090 --> 01:34:16,304 y, dan ga ik ervan uit te gaan dat de gebruiker ja heeft gekozen. 1886 01:34:16,304 --> 01:34:17,470 Ik ga gewoon om af te drukken ja. 1887 01:34:17,470 --> 01:34:19,440 Als het waren eigenlijk het schrijven het programma voor het verwijderen, 1888 01:34:19,440 --> 01:34:21,420 we konden het dossier te verwijderen met meer regels code. 1889 01:34:21,420 --> 01:34:22,461 Maar we zullen het simpel te houden. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Anders als c gelijk gelijk N-- en nu hier, ik ga zeggen, 1892 01:34:31,250 --> 01:34:32,980 de gebruiker moet niet hebben betekend. 1893 01:34:32,980 --> 01:34:34,360 En dan anders, weet je wat? 1894 01:34:34,360 --> 01:34:36,200 Ik weet niet wat anders weet de gebruiker gaat typen. 1895 01:34:36,200 --> 01:34:38,533 Dus ik ga gewoon om te zeggen dat dat is een fout, ongeacht 1896 01:34:38,533 --> 01:34:40,070 hij of zij daadwerkelijk getypt. 1897 01:34:40,070 --> 01:34:41,180 >> Dus wat is hier aan de hand? 1898 01:34:41,180 --> 01:34:44,530 Er is een fundamenteel verschil ten opzichte van wat ik heb gedaan in het verleden. 1899 01:34:44,530 --> 01:34:49,300 Dubbele aanhalingstekens, dubbele aanhalingstekens, dubbele citaten, en toch, enkele aanhalingstekens, 1900 01:34:49,300 --> 01:34:50,170 enkele aanhalingstekens. 1901 01:34:50,170 --> 01:34:52,860 Het blijkt in C, dat wanneer U wilt een string te schrijven, 1902 01:34:52,860 --> 01:34:56,680 u gebruik maken van dubbele aanhalingstekens, net zoals wij hebben gebruik gemaakt van al die tijd met printf. 1903 01:34:56,680 --> 01:35:02,030 >> Maar als je wilt om te gaan met slechts een enkel teken, een zogenaamd char, 1904 01:35:02,030 --> 01:35:03,780 dan ben je daadwerkelijk gebruik maken van enkele aanhalingstekens. 1905 01:35:03,780 --> 01:35:05,450 Degenen onder u die hebt geprogrammeerd vóór, zou je niet 1906 01:35:05,450 --> 01:35:07,850 moest zorgen te maken over deze onderscheid in bepaalde talen. 1907 01:35:07,850 --> 01:35:09,450 In C is het er wel toe doet. 1908 01:35:09,450 --> 01:35:12,560 En dus toen ik een char te krijgen en ik wil dat char te vergelijken met behulp van gelijken 1909 01:35:12,560 --> 01:35:18,350 gelijk aan een aantal letters, zoals y of n, dat doe ik, inderdaad, moeten de enkele aanhalingstekens te hebben. 1910 01:35:18,350 --> 01:35:19,770 >> Nu, laten we gaan en dit te doen. 1911 01:35:19,770 --> 01:35:26,180 Laten we doorgaan en doen maken logische dot slash logisch. 1912 01:35:26,180 --> 01:35:27,305 En nu ben ik wordt gevraagd. 1913 01:35:27,305 --> 01:35:30,638 Dus vermoedelijk een betere gebruikerservaring zou me eigenlijk vertellen wat te doen hier. 1914 01:35:30,638 --> 01:35:33,030 Maar ik ga gewoon blindelings zeggen y voor ja, OK, nice. 1915 01:35:33,030 --> 01:35:35,780 >> Laten we het weer draaien, n zonder, nice. 1916 01:35:35,780 --> 01:35:39,610 Stel dat als sommige mensen die ik ken, mijn caps lock toets is maar al te vaak. 1917 01:35:39,610 --> 01:35:43,740 Dus ik doe het kapitaal Y, voer, fout. 1918 01:35:43,740 --> 01:35:46,130 OK, het is niet precies wat ik verwachtte. 1919 01:35:46,130 --> 01:35:48,170 Inderdaad, de computer is letterlijk wat doet 1920 01:35:48,170 --> 01:35:51,794 Ik vertelde het aan doen-- controleren kleine letters y en kleine n. 1921 01:35:51,794 --> 01:35:53,960 Dit voelt niet als goed user experience, dat wel. 1922 01:35:53,960 --> 01:35:59,010 Laat me vragen en accepteren ofwel kleine letters en hoofdletters. 1923 01:35:59,010 --> 01:36:02,090 Dus het blijkt, wil je misschien om iets te zeggen, zoals in Scratch, 1924 01:36:02,090 --> 01:36:08,150 zoals letterlijk of C gelijk evenaart hoofdstad enkele geciteerd y. 1925 01:36:08,150 --> 01:36:11,400 Blijkt, heeft C geen deze letterlijke zoekwoord of. 1926 01:36:11,400 --> 01:36:12,880 >> Maar het heeft wel twee verticale balken. 1927 01:36:12,880 --> 01:36:15,463 Je moet Shift meestal te houden, als je met behulp van een Amerikaans toetsenbord, 1928 01:36:15,463 --> 01:36:18,910 en druk op de verticale balk toets boven uw terugkeer sleutel. 1929 01:36:18,910 --> 01:36:22,410 Maar deze verticale balk verticale balk betekent of. 1930 01:36:22,410 --> 01:36:26,220 >> Indien daarentegen wilden te zeggen en, net als in Scratch, 1931 01:36:26,220 --> 01:36:28,180 we konden ampersand ampersand doen. 1932 01:36:28,180 --> 01:36:31,330 Dat maakt geen logische zin hier, want een mens kan onmogelijk 1933 01:36:31,330 --> 01:36:37,110 hebt getypt zowel y en kleine letters y en kapitaal Y als hetzelfde personage. 1934 01:36:37,110 --> 01:36:39,470 Dus of is wat we van plan hier. 1935 01:36:39,470 --> 01:36:46,280 >> Dus als ik doe dit in beide plaatsen, of c gelijk is gelijk aan kapitaal N, nu opnieuw uit te voeren, 1936 01:36:46,280 --> 01:36:49,390 maken logische, opnieuw uit te voeren logische. 1937 01:36:49,390 --> 01:36:51,200 Nu kan ik y typen. 1938 01:36:51,200 --> 01:36:53,920 En ik kan het weer doen met kapitaal Y, of het kapitaal N. 1939 01:36:53,920 --> 01:36:56,630 En ik kon toevoegen aan extra combinaties nog steeds. 1940 01:36:56,630 --> 01:36:58,810 >> Dit is dus een logische programma voor zover nu 1941 01:36:58,810 --> 01:37:01,940 Ik logisch controleren deze waarde of deze waarde. 1942 01:37:01,940 --> 01:37:06,420 En ik heb niet te noodzakelijkerwijs komen met twee ifs of anders ifs. 1943 01:37:06,420 --> 01:37:09,960 Ik kan eigenlijk combineren sommige verwante logica bij elkaar op deze manier. 1944 01:37:09,960 --> 01:37:11,950 Dus zou dit beter zijn ontworpen dan alleen 1945 01:37:11,950 --> 01:37:17,490 zeggen, als C is gelijk aan kleine letters y, afdrukken ja, anders als c gelijk is aan het kapitaal Y, 1946 01:37:17,490 --> 01:37:20,074 afdrukken ja, anders als c gelijk lower-- in andere woorden, 1947 01:37:20,074 --> 01:37:21,990 je hoeft niet te hebben meer en meer takken. 1948 01:37:21,990 --> 01:37:28,840 U kunt een aantal van de equivalente combineren takken logisch, zoals op deze manier. 1949 01:37:28,840 --> 01:37:34,150 >> Dus laten we een kijkje nemen op één laatste ingrediënt, een laatste construct, 1950 01:37:34,150 --> 01:37:34,847 C dat toelaat. 1951 01:37:34,847 --> 01:37:36,930 En we zullen terugkomen in de toekomst anderen nog. 1952 01:37:36,930 --> 01:37:41,400 En dan zullen we concluderen door te kijken bij niet de juistheid van code-- 1953 01:37:41,400 --> 01:37:46,070 krijgen code om work-- maar het ontwerp van de code, en planten die zaden vroeg op. 1954 01:37:46,070 --> 01:37:51,337 >> Dus laat me ga je gang en het openen van een nieuw bestand hier. 1955 01:37:51,337 --> 01:37:51,920 Weet je wat? 1956 01:37:51,920 --> 01:37:54,450 Ik ga opnieuw te implementeren datzelfde programma 1957 01:37:54,450 --> 01:37:55,940 maar met een andere constructie. 1958 01:37:55,940 --> 01:38:00,110 >> Dus laat me snel geef mezelf toegang tot CS50.h omvatten 1959 01:38:00,110 --> 01:38:04,150 voor de CS50 bibliotheek, standaard Io.h voor printf. 1960 01:38:04,150 --> 01:38:06,510 Geef me mijn int main leegte. 1961 01:38:06,510 --> 01:38:09,310 En dan hier, laat ik ga je gang en dit te doen. 1962 01:38:09,310 --> 01:38:12,010 >> Char c krijgt char te krijgen, net als vroeger. 1963 01:38:12,010 --> 01:38:16,770 En ik ga een nieuwe constructie te gebruiken now-- schakelen, wat karakter? 1964 01:38:16,770 --> 01:38:19,820 Dus switch is een soort schakelen van een spoor. 1965 01:38:19,820 --> 01:38:22,070 Of, echt, het is een soort van een zo anders, zo anders als, 1966 01:38:22,070 --> 01:38:23,980 maar enigszins anders geschreven. 1967 01:38:23,980 --> 01:38:25,490 >> Een switch ziet er als volgt uit. 1968 01:38:25,490 --> 01:38:29,060 Je hebt switch, en wat dan teken of nummer dat u wilt bekijken, 1969 01:38:29,060 --> 01:38:32,000 vervolgens een aantal accolades graag in Scratch, gewoon zeggen doe dit soort dingen. 1970 01:38:32,000 --> 01:38:33,480 En dan heb je verschillende zaken. 1971 01:38:33,480 --> 01:38:34,830 >> U hoeft niet te gebruiken indien en anders. 1972 01:38:34,830 --> 01:38:37,050 U gebruikt letterlijk het woord zaak. 1973 01:38:37,050 --> 01:38:38,790 En je zou zoiets zeggen. 1974 01:38:38,790 --> 01:38:43,820 >> Dus in het geval van een kleine letter y, of in het geval van een hoofdletter Y, 1975 01:38:43,820 --> 01:38:47,350 ga je gang en uit te printen ja. 1976 01:38:47,350 --> 01:38:49,020 En dan uit te breken van de schakelaar. 1977 01:38:49,020 --> 01:38:49,580 Dat is het. 1978 01:38:49,580 --> 01:38:50,880 Werden gedaan. 1979 01:38:50,880 --> 01:38:57,270 >> Indien echter, om zo te zeggen, kleine letters n, of het vermogen N, 1980 01:38:57,270 --> 01:39:02,560 dan ga je gang en af ​​te drukken Er zijn geen, en dan breken. 1981 01:39:02,560 --> 01:39:08,022 Else-- en dergelijke is de default geval indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 en gewoon voor een goede maatregel, hoewel logischerwijs deze pauze is niet nodig 1983 01:39:10,980 --> 01:39:12,896 omdat we aan het eind van de schakelaar hoe dan ook, 1984 01:39:12,896 --> 01:39:14,520 Ik ben nu het uitbreken van de schakelaar. 1985 01:39:14,520 --> 01:39:16,280 Dus dit ziet er een beetje anders. 1986 01:39:16,280 --> 01:39:18,272 >> Maar, logisch, het is eigenlijk equivalent. 1987 01:39:18,272 --> 01:39:19,980 En waarom zou je gebruiken een over de ander? 1988 01:39:19,980 --> 01:39:23,220 Soms is slechts persoonlijke voorkeur, soms de esthetiek, 1989 01:39:23,220 --> 01:39:25,420 als ik kijk naar deze Nu, er is iets 1990 01:39:25,420 --> 01:39:27,510 te zeggen voor de leesbaarheid van deze code. 1991 01:39:27,510 --> 01:39:30,690 Ik bedoel, laat staan ​​het feit dat dit code is nieuw voor velen van ons in de kamer. 1992 01:39:30,690 --> 01:39:33,515 >> Maar het gewoon een soort is vrij. 1993 01:39:33,515 --> 01:39:37,760 Je ziet kleine letters y, kapitaal Y, kleine letters n, de hoofdstad N standaard 1994 01:39:37,760 --> 01:39:40,150 is gewoon een soort sprongen uit bij u op een manier 1995 01:39:40,150 --> 01:39:42,200 dat, misschien wel, misschien het vorige voorbeeld 1996 01:39:42,200 --> 01:39:45,780 met de mitsen en de verticale balken, en de andere ifs, misschien niet. 1997 01:39:45,780 --> 01:39:51,600 Dus dit is echt een kwestie van persoonlijke keus, echt, of leesbaarheid, 1998 01:39:51,600 --> 01:39:52,360 van de code. 1999 01:39:52,360 --> 01:39:58,230 >> Maar in termen van functionaliteit, laat me ga je gang en maak een switch, dot slash 2000 01:39:58,230 --> 01:40:05,830 switch, en nu typt in kleine letters y, hoofdstad Y, kleine letters n, kapitaal N, 2001 01:40:05,830 --> 01:40:09,250 David, proberen want dat is geen enkel teken. 2002 01:40:09,250 --> 01:40:12,050 Laten we het doen x, fout, zoals verwacht. 2003 01:40:12,050 --> 01:40:15,640 En, logically-- en dit is iets Ik zou aanmoedigen in general-- zelfs 2004 01:40:15,640 --> 01:40:17,790 hoewel we alleen krassen op het oppervlak van sommige van deze functies. 2005 01:40:17,790 --> 01:40:20,560 >> En het zou niet duidelijk zijn wanneer je je gaat zitten op het toetsenbord, 2006 01:40:20,560 --> 01:40:21,370 hoe werkt dit? 2007 01:40:21,370 --> 01:40:22,240 Wat zou dit doen? 2008 01:40:22,240 --> 01:40:25,630 Het mooie ding over het hebben een laptop of desktop, of de toegang 2009 01:40:25,630 --> 01:40:29,290 op een computer met een compiler, en met een code-editor als deze, 2010 01:40:29,290 --> 01:40:32,990 wordt je bijna altijd antwoord op deze vragen voor jezelf gewoon door te proberen. 2011 01:40:32,990 --> 01:40:36,570 >> Bijvoorbeeld, als de retorische vraag bij de hand was, 2012 01:40:36,570 --> 01:40:39,540 wat gebeurt er als je vergeet uw vakantie uitspraken? 2013 01:40:39,540 --> 01:40:41,400 Dat is eigenlijk een heel gebruikelijk om te doen, 2014 01:40:41,400 --> 01:40:43,540 want het ziet er niet alsof je ze echt nodig hebt. 2015 01:40:43,540 --> 01:40:46,790 Ze niet echt te voltooien uw dacht dat als een haakje of een krullende 2016 01:40:46,790 --> 01:40:47,714 brace doet. 2017 01:40:47,714 --> 01:40:49,630 Laten we doorgaan en opnieuw compileren van de code en te zien. 2018 01:40:49,630 --> 01:40:53,690 Dus zorg switch, dot slash switch. 2019 01:40:53,690 --> 01:40:56,435 Laten we type in kleine letters y, de topkoffer, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Dus ik typte y. 2022 01:41:00,700 --> 01:41:04,420 >> Het programma zei ja, nee, fout, alsof het was het veranderen van de geest. 2023 01:41:04,420 --> 01:41:09,280 Maar het soort was, want wat gebeurt er een schakelaar is het eerste geval dat 2024 01:41:09,280 --> 01:41:13,899 wedstrijd in wezen betekent, he computer, voeren alle van de code eronder. 2025 01:41:13,899 --> 01:41:16,690 En als je niet zeggen breken, of zeg niet breken, of break niet zeggen, 2026 01:41:16,690 --> 01:41:19,540 de computer gaat blazen door al die lijnen 2027 01:41:19,540 --> 01:41:22,779 en uitvoeren allemaal tot het wordt om dat accolade. 2028 01:41:22,779 --> 01:41:24,320 Zodat de remmen zijn inderdaad nodig. 2029 01:41:24,320 --> 01:41:27,120 Maar een afhaalmaaltijd hier is, wanneer In geval van twijfel, probeer iets. 2030 01:41:27,120 --> 01:41:29,510 Misschien sparen eerst uw code, of op te slaan in een extra bestand 2031 01:41:29,510 --> 01:41:32,930 als je echt bezorgd over verprutsen en het hebben om te herstellen 2032 01:41:32,930 --> 01:41:34,430 het werk dat je weet dat het werkt. 2033 01:41:34,430 --> 01:41:35,410 >> Maar probeer dingen. 2034 01:41:35,410 --> 01:41:38,074 En wees niet zo bang te zijn, misschien, van wat de computer zou kunnen doen, 2035 01:41:38,074 --> 01:41:39,490 of dat je misschien iets breken. 2036 01:41:39,490 --> 01:41:42,790 U kunt altijd weer terugschakelen sommige eerdere versie. 2037 01:41:42,790 --> 01:41:45,640 >> Dus laten we een einde door te kijken bij het ontwerp van de code. 2038 01:41:45,640 --> 01:41:49,020 We hebben dit vermogen nu om te schrijven omstandigheden en schrijven loops, 2039 01:41:49,020 --> 01:41:50,850 en variabelen, en belfuncties. 2040 01:41:50,850 --> 01:41:54,590 Dus, eerlijk gezegd, we zijn soort terug op waar we waren een week geleden met Scratch, 2041 01:41:54,590 --> 01:42:00,120 zij het met een minder dwingende tekstuele milieu dan Scratch maakt. 2042 01:42:00,120 --> 01:42:03,990 >> Maar let op hoe snel we hebben verworven dat vocabulaire, zelfs als het 2043 01:42:03,990 --> 01:42:07,570 gaat een tijdje duren te zinken in, zodat we nu deze woordenschat kunnen gebruiken 2044 01:42:07,570 --> 01:42:10,320 meer interessante programma's te schrijven. 2045 01:42:10,320 --> 01:42:12,940 En laten we eens een baby stap naar dat, als hieronder. 2046 01:42:12,940 --> 01:42:14,890 Laat me ga je gang en maak een nieuw bestand hier. 2047 01:42:14,890 --> 01:42:17,750 >> Ik ga dit noemen prototype.c, en de invoering van 2048 01:42:17,750 --> 01:42:20,954 voor het eerst de mogelijkheid om uw eigen functies maken. 2049 01:42:20,954 --> 01:42:22,870 Sommigen van u zou kunnen hebben dit gedaan met Scratch, 2050 01:42:22,870 --> 01:42:25,430 waarbij je kunt maken van uw eigen aangepaste blokken in Scratch, 2051 01:42:25,430 --> 01:42:27,892 en sleep ze op hun plaats waar u maar wilt in C. 2052 01:42:27,892 --> 01:42:30,100 En in de meeste programmeertalen talen, kunt u precies doen 2053 01:42:30,100 --> 01:42:33,580 dat-- maak uw eigen functies, als ze nog niet bestaan. 2054 01:42:33,580 --> 01:42:38,660 >> Dus, bijvoorbeeld, laat me ga je gang en omvatten CS50.h, en omvatten 2055 01:42:38,660 --> 01:42:43,110 standaard IO.h, int main leegte. 2056 01:42:43,110 --> 01:42:46,020 En nu hebben we een placeholder klaar om te gaan. 2057 01:42:46,020 --> 01:42:48,550 Ik blijf afdrukken dingen als mensen namen vandaag. 2058 01:42:48,550 --> 01:42:51,910 En dat voelt like-- zou het niet mooi zijn als er 2059 01:42:51,910 --> 01:42:53,936 waren een functie genaamd afdruk naam? 2060 01:42:53,936 --> 01:42:55,060 Ik hoef niet te printf gebruiken. 2061 01:42:55,060 --> 01:42:56,976 Ik hoef niet te onthouden alle opmaak codes het. 2062 01:42:56,976 --> 01:43:00,050 Waarom niet ik, of waarom niet iemand voor mij, 2063 01:43:00,050 --> 01:43:02,980 maak een functie genaamd afdruk Naam, dat gegeven een naam, 2064 01:43:02,980 --> 01:43:03,980 gewoon drukt het uit? 2065 01:43:03,980 --> 01:43:08,700 >> Met andere woorden, als ik zeg, hey, computer, geef me een string 2066 01:43:08,700 --> 01:43:11,870 door te vragen de gebruiker voor een dergelijke, via CS50's get snaar functie. 2067 01:43:11,870 --> 01:43:15,090 Hey, computer, zet die string in de variabele in de linkerkant, 2068 01:43:15,090 --> 01:43:16,150 en noemen het is. 2069 01:43:16,150 --> 01:43:22,150 En dan, hey computer, ga je gang en af ​​te drukken dat de naam van persoon, gedaan. 2070 01:43:22,150 --> 01:43:26,240 >> Nu, zou het leuk zijn, want dit programma, toepasselijke naam, 2071 01:43:26,240 --> 01:43:29,170 vertelt me ​​wat het moet doen door middel van de namen die de functie van. 2072 01:43:29,170 --> 01:43:32,930 Laat me gaan en maak prototype, Enter. 2073 01:43:32,930 --> 01:43:34,930 En, helaas, dit is niet van plan om te vliegen. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, lijn 7, karakter 5, fout, impliciete verklaring 2075 01:43:39,430 --> 01:43:42,960 van de functie afdruk naam ongeldig is in C99, C99 2076 01:43:42,960 --> 01:43:45,130 betekent een versie van C dat uitkwam in 1999. 2077 01:43:45,130 --> 01:43:45,730 Dat is alles. 2078 01:43:45,730 --> 01:43:48,780 >> Dus ik weet niet wat allemaal betekent nog. 2079 01:43:48,780 --> 01:43:50,810 Maar ik doe fout te herkennen in het rood. 2080 01:43:50,810 --> 01:43:51,770 Dat is vrij duidelijk. 2081 01:43:51,770 --> 01:43:53,769 >> En het schijnt dat met het groene karakter hier, 2082 01:43:53,769 --> 01:43:57,520 het probleem is met de naam print, geopend paren s, dicht paren, puntkomma. 2083 01:43:57,520 --> 01:44:01,800 Maar impliciete verklaring van functie zagen we kort eerder. 2084 01:44:01,800 --> 01:44:04,880 Dit betekent eenvoudigweg dat Clang weet niet wat ik bedoel. 2085 01:44:04,880 --> 01:44:09,000 >> Ik heb een woordenschat woord gebruikt dat het nooit gezien of eerder geleerd. 2086 01:44:09,000 --> 01:44:11,950 En dus ik moet onderwijzen wat deze functie betekent. 2087 01:44:11,950 --> 01:44:13,590 Dus ik ga om verder te gaan en dat te doen. 2088 01:44:13,590 --> 01:44:17,970 >> Ik ga om verder te gaan en uit te voeren Mijn eigen functie genaamd Print Naam. 2089 01:44:17,970 --> 01:44:24,720 En ik ga zeggen, als volgt, dat Het doet dit, printf, hello, procent 2090 01:44:24,720 --> 01:44:27,760 s, backslash n, naam, puntkomma. 2091 01:44:27,760 --> 01:44:29,250 Dus wat heb ik gewoon doen? 2092 01:44:29,250 --> 01:44:31,325 >> Dus het blijkt, naar implementeren van uw eigen functie, 2093 01:44:31,325 --> 01:44:33,845 we soort lenen van dezelfde structuur als belangrijkste 2094 01:44:33,845 --> 01:44:35,720 dat we net geweest vanzelfsprekend, en ik 2095 01:44:35,720 --> 01:44:37,730 weet gewoon kopiëren en plakken vrij veel wat 2096 01:44:37,730 --> 01:44:39,170 Ik schrijf in het verleden. 2097 01:44:39,170 --> 01:44:40,570 Maar hier ziet het patroon. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, Void, zullen we uit elkaar plagen het duurde niet lang wat dat eigenlijk betekent. 2099 01:44:43,750 --> 01:44:46,160 >> Maar voor vandaag, net let op de parallelliteit. 2100 01:44:46,160 --> 01:44:48,210 Void, print naam, tekenreeksnaam, dus er is 2101 01:44:48,210 --> 01:44:50,310 een paarse zoekwoord, die we gaan beginnen 2102 01:44:50,310 --> 01:44:54,067 roepen een return type, de naam de functie en de input. 2103 01:44:54,067 --> 01:44:56,400 Dus, in feite, kunnen we destilleren dit soort als vorige week 2104 01:44:56,400 --> 01:44:59,030 aangezien dit de naam of algoritme van de code zijn we 2105 01:44:59,030 --> 01:45:00,761 gaan naar de write-- algoritme onderliggende 2106 01:45:00,761 --> 01:45:02,010 de code we gaan schrijven. 2107 01:45:02,010 --> 01:45:03,180 >> Dit is de ingang. 2108 01:45:03,180 --> 01:45:04,670 Dit is de uitgang. 2109 01:45:04,670 --> 01:45:08,730 Deze functie, print naam, is ontworpen om een ​​string genaamd naam te nemen, 2110 01:45:08,730 --> 01:45:11,350 of wat dan ook, als input, en dan leegte. 2111 01:45:11,350 --> 01:45:13,904 Het geeft niets, zoals krijgen touw of krijgen int doet. 2112 01:45:13,904 --> 01:45:15,570 Dus het gaat me overhandigen iets terug. 2113 01:45:15,570 --> 01:45:17,960 Het is gewoon gaat om een ​​hebben neveneffect, zo te zeggen, 2114 01:45:17,960 --> 01:45:19,570 van het afdrukken van de naam van een persoon. 2115 01:45:19,570 --> 01:45:22,260 Zo merken, lijn 7, I kan naamdruk bellen. 2116 01:45:22,260 --> 01:45:25,920 Lijn 10, ik kan definiëren of de uitvoering van de naam af te drukken. 2117 01:45:25,920 --> 01:45:28,450 Maar, helaas, dat is niet genoeg. 2118 01:45:28,450 --> 01:45:31,230 >> Laat me ga je gang en recompile deze na het opslaan. 2119 01:45:31,230 --> 01:45:33,910 Whoa, nu, ik heb het gedaan nog erger, zo lijkt het. 2120 01:45:33,910 --> 01:45:37,027 Dus impliciete verklaring van functie afdruk naam is ongeldig. 2121 01:45:37,027 --> 01:45:38,360 En, nogmaals, er is meer fouten. 2122 01:45:38,360 --> 01:45:41,430 Maar zoals ik al eerder gewaarschuwd, zelfs als je overweldigd door te krijgen, 2123 01:45:41,430 --> 01:45:44,850 of een beetje triest om zo veel te zien errors, richten zich op de eerste 2124 01:45:44,850 --> 01:45:47,500 in eerste instantie, want het zou wel eens een cascade-effect hebben gehad. 2125 01:45:47,500 --> 01:45:51,970 Dus C, of ​​Clang meer in het bijzonder, nog steeds niet naamdruk herkennen. 2126 01:45:51,970 --> 01:45:54,580 >> En dat komt omdat Clang, door het ontwerp, is een beetje dom. 2127 01:45:54,580 --> 01:45:56,280 Het doet alleen wat je hem vertelt wat te doen. 2128 01:45:56,280 --> 01:46:00,950 En doet alleen zo in de volgorde waarin je hem vertelt wat te doen. 2129 01:46:00,950 --> 01:46:05,270 >> Dus ik heb de belangrijkste on-line vier gedefinieerd, zoals wij hebben gedaan vrij vaak. 2130 01:46:05,270 --> 01:46:07,980 Ik heb naamdruk gedefinieerd op lijn 10. 2131 01:46:07,980 --> 01:46:11,793 Maar ik probeer te gebruiken afdrukken naam op de lijn zeven. 2132 01:46:11,793 --> 01:46:13,670 >> Het is te vroeg, bestaat nog niet. 2133 01:46:13,670 --> 01:46:19,150 Dus kon ik slim te zijn, en zijn als, OK, dus laten we gewoon meespelen, 2134 01:46:19,150 --> 01:46:23,680 en beweeg naamdruk up hier, en opnieuw samen te stellen. 2135 01:46:23,680 --> 01:46:24,550 O mijn God. 2136 01:46:24,550 --> 01:46:25,260 Het werkte. 2137 01:46:25,260 --> 01:46:26,670 Het was zo simpel als dat. 2138 01:46:26,670 --> 01:46:28,120 >> Maar de logica is precies dat. 2139 01:46:28,120 --> 01:46:30,870 Je moet Clang te leren wat het is door het definiëren van de functie eerste. 2140 01:46:30,870 --> 01:46:31,920 Dan kunt u deze gebruiken. 2141 01:46:31,920 --> 01:46:33,940 Maar, eerlijk gezegd, dit voelt als een hellend vlak. 2142 01:46:33,940 --> 01:46:35,773 >> Dus elke keer als ik run een probleem, ik ben gewoon 2143 01:46:35,773 --> 01:46:39,450 gaan om te markeren en kopieer de code Ik schreef, knippen en plakken hier. 2144 01:46:39,450 --> 01:46:41,370 En, zeker, we konden verzinnen sommige scenario's 2145 01:46:41,370 --> 01:46:43,286 waar men bijvoorbeeld nog moeten naar een andere te bellen. 2146 01:46:43,286 --> 01:46:46,030 En je gewoon niet kan zetten elke functie boven alle andere. 2147 01:46:46,030 --> 01:46:47,930 >> Zo blijkt er's een betere oplossing. 2148 01:46:47,930 --> 01:46:50,100 We kunnen verlaten deze zijn. 2149 01:46:50,100 --> 01:46:53,677 En, eerlijk gezegd, het is over het algemeen aardig, en handig, en een goed ontwerp 2150 01:46:53,677 --> 01:46:56,760 om omdat, weer de belangrijkste op de eerste plaats, belangrijkste net als bij groene vlag geklikt, 2151 01:46:56,760 --> 01:46:59,027 dat is de functie die wordt uitgevoerd door gebrek. 2152 01:46:59,027 --> 01:47:01,110 Dus je kan net zo goed zetten het op het begin van het bestand 2153 01:47:01,110 --> 01:47:03,560 zodat wanneer u of een andere menselijke kijkt naar het bestand 2154 01:47:03,560 --> 01:47:06,360 je weet wat er aan de hand gewoon door het lezen van de belangrijkste eerste. 2155 01:47:06,360 --> 01:47:15,360 Dus het blijkt, kunnen we Clang vertellen proactief, hey, Clang, on-line vier, 2156 01:47:15,360 --> 01:47:17,940 Ik beloof te implementeren een functie genaamd Print 2157 01:47:17,940 --> 01:47:22,600 Naam die een string genaamd naam dankt als input, en keert terug niets, leegte. 2158 01:47:22,600 --> 01:47:24,770 En ik zal rond aan de uitvoering ervan later. 2159 01:47:24,770 --> 01:47:25,680 >> Hier komt Main. 2160 01:47:25,680 --> 01:47:29,130 Main nu op lijn 9 kunt gebruiken Print Naam omdat Clang 2161 01:47:29,130 --> 01:47:32,600 is het vertrouwen dat, uiteindelijk, zal de definitie tegenkomen 2162 01:47:32,600 --> 01:47:34,880 van de uitvoering van de Print Name. 2163 01:47:34,880 --> 01:47:37,390 Dus na mijn bestand op te slaan, te laten ik ga je gang en maken prototype, 2164 01:47:37,390 --> 01:47:38,498 ziet er goed uit deze tijd. 2165 01:47:38,498 --> 01:47:43,470 Dot slash, prototype, laat me ga je gang en typ in een naam. 2166 01:47:43,470 --> 01:47:48,440 David, hello David, Zamila, hello Zamila, en, inderdaad, nu het werkt. 2167 01:47:48,440 --> 01:47:52,200 >> Dus het ingrediënt hier is dat we hebben maakte een aangepaste functie, zoals een aangepaste 2168 01:47:52,200 --> 01:47:54,219 Scratch blok we noemen het. 2169 01:47:54,219 --> 01:47:57,010 Maar in tegenstelling tot Scratch waar u kunt gewoon maken het en gaan gebruiken, 2170 01:47:57,010 --> 01:47:59,330 nu moeten we een zijn beetje pedant, 2171 01:47:59,330 --> 01:48:03,410 en eigenlijk trainen Clang te gebruiken of te verwachten. 2172 01:48:03,410 --> 01:48:09,140 Nu, als een terzijde, waarom al die tijd hebben we gewoon blind geweest op het geloof, waaronder 2173 01:48:09,140 --> 01:48:12,170 CS50.h, en inclusief standaard IO.h? 2174 01:48:12,170 --> 01:48:15,190 >> Nou, zo blijkt, onder een paar andere dingen, 2175 01:48:15,190 --> 01:48:18,550 alles wat in die dot h bestanden, die toevallig bestanden. 2176 01:48:18,550 --> 01:48:20,460 Ze header-bestanden, om zo te zeggen. 2177 01:48:20,460 --> 01:48:23,270 Ze zijn nog steeds geschreven in C. Maar ze zijn een ander type bestand. 2178 01:48:23,270 --> 01:48:28,690 >> Voor nu, kan je vrij veel veronderstellen dat alles wat is de binnenkant van CS50.h 2179 01:48:28,690 --> 01:48:33,360 is een aantal one-liners als deze, niet voor functies genaamd Print Naam, 2180 01:48:33,360 --> 01:48:36,840 maar voor Get String, Get Float, en een paar anderen. 2181 01:48:36,840 --> 01:48:41,510 Er zijn vergelijkbare prototypes, voeringen één, de binnenkant van standaard IO.h 2182 01:48:41,510 --> 01:48:46,241 voor printf, die nu in Mijn eigen Print Naam functie. 2183 01:48:46,241 --> 01:48:49,490 Dus met andere woorden, dit hele tijd dat we hebben net blindelings kopiëren en plakken 2184 01:48:49,490 --> 01:48:51,780 omvatten deze omvatten dat, wat is er aan de hand? 2185 01:48:51,780 --> 01:48:55,310 Dat zijn gewoon een soort aanwijzingen naar Clang wat functies 2186 01:48:55,310 --> 01:49:00,170 zijn inderdaad uitgevoerd, net elders in verschillende bestanden 2187 01:49:00,170 --> 01:49:02,440 elders op het systeem. 2188 01:49:02,440 --> 01:49:05,160 >> Dus we hebben naamdruk geïmplementeerd. 2189 01:49:05,160 --> 01:49:07,910 Het heeft de bijwerking van afdrukken iets op het scherm. 2190 01:49:07,910 --> 01:49:10,170 Maar het doet niet echt geef me iets terug. 2191 01:49:10,170 --> 01:49:12,200 Hoe gaan we over de uitvoering van een programma dat 2192 01:49:12,200 --> 01:49:14,510 doet geef me iets terug? 2193 01:49:14,510 --> 01:49:15,580 >> Nou, laten we proberen dit. 2194 01:49:15,580 --> 01:49:21,360 Laat me ga je gang en uit te voeren een bestand genaamd return.c 2195 01:49:21,360 --> 01:49:24,530 zodat we kunnen laten zien hoe iets bevallen Win String, of Vraag Int, 2196 01:49:24,530 --> 01:49:27,340 eigenlijk terug iets terug aan de gebruiker. 2197 01:49:27,340 --> 01:49:29,840 Laten we gaan en te definiëren int main leegte. 2198 01:49:29,840 --> 01:49:33,230 >> En, nogmaals, in de toekomst, zullen we uitleggen wat die int en die leegte 2199 01:49:33,230 --> 01:49:34,090 is werkelijk te doen. 2200 01:49:34,090 --> 01:49:35,840 Maar voor vandaag, zullen we neem het voor lief. 2201 01:49:35,840 --> 01:49:39,970 Ik ga je gang en printf gaan, voor een goede gebruikerservaring, x is. 2202 01:49:39,970 --> 01:49:44,360 En dan ga ik te wachten op de gebruiker om me x met get int. 2203 01:49:44,360 --> 01:49:48,459 >> En dan ga ik om verder te gaan en uit te printen x naar het plein. 2204 01:49:48,459 --> 01:49:50,500 Dus als je alleen maar een toetsenbord, mensen vaak 2205 01:49:50,500 --> 01:49:52,600 gebruik maken van de kleine carrot symbool op het toetsenbord 2206 01:49:52,600 --> 01:49:55,330 te vertegenwoordigen de macht van, of de exponent van. 2207 01:49:55,330 --> 01:49:58,960 Dus x kwadraat is aanwezig i. 2208 01:49:58,960 --> 01:50:00,660 >> En nu ga ik om dit te doen. 2209 01:50:00,660 --> 01:50:03,940 Ik kon gewoon doen-- wat x kwadraat? x kwadraat is x maal x. 2210 01:50:03,940 --> 01:50:06,690 >> En dat deden we een aantal tijd geleden al vandaag. 2211 01:50:06,690 --> 01:50:08,730 Dit voelt niet als dat alles veel vooruitgang. 2212 01:50:08,730 --> 01:50:09,570 Weet je wat? 2213 01:50:09,570 --> 01:50:13,100 Laten we profiteren van een aantal van dat idee van de laatste tijd van de abstractie. 2214 01:50:13,100 --> 01:50:16,080 >> Zou het niet mooi zijn als is er een functie genaamd 2215 01:50:16,080 --> 01:50:18,460 plein dat precies dat doet? 2216 01:50:18,460 --> 01:50:20,640 Nog steeds aan het einde van de dag, doet hetzelfde wiskunde. 2217 01:50:20,640 --> 01:50:22,410 Maar laten we abstract weg van het idee van het nemen 2218 01:50:22,410 --> 01:50:25,280 een aantal vermenigvuldigd met een ander, en geef het een naam, 2219 01:50:25,280 --> 01:50:27,360 zoals vierkant deze waarde. 2220 01:50:27,360 --> 01:50:29,560 >> En, in andere woorden, in C, laten we zorgen voor een functie 2221 01:50:29,560 --> 01:50:32,660 genaamd plein dat precies dat doet. 2222 01:50:32,660 --> 01:50:34,600 Het gaat vierkante genoemd te worden. 2223 01:50:34,600 --> 01:50:35,790 Het gaat om een ​​int nemen. 2224 01:50:35,790 --> 01:50:37,820 En we zullen gewoon noem het n standaard. 2225 01:50:37,820 --> 01:50:39,403 >> Maar we konden het noemen wat we willen. 2226 01:50:39,403 --> 01:50:42,900 En alles wat het gaat om te doen, letterlijk, is terugkeer 2227 01:50:42,900 --> 01:50:45,810 het resultaat van n maal n. 2228 01:50:45,810 --> 01:50:48,980 Maar omdat het terugkerende iets wat 2229 01:50:48,980 --> 01:50:53,690 is het sleutelwoord in het paars we hebben nooit eerder gezien, ik, op lijn 11, 2230 01:50:53,690 --> 01:50:55,410 kan niet zomaar zeggen leegte deze tijd. 2231 01:50:55,410 --> 01:51:01,320 >> Void, in het voorbeeld dat we net zagen in plaats van de naam van print, betekent gewoon, 2232 01:51:01,320 --> 01:51:02,190 doe iets. 2233 01:51:02,190 --> 01:51:04,170 Maar niet geef me iets terug. 2234 01:51:04,170 --> 01:51:06,790 In dit geval wil ik terug n maal n, 2235 01:51:06,790 --> 01:51:08,460 of wat dat ook is, dat nummer. 2236 01:51:08,460 --> 01:51:12,460 >> Dus ik kan niet zeggen, hey, computer, Ik terug niets, leegte. 2237 01:51:12,460 --> 01:51:16,166 Het gaat om terug te keren, door de natuur, een int. 2238 01:51:16,166 --> 01:51:17,790 En dus dat is alles wat er hier aan de hand. 2239 01:51:17,790 --> 01:51:20,070 >> De ingang naar veld gaat een int. 2240 01:51:20,070 --> 01:51:24,760 En zodat we het kunnen gebruiken, moet het een naam, N. Het gaat om de productie 2241 01:51:24,760 --> 01:51:26,240 een int die geen naam nodig heeft. 2242 01:51:26,240 --> 01:51:29,590 We kunnen het overlaten aan de belangrijkste, of wie dan ook is met behulp van me om deze waarde als we bedenken 2243 01:51:29,590 --> 01:51:31,120 wil met een eigen variabele. 2244 01:51:31,120 --> 01:51:33,230 >> En, nogmaals, de enige nieuwe sleutelwoord is hier terug. 2245 01:51:33,230 --> 01:51:34,480 En ik doe gewoon wat wiskunde. 2246 01:51:34,480 --> 01:51:41,825 Als ik wilde echt niet nodig te zijn, Ik zou kunnen zeggen int product krijgt n keer n. 2247 01:51:41,825 --> 01:51:44,170 >> En dan zou ik zeggen, terug product. 2248 01:51:44,170 --> 01:51:47,360 Maar, nogmaals, om mijn punt vroegste van dit gewoon niet goed zijn design-- 2249 01:51:47,360 --> 01:51:50,060 zoals, waarom de invoering van een naam, een symbool, zoals product, 2250 01:51:50,060 --> 01:51:51,570 alleen maar om onmiddellijk terug te sturen? 2251 01:51:51,570 --> 01:51:53,670 Het is een beetje schoner, een beetje strakker, dus 2252 01:51:53,670 --> 01:51:59,380 te spreken, alleen maar om return n keer zeggen n, zich te ontdoen van deze lijn helemaal. 2253 01:51:59,380 --> 01:52:02,860 >> En het is gewoon minder code te lezen, minder kans op fouten. 2254 01:52:02,860 --> 01:52:05,180 En laten we eens zien of dit nu eigenlijk werkt. 2255 01:52:05,180 --> 01:52:09,380 Nu, ik ga om te gaan vooruit en rendement te maken. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, impliciete verklaring van de functie. 2257 01:52:11,460 --> 01:52:14,080 Ik maakte deze fout eerder, geen big deal. 2258 01:52:14,080 --> 01:52:18,950 Laat me enkel type, of markeer en kopiëren, exact dezelfde functie prototype, 2259 01:52:18,950 --> 01:52:21,342 of handtekening van de functie hier. 2260 01:52:21,342 --> 01:52:22,800 Of ik kon de hele functie te verplaatsen. 2261 01:52:22,800 --> 01:52:23,841 >> Maar dat is een beetje lui. 2262 01:52:23,841 --> 01:52:24,870 Dus zullen we niet doen. 2263 01:52:24,870 --> 01:52:27,960 Nu, laat me terugkeer nogmaals, dot slash 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 de functie lijkt nu te werken. 2266 01:52:35,300 --> 01:52:36,550 Dus wat is het verschil? 2267 01:52:36,550 --> 01:52:42,520 Ik heb een functie die vierkant heet, in dit geval, dat ik in een input. 2268 01:52:42,520 --> 01:52:43,830 En ik krijg weer een uitgang. 2269 01:52:43,830 --> 01:52:46,210 Toch, eerder, indien Ik open de ander voorbeeld 2270 01:52:46,210 --> 01:52:51,640 van eerdere, waarvan was genoemd prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Ik had afdrukken naam, die void terug zogezegd, 2272 01:52:54,770 --> 01:52:58,730 Of het terug niets, en gewoon had een neveneffect. 2273 01:52:58,730 --> 01:53:00,230 >> Dus wat is hier aan de hand? 2274 01:53:00,230 --> 01:53:03,520 Nou ja, kunt u overwegen de functie krijgen string voor een ogenblik. 2275 01:53:03,520 --> 01:53:06,570 We hebben met de functie krijgen tekenreeks als volgt. 2276 01:53:06,570 --> 01:53:10,464 >> We hebben gehad een functie te krijgen koord, zoals onder meer CS50.h, 2277 01:53:10,464 --> 01:53:16,624 zijn standaard IO.h, int, belangrijkste, nietig. 2278 01:53:16,624 --> 01:53:18,790 En dan elke keer dat ik heb genaamd get reeks tot nu toe, 2279 01:53:18,790 --> 01:53:23,260 Ik heb gezegd iets dergelijks, touw s krijgt krijgt koord, want get string-- 2280 01:53:23,260 --> 01:53:27,880 laten we noemen dit get.c-- get snaar zelf retourneert een string die ik kan dan 2281 01:53:27,880 --> 01:53:32,050 gebruiken, en zeggen: hallo, komma, procent s, backslash n, s. 2282 01:53:32,050 --> 01:53:35,660 >> Dus dit is hetzelfde voorbeeld, echt, dat we hadden eerder. 2283 01:53:35,660 --> 01:53:37,920 Dus maak je snaar een waarde retourneert. 2284 01:53:37,920 --> 01:53:41,260 Maar een moment geleden, afdrukreeks geen waarde terug te keren. 2285 01:53:41,260 --> 01:53:42,721 Het heeft slechts een neveneffect. 2286 01:53:42,721 --> 01:53:44,220 Dus dit is een fundamenteel verschil. 2287 01:53:44,220 --> 01:53:46,710 We hebben verschillende gezien typen functies nu, 2288 01:53:46,710 --> 01:53:49,490 waarvan sommige zijn teruggekeerd waarden, waarvan sommige niet. 2289 01:53:49,490 --> 01:53:51,890 Dus misschien is het koord, of int of float. 2290 01:53:51,890 --> 01:53:53,480 Of misschien is het gewoon nietig. 2291 01:53:53,480 --> 01:53:55,710 >> En het verschil dat deze functies 2292 01:53:55,710 --> 01:53:59,940 gegevens krijgen en terug te keren een waarde zijn eigenlijk het brengen van iets terug naar de tafel, 2293 01:53:59,940 --> 01:54:01,110 bij wijze van spreken. 2294 01:54:01,110 --> 01:54:03,710 Dus laten we gaan vooruit en kijken naar een laatste set 2295 01:54:03,710 --> 01:54:09,129 voorbeelden die een gevoel geeft, nu van hoe wij, inderdaad, abstract beter, 2296 01:54:09,129 --> 01:54:11,670 en beter en beter, of meer, en meer, en meer, met het oog 2297 01:54:11,670 --> 01:54:13,810 schrijven uiteindelijk betere code. 2298 01:54:13,810 --> 01:54:16,860 Laten we gaan vooruit, en in de geest van Scratch, doet u het volgende. 2299 01:54:16,860 --> 01:54:21,700 >> Laat me ga je gang en omvatten CS50.h en standaard io.h. 2300 01:54:21,700 --> 01:54:24,010 Laat me ga je gang en geef mijzelf een int, belangrijkste, nietig. 2301 01:54:24,010 --> 01:54:27,380 En laat me doorgaan, noemen dit cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> En laat me gaan en gewoon zoals Scratch, uitprinten hoest / n. 2303 01:54:35,510 --> 01:54:37,170 En ik wil dit drie keer doen. 2304 01:54:37,170 --> 01:54:39,670 Dus ik ben, natuurlijk, gewoon te kopiëren en plakken drie keer. 2305 01:54:39,670 --> 01:54:46,440 Ik ga nu te maken hoesten dot slash hoest. 2306 01:54:46,440 --> 01:54:50,120 Laten we geef mezelf een beetje meer ruimte hier, Enter, hoesten, hoest, hoest. 2307 01:54:50,120 --> 01:54:53,970 >> Er is, natuurlijk, al een mogelijkheden voor verbetering. 2308 01:54:53,970 --> 01:54:55,679 Ik heb gekopieerd en geplakt een paar keer vandaag. 2309 01:54:55,679 --> 01:54:58,261 Maar dat was alleen zo ik niet moeten zoveel mogelijk tekens te typen. 2310 01:54:58,261 --> 01:55:00,250 Ik heb nog steeds wat veranderd die regels code zijn. 2311 01:55:00,250 --> 01:55:04,240 >> Deze drie lijnen identiek, die voelt lui en inderdaad is, 2312 01:55:04,240 --> 01:55:07,110 en is waarschijnlijk niet de juiste aanpak. 2313 01:55:07,110 --> 01:55:11,029 Dus met welk ingrediënt kunnen we het verbeteren van deze code? 2314 01:55:11,029 --> 01:55:12,570 We hoeven niet te kopiëren en te plakken code. 2315 01:55:12,570 --> 01:55:15,070 >> En inderdaad, op elk moment voel je je jezelf te kopiëren en te plakken, 2316 01:55:15,070 --> 01:55:17,700 en niet zelfs het veranderen van de code, de kans groot dat er een betere manier. 2317 01:55:17,700 --> 01:55:19,470 En inderdaad is. 2318 01:55:19,470 --> 01:55:22,510 Laat me ga je gang en doe een lus, hoewel het misschien niet syntax 2319 01:55:22,510 --> 01:55:24,570 komen nog natuurlijk. 2320 01:55:24,570 --> 01:55:29,494 >> Doe dit drie keer, gewoon door het doen van de following-- 2321 01:55:29,494 --> 01:55:31,160 en ik toevallig deze kennen uit de praktijk. 2322 01:55:31,160 --> 01:55:32,810 Maar we hebben een aantal voorbeelden kaarten. 2323 01:55:32,810 --> 01:55:34,950 En je zult zien online meer referenties nog steeds. 2324 01:55:34,950 --> 01:55:37,790 >> Dit is de syntax op lijn 6, dat net als Scratch dat herhaalt 2325 01:55:37,790 --> 01:55:40,090 blok, herhaal de volgende drie keer. 2326 01:55:40,090 --> 01:55:41,340 Het is een beetje magisch voor nu. 2327 01:55:41,340 --> 01:55:43,050 Maar dit zal meer te halen, en meer vertrouwd. 2328 01:55:43,050 --> 01:55:45,050 >> En het zal herhalen lijn acht drie keer, 2329 01:55:45,050 --> 01:55:52,390 dus dat als ik opnieuw compileren make hoest, dot slash hoest, hoesten, hoest, hoest. 2330 01:55:52,390 --> 01:55:54,030 Het werkt nog steeds op dezelfde manier. 2331 01:55:54,030 --> 01:55:55,550 Dus dat is allemaal prima en goed. 2332 01:55:55,550 --> 01:55:58,200 Maar dat is niet erg geabstraheerd. 2333 01:55:58,200 --> 01:55:59,371 >> Het is volkomen juist. 2334 01:55:59,371 --> 01:56:01,370 Maar het voelt alsof er een kans kan zijn, 2335 01:56:01,370 --> 01:56:03,750 zoals in de wereld van Scratch, van de soort start 2336 01:56:03,750 --> 01:56:07,530 om wat semantiek hier toevoegen zodat Ik heb geen gewoon wat voor de lus, 2337 01:56:07,530 --> 01:56:09,867 en een functie die zegt hoesten, of is hoesten. 2338 01:56:09,867 --> 01:56:10,450 Weet je wat? 2339 01:56:10,450 --> 01:56:12,620 Laat me proberen te zijn een beetje koeler dan dat, 2340 01:56:12,620 --> 01:56:16,090 en eigenlijk schrijven functie heeft een aantal bijwerkingen, noem het hoesten. 2341 01:56:16,090 --> 01:56:20,830 >> En het duurt geen input en had geen waarde als output. 2342 01:56:20,830 --> 01:56:22,680 Maar weet je wat het doet? 2343 01:56:22,680 --> 01:56:29,370 Het doet dit-- printf, citaat unquote, hoesten. 2344 01:56:29,370 --> 01:56:32,380 >> En nu hier, ik ga om vooruit en int gaan, 2345 01:56:32,380 --> 01:56:36,070 i krijgt nul, i minder dan 3, i plus plus. 2346 01:56:36,070 --> 01:56:39,770 Ik ga printf niet doen, dat is misschien wel een lage uitvoeringsniveau 2347 01:56:39,770 --> 01:56:40,270 detail. 2348 01:56:40,270 --> 01:56:41,353 Kan me niet schelen hoe te hoesten. 2349 01:56:41,353 --> 01:56:43,240 Ik wil gewoon de hoest functie te gebruiken. 2350 01:56:43,240 --> 01:56:44,840 En ik ga gewoon hoesten bellen. 2351 01:56:44,840 --> 01:56:46,204 >> Nu, let op de tweedeling. 2352 01:56:46,204 --> 01:56:49,370 Wanneer u een functie aan te roepen, als je dat niet doet willen geven ingangen, helemaal prima. 2353 01:56:49,370 --> 01:56:51,780 Gewoon doen openen paren, in de buurt paren, en je bent klaar. 2354 01:56:51,780 --> 01:56:56,271 >> Wanneer u een functie definiëren of verklaren prototype van een functie, 2355 01:56:56,271 --> 01:56:58,770 als je weet van tevoren dat het niet van plan om alle argumenten te nemen, 2356 01:56:58,770 --> 01:57:01,170 zeggen leegte in die tussen haakjes daar. 2357 01:57:01,170 --> 01:57:05,660 En dat zorgt ervoor dat je niet per ongeluk misbruiken. 2358 01:57:05,660 --> 01:57:07,020 Laat me ga je gang en maak hoest. 2359 01:57:07,020 --> 01:57:08,540 En, natuurlijk, ik heb een fout gemaakt. 2360 01:57:08,540 --> 01:57:10,410 >> Dammit, er is dat impliciete verklaring. 2361 01:57:10,410 --> 01:57:11,325 Maar dat is prima. 2362 01:57:11,325 --> 01:57:12,590 Het is een makkelijke oplossing. 2363 01:57:12,590 --> 01:57:18,240 Ik moet alleen het prototype hoger in mijn dossier dan ik ben eigenlijk gebruiken. 2364 01:57:18,240 --> 01:57:20,070 >> Dus nu laat ik hoest weer, nice. 2365 01:57:20,070 --> 01:57:20,790 Nu werkt het. 2366 01:57:20,790 --> 01:57:22,930 Voeg hoest, hoest, hoest, hoest. 2367 01:57:22,930 --> 01:57:25,930 Dus je zou denken dat we echt iets meer dan engineering van dit probleem. 2368 01:57:25,930 --> 01:57:26,763 En inderdaad, we zijn. 2369 01:57:26,763 --> 01:57:28,870 Dit is niet een goede kandidaat van een programma 2370 01:57:28,870 --> 01:57:31,930 momenteel voor refactoring, en doen wat 2371 01:57:31,930 --> 01:57:35,645 genoemd hiërarchische decompositie, waar u enkele code, en dan 2372 01:57:35,645 --> 01:57:38,790 je soort van factor dingen uit, om zo om meer semantiek toeschrijven aan hen, 2373 01:57:38,790 --> 01:57:40,930 en opnieuw te gebruiken uiteindelijk de langere termijn. 2374 01:57:40,930 --> 01:57:43,490 Maar het is een bouwsteen in de richting van verfijndere programma 2375 01:57:43,490 --> 01:57:45,600 dat we beginnen het schrijven van het duurde niet lang dat 2376 01:57:45,600 --> 01:57:50,090 laat ons toe om de woordenschat waarmee betere code te schrijven. 2377 01:57:50,090 --> 01:57:52,920 En, inderdaad, laten we eens kijken of we kan dit niet verder te generaliseren. 2378 01:57:52,920 --> 01:57:57,984 >> Het lijkt een beetje lame dat ik, de belangrijkste, zorgen te maken over deze darn lus, 2379 01:57:57,984 --> 01:57:59,400 en bellen hoesten opnieuw en opnieuw. 2380 01:57:59,400 --> 01:58:03,050 Waarom kan ik niet gewoon vertellen hoesten, Neem hoesten drie keer? 2381 01:58:03,050 --> 01:58:08,170 Met andere woorden, waarom kan ik niet gewoon geeft input te hoesten en dit te doen? 2382 01:58:08,170 --> 01:58:11,270 >> Waarom kan ik niet gewoon zeggen, in belangrijkste hoest driemaal. 2383 01:58:11,270 --> 01:58:13,150 En nu, dit is een soort van magisch. 2384 01:58:13,150 --> 01:58:14,540 Het is hier heel iteratief. 2385 01:58:14,540 --> 01:58:15,940 En het is inderdaad een baby stap. 2386 01:58:15,940 --> 01:58:19,250 >> Maar de mogelijkheid om op te zeggen lijn acht, hoesten drie keer, 2387 01:58:19,250 --> 01:58:20,730 het is gewoon zo veel meer leesbaar. 2388 01:58:20,730 --> 01:58:24,210 En plus, heb ik niet te weten of schelen hoe hoest wordt geïmplementeerd. 2389 01:58:24,210 --> 01:58:26,460 En zelfs later in de termijn en voor de laatste projecten, 2390 01:58:26,460 --> 01:58:29,150 als je een project aan te pakken een klasgenoot of twee klasgenoten, 2391 01:58:29,150 --> 01:58:32,370 zul je beseffen dat je gaat moeten of willen, verdeel het werk. 2392 01:58:32,370 --> 01:58:34,650 >> En je gaat te willen om te beslissen vooraf, wie gaat wat doen, 2393 01:58:34,650 --> 01:58:35,483 en waarbij stukken? 2394 01:58:35,483 --> 01:58:37,520 En zou het niet mooi zijn Als je bijvoorbeeld 2395 01:58:37,520 --> 01:58:40,100 de leiding nemen van het schrijven van de belangrijkste, gedaan. 2396 01:58:40,100 --> 01:58:43,470 En je kamergenoot, of uw partner meer in het algemeen, 2397 01:58:43,470 --> 01:58:45,230 draagt ​​zorg voor de uitvoering van hoest. 2398 01:58:45,230 --> 01:58:49,540 >> En deze divisie, deze muren van abstractie, 2399 01:58:49,540 --> 01:58:52,310 of abstractielagen indien u zult zijn super krachtig, 2400 01:58:52,310 --> 01:58:55,480 omdat vooral voor grotere, meer complexe programma's en systemen, 2401 01:58:55,480 --> 01:59:00,070 Het maakt het mogelijk meerdere mensen op te bouwen dingen samen, en uiteindelijk 2402 01:59:00,070 --> 01:59:02,680 steek hun werk op deze manier samen. 2403 01:59:02,680 --> 01:59:05,332 Maar, natuurlijk, we moeten nu op te lossen hoest. 2404 01:59:05,332 --> 01:59:07,290 We moeten hoesten vertellen dat, hey, weet je wat? 2405 01:59:07,290 --> 01:59:11,230 Je gaat nodig hebben om een ​​te nemen input-- dus niet ledig, maar int en nu. 2406 01:59:11,230 --> 01:59:15,170 Laten we doorgaan en in gebruik genomen hoesten het int. i krijgt nul. 2407 01:59:15,170 --> 01:59:16,890 >> i kleiner is dan het aantal keren. 2408 01:59:16,890 --> 01:59:18,550 Ik zei drie eerder. 2409 01:59:18,550 --> 01:59:20,420 Maar dat is niet wat ik wil. 2410 01:59:20,420 --> 01:59:25,520 Ik wil hoest te worden gegeneraliseerd naar ondersteuning voor enig aantal iteraties. 2411 01:59:25,520 --> 01:59:28,800 >> Dus, inderdaad, het is n dat ik wil, ongeacht de gebruiker vertelt me. 2412 01:59:28,800 --> 01:59:31,620 Nu, ik kan gaan en zeggen druk hoest. 2413 01:59:31,620 --> 01:59:34,750 En het maakt niet uit welk nummer de gebruiker gaat in, 2414 01:59:34,750 --> 01:59:36,890 Ik zal herhalen dat vele malen. 2415 01:59:36,890 --> 01:59:39,160 >> Dus aan het eind van de dag, programma identiek. 2416 01:59:39,160 --> 01:59:42,820 Maar let op al deze spullen kan zelfs in een ander bestand. 2417 01:59:42,820 --> 01:59:45,620 Sterker nog, ik weet het niet bij de Momenteel hoe printf wordt geïmplementeerd. 2418 01:59:45,620 --> 01:59:47,980 >> Ik weet niet op dit moment hoe krijgen tekenreeks of krijgen int, of om float 2419 01:59:47,980 --> 01:59:48,646 ten uitvoer worden gelegd. 2420 01:59:48,646 --> 01:59:50,930 En ik wil niet ze te zien op mijn scherm. 2421 01:59:50,930 --> 01:59:55,320 Zoals het is, begin ik te concentreren op mijn programma, niet die functies. 2422 01:59:55,320 --> 01:59:59,070 >> En ja, inderdaad, zodra je start factoring code als volgt uit, 2423 01:59:59,070 --> 02:00:01,397 konden we verhuizen zelfs hoesten naar een apart bestand? 2424 02:00:01,397 --> 02:00:02,730 Iemand anders zou het uit te voeren. 2425 02:00:02,730 --> 02:00:06,810 En u en uw programma te worden van de heel mooi, en zeer leesbaar, 2426 02:00:06,810 --> 02:00:10,830 misschien wel, eigenlijk vier line programma daar. 2427 02:00:10,830 --> 02:00:13,510 >> Dus laten we nu doorgaan en maak nog een verandering. 2428 02:00:13,510 --> 02:00:16,180 Merk op dat mijn prototype moet veranderen boven. 2429 02:00:16,180 --> 02:00:18,390 Dus laat me dat vast te stellen, zodat Krijg ik niet uitgescholden. 2430 02:00:18,390 --> 02:00:22,580 >> Maak hoesten, laat ik hoest een keer draaien meer, nog steeds hetzelfde te doen. 2431 02:00:22,580 --> 02:00:26,010 Maar nu zien we een ingrediënt voor een definitieve versie. 2432 02:00:26,010 --> 02:00:26,940 Weet je wat? 2433 02:00:26,940 --> 02:00:29,040 Ik wil niet alleen maar hoesten, per se. 2434 02:00:29,040 --> 02:00:30,802 Ik wil iets meer algemeen. 2435 02:00:30,802 --> 02:00:31,510 Dus weet je wat? 2436 02:00:31,510 --> 02:00:32,450 Ik wil dit doen. 2437 02:00:32,450 --> 02:00:37,140 Ik wil hebben, net als Scratch doet, inspraak blok, maar niet alleen 2438 02:00:37,140 --> 02:00:38,680 iets zeggen sommige aantal keren. 2439 02:00:38,680 --> 02:00:41,510 Ik wil dat het een zeer specifieke reeks zeggen. 2440 02:00:41,510 --> 02:00:43,850 En daarom doe ik niet wil dat het gewoon zeggen hoest. 2441 02:00:43,850 --> 02:00:47,660 Ik wil om te zeggen wat tekenreeks wordt doorgegeven. 2442 02:00:47,660 --> 02:00:49,960 >> Zo merken, heb ik gegeneraliseerd Dit zodat nu 2443 02:00:49,960 --> 02:00:53,110 zeg voelt als een goede naam voor deze, zoals Scratch, 2444 02:00:53,110 --> 02:00:55,530 heeft twee argumenten, in tegenstelling tot Scratch. 2445 02:00:55,530 --> 02:00:56,570 Een daarvan is een string. 2446 02:00:56,570 --> 02:00:57,300 Een daarvan is een int. 2447 02:00:57,300 --> 02:00:58,130 >> En ik kon ze te verwisselen. 2448 02:00:58,130 --> 02:01:00,713 Ik heb net zoiets als het idee van zeggen dat de snaar, en dan 2449 02:01:00,713 --> 02:01:01,940 hoe vaak later. 2450 02:01:01,940 --> 02:01:03,970 Leegte betekent dat het nog steeds niets terug. 2451 02:01:03,970 --> 02:01:06,428 Dit zijn slechts visuele kant effecten, zoals bij [? Jordan,?] 2452 02:01:06,428 --> 02:01:08,240 een mondelinge neveneffect van schreeuwen. 2453 02:01:08,240 --> 02:01:12,630 Het doet nog steeds iets n keer, 0 tot, maar niet gelijk aan n. 2454 02:01:12,630 --> 02:01:14,540 Dit betekent dat in totaal n keer. 2455 02:01:14,540 --> 02:01:16,540 En dan gewoon uitprinten wat dat string is. 2456 02:01:16,540 --> 02:01:19,060 Dus ik heb echt gegeneraliseerd deze lijn van code. 2457 02:01:19,060 --> 02:01:22,460 Dus nu, hoe kan ik implementeren de hoest functie? 2458 02:01:22,460 --> 02:01:25,520 >> Ik kan leegte hoesten doen. 2459 02:01:25,520 --> 02:01:28,501 En ik kan nog wel in de manier waarop vaak u wilt hoesten. 2460 02:01:28,501 --> 02:01:29,250 Maar weet je wat? 2461 02:01:29,250 --> 02:01:31,240 Ik kan nu punter te zeggen. 2462 02:01:31,240 --> 02:01:36,540 >> Ik kan bellen zeggen met de woord hoesten, passeren in n. 2463 02:01:36,540 --> 02:01:40,410 En als ik wil ook uit te voeren, gewoon voor de lol, een nies functie, 2464 02:01:40,410 --> 02:01:42,290 Ik kan een aantal aantal keer niezen. 2465 02:01:42,290 --> 02:01:47,300 En ik kan blijven hergebruik van n, want m merken dat in deze context of strekking 2466 02:01:47,300 --> 02:01:49,470 bestaat alleen op deze functie. 2467 02:01:49,470 --> 02:01:52,767 >> En n in deze context alleen bestaat binnen deze functie hier. 2468 02:01:52,767 --> 02:01:54,600 Dus we zullen terug te komen deze kwesties van omvang. 2469 02:01:54,600 --> 02:02:01,160 En hier, ik ga gewoon om te zeggen, achoo, en dan n keer, puntkomma. 2470 02:02:01,160 --> 02:02:04,340 >> En nu, ik moet gewoon om te lenen deze functie handtekeningen hier. 2471 02:02:04,340 --> 02:02:06,290 Dus hoest is correct. 2472 02:02:06,290 --> 02:02:10,090 Void niezen is nu correct. 2473 02:02:10,090 --> 02:02:12,390 >> En ik moet nog maar zeggen. 2474 02:02:12,390 --> 02:02:18,990 Dus ik ga zeggen, laten we zeggen koord s, int n, puntkomma. 2475 02:02:18,990 --> 02:02:22,010 Dus ik heb over-engineering van de heck uit van dit programma. 2476 02:02:22,010 --> 02:02:23,760 >> En dit betekent niet noodzakelijkerwijs betekent dit is 2477 02:02:23,760 --> 02:02:26,343 wat je moet doen bij het schrijven zelfs de eenvoudigste programma. 2478 02:02:26,343 --> 02:02:29,280 Neem iets dat is natuurlijk heel simpel, heel kort, 2479 02:02:29,280 --> 02:02:31,800 en re-implementeren het gebruik van veel te veel code. 2480 02:02:31,800 --> 02:02:34,560 Maar je zult echt zien, en in tijd kijken terug op deze voorbeelden, 2481 02:02:34,560 --> 02:02:38,610 en beseffen, oh, dat zijn de stappen we hebben om daadwerkelijk te generaliseren, 2482 02:02:38,610 --> 02:02:40,797 iets factor out, tot aan het eind van de dag 2483 02:02:40,797 --> 02:02:42,380 mijn code is eigenlijk vrij redelijk. 2484 02:02:42,380 --> 02:02:45,960 Want als ik wil hoesten drie keer niezen dan drie keer, 2485 02:02:45,960 --> 02:02:50,420 Ik ga gewoon naar deze opnieuw uit te voeren, programma te maken hoesten en lopen hoesten. 2486 02:02:50,420 --> 02:02:53,620 En ik heb drie hoesten en drie niest. 2487 02:02:53,620 --> 02:02:55,990 >> En dus dit is een fundamentele paradigma, als je wil, 2488 02:02:55,990 --> 02:03:00,110 voor de manier waarop we zouden gaan over het eigenlijk de uitvoering van een programma. 2489 02:03:00,110 --> 02:03:03,220 Maar laten we nu zien wat het is we hebben al die tijd te doen, 2490 02:03:03,220 --> 02:03:06,940 en wat sommige van de laatste invullingen achter deze eenvoudige opdracht. 2491 02:03:06,940 --> 02:03:09,620 Aan het eind van de dag, we hebben zijn met behulp van Clang als onze compiler. 2492 02:03:09,620 --> 02:03:11,494 We zijn het schrijven van de bron code converteren 2493 02:03:11,494 --> 02:03:12,820 via Clang in machine code. 2494 02:03:12,820 --> 02:03:15,540 >> En we hebben gebruik gemaakt van Zorg onze toetsaanslagen zo vergemakkelijken 2495 02:03:15,540 --> 02:03:20,740 dat we niet hoeven te onthouden die bezweringen van Clang zelf. 2496 02:03:20,740 --> 02:03:22,640 Maar wat is je eigenlijk aan het doen? 2497 02:03:22,640 --> 02:03:24,750 En op hun beurt, wat Clang eigenlijk aan het doen? 2498 02:03:24,750 --> 02:03:28,790 >> Het blijkt dat, hoewel we hebben vereenvoudigd bespreking van vandaag door te zeggen: 2499 02:03:28,790 --> 02:03:33,090 je broncode te nemen, doorgeven als input voor een compiler, die u geeft 2500 02:03:33,090 --> 02:03:35,750 output van machine code, blijkt dat er's 2501 02:03:35,750 --> 02:03:37,420 een paar verschillende stappen binnen is er. 2502 02:03:37,420 --> 02:03:41,940 En compileren gebeurt er met de paraplu te zijn term voor een heleboel stappen. 2503 02:03:41,940 --> 02:03:43,970 Maar laten we gewoon plagen dit uit heel snel. 2504 02:03:43,970 --> 02:03:48,070 >> Het blijkt dat we hebben gedaan meer dingen elke keer als ik een programma uit te voeren, 2505 02:03:48,070 --> 02:03:50,990 of elke keer als ik de samenstelling van een programma van vandaag. 2506 02:03:50,990 --> 02:03:55,020 Dus preprocessing betreft dit-- alles in een C-programma, 2507 02:03:55,020 --> 02:03:58,720 zoals we zullen zien opnieuw en opnieuw, dat begint met deze hekje, 2508 02:03:58,720 --> 02:04:03,320 of de hashtag symbool hier, betekent het is een preprocessor richtlijn. 2509 02:04:03,320 --> 02:04:07,330 Dat betekent in dit geval, he computer, doe iets met dit bestand 2510 02:04:07,330 --> 02:04:09,430 voordat u daadwerkelijk compileren mijn eigen code. 2511 02:04:09,430 --> 02:04:15,220 >> In dit geval, hash bevatten is, wezen, C's manier om te zeggen, 2512 02:04:15,220 --> 02:04:19,325 hey computer, haal de inhoud van CS50.h en plak ze hier. 2513 02:04:19,325 --> 02:04:22,170 Hey computer, haal de inhoud van standaard IO.h, 2514 02:04:22,170 --> 02:04:24,690 waar dat op de harde schijf, plak het hier. 2515 02:04:24,690 --> 02:04:27,390 Dus die dingen gebeuren eerst tijdens de voorbewerking. 2516 02:04:27,390 --> 02:04:28,880 >> En Clang doet dit alles voor ons. 2517 02:04:28,880 --> 02:04:30,510 En het doet het zo verdraaid snel, heb je niet eens 2518 02:04:30,510 --> 02:04:32,000 zie vier verschillende dingen gebeuren. 2519 02:04:32,000 --> 02:04:34,100 Maar dat is het eerste dergelijke stap. 2520 02:04:34,100 --> 02:04:35,560 >> Wat gebeurt er eigenlijk de volgende stap? 2521 02:04:35,560 --> 02:04:38,320 Nou, de volgende officiële stap is het opstellen van. 2522 02:04:38,320 --> 02:04:40,385 En het blijkt dat het programmeren 2523 02:04:40,385 --> 02:04:44,060 technisch betekent gaande van broncode, de spullen die we hebben 2524 02:04:44,060 --> 02:04:47,890 schrijft vandaag de dag, om iets te riep assemblage-code, iets 2525 02:04:47,890 --> 02:04:49,260 dat ziet er een beetje anders uit. 2526 02:04:49,260 --> 02:04:51,050 >> En, in feite, we kunnen dit zien heel snel. 2527 02:04:51,050 --> 02:04:53,890 Laat me eigenlijk in mijn IDE gaan. 2528 02:04:53,890 --> 02:04:58,050 Laat me ga je gang en een open hello.c, die is het eerste programma waarmee we 2529 02:04:58,050 --> 02:04:59,120 vandaag begonnen. 2530 02:04:59,120 --> 02:05:04,130 En laat me ga je gang en lopen Clang een beetje anders, Clang-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 die eigenlijk gaat geef me een ander bestand hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> En we zullen waarschijnlijk nooit weer te zien dit soort code. 2533 02:05:10,330 --> 02:05:13,030 Als u een lager niveau te nemen systemen klasse zoals CS61, 2534 02:05:13,030 --> 02:05:14,920 je zal veel meer te zien Dergelijke code. 2535 02:05:14,920 --> 02:05:17,020 Maar dit is assembler. 2536 02:05:17,020 --> 02:05:22,050 Dit is X86 assembler dat de CPU die onderliggende 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE eigenlijk begrijpt. 2538 02:05:24,460 --> 02:05:27,060 >> En cryptisch als het doet kijk, het is iets 2539 02:05:27,060 --> 02:05:29,180 de computer begrijpt vrij goed. 2540 02:05:29,180 --> 02:05:30,790 Sub q, dit is een subtract. 2541 02:05:30,790 --> 02:05:31,660 Er zijn bewegingen. 2542 02:05:31,660 --> 02:05:35,730 >> Er belt functies hier, x oring, een beweging, een invoegtoepassing, een pop, 2543 02:05:35,730 --> 02:05:36,430 een terugkeer. 2544 02:05:36,430 --> 02:05:38,850 Dus is er een aantal zeer low level instructies 2545 02:05:38,850 --> 02:05:41,280 dat CPU's begrijpen dat Ik zinspeelde eerder. 2546 02:05:41,280 --> 02:05:43,100 Dat is wat Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Er zijn patronen nullen en enen dat 2548 02:05:45,030 --> 02:05:51,800 toewijzen aan deze arcanely geformuleerd, maar enigszins goed met de naam, instructies, 2549 02:05:51,800 --> 02:05:52,780 bij wijze van spreken. 2550 02:05:52,780 --> 02:05:54,780 Dat is wat er gebeurt als je compileert uw code. 2551 02:05:54,780 --> 02:05:58,560 Je krijgt assemblage taal van te maken, die 2552 02:05:58,560 --> 02:06:04,680 : de derde stap is te monteren dat assemblage-code in, uiteindelijk, 2553 02:06:04,680 --> 02:06:09,080 machine code-- nullen en enen, niet de tekst die we net zagen een moment geleden. 2554 02:06:09,080 --> 02:06:13,370 >> Dus pre-processing betekent dat vinden en vervang, en een paar andere dingen. 2555 02:06:13,370 --> 02:06:16,430 Compileren neemt uw bron code van C, broncode 2556 02:06:16,430 --> 02:06:18,980 dat we schreven, aan de montage code dat we net keek. 2557 02:06:18,980 --> 02:06:22,170 Assembleren neemt dat assemblage code om nullen en enen 2558 02:06:22,170 --> 02:06:24,680 dat de CPU echt wil begrijpen aan het eind van de dag. 2559 02:06:24,680 --> 02:06:27,630 En linking is de laatste stap dat gebeurt voor ons-- weer, 2560 02:06:27,630 --> 02:06:29,830 zo snel dat we niet eens notice-- dat zegt: 2561 02:06:29,830 --> 02:06:32,460 hey computer, nemen alle de nullen en enen dat 2562 02:06:32,460 --> 02:06:36,750 het gevolg van het opstellen van David's code, en zijn belangrijkste functie in dit geval. 2563 02:06:36,750 --> 02:06:39,160 >> En hey computer, gaan halen alle nullen en enen 2564 02:06:39,160 --> 02:06:42,180 dat de CS50 personeel schreef in de CS50 bibliotheek. 2565 02:06:42,180 --> 02:06:43,440 Meng die met Davids. 2566 02:06:43,440 --> 02:06:46,648 En hey computer, haal alle nullen en degenen die iemand anders schreef jaar 2567 02:06:46,648 --> 02:06:47,470 geleden voor printf. 2568 02:06:47,470 --> 02:06:49,880 En toe te voegen die in de hele zaak, zodat we hebben 2569 02:06:49,880 --> 02:06:52,870 kreeg mijn nullen en enen, de nullen en enen CS50 personeel, 2570 02:06:52,870 --> 02:06:55,370 de printf nullen en enen, en alles wat we gebruiken. 2571 02:06:55,370 --> 02:07:00,410 >> Ze krijgen allemaal samen gecombineerd in één programma genaamd, in dit geval, hello. 2572 02:07:00,410 --> 02:07:03,141 Dus voortaan, zullen we gewoon gebruiken het woord compileren. 2573 02:07:03,141 --> 02:07:06,390 En we zullen vanzelfsprekend dat wanneer zeggen wij, samenstellen van uw programma, het betekent, 2574 02:07:06,390 --> 02:07:08,849 hey doe de pre-processing, assembleren en koppelen. 2575 02:07:08,849 --> 02:07:11,890 Maar er is eigenlijk een aantal sappige stuff gebeurt er onder de motorkap. 2576 02:07:11,890 --> 02:07:13,723 En vooral als je krijgen nieuwsgierig wat tijd, 2577 02:07:13,723 --> 02:07:15,900 je kunt beginnen met prikken rond op dit lagere niveau. 2578 02:07:15,900 --> 02:07:19,660 Maar voor nu, beseffen dat onder de afhaalrestaurants voor vandaag 2579 02:07:19,660 --> 02:07:23,420 zijn gewoon de begin van een proces, 2580 02:07:23,420 --> 02:07:26,700 het krijgen van comfortabel met zoiets als Hello World. 2581 02:07:26,700 --> 02:07:29,575 Sterker nog, de meeste van wat we vandaag gedaan zeker niet zal zinken in super snel. 2582 02:07:29,575 --> 02:07:31,491 En het zal enige duren tijd, en wat oefening. 2583 02:07:31,491 --> 02:07:33,864 En kansen zijn, zult u sorteren van het toetsenbord wilt raken 2584 02:07:33,864 --> 02:07:34,780 of schreeuwen tegen het scherm. 2585 02:07:34,780 --> 02:07:35,880 En dat alles is OK. 2586 02:07:35,880 --> 02:07:38,320 Hoewel, misschien probeer niet te doe het in de bibliotheek zo veel. 2587 02:07:38,320 --> 02:07:40,820 >> En uiteindelijk, zult u worden in staat hoewel, om te beginnen 2588 02:07:40,820 --> 02:07:44,580 het zien van patronen, zowel in goede code dat je hebt geschreven en in fouten 2589 02:07:44,580 --> 02:07:45,370 die je hebt gemaakt. 2590 02:07:45,370 --> 02:07:48,965 En net als het proces van steeds een TF of een CA is als, 2591 02:07:48,965 --> 02:07:51,590 zult u beginnen om beter te worden en beter bij het zien van die patronen, 2592 02:07:51,590 --> 02:07:53,774 en gewoon het oplossen van uw eigen problemen uiteindelijk. 2593 02:07:53,774 --> 02:07:56,940 In de tussentijd zal er genoeg zijn van ons om jullie steun te verlenen, en krijg je 2594 02:07:56,940 --> 02:07:57,481 door dit. 2595 02:07:57,481 --> 02:07:59,450 En in de schrijf-ups voor alle problemen 2596 02:07:59,450 --> 02:08:01,366 wordt u begeleid bij alle opdrachten 2597 02:08:01,366 --> 02:08:05,330 dat ik zeker weet uit veel van de praktijk van nu, 2598 02:08:05,330 --> 02:08:07,380 maar zou hebben gevlogen boven het hoofd voor nu. 2599 02:08:07,380 --> 02:08:08,580 En dat is helemaal prima. 2600 02:08:08,580 --> 02:08:11,230 >> Maar, uiteindelijk, je gaat om te beginnen om te zien patronen ontstaan. 2601 02:08:11,230 --> 02:08:14,260 En zodra je langs alle van de dom details, zoals haakjes, 2602 02:08:14,260 --> 02:08:16,710 en accolades en puntkomma's, en het spul, eerlijk gezegd, 2603 02:08:16,710 --> 02:08:19,360 dat is niet helemaal intellectueel interessant. 2604 02:08:19,360 --> 02:08:22,690 En het is niet het doel van het nemen van een inleidende les. 2605 02:08:22,690 --> 02:08:24,410 Het zijn de ideeën die gaan uit. 2606 02:08:24,410 --> 02:08:26,659 >> Het is de lussen, en de omstandigheden en de functies, 2607 02:08:26,659 --> 02:08:30,552 en krachtiger de abstractie, en de factoring van de code, 2608 02:08:30,552 --> 02:08:33,510 en het een goed ontwerp, en de goede stijl, en uiteindelijk de juistheid 2609 02:08:33,510 --> 02:08:37,330 van de code, dat is uiteindelijk gaan naar de meest toe. 2610 02:08:37,330 --> 02:08:40,925 Dus volgende week, zullen we deze nemen ideeën die we voor het eerst zag in Scratch 2611 02:08:40,925 --> 02:08:42,800 en hebben nu vertaald C. En we beginnen 2612 02:08:42,800 --> 02:08:45,740 introduceren de eerste van de Natuurlijk de echte wereld domeinen. 2613 02:08:45,740 --> 02:08:50,140 >> We zullen focussen op de wereld van de veiligheid, en meer in het bijzonder cryptografie, 2614 02:08:50,140 --> 02:08:51,980 de kunst van het klauteren informatie. 2615 02:08:51,980 --> 02:08:54,000 En een van de eerste problemen die je jezelf 2616 02:08:54,000 --> 02:08:56,840 krijgt om verder te schrijven spelen met een aantal van de syntax 2617 02:08:56,840 --> 02:08:59,880 en het oplossen van een aantal logische problemen, uiteindelijk duurde niet lang, 2618 02:08:59,880 --> 02:09:03,960 is om daadwerkelijk te klauteren, of te versleutelen, en uiteindelijk decoderen gegevens. 2619 02:09:03,960 --> 02:09:06,470 En alles wat we hebben gedaan Vandaag zal vrij laag 2620 02:09:06,470 --> 02:09:09,190 niveau, is gewoon toestaan ons één en één nemen, 2621 02:09:09,190 --> 02:09:13,550 en nog een stap boven in de richting van schrijven maar de meest interessante code. 2622 02:09:13,550 --> 02:09:15,050 >> Dus meer daarover volgende week. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [VIDEO AFSPELEN] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> Wat kan je me vertellen over de laatste keer dat je hem zag? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 Wat kan ik zeggen, echt? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Ik bedoel, het was net als elk ander pre-productie repetitie, 2631 02:09:35,340 --> 02:09:40,510 behalve dat er iets was, zei hij aan het eind dat geplakt met mij. 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 is een cut iedereen, geweldige baan bij de repetitie. 2636 02:09:52,190 --> 02:09:53,070 >> lunch -dat's? 2637 02:09:53,070 --> 02:09:54,986 >> Ja, jij en ik kan pak een sandwich in een beetje. 2638 02:09:54,986 --> 02:09:58,380 Laat me ondervragen met David echt snel. 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 >> [END AFSPELEN]