1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [2. nädalal Jätkub] 2 00:00:02,270 --> 00:00:04,220 [David J. Malan, Harvard University] 3 00:00:04,220 --> 00:00:06,880 [See on CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 Hea küll. See on CS50, ja see on 2. nädala lõpus. 5 00:00:10,990 --> 00:00:14,410 Kui arvate, et näljane Umbes samal ajal homme, 6 00:00:14,410 --> 00:00:18,620 tean, et me ei kavatse kutsuda nagu väike grupp homme, neljapäeval, 1:15. 7 00:00:18,620 --> 00:00:21,360 Seal on see link siin, kui soovite RSVP. 8 00:00:21,360 --> 00:00:26,740 Kosmos on piiratud, nii et palun andeks, kui vorm on täis selleks ajaks olete täitke see ära. 9 00:00:26,740 --> 00:00:29,300 Teine link küll, et võiks huvi on see. 10 00:00:29,300 --> 00:00:32,369 Vaid umbes kuu aja pärast, muidugi saab olema kättesaadav 11 00:00:32,369 --> 00:00:36,890 kõik laiemalt kaudu EDX, mille kaudu inimesed Internetis saab jälgida mööda, 12 00:00:36,890 --> 00:00:39,380 tegelda muidugi üsna aktiivselt, tegelikult. 13 00:00:39,380 --> 00:00:42,270 Nad kasutavad CS50 Appliance ja CS50 Arutage 14 00:00:42,270 --> 00:00:45,490 ja enamik erinevate tarkvara vahendeid, mis meil juba on kasutanud sel semestril. 15 00:00:45,490 --> 00:00:48,710 Ja üks algatused tahaksime võtta kui katset sel aastal 16 00:00:48,710 --> 00:00:51,930 on näha, kui palju sisu saame tõlkida 17 00:00:51,930 --> 00:00:53,960 teistesse suuline ja kirjalik tekst. 18 00:00:53,960 --> 00:00:57,500 Nii et kui teil olla huvi osaleda selles projektis 19 00:00:57,500 --> 00:01:02,270 mille anname inglise ärakirju ja subtiitrid kursuse loengud 20 00:01:02,270 --> 00:01:05,450 ja lühikesed püksid ja seminarid ja lõigud jms, 21 00:01:05,450 --> 00:01:08,200 kui te räägite soravalt või kirjutada ladusalt mõnda muud keelt, 22 00:01:08,200 --> 00:01:12,290 oleks tore kaasata teid selle projekti, mille te võtma ühe või mitme videod 23 00:01:12,290 --> 00:01:15,200 teisendades neid keel te teate väga hästi. 24 00:01:15,200 --> 00:01:18,700 >> Et anda teile tunne liides, seal on see veebipõhine kasutajaliides 25 00:01:18,700 --> 00:01:22,090 et me kasutame, mis loob sisuliselt UI niimoodi. 26 00:01:22,090 --> 00:01:24,290 See oli mulle õpetada mõned Halloween tagasi 27 00:01:24,290 --> 00:01:27,390 ja paremal servas on must kõrval need ajatemplid, 28 00:01:27,390 --> 00:01:31,210 näete erinevaid asju, mis tuli mu suust, et päeval, 29 00:01:31,210 --> 00:01:34,850 ja siis selle all on Teil võimalik tõlkida mõnda muud keelt 30 00:01:34,850 --> 00:01:38,690 täpselt, mida kaardistamine on vahel, antud juhul inglise ja, ütleme, Hispaania. 31 00:01:38,690 --> 00:01:40,440 Nii et see on tegelikult väga kasutajasõbralik vahend. 32 00:01:40,440 --> 00:01:43,370 Saate kerida ja edasi väga kergesti klaviatuuri otseteed. 33 00:01:43,370 --> 00:01:47,490 Nii et kui soovid osaleda selles eksperimendis ja olla oma sõnu näha ja lugeda 34 00:01:47,490 --> 00:01:51,850 poolt potentsiaalselt tuhanded inimesed seal, palun ärge vastake osaleda. 35 00:01:51,850 --> 00:01:54,350 Üks sõna kassipoeg alates esmaspäevast. 36 00:01:54,350 --> 00:02:00,350 Muidu oleme saatnud liiga hirmutav sõnum, ei mõista, et tööaega soovitan 37 00:02:00,350 --> 00:02:03,300 ja kui lõigud näitavad, disain muidugi on väga palju 38 00:02:03,300 --> 00:02:07,360 anda õpilastele võimalus teha koostööd ja räägime läbi töötada probleem komplekti 39 00:02:07,360 --> 00:02:11,260 ja probleeme koos, ja tõesti liin lihtsalt taandub, 40 00:02:11,260 --> 00:02:16,010 jälle tööd sa lõpuks esitama peaks olema oma. 41 00:02:16,010 --> 00:02:18,860 Ja nii päris ausalt, ametis tundi see on täiesti normaalne, 42 00:02:18,860 --> 00:02:22,240 see on täiesti oodata isegi, tuleb jututoas mõned sõber sinu kõrval. 43 00:02:22,240 --> 00:02:24,370 >> Kui ta üritab mõne teema ja sa oled nagu, 44 00:02:24,370 --> 00:02:27,940 "Noh, lubage mul anda teile pilguheit mõned rida koodi, mis ma kirjutasin," sellest pole midagi, 45 00:02:27,940 --> 00:02:31,250 see juhtub, ja see on väga soodusta, ma arvan, kus õppimise protsessis. 46 00:02:31,250 --> 00:02:36,750 Kui liin muutub ületanud on kui pea on omamoodi kallutatud siin liiga palju sekundeid 47 00:02:36,750 --> 00:02:41,160 või minutid tõesti on just torustikupuhastusvahendid võimalus oma sõber, 48 00:02:41,160 --> 00:02:44,160 ja kindlasti siis, kui asjad vahetatud e-posti teel ja Dropbox jms, 49 00:02:44,160 --> 00:02:45,640 ka seal on joon. 50 00:02:45,640 --> 00:02:48,620 Nii kõigi vahenditega end mugavalt ja tundma motivatsiooni vestelda sõpradega 51 00:02:48,620 --> 00:02:52,810 ja klassikaaslastega umbes psets ja rohkem ja lihtsalt aru, et mida sa lõpuks esitama 52 00:02:52,810 --> 00:02:57,340 peaks tõesti olema toote oma loomingu ja mitte keegi teine. 53 00:02:57,340 --> 00:03:00,490 Ja nii üks valdkonnaspetsiifilist probleeme pset2, 54 00:03:00,490 --> 00:03:04,740 mis tulevad läbi homme hilisõhtul, on sukelduda maailma krüptograafia, 55 00:03:04,740 --> 00:03:08,970 mis on kunst krüptimine või skrambleerimise andmed, 56 00:03:08,970 --> 00:03:12,600 ja see lõppkokkuvõttes on seotud maailma julgeolekut. 57 00:03:12,600 --> 00:03:16,560 Nüüd, turvalisusel enamik meist on kujul üsna Ilmalik mehhanismid. 58 00:03:16,560 --> 00:03:19,050 Kõigil meil on kasutajanimed ja paroolid, 59 00:03:19,050 --> 00:03:23,450 ja meil kõigil on väga halb kasutajanimed ja paroolid, kõige tõenäolisem. 60 00:03:23,450 --> 00:03:28,240 >> Kui teie parool on sama paljudel veebisaitidel, et ilmselt ei ole parim idee, 61 00:03:28,240 --> 00:03:30,070 kui me arutame poole semestri lõpus. 62 00:03:30,070 --> 00:03:34,720 Kui teie parool on kirjutatud Kleepmärkme - no nali - monitori, 63 00:03:34,720 --> 00:03:38,350 et liiga ei ole tingimata parim disain, kuid üsna tavaline nähtus. 64 00:03:38,350 --> 00:03:42,470 Ja kui te ei kasuta krüptograafia varjata oma paroole, 65 00:03:42,470 --> 00:03:44,210 nad on eriti haavatavad. 66 00:03:44,210 --> 00:03:47,270 Nii et kui sa arvad, et oled super tark omades varjatud Wordi dokument 67 00:03:47,270 --> 00:03:49,910 kuskil kõvakettal, mis on kõik oma paroolid 68 00:03:49,910 --> 00:03:53,670 aga see on kaustas, et keegi läheb vaatama, et liiga ei ole väga turvaline mehhanism. 69 00:03:53,670 --> 00:03:56,990 Ja mis pset2 tutvustab on see kunst krüptograafia 70 00:03:56,990 --> 00:04:02,010 ja skrambleerimise teavet nii, et asjad paroolid on kõik turvalisemaks. 71 00:04:02,010 --> 00:04:05,790 Kontekstis on see, et on ebakindlad andmed 72 00:04:05,790 --> 00:04:07,930 on võimalus varjata seda ja rüselus see. 73 00:04:07,930 --> 00:04:11,470 Ja nii see näiteks on näide krüpteeritud sõnum. 74 00:04:11,470 --> 00:04:14,700 See tegelikult ütleb midagi inglise keeles, kuid see on selgelt ole täielikult selge. 75 00:04:14,700 --> 00:04:18,279 Ja me täisringi täna tease peale mida see salajane sõnum on siin. 76 00:04:18,279 --> 00:04:23,490 Aga reaalses maailmas arvuteid, asjad ei paista isegi neil võib olla ingliskeelseid fraase. 77 00:04:23,490 --> 00:04:28,430 Näiteks see, mida te võite leida standard Linux või Mac ja UNIX arvuti 78 00:04:28,430 --> 00:04:32,070 aastal fail, mis oli kunagi ammu kutsus salasõna faili. 79 00:04:32,070 --> 00:04:34,200 >> Tänapäeval on see viidud teistesse kohtadesse. 80 00:04:34,200 --> 00:04:39,210 Aga kui sa vaatad õiges kohas süsteem, näete mitte ainult oma kasutajanime 81 00:04:39,210 --> 00:04:43,400 või et teiste inimeste kaudu, kuid näete krüpteeritud versioon oma parool. 82 00:04:43,400 --> 00:04:47,980 Tõepoolest, sõna krüpt on näidanud, et kodus asjad on krüpteeritud, 83 00:04:47,980 --> 00:04:52,680 ja see seeria näiliselt juhuslike tähtede ja tähed ja numbrid ja nii edasi 84 00:04:52,680 --> 00:04:56,480 saab dekrüpteerida vaid üldiselt teada mõned saladus - 85 00:04:56,480 --> 00:04:58,840 salajane sõna, saladus arv - 86 00:04:58,840 --> 00:05:03,160 ja nii tõesti, kunst krüptograafia lõpuks taandub usalda mingisugune 87 00:05:03,160 --> 00:05:05,650 ja teades midagi, mida keegi teine ​​ei tee. 88 00:05:05,650 --> 00:05:10,090 Nii Uurime seda veidi üksikasjalikumalt täna ja pset tulla. 89 00:05:10,090 --> 00:05:12,200 Ja nüüd sõna läbimise / mitteläbimise. 90 00:05:12,200 --> 00:05:15,360 Eriti kui mõned teist on sukeldunud pset1, Appliance, 91 00:05:15,360 --> 00:05:19,080 ja väga uus maailm ise aru, et frustratsiooni ja segadust 92 00:05:19,080 --> 00:05:21,700 ja lihtsalt tehnilised probleemid on üsna ootuspärane, 93 00:05:21,700 --> 00:05:24,180 eriti esimene pset, kus on nii palju uut, 94 00:05:24,180 --> 00:05:27,730 lihtsalt saada tuttav ls ja cd ja kõik need kauge käsud 95 00:05:27,730 --> 00:05:33,050 ja uues keskkonnas, ja see on eraldi tegeliku materjali ja programmeerimine ise. 96 00:05:33,050 --> 00:05:36,940 Nii mõistavad ka, et seal on kindlasti tööaega, mis eksisteerivad tugistruktuur. 97 00:05:36,940 --> 00:05:38,880 >> Sektsioonid algab sel pühapäeval. 98 00:05:38,880 --> 00:05:42,960 Aga mis kõige tähtsam, kui te ei tunne lihtsalt, et see ei ole maailma teid, 99 00:05:42,960 --> 00:05:44,710 aru, et see tõesti ei lihtsalt võtab aega. 100 00:05:44,710 --> 00:05:48,600 Ja kui poleks seda võimalust aastat tagasi minu jaoks võtmise klassi läbimise / mitteläbimise, 101 00:05:48,600 --> 00:05:50,990 ausalt, ma ei oleks isegi jalg klassiruumis. 102 00:05:50,990 --> 00:05:53,690 Ja te võite seda muuta, kuni, ütleme, viienda esmaspäeval muidugi 103 00:05:53,690 --> 00:05:58,280 nii et kui sa oled äärel nüüd aru, et mitte pea mõnda muud veed kokku, 104 00:05:58,280 --> 00:06:01,260 ei kindlasti kaaluda lihtsalt lendama katse läbimise / mitteläbimise. 105 00:06:01,260 --> 00:06:04,570 Jällegi, ei ole tõesti see kultuur siin Harvardi võtta asju katse läbimise / mitteläbimise 106 00:06:04,570 --> 00:06:08,670 kuna igaüks tahab saavutada või overachieve, 107 00:06:08,670 --> 00:06:11,130 aga ausalt, see on suurepärane võimalus proovida midagi välja 108 00:06:11,130 --> 00:06:16,720 mis ei pruugi olla tuttav, ja sa lõpuks teed, enamikul juhtudel üsna hästi, 109 00:06:16,720 --> 00:06:18,210 ehk palju oma üllatuseks. 110 00:06:18,210 --> 00:06:20,980 Ja konkreetsemalt, mida ma arvan katse läbimise / mitteläbimise üldiselt teeb, 111 00:06:20,980 --> 00:06:22,940 eriti kui sa võisid kogenud pset0, 112 00:06:22,940 --> 00:06:26,560 kui paned 10 tundi, 15 tundi, 25 tundi mõnda pset 113 00:06:26,560 --> 00:06:29,920 ja sa oled lihtsalt peksma oma pead vastu seina ja see muutub super hilisõhtuni 114 00:06:29,920 --> 00:06:33,950 aga te olete võtnud pset 90% teed ja sa lihtsalt ei saa aru, üks asi, 115 00:06:33,950 --> 00:06:36,520 katse läbimise / mitteläbimise tõesti võtab serv off klassi niimoodi, 116 00:06:36,520 --> 00:06:39,100 kus saab omamoodi õnnelikult öelda: "Okei, ma tean, see ei ole täiuslik, 117 00:06:39,100 --> 00:06:42,350 kuid olen töötanud my ass off, ma olen päris rahul, kui ta sattus, " 118 00:06:42,350 --> 00:06:44,850 ja mis vastavad ootused läbimise / mitteläbimise. 119 00:06:44,850 --> 00:06:47,540 Nii et ärge hoidke seda silmas pidades. Hea küll. 120 00:06:47,540 --> 00:06:50,520 >> Nii neile, kes on võidelnud kasutada Harvardi ülikooli Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 tean, et seal on CS50 SSID, Wi-Fi ühendus, ujuvad ringi 122 00:06:54,780 --> 00:06:56,490 et siin võib olla parem õnne. 123 00:06:56,490 --> 00:07:00,130 See on natuke irooniline, et parool, kui soovid proovida ühendades selle 124 00:07:00,130 --> 00:07:08,350 parema kiirusega - ja andke teada, kui see pole parem - on 12345, kõik viis kuni 8 125 00:07:08,350 --> 00:07:10,910 sest 8 on turvalisem kui 5. 126 00:07:10,910 --> 00:07:16,910 Nii et kui teil on vaja wifi parooli, ühendada CS50 juhtmevabalt siin, 12345678, 127 00:07:16,910 --> 00:07:20,380 ja postitustesse CS50 Arutle, kui sul on veel vahelduva ühenduvust küsimusi, 128 00:07:20,380 --> 00:07:25,420 ja laseme volitusi, et olla teavad seda ruumi. Hea küll. 129 00:07:25,420 --> 00:07:32,230 Nii kiire teaser, eriti neile, kes on fänn poiste ja tüdrukute kõike Apple. 130 00:07:32,230 --> 00:07:37,460 Mida ma kaevasin üles mõned aastad tagasi oli see fail siin, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 lihtsalt selline teha rohkem konkreetseid ja keerulisemaks 132 00:07:39,930 --> 00:07:42,560 mõned rohkem põhi-C programmide oleme olnud kirjalikult. 133 00:07:42,560 --> 00:07:46,910 Nii et ma avanud seda faili iUnlock.c. See on saadaval Loengud lehel täna. 134 00:07:46,910 --> 00:07:49,810 Vasakul servas näed pikka nimekirja funktsioone. 135 00:07:49,810 --> 00:07:53,230 Nii et mehe, kes kirjutas selle kirjutasin üles palju funktsioone, rohkem kui lihtsalt põhiline. 136 00:07:53,230 --> 00:07:57,340 Ta kasutas terve hulk raamatukogude siin, ja kui me hakkame sirvimiseks, 137 00:07:57,340 --> 00:08:04,890 Mis see tegelikult on esimene, ma usun, crack jaoks originaal iPhone. 138 00:08:04,890 --> 00:08:09,830 >> Kui sa tahad Jailbreak originaal iPhone, mis tähendab untether see AT & T 139 00:08:09,830 --> 00:08:13,710 ja tegelikult installida spetsiaalne tarkvara peal ja teha asju, et Apple ei taha, et inimesed teevad, 140 00:08:13,710 --> 00:08:18,480 keegi võttis aega, et aru saada, kuidas täpselt nad võiksid kasutada tarkvara vigu, 141 00:08:18,480 --> 00:08:22,690 vigu, vigu, Apple tarkvara, ja seega sündis iUnlock.c-- 142 00:08:22,690 --> 00:08:26,760 et kui koostatakse see arvutis ja installitud see peale iPhone 143 00:08:26,760 --> 00:08:29,430 mis oli ühendatud arvuti kaudu, ütleme, USB kaabel, 144 00:08:29,430 --> 00:08:32,450 see annaks sulle haldus-või administraatoriõigusi oma iPhone 145 00:08:32,450 --> 00:08:34,620 ja saate teha päris palju iganes sa tahad. 146 00:08:34,620 --> 00:08:36,400 Ja seega ei ole see põnev kassi-hiire mäng 147 00:08:36,400 --> 00:08:39,340 vahel Apple ja mujal maailmas eriti kui nad, nagu paljud ettevõtted, 148 00:08:39,340 --> 00:08:43,350 proovida lukustada oma kraami maha, nii et saate teha ainult seda, mida nad kavatsevad. 149 00:08:43,350 --> 00:08:47,360 Kuid tänu inimestele meeldib see ja mõistmist madala üksikasjad - 150 00:08:47,360 --> 00:08:50,830 ja antud juhul C programmeerimine - ja palju tuttavaid konstrueerib 151 00:08:50,830 --> 00:08:55,280 et oleme hakanud mängides, siis on võimalik tõesti võimendavat riistvara 152 00:08:55,280 --> 00:08:59,250 viisil, näed ja ei pruugi mõned äriühinguks. 153 00:08:59,250 --> 00:09:01,600 Nii näiteks, ma ei tea, mida see kõik teeb, 154 00:09:01,600 --> 00:09:03,580 kuid GetVersion kõlab üsna lihtne, 155 00:09:03,580 --> 00:09:05,710 ja tundub, et see on funktsioon, mis see inimene kirjutas. 156 00:09:05,710 --> 00:09:09,250 See võtab mingi täisarv argumendina, ei tagasta midagi, 157 00:09:09,250 --> 00:09:13,710 kuid tundub ahelaks jaoks silmus siin ja kui tingimus, kui tingimus pausi, 158 00:09:13,710 --> 00:09:16,770 ja kuidagi seotud versiooni numbrite kui me liikuge allapoole 159 00:09:16,770 --> 00:09:19,650 kuigi palju need märksõnad hakkavad olema uued. 160 00:09:19,650 --> 00:09:22,590 Ja seal on palju funktsioone, siin me pole kunagi näinud ja ei pruugi kunagi näha 161 00:09:22,590 --> 00:09:24,350 jooksul poolaastal. 162 00:09:24,350 --> 00:09:29,160 >> Aasta lõpus päev, see kehtivad samad reeglid ja loogika, et oleme mänginud siiani. 163 00:09:29,160 --> 00:09:34,340 Nii et see on liiga vana crack oma iPhone 3s või 4s või peatselt 5s nendel päevadel, 164 00:09:34,340 --> 00:09:38,830 kuid tean, et see kõik on väga palju saadud siin maailmas, et me oleme sukeldunud. 165 00:09:38,830 --> 00:09:42,280 Võtame pilk veidi lihtsa näite: 166 00:09:42,280 --> 00:09:46,260 see üks, lihtsalt saada soojendada mõned süntaks ja ka mõned muud andmed tüüp 167 00:09:46,260 --> 00:09:48,910 et me rääkisime, kuid pole tõesti näinud C. 168 00:09:48,910 --> 00:09:53,670 See on fail nimega positive1.c ja kohta märkusi ülaosas, 169 00:09:53,670 --> 00:09:56,070 see lihtsalt nõuab, et kasutaja anda positiivse arvu. 170 00:09:56,070 --> 00:09:59,910 Nii et see on näide do-kui ahela, mis on kena kasutaja interaktiivsed programmid 171 00:09:59,910 --> 00:10:02,070 kus te rääkima kasutaja teha midagi, 172 00:10:02,070 --> 00:10:05,530 ja kui nad ei tee koostööd te kisa neid või tagasi lükata oma panuse. 173 00:10:05,530 --> 00:10:10,480 Kohtuasi punktis: ma tegema read 19 kuni 24 174 00:10:10,480 --> 00:10:14,620 nii kaua, kui kasutaja ei ole andnud mulle positiivse numbriga. 175 00:10:14,620 --> 00:10:21,340 See detail siin on line 18, miks ma kuulutada N üle kogu see silmuspõletamise ehitada 176 00:10:21,340 --> 00:10:26,870 mitte kohe eelarverida 22, kus ma tegelikult hoolivad saada n? Jah. 177 00:10:26,870 --> 00:10:29,330 [Üliõpilane] reguleerimisala. >> Jah, nii see küsimus ulatust. 178 00:10:29,330 --> 00:10:31,770 Ja üldarusaadavat mõttes, mida see ulatuse viidata? 179 00:10:34,880 --> 00:10:41,560 Jah. >> [Kuuldamatu õpilase vastus] >> Kas te räägite veidi valjem? 180 00:10:41,560 --> 00:10:45,440 [Üliõpilane] Kui pääsete et muutuja. >> Perfect. 181 00:10:45,440 --> 00:10:47,610 Kui pääsete konkreetse tunnuse. 182 00:10:47,610 --> 00:10:50,990 Ja üldiselt, rusikareegel on seni olnud, et reguleerimisala mõned muutuja 183 00:10:50,990 --> 00:10:56,140 on määratletud Viimane looksulg, et olete näinud. 184 00:10:56,140 --> 00:11:03,070 >> Ja nii sel juhul, kui ma tegin vea tunnistamise n real 22, et rida oleks töö. 185 00:11:03,070 --> 00:11:10,840 Ma saaksin int, ja ma paneks see, et muutuja n rida 22, 186 00:11:10,840 --> 00:11:17,060 aga mis rida koodi oleks nüüd ei tea, mida ma räägin? >> [Üliõpilane] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, ja selgub 24. Nagu hästi, sest sel juhul jääb väljapoole looksulg. 188 00:11:23,840 --> 00:11:28,550 Nii lihtsalt natuke ebameeldivalt, kuid väga kergesti lahendada lihtsalt kuulutab muutuja 189 00:11:28,550 --> 00:11:30,700 väljaspool funktsiooni. 190 00:11:30,700 --> 00:11:32,760 Me näeme täna hiljem saate minna veelgi kaugemale 191 00:11:32,760 --> 00:11:34,940 ja siis võiks isegi natuke laisk. 192 00:11:34,940 --> 00:11:39,660 Ja see ei ole soovitatav üldiselt, kuid siis võiks isegi saada laisk 193 00:11:39,660 --> 00:11:44,150 ja panna muutuja globaalselt, kui nii võib öelda, ei sees funktsiooni, mitte sees silmus, 194 00:11:44,150 --> 00:11:49,800 kuid faili ennast, väljaspool kõiki funktsioone olete kirjutanud, kui ma siin tegin real 15. 195 00:11:49,800 --> 00:11:55,220 See on tavaliselt kortsutas kulmu, aga siis on see lahendus mõnikord muid probleeme, 196 00:11:55,220 --> 00:11:56,910 kui me lõpuks näha. 197 00:11:56,910 --> 00:11:59,500 Nii et nüüd me jätan selle niimoodi, aga vaatame, kas me saame selle ümber kirjutada 198 00:11:59,500 --> 00:12:02,360 lihtsalt alustada eneseväljendamisel natuke teistmoodi. 199 00:12:02,360 --> 00:12:05,550 See programm, et asi selge oleks, on positive1. 200 00:12:05,550 --> 00:12:11,980 Lubage mul minna siin ja minu terminaliakent teha positive1, Enter. 201 00:12:11,980 --> 00:12:15,080 Koostab okei. Ma lähen jooksma positive1, Enter. 202 00:12:15,080 --> 00:12:19,250 Ma nõuan, et sa annad mulle positiivne täisarv. Ma ütlen -1. See ei õnnestunud. 203 00:12:19,250 --> 00:12:22,340 0, 99. See tundub töötavat. 204 00:12:22,340 --> 00:12:25,310 Võib-olla mitte kõige range katse, kuid vähemalt on see kena meelerahu kontroll 205 00:12:25,310 --> 00:12:27,100 et me oleme õigel teel. 206 00:12:27,100 --> 00:12:29,570 >> Nüüd lubage mul edasi minna ja avada versioon 2 sellest, 207 00:12:29,570 --> 00:12:32,800 ja mis on erinev juba? 208 00:12:32,800 --> 00:12:39,030 Ta rakendab sama asi, aga mis siin välja hüpates nii selgelt erinev seekord? 209 00:12:40,790 --> 00:12:47,090 See bool roheline. On rõhutatud roheline, see märksõna tuntud bool, mis on andmetüüp. 210 00:12:47,090 --> 00:12:50,510 See ei tule ehitatud, et kõik versioonid C. 211 00:12:50,510 --> 00:12:52,650 Sa pead lisama konkreetse raamatukogu. 212 00:12:52,650 --> 00:12:56,460 Meie puhul ma ka CS50 raamatukogu, nii et meil on juurdepääs bool. 213 00:12:56,460 --> 00:12:59,860 Aga liin 18, me tundub, et on Boole'i ​​väärtus siin nimetatakse tänulik. 214 00:12:59,860 --> 00:13:02,190 Ma võinuks see midagi, kuid ma helistasin ta tänulik 215 00:13:02,190 --> 00:13:04,750 lihtsalt selline edasi mõned semantiline tähendus. 216 00:13:04,750 --> 00:13:07,700 Nii et esialgu on line 18, ma olen ilmselt mitte tänulik 217 00:13:07,700 --> 00:13:12,230 kuna Boole'i ​​väärtus tänulik vastab algselt vale eelarverea 18. 218 00:13:12,230 --> 00:13:16,500 Ja siis tundub, mida ma olen teinud siin ridades 21 kuni 23 219 00:13:16,500 --> 00:13:19,200 on mul lihtsalt selline ümber minu loogika. 220 00:13:19,200 --> 00:13:26,100 Seega ei ole funktsionaalselt erinevad, kuid eelarverida 22 nüüd ma saan vaadata kui int kasutaja on sätestatud 221 00:13:26,100 --> 00:13:31,360 on suurem kui 0, siis ma lihtsalt väärtust muuta tänulikud tõsi. 222 00:13:31,360 --> 00:13:35,590 Ja miks ma seda teen? Kuna vastavalt 25, ilmselt ma lähen vaatan seisukorras. 223 00:13:35,590 --> 00:13:39,760 Kas see tsükkel while tänulik on vale. 224 00:13:39,760 --> 00:13:42,960 Nii tegin selle alternatiivina versioon 1 225 00:13:42,960 --> 00:13:47,050 sest see on vähemalt natuke rohkem intuitiivne ehk see on natuke rohkem maandatud inglise keeles. 226 00:13:47,050 --> 00:13:51,980 Nii et tehke järgmist samas sa ei ole tänulik või kui tänulik on vale. 227 00:13:51,980 --> 00:13:56,220 Ja seekord liiga ma ilmselt ei huvita mäleta, mida kasutaja sisestatud 228 00:13:56,220 --> 00:14:00,050 sest teate pole muutuja n, nii et tegelikult, väikese valge vale seal. 229 00:14:00,050 --> 00:14:03,290 >> Funktsionaalselt programm on natuke teistsugune kui meil põhjani seda 230 00:14:03,290 --> 00:14:04,960 sest ma ei mäleta mida n. 231 00:14:04,960 --> 00:14:09,120 Aga ma tahtsin näidata ka siin, et kuigi me oleme näinud GetInt 232 00:14:09,120 --> 00:14:13,780 ja getString kasutatakse paremal servas võrdusmärk seni 233 00:14:13,780 --> 00:14:17,310 nii et me mäletame väärtus, tehniliselt, see pole hädavajalik. 234 00:14:17,310 --> 00:14:20,290 Kui mingil põhjusel sa lihtsalt ei huvita, et säästa raha, 235 00:14:20,290 --> 00:14:25,540 tahad lihtsalt näha hinda Pange tähele, et me võime lihtsalt kirjutada seda GetInt, 236 00:14:25,540 --> 00:14:27,320 avatud paren lähedal paren. 237 00:14:27,320 --> 00:14:30,570 See funktsioon ei kavatse naasta väärtus, nagu me oleme öelnud. 238 00:14:30,570 --> 00:14:32,220 See läheb teile tagasi int. 239 00:14:32,220 --> 00:14:34,460 Ja kui sa vaimselt arvan see juhtub, 240 00:14:34,460 --> 00:14:38,190 kui ma kirjuta 99, GetInt tagastab arvu 99, 241 00:14:38,190 --> 00:14:41,840 ja nii kontseptuaalselt, see on nagu minu kood oli tegelikult see. 242 00:14:41,840 --> 00:14:45,950 Nii et kui 99 on tõepoolest suurem kui 0, siis tänulikud muutub tõsi, 243 00:14:45,950 --> 00:14:50,810 siis rida 25 realiseerib ooh, me oleme valmis, sest ma olen nüüd tänulik, 244 00:14:50,810 --> 00:14:53,970 ja kooskõlas 26, me lihtsalt öelda: "Aitäh positiivse täisarvu!" 245 00:14:53,970 --> 00:14:55,960 mis iganes see juhtus olema. 246 00:14:55,960 --> 00:14:59,140 Nüüd teeme veidi süntaktiline suhkru siin, nii rääkida. 247 00:14:59,140 --> 00:15:04,670 Vaatame, kas me saame puhastada seda joont 25 koos selle Kolmas ja viimane variant positive3. 248 00:15:04,670 --> 00:15:13,600 >> Teade ainus erinevus nüüd ongi rida koodi? >> [Üliõpilane] 25. >> [Malan] Jah, 25. 249 00:15:13,600 --> 00:15:17,680 Ja me pole tegelikult näinud seda trikki lihtsalt veel, aga me ei vaata hüüumärk esmaspäeval, 250 00:15:17,680 --> 00:15:21,070 mis tähendab mida? >> [Üliõpilane] Ei. >> Ei või eitus. 251 00:15:21,070 --> 00:15:23,510 Nii, et võta tõeväärtuse ja klapp selle väärtust. 252 00:15:23,510 --> 00:15:25,810 Tõsi muutub vale, vale muutub tõsi. 253 00:15:25,810 --> 00:15:30,420 Nii et see, ma teeksin ettepaneku, on isegi natuke rohkem intuitiivne viis kirjalikult kood 254 00:15:30,420 --> 00:15:33,430 sest ma ikka initsialiseerida tänulikud vale, ma ikka teha järgmist, 255 00:15:33,430 --> 00:15:36,010 Seadsin tänulikud tõsi, kui saabub aeg, 256 00:15:36,010 --> 00:15:40,880 kuid nüüd saab tõesti lihtsalt tõlkida see kood verbaalselt vasakult paremale, 257 00:15:40,880 --> 00:15:45,630 while (! tänulik); sest pauk või hüüumärgiga tähistab mõiste ei, 258 00:15:45,630 --> 00:15:47,580 nii et kui ei tänulik. 259 00:15:47,580 --> 00:15:49,900 Nii et taas, me ei ole kasutusele mingeid uusi mõisteid iseenesest. 260 00:15:49,900 --> 00:15:53,730 Me rääkisime tõeväärtused tagasi, kui me mängisime koos Scratch, 261 00:15:53,730 --> 00:15:56,720 kuid mõistan nüüd me võime lihtsalt hakake meie kood mitmeti. 262 00:15:56,720 --> 00:16:01,060 Nii et eriti pset1 kui sa oled omamoodi hädas nuputada, kuidas kirjutada mõned programmi 263 00:16:01,060 --> 00:16:04,340 koefitsiendid on sul õnne sest ei saa olla suvaline arv lahendused 264 00:16:04,340 --> 00:16:06,110 et saate peale sattuma. 265 00:16:06,110 --> 00:16:10,500 Näiteks, see on lihtsalt 3 isegi kõige lihtsamaid programme. Hea küll. 266 00:16:10,500 --> 00:16:14,200 Ja nüüd meenutada esmaspäeval jätsime selle teadmiseks tagasi väärtused. 267 00:16:14,200 --> 00:16:18,450 Nii et väga esimest korda me kirjutasime programmi, mis ei ole ainult peamine; 268 00:16:18,450 --> 00:16:22,550 see on ka oma kohandatud funktsiooni, et ma kirjutasin siin. 269 00:16:22,550 --> 00:16:26,810 Nii real 31 kaudu 34 Ma olen rakendanud kuubik funktsioon. 270 00:16:26,810 --> 00:16:30,240 See ei ole keeruline. See on lihtsalt * * käesoleval juhul. 271 00:16:30,240 --> 00:16:34,750 Aga mis on tähtis on see, et ma olen võttes sisend kujul 272 00:16:34,750 --> 00:16:39,180 ja ma teen sulle tagasi väljund kujul * *. 273 00:16:39,180 --> 00:16:43,560 Nii et nüüd on mul võimalus, palju nagu ma harjunud koos prinf üksi, 274 00:16:43,560 --> 00:16:47,240 nimetame seda funktsiooni, kutsudes kuubik funktsioon. 275 00:16:47,240 --> 00:16:51,970 >> Ja kuubik funktsioon võtab mõned sisend, ja kuubik tagastab funktsioon mõned väljund. 276 00:16:51,970 --> 00:16:56,960 Seevastu printf lihtsalt tegid midagi. 277 00:16:56,960 --> 00:17:00,840 See ei tagastanud midagi, et me hoolinud, kuigi nagu kõrvale see tagastab väärtuse; 278 00:17:00,840 --> 00:17:03,110 sa lihtsalt üldiselt ignoreerida. 279 00:17:03,110 --> 00:17:06,510 Printf lihtsalt tegid midagi. See oli kõrvalmõjuna trükkimine ekraanile. 280 00:17:06,510 --> 00:17:11,770 Seevastu siin, meil on kuubik funktsioon, mis tegelikult tagastab midagi. 281 00:17:11,770 --> 00:17:15,520 Neile tuttav, see on üsna lihtne idee. 282 00:17:15,520 --> 00:17:19,640 Aga neile vähem tuttav selle idee läbivad sisendite ja saada tagasi väljundid, 283 00:17:19,640 --> 00:17:21,950 proovime lihtsalt midagi super lihtne. 284 00:17:21,950 --> 00:17:25,490 Kas keegi mugav tulemas laval lühidalt? 285 00:17:25,490 --> 00:17:28,040 Sa pead olema rahul kaamera kohta ka teid. Jah? Okei. 286 00:17:28,040 --> 00:17:31,240 Mis su nimi on? >> [Üliõpilane] Ken. >> Ken. Hea küll. Ken, tulge siia. 287 00:17:31,240 --> 00:17:35,050 Ken saab olema funktsioon sordib siin. 288 00:17:35,050 --> 00:17:38,720 Lähme edasi ja tee seda. Lähme natuke uhke. 289 00:17:38,720 --> 00:17:42,260 Meeldiv kohtuda. Tere tulemast keskpunkti. Hea küll. 290 00:17:42,260 --> 00:17:46,640 Asume teele seda nuppu siin. Hea küll. 291 00:17:46,640 --> 00:17:49,820 Nii et siin on kaasaegne kriiditahvel, 292 00:17:49,820 --> 00:17:53,470 ja mis ma olen on peamine funktsioon, näiteks 293 00:17:53,470 --> 00:17:56,460 ja ma ei pea iPadi minu poolt. 294 00:17:56,460 --> 00:17:59,710 >> Ma tõesti ei mäleta, kuidas - Noh, ma ei saa seda öelda. 295 00:17:59,710 --> 00:18:02,480 Ma tõesti ei ole hea käekiri, 296 00:18:02,480 --> 00:18:05,520 ja nii seetõttu ma tahan, et sa trükkida midagi ekraanil minu jaoks. 297 00:18:05,520 --> 00:18:12,040 Räägin põhiprogramm, ja ma lähen, et sa seda öelda 298 00:18:12,040 --> 00:18:16,720 kirjutades seda minu kana nullist ja seejärel läbib teid sisend. 299 00:18:16,720 --> 00:18:20,400 Nii tobe kui see harjutus on, mõiste funktsioonid ja kutsudes funktsiooni 300 00:18:20,400 --> 00:18:22,400 ja jälle funktsioon tõesti taandub sellele. 301 00:18:22,400 --> 00:18:26,260 Olen peamine, ma olen lihtsalt kirjutada printf, tsiteerin-Tsitaat lõppeb midagi ekraanil, 302 00:18:26,260 --> 00:18:29,110 Mul töötab see programm, ja niipea kui printf saab nimetada, 303 00:18:29,110 --> 00:18:32,880 kulub üks argument või üks parameeter mõnikord vahel jutumärgid. 304 00:18:32,880 --> 00:18:35,880 Siin on see argument. Ma panen selle Ken. 305 00:18:35,880 --> 00:18:39,020 Ta on musta kasti kirjutada mõned mitu aastat tagasi 306 00:18:39,020 --> 00:18:41,510 et ilmselt teab ainult, kuidas printida asju ekraanil. 307 00:18:41,510 --> 00:18:43,150 Nii täita. 308 00:18:49,280 --> 00:18:51,280 See ei ole halb. Väga hea. 309 00:18:51,280 --> 00:18:55,510 Nüüd Ken tehakse täidesaatva. Kas ta pead anda mulle midagi tagasi? 310 00:18:55,510 --> 00:18:57,470 Mitte, et me oleme näinud siiani. 311 00:18:57,470 --> 00:19:00,460 Jällegi printf ei tegelikult naasta arv, kuid me ei kavatse seda eirata nüüd 312 00:19:00,460 --> 00:19:03,470 sest me pole kunagi seda kasutanud. Nii et see on mu Ken. 313 00:19:03,470 --> 00:19:08,580 Ja nüüd peamine võtab üle kontrolli programm uuesti 314 00:19:08,580 --> 00:19:11,060 sest et rida koodi, printf, tehakse täidesaatva. 315 00:19:11,060 --> 00:19:14,050 Ja meil minna oma teed, täidesaatva tahes teistel liinidel on olemas. 316 00:19:14,050 --> 00:19:17,320 Nüüd proovime veidi teistsugune näide. 317 00:19:17,320 --> 00:19:24,940 Seekord siin teeme kõigepealt selgeks ekraanile ja seekord me teeme cubing funktsioon, 318 00:19:24,940 --> 00:19:27,080 kuid seekord ma ootan toodangu väärtus. 319 00:19:27,080 --> 00:19:29,180 >> Nii lähme edasi ja tee seda. 320 00:19:29,180 --> 00:19:35,790 Nüüd on mul rida koodi, mis ütleb, x läheb kuubik x. 321 00:19:41,370 --> 00:19:46,370 Rida koodi, mäletate, näeb välja selline: x = kuup (x); 322 00:19:46,370 --> 00:19:50,930 Niisiis, kuidas see läheb tööle? Lähme edasi ja annab teile valge ekraan uuesti. 323 00:19:50,930 --> 00:19:54,070 Ma kavatsen kirjutada nüüd x väärtus, 324 00:19:54,070 --> 00:20:01,400 mis selles ajahetkel juhtub olema, ütleme, 2 keep it simple. 325 00:20:01,400 --> 00:20:06,150 Ma olen kirjutanud alla paberile väärtus 2, mis on minu x väärtust. 326 00:20:06,150 --> 00:20:10,920 Ma käsi selle Ken. >> Ja ma lihtsalt kirjutan vastuse? >> Jah, teeme lihtsalt kirjutada vastus. 327 00:20:12,760 --> 00:20:18,940 Okei. Ja nüüd on ta tagasi mulle midagi. Perfect. Tore segue. 328 00:20:18,940 --> 00:20:23,120 Nii et nüüd ta käed mulle tagasi raha, 8. antud juhul ja mida ma sellega teen? 329 00:20:23,120 --> 00:20:28,250 Tegelikult - vaatame, saada see õige. Mida ma sellega teha? 330 00:20:28,250 --> 00:20:33,440 Nüüd ma lähen seda väärtust ja tegelikult seda säilitada samad bitti mälu. 331 00:20:33,440 --> 00:20:35,170 Aga märkate Ma olen selline hädas siin. 332 00:20:35,170 --> 00:20:38,210 Ma olen natuke segaduses, sest kui ma tegelikult kirjutada x väärtus, 333 00:20:38,210 --> 00:20:43,150 sest ma olen lihtsalt teinud on füüsiliselt käsi Ken paberileht, mis oli raha 2 334 00:20:43,150 --> 00:20:46,590 mis oli x, ja tõepoolest, see on täpselt, mis juhtus. 335 00:20:46,590 --> 00:20:50,210 Nii tuleb välja, et kui te helistate funktsiooni ja sa läbima argument 336 00:20:50,210 --> 00:20:53,290 nagu hello, world või te kaotate ka argument nagu 2 337 00:20:53,290 --> 00:20:57,110 üldiselt, sa läbides koopia sellest argumendist. 338 00:20:57,110 --> 00:21:00,730 Ja nii nagu ma kirjutasin number 2 siin ja andis selle Ken, 339 00:21:00,730 --> 00:21:04,720 et peab tähendama, et mul on veel koopia väärtus 2. kuhugi 340 00:21:04,720 --> 00:21:08,890 sest tõepoolest, nüüd, et ma olen saanud tagasi raha 8, ma pean minema tagasi RAM 341 00:21:08,890 --> 00:21:12,130 ja tegelikult kirjutada 8 Kui ma ükskord oli number 2. 342 00:21:12,130 --> 00:21:16,950 Nii visuaalselt, mäletan seda mõistet möödaminnes, sõna otseses mõttes, koopia väärtus. 343 00:21:16,950 --> 00:21:20,780 >> Ken teeb oma asja, ulatab mulle tagasi midagi - antud juhul väärtus nagu 8 - 344 00:21:20,780 --> 00:21:24,980 ja siis mul on midagi teha, et raha kui ma tahan hoida seda ümber. 345 00:21:24,980 --> 00:21:29,650 Nii et kõik see tuleb tagasi olla liigagi tuttav enne pikk. 346 00:21:29,650 --> 00:21:34,920 Tänan sind nii palju see demo siia, Ken. [Aplaus] 347 00:21:34,920 --> 00:21:36,920 Väga hästi tehtud. 348 00:21:36,920 --> 00:21:42,690 Vaatame, kuidas see lõpuks puudutab mõningaid funktsioon nõuab, et me oleme siin teinud. 349 00:21:42,690 --> 00:21:47,910 Lubage mul minna ja tuua meid tagasi cubing näiteks siin. 350 00:21:47,910 --> 00:21:53,300 Pange tähele, et kui me tahame tegelikult alustavad selles edasi, 351 00:21:53,300 --> 00:21:57,570 me ei kavatse olema teadlik sellest, et arv x, mis kuramuse möödunud aastal siin 352 00:21:57,570 --> 00:22:01,530 erineb sellest, mida on tegelikult läbitud funktsioonile. 353 00:22:01,530 --> 00:22:05,880 Nii et jällegi, see mööda koopia läheb muutunud üsna Sobiv vaid hetk. 354 00:22:05,880 --> 00:22:09,580 Võtame pilk midagi, mis ei ole päris tööd õige veel. 355 00:22:09,580 --> 00:22:13,250 Ma lähen edasi minna ja avada 1/3 lollakas näide, mis on vigane olemuselt 356 00:22:13,250 --> 00:22:18,550 ja seda nimetatakse buggy3 ja ta rakendab Vahetatakse funktsioon. 357 00:22:18,550 --> 00:22:25,110 Siin on meil peamine funktsioon, mis on x ja y omavoliliselt algväärtusega 1 ja 2 nimetatud isikud. 358 00:22:25,110 --> 00:22:27,700 Me võiksime kasutada GetInt, kuid me lihtsalt peame selle lihtsa harjutuse, 359 00:22:27,700 --> 00:22:30,170 nii et see on kodeeritud nagu 1 ja 2. 360 00:22:30,170 --> 00:22:35,340 Aastal read 21 ja 22, me ilmselt välja printida x ja y, 1 rea kohta. 361 00:22:35,340 --> 00:22:39,720 Siis on line 23, Väidan, ma vahetada neid väärtusi, dot, dot, dot. 362 00:22:39,720 --> 00:22:44,170 Ma ilmselt helistada funktsiooni Rida 24 nn swap et võtab 2 argumendid. 363 00:22:44,170 --> 00:22:48,300 See on täiesti legit funktsioonide võtma 2 argumendid. Me oleme näinud printf seda juba. 364 00:22:48,300 --> 00:22:51,830 >> Nii swap ilmselt on X ja Y, ja nagu nimigi ütleb, 365 00:22:51,830 --> 00:22:54,670 Ma loodan, et see saab vahetada need 2 väärtused. 366 00:22:54,670 --> 00:23:00,090 Nii siis ma väita real 25 "vahetasid!" ja ma kordustrükk x ja y 367 00:23:00,090 --> 00:23:03,070 eeldusel, et nad on tõepoolest vahetasid. 368 00:23:03,070 --> 00:23:06,080 Aga kui ma tegelikult käivitada programm - lubage mul avada terminali aknas 369 00:23:06,080 --> 00:23:09,860 las ma teen buggy3 - nagu nimigi ütleb, see ei lõpe hästi 370 00:23:09,860 --> 00:23:15,770 sest kui ma Enter, märkate, et x on 1, y 2, 371 00:23:15,770 --> 00:23:19,420 ja veel lõpus programm, on nad endiselt, et tegelikult sama. 372 00:23:19,420 --> 00:23:22,960 Nii põhineb demonstratsioon just Ken, mis tegelikult toimub? 373 00:23:22,960 --> 00:23:28,710 Olgem sukelduda see swap funktsiooni. See on super lühike. See on ainult paar rida koodi pikk. 374 00:23:28,710 --> 00:23:34,520 Aga mis on põhiprobleem põhineb lihtne lugu rääkis siin Ken? 375 00:23:34,520 --> 00:23:36,670 Miks on vahetustehingu katki? 376 00:23:36,670 --> 00:23:39,660 [Üliõpilane] Sa ladustamiseks kuni koopia, mitte muutuja. 377 00:23:39,660 --> 00:23:43,980 Täpselt. Me ladustamiseks kuni koopia, mitte muutuja ise. 378 00:23:43,980 --> 00:23:47,170 Teisisõnu, swap ilmselt kestab 2 argumente, int, 379 00:23:47,170 --> 00:23:49,370 ja see on meelevaldselt nimetatakse a ja b, 380 00:23:49,370 --> 00:23:54,420 ja siin ma olen sooritanud x ja y, mis on vastavalt 1 ja 2, 381 00:23:54,420 --> 00:23:58,770 aga ma ei sõna otseses mõttes möödaminnes x, ma ei sõna otseses mõttes möödaminnes y, 382 00:23:58,770 --> 00:24:01,450 Ma panen koopia x ja koopia y. 383 00:24:01,450 --> 00:24:04,510 See on peaaegu nagu sa kopeerida ja kleepida swap 384 00:24:04,510 --> 00:24:07,810 väärtused, et sa tahad seda tõepoolest manipuleerida. 385 00:24:07,810 --> 00:24:14,480 Nii et kui see on nii, kui ma programmi algust täidesaatva rida 35 siis 36, 386 00:24:14,480 --> 00:24:18,650 kui ma saan rida 37, siinkohal lugu, mis on väärtus? 387 00:24:21,040 --> 00:24:25,050 Sel hetkel lugu, liin 37, mis on väärtus selles punktis? >> [Üliõpilane] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] Tuleb lihtsalt olla 1, õige, sest x võeti vastu esimese argumendina, 389 00:24:29,280 --> 00:24:33,080 ja see funktsioon lihtsalt suvaliselt helistab oma esimese väitega. 390 00:24:33,080 --> 00:24:38,200 Samamoodi on y teine ​​argument, ja see on lihtsalt suvaliselt helistades teine ​​argument b. 391 00:24:38,200 --> 00:24:40,990 >> See lõhe on tegelikult üsna lihtsalt ja arusaadavalt. Mõtle sellele. 392 00:24:40,990 --> 00:24:43,320 Keegi meist pole täidetud isikule, kes kirjutas printf, 393 00:24:43,320 --> 00:24:50,770 nii kindlasti, tal pole aimugi, mida meie muutujate 30 aastat hiljem on nimetama hakatakse. 394 00:24:50,770 --> 00:24:56,650 Nii et seal peab olema vahet, mida te nimetate muutujate funktsioonid olete kirjalikult 395 00:24:56,650 --> 00:25:02,080 ja mida te nimetate muutujate funktsioonid millele te helistate, või kasutades. 396 00:25:02,080 --> 00:25:05,340 Nii et teiste sõnadega, ma olen kirjutanud minu muutujaid x ja y, 397 00:25:05,340 --> 00:25:08,890 aga kui keegi teine ​​oli kirjutanud swap funktsiooni, ta kindlasti ei tea 398 00:25:08,890 --> 00:25:10,690 mida mu muutujad ei kavatse nimetada, 399 00:25:10,690 --> 00:25:13,830 nii aru, et see on põhjus, miks teil on see duaalsus nimed. 400 00:25:13,830 --> 00:25:16,750 Tehniliselt, ma võiks seda teha juhus, 401 00:25:16,750 --> 00:25:20,080 kuid nad ikkagi vastu võetud koopiana. 402 00:25:20,080 --> 00:25:23,650 See oleks lihtsalt puhas juhus esteetiliselt kui see inimene, kes kirjutas swap 403 00:25:23,650 --> 00:25:26,150 oli kasutanud samad nimed. 404 00:25:26,150 --> 00:25:32,370 Nii et siinkohal lugu, joon 37, 1, b on 2, ja nüüd ma sõita vahetada neid. 405 00:25:32,370 --> 00:25:34,900 Esiteks lubage mul tegelikult seda teha palju lihtsamalt. 406 00:25:34,900 --> 00:25:36,690 Ma ei tea, mida need 3 rida koodi tegid. 407 00:25:36,690 --> 00:25:41,210 Lubage mul seda teha: b =; = b; teha. 408 00:25:41,210 --> 00:25:44,690 Miks on see purustatud, loogiliselt? 409 00:25:46,490 --> 00:25:48,900 See on selline intuitiivne asi, eks? 410 00:25:48,900 --> 00:25:52,560 Nii muutub B And B saab, 411 00:25:52,560 --> 00:25:57,730 kuid probleem on selles, et niipea kui rida 37 hukatakse, mis on väärtus ja b? 412 00:25:57,730 --> 00:26:03,410 Sama, 1, sest sa oled clobbered, nii et rääkida, sa oled muutunud b võrdseks. 413 00:26:03,410 --> 00:26:08,890 Nii et kui rida 37 on täidetud, et on tore, nüüd on 2 eksemplari number 1 414 00:26:08,890 --> 00:26:13,350 sees seda funktsiooni, nii siis, kui te ütlete liini nr 38 = b, 415 00:26:13,350 --> 00:26:17,640 sa oled natuke kruvitud, sest sa oled lihtsalt määrates 1-1. 416 00:26:17,640 --> 00:26:20,580 Sa oled selline kaotanud väärtust sa hoolisid. 417 00:26:20,580 --> 00:26:23,220 Nii originaal versioon sellest, märkate, mida ma tegin. 418 00:26:23,220 --> 00:26:26,850 Ma asemel oli kolmas rida koodi, mis nägi välja selline. 419 00:26:26,850 --> 00:26:28,580 Kinnitan ajutist muutujat. 420 00:26:28,580 --> 00:26:32,170 >> THK on väga üldine nimetus ajutise muutuja, ja see on int 421 00:26:32,170 --> 00:26:34,580 sest see peab sobima, mida ma tahan teha koopia. 422 00:26:34,580 --> 00:26:39,770 Ma salvestada koopia sees tmp, nii kui liini 37 on täidetud, 423 00:26:39,770 --> 00:26:45,860 väärtus on - kiire meelerahu kontroll - 1 väärtus b on 2, 424 00:26:45,860 --> 00:26:48,970 ja väärtus tmp on ka 1. 425 00:26:48,970 --> 00:26:52,060 Nii et nüüd ma täita rida 38. 426 00:26:52,060 --> 00:27:00,540 Kui rida 38 hukatakse, võtab väärtuse kohta b. Ja b oli 2, seega on nüüd 2. 427 00:27:00,540 --> 00:27:05,210 Nii et siinkohal lugu, on 2, b = 2, ja tmp on 1, 428 00:27:05,210 --> 00:27:11,060 nii nüüd loogiliselt, saame lihtsalt sulpsti tmp väärtust arvesse B ja me oleme valmis. 429 00:27:11,060 --> 00:27:12,800 Nii oleme lahendanud selle probleemi. 430 00:27:12,800 --> 00:27:17,720 Kahjuks, kui ma saan selle programmi selles vormis, see ei ole tegelikult vahetada mis tahes väärtusi. 431 00:27:17,720 --> 00:27:20,100 Aga peab olema selge, miks? 432 00:27:23,660 --> 00:27:26,450 Ma parandasin loogiline probleemi hetk tagasi, 433 00:27:26,450 --> 00:27:31,020 aga jälle, kui ma saan selle programmi, x ja y ei muutu 434 00:27:31,020 --> 00:27:33,310 aasta lõpuks programmi täitmist. 435 00:27:33,310 --> 00:27:37,220 [Kuuldamatu õpilane kommentaar] >> Me ei ole tagasi midagi, nii et see on tõsi. 436 00:27:37,220 --> 00:27:39,670 Aga selgub, seal on natuke probleem siin, sest seni 437 00:27:39,670 --> 00:27:44,170 Ainus asi mida me oleme suutnud tagasi on üks asi ja see on piirang C. 438 00:27:44,170 --> 00:27:49,070 Võite ainult naasta tõesti üks väärtus, mille puhul ma olen selline ummikus siin 439 00:27:49,070 --> 00:27:53,310 sest ma tagasi uue väärtuse x ja ma võin tagasi uus väärtus y, 440 00:27:53,310 --> 00:27:55,190 aga ma tahan nii tagasi. 441 00:27:55,190 --> 00:27:58,650 Nii et tagasi ei lihtsat lahendust. 442 00:27:58,650 --> 00:28:01,710 Aga probleem põhimõtteliselt on miks? Mida me tegelikult vahetasid? 443 00:28:01,710 --> 00:28:04,190 [Üliõpilane] a ja b. >> A ja b. 444 00:28:04,190 --> 00:28:08,230 Aga a ja b on koopiad x ja y, mis tähendab, et me lihtsalt ei kõik see töö, 445 00:28:08,230 --> 00:28:11,650 me lihtsalt kulutada 3 minutit räägime swap funktsiooni ja kõik 3 nimetatud muutujate saamiseks, 446 00:28:11,650 --> 00:28:15,420 ja see on suurepärane, täiesti õige isoleeritult, 447 00:28:15,420 --> 00:28:20,740 aga a ja b reguleerimisalasse üksnes on need read siin. 448 00:28:20,740 --> 00:28:24,790 >> Nii nagu loop, kui te deklareerite täisarv i sees jaoks silmus, 449 00:28:24,790 --> 00:28:28,760 Samamoodi, kui sa kuulutatakse a ja b sees funktsiooni, et olete kirjutanud, 450 00:28:28,760 --> 00:28:33,320 nad kehtivad ainult seestpoolt, et funktsioon, mis tähendab, niipea kui swap tehakse täidesaatva 451 00:28:33,320 --> 00:28:38,470 ja me läheme realt 24 rida 25, x ja y ei ole üldse muutunud. 452 00:28:38,470 --> 00:28:42,790 Sa raiskasid palju aega vahetada koopiaid muutujad. 453 00:28:42,790 --> 00:28:47,010 Nii selgub, et lahendus on tegelikult mitte-ilmne. 454 00:28:47,010 --> 00:28:50,670 See ei ole päris piisav, et tagastada väärtused, sest me saame tagastada vaid 1 väärtus, 455 00:28:50,670 --> 00:28:53,470 ja ma tõesti ei taha vahetada nii x ja y samal ajal, 456 00:28:53,470 --> 00:28:55,210 nii et me lähed on tulla tagasi sellele. 457 00:28:55,210 --> 00:29:01,020 Aga nüüd aru, et küsimus põhimõtteliselt tuleneda ka asjaolust, et a ja b on koopiad 458 00:29:01,020 --> 00:29:03,630 ja nad on oma ulatuse. 459 00:29:03,630 --> 00:29:05,050 Proovime lahendada seda mingil moel. 460 00:29:05,050 --> 00:29:11,250 Lubage mul tegelikult kerida siia tagasi ja avada, oletame, neljandat varianti sellest, buggy4. 461 00:29:11,250 --> 00:29:13,370 Aga see? 462 00:29:13,370 --> 00:29:17,810 See on sarnane, kuid lihtsam probleem vaadata enne kui me võtke torkehaav at lahendada see. 463 00:29:17,810 --> 00:29:24,190 See programm on kutsutud juurdekasvu, ja see ilmselt käivitab x täisarv 1 rida 18. 464 00:29:24,190 --> 00:29:28,150 Siis ma väita, x on 1, ma siis väita "incrementing ..." 465 00:29:28,150 --> 00:29:33,730 Ma siis helista juurdekasvu, kuid seejärel read 22 ja 23, ma väidavad, et see on olnud suurendatakse, 466 00:29:33,730 --> 00:29:40,220 Väidan x on nüüd iganes see on - 2, eeldatavasti - aga see programm on lollakas. 467 00:29:40,220 --> 00:29:42,610 Milles probleem? 468 00:29:43,440 --> 00:29:50,160 Jah. >> [Kuuldamatu õpilase vastus] >> Täpselt. 469 00:29:50,160 --> 00:29:52,490 Nii et x on kuulutatud muidugi eelarverea 18. 470 00:29:52,490 --> 00:29:54,700 See on sees peamine on looksulg. 471 00:29:54,700 --> 00:29:58,440 Nii lihtne vastus on see, et kui x on olemas siin, 472 00:29:58,440 --> 00:30:03,930 see ei ole real 32, siis see programm tegelikult isegi ei kompileerida. 473 00:30:03,930 --> 00:30:07,940 Tõlkija, kui ma üritan koostamisel käesoleva koodeksi läheb karju mu peale 474 00:30:07,940 --> 00:30:14,100 mõningate deklareerimata tunnus või midagi selle kohta. Tegelikult proovime. 475 00:30:14,100 --> 00:30:18,470 See on teha buggy4. Siin see on. 476 00:30:18,470 --> 00:30:22,110 Kasutage deklareerimata tunnus "x" real 32. 477 00:30:22,110 --> 00:30:25,580 Ja tegelikult, olgem selgem täna siin, nii et see on kasulik 478 00:30:25,580 --> 00:30:27,580 aastal tööaega ja kodus. 479 00:30:27,580 --> 00:30:29,300 >> Pange tähele, et see on natuke cryptically kirjutatud. 480 00:30:29,300 --> 00:30:37,270 Kuid tõsiasi, et rõkkama on karjus meile, öeldes buggy4.c: 32:5, on tegelikult kasulik. 481 00:30:37,270 --> 00:30:42,050 See tähendab, et viga on line 32 on sümboli positsioon 5. 482 00:30:42,050 --> 00:30:46,700 Nii et 1, 2, 3, 4, 5. See on tegelikult kui probleem on. 483 00:30:46,700 --> 00:30:49,790 Ja ka liiga pidage meeles, kontoris tundi ja kodus, ma olen õnnelik siin. 484 00:30:49,790 --> 00:30:52,990 Mul on üks viga. See saab olema suhteliselt lihtne kindlaks määrata. 485 00:30:52,990 --> 00:30:55,990 Aga kui sa saad terve ekraani täis valdav veateateid, 486 00:30:55,990 --> 00:31:00,330 jälle aru, et alumise võiks lihtsalt olla põhjustatud tähtsaim üks. 487 00:31:00,330 --> 00:31:03,450 Nii et alati Chase ette oma vigadest ülevalt alla 488 00:31:03,450 --> 00:31:05,820 sest seal võib olla ainult ketjuttaa mõju 489 00:31:05,820 --> 00:31:09,240 mis viitab teil on palju rohkem probleeme kui sa tegelikult teha. 490 00:31:09,240 --> 00:31:15,150 Niisiis, kuidas me saaksime seda parandada, kui minu eesmärk on juurdekasvu x? >> [Üliõpilane] Mark x globaalne. 491 00:31:15,150 --> 00:31:17,060 Okei, nii et me saame x globaalne. 492 00:31:17,060 --> 00:31:20,480 Võtame otsetee, et ma hoiatas varem, kuid kuradit, me lihtsalt vaja kiiresti parandada, 493 00:31:20,480 --> 00:31:25,730 nii ütleme lihtsalt int x siin. See teeb x globaalne. 494 00:31:25,730 --> 00:31:31,800 Nii et nüüd peamine on juurdepääs sellele ja juurdekasvu on juurdepääs sellele, 495 00:31:31,800 --> 00:31:34,110 ja las ma edasi minna ja koostada selle nüüd. 496 00:31:34,110 --> 00:31:37,630 Tee buggy4, Enter. Tundub, et koguda nüüd. 497 00:31:37,630 --> 00:31:41,230 Lähme sõitma buggy4. Ja tundub, et tegelikult töötavad. 498 00:31:41,230 --> 00:31:45,150 See on üks neid asju, mis on teha nii, nagu ma ütlen, mitte nagu mina, 499 00:31:45,150 --> 00:31:47,010 nagu ma olen lihtsalt teinud siin, sest üldiselt 500 00:31:47,010 --> 00:31:50,440 Meie programmid ei hakka palju huvitavam ja palju enam kui see, 501 00:31:50,440 --> 00:31:56,390 ja kui teie lahendus elu probleemid on lihtsalt panna kõik muutujad ülaosas oma faili 502 00:31:56,390 --> 00:31:59,690 väga kiiresti ei programmides saada hirmsalt raske juhtida. 503 00:31:59,690 --> 00:32:02,190 See muutub raskemaks mõelda uusi muutuja nimed, 504 00:32:02,190 --> 00:32:05,240 see muutub raskemaks mõista, mida muutuja mida teeb, 505 00:32:05,240 --> 00:32:08,460 ja nii üldiselt, et see ei ole hea lahendus. 506 00:32:08,460 --> 00:32:10,030 Teeme seda parem. 507 00:32:10,030 --> 00:32:12,160 Me ei taha kasutada globaalse muutuja siit. 508 00:32:12,160 --> 00:32:16,240 >> Ma ei taha, et juurdekasvu x, nii et ma võiks ilmselt - 509 00:32:16,240 --> 00:32:18,670 aasta lõpus päev, see on selline rumal lugu, sest me lihtsalt teeme seda - 510 00:32:18,670 --> 00:32:24,450 aga kui ma ei teadnud, et käitaja või ma ei tohtinud seda muuta põhiline ise, 511 00:32:24,450 --> 00:32:30,730 kuidas ma võiksin rakendada Ken siia seekord mitte kuubik kuid juurdekasvu? 512 00:32:31,380 --> 00:32:33,190 Kuidas muuta seda asja siin? Jah. 513 00:32:33,190 --> 00:32:38,480 [Üliõpilane] Pass x ja siis tagasi [kuuldamatu] >> Olgu, hästi. 514 00:32:38,480 --> 00:32:41,900 Miks ma ei läbida x ja siis mitte tagastada, 515 00:32:41,900 --> 00:32:44,870 miks ei ma lihtsalt naasta x + 1. 516 00:32:44,870 --> 00:32:47,710 Paar rohkem asju muutma siin. Ma olen õigel teel. 517 00:32:47,710 --> 00:32:49,770 Mida veel ma pean näpistama? Keegi teine. Jah. 518 00:32:49,770 --> 00:32:51,740 [Kuuldamatu õpilase vastus] 519 00:32:51,740 --> 00:32:54,730 Mul on vaja muuta tüübi tagastamise juurdekasvu, sest see ei ole tühine. 520 00:32:54,730 --> 00:32:57,780 Tühjus ei tähenda midagi on tagastatud, kuid selgelt nüüd on, 521 00:32:57,780 --> 00:32:59,830 nii et see vajab muutmist, et - >> [üliõpilane] int. 522 00:32:59,830 --> 00:33:02,740 int olema kooskõlas iganes ma olen tegelikult tagasi. 523 00:33:02,740 --> 00:33:05,180 Nüüd midagi on ikka lollakas siin. Jah. 524 00:33:05,180 --> 00:33:08,400 [Kuuldamatu õpilase vastus] >> [Malan] Nii et ma pean juurdekasvu x? 525 00:33:08,400 --> 00:33:12,080 [Kuuldamatu õpilase vastus] >> [Malan] Ah, nii et ma vaja läbida x. 526 00:33:12,080 --> 00:33:16,660 Nii et ma pean seda tegema siin. >> [Kuuldamatu õpilane kommentaar] 527 00:33:16,660 --> 00:33:20,050 [Malan] Nii prototüüp, ma pean seda muuta siin. 528 00:33:20,050 --> 00:33:22,930 Nii et see peab muutuma int, see peab muutuma - 529 00:33:22,930 --> 00:33:25,620 hmm, ma tegelikult olla viga siin. Olgem määrata selle ühe esimesena. 530 00:33:25,620 --> 00:33:29,590 Mida peaks see tegelikult olema? See ju olema int midagi. 531 00:33:29,590 --> 00:33:32,700 See võib olla x, kuid ausalt öeldes, kui te alustada kutsudes kõiki oma muutujad x, 532 00:33:32,700 --> 00:33:35,390 see läheb aina vähem ja vähem selge, mis on mis. 533 00:33:35,390 --> 00:33:39,560 >> Nii et olgem lihtsalt suvaliselt valida erinevate nimereeglistik minu helper funktsioone, 534 00:33:39,560 --> 00:33:41,940 funktsioonid Ma kirjutan. Me kutsume seda, või me võiksime seda nimetada - 535 00:33:41,940 --> 00:33:45,010 Kutsume see arv olema veelgi selgesõnaline. 536 00:33:45,010 --> 00:33:47,560 Siis ma pean tagasi arvust olenemata on pluss 1 537 00:33:47,560 --> 00:33:50,740 ja nüüd ma pean muutma 1 muu asi siin üleval ja üks teine ​​asi siin üleval. 538 00:33:50,740 --> 00:33:54,350 Mida ma pean muutma on line 21 esimene? >> [Kuuldamatu õpilase vastus] 539 00:33:54,350 --> 00:33:57,610 [Malan] Ma pean määrata selle x. Ma ei saa lihtsalt helistada juurdekasvu (x). 540 00:33:57,610 --> 00:34:01,960 Pean mäleta vastust, muutes x väärtus vasakul servas. 541 00:34:01,960 --> 00:34:04,680 Ja kuigi x on nüüd vasakul ja paremal, see on täiesti trahvi 542 00:34:04,680 --> 00:34:08,860 sest paremas servas saab teostada esimene siis saab plopped arvesse vasakpoolne asi - 543 00:34:08,860 --> 00:34:10,600 x sel juhul. 544 00:34:10,600 --> 00:34:12,159 Ja siis lõpuks, see on lihtne määrata nüüd. 545 00:34:12,159 --> 00:34:17,230 See peaks lihtsalt mängu mis on allapoole, int arv. 546 00:34:17,230 --> 00:34:20,570 Nii et terve hulk muudatusi tõesti loll funktsioon 547 00:34:20,570 --> 00:34:24,420 aga esindaja asju, mida me järjest teha tahad. 548 00:34:24,420 --> 00:34:27,090 Nii et buggy4. Olen silmamunad kusagil. 549 00:34:27,090 --> 00:34:30,139 Oh, mu jumal. Viis vigu 6-line programm. 550 00:34:30,139 --> 00:34:35,690 Nii et mis viga on line 18, iseloomu 5? 551 00:34:35,690 --> 00:34:39,610 Nii et ma pean deklareerima, int. 552 00:34:39,610 --> 00:34:41,920 Vaatame. On terve hulk muid vigu. 553 00:34:41,920 --> 00:34:47,010 Oh, mu jumal - 19, 18, 21 - aga jällegi, lihtsalt selge ekraan, Control L siin, 554 00:34:47,010 --> 00:34:49,380 ja uuesti rõkkama. 555 00:34:49,380 --> 00:34:51,340 Nii 5 ülesannet on tegelikult lihtsalt, et 1. 556 00:34:51,340 --> 00:34:57,520 Nii et nüüd lähme jooksma buggy4, Enter. Ohoh, x on suurendatakse õigesti. 557 00:34:57,520 --> 00:35:02,720 Hea küll. Kõik küsimused selle kohta, kuidas juurdekasvu numbrid? Jah. 558 00:35:02,720 --> 00:35:09,870 [Kuuldamatu õpilane küsimus] >> Hea küsimus. 559 00:35:09,870 --> 00:35:14,220 Kuidas on nii, et ma ei lihtsalt muuta x arvu ja programm kohe teada? 560 00:35:14,220 --> 00:35:16,200 >> Jällegi, ma arvan et kui see abstraktsioon. 561 00:35:16,200 --> 00:35:21,600 Nii et kui ma olen pea-ja Ken on juurdekasvu, ausalt öeldes, ma ei hooli, mida Ken kutsub oma iPad. 562 00:35:21,600 --> 00:35:26,570 Mind ei huvita, mida ta nimetab kõike, mis on pistmist tema rakendamiseks seda funktsiooni. 563 00:35:26,570 --> 00:35:33,340 See on rakendamise üksikasju, et mina, peamine, ei pea hooli. 564 00:35:33,340 --> 00:35:38,250 Ja nii lihtsalt muuta see järjekindlalt sees funktsioon - number siin ja number siin - 565 00:35:38,250 --> 00:35:40,960 on kõik see võtab nii kaua, kui ma kompileeri. 566 00:35:40,960 --> 00:35:44,180 See on omamoodi nagu kui sa arvad paljud meist, neile, teile juhiluba 567 00:35:44,180 --> 00:35:46,770 kes juhtida või kui oled isegi sõidetakse autoga, 568 00:35:46,770 --> 00:35:50,950 enamik meist ei tea, kuidas auto töötab all kapuuts. 569 00:35:50,950 --> 00:35:54,970 Ja sõna otseses mõttes, kui te avada kapuuts, enamik meist - mina kaasa arvatud - 570 00:35:54,970 --> 00:35:56,940 ei kavatse tea, mida me vaatame, 571 00:35:56,940 --> 00:35:59,220 selline nagu sa võid tunda koos selliseid asju kohe. 572 00:35:59,220 --> 00:36:01,480 Aga me tõesti ei pea hooli, kui auto töötab, 573 00:36:01,480 --> 00:36:05,970 me ei pea hooli, mida kõik vardad ja kolvid ja kaablid sees auto 574 00:36:05,970 --> 00:36:08,160 tegelikult teevad. 575 00:36:08,160 --> 00:36:12,770 Nii et midagi, mida te nimetate kolb ei loe siin antud juhul. Sama mõte. 576 00:36:12,770 --> 00:36:25,300 Jah. >> [Kuuldamatu õpilane küsimus] 577 00:36:25,300 --> 00:36:29,180 Kui on rohkem kasutusalasid muutuja xa Hetk tagasi 578 00:36:29,180 --> 00:36:32,150 te, programmeerija, oleks muuta neid kõikjal. 579 00:36:32,150 --> 00:36:36,600 Või võid sõna otseses mõttes teha Fail Menüü ja seejärel leida, Asenda - midagi sellist - 580 00:36:36,600 --> 00:36:39,170 aga sa ei kavatse on teha need muudatused ise. 581 00:36:39,170 --> 00:36:47,450 Sa pead olema järjekindel. >> [Üliõpilane] Kui on mitu muutujad [kuuldamatu] 582 00:36:47,450 --> 00:36:53,100 Kindlas järjekorras nagu siin, kui see oli int teine ​​number? >> [Üliõpilane] Õige. 583 00:36:53,100 --> 00:36:56,590 [Malan] Jah. Telli küsimustes, kui helistate funktsiooni. 584 00:36:56,590 --> 00:37:00,050 >> Nii et kui ma kutsusid juurdekasvu siin midagi koma midagi, 585 00:37:00,050 --> 00:37:01,680 seal on otsene kaardistamine. 586 00:37:01,680 --> 00:37:05,690 Esimene muutuja, mis iganes seda nimetatakse, on valmistatud koopia esimest argumenti siin. 587 00:37:05,690 --> 00:37:07,760 Vabandust. See ei tohiks olla sulgudes. 588 00:37:07,760 --> 00:37:11,490 Teine argument ridade järele teine. Nii et, jah, küsimustes. Hea küll. 589 00:37:11,490 --> 00:37:17,020 Vabandust. Võtsin pikk tee sinna jõuda. Muud küsimused? Hea küll. 590 00:37:17,020 --> 00:37:20,610 Nii et vaatame, kui me ei saa maalida pilti sellest, mis tegelikult toimub siin 591 00:37:20,610 --> 00:37:23,090 all kapuuts, nii rääkida. 592 00:37:23,090 --> 00:37:26,640 See on ristkülik, mis võivad viidata arvuti mälu. 593 00:37:26,640 --> 00:37:30,970 Isegi kui sa ei tea, kuidas mälu töötab või kuidas RAM töötab, 594 00:37:30,970 --> 00:37:33,940 vähemalt eeldada, et teil on kobarad see nendel päevadel. 595 00:37:33,940 --> 00:37:36,280 Sul megabaiti see, et sul gigabaiti seda, 596 00:37:36,280 --> 00:37:40,870 ja me teame nädal 0, et bait on just see, mida? >> [Üliõpilane] 8 bitti. 597 00:37:40,870 --> 00:37:42,950 8 bitti, eks? Seega 8 nullidega ja 1. 598 00:37:42,950 --> 00:37:45,880 Nii et kui arvuti on kaarik RAM, 2 kontserti RAM nendel päevadel, 599 00:37:45,880 --> 00:37:55,030 teil miljardit eurot ehk 2 miljardit baiti mälu või jämedalt 8000000000 või 16 miljardit bitti 600 00:37:55,030 --> 00:37:56,890 sees arvuti. 601 00:37:56,890 --> 00:38:00,590 Erinevalt vähe villane Willy näiteks, see ei ole magnetilisi osakesi tavaliselt enam. 602 00:38:00,590 --> 00:38:04,450 Üha - sülearvutid vähemalt - see on SSD ketastele SSDs, 603 00:38:04,450 --> 00:38:08,580 et lihtsalt ei ole liikuvaid osi. See kõik on elektrooniline. See kõik elektri-põhine. 604 00:38:08,580 --> 00:38:14,060 Nii et mõtle selle ristküliku kui lihtsalt esindavad 1 või 2 gigabaiti mälu, et teil on. 605 00:38:14,060 --> 00:38:16,020 >> Nii et see on patakas mälu. 606 00:38:16,020 --> 00:38:19,830 Maailma infotehnoloogia on omamoodi piiretega 607 00:38:19,830 --> 00:38:22,950 mäluhulka teha erinevaid asju. 608 00:38:22,950 --> 00:38:27,190 Näiteks, kui see on teie arvuti RAM, nagu soovitas ristküliku seal, 609 00:38:27,190 --> 00:38:31,130 Selgub, et tavapäraselt ülaosas oma RAM, nii et rääkida, 610 00:38:31,130 --> 00:38:33,660 Üldiselt, mida nimetatakse tekstiosa. 611 00:38:33,660 --> 00:38:36,740 Need on 0. ja 1s et olete koostanud. 612 00:38:36,740 --> 00:38:39,020 Nii et kui me vaatasime all kapuuts, mida a.out on, 613 00:38:39,020 --> 00:38:41,980 Kõigi nende 0. ja 1s, kui te käivitate programmi, 614 00:38:41,980 --> 00:38:46,290 need 0. ja 1s laadida oma kõvaketta ümber midagi, mida nimetatakse RAM, 615 00:38:46,290 --> 00:38:49,320 ja RAM nad panna ülaosas. 616 00:38:49,320 --> 00:38:52,770 Vahepeal teil on muid asju: initsialiseerida andmed, lähtestamise andmed. 617 00:38:52,770 --> 00:38:57,510 Need 2 vaalu mälu viidata globaalsed muutujad, mida te ei kasutavad sageli 618 00:38:57,510 --> 00:39:00,760 kuid mõnikord, kui te seda teete, nad lõpuks sinna samuti. 619 00:39:00,760 --> 00:39:04,260 Siis on mõned muud asjad: keskkonnamuutujaid, mida me ei kuluta palju aega, 620 00:39:04,260 --> 00:39:06,860 kuid siis 2 tähtsamaid asju, mis tulevad tagasi kogu semestri, 621 00:39:06,860 --> 00:39:08,550 korstnat ja hunnik. 622 00:39:08,550 --> 00:39:12,210 Nii et enamik arvuti mälu on reserveeritud sõites programmi 623 00:39:12,210 --> 00:39:15,370 midagi nimetatakse korstnat ja midagi, mida nimetatakse hunnik. 624 00:39:15,370 --> 00:39:18,840 Me ei kavatse rääkida hunnik täna, kuid me räägime pinu. 625 00:39:18,840 --> 00:39:24,600 Korstnat on mõeldud võluda visuaalne söögisaal jahu plaate Ema Maja 626 00:39:24,600 --> 00:39:28,110 või kus iganes juhtub olema, kus söögisaal personal puhastada neid iga päev, 627 00:39:28,110 --> 00:39:30,180 nad pinda need üles põrandale püsti, 628 00:39:30,180 --> 00:39:34,550 ja samamoodi, mälu, on see idee panna midagi korstnat 629 00:39:34,550 --> 00:39:36,860 kasutusele midagi virna, pannes midagi pinu. 630 00:39:36,860 --> 00:39:38,240 Ja mida me öelda? 631 00:39:38,240 --> 00:39:41,860 >> Olgem suurendada just alumises pooles seda pilti, arvuti RAM, 632 00:39:41,860 --> 00:39:44,330 ettepaneku järgmiste. 633 00:39:44,330 --> 00:39:48,170 Selgub, et kui te käivitate programmi nagu a.out või tere - 634 00:39:48,170 --> 00:39:50,100 mis iganes programm on, et olete kirjutanud - 635 00:39:50,100 --> 00:39:54,020 jälle need 0. ja 1s laadida oma kõvakettale, mis on pikaajaliseks ladustamiseks, 636 00:39:54,020 --> 00:39:57,230 jääb sinna isegi siis, kui te tõmmake alati pistikust, laaditud RAM. 637 00:39:57,230 --> 00:40:00,610 RAM on kiirem kui kõvakettad - see on väiksem kui kõvakettad - 638 00:40:00,610 --> 00:40:03,300 aga see on kus programmid elavad samas näed neid. 639 00:40:03,300 --> 00:40:08,230 Nii et te topeltklõps programmi Mac või PC, see on laaditud kõvaketta mälu. 640 00:40:08,230 --> 00:40:11,520 Niipea, kui see on laaditud RAM, 0. ja 1s minna kell viis üles, 641 00:40:11,520 --> 00:40:16,610 nn tekstiosa, aga siis kohe, kui teie programm tegelikult käivitub, 642 00:40:16,610 --> 00:40:21,360 põhiülesanne on kutsunud, ja peamine, sest me oleme näinud, on sageli kohalikud muutujad, 643 00:40:21,360 --> 00:40:24,870 ja see on ints ja keelpillidele ja tähed jms. 644 00:40:24,870 --> 00:40:29,180 Seega, kui teie programm, et olete kirjutanud või programm, mida on topelt klõpsatud 645 00:40:29,180 --> 00:40:32,970 kasutatud mõned muutujad sees peamine, 646 00:40:32,970 --> 00:40:37,240 nad lõpuks allosas oma korstnat mälu, kui nii võib öelda. 647 00:40:37,240 --> 00:40:39,410 Täpsemalt, mida see tegelikult tähendab? 648 00:40:39,410 --> 00:40:48,450 See lihtsalt tähendab, et kui me ei kavatse arv baiti RAM arvuti, 649 00:40:48,450 --> 00:40:55,750 märgata, et see võiks olla bait number 0, see võib olla baidi number 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 kõik viis kuni 2 miljardit oleks täiesti üleval tipus. 651 00:41:01,480 --> 00:41:05,880 Nii et teiste sõnadega, kui me räägime RAM või mälu poolest baiti, 652 00:41:05,880 --> 00:41:11,500 see tähendab, et keegi on otsustanud, mida nummerdada kõik need mäluhulka. 653 00:41:11,500 --> 00:41:16,650 Nii et kui teil on vaja 32 bitti jaoks int või vajate 8 bitti jaoks char, 654 00:41:16,650 --> 00:41:18,840 kus nad jõuavad mälu? 655 00:41:18,840 --> 00:41:22,350 >> Kontseptuaalse nad lihtsalt lõpuks allosas see asi, mida nimetatakse pinu. 656 00:41:22,350 --> 00:41:25,870 Aga mis on huvitav nüüd on siis peamised kutsub funktsioon - 657 00:41:25,870 --> 00:41:28,750 oletame funktsioon nimega foo, lihtsalt suvaline nimi - 658 00:41:28,750 --> 00:41:32,330 Mis juhtub, on peamine on allosas see pakk mälu; 659 00:41:32,330 --> 00:41:35,680 suva nüüd pannakse peal peamised mällu. 660 00:41:35,680 --> 00:41:40,990 Nii et kõik kohalikud muutujad, et suva on lõpuks omamoodi kontseptuaalselt ületavad peamine. 661 00:41:40,990 --> 00:41:47,070 Kui foo helistab teisele funktsioon nimega baar, need muutujad sattusin. 662 00:41:47,070 --> 00:41:50,120 Kui Kõnede midagi muud, siin, siin, siin. 663 00:41:50,120 --> 00:41:53,830 Mis siis huvitavat programmi käivitamist on see, et kui te helistate funktsiooni 664 00:41:53,830 --> 00:41:57,750 ja kui need ülesanded kutsuvad funktsioone ja kui need ülesanded kutsuvad funktsioone, 665 00:41:57,750 --> 00:42:01,470 teil ehitada see pakk funktsioonide mälu. 666 00:42:01,470 --> 00:42:06,890 Ja alles siis, kui funktsioon tagastab sa alustada saada, et mälu tagasi. 667 00:42:06,890 --> 00:42:10,860 Nii et üks lihtsamaid viise otsa mälu arvutiprogrammi 668 00:42:10,860 --> 00:42:14,360 on kirjutada funktsioone, mis kunagi tagasi. 669 00:42:14,360 --> 00:42:18,900 Nii näiteks olgem näidata nii palju koos tahtlikult lollakas programm. 670 00:42:18,900 --> 00:42:22,230 Lubage mul minna ja teha # include , 671 00:42:22,230 --> 00:42:25,000 int main (void), 672 00:42:25,000 --> 00:42:32,940 ja ma teen samal ajal (2> 1), mis ilmselt ei ole kunagi muuta meie peale, 673 00:42:32,940 --> 00:42:37,560 ja las ma minna nüüd ja teha printf. 674 00:42:37,560 --> 00:42:40,700 Tegelikult, see saab olema vähem visuaalselt huvitav. Teeme seda. 675 00:42:40,700 --> 00:42:50,240 Sest int i = 0; i> 0 - teeme selle vea - i + +. 676 00:42:50,240 --> 00:42:52,720 Ja ärgem printf siin. Olgem tava, mida ma jutlustada. 677 00:42:52,720 --> 00:43:00,190 Teeme meetod siin, tühine kooris, ja me ütleme int i, 678 00:43:00,190 --> 00:43:06,830 ja siis ma lähen ütlen printf - ei, teeme sellest enam huvitav. 679 00:43:06,830 --> 00:43:15,790 Olgem tegelikult ei prindi üldse midagi. Lihtsalt teeme seda: koori (i). 680 00:43:15,790 --> 00:43:20,390 Hea küll. Nii et see on lollakas, sest miks? 681 00:43:20,390 --> 00:43:23,380 Ma kujutan seda ette kui ma lähen, sest programm ei tegelikult teha midagi huvi. 682 00:43:23,380 --> 00:43:25,320 >> Aga see pole eesmärk. 683 00:43:25,320 --> 00:43:29,630 Eesmärk on kirjutada programm, mille peamine funktsioon teeb seda, mida ilmselt? 684 00:43:30,720 --> 00:43:32,860 Helista ise. Ja tegelikult, me ei pea silmus. 685 00:43:32,860 --> 00:43:37,200 Olgem isegi lihtsustada seda lihtsalt, et mitte unustada tõesti fundamentaalne viga. 686 00:43:37,200 --> 00:43:39,640 Peamised kõned koori laulma mõned koori, 687 00:43:39,640 --> 00:43:41,440 siis ma tegin midagi rumalat ja mul oli refrään kõne kooris 688 00:43:41,440 --> 00:43:43,760 sest ma eeldasin keegi pidi seda rakendada ehk, 689 00:43:43,760 --> 00:43:47,210 ja nüüd see ei kavatse koostada veel. Ma pean tegema mida? 690 00:43:47,210 --> 00:43:49,970 Vajan prototüüp, mäletan. 691 00:43:49,970 --> 00:43:56,110 Nii et ma pean olema siin tühine koori (int i); 692 00:43:56,110 --> 00:43:59,210 Nii et nüüd, kui ma lähen siia alla - tegelikult, olgem kasutada suuremas aknas. 693 00:43:59,210 --> 00:44:01,980 Lähme edasi ja teha refrään. 694 00:44:01,980 --> 00:44:06,490 Lähme edasi ja teha refrään. 695 00:44:06,490 --> 00:44:08,370 Kasutage deklareerimata tunnus i. 696 00:44:08,370 --> 00:44:12,500 Oh, see oli loll. Me ei vaja argument. Lihtsalt teeme seda. 697 00:44:12,500 --> 00:44:16,370 Soovin, et meil algas sel viisil. Oleks olnud palju lihtsam programmi kirjutada. 698 00:44:16,370 --> 00:44:25,590 Seal. Lähme nüüd üle mu terminaliakent, kordamisega rõkkama, ja siin me läheme. 699 00:44:25,590 --> 00:44:28,460 See oli tõesti kiire. 700 00:44:28,460 --> 00:44:31,150 Mis tegelikult juhtus, kuigi? 701 00:44:31,150 --> 00:44:33,730 Noh, nüüd ma lisada trüki rea, et saaksime näha. 702 00:44:33,730 --> 00:44:43,490 Ütlen printf ("Ma olen siin") - ei muutujad. Me jätan ta niimoodi. 703 00:44:43,490 --> 00:44:47,480 Lubage mul uuesti, teha. Lubage mul uuesti, refrään. 704 00:44:47,480 --> 00:44:57,380 Ja ... tule. Lase edasi. 705 00:44:57,380 --> 00:44:59,930 Nagu kõrvale, miks on see ole veel kokku varisenud? 706 00:44:59,930 --> 00:45:02,080 Killustatust süü juhtus ülikiire enne. 707 00:45:02,080 --> 00:45:06,570 [Kuuldamatu õpilase vastus] >> Täpselt. Nii et see võtab aega, et printida, eks? 708 00:45:06,570 --> 00:45:08,610 See lihtsalt võtab rohkem tööd arvuti osa. 709 00:45:08,610 --> 00:45:10,620 Ja siin see on: segmenteerimine süü. 710 00:45:10,620 --> 00:45:12,340 >> Nii märkate, kuidas kiire programme. 711 00:45:12,340 --> 00:45:14,130 Kui te ei prindi midagi, super kiire. 712 00:45:14,130 --> 00:45:18,770 Aga saime ikka seda killustatust süü, sest mis juhtub? 713 00:45:18,770 --> 00:45:21,210 Kui te arvate, kuidas teie arvuti mälus on sätestatud, 714 00:45:21,210 --> 00:45:28,740 see juhtub olema peamine, kuid siin olgem lihtsalt nimetame seda koori ja olgem nimetame seda koori. 715 00:45:28,740 --> 00:45:34,550 Ja nüüd, kui ma teen oma esteetika õigus, see on lihtsalt ütlen kooris, koori, koori, 716 00:45:34,550 --> 00:45:40,550 kooris, koori, koori, koori, reklaami nauseum, ja lõpuks, mis juhtub? 717 00:45:40,550 --> 00:45:45,630 Kui suur pilt, sõna otseses mõttes, on see, mida lihtsalt juhtub kontseptuaalselt? 718 00:45:46,520 --> 00:45:48,630 Korstnat ületamise hunnik. 719 00:45:48,630 --> 00:45:51,940 Või veel hullem, sa lihtsalt ületanud kõik, sealhulgas teksti segment, 720 00:45:51,940 --> 00:45:54,590 mis on 0. ja 1s, mis esindavad oma programmi. 721 00:45:54,590 --> 00:45:57,080 Lühidalt, see on lihtsalt super, super halb. 722 00:45:57,080 --> 00:45:58,830 Teie programm on spiraled kontrolli. 723 00:45:58,830 --> 00:46:01,220 Sa kasutad nii rohkem mälu kui te ette 724 00:46:01,220 --> 00:46:03,960 kõik, sest loll viga sel juhul, 725 00:46:03,960 --> 00:46:08,040 või antud juhul väga teadlikult teinud funktsiooni kutsutakse ise. 726 00:46:08,040 --> 00:46:09,500 Nüüd, see ei ole kõik halb. 727 00:46:09,500 --> 00:46:13,800 Funktsioonid kutsuvad end tegelikult on suur võim, kui te kasutate seda õigesti. 728 00:46:13,800 --> 00:46:15,800 Ma ei ole kasutanud seda õigesti siin. 729 00:46:15,800 --> 00:46:19,780 Nii et see ei ole kõik halb, kuid asjaolu, et ma ei ole kunagi tegelikult ärge kutsuge ise 730 00:46:19,780 --> 00:46:23,520 on põhiline nõrkus siin selle programmi. 731 00:46:23,520 --> 00:46:26,400 Nii et kui me läheme selle kõigega? Mis tegelikult toimub? 732 00:46:26,400 --> 00:46:30,340 Kui ma kutsun juurdekasvu funktsioon nagu me tegime ka neid näiteid, 733 00:46:30,340 --> 00:46:33,420 Mul on raha nagu 1, et annan sisse 734 00:46:33,420 --> 00:46:37,570 Ma läbida koopia number 1, et järgmine juhtub. 735 00:46:37,570 --> 00:46:44,240 Läheme juurdekasvu Näiteks see kutt siin. 736 00:46:44,240 --> 00:46:46,870 Siin on, mis tegelikult toimub. 737 00:46:46,870 --> 00:46:53,400 Kui ma kutsun juurdekasvu ja annan x, piltlikult, mis siin toimub on see. 738 00:46:53,400 --> 00:46:59,520 >> Kui mul on väärtus 1 ladustatud siin ja ma tegelikult helistada juurdekasvu, 739 00:46:59,520 --> 00:47:04,330 mis on nüüd nimega chorus - iPad on viskamine mind siin maha. 740 00:47:04,330 --> 00:47:09,760 Kutsume seda juurdekasvu, ja me ei tea, mis see järgmine funktsioon saab olema. 741 00:47:09,760 --> 00:47:14,840 Nii et mis tegelikult toimub on siin kusagil peamised mul patakas mälu 742 00:47:14,840 --> 00:47:17,000 et on hoidmiseks number 1. 743 00:47:17,000 --> 00:47:19,380 Kui ma kutsun juurdekasvu, ma kasutan teise tüki mälu, 744 00:47:19,380 --> 00:47:21,230 aga nüüd on mul koopia 1. 745 00:47:21,230 --> 00:47:26,660 Kui ma juurdekasvu, et väärtus, see saab 2, 746 00:47:26,660 --> 00:47:30,560 aga mis siis juhtub niipea kui juurdekasvu tulu? 747 00:47:30,560 --> 00:47:33,630 See mälu lihtsalt saab kätte tagasi operatsioonisüsteemi, 748 00:47:33,630 --> 00:47:37,450 mis tähendab, kõik olete teinud midagi kasulikku. 749 00:47:37,450 --> 00:47:43,120 1, et algselt esitatud peamine on ikka tegelikult olemas. 750 00:47:43,120 --> 00:47:44,890 Nii et kui me läheme seda? 751 00:47:44,890 --> 00:47:49,770 Tuleb välja, et mälu sul on see back-to-back jada bytes 752 00:47:49,770 --> 00:47:53,050 , mida saab panna asjad, ja tuleb välja, et me oleme juba näinud midagi 753 00:47:53,050 --> 00:47:55,390 mis hõlmab paneb asjad tagasi seljad tagasi. 754 00:47:55,390 --> 00:47:59,860 Mis on string põhineb nädal 1 ja nüüd nädal 2? 755 00:48:00,020 --> 00:48:01,980 See on lihtsalt kogumise tähemärki. 756 00:48:01,980 --> 00:48:04,310 Nii selgub nagu sa ei pane numbrid mällu, 757 00:48:04,310 --> 00:48:06,990 samamoodi saab panna märke mälu. 758 00:48:06,990 --> 00:48:10,530 Ja kui me alustada pannes tähemärki mälu seljad et seljad, 759 00:48:10,530 --> 00:48:13,620 selgub, et kasutades lihtsamaid asju nagu loop või samas silmus, 760 00:48:13,620 --> 00:48:17,170 saame kinnitada, vasakult paremale üle märkide jada 761 00:48:17,170 --> 00:48:20,600 ja alustada massaging neid erinevaid märke üldse - 762 00:48:20,600 --> 00:48:23,370 võiks saada b, b võib muutuda c - 763 00:48:23,370 --> 00:48:27,780 nii et lõppkokkuvõttes saame inglise lause, mis tegelikult mõtet 764 00:48:27,780 --> 00:48:30,310 ja teisendada kõik need tähed ükshaaval 765 00:48:30,310 --> 00:48:34,400 jalgsi läbi meie arvuti mälu vasakult paremale, et tegelikult varjata. 766 00:48:34,400 --> 00:48:35,810 Võtame meie viieminutiline paus siin, 767 00:48:35,810 --> 00:48:40,730 ja kui me tagasi tuleme, hakkame seda protsessi skrambleerimise andmed. 768 00:48:42,020 --> 00:48:43,520 >> Hea küll. 769 00:48:43,520 --> 00:48:48,070 Enne kui me sukelduda mõned krüpto ja neid asju nimetatakse massiivid 770 00:48:48,070 --> 00:48:51,470 andke mulle pausi küsimusi, sest ma tunnen, et ma tõesti selline segane 771 00:48:51,470 --> 00:48:54,080 mõningaid selliseid teemasid. Nii et olgem määrata nüüd, kui saame. 772 00:48:54,080 --> 00:48:58,700 Me lihtsalt rääkisime tagasi väärtused, me rääkisime argumendid, 773 00:48:58,700 --> 00:49:03,250 ja me rääkisime seda mõistet, mis me tuleme tagasi ka lähinädalatel, 774 00:49:03,250 --> 00:49:08,720 vaatamise mälu terve hunnik neid kuhjata plaate, nii et rääkida, 775 00:49:08,720 --> 00:49:12,660 alt ülesse, nii et iga salve, et saab panna virna 776 00:49:12,660 --> 00:49:16,530 esindab funktsiooni, mis on praegu nimetatakse. 777 00:49:17,900 --> 00:49:20,260 Kas on küsimusi? 778 00:49:20,260 --> 00:49:22,640 Las ma küsin küsimuse siin. 779 00:49:22,640 --> 00:49:27,890 Lubage mul seda lihtsustada tagasi see oli enne mõned meie varasem Q & A. 780 00:49:27,890 --> 00:49:35,570 Asjaolu, et juurdekasv on avatud sulgudes, int arv, suletud sulgudes - 781 00:49:35,570 --> 00:49:39,110 mida see int arv koosneb? 782 00:49:39,110 --> 00:49:42,790 [Üliõpilane] argument. >> Argument. Okei. Aga mis on argument? 783 00:49:42,790 --> 00:49:46,370 [Kuuldamatu õpilase vastus] >> Mis see on? >> [Üliõpilane] Midagi, mis te kaotate sisse 784 00:49:46,370 --> 00:49:49,940 Okei, nii et midagi, mis te kaotate sisse Ja üldisemalt, see on lihtsalt sisend. 785 00:49:49,940 --> 00:49:52,450 Kui sa olid kirjalikult funktsioon ja mis funktsiooni eesmärk elus 786 00:49:52,450 --> 00:49:55,770 on teha midagi veidi erinev iga kord, kui seda kasutada, 787 00:49:55,770 --> 00:50:00,110 siis ainus võimalus selle saavutamiseks tõesti tundub olevat seda anda oma panuse 788 00:50:00,110 --> 00:50:03,510 nii et seda saab teha midagi erinevat selle sisendi iga kord. 789 00:50:03,510 --> 00:50:06,650 >> Nii et teil on vaja täpsustada kahte asja, kui funktsioon võtab sisend. 790 00:50:06,650 --> 00:50:09,590 Sa pead täpsustama nimi, mida soovite anda selle sisendi 791 00:50:09,590 --> 00:50:12,700 puhtalt oma mugavuse nii et saad vaadata seda 792 00:50:12,700 --> 00:50:16,540 on funktsioon, et te ise ei kirjuta, sest ma tegin siin real 32. 793 00:50:16,540 --> 00:50:20,800 Aga siis tuleb ka määrata oma tüüp, sest C on programmeerimiskeel 794 00:50:20,800 --> 00:50:25,940 et lihtsalt eeldab, et kui sa tahad muutuja, peate ütleb arvuti, mida andmetüüp on, 795 00:50:25,940 --> 00:50:30,200 suures osas nii, et ta teab mitu bitti eraldada selle muutuja 796 00:50:30,200 --> 00:50:33,020 sest see võib olla 6 - kahju, see ei ole 6. 797 00:50:33,020 --> 00:50:37,080 See võib olla 16, võib see olla 8, võib see olla 32, isegi 64, 798 00:50:37,080 --> 00:50:39,130 kuid arvuti peab teadma. 799 00:50:39,130 --> 00:50:43,180 Nüüd, int vasakul servas näitab, mida seevastu? 800 00:50:46,350 --> 00:50:48,850 [Kuuldamatu õpilase vastus] >> Mis see on? >> [Üliõpilane] Tüüp funktsioon. 801 00:50:48,850 --> 00:50:53,610 Tüüpi funktsioon ja täpsemalt, millist tüüpi toodangut. Õigus. 802 00:50:53,610 --> 00:50:57,380 Nii et arvestades asja sulgudes tähistab oma panuse, kui üldse, 803 00:50:57,380 --> 00:50:59,660 asi vasakule esindab oma toodangut. 804 00:50:59,660 --> 00:51:03,530 Ja sel juhul, juurdekasv ilmselt tagastab int, 805 00:51:03,530 --> 00:51:07,690 ja nii int on tüübi tagastamise seda funktsiooni. 806 00:51:07,690 --> 00:51:09,340 Mis see tähendab, et vastutasuks? 807 00:51:09,340 --> 00:51:15,090 Sõna otseses mõttes, kui kasutate märksõna tagasi ja siis, kui see, mida olete tagasi 808 00:51:15,090 --> 00:51:18,600 paremal märksõna on täisarv, 809 00:51:18,600 --> 00:51:21,660 siis see on tõepoolest kooskõlas sellega, mida oleme lubanud. 810 00:51:21,660 --> 00:51:26,410 Sa ei saa teha midagi sellist - hello, world - sest see on string. 811 00:51:26,410 --> 00:51:28,860 >> Ilmselt ei ole täisarv. 812 00:51:28,860 --> 00:51:33,140 Nii lühike, koorem on tõesti meile, programmeerija, seda spetsiifiliseks 813 00:51:33,140 --> 00:51:37,770 selle kohta, mida me tagasi ja siis tegelikult minna selle tagasi. 814 00:51:37,770 --> 00:51:43,440 Kontekstis siin nüüd on, et arvuti mälu on gigabait, 2 GB - 815 00:51:43,440 --> 00:51:45,920 mida iganes - võib-olla see on rohkem, võibolla on vähem, 816 00:51:45,920 --> 00:51:49,050 kuid arvuti peab seda on eri osades. 817 00:51:49,050 --> 00:51:51,200 Midagi läheb sinna, midagi läheb sinna, 818 00:51:51,200 --> 00:51:54,290 erinevad asjad lähevad keskel, ja täna me lihtsalt hakkame räägib loo, 819 00:51:54,290 --> 00:51:56,340 kuid me tuleme tagasi selle aja jooksul. 820 00:51:56,340 --> 00:51:59,980 Praegu ainult tükk mälu me tõesti hoolivad on tekstiosa 821 00:51:59,980 --> 00:52:03,360 sest see lihtsalt näitab 0. ja 1s et rõkkama on väljastada. 822 00:52:03,360 --> 00:52:06,050 Nii et kui sa jooksed käsk klaviatuuri nagu a.out 823 00:52:06,050 --> 00:52:09,110 või te topeltklõps ikoonil Mac OS või Windows, 824 00:52:09,110 --> 00:52:11,880 Teie programm on koormatud arvuti kõvakettalt mällu 825 00:52:11,880 --> 00:52:16,330 ja see plopped ülaosas oma arvuti RAM, nii rääkida. 826 00:52:16,330 --> 00:52:20,450 Samal ajal, nagu teie programm käivitub ja peamised saab nimetada 827 00:52:20,450 --> 00:52:23,640 programmis sa kirjutasid või programmi Microsoft või Apple kirjutas, 828 00:52:23,640 --> 00:52:27,860 mõni tema kohalik muutujad lõpuks seal allosas arvuti mälu. 829 00:52:27,860 --> 00:52:33,230 Aga kui peamine nõuab muu funktsiooni, et endal on muutujate või argumente, nad lõpuks kohale. 830 00:52:33,230 --> 00:52:36,680 Ja kui see funktsioon nõuab midagi, nad lõpuks kohal, kõrgemal, selle kohal. 831 00:52:36,680 --> 00:52:41,460 >> Ja alles siis, kui funktsioon on teinud täidesaatva ei virna plaate, nii et rääkida, 832 00:52:41,460 --> 00:52:43,240 hakkama saada väiksem ja väiksem. 833 00:52:43,240 --> 00:52:48,250 Ja see on siis, lühikokkuvõte, seletab, kui helistate kuubik 834 00:52:48,250 --> 00:52:51,550 või helistate juurdekasvu, sa läbides koopia väärtus. 835 00:52:51,550 --> 00:52:55,520 Ja mida see tähendab piltlikult, et sa sõna otseses mõttes kirjalikult number 1 836 00:52:55,520 --> 00:53:00,460 teises osas mälu, muutes selle 1-2 puhul juurdekasvu 837 00:53:00,460 --> 00:53:04,820 või 8 puhul kuubik ja siis visata, et mälu ära 838 00:53:04,820 --> 00:53:09,140 niipea kui juurdekasvu või kuup tagastab funktsioon. Küsimus. 839 00:53:09,140 --> 00:53:12,900 [Üliõpilane] Kuhu globaalsed muutujad hoitakse? 840 00:53:12,900 --> 00:53:18,100 Globaalsed muutujad hoitakse milline on hetkel kutsus vormindatud andmed või uninitialized andmed, 841 00:53:18,100 --> 00:53:21,920 Vahe on selles, kui teil on globaalne muutuja ja siis anna see kohe väärtus 842 00:53:21,920 --> 00:53:24,640 koos võrdusmärk, see jõuab ülaosas seal, 843 00:53:24,640 --> 00:53:29,200 ja kui sa ütlesid int x; ilma väärtuseta, see jõuab veidi madalam RAM 844 00:53:29,200 --> 00:53:31,710 lihtsalt kokkuleppeliselt. 845 00:53:31,710 --> 00:53:34,940 Muud küsimused? Hea küll. 846 00:53:34,940 --> 00:53:37,340 Nii et see pilt tulevad tagasi, kui saame võimsam 847 00:53:37,340 --> 00:53:39,170 mida me saame teha arvuti, 848 00:53:39,170 --> 00:53:42,720 kuid nüüd, olgem on lühike sissejuhatus krüptograafia, 849 00:53:42,720 --> 00:53:46,080 konkreetset tüüpi krüptograafia see ei lahenda kõiki maailma probleeme 850 00:53:46,080 --> 00:53:47,720 kuid ei lahenda mõningaid neist. 851 00:53:47,720 --> 00:53:51,700 Sel juhul on meil midagi, mida nimetatakse saladus-võtme krüptograafia. 852 00:53:51,700 --> 00:53:56,410 Secret-võtme krüptograafia, nagu nimigi ütleb, saab oma turvalisust saladus. 853 00:53:56,410 --> 00:54:00,690 >> Näiteks, kui sa olid tagasi algkooli ja sa olid läbivad väike saladus love letter 854 00:54:00,690 --> 00:54:04,850 et poiss või tüdruk sind purustamine edasi, kui sa tahad läbida, et teadmiseks läbi publiku, 855 00:54:04,850 --> 00:54:08,380 siis ilmselt ei kirjuta seda märkust, inglise või mis iganes teie emakeel. 856 00:54:08,380 --> 00:54:13,340 Pigem võiksite varjata seda või te võite lihtsalt saata sõnum nendel päevadel. 857 00:54:13,340 --> 00:54:15,460 Aga sa võiksid tegelikult andke neile teadmiseks kogu klassiruumis. 858 00:54:15,460 --> 00:54:18,700 Ja teha seda turvaliselt nii, et teie sõbrad ja õpetaja 859 00:54:18,700 --> 00:54:22,650 ei tea, mida olete kirjalikult, siis võib tulla üsna lihtne algoritm, 860 00:54:22,650 --> 00:54:25,920 noor kuigi võite olla, et lihtsalt rüselus sõnu. 861 00:54:25,920 --> 00:54:28,130 Nii et selle asemel kirjalikult võite kirjutada b, 862 00:54:28,130 --> 00:54:30,220 asemel b võite kirjutada c, 863 00:54:30,220 --> 00:54:32,140 asemel c võite kirjutada d, ja nii edasi. 864 00:54:32,140 --> 00:54:34,360 Või siis võiks tulla keerukamaid tõlge 865 00:54:34,360 --> 00:54:36,720 kirju erinevate tähtedega. 866 00:54:36,720 --> 00:54:39,740 Aga saak on poiss või tüdruk, kellele saadate käesoleva märkuse 867 00:54:39,740 --> 00:54:45,020 peab teadma midagi, mis on just see, ilmselt? >> [Üliõpilane] Mis te saadate. 868 00:54:45,020 --> 00:54:49,720 Mis su saladus on, nagu mis see on kaardistamise vahel ja B ja C-ja D. 869 00:54:49,720 --> 00:54:54,650 Kas see on lihtsalt lisades 1 kuni iga tähti minna punktist A punkti B, B c? 870 00:54:54,650 --> 00:54:56,670 Kas see keerulisem kui see? 871 00:54:56,670 --> 00:55:01,540 >> Nii et teie ja teie purustada pea olema see salajane info, 872 00:55:01,540 --> 00:55:03,190 kuid seal on mingi saak-22 siin. 873 00:55:03,190 --> 00:55:06,830 Kui see on esimene kord, kui saadate selle armastuskirja läbi klassi, 874 00:55:06,830 --> 00:55:10,720 kuidas on see poiss või tüdruk läheb teada, mis saladus isegi on? 875 00:55:10,720 --> 00:55:13,930 Nii salajane võti krüpto ei lahenda kõiki maailma probleeme, 876 00:55:13,930 --> 00:55:16,320 ja seal on tegelikult suhe siin, et me tuleme tagasi suunas semestri lõpus. 877 00:55:16,320 --> 00:55:25,110 Samamoodi ei enamik meist ei tea keegi, mis töötab näiteks Amazon.com juures, 878 00:55:25,110 --> 00:55:28,190 ja veel paljud meist on ilmselt ostetud kraami Amazon.com, 879 00:55:28,190 --> 00:55:31,990 ja me oleme õpetanud oletada, et nende e-kaubanduse tehingud on turvaline. 880 00:55:31,990 --> 00:55:36,470 URL ilmselt ütleb https, seal on võibolla rumal vähe tabaluku ikoon kuskil, 881 00:55:36,470 --> 00:55:39,930 seal on mingi krüptograafia kindlustada oma krediitkaardi andmed 882 00:55:39,930 --> 00:55:42,160 Teie ja Amazon.com. 883 00:55:42,160 --> 00:55:45,430 Ja veel, kui krüptograafia hõlmab teades mõned saladus 884 00:55:45,430 --> 00:55:48,620 ja veel ma ei tea kedagi Amazonist ja ma pole kindlasti mitte korraldada mingit saladust 885 00:55:48,620 --> 00:55:52,710 kellegagi Amazonist, kuidas on minu arvutis või minu brauser seda teed? 886 00:55:52,710 --> 00:55:55,720 Tuleb välja, seal on teist liiki krüptograafia kokku, et seda probleemi lahendada. 887 00:55:55,720 --> 00:55:57,670 Aga täna, me keskenduma lihtne 888 00:55:57,670 --> 00:56:00,290 kus saab korraldada eelnevalt teada mõned saladus 889 00:56:00,290 --> 00:56:03,760 nagu 1 või mõned kaardistamise vahel ja B. 890 00:56:03,760 --> 00:56:05,840 Ja protsess krüptograafia tähendab tavaliselt seda. 891 00:56:05,840 --> 00:56:08,620 Sul on mõned lihttekstina kujutatud siin vasakul, 892 00:56:08,620 --> 00:56:12,930 sa jooksed ta läbi mingi algoritm või kord krüptimine see - 893 00:56:12,930 --> 00:56:15,100 võibolla see lihtsalt muutub B, B saab C - 894 00:56:15,100 --> 00:56:17,490 ja siis lõpuks krüptotekstiga. 895 00:56:17,490 --> 00:56:20,380 Vahepeal, kui oma kiindumuste saab see saladus teadmiseks, 896 00:56:20,380 --> 00:56:24,200 ta peab siis lahti see, mida üldiselt tagurdades, et algoritm 897 00:56:24,200 --> 00:56:27,190 et saada tagasi lihttekstina. 898 00:56:27,190 --> 00:56:28,960 Seal on füüsilise inkarnatsiooni seda. 899 00:56:28,960 --> 00:56:31,680 >> Näiteks see on väike saladus decoder ring, 900 00:56:31,680 --> 00:56:35,110 ja see on ring selles mõttes, et seal on kaks valib siin. 901 00:56:35,110 --> 00:56:38,490 Väljastpoolt perifeeria see asi, seal on tähed A kuni Z, 902 00:56:38,490 --> 00:56:40,340 kuigi nad on suvalises järjekorras, 903 00:56:40,340 --> 00:56:42,880 ja sees, seal on tegelikult mõned numbrid 904 00:56:42,880 --> 00:56:46,620 nii, et selle sõrmusega saab omamoodi omakorda väljaspool, kuid mitte sees 905 00:56:46,620 --> 00:56:49,140 et rivistama arvud koos tähtedega. 906 00:56:49,140 --> 00:56:53,020 Alates filmi nimega jõulujutt, näete, et vähe Ralphie 907 00:56:53,020 --> 00:56:58,000 oli nii innukas, et aru saada, mida Little harva Annie salajane sõnum oli temaga 908 00:56:58,000 --> 00:57:02,570 mis oli edastatud, ma arvan, vormis numbrilise sõnumeid teravilja kasti 909 00:57:02,570 --> 00:57:07,220 ja siis tuli koguneda kõik vähe kaarte, mis tuli teravilja kasti, 910 00:57:07,220 --> 00:57:09,770 siis tuli posti neid, siis tuli naasta saladus decoder ring 911 00:57:09,770 --> 00:57:13,910 nii et saate lõpuks aru saada, mida kaardistamine on vahel tähti ja numbreid 912 00:57:13,910 --> 00:57:15,550 või tähed ja tähed. 913 00:57:15,550 --> 00:57:19,520 Kuidas on arvuti me saame minna rakendamisel või esindavad selliseid asju? 914 00:57:19,520 --> 00:57:22,560 Vajame viis väljendada end natuke paindlikumalt 915 00:57:22,560 --> 00:57:25,080 kui meie muutujad seni on lubanud. 916 00:57:25,080 --> 00:57:29,000 Meil on olnud ints, oleme olnud tähemärki, oleme olnud ujukite ja kahekohalised ja mõned teised, 917 00:57:29,000 --> 00:57:34,200 kuid need on eravalduses mälu, et tegelikult ei luba meil väljendada asjad 918 00:57:34,200 --> 00:57:36,440 nagu sõnu ja lauseid ja fraase. 919 00:57:36,440 --> 00:57:38,630 Tõepoolest, me oleme kutsutud selliseid asju stringid, 920 00:57:38,630 --> 00:57:42,660 kuid me lubame, et see on tõesti ainult lihtsustamise CS50 raamatukogu 921 00:57:42,660 --> 00:57:45,540 et me kavatseb koor tagasi. 922 00:57:45,540 --> 00:57:47,500 Ja nii alustame seda teha siin. 923 00:57:47,500 --> 00:57:49,840 Lubage mul minna ja avada fail - 924 00:57:49,840 --> 00:57:54,100 kõik need failid on olemas, nagu tavaliselt, online - nn array.c 925 00:57:54,100 --> 00:57:58,960 lahendada probleemi mitteseotud stringid kuid maalib pildi siia 926 00:57:58,960 --> 00:58:01,520 sellest, kuidas me võiksime kasutada midagi, mida nimetatakse massiivi. 927 00:58:01,520 --> 00:58:04,050 >> Massiiv on andmetüüp. 928 00:58:04,050 --> 00:58:10,730 See on tüüpi muutuja kehvasti, et on mitu väiksemat tüüpi andmeid sees on 929 00:58:10,730 --> 00:58:12,680 seljad et seljad. 930 00:58:12,680 --> 00:58:16,980 Nii näiteks, kui me tahtsin kirjutada väike programm, mis annab teile teie viktoriin keskmine 931 00:58:16,980 --> 00:58:19,780 jaoks muidugi mingi 50, et on 2 viktoriinid, 932 00:58:19,780 --> 00:58:23,450 sa võiksid väga kergesti kirjutada selle programmi alusel isegi mõned eelmise nädala materjali 933 00:58:23,450 --> 00:58:28,830 kasutades GetInt ja paar muutujad: Väravavahi quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 Ja see on üsna lihtne. 935 00:58:30,550 --> 00:58:33,500 See on võibolla 10, 20 rida koodi max rakendada programmi 936 00:58:33,500 --> 00:58:38,940 mis küsib kasutaja 2 viktoriini skoorid ja siis arvutab nende keskmise 937 00:58:38,940 --> 00:58:42,020 lisades neid koos, jagades 2 ja seejärel printida tulemust. 938 00:58:42,020 --> 00:58:46,400 Võiksime tõenäoliselt teha päris kergesti nüüd pärast mõningast mitu minutit. 939 00:58:46,400 --> 00:58:49,450 Probleem on aga selles, et oletame, et 50 oli 3 viktoriinid või 4. 940 00:58:49,450 --> 00:58:52,830 Oletame, et sa tahtsid kasutada sama programmi klassi, mis oli iganädalane viktoriine. 941 00:58:52,830 --> 00:58:55,100 Mõtle klassi, mis on iganädalane viktoriinid. 942 00:58:55,100 --> 00:58:58,840 Kui seal on 16 või nii nädalat semester, nüüd on 16 näitajat: 943 00:58:58,840 --> 00:59:03,030 int quiz1, int quiz2, int quiz3, int quiz4. 944 00:59:03,030 --> 00:59:06,870 Niipea kui hakkate nägema seda koondamine, see kopeerida ja kleepida koodi, 945 00:59:06,870 --> 00:59:09,810 see peaks hakkama sind soovin, et oleks parem. 946 00:59:09,810 --> 00:59:13,610 Ja õnneks, sest massiivid on. Nii et teeme seda. 947 00:59:13,610 --> 00:59:16,700 Esiteks lubage mul tutvustada väga lihtne asi, et me pole kasutatud seni 948 00:59:16,700 --> 00:59:18,820 kuid näete seda vahetevahel kood. 949 00:59:18,820 --> 00:59:21,270 >> See on see, mida on üldiselt nimetatakse samaks. 950 00:59:21,270 --> 00:59:24,410 Nii et see on pidev selles mõttes, et see väärtus ei muutu kunagi. 951 00:59:24,410 --> 00:59:26,450 Inimeste konventsiooni loomisel pidev 952 00:59:26,450 --> 00:59:30,420 on kasutada kõik suurtähtedega just nii, et see tõesti paistab silma oma koodi, 953 00:59:30,420 --> 00:59:34,270 ja eriline märksõna, mida saate kasutada C # define. 954 00:59:34,270 --> 00:59:39,970 Nii me ütleme # define, siis ruumi, siis sõna, mida soovite kasutada pidevalt nimi 955 00:59:39,970 --> 00:59:41,730 ja siis väärtus samaks. 956 00:59:41,730 --> 00:59:44,710 Teade see erineb määrates midagi muutuja. 957 00:59:44,710 --> 00:59:46,430 Pole mingit võrdusmärki, ei ole semikooloniga. 958 00:59:46,430 --> 00:59:49,140 See on see, mida on üldiselt tuntud kui eeltöötluse direktiivi 959 00:59:49,140 --> 00:59:50,840 vaid pigem, et muul ajal. 960 00:59:50,840 --> 00:59:56,350 Praegu tekitab see muutumatu väärtus nimega TESTID 961 00:59:56,350 --> 00:59:58,290 kelle tegelik arvuline väärtus on 2. 962 00:59:58,290 --> 01:00:02,180 Nii et kuskil näed viktoriine, interaktiivseid viktoriine kogu seda faili 963 01:00:02,180 --> 01:00:04,230 see on lihtsalt number 2. 964 01:00:04,230 --> 01:00:06,550 Kui ma vaatan peamised nüüd, vaatame, kuidas see töötab. 965 01:00:06,550 --> 01:00:09,770 Esiteks tundub veidi segasena, aga see on kõik asjad alates 1. nädalast. 966 01:00:09,770 --> 01:00:12,210 Küsi kasutajalt klassid. Kuidas me seda teeme? 967 01:00:12,210 --> 01:00:17,350 Kooskõlas 22 - see on tõesti mahlane osa - Ma kuulutan float 968 01:00:17,350 --> 01:00:23,240 kuid mitte ainult ühe sularahaga. Ma kuulutatakse pigem massiivi ujukoma väärtuste. 969 01:00:23,240 --> 01:00:27,700 See muutuja nimetama hakatakse hindeid, kui sellele viitab siin, 970 01:00:27,700 --> 01:00:31,420 kuid ainult tükk uus süntaks siis on need nurksulud. 971 01:00:31,420 --> 01:00:37,280 Asjaolu, et ma olen öelnud float klassid ja siis sulg ja seejärel arv - 972 01:00:37,280 --> 01:00:40,980 märgata, kui see on pidev see on nagu me seda tegime - 973 01:00:40,980 --> 01:00:46,840 see tähendab, "Hei arvuti, anna mulle 2 ujukite ja lähme koos nimetame neid klasse." 974 01:00:46,840 --> 01:00:51,780 >> See on kontrastiks palju tüütu protsess näeb välja selline: float Grade1; 975 01:00:51,780 --> 01:00:54,580 float Grade2; ja nii edasi. 976 01:00:54,580 --> 01:00:58,310 Nii massiivi võimaldab meil rakendada seda ideed, kuid palju vähem räpakalt, 977 01:00:58,310 --> 01:01:04,560 nii et me saame kirjutada 1 rida koodi asemel, ütleme, 16, 16 nädala semester. 978 01:01:04,560 --> 01:01:09,060 Ma ei taha kõva-kood 2, sest kui sina arvad sellest nüüd loogiliselt, 979 01:01:09,060 --> 01:01:12,560 oletame järgmisel aastal CS50 muudatusi kuni 3 viktoriinid asemel 980 01:01:12,560 --> 01:01:15,010 ja mul oli number 2 siin, mul oli number 2 siin, 981 01:01:15,010 --> 01:01:17,210 Mul oli number 2 siin, number 2 siin. 982 01:01:17,210 --> 01:01:19,890 See muutub väga tüütu ja väga lihtne kägardama 983 01:01:19,890 --> 01:01:26,550 ja kogemata muuta 1 väärtus on 3 ja pane mõni muu väärtus 2. 984 01:01:26,550 --> 01:01:30,660 Nii et ma lähen selle asemel abstraktne see ära ja kasutavad seda pidevalt, et 985 01:01:30,660 --> 01:01:32,520 nagu nimigi ütleb, ei muutu kunagi. 986 01:01:32,520 --> 01:01:35,870 Ja nüüd ükskõik, kas meil on erinevad viktoriinid sel aastal või järgmisel, 987 01:01:35,870 --> 01:01:39,380 Ma lihtsalt pean seda muuta ühes kohas siin üleval. 988 01:01:39,380 --> 01:01:41,230 Nii et kõik on konstant. 989 01:01:41,230 --> 01:01:47,100 Vahepeal uut kontseptuaalset omadus on, et massiivi. 990 01:01:47,100 --> 01:01:55,030 Nii nurksulgudes anna mulle seda palju ujukite ja laseb mul kollektiivselt nimetada neid klassid siin. 991 01:01:55,030 --> 01:01:56,720 Nüüd vaatame, mida ma teen. 992 01:01:56,720 --> 01:01:59,220 Siin Rida 24 on algusest jaoks silmus. 993 01:01:59,220 --> 01:02:03,380 >> See on tõesti midagi meeldib. See on lihtsalt kasutades TESTID asemel püsiprogrammeeritud arv. 994 01:02:03,380 --> 01:02:06,740 Aga seal on midagi intellektuaalselt erinevate sinna eelmisel nädalal. 995 01:02:06,740 --> 01:02:11,650 See on lihtsalt printf, nii printf ("Viktoriin #% d% d:") 996 01:02:11,650 --> 01:02:16,670 sest ma tahan välja printida mulle viktoriin number 1, 2 ja siis 2 2. 997 01:02:16,670 --> 01:02:18,480 Nii et see on puhtalt esteetiline asi. 998 01:02:18,480 --> 01:02:21,000 Aga huvitav osa nüüd on rida 27. 999 01:02:21,000 --> 01:02:27,840 Selleks, et täita üks kahest kohatäited koos ujukomaväärtus, 1000 01:02:27,840 --> 01:02:29,640 sa uuesti kasutada nurksulgudes. 1001 01:02:29,640 --> 01:02:35,170 Sel juhul ma kasutan i, sest see loop on alanud i võrdub milline väärtus, ilmselt? 1002 01:02:35,170 --> 01:02:36,670 [Üliõpilane] 0. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Nii et esimese iteratsiooni see ahel, see on nii, nagu ma kirjutasin seda koodi, 1004 01:02:40,990 --> 01:02:46,310 kuid teist iteratsiooni see silmus, see on nii, nagu ma kirjutasin selle oma kood. 1005 01:02:46,310 --> 01:02:49,970 Kuid tõsiasi, et ma kasutan muutuja on täiuslik, sest nagu nimigi ütleb, 1006 01:02:49,970 --> 01:02:52,600 see on erinev selle väärtus igal iteratsiooni 1007 01:02:52,600 --> 01:02:55,900 nii et ma täita see massiivi ühe kohapeal korraga. 1008 01:02:55,900 --> 01:02:57,380 Mida see massiivi välja näeb? 1009 01:02:57,380 --> 01:03:01,570 Põhjus, miks ma joonistasin super lihtne ristkülik ekraanil siin enne oli sel põhjusel. 1010 01:03:01,570 --> 01:03:05,590 Massiiv on lihtsalt patakas mälu järgneb teine ​​patakas mälu 1011 01:03:05,590 --> 01:03:08,570 järgneb teine ​​patakas mälu ja nii edasi. 1012 01:03:08,570 --> 01:03:13,120 Nii et kui minu rida on suurus 2 Käesolevas asjas, kõik, mida ma teeks 1013 01:03:13,120 --> 01:03:20,200 kirjutades minu viktoriini skoorid meeldib siin - ma sain 100 selle ühe ja siis sain 99 see - 1014 01:03:20,200 --> 01:03:24,970 siis see mälu ei pruugi isegi kasutada, sest ma olen ainult küsis arvuti 1015 01:03:24,970 --> 01:03:26,840 array suurus 2. 1016 01:03:26,840 --> 01:03:28,600 Need väljakud on veel seal, eks? 1017 01:03:28,600 --> 01:03:32,670 Teil on veel 2 GB RAM isegi kui sa oled ainult küsisin 2 ujukite. 1018 01:03:32,670 --> 01:03:36,840 Nii et idee massiivid on see, et arvuti lihtsalt võtab tüki mälu 1019 01:03:36,840 --> 01:03:41,340 ja siis jaotab väiksemateks tükkideks seljad et seljad. 1020 01:03:41,340 --> 01:03:43,310 Ja nii ongi kõik massiiv on. 1021 01:03:43,310 --> 01:03:47,350 >> See on külgnevas patakas mälu sees kuhu saab panna asjad. 1022 01:03:47,350 --> 01:03:50,700 See juhtub siis tee lihtsalt mingi igav aritmeetika. 1023 01:03:50,700 --> 01:03:54,640 Kui ma keri siin on see, kus ma siis itereerime massiivi. 1024 01:03:54,640 --> 01:03:58,020 Ma tulla liitmise kõik väärtuste massiivi, 1025 01:03:58,020 --> 01:04:02,470 ja siis ma kasutan ringi funktsioon siin tegelikult teha summa jagatud viktoriine. 1026 01:04:02,470 --> 01:04:06,320 Aga las ma siputan kätt, et kui omamoodi piisavalt aritmeetika nüüd. 1027 01:04:06,320 --> 01:04:08,370 Aga kõik, mis teeb minu jaoks lõppkokkuvõttes on arvuti keskmine. 1028 01:04:08,370 --> 01:04:13,580 Nii et esimene viktoriin pluss 2. viktoriin jagatud 2 ja seejärel printida see välja nagu int. 1029 01:04:13,580 --> 01:04:17,280 Aga olgem nüüd ülemineku erinevaid Näiteks nimetatakse string1, 1030 01:04:17,280 --> 01:04:20,700 mis on samamoodi, kuid kasutades stringid. 1031 01:04:20,700 --> 01:04:23,940 Lubage mul minna ja lihtsustada seda hetkeks. 1032 01:04:23,940 --> 01:04:27,090 Andesta taandus nüüd. 1033 01:04:27,090 --> 01:04:30,870 Teade kooskõlas 19. Selles näites ma saan stringi kasutaja. 1034 01:04:30,870 --> 01:04:34,640 Aga teate, mis ma järgmisena teeb eelarveridadel 22 aastast. 1035 01:04:34,640 --> 01:04:41,250 Ma olen tegelikult itereerimise alates i kuni - ja see on uus trikk - strlen, string pikkusega. 1036 01:04:41,250 --> 01:04:44,880 See on funktsioon, mis on koos C et kui te kaotate seda stringi, 1037 01:04:44,880 --> 01:04:47,730 ta ütleb teile, kui palju märke on, et nöör. See on kõik. 1038 01:04:47,730 --> 01:04:51,550 Ja asjaolu, et see on strlen asemel stringi pikkus on lihtsalt sellepärast, et see on sisutihe. 1039 01:04:51,550 --> 01:04:55,100 Kolmkümmend aastat tagasi, inimesed tahtnud kirjutada asju lühidalt kui võimalik, 1040 01:04:55,100 --> 01:04:57,630 nii oleme hoida selle konventsiooni siin. 1041 01:04:57,630 --> 01:05:00,660 i + + tähendab lihtsalt juurdekasvu i iga iteratsiooni. 1042 01:05:00,660 --> 01:05:02,990 Ja nüüd märgata seda, mis on tõesti huvitav. 1043 01:05:02,990 --> 01:05:09,180 Kooskõlas 24, ma ütlen, "Arvuti, anna mulle märk, 8 bitti, ja nimetavad seda c." 1044 01:05:09,180 --> 01:05:12,630 Aga milline on see paremal servas öelda? 1045 01:05:13,490 --> 01:05:16,530 Inglise keeles, mida see koosneb? 1046 01:05:16,530 --> 01:05:18,730 [Üliõpilane] esimene märk massiivi. 1047 01:05:18,730 --> 01:05:20,790 Täpselt. Anna mulle esimene märk massiiv. 1048 01:05:20,790 --> 01:05:24,090 Või üldisemalt, anna mulle nda märgi massiiv. 1049 01:05:24,090 --> 01:05:26,100 Ja mõistma, et see on oluline nüüd, et kui arvuti teadlased, 1050 01:05:26,100 --> 01:05:27,890 me tegelikult lugedes 0. 1051 01:05:27,890 --> 01:05:29,720 >> Sul ei ole kaalutlusõigust nüüd hakata seda tegema. 1052 01:05:29,720 --> 01:05:34,160 Nüüd on teil käituda vastavalt arvuti ootused ja loota 0 1053 01:05:34,160 --> 01:05:38,180 sest [0] saab olema esimene märk string, 1054 01:05:38,180 --> 01:05:42,150 [1] saab olema teine, [2] saab olema kolmas ja nii edasi. 1055 01:05:42,150 --> 01:05:49,720 Nii et see programm, kui ma kompileerida see on jälle string1, nii et string1, 1056 01:05:49,720 --> 01:05:54,670 ja nüüd ma olen joosta string1 minu terminaliakent. 1057 01:05:54,670 --> 01:05:58,330 See ootab sisend, nii et ma lähen sisestada David, Enter, 1058 01:05:58,330 --> 01:06:02,540 ja nüüd ta prindib David kõik erinevatel teedel, sest teate, mida ma teen. 1059 01:06:02,540 --> 01:06:05,820 Ma printimise üks täht korraga. 1060 01:06:05,820 --> 01:06:10,100 Me ei hakka üksikasjalikult täna sellest, vaid ma välja hetk tagasi selle kontrolli siin. 1061 01:06:10,100 --> 01:06:15,480 Selgub, et kui kasutaja ei toimi, võistlevuse, või lihtsalt segaduses, 1062 01:06:15,480 --> 01:06:20,210 saate tegelikult ei anna string põhjalikkusega. 1063 01:06:20,210 --> 01:06:22,860 Kui põrkad vale klahvi klaviatuuril, siis võiks anda mingit stringi üldse 1064 01:06:22,860 --> 01:06:26,950 või kui sa oled pahatahtlik, võite proovida kleepida GB väärtuses essee 1065 01:06:26,950 --> 01:06:29,290 et täita seda stringi, ja kui arvuti mälu, 1066 01:06:29,290 --> 01:06:32,710 tuleb välja, et me lähme tagasi saada seda erilist väärtust nimetatakse NULL. 1067 01:06:32,710 --> 01:06:35,580 Nii et nüüd lihtsalt tean, et seal on see eriline väärtus nimega NULL 1068 01:06:35,580 --> 01:06:39,580 mis võimaldab meil kontrollida, kui me mälu, muu hulgas. 1069 01:06:39,580 --> 01:06:45,630 Aga kui ma avada nüüd string2, märkate üks erinevus siin. 1070 01:06:45,630 --> 01:06:48,210 Teade üks erinevus siin string2. 1071 01:06:48,210 --> 01:06:51,340 Mis string2, seda silmus on veidi erinev. 1072 01:06:51,340 --> 01:06:55,010 >> Las ma kustutan NULLS et saaksime rääkida need muul ajal. 1073 01:06:55,010 --> 01:06:57,800 Mis on erinev umbes jaoks silmus seekord? 1074 01:06:59,620 --> 01:07:01,670 Ma ei saa minna tagasi eelmisele näiteks. 1075 01:07:01,670 --> 01:07:08,580 Nii et see versioon 2, see on versioon 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 Strlen kõne on kus? 1078 01:07:16,660 --> 01:07:18,860 See on esimene osa jaoks silmus. 1079 01:07:18,860 --> 01:07:21,830 Kõik mõtted, miks ma seda teen? Jah. 1080 01:07:21,830 --> 01:07:24,560 [Üliõpilane] Nii et sa ei kutsu funktsiooni iga kord. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Nii et me ei sea funktsiooni iga kord. Täpselt. 1082 01:07:26,440 --> 01:07:28,300 Meenuta alates jaoks silmuseid, et nad on super lihtne 1083 01:07:28,300 --> 01:07:31,770 Kui oled omamoodi aru, et see on käivitamise, seisukorra ja uuendus. 1084 01:07:31,770 --> 01:07:34,750 Probleem on selles, et tingimus juhtub iga iteratsiooni silmus. 1085 01:07:34,750 --> 01:07:40,010 Ja nii see näide, mis on halba, et see on minu tingimus? 1086 01:07:40,010 --> 01:07:41,830 [Üliõpilane] Helistate strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] Helistate strlen uuesti ja uuesti ja uuesti. 1088 01:07:44,340 --> 01:07:47,410 Aga kui ma olen sisestatud David, pikkus, et string on 5, 1089 01:07:47,410 --> 01:07:49,650 ja see ei muutu iga iteratsiooni loop 1090 01:07:49,650 --> 01:07:51,670 sest string on ikka D-A-v-i-d. 1091 01:07:51,670 --> 01:07:55,320 Nii et see on vihje, mida läheb aina olulisem mõte 1092 01:07:55,320 --> 01:08:00,410 tuntud disaini otsus, kus lihtsalt ei tee arvuti teha lisatöö. 1093 01:08:00,410 --> 01:08:03,920 >> Nii nagu vargsi eelvaade pset2, pset2 Standard Edition 1094 01:08:03,920 --> 01:08:07,030 läheb väljakutse teil tegelikult rakendada mõningaid arvu ciphers 1095 01:08:07,030 --> 01:08:10,410 mõned hulk algoritme, nii et saate nii krüptida 1096 01:08:10,410 --> 01:08:13,840 ja dekrüpteerimiseks salajaste sõnumite palju nagu üks Ralphie seal dekodeerida. 1097 01:08:13,840 --> 01:08:16,810 Kui häkker väljaanne pset2, me läheme veidi kaugemale. 1098 01:08:16,810 --> 01:08:19,649 Me läheme käe faili tegelik arvutisüsteemi 1099 01:08:19,649 --> 01:08:23,479 mis sisaldab terve hunniku kasutajanimesid ja tegelikke krüpteeritud paroole, 1100 01:08:23,479 --> 01:08:26,939 ja väljakutse häkker väljaanne saab olema crack need paroolid 1101 01:08:26,939 --> 01:08:33,200 ja selgitada, mida krüptograafia või mis saladus kasutati tegelikult tekitavad need paroolid. 1102 01:08:33,200 --> 01:08:36,109 Ja me ei kavatse seda teha, kasutades uut funktsiooni siin C 1103 01:08:36,109 --> 01:08:40,630 et ma annan sulle lihtsalt demo tuntud käsurea argumente. 1104 01:08:40,630 --> 01:08:44,229 Selgub, nagu mõned teist ehk märganud jaos või õpikutes, 1105 01:08:44,229 --> 01:08:48,260 Peamised alati ei pea olema tühine sulgudes. 1106 01:08:48,260 --> 01:08:52,430 Tuleb välja, et peamised võib kirjutada ka niimoodi, kusjuures kaks argumenti, 1107 01:08:52,430 --> 01:08:56,870 argc ja argv, kus argc on sõnade arv 1108 01:08:56,870 --> 01:09:00,020 et sa peale programmi nime oma käsurida 1109 01:09:00,020 --> 01:09:03,420 ja argv on tegelikud sõnad. 1110 01:09:03,420 --> 01:09:07,540 Ja nagu nurksulud seal näitavad, argv on ilmselt massiivi. 1111 01:09:07,540 --> 01:09:12,210 See saab olema string pärast string pärast stringi mälu. 1112 01:09:12,210 --> 01:09:16,010 >> Nii et me ei kavatse olla võimeline tegema alustades pset 2 on midagi sellist. 1113 01:09:16,010 --> 01:09:21,350 Kui ma argv1, mis on näide me tuleme tagasi esmaspäeval, ja kasutada seda, 1114 01:09:21,350 --> 01:09:23,370 märgata, et see ei tundu midagi veel. 1115 01:09:23,370 --> 01:09:25,490 See lihtsalt trükib välja oma nime all. 1116 01:09:25,490 --> 01:09:31,479 Aga kui ma hüvasti klass, teate, et see programm ilmselt kordab 1117 01:09:31,479 --> 01:09:35,479 üle iga sõna, mis olid kirjutatud käsureale. 1118 01:09:35,479 --> 01:09:41,630 Ja vahendid, mille abil me pääseda sõnad, et kasutaja on trükitud käsureale 1119 01:09:41,630 --> 01:09:49,160 on muutes peamine algab sel nädalavahetusel alates int main (void) int main (argc, argv) 1120 01:09:49,160 --> 01:09:52,050 ja seega sünnib käsurea argumente. 1121 01:09:52,050 --> 01:09:57,100 Ja kui sa tõesti kogenud seda, sa pead olema võimeline kirjutama tõesti trippy programmid 1122 01:09:57,100 --> 01:09:59,610 nagu see siin, mis läheb üle ja kaugemale 1123 01:09:59,610 --> 01:10:03,940 mõned funktsioonid oleme seni teinud vaid kõik üsna võimas. 1124 01:10:03,940 --> 01:10:08,950 >> Nii et jätame selle käesoleva ekraanil, ja me näeme esmaspäeval. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]