1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [ZENE] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> David J. MALAN: Rendben, ez CS50. 5 00:00:16,240 --> 00:00:18,010 És ez első héten. 6 00:00:18,010 --> 00:00:22,050 Így emlékeztetni arra, hogy utoljára héten nulla, összpontosítottunk számítógépes gondolkodás. 7 00:00:22,050 --> 00:00:25,440 És áttértünk attól, Scratch, egy grafikus programozási 8 00:00:25,440 --> 00:00:27,360 nyelvet a barátaink Az MIT Media Lab. 9 00:00:27,360 --> 00:00:31,730 >> És Scratch, nem kutatjuk ötletek, mint funkciók és feltételek, 10 00:00:31,730 --> 00:00:35,210 és hurkok, és a változók, és még eseményeket, és a szálak, és így tovább. 11 00:00:35,210 --> 00:00:37,880 És ma megyünk továbbra is használja ezeket az elképzeléseket, 12 00:00:37,880 --> 00:00:40,630 és tényleg figyelembe őket engedélyezett, de lefordítani őket 13 00:00:40,630 --> 00:00:44,220 másik nyelvre ismert C. Most C egy hagyományosabb nyelven. 14 00:00:44,220 --> 00:00:46,020 Ez egy alacsonyabb szinten nyelv, ha úgy tetszik. 15 00:00:46,020 --> 00:00:47,300 >> Ez a tisztán szöveg. 16 00:00:47,300 --> 00:00:49,910 És így első ránézésre, hogy minden fog kinézni meglehetősen rejtélyes 17 00:00:49,910 --> 00:00:51,430 ha soha nem programozott előtt. 18 00:00:51,430 --> 00:00:53,530 Megyünk, hogy félig kettőspont és zárójel, 19 00:00:53,530 --> 00:00:55,150 és zárójelekkel, és így tovább. 20 00:00:55,150 --> 00:00:57,240 De észre, hogy még bár a szintaxis 21 00:00:57,240 --> 00:01:00,600 körülbelül nézni egy kicsit szokatlan a legtöbb van, lásd múlt. 22 00:01:00,600 --> 00:01:03,220 És próbálja meg, hogy a gondolatok amelyek valóban ismerős, 23 00:01:03,220 --> 00:01:06,750 mert itt az első héten, hogy mit elkezdjük csinálni, hogy hasonlítsa össze, 24 00:01:06,750 --> 00:01:08,980 kezdetben Scratch versus C. 25 00:01:08,980 --> 00:01:12,350 >> Így például, emlékeztetni arra, hogy amikor hajtották végre az első a programok 26 00:01:12,350 --> 00:01:16,220 utoljára volt egy blokk, ami úgy nézett egy kis valamit Így-- amikor 27 00:01:16,220 --> 00:01:19,990 zöld zászló kattintott, és aztán egy vagy több puzzle darab alatta, 28 00:01:19,990 --> 00:01:22,150 ebben az esetben azt mondják, hello world. 29 00:01:22,150 --> 00:01:24,870 Tehát valóban, a Scratch, amikor rákattintok, hogy a zöld zászló 30 00:01:24,870 --> 00:01:27,390 futtatni a programot, így beszélni, ezek 31 00:01:27,390 --> 00:01:29,520 A blokkok kerül végrehajtásra, vagy futni. 32 00:01:29,520 --> 00:01:32,230 És különösen Scratch mondta, hello, világ. 33 00:01:32,230 --> 00:01:35,377 >> Most én is meghatározhat más szavakkal itt. 34 00:01:35,377 --> 00:01:37,960 De látni fogjuk, hogy valóban sok Ezeknek blocks--, és valóban, 35 00:01:37,960 --> 00:01:41,880 C sok functions-- lehet parametrizálhatók vagy testreszabott 36 00:01:41,880 --> 00:01:43,150 más dolgokat. 37 00:01:43,150 --> 00:01:45,520 Tény, hogy a C, ha szeretnénk váltani, most, 38 00:01:45,520 --> 00:01:47,567 ez Scratch programot ezt a másik nyelvet, 39 00:01:47,567 --> 00:01:49,650 megyünk levelet kis valamit, mint ez. 40 00:01:49,650 --> 00:01:52,540 >> Nyújtott, van néhány ismeretlen szintaxis ott a legvalószínűbb, int, 41 00:01:52,540 --> 00:01:54,380 és zárójelben, és érvénytelen. 42 00:01:54,380 --> 00:01:57,740 De printf-- még ha lenne úgy gondolja, ez csak nyomtatni. 43 00:01:57,740 --> 00:02:00,120 De nyomtatás azt jelenti, nyomtatás formázott, ahogy hamarosan látni. 44 00:02:00,120 --> 00:02:02,140 Ez szó szerint fogja nyomtatni A képernyőn bármilyen 45 00:02:02,140 --> 00:02:05,990 belsejében van ezek a zárójelek, amelyek Természetesen ebben az esetben is, hello world. 46 00:02:05,990 --> 00:02:09,290 >> De észre fogod venni, más szintaxis egyes idézőjel, 47 00:02:09,290 --> 00:02:11,890 hogy a zárójelben a végén, a félig vastagbél és hasonlók. 48 00:02:11,890 --> 00:02:15,027 Tehát van egy kis rezsi, hogy úgy mondjam, mind a kognitív 49 00:02:15,027 --> 00:02:17,860 és nyelvtanilag, hogy megyünk hogy meg kell emlékezni előtt hosszú. 50 00:02:17,860 --> 00:02:20,720 De észre, hogy a gyakorlattal, ez kezd ugrani ki rád. 51 00:02:20,720 --> 00:02:24,920 >> Sőt, most összpontosítani, hogy az egyik funkció specifically-- Ebben az esetben, 52 00:02:24,920 --> 00:02:26,290 köszönni világban. 53 00:02:26,290 --> 00:02:27,560 Tehát mondjuk a funkciót. 54 00:02:27,560 --> 00:02:31,320 Helló világ a paraméter, vagy érv annak testreszabását. 55 00:02:31,320 --> 00:02:34,320 >> És az egyenértékűség C csak lesz ez egy sort itt, 56 00:02:34,320 --> 00:02:38,710 ahol printf egyenértékű, mondjuk, A dupla idézőjel, szia 57 00:02:38,710 --> 00:02:41,470 világ egyenértékű, természetesen, hogy mi van a fehér doboz van. 58 00:02:41,470 --> 00:02:45,680 És a backslash n, bár egy kicsit furcsa és hiányzik a semmiből, 59 00:02:45,680 --> 00:02:49,380 egyszerűen megy, hogy a hatás fogunk látnak a számítógép, mint a Mac vagy PC, 60 00:02:49,380 --> 00:02:51,660 csak mozog a kurzort a következő sorba. 61 00:02:51,660 --> 00:02:53,970 Ez olyan, mint ütő Az Enter billentyűt. 62 00:02:53,970 --> 00:02:55,580 >> Szóval majd meglátjuk, hogy ismét nemsokára. 63 00:02:55,580 --> 00:02:58,640 De először vessünk egy pillantást a Más példa esetében a hurkok. 64 00:02:58,640 --> 00:03:02,830 Mi volt ez örökre hurok utoljára, amely egy sorozat puzzle darab 65 00:03:02,830 --> 00:03:05,490 hogy nem valami szó szerint forever-- Ebben az esetben, 66 00:03:05,490 --> 00:03:08,360 mondjuk, hello world, Helló világ, hello world, Helló világ. 67 00:03:08,360 --> 00:03:10,350 Tehát ez egy végtelen ciklust így. 68 00:03:10,350 --> 00:03:14,580 >> A C-ben, ha azt akarjuk, hogy végre ezt a Ugyanez a gondolat, talán csak ezt. 69 00:03:14,580 --> 00:03:19,570 Bár igaz, printf szia world-- most míg csak szemantikailag, egyfajta 70 00:03:19,570 --> 00:03:23,090 idézi fel az ötlet, hogy valami újra, és újra, és újra, 71 00:03:23,090 --> 00:03:23,980 és mennyi ideig? 72 00:03:23,980 --> 00:03:27,990 Nos, true-- emlékeztetnek arra, hogy igaz csak vagy egy. 73 00:03:27,990 --> 00:03:30,660 >> És igaz, természetesen, mindig igaz. 74 00:03:30,660 --> 00:03:33,060 Tehát ez a fajta értelmetlen nyilatkozat csak mondani igaz. 75 00:03:33,060 --> 00:03:36,890 De valóban, ez szándékos, mert ha igaz, csak mindig igaz, 76 00:03:36,890 --> 00:03:40,850 mint amíg igaz csak azt jelenti, Ha egy kis közvetve, 77 00:03:40,850 --> 00:03:44,070 hogy a következő sor kódot között azok kapcsos zárójelek 78 00:03:44,070 --> 00:03:48,320 kéne végre újra, és újra, és újra, és soha nem hagyja abba. 79 00:03:48,320 --> 00:03:50,230 >> De ha szeretné, hogy a hurok megállítani, mint mi 80 00:03:50,230 --> 00:03:54,500 múltkor valami hasonlóra Ezt ismételje meg a következő 50-szer, 81 00:03:54,500 --> 00:03:57,700 C tehetünk azonos azzal, ami nevezzük az loop-- kulcsszó 82 00:03:57,700 --> 00:03:59,330 hogy nem már, de. 83 00:03:59,330 --> 00:04:03,290 És akkor mi van néhány új szintaxis itt, A int i értéke 0, i kevesebb, mint 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 És mi jön vissza, hogy a. 86 00:04:05,430 --> 00:04:09,660 De ez csak, hogyan is kellene lefordítani a készlet Scratch blokkok 87 00:04:09,660 --> 00:04:13,079 egy sor C sornyi kódot. 88 00:04:13,079 --> 00:04:14,450 >> Közben úgy változókat. 89 00:04:14,450 --> 00:04:16,540 És valóban, mi csak láttam egy pár perce. 90 00:04:16,540 --> 00:04:21,220 És abban az esetben, Scratch, ha akarta, hogy egy változót, az i 91 00:04:21,220 --> 00:04:24,590 mert én, hogy egész, csak egy szám, és szeretnénk beállítani, hogy néhány érték, 92 00:04:24,590 --> 00:04:28,410 szeretnénk használni ezt a narancs blokk here-- beállítva i 0. 93 00:04:28,410 --> 00:04:30,800 >> És látni fogjuk ma azon túl, mint a múlt héten, 94 00:04:30,800 --> 00:04:33,850 programozók csinálni szinte mindig elkezd számolás nullától, tényleg 95 00:04:33,850 --> 00:04:34,950 egyezményesen. 96 00:04:34,950 --> 00:04:37,250 De azért is, mert visszahívással vitánk a bináris, 97 00:04:37,250 --> 00:04:39,990 a legkisebb szám tudsz képviselnek, azzal bármilyen bitszám 98 00:04:39,990 --> 00:04:41,640 csak lesz 0 magát. 99 00:04:41,640 --> 00:04:45,190 És így fogunk általában kezdeni inicializálás még a változó 0-ra. 100 00:04:45,190 --> 00:04:47,710 >> És C, hogy nem ugyanaz, fogunk mondani int 101 00:04:47,710 --> 00:04:50,110 az egész, én csak az egyezmény. 102 00:04:50,110 --> 00:04:53,390 Tudtam volna hívott ez a változó valamit akarok, csakúgy, mint a Scratch. 103 00:04:53,390 --> 00:04:57,770 És akkor értéke 0 csak jogutódai a 0 érték a jobb 104 00:04:57,770 --> 00:05:01,319 és hozza azt a változót, vagy a tároló van, a bal oldalon. 105 00:05:01,319 --> 00:05:04,360 És a pontosvesszőt mivel mi see-- és láttunk egy pár ilyen already-- 106 00:05:04,360 --> 00:05:06,530 Csak azt jelenti, vége a gondolat. 107 00:05:06,530 --> 00:05:09,430 Folytassuk valami mást a sorokat, hogy kövesse. 108 00:05:09,430 --> 00:05:11,330 >> De mi a helyzet logikai kifejezések? 109 00:05:11,330 --> 00:05:14,320 Emlékezzünk vissza, hogy a Scratch, ezek kifejezések 110 00:05:14,320 --> 00:05:16,740 amelyek vagy igaz vagy false-- kérdések, 111 00:05:16,740 --> 00:05:18,910 tényleg, amelyek igaz vagy hamis. 112 00:05:18,910 --> 00:05:21,960 Tehát abban az esetben, Scratch, talán fel egy egyszerű kérdést, mint ez, 113 00:05:21,960 --> 00:05:24,586 jelentése i kevesebb, mint 50? 114 00:05:24,586 --> 00:05:25,710 Tehát azt, ismét egy egész szám. 115 00:05:25,710 --> 00:05:27,210 Talán éppen használja egy Scratch programban 116 00:05:27,210 --> 00:05:29,310 nyomon követni a pontszám vagy valami ilyesmi. 117 00:05:29,310 --> 00:05:33,810 Tehát ez a szintaxis itt Scratch Csak azt jelenti, van én kevesebb, mint 50? 118 00:05:33,810 --> 00:05:37,330 Nos, szerencsére, valami egyszerű C. És lefordítani, 119 00:05:37,330 --> 00:05:41,780 Ehhez egyszerűen mondom, kevesebb mint 50, vagyis ismeri a kulcsot 120 00:05:41,780 --> 00:05:42,850 a billentyűzeten. 121 00:05:42,850 --> 00:05:45,141 >> Addig is, ha akart mondjuk valami általánosabb, 122 00:05:45,141 --> 00:05:49,890 mint, nos, az x kisebb mint y, ahol az egyes X és Y maguk változók? 123 00:05:49,890 --> 00:05:52,280 Tehetünk ugyanezt C, mindaddig, ahogy már 124 00:05:52,280 --> 00:05:53,942 létre ezeket a változókat már. 125 00:05:53,942 --> 00:05:55,650 És majd meglátjuk, hogy hogyan Ehhez nemsokára. 126 00:05:55,650 --> 00:05:58,590 Mi egyszerűen csak azt mondják x kisebb mint y. 127 00:05:58,590 --> 00:06:00,530 >> Szóval kezd lásd bizonyos hasonlóságok. 128 00:06:00,530 --> 00:06:03,490 És azok az emberek, akik Scratch biztosan 129 00:06:03,490 --> 00:06:05,250 ihlette néhány ilyen alapvető ötleteket. 130 00:06:05,250 --> 00:06:10,350 És akkor ez a fajta szintaxis számos languages-- 131 00:06:10,350 --> 00:06:12,160 nem csak karcolás, nem Csak C, de a Python, 132 00:06:12,160 --> 00:06:14,790 és a JavaScript, és más nyelveken is. 133 00:06:14,790 --> 00:06:18,270 >> Nézzük a másik konstrukciót C, a fogalom olyan állapot, 134 00:06:18,270 --> 00:06:20,370 csinál valamit feltételesen. 135 00:06:20,370 --> 00:06:22,720 Ha valami igaz, erre a célra. 136 00:06:22,720 --> 00:06:24,457 Ha valami mást is igaz, erre. 137 00:06:24,457 --> 00:06:27,040 Ez a fajta programozási egyenértékű egy villát az úton. 138 00:06:27,040 --> 00:06:29,730 Lehet, hogy ez egy kétirányú villa, egy három-utas villa, vagy annál több. 139 00:06:29,730 --> 00:06:32,800 És Scratch, talán van láttunk ilyet. 140 00:06:32,800 --> 00:06:34,010 >> Tehát ez az ember egy nagyot. 141 00:06:34,010 --> 00:06:36,750 De nézzük a relatív egyszerűség a logika. 142 00:06:36,750 --> 00:06:44,010 Ha x kisebb, mint Y, akkor mondjuk x kisebb mint Y, mást, ha x nagyobb, mint Y, 143 00:06:44,010 --> 00:06:46,230 akkor mondjuk x nagyobb mint y. 144 00:06:46,230 --> 00:06:48,300 És akkor logikusan, ha úgy gondolja, vissza Scratch 145 00:06:48,300 --> 00:06:52,610 vagy csak a saját emberi intuíció, Nos, ha x nem nagyobb, mint Y, és X 146 00:06:52,610 --> 00:06:57,000 nem kevesebb, mint Y, akkor természetesen x lesz egyenlő y. 147 00:06:57,000 --> 00:06:59,690 Tehát ebben az esetben, a beágyazott azok Scratch blokkok, 148 00:06:59,690 --> 00:07:02,580 érhetjük el három módon útelágazáshoz? 149 00:07:02,580 --> 00:07:04,980 >> Közben, ha azt akarjuk, hogy csinálni, hogy a C-hez, vitathatatlanul 150 00:07:04,980 --> 00:07:08,420 úgy néz ki, egy kicsit simpler-- legalább ha egyszer kap ismeri a szintaxis. 151 00:07:08,420 --> 00:07:12,050 Ha x kisebb, mint Y, printf x kisebb mint y. 152 00:07:12,050 --> 00:07:16,140 Else ha x nagyobb, mint Y, printf x nagyobb mint y. 153 00:07:16,140 --> 00:07:21,210 Else printf x egyenlő y-- és ismét azokkal backslash fejeződik be 154 00:07:21,210 --> 00:07:24,160 ezeket az új sorokat úgy, hogy ha ténylegesen futott ez a fajta program 155 00:07:24,160 --> 00:07:25,940 akkor csak mozog a kurzort végül 156 00:07:25,940 --> 00:07:28,100 A következő sorban a képernyőn. 157 00:07:28,100 --> 00:07:31,270 >> Most, miközben Scratch volt más több kifinomultabb megoldás, csak 158 00:07:31,270 --> 00:07:34,320 amelyek közül néhány megyünk kezdetben áttérni a világ C. 159 00:07:34,320 --> 00:07:37,010 És egyikük hívott egy listát Scratch. 160 00:07:37,010 --> 00:07:39,100 És ez egy különleges típusú változó 161 00:07:39,100 --> 00:07:42,840 engedélyezve, hogy tárolja több dolgot a vissza, vissza, vissza, vissza. 162 00:07:42,840 --> 00:07:45,540 >> A C-ben, hogy nem rendelkezik listák, önmagában, hanem valami 163 00:07:45,540 --> 00:07:48,090 amelyek általánosabban nevű tömböt, bár mi 164 00:07:48,090 --> 00:07:50,590 jöjjön vissza később ebben a félévben hogy keres valamit 165 00:07:50,590 --> 00:07:52,780 hívott egy listát, vagy tényleg egy láncolt lista. 166 00:07:52,780 --> 00:07:55,510 De most, a legközelebbi egyenértékű C számunkra 167 00:07:55,510 --> 00:07:57,345 lesz valami nevű tömböt. 168 00:07:57,345 --> 00:07:59,740 És egy sor egyszerűen speciális típusú változó 169 00:07:59,740 --> 00:08:03,160 amely lehetővé teszi, hogy tárolja az adatokat vissza, vissza, vissza, hogy vissza. 170 00:08:03,160 --> 00:08:05,840 >> És valóban, a Scratch, ha azt akartuk elérni 171 00:08:05,840 --> 00:08:09,030 Az első elem egy tömb vagy egy list-- és fogom nevezni, 172 00:08:09,030 --> 00:08:13,600 egyezményesen argv, érvelés vektor, de erről bővebben nemsokára. 173 00:08:13,600 --> 00:08:17,090 Ha azt akarom, hogy az első elem A beállítás az argv, a világon a Scratch 174 00:08:17,090 --> 00:08:20,930 Ön ténylegesen jellemzően indul 1-jétől számítva. 175 00:08:20,930 --> 00:08:22,850 >> És így lehet, hogy az 1. pont a argv. 176 00:08:22,850 --> 00:08:26,310 Ez csak hogyan MIT végrehajtott fogalma listákat. 177 00:08:26,310 --> 00:08:29,860 De a C-ben fogok Egyszerűbben csak azt mondják, argv, 178 00:08:29,860 --> 00:08:32,758 ami megint a neve a list-- vagy ha világos, egy tömbben. 179 00:08:32,758 --> 00:08:34,549 És ha azt szeretné, hogy az első elemek, megyek 180 00:08:34,549 --> 00:08:37,890 használható szögletes zárójelben, amit Lehet, hogy nem gyakran használják alatt a billentyűzet. 181 00:08:37,890 --> 00:08:40,150 >> De 0 csak azt jelenti, hogy nekem az első. 182 00:08:40,150 --> 00:08:42,160 Így alkalmanként és múlik az idő, megyünk 183 00:08:42,160 --> 00:08:44,570 kezdeni, hogy ezek a dichotómia között Scratch és C 184 00:08:44,570 --> 00:08:46,070 amelynek Scratch használ ilyet. 185 00:08:46,070 --> 00:08:47,670 Mi C a 0 itt. 186 00:08:47,670 --> 00:08:49,420 De akkor gyorsan látni ha egyszer megérted 187 00:08:49,420 --> 00:08:52,920 alapjait minden nyelv, ezek a dolgok kezdenek annál 188 00:08:52,920 --> 00:08:56,860 ismerős a gyakorlat és a gyakorlat. 189 00:08:56,860 --> 00:08:59,700 >> Úgyhogy valóban meg most a programot. 190 00:08:59,700 --> 00:09:04,031 Itt kell lennie az első a mi C forráskód teljes programokat. 191 00:09:04,031 --> 00:09:06,280 És a program megyünk hez megfontolásra 192 00:09:06,280 --> 00:09:09,340 az egyik, hogy a egyenértékű hogy a korábbi Scratch darab. 193 00:09:09,340 --> 00:09:13,210 >> Tehát itt, van mit vitathatatlanul a legegyszerűbb C program 194 00:09:13,210 --> 00:09:15,410 írhatunk, hogy valójában csinál valamit. 195 00:09:15,410 --> 00:09:18,250 Most azt fogjuk megnézni múlt, most, már tartalmazzák, 196 00:09:18,250 --> 00:09:21,190 szabvány io.h, és ezek a szög konzolok, és int, és érvénytelen, 197 00:09:21,190 --> 00:09:22,840 és a kapcsos zárójelek, és hasonlók. 198 00:09:22,840 --> 00:09:25,390 >> És nézzük csak összpontosítani mi, legalábbis ösztönösen, 199 00:09:25,390 --> 00:09:26,860 Lehet ugrik ki már. 200 00:09:26,860 --> 00:09:30,300 Sőt, a fő, nem tudom feltétlenül tudja, mi ez, 201 00:09:30,300 --> 00:09:34,580 de hasonlóan Scratch volt, hogy amikor zöld zászló kattintott puzzle-darab, 202 00:09:34,580 --> 00:09:39,070 így nem C programozási nyelv Van egy fő darab kódot 203 00:09:39,070 --> 00:09:43,380 kerül végrehajtásra, alapértelmezés szerint. És valóban, ez szó szerint fogják hívni fő. 204 00:09:43,380 --> 00:09:44,720 >> Tehát fő függvénye. 205 00:09:44,720 --> 00:09:48,720 És ez egy speciális funkció, ami létezik C, hogy ha egy olyan programot futtat, 206 00:09:48,720 --> 00:09:52,720 ez a fő, hogy fusson a alapértelmezett. A világ a Scratch, 207 00:09:52,720 --> 00:09:56,970 ez általában akkor, ha zöld zászló kattintott, hogy van az alapértelmezés szerint. 208 00:09:56,970 --> 00:10:01,130 >> Közben láttunk ilyet, printf vagy nyomtatott formátumú, ez 209 00:10:01,130 --> 00:10:05,620 lesz a funkciója, hogy jön C, valamint egy csomó más, 210 00:10:05,620 --> 00:10:10,140 hogy időről időre és ismét, Annak érdekében, hogy pontosan 211 00:10:10,140 --> 00:10:12,450 mint a neve is sugallja, nyomtasson valamit. 212 00:10:12,450 --> 00:10:13,500 Mit akarunk nyomtatni? 213 00:10:13,500 --> 00:10:15,770 Nos, látni fogjuk, hogy bekerítésével karakterek 214 00:10:15,770 --> 00:10:18,680 mint these-- hello world, backslash n idézőjelek, 215 00:10:18,680 --> 00:10:23,040 azt lehet mondani, hogy pontosan printf mit kell nyomtatni a képernyőn. 216 00:10:23,040 --> 00:10:26,430 >> De ahhoz, hogy ezt hogy sajnos 217 00:10:26,430 --> 00:10:30,010 kell tennie valamit, ami már rejtélyes, hogy mi emberek, 218 00:10:30,010 --> 00:10:34,510 de legalább ez kissé readable-- éles közé, szabványos io.h, int, 219 00:10:34,510 --> 00:10:39,340 fő, üres, printf, mind a mágikus ráolvasások láttunk a képernyőn. 220 00:10:39,340 --> 00:10:42,470 De valójában meg kell menjen inkább misztikus is. 221 00:10:42,470 --> 00:10:47,140 Először azt kell lefordítani a kódot hogy írunk gépi kódra. 222 00:10:47,140 --> 00:10:51,370 És emlékszem a múlt héten, hogy a gépek, legalább az is tudjuk itt, 223 00:10:51,370 --> 00:10:54,450 a végén a nap csak megérteni nullák. 224 00:10:54,450 --> 00:10:58,100 >> És Istenem, ha kellett összerakható nullák, hogy ténylegesen program 225 00:10:58,100 --> 00:11:01,260 ez akkor is nagyon, nagyon gyorsan vegye a móka meg semmit. 226 00:11:01,260 --> 00:11:05,150 De kiderül, egy a múlt héten, hogy ezeket a mintákat a nullák és egyesek 227 00:11:05,150 --> 00:11:06,400 Csak speciális jelentése van. 228 00:11:06,400 --> 00:11:08,500 Bizonyos helyzetekben, lehet, hogy azt jelenti, számokat. 229 00:11:08,500 --> 00:11:11,840 >> Bizonyos összefüggésekben, lehet, hogy azt jelenti, betűk, vagy a színek, vagy akárhány 230 00:11:11,840 --> 00:11:14,710 Más absztrakciók ott hagyják. 231 00:11:14,710 --> 00:11:18,450 De ahogy a számítógépben CPU, Central Processing Unit, 232 00:11:18,450 --> 00:11:20,390 vagy az agy számítógép belsejében. 233 00:11:20,390 --> 00:11:22,240 Ez általában az Intel belsejében, mert ez 234 00:11:22,240 --> 00:11:24,900 az egyik legnagyobb cégek ami CPU számítógépek számára. 235 00:11:24,900 --> 00:11:28,910 >> Nos, az Intel CPU-k és egyebek egyszerűen úgy döntöttek, előre 236 00:11:28,910 --> 00:11:33,970 hogy bizonyos mintákat nullák és azok olyan konkrét dolgokat. 237 00:11:33,970 --> 00:11:37,040 Egyes minták nullák azt jelenti, nyomtassa ki ezt a képernyőt, 238 00:11:37,040 --> 00:11:39,710 vagy add a két szám, vagy kivonni a két szám, 239 00:11:39,710 --> 00:11:43,310 vagy mozgassa a darab adatait a számítógép memóriájában ide, 240 00:11:43,310 --> 00:11:47,870 vagy számos más nagyon alacsony szinten, de végül hasznos műveleteket. 241 00:11:47,870 --> 00:11:53,022 De, szerencsére, mi emberek nem fognak szüksége, hogy tudja ezt részletességgel. 242 00:11:53,022 --> 00:11:56,230 Sőt, mint legutóbb, ahol absztrahált újra, és újra, és újra, 243 00:11:56,230 --> 00:11:58,930 épület nagyon alacsony szinten primitívek, mint a nullák és egyesek 244 00:11:58,930 --> 00:12:01,160 a magasabb szintű fogalmak mint a számok és betűk, 245 00:12:01,160 --> 00:12:04,330 és a színek, és így tovább, Meg tudjuk tenni a programozók 246 00:12:04,330 --> 00:12:07,080 állni a vállán mások, akik elénk 247 00:12:07,080 --> 00:12:11,260 és olyan szoftvert használ, más emberek előtt írt us-- 248 00:12:11,260 --> 00:12:14,340 nevezetesen programok nevezett fordító. 249 00:12:14,340 --> 00:12:17,770 >> C egy olyan nyelv, Általában össze, 250 00:12:17,770 --> 00:12:22,130 ami azt jelenti, átalakított forráskódot gépi kód. 251 00:12:22,130 --> 00:12:25,230 Különösen, hogy ez mit jelent van, hogy ha megvan a forrás 252 00:12:25,230 --> 00:12:29,530 kódot, hogy te magad írni, ahogy hamarosan majd egy pillanat múlva a képernyőn, 253 00:12:29,530 --> 00:12:33,140 és szeretné átalakítani, végül a gép code-- 254 00:12:33,140 --> 00:12:37,100 ezek nullák és egyesek, hogy csak a Mac vagy a PC 255 00:12:37,100 --> 00:12:41,230 understands-- van egy első takarmány, hogy a forráskód, mint 256 00:12:41,230 --> 00:12:46,340 bemenet egy speciális nevű program egy fordító, 257 00:12:46,340 --> 00:12:48,974 amelynek kimenete a mi kell látni gépi kód. 258 00:12:48,974 --> 00:12:51,890 És valóban, utoljára beszéltünk körülbelül, tényleg, a végén a nap, 259 00:12:51,890 --> 00:12:52,610 problémamegoldás. 260 00:12:52,610 --> 00:12:53,360 Megvan bemenet. 261 00:12:53,360 --> 00:12:54,318 És megvan kimenettel. 262 00:12:54,318 --> 00:12:56,560 És van néhány fajta Az algoritmus a közepén. 263 00:12:56,560 --> 00:12:59,830 >> Algoritmusok biztosan megvalósított szoftver, 264 00:12:59,830 --> 00:13:02,900 mint láttuk pszeudokód a múlt héten és mint látni fogjuk a tényleges kódot 265 00:13:02,900 --> 00:13:03,490 ezen a héten. 266 00:13:03,490 --> 00:13:06,430 És így egy fordító tényleg csak egy sor algoritmusok belsejében 267 00:13:06,430 --> 00:13:10,060 róla, hogy tudja, hogyan kell átalakítani a speciális kulcsszavak, 268 00:13:10,060 --> 00:13:12,180 mint fő, és a printf, és mások, hogy mi csak 269 00:13:12,180 --> 00:13:17,620 látta a minták nullák és is, hogy az Intel és belül más CPU 270 00:13:17,620 --> 00:13:20,020 ténylegesen meg is érti. 271 00:13:20,020 --> 00:13:22,460 Szóval hogyan lehet ezt megtenni? 272 00:13:22,460 --> 00:13:24,470 Hová jutunk a fordító? 273 00:13:24,470 --> 00:13:26,400 >> A legtöbben itt van egy Mac vagy PC. 274 00:13:26,400 --> 00:13:29,152 És te Mac OS, vagy A Windows vagy Linux, vagy Solaris 275 00:13:29,152 --> 00:13:30,860 vagy akárhány más operációs rendszer. 276 00:13:30,860 --> 00:13:32,568 És valóban, mi lehetett kimegy rá az interneten 277 00:13:32,568 --> 00:13:35,710 és töltse le a fordító a Mac vagy a PC 278 00:13:35,710 --> 00:13:37,360 az adott operációs rendszer. 279 00:13:37,360 --> 00:13:39,617 De mi lenne mind a a különböző oldalakon, hogy úgy mondjam. 280 00:13:39,617 --> 00:13:41,450 Mi volna kicsit különböző konfigurációkat. 281 00:13:41,450 --> 00:13:43,210 És a dolgok nem működnek mindegy. 282 00:13:43,210 --> 00:13:45,280 És valóban, ezekben a napokban sokan nem használják 283 00:13:45,280 --> 00:13:47,516 szoftver fut csak a laptopok. 284 00:13:47,516 --> 00:13:49,390 Ehelyett használjuk valami mint egy böngésző, amely 285 00:13:49,390 --> 00:13:52,930 lehetővé teszi számunkra, hogy hozzáférést a web-alapú alkalmazások a felhőben. 286 00:13:52,930 --> 00:13:55,630 És még ebben a félévben, fogjuk csinálni, hogy pontosan. 287 00:13:55,630 --> 00:13:59,660 Mi lesz alkalmazásokat írni vagy szoftver segítségével code-- nem C, 288 00:13:59,660 --> 00:14:02,860 de más nyelvek, mint a Python és JavaScript-- futnak a felhő. 289 00:14:02,860 --> 00:14:05,860 >> És erre mi magunk Évközi 290 00:14:05,860 --> 00:14:11,890 fogja használni a felhő-alapú környezet ismert CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 Ez egy web-alapú programozás környezet, illetve integrált fejlesztési 292 00:14:16,030 --> 00:14:20,610 környezet, IDE, hogy épített tetején néhány nyílt forráskódú szoftver, a Cloud 9. 293 00:14:20,610 --> 00:14:22,966 És tettünk néhány pedagógiai egyszerűsítéseket is 294 00:14:22,966 --> 00:14:25,840 annak érdekében, hogy elrejtse bizonyos funkciók Az első hetekben, hogy nem kell, 295 00:14:25,840 --> 00:14:27,770 ami után felfedi őket, és ahogy a legtöbb 296 00:14:27,770 --> 00:14:29,400 amit szeretne a környezettel. 297 00:14:29,400 --> 00:14:32,470 >> És ez lehetővé teszi számunkra is, hogy előtelepíthet bizonyos szoftverek. 298 00:14:32,470 --> 00:14:35,330 Dolgok, mint egy úgynevezett CS50 könyvtár, amit hamarosan látni 299 00:14:35,330 --> 00:14:39,210 biztosítja számunkra a C némi további szolgáltatásokat. 300 00:14:39,210 --> 00:14:44,392 Tehát, ha megy, végül CS50.io, a rendszer kérni fogja, hogy jelentkezzen be, 301 00:14:44,392 --> 00:14:46,350 és ha egyszer nem, és hozzon létre számlát ingyen, 302 00:14:46,350 --> 00:14:52,150 Ön képes lesz hozzáférni egy környezet, amely úgy néz ki, elég, mint ezt. 303 00:14:52,150 --> 00:14:53,760 >> Nos, ez az alapértelmezett mód. 304 00:14:53,760 --> 00:14:55,650 Minden szép és fényes a képernyőn. 305 00:14:55,650 --> 00:14:57,941 Sokunknak van egy szokása, dolgozik CS50 darab, ami 306 00:14:57,941 --> 00:14:59,150 egészen késő éjszakáig. 307 00:14:59,150 --> 00:15:02,400 És így néhányan talán inkább kapcsolja be éjszakai mód, hogy úgy mondjam. 308 00:15:02,400 --> 00:15:05,550 >> De végül is, mi te fogja látni a CS50 IDE 309 00:15:05,550 --> 00:15:08,340 három különálló areas-- egy területet a bal hol 310 00:15:08,340 --> 00:15:12,604 A fájlok lesznek a felhő, egy olyan területen, a jobb felső sarokban 311 00:15:12,604 --> 00:15:14,270 ahol a kód lesz szerkeszthető. 312 00:15:14,270 --> 00:15:16,650 Ön képes lesz arra, hogy nyissa egyes fülek minden program 313 00:15:16,650 --> 00:15:19,670 hogy írsz ebben a félévben belül Az, hogy a jobb felső sarokban. 314 00:15:19,670 --> 00:15:23,070 És akkor a legtöbb arcanely, és mégis erőteljesen, 315 00:15:23,070 --> 00:15:26,610 lesz ez a dolog a alsó néven egy terminál ablakot. 316 00:15:26,610 --> 00:15:29,450 >> Ez egy régi iskola Command Line Interface, 317 00:15:29,450 --> 00:15:32,240 vagy CLI, amely lehetővé teszi, hogy végre parancsokat 318 00:15:32,240 --> 00:15:35,260 a computer-- Ebben az esetben, A számítógép a cloud-- 319 00:15:35,260 --> 00:15:39,090 a dolgokat, mint az általad beírt kódot forráskódból gépi kód, 320 00:15:39,090 --> 00:15:43,600 futtatni a programokat, vagy indítsa el a web szerver, vagy az adatbázis eléréséhez, 321 00:15:43,600 --> 00:15:47,454 és tetszőleges számú egyéb technikák hogy elkezdjük használni nemsokára. 322 00:15:47,454 --> 00:15:49,370 De, hogy ott vagyunk, fog ténylegesen 323 00:15:49,370 --> 00:15:51,240 megy online, és elkezd játszani. 324 00:15:51,240 --> 00:15:54,399 És erre, nézzük először kezdeni bütyköl fő, 325 00:15:54,399 --> 00:15:55,940 és írni a fő része a programnak. 326 00:15:55,940 --> 00:15:59,170 És vegyünk ezt a funkciót printf, amit korábban használt, 327 00:15:59,170 --> 00:16:01,050 egyszerűen azt mondani valamit. 328 00:16:01,050 --> 00:16:04,910 >> Tehát itt vagyok már benne CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Már bejelentkezett előre. 330 00:16:05,930 --> 00:16:07,360 És én teljes árnyékolt ablak. 331 00:16:07,360 --> 00:16:09,670 És így, végül, akkor Túl az elkövetkező problémák 332 00:16:09,670 --> 00:16:12,960 akkor hasonló lépéseket, hogy nyújt az online dokumentáció. 333 00:16:12,960 --> 00:16:16,360 Így nem kell aggódnia elnyelő minden kis technikai lépés 334 00:16:16,360 --> 00:16:17,730 hogy én ma itt. 335 00:16:17,730 --> 00:16:19,222 >> De kapsz egy képernyőn, mint ez. 336 00:16:19,222 --> 00:16:20,430 Én történetesen az éjszakai üzemmódban. 337 00:16:20,430 --> 00:16:22,944 És akkor is felderül mindent up letiltásával éjszakai mód. 338 00:16:22,944 --> 00:16:24,860 És a végén az nap, fogsz látni 339 00:16:24,860 --> 00:16:30,090 E három fő areas-- fájl böngésző bal oldalon, a kód fülek fel tetején, 340 00:16:30,090 --> 00:16:32,430 és a terminál ablak alján. 341 00:16:32,430 --> 00:16:34,890 >> Hadd menjek előre, és levelet az első programot. 342 00:16:34,890 --> 00:16:42,300 Megyek preemptively menjen a File, Mentse, és mentse a fájlt, mint hello.c. 343 00:16:42,300 --> 00:16:46,850 Sőt, megállapodás szerint, minden program keretében írják, hogy van írva a C nyelven 344 00:16:46,850 --> 00:16:49,739 meg kell nevezni valamit dot c, az egyezmény. 345 00:16:49,739 --> 00:16:53,030 Így fogok nevezni azt hello.c, mert Csak azt akarom, hogy köszönjön a világ. 346 00:16:53,030 --> 00:16:54,820 Most megyek zoom ki, és kattintson a Mentés gombra. 347 00:16:54,820 --> 00:16:58,180 És én itt most egy lapra ahol én indulhat kódot írni. 348 00:16:58,180 --> 00:16:59,490 >> Ez nem fog összeállítani. 349 00:16:59,490 --> 00:17:00,300 Ez nem jelent semmit. 350 00:17:00,300 --> 00:17:02,750 És így még ha átalakítható ezt a nullák és egyesek, 351 00:17:02,750 --> 00:17:05,390 A CPU megy, hogy nincs ötlet, hogy mi folyik körül. 352 00:17:05,390 --> 00:17:14,170 De ha írok vonalak, amelyek egyeznek fel C- conventions-- C lény, 353 00:17:14,170 --> 00:17:20,150 újra, ez language-- szintaxis hasonló Ennek printf szia world-- és én már 354 00:17:20,150 --> 00:17:22,210 ütött kényelmes ezt idővel. 355 00:17:22,210 --> 00:17:24,510 Szóval nem hiszem, tettem az esetleges gépelési hibákat. 356 00:17:24,510 --> 00:17:27,910 >> De mindig, már az első alkalommal, amikor ezt, nem fogsz. 357 00:17:27,910 --> 00:17:31,090 És amit most tenni talán igen valamint nem működik az Ön számára az első alkalommal. 358 00:17:31,090 --> 00:17:33,610 És ez teljesen rendben van, mert most te 359 00:17:33,610 --> 00:17:37,662 Lehet, hogy csak látni egy csomó újdonság, de idővel, ha egyszer kap ismerős 360 00:17:37,662 --> 00:17:39,870 ezzel környezet, és ezt a nyelvet, és mások, 361 00:17:39,870 --> 00:17:42,370 akkor kezd látni a dolgokat, hogy amelyek vagy helyes vagy helytelen. 362 00:17:42,370 --> 00:17:44,369 >> És ez az, amit a tanítás társaival és természetesen 363 00:17:44,369 --> 00:17:48,780 asszisztensek kap olyan jó az idő múlásával, a pecsételő hibákat vagy hibák a kódban. 364 00:17:48,780 --> 00:17:52,110 De azt állítják, hogy nincsenek hibák ezt a kódot. 365 00:17:52,110 --> 00:17:53,990 Úgyhogy most szeretnénk futtatni ezt a programot. 366 00:17:53,990 --> 00:17:57,440 >> Most a saját Mac vagy PC, vagyok a szokás dupla kattintással ikonok 367 00:17:57,440 --> 00:17:59,350 mikor szeretné futtatni a programot. 368 00:17:59,350 --> 00:18:01,080 De nem ez a modell itt. 369 00:18:01,080 --> 00:18:04,570 Ebben a környezetben, ami CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Mi használ működési rendszer úgynevezett Linux. 371 00:18:07,192 --> 00:18:09,900 Linux emlékeztet egy másik operációs rendszer, általánosan ismert 372 00:18:09,900 --> 00:18:10,850 mint a Unix. 373 00:18:10,850 --> 00:18:16,340 És a Linux különösen ismert amelynek parancssoros környezetben CLI. 374 00:18:16,340 --> 00:18:20,070 Most éppen egy konkrét Linuxoknál nevű Ubuntu. 375 00:18:20,070 --> 00:18:22,770 És az Ubuntu egyszerűen egy bizonyos Linux-változatot. 376 00:18:22,770 --> 00:18:27,900 >> De ezek a Linux ezekben a napokban nem a ténylegesen jönnek a grafikus felhasználói felületek. 377 00:18:27,900 --> 00:18:30,360 És az, amit történetesen használja itt a web-alapú. 378 00:18:30,360 --> 00:18:32,735 Tehát ez talán meg még egy kicsit eltér valami 379 00:18:32,735 --> 00:18:35,310 te magad talán látott vagy fut a múltban. 380 00:18:35,310 --> 00:18:37,910 >> Így fogok menni előre most és tegye a következőket. 381 00:18:37,910 --> 00:18:40,950 Tartogattam ezt a fájlt hello.c. 382 00:18:40,950 --> 00:18:47,350 Megyek megy előre, és típusú clanghello.c Tehát csenget 383 00:18:47,350 --> 00:18:49,850 A C nyelv egy fordító. 384 00:18:49,850 --> 00:18:51,952 Ez előre telepített CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 És akkor teljesen le és telepíteni ezt a saját Mac vagy PC. 386 00:18:54,910 --> 00:18:57,910 >> De megint, akkor nem lett volna minden Az előzetes beállítási tenni az Ön számára. 387 00:18:57,910 --> 00:19:00,940 Tehát most, én csak fog futni clanghello.c. 388 00:19:00,940 --> 00:19:03,240 És most ezt észre szintaxis Itt végül 389 00:19:03,240 --> 00:19:06,930 észre, hogy azt jelenti, hogy én vagyok a mappát vagy könyvtárat nevű munkaterület. 390 00:19:06,930 --> 00:19:11,030 Ez dollárjellel csak konvenció az értelmét, írja be a parancsokat itt. 391 00:19:11,030 --> 00:19:14,560 >> Ez egy úgynevezett gyors, csak egyezményesen a dollár jel. 392 00:19:14,560 --> 00:19:19,130 És ha megyek előre, és most kattintson Enter, semmi sem történt volna. 393 00:19:19,130 --> 00:19:20,930 De ez tényleg egy jó dolog. 394 00:19:20,930 --> 00:19:23,650 A kisebb, ami történik A képernyő, annál valószínűbb, 395 00:19:23,650 --> 00:19:26,710 a kód, hogy helyes, legalább szintaktikailag. 396 00:19:26,710 --> 00:19:29,120 >> Tehát, ha azt szeretnénk, hogy futtatni ezt programot, mit tegyek? 397 00:19:29,120 --> 00:19:33,770 Nos, kiderült, hogy a alapértelmezett név egyezményesen 398 00:19:33,770 --> 00:19:38,854 programokhoz, ha nem adja meg a nevet a program csak a.out. 399 00:19:38,854 --> 00:19:41,270 És ez a szintaxis is, akkor megszokni nemsokára. 400 00:19:41,270 --> 00:19:47,500 >> Dot perjel csak azt jelenti, hé, CS50 IDE, fut a program az úgynevezett a.out 401 00:19:47,500 --> 00:19:49,400 hogy van benne az én aktuális könyvtárban. 402 00:19:49,400 --> 00:19:51,520 Hogy pont azt jelenti, az aktuális könyvtárban. 403 00:19:51,520 --> 00:19:55,040 És majd meglátjuk, mi más ilyen szekvenciák karakterek jelent nemsokára. 404 00:19:55,040 --> 00:19:58,430 >> Tehát itt vagyunk, az Enter, hello world. 405 00:19:58,430 --> 00:20:00,080 És akkor veszi észre, hogy mi történt? 406 00:20:00,080 --> 00:20:01,580 Nem csak azt nyomtatandó hello world. 407 00:20:01,580 --> 00:20:05,990 Azt is kifejti a kurzort a következő sorba. 408 00:20:05,990 --> 00:20:07,160 >> És miért volt ez? 409 00:20:07,160 --> 00:20:12,400 Mi volt a kód, amit írt, mielőtt hogy biztosította, hogy a kurzor lenne 410 00:20:12,400 --> 00:20:14,882 menj a következő sorban? 411 00:20:14,882 --> 00:20:16,840 Vicces dolog a számítógép ez csak akkor fog 412 00:20:16,840 --> 00:20:18,570 csinálni szó, amit mondani, hogy igen. 413 00:20:18,570 --> 00:20:26,050 >> Tehát, ha azt mondja, hogy a printf hello, vessző, szóköz, világ, közel idézet, 414 00:20:26,050 --> 00:20:29,090 ez szó szerint csak akkor fog nyomtatni ezeket a karaktereket. 415 00:20:29,090 --> 00:20:31,980 De volt ennek a különleges karakter végén, visszahívás, backslash n. 416 00:20:31,980 --> 00:20:34,230 És ez az, ami biztosította hogy a karakter ment 417 00:20:34,230 --> 00:20:36,570 A következő sorban a képernyőn. 418 00:20:36,570 --> 00:20:38,097 >> Sőt, hadd menjen, és erre a célra. 419 00:20:38,097 --> 00:20:39,430 Hadd menjek előre, és törölni ezt. 420 00:20:39,430 --> 00:20:41,180 Most észre, hogy az tetején a képernyő van 421 00:20:41,180 --> 00:20:42,890 egy kis piros fény A lap azt jelzi, 422 00:20:42,890 --> 00:20:45,047 hé, te nem mentette a fájlt. 423 00:20:45,047 --> 00:20:47,880 Így fogok menni előre ellenőrzés S vagy parancs S mentse a fájlt. 424 00:20:47,880 --> 00:20:51,130 Most goes-- ment egy moment-- zöld. 425 00:20:51,130 --> 00:20:53,760 És most vissza csak, hogy egy közeli ikonra. 426 00:20:53,760 --> 00:21:01,860 >> Ha most fut clanghello.c újra, Írja, pont perjel, a.out, Enter 427 00:21:01,860 --> 00:21:04,110 látni fogod, hogy még mindig működött. 428 00:21:04,110 --> 00:21:06,020 De ez vitathatatlanul egy kicsit bugos. 429 00:21:06,020 --> 00:21:08,714 Most én prompt-- munkaterületet, majd, hogy a dollár jelet, 430 00:21:08,714 --> 00:21:10,880 aztán a tényleges prompt-- ez mind ugyanabban a sorban. 431 00:21:10,880 --> 00:21:14,540 Tehát ez minden bizonnyal egy esztétikai hiba, akkor is, ha ez nem igazán logikus hiba. 432 00:21:14,540 --> 00:21:16,250 >> Így fogok visszavonni, amit én csináltam. 433 00:21:16,250 --> 00:21:18,560 Megyek futtassa a.out. 434 00:21:18,560 --> 00:21:22,710 Figyeljük adtam a új sor karakter vissza. 435 00:21:22,710 --> 00:21:24,280 Már mentette a fájlt. 436 00:21:24,280 --> 00:21:31,630 >> Így fogok ujrafuttatni a.out, és-- a fenébe, egy hiba, egy hiba ami azt jelenti, hiba. 437 00:21:31,630 --> 00:21:35,020 Tehát a hiba az, hogy bár Én hozzá a backslash n ott, 438 00:21:35,020 --> 00:21:41,180 újra megmenekült, újra futott a program, a viselkedés ugyanaz volt. 439 00:21:41,180 --> 00:21:42,640 Miért lenne az? 440 00:21:42,640 --> 00:21:43,910 >> Hiányzik egy lépést, nem igaz? 441 00:21:43,910 --> 00:21:47,620 Ez a legfontosabb lépés a korábbi volt, hogy van alábbiakra: ha megváltoztatja a forráskódot, 442 00:21:47,620 --> 00:21:49,610 Kiderült is fut át a fordító 443 00:21:49,610 --> 00:21:51,102 újra, így kap új gépi kódot. 444 00:21:51,102 --> 00:21:52,810 És a gépi kód, a nullák és egyesek, 445 00:21:52,810 --> 00:21:56,260 lesznek majdnem azonos, de Nem teljesen így van, mert szükségünk van, 446 00:21:56,260 --> 00:21:57,510 persze, hogy az új vonal. 447 00:21:57,510 --> 00:22:02,640 >> Tehát a probléma megoldásán, megyek szüksége ujrafuttatni clanghello.c adja, pont 448 00:22:02,640 --> 00:22:03,800 perjel, a.out. 449 00:22:03,800 --> 00:22:08,402 És most, hello world vissza ahol elvárom, hogy legyen. 450 00:22:08,402 --> 00:22:09,610 Tehát ez mind szép és jó. 451 00:22:09,610 --> 00:22:13,150 De a.out egy elég hülye név egy programot, bár előfordul, hogy, 452 00:22:13,150 --> 00:22:16,530 történelmi okokból, a default-- jelenti összeszerelés kimenettel. 453 00:22:16,530 --> 00:22:20,780 >> De hadd menjen előre ide és ezt másképp. 454 00:22:20,780 --> 00:22:24,760 Azt akarom, hello world programot hogy valóban nevezhető szia. 455 00:22:24,760 --> 00:22:28,320 Tehát ha ez egy ikont az én desktop, nem lenne a.out. 456 00:22:28,320 --> 00:22:29,730 Ez lenne az úgynevezett szia. 457 00:22:29,730 --> 00:22:33,660 >> Így kell ezt csinálni, kiderül hogy csenget, mint sok program, 458 00:22:33,660 --> 00:22:37,980 támogatja parancssori vagy zászló, vagy kapcsolók, 459 00:22:37,980 --> 00:22:39,600 amely egyszerűen befolyásolják a viselkedését. 460 00:22:39,600 --> 00:22:45,160 Pontosabban, Clang támogatja egy kötőjel o zászló, amely aztán a második szó. 461 00:22:45,160 --> 00:22:48,190 Ebben az esetben, én önkényesen, de ésszerűen, nevezzük szia. 462 00:22:48,190 --> 00:22:50,710 De Nevezhetném semmit Azt akarom, kivéve a.out, amely 463 00:22:50,710 --> 00:22:52,390 lenne inkább mellett a lényeg. 464 00:22:52,390 --> 00:22:55,640 >> És akkor csak adja meg a nevét A fájl akarok fordítani. 465 00:22:55,640 --> 00:22:59,190 Tehát most még ha az elején A parancs még mindig van csenget, 466 00:22:59,190 --> 00:23:01,410 a végén a parancs Még mindig megvan a fájlnév, 467 00:23:01,410 --> 00:23:05,520 Most ezeket a parancssori érveket, ezeket a jelzőket, hogy azt mondják, 468 00:23:05,520 --> 00:23:11,180 ó, az úton, a kimeneti-o, a fájl úgynevezett hello, nem az alapértelmezett a.out. 469 00:23:11,180 --> 00:23:13,810 >> Tehát, ha én megüt Belép most, sem Úgy tűnik, hogy történt. 470 00:23:13,810 --> 00:23:17,900 És mégis, most meg tudom csinálni dot perjel szia. 471 00:23:17,900 --> 00:23:19,089 Tehát ugyanaz a program. 472 00:23:19,089 --> 00:23:21,380 A nullák és egyesek a azonos a végén a nap. 473 00:23:21,380 --> 00:23:24,210 >> De ők két különböző files-- a.out 474 00:23:24,210 --> 00:23:26,490 amely az első változat és csak ostoba nevű, 475 00:23:26,490 --> 00:23:30,250 és most hello, ami sokkal vonzóbb név egy programot. 476 00:23:30,250 --> 00:23:33,195 De őszintén, én soha fog emlékezni ezt újra, 477 00:23:33,195 --> 00:23:34,070 és újra és újra. 478 00:23:34,070 --> 00:23:36,411 És valóban, ahogy írunk bonyolultabb programok 479 00:23:36,411 --> 00:23:38,160 A parancsok te majd meg kell írni 480 00:23:38,160 --> 00:23:40,920 mennek, hogy még még bonyolultabbá. 481 00:23:40,920 --> 00:23:41,940 >> És így nem kell aggódni. 482 00:23:41,940 --> 00:23:46,220 Kiderült, hogy az emberek előtt nekünk rájöttek, hogy túl 483 00:23:46,220 --> 00:23:47,530 volt ez pontosan ugyanaz a probléma. 484 00:23:47,530 --> 00:23:50,900 Ők is nem élvezik, amelyek a írja meglehetősen hosszú, misztikus parancsok 485 00:23:50,900 --> 00:23:52,200 nemhogy emlékeznek. 486 00:23:52,200 --> 00:23:56,070 És így az emberek előttünk tettek Más programok, amelyek megkönnyítik 487 00:23:56,070 --> 00:23:57,670 összeállításához a szoftvert. 488 00:23:57,670 --> 00:24:01,609 >> És valóban, az egyik ilyen program neve Gyártmány. 489 00:24:01,609 --> 00:24:03,150 Így fogok menni előre, és erre a célra. 490 00:24:03,150 --> 00:24:05,691 Megyek visszavonni mindent, amit Csak nem a következő módon. 491 00:24:05,691 --> 00:24:07,690 Hadd írja LS. 492 00:24:07,690 --> 00:24:10,980 És észre fogod venni, három things-- a.out, és egy csillag, szia 493 00:24:10,980 --> 00:24:12,810 és egy csillag, és hello.c. 494 00:24:12,810 --> 00:24:14,730 Remélhetőleg, ez egy kicsit intuitív, 495 00:24:14,730 --> 00:24:18,220 amennyiben korábban nem volt semmi a munkaterületen. 496 00:24:18,220 --> 00:24:21,240 Nem volt semmi, hogy én jön létre, amíg elkezdtük osztályban. 497 00:24:21,240 --> 00:24:22,840 >> És hoztam létre hello.c. 498 00:24:22,840 --> 00:24:24,544 Aztán össze, és nevezte a.out. 499 00:24:24,544 --> 00:24:27,460 Aztán össze újra enyhén eltérően, és felszólította, hogy helló. 500 00:24:27,460 --> 00:24:32,830 Szóval van három fájl ebben a könyvtárban, Ebben a mappában az úgynevezett munkaterület. 501 00:24:32,830 --> 00:24:35,005 Most látom, hogy az is ha kicsinyítés valójában. 502 00:24:35,005 --> 00:24:37,530 >> Ha kicsinyíteni itt nézd meg, hogy a jobb felső 503 00:24:37,530 --> 00:24:39,940 sarok, mint ígérte a bal oldalán a képernyő 504 00:24:39,940 --> 00:24:42,990 mindig megy, hogy mutassa meg mi van a számla, mi 505 00:24:42,990 --> 00:24:44,790 belsejében CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 És van három fájlokat. 507 00:24:46,680 --> 00:24:49,070 >> Ezért szeretnék megszabadulni a.out és köszön. 508 00:24:49,070 --> 00:24:51,275 És lehet, hogy képzelni ösztönösen, akkor 509 00:24:51,275 --> 00:24:53,400 lehetne rendezni az ellenőrzés kattintással vagy kattintson a jobb gombbal ezt. 510 00:24:53,400 --> 00:24:54,590 És ez a kis menü jelenik meg. 511 00:24:54,590 --> 00:24:57,170 Akkor töltse le a fájlt, fuss azt előnézetben, frissíteni, átnevezni, 512 00:24:57,170 --> 00:24:57,700 vagy mit nem. 513 00:24:57,700 --> 00:25:00,260 >> És én is csak törölni, és elmegy. 514 00:25:00,260 --> 00:25:05,260 De nézzük a dolgokat egy parancs vonal most úgy, hogy kényelmes 515 00:25:05,260 --> 00:25:07,010 ezzel, és tegye a következőket. 516 00:25:07,010 --> 00:25:12,345 Megyek, hogy menjen előre, és távolítsa a.out beírja szó rma.out. 517 00:25:12,345 --> 00:25:14,890 Kiderült, a parancs eltávolítása vagy törlése valami, 518 00:25:14,890 --> 00:25:16,280 nem eltávolítani vagy törölni. 519 00:25:16,280 --> 00:25:21,260 >> Ez tömörebben RM, csak hogy mentse néhány karakternél, és nyomja meg az Entert. 520 00:25:21,260 --> 00:25:24,707 Most megyünk, hogy kissé rejtélyesen A reguláris fájl a.out. 521 00:25:24,707 --> 00:25:27,040 Nem igazán tudja, mi az szabálytalan fájl lenne még. 522 00:25:27,040 --> 00:25:28,660 De azt akarom, hogy vegye le. 523 00:25:28,660 --> 00:25:30,150 >> Így fogok Y számára igen. 524 00:25:30,150 --> 00:25:31,940 Vagy tudtam írja ki, és nyomja meg az Entert. 525 00:25:31,940 --> 00:25:33,440 És megint semmi sem történik. 526 00:25:33,440 --> 00:25:35,840 De ez általában egy jó dolog. 527 00:25:35,840 --> 00:25:40,490 >> Ha én írja LS ebben az időben, mit látok? 528 00:25:40,490 --> 00:25:44,930 Remélhetőleg csak köszönni és hello.c. 529 00:25:44,930 --> 00:25:47,286 Most, hogy félre, akkor észre ez a csillag, csillag, 530 00:25:47,286 --> 00:25:48,660 ez a végén a programokat. 531 00:25:48,660 --> 00:25:50,201 És ők is felbukkan zöld. 532 00:25:50,201 --> 00:25:53,970 Ez csak CS50 IDE módja A cluing akkor az a tény, 533 00:25:53,970 --> 00:25:55,280 hogy ez nem a forráskódot. 534 00:25:55,280 --> 00:25:58,880 Ez egy végrehajtható, a futtatható program, amely akkor futtathatod 535 00:25:58,880 --> 00:26:01,020 ezzel pont perjel, majd azt a neve. 536 00:26:01,020 --> 00:26:05,860 >> Most hadd menjen előre, és távolítsa Ennek rm hello, Enter, távolítsa el a rendszeres 537 00:26:05,860 --> 00:26:08,010 fájl hello, igen. 538 00:26:08,010 --> 00:26:11,180 És ha most írja LS, mi vissza hello.c. 539 00:26:11,180 --> 00:26:13,917 Próbálj meg nem törli az forráskódját. 540 00:26:13,917 --> 00:26:16,250 Annak ellenére, hogy vannak olyan funkciók épített CS50 IDE ahol 541 00:26:16,250 --> 00:26:19,870 akkor megy át a módosítási előzmények és visszatekerés az időben, ha véletlenül 542 00:26:19,870 --> 00:26:23,660 törölni valamit, nem kell szem előtt mint egy következő választási igen vagy nem, 543 00:26:23,660 --> 00:26:25,381 amit valóban szeretne csinálni. 544 00:26:25,381 --> 00:26:27,380 És ha felmegyek a tetejére bal sarokban van, 545 00:26:27,380 --> 00:26:30,696 minden marad a hello.c. 546 00:26:30,696 --> 00:26:32,570 Tehát van fürtöket Más parancsok 547 00:26:32,570 --> 00:26:37,550 hajthat végre a világon a Linux, amelyek közül az egyik, ismét, Make. 548 00:26:37,550 --> 00:26:40,180 És megyünk készítsünk a programot most a következőképpen. 549 00:26:40,180 --> 00:26:43,270 >> Ahelyett, hogy csörömpölve, ahelyett, hogy csörömpölve-o, 550 00:26:43,270 --> 00:26:45,860 Megyek egyszerűen Szó írja, hogy helló. 551 00:26:45,860 --> 00:26:49,630 És most észre, én nem gépel hogy hello.c. 552 00:26:49,630 --> 00:26:50,910 Én beírni, hogy helló. 553 00:26:50,910 --> 00:26:54,840 >> És ez a program Tedd, hogy jön CS50 IDE, és így tovább 554 00:26:54,840 --> 00:26:57,090 általában a Linux, egy program, ami 555 00:26:57,090 --> 00:26:59,120 megy, hogy a program neve Hello. 556 00:26:59,120 --> 00:27:03,680 És ez meg fog vállalni, megállapodás szerint, hogy ha ezt a programot lehet tenni, 557 00:27:03,680 --> 00:27:09,030 ez meg fog tenni egy forrásból kódfájlhoz végződő dot c hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Tehát, ha én megüt Belép most veszi észre, hogy A parancs kerül végrehajtásra, 559 00:27:12,210 --> 00:27:14,340 valójában még hosszabb előtt, mint korábban. 560 00:27:14,340 --> 00:27:16,670 És ez azért van, mert előre CS50 IDE, hogy 561 00:27:16,670 --> 00:27:19,878 Néhány további funkciók épült, hogy nem kell most még, de hamarosan lesz. 562 00:27:19,878 --> 00:27:23,470 De a legfontosabb dolog, hogy észre most már a Hello programban. 563 00:27:23,470 --> 00:27:27,080 >> Ha I. típusú LS megint Van egy helló programot. 564 00:27:27,080 --> 00:27:32,070 És én is futtatható a dot perjel a.out, nem, 565 00:27:32,070 --> 00:27:35,590 mert a lényege ennek a gyakorlat volt, pont perjel szia. 566 00:27:35,590 --> 00:27:38,089 És most már az én hello world programot. 567 00:27:38,089 --> 00:27:39,880 Így halad előre, vagyunk szinte mindig csak 568 00:27:39,880 --> 00:27:42,088 fog fordítani a programok parancs használatával Gyártmány. 569 00:27:42,088 --> 00:27:45,300 Aztán megyünk futni őket dot perjel, és a program nevét. 570 00:27:45,300 --> 00:27:49,610 De észre, mit csinál tesz az Te vagy az, hogy ez önmagában nem egy fordító. 571 00:27:49,610 --> 00:27:53,310 Ez csak egy kényelmi programot hogy tudja, hogyan kell kiváltani egy fordító 572 00:27:53,310 --> 00:27:56,470 futtatni úgy, hogy te magad is használni. 573 00:27:56,470 --> 00:28:00,220 >> Milyen más parancsok léteznek Linux, és viszont a CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Majd meglátjuk, hogy van egy CD parancs Change Directory. 575 00:28:03,107 --> 00:28:05,190 Ez lehetővé teszi a A parancssori felület 576 00:28:05,190 --> 00:28:07,610 előrelépni, és vissza, és nyissa fel a különböző mappák 577 00:28:07,610 --> 00:28:08,860 az egér használata nélkül. 578 00:28:08,860 --> 00:28:12,470 >> LS láttunk, amely áll a lista A fájlok az aktuális könyvtárban. 579 00:28:12,470 --> 00:28:14,650 Tedd Dir, akkor valószínűleg kezdeni a következtetés, 580 00:28:14,650 --> 00:28:18,150 amit ezek jelent now-- teszik könyvtár, Ha azt szeretnénk, hogy hozzon létre egy mappát. 581 00:28:18,150 --> 00:28:21,270 RM az eltávolításra, RM Dir számára távolítsa directory-- és ezeket, 582 00:28:21,270 --> 00:28:24,160 ismét, a parancssor ekvivalens, amit 583 00:28:24,160 --> 00:28:26,945 tehetett a CS50 IDE az egérrel. 584 00:28:26,945 --> 00:28:28,820 De hamarosan találja hogy néha csak 585 00:28:28,820 --> 00:28:30,610 sokkal gyorsabb, hogy nem dolgokat a billentyűzet, 586 00:28:30,610 --> 00:28:33,690 és végül sokkal erősebb. 587 00:28:33,690 --> 00:28:36,440 >> De nehéz azt állítani, hogy bármi, amit csináltam eddig 588 00:28:36,440 --> 00:28:39,990 minden, ami erős, ha minden mi már mondani, hello world. 589 00:28:39,990 --> 00:28:43,740 És valóban, én beégetett a szavak hello world be a programot. 590 00:28:43,740 --> 00:28:45,530 Nincs dinamika még. 591 00:28:45,530 --> 00:28:49,320 Scratch volt egy nagyságrenddel sokkal érdekesebb a múlt héten. 592 00:28:49,320 --> 00:28:51,220 >> És így menjünk oda. 593 00:28:51,220 --> 00:28:55,310 Vessünk egy lépést felé, hogy a módja néhány ilyen funkciókat. 594 00:28:55,310 --> 00:28:59,470 Tehát nem csak a C jön printf, és csokor egyéb funkciók 595 00:28:59,470 --> 00:29:01,850 amelyek közül néhány majd meglátjuk Idővel, ez nem 596 00:29:01,850 --> 00:29:05,760 hogy minden ilyen egyszerű egyenesen A kapu egyre felhasználótól. 597 00:29:05,760 --> 00:29:08,140 >> Sőt, az egyik gyenge pontja A nyelvek, mint a C, 598 00:29:08,140 --> 00:29:10,140 és még a Java, és mégis mások, hogy ez nem 599 00:29:10,140 --> 00:29:15,860 megkönnyíti, hogy csak kap ilyeneket egészek a felhasználók, illetve húrok, szavak, 600 00:29:15,860 --> 00:29:19,970 és kifejezéseket, nemhogy ilyeneket lebegőpontos értékek, vagy a valós számok 601 00:29:19,970 --> 00:29:23,240 A tizedes pontot, és tényleg hosszú számokat, ahogy azt hamarosan látni. 602 00:29:23,240 --> 00:29:27,000 Tehát ez a funkciók listáját itt, ezek olyanok, mint a többi Scratch puzzle-darabokat 603 00:29:27,000 --> 00:29:31,090 hogy már előre telepített CS50 IDE, hogy fogjuk használni egy pár hétig 604 00:29:31,090 --> 00:29:34,010 a képzés kerekek a fajta, és végül leveszem, és nézd 605 00:29:34,010 --> 00:29:37,210 a motorháztető alatt, talán a hogy ezek a dolgok végre. 606 00:29:37,210 --> 00:29:40,460 >> De ahhoz, hogy ezt nézzük valójában írni egy programot. 607 00:29:40,460 --> 00:29:41,770 Hadd menjek előre most. 608 00:29:41,770 --> 00:29:44,750 És megyek, hogy új fájl kattintva ez a kis plusz, 609 00:29:44,750 --> 00:29:45,970 , majd az Új fájl. 610 00:29:45,970 --> 00:29:49,250 >> Megyek menteni a következő ont, mondjuk, string.c, 611 00:29:49,250 --> 00:29:50,750 mert szeretnék játszani a húrok. 612 00:29:50,750 --> 00:29:53,990 És string C csak karakterek sorozata. 613 00:29:53,990 --> 00:29:56,090 Tehát most menjünk előre és tegye a következőket. 614 00:29:56,090 --> 00:30:01,204 >> Közé tartoznak a standard IO.h-- és Kiderült szabvány IO, 615 00:30:01,204 --> 00:30:03,360 IO csak azt jelenti, bemeneti és kimeneti. 616 00:30:03,360 --> 00:30:05,920 Így kiderül, hogy ez itt az, hogy mi 617 00:30:05,920 --> 00:30:08,140 A szomszédos számunkra, hogy használja printf. 618 00:30:08,140 --> 00:30:10,410 Printf természetesen kimenetet. 619 00:30:10,410 --> 00:30:15,000 Tehát ahhoz, hogy használni printf, kiderül ki van, hogy ezt a kódsort 620 00:30:15,000 --> 00:30:16,040 a tetején a fájlt. 621 00:30:16,040 --> 00:30:18,456 >> És mi jön vissza, amit hogy valójában azt jelenti, nemsokára. 622 00:30:18,456 --> 00:30:20,400 Kiderül, hogy a minden C program írok, 623 00:30:20,400 --> 00:30:23,640 Megvan, hogy indítsa el a kód, amely a következőképpen néz ki. 624 00:30:23,640 --> 00:30:26,860 És észre fogod venni CS50 IDE és egyéb integrált fejlesztési 625 00:30:26,860 --> 00:30:30,050 környezetekben, mint azt, megpróbáljuk a lehető legjobban 626 00:30:30,050 --> 00:30:31,780 tudják befejezni a gondolatot. 627 00:30:31,780 --> 00:30:35,930 Tény, hogy egy perce, ha kibont amit most tettem, elütöttem az Enter billentyűt. 628 00:30:35,930 --> 00:30:39,160 >> Aztán hit nyitott göndör zárójel, nyomd meg ismét. 629 00:30:39,160 --> 00:30:40,430 És befejeztem a gondolat. 630 00:30:40,430 --> 00:30:45,140 Ez adott nekem egy új vonal, behúzott nem kevesebb A szép stilisztikai okokból fogjuk látni. 631 00:30:45,140 --> 00:30:48,559 És akkor automatikusan kaptam hogy zárójel befejezni a gondolatot. 632 00:30:48,559 --> 00:30:50,600 Most, hogy nem mindig kitalálni, hogy mit szeretne csinálni. 633 00:30:50,600 --> 00:30:53,620 De a nagy részét, ez nem menteni néhány karakternél. 634 00:30:53,620 --> 00:30:59,560 Tehát egy perce futott ez program-- hello, world, majd össze azt, 635 00:30:59,560 --> 00:31:00,460 majd futott. 636 00:31:00,460 --> 00:31:01,867 De nincs dinamizmus itt. 637 00:31:01,867 --> 00:31:03,700 Mi van, ha azt akartuk, hogy valami mást csinálni? 638 00:31:03,700 --> 00:31:07,630 Nos, mi lenne, ha azt akartam, hogy valóban kap egy húr a felhasználó? 639 00:31:07,630 --> 00:31:11,250 Megyek, hogy egy puzzle-darab úgynevezett pontosan hogy-- kap húr. 640 00:31:11,250 --> 00:31:15,860 >> Kiderült, C, hogy ha nem akar hogy bemenetet egy puzzle-darab, 641 00:31:15,860 --> 00:31:19,360 vagy helyesebben egy funkciót, akkor szó csak nem nyitott zárójel, 642 00:31:19,360 --> 00:31:20,430 közel zárójel. 643 00:31:20,430 --> 00:31:25,540 Tehát olyan, mintha ott nincs fehér mezőbe írja be. 644 00:31:25,540 --> 00:31:27,720 Az mondjuk blokk előtt Volt egy kis fehér doboz. 645 00:31:27,720 --> 00:31:29,660 Nem kell, hogy a fehér doboz most. 646 00:31:29,660 --> 00:31:33,310 >> De amikor hívom get húr, azt szeretnénk, hogy az eredmény valahol. 647 00:31:33,310 --> 00:31:37,680 Tehát egy nagyon gyakori paradigma C a hívja a funkció, mint például a get húr van, 648 00:31:37,680 --> 00:31:41,070 majd tárolja a visszatérési értéket. 649 00:31:41,070 --> 00:31:44,450 Ez az eredmény a erőkifejtés valamit. 650 00:31:44,450 --> 00:31:47,630 >> És mi az konstrukció a programozás, 651 00:31:47,630 --> 00:31:53,450 akár Scratch vagy most C, hogy használhatja, hogy ténylegesen készlet valamit? 652 00:31:53,450 --> 00:31:55,990 Nevezte a változó, nem igaz? 653 00:31:55,990 --> 00:32:00,320 És Scratch, mi nem igazán érdekel, mi folyik a változókat. 654 00:32:00,320 --> 00:32:02,170 >> De ebben az esetben, valójában nem. 655 00:32:02,170 --> 00:32:03,719 Azt fogom mondani húr. 656 00:32:03,719 --> 00:32:05,510 És akkor tudtam hívni ez, amit csak akarok. 657 00:32:05,510 --> 00:32:08,340 Megyek nevezni nevét, kap kap húr. 658 00:32:08,340 --> 00:32:10,250 >> És most akkor is, ha egy kicsit új ez, 659 00:32:10,250 --> 00:32:11,984 észre, hogy én hiányzik néhány részlet. 660 00:32:11,984 --> 00:32:13,150 Én felejtés pontosvessző. 661 00:32:13,150 --> 00:32:14,400 Be kell fejeznem ezt a gondolatot. 662 00:32:14,400 --> 00:32:17,480 Így fogok mozgatni a kurzort, és a hit pontosvessző van. 663 00:32:17,480 --> 00:32:19,130 És mi közöm csak tenni? 664 00:32:19,130 --> 00:32:21,440 Ebben a kódsort, 5-ös szám abban a pillanatban, 665 00:32:21,440 --> 00:32:23,799 Hívom get karakterek nélkül bemenettel. 666 00:32:23,799 --> 00:32:26,090 Tehát nincs kis fehér doboz, mint a Save blokk. 667 00:32:26,090 --> 00:32:28,590 >> Csak azt mondom, hé, számítógép, hozz egy húr. 668 00:32:28,590 --> 00:32:31,390 Az egyenlőségjel nem igazán egyenlőségjel, per se. 669 00:32:31,390 --> 00:32:33,790 Ez a feladat operátor, ami azt jelenti, 670 00:32:33,790 --> 00:32:37,860 hé, számítógép, vigye át az értéket a jobb át a bal oldalon. 671 00:32:37,860 --> 00:32:40,480 És a bal oldalon, én a következőket. 672 00:32:40,480 --> 00:32:43,580 >> Hé, számítógép, adj egy string-- karakterek sorozata. 673 00:32:43,580 --> 00:32:45,637 És hívja, hogy string. 674 00:32:45,637 --> 00:32:47,220 És nem is kell nevezni neve. 675 00:32:47,220 --> 00:32:49,970 >> Nevezhetném, hagyományosan, olyasmi, mint az S, 676 00:32:49,970 --> 00:32:52,900 hasonlóan szoktuk i hívja az i változóra. 677 00:32:52,900 --> 00:32:54,829 De most meg kell tennem valamit. 678 00:32:54,829 --> 00:32:57,370 Nem lenne elég hülye, hogy próbálja összeállítása ezt a kódot, futás 679 00:32:57,370 --> 00:32:59,410 ez a program, bár Kezdek egy string, 680 00:32:59,410 --> 00:33:01,580 mert még mindig csak fog köszönni világban. 681 00:33:01,580 --> 00:33:06,140 >> De mi van, ha nem akarjuk, hogy ez megváltozzon. 682 00:33:06,140 --> 00:33:07,940 Miért nem tudom ezt megtenni? 683 00:33:07,940 --> 00:33:11,632 Százalékos s, vessző s. 684 00:33:11,632 --> 00:33:13,090 És ez egy kicsit rejtélyes is. 685 00:33:13,090 --> 00:33:15,560 >> Nos, hadd tegyem változók világosabb. 686 00:33:15,560 --> 00:33:17,510 Hadd nevezni ezt a változó neve. 687 00:33:17,510 --> 00:33:20,230 És lássuk, ha nem tudjuk ugratni eltekintve, hogy mi történik itt. 688 00:33:20,230 --> 00:33:22,770 >> Tehát az ötös vonalon, kapok egy string. 689 00:33:22,770 --> 00:33:25,620 És én tárolására, hogy a húr, függetlenül a felhasználó beírt 690 00:33:25,620 --> 00:33:28,430 A saját billentyűzet, a változó nevű neve. 691 00:33:28,430 --> 00:33:30,590 És kiderül, hogy printf nem csak 692 00:33:30,590 --> 00:33:34,220 hogy az egyik érv kettős idézetek, egy bemeneti idézőjelek. 693 00:33:34,220 --> 00:33:39,100 >> Ez lehet, hogy két, vagy három, vagy több, így hogy a második, vagy harmadik, vagy negyedik, 694 00:33:39,100 --> 00:33:42,320 mind a változók neveit, vagy kifejezetten értékeli, 695 00:33:42,320 --> 00:33:48,610 kívánt dugót, dinamikusan, hogy a string idézőjelek közé. 696 00:33:48,610 --> 00:33:52,110 Más szavakkal, mi lenne baj ezzel? 697 00:33:52,110 --> 00:33:57,920 Ha most köszöntem nevét, backslash n, megmentette a fájlt, össze a kód, 698 00:33:57,920 --> 00:34:01,660 és futott ez, mi fog történni? 699 00:34:01,660 --> 00:34:05,139 >> Ez csak azt fogja mondani, helló név, szó szerint N-a-M-E, 700 00:34:05,139 --> 00:34:07,900 ami elég hülye, mert ez nem különbözik a világ. 701 00:34:07,900 --> 00:34:10,400 Tehát bármi idézőjelbe is mi szó lett nyomtatva. 702 00:34:10,400 --> 00:34:12,520 Tehát, ha azt akarjuk, hogy egy helykitöltő ott, 703 00:34:12,520 --> 00:34:14,422 Igazából kell használni néhány speciális szintaxist. 704 00:34:14,422 --> 00:34:17,380 És kiderül, ha elolvassa a dokumentáció a printf függvény, 705 00:34:17,380 --> 00:34:21,320 megmondja, hogy ha használja százalék s, 706 00:34:21,320 --> 00:34:23,920 helyettesítheti egy értéket a következők szerint. 707 00:34:23,920 --> 00:34:27,190 >> Miután egy vessző után idézőjel, akkor egyszerűen 708 00:34:27,190 --> 00:34:29,179 írja a nevét, a változót, amit akar 709 00:34:29,179 --> 00:34:33,790 a dugó be, hogy a formátum kódot vagy formátumleíró, 710 00:34:33,790 --> 00:34:35,469 százalék s szálakat. 711 00:34:35,469 --> 00:34:39,190 És most, ha már megmentette a fájlt, Megyek vissza az én terminál. 712 00:34:39,190 --> 00:34:42,870 És én írja String, mert megint a neve ennek a 713 00:34:42,870 --> 00:34:45,510 fájl, hogy én választottam, mielőtt az string.c. 714 00:34:45,510 --> 00:34:48,510 >> Így fogok mondani String adja. 715 00:34:48,510 --> 00:34:51,550 Ó te jó ég, nézd meg az összes A hibákat csináltunk már. 716 00:34:51,550 --> 00:34:55,540 És ez is-- mit, ez nagyon mint egy hat, hét line programot? 717 00:34:55,540 --> 00:34:57,790 Tehát ez az, ahol lehet nagyon gyorsan nyomasztó. 718 00:34:57,790 --> 00:35:00,890 >> Ez a terminál ablak most csak regurgitated 719 00:35:00,890 --> 00:35:03,230 rengeteg hibaüzenetet. 720 00:35:03,230 --> 00:35:07,560 Bizonyára nincs több hiba üzenetek, mint én sornyi kódot. 721 00:35:07,560 --> 00:35:08,680 Tehát mi folyik itt? 722 00:35:08,680 --> 00:35:10,920 >> Nos, a legjobb stratégia tenni, amikor csak 723 00:35:10,920 --> 00:35:13,710 nem találkozik elsöprő hibalista így, 724 00:35:13,710 --> 00:35:16,690 A görgetés vissza, keresse meg a parancs csak futott, ami az én esetemben 725 00:35:16,690 --> 00:35:18,020 a String. 726 00:35:18,020 --> 00:35:21,630 Nézd meg mit csinál tett, és kész Hosszú Clang parancs, nem nagy ügy van. 727 00:35:21,630 --> 00:35:22,950 >> De a piros rossz. 728 00:35:22,950 --> 00:35:24,750 Zöld próbál lenni szelíd és segítőkész. 729 00:35:24,750 --> 00:35:26,140 De ez még mindig rossz, ebben az esetben. 730 00:35:26,140 --> 00:35:27,510 De hol van ez a rossz? 731 00:35:27,510 --> 00:35:31,450 >> String.c, sorban öt, képességgel öt. 732 00:35:31,450 --> 00:35:32,930 Tehát ez csak a józan egyezmény. 733 00:35:32,930 --> 00:35:36,060 Valami vastagbél valami olyan sorszám és a karakter számát. 734 00:35:36,060 --> 00:35:41,080 Hiba, a be nem azonosító karakterlánc. 735 00:35:41,080 --> 00:35:42,900 Úgy értette, hogy szabvány? 736 00:35:42,900 --> 00:35:45,530 >> Így sajnos csenget próbál hasznos lehet. 737 00:35:45,530 --> 00:35:46,850 De ez a baj, ebben az esetben. 738 00:35:46,850 --> 00:35:49,350 Nem, csenget, nem jelenti azt, szabványos IO. 739 00:35:49,350 --> 00:35:51,070 Úgy értettem, hogy on-line, igen. 740 00:35:51,070 --> 00:35:53,420 >> De az ötös vonalon van ez itt. 741 00:35:53,420 --> 00:35:57,040 És nem csenget megérteni S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 Ez egy nem bejelentett azonosítót, szó ez csak még soha nem látott. 743 00:36:01,490 --> 00:36:05,730 És ez azért van, mert a C, a nyelv írunk kódot most, 744 00:36:05,730 --> 00:36:08,070 Nincsenek nevű változókkal szálakat. 745 00:36:08,070 --> 00:36:11,380 >> Ez nem alapértelmezés szerint támogatja egy úgynevezett húr. 746 00:36:11,380 --> 00:36:16,750 Ez egy CS50 darab zsargon, de nagyon hagyományos. 747 00:36:16,750 --> 00:36:18,600 De tudom kijavítani ezt a következőképpen. 748 00:36:18,600 --> 00:36:22,090 >> Ha hozzá egy sor kód a tetején a program, 749 00:36:22,090 --> 00:36:27,890 közé CS50.h, amely egy másik fájl valahol a CS50 IDE, valahol 750 00:36:27,890 --> 00:36:30,820 a merevlemezen, hogy úgy mondjam, Az Ubuntu operációs rendszer 751 00:36:30,820 --> 00:36:33,590 hogy rohanok, hogy az a fájl van 752 00:36:33,590 --> 00:36:38,740 tanítani fog az operációs rendszer, amit egy karakterlánc, csak 753 00:36:38,740 --> 00:36:41,930 mint a szokásos io.h a fájl az operációs rendszert, amely 754 00:36:41,930 --> 00:36:44,430 fog tanítani azt, amit ke- rül. 755 00:36:44,430 --> 00:36:46,810 >> Sőt, mi ütött volna egy nagyon hasonló üzenet 756 00:36:46,810 --> 00:36:50,600 ha IO bevallotta szabvány IO.h és megpróbálta használni printf. 757 00:36:50,600 --> 00:36:53,632 Így fogok menni előre, és csak Irányítsd L törölje a képernyő. 758 00:36:53,632 --> 00:36:56,340 Vagy akkor írja egyértelműen, és ez lesz éppen elhagyja a terminál ablakban. 759 00:36:56,340 --> 00:36:58,020 De akkor is lépjünk vissza az időben. 760 00:36:58,020 --> 00:37:01,100 >> És fogok ismételni String. 761 00:37:01,100 --> 00:37:03,660 Kereszt ujjaimat ezúttal Enter. 762 00:37:03,660 --> 00:37:05,380 Istenem, ez működött. 763 00:37:05,380 --> 00:37:09,280 ez azt mutatja nekem egy hosszú rejtélyes parancs ez az, amit Győződjön keresztül generált csenget, 764 00:37:09,280 --> 00:37:10,460 de nincs hibaüzenet. 765 00:37:10,460 --> 00:37:12,460 Tehát észre, bár akkor lehet, hogy teljesen 766 00:37:12,460 --> 00:37:14,480 túlterheltek a számú hibaüzenetek, 767 00:37:14,480 --> 00:37:17,540 csak lehet ezt a bosszantó lépcsőzetes hatás, ha csenget nem érti 768 00:37:17,540 --> 00:37:19,620 egy dolog, ami azt jelenti, hogy akkor nem érti a következő szót, 769 00:37:19,620 --> 00:37:20,560 vagy a következő sorban. 770 00:37:20,560 --> 00:37:22,850 És ez így csak fojtó a kódot. 771 00:37:22,850 --> 00:37:24,440 De a fix lehet egyszerű. 772 00:37:24,440 --> 00:37:27,822 És így mindig elsősorban a Nagyon kimenet első sora. 773 00:37:27,822 --> 00:37:29,530 És ha nem értem, csak nézd 774 00:37:29,530 --> 00:37:32,480 A kulcsszavak, hogy lehet nyomokat, és a sor számát, 775 00:37:32,480 --> 00:37:34,650 és a karakter, ahol ezt a hibát lehet. 776 00:37:34,650 --> 00:37:40,328 >> Most hadd menjen előre, és írja dot perjel, string, adja meg. 777 00:37:40,328 --> 00:37:44,340 Hm, ez nem köszönés semmit. 778 00:37:44,340 --> 00:37:46,210 Miért? 779 00:37:46,210 --> 00:37:48,170 Nos, emlékszem, hol van ez futás? 780 00:37:48,170 --> 00:37:53,730 >> Ez valószínűleg beragadt a pillanatban a hurok, ha úgy tetszik, a soros hathengeres, 781 00:37:53,730 --> 00:37:56,950 mert A string tervezési, írta CS50 személyzet, 782 00:37:56,950 --> 00:38:00,350 szó azt jelenti, hogy csak ül ott vár, és vár, 783 00:38:00,350 --> 00:38:01,850 és a várakozás egy húr. 784 00:38:01,850 --> 00:38:03,792 Minden értünk karaktersorozat emberi bemenet. 785 00:38:03,792 --> 00:38:04,500 Szóval tudod mit? 786 00:38:04,500 --> 00:38:05,166 Hadd menjek előre. 787 00:38:05,166 --> 00:38:08,704 És csak egy szeszély, hadd írja a nevem, Dávid, írja. 788 00:38:08,704 --> 00:38:10,120 Most van egy dinamikus programot. 789 00:38:10,120 --> 00:38:11,240 Azt mondta, szia David. 790 00:38:11,240 --> 00:38:16,280 >> Ha megyek előre, és futtatni ezt újra, hadd próbálja mondani Zamila nevet adja. 791 00:38:16,280 --> 00:38:17,940 És most van egy dinamikus programot. 792 00:38:17,940 --> 00:38:19,380 Nem nehéz kódolt világban. 793 00:38:19,380 --> 00:38:21,760 Nem nehéz kódolni megnevezni, vagy David, vagy Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Most már sokkal több, mint a programok tudjuk, hol, ha a bemenet, 795 00:38:25,350 --> 00:38:27,870 termel kissé eltérő kimenetet. 796 00:38:27,870 --> 00:38:31,020 Nos, ez nem a legjobb felhasználói élmény, vagy UX. 797 00:38:31,020 --> 00:38:33,000 Azt a program futtatásához. 798 00:38:33,000 --> 00:38:35,830 >> Nem tudom, mit kéne csinálni, ha én tényleg nézd 799 00:38:35,830 --> 00:38:37,290 vagy emlékszik a forráskódot. 800 00:38:37,290 --> 00:38:39,640 Tehát lássuk, hogy a felhasználó tapasztal egy kicsit jobban 801 00:38:39,640 --> 00:38:41,240 a legegyszerűbb dolgokat. 802 00:38:41,240 --> 00:38:44,782 Térjünk vissza ebbe programot, és egyszerűen azt mondja printf. 803 00:38:44,782 --> 00:38:48,870 >> És hadd menjen előre, és azt mondják nevét, vastagbél, és egy szóközt, majd egy pontosvessző. 804 00:38:48,870 --> 00:38:51,170 És csak a hecc kedvéért, nem holtjáték n. 805 00:38:51,170 --> 00:38:52,980 És ez szándékos, mert nem akarom 806 00:38:52,980 --> 00:38:54,590 A prompt, hogy lépjen a következő sorra. 807 00:38:54,590 --> 00:38:58,800 >> Azt akarom, hogy ahelyett, hogy ezt, hogy húr újrafordítani a kód új gép 808 00:38:58,800 --> 00:39:00,980 kód dot perjel húr. 809 00:39:00,980 --> 00:39:02,460 Ah, ez sokkal szebb. 810 00:39:02,460 --> 00:39:05,780 Most már valóban tudja, mi a számítógép azt akarja csinálni, adja meg a nevét. 811 00:39:05,780 --> 00:39:10,020 >> Így fogok menni előre, és írja Rob, adja meg, és szia, Rob. 812 00:39:10,020 --> 00:39:13,640 Tehát, észre, ez még mindig, a végén A nap, csak kilenc line programot. 813 00:39:13,640 --> 00:39:15,090 De megtettük ezeket a baba lépéseket. 814 00:39:15,090 --> 00:39:18,380 >> Írtunk egy sort, amivel ismerős volt, printf, hello world. 815 00:39:18,380 --> 00:39:19,980 Aztán kinyitotta egy kicsit, hogy. 816 00:39:19,980 --> 00:39:21,560 És mi a ténylegesen felhasznált get húr. 817 00:39:21,560 --> 00:39:23,362 És mi dobta ezt az értéket egy változó. 818 00:39:23,362 --> 00:39:26,070 Aztán mentünk előre, és javítani tovább a harmadik sorban. 819 00:39:26,070 --> 00:39:29,220 És ez a megismételt írásban szoftver valóban kulcsfontosságú. 820 00:39:29,220 --> 00:39:33,420 A CS50, és az életben általában, akkor általában nem ül le, 821 00:39:33,420 --> 00:39:36,800 Van egy program, szem előtt tartva, és próbálja írás Az egész átkozott egyszerre. 822 00:39:36,800 --> 00:39:40,810 >> Ez óhatatlanul eredményezhet módon több hiba, mint mi magunk itt látott. 823 00:39:40,810 --> 00:39:44,070 Még én, a mai napig, állandóan hogy más hülyeséget, 824 00:39:44,070 --> 00:39:47,480 valóban nehezebb a hibákat hogy nehezebb kitalálni. 825 00:39:47,480 --> 00:39:52,095 De akkor hibázni a több sornyi kódot írsz egyszerre. 826 00:39:52,095 --> 00:39:54,220 És így ez a gyakorlat az, levelet egy kis kód 827 00:39:54,220 --> 00:39:57,930 hogy te kényelmes, fordítsd azt, futtatni, tesztelni még általánosabban 828 00:39:57,930 --> 00:40:01,370 majd mozgassa on-- így mint mi tartott rétegezés és rétegződés a múlt héten, 829 00:40:01,370 --> 00:40:04,190 építkezés valami nagyon egyszerű valami bonyolultabb, 830 00:40:04,190 --> 00:40:05,200 ugyanígy van. 831 00:40:05,200 --> 00:40:08,500 Ne üljön le, és próbálja írni egy egész probléma. 832 00:40:08,500 --> 00:40:10,780 Valójában ezeket baba lépéseket. 833 00:40:10,780 --> 00:40:15,100 >> Most, húrok nem minden hogy hasznos maguknak. 834 00:40:15,100 --> 00:40:18,210 Mi lenne valóban ideális, mint a van valami más a mi eszköztár. 835 00:40:18,210 --> 00:40:20,990 Tehát lássuk valójában pontosan erre. 836 00:40:20,990 --> 00:40:24,900 >> Hadd menjen előre, és most felkap egy kicsit más programot. 837 00:40:24,900 --> 00:40:28,320 És hívjuk ezt int.c, az egész. 838 00:40:28,320 --> 00:40:30,870 Megyek, hasonlóan, tartalmazzák CS550.h. 839 00:40:30,870 --> 00:40:33,060 Megyek közé tartoznak a standard IO. 840 00:40:33,060 --> 00:40:36,630 És ez lesz elég gyakori ezek az első néhány napon az osztály. 841 00:40:36,630 --> 00:40:39,050 >> És fogok kész magam egy fő funkciója. 842 00:40:39,050 --> 00:40:43,370 És most ahelyett, hogy egy string, menjünk előre, és kap egy int. 843 00:40:43,370 --> 00:40:49,285 Nevezzük i, és hívja meg fog int, közel parens, pontosvessző. 844 00:40:49,285 --> 00:40:51,410 És most lássuk a vele valamit, printf. 845 00:40:51,410 --> 00:40:56,190 >> Tegyük fel, hogy valami hasonló hello, backslash n, vessző i. 846 00:40:56,190 --> 00:41:00,010 Úgyhogy elég sok utánzó amit tettem, csak egy perccel ezelőtt. 847 00:41:00,010 --> 00:41:01,660 Van egy helykitöltő itt. 848 00:41:01,660 --> 00:41:05,150 Már vesszővel válassza i itt, mert azt akarom, plug i abba a helykitöltő. 849 00:41:05,150 --> 00:41:07,250 >> Szóval menjünk előre, és próbálja összeállítása ezt a programot. 850 00:41:07,250 --> 00:41:10,060 A fájl neve int.c. 851 00:41:10,060 --> 00:41:12,920 Így fogok mondani, hogy int, adja meg. 852 00:41:12,920 --> 00:41:16,420 Istenem, de nem nagy ügy, ugye? 853 00:41:16,420 --> 00:41:17,230 Van egy hiba. 854 00:41:17,230 --> 00:41:19,810 >> Van egy szintaktikai hiba Itt olyan, hogy a program nem tud 855 00:41:19,810 --> 00:41:25,460 összeállításának belül int.c, vonal hét, karakter 27, hiba formátum 856 00:41:25,460 --> 00:41:28,400 meghatározza típusa char csillag, bármi is legyen az. 857 00:41:28,400 --> 00:41:30,020 De az érvelés típus int. 858 00:41:30,020 --> 00:41:33,110 >> Tehát itt is, nem fogunk az alábbiakra: noha ma egy csomó anyagot, 859 00:41:33,110 --> 00:41:35,710 megyünk eluralkodjon rajtad a feltétlenül minden vonása C, 860 00:41:35,710 --> 00:41:38,070 és programozási általánosabban mindössze ezek az első hetekben. 861 00:41:38,070 --> 00:41:40,400 Tehát ott gyakran lesz zsargont amellyel Ön nem ismeri. 862 00:41:40,400 --> 00:41:43,350 És valóban, char csillag van valami megyünk, hogy jöjjön vissza 863 00:41:43,350 --> 00:41:44,830 Egy-két hét múlva. 864 00:41:44,830 --> 00:41:47,530 >> De most, lássuk, ha tudjuk elemezni szavak, amelyek ismerősek. 865 00:41:47,530 --> 00:41:50,750 Formats-- így hallottuk formátumban specifikátor, formátum kód előtt. 866 00:41:50,750 --> 00:41:51,840 Ez ismerős. 867 00:41:51,840 --> 00:41:53,840 Type-- de az érv azonban int típusú. 868 00:41:53,840 --> 00:41:55,980 Várj egy percet, én egy int. 869 00:41:55,980 --> 00:41:59,230 >> Talán százalék s valójában van néhány meghatározott. 870 00:41:59,230 --> 00:42:00,230 És valóban, ez nem. 871 00:42:00,230 --> 00:42:03,101 Egy egész szám, ha azt szeretné, printf helyettesítjük,, 872 00:42:03,101 --> 00:42:05,350 hogy tényleg kell használni különböző formában adja meg. 873 00:42:05,350 --> 00:42:06,890 És azt nem tudom, ez a hacsak valaki azt mondta, 874 00:42:06,890 --> 00:42:07,973 vagy ha már csinált ilyet. 875 00:42:07,973 --> 00:42:10,490 De százalék i mi lehet általánosan használt 876 00:42:10,490 --> 00:42:12,240 printf dugulás az egész. 877 00:42:12,240 --> 00:42:14,920 Ön is használja százalék d egy decimális egész. 878 00:42:14,920 --> 00:42:16,490 De én szép és egyszerű itt. 879 00:42:16,490 --> 00:42:17,590 Így megyünk vele. 880 00:42:17,590 --> 00:42:21,160 >> Most hadd menjen előre, és ismétlését make int, Enter. 881 00:42:21,160 --> 00:42:23,328 Ez jó, nincs hiba. 882 00:42:23,328 --> 00:42:27,260 Dot perjel int-- OK, rossz felhasználói élményt, mert én még nem mondtam magamnak 883 00:42:27,260 --> 00:42:27,760 mit kell tenni. 884 00:42:27,760 --> 00:42:28,426 De ez rendben van. 885 00:42:28,426 --> 00:42:29,480 Én fogása a gyorsan. 886 00:42:29,480 --> 00:42:36,260 >> És most hadd menjen előre, és írja be David, OK, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 OK, így ez egy jó dolog. 888 00:42:37,820 --> 00:42:41,710 Ezúttal én függvény segítségével, egy puzzle-darab, az úgynevezett get int. 889 00:42:41,710 --> 00:42:44,230 És kiderül out-- és mi lásd később a term-- 890 00:42:44,230 --> 00:42:47,730 A CS50 személyzet által végrehajtott A string oly módon 891 00:42:47,730 --> 00:42:50,350 hogy csak akkor fizikailag kap egy string az Ön számára. 892 00:42:50,350 --> 00:42:54,340 >> Végrehajtotta get int oly módon, hogy csak akkor 893 00:42:54,340 --> 00:42:55,590 kap egy egész neked. 894 00:42:55,590 --> 00:42:57,830 És ha az ember, nem működnek együtt, akkor 895 00:42:57,830 --> 00:43:00,590 szó szerint csak megy mondjuk újra, újra, újra, 896 00:43:00,590 --> 00:43:05,200 Szó szerint ott ül ciklusok, amíg Ön kötelezi valamilyen mágikus szám, 897 00:43:05,200 --> 00:43:07,670 mint 50, és helló 50. 898 00:43:07,670 --> 00:43:11,440 >> Vagy ha futtatni ezt újra és írja be a 42, helló 42. 899 00:43:11,440 --> 00:43:15,750 És így a get int függvény belsejét, hogy puzzle-darab 900 00:43:15,750 --> 00:43:19,050 elég logika, elég a gondolat, kitalálni, mi is az a szó? 901 00:43:19,050 --> 00:43:20,330 És mi az a szám? 902 00:43:20,330 --> 00:43:23,165 Csak elfogadja végül számokat. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Így kiderül, hogy ez a egyáltalán nem olyan kifejező. 905 00:43:30,230 --> 00:43:30,910 eddig. 906 00:43:30,910 --> 00:43:33,690 Tehát, yay, utoljára ment elég gyorsan 907 00:43:33,690 --> 00:43:38,320 a végrehajtási játékok és animáció, és művészeti alkotások Scratch. 908 00:43:38,320 --> 00:43:42,260 És itt vagyunk, hogy tartalmi A hello world, és helló 50. 909 00:43:42,260 --> 00:43:43,696 >> Ez még nem minden, hogy inspiráló. 910 00:43:43,696 --> 00:43:46,070 És valóban, ezek az első néhány példák némi időt vesz igénybe 911 00:43:46,070 --> 00:43:47,510 hogy a földi fel izgatottan. 912 00:43:47,510 --> 00:43:49,854 De van még sok minden más irányítani őt, sőt. 913 00:43:49,854 --> 00:43:51,770 És megyünk nagyon gyorsan indul rétegződés 914 00:43:51,770 --> 00:43:53,870 Ezen felül az alap primitívek. 915 00:43:53,870 --> 00:43:56,370 >> De először nézzük megérteni milyen korlátai vannak. 916 00:43:56,370 --> 00:43:58,620 Tény, hogy az egyik dolog, Kaparós könnyen ne 917 00:43:58,620 --> 00:44:00,990 tegyük valóban néz a motorháztető alatt, 918 00:44:00,990 --> 00:44:03,740 és megérteni, mi a számítógép, mit tehet, 919 00:44:03,740 --> 00:44:05,250 és mik a korlátai vannak. 920 00:44:05,250 --> 00:44:08,580 És valóban, hogy hiánya megértés, potenciálisan, a hosszú távú 921 00:44:08,580 --> 00:44:12,520 vezethet a saját mistakes-- írásban hibákat, írás bizonytalan szoftver 922 00:44:12,520 --> 00:44:13,880 meghackelésének valamilyen módon. 923 00:44:13,880 --> 00:44:17,130 >> Szóval vessünk néhány lépést felé megértés ez egy kicsit jobban 924 00:44:17,130 --> 00:44:19,710 módja, mondjuk, a következő példát. 925 00:44:19,710 --> 00:44:23,550 Megyek, hogy menjen előre és végrehajtása tényleg gyorsan a program neve kiegészítőkre. 926 00:44:23,550 --> 00:44:25,134 Mint, adjunk néhány számot együtt. 927 00:44:25,134 --> 00:44:27,800 És fogok kód Egyes sarkok Itt, és csak a másolás és beillesztés 928 00:44:27,800 --> 00:44:30,270 ahol azelőtt voltam, csak így tudjuk majd előbb. 929 00:44:30,270 --> 00:44:33,090 Tehát most kaptam az alap kezdetei a program neve kiegészítőkre. 930 00:44:33,090 --> 00:44:34,670 >> És menjünk előre, és erre a célra. 931 00:44:34,670 --> 00:44:38,680 Megyek megy előre, és mondjuk intx kap kap int. 932 00:44:38,680 --> 00:44:39,430 És tudod mit? 933 00:44:39,430 --> 00:44:40,990 Csináljunk egy jobb felhasználói élményt. 934 00:44:40,990 --> 00:44:45,740 >> Tehát mondjuk, x, és hatékonyan figyelmezteti a felhasználót, hogy nekünk x. 935 00:44:45,740 --> 00:44:50,600 És akkor hadd menjen előre, és azt mondják, printf mi lenne, y, ezúttal vár 936 00:44:50,600 --> 00:44:53,140 két érték a felhasználó. 937 00:44:53,140 --> 00:44:59,759 És akkor nézzük csak megy előre, és mondjuk, printf, az összeget az x és y. 938 00:44:59,759 --> 00:45:01,300 És most nem akarok százalék s. 939 00:45:01,300 --> 00:45:09,080 Azt akarom, hogy százalék i, backslash n, majd csatlakoztassa összeg értékét. 940 00:45:09,080 --> 00:45:10,620 >> Akkor hogyan kezdjen csinálja ezt? 941 00:45:10,620 --> 00:45:11,270 Tudod mit? 942 00:45:11,270 --> 00:45:12,840 Tudom, hogyan kell használni változók. 943 00:45:12,840 --> 00:45:15,140 Hadd nyilvánítja egy újat, int z. 944 00:45:15,140 --> 00:45:16,770 >> És én megyek, hogy egy kitalálni itt. 945 00:45:16,770 --> 00:45:21,470 Ha vannak egyenlő jelek ebben nyelv, talán csak csinálni x plus y, 946 00:45:21,470 --> 00:45:23,660 amíg én véget a gondolta pontosvessző? 947 00:45:23,660 --> 00:45:28,170 Most mehetek vissza ide, csatlakoztassa z, befejezni ezt a gondolatot pontosvessző. 948 00:45:28,170 --> 00:45:33,160 És nézzük csak, ha ezek a szekvenciák lines-- x kap int. 949 00:45:33,160 --> 00:45:34,770 Y kap int. 950 00:45:34,770 --> 00:45:37,980 >> Hozzáadása az X és Y, tárolja az értéket z-- így ismét emlékezni az egyenlőségjel 951 00:45:37,980 --> 00:45:38,560 nem egyenlő. 952 00:45:38,560 --> 00:45:41,100 Ez hozzárendelés jobbról balra. 953 00:45:41,100 --> 00:45:45,180 És lássuk kinyomtatni, hogy az összeg X és Y nem szó Z, 954 00:45:45,180 --> 00:45:46,830 de mi van benne z. 955 00:45:46,830 --> 00:45:50,090 Tehát tegyük Vipera - szép, nincsenek hibák ebben az időben. 956 00:45:50,090 --> 00:45:53,030 Dot perjel Vipera, adja meg, x lesz 1. 957 00:45:53,030 --> 00:45:55,380 >> Y lesz 2. 958 00:45:55,380 --> 00:45:58,964 És az összeg a X és Y jelentése 3. 959 00:45:58,964 --> 00:46:00,130 Szóval ez mind szép és jó. 960 00:46:00,130 --> 00:46:03,260 >> Tehát azt képzelni, hogy a matematika kellene dolgozni egy programot, mint ez. 961 00:46:03,260 --> 00:46:04,040 De tudod mit? 962 00:46:04,040 --> 00:46:06,904 Ez változó, vonal 12, még szükség? 963 00:46:06,904 --> 00:46:09,820 Nem kell, hogy a szokás csak tárolja a dolgokat változók 964 00:46:09,820 --> 00:46:10,980 Csak azért, mert te. 965 00:46:10,980 --> 00:46:13,550 És valóban, ez általában tekinthető rossz tervezés 966 00:46:13,550 --> 00:46:18,100 ha létrehoz egy változót, az úgynevezett Z Ebben az esetben, tárolása valami benne, 967 00:46:18,100 --> 00:46:21,390 majd azonnal használhatja, de soha többé. 968 00:46:21,390 --> 00:46:24,700 Miért adnak valamit a neve mint z ha a szó szoros értelmében 969 00:46:24,700 --> 00:46:26,770 fogja használni, hogy dolog csak egyszer, és így 970 00:46:26,770 --> 00:46:29,380 proximális hol hozta létre ez az első helyen, 971 00:46:29,380 --> 00:46:31,052 Olyan közel szempontjából sornyi kódot? 972 00:46:31,052 --> 00:46:31,760 Szóval tudod mit? 973 00:46:31,760 --> 00:46:34,480 Kiderült, hogy a C elég rugalmas. 974 00:46:34,480 --> 00:46:36,586 Ha valóban akar plug-in értékeket itt, 975 00:46:36,586 --> 00:46:38,210 Nem kell, hogy állapítsa meg egy új változót. 976 00:46:38,210 --> 00:46:41,680 Tudtam csak plug-in x plus y, mert a C megérti 977 00:46:41,680 --> 00:46:43,390 számtani és matematikai műveletek. 978 00:46:43,390 --> 00:46:47,140 >> Így tudok csak mondani, hogy ezt a matematika, x plus y, amit ezek az értékek, 979 00:46:47,140 --> 00:46:50,780 csatlakoztassa a kapott integer be, hogy a húr. 980 00:46:50,780 --> 00:46:53,730 Tehát ez lehet, bár csak egy sor rövidebb, 981 00:46:53,730 --> 00:46:58,480 egy jobb design, egy jobb program, mert ott kevesebb kódot, ezért 982 00:46:58,480 --> 00:46:59,921 kevésbé értem, hogy megértsék. 983 00:46:59,921 --> 00:47:01,920 És ez is csak tisztább, amennyiben nem vagyunk 984 00:47:01,920 --> 00:47:04,620 hogy új szavakat, új szimbólumok, mint a Z, 985 00:47:04,620 --> 00:47:07,510 annak ellenére, hogy nem igazán szolgálhat sok a célját. 986 00:47:07,510 --> 00:47:12,890 >> Sajnos, a matematika nem minden megbízható néha. 987 00:47:12,890 --> 00:47:15,270 Menjünk előre, és erre a célra. 988 00:47:15,270 --> 00:47:18,200 Megyek, hogy menjen előre most és tegye a következőket. 989 00:47:18,200 --> 00:47:27,650 >> Csináljuk printf, százalék i, plusz százalék i kell lennie százalék i, backslash n. 990 00:47:27,650 --> 00:47:32,240 És én fogom csinálni this-- xyx plusz y. 991 00:47:32,240 --> 00:47:34,821 Tehát én csak fog átírni ez kicsit másképp van. 992 00:47:34,821 --> 00:47:36,320 Hadd egy gyors biztonsági ellenőrzést. 993 00:47:36,320 --> 00:47:37,986 Ismét, ne rohanjunk előre. 994 00:47:37,986 --> 00:47:41,420 Tedd összeadó, pont perjel vipera. 995 00:47:41,420 --> 00:47:44,950 x értéke 1, y értéke 2, 1 plusz 2 3. 996 00:47:44,950 --> 00:47:45,870 Tehát ez jó. 997 00:47:45,870 --> 00:47:49,060 De nézzük bonyolítják ezt most egy kicsit, és hozzon létre egy új fájlt. 998 00:47:49,060 --> 00:47:53,350 >> Megyek hívás ez, mondjuk, ints, többes egészek. 999 00:47:53,350 --> 00:47:55,980 Hadd kezdjem, hol voltam az imént. 1000 00:47:55,980 --> 00:47:57,770 De most lássuk néhány más vonalakon. 1001 00:47:57,770 --> 00:48:03,430 Hadd menjek előre, és ezt a következő, printf, százalék i, mínusz százalék i, 1002 00:48:03,430 --> 00:48:08,959 hány százaléka i, vessző x, vessző yx mínusz y. 1003 00:48:08,959 --> 00:48:10,750 Tehát csinálok egy kicsit különböző matematikai ott. 1004 00:48:10,750 --> 00:48:11,624 Csináljunk egy másikat. 1005 00:48:11,624 --> 00:48:16,610 Tehát százalék i-szer százalék i százalék i, backslash n. 1006 00:48:16,610 --> 00:48:21,430 Nézzük plug-in x és y és x-szer y. 1007 00:48:21,430 --> 00:48:24,530 Használni fogjuk a csillag a A számítógép az alkalommal. 1008 00:48:24,530 --> 00:48:26,390 >> Nem használjuk az x. x értéke egy változó nevét. 1009 00:48:26,390 --> 00:48:28,270 Ön a csillag a szorzás. 1010 00:48:28,270 --> 00:48:29,020 Csináljunk még egy. 1011 00:48:29,020 --> 00:48:34,580 Printf százalék I, osztva százalék szerint i, a százalékos i, 1012 00:48:34,580 --> 00:48:40,460 backslash n. xy osztva y-- így használja a perjel a C 1013 00:48:40,460 --> 00:48:41,502 csinálni részlege. 1014 00:48:41,502 --> 00:48:42,460 És lássuk egymást. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Fennmaradó százalék i, osztva százalék szerint i, a százalék i. 1017 00:48:55,240 --> 00:48:59,550 xy-- és most fennmaradó az, ami maradt. 1018 00:48:59,550 --> 00:49:02,980 Amikor megpróbál felosztásával nevező egy számláló, 1019 00:49:02,980 --> 00:49:05,570 mennyi maradt, hogy nem lehetett osztani ki? 1020 00:49:05,570 --> 00:49:07,910 >> Tehát nincs igazán, szükségszerűen, egy szimbólum 1021 00:49:07,910 --> 00:49:09,470 már használt az iskolában erre. 1022 00:49:09,470 --> 00:49:13,830 De a C. Akkor mondjuk x modulo y, ahol 1023 00:49:13,830 --> 00:49:18,000 ezt százalék jel ebben context-- zavaróan, ha bent 1024 00:49:18,000 --> 00:49:20,170 Az idézőjel, belsejében printf, százalék 1025 00:49:20,170 --> 00:49:21,830 használjuk a formátum meghatározásakor. 1026 00:49:21,830 --> 00:49:25,420 >> Amikor használja százalék kívül hogy egy matematikai kifejezést, 1027 00:49:25,420 --> 00:49:29,910 ez a modulo operátor a moduláris arithmetic-- céljainknak 1028 00:49:29,910 --> 00:49:33,650 Itt csak azt jelenti, hogy mi a fennmaradó x osztva y? 1029 00:49:33,650 --> 00:49:36,130 Tehát x osztva y x y perjel. 1030 00:49:36,130 --> 00:49:38,220 Mi a maradék x osztva y? 1031 00:49:38,220 --> 00:49:41,780 Ez x mod y, mint programozó mondaná. 1032 00:49:41,780 --> 00:49:48,300 >> Tehát, ha én tett hibákat itt, hadd megy előre, és ints, többes szám, szép, 1033 00:49:48,300 --> 00:49:50,010 és pont perjel ints. 1034 00:49:50,010 --> 00:49:55,270 És menjünk előre, és igen, mondjuk, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 Rendben, 1 + 10 11, ellenőrzése. 1036 00:49:58,390 --> 00:50:01,240 1 mínusz 10 negatív 9 ellenőrizze. 1037 00:50:01,240 --> 00:50:03,420 >> 1 alkalommal 10 10, ellenőrzése. 1038 00:50:03,420 --> 00:50:07,090 1 osztva 10 is-- OK, akkor hagyja, hogy az egyik. 1039 00:50:07,090 --> 00:50:09,480 Fennmaradó 1 osztva 10 1. 1040 00:50:09,480 --> 00:50:10,680 Így van. 1041 00:50:10,680 --> 00:50:12,630 De van egy hiba van. 1042 00:50:12,630 --> 00:50:15,390 >> Tehát az egyik tettem átadni, nem helyes. 1043 00:50:15,390 --> 00:50:16,670 Úgy értem, ez közel 0. 1044 00:50:16,670 --> 00:50:20,670 1 osztva 10, tudja, ha mi vagyunk vágás néhány sarkok, biztos, hogy ez nulla. 1045 00:50:20,670 --> 00:50:28,050 De ez tényleg legyen 1/10, 0,1, illetve 0,10, 0,1000, vagy így tovább. 1046 00:50:28,050 --> 00:50:30,600 >> Meg nem igazán lehet nulla. 1047 00:50:30,600 --> 00:50:35,990 Nos, kiderült, hogy a számítógép csinál szó, amit mondtunk, hogy igen. 1048 00:50:35,990 --> 00:50:39,460 Tesszük a matematika, mint x osztva y. 1049 00:50:39,460 --> 00:50:44,680 És mind a X és Y egy a vonalak A kód a korábbi, egész számok. 1050 00:50:44,680 --> 00:50:50,440 >> Sőt, on line 15, vagyunk mondja printf, hé, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 egész, plug-in egy egész, plug-in egy integer-- kifejezetten 1052 00:50:54,230 --> 00:50:57,580 x, majd y, majd x osztva y. x és y ints. 1053 00:50:57,580 --> 00:50:59,060 Mi jó van. 1054 00:50:59,060 --> 00:51:01,250 >> De mi van x osztva x? 1055 00:51:01,250 --> 00:51:06,790 x osztva y legyen, matematikailag, 1/10, vagy 0,1, 1056 00:51:06,790 --> 00:51:11,600 ami egy valós szám, valós szám amelynek potenciálisan egy tizedes pontossággal. 1057 00:51:11,600 --> 00:51:13,230 Ez nem egy egész szám. 1058 00:51:13,230 --> 00:51:18,290 >> De mi van a legközelebb integer 1/10 vagy 0,1? 1059 00:51:18,290 --> 00:51:21,114 Igen, ez a fajta nulla. 1060 00:51:21,114 --> 00:51:22,030 0.1, mint ez sok. 1061 00:51:22,030 --> 00:51:22,890 1 ez sok. 1062 00:51:22,890 --> 00:51:25,870 Tehát 1/10 közelebb áll 0, mint az, hogy egy. 1063 00:51:25,870 --> 00:51:30,800 >> És akkor mi van a C tesz az us-- fajta, mert azt mondtuk, hogy az alábbiakra: 1064 00:51:30,800 --> 00:51:32,600 A csonkított hogy egész. 1065 00:51:32,600 --> 00:51:40,540 Ez figyelembe az értéket, ami ismét állítólag valami hasonló 0,1000, 1066 00:51:40,540 --> 00:51:41,800 0 és így tovább. 1067 00:51:41,800 --> 00:51:45,320 És ez csonkolása mindent tizedesvessző után 1068 00:51:45,320 --> 00:51:47,510 úgy, hogy mindez dolog, mert nem 1069 00:51:47,510 --> 00:51:51,910 illeszkedik a fogalom egy egész, ami csak egy szám, mint a negatív 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 fel és le, akkor dob el mindent a tizedespont után, mert 1071 00:51:55,830 --> 00:51:59,020 nem fér a tizedesvessző Egy egész definíció szerint. 1072 00:51:59,020 --> 00:52:01,290 >> Tehát a válasz itt nulla. 1073 00:52:01,290 --> 00:52:02,600 Szóval hogyan lehet ezen javítani? 1074 00:52:02,600 --> 00:52:04,400 Szükségünk van egy másik megoldás együtt. 1075 00:52:04,400 --> 00:52:06,880 És ezt meg tudjuk tenni, a következők szerint. 1076 00:52:06,880 --> 00:52:12,820 >> Hadd menjen előre, és hozzon létre egy új fájlt, ez az egyik az úgynevezett floats.c. 1077 00:52:12,820 --> 00:52:16,500 És mentse el itt a Ugyanebben a könyvtárban float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 És hadd menjen előre, és másolja bizonyos, hogy a kódot korábban. 1080 00:52:23,260 --> 00:52:27,690 >> De ahelyett, hogy int, csináljuk ezt. 1081 00:52:27,690 --> 00:52:31,037 Adj egy lebegőpontos értéket úgynevezett x. ahol egy lebegőpontos 1082 00:52:31,037 --> 00:52:33,370 érték csak a szó szoros értelmében valami egy lebegőpontos. 1083 00:52:33,370 --> 00:52:34,410 Meg tudja mozgatni a bal oldalon, a jobb oldalon. 1084 00:52:34,410 --> 00:52:35,530 Ez egy valós szám. 1085 00:52:35,530 --> 00:52:38,050 >> És hadd hívjam fel nem kap int, de kap úszó, 1086 00:52:38,050 --> 00:52:41,420 ami szintén egyike volt a menü A lehetőségek a C250 könyvtárban. 1087 00:52:41,420 --> 00:52:43,220 Változtassunk y egy úszó. 1088 00:52:43,220 --> 00:52:45,000 Tehát ez lesz kap úszó. 1089 00:52:45,000 --> 00:52:47,620 >> És most, mi nem akarjuk, hogy csatlakoztassa a ints. 1090 00:52:47,620 --> 00:52:53,130 Kiderült, mi kell használni százalék f float, százalék f float, 1091 00:52:53,130 --> 00:52:54,560 és most menteni. 1092 00:52:54,560 --> 00:53:01,220 És most, drukkolás, hogy úszók, szép, pont perjel úszik. 1093 00:53:01,220 --> 00:53:04,280 x lesz egy 1 y Lesz 10 újra. 1094 00:53:04,280 --> 00:53:08,240 >> És szép, OK én kívül helyes. 1095 00:53:08,240 --> 00:53:10,240 Reméltem, hogy több, de elfelejtettem írni. 1096 00:53:10,240 --> 00:53:13,250 Szóval menjünk és kijavítani a logikai hiba. 1097 00:53:13,250 --> 00:53:16,280 >> Menjünk előre, és megragad a következőket. 1098 00:53:16,280 --> 00:53:18,080 Majd csak egy kis másolás és beillesztés. 1099 00:53:18,080 --> 00:53:20,080 És én fogom mondani mínusz. 1100 00:53:20,080 --> 00:53:21,890 >> És én fogom mondani alkalommal. 1101 00:53:21,890 --> 00:53:24,060 És fogok mondani osztva. 1102 00:53:24,060 --> 00:53:28,240 És nem fogok csinálni modulo, ami nem olyan illenek ide, 1103 00:53:28,240 --> 00:53:33,690 osztva f és idők plus-- Oké, ezt újra. 1104 00:53:33,690 --> 00:53:44,210 >> Tedd úszók, pont perjel úszók, és 1, 10, és-- szép, nem, OK. 1105 00:53:44,210 --> 00:53:45,250 Tehát egy idióta vagyok. 1106 00:53:45,250 --> 00:53:47,000 Tehát ez nagyon gyakori számítástechnika 1107 00:53:47,000 --> 00:53:49,780 hogy ostoba hibákat, mint ez. 1108 00:53:49,780 --> 00:53:53,100 >> Pedagógiai célokra, amit igazán akartam csinálni 1109 00:53:53,100 --> 00:53:57,410 volt változtatni a tudomány itt plusz, mínusz, a szer, 1110 00:53:57,410 --> 00:54:01,140 és osztani, ahogy remélhetőleg észrevette e gyakorlata során. 1111 00:54:01,140 --> 00:54:04,700 Tehát most nézzük újra összeállítja ezen programban, tegye dot perjel úszik. 1112 00:54:04,700 --> 00:54:07,950 >> És a harmadik alkalommal, nézzük lásd, ha megfelel az elvárásaimnak. 1113 00:54:07,950 --> 00:54:21,480 1., 10., adja, igen, az OK, 1000, osztva 10.000, az 0,100000. 1114 00:54:21,480 --> 00:54:24,952 És kiderül, tudjuk irányítani, hogy hány számok után azok tizedes pont. 1115 00:54:24,952 --> 00:54:25,660 Mi valóban lesz. 1116 00:54:25,660 --> 00:54:26,790 Majd gyere vissza, hogy a. 1117 00:54:26,790 --> 00:54:28,440 >> De most, sőt, a matek helyes. 1118 00:54:28,440 --> 00:54:30,090 Szóval, megint mi a elvihető itt? 1119 00:54:30,090 --> 00:54:33,050 Kiderült, hogy a C-ben vannak nem csak most strings--, és valójában, 1120 00:54:33,050 --> 00:54:36,120 nincs igazán, mert hozzá ezeket a CS50 könyvtár. 1121 00:54:36,120 --> 00:54:37,710 De nem csak ints. 1122 00:54:37,710 --> 00:54:38,990 >> Vannak is úszik. 1123 00:54:38,990 --> 00:54:42,810 És kiderül, egy csomó más adat típusok is, hogy fel fogjuk használni nemsokára. 1124 00:54:42,810 --> 00:54:46,270 Kiderült, ha szeretné, hogy egyetlen karakter, nem egy karaktersorozatot, 1125 00:54:46,270 --> 00:54:47,610 akkor csak egy karakter. 1126 00:54:47,610 --> 00:54:52,350 >> Kiderült, hogy ha szeretne egy bool, egy logikai érték, igaz vagy hamis, csak 1127 00:54:52,350 --> 00:54:56,840 köszönhetően a CS50 könyvtár, most már hozzáadott C bool adattípust is. 1128 00:54:56,840 --> 00:54:59,180 De ez is jelen van Sok más nyelveken is. 1129 00:54:59,180 --> 00:55:04,130 És kiderül, hogy néha szükség nagyobb számban jönnek majd alapértelmezés szerint 1130 00:55:04,130 --> 00:55:05,210 A ints és úszik. 1131 00:55:05,210 --> 00:55:10,590 >> És, sőt, egy dupla egy szám használó nem 32 bit, de 64 bit. 1132 00:55:10,590 --> 00:55:14,990 És egy hosszú, hosszú az a szám, használ nem 32, hanem 64 bit bit, 1133 00:55:14,990 --> 00:55:19,190 illetve lebegőpontos értékek és egész számok, ill. 1134 00:55:19,190 --> 00:55:22,780 Úgyhogy tulajdonképpen most hogy ez a fellépés. 1135 00:55:22,780 --> 00:55:26,150 >> Megyek, hogy menjen előre itt és felkap egy másik program. 1136 00:55:26,150 --> 00:55:32,020 Itt fogok menni előre és nem tartalmazzák CS50.h. 1137 00:55:32,020 --> 00:55:34,910 És hadd menjen, akkor a szokásos IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> És észre fogod venni valamit funky történik itt. 1139 00:55:37,320 --> 00:55:40,592 Ez nem színkód- dolgokat ugyanúgy, mint korábban. 1140 00:55:40,592 --> 00:55:43,550 És kiderül, hogy azért, mert nem adott a dolog egy fájlnevet. 1141 00:55:43,550 --> 00:55:47,270 >> Azt fogom hívni ezt sizeof.c, és a hit mentése. 1142 00:55:47,270 --> 00:55:51,039 És vegyük észre, mi történik a nagyon fehér kód ellen, hogy a fekete hátteret. 1143 00:55:51,039 --> 00:55:52,830 Most legalább van néhány lila ott. 1144 00:55:52,830 --> 00:55:54,490 És ez szintaxis kiemelve. 1145 00:55:54,490 --> 00:55:57,700 >> Azért, mert egészen egyszerűen én már mondta az IDE milyen típusú fájlt 1146 00:55:57,700 --> 00:56:01,060 ez ad neki egy nevet, és konkrétan a fájl kiterjesztését. 1147 00:56:01,060 --> 00:56:03,620 Most menjünk előre, és erre a célra. 1148 00:56:03,620 --> 00:56:08,910 Megyek, hogy menjen előre, és nagyon Egyszerűen nyomtassa ki a following-- bool 1149 00:56:08,910 --> 00:56:11,080 hány százaléka LU. 1150 00:56:11,080 --> 00:56:12,950 >> Majd jönnek vissza hogy csak egy pillanatra. 1151 00:56:12,950 --> 00:56:15,840 És akkor megyek nyomtatási méretét bool. 1152 00:56:15,840 --> 00:56:18,170 És most, csak hogy mentse magam egy ideig, én 1153 00:56:18,170 --> 00:56:20,280 fog tenni egy egész csomó ilyen egyszerre. 1154 00:56:20,280 --> 00:56:24,620 És konkrétan fogok megváltoztatni ezt a char és char. 1155 00:56:24,620 --> 00:56:27,760 Ez az egy, fogok változtatni egy dupla és egy dupla. 1156 00:56:27,760 --> 00:56:31,440 >> Ez az egy, fogok változtatni az úszó és az úszó. 1157 00:56:31,440 --> 00:56:35,670 Ez az egy, megyek megváltoztatni egy int és int. 1158 00:56:35,670 --> 00:56:38,660 És ez, megyek megváltoztatni, hogy egy hosszú, hosszú. 1159 00:56:38,660 --> 00:56:40,840 És ez még mindig figyelembe hosszú ideig, hosszú, hosszú. 1160 00:56:40,840 --> 00:56:44,572 >> És akkor végül adtam magam is sok, húr. 1161 00:56:44,572 --> 00:56:47,030 Kiderült, hogy a C-ott A különleges operátor úgynevezett 1162 00:56:47,030 --> 00:56:50,260 mérete, ami a szó szoros értelmében megy, ha fut, 1163 00:56:50,260 --> 00:56:52,099 mondja el nekünk a méret minden egyes ilyen változókat. 1164 00:56:52,099 --> 00:56:53,890 És ez az egyik módja, most, tudunk kapcsolódni vissza 1165 00:56:53,890 --> 00:56:57,140 a múlt heti vita Az adatok és a reprezentáció. 1166 00:56:57,140 --> 00:57:00,330 >> Hadd menjek előre, és összeállítja mérete pont perjel mérete. 1167 00:57:00,330 --> 00:57:01,210 És lássuk. 1168 00:57:01,210 --> 00:57:05,210 Kiderült, hogy a C, kifejezetten CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 kifejezetten a operációs rendszer Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 amely egy 64 bites operációs rendszer ebben az esetben 1171 00:57:11,100 --> 00:57:14,189 A bool fog használja egy bájt helyet. 1172 00:57:14,189 --> 00:57:16,480 Így méret mérjük, nem bit, de a bájt. 1173 00:57:16,480 --> 00:57:18,690 És emlékszem, hogy egy bájt nyolc bit. 1174 00:57:18,690 --> 00:57:22,030 Tehát egy bool, még akkor is, technikailag csak kell egy 0 vagy 1, 1175 00:57:22,030 --> 00:57:24,092 ez egy kicsit pazarló hogyan mi már meg is valósították. 1176 00:57:24,092 --> 00:57:26,800 Ez valóban megy, hogy egy egész byte-- így minden nullák vannak talán 1177 00:57:26,800 --> 00:57:31,050 egyesekből, vagy valami ilyesmi, vagy csak egy 1 között nyolc bit. 1178 00:57:31,050 --> 00:57:34,962 >> A char, eközben használják a karakter mint egy ASCII karaktert tartalmazó múlt héten, 1179 00:57:34,962 --> 00:57:36,170 lesz egy karakter. 1180 00:57:36,170 --> 00:57:42,340 És hogy synchs fel azzal az elképzeléssel, a hogy azt nem több, mint 256 bits-- inkább, 1181 00:57:42,340 --> 00:57:45,360 synchs fel vele, hogy nem hosszabb, mint 8 bit, amely 1182 00:57:45,360 --> 00:57:47,450 ad nekünk több mint 256 értékeket. 1183 00:57:47,450 --> 00:57:49,680 A kettős fog 8 bájt vagy 64 bit. 1184 00:57:49,680 --> 00:57:50,510 >> Az úszó 4. 1185 00:57:50,510 --> 00:57:51,690 Int 4. 1186 00:57:51,690 --> 00:57:52,980 Hosszú, hosszú 8. 1187 00:57:52,980 --> 00:57:54,716 És egy sor 8. 1188 00:57:54,716 --> 00:57:55,840 De ne aggódj. 1189 00:57:55,840 --> 00:57:57,340 Fogunk húzza vissza, hogy a réteg. 1190 00:57:57,340 --> 00:57:59,940 Kiderült, stringek több, mint 8 bájt. 1191 00:57:59,940 --> 00:58:02,310 >> És valóban, írtunk húrok már, hello world, 1192 00:58:02,310 --> 00:58:03,700 hosszabb, mint 8 bájt. 1193 00:58:03,700 --> 00:58:06,270 De mi jön vissza hogy csak egy pillanatra. 1194 00:58:06,270 --> 00:58:09,690 De elvenni itt a következő. 1195 00:58:09,690 --> 00:58:15,320 >> Minden számítógép csak véges memória mennyisége és a tér. 1196 00:58:15,320 --> 00:58:17,860 Egyszerre csak annyi tárolni fájlokat a Mac vagy PC. 1197 00:58:17,860 --> 00:58:23,030 Akkor csak tárolni annyi programok RAM fut egyszerre, szükségszerűen, még 1198 00:58:23,030 --> 00:58:26,360 A virtuális memória, mert van egy véges mennyiségű RAM. 1199 00:58:26,360 --> 00:58:28,990 >> És csak azért, hogy picture-- ha soha nem nyitotta meg a laptop 1200 00:58:28,990 --> 00:58:31,300 vagy megrendelt extra memória Egy számítógépre, 1201 00:58:31,300 --> 00:58:33,670 Lehet, hogy nem tudják, hogy számítógép belsejében 1202 00:58:33,670 --> 00:58:36,590 van valami, ami úgy néz ki, Egy kicsit olyan, mint ez. 1203 00:58:36,590 --> 00:58:40,540 Tehát ez csak egy közös cég neve Döntő fontosságú, hogy teszi a RAM számítógépek számára. 1204 00:58:40,540 --> 00:58:43,620 És a RAM, ahol programok élni, míg ők fut. 1205 00:58:43,620 --> 00:58:46,630 >> Tehát minden Mac vagy PC, ha megduplázza kattintson a program, és ez megnyitja, 1206 00:58:46,630 --> 00:58:48,921 és megnyitja néhány Word dokumentum vagy valami ilyesmi, 1207 00:58:48,921 --> 00:58:51,764 tárolja az átmeneti, RAM, mert a RAM gyorsabb 1208 00:58:51,764 --> 00:58:53,680 mint a merevlemez, vagy A szilárdtest lemezt. 1209 00:58:53,680 --> 00:58:56,600 Tehát csak ha a programokra megy élni, ha futsz, 1210 00:58:56,600 --> 00:58:58,060 vagy ha fájlok használatban vannak. 1211 00:58:58,060 --> 00:59:00,890 >> Szóval van a dolgok úgy néz mint ez a belsejében a laptop, 1212 00:59:00,890 --> 00:59:03,320 vagy kissé nagyobb dolgok belsejében az asztalon. 1213 00:59:03,320 --> 00:59:07,440 De a legfontosabb az, hogy csak egy véges számú ilyen dolgok. 1214 00:59:07,440 --> 00:59:11,230 És csak véges mennyiségű hardver ül ezen a pult jobb 1215 00:59:11,230 --> 00:59:11,730 itt. 1216 00:59:11,730 --> 00:59:15,920 >> Így biztosan nem tudjuk tárolni végtelen hosszú számokat. 1217 00:59:15,920 --> 00:59:19,030 És mégis, ha úgy gondolja, vissza általános iskola, hány számjegy lehet 1218 00:59:19,030 --> 00:59:21,400 van, hogy a megfelelő A tizedespont? 1219 00:59:21,400 --> 00:59:24,680 Ami azt illeti, hány számjegy lehet van, hogy a bal oldalon a tizedesvessző? 1220 00:59:24,680 --> 00:59:26,300 Valóban, végtelen sok. 1221 00:59:26,300 --> 00:59:30,840 >> Most, mi emberek talán csak tudja, hogy kell kimondani millió 1222 00:59:30,840 --> 00:59:34,990 és milliárd billió, és trillió és trillió. 1223 00:59:34,990 --> 00:59:39,370 És én határainak kitolása én understanding-- vagy my-- Megértem 1224 00:59:39,370 --> 00:59:41,110 szám, de a kiejtése számok. 1225 00:59:41,110 --> 00:59:44,720 De vannak végtelenül nagy a végtelen sok számjegyek a bal oldalon 1226 00:59:44,720 --> 00:59:47,050 vagy jobbra egy tizedes pontossággal. 1227 00:59:47,050 --> 00:59:50,040 >> De a számítógépek csak egy véges mennyiségű memóriát, 1228 00:59:50,040 --> 00:59:53,510 véges számú tranzisztorok, egy véges számú izzók benne. 1229 00:59:53,510 --> 00:59:57,350 Tehát mi történik, ha elfogy a hely? 1230 00:59:57,350 --> 00:59:59,620 Más szóval, ha gondoljon vissza a múlt héten 1231 00:59:59,620 --> 01:00:03,160 amikor beszéltünk a számok magukat, hogy binárisan, 1232 01:00:03,160 --> 01:00:05,480 Tegyük fel, hogy megvan ez 8-bites értéket. 1233 01:00:05,480 --> 01:00:08,290 >> És mi van a hét 1 és egy 0. 1234 01:00:08,290 --> 01:00:10,827 És tegyük fel, hogy azt akarjuk, hozzá 1 erre az értékre. 1235 01:00:10,827 --> 01:00:12,410 Ez egy nagyon nagy szám most. 1236 01:00:12,410 --> 01:00:16,610 >> Ez 254, ha jól emlékszem A matematika a múlt héten jobb. 1237 01:00:16,610 --> 01:00:19,480 De mi van, ha én változtatni hogy jobb szélső 0 1? 1238 01:00:19,480 --> 01:00:22,800 Az egész szám, a Természetesen lesz nyolc 1-eken. 1239 01:00:22,800 --> 01:00:24,050 Tehát még mindig jó. 1240 01:00:24,050 --> 01:00:27,204 >> És ez talán jelent 255, bár a környezettől függően 1241 01:00:27,204 --> 01:00:29,120 ez már valóban képviseli negatív szám. 1242 01:00:29,120 --> 01:00:31,240 De még az, hogy egy másik alkalommal. 1243 01:00:31,240 --> 01:00:34,220 Ez olyan, mint ez körülbelül olyan magas, mint tudok számolni. 1244 01:00:34,220 --> 01:00:35,290 >> Most ez csak 8 bitet. 1245 01:00:35,290 --> 01:00:38,170 És a Mac, biztosan, van módja több, mint 8 bit memória. 1246 01:00:38,170 --> 01:00:39,170 De ez nem is véges. 1247 01:00:39,170 --> 01:00:43,230 Tehát ugyanaz az érv vonatkozik, még akkor is, ha Van több ezek közül a képernyőn. 1248 01:00:43,230 --> 01:00:47,020 >> De mi történik, ha már tárolására ez a szám, 255, 1249 01:00:47,020 --> 01:00:49,290 és szeretne számolni 1 bit magasabb? 1250 01:00:49,290 --> 01:00:51,600 El akar menni 255-256. 1251 01:00:51,600 --> 01:00:55,800 A probléma persze az, hogy ha elkezd számolás nulla, mint a múlt héten, 1252 01:00:55,800 --> 01:00:59,670 akkor nem számít nagy 256, nemhogy 257, 1253 01:00:59,670 --> 01:01:02,584 nemhogy 258, m mert mi történik, ha egy 1? 1254 01:01:02,584 --> 01:01:05,000 Ha nem a régi általános iskola megközelítés, akkor tesz egy 1 van, 1255 01:01:05,000 --> 01:01:08,150 majd 1 plusz 1 2, de ez valóban nulla, akkor végezze a 1, 1256 01:01:08,150 --> 01:01:09,695 hordozzák 1 hordozzák 1. 1257 01:01:09,695 --> 01:01:12,620 Mindezek a dolgok, ezeket 1-es, megy nullára. 1258 01:01:12,620 --> 01:01:17,820 És a szél fel, igen, ahogy valaki rámutatott, 1 a bal oldalon. 1259 01:01:17,820 --> 01:01:22,540 De mindent, amit lehet valóban látni és illik a memóriában 1260 01:01:22,540 --> 01:01:27,960 csak nyolc 0-k, ami azt egy bizonyos ponton, ha egy számítógép, 1261 01:01:27,960 --> 01:01:32,490 Próbáltam számolni elég magas fel, akkor majd tekerje körül, úgy tűnik, 1262 01:01:32,490 --> 01:01:35,850 nullára, vagy talán még negatív számokat, amelyek még alacsonyabbak, mint nulla. 1263 01:01:35,850 --> 01:01:37,260 >> És mi lehet a fajta látni ezt. 1264 01:01:37,260 --> 01:01:39,900 Hadd menjek előre, és levelet egy igazi gyors program itt. 1265 01:01:39,900 --> 01:01:43,690 Hadd menjek előre, és levelet a program neve túlcsordulás. 1266 01:01:43,690 --> 01:01:49,980 Tartalmazza CS50.h tartalmazzák szabvány IO.h-- ó, 1267 01:01:49,980 --> 01:01:51,730 Nagyon hiányzott a szintaxis kiemelést. 1268 01:01:51,730 --> 01:01:54,440 Úgyhogy menteni ezt overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> És most int main void-- és hamarosan fogunk 1270 01:01:57,084 --> 01:01:59,500 jöjjön vissza, hogy miért őrizzük írásban int main semmis. 1271 01:01:59,500 --> 01:02:02,080 De most, nézzük csak ezt , figyelembe magától értetődőnek. 1272 01:02:02,080 --> 01:02:06,200 Adjunk magam int, és inicializálása 0-ra. 1273 01:02:06,200 --> 01:02:11,716 >> Nézzük akkor csinálni int kapok zero-- valójában, csináljuk egy végtelen ciklus 1274 01:02:11,716 --> 01:02:12,590 és hogy mi történik. 1275 01:02:12,590 --> 01:02:22,440 Bár igaz, akkor menjünk ki kell nyomtatni n hány százaléka i, backslash n, plug-n. 1276 01:02:22,440 --> 01:02:27,200 De most, csináljuk n kapja az n + 1. 1277 01:02:27,200 --> 01:02:29,660 >> Más szóval, az egyes iterációs e végtelen ciklusba, 1278 01:02:29,660 --> 01:02:32,550 vessünk n értékét, és adjunk hozzá 1-et, majd a 1279 01:02:32,550 --> 01:02:34,350 tárolja az eredményt vissza n a bal oldalon. 1280 01:02:34,350 --> 01:02:37,150 És valóban, láttunk szintaxis kissé, mint ez, röviden. 1281 01:02:37,150 --> 01:02:39,730 A hűvös trükk helyett az írás mindezt ki, 1282 01:02:39,730 --> 01:02:42,770 akkor valójában azt mondják, egy n plusz 1 egyenlő. 1283 01:02:42,770 --> 01:02:47,480 >> Vagy ha igazán akar, hogy divatos, azt lehet mondani n plus plus pontosvessző. 1284 01:02:47,480 --> 01:02:50,130 De ez utóbbi kettő csak amit hívnám szintaktikai cukor 1285 01:02:50,130 --> 01:02:50,790 Az első dolog. 1286 01:02:50,790 --> 01:02:53,456 >> Az első dolog, konkrétabb, Teljesen rendben van, teljesen korrekt. 1287 01:02:53,456 --> 01:02:55,470 De ez sokkal gyakoribb, azt mondom. 1288 01:02:55,470 --> 01:02:57,210 Tehát mi ezt csak egy pillanatra. 1289 01:02:57,210 --> 01:03:01,685 >> Nézzük most, hogy túlcsordulás, ami úgy hangzik, meglehetősen baljós, pont perjel túlcsordulás. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Lássuk, n kezd elég nagy. 1292 01:03:09,852 --> 01:03:11,310 De lássuk csak, milyen nagy lehet n kapni? 1293 01:03:11,310 --> 01:03:12,870 >> n int. 1294 01:03:12,870 --> 01:03:16,400 Láttunk egy perce a mérete Például, hogy egy int négy bájt. 1295 01:03:16,400 --> 01:03:22,070 Tudjuk a múlt héten négy bájt 32 bit, mert 8-szor 4, ez a 32. 1296 01:03:22,070 --> 01:03:23,460 Hogy lesz 4000000000. 1297 01:03:23,460 --> 01:03:25,802 >> És akár 800.000. 1298 01:03:25,802 --> 01:03:28,510 Ez fog tartani örökre számítanak olyan magas, mint én csak lehet. 1299 01:03:28,510 --> 01:03:30,635 Így fogok menni előre, ahogy talán nemsokára, 1300 01:03:30,635 --> 01:03:34,910 és a hit Ellenőrző C-- őszintén, vezérlés C, egy csomó, ahol kontroll C általánosan 1301 01:03:34,910 --> 01:03:36,034 eszközökkel megszünteti. 1302 01:03:36,034 --> 01:03:38,200 Sajnos, mert ez a fut a felhő, 1303 01:03:38,200 --> 01:03:41,190 Néha a felhő kiköpte annyi cuccot, 1304 01:03:41,190 --> 01:03:44,180 annyira kimenet, ez lesz a hogy egy kicsit az én bemenet 1305 01:03:44,180 --> 01:03:45,630 hogy a felhő. 1306 01:03:45,630 --> 01:03:49,240 Tehát annak ellenére, hogy elérje Kontroll C néhány másodperccel ezelőtt, 1307 01:03:49,240 --> 01:03:53,110 ez határozottan az oldalsó hatása végtelen ciklust. 1308 01:03:53,110 --> 01:03:56,070 >> És így ilyen esetekben vagyunk elhagyják azt lehet. 1309 01:03:56,070 --> 01:03:59,050 És megyünk, hogy egy újabb terminál ablakot ide 1310 01:03:59,050 --> 01:04:03,186 a plusz, ami természetesen nem így, mivel ez még mindig gondol. 1311 01:04:03,186 --> 01:04:05,310 És menjünk előre, és egy kicsit ésszerűbb. 1312 01:04:05,310 --> 01:04:07,768 >> Megyek, hogy menjen előre, és nem ez csak véges sokszor. 1313 01:04:07,768 --> 01:04:10,047 Vegyünk egy hurok, amely utaltam korábban. 1314 01:04:10,047 --> 01:04:10,630 Csináljuk. 1315 01:04:10,630 --> 01:04:13,430 Adj még egy változó int i lesz 0. 1316 01:04:13,430 --> 01:04:17,430 i-nél kisebb, mondjuk, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 És most hadd menjen előre, és a nyomtatási out n százalék i, vessző n. 1318 01:04:24,010 --> 01:04:27,547 És akkor n-- ez még mindig fog tartani örökre. 1319 01:04:27,547 --> 01:04:28,130 Csináljuk. 1320 01:04:28,130 --> 01:04:30,620 >> n lesz n-szer 2. 1321 01:04:30,620 --> 01:04:34,140 Vagy mi lehet divatos és nem szer értéke 2. 1322 01:04:34,140 --> 01:04:37,120 De mondjuk, n egyenlő önmagában alkalommal 2. 1323 01:04:37,120 --> 01:04:39,321 Más szavakkal, ebben a új változata a program, 1324 01:04:39,321 --> 01:04:41,820 Nem akarok örökké várni től, mint 800.000 4000000000. 1325 01:04:41,820 --> 01:04:43,070 Essünk túl rajta. 1326 01:04:43,070 --> 01:04:44,920 >> Nézzük tulajdonképpen kétszeresére n minden alkalommal. 1327 01:04:44,920 --> 01:04:47,660 Mely, visszahívás, duplázás az ellentéte annak, persze. 1328 01:04:47,660 --> 01:04:50,035 És mivel az elmúlt héten már valami újra, és újra, 1329 01:04:50,035 --> 01:04:52,200 és újra, szuper gyors, megduplázása biztosan 1330 01:04:52,200 --> 01:04:58,080 minket 1-től a lehető legnagyobb érték, hogy tudjuk számolni, hogy egy int. 1331 01:04:58,080 --> 01:04:59,750 >> Tehát lássuk, pontosan ezt. 1332 01:04:59,750 --> 01:05:01,720 És mi jön vissza ezt megelőzően hosszú. 1333 01:05:01,720 --> 01:05:04,180 De ez megint olyan, mint Az ismétlés blokk Scratch. 1334 01:05:04,180 --> 01:05:05,600 És akkor használja ezt megelőzően hosszú. 1335 01:05:05,600 --> 01:05:10,170 >> Ez csak azt jelenti száma nullától akár, de nem egyenlő, a 64. 1336 01:05:10,170 --> 01:05:14,285 És minden egyes iterációs e hurok, csak tartsa megnő i. 1337 01:05:14,285 --> 01:05:18,990 Tehát i ++ - és ez általános konstrukció on line 7 csak egy szuper közös utat 1338 01:05:18,990 --> 01:05:22,290 ismétlődő néhány sor kódot, bizonyos számú alkalommal. 1339 01:05:22,290 --> 01:05:23,362 Melyik sornyi kódot? 1340 01:05:23,362 --> 01:05:25,570 Ezek zárójelekkel, ahogy Lehet, hogy gyűjtött most, 1341 01:05:25,570 --> 01:05:26,780 azt jelenti, tegye a következőket. 1342 01:05:26,780 --> 01:05:29,510 >> Ez az, mint Scratch, amikor azt a sárga blokkok 1343 01:05:29,510 --> 01:05:32,680 és más színű, hogy a fajta ölelés vagy ölelés más blokkokat. 1344 01:05:32,680 --> 01:05:34,750 Ez az, amit ezek a göndör támaszra van itt. 1345 01:05:34,750 --> 01:05:40,200 Tehát, ha kaptam szintaxis right-- te Láthatjuk a sárgarépa szimbólum a C eszköz 1346 01:05:40,200 --> 01:05:42,706 ez hányszor voltam próbálják megoldani ezt a problémát. 1347 01:05:42,706 --> 01:05:45,330 Tehát lássuk megszabadulni, hogy az egyik Összesen, és zárja be az ablakot. 1348 01:05:45,330 --> 01:05:46,520 És mi az újat. 1349 01:05:46,520 --> 01:05:51,980 Tedd túlcsordulás, pont perjel túlfolyó, Enter, rendben, 1350 01:05:51,980 --> 01:05:53,090 úgy néz ki rosszul az első. 1351 01:05:53,090 --> 01:05:56,200 De nézzük lépjünk vissza az időben, mert ezt tettem 64 alkalommal. 1352 01:05:56,200 --> 01:05:58,700 >> És észre először, n = 1. 1353 01:05:58,700 --> 01:06:03,110 Másodszor, n értéke 2, majd a 4, akkor 8, majd 16. 1354 01:06:03,110 --> 01:06:09,450 És úgy tűnik, hogy amint Kapok nagyjából 1 milliárd 1355 01:06:09,450 --> 01:06:12,800 ha én dupla újra, hogy adj 2000000000. 1356 01:06:12,800 --> 01:06:14,980 De kiderült, hogy ez közvetlenül a csúcspont. 1357 01:06:14,980 --> 01:06:18,930 >> És ez így valóban túlcsordul Egy int 1000000000 1358 01:06:18,930 --> 01:06:23,514 nagyjából negatív 2 milliárd, hiszen egy egész, 1359 01:06:23,514 --> 01:06:25,430 ellentétben a számokat mi arra feltételezve a múlt héten, 1360 01:06:25,430 --> 01:06:28,397 egyaránt lehet pozitív és negatív a valóságban, és a számítógép. 1361 01:06:28,397 --> 01:06:30,730 És így legalább az egyik az említett bit hatékonyan ellopták. 1362 01:06:30,730 --> 01:06:34,190 Tehát tényleg csak 31 bitet vagy 2000000000 lehetséges értékeit. 1363 01:06:34,190 --> 01:06:38,220 >> De most, a elvihető meglehetősen Egyszerűen, bármit ezek a számok 1364 01:06:38,220 --> 01:06:42,280 és bármi is az matek, valami rossz történik végül, 1365 01:06:42,280 --> 01:06:46,980 mert végül is próbál permutálni a biteket egy túl sokszor. 1366 01:06:46,980 --> 01:06:51,060 És akkor hatékonyan megy minden 1-eket, talán az összes 0-k, vagy talán 1367 01:06:51,060 --> 01:06:54,260 Csak valami más mintát, hogy egyértelműen, a környezettől függően, 1368 01:06:54,260 --> 01:06:56,342 lehet értelmezni, mint egy negatív szám. 1369 01:06:56,342 --> 01:06:59,300 És így úgy tűnik, a legmagasabb I számíthat ebben a konkrét programot 1370 01:06:59,300 --> 01:07:01,210 csak nagyjából 1 milliárd. 1371 01:07:01,210 --> 01:07:02,760 De van egy részleges megoldást. 1372 01:07:02,760 --> 01:07:03,480 Tudod mit? 1373 01:07:03,480 --> 01:07:07,600 >> Hadd változik egy int, hogy egy hosszú, hosszú. 1374 01:07:07,600 --> 01:07:10,633 És hadd menjen előre ide és say-- megyek, hogy 1375 01:07:10,633 --> 01:07:12,290 hogy ez megváltozzon, hogy egy aláíratlan hosszú. 1376 01:07:12,290 --> 01:07:16,860 Vagy nézzük, soha nem emlékszem magam. 1377 01:07:16,860 --> 01:07:19,920 >> Menjünk előre, és a túlfolyó. 1378 01:07:19,920 --> 01:07:21,860 Nem, ez nem az, LLD, köszönöm. 1379 01:07:21,860 --> 01:07:23,430 Így néha Clang hasznos lehet. 1380 01:07:23,430 --> 01:07:27,550 Nem emlékszem, milyen formátumban specifikátor volt egy hosszú, hosszú. 1381 01:07:27,550 --> 01:07:28,950 >> De valóban, Clang mondta. 1382 01:07:28,950 --> 01:07:31,570 Zöld valamilyen jó, még azt jelenti, hogy hibát követett el. 1383 01:07:31,570 --> 01:07:33,190 Ez találgatás, hogy komolyan gondolom LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Szóval hadd vigye tanácsát, hosszú hosszú decimális szám, kivéve, hogy. 1385 01:07:38,750 --> 01:07:43,190 És hadd ismételni azt, pont perjel túlcsordulás, Enter. 1386 01:07:43,190 --> 01:07:45,020 És most mi jó ez. 1387 01:07:45,020 --> 01:07:49,140 >> Ha görgetni vissza az időben, még mindig indul számolás ugyanazon a place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Figyelmeztetés, megkapjuk a egészen 1000000000. 1390 01:07:54,860 --> 01:07:57,070 De aztán biztonságosan eljutni 2000000000. 1391 01:07:57,070 --> 01:08:01,300 >> Aztán eljutunk 4000000000, akkor 8000000000, 17000000000. 1392 01:08:01,300 --> 01:08:03,340 És megyünk a magasabb és magasabb, és a magasabb. 1393 01:08:03,340 --> 01:08:05,740 Végül is ez is eltörik. 1394 01:08:05,740 --> 01:08:09,350 >> Végül, hosszú, hosszú, amely a 64-bites érték, nem 1395 01:08:09,350 --> 01:08:13,660 egy 32 bites érték, ha számít túl magas, akkor átfordul 0. 1396 01:08:13,660 --> 01:08:16,410 És ebben az esetben, mi történetesen a végén egy negatív szám. 1397 01:08:16,410 --> 01:08:17,550 >> Tehát ez a probléma. 1398 01:08:17,550 --> 01:08:20,439 És kiderül, hogy ez a probléma egyáltalán nem olyan bonyolult. 1399 01:08:20,439 --> 01:08:23,060 Bár én már szándékosan indukált ezekkel a hibákat, 1400 01:08:23,060 --> 01:08:26,149 kiderül, azt látjuk, hogy a fajta minden körülöttünk, vagy legalábbis néhány ránk. 1401 01:08:26,149 --> 01:08:28,939 >> Tehát Lego Star Wars, ha amit valaha is játszottam a játékot, 1402 01:08:28,939 --> 01:08:33,830 kiderül, hogy lehet menni a környéken törés dolgokat LEGO világ, 1403 01:08:33,830 --> 01:08:36,640 és gyűjtött érmék, lényegében. 1404 01:08:36,640 --> 01:08:39,200 És ha valaha is játszottam ez a játék túl sok időt, 1405 01:08:39,200 --> 01:08:42,630 mivel ez nem nevezett egyén itt volt, a teljes száma 1406 01:08:42,630 --> 01:08:46,700 érmék, amit gyűjteni van, úgy tűnik, 4000000000. 1407 01:08:46,700 --> 01:08:48,240 >> Most, ez valóban kerekítve. 1408 01:08:48,240 --> 01:08:50,239 Tehát LEGO próbált dolgokat felhasználóbarát. 1409 01:08:50,239 --> 01:08:53,779 Azt nem tette meg, pontosan 2 A 32 erő, egy a múlt héten. 1410 01:08:53,779 --> 01:08:55,310 De 4000000000 oka. 1411 01:08:55,310 --> 01:08:58,979 Úgy tűnik, ezen információk alapján, hogy LEGO, és a cég 1412 01:08:58,979 --> 01:09:02,624 tette ezt a szoftver tényleges, úgy döntött, hogy a maximális számú érmék 1413 01:09:02,624 --> 01:09:04,540 A felhasználó gyűlhet Valóban, 4000000000, 1414 01:09:04,540 --> 01:09:12,069 mert úgy döntött, saját kód használata nem egy hosszú, hosszú, úgy tűnik, 1415 01:09:12,069 --> 01:09:16,140 de csak egy egész, egy aláíratlan egész szám, csak egy pozitív egész szám, melynek 1416 01:09:16,140 --> 01:09:18,089 max érték nagyjából ezt. 1417 01:09:18,089 --> 01:09:19,380 Nos, itt van egy másik vicces. 1418 01:09:19,380 --> 01:09:23,500 Tehát a játék Civilization, amely néhány ismerős lehet, a 1419 01:09:23,500 --> 01:09:26,660 kiderül, hogy évekkel ezelőtt ott Volt egy hiba a játékban, ahol 1420 01:09:26,660 --> 01:09:28,750 ha játszott szerepét Gandhi a játékban, 1421 01:09:28,750 --> 01:09:34,020 helyette, hogy nagyon pacifista, ehelyett hihetetlenül, hihetetlenül 1422 01:09:34,020 --> 01:09:36,399 agresszív, bizonyos körülmények között. 1423 01:09:36,399 --> 01:09:40,529 Különösen az is, hogy civilizáció úgy működik, hogy ha a játékos, 1424 01:09:40,529 --> 01:09:44,680 elfogadja a demokrácia, az agresszivitás pontszámot kap 1425 01:09:44,680 --> 01:09:48,130 csökkentjük két, így mínusz mínusz, majd mínusz mínusz. 1426 01:09:48,130 --> 01:09:50,569 >> Tehát akkor vonjuk 2 a tényleges iterációjával. 1427 01:09:50,569 --> 01:09:56,650 Sajnos, ha a iterációjával van kezdetben 1, és akkor vonjuk 2 belőle 1428 01:09:56,650 --> 01:09:59,050 elfogadása után a demokrácia Gandhi itt talán 1429 01:09:59,050 --> 01:10:02,200 volna, mert nagyon passive-- 1 a skála az agresszivitás. 1430 01:10:02,200 --> 01:10:04,830 De ha elfogadja a demokráciát, akkor megy 1-től negatív 1. 1431 01:10:04,830 --> 01:10:11,470 >> Sajnos, ezek voltak használatával előjel nélküli számok, 1432 01:10:11,470 --> 01:10:15,400 ami azt jelenti, hogy kezelni akár negatív számokat, mintha pozitív. 1433 01:10:15,400 --> 01:10:19,780 És kiderül, hogy a pozitív megfelelőjét negatív 1, 1434 01:10:19,780 --> 01:10:23,480 tipikus számítógépes programok, 255. 1435 01:10:23,480 --> 01:10:27,250 Tehát, ha Gandhi fogad a demokrácia, és ezért 1436 01:10:27,250 --> 01:10:32,470 az agresszivitás pontszám csökkent, valójában tekercsek körül 255 1437 01:10:32,470 --> 01:10:35,470 és teszi őt a legnagyobb agresszív karakter a játékban. 1438 01:10:35,470 --> 01:10:36,930 Így Ráguglizhatsz fel ezt. 1439 01:10:36,930 --> 01:10:39,380 És ez volt, sőt, a véletlen programozás bogár, 1440 01:10:39,380 --> 01:10:43,010 de ez elég lépett A tan azóta. 1441 01:10:43,010 --> 01:10:44,360 >> Ez minden szórakoztató és aranyos. 1442 01:10:44,360 --> 01:10:47,760 További ijesztő az, amikor a tényleges valós eszközök, nem játékok, 1443 01:10:47,760 --> 01:10:48,820 ezeket ugyanazon hibákat. 1444 01:10:48,820 --> 01:10:54,500 Tény, hogy egy évvel ezelőtt egy cikket jött ki a Boeing 787. 1445 01:10:54,500 --> 01:10:56,850 >> És a cikk első pillantásra szól egy kicsit bonyolult. 1446 01:10:56,850 --> 01:11:01,480 De azt mondta, ez egy szoftver sebezhetőségét Boeing 1447 01:11:01,480 --> 01:11:04,790 új 787 Dreamliner Jet okozhatnak pilóták 1448 01:11:04,790 --> 01:11:07,220 elveszíteni az irányítást A repülőgép, esetleg 1449 01:11:07,220 --> 01:11:11,750 közepén repülés, az FAA hivatalnokok figyelmeztetett légitársaságok közelmúltban. 1450 01:11:11,750 --> 01:11:14,520 Ez volt a meghatározás hogy a modell 787 1451 01:11:14,520 --> 01:11:19,770 repülőgép, amelyet meghajtású folyamatosan 248 napot 1452 01:11:19,770 --> 01:11:24,880 elveszíthetik minden váltóáram AC, elektromos teljesítmény miatt a generátor 1453 01:11:24,880 --> 01:11:28,892 vezérlőegységek, GCUs, egyidejűleg megy nem biztos mód. 1454 01:11:28,892 --> 01:11:29,850 Ez a fajta vesztes rám. 1455 01:11:29,850 --> 01:11:35,390 De a feljegyzésben kifejtette, OK, most kaptam, hogy Az állapot okozta szoftver 1456 01:11:35,390 --> 01:11:38,590 számláló belső A generátor vezérlő 1457 01:11:38,590 --> 01:11:44,860 egységek túlcsordul után 248 napos folyamatos teljesítmény. 1458 01:11:44,860 --> 01:11:47,070 Mi kiadó ezt észre, hogy megakadályozzák veszteség 1459 01:11:47,070 --> 01:11:49,300 Az összes elektromos AC erő, ami azt eredményezheti, 1460 01:11:49,300 --> 01:11:50,980 elvesztése a repülőgép irányítását. 1461 01:11:50,980 --> 01:11:55,380 >> Tehát, a szó szoros értelmében, van némi értéke, vagy más, hasonló adattípus, 1462 01:11:55,380 --> 01:11:57,960 használják szoftver Egy valódi repülőgép 1463 01:11:57,960 --> 01:12:00,756 hogy ha folyamatosan a repülőgép elég hosszú, ami látszólag 1464 01:12:00,756 --> 01:12:03,880 lehet a helyzet, ha éppen fut őket folyamatosan és soha kihúzásával 1465 01:12:03,880 --> 01:12:06,810 A repülőgép, úgy tűnik, vagy hagyta az akkumulátorokat meghal, 1466 01:12:06,810 --> 01:12:09,840 végül számítanak fel, és legfeljebb, és fel, és fel, és fel, és fel. 1467 01:12:09,840 --> 01:12:12,150 >> És a természet, a véges mennyiségű memóriát 1468 01:12:12,150 --> 01:12:15,880 kifut, hengerelt vissza nulla vagy egy negatív értéket, 1469 01:12:15,880 --> 01:12:19,920 mellékhatása, amely az ijesztően valóságos valóság 1470 01:12:19,920 --> 01:12:23,970 hogy a gép szüksége lehet újra kell indítani, hatékonyan, 1471 01:12:23,970 --> 01:12:27,290 vagy érinthet, még rosszabb, mint a legyek. 1472 01:12:27,290 --> 01:12:29,230 Tehát az ilyen jellegű problémák még mindig velünk, 1473 01:12:29,230 --> 01:12:33,130 even-- ez egy 2015 cikket, annál is inkább ijesztő 1474 01:12:33,130 --> 01:12:36,100 amikor nem feltétlenül megértésében, értékelésében, vagy előre 1475 01:12:36,100 --> 01:12:38,640 az ilyen jellegű hibák. 1476 01:12:38,640 --> 01:12:42,030 >> Így kiderül, van egy másik rossz dolog adatábrázolás. 1477 01:12:42,030 --> 01:12:47,080 Kiderült, hogy még úszók fajta hibás, mert úszik is, 1478 01:12:47,080 --> 01:12:51,440 Azt javasolt 32 bit, vagy talán 64 ha egy dupla. 1479 01:12:51,440 --> 01:12:53,070 De ez még mindig véges. 1480 01:12:53,070 --> 01:12:57,070 >> És a fogást, hogy ha tudsz tedd végtelen számú számok 1481 01:12:57,070 --> 01:12:59,460 a tizedespont után, nincs módja 1482 01:12:59,460 --> 01:13:02,690 is képviseli az összes lehetséges számok azt tanultuk 1483 01:13:02,690 --> 01:13:04,990 az iskolában is létezik a világon. 1484 01:13:04,990 --> 01:13:08,870 Egy számítógép, lényegében már válasszon egy részhalmaza a számok 1485 01:13:08,870 --> 01:13:10,200 képviseletére pontosan. 1486 01:13:10,200 --> 01:13:12,450 >> Most, a számítógép forduló talán egy kicsit, 1487 01:13:12,450 --> 01:13:17,900 és lehetővé teszi, hogy durván bolt bármennyi lehet, esetleg akar. 1488 01:13:17,900 --> 01:13:20,940 De csak ösztönösen, ha van egy véges számú bitet, 1489 01:13:20,940 --> 01:13:24,560 akkor csak felcserélgette őket oly sok véges módon. 1490 01:13:24,560 --> 01:13:26,570 Tehát akkor nem is véges számú 1491 01:13:26,570 --> 01:13:29,880 A permutáció bitek, minták nullák, 1492 01:13:29,880 --> 01:13:32,940 képviseletére végtelen számok száma, 1493 01:13:32,940 --> 01:13:37,370 ami arra utal, hogy a számítógépek is nagyon jól lehet hazudik nekünk néha. 1494 01:13:37,370 --> 01:13:38,770 >> Tény, hogy csináljuk. 1495 01:13:38,770 --> 01:13:41,239 Hadd menjen vissza CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Hadd menjek előre, és hozzon létre egy kis program 1497 01:13:43,030 --> 01:13:47,940 úgynevezett pontatlanság, azt mutatják, hogy számítógépek, sőt, pontatlan. 1498 01:13:47,940 --> 01:13:51,910 >> És hadd menjen előre, és kezdje bizonyos, hogy a kód előtt, 1499 01:13:51,910 --> 01:13:53,830 és most csak tegye a következőket. 1500 01:13:53,830 --> 01:14:03,640 Hadd menjek előre, és nem printf, százalék f, backslash n, 1 osztva 10. 1501 01:14:03,640 --> 01:14:07,430 Más szóval, leheljük mélyebb 1/10, mint az 1. és 10-zel osztani. 1502 01:14:07,430 --> 01:14:09,760 Bizonyára, a számítógép lehet képviselni 10/01. 1503 01:14:09,760 --> 01:14:13,620 >> Szóval menjünk előre, és a pontatlanság. 1504 01:14:13,620 --> 01:14:14,390 Lássuk. 1505 01:14:14,390 --> 01:14:16,210 Format meghatározza írja dupla. 1506 01:14:16,210 --> 01:14:18,160 De az érv azonban int típusú. 1507 01:14:18,160 --> 01:14:19,040 Mi történik? 1508 01:14:19,040 --> 01:14:21,970 >> Ó, érdekes, így ez egy tanulsága előtt. 1509 01:14:21,970 --> 01:14:26,050 Azt mondom, hé, számítógép mutat nekem egy úszó százalékos f. 1510 01:14:26,050 --> 01:14:28,200 De én így ez 2 ints. 1511 01:14:28,200 --> 01:14:31,120 Így kiderül, tudom javítani ezt egy pár módon. 1512 01:14:31,120 --> 01:14:38,430 >> Tudtam csak kapcsolja be egy 1,0 és 10. a 10.0, ami valóban, 1513 01:14:38,430 --> 01:14:42,390 azzal a hatással konvertáló őket floats-- még remélhetőleg 1514 01:14:42,390 --> 01:14:43,180 ugyanazt a számot. 1515 01:14:43,180 --> 01:14:45,880 Vagy kiderül, hogy van valami látni fogjuk ismét nemsokára. 1516 01:14:45,880 --> 01:14:47,170 Lehet öntött a számokat. 1517 01:14:47,170 --> 01:14:49,880 >> Akkor, ezt a közbevetett kifejezést, akkor lehet mondani, 1518 01:14:49,880 --> 01:14:52,560 hé, számítógép, hogy ezt 10, ami tudom, hogy van egy int. 1519 01:14:52,560 --> 01:14:54,660 De kezelje, kérjük, mintha ez egy úszó. 1520 01:14:54,660 --> 01:14:56,680 De ez olyan, szükségtelenül bonyolult. 1521 01:14:56,680 --> 01:14:59,040 >> A mi szempontunkból ma, nézzük csak a szó szoros értelmében 1522 01:14:59,040 --> 01:15:02,700 Hogy azok lebegőpontos értékek tizedespont, mint ez. 1523 01:15:02,700 --> 01:15:07,060 Hadd menjek előre, és futtassa újra, hogy pontatlanság, jó, pont perjel 1524 01:15:07,060 --> 01:15:08,870 pontatlanság, adja meg. 1525 01:15:08,870 --> 01:15:10,990 OK, keresünk jó. 1526 01:15:10,990 --> 01:15:18,194 >> 1 osztva 10, az én Mac itt is, sőt, 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Most azt tanították az iskolában van kell lennie, végtelen számú 0 években. 1528 01:15:21,360 --> 01:15:23,151 Úgyhogy legalább próbáljuk hogy néhány ilyen. 1529 01:15:23,151 --> 01:15:26,770 Kiderül, hogy a printf egy kicsit tenyésztő is, mint a korábban használt. 1530 01:15:26,770 --> 01:15:30,890 Kiderült, hogy nem kell megadni Csak százalék f, vagy csak százalék i. 1531 01:15:30,890 --> 01:15:33,830 Akkor valóban meghatározza bizonyos ellenőrzési lehetőség van. 1532 01:15:33,830 --> 01:15:36,470 >> Pontosabban, megyek mondani, hé, printf, 1533 01:15:36,470 --> 01:15:39,660 valóban azt mutatják, nekem 10 tizedes pont. 1534 01:15:39,660 --> 01:15:40,820 Tehát úgy néz ki, egy kicsit furcsa. 1535 01:15:40,820 --> 01:15:42,845 De azt mondja százalék, dot, hogy hány szám 1536 01:15:42,845 --> 01:15:44,970 szeretné látni, miután a tizedespont és akkor f 1537 01:15:44,970 --> 01:15:48,340 lapos, csak azért, mert ez az, amit a dokumentáció szerint. 1538 01:15:48,340 --> 01:15:50,080 Hadd menjek előre, és mentse ezt. 1539 01:15:50,080 --> 01:15:52,460 >> És észre is kapok Fáradt beírni a dolgokat. 1540 01:15:52,460 --> 01:15:55,900 Tehát én csak beállítás a fel és le nyíl a kulcsokat itt. 1541 01:15:55,900 --> 01:15:58,710 És ha folyton üti fel, akkor Láthatjuk az összes parancs 1542 01:15:58,710 --> 01:16:01,090 hogy én, vagy helytelenül tette. 1543 01:16:01,090 --> 01:16:04,630 >> És én megyek előre, és most valójában nem használja, hogy látszólag. 1544 01:16:04,630 --> 01:16:11,416 Tedd pontatlanság, dot perjel imprecision-- így 1545 01:16:11,416 --> 01:16:13,290 amit tanítottak, általános iskolában kijelentkezett. 1546 01:16:13,290 --> 01:16:19,010 Még ha nyomtatni a 10 decimális helyezi, sőt, ez 0,10000. 1547 01:16:19,010 --> 01:16:19,840 De tudod mit? 1548 01:16:19,840 --> 01:16:21,150 >> Menjünk egy kicsit kapzsi. 1549 01:16:21,150 --> 01:16:23,990 Mondjuk, mint, mutasd meg 55 pont után a tizedes. 1550 01:16:23,990 --> 01:16:26,160 Nézzük tényleg ezt programozni egy körre. 1551 01:16:26,160 --> 01:16:31,170 Hadd remake make pontatlanság, pont perjel, pontatlanság. 1552 01:16:31,170 --> 01:16:32,390 >> És kész is van. 1553 01:16:32,390 --> 01:16:34,420 A gyermekkori hazugság volt. 1554 01:16:34,420 --> 01:16:48,410 Úgy látszik, 1 osztva 10 valóban 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Mi folyik itt? 1556 01:16:49,740 --> 01:16:53,360 Nos, kiderült, ha a fajta néz elég messzire ki a mögöttes 1557 01:16:53,360 --> 01:16:55,950 ábrázolása ez a szám, valójában 1558 01:16:55,950 --> 01:17:00,400 nem pontosan 1/10 vagy 0,1 és végtelen számú nullát. 1559 01:17:00,400 --> 01:17:01,630 Nos, miért van ez? 1560 01:17:01,630 --> 01:17:06,250 >> Nos, bár ez egy egyszerű számot, emberekből 1 osztva 10, 1561 01:17:06,250 --> 01:17:10,910 ez még mindig egy végtelen sok számokat tudtunk kitalálni. 1562 01:17:10,910 --> 01:17:14,490 De egy számítógép csak képviseli véges sok olyan számokat. 1563 01:17:14,490 --> 01:17:18,710 És így, hatékonyan, amit a számítógép mutatja nekünk van a legközelebb 1564 01:17:18,710 --> 01:17:22,940 közelítés a szám akarunk hinni a 10/01, 1565 01:17:22,940 --> 01:17:27,760 vagy tényleg 0,10000 végtelenségig. 1566 01:17:27,760 --> 01:17:30,425 >> Inkább, bár ez olyan szoros, mint kap. 1567 01:17:30,425 --> 01:17:32,300 És valóban, ha megnézi a motorháztető alatt, 1568 01:17:32,300 --> 01:17:37,050 mint mi itt a keresett 55 tizedesjegy, 1569 01:17:37,050 --> 01:17:39,990 valójában látni a valóságot. 1570 01:17:39,990 --> 01:17:42,610 Most, hogy félre, ha már a valaha a movie-- 1571 01:17:42,610 --> 01:17:45,780 a legtöbb akkor valószínűleg haven't-- de Superman 3 néhány évvel ezelőtt, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor lényegében tőkeáttételes ezt valóság a cég ellopni egy csomó 1573 01:17:49,500 --> 01:17:53,500 A frakciók és frakciói fillérekért, mert a company-- ha jól emlékszem, 1574 01:17:53,500 --> 01:17:57,210 ez már egy while-- lényegében eldobja, ami nem illik 1575 01:17:57,210 --> 01:17:58,790 fogalmára osztva cent. 1576 01:17:58,790 --> 01:18:01,480 >> De ha összeadjuk ezeket apró, pici, apró számok ismét 1577 01:18:01,480 --> 01:18:04,960 és újra, és újra, akkor, mint a az ő esetében, hogy egy jó adag pénzt. 1578 01:18:04,960 --> 01:18:08,010 >> Ugyanez a gondolat volt, letépte Egy újabb, de még most idősebb 1579 01:18:08,010 --> 01:18:10,500 film, az úgynevezett Office Space, ahol a srácok, hogy a film, 1580 01:18:10,500 --> 01:18:13,501 ugyanezt tette, elszúrta teljesen, végül a túl sok 1581 01:18:13,501 --> 01:18:14,666 pénzt a bankszámlájára. 1582 01:18:14,666 --> 01:18:15,800 Ez volt minden, nagyon gyanús. 1583 01:18:15,800 --> 01:18:19,290 De a végén a nap, pontatlanság körülöttünk. 1584 01:18:19,290 --> 01:18:22,240 >> És ez is lehet ijesztően esetében. 1585 01:18:22,240 --> 01:18:25,590 Kiderült, hogy Superman 3 és Office Space félre, ott 1586 01:18:25,590 --> 01:18:28,460 lehet, hanem valóságos világ szálai 1587 01:18:28,460 --> 01:18:32,290 A valóság a pontatlan ábrázolása adatok 1588 01:18:32,290 --> 01:18:34,770 hogy még mi emberek, hogy Ezen a napon nem feltétlenül 1589 01:18:34,770 --> 01:18:38,230 megérteni és ahogy kell, vagy emlékszik olyan gyakran, mint ahogy kellene. 1590 01:18:38,230 --> 01:18:42,950 És valóban, a következő klip egy pillantást néhány nagyon is valós világ 1591 01:18:42,950 --> 01:18:47,730 következményeit, hogy mi történik, ha nem értékelik a pontatlanság, hogy a 1592 01:18:47,730 --> 01:18:50,065 történhet számok ábrázolása. 1593 01:18:50,065 --> 01:18:51,300 >> [VIDEO LEJÁTSZÁS] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, Mindannyian jönnek, hogy elfogadja A gyakran frusztráló problémák 1595 01:18:55,620 --> 01:19:00,310 megy them-- hibák, vírusok, és szoftver hibák, 1596 01:19:00,310 --> 01:19:03,130 kis árakat kell fizetnie a kényelem. 1597 01:19:03,130 --> 01:19:07,800 De high-tech és a nagy sebességű katonai és űrprogram alkalmazások, 1598 01:19:07,800 --> 01:19:12,800 A legkisebb hiba is nagyíthatók a katasztrófa. 1599 01:19:12,800 --> 01:19:18,900 >> Június 4-én, 1996, a tudósok elő indítani egy pilóta nélküli Ariane 5 rakéta. 1600 01:19:18,900 --> 01:19:21,220 Ez vitt tudományos műholdak tervezett 1601 01:19:21,220 --> 01:19:24,600 megállapítani pontosan, hogy a Föld mágneses mezeje kölcsönhatásba lép 1602 01:19:24,600 --> 01:19:27,410 A napszél. 1603 01:19:27,410 --> 01:19:30,800 A rakéta épült az Európai Űrügynökség, 1604 01:19:30,800 --> 01:19:34,370 és elemelkedik a létesítmény partján a Francia Guyana. 1605 01:19:34,370 --> 01:19:37,540 >> -A Körülbelül 37 másodpercet A repülés, először 1606 01:19:37,540 --> 01:19:39,270 észrevette, hogy valami baj van. 1607 01:19:39,270 --> 01:19:42,250 A fúvókákat elfordítható a úgy, hogy azok tényleg nem kellene. 1608 01:19:42,250 --> 01:19:46,580 Mintegy 40 másodperccel a repülés, Egyértelmű, hogy a jármű volt a baj. 1609 01:19:46,580 --> 01:19:48,850 >> És ez mikor történt döntést, hogy elpusztítsa azt. 1610 01:19:48,850 --> 01:19:52,780 A tartomány biztonsági tiszt, a óriási belek, megnyomta a gombot, 1611 01:19:52,780 --> 01:19:58,150 felrobbant a rakéta, mielőtt tudott vált a veszély, hogy a közbiztonság. 1612 01:19:58,150 --> 01:20:01,060 >> -Ez Volt a leány út az Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 És pusztítások elhelyezni, mert egy hiba 1614 01:20:03,960 --> 01:20:05,822 beágyazva a rakéta program. 1615 01:20:05,822 --> 01:20:08,280 -A Probléma az Ariane volt hogy volt egy szám, amely 1616 01:20:08,280 --> 01:20:10,600 szükséges 64 bites kifejezni. 1617 01:20:10,600 --> 01:20:13,590 És azt akarták átalakítani azt egy 16-bites számot. 1618 01:20:13,590 --> 01:20:15,610 Azt feltételezték, hogy a szám soha nem fog 1619 01:20:15,610 --> 01:20:20,980 hogy nagyon nagy, hogy a legtöbb ilyen számjegy egy 64 bites szám volt nullák. 1620 01:20:20,980 --> 01:20:22,440 Tévedtek. 1621 01:20:22,440 --> 01:20:25,060 >> -A Képtelenség egy szoftver, hogy elfogadja 1622 01:20:25,060 --> 01:20:29,510 az a fajta által generált Egy másik volt a gyökere a hiba. 1623 01:20:29,510 --> 01:20:34,350 Szoftverfejlesztés vált nagyon költséges része az új technológia. 1624 01:20:34,350 --> 01:20:38,140 Az Ariane rakéta már nagyon sikeres, annyira a szoftver 1625 01:20:38,140 --> 01:20:41,550 létre azt is használt Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -Az Alapvető probléma az volt, hogy az Ariane 5 gyorsabb volt, felgyorsult gyorsabb. 1627 01:20:47,940 --> 01:20:51,450 És a szoftver nem volt elszámolni, hogy. 1628 01:20:51,450 --> 01:20:55,060 >> -A Megsemmisítése a rakéta volt egy hatalmas pénzügyi katasztrófa, 1629 01:20:55,060 --> 01:20:58,790 minden miatt egy perc szoftver hiba. 1630 01:20:58,790 --> 01:21:01,210 De nem ez volt az első időadatok konverziós problémák 1631 01:21:01,210 --> 01:21:04,820 már sújtja a modern rakétatechnika. 1632 01:21:04,820 --> 01:21:08,050 >> -A 1991-ben, a start Az első Öböl-háború, 1633 01:21:08,050 --> 01:21:10,570 A Patriot rakéta tapasztalt hasonló jellegű 1634 01:21:10,570 --> 01:21:12,800 A számkonverzió probléma. 1635 01:21:12,800 --> 01:21:16,090 És ennek eredményeként, 28 ember, 28 amerikai katonák, 1636 01:21:16,090 --> 01:21:19,080 öltek meg, és körülbelül 100 sebesült, 1637 01:21:19,080 --> 01:21:22,780 amikor a Patriot, ami kellett volna, ellen védő bejövő Scuds, 1638 01:21:22,780 --> 01:21:25,830 nem a tűz egy rakéta. 1639 01:21:25,830 --> 01:21:31,670 >> -Ha Irak lerohanta Kuvait, és Amerikában indított Desert Storm 1991 elején, 1640 01:21:31,670 --> 01:21:35,780 Patriot rakéták akkumulátorok vezényeltek védelme Szaúd-Arábia és Izrael 1641 01:21:35,780 --> 01:21:39,230 az iraki Scud rakéta támadások. 1642 01:21:39,230 --> 01:21:43,810 A Patriot egy amerikai közepes hatótávolságú föld-levegő rendszer, gyártott 1643 01:21:43,810 --> 01:21:45,770 A Raytheon cég. 1644 01:21:45,770 --> 01:21:52,340 >> -A Méret a Patriot elfogó maga körülbelül mintegy 20 láb hosszú. 1645 01:21:52,340 --> 01:21:55,230 És a súlya körülbelül 2000 fontot. 1646 01:21:55,230 --> 01:21:59,320 És ez hordozza a robbanófej kb, Azt hiszem, ez nagyjából 150 fontot. 1647 01:21:59,320 --> 01:22:03,930 És a robbanófej maga nagy robbanó, amely 1648 01:22:03,930 --> 01:22:07,330 van töredékek körül. 1649 01:22:07,330 --> 01:22:11,680 A ház a robbanófej van célja, hogy úgy viselkednek, mint sörét. 1650 01:22:11,680 --> 01:22:14,110 >> -A Rakéták hajtják Négy per konténer, 1651 01:22:14,110 --> 01:22:17,130 és szállítják a félpótkocsit. 1652 01:22:17,130 --> 01:22:24,930 >> -A Patriot rakétaelhárító rendszert nyúlik vissza, legalább 20 éve. 1653 01:22:24,930 --> 01:22:28,420 Eredetileg tervezték mint egy légvédelmi rakéta 1654 01:22:28,420 --> 01:22:30,720 lő le az ellenséges repülőgépek. 1655 01:22:30,720 --> 01:22:34,500 Az első Öböl-háború, amikor a háború jött, 1656 01:22:34,500 --> 01:22:39,745 a hadsereg akarta felhasználni arra, hogy lő le Scuds, nem repülőgépek. 1657 01:22:39,745 --> 01:22:43,620 >> Az iraki légierő volt nem annyira a probléma. 1658 01:22:43,620 --> 01:22:46,670 De a hadsereg aggódnak Scuds. 1659 01:22:46,670 --> 01:22:50,170 És így igyekeztek frissíteni a Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Egy ellenséges rakéta utazás Mach 5 1661 01:22:52,800 --> 01:22:55,830 volt, lesz elég ambiciózusak. 1662 01:22:55,830 --> 01:22:58,490 De amikor a Patriot rohant helyezését, 1663 01:22:58,490 --> 01:23:02,860 A hadsereg nem volt tudatában a Iraki módosítás, amely az 1664 01:23:02,860 --> 01:23:05,930 azok Scuds szinte lehetetlen eltalálni. 1665 01:23:05,930 --> 01:23:10,740 >> Mi történt a Scuds hogy jöttek be instabilak voltak. 1666 01:23:10,740 --> 01:23:11,692 Őket imbolyog. 1667 01:23:11,692 --> 01:23:14,910 Ennek oka az volt, Az irakiak, annak érdekében, 1668 01:23:14,910 --> 01:23:18,280 hogy 600 km ki a 300 kilométeres 1669 01:23:18,280 --> 01:23:21,700 hatótávolságú rakéta került súly ki az első robbanófej. 1670 01:23:21,700 --> 01:23:23,390 Tették a robbanófej könnyebb. 1671 01:23:23,390 --> 01:23:27,330 >> Tehát most a Patriot próbál, hogy a Scud. 1672 01:23:27,330 --> 01:23:30,230 És a legtöbb időt, a túlnyomó többsége az idő, 1673 01:23:30,230 --> 01:23:32,940 ez csak repül a Scud. 1674 01:23:32,940 --> 01:23:37,260 Miután a Patriot-üzemeltetők rájött, hogy a Patriot tévesztett célt, 1675 01:23:37,260 --> 01:23:41,690 úgy felrobbantotta a Patriot robbanófej hogy elkerülje az esetleges baleseteket, ha 1676 01:23:41,690 --> 01:23:44,570 hagytuk leesik a földre. 1677 01:23:44,570 --> 01:23:48,790 >> -Ez Volt az, amit a legtöbb ember látta, azokat a nagy tűzgolyó az égen, 1678 01:23:48,790 --> 01:23:54,550 és félreértik, mint metszetét Scud robbanófejeket. 1679 01:23:54,550 --> 01:23:56,630 >> -Bár Az éjszaka égbolt, Patriots megjelent 1680 01:23:56,630 --> 01:24:00,370 hogy sikeresen pusztító Scuds, a Dhahran, 1681 01:24:00,370 --> 01:24:03,360 nem lehetett tévedés sem a teljesítményt. 1682 01:24:03,360 --> 01:24:07,970 Ott, a Patriot radarrendszer elveszett nyom a bejövő Scud, 1683 01:24:07,970 --> 01:24:10,721 és soha nem indított kellő egy szoftver hiba. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Ez volt az izraeliek, aki először fedezte hogy minél hosszabb a rendszer volt, 1686 01:24:18,940 --> 01:24:22,690 annál nagyobb a időeltérés vált, mivel egy órát ágyazott 1687 01:24:22,690 --> 01:24:24,810 A rendszer számítógépét. 1688 01:24:24,810 --> 01:24:28,210 >> -közelítòleg Előtt két héttel A tragédia Dhahran, 1689 01:24:28,210 --> 01:24:30,770 Az izraeliek jelentett A Honvédelmi Minisztérium 1690 01:24:30,770 --> 01:24:32,590 hogy a rendszer időveszteség. 1691 01:24:32,590 --> 01:24:35,360 Körülbelül nyolc órát, vagy futás, észrevették, hogy a rendszer 1692 01:24:35,360 --> 01:24:37,720 vált észrevehetően kevésbé pontos. 1693 01:24:37,720 --> 01:24:41,900 A Honvédelmi Minisztérium reagált mondja minden a Patriot akkumulátorok 1694 01:24:41,900 --> 01:24:44,950 hogy ne hagyja el a rendszert a hosszú ideig. 1695 01:24:44,950 --> 01:24:49,160 Soha nem mondta, amit sokáig was-- nyolc óra, 10 óra, 1000 óra. 1696 01:24:49,160 --> 01:24:51,360 Senki sem tudta. 1697 01:24:51,360 --> 01:24:53,380 >> -A Patriot akkumulátor állomásozott a laktanyában 1698 01:24:53,380 --> 01:24:58,350 A Dhahran és hibás belső óra volt a több mint 100 óra 1699 01:24:58,350 --> 01:25:01,670 én éjjel február 25. 1700 01:25:01,670 --> 01:25:05,917 >> -Ez Lánctalpas idő pontossággal A mintegy egy tized másodperc. 1701 01:25:05,917 --> 01:25:08,000 Most, egy tizedmásodperc egy érdekes szám, 1702 01:25:08,000 --> 01:25:11,920 mert nem lehet kifejezni bináris pontosan, mely 1703 01:25:11,920 --> 01:25:16,820 azt jelenti, hogy nem lehet kifejezni pontosan minden modern digitális számítógép. 1704 01:25:16,820 --> 01:25:18,540 Nehéz elhinni. 1705 01:25:18,540 --> 01:25:21,210 >> De használja ezt a példát. 1706 01:25:21,210 --> 01:25:23,540 Nézzük száma egyharmadával. 1707 01:25:23,540 --> 01:25:27,350 Egy harmadik nem lehet kifejezett tizedes pontosan. 1708 01:25:27,350 --> 01:25:32,080 Egyharmada 0.333 folyik a végtelenbe. 1709 01:25:32,080 --> 01:25:36,480 >> Nincs módja, hogy a abszolút pontossága a tizedes. 1710 01:25:36,480 --> 01:25:39,560 Ez pontosan az a fajta probléma hogy történt a Patriot. 1711 01:25:39,560 --> 01:25:44,100 Minél hosszabb a rendszer futott, a rosszabb az idő hiba lett. 1712 01:25:44,100 --> 01:25:48,890 >> -Miután 100 üzemóra, az Hiba az időben még csak mintegy egyharmada 1713 01:25:48,890 --> 01:25:50,600 a második. 1714 01:25:50,600 --> 01:25:54,210 De tekintve a célba rakéta utazás Mach 5, 1715 01:25:54,210 --> 01:25:58,710 azt eredményezte, hogy a nyomkövető hiba több mint 600 méter. 1716 01:25:58,710 --> 01:26:02,120 Lenne egy végzetes hiba a katonáknak, hogy mit 1717 01:26:02,120 --> 01:26:08,940 történt egy Scud dob volt által észlelt korai figyelmeztető műholdak 1718 01:26:08,940 --> 01:26:12,860 és tudták, hogy a Scud volt jön az általános irányt. 1719 01:26:12,860 --> 01:26:15,320 Nem tudták, hol jön. 1720 01:26:15,320 --> 01:26:18,250 >> -Ez Most már csak a radar eleme a Patriot rendszer 1721 01:26:18,250 --> 01:26:23,190 védekező Dhahran hogy keresse meg és tartsa track a bejövő ellenséges rakétát. 1722 01:26:23,190 --> 01:26:24,609 >> -A Radar nagyon okos. 1723 01:26:24,609 --> 01:26:26,650 Ez valóban követni a helyzet a Scud, 1724 01:26:26,650 --> 01:26:30,350 majd megjósolni, ahol valószínűleg lesz a következő alkalommal, amikor a radar küldött 1725 01:26:30,350 --> 01:26:31,420 egy impulzus ki. 1726 01:26:31,420 --> 01:26:33,110 Ez volt az úgynevezett egy sor kapu. 1727 01:26:33,110 --> 01:26:37,660 >> -Akkor, Ha a Patriot úgy dönt, elég időt 1728 01:26:37,660 --> 01:26:42,450 telt, hogy menjen vissza és ellenőrizze a következő hely erre észlelt objektum, 1729 01:26:42,450 --> 01:26:43,600 megy vissza. 1730 01:26:43,600 --> 01:26:48,650 Tehát, ha visszament a rossz helyre, majd nem látja objektumot. 1731 01:26:48,650 --> 01:26:52,160 És úgy dönt, hogy nem volt tárgy, ez egy hamis felderítése, 1732 01:26:52,160 --> 01:26:53,930 és eldobja a pályán. 1733 01:26:53,930 --> 01:26:57,030 >> -A Beérkező Scud eltűnt a radar képernyőjén. 1734 01:26:57,030 --> 01:27:00,260 És másodperccel később csapódott a laktanyába. 1735 01:27:00,260 --> 01:27:06,150 A Scud megölte 28, és ez volt az utolsó egy égetett az első Öböl-háború. 1736 01:27:06,150 --> 01:27:11,960 >> Tragikus, a frissített szoftver megérkezett Dhahran a következő napon. 1737 01:27:11,960 --> 01:27:14,930 A szoftver hiba volt javítva, záró 1738 01:27:14,930 --> 01:27:19,806 Egy fejezet a problémás története a Patriot rakéta. 1739 01:27:19,806 --> 01:27:20,729 >> [VIDEO LEJÁTSZÁS] 1740 01:27:20,729 --> 01:27:23,520 David J. MALAN: Tehát ez az egész, hogy azt mondják, hogy ezek a kérdések a túlfolyó 1741 01:27:23,520 --> 01:27:25,860 és pontatlanság túlságosan is valóságos. 1742 01:27:25,860 --> 01:27:26,920 Tehát hogyan jutottunk el idáig? 1743 01:27:26,920 --> 01:27:28,895 Kezdtük csak beszélünk printf. 1744 01:27:28,895 --> 01:27:31,270 Ismét ezt a funkciót, hogy kiírja valamit a képernyőn, 1745 01:27:31,270 --> 01:27:33,450 és bevezettük azt követően néhány egyéb funkciók 1746 01:27:33,450 --> 01:27:34,945 Az úgynevezett CS50 könyvtárában. 1747 01:27:34,945 --> 01:27:36,910 És mi továbbra is ezeket a megfelelő időben. 1748 01:27:36,910 --> 01:27:40,760 És mi, különösen, használt get húr, és kap int, és most is kap úszó, 1749 01:27:40,760 --> 01:27:44,410 megint mások még mindig találkozunk és használja magunkat nemsokára. 1750 01:27:44,410 --> 01:27:47,220 >> Esetenként azonban a már már látja szükségesnek, 1751 01:27:47,220 --> 01:27:50,520 tárolni, amit azok a funkciók, kéz vissza? 1752 01:27:50,520 --> 01:27:52,920 Ők adják vissza minket egy string, vagy egy int, vagy float. 1753 01:27:52,920 --> 01:27:56,070 És néha meg kell tenni, hogy a húr, vagy int, vagy float, valahol. 1754 01:27:56,070 --> 01:28:00,100 >> És tárolja azokat a dolgokat, emlékszem csak mint Scratch, van változó. 1755 01:28:00,100 --> 01:28:03,260 De ellentétben a Scratch, C van tényleges típusai 1756 01:28:03,260 --> 01:28:05,530 A variables-- adatok típusú, több generally-- 1757 01:28:05,530 --> 01:28:08,640 köztük egy string, int, a lebegnek, és ezek a mások még. 1758 01:28:08,640 --> 01:28:12,321 >> És amikor kijelentjük változókat C, kénytelenek leszünk kinyilvánítjuk adattípusok. 1759 01:28:12,321 --> 01:28:14,820 Ez nem valami fogunk kell tennie, később a félévben 1760 01:28:14,820 --> 01:28:16,810 ahogy átmenet más nyelveken. 1761 01:28:16,810 --> 01:28:19,610 De most van szükségünk a priori előre, 1762 01:28:19,610 --> 01:28:24,370 megmagyarázni, hogy a számítógép milyen típusú A változó azt akarjuk, hogy nekünk. 1763 01:28:24,370 --> 01:28:27,290 >> Most, eközben nyomtatni azok adattípusok, 1764 01:28:27,290 --> 01:28:29,570 el kell mondanunk printf, mire számíthat. 1765 01:28:29,570 --> 01:28:32,450 És láttuk százalék s vonósokra, és a százalékos i egész számok, 1766 01:28:32,450 --> 01:28:33,790 és még néhány más már. 1767 01:28:33,790 --> 01:28:37,237 És ezek csak a követelmények A vizuális megjelenítés 1768 01:28:37,237 --> 01:28:38,070 ezt az információt. 1769 01:28:38,070 --> 01:28:42,080 >> És ezek mindegyikét is lehet parametrizálhatók vagy csípett valamilyen módon, 1770 01:28:42,080 --> 01:28:45,370 Ha azt szeretnénk, hogy további ellenőrzési a kimenet típusától, amit kap. 1771 01:28:45,370 --> 01:28:49,604 És, sőt, kiderül, hogy nem csak a van backslash n egy új sort. 1772 01:28:49,604 --> 01:28:52,520 Van még valami úgynevezett fordított perjel r kocsi vissza, amely 1773 01:28:52,520 --> 01:28:54,360 ez inkább egy régi iskola írógép, 1774 01:28:54,360 --> 01:28:57,690 valamint a Windows több éve alkalmazzák. 1775 01:28:57,690 --> 01:28:59,690 >> Van backslash t fülek. 1776 01:28:59,690 --> 01:29:03,170 Kiderült, hogy ha azt akarjuk, hogy idézőjel belsejében egy húr, 1777 01:29:03,170 --> 01:29:05,000 emlékeztet arra, hogy már használt idézőjel kettős 1778 01:29:05,000 --> 01:29:07,900 idézet a bal és a jobb végződik a mi húrok eddig. 1779 01:29:07,900 --> 01:29:09,420 Hogy úgy tűnik, hogy megzavarja a dolgokat. 1780 01:29:09,420 --> 01:29:12,503 >> Ha azt szeretnénk, hogy egy dupla idézet a közepén egy string-- és valóban, 1781 01:29:12,503 --> 01:29:13,670 ez zavaró, hogy látni. 1782 01:29:13,670 --> 01:29:17,120 És ezért van, hogy elkerülje, hogy úgy beszél, egy idézőjel valami 1783 01:29:17,120 --> 01:29:18,860 mint, a szó szoros értelmében, backslash idézőjel. 1784 01:29:18,860 --> 01:29:20,230 És van néhány más is. 1785 01:29:20,230 --> 01:29:24,540 És mi többet látni ezeket a a tényleges felhasználás előtt hosszú. 1786 01:29:24,540 --> 01:29:27,930 >> Úgyhogy most átmenet adatokat, és a képviseletet, 1787 01:29:27,930 --> 01:29:30,820 és aritmetikai operátorok, mind amelyek adott nekünk néhány épület 1788 01:29:30,820 --> 01:29:32,070 blokkok, amellyel játszani. 1789 01:29:32,070 --> 01:29:34,481 De most nézzük valóban ad minket a többi szókincs 1790 01:29:34,481 --> 01:29:36,230 hogy már volt múlt héten Scratch 1791 01:29:36,230 --> 01:29:39,350 azáltal, hogy egy pillantást néhány más konstrukciókat C-- nem mindet. 1792 01:29:39,350 --> 01:29:41,680 De az ötletek vagyunk hamarosan látni tényleg csak 1793 01:29:41,680 --> 01:29:45,610 hangsúlyozni a fordítást Egy nyelv, Scratch, egy másik, C. 1794 01:29:45,610 --> 01:29:48,470 >> És idővel, akkor vegye fel További eszközök számára eszközkészlet 1795 01:29:48,470 --> 01:29:49,820 hogy úgy mondjam, szintaktikailag. 1796 01:29:49,820 --> 01:29:54,190 És valóban, látni fogja, hogy az ötleteket Most mégis ismerős a múlt héten. 1797 01:29:54,190 --> 01:29:55,200 Tehát lássuk ezt. 1798 01:29:55,200 --> 01:29:58,870 >> Menjünk előre, és felkap egy programot hogy valóban használ néhány kifejezést, 1799 01:29:58,870 --> 01:30:00,720 a logikai kifejezés. 1800 01:30:00,720 --> 01:30:02,810 Hadd menjen előre ide és hozzon létre egy új fájlt. 1801 01:30:02,810 --> 01:30:06,090 Hívom ezt condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Hadd menjek előre, és tartalmazza a CS50 könyvtár. 1803 01:30:09,350 --> 01:30:12,640 És hadd menjen előre, és tartalmaznia szabvány IO.h számára funkciók, 1804 01:30:12,640 --> 01:30:14,690 és a printf, és több volt. 1805 01:30:14,690 --> 01:30:18,900 Hadd adjak magamnak, hogy boilerplate a int main void, melynek tisztázására fogunk 1806 01:30:18,900 --> 01:30:20,360 jönnek vissza a jövőben. 1807 01:30:20,360 --> 01:30:23,820 >> Most hadd menjen előre, és ad magam egy int keresztül get int. 1808 01:30:23,820 --> 01:30:25,970 Akkor hadd menjen előre, és erre a célra. 1809 01:30:25,970 --> 01:30:30,150 Azt akarom mondani, ha az i less-- nézzük megkülönböztetni a pozitív, negatív, 1810 01:30:30,150 --> 01:30:31,260 vagy nulla értéket. 1811 01:30:31,260 --> 01:30:36,630 >> Tehát ha én kevesebb, mint nulla, hadd Csak ki ez a program egyszerűen azt mondják, 1812 01:30:36,630 --> 01:30:42,370 negatív, backslash n, máshol ha nagyobb, mint nulla. 1813 01:30:42,370 --> 01:30:47,030 Most, persze, azt fogja mondani printf pozitív, backslash n. 1814 01:30:47,030 --> 01:30:50,690 És akkor még if-- tehettem ezt. 1815 01:30:50,690 --> 01:30:53,410 >> Tehettem, ha i értéke 0. 1816 01:30:53,410 --> 01:30:55,840 De azt is, hogy a Legalább egy hiba már. 1817 01:30:55,840 --> 01:30:59,480 Emlékezzünk, hogy az egyenlőségjel van nem egyenlő, mint mi, emberek is tudják. 1818 01:30:59,480 --> 01:31:01,010 >> De ez az értékadó operátor. 1819 01:31:01,010 --> 01:31:05,640 És nem akarom, hogy a 0-ta jobbra és betette i a bal oldalon. 1820 01:31:05,640 --> 01:31:11,810 Így elkerülhető ez zavar, vagy talán visszaélés egyenlőségjel, 1821 01:31:11,810 --> 01:31:14,740 emberek úgy döntött, néhány évvel ezelőtt hogy sok programozási nyelvek 1822 01:31:14,740 --> 01:31:18,000 ha azt szeretné, hogy ellenőrizze az egyenlőség a bal és a jobb oldalon, 1823 01:31:18,000 --> 01:31:19,635 jelenleg használt egyenlő az egyenlők. 1824 01:31:19,635 --> 01:31:21,010 Tehát bejön egyenlőségjel kétszer. 1825 01:31:21,010 --> 01:31:25,600 Ha szeretne hozzárendelni jobbról balra, akkor használja egy egyenlőségjel. 1826 01:31:25,600 --> 01:31:29,360 Így lehet tenni this-- mást ha i értéke zérus. 1827 01:31:29,360 --> 01:31:31,710 >> Én aztán megy, és Kinyitom a kapcsos zárójelek 1828 01:31:31,710 --> 01:31:36,087 és azt mondják, printf 0, backslash n, kész. 1829 01:31:36,087 --> 01:31:38,170 De ne feledjük, hogy ezek a villa az úton tud dolgozni. 1830 01:31:38,170 --> 01:31:39,836 És tényleg, gondoljunk csak a logika. 1831 01:31:39,836 --> 01:31:41,510 i egy számot. 1832 01:31:41,510 --> 01:31:43,320 Ez egy egész, konkrétan. 1833 01:31:43,320 --> 01:31:48,600 És ez azt jelenti, hogy lesz kevesebb mint 0, vagy nagyobb, mint 0, vagy 0. 1834 01:31:48,600 --> 01:31:51,600 Tehát van egyfajta ezt hallgatólagos alapértelmezett esetben. 1835 01:31:51,600 --> 01:31:54,920 >> És így tudtuk, csakúgy, mint Scratch, eltekinthet a else if, 1836 01:31:54,920 --> 01:31:55,747 és csak azt mondják mást. 1837 01:31:55,747 --> 01:31:57,830 Logikus, ha a programozó tudja, ott csak 1838 01:31:57,830 --> 01:32:01,635 három vödör, amelybe egy szcenárió fall-- az első, 1839 01:32:01,635 --> 01:32:03,510 a második, vagy a harmadik ebben case-- nem 1840 01:32:03,510 --> 01:32:07,100 zavarja hozzáadjuk a további pontossági és a kiegészítő logika ott. 1841 01:32:07,100 --> 01:32:09,690 Csak megy előre a Alapesetben itt a mást. 1842 01:32:09,690 --> 01:32:11,950 >> Most menjünk előre mentése után, hogy 1843 01:32:11,950 --> 01:32:15,760 feltételek dot perjel conditions-- nem egy nagy felhasználói felület, 1844 01:32:15,760 --> 01:32:18,914 mert nem kéri a felhasználó, ahogy korábban említettem. 1845 01:32:18,914 --> 01:32:19,580 De ez rendben van. 1846 01:32:19,580 --> 01:32:20,454 Majd tartsa egyszerű. 1847 01:32:20,454 --> 01:32:21,890 Próbáljuk a szám 42. 1848 01:32:21,890 --> 01:32:23,240 És ez pozitív. 1849 01:32:23,240 --> 01:32:26,120 Próbáljuk száma negatív 42, negatív. 1850 01:32:26,120 --> 01:32:28,244 >> Próbáljuk a 0 értéket. 1851 01:32:28,244 --> 01:32:29,160 És valóban, ez működik. 1852 01:32:29,160 --> 01:32:33,900 Most látni fogsz a problémákat, mielőtt Hosszú, tesztelés dolog háromszor, 1853 01:32:33,900 --> 01:32:34,980 valószínűleg nem elegendő. 1854 01:32:34,980 --> 01:32:37,438 Talán szeretnénk kipróbálni néhány nagyobb számban, néhány kisebb 1855 01:32:37,438 --> 01:32:40,520 számok, néhány sarok esetekben, fogunk jönni, hogy leírja őket. 1856 01:32:40,520 --> 01:32:42,500 >> De most, ez egy nagyon egyszerű programot. 1857 01:32:42,500 --> 01:32:45,160 És biztos vagyok benne, logikusan, hogy beleesik három esetben. 1858 01:32:45,160 --> 01:32:49,360 És valóban, bár mi csak összpontosított potenciális hátrányai 1859 01:32:49,360 --> 01:32:53,480 a pontatlansággal és túlfolyó, a valóság, ahol sok CS50 problémáit, 1860 01:32:53,480 --> 01:32:56,000 nem fogunk aggódni körülbelül, minden alkalommal, 1861 01:32:56,000 --> 01:32:59,050 ezeket a kérdéseket a túlcsordulás és pontatlanság, mert, sőt, a C, 1862 01:32:59,050 --> 01:33:01,889 ez valójában egyáltalán nem olyan könnyű elkerülni ezeket a dolgokat. 1863 01:33:01,889 --> 01:33:04,180 Ha azt szeretnénk, hogy számít fel nagyobb, és nagyobb, és nagyobb, 1864 01:33:04,180 --> 01:33:07,510 Kiderült vannak technikák használhatják, gyakran olyan dolgokat az úgynevezett 1865 01:33:07,510 --> 01:33:11,240 könyvtárak, gyűjtemények kódot, hogy mások azt írta, hogy tudod használni, 1866 01:33:11,240 --> 01:33:13,910 és más nyelvek, mint a Java és mások, valójában 1867 01:33:13,910 --> 01:33:15,800 hogy sokkal könnyebb számolni még magasabb. 1868 01:33:15,800 --> 01:33:19,810 Így tényleg néhány ilyen veszélyeket függvényében a használt nyelvtől. 1869 01:33:19,810 --> 01:33:22,710 És az elkövetkező hetekben lásd, milyen veszélyes C igazán 1870 01:33:22,710 --> 01:33:24,950 lehet, ha nem megfelelően használják. 1871 01:33:24,950 --> 01:33:27,610 De onnan, és Python, és a JavaScript, akkor 1872 01:33:27,610 --> 01:33:32,620 mi réteg néhány további védelmet, és fuss kevesebb ezeknek a kockázatoknak. 1873 01:33:32,620 --> 01:33:35,820 >> Tehát lássuk, hogy egy kicsit több Érdekes logikai programunk. 1874 01:33:35,820 --> 01:33:39,110 Tehát hadd menjen előre, és hozzon létre nevű program logikai 1875 01:33:39,110 --> 01:33:43,804 Csak így tudok játszani néhány tényleges logika, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Majd csak illessze be néhány kódot korábban ezért kapok vissza 1877 01:33:46,870 --> 01:33:49,950 hogy ezt a szép kiindulópontja. 1878 01:33:49,950 --> 01:33:53,980 >> Hadd most nem char C. vagyok majd adja meg a nevét a C 1879 01:33:53,980 --> 01:33:58,510 csak azért, mert a hagyományos, kap egy karaktert a felhasználótól. 1880 01:33:58,510 --> 01:34:00,730 És legyen úgy, mintha Én megvalósítjuk 1881 01:34:00,730 --> 01:34:04,130 E Rm program az eltávolítási programot, mielőtt hogy kéri a felhasználó 1882 01:34:04,130 --> 01:34:05,400 eltávolítani a fájlt. 1883 01:34:05,400 --> 01:34:06,750 Hogy mi ez? 1884 01:34:06,750 --> 01:34:11,090 >> Azt akarom mondani, ha a C egyenlő egyenlő, idézet idézőjel bezárva, 1885 01:34:11,090 --> 01:34:16,304 y, akkor megyek, hogy vállalja hogy a felhasználó által választott igen. 1886 01:34:16,304 --> 01:34:17,470 Csak megyek nyomtatni igen. 1887 01:34:17,470 --> 01:34:19,440 Ha ez valóban az írás Az eltávolító program, 1888 01:34:19,440 --> 01:34:21,420 tudtuk eltávolítani a fájlt több sornyi kódot. 1889 01:34:21,420 --> 01:34:22,461 De majd, hogy ez egyszerű. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Else if c értéke egyenlő n-- és most itt fogok mondani, 1892 01:34:31,250 --> 01:34:32,980 A felhasználó kötelessége, hogy nem mentek. 1893 01:34:32,980 --> 01:34:34,360 És akkor még, tudod mit? 1894 01:34:34,360 --> 01:34:36,200 Nem tudom, mi mást a felhasználó fog írja. 1895 01:34:36,200 --> 01:34:38,533 Tehát én csak azt fogja mondani, hogy a hogy egy hiba, bármi 1896 01:34:38,533 --> 01:34:40,070 ő valójában gépelt. 1897 01:34:40,070 --> 01:34:41,180 >> Tehát, mi folyik itt? 1898 01:34:41,180 --> 01:34:44,530 Van egy alapvető különbség versus mit tettem a múltban. 1899 01:34:44,530 --> 01:34:49,300 Dupla idézőjelek, idézőjelek, dupla idézetek, és még egyetlen idézetek, 1900 01:34:49,300 --> 01:34:50,170 aposztrófot. 1901 01:34:50,170 --> 01:34:52,860 Kiderült C, hogy amikor Szeretné, hogy írjon egy szöveget, 1902 01:34:52,860 --> 01:34:56,680 Ön nem használja idézőjelek, ahogy mi már használ minden ezúttal printf. 1903 01:34:56,680 --> 01:35:02,030 >> De ha azt akarjuk, hogy foglalkozni csak egy egyetlen karakter, egy úgynevezett char, 1904 01:35:02,030 --> 01:35:03,780 akkor valójában egyszerű idézőjeleket. 1905 01:35:03,780 --> 01:35:05,450 Azok, akik már programozott előtt, lehet, hogy nem 1906 01:35:05,450 --> 01:35:07,850 kellett aggódni ezt megkülönböztetés bizonyos nyelveken. 1907 01:35:07,850 --> 01:35:09,450 A C-ben, ez nem számít. 1908 01:35:09,450 --> 01:35:12,560 És így, ha kapok egy char és szeretnék összehasonlítani, hogy char segítségével egyenlők 1909 01:35:12,560 --> 01:35:18,350 megegyezik néhány levelet, mint y, vagy n, én, Valóban, szükség van az egységes idézetek. 1910 01:35:18,350 --> 01:35:19,770 >> Most menjünk előre, és erre a célra. 1911 01:35:19,770 --> 01:35:26,180 Menjünk előre, és nem teszik logikai dot perjel logikus. 1912 01:35:26,180 --> 01:35:27,305 És most én is kéri. 1913 01:35:27,305 --> 01:35:30,638 Tehát feltehetően a jobb felhasználói élmény valójában mondani, mit kell csinálni itt. 1914 01:35:30,638 --> 01:35:33,030 De megyek vakon mondjuk y igen, OK, szép. 1915 01:35:33,030 --> 01:35:35,780 >> Fussunk újra, n nélkül, szép. 1916 01:35:35,780 --> 01:35:39,610 Tegyük fel, mint egyes ember, akit ismerek, én caps lock be van kapcsolva túl gyakran. 1917 01:35:39,610 --> 01:35:43,740 Úgyhogy nem tőke Y, adja meg, hiba. 1918 01:35:43,740 --> 01:35:46,130 OK, ez nem pontosan mit várok. 1919 01:35:46,130 --> 01:35:48,170 Valóban, a számítógép csinál szó, amit 1920 01:35:48,170 --> 01:35:51,794 Mondtam, hogy ellenőrizze a do-- kisbetűs y és kisbetűs n. 1921 01:35:51,794 --> 01:35:53,960 Ez nem érzem jó felhasználói élmény, mégis. 1922 01:35:53,960 --> 01:35:59,010 Hadd kérdezzem meg és fogadja el vagy kisbetű vagy nagybetű. 1923 01:35:59,010 --> 01:36:02,090 Így kiderül, érdemes mondani valamit, mint a Scratch, 1924 01:36:02,090 --> 01:36:08,150 mint a szó szoros értelmében, vagy a C értéke egyenlő tőke egyetlen idézett y. 1925 01:36:08,150 --> 01:36:11,400 Kiderült, C nem ez a szó kulcsszó vagy. 1926 01:36:11,400 --> 01:36:12,880 >> De ez van két függőleges rúd. 1927 01:36:12,880 --> 01:36:15,463 Meg kell tartani a Shift általában, ha használ a US billentyűzet, 1928 01:36:15,463 --> 01:36:18,910 és nyomja meg a függőleges vonal kulcs felett a vissza gomb. 1929 01:36:18,910 --> 01:36:22,410 De ez a függőleges vonal függőleges vonal azt jelenti, vagy. 1930 01:36:22,410 --> 01:36:26,220 >> Ha, ezzel ellentétben, meg akartuk mondani, és mint a Scratch, 1931 01:36:26,220 --> 01:36:28,180 tudnánk csinálni jelet jelet. 1932 01:36:28,180 --> 01:36:31,330 Ennek semmi értelme logikai itt, mivel egy emberi nem lehetett 1933 01:36:31,330 --> 01:36:37,110 gépelt Y és kisbetűs y és a tőke Y ugyanazt a karaktert. 1934 01:36:37,110 --> 01:36:39,470 Tehát vagy mit szándékozunk itt. 1935 01:36:39,470 --> 01:36:46,280 >> Tehát, ha én ezt mindkét helyen, vagy c egyenlő tel egyenlõ N betűvel most ismételni, 1936 01:36:46,280 --> 01:36:49,390 teszik logikai, futtassa logikus. 1937 01:36:49,390 --> 01:36:51,200 Most azt írja y. 1938 01:36:51,200 --> 01:36:53,920 És tudom csinálni újra tőke Y vagy N betűvel 1939 01:36:53,920 --> 01:36:56,630 És azt is hozzá további kombinációk is. 1940 01:36:56,630 --> 01:36:58,810 >> Tehát ez egy logikus programot, mivel most 1941 01:36:58,810 --> 01:37:01,940 Én ellenőrzése logikusan ezt az értéket vagy ezt az értéket. 1942 01:37:01,940 --> 01:37:06,420 És nem kell feltétlenül, felér két IFS IFS különben. 1943 01:37:06,420 --> 01:37:09,960 Azt valóban kombinálni néhány kapcsolatos logika együtt ezen a módon. 1944 01:37:09,960 --> 01:37:11,950 Ez lenne tehát a jobb Ajánlott, mint egyszerűen 1945 01:37:11,950 --> 01:37:17,490 mondván, ha a C egyenlő kisbetűs y, print igen, még ha c egyenlő tőke Y, 1946 01:37:17,490 --> 01:37:20,074 print igen, még ha c értéke lower-- más szóval, 1947 01:37:20,074 --> 01:37:21,990 akkor nem kell, hogy legyen egyre több és több ága. 1948 01:37:21,990 --> 01:37:28,840 Akkor össze néhány egyenértékű ágak logikailag, mint ezen a módon. 1949 01:37:28,840 --> 01:37:34,150 >> Szóval vessünk egy pillantást csak egy utolsó hozzávaló, egy végső konstrukció, 1950 01:37:34,150 --> 01:37:34,847 hogy a C lehetővé. 1951 01:37:34,847 --> 01:37:36,930 És mi jön vissza a jövőben másoknak is. 1952 01:37:36,930 --> 01:37:41,400 És akkor majd befejezésül keres A nem a helyességét code-- 1953 01:37:41,400 --> 01:37:46,070 kapok kódot work-- de a design kódot, és növényi azok a magok korán. 1954 01:37:46,070 --> 01:37:51,337 >> Tehát hadd menjen előre, és nyit egy új fájlt itt. 1955 01:37:51,337 --> 01:37:51,920 Tudod mit? 1956 01:37:51,920 --> 01:37:54,450 Megyek újra végrehajtani hogy ugyanaz a program, 1957 01:37:54,450 --> 01:37:55,940 de egy másik konstrukciót. 1958 01:37:55,940 --> 01:38:00,110 >> Tehát hadd gyorsan, hogy magam hozzáférés közé CS50.h 1959 01:38:00,110 --> 01:38:04,150 A CS50 könyvtár, szabvány Io.h a printf. 1960 01:38:04,150 --> 01:38:06,510 Adj nekem int main semmis. 1961 01:38:06,510 --> 01:38:09,310 Majd ide, hadd menjek előre, és erre a célra. 1962 01:38:09,310 --> 01:38:12,010 >> Char c kap kap char, mint azelőtt. 1963 01:38:12,010 --> 01:38:16,770 És megyek, hogy egy új konstrukció now-- váltani, milyen jellegű? 1964 01:38:16,770 --> 01:38:19,820 Tehát kapcsoló olyan, mint váltás a síneken. 1965 01:38:19,820 --> 01:38:22,070 Vagy tényleg, ez a fajta Egy ha más, ha más, ha 1966 01:38:22,070 --> 01:38:23,980 de írt némileg eltérő. 1967 01:38:23,980 --> 01:38:25,490 >> A kapcsoló úgy néz ki, mint ez. 1968 01:38:25,490 --> 01:38:29,060 Van kapcsolót, akkor mi karakter vagy szám szeretne nézni, 1969 01:38:29,060 --> 01:38:32,000 majd néhány kapcsos zárójelek úgy, mint a Scratch, csak annyit, hogy ezt a cuccot. 1970 01:38:32,000 --> 01:38:33,480 És akkor már a különböző esetekben. 1971 01:38:33,480 --> 01:38:34,830 >> Nem használja, és ha mást. 1972 01:38:34,830 --> 01:38:37,050 Szó szerint használja a szót ügyben. 1973 01:38:37,050 --> 01:38:38,790 És akkor azt mondják, valami ilyesmit. 1974 01:38:38,790 --> 01:38:43,820 >> Tehát abban az esetben egy kisbetűs y, vagy abban az esetben, egy tőke Y, 1975 01:38:43,820 --> 01:38:47,350 megy előre, és nyomtassa ki igen. 1976 01:38:47,350 --> 01:38:49,020 Aztán kitör a kapcsolót. 1977 01:38:49,020 --> 01:38:49,580 Ez az. 1978 01:38:49,580 --> 01:38:50,880 Végeztünk. 1979 01:38:50,880 --> 01:38:57,270 >> Else if, hogy úgy mondjam, kisbetűs n vagy N betűvel 1980 01:38:57,270 --> 01:39:02,560 akkor megy előre, és a nyomtatási ki nem, és majd a szünet. 1981 01:39:02,560 --> 01:39:08,022 Else-- és ez a fajta van a Alapesetben indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 és csak a jó intézkedés, bár logikusan ez a szünet nem szükséges 1983 01:39:10,980 --> 01:39:12,896 mert mi vagyunk a végén A kapcsoló egyébként, 1984 01:39:12,896 --> 01:39:14,520 Én most tört ki a kapcsolót. 1985 01:39:14,520 --> 01:39:16,280 Tehát ez úgy néz ki, egy kicsit más. 1986 01:39:16,280 --> 01:39:18,272 >> De logikusan, ez valójában egyenértékű. 1987 01:39:18,272 --> 01:39:19,980 És miért használ az egyik vagy a másik? 1988 01:39:19,980 --> 01:39:23,220 Néha, csak személyes preferencia, Néha az esztétika, 1989 01:39:23,220 --> 01:39:25,420 ha pillantok ezt Most, hogy van valami 1990 01:39:25,420 --> 01:39:27,510 ki kell mondani a olvashatósága kódot. 1991 01:39:27,510 --> 01:39:30,690 Úgy értem, nem is beszélve, hogy ez a kód új sokan a szobában. 1992 01:39:30,690 --> 01:39:33,515 >> De ez csak egyfajta elég. 1993 01:39:33,515 --> 01:39:37,760 Látod kisbetűs y, a tőke Y, kisbetűs n, N betűvel alapértelmezés 1994 01:39:37,760 --> 01:39:40,150 ez csak egyfajta ugrik ki téged oly módon 1995 01:39:40,150 --> 01:39:42,200 hogy vitathatatlanul, talán Az előző példában a 1996 01:39:42,200 --> 01:39:45,780 az IFS és a függőleges vonalakkal, és a más IFS, lehet, hogy nem. 1997 01:39:45,780 --> 01:39:51,600 Tehát ez tényleg egy kérdés a személyes választás, tényleg, vagy az olvashatóság, 1998 01:39:51,600 --> 01:39:52,360 A kód. 1999 01:39:52,360 --> 01:39:58,230 >> De a funkcionalitás, hadd megy előre, és egy kapcsolót, pont perjel 2000 01:39:58,230 --> 01:40:05,830 kapcsoló, és most írja kisbetűvel y, tőke Y, kisbetűs n, N betűvel 2001 01:40:05,830 --> 01:40:09,250 David, újra, mert ez Nem egy karaktert. 2002 01:40:09,250 --> 01:40:12,050 Csináljuk x, hiba, mint az várható volt. 2003 01:40:12,050 --> 01:40:15,640 És logically-- és ez olyasvalami, Azt javasoljuk a general-- még 2004 01:40:15,640 --> 01:40:17,790 bár mi csak vakarja a felülete ezek közül néhány. 2005 01:40:17,790 --> 01:40:20,560 >> És talán nem is nyilvánvaló, ha magad ül le a billentyűzetet, 2006 01:40:20,560 --> 01:40:21,370 hogy működik ez? 2007 01:40:21,370 --> 01:40:22,240 Mi lenne ez csinálni? 2008 01:40:22,240 --> 01:40:25,630 A gyönyörű dolog, amelynek egy laptop, vagy asztali, vagy a hozzáférési 2009 01:40:25,630 --> 01:40:29,290 hogy a számítógépet egy fordító, és egy kód szerkesztő, mint ez, 2010 01:40:29,290 --> 01:40:32,990 van akkor szinte mindig válaszolni ezekre a kérdések magad csak azzal, hogy megpróbálja. 2011 01:40:32,990 --> 01:40:36,570 >> Például, ha a retorikai kérdés kéznél voltak, 2012 01:40:36,570 --> 01:40:39,540 mi történik, ha elfelejtjük A szünet állításokkal? 2013 01:40:39,540 --> 01:40:41,400 Amely tulajdonképpen egy nagyon gyakori dolog, 2014 01:40:41,400 --> 01:40:43,540 mert nem úgy néz ki mintha tényleg szükség van rájuk. 2015 01:40:43,540 --> 01:40:46,790 Nem igazán teljes a gondoltam, mint egy zárójel, vagy göndör 2016 01:40:46,790 --> 01:40:47,714 zárójel nem. 2017 01:40:47,714 --> 01:40:49,630 Menjünk előre, és újrafordítani a kódot, és látni. 2018 01:40:49,630 --> 01:40:53,690 Tehát csinál kapcsoló, pont perjel kapcsolót. 2019 01:40:53,690 --> 01:40:56,435 Nézzük írja kisbetűvel y, a felső helyzet, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Szóval gépelt y. 2022 01:41:00,700 --> 01:41:04,420 >> A program azt mondta, igen, nem, hiba, mintha azt megváltoztatása előtt tartva. 2023 01:41:04,420 --> 01:41:09,280 De ez a fajta volt, mert mi egy kapcsolóval az első eset, hogy a 2024 01:41:09,280 --> 01:41:13,899 mérkőzés lényegében azt jelenti, hé számítógép, végrehajtja az összes kódot alatta. 2025 01:41:13,899 --> 01:41:16,690 És ha nem mondom szünet, vagy nem mondom szünet, vagy nem mondják szünet, 2026 01:41:16,690 --> 01:41:19,540 A számítógép fog robbantani az összes ilyen vonal 2027 01:41:19,540 --> 01:41:22,779 és végrehajtja azokat, amíg ez lesz, hogy zárójel. 2028 01:41:22,779 --> 01:41:24,320 Tehát a fékek, sőt szükséges. 2029 01:41:24,320 --> 01:41:27,120 De egy elvihető itt, amikor Kétség, próbálj ki valami. 2030 01:41:27,120 --> 01:41:29,510 Lehet menteni a kódot az első, vagy elmentheti egy külön fájlban 2031 01:41:29,510 --> 01:41:32,930 ha igazán aggódik Messiás és miután vissza 2032 01:41:32,930 --> 01:41:34,430 A munka, amit tudja, hogy működik. 2033 01:41:34,430 --> 01:41:35,410 >> De próbálja meg a dolgokat. 2034 01:41:35,410 --> 01:41:38,074 És ne legyen olyan fél, talán, amit a számítógép lehet csinálni, 2035 01:41:38,074 --> 01:41:39,490 vagy hogy lehet törni valamit. 2036 01:41:39,490 --> 01:41:42,790 Bármikor visszatér néhány korábbi verzióját. 2037 01:41:42,790 --> 01:41:45,640 >> Úgyhogy a végén által keresett a tervezési kód. 2038 01:41:45,640 --> 01:41:49,020 Van ez a képesség most írni, feltételeket, és írási hurkok, 2039 01:41:49,020 --> 01:41:50,850 és a változók, és hívási funkciók. 2040 01:41:50,850 --> 01:41:54,590 Tehát, őszintén, mi a fajta vissza ahol voltunk egy héttel ezelőtt a semmiből, 2041 01:41:54,590 --> 01:42:00,120 bár a kevésbé kényszerítő szöveges környezetre, mint a Scratch lehetővé. 2042 01:42:00,120 --> 01:42:03,990 >> De vegyük észre, hogy gyorsan általunk megszerzett hogy a szókincs, akkor is, ha 2043 01:42:03,990 --> 01:42:07,570 fog tartani egy darabig, hogy elsüllyed, így, hogy most már használja ezt a szókincs 2044 01:42:07,570 --> 01:42:10,320 hogy írjon több érdekes program. 2045 01:42:10,320 --> 01:42:12,940 És vessünk egy apró lépés felé, hogy a következők szerint. 2046 01:42:12,940 --> 01:42:14,890 Hadd menjek előre, és hozzon létre egy új fájlt itt. 2047 01:42:14,890 --> 01:42:17,750 >> Megyek hívják ezt prototype.c, és vezessen be 2048 01:42:17,750 --> 01:42:20,954 az első alkalommal, a képesség, hogy a saját funkcióit. 2049 01:42:20,954 --> 01:42:22,870 Néhányan lehet, hogy tette ezt a Scratch, 2050 01:42:22,870 --> 01:42:25,430 amellyel akkor létrehozhatunk saját egyéni blokkok Scratch, 2051 01:42:25,430 --> 01:42:27,892 majd húzza őket a helyére bárhol szeretne C. 2052 01:42:27,892 --> 01:42:30,100 És a legtöbb programozási nyelven, amit tehetünk, hogy pontosan 2053 01:42:30,100 --> 01:42:33,580 hogy-- hogy a saját funkcióit, ha azok nem léteznek. 2054 01:42:33,580 --> 01:42:38,660 >> Így például, hadd menjen előre és tartalmazzák CS50.h, és tartalmazza 2055 01:42:38,660 --> 01:42:43,110 szabvány IO.h, int main semmis. 2056 01:42:43,110 --> 01:42:46,020 És most van egy helykitöltő kész. 2057 01:42:46,020 --> 01:42:48,550 Folyton nyomtatás dolgokat mint emberek nevét ma. 2058 01:42:48,550 --> 01:42:51,910 És, hogy úgy érzi, így: nem lenne jó, ha ott 2059 01:42:51,910 --> 01:42:53,936 voltak olyan függvény nyomtatási név? 2060 01:42:53,936 --> 01:42:55,060 Nem kell használni printf. 2061 01:42:55,060 --> 01:42:56,976 Nem kell emlékezni minden formátum kódok. 2062 01:42:56,976 --> 01:43:00,050 Miért nem én, vagy miért nem valaki előttem, 2063 01:43:00,050 --> 01:43:02,980 hozzon létre egy függvényt nevű nyomtatási nevét, hogy mivel néhány nevet, 2064 01:43:02,980 --> 01:43:03,980 egyszerűen kiírja ki? 2065 01:43:03,980 --> 01:43:08,700 >> Más szóval, ha azt mondom, hé, számítógép, adj egy húr 2066 01:43:08,700 --> 01:43:11,870 kérve a felhasználót az ilyen, via CS50 Szerezzünk sztring függvény. 2067 01:43:11,870 --> 01:43:15,090 Hé, számítógép, tedd azt string a változót a bal oldali, 2068 01:43:15,090 --> 01:43:16,150 és hívja meg s. 2069 01:43:16,150 --> 01:43:22,150 És akkor, hé számítógép, megy előre és kinyomtatni az adott személy neve, kész. 2070 01:43:22,150 --> 01:43:26,240 >> Most jó lenne, mert ez a program, találóan elnevezett, 2071 01:43:26,240 --> 01:43:29,170 azt mondja, hogy mit is kellene csinálni útján azok függvény nevét. 2072 01:43:29,170 --> 01:43:32,930 Hadd menjen, és prototípus, Enter. 2073 01:43:32,930 --> 01:43:34,930 És, sajnos, ez nem fog repülni. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, 7. sor, karakter 5. hiba implicit nyilatkozat 2075 01:43:39,430 --> 01:43:42,960 A függvény nyomtatási név érvénytelen C99, C99 2076 01:43:42,960 --> 01:43:45,130 vagyis egy változata a C hogy jött ki 1999-ben. 2077 01:43:45,130 --> 01:43:45,730 Ez minden. 2078 01:43:45,730 --> 01:43:48,780 >> Szóval nem tudom, mi Mindez azt jelenti, még. 2079 01:43:48,780 --> 01:43:50,810 De én elismerik hiba piros. 2080 01:43:50,810 --> 01:43:51,770 Ez elég nyilvánvaló. 2081 01:43:51,770 --> 01:43:53,769 >> És úgy tűnik, hogy a A zöld karakter van, 2082 01:43:53,769 --> 01:43:57,520 A kérdés az, hogy a nyomtatandó nevet és nyitott zárójel s, közel zárójel, pontosvessző. 2083 01:43:57,520 --> 01:44:01,800 De implicit nyilatkozat funkció láttunk röviden korábban. 2084 01:44:01,800 --> 01:44:04,880 Ez azt jelenti, egyszerűen, hogy Clang nem tudja, hogy mire gondolok. 2085 01:44:04,880 --> 01:44:09,000 >> Már használt szókincs szó, hogy ez az soha nem látott vagy tanították előtt. 2086 01:44:09,000 --> 01:44:11,950 És így kell tanítani hogy ez a függvény jelent. 2087 01:44:11,950 --> 01:44:13,590 Így fogok menni előre, és csinálni. 2088 01:44:13,590 --> 01:44:17,970 >> Megyek, hogy menjen előre és végrehajtása Saját nevezett funkció Print neve. 2089 01:44:17,970 --> 01:44:24,720 És fogok mondani, az alábbiak szerint, hogy teszi ezt, printf, hello, százalék 2090 01:44:24,720 --> 01:44:27,760 s, backslash n, név, pontosvessző. 2091 01:44:27,760 --> 01:44:29,250 Tehát mi csak én nem? 2092 01:44:29,250 --> 01:44:31,325 >> Így kiderül, hogy végre a saját funkciója, 2093 01:44:31,325 --> 01:44:33,845 azt a fajta kölcsön néhány ugyanazt a szerkezetet, mint fő 2094 01:44:33,845 --> 01:44:35,720 hogy most voltunk magától értetődő, és én 2095 01:44:35,720 --> 01:44:37,730 tudom, másolás és beillesztés nagyjából mi 2096 01:44:37,730 --> 01:44:39,170 Már írt a múltban. 2097 01:44:39,170 --> 01:44:40,570 De észre a minta itt. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, Void fogunk ugratni egymástól nemsokára, hogy ez mit is jelent valójában. 2099 01:44:43,750 --> 01:44:46,160 >> De ma, csak észre a párhuzamot. 2100 01:44:46,160 --> 01:44:48,210 Void, nyomtatott nevét, karakterlánc nevét, így van 2101 01:44:48,210 --> 01:44:50,310 lila kulcsszó, amely fogunk kezdeni 2102 01:44:50,310 --> 01:44:54,067 hívás visszatérési típus, a neve a funkciót, majd a bemenet. 2103 01:44:54,067 --> 01:44:56,400 Tehát, valójában mi is csöpögtet ez olyan, mint a múlt héten 2104 01:44:56,400 --> 01:44:59,030 mivel ez a név vagy a algoritmus a kód vagyunk 2105 01:44:59,030 --> 01:45:00,761 fog write-- a algoritmus alapjául szolgáló 2106 01:45:00,761 --> 01:45:02,010 A kód fogunk írni. 2107 01:45:02,010 --> 01:45:03,180 >> Ez a bemenet. 2108 01:45:03,180 --> 01:45:04,670 Ez a kimenet. 2109 01:45:04,670 --> 01:45:08,730 Ez a funkció, nyomtatott név, célja, hogy egy húr nevű nevet, 2110 01:45:08,730 --> 01:45:11,350 vagy bármi, a bemenet, majd semmis. 2111 01:45:11,350 --> 01:45:13,904 Nem ad vissza semmit, mint kap húr, vagy kap int csinál. 2112 01:45:13,904 --> 01:45:15,570 Így fog átadni nekem valamit. 2113 01:45:15,570 --> 01:45:17,960 Ez csak megy, hogy egy mellékhatása, hogy úgy mondjam, 2114 01:45:17,960 --> 01:45:19,570 A nyomtatás egy személy neve. 2115 01:45:19,570 --> 01:45:22,260 Így észre, 7. sor, I hívhatjuk nyomtatási nevét. 2116 01:45:22,260 --> 01:45:25,920 10. sor, tudom meghatározni vagy végrehajtja a nyomtatási nevét. 2117 01:45:25,920 --> 01:45:28,450 De, sajnos, ez nem elég. 2118 01:45:28,450 --> 01:45:31,230 >> Hadd menjek előre, és újrafordítani ezt a mentés után. 2119 01:45:31,230 --> 01:45:33,910 Hú, most csináltam meg rosszabb, úgy tűnik. 2120 01:45:33,910 --> 01:45:37,027 Így implicit nyilatkozat függvény nyomtatási érvénytelen. 2121 01:45:37,027 --> 01:45:38,360 És újra, van még hibák. 2122 01:45:38,360 --> 01:45:41,430 De ahogy figyelmeztetett korábban, még ha kap túlterheltek, 2123 01:45:41,430 --> 01:45:44,850 vagy egy kicsit szomorú, hogy ennyi hibák, a hangsúly csak az első 2124 01:45:44,850 --> 01:45:47,500 kezdetben, mert lehet, hogy csak volt egy lépcsőzetes hatás. 2125 01:45:47,500 --> 01:45:51,970 Tehát a C, vagy Clang pontosabban még mindig nem ismeri a nyomtatási nevét. 2126 01:45:51,970 --> 01:45:54,580 >> És ez azért van, mert csenget, tervezési, egyfajta néma. 2127 01:45:54,580 --> 01:45:56,280 Ez csak azt teszi, amit mondani, hogy igen. 2128 01:45:56,280 --> 01:46:00,950 És ám mindezt csak abban a sorrendben amelyben azt mondja, hogy nem. 2129 01:46:00,950 --> 01:46:05,270 >> Úgyhogy meghatározott fő vonal négy, mint mi csináltuk, elég gyakran. 2130 01:46:05,270 --> 01:46:07,980 Már megadott nyomtatási név on line 10. 2131 01:46:07,980 --> 01:46:11,793 De próbálom használni print név vonalon hét. 2132 01:46:11,793 --> 01:46:13,670 >> Ez túl korán, még nem létezik. 2133 01:46:13,670 --> 01:46:19,150 Így tudtam, hogy okos, és mint a OK, úgyhogy csak játszanak együtt, 2134 01:46:19,150 --> 01:46:23,680 és mozgassa a nyomtatási nevét fel itt, és újra összeállítja. 2135 01:46:23,680 --> 01:46:24,550 Istenem. 2136 01:46:24,550 --> 01:46:25,260 Működött. 2137 01:46:25,260 --> 01:46:26,670 Ez ennyire egyszerű. 2138 01:46:26,670 --> 01:46:28,120 >> De a logika, hogy pontosan. 2139 01:46:28,120 --> 01:46:30,870 Meg kell tanítani csenget, amit van meghatározva a függvény először. 2140 01:46:30,870 --> 01:46:31,920 Akkor tudja használni. 2141 01:46:31,920 --> 01:46:33,940 De őszintén szólva, ez olyan, mint egy csúszós lejtőn. 2142 01:46:33,940 --> 01:46:35,773 >> Így minden alkalommal futok egy probléma, én csak 2143 01:46:35,773 --> 01:46:39,450 megy, hogy kiemelje és másolja be a kódot Írtam, vágott és illessze ide. 2144 01:46:39,450 --> 01:46:41,370 És bizonyára tudnánk feltalál egyes forgatókönyvek 2145 01:46:41,370 --> 01:46:43,286 ahol egy funkció esetleg kell hívni a másik. 2146 01:46:43,286 --> 01:46:46,030 És ha csak nem tesz minden funkció felett, minden más. 2147 01:46:46,030 --> 01:46:47,930 >> Így kiderül, ott a egy jobb megoldást. 2148 01:46:47,930 --> 01:46:50,100 Mi lehet hagyni ezt lehet. 2149 01:46:50,100 --> 01:46:53,677 És, őszintén szólva, ez általában jó, és kényelmes, és a jó design 2150 01:46:53,677 --> 01:46:56,760 hogy fő az első, mert megint Fő mint amikor a zöld zászló kattintott, 2151 01:46:56,760 --> 01:46:59,027 ez a funkció, kerül végrehajtásra, alapértelmezés szerint. 2152 01:46:59,027 --> 01:47:01,110 Így akár meg is tesz ez a tetején a fájl 2153 01:47:01,110 --> 01:47:03,560 így amikor vagy bármely egyéb humán nézi a fájlt 2154 01:47:03,560 --> 01:47:06,360 tudja, mi folyik csak, ha elolvassa fő először. 2155 01:47:06,360 --> 01:47:15,360 Így kiderül, meg tudjuk mondani csenget proaktív, hé, csenget, on-line négy, 2156 01:47:15,360 --> 01:47:17,940 Ígérem, hogy végre olyan függvény nyomtatása 2157 01:47:17,940 --> 01:47:22,600 Név, hogy vesz egy húr names a bemenet, és visszatér semmit, semmis. 2158 01:47:22,600 --> 01:47:24,770 És hozok körül végrehajtási később. 2159 01:47:24,770 --> 01:47:25,680 >> Itt jön Main. 2160 01:47:25,680 --> 01:47:29,130 Fő most a 9. sorban használhatja Nyomtatás Név mert csenget 2161 01:47:29,130 --> 01:47:32,600 bízik, hogy végül, ez a találkozás a meghatározás 2162 01:47:32,600 --> 01:47:34,880 végrehajtásának Print neve. 2163 01:47:34,880 --> 01:47:37,390 Tehát miután megmentette az fájlunk, menjek előre, és prototípus, 2164 01:47:37,390 --> 01:47:38,498 jól néz ki ebben az időben. 2165 01:47:38,498 --> 01:47:43,470 Dot perjel, prototípus, hadd megy előre, és írja be a nevét. 2166 01:47:43,470 --> 01:47:48,440 David, szia Dávid Zamila, szia Zamila, és valóban, most már működik. 2167 01:47:48,440 --> 01:47:52,200 >> Tehát az összetevő az, hogy mi már tett egy egyedi funkció, például az egyéni 2168 01:47:52,200 --> 01:47:54,219 Scratch blokk vagyunk nevezni. 2169 01:47:54,219 --> 01:47:57,010 De ellentétben Scratch, ahol lehet Csak akkor hozza létre, és már használhatja is, 2170 01:47:57,010 --> 01:47:59,330 most már, hogy egy kicsit pedáns, 2171 01:47:59,330 --> 01:48:03,410 és valóban a vonat csenget használni, vagy elvárni. 2172 01:48:03,410 --> 01:48:09,140 Most, hogy félre, miért ennyi idő van mi volt, csak vakon hit beleértve 2173 01:48:09,140 --> 01:48:12,170 CS50.h, és beleértve a standard IO.h? 2174 01:48:12,170 --> 01:48:15,190 >> Nos, kiderült, között egy pár más dolog, 2175 01:48:15,190 --> 01:48:18,550 minden, ami azokban a dot h kép, ami történetesen a fájlokat. 2176 01:48:18,550 --> 01:48:20,460 Ők header fájlokat, hogy úgy mondjam. 2177 01:48:20,460 --> 01:48:23,270 Még mindig a C nyelven írt, de ők egy másik típusú fájlt. 2178 01:48:23,270 --> 01:48:28,690 >> Egyelőre akkor nagyjából vállal hogy minden, ami a belsejében CS50.h 2179 01:48:28,690 --> 01:48:33,360 néhány egysoros, mint ez, nem A funkció az úgynevezett Print neve, 2180 01:48:33,360 --> 01:48:36,840 de Get String, Get Float, és még néhány más. 2181 01:48:36,840 --> 01:48:41,510 És vannak hasonló prototípusok, Egy hüvelyek, belső standard IO.h 2182 01:48:41,510 --> 01:48:46,241 A printf, amely most Saját neve nyomtatott funkciót. 2183 01:48:46,241 --> 01:48:49,490 Más szóval, ez az egész eset, amikor most vakon másolás és beillesztés 2184 01:48:49,490 --> 01:48:51,780 tartalmazza ezt, többek között hogy mi folyik itt? 2185 01:48:51,780 --> 01:48:55,310 Ezek csak ilyen nyomokat a csengés, hogy milyen funkciók 2186 01:48:55,310 --> 01:49:00,170 vannak, sőt, végre, csak másutt különböző fájlokat 2187 01:49:00,170 --> 01:49:02,440 máshol a rendszerben. 2188 01:49:02,440 --> 01:49:05,160 >> Így már végre a nyomtatási nevét. 2189 01:49:05,160 --> 01:49:07,910 Teszi ezt mellékhatása nyomtatás valamit a képernyőn. 2190 01:49:07,910 --> 01:49:10,170 De ez valójában nem adja ide valamit. 2191 01:49:10,170 --> 01:49:12,200 Hogyan érjük el program végrehajtása, amely 2192 01:49:12,200 --> 01:49:14,510 nem adja ide valamit? 2193 01:49:14,510 --> 01:49:15,580 >> Nos, próbáljuk meg. 2194 01:49:15,580 --> 01:49:21,360 Hadd menjek előre, és végrehajtja nevű fájlt return.c 2195 01:49:21,360 --> 01:49:24,530 így tudjuk bizonyítani, hogy valami mint Get String, vagy a Get Int, 2196 01:49:24,530 --> 01:49:27,340 tulajdonképpen visszatérés valamit vissza a felhasználónak. 2197 01:49:27,340 --> 01:49:29,840 Menjünk előre, és meghatározzák int main semmis. 2198 01:49:29,840 --> 01:49:33,230 >> És ismét, a jövőben fogunk magyaráznia, hogy int és ezt az űrt 2199 01:49:33,230 --> 01:49:34,090 valójában csinál. 2200 01:49:34,090 --> 01:49:35,840 De ma, fogunk biztosra veszik. 2201 01:49:35,840 --> 01:49:39,970 Megyek, hogy menjen előre és printf, Egy jó felhasználói élményt, x. 2202 01:49:39,970 --> 01:49:44,360 És akkor fogok várni a felhasználót, hogy adjon nekem x get int. 2203 01:49:44,360 --> 01:49:48,459 >> Aztán megyek előre és nyomtassa ki x a térre. 2204 01:49:48,459 --> 01:49:50,500 Tehát, ha csak egy billentyűzet, az emberek általában 2205 01:49:50,500 --> 01:49:52,600 használja a kis sárgarépa szimbólum a billentyűzeten 2206 01:49:52,600 --> 01:49:55,330 hogy képviselje a teljesítmény , vagy a kitevő. 2207 01:49:55,330 --> 01:49:58,960 Tehát x négyzeten van jelen i. 2208 01:49:58,960 --> 01:50:00,660 >> És most fogom ezt tenni. 2209 01:50:00,660 --> 01:50:03,940 Tudtam csak do-- mi x négyzeten? x négyzet x-szer x. 2210 01:50:03,940 --> 01:50:06,690 >> És mi ez a néhány ideje már ma. 2211 01:50:06,690 --> 01:50:08,730 Ez nem érzem hogy sok minden haladás. 2212 01:50:08,730 --> 01:50:09,570 Tudod mit? 2213 01:50:09,570 --> 01:50:13,100 Nézzük tőkeáttétel bizonyos, hogy a gondolat az utolsó alkalom az absztrakció. 2214 01:50:13,100 --> 01:50:16,080 >> Nem lenne jó, ha van olyan függvény 2215 01:50:16,080 --> 01:50:18,460 négyzet, hogy pontosan ezt teszi? 2216 01:50:18,460 --> 01:50:20,640 Még mindig, a végén az nap, nem ugyanaz a matematika. 2217 01:50:20,640 --> 01:50:22,410 De nézzük absztrakt el az ötlet, hogy 2218 01:50:22,410 --> 01:50:25,280 Egy szám szorozva Egy másik, és csak adja meg a nevét, 2219 01:50:25,280 --> 01:50:27,360 kockás ezt az értéket. 2220 01:50:27,360 --> 01:50:29,560 >> És, más szóval, C, hozzunk létre egy függvény 2221 01:50:29,560 --> 01:50:32,660 az úgynevezett tér, hogy pontosan ezt teszi. 2222 01:50:32,660 --> 01:50:34,600 Ez lesz a címe téren. 2223 01:50:34,600 --> 01:50:35,790 Ez fog tartani egy int. 2224 01:50:35,790 --> 01:50:37,820 És mi lesz most hívják n alapértelmezés szerint. 2225 01:50:37,820 --> 01:50:39,403 >> De nevezhetjük, amit csak akarunk. 2226 01:50:39,403 --> 01:50:42,900 És minden, ami meg fog igen, szó szerint, a megtérülés 2227 01:50:42,900 --> 01:50:45,810 az eredmény a N-szer N. 2228 01:50:45,810 --> 01:50:48,980 De mivel ez visszatérő valamit, ami 2229 01:50:48,980 --> 01:50:53,690 az a kulcsszó, lila voltunk soha nem látott, én, a 11. sor, 2230 01:50:53,690 --> 01:50:55,410 Nem lehet csak mondani void ebben az időben. 2231 01:50:55,410 --> 01:51:01,320 >> Void, a példában láttunk inkább a nyomtatott nevét, csak azt jelenti, 2232 01:51:01,320 --> 01:51:02,190 csinálj valamit. 2233 01:51:02,190 --> 01:51:04,170 De ne adja nekem valamit vissza. 2234 01:51:04,170 --> 01:51:06,790 Ebben az esetben én szeretnék hogy visszatérjen n-szer n, 2235 01:51:06,790 --> 01:51:08,460 vagy bármi legyen is az, hogy a szám. 2236 01:51:08,460 --> 01:51:12,460 >> Így nem tudok mondani, hé, számítógép, Azt vissza semmit, semmis. 2237 01:51:12,460 --> 01:51:16,166 Meg fog visszatérni, a természet, az int. 2238 01:51:16,166 --> 01:51:17,790 És így, hogy minden, ami folyik itt. 2239 01:51:17,790 --> 01:51:20,070 >> A bemeneti tér lesz egy int. 2240 01:51:20,070 --> 01:51:24,760 És, hogy ki tudjuk használni, akkor azt Van egy név, N. Ez lesz a kimeneti 2241 01:51:24,760 --> 01:51:26,240 int, hogy nem kell a nevét. 2242 01:51:26,240 --> 01:51:29,590 Mi lehet hagyni a fő, vagy bárki is használja, hogy emlékezzen ezt az értéket, ha 2243 01:51:29,590 --> 01:51:31,120 szeretnénk a saját változó. 2244 01:51:31,120 --> 01:51:33,230 >> És újra, az egyetlen új kulcsszó itt a Return. 2245 01:51:33,230 --> 01:51:34,480 És én csak csinál valami matek. 2246 01:51:34,480 --> 01:51:41,825 Ha nagyon akartam, hogy felesleges, Mondhatnám int terméket kapja n-szer n. 2247 01:51:41,825 --> 01:51:44,170 >> És akkor azt is mondhatnám, vissza terméket. 2248 01:51:44,170 --> 01:51:47,360 De megint az a lényeg korábbi ez csak nem, hogy a jó design-- 2249 01:51:47,360 --> 01:51:50,060 mint, hogy miért vezetnek be egy nevet, egy szimbólum, mint a termék, 2250 01:51:50,060 --> 01:51:51,570 csak azért, hogy azonnal vissza? 2251 01:51:51,570 --> 01:51:53,670 Ez egy kicsit tisztább, egy kicsit feszesebb, így 2252 01:51:53,670 --> 01:51:59,380 beszélni, csak azt mondani, visszatérő n-szer n, hogy megszabaduljon ez a vonal teljesen. 2253 01:51:59,380 --> 01:52:02,860 >> És ez csak kisebb kódot olvasni, kevesebb lehetőséget hibákat. 2254 01:52:02,860 --> 01:52:05,180 És lássuk, hogy ez a tényleg működik. 2255 01:52:05,180 --> 01:52:09,380 Most fogok menni előre, és a visszatérést. 2256 01:52:09,380 --> 01:52:11,460 >> Ajjaj, implicit nyilatkozatot funkciót. 2257 01:52:11,460 --> 01:52:14,080 Csináltam ezt a hibát korábban, nem nagy ügy. 2258 01:52:14,080 --> 01:52:18,950 Hadd írja, vagy jelölje ki, és másolni, pontosan ugyanazt a függvény prototípus, 2259 01:52:18,950 --> 01:52:21,342 vagy aláírás, a függvény itt. 2260 01:52:21,342 --> 01:52:22,800 Vagy tudtam mozgatni az egész funkciót. 2261 01:52:22,800 --> 01:52:23,841 >> De ez egy kicsit lusta. 2262 01:52:23,841 --> 01:52:24,870 Így nem fogunk csinálni. 2263 01:52:24,870 --> 01:52:27,960 Most, engedjék meg, hogy cserébe újra, pont perjel vissza. 2264 01:52:27,960 --> 01:52:32,790 >> x 2 x négyzeten 4. x 3 x négyzeten 9. 2265 01:52:32,790 --> 01:52:35,300 És a funkció úgy tűnik, Most, hogy működik. 2266 01:52:35,300 --> 01:52:36,550 Tehát mi itt a különbség? 2267 01:52:36,550 --> 01:52:42,520 Van olyan funkció, amely az úgynevezett tér, Ebben az esetben, amely tettem egy bemenet. 2268 01:52:42,520 --> 01:52:43,830 És kapok vissza egy kimenetet. 2269 01:52:43,830 --> 01:52:46,210 És mégis, a korábban, ha Kinyitom a másik példa 2270 01:52:46,210 --> 01:52:51,640 a korábbi, ami hívták prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Volt nyomtatott neve, amely visszatért void, hogy úgy mondjam, 2272 01:52:54,770 --> 01:52:58,730 Vagy vissza semmit, és egyszerűen csak mellékhatás. 2273 01:52:58,730 --> 01:53:00,230 >> Tehát, mi folyik itt? 2274 01:53:00,230 --> 01:53:03,520 Nos, úgy a függvény A string egy pillanatra. 2275 01:53:03,520 --> 01:53:06,570 Mi már nem, a függvény A string a következő módon. 2276 01:53:06,570 --> 01:53:10,464 >> Már volt egy funkciót kap húr, mint többek között CS50.h, 2277 01:53:10,464 --> 01:53:16,624 közé tartoznak a standard IO.h, int, fő, semmis. 2278 01:53:16,624 --> 01:53:18,790 Ezután minden alkalommal, én már úgynevezett get húr eddig, 2279 01:53:18,790 --> 01:53:23,260 Már valami olyasmit mondott, s karakterlánc kap kap húr, mert get string-- 2280 01:53:23,260 --> 01:53:27,880 Nevezzük ezt get.c-- get húr Maga visszaadott karakterlánc tudok majd 2281 01:53:27,880 --> 01:53:32,050 használja, és azt mondják, hello, vessző, százalék s, backslash N, S. 2282 01:53:32,050 --> 01:53:35,660 >> Tehát ez ugyanaz a példa, igazán, hogy mi volt korábban. 2283 01:53:35,660 --> 01:53:37,920 Tehát kap karakterláncot ad vissza értéket. 2284 01:53:37,920 --> 01:53:41,260 De egy pillanattal ezelőtt, nyomtatás húr nem ad vissza értéket. 2285 01:53:41,260 --> 01:53:42,721 Ez egyszerűen egy mellékhatás. 2286 01:53:42,721 --> 01:53:44,220 Tehát ez egy alapvető különbség. 2287 01:53:44,220 --> 01:53:46,710 Láttuk különböző típusú függvények, 2288 01:53:46,710 --> 01:53:49,490 amelyek közül néhány vissza értékek, amelyek közül néhány nem. 2289 01:53:49,490 --> 01:53:51,890 Tehát lehet, hogy húr, vagy int, vagy float. 2290 01:53:51,890 --> 01:53:53,480 Vagy lehet, hogy csak érvénytelen. 2291 01:53:53,480 --> 01:53:55,710 >> És a különbség hogy ezek a funkciók, hogy 2292 01:53:55,710 --> 01:53:59,940 kap adatokat, és visszatérési értéke valóban hogy valamit vissza az asztalhoz, 2293 01:53:59,940 --> 01:54:01,110 hogy úgy mondjam. 2294 01:54:01,110 --> 01:54:03,710 Szóval menjünk előre, és nézd meg egy utolsó szett 2295 01:54:03,710 --> 01:54:09,129 A példa, hogy ad egyfajta, most, a hogyan lehet, sőt, absztrakt jobb, 2296 01:54:09,129 --> 01:54:11,670 és jobb, és jobb, vagy több, és több, és több, annak érdekében, 2297 01:54:11,670 --> 01:54:13,810 írni, végső soron jobb kódot. 2298 01:54:13,810 --> 01:54:16,860 Menjünk előre, és a lélek A Scratch, tegye a következőket. 2299 01:54:16,860 --> 01:54:21,700 >> Hadd menjek előre, és tartalmaznia CS50.h standard IO.h. 2300 01:54:21,700 --> 01:54:24,010 Hadd menjek előre, és ad magam egy int, fő, semmis. 2301 01:54:24,010 --> 01:54:27,380 És hadd menjen előre, hívja ezt cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> És hadd menjen előre, és csak mint Scratch, nyomtassa ki köhögés / n. 2303 01:54:35,510 --> 01:54:37,170 És azt akarom, hogy ezt háromszor. 2304 01:54:37,170 --> 01:54:39,670 Úgyhogy, persze, csak megy másolás és beillesztés háromszor. 2305 01:54:39,670 --> 01:54:46,440 Én most megy, hogy köhögés dot perjel köhögés. 2306 01:54:46,440 --> 01:54:50,120 Adjunk magam egy kicsit több szoba itt, az Enter, köhögés, köhögés, köhögés. 2307 01:54:50,120 --> 01:54:53,970 >> Van, nyilván, már egy lehetőséget a fejlődésre. 2308 01:54:53,970 --> 01:54:55,679 Már a vágólapra másolni egy párszor ma. 2309 01:54:55,679 --> 01:54:58,261 De ez csak így nem tettem van, hogy írja annyi karaktert. 2310 01:54:58,261 --> 01:55:00,250 Még mindig változik, hogy mit azok sornyi kódot. 2311 01:55:00,250 --> 01:55:04,240 >> Ez a három vonal azonos, amely úgy érzi, lusta és tényleg olyan, 2312 01:55:04,240 --> 01:55:07,110 és valószínűleg nem a helyes megközelítés. 2313 01:55:07,110 --> 01:55:11,029 Tehát mi összetevő tudnánk javítani ezt a kódot? 2314 01:55:11,029 --> 01:55:12,570 Nem kell másolni és beilleszteni kódot. 2315 01:55:12,570 --> 01:55:15,070 >> És valóban, minden alkalommal, amikor úgy érzi, magad a másolás és beillesztés, 2316 01:55:15,070 --> 01:55:17,700 és nem is változik kódot, esély van egy jobb út. 2317 01:55:17,700 --> 01:55:19,470 És valóban, van. 2318 01:55:19,470 --> 01:55:22,510 Hadd menjek előre, és nem egy ciklusban, bár a szintaxis, talán nem 2319 01:55:22,510 --> 01:55:24,570 természetesen jön még. 2320 01:55:24,570 --> 01:55:29,494 >> Ezt háromszor, egyszerűen ezzel a following-- 2321 01:55:29,494 --> 01:55:31,160 és én történetesen tudjuk ezt a gyakorlatot. 2322 01:55:31,160 --> 01:55:32,810 De van számos példa van. 2323 01:55:32,810 --> 01:55:34,950 És meglátja az interneten további referenciák is. 2324 01:55:34,950 --> 01:55:37,790 >> Ez a szintaxis a 6. sorban, hogy hasonlóan Scratch, hogy ismétli 2325 01:55:37,790 --> 01:55:40,090 blokk, ismételje meg a következő három alkalommal. 2326 01:55:40,090 --> 01:55:41,340 Ez egy kis mágikus most. 2327 01:55:41,340 --> 01:55:43,050 De ez még több, és jobban ismerik. 2328 01:55:43,050 --> 01:55:45,050 >> És ez meg fog ismételni vonal nyolc három alkalommal, 2329 01:55:45,050 --> 01:55:52,390 így ha újra összeállítja make köhögés, dot perjel köhögés, köhögés, köhögés, köhögés. 2330 01:55:52,390 --> 01:55:54,030 Még mindig ugyanúgy működik. 2331 01:55:54,030 --> 01:55:55,550 Szóval ez mind szép és jó. 2332 01:55:55,550 --> 01:55:58,200 De ez nem nagyon szórakozott. 2333 01:55:58,200 --> 01:55:59,371 >> Ez teljesen korrekt. 2334 01:55:59,371 --> 01:56:01,370 De úgy érzi, mintha ott lehetőséget jelenthet, 2335 01:56:01,370 --> 01:56:03,750 mint a világ Scratch, hogy milyen kezdő 2336 01:56:03,750 --> 01:56:07,530 hogy adjunk néhány szemantika itt, hogy Nem csak egy kis hurok, 2337 01:56:07,530 --> 01:56:09,867 és egy függvény, amely azt mondja, köhögés vagy nem köhög. 2338 01:56:09,867 --> 01:56:10,450 Tudod mit? 2339 01:56:10,450 --> 01:56:12,620 Engedjék meg, hogy egy kicsit hűvösebb, mint az, 2340 01:56:12,620 --> 01:56:16,090 és valójában írni egy függvényt, amely van néhány mellékhatása, hívják köhögés. 2341 01:56:16,090 --> 01:56:20,830 >> És nem veszi input és nem ad vissza értéket a kibocsátás. 2342 01:56:20,830 --> 01:56:22,680 De tudod, mit csinál? 2343 01:56:22,680 --> 01:56:29,370 Ez nem this-- printf, idézet idézet vége, köhögés. 2344 01:56:29,370 --> 01:56:32,380 >> És most itt, megyek hogy menjen előre, és int, 2345 01:56:32,380 --> 01:56:36,070 i jelentkeznek nulla, azt kevesebb, mint 3, I Plus plusz. 2346 01:56:36,070 --> 01:56:39,770 Megyek nem printf, mely vitathatatlanul alacsony szintű végrehajtás 2347 01:56:39,770 --> 01:56:40,270 Részlet. 2348 01:56:40,270 --> 01:56:41,353 Nem érdekel, hogy köhögni. 2349 01:56:41,353 --> 01:56:43,240 Csak azt akarom, hogy használja a köhögés funkciót. 2350 01:56:43,240 --> 01:56:44,840 És én csak fog hívni köhögés. 2351 01:56:44,840 --> 01:56:46,204 >> Most észre a kettősség. 2352 01:56:46,204 --> 01:56:49,370 Ha hívja a funkciót, ha nem szeretnénk, hogy ez viszi, teljesen rendben van. 2353 01:56:49,370 --> 01:56:51,780 Csak nem nyitott zárójel, közel zárójel, és kész. 2354 01:56:51,780 --> 01:56:56,271 >> Ha meg egy függvényt, vagy állapítsa meg a függvény prototípus, 2355 01:56:56,271 --> 01:56:58,770 ha előre tudják, hogy ez nem fog tartani olyan érveket, 2356 01:56:58,770 --> 01:57:01,170 mondjuk void azokban zárójelben van. 2357 01:57:01,170 --> 01:57:05,660 És, ami biztos, hogy nem véletlenül visszaélni is. 2358 01:57:05,660 --> 01:57:07,020 Hadd menjek előre, és a köhögés. 2359 01:57:07,020 --> 01:57:08,540 És, persze, én hibáztam. 2360 01:57:08,540 --> 01:57:10,410 >> A fenébe is, ott van az a implicit nyilatkozatot. 2361 01:57:10,410 --> 01:57:11,325 De ez rendben van. 2362 01:57:11,325 --> 01:57:12,590 Ez egy könnyű megoldás. 2363 01:57:12,590 --> 01:57:18,240 Csak kell a prototípus feljebb az én file-én ténylegesen használja. 2364 01:57:18,240 --> 01:57:20,070 >> Tehát most engedjék meg, hogy a köhögés megint szép. 2365 01:57:20,070 --> 01:57:20,790 Most, hogy működik. 2366 01:57:20,790 --> 01:57:22,930 Tedd köhögés, köhögés, köhögés, köhögés. 2367 01:57:22,930 --> 01:57:25,930 Szóval lehet, hogy úgy gondolja, hogy már igazán több mint mérnöki ezt a problémát. 2368 01:57:25,930 --> 01:57:26,763 És valóban, mi. 2369 01:57:26,763 --> 01:57:28,870 Ez nem egy jó jelölt program 2370 01:57:28,870 --> 01:57:31,930 ebben a pillanatban újraírás, és mit csinál 2371 01:57:31,930 --> 01:57:35,645 úgynevezett hierarchikus lebontás, ahol némi kódot, majd 2372 01:57:35,645 --> 01:57:38,790 a fajta tényező dolgokat úgy, tulajdonítani több szemantika nekik, 2373 01:57:38,790 --> 01:57:40,930 és újra meg végül hosszabb távon. 2374 01:57:40,930 --> 01:57:43,490 De ez egy építőelem felé kifinomultabb programok 2375 01:57:43,490 --> 01:57:45,600 hogy indul előtt írásban hosszú, hogy 2376 01:57:45,600 --> 01:57:50,090 lehetővé teszi számunkra, hogy a szókincs amellyel írni jobb kódot. 2377 01:57:50,090 --> 01:57:52,920 És valóban, lássuk, ha nem lehet általánosítani ezt tovább. 2378 01:57:52,920 --> 01:57:57,984 >> Úgy tűnik, egy kicsit béna, hogy én, a fő, kell aggódnia ez rohadt a hurok, 2379 01:57:57,984 --> 01:57:59,400 és hívja köhögés újra és újra. 2380 01:57:59,400 --> 01:58:03,050 Miért nem tudok csak mondani köhögés, Kérjük köhögés háromszor? 2381 01:58:03,050 --> 01:58:08,170 Más szóval, miért nem tudok csak járulhatnak köhögni és ezt? 2382 01:58:08,170 --> 01:58:11,270 >> Miért nem tudok csak mondani, hogy Fő köhögés háromszor. 2383 01:58:11,270 --> 01:58:13,150 És most ez a fajta mágikus. 2384 01:58:13,150 --> 01:58:14,540 Ez nagyon iteratív itt. 2385 01:58:14,540 --> 01:58:15,940 És ez, sőt, egy apró lépés. 2386 01:58:15,940 --> 01:58:19,250 >> De csak a képesség, hogy mondani vonal nyolc, köhögés három alkalommal, 2387 01:58:19,250 --> 01:58:20,730 ez csak annyira sokkal olvashatóbb. 2388 01:58:20,730 --> 01:58:24,210 És plusz, nem kell tudni vagy érdekel, hogy köhögés végrehajtását. 2389 01:58:24,210 --> 01:58:26,460 És valóban, később a távú és végső projektek 2390 01:58:26,460 --> 01:58:29,150 Ha kezelni a projekt osztálytársa vagy két osztálytársak, 2391 01:58:29,150 --> 01:58:32,370 rájössz, hogy meg fogsz kell, vagy szeretné, osztja meg a munkát. 2392 01:58:32,370 --> 01:58:34,650 >> És fogsz akar dönteni előre, hogy ki fog csinálni, amit, 2393 01:58:34,650 --> 01:58:35,483 és amelyben darabokat? 2394 01:58:35,483 --> 01:58:37,520 És nem lenne jó Ha például 2395 01:58:37,520 --> 01:58:40,100 átvegyék az írás fő, kész. 2396 01:58:40,100 --> 01:58:43,470 És a szobatársam, vagy az partner általánosabban 2397 01:58:43,470 --> 01:58:45,230 gondoskodik a végrehajtási köhögés. 2398 01:58:45,230 --> 01:58:49,540 >> És ezt a felosztást, ezek falai absztrakció, 2399 01:58:49,540 --> 01:58:52,310 vagy rétegek absztrakció ha akkor, szuper erős, 2400 01:58:52,310 --> 01:58:55,480 Mivel különösen a nagyobb, bonyolultabb programokat és rendszereket, 2401 01:58:55,480 --> 01:59:00,070 ez lehetővé teszi, hogy egyszerre több ember is építeni dolgokat együtt, és végül 2402 01:59:00,070 --> 01:59:02,680 öltés közös munka ezen a módon. 2403 01:59:02,680 --> 01:59:05,332 De, persze, kell most kijavítani köhögés. 2404 01:59:05,332 --> 01:59:07,290 El kell mondanunk köhögés hogy, hé, tudod mit? 2405 01:59:07,290 --> 01:59:11,230 Fogsz kell szednie input-- így nem érvénytelen, de int és most. 2406 01:59:11,230 --> 01:59:15,170 Menjünk előre, és helyezték köhögés az int. i lesz nulla. 2407 01:59:15,170 --> 01:59:16,890 >> I-nél kisebb, hányszor. 2408 01:59:16,890 --> 01:59:18,550 Azt mondtam, három előtt. 2409 01:59:18,550 --> 01:59:20,420 De ez nem az, amit akarok. 2410 01:59:20,420 --> 01:59:25,520 Azt akarom, hogy köhögés általánosítható támogat semmilyen iterációk száma. 2411 01:59:25,520 --> 01:59:28,800 >> Tehát valóban, ez n, amit szeretnék, függetlenül a felhasználó azt mondja. 2412 01:59:28,800 --> 01:59:31,620 Most már lehet menni előre, és azt mondják, a nyomtatási köhögés. 2413 01:59:31,620 --> 01:59:34,750 És nem számít, milyen szám a felhasználó halad, 2414 01:59:34,750 --> 01:59:36,890 Én hajtogat, hogy sokszor. 2415 01:59:36,890 --> 01:59:39,160 >> Így a végén a nap, program azonos. 2416 01:59:39,160 --> 01:59:42,820 De észre az összes ezt a cuccot Még az is lehet egy másik fájlt. 2417 01:59:42,820 --> 01:59:45,620 Valóban, nem tudom, a pillanatban, hogy printf végrehajtását. 2418 01:59:45,620 --> 01:59:47,980 >> Nem tudom, hogy abban a pillanatban, hogy hogyan kap húr, vagy kap int, vagy kap úszó 2419 01:59:47,980 --> 01:59:48,646 végrehajtását. 2420 01:59:48,646 --> 01:59:50,930 És nem akarom, hogy látni őket a monitoron. 2421 01:59:50,930 --> 01:59:55,320 Ahogy van, kezdek összpontosítani programom, nem ezeket a funkciókat. 2422 01:59:55,320 --> 01:59:59,070 >> És így, sőt, amint kezdeni faktoring kód, mint ez ki, 2423 01:59:59,070 --> 02:00:01,397 tudnánk is mozog köhögés külön fájlba? 2424 02:00:01,397 --> 02:00:02,730 Valaki más is végrehajtja. 2425 02:00:02,730 --> 02:00:06,810 És te és a programot vált a nagyon szép, és nagyon olvasható, 2426 02:00:06,810 --> 02:00:10,830 vitathatatlanul, valójában négy line programot ott. 2427 02:00:10,830 --> 02:00:13,510 >> Tehát menjünk előre most , és még egy változás. 2428 02:00:13,510 --> 02:00:16,180 Figyeljük meg, hogy a prototípus meg kell változtatni fel tetején. 2429 02:00:16,180 --> 02:00:18,390 Tehát hadd megoldja, hogy Nem értem kiabált. 2430 02:00:18,390 --> 02:00:22,580 >> Tedd köhögés, engedik köhögés egyszer több, még ugyanazt a dolgot. 2431 02:00:22,580 --> 02:00:26,010 De most, észre van egy összetevő egy végleges változat. 2432 02:00:26,010 --> 02:00:26,940 Tudod mit? 2433 02:00:26,940 --> 02:00:29,040 Nem akarom, hogy csak köhögés, feltétlenül. 2434 02:00:29,040 --> 02:00:30,802 Azt szeretnénk, hogy valami sokkal általánosabb. 2435 02:00:30,802 --> 02:00:31,510 Szóval tudod mit? 2436 02:00:31,510 --> 02:00:32,450 Azt akarom, hogy ezt. 2437 02:00:32,450 --> 02:00:37,140 Azt akarom, hogy, akárcsak Scratch igen, egy mondjuk blokk, de nem csak 2438 02:00:37,140 --> 02:00:38,680 mondani valamit bizonyos számú alkalommal. 2439 02:00:38,680 --> 02:00:41,510 Azt akarom mondani, hogy nagyon speciális húr. 2440 02:00:41,510 --> 02:00:43,850 És ezért én nem akarjuk, hogy csak azt a köhögés. 2441 02:00:43,850 --> 02:00:47,660 Azt akarom, hogy azt mondják, amit karakterláncot továbbít. 2442 02:00:47,660 --> 02:00:49,960 >> Így észre, amit generalizált ezt úgy, hogy most 2443 02:00:49,960 --> 02:00:53,110 mondjuk úgy, mint egy jó név erre, mint a Scratch, 2444 02:00:53,110 --> 02:00:55,530 két argumentuma, ellentétben Scratch. 2445 02:00:55,530 --> 02:00:56,570 Az egyik egy húr. 2446 02:00:56,570 --> 02:00:57,300 Az egyik egy int. 2447 02:00:57,300 --> 02:00:58,130 >> És tudtam váltani őket. 2448 02:00:58,130 --> 02:01:00,713 Csak olyan, mint azt az elképzelést, mondjuk a sztring első, majd 2449 02:01:00,713 --> 02:01:01,940 hányszor később. 2450 02:01:01,940 --> 02:01:03,970 Érvénytelen azt jelenti, hogy még mindig nem tér vissza semmit. 2451 02:01:03,970 --> 02:01:06,428 Ezek csak látási hatások, mint a [? Jordan,?] 2452 02:01:06,428 --> 02:01:08,240 szóbeli mellékhatása kiabál. 2453 02:01:08,240 --> 02:01:12,630 Még mindig csinál valamit n-szer, 0-ig, de nem azonos N. 2454 02:01:12,630 --> 02:01:14,540 Ez azt jelenti, n teljes idejére. 2455 02:01:14,540 --> 02:01:16,540 És akkor csak ki kell nyomtatni bármi ez a string. 2456 02:01:16,540 --> 02:01:19,060 Úgyhogy nagyon általánosított ezt a kódsort. 2457 02:01:19,060 --> 02:01:22,460 Tehát most, hogyan kell használni A köhögés funkció? 2458 02:01:22,460 --> 02:01:25,520 >> Meg tudom csinálni void köhögés. 2459 02:01:25,520 --> 02:01:28,501 És én is venni, hogy hogyan sokszor azt szeretnénk, hogy köhög. 2460 02:01:28,501 --> 02:01:29,250 De tudod mit? 2461 02:01:29,250 --> 02:01:31,240 Most már punt mondani. 2462 02:01:31,240 --> 02:01:36,540 >> Tudok hívni mondani a szó köhögés, átadva n. 2463 02:01:36,540 --> 02:01:40,410 És ha azt szeretnénk, hogy is végrehajt, csak a móka kedvéért, tüsszentés funkció, 2464 02:01:40,410 --> 02:01:42,290 Én tüsszentés bizonyos számú alkalommal. 2465 02:01:42,290 --> 02:01:47,300 És tudom tartani újrahasznosítással n, mert észre, hogy m ebben az összefüggésben, illetve hatályát 2466 02:01:47,300 --> 02:01:49,470 Csak belül létezik ez a funkció. 2467 02:01:49,470 --> 02:01:52,767 >> És n ebben az összefüggésben csak belül létezik ez a funkció itt. 2468 02:01:52,767 --> 02:01:54,600 Így fogunk térni ezeket a kérdéseket a hatálya alá. 2469 02:01:54,600 --> 02:02:01,160 És itt, én csak azt fogja mondani, achoo, majd n-szer, félig vastagbélben. 2470 02:02:01,160 --> 02:02:04,340 >> És most, csak meg kell kölcsönkérni ezek a funkciók aláírások itt. 2471 02:02:04,340 --> 02:02:06,290 Tehát köhögés helyes. 2472 02:02:06,290 --> 02:02:10,090 Érvénytelen tüsszentés helyes most. 2473 02:02:10,090 --> 02:02:12,390 >> És még mindig csak meg kell mondani. 2474 02:02:12,390 --> 02:02:18,990 Így fogok mondani, mondjuk s karakterlánc, int n, pontosvessző. 2475 02:02:18,990 --> 02:02:22,010 Úgyhogy át megtervezett a fene ki ezt a programot. 2476 02:02:22,010 --> 02:02:23,760 >> És ez nem feltétlenül jelenti azt, ez 2477 02:02:23,760 --> 02:02:26,343 mit kell tennie, ha írásban még a legegyszerűbb program. 2478 02:02:26,343 --> 02:02:29,280 Vegyünk valamit, ami nyilvánvalóan Nagyon egyszerű, nagyon rövid, 2479 02:02:29,280 --> 02:02:31,800 és újra végrehajtja segítségével túl sok kódot. 2480 02:02:31,800 --> 02:02:34,560 De akkor valóban látni, és idő tekint vissza ezeket a példákat, 2481 02:02:34,560 --> 02:02:38,610 és észre, ó, ezek a lépések vettünk, hogy ténylegesen általánosítani, 2482 02:02:38,610 --> 02:02:40,797 faktor valamit, amíg a végén a nap 2483 02:02:40,797 --> 02:02:42,380 a kód valójában nagyon ésszerű. 2484 02:02:42,380 --> 02:02:45,960 Mert, ha azt akarom, hogy köhög három szer majd tüsszentés háromszor, 2485 02:02:45,960 --> 02:02:50,420 Én egyszerűen megy ujrafuttatni ezt, programot, hogy a köhögés, és futtassa a köhögés. 2486 02:02:50,420 --> 02:02:53,620 És van három köhögések és három tüsszentés. 2487 02:02:53,620 --> 02:02:55,990 >> És így ez egy alapvető paradigma, ha úgy tetszik, 2488 02:02:55,990 --> 02:03:00,110 A hogyan lehet járni valójában program végrehajtása. 2489 02:03:00,110 --> 02:03:03,220 De nézzük meg, most mi van mi már ennek az összes ebben az időben, 2490 02:03:03,220 --> 02:03:06,940 és mi néhány végső darab mögött ezt az egyszerű paranccsal. 2491 02:03:06,940 --> 02:03:09,620 A nap végén, most már használta csenget, mint a mi fordító. 2492 02:03:09,620 --> 02:03:11,494 Mi már írt forrás kódot, konvertálás 2493 02:03:11,494 --> 02:03:12,820 via Clang gépi kódra. 2494 02:03:12,820 --> 02:03:15,540 >> És a korábban használt, hogy csak hogy megkönnyítse a billentyűket, így 2495 02:03:15,540 --> 02:03:20,740 hogy nem kell emlékezni azok ráolvasások a Clang is. 2496 02:03:20,740 --> 02:03:22,640 De mi is készítsünk valójában csinál? 2497 02:03:22,640 --> 02:03:24,750 És viszont, mi Csengés valójában csinál? 2498 02:03:24,750 --> 02:03:28,790 >> Kiderült, bár már egyszerűsített a mai vita azzal, 2499 02:03:28,790 --> 02:03:33,090 szedése forráskód, át, mint bemenetet egy fordító, amely megadja 2500 02:03:33,090 --> 02:03:35,750 kimenete gép kódot, kiderül van 2501 02:03:35,750 --> 02:03:37,420 Néhány különböző lépések benne van. 2502 02:03:37,420 --> 02:03:41,940 És összeállítása történik, hogy az esernyő kifejezés egy csomó lépést. 2503 02:03:41,940 --> 02:03:43,970 De nézzük csak ugratni ezt ki nagyon gyorsan. 2504 02:03:43,970 --> 02:03:48,070 >> Kiderült, hogy mi már ennek több dolgot minden alkalommal, amikor fut a program, 2505 02:03:48,070 --> 02:03:50,990 vagy minden alkalommal, amikor összeállítja a mai program. 2506 02:03:50,990 --> 02:03:55,020 Tehát előfeldolgozás utal this-- semmit egy C program, 2507 02:03:55,020 --> 02:03:58,720 mint látni fogjuk, újra és újra, hogy indul ez a hash szimbólum, 2508 02:03:58,720 --> 02:04:03,320 vagy a hashtag szimbólum itt azt jelenti, ez egy előfeldolgozó irányelvet. 2509 02:04:03,320 --> 02:04:07,330 Ez azt jelenti, ebben az esetben, hé számítógép, valamit tenni ezt a fájlt 2510 02:04:07,330 --> 02:04:09,430 mielőtt ténylegesen lefordítani a saját kódját. 2511 02:04:09,430 --> 02:04:15,220 >> Ebben az esetben a hash közé IS, lényegében C- szóval, 2512 02:04:15,220 --> 02:04:19,325 hé számítógép, menj a tartalom A CS50.h és illessze be őket ide. 2513 02:04:19,325 --> 02:04:22,170 Hey számítógép, menj a tartalmát szabvány IO.h, 2514 02:04:22,170 --> 02:04:24,690 bárhol legyen is az merevlemez, másolja be ide. 2515 02:04:24,690 --> 02:04:27,390 Tehát ezek a dolgok történnek első közben előfeldolgozás. 2516 02:04:27,390 --> 02:04:28,880 >> És csenget teszi mindezt számunkra. 2517 02:04:28,880 --> 02:04:30,510 És mindezt olyan rohadt gyors, még csak nem is 2518 02:04:30,510 --> 02:04:32,000 ha négy különböző dolgok történnek. 2519 02:04:32,000 --> 02:04:34,100 De ez az első ilyen lépés. 2520 02:04:34,100 --> 02:04:35,560 >> Hogy valójában mi történik ezután? 2521 02:04:35,560 --> 02:04:38,320 Nos, a következő hivatalos lépés összeállítása. 2522 02:04:38,320 --> 02:04:40,385 És kiderül, hogy összeállítása program 2523 02:04:40,385 --> 02:04:44,060 technikailag azt jelenti, haladva forráskód, a dolgok lettek 2524 02:04:44,060 --> 02:04:47,890 írogat ma, hogy valami úgynevezett assembly kód, valami 2525 02:04:47,890 --> 02:04:49,260 úgy néz ki, egy kicsit más. 2526 02:04:49,260 --> 02:04:51,050 >> És valóban, látjuk ezt a nagyon gyorsan. 2527 02:04:51,050 --> 02:04:53,890 Hadd valójában bemegy az IDE. 2528 02:04:53,890 --> 02:04:58,050 Hadd menjek előre, és nyitott hello.c, amely a legelső program, amellyel mi 2529 02:04:58,050 --> 02:04:59,120 kezdődött ma. 2530 02:04:59,120 --> 02:05:04,130 És hadd menjen előre, és futtatni csenget egy kicsit másképp, csenget-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 amely ténylegesen fog adj egy másik fájl hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> És valószínűleg soha újra látni ezt a fajta kód. 2533 02:05:10,330 --> 02:05:13,030 Ha az előírtnál alacsonyabb szinten rendszerek osztály, mint CS61, 2534 02:05:13,030 --> 02:05:14,920 akkor egy sokkal az ilyen típusú kódot. 2535 02:05:14,920 --> 02:05:17,020 De ez assembly nyelven. 2536 02:05:17,020 --> 02:05:22,050 Ez x86 assembly hogy a CPU, ami mögöttes 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE ténylegesen meg is érti. 2538 02:05:24,460 --> 02:05:27,060 >> És rejtélyes, ahogyan azt a nézd, ez valami 2539 02:05:27,060 --> 02:05:29,180 A számítógép megért elég jól. 2540 02:05:29,180 --> 02:05:30,790 Sub q, ez egy kivonni. 2541 02:05:30,790 --> 02:05:31,660 Van mozgásokat. 2542 02:05:31,660 --> 02:05:35,730 >> Ott hívja a funkciók itt, x ORING, a mozgás, egy bővítmény, a pop, 2543 02:05:35,730 --> 02:05:36,430 visszatérés. 2544 02:05:36,430 --> 02:05:38,850 Tehát van néhány nagyon alacsony szintű utasítások 2545 02:05:38,850 --> 02:05:41,280 hogy CPU megérteni, hogy Utaltam korábban. 2546 02:05:41,280 --> 02:05:43,100 Ez az, amit az Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Vannak minták nullák és egyesek, hogy 2548 02:05:45,030 --> 02:05:51,800 Térkép ezekre arcanely szól, de valamelyest jól elemzi, utasítások, 2549 02:05:51,800 --> 02:05:52,780 hogy úgy mondjam. 2550 02:05:52,780 --> 02:05:54,780 Ez történik, ha fordítod a kódot. 2551 02:05:54,780 --> 02:05:58,560 Kapsz összeszerelés nyelv belőle, amely 2552 02:05:58,560 --> 02:06:04,680 azt jelenti, a harmadik lépés, hogy össze hogy szerelés kódot, végül, 2553 02:06:04,680 --> 02:06:09,080 gép code-- nullák, nem pedig szöveg, láttunk egy perce. 2554 02:06:09,080 --> 02:06:13,370 >> Tehát előkezelést jelent megtalálni és cserélje ki, és néhány más dolog. 2555 02:06:13,370 --> 02:06:16,430 Fordítása veszi a forrás kódot C forráskód 2556 02:06:16,430 --> 02:06:18,980 hogy írtunk, a gyülekezési kódot, amit csak nézett. 2557 02:06:18,980 --> 02:06:22,170 Összeszerelése tart, hogy a szerelvény kódot nullák és egyesek 2558 02:06:22,170 --> 02:06:24,680 hogy a CPU tényleg megérteni a végén a nap. 2559 02:06:24,680 --> 02:06:27,630 És összekapcsolása az utolsó lépés hogy történik us-- újra, 2560 02:06:27,630 --> 02:06:29,830 Olyan gyorsan még azt sem notice--, amely azt mondja, 2561 02:06:29,830 --> 02:06:32,460 hé gépedre, akkor az összes a nullák és egyesek, hogy 2562 02:06:32,460 --> 02:06:36,750 eredményezett összeállítása Dávid kódot, és a fő funkciója ebben az esetben. 2563 02:06:36,750 --> 02:06:39,160 >> És hé számítógép, menj mind a nullák és egyesek 2564 02:06:39,160 --> 02:06:42,180 hogy a CS50 személyzet írta belül a CS50 könyvtár. 2565 02:06:42,180 --> 02:06:43,440 Keverjük ezeket be Dávid. 2566 02:06:43,440 --> 02:06:46,648 És hé számítógép, akkor kap az összes nullát és az is, hogy valaki más írta évekkel 2567 02:06:46,648 --> 02:06:47,470 ezelőtt printf. 2568 02:06:47,470 --> 02:06:49,880 És hozzá ezeket a egészet, úgy, hogy mi már 2569 02:06:49,880 --> 02:06:52,870 Megkaptam a nullák és egyesek, a CS50 személyzet nullák és egyesek, 2570 02:06:52,870 --> 02:06:55,370 A printf nullák és egyesek, és bármi más, amit használ. 2571 02:06:55,370 --> 02:07:00,410 >> Mindannyian kap összefogása egyetlen nevű program, ebben az esetben, helló. 2572 02:07:00,410 --> 02:07:03,141 Tehát ezentúl, mi csak használja a szót összeállítására. 2573 02:07:03,141 --> 02:07:06,390 És mi magától értetődőnek, hogy amikor azt mondjuk, fordítsa le a programot, az azt jelenti, 2574 02:07:06,390 --> 02:07:08,849 hé nem a pre-feldolgozás, összeszerelés, és összekapcsolása. 2575 02:07:08,849 --> 02:07:11,890 De van valójában néhány szaftos cucc folyik ott a motorháztető alatt. 2576 02:07:11,890 --> 02:07:13,723 És főleg, ha kap kíváncsi egy ideig, 2577 02:07:13,723 --> 02:07:15,900 kezdheti dugta körül ezen az alacsonyabb szinten. 2578 02:07:15,900 --> 02:07:19,660 De most, hogy észre között elvitelre ma 2579 02:07:19,660 --> 02:07:23,420 egész egyszerűen a egy folyamat kezdetét, 2580 02:07:23,420 --> 02:07:26,700 szerzés kényelmes valami hasonló hello world. 2581 02:07:26,700 --> 02:07:29,575 Sőt, a legtöbb, amit tettünk ma biztosan nem fog süllyedni szupergyors. 2582 02:07:29,575 --> 02:07:31,491 És ez időbe idő, és némi gyakorlatot. 2583 02:07:31,491 --> 02:07:33,864 És esély, akkor rendezni Az akarom, hogy elérje a billentyűzetet 2584 02:07:33,864 --> 02:07:34,780 vagy kiabálni a képernyőn. 2585 02:07:34,780 --> 02:07:35,880 És mindez nem baj. 2586 02:07:35,880 --> 02:07:38,320 Bár, talán próbáld meg nem csinálni a könyvtárban annyira. 2587 02:07:38,320 --> 02:07:40,820 >> És végül, akkor lehet tudni azonban, hogy indul 2588 02:07:40,820 --> 02:07:44,580 látva minták, mind a jó kódot hogy amit írt, és a hibákat 2589 02:07:44,580 --> 02:07:45,370 hogy amit tett. 2590 02:07:45,370 --> 02:07:48,965 És ugyanúgy, mint a folyamat válás TF vagy CA-szerű, 2591 02:07:48,965 --> 02:07:51,590 kezdesz, hogy jobb és jobban látni azokat a mintákat, 2592 02:07:51,590 --> 02:07:53,774 és csak megoldani az saját problémáit végül. 2593 02:07:53,774 --> 02:07:56,940 Addig nem lesz elég bennünket, hogy kölcsön van támogatás, és neked 2594 02:07:56,940 --> 02:07:57,481 ezen keresztül. 2595 02:07:57,481 --> 02:07:59,450 És az írási-up minden a problémák 2596 02:07:59,450 --> 02:08:01,366 lesztek vezetve az összes parancsot 2597 02:08:01,366 --> 02:08:05,330 hogy én biztosan tudom, honnan sok gyakorlás már, 2598 02:08:05,330 --> 02:08:07,380 de lehet, hogy már repült több mint egy feje most. 2599 02:08:07,380 --> 02:08:08,580 És ez teljesen rendben van. 2600 02:08:08,580 --> 02:08:11,230 >> De végül is, fogsz kezdeni, hogy mintákat. 2601 02:08:11,230 --> 02:08:14,260 És ha egyszer már az összes buta részletek, mint például a zárójelek 2602 02:08:14,260 --> 02:08:16,710 és zárójelekkel, és félig kettőspont, és a dolgok, őszintén szólva, 2603 02:08:16,710 --> 02:08:19,360 hogy egyáltalán nem intellektuálisan érdekes. 2604 02:08:19,360 --> 02:08:22,690 És ez nem az a célja hogy olyan bevezető osztályban. 2605 02:08:22,690 --> 02:08:24,410 Ez az ötleteket, hogy fognak számít. 2606 02:08:24,410 --> 02:08:26,659 >> Ez a hurkokat, és a körülmények között, és a funkciók, 2607 02:08:26,659 --> 02:08:30,552 és erőteljesebben az absztrakció, és a faktoring a kódot, 2608 02:08:30,552 --> 02:08:33,510 és a jó design, és a jó stílus, és végső soron a helyességét 2609 02:08:33,510 --> 02:08:37,330 a kód, ami végső soron fog a leginkább számítanak. 2610 02:08:37,330 --> 02:08:40,925 Így a jövő héten, megtesszük ezeket ötletek, hogy először láttam a Scratch 2611 02:08:40,925 --> 02:08:42,800 és most lefordított C. És kezdjük 2612 02:08:42,800 --> 02:08:45,740 bevezetni az első a Természetesen a valós tartományokat. 2613 02:08:45,740 --> 02:08:50,140 >> Majd összpontosítani a világ biztonságát, pontosabban kriptográfia, 2614 02:08:50,140 --> 02:08:51,980 A szakterületen kódolás információ. 2615 02:08:51,980 --> 02:08:54,000 És az elsők között problémák te magad 2616 02:08:54,000 --> 02:08:56,840 lesz, hogy írjon túl játszik néhány szintaktikai 2617 02:08:56,840 --> 02:08:59,880 és megoldása néhány logikai problémák, végül nemsokára, 2618 02:08:59,880 --> 02:09:03,960 az, hogy valóban zavarják, vagy titkosítása, és végül visszafejteni adatokat. 2619 02:09:03,960 --> 02:09:06,470 És minden tettünk ma is meglehetősen alacsony 2620 02:09:06,470 --> 02:09:09,190 szinten, csak megy, hogy a számunkra, hogy egy, egy, 2621 02:09:09,190 --> 02:09:13,550 és még egy lépést a fenti felé írásban a legérdekesebb kódot sem. 2622 02:09:13,550 --> 02:09:15,050 >> Így még az, hogy a jövő héten. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [VIDEO LEJÁTSZÁS] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> -Mit Tudsz mondani nekem utoljára látta? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Mit Mondjak, tényleg? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Úgy értem, ez olyan volt, mint bármely más gyártás előtti próba, 2631 02:09:35,340 --> 02:09:40,510 csak itt nem volt valami azt mondta a legvégén, hogy ragadt rám. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -Ez Volt CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -Ez Egy vágás mindenki, remek munkát végzett próba. 2636 02:09:52,190 --> 02:09:53,070 >> -Ez Ebéd? 2637 02:09:53,070 --> 02:09:54,986 >> Igen, te és én megragad egy szendvicset egy kicsit. 2638 02:09:54,986 --> 02:09:58,380 Hadd eligazítást a David nagyon gyorsan. 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 LEJÁTSZÁS]