1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [Semajno 2, daŭrigis] 2 00:00:02,270 --> 00:00:04,220 [Davido J. Malan, Harvard University] 3 00:00:04,220 --> 00:00:06,880 [Jen CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 Bone. Ĉi tiu estas CS50, kaj ĉi tiu estas la fino de semajno 2. 5 00:00:10,990 --> 00:00:14,410 Se vi atendis esti malsata por ĉi tiu epoko morgaŭ, 6 00:00:14,410 --> 00:00:18,620 scias, ke ni tuj kunvoki kiel malgranda grupo morgaŭ, ĵaŭdo, 1:15 ptm. 7 00:00:18,620 --> 00:00:21,360 Estas ĉi tiu URL tie se vi ŝatus RSVP. 8 00:00:21,360 --> 00:00:26,740 Spaco estas limigita, do bonvolu pardoni se la formo plenigis per la tempo vi plenigu tiun eksteren. 9 00:00:26,740 --> 00:00:29,300 Alia URL, tamen, ke povus esti de intereso estas ĉi. 10 00:00:29,300 --> 00:00:32,369 En preskaŭ tutan monaton, la kurso tuj estos disponebla 11 00:00:32,369 --> 00:00:36,890 des pli vaste tra edX, vojo kiu onin sur la Interreto povos sekvi kune, 12 00:00:36,890 --> 00:00:39,380 partopreni en la kurso sufiĉe aktive, fakte. 13 00:00:39,380 --> 00:00:42,270 Ili estos uzi la CS50 Appliance kaj CS50 Discuss 14 00:00:42,270 --> 00:00:45,490 kaj la plimulto de la diversaj softvaro iloj kiujn ni jam estis uzante ĉi semestro. 15 00:00:45,490 --> 00:00:48,710 Kaj unu el la iniciatoj ni ŝatus alpreni kiel eksperimento ĉi tiu jaro 16 00:00:48,710 --> 00:00:51,930 estas vidi, kiom multe enhavo ni povas traduki 17 00:00:51,930 --> 00:00:53,960 en aliajn parolata kaj skribata lingvoj. 18 00:00:53,960 --> 00:00:57,500 Do, se vi povus havi intereson en partopreni en ĉi tiu projekto 19 00:00:57,500 --> 00:01:02,270 per kiu ni havigos Esperanto transskriboj kaj subtitoloj por la kurso de prelegoj 20 00:01:02,270 --> 00:01:05,450 kaj pantalono kaj seminarioj kaj sekcioj kaj similaj, 21 00:01:05,450 --> 00:01:08,200 se vi parolas flue aŭ skribi flue iu alia lingvo, 22 00:01:08,200 --> 00:01:12,290 ni amus engaĝiĝi vin en ĉi tiun projekton per kiu vi prenas sur unu aŭ pli el la filmetoj, 23 00:01:12,290 --> 00:01:15,200 traduki ilin en lingvon vi scias sufiĉe bone. 24 00:01:15,200 --> 00:01:18,700 >> Doni al vi la senton de la interfaco, ne estas tio ttt-bazita uzulinterfaco 25 00:01:18,700 --> 00:01:22,090 ke ni estos uzi tiun kreos esence UI ŝatas tion. 26 00:01:22,090 --> 00:01:24,290 Ĉi tio estis mi instruis kelkajn Halloween antaŭe, 27 00:01:24,290 --> 00:01:27,390 kaj sur la dekstra flanko en nigra apud tiuj tempo poŝtmarkojn, 28 00:01:27,390 --> 00:01:31,210 vi vidos la diversajn aĵojn kiuj eliris el mia buŝo, ke tago, 29 00:01:31,210 --> 00:01:34,850 kaj poste sube vi povos traduki en iu alia lingvo 30 00:01:34,850 --> 00:01:38,690 precize kion la surĵeto estas inter, en ĉi tiu kazo, la angla kaj, ekzemple, la hispana. 31 00:01:38,690 --> 00:01:40,440 Do ĝi estas vere tre uzantamika ilo. 32 00:01:40,440 --> 00:01:43,370 Vi povas rebobinar kaj rapida antaŭen tre facile kun klavarkurtvojoj. 33 00:01:43,370 --> 00:01:47,490 Do se vi ŝatus partopreni en ĉi tiu eksperimento kaj havi viajn vortojn vidis kaj legis 34 00:01:47,490 --> 00:01:51,850 per potenciale miloj da homoj tie, bonvolu bonvolu partopreni. 35 00:01:51,850 --> 00:01:54,350 Unu vorto pri la katido de lundo. 36 00:01:54,350 --> 00:02:00,350 Ke ni sendis tro timigas mesaĝo, do kompreni ke, kiel oficejo horoj sugestas 37 00:02:00,350 --> 00:02:03,300 kaj kiel sekcioj sugestas, la dezajno de la kurso estas tre 38 00:02:03,300 --> 00:02:07,360 esti studentoj kunlaboras kaj parolante labori tra problemo aroj 39 00:02:07,360 --> 00:02:11,260 kaj problemoj kune, kaj vere la linio simple venas malsupren al, 40 00:02:11,260 --> 00:02:16,010 denove, la laboro vi finfine submeti devus esti via propra. 41 00:02:16,010 --> 00:02:18,860 Kaj tiel tute honeste, en oficejo horoj estas tute normala, 42 00:02:18,860 --> 00:02:22,240 ĝi estas plene atendi eĉ, por esti babili kun iu amiko apud vi. 43 00:02:22,240 --> 00:02:24,370 >> Se li aŭ ŝi luktas kun iu temo kaj vi estas kiel, 44 00:02:24,370 --> 00:02:27,940 "Ho, bone, mi donos al vi duonvidi de iu linio de kodo, kiun mi skribis," ke estas bone, 45 00:02:27,940 --> 00:02:31,250 kio okazas, kaj tio estas tre favoraj, mi pensas, kun la procezo de lernado. 46 00:02:31,250 --> 00:02:36,750 Kie la linio gets transiris estas kiam la kapo estas speco de klinita super ĉi tie tro da sekundoj 47 00:02:36,750 --> 00:02:41,160 aŭ minutoj por ke vere al ĵus estis desbloquear ŝancon por via amiko, 48 00:02:41,160 --> 00:02:44,160 kaj certe kiam aĵoj get interŝanĝis per retpoŝto kaj Dropbox kaj similaj, 49 00:02:44,160 --> 00:02:45,640 tie ankaŭ estas la linio. 50 00:02:45,640 --> 00:02:48,620 Do por supozita sentas komfortaj kaj sentas kuraĝigis babili kun geamikoj 51 00:02:48,620 --> 00:02:52,810 kaj kompanoj sur psets pli kaj ĝuste rimarki ke kion vi finfine submetiĝi 52 00:02:52,810 --> 00:02:57,340 devus vere esti la produkto de Via kreo kaj ne iu alia. 53 00:02:57,340 --> 00:03:00,490 Kaj tiel unu el la domajno-specifa problemojn por pset2, 54 00:03:00,490 --> 00:03:04,740 kiu eliros malfrue morgaŭ nokte, estas plonĝi en la mondon de ĉifriko, 55 00:03:04,740 --> 00:03:08,970 kiu estas la arto de encrypting aŭ grimpadi informo, 56 00:03:08,970 --> 00:03:12,600 kaj ĉi finfine rilatas al la mondo de sekureco. 57 00:03:12,600 --> 00:03:16,560 Nun, sekureco por la plimulto de ni venas en la formo de sufiĉe sekulara mekanismoj. 58 00:03:16,560 --> 00:03:19,050 Ĉiuj el ni havas uzanto kaj pasvortoj, 59 00:03:19,050 --> 00:03:23,450 kaj cxiuj el ni havas tre malbona usernames kaj pasvortoj, plej verŝajne. 60 00:03:23,450 --> 00:03:28,240 >> Se via pasvorto estas la sama sur multnombraj retejoj, jen probable ne la plej bona ideo, 61 00:03:28,240 --> 00:03:30,070 kiel ni diskutos al semestro la fino. 62 00:03:30,070 --> 00:03:34,720 Se vian pasvorton estas skribita sur glueca noto - neniu ŝerco - en via monitoro, 63 00:03:34,720 --> 00:03:38,350 ankaŭ tio ne nepre la plej bona dezajno sed sufiĉe komuna fenomeno. 64 00:03:38,350 --> 00:03:42,470 Kaj se vi ne uzas ĉifriko por ĉifri pasvortojn vian, 65 00:03:42,470 --> 00:03:44,210 ili estas aparte vundebla. 66 00:03:44,210 --> 00:03:47,270 Do, se vi pensas ke vi estas super saĝa por havi kaŝitan Vorto dokumenton 67 00:03:47,270 --> 00:03:49,910 ie en vian malmolan diskon kiu havas ĉiujn viajn pasvortojn 68 00:03:49,910 --> 00:03:53,670 sed estas en dosierujo, ke neniu tuj rigardi, ke ankaŭ tio ne estas tre sekura mekanismo. 69 00:03:53,670 --> 00:03:56,990 Kaj tiel kion pset2 enkondukos estas ĉi arton de ĉifriko 70 00:03:56,990 --> 00:04:02,010 kaj grimpadi informon por ke aferoj kiel pasvortojn estas des pli sekura. 71 00:04:02,010 --> 00:04:05,790 La kunteksto estas, ke kun necerta datumoj 72 00:04:05,790 --> 00:04:07,930 venas ŝancon por ĉifri ĝin kaj levi ĝin. 73 00:04:07,930 --> 00:04:11,470 Kaj tiel tio, ekzemple, estas ekzemplo de ĉifrita mesaĝo. 74 00:04:11,470 --> 00:04:14,700 Tiu fakte diras ion en la angla, sed estas klare ne tute evidenta. 75 00:04:14,700 --> 00:04:18,279 Kaj ni venos plena cirklo hodiaŭ al tease krom kio estas tiu sekreta mesaĝo ĉi tie estas. 76 00:04:18,279 --> 00:04:23,490 Sed en la reala mondo de komputiloj, aĵoj eĉ ne aspektas kiel ili povus esti angla frazoj. 77 00:04:23,490 --> 00:04:28,430 Ekzemple, ĉi tio estas kion vi povus trovi en norma Linukso aŭ Mac aŭ Uniksa komputilo 78 00:04:28,430 --> 00:04:32,070 en dosiero, kiu estis iam nomata la pasvorton dosiero. 79 00:04:32,070 --> 00:04:34,200 >> Nuntempe ĝi estas movita en aliaj lokoj. 80 00:04:34,200 --> 00:04:39,210 Sed se vi rigardas en la ĝusta loko en sistemo, vi vidos ne nur vian uzantnomon 81 00:04:39,210 --> 00:04:43,400 aŭ tiu de aliaj homoj en la sistemo, sed vi vidos ĉifrita versio de ilia pasvorton. 82 00:04:43,400 --> 00:04:47,980 Efektive, la vorto kripto tie sugestas ke la sekvaj aferoj estas ĉifrita, 83 00:04:47,980 --> 00:04:52,680 kaj ĉi tiu serio de kvazaŭe hazarda literojn kaj signojn kaj nombrojn kaj tiel plu 84 00:04:52,680 --> 00:04:56,480 povas deĉifrita nur ĝenerale sciante iu sekreta - 85 00:04:56,480 --> 00:04:58,840 sekretan vorton, sekreta nombro - 86 00:04:58,840 --> 00:05:03,160 kaj tiel ja, la arto de ĉifriko finfine abscesoj malsupren fidi de ia 87 00:05:03,160 --> 00:05:05,650 kaj sciante ion ke iu alia ne. 88 00:05:05,650 --> 00:05:10,090 Do ni esplori tion en iom pli detale hodiaŭ kaj en la pset veni. 89 00:05:10,090 --> 00:05:12,200 Kaj nun unu vorton sur pass / malsukcesas. 90 00:05:12,200 --> 00:05:15,360 Speciale kiel kelkaj el vi plonĝis en pset1, la Appliance, 91 00:05:15,360 --> 00:05:19,080 kaj tre nova mondo por vi mem, rimarkas ke frustroj kaj konfuzo 92 00:05:19,080 --> 00:05:21,700 kaj simple teknikaj malfacilaĵoj estas sufiĉe por atendi, 93 00:05:21,700 --> 00:05:24,180 speciale kun la unua pset, kie estas nur tiom da novaj, 94 00:05:24,180 --> 00:05:27,730 nur nun konas ls kaj cd kaj ĉiuj tiuj arcano komandojn 95 00:05:27,730 --> 00:05:33,050 kaj nova medio, kaj tio estas apartigita for la efektiva materialo kaj programado mem. 96 00:05:33,050 --> 00:05:36,940 Do realigi ankaŭ, ke ekzistas certe oficejo horoj kiuj ekzistas kiel apogo strukturo. 97 00:05:36,940 --> 00:05:38,880 >> Sekcioj komenci ĉi venas dimanĉon. 98 00:05:38,880 --> 00:05:42,960 Sed plej grave, se vi sentas ĝuste tio ĉi ne estas la mondo por vi, 99 00:05:42,960 --> 00:05:44,710 rimarkas ke vere ne nur preni tempon. 100 00:05:44,710 --> 00:05:48,600 Kaj se ne por tiu ĉi ŝanco jarojn por mi de preni kurson pass / malsukcesos, 101 00:05:48,600 --> 00:05:50,990 honeste, mi neniam estus eĉ tretis la klasĉambro. 102 00:05:50,990 --> 00:05:53,690 Kaj vi povas ŝanĝi ĉi ĝis, ni diru, la kvina lundo de la kurso, 103 00:05:53,690 --> 00:05:58,280 do se vi estas sur la rando nun rimarkas ke anstataŭ kapon en iu alia akvoj aro, 104 00:05:58,280 --> 00:06:01,260 do certe konsideras nur ŝanĝas pasi / maltrafi. 105 00:06:01,260 --> 00:06:04,570 Denove, ne estas vere tiu kulturo tie en Harvard de preni aĵojn pasi / malsukcesos 106 00:06:04,570 --> 00:06:08,670 ekde ĉiuj vere volas atingi aŭ overachieve, 107 00:06:08,670 --> 00:06:11,130 sed sincere, ĉi tiu estas bonega maniero de provi ion 108 00:06:11,130 --> 00:06:16,720 kiuj povus ne esti konata al vi, kaj vi finos faras, plej ofte, tute bone, 109 00:06:16,720 --> 00:06:18,210 eble multe al via surprizo. 110 00:06:18,210 --> 00:06:20,980 Kaj en pli konkretaj terminoj, kion mi kredas pasi / malsukcesos ĝenerale faras, 111 00:06:20,980 --> 00:06:22,940 speciale kiel vi eble spertis kun pset0, 112 00:06:22,940 --> 00:06:26,560 se vi metas en 10 horoj, 15 horoj, 25 horojn en iu pset 113 00:06:26,560 --> 00:06:29,920 kaj vi nur banging vian kapon kontraŭ la muron kaj Fariĝas super malfrua nokto 114 00:06:29,920 --> 00:06:33,950 sed vi prenis la pset 90% de la vojo kaj vi simple ne povas diveni unu aferon, 115 00:06:33,950 --> 00:06:36,520 pasi / malsukcesos vere prenas la rando ekstere de klaso kiel ĉi tiu, 116 00:06:36,520 --> 00:06:39,100 kie vi povas ordigi de feliĉe diras, "Bone, mi scias ke ne perfekta, 117 00:06:39,100 --> 00:06:42,350 sed mi laboris mia azeno sur ĉi tiun, mi estas bela feliĉa kun kie finis, " 118 00:06:42,350 --> 00:06:44,850 kaj tio estos renkonti la atendojn por pass / maltrafi. 119 00:06:44,850 --> 00:06:47,540 Do observu, ke en la menso. Bone. 120 00:06:47,540 --> 00:06:50,520 >> Do tiuj el vi, kiuj luktis por uzi la Universitato Harvard Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 scias, ke tie estas CS50 SSID, a Wi-Fi, ŝvebantan 122 00:06:54,780 --> 00:06:56,490 ke vi havu pli bonan sorton por. 123 00:06:56,490 --> 00:07:00,130 Ĝi estas iom ironia ke la pasvorton por ĉi tio, se vi ŝatus provi konekti al ĉi 124 00:07:00,130 --> 00:07:08,350 por pli bona rapidoj - kaj ni scias se ĝi estas pli bona - estas 12345, la tuta vojo ĝis 8 125 00:07:08,350 --> 00:07:10,910 ĉar 8 estas pli sekura ol 5. 126 00:07:10,910 --> 00:07:16,910 Do, se vi bezonas la Wi-Fi pasvorton, konekti al CS50 sendrata tie, 12345678, 127 00:07:16,910 --> 00:07:20,380 kaj post en CS50 Diskutu se vi ankoraŭ havas intermitaj conectividad temoj, 128 00:07:20,380 --> 00:07:25,420 kaj ni lasu la povoj kiujn oni scias ĉi tiu spaco. Bone. 129 00:07:25,420 --> 00:07:32,230 Tial rapidaj teaser, precipe por tiuj el vi, kiuj estas fano knaboj aŭ knabinoj de ĉiuj aĵoj Apple. 130 00:07:32,230 --> 00:07:37,460 Kion mi elfosis de kelkaj jaroj malantaŭen, estis jena dosiero tie, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 nur por ia fari pli konkretaj kaj pli kompleksa 132 00:07:39,930 --> 00:07:42,560 kelkaj el la pli bazaj C programoj ni estis skribante. 133 00:07:42,560 --> 00:07:46,910 Do mi malfermis ĉi-dosiero, iUnlock.c. Estas disponebla en la Prelegoj paĝo hodiaŭ. 134 00:07:46,910 --> 00:07:49,810 Sur la maldekstra flanko oni vidas longan liston de funkcioj. 135 00:07:49,810 --> 00:07:53,230 Do la ulo kiu skribis ĉi redaktis multajn funkciojn, pli ol nur ĉefaj. 136 00:07:53,230 --> 00:07:57,340 Li uzis tutan faskon da bibliotekoj ĉi tie, kaj se ni komencos movo tra, 137 00:07:57,340 --> 00:08:04,890 kio estas tiu fakte estas estas la unua, mi kredas, fendo por la originala iPhone. 138 00:08:04,890 --> 00:08:09,830 >> Kiam vi volis jailbreak la originala iPhone, kiu signifas untether ĝin de AT & T 139 00:08:09,830 --> 00:08:13,710 kaj fakte instali specialan programaron sur ĝi kaj fari aferojn kiuj Apple ne volis personoj faru, 140 00:08:13,710 --> 00:08:18,480 iu prenis la tempon por eltrovi ĝuste kiel ili povus ekspluati programaron difektojn, 141 00:08:18,480 --> 00:08:22,690 erarojn, erarojn, en Apple programaro, kaj tiel naskiĝis iUnlock.c-- 142 00:08:22,690 --> 00:08:26,760 ke se vi kompilis ĝin en via komputilo kaj instalis ĝin sur iPhone 143 00:08:26,760 --> 00:08:29,430 kiu estis konektita al via komputilo per, ekzemple, USB kablon, 144 00:08:29,430 --> 00:08:32,450 ĉi tio donas al vi administra aŭ radiko privilegias via iPhone 145 00:08:32,450 --> 00:08:34,620 kaj lasos vin fari preskaux cxion, kion vi volas. 146 00:08:34,620 --> 00:08:36,400 Kaj do ili pasis tiu fascina kato kaj muso ludo 147 00:08:36,400 --> 00:08:39,340 inter Apple kaj la resto de la mondo en aparta kiel ili, kiel multaj entreprenoj, 148 00:08:39,340 --> 00:08:43,350 provi bloki lian stuff malsupren tiel ke vi povas nur fari kun ĝi, kion ili intencas. 149 00:08:43,350 --> 00:08:47,360 Sed danke al homoj ŝatas ĉi tiu kaj la kompreno de malalta nivelo detaloj - 150 00:08:47,360 --> 00:08:50,830 kaj en tiu kazo programado C - kaj multon de la familiara konstruoj 151 00:08:50,830 --> 00:08:55,280 ke ni komencis ludi kun vi kapablas vere influon la aparataro 152 00:08:55,280 --> 00:08:59,250 en maniero ke vi decidos, kaj ne nepre iu kompania ento. 153 00:08:59,250 --> 00:09:01,600 Do ekzemple, mi ne havas ideon kion ĉiuj ĉi faras, 154 00:09:01,600 --> 00:09:03,580 sed GetVersion sonas sufiĉe simpla, 155 00:09:03,580 --> 00:09:05,710 kaj gxi aspektas ĉi estas funkcio kiu tiu persono skribis. 156 00:09:05,710 --> 00:09:09,250 Ĝi prenas ian entjero kiel argumento, ne revenas nenion, 157 00:09:09,250 --> 00:09:13,710 sed ŝajnas buklo kun por buklo tie kaj se kondiĉo, se kondiĉo ripozon, 158 00:09:13,710 --> 00:09:16,770 kaj iel rilatas al versio numerojn se ni rulumu malsupren, 159 00:09:16,770 --> 00:09:19,650 kvankam multe da tiuj ŝlosilvortoj tuj estos nova. 160 00:09:19,650 --> 00:09:22,590 Kaj estas tuta kvanto de funkcioj en ĉi tie ni neniam vidis kaj eble ne cxiam vidos 161 00:09:22,590 --> 00:09:24,350 Super la apartajxo de la semestro. 162 00:09:24,350 --> 00:09:29,160 >> Je la fino de la tago, sekvas la samajn regulojn kaj logiko, ke ni estis ludante kun tiel for. 163 00:09:29,160 --> 00:09:34,340 Do ĉi tiu estas tro maljuna por fendi via iPhone 3s aŭ 4s aŭ baldaŭ 5s tiuj tagoj, 164 00:09:34,340 --> 00:09:38,830 sed sciu, ke ĝi estas ĉiuj tre derivita de ĉi tiu mondo kiu ni plonĝis en. 165 00:09:38,830 --> 00:09:42,280 Ni rigardu iom pli simpla ekzemplo: 166 00:09:42,280 --> 00:09:46,260 ĉi tiu, nur por preni hejtita kun iuj sintakso kaj ankaŭ iuj aliaj datumtipo 167 00:09:46,260 --> 00:09:48,910 ke ni jam parolis pri sed ne vere vidas en C. 168 00:09:48,910 --> 00:09:53,670 Tiu dosiero elĉerpiĝas nomis positive1.c, kaj po la komentojn ĉe la supro, 169 00:09:53,670 --> 00:09:56,070 ĉi nur postulas ke la uzanto ofertas pozitiva nombro. 170 00:09:56,070 --> 00:09:59,910 Do ĝi estas ekzemplo de do-dum ciklo, kiu estas agrabla por uzanto interaga programoj 171 00:09:59,910 --> 00:10:02,070 kie vi bezonas diri al la uzanto por fari ion, 172 00:10:02,070 --> 00:10:05,530 kaj se ili ne kunlaboru vi krias al ili aŭ malakcepti ilia enigo. 173 00:10:05,530 --> 00:10:10,480 Kazo en punkto: mi iras fari linioj 19 tra 24 174 00:10:10,480 --> 00:10:14,620 tiel longe kiel la uzanto ne donis al mi pozitiva nombro. 175 00:10:14,620 --> 00:10:21,340 Tiu detalo tie sur linio 18, kial mi deklaras n super ĉi tiu tuta looping konstrui 176 00:10:21,340 --> 00:10:26,870 kontraste al dekstra flanko linio 22, kie mi vere deziras akiri n? Yeah. 177 00:10:26,870 --> 00:10:29,330 [Studento] Medio. >> Jes, do ĉi tiu temo de medio. 178 00:10:29,330 --> 00:10:31,770 Kaj en lego de terminoj, kion signifas medion referi al? 179 00:10:34,880 --> 00:10:41,560 Yeah. >> [Inaudible studento respondon] >> Cxu vi parolas iom pli laŭta? 180 00:10:41,560 --> 00:10:45,440 [Studento] Kie vi povas aliri tiu variablo. >> Perfekta. 181 00:10:45,440 --> 00:10:47,610 Kie vi povas aliri al aparta variablo. 182 00:10:47,610 --> 00:10:50,990 Kaj ĝenerale, la regulo de thumb ĝis nun estis ke la medio de iu variablo 183 00:10:50,990 --> 00:10:56,140 estas difinita de la plej freŝa krispa krampoj, ke vi vidis. 184 00:10:56,140 --> 00:11:03,070 >> Kaj tiel en tiu kazo, se mi faris la eraron de deklarante n sur linio 22, tiu linio laborus. 185 00:11:03,070 --> 00:11:10,840 Mi ricevas int, kaj mi metis ĝin en tiun variablon n en linio 22, 186 00:11:10,840 --> 00:11:17,060 sed kiu linio de kodo nun ne havas ideon kion mi parolas? >> [Studento] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, kaj ĝi rezultas 24 tiel ĉar en tiu kazo ĝi falas ekster la frizita krampoj. 188 00:11:23,840 --> 00:11:28,550 Do nur iom da ĝeno sed tre facile solvita per simple deklarante la variablo 189 00:11:28,550 --> 00:11:30,700 eksteren de la funkcio mem. 190 00:11:30,700 --> 00:11:32,760 Ni vidos poste hodiaŭ oni povas iri unu paŝon 191 00:11:32,760 --> 00:11:34,940 kaj vi povis saltigi iom mallaborema. 192 00:11:34,940 --> 00:11:39,660 Kaj ĉi tiu estas ne al esti rekomendita en ĝenerala, sed vi povis saltigi mallaborema 193 00:11:39,660 --> 00:11:44,150 kaj metis variablo sume, por tiel diri, ne ene de funkcio, ne interne de ciklo, 194 00:11:44,150 --> 00:11:49,800 sed en la dosieron mem, ekster ĉiuj funkcioj vi skribis, kiel mi faris tie sur linio 15. 195 00:11:49,800 --> 00:11:55,220 Ĉi tiu estas ĝenerale malaprobita, sed realigi ĉi estas solvaĵo foje al aliaj problemoj, 196 00:11:55,220 --> 00:11:56,910 kiel ni eventuale vidi. 197 00:11:56,910 --> 00:11:59,500 Do cxar nun ni lasos ĝin kiel ĉi tiu, sed ni vidu se ni povas reverki ĉi 198 00:11:59,500 --> 00:12:02,360 nur komenci esprimi nin iom malsame. 199 00:12:02,360 --> 00:12:05,550 Ĉi tiu programo, nur por esti klara, estas positive1. 200 00:12:05,550 --> 00:12:11,980 Lasu min ĉi tie kaj en mia fina fenestro fari positive1, Enter. 201 00:12:11,980 --> 00:12:15,080 Kompilas okay. Mi tuj kuros positive1, batis Eniru. 202 00:12:15,080 --> 00:12:19,250 Mi postulas ke vi donu al mi pozitiva entjero. Mi diros -1. Tio ne funkcios. 203 00:12:19,250 --> 00:12:22,340 0, 99. Tio ŝajnas funkcii. 204 00:12:22,340 --> 00:12:25,310 Eble ne la plej rigora provo, sed almenaŭ ĝi estas bela prudento ĉeko 205 00:12:25,310 --> 00:12:27,100 ke ni estas sur la ĝusta vojo. 206 00:12:27,100 --> 00:12:29,570 >> Do nun mi antaŭeniri kaj malfermi la versio 2 de tiu, 207 00:12:29,570 --> 00:12:32,800 kaj kio estas malsama jam? 208 00:12:32,800 --> 00:12:39,030 Ĝi altrudas la sama afero, sed kion saltante kiel klare malsamaj tiu tempo? 209 00:12:40,790 --> 00:12:47,090 Ĉi bool en verdo. Ĝi estas emfazita en verdo, ĉi ŝlosilvorto konata kiel bool, kiu estas datumtipo. 210 00:12:47,090 --> 00:12:50,510 Ĝi ne venos konstruita por ĉiuj versioj de C. 211 00:12:50,510 --> 00:12:52,650 Vi devas inkluzivi specifa biblioteko. 212 00:12:52,650 --> 00:12:56,460 En nia kazo, mi inkludis la CS50 biblioteko por ke ni havas aliron al bool. 213 00:12:56,460 --> 00:12:59,860 Sed en linio 18, ni ŝajnas havi Bulea valoro ĉi tie nomas dankemaj. 214 00:12:59,860 --> 00:13:02,190 Mi povus esti nomata ĉi ion, sed mi nomas ĝin dankema 215 00:13:02,190 --> 00:13:04,750 nur por ia transdoni iun semantikan signifon. 216 00:13:04,750 --> 00:13:07,700 Do komence en linio 18, mi ŝajne ne dankema 217 00:13:07,700 --> 00:13:12,230 ĉar la Bulea valoro dankema estas inicializado al falsa en linio 18. 218 00:13:12,230 --> 00:13:16,500 Kaj tiam ĝi ŝajnas kion mi faris tie en linioj 21 tra 23 219 00:13:16,500 --> 00:13:19,200 estas mi ĵus ia reskribita mia logiko. 220 00:13:19,200 --> 00:13:26,100 Do ne funkcie malsama, sed en linio 22 nun mi kontrolu se la int la uzanto havigis 221 00:13:26,100 --> 00:13:31,360 estas pli granda ol 0, tiam mi simple ŝanĝi la valoron de dankema al vera. 222 00:13:31,360 --> 00:13:35,590 Kaj kial mi faru tion? Ĉar en linio 25, ŝajne mi iros por kontroli kondiĉo. 223 00:13:35,590 --> 00:13:39,760 Ĉu ĉi tiu buklo dum dankema estas falsaj. 224 00:13:39,760 --> 00:13:42,960 Do mi proponis tion kiel alternativo al la versio 1 225 00:13:42,960 --> 00:13:47,050 ĉar ĝi estas almenaŭ iom pli intuicia eble, estas iom pli bazite en la angla. 226 00:13:47,050 --> 00:13:51,980 Do faru la sekvajn dum vi estas ne dankema aŭ dum dankema estas falsaj. 227 00:13:51,980 --> 00:13:56,220 Kaj ĉi-foje tro Mi ŝajne ne gravas memori kion la uzanto tajpas en 228 00:13:56,220 --> 00:14:00,050 ĉar avizo ne estas variablo n, tiel fakte, iom blanka kuŝas tie. 229 00:14:00,050 --> 00:14:03,290 >> Funkcie, la programo estas iom malsamaj iam ni atingos la fundon de tio 230 00:14:03,290 --> 00:14:04,960 ĉar mi ne memoras kio n estas. 231 00:14:04,960 --> 00:14:09,120 Sed mi volis pruvi ĉi tie ankaŭ, ke eĉ se ni vidis GetInt 232 00:14:09,120 --> 00:14:13,780 kaj GetString uzitaj sur la dekstra flanko de egala signo ĝis nun 233 00:14:13,780 --> 00:14:17,310 por ke ni memoru la valoro, teknike, tio ne estas strikte necesaj. 234 00:14:17,310 --> 00:14:20,290 Se ial ajn vi simple ne deziras savi la valoro, 235 00:14:20,290 --> 00:14:25,540 vi nur volas kontroli la valoron, rimarki ke ni povas simple skribi ĉi tiu kiel GetInt, 236 00:14:25,540 --> 00:14:27,320 malfermita paren, proksime paren. 237 00:14:27,320 --> 00:14:30,570 Tiu funkcio tuj resendas valoron, kiel ni estis dirante. 238 00:14:30,570 --> 00:14:32,220 Ĝi tuj donu vin al int. 239 00:14:32,220 --> 00:14:34,460 Kaj do se vi mense pensas pri ĉi tiu pasante, 240 00:14:34,460 --> 00:14:38,190 kiam mi tajpas en 99, GetInt redonas la numeron 99, 241 00:14:38,190 --> 00:14:41,840 kaj tiel koncepte ĝi estas kvazaŭ mia kodo estis fakte ĉi. 242 00:14:41,840 --> 00:14:45,950 Do, se 99 estas ja granda ol 0, tiam dankema iĝas vera, 243 00:14:45,950 --> 00:14:50,810 tiam linio 25 rimarkas ooh, ni faris ĉar mi estas nun dankema, 244 00:14:50,810 --> 00:14:53,970 kaj en linio 26, ni simple diri, "Dankon pro la pozitiva entjero!" 245 00:14:53,970 --> 00:14:55,960 ĉion, kio okazis al esti. 246 00:14:55,960 --> 00:14:59,140 Nun ni faru malgravaj sintaksa sukero tie, por tiel diri. 247 00:14:59,140 --> 00:15:04,670 Ni vidu se ni povas purigi ĉi tiun linion 25 kun ĉi tiu tria kaj lasta varianto en positive3. 248 00:15:04,670 --> 00:15:13,600 >> Rimarki la sola diferenco nun estas kion linio de kodo? >> [Studento] 25. >> [Malan] Yeah, 25. 249 00:15:13,600 --> 00:15:17,680 Kaj ni ne vere vidis tiun atuton nur ankoraŭ, sed ni ne vidas la ekkrio punkto lundon, 250 00:15:17,680 --> 00:15:21,070 kion signifas kio? >> [Studento] Ne. >> Ne aŭ nego. 251 00:15:21,070 --> 00:15:23,510 Do prenu Bulea valoro kaj klaki ĝian valoron. 252 00:15:23,510 --> 00:15:25,810 Vera igas falsa, malvera iĝas vera. 253 00:15:25,810 --> 00:15:30,420 Do ĉi, mi proponas, estas eĉ iom pli intuicia maniero de skribo de la kodo 254 00:15:30,420 --> 00:15:33,430 ĉar mi ankoraŭ pravalorizi dankis falsa, mi ankoraŭ faros la sekvajn, 255 00:15:33,430 --> 00:15:36,010 Mi fiksis dankis vera kiam la tempo venos, 256 00:15:36,010 --> 00:15:40,880 sed nun vi povas vere nur traduki tiun kodon parole maldekstre dekstren, 257 00:15:40,880 --> 00:15:45,630 dum (! dankema); ĉar bang aŭ ekkrion punkto signifas la nocio de ne, 258 00:15:45,630 --> 00:15:47,580 tiel dum ne dankemaj. 259 00:15:47,580 --> 00:15:49,900 Do denove, ni ne enkondukis novajn konceptojn per si mem. 260 00:15:49,900 --> 00:15:53,730 Ni parolis pri Booleans reen kiam ni ludis kun Scratch, 261 00:15:53,730 --> 00:15:56,720 sed rimarkas nun ni povas simple komenci skribi nian kodo en diversaj manieroj. 262 00:15:56,720 --> 00:16:01,060 Do precipe en pset1 se vi estas ia luktas por kalkuli la vojon por skribi iun programon, 263 00:16:01,060 --> 00:16:04,340 malakordo vi estas en sorto ĉar tie povas esti ia nombro de solvaĵoj 264 00:16:04,340 --> 00:16:06,110 ke vi povas okazi sur. 265 00:16:06,110 --> 00:16:10,500 Ekzemple, ĉi tiu estas nur 3 por eĉ la plej simpla de programoj. Bone. 266 00:16:10,500 --> 00:16:14,200 Kaj nun memori lundon ni lasis en tiu ĉi noto kun reveno valoroj. 267 00:16:14,200 --> 00:16:18,450 Do por la unua fojo ni skribis programon kiu ne simple devas ĉefa; 268 00:16:18,450 --> 00:16:22,550 ĝi ankaŭ havas sian propran funkcion kiu mi skribis ĉi tie. 269 00:16:22,550 --> 00:16:26,810 Do en linio 31 tra 34 Mi implementado kubo funkcio. 270 00:16:26,810 --> 00:16:30,240 Ne kompleksa. Estas nur * al * a en ĉi tiu kazo. 271 00:16:30,240 --> 00:16:34,750 Sed kio estas grava pri tio estas ke mi ferios enigo en la formo de 272 00:16:34,750 --> 00:16:39,180 kaj mi reveni eligo en la formo de * al * a. 273 00:16:39,180 --> 00:16:43,560 Do nun mi havas la kapablon, multe kiel mi kutimis kun prinf sola, 274 00:16:43,560 --> 00:16:47,240 nomi ĉi funkcio per nomante la kubo funkcio. 275 00:16:47,240 --> 00:16:51,970 >> Kaj la kubo funkcio prenas iujn enigo, kaj la kubo funkcio redonas iuj eligo. 276 00:16:51,970 --> 00:16:56,960 Kontraste, printf ĵus faris ion. 277 00:16:56,960 --> 00:17:00,840 Ĝi ne revenis ion ke ni zorgis pri, kvankam kiel flanken ĝi resendas valoro; 278 00:17:00,840 --> 00:17:03,110 vi simple ĝenerale ignoras ĝin. 279 00:17:03,110 --> 00:17:06,510 Printf ĵus faris ion. Ĝi havis kromefikon videbligi al la ekrano. 280 00:17:06,510 --> 00:17:11,770 Kontraŭe tie, ni havas la kubo funkcio, kiu vere redonas ion. 281 00:17:11,770 --> 00:17:15,520 Do por tiuj, kiuj konas tiun, estas sufiĉe simpla ideo. 282 00:17:15,520 --> 00:17:19,640 Sed por tiuj malpli familiara kun tiu ideo de pasi en eniroj kaj contrarestar eligoj, 283 00:17:19,640 --> 00:17:21,950 ni provu simple io super simpla. 284 00:17:21,950 --> 00:17:25,490 Estas iu komforta leviĝas sur la scenejo mallonge? 285 00:17:25,490 --> 00:17:28,040 Vi devas esti komforta kun ĉambro sur vi tiel. Yeah? Okay. 286 00:17:28,040 --> 00:17:31,240 Kio estas via nomo? >> [Studento] Ken. >> Ken. Bone. Ken, venu supren. 287 00:17:31,240 --> 00:17:35,050 Ken tuj esti funkcio de varoj tie. 288 00:17:35,050 --> 00:17:38,720 Ni faru tion. Ni lasu iom kaprico. 289 00:17:38,720 --> 00:17:42,260 Nice to meet you. Bonvenon centro scenejo. Bone. 290 00:17:42,260 --> 00:17:46,640 Ni batis tiun butonon tie. Bone. 291 00:17:46,640 --> 00:17:49,820 Do jen vi havas modernan chalkboard, 292 00:17:49,820 --> 00:17:53,470 kaj kion mi estas la ĉefa funkcio, ekzemple, 293 00:17:53,470 --> 00:17:56,460 kaj mi ne havas iPad en mia mano. 294 00:17:56,460 --> 00:17:59,710 >> Mi ne vere memoras kiel - Nu, mi ne povas diri tion. 295 00:17:59,710 --> 00:18:02,480 Mi ne vere havas bonajn manskribo, 296 00:18:02,480 --> 00:18:05,520 kaj tiel do mi volas ke vi presi iun sur la ekrano por mi. 297 00:18:05,520 --> 00:18:12,040 Mi estante la ĉefa programo, kaj mi iros al vi tion diras 298 00:18:12,040 --> 00:18:16,720 skribante en mia kokido nulo kaj poste pasi vi enigo. 299 00:18:16,720 --> 00:18:20,400 Do stulta kvankam tiu ekzerco estas, la nocio de funkcioj kaj nomante funkcio 300 00:18:20,400 --> 00:18:22,400 kaj revenante funkcio vere bolas al tiu. 301 00:18:22,400 --> 00:18:26,260 Mi estas ĉefa, mi ĵus skribitaj printf, citaĵo-unquote iun sur la ekrano, 302 00:18:26,260 --> 00:18:29,110 Mi kuras koncerna programo, kaj tuj kiam printf gets vokis, 303 00:18:29,110 --> 00:18:32,880 ĝi prenas unu argumento aŭ unu parametro kelkfoje inter duoblaj citiloj. 304 00:18:32,880 --> 00:18:35,880 Jen estas tiu argumento. Mi pasante ĝin al Ken. 305 00:18:35,880 --> 00:18:39,020 Li estas nigra skatolo skribita iu nombro da jaroj 306 00:18:39,020 --> 00:18:41,510 kiu ŝajne nur scipovas presi aĵoj en la ekrano. 307 00:18:41,510 --> 00:18:43,150 Do ekzekuti. 308 00:18:49,280 --> 00:18:51,280 Tio ne estas malbona. Tre bona. 309 00:18:51,280 --> 00:18:55,510 Do nun Ken realigas ekzekuti. Ĉu li bezonas transdoni al mi ion reen? 310 00:18:55,510 --> 00:18:57,470 Ne ke ni vidis ĝis nun. 311 00:18:57,470 --> 00:19:00,460 Denove, printf ne vere redonas nombron, sed ni tuj ignori ke por nun 312 00:19:00,460 --> 00:19:03,470 ĉar ni neniam uzis. Do jen ĝi por Ken. 313 00:19:03,470 --> 00:19:08,580 Kaj tial nun ĉefa transprenas la kontrolon de la programo denove 314 00:19:08,580 --> 00:19:11,060 ĉar tiu linio de kodo, printf, estas farita ekzekuti. 315 00:19:11,060 --> 00:19:14,050 Kaj ni iru sur la vojon, ekzekutante ajn aliaj linioj estas tie. 316 00:19:14,050 --> 00:19:17,320 Do nun ni provas iomete malsaman ekzemplon. 317 00:19:17,320 --> 00:19:24,940 Ĉi-foje tie ni unue liberigi la ekrano, kaj ĉi-foje ni faros la cubing funkcio, 318 00:19:24,940 --> 00:19:27,080 sed ĉi tiu tempo, mi atendas eliro valoro. 319 00:19:27,080 --> 00:19:29,180 >> Do ni faru ĉi. 320 00:19:29,180 --> 00:19:35,790 Nun mi havas linion de kodo kiu diras x prenas kubo de x. 321 00:19:41,370 --> 00:19:46,370 La linio de kodo, revokon, aspektas jene: x = kubo (x); 322 00:19:46,370 --> 00:19:50,930 Do kiel estas ĉi irante labori? Ni iru antaŭen kaj doni al vi blankan ekranon denove. 323 00:19:50,930 --> 00:19:54,070 Mi iras al noti nun la valoro de x, 324 00:19:54,070 --> 00:20:01,400 kiu en ĉi tiu momento en tempo hazarde estas, ni diru, 2 teni ĝin simpla. 325 00:20:01,400 --> 00:20:06,150 Mi skribis sur peco da papero la valoro de 2, kiu estas mia valoro x. 326 00:20:06,150 --> 00:20:10,920 Mi transdonos ĝin al Ken. >> Kaj mi nur skribi la respondon? >> Jes, ni nur skribos la respondon. 327 00:20:12,760 --> 00:20:18,940 Okay. Kaj nun li devas reveni al mi ion. Perfekta. Nice segue. 328 00:20:18,940 --> 00:20:23,120 Do nun li manoj min redoni la valoron de 8 en ĉi tiu kazo, kaj kion mi faras per ĝi? 329 00:20:23,120 --> 00:20:28,250 Fakte - ni vidu, get this right. Kion mi faros per gxi? 330 00:20:28,250 --> 00:20:33,440 Nun mi iros por preni tiun valoron kaj reale stoki ĝin en tiuj samaj bitoj en memoro. 331 00:20:33,440 --> 00:20:35,170 Sed rimarki min speco de luktas ĉi tie. 332 00:20:35,170 --> 00:20:38,210 Mi estas iom konfuzita pro kie mi fakte skribas la valoron de x, 333 00:20:38,210 --> 00:20:43,150 ĉar kion mi ĵus faris estas fizike mano Ken pecon da papero, ke ili havis la valoron 2, 334 00:20:43,150 --> 00:20:46,590 kiu estis x, kaj ja, jen precize kio okazis. 335 00:20:46,590 --> 00:20:50,210 Do rezultas ke kiam vi nomas la funkcio kaj sekvinberoj en argumento 336 00:20:50,210 --> 00:20:53,290 kiel saluton, mondo aŭ sekvinberoj en argumenton kiel 2, 337 00:20:53,290 --> 00:20:57,110 ĝenerale, vi pasante en kopio de tiu argumento. 338 00:20:57,110 --> 00:21:00,730 Kaj tiel same kiel mi notis la numeron 2 tie kaj transdonis ĝin al Ken, 339 00:21:00,730 --> 00:21:04,720 kiu devas signifi, ke mi ankoraŭ havas kopion de la valoro 2 ie 340 00:21:04,720 --> 00:21:08,890 ĉar ja, nun ke mi alvenas reen la valoro 8, mi devas iri reen en RAM 341 00:21:08,890 --> 00:21:12,130 kaj fakte noti 8 kie mi iam havis la numero 2. 342 00:21:12,130 --> 00:21:16,950 Do vide, memoru ĉi nocio de pasi en, laŭvorte, kopio de la valoro. 343 00:21:16,950 --> 00:21:20,780 >> Ken faras lian aferon, manoj min io - en tiu kazo valoron kiel la 8 - 344 00:21:20,780 --> 00:21:24,980 kaj poste mi devas fari ion kun tiu valoro, se mi volas teni ĝin ĉirkaŭe. 345 00:21:24,980 --> 00:21:29,650 Do ĉio ĉi revenos esti tro familiara antaux longe. 346 00:21:29,650 --> 00:21:34,920 Dankon tiom por ĉi tiu demo tie, Ken. [Aplaŭdo] 347 00:21:34,920 --> 00:21:36,920 Tre bone farita. 348 00:21:36,920 --> 00:21:42,690 Ni vidu kiel tiu fine rilatas al kelkaj el la funkcio vokas ke ni estis ĉi tie. 349 00:21:42,690 --> 00:21:47,910 Lasu min kaj alporti nin al la cubing ekzemple ĉi tie. 350 00:21:47,910 --> 00:21:53,300 Rimarku ke se ni volas vere komenci porti ĉi tiun for, 351 00:21:53,300 --> 00:21:57,570 ni iras al esti memoru la fakto ke la nombro x ke tio esti pasis ĉi tien 352 00:21:57,570 --> 00:22:01,530 estas malsama de tio, kio efektive aprobotaj en la funkcio. 353 00:22:01,530 --> 00:22:05,880 Do denove, ĉi preterirantan kopion tuj fariĝis sufiĉe germane en nur momento. 354 00:22:05,880 --> 00:22:09,580 Ni rigardu aĵo kiu ne sufiĉe laboras dekstra ankoraŭ. 355 00:22:09,580 --> 00:22:13,250 Mi tuj iros antaŭen kaj malfermi tria kalesxo ekzemplo, kiu estas misa por naturo, 356 00:22:13,250 --> 00:22:18,550 kaj ĝi estas nomata buggy3 kaj implementa interŝanĝi funkcio. 357 00:22:18,550 --> 00:22:25,110 Ĉi tie ni havas ĉefan funkcion kiu x kaj y arbitre inicializado al 1 kaj 2 respektive. 358 00:22:25,110 --> 00:22:27,700 Ni povus uzi GetInt, sed ni nur bezonas simplan ekzercon, 359 00:22:27,700 --> 00:22:30,170 tial estas malfacile-kodita kiel 1 kaj 2. 360 00:22:30,170 --> 00:22:35,340 En linioj 21 kaj 22, oni ŝajne presi x kaj y, 1 por linio. 361 00:22:35,340 --> 00:22:39,720 Tiam sur linio 23, mi asertas mi interŝanĝi tiujn valorojn, pentras, pentras, punkto. 362 00:22:39,720 --> 00:22:44,170 Mi ŝajne nomas funkcio en linio 24 nomita interŝanĝa kiu prenas 2 argumentojn. 363 00:22:44,170 --> 00:22:48,300 Ĝi estas tute legit por funkcioj preni 2 argumentojn. Ni vidis printf fari ĝin jam. 364 00:22:48,300 --> 00:22:51,830 >> Do interŝanĝa ŝajne prenas x kaj y, kaj kiel ĝia nomo sugestas, 365 00:22:51,830 --> 00:22:54,670 Mi esperas ke ĝi tuj interŝanĝi tiuj 2 valorojn. 366 00:22:54,670 --> 00:23:00,090 Tial mi diras on line 25 "interŝanĝis!" kaj mi represi x kaj y 367 00:23:00,090 --> 00:23:03,070 sub la supozo, ke ili jam vere estis svopitaj. 368 00:23:03,070 --> 00:23:06,080 Sed se mi vere kuras ĉi programo - lasu min malfermi fina fenestro, 369 00:23:06,080 --> 00:23:09,860 lasu min fari buggy3 - kiel la nomo sugestas, ĉi tio ne tuj finos bone 370 00:23:09,860 --> 00:23:15,770 ĉar kiam mi batis Enter, rimarki ke x estas 1, y estas 2, 371 00:23:15,770 --> 00:23:19,420 kaj tamen en la fino de la programo, ili estas ankoraŭ, fakte, la sama. 372 00:23:19,420 --> 00:23:22,960 Do surbaze de la manifestacio gxuste nun kun Ken, kio efektive okazas? 373 00:23:22,960 --> 00:23:28,710 Ni pikita en tiun interŝanĝa funkcio. Estas super mallonga. Estas nur malmultaj linioj de kodo longa. 374 00:23:28,710 --> 00:23:34,520 Sed kio estas la fundamenta problemo bazita sur la simpla historio rakontita ĝis ĉi tie kun Ken? 375 00:23:34,520 --> 00:23:36,670 Kial interŝanĝa rompita? 376 00:23:36,670 --> 00:23:39,660 [Studento] Vi provizon al kopio, ne la variablo. 377 00:23:39,660 --> 00:23:43,980 Ekzakte. Ni provizon al kopio, ne la variablo mem. 378 00:23:43,980 --> 00:23:47,170 En aliaj vortoj, interŝanĝa ŝajne prenas 2 argumentojn, oni int, 379 00:23:47,170 --> 00:23:49,370 kaj ĝi estas arbitre nomas a kaj b, 380 00:23:49,370 --> 00:23:54,420 kaj ĝis tie mi pasis en x kaj y, kiuj estas respektive 1 kaj 2, 381 00:23:54,420 --> 00:23:58,770 sed mi ne laŭvorte pasante en x, mi ne laŭvorte pasante en y, 382 00:23:58,770 --> 00:24:01,450 Mi pasante kopion de x kaj kopion de y. 383 00:24:01,450 --> 00:24:04,510 Ĝi estas preskaŭ kvazaŭ vi kopiis kaj pasted en interŝanĝa 384 00:24:04,510 --> 00:24:07,810 la valoroj kiujn vi volas ke ĝi reale manipuli. 385 00:24:07,810 --> 00:24:14,480 Do se tiu estas la kazo, kiam mi la programon komenco ekzekuti linion 35 tiam 36, 386 00:24:14,480 --> 00:24:18,650 kiam mi reiros al la linio 37, je ĉi tiu punkto en la historio, kio estas la valoro de? 387 00:24:21,040 --> 00:24:25,050 Je ĉi tiu punkto en la historio, linio 37, kio estas la valoro de ĉe ĉi tiu punkto? >> [Studento] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] Ĝi devus nur esti 1, rajto, ĉar x estis aprobita en la unua argumento, 389 00:24:29,280 --> 00:24:33,080 kaj ĉi tiu funkcio nur arbitre alvokas lia unua argumento al. 390 00:24:33,080 --> 00:24:38,200 Simile estas Y la dua argumento, kaj ĝi estas nur arbitre nomi la dua argumento b. 391 00:24:38,200 --> 00:24:40,990 >> Ĉi dicotomía fakte sufiĉe simple klarigita. Pensu pri tio. 392 00:24:40,990 --> 00:24:43,320 Neniu el ni renkontis la persono kiu skribis printf, 393 00:24:43,320 --> 00:24:50,770 tiel certe, li aŭ ŝi havas neniun ideon pri kio nia variabloj 30 jaroj poste tuj nomos. 394 00:24:50,770 --> 00:24:56,650 Do devas esti distingo inter tio, kion vi nomas variabloj en funkcioj vi skribi 395 00:24:56,650 --> 00:25:02,080 kaj kion vi nomas variabloj en funkcioj vi vokas aŭ uzante. 396 00:25:02,080 --> 00:25:05,340 Do alivorte, mi skribis mian variabloj kiel x kaj y, 397 00:25:05,340 --> 00:25:08,890 sed se iu alia estis skribinta la interŝanĝa funkcio, li aŭ ŝi certe ne scias 398 00:25:08,890 --> 00:25:10,690 kion mia variabloj tuj nomos, 399 00:25:10,690 --> 00:25:13,830 tiel rimarkas ke ĉi tiu estas kial vi havas ĉi duvarianteco de nomoj. 400 00:25:13,830 --> 00:25:16,750 Teknike, mi povus fari tion per hazardo, 401 00:25:16,750 --> 00:25:20,080 sed ili ankoraŭ pasis en kiel kopioj. 402 00:25:20,080 --> 00:25:23,650 Estus nur esti pura koincido estetike se tiu persono kiu skribis interŝanĝa 403 00:25:23,650 --> 00:25:26,150 estis uzintaj la samajn nomojn. 404 00:25:26,150 --> 00:25:32,370 Do je ĉi tiu punkto en la historio, linio 37, a estas 1, b estas 2, kaj nun mi procedi por interŝanĝi ilin. 405 00:25:32,370 --> 00:25:34,900 Unue, mi vere fari tion multe pli simple. 406 00:25:34,900 --> 00:25:36,690 Mi ne scias, kion tiuj 3 linioj de kodo estis farante. 407 00:25:36,690 --> 00:25:41,210 Lasu min nur tion: b = a; a = b; farita. 408 00:25:41,210 --> 00:25:44,690 Kial estas ĉi rompita, logike? 409 00:25:46,490 --> 00:25:48,900 Estas speco de la intuicia afero, ĉu ne? 410 00:25:48,900 --> 00:25:52,560 Do oni igas b kaj b igas, 411 00:25:52,560 --> 00:25:57,730 sed la problemo estas ke tuj kiam linio 37 ekzekutas, kio estas la valoro de a kaj b? 412 00:25:57,730 --> 00:26:03,410 La sama, 1, ĉar vi clobbered, por tiel diri, vi jam ŝanĝis b egali al. 413 00:26:03,410 --> 00:26:08,890 Do iam linio 37 estis ekzekutitaj, jen granda, vi nun havas 2 kopiojn de la nombro 1 414 00:26:08,890 --> 00:26:13,350 ene de ĉi tiu funkcio, do tiam, kiam vi diras en linio 38 a = b, 415 00:26:13,350 --> 00:26:17,640 vi ia ŝraŭbita ĉar vi ĵus atribui 1 al 1. 416 00:26:17,640 --> 00:26:20,580 Vi ia perdis la valoron vi zorgis pri. 417 00:26:20,580 --> 00:26:23,220 Do, en la originala versio de ĉi tiu, rimarkos, kion mi faris. 418 00:26:23,220 --> 00:26:26,850 Mi anstataŭ havis trian linion de kodo kiu aspektis kiel ĉi tio. 419 00:26:26,850 --> 00:26:28,580 Mi deklaras portempa variablo. 420 00:26:28,580 --> 00:26:32,170 >> Tmp estas tre komuna nomo por portempa variablo, kaj temas pri int 421 00:26:32,170 --> 00:26:34,580 ĉar ĝi havas por kongrui kion mi volas fari kopion de. 422 00:26:34,580 --> 00:26:39,770 Mi stoki kopion de interne tmp, do unufoje linio 37 estis ekzekutitaj, 423 00:26:39,770 --> 00:26:45,860 la valoro de a estas - rapida prudento ĉeko - 1, la valoro de b estas 2, 424 00:26:45,860 --> 00:26:48,970 kaj la valoro de tmp estas ankaŭ 1. 425 00:26:48,970 --> 00:26:52,060 Do nun mi ekzekuti linion 38. 426 00:26:52,060 --> 00:27:00,540 Iam linio 38 ekzekutas, oni prenas la valoro de b. Kaj b estis 2, do a estas nun 2. 427 00:27:00,540 --> 00:27:05,210 Do je ĉi tiu punkto en la rakonto, estas 2, b estas 2, kaj tmp estas 1, 428 00:27:05,210 --> 00:27:11,060 tial nun logike, oni povas simple plop tmp valoro al b kaj ni faris. 429 00:27:11,060 --> 00:27:12,800 Do ni solvis tiun problemon. 430 00:27:12,800 --> 00:27:17,720 Bedaŭrinde, kiam mi kuros ĉi programo en ĉi tiu formo, ĝi ne vere interŝanĝi ajna valoroj. 431 00:27:17,720 --> 00:27:20,100 Sed esti klaraj, kial? 432 00:27:23,660 --> 00:27:26,450 Mi riparis la logika problemo de nur antaŭ momento, 433 00:27:26,450 --> 00:27:31,020 sed denove, se mi kuros ĉi programo, x kaj y restas neŝanĝita 434 00:27:31,020 --> 00:27:33,310 la fino de la programo ekzekuto. 435 00:27:33,310 --> 00:27:37,220 [Inaudible studento komenton] >> Ni ne revenis ion, do tio estas vera. 436 00:27:37,220 --> 00:27:39,670 Sed ĝi rezultas ekzistas iom da problemo ĉi tie, ĉar ĝis nun, 437 00:27:39,670 --> 00:27:44,170 la sola afero ni povas reveni estas unu afero, kaj ĉi tiu estas limigo de C. 438 00:27:44,170 --> 00:27:49,070 Vi povas nur reveni vere unu valoro, en kies kazo mi estas ia kaptita ĉi tie 439 00:27:49,070 --> 00:27:53,310 ĉar mi povis reveni al la nova valoro de x aŭ mi povus reveni al la nova valoro de y, 440 00:27:53,310 --> 00:27:55,190 sed mi volas ambaŭ dorso. 441 00:27:55,190 --> 00:27:58,650 Do reveni ne la simpla solvo ĉi tie. 442 00:27:58,650 --> 00:28:01,710 Sed la problemo estas fundamente kial? Kion ni vere interŝanĝis? 443 00:28:01,710 --> 00:28:04,190 [Studento] a kaj b. >> A kaj b. 444 00:28:04,190 --> 00:28:08,230 Sed a kaj b estas kopioj de x kaj y, kio signifas ke ni ĵus faris ĉion ĉi verko, 445 00:28:08,230 --> 00:28:11,650 ni ĵus pasis 3 minutoj parolas la interŝanĝa funkcio kaj ĉiuj 3 de tiuj variabloj, 446 00:28:11,650 --> 00:28:15,420 kaj tio estas granda, perfekte ĝentila en izolado, 447 00:28:15,420 --> 00:28:20,740 sed a kaj b estas medion nur estas en tiuj linioj tie. 448 00:28:20,740 --> 00:28:24,790 >> Do ĝuste kiel por ciklo, se vi rakontos entjero i interne de la por ciklo, 449 00:28:24,790 --> 00:28:28,760 simile, se vi deklarante a kaj b ene de funkcio, kiun vi jam skribis, 450 00:28:28,760 --> 00:28:33,320 ili estas nur valida interne de tiu funkcio, kiu signifas tiel frue kiel interŝanĝa estas farita ekzekuti 451 00:28:33,320 --> 00:28:38,470 kaj ni iros de linio 24 al linio 25, x kaj y ne estis ŝanĝita tute ne. 452 00:28:38,470 --> 00:28:42,790 Vi nur malŝparis tuta multan tempon interŝanĝi kopiojn de variabloj. 453 00:28:42,790 --> 00:28:47,010 Do rezultas ke la solvo al ĉi estas fakte ne-evidenta. 454 00:28:47,010 --> 00:28:50,670 Ne tute sufiĉa por reveni valoroj ĉar ni povas nur reveni 1 valoro, 455 00:28:50,670 --> 00:28:53,470 kaj mi vere volas interŝanĝi ambaŭ x kaj y samtempe, 456 00:28:53,470 --> 00:28:55,210 do ni tuj devas reveni al ĉi tio. 457 00:28:55,210 --> 00:29:01,020 Sed nuntempe, rimarkas ke la afero funde derivita de la fakto ke a kaj b estas kopioj 458 00:29:01,020 --> 00:29:03,630 kaj ili estas en lia propra medio. 459 00:29:03,630 --> 00:29:05,050 Ni provu solvi ĉi iel. 460 00:29:05,050 --> 00:29:11,250 Lasu min reale rulumu reveni ĉi tien kaj malfermu, diru, kvara varianto de ĉi tio, buggy4. 461 00:29:11,250 --> 00:29:13,370 Kio pri tio? 462 00:29:13,370 --> 00:29:17,810 Ĉi tiu estas simila sed pli simpla problemo por rigardi antaux ni preni ponardopiko ĉe solvi ĝin. 463 00:29:17,810 --> 00:29:24,190 Ĉi tiu programo estas nomita pliigo, kaj ĝi ŝajne inicializa x entjero al 1 en linio 18. 464 00:29:24,190 --> 00:29:28,150 Mi tiam postuli x estas 1, do mi diras "pliigante ..." 465 00:29:28,150 --> 00:29:33,730 Mi tiam nomita pliigo, sed tiam en linioj 22 kaj 23 Mi asertas ĝi estas estinta incremented, 466 00:29:33,730 --> 00:29:40,220 Mi asertas x estas nun kion ajn ĝi estas - 2, supozeble - sed ĉi tiu programo estas kalesxo. 467 00:29:40,220 --> 00:29:42,610 Kio estas la problemo? 468 00:29:43,440 --> 00:29:50,160 Yeah. >> [Inaudible studento respondon] >> Ekzakte. 469 00:29:50,160 --> 00:29:52,490 Do x estas deklarita, evidente, sur linio 18. 470 00:29:52,490 --> 00:29:54,700 Tio estas ene ĉefa La frizita krampoj. 471 00:29:54,700 --> 00:29:58,440 Do la simpla respondo estas, ke dum x ekzistas tie, 472 00:29:58,440 --> 00:30:03,930 ĝi ne ekzistas en linio 32, do ĉi tiu programo fakte eĉ ne kompili. 473 00:30:03,930 --> 00:30:07,940 La tradukilo kiam mi provas kompili tiun kodon tuj krias al mi 474 00:30:07,940 --> 00:30:14,100 pri kelkaj nedeklarita ensalutilo aŭ ion pri tio. Fakte, ni provu. 475 00:30:14,100 --> 00:30:18,470 Ĉi tiu estas fari buggy4. Tie ĝi estas. 476 00:30:18,470 --> 00:30:22,110 Uzo de nedeklarita ensalutilo 'x' en linio 32. 477 00:30:22,110 --> 00:30:25,580 Kaj efektive, ni estu pli eksplicita tie hodiaŭ, por ke ĉi tiu estas utila 478 00:30:25,580 --> 00:30:27,580 en oficejo horoj kaj hejme. 479 00:30:27,580 --> 00:30:29,300 >> Rimarku, ke ĝi estas iom cryptically skribita. 480 00:30:29,300 --> 00:30:37,270 Sed la fakto, ke Clang havas kriis al ni, dirante buggy4.c: 32:5, estas fakte utila. 481 00:30:37,270 --> 00:30:42,050 Ĝi signifas ke la eraro estas ĉe linio 32 en karaktero pozicio 5. 482 00:30:42,050 --> 00:30:46,700 Do 1, 2, 3, 4, 5. Tio estas, fakte, kie la problemo estas. 483 00:30:46,700 --> 00:30:49,790 Kaj ankaŭ, tro, memoru ĉe oficejo horoj kaj hejme, mi estas bonŝanca tie. 484 00:30:49,790 --> 00:30:52,990 Mi havas unu eraro. Ĝi tuj estos relative facile ripari. 485 00:30:52,990 --> 00:30:55,990 Sed se vi ricevas tutan ekranon plenan de blindiga erarmesaĝojn, 486 00:30:55,990 --> 00:31:00,330 denove rimarkas ke la ĉefundan unu povus simple esti sintomática de la plejsupra unu. 487 00:31:00,330 --> 00:31:03,450 Do ĉiam persekuti viajn erarojn de supre malsupren 488 00:31:03,450 --> 00:31:05,820 ĉar ne povus simple esti lekanto ĉeno efekto 489 00:31:05,820 --> 00:31:09,240 kiu sugestante vi havas vojon pli problemoj ol vi vere faras. 490 00:31:09,240 --> 00:31:15,150 Do kiel ni povus ripari tion ĉi se mia celo estas pliigo x? >> [Studento] Faru x tutmonda. 491 00:31:15,150 --> 00:31:17,060 Konsentite, do ni povas fari x tutmonda. 492 00:31:17,060 --> 00:31:20,480 Ni prenu la fulmoklavo, ke Mi avertis pri pli frua, sed heck, ni nur bezonas rapidan solvon, 493 00:31:20,480 --> 00:31:25,730 do ni nur diros int x tien. Tio faras x tutmonda. 494 00:31:25,730 --> 00:31:31,800 Do nun ĉefa havas aliron al ĝi kaj pliigo havas aliron al ĝi, 495 00:31:31,800 --> 00:31:34,110 kaj tiel lasu min antaŭeniri kaj kompili tiun nun. 496 00:31:34,110 --> 00:31:37,630 Faru buggy4, Enter. Ŝajnas kompili nun. 497 00:31:37,630 --> 00:31:41,230 Ni kuras buggy4. Kaj ŝajnas al vere funkcias. 498 00:31:41,230 --> 00:31:45,150 Tiu estas unu el tiuj aĵoj ke tio faru kiel mi diras, ne kiel mi, 499 00:31:45,150 --> 00:31:47,010 kiel mi ĵus faris ĉi tie, ĉar ĝenerale, 500 00:31:47,010 --> 00:31:50,440 niaj programoj tuj akiri multe pli interesa kaj multe pli longa ol tio, 501 00:31:50,440 --> 00:31:56,390 kaj se via solvo al la vivo la problemoj estas nur meti ĉiuj variabloj ĉe la supro de via dosiero, 502 00:31:56,390 --> 00:31:59,690 tre rapide do programoj get horrifically malfacile sukcesas. 503 00:31:59,690 --> 00:32:02,190 Ĝi alvenas pli malfacile pensi novajn variablo nomoj, 504 00:32:02,190 --> 00:32:05,240 alvenas pli malfacile kompreni kion variablo faras kion, 505 00:32:05,240 --> 00:32:08,460 kaj tiel ĝenerale, ĉi tio ne estas bona solvo. 506 00:32:08,460 --> 00:32:10,030 Do ni faru ĉi pli bone. 507 00:32:10,030 --> 00:32:12,160 Ni ne volas uzi malloka variablo tie. 508 00:32:12,160 --> 00:32:16,240 >> Mi volas pliigo x, do mi povis evidente - 509 00:32:16,240 --> 00:32:18,670 ĉe la fino de la tago, jen speco de stulta historio ĉar ni nur faru tion - 510 00:32:18,670 --> 00:32:24,450 sed se mi ne sciis pri tiu operatoro aŭ mi ne rajtas ŝanĝi ĝin en ĉefa mem, 511 00:32:24,450 --> 00:32:30,730 kiom ajn mi povus apliki Ken super tie ĉi tempo ne kubo sed al pliigo? 512 00:32:31,380 --> 00:32:33,190 Kiel mi ŝanĝu tiun aferon ĉi tie? Yeah. 513 00:32:33,190 --> 00:32:38,480 [Studento] Pass en x kaj tiam revenu [inaudible] >> Konsentite, bona. 514 00:32:38,480 --> 00:32:41,900 Do kial mi ne pasas en x kaj tiam anstataŭ redoni ĝin, 515 00:32:41,900 --> 00:32:44,870 kial ne mi simple reveni x + 1. 516 00:32:44,870 --> 00:32:47,710 Paro pli aĵoj devas ŝanĝi ĉi tie. Mi estas sur la ĝusta vojo. 517 00:32:47,710 --> 00:32:49,770 Kion alian mi bezonas Tweak? Iu alia. Yeah. 518 00:32:49,770 --> 00:32:51,740 [Inaudible studento respondon] 519 00:32:51,740 --> 00:32:54,730 Mi bezonas ŝanĝi la reveno tipo de pliigo ĉar ĝi ne neniigas. 520 00:32:54,730 --> 00:32:57,780 Void per nenio estas revenis, sed klare nun estas, 521 00:32:57,780 --> 00:32:59,830 tiel ĉi devas ŝanĝi - >> [studento] int. 522 00:32:59,830 --> 00:33:02,740 int por esti konsekvenca kun kion ajn Mi vere reveni. 523 00:33:02,740 --> 00:33:05,180 Nun io alia estas ankoraŭ kalesxo tie. Yeah. 524 00:33:05,180 --> 00:33:08,400 [Inaudible studento respondon] >> [Malan] Do mi bezonas pliigo x? 525 00:33:08,400 --> 00:33:12,080 [Inaudible studento respondon] >> [Malan] Ah, do mi bezonas por pasi x. 526 00:33:12,080 --> 00:33:16,660 Do mi bezonas fari ĉi tie. >> [Inaudible studento komenton] 527 00:33:16,660 --> 00:33:20,050 [Malan] Do la prototipo, mi devas ŝanĝi ĉi tien. 528 00:33:20,050 --> 00:33:22,930 Do tiu havas igi int, tiu devas esti - 529 00:33:22,930 --> 00:33:25,620 hmm, mi efektive havas cimon cxi tie. Ni fiksas ĉi tiu unua. 530 00:33:25,620 --> 00:33:29,590 Kion tio efektive estus? Oni alvenis al esti int ion. 531 00:33:29,590 --> 00:33:32,700 Ĝi povus esti x, sed sincere, se oni komencas nomi cxiujn el viaj variabloj x, 532 00:33:32,700 --> 00:33:35,390 ĝi tuj akiri malpli kaj malpli klara kiu estas kiu. 533 00:33:35,390 --> 00:33:39,560 >> Do ni nur arbitre elekti alian nom-normo por mia helpanto funkcioj, 534 00:33:39,560 --> 00:33:41,940 la funkcioj mi skribas. Ni nomas ĝin, aŭ ni povus nomi ĝin - 535 00:33:41,940 --> 00:33:45,010 Ni nomas ĝin nombro esti eĉ pli eksplicitaj. 536 00:33:45,010 --> 00:33:47,560 Tial mi devas reveni ajn la nombro estas plus 1, 537 00:33:47,560 --> 00:33:50,740 kaj nun mi devas ŝanĝi 1 alia aĵo ĝis tie kaj unu alia afero ĝis ĉi tie. 538 00:33:50,740 --> 00:33:54,350 Kion mi devas ŝanĝi la linion 21 unuan? >> [Inaudible studento respondon] 539 00:33:54,350 --> 00:33:57,610 [Malan] mi devas atribui ĝin al x. Mi ne povas simple nomi pliigo (x). 540 00:33:57,610 --> 00:34:01,960 Mi bezonas memori la respondon per ŝanĝanta la valoro de x sur la maldekstra flanko. 541 00:34:01,960 --> 00:34:04,680 Kaj eĉ se x estas nun en la maldekstra kaj dekstra, jen tute bone 542 00:34:04,680 --> 00:34:08,860 ĉar la dekstra flanko gets ekzekutita unua tiam gets plopped en la maldekstra afero - 543 00:34:08,860 --> 00:34:10,600 x en ĉi tiu kazo. 544 00:34:10,600 --> 00:34:12,159 Kaj poste laste, ĉi tiu estas facila riparas nun. 545 00:34:12,159 --> 00:34:17,230 Tiu devus ĝuste kongruas kio estas malsupre, int nombro. 546 00:34:17,230 --> 00:34:20,570 Do tuta amaso de ŝanĝoj por vere stulta funkcio 547 00:34:20,570 --> 00:34:24,420 sed reprezentanto de aĵoj kiujn ni pli kaj pli volas fari. 548 00:34:24,420 --> 00:34:27,090 Do fari buggy4. Mi ŝraŭbita supren ie. 549 00:34:27,090 --> 00:34:30,139 Ho, mia Dio. Kvin erarojn en 6-linio programo. 550 00:34:30,139 --> 00:34:35,690 Do kio estas malĝusta en linio 18, karaktero 5? 551 00:34:35,690 --> 00:34:39,610 Do mi devas deklari tion, int. 552 00:34:39,610 --> 00:34:41,920 Ni vidu. Ekzistas tuta aro da aliaj eraroj. 553 00:34:41,920 --> 00:34:47,010 Ho, mia Dio - 19, 18, 21 - sed denove, ni nur liberigi la ekrano, Kontrolo L tie, 554 00:34:47,010 --> 00:34:49,380 kaj rerun Clang. 555 00:34:49,380 --> 00:34:51,340 Do 5 problemoj estas fakte nur ke 1. 556 00:34:51,340 --> 00:34:57,520 Do nun ni kuras buggy4, Enter. Whew, x estas incremented ĝuste. 557 00:34:57,520 --> 00:35:02,720 Bone. Demandojn pri kiel pliigo nombroj? Yeah. 558 00:35:02,720 --> 00:35:09,870 [Inaudible studento demando] >> Bona demando. 559 00:35:09,870 --> 00:35:14,220 Kial mi povas simple ŝanĝi x al nombro kaj la programo scios tuj? 560 00:35:14,220 --> 00:35:16,200 >> Denove, pensi pri tio kiel ĉi abstraktado. 561 00:35:16,200 --> 00:35:21,600 Do, se mi estas ĉefa kaj Ken estas pliigo, sincere, mi ne zorgas kion Ken nomas lia iPad. 562 00:35:21,600 --> 00:35:26,570 Mi ne zorgas kion li nomas ion, kio devas vidi per sia efektivigo de ĉi funkciojn. 563 00:35:26,570 --> 00:35:33,340 Ĉi tiu estas efektivigo detalo kiun mi, ĉefa, ne devas maltrankviligi. 564 00:35:33,340 --> 00:35:38,250 Kaj tiel simple ŝanĝi ĝin konsekvence ene de la funkcio - kvanto ĉi tie kaj nombro tie - 565 00:35:38,250 --> 00:35:40,960 estas ĉiuj prenas tiom longe kiom mi recompilar. 566 00:35:40,960 --> 00:35:44,180 Estas iel kiel se vi pensas pri multaj el ni, tiuj de vi kun ŝoforo permesiloj 567 00:35:44,180 --> 00:35:46,770 kiuj forpelis aŭ se vi eĉ pelita en aŭto, 568 00:35:46,770 --> 00:35:50,950 la plimulto de ni ne havas ideon kiom aŭto laboras sub la kapuĉo. 569 00:35:50,950 --> 00:35:54,970 Kaj laŭvorte, se vi malfermas la kapuĉo, la plimulto de ni - mi mem komprenis - 570 00:35:54,970 --> 00:35:56,940 ne tuj vere scias kion ni rigardis, 571 00:35:56,940 --> 00:35:59,220 ia kiel vi eble sentas kun stuff kiel tiu nun. 572 00:35:59,220 --> 00:36:01,480 Sed ni ne devas vere gravas kiom la aŭto funkcias, 573 00:36:01,480 --> 00:36:05,970 ni ne devas prizorgi kion ĉiuj la bastonojn kaj piŝtoj kaj kabloj ene de la aŭto 574 00:36:05,970 --> 00:36:08,160 fakte faras. 575 00:36:08,160 --> 00:36:12,770 Do iu kiel vi nomas la piŝto ne gravas ĉi tie en ĉi tiu kazo. Sama ideo. 576 00:36:12,770 --> 00:36:25,300 Yeah. >> [Inaudible studento demando] 577 00:36:25,300 --> 00:36:29,180 Se estas pli uzoj de la variablo XA antaŭ momento, 578 00:36:29,180 --> 00:36:32,150 vi, la programisto, devus ŝanĝi ilin ĉie. 579 00:36:32,150 --> 00:36:36,600 Aŭ vi povus laŭvorte do Dosieraj, Menuo, kaj tiam Trovu, Replace - io simila - 580 00:36:36,600 --> 00:36:39,170 sed vi tuj devas fari tiujn ŝanĝojn mem. 581 00:36:39,170 --> 00:36:47,450 Vi devas esti konsekvenca. >> [Studento] Se estas multaj variabloj [inaudible] 582 00:36:47,450 --> 00:36:53,100 Aparta ordon kiel ĉi tie, se tio estis int alia numero? >> [Studento] Correct. 583 00:36:53,100 --> 00:36:56,590 [Malan] Yeah. Ordo gravas kiam vi vokas la funkcio. 584 00:36:56,590 --> 00:37:00,050 >> Do se mi nomis pliigo tie kun iu komo ion, 585 00:37:00,050 --> 00:37:01,680 ekzistas rekta surĵeto. 586 00:37:01,680 --> 00:37:05,690 La unua variablo, kia ajn ĝi estas nomata, estas farita kopio de la unua argumento super tie. 587 00:37:05,690 --> 00:37:07,760 Pardonu. Tiu ne devus esti parentezo. 588 00:37:07,760 --> 00:37:11,490 La dua argumento regiono kun la dua. Do ordo, jes, aferoj. Bone. 589 00:37:11,490 --> 00:37:17,020 Pardonu. Mi prenis la longan vojon por atingi tien. Aliaj demandoj? Bone. 590 00:37:17,020 --> 00:37:20,610 Do ni vidu, se ni ne povas pentri bildon de kio vere okazas tie 591 00:37:20,610 --> 00:37:23,090 sub la kapuĉo, por tiel diri. 592 00:37:23,090 --> 00:37:26,640 Tio ĉi estas ortangulo, kiuj povus reprezenti via komputilo la memoro. 593 00:37:26,640 --> 00:37:30,970 Eĉ se vi ne havas ideon kiom memoro funkcias aŭ kiel RAM verkoj, 594 00:37:30,970 --> 00:37:33,940 almenaŭ supozas, ke vi havas aroj da ĝi ĉi tiuj tagoj. 595 00:37:33,940 --> 00:37:36,280 Vi havas megabajtoj ĝi, kiam vi mem havigis gigabajtoj de ĝi, 596 00:37:36,280 --> 00:37:40,870 kaj ni scias el semajno 0 kiu bajto estas precize kion? >> [Studento] 8 bitoj. 597 00:37:40,870 --> 00:37:42,950 8 bitoj, ĉu ne? Do 8 nuloj kaj 1. 598 00:37:42,950 --> 00:37:45,880 Do se via komputilo havas koncerton de RAM, 2 koncertoj de RAM tiuj tagoj, 599 00:37:45,880 --> 00:37:55,030 vi havas miliardoj aŭ 2 miliardoj bajtoj de memoro aŭ proksimume 8 milionoj aŭ 16 miliardoj bitoj 600 00:37:55,030 --> 00:37:56,890 ene de via komputilo. 601 00:37:56,890 --> 00:38:00,590 Kontraste kun la iom Wooly Willy Ekzemple, ne estas magneta eroj tipe plu. 602 00:38:00,590 --> 00:38:04,450 Ĉiufoje - en tekkomputiloj almenaŭ - estas solida stato diskoj, SSDs, 603 00:38:04,450 --> 00:38:08,580 ke nur oni ne movas partoj. Estas ĉio elektronika. Estas ĉio elektro-bazita. 604 00:38:08,580 --> 00:38:14,060 Do pensu pri ĉi rektangulo kiel ĝuste reprezentas la 1 aŭ 2 gigabajtoj de memoro kiun vi havas. 605 00:38:14,060 --> 00:38:16,020 >> Do ĝi eron de memoro. 606 00:38:16,020 --> 00:38:19,830 La mondo de komputilaj scienco ia dispartigita ekstere 607 00:38:19,830 --> 00:38:22,950 pecoj de memoro fari malsamajn aferojn. 608 00:38:22,950 --> 00:38:27,190 Ekzemple, se cxi tiu estas via komputilo RAM, kiel sugestita de la rektangulo tie, 609 00:38:27,190 --> 00:38:31,130 ĝi rezultas ke per konvencio, sur la supro de via memoro RAM, por tiel diri, 610 00:38:31,130 --> 00:38:33,660 Estas ĝenerale kion nomas tekston segmento. 611 00:38:33,660 --> 00:38:36,740 Tiuj estas la _0s_ kaj _1s_ ke vi kompilis. 612 00:38:36,740 --> 00:38:39,020 Do kiam ni rigardis sub la kapuĉo je kioma a.out estas, 613 00:38:39,020 --> 00:38:41,980 cxiuj tiuj _0s_ kaj _1s_, kiam vi kuris de programo, 614 00:38:41,980 --> 00:38:46,290 tiuj _0s_ kaj _1s_ ŝarĝas el via malmola disko en ion nomita RAM, 615 00:38:46,290 --> 00:38:49,320 kaj en la RAM ili estas metitaj en la pinto. 616 00:38:49,320 --> 00:38:52,770 Dume, vi havas aliajn aferojn: pravalorizi datumoj, uninitialize datumoj. 617 00:38:52,770 --> 00:38:57,510 Tiuj 2 swaths de memoro referi al tutmonda variabloj, kiuj ne ofte uzas 618 00:38:57,510 --> 00:39:00,760 sed foje se vi faras, ili finas tie ankaŭ. 619 00:39:00,760 --> 00:39:04,260 Tiam ekzistas iu alia materialo: medio variabloj, kiuj ni ne pasigas multe da tempo plu, 620 00:39:04,260 --> 00:39:06,860 sed tiam 2 gravaj aĵoj kiuj revenos tra la semestro, 621 00:39:06,860 --> 00:39:08,550 pilo kaj amaso. 622 00:39:08,550 --> 00:39:12,210 Do plej de via komputilo la memoro estas rezervita al la kuri programon 623 00:39:12,210 --> 00:39:15,370 por iu nomita la pilo kaj iu nomis la amaso. 624 00:39:15,370 --> 00:39:18,840 Ni ne intencas paroli pri la amaso hodiaŭ, sed ni parolos pri la stako. 625 00:39:18,840 --> 00:39:24,600 La pilo celas sorĉvenigi la vida de la manĝejo manĝo pletoj en Mather Domo 626 00:39:24,600 --> 00:39:28,110 aŭ kien ajn vi hazarde estos en la manĝejo bastonon purigi ilin ĉiutage, 627 00:39:28,110 --> 00:39:30,180 ili pilo ilin el planko plu supren, 628 00:39:30,180 --> 00:39:34,550 kaj simile, en memoro, estas ĉi ideon de meti ion sur pilo, 629 00:39:34,550 --> 00:39:36,860 metante ion sur pilo, metante ion sur pilo. 630 00:39:36,860 --> 00:39:38,240 Kaj kion ni celas diri per tio? 631 00:39:38,240 --> 00:39:41,860 >> Ni zoom en sur nur la suba duono de ĉi tiu pentraĵo, via komputilo RAM, 632 00:39:41,860 --> 00:39:44,330 proponi la sekvan. 633 00:39:44,330 --> 00:39:48,170 Rezultas, ke kiam vi kuros programon kiel a.out aŭ saluton - 634 00:39:48,170 --> 00:39:50,100 kion ajn la programo estas ke vi skribis - 635 00:39:50,100 --> 00:39:54,020 denove, tiuj _0s_ kaj _1s_ ŝarĝas el via malmola disko, kiu estas longtempa memoro, 636 00:39:54,020 --> 00:39:57,230 restas tie ĝis kiam vi tiras la kuseneto, ŝarĝita en RAM. 637 00:39:57,230 --> 00:40:00,610 RAM estas pli rapida ol malmolaj diskoj - estas pli malgranda ol malmolaj diskoj - 638 00:40:00,610 --> 00:40:03,300 sed estas kie programoj vivi dum vi kuras ilin. 639 00:40:03,300 --> 00:40:08,230 Do vi duoblan klaku programon sur Mac aŭ PC, ĝi estas ŝarĝita de malmola disko en RAM. 640 00:40:08,230 --> 00:40:11,520 Tuj kiam ĝi estas ŝarĝita en RAM, la _0s_ kaj _1s_ iras ĉe la vojo supro, 641 00:40:11,520 --> 00:40:16,610 la tn teksto segmento, sed tiam tuj kiam via programo fakte komenciĝas kurante, 642 00:40:16,610 --> 00:40:21,360 la ĉefa funkcio estas nomata, kaj ĉefa, kiel ni vidis, ofte havas lokajn variablojn, 643 00:40:21,360 --> 00:40:24,870 kaj ĝi havas ints kaj kordoj kaj signoj kaj similaj. 644 00:40:24,870 --> 00:40:29,180 Do, se via programo, kiun vi skribis aŭ la programo kiu vi duoblan klakis 645 00:40:29,180 --> 00:40:32,970 uzita iuj variabloj ene de ĉefaj, 646 00:40:32,970 --> 00:40:37,240 ili finas je la fundo de via pilo de memoro, por tiel diri. 647 00:40:37,240 --> 00:40:39,410 Pli konkrete, kion signifas ĉi reale signifas? 648 00:40:39,410 --> 00:40:48,450 Tiu simple volas diri ke se ni iris al la numero la bajtoj de RAM en via komputilo, 649 00:40:48,450 --> 00:40:55,750 rimarki, ke eble tio estos bajto nombro 0, ĉi tio povas esti byte numero 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 tuta vojo ĝis 2 miliardoj estus tuta vojo ĝis tie supre. 651 00:41:01,480 --> 00:41:05,880 Do alivorte, kiam ni parolas pri RAM aŭ memoro en terminoj de bajtoj, 652 00:41:05,880 --> 00:41:11,500 ĝi simple signifas, ke iu decidis kion prikalkulu ĉiu de tiuj pecoj de memoro. 653 00:41:11,500 --> 00:41:16,650 Do, kiam vi bezonas 32 bitojn por int aŭ vi bezonas 8 bitoj por char, 654 00:41:16,650 --> 00:41:18,840 kie do ili finas en memoro? 655 00:41:18,840 --> 00:41:22,350 >> Koncepte, oni nur finos je la fundo de tiu afero nomata la stako. 656 00:41:22,350 --> 00:41:25,870 Sed kio estas interesa nun estas kiam ĉefa nomas funkcio - 657 00:41:25,870 --> 00:41:28,750 supozi funkcio nomita foo, ĝuste arbitran nomon - 658 00:41:28,750 --> 00:41:32,330 kio okazas estas ĉefa estas ĉe la malsupro de tiu pilo de memoro; 659 00:41:32,330 --> 00:41:35,680 foo nun estas metita sur ĉefa en memoro. 660 00:41:35,680 --> 00:41:40,990 Do iu loka variabloj kiuj foo jam fini ia koncepte supre tiuj en ĉefa. 661 00:41:40,990 --> 00:41:47,070 Se foo nomas alian funkcion nomita trinkejo, tiuj variabloj fini ĉi tie. 662 00:41:47,070 --> 00:41:50,120 Se trinkejo nomas ion alian, jen, jen, tie ĉi. 663 00:41:50,120 --> 00:41:53,830 Do kio estas interesa pri kurante programo estas ke kiel vi nomas funkcioj 664 00:41:53,830 --> 00:41:57,750 kaj kiel tiuj funkcioj vokas funkciojn kaj kiel tiuj funkcioj vokas funkciojn, 665 00:41:57,750 --> 00:42:01,470 vi konstruos ĉi pilo de funkcioj en memoro. 666 00:42:01,470 --> 00:42:06,890 Kaj nur unu fojon funkcio redonas vi komencu akiri tiu memoro dorso. 667 00:42:06,890 --> 00:42:10,860 Do unu el la plej facilaj manieroj por kuri el memoro en komputila programo 668 00:42:10,860 --> 00:42:14,360 estas skribi funkciojn kiuj neniam revenus. 669 00:42:14,360 --> 00:42:18,900 Do ekzemple, ni pruvi tiel kun intence kalesxo programo. 670 00:42:18,900 --> 00:42:22,230 Lasu min antaŭeniri kaj ne # include , 671 00:42:22,230 --> 00:42:25,000 int main (void), 672 00:42:25,000 --> 00:42:32,940 kaj mi tuj faros dum (2> 1), kio verŝajne ne iam ŝanĝos nin, 673 00:42:32,940 --> 00:42:37,560 kaj lasu min iri antaŭen nun kaj faros printf. 674 00:42:37,560 --> 00:42:40,700 Efektive, tiu tuj estos malpli vide interesa. Ni faras tion. 675 00:42:40,700 --> 00:42:50,240 Por int i = 0; i> 0 - ni faros tiun eraron - mi + +. 676 00:42:50,240 --> 00:42:52,720 Kaj ni ne printf tie. Ni praktiki kion mi predikis. 677 00:42:52,720 --> 00:43:00,190 Ni havas metodon tie, void ĥoro, kaj ni diru int i, 678 00:43:00,190 --> 00:43:06,830 kaj tiam mi iros diri printf - ne, ni faros tiun pli interesa. 679 00:43:06,830 --> 00:43:15,790 Ni fakte ne presi ion ajn. Ni nur faru jene: ĥoro (i). 680 00:43:15,790 --> 00:43:20,390 Bone. Do ĉi tiu estas kalesxo ĉar kial? 681 00:43:20,390 --> 00:43:23,380 Mi faras ĉi tion dum mi iros, ĉar la programo ne vere faras nenion de intereso. 682 00:43:23,380 --> 00:43:25,320 >> Sed tio ne estas la celo. 683 00:43:25,320 --> 00:43:29,630 La celo estas skribi programon kies ĉefa funkcio faras kio, ŝajne? 684 00:43:30,720 --> 00:43:32,860 Voku mem. Kaj efektive, ni ne bezonas la ciklo. 685 00:43:32,860 --> 00:43:37,200 Ni eĉ simpligi ĉi nur por ne perdi antaux vere la fundamenta eraro. 686 00:43:37,200 --> 00:43:39,640 Ĉefa alvokoj ĥoro kanti iujn ĥoro, 687 00:43:39,640 --> 00:43:41,440 tiam mi faris iun stultan kaj mi devis ĥore alvoko ĥoro 688 00:43:41,440 --> 00:43:43,760 ĉar mi supozis ke iu alia tuj apliki ĝin eble, 689 00:43:43,760 --> 00:43:47,210 kaj nun ĉi tio ne tuj kompili ankoraŭ. Mi bezonas fari kion? 690 00:43:47,210 --> 00:43:49,970 Mi bezonas la prototipo, memoru. 691 00:43:49,970 --> 00:43:56,110 Do mi bezonas havi ĝis tie dezerta ĥoro (int i); 692 00:43:56,110 --> 00:43:59,210 Do nun, se mi iros tien - efektive, ni uzos la pli granda fenestro. 693 00:43:59,210 --> 00:44:01,980 Ni iru antaŭen kaj fari ĥoro. 694 00:44:01,980 --> 00:44:06,490 Ni iru antaŭen kaj fari ĥoro. 695 00:44:06,490 --> 00:44:08,370 Uzo de nedeklarita ensalutilo i. 696 00:44:08,370 --> 00:44:12,500 Ho, tio estis stulta. Ni ne bezonas la argumento. Ni nur faru tion. 697 00:44:12,500 --> 00:44:16,370 Mi deziras ke ni komencis ĉi tiun vojon. Estus multe pli facile programo por skribi. 698 00:44:16,370 --> 00:44:25,590 Tie. Nun ni transiros al mia fina fenestro, rerun Clang, kaj tie ni iru. 699 00:44:25,590 --> 00:44:28,460 Tio estis vere rapida. 700 00:44:28,460 --> 00:44:31,150 Kio fakte ĝuste tio okazis, kvankam? 701 00:44:31,150 --> 00:44:33,730 Nu, nun mi aldonos la impreso linio do ni povas vidi. 702 00:44:33,730 --> 00:44:43,490 Lasu min diri printf ("mi estas ĉi tie") - sen variabloj. Ni lasos ĝin tiel. 703 00:44:43,490 --> 00:44:47,480 Lasu min rerun fari. Lasu min rerun ĥoro. 704 00:44:47,480 --> 00:44:57,380 Kaj ... venu. Konservu tuj. 705 00:44:57,380 --> 00:44:59,930 Kiel flanken, kial ĝi ne frakasis yet? 706 00:44:59,930 --> 00:45:02,080 La segmentación kulpo okazis super rapida antaŭe. 707 00:45:02,080 --> 00:45:06,570 [Inaudible studento respondon] >> Ekzakte. Do ĝi prenas tempon por presi, ĉu ne? 708 00:45:06,570 --> 00:45:08,610 Ĝi simple prenas pli da laboro sur la komputilo parto. 709 00:45:08,610 --> 00:45:10,620 Kaj tie estas: Segmentación kulpo. 710 00:45:10,620 --> 00:45:12,340 >> Do rimarki kiom rapida programoj kuri. 711 00:45:12,340 --> 00:45:14,130 Se vi ne presi ion, super rapida. 712 00:45:14,130 --> 00:45:18,770 Sed ni ankoraŭ havas ĉi segmentación kulpo ĉar tio, kio okazas? 713 00:45:18,770 --> 00:45:21,210 Se vi pensas pri kiel via komputilo la memoro estas jalonada, 714 00:45:21,210 --> 00:45:28,740 ĉi tio okazas al esti ĉefa, sed tie ni simple nomas tion ĥoro, kaj ni nomas tiun refrenon. 715 00:45:28,740 --> 00:45:34,550 Kaj nun se mi faras mian estetiko pravas, tio estas nur intencas diri ĥoro, koruso, ĥoro, 716 00:45:34,550 --> 00:45:40,550 koruso, hxoro, koruso, ĥoro, ad nauseum, kaj eventuale, kio okazos? 717 00:45:40,550 --> 00:45:45,630 Se la granda bildo, laŭvorte, estas tio, kio ĵus okazas koncepte? 718 00:45:46,520 --> 00:45:48,630 La pilo overruns la amaso. 719 00:45:48,630 --> 00:45:51,940 Aŭ, pli malbone, vi simple invadita ĉio, inkluzive de la teksto segmento, 720 00:45:51,940 --> 00:45:54,590 kiu estas la _0s_ kaj _1s_ kiuj reprezentas vian programon. 721 00:45:54,590 --> 00:45:57,080 Unuvorte, tiu estas nur super, super malbona. 722 00:45:57,080 --> 00:45:58,830 Via programo spiraled el kontrolon. 723 00:45:58,830 --> 00:46:01,220 Vi uzas vojon pli memoro ol vi intencis 724 00:46:01,220 --> 00:46:03,960 ĉiuj pro stulta eraro en ĉi tiu kazo, 725 00:46:03,960 --> 00:46:08,040 aŭ en tiu kazo tre intence faris funkcio kiu nomas sin. 726 00:46:08,040 --> 00:46:09,500 Nun, ĉi tio ne estas ĉio malbona. 727 00:46:09,500 --> 00:46:13,800 Funkcioj nomante sin reale havas grandan potencon kiam oni uzas ĝin ĝuste. 728 00:46:13,800 --> 00:46:15,800 Mi ne uzis ĝin ĝuste ĉi tie. 729 00:46:15,800 --> 00:46:19,780 Do tiu estas ne ĉiuj malbonaj, sed la fakto, ke mi neniam vere halti nomante min 730 00:46:19,780 --> 00:46:23,520 estas fundamenta malforteco tie de tiu programo. 731 00:46:23,520 --> 00:46:26,400 Do kie ni iras kun ĉio ĉi? Kio vere okazas? 732 00:46:26,400 --> 00:46:30,340 Kiam mi vokas la pliigo funkcio kiel ni faris en tiuj ekzemploj, 733 00:46:30,340 --> 00:46:33,420 Mi havas valoro kiel 1, ke mi pasas in 734 00:46:33,420 --> 00:46:37,570 Mi pasas en kopio de la numero 1, do la sekvan okazas. 735 00:46:37,570 --> 00:46:44,240 Ni iru en la pliigo Ekzemple, ĉi ulo rajton super tie. 736 00:46:44,240 --> 00:46:46,870 Jen kio vere okazas. 737 00:46:46,870 --> 00:46:53,400 Kiam mi vokas pliigo kaj mi pasas en x, pictóricamente, kio okazas ĉi tie estas tio. 738 00:46:53,400 --> 00:46:59,520 >> Se mi havas la valoron de 1 stokitaj tie kaj mi vere nomas pliigo, 739 00:46:59,520 --> 00:47:04,330 kion oni nun nomas ĥoro - la iPad estas ĵeti min for tie. 740 00:47:04,330 --> 00:47:09,760 Ni nomas tion pliigo, kaj ni ne scias kio estas tiu sekva funkcio tuj estos. 741 00:47:09,760 --> 00:47:14,840 Do kio vere okazas estas ĉi tie ie en ĉefa mi havas eron de memoro 742 00:47:14,840 --> 00:47:17,000 kiu stoki la nombro 1. 743 00:47:17,000 --> 00:47:19,380 Kiam mi vokas pliigo, Mi uzas alian eron de memoro, 744 00:47:19,380 --> 00:47:21,230 sed nun mi havas la kopio de 1. 745 00:47:21,230 --> 00:47:26,660 Kiam mi pliigo tiu valoro, ĉi iĝas 2, 746 00:47:26,660 --> 00:47:30,560 sed tiam kio okazas tuj kiam pliigo revenas? 747 00:47:30,560 --> 00:47:33,630 Tiu memoro nur gets enmanigis al la mastruma sistemo, 748 00:47:33,630 --> 00:47:37,450 kion signifas ĉio vi faris estas nenio utila. 749 00:47:37,450 --> 00:47:43,120 La 1 kiu estis origine enhavis en ĉefa estas ankoraŭ efektive tie. 750 00:47:43,120 --> 00:47:44,890 Do kie ni iras kun tio? 751 00:47:44,890 --> 00:47:49,770 Ĝi rezultas ke en memoro vi havas ĉi back-to-back vico da bajtoj 752 00:47:49,770 --> 00:47:53,050 ke vi povas meti aĵojn en, kaj ĝi rezultas ke ni jam vidis ion 753 00:47:53,050 --> 00:47:55,390 kiu implikas metante aĵoj malantaŭo al malantaŭo al malantaŭo al malantaŭo. 754 00:47:55,390 --> 00:47:59,860 Kio estas ĉeno bazita sur semajno 1 kaj nun semajno 2? 755 00:48:00,020 --> 00:48:01,980 Estas nur kolekto de karakteroj. 756 00:48:01,980 --> 00:48:04,310 Do rezultas same kiel vi povas meti numerojn en memoro, 757 00:48:04,310 --> 00:48:06,990 simile oni povas ion karakteroj en memoro. 758 00:48:06,990 --> 00:48:10,530 Kaj unufoje ni komencu meti signojn en memoro malantaŭo al malantaŭo al malantaŭo al malantaŭo, 759 00:48:10,530 --> 00:48:13,620 ĝi rezultas ke uzante la plej simplaj aferoj kiel por buklo aŭ dum ciklo, 760 00:48:13,620 --> 00:48:17,170 ni povas persisti de maldekstre al dekstre super la gravuloj ĉeno 761 00:48:17,170 --> 00:48:20,600 kaj komenci massaging ilin en malsamaj karakteroj tute - 762 00:48:20,600 --> 00:48:23,370 oni povus igi b, b povus igi c - 763 00:48:23,370 --> 00:48:27,780 por ke finfine, ni povas preni anglan frazon, kiu efektive havas sencon 764 00:48:27,780 --> 00:48:30,310 kaj konverti ĉiu de tiuj leteroj oni samtempe 765 00:48:30,310 --> 00:48:34,400 marŝante tra nia komputilo memoro maldekstre dekstren al reale ĉifri. 766 00:48:34,400 --> 00:48:35,810 Do ni prenu nian kvin minutoj ripozon ĉi tie, 767 00:48:35,810 --> 00:48:40,730 kaj kiam ni revenos, ni komencu ĉi tiu procezo de grimpadi informo. 768 00:48:42,020 --> 00:48:43,520 >> Bone. 769 00:48:43,520 --> 00:48:48,070 Antaŭ ol ni plonĝi en iuj kripto kaj tion nomis arrays, 770 00:48:48,070 --> 00:48:51,470 lasu min paŭzo por ajna demandoj ĉar mi sentas min vere ia malklara 771 00:48:51,470 --> 00:48:54,080 kelkaj el tiuj temoj. Do ni ripari nun se ni povas. 772 00:48:54,080 --> 00:48:58,700 Ni nur parolis pri reveno valoroj, ni parolis pri argumentoj, 773 00:48:58,700 --> 00:49:03,250 kaj ni parolis pri tiu nocio, kiun ni revenos al la semajnoj por veni, 774 00:49:03,250 --> 00:49:08,720 de viewing memoro entute amaso de tiuj plata pletoj, por tiel diri, 775 00:49:08,720 --> 00:49:12,660 de malsupre supren, tia ke ĉiu pleto ke gets surmetis la stako 776 00:49:12,660 --> 00:49:16,530 reprezentas funkcion ke tio aktuale estas vokita. 777 00:49:17,900 --> 00:49:20,260 Demandojn? 778 00:49:20,260 --> 00:49:22,640 Lasu min demandi demandon ĉi tie. 779 00:49:22,640 --> 00:49:27,890 Lasu min simpligi ĉi reen al kio estis antaŭ kelkaj niaj antaŭaj Q & A. 780 00:49:27,890 --> 00:49:35,570 La fakto ke pliigo havas malferma parentezo, int nombro, fermis parentezo - 781 00:49:35,570 --> 00:49:39,110 kion signifas int nombro reprezenti? 782 00:49:39,110 --> 00:49:42,790 [Studento] Argumento. >> An argumento. Okay. Sed kio estas argumento? 783 00:49:42,790 --> 00:49:46,370 [Inaudible studento respondon] >> Kio estas tio? >> [Studento] Iu kiu pasas in 784 00:49:46,370 --> 00:49:49,940 Okay, do iu kiu pasas in Kaj pli ĝenerale, estas nur la enigo. 785 00:49:49,940 --> 00:49:52,450 Se vi skribas funkcio kaj ke funkcia celo en la vivo 786 00:49:52,450 --> 00:49:55,770 estas fari iu iom malsama ĉiufoje kiam vi uzas ĝin, 787 00:49:55,770 --> 00:50:00,110 tiam la sola maniero por ke tio okazas vere ŝajnus esti provizi ĝin per enigo 788 00:50:00,110 --> 00:50:03,510 tiel ke ĝi povas fari iun malsama kun tiu enigo ĉiufoje. 789 00:50:03,510 --> 00:50:06,650 >> Do vi bezonas specifi du aferoj kiam funkcio prenas enigo. 790 00:50:06,650 --> 00:50:09,590 Vi devas specifi la nomo kiun vi volas doni al tiu enigo 791 00:50:09,590 --> 00:50:12,700 pure por via propra komforto por ke vi povas referi al ĝi 792 00:50:12,700 --> 00:50:16,540 en la funkcio kiun vi mem skribas, kiel mi faris tie en linio 32. 793 00:50:16,540 --> 00:50:20,800 Sed vi ankaŭ bezonos specifi lia tipo ĉar C estas komputila programlingvo 794 00:50:20,800 --> 00:50:25,940 ke nur postulas ke se vi volas variablo, vi devas diri al la komputilo kio datumtipo estas, 795 00:50:25,940 --> 00:50:30,200 en granda parto por ke ĝi sciu kiom da bitoj destini por tiu variablo 796 00:50:30,200 --> 00:50:33,020 ĉar ĝi povus esti 6 - sorry, ne estos 6. 797 00:50:33,020 --> 00:50:37,080 Ĝi povas esti 16, ĝi povas esti 8, ĝi povas esti 32, eĉ 64, 798 00:50:37,080 --> 00:50:39,130 sed la komputilo bezonas scii. 799 00:50:39,130 --> 00:50:43,180 Nun, la int sur la maldekstra flanko reprezentas kio, per kontrasto? 800 00:50:46,350 --> 00:50:48,850 [Inaudible studento respondon] >> Kio estas tio? >> [Studento] Tipo de funkcio. 801 00:50:48,850 --> 00:50:53,610 La tipo de funkcio kaj, pli specife, la tipo de lia eliro. Ĝuste. 802 00:50:53,610 --> 00:50:57,380 Do dum la aferon en krampoj reprezentas lian enigo, se iu, 803 00:50:57,380 --> 00:50:59,660 la afero al la maldekstra reprezentas sian produktadon. 804 00:50:59,660 --> 00:51:03,530 Kaj en ĉi tiu kazo, pliigo ŝajne redonas int, 805 00:51:03,530 --> 00:51:07,690 kaj tiel int estas la reveno tipo de ĉi tiu funkcio. 806 00:51:07,690 --> 00:51:09,340 Kion ĝi signifas por reveno? 807 00:51:09,340 --> 00:51:15,090 Laŭvorte, vi uzas la ŝlosilvorto reveno kaj tiam se kion vi reveni 808 00:51:15,090 --> 00:51:18,600 dekstre de la ŝlosilvorto estas entjero, 809 00:51:18,600 --> 00:51:21,660 tiam tio estas ja kohera kun kion ni promesis. 810 00:51:21,660 --> 00:51:26,410 Vi ne povis fari ion kiel tiu - saluton, mondo - ĉar tio estas ĉeno. 811 00:51:26,410 --> 00:51:28,860 >> Evidente, ne estas entjero. 812 00:51:28,860 --> 00:51:33,140 Do mallonge, la ŝarĝo estas vere kontraŭ ni, la programisto, esti specifa 813 00:51:33,140 --> 00:51:37,770 pri tio, kion ni reveni kaj tiam efektive irad reveni. 814 00:51:37,770 --> 00:51:43,440 La kunteksto tie nun estas, ke via komputilo memoro estas gigabajto, 2 gigabajtoj - 815 00:51:43,440 --> 00:51:45,920 kion ajn - eble ĝi estas pli, eble ĝi estas malpli, 816 00:51:45,920 --> 00:51:49,050 sed la komputilo vidas ĝin kiel havanta malsamajn sekcioj. 817 00:51:49,050 --> 00:51:51,200 Iu iras tien, ion alian iras tien, 818 00:51:51,200 --> 00:51:54,290 malsamaj aferoj iras en la mezo, kaj hodiaŭ ni ĵus komencas diri la rakonto, 819 00:51:54,290 --> 00:51:56,340 sed ni revenos al ĉi tempo. 820 00:51:56,340 --> 00:51:59,980 Ĉar nun, la sola peco de memoro ni vere zorgas pri la teksto segmento 821 00:51:59,980 --> 00:52:03,360 ĉar tio ĝuste reprezentas la _0s_ kaj _1s_ ke Clang havas outputted. 822 00:52:03,360 --> 00:52:06,050 Do, kiam vi kuris de komando en la klavaro kiel a.out 823 00:52:06,050 --> 00:52:09,110 aŭ vi duoblan klaku ikono en Mac OS aŭ Vindozo, 824 00:52:09,110 --> 00:52:11,880 via programo estas ŝarĝita de via malmola disko en RAM 825 00:52:11,880 --> 00:52:16,330 kaj ĝi estas plopped supre de via komputilo RAM, por tiel diri. 826 00:52:16,330 --> 00:52:20,450 Dume, kiel via programo komencas kuri kaj ĉefa gets nomata 827 00:52:20,450 --> 00:52:23,640 en la programo vi skribis aŭ la programo Microsoft aŭ Apple skribis, 828 00:52:23,640 --> 00:52:27,860 iu el liaj lokaj variabloj fini tie malsupre sur la fundo de via komputilo memoro. 829 00:52:27,860 --> 00:52:33,230 Sed se ĉefa alvokoj alia funkcio kiu mem ne havas variabloj aŭ argumentoj, ili finas super ĝi. 830 00:52:33,230 --> 00:52:36,680 Kaj se tiu funkcio vokas ion, ili finas super ĝi, super ĝi, super ĝi. 831 00:52:36,680 --> 00:52:41,460 >> Kaj nur unu fojon funkcio estas farita ekzekuti faras la pilo de pletoj, por tiel diri, 832 00:52:41,460 --> 00:52:43,240 komenci akiri pli kaj pli malalte. 833 00:52:43,240 --> 00:52:48,250 Kaj tio estas tiam, en vortoj, klarigas kial kiam vi nomas kubo 834 00:52:48,250 --> 00:52:51,550 aŭ vi nomas pliigo, vi pasante en kopio de la valoro. 835 00:52:51,550 --> 00:52:55,520 Kaj kion tio signifas pictóricamente estas ke vi laŭvorte skribi la numero 1 836 00:52:55,520 --> 00:53:00,460 en alia parto de memoro, ŝanĝante ke 1 al 2 en la kazo de pliigo 837 00:53:00,460 --> 00:53:04,820 aŭ al 8 en la kazo de kubo kaj poste ĵeti ke memoro for 838 00:53:04,820 --> 00:53:09,140 tuj kiam la pliigo aŭ la kubo funkcio redonas. Demando. 839 00:53:09,140 --> 00:53:12,900 [Studento] Kien tutmonda variabloj stokita? 840 00:53:12,900 --> 00:53:18,100 Suma variabloj estas stokitaj en kio nune nomata inicializado datumoj aŭ uninitialized datumoj, 841 00:53:18,100 --> 00:53:21,920 la diferenco se vi havas malloka variablo kaj vi atribuas ĝin tuj valoro 842 00:53:21,920 --> 00:53:24,640 kun la egala signo, ĝi finas ĉe la pinto, 843 00:53:24,640 --> 00:53:29,200 kaj se vi simple diru int x; sen valoro, ĝi finas iomete pli malalta en RAM 844 00:53:29,200 --> 00:53:31,710 simple konvencio. 845 00:53:31,710 --> 00:53:34,940 Aliaj demandoj? Bone. 846 00:53:34,940 --> 00:53:37,340 Do ĉi tiu bildo revenos kiam ni atingos pli potenca 847 00:53:37,340 --> 00:53:39,170 per kio ni povas fari kun la komputilo, 848 00:53:39,170 --> 00:53:42,720 sed por nun, ni havas mallongan intro al ĉifriko, 849 00:53:42,720 --> 00:53:46,080 specifa tipo de ĉifriko kiu ne solvas ĉiujn mondproblemojn 850 00:53:46,080 --> 00:53:47,720 sed ne solvi kelkajn el ili. 851 00:53:47,720 --> 00:53:51,700 En ĉi tiu kazo tie, ni havas ion nomita sekretaj-ŝlosila ĉifriko. 852 00:53:51,700 --> 00:53:56,410 Sekretan-ŝlosila ĉifriko, kiel la nomo sugestas, ĝi derivas ĝia sekureco de sekreta. 853 00:53:56,410 --> 00:54:00,690 >> Ekzemple, se vi estus denove en grado lernejo kaj vi pasante iom sekreta amleteron 854 00:54:00,690 --> 00:54:04,850 al la knabo aŭ knabino vi premante sur, se vi volas pasi tiun noton per la publiko, 855 00:54:04,850 --> 00:54:08,380 vi probable ne skribi tian noton en la angla aŭ kion ajn via denaska lingvo estas. 856 00:54:08,380 --> 00:54:13,340 Pli ĝuste, vi povus kodi ĝin aŭ vi eble simple sendi ilin tekston mesaĝon tiuj tagoj. 857 00:54:13,340 --> 00:54:15,460 Sed vi eble vere pasi ilin noto tra la klasĉambro. 858 00:54:15,460 --> 00:54:18,700 Kaj fari tion sendanĝere en tia maniero, ke viaj amikoj kaj la majstro 859 00:54:18,700 --> 00:54:22,650 ne scias kion vi skribas, vi eble supreniru kun sufiĉe simpla algoritmo, 860 00:54:22,650 --> 00:54:25,920 juna kvankam vi povus esti, nur levi la vortoj. 861 00:54:25,920 --> 00:54:28,130 Do anstataŭ skribas vi povus skribi b, 862 00:54:28,130 --> 00:54:30,220 anstataŭ b vi povus skribi c, 863 00:54:30,220 --> 00:54:32,140 anstataŭ c vi povus skribi d, kaj tiel plu. 864 00:54:32,140 --> 00:54:34,360 Aŭ vi povus veni supren kun pli kompleksa tradukado 865 00:54:34,360 --> 00:54:36,720 de literoj en malsamaj literoj. 866 00:54:36,720 --> 00:54:39,740 Sed la ruzo estas la knabo aŭ knabino, al kiu vi sendas ĉi noto 867 00:54:39,740 --> 00:54:45,020 bezonoj scii ion, kio estas kio, evidente? >> [Studento] Kion vi sendas. 868 00:54:45,020 --> 00:54:49,720 Kion via sekreto estas, kiel tio estas ke surĵeto inter la kaj b-aj kaj c aj kaj d's. 869 00:54:49,720 --> 00:54:54,650 Ĉu ĝuste aldonante 1 al ĉiu de la literoj iri de a al b, b al c? 870 00:54:54,650 --> 00:54:56,670 Ĉu pli kompleksa ol tio? 871 00:54:56,670 --> 00:55:01,540 >> Do vi kaj via crush bezonas havi tiun sekretan informon, 872 00:55:01,540 --> 00:55:03,190 sed estas speco de catch-22 ĉi tie. 873 00:55:03,190 --> 00:55:06,830 Se ĉi estas la unua fojo vi sendas tiun amleteron tra la klaso, 874 00:55:06,830 --> 00:55:10,720 kiel estas tiu knabo aŭ knabino tuj scias, kion la sekreta eĉ estas? 875 00:55:10,720 --> 00:55:13,930 Do sekretaj-ŝlosila kripto ne solvas ĉiujn mondproblemojn, 876 00:55:13,930 --> 00:55:16,320 kaj tie estas reale rilato tie ke ni revenos al al semestro la fino. 877 00:55:16,320 --> 00:55:25,110 Simile do plimulto de ni ne konas iun kiu funkcias, ekzemple, en Amazon.com, 878 00:55:25,110 --> 00:55:28,190 kaj tamen multaj el ni probable aĉetis frandajxojn cxe Amazon.com, 879 00:55:28,190 --> 00:55:31,990 kaj ni estis instruitaj por supozi, ke tiuj TTT-komerco transakcioj estas sekura. 880 00:55:31,990 --> 00:55:36,470 La URL probable diras https, ekzistas eble stulta iom pendseruro ikono ie, 881 00:55:36,470 --> 00:55:39,930 ekzistas ia ĉifriko certigi viajn kreditkartajn detalojn 882 00:55:39,930 --> 00:55:42,160 inter vi kaj Amazon.com. 883 00:55:42,160 --> 00:55:45,430 Kaj tamen se ĉifriko engaĝas sciante iu sekreta 884 00:55:45,430 --> 00:55:48,620 kaj tamen mi ne scias iun ĉe Amazon kaj mi certe ne aranĝis ia sekreta 885 00:55:48,620 --> 00:55:52,710 kun iu en Amazonio, kiom estas mia komputilo aŭ mia retumilo faras tion? 886 00:55:52,710 --> 00:55:55,720 Ĝi rezultas ekzistas aliaj specoj de ĉifriko aro kiu solvas tiun problemon. 887 00:55:55,720 --> 00:55:57,670 Sed por hodiaŭ, ni enfokusigas la simpla 888 00:55:57,670 --> 00:56:00,290 kie vi povas aranĝi anticipe scii iu sekreta 889 00:56:00,290 --> 00:56:03,760 kiel +1 aŭ iu surĵeto inter la kaj b-aj jaroj. 890 00:56:03,760 --> 00:56:05,840 Kaj la procezo de ĉifriko ĝenerale engaĝas ĉi. 891 00:56:05,840 --> 00:56:08,620 Vi havas iujn simpla teksto, reprezentita tie en maldekstra, 892 00:56:08,620 --> 00:56:12,930 vi kuros ĝi tra ia algoritmo aŭ proceduro por encrypting ĝi - 893 00:56:12,930 --> 00:56:15,100 eble tio estas nur igas b, b igas c - 894 00:56:15,100 --> 00:56:17,490 kaj tiam vi finos kun ĉifrita teksto. 895 00:56:17,490 --> 00:56:20,380 Dume, unufoje vian crush ricevas tiun sekretan noton, 896 00:56:20,380 --> 00:56:24,200 li aŭ ŝi devas tiam deĉifri ĝin ĝenerale dorsflankanta ke algoritmo 897 00:56:24,200 --> 00:56:27,190 tiel kiel reiri al la simpla teksto. 898 00:56:27,190 --> 00:56:28,960 Ekzistas fizikajn personigoj de ĉi. 899 00:56:28,960 --> 00:56:31,680 >> Ekzemple, jen estas iom sekreta deĉifrilo ringo, 900 00:56:31,680 --> 00:56:35,110 kaj ĉi tiu estas ringo en la senco ke ekzistas du diales tie. 901 00:56:35,110 --> 00:56:38,490 Sur la ekstera periferio de tiu afero, estas literoj A tra Z, 902 00:56:38,490 --> 00:56:40,340 kvankam ili estas en hazarda ordo, 903 00:56:40,340 --> 00:56:42,880 kaj en la interno, estas fakte iuj nombroj 904 00:56:42,880 --> 00:56:46,620 tia, ke kun tiu ĉi ringo povas ia turni la ekstera sed ne interne 905 00:56:46,620 --> 00:56:49,140 por laŭliniigi nombroj kun literoj. 906 00:56:49,140 --> 00:56:53,020 El filmo nomita A Christmas Story, vi vidos ke iom Ralphie 907 00:56:53,020 --> 00:56:58,000 estis tiel avida por elkompreni kiel Little Orphan Annie la sekreta mesaĝo estis al li 908 00:56:58,000 --> 00:57:02,570 kiu estis komunikita, mi kredas, en la formo de nombraj mesaĝojn sur cerealoj skatolo 909 00:57:02,570 --> 00:57:07,220 kaj vi devis amasigi ĉiuj malgrandaj kartoj kiuj venis en la cerealo skatolo, 910 00:57:07,220 --> 00:57:09,770 vi devis sendi ilin, vi devis reiri la sekreta deĉifrilo ringo 911 00:57:09,770 --> 00:57:13,910 por ke vi povas finfine elkompreni kiel la surĵeto estas inter literoj kaj numeroj 912 00:57:13,910 --> 00:57:15,550 aŭ literoj kaj literoj. 913 00:57:15,550 --> 00:57:19,520 Kiel en komputilo ni povas iri apliki aŭ reprezentas aferojn tiel? 914 00:57:19,520 --> 00:57:22,560 Ni bezonas maniero de esprimi nin iom pli flekse 915 00:57:22,560 --> 00:57:25,080 ol nia variabloj tiel malproksime permesis. 916 00:57:25,080 --> 00:57:29,000 Ni havis ints, ni havis signoj, ni havis flosas kaj duoblaj kaj kelkaj aliaj, 917 00:57:29,000 --> 00:57:34,200 sed tiuj estas individuaj pecoj de memoro kiu ne vere nin permesas esprimi aferojn 918 00:57:34,200 --> 00:57:36,440 kiel vortoj kaj frazoj kaj frazoj. 919 00:57:36,440 --> 00:57:38,630 Ja, ni nomas tion kordoj, 920 00:57:38,630 --> 00:57:42,660 sed ni promesas ke ĉi tio estas vere nur simpligo en la CS50 biblioteko 921 00:57:42,660 --> 00:57:45,540 ke ni intencante senŝeligi dorso. 922 00:57:45,540 --> 00:57:47,500 Kaj tial ni komencu fari tion tie ĉi. 923 00:57:47,500 --> 00:57:49,840 Lasu min kaj malfermu dosieron - 924 00:57:49,840 --> 00:57:54,100 ĉiuj el tiuj dosieroj estas disponeblaj, kiel kutime, en linio - nomita array.c 925 00:57:54,100 --> 00:57:58,960 al solvi problemo nerilataj al kordoj sed tio pentras portreton tie 926 00:57:58,960 --> 00:58:01,520 pri kiel ni povus uzi iun nomita tabelo. 927 00:58:01,520 --> 00:58:04,050 >> Tabelo estas datumtipo. 928 00:58:04,050 --> 00:58:10,730 Ĝi estas tipo de variablo de varoj kiuj havas multnombraj pli malgrandaj datumtipoj ene de ĝi 929 00:58:10,730 --> 00:58:12,680 malantaŭo al malantaŭo al malantaŭo al malantaŭo. 930 00:58:12,680 --> 00:58:16,980 Do ekzemple, se ni volis skribi iom programo kiu donas al vi viajn kvizo averaĝa 931 00:58:16,980 --> 00:58:19,780 por kurso kiel 50 kiu havas 2 kvizoj, 932 00:58:19,780 --> 00:58:23,450 vi povus tre facile skribi ĉi programo bazita eĉ en iuj de la pasinta semajno materialo 933 00:58:23,450 --> 00:58:28,830 uzante GetInt kaj paro de variabloj: int quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 Kaj estas bela simpla. 935 00:58:30,550 --> 00:58:33,500 Estas eble 10, 20 linioj de kodo max apliki programon 936 00:58:33,500 --> 00:58:38,940 kiu petas la uzanton dum 2 kvizo partituroj kaj tiam komputas ilia averaĝa 937 00:58:38,940 --> 00:58:42,020 per aldono ilin kune, dividanta per 2, kaj tiam presi la rezultojn. 938 00:58:42,020 --> 00:58:46,400 Ni povus probable faras tion sufiĉe facile nun post iu kvanto de minutoj. 939 00:58:46,400 --> 00:58:49,450 Sed la problemo estas ke supozu ke la 50 havis 3 kvizojn aŭ 4. 940 00:58:49,450 --> 00:58:52,830 Supozu ke vi volis uzi la saman programon por klaso kiu havis semajna Quizzes. 941 00:58:52,830 --> 00:58:55,100 Pensu pri klaso kiu ĉiusemajne kvizojn. 942 00:58:55,100 --> 00:58:58,840 Se estas 16 aŭ pli semajnoj en semestro, nun vi havas 16 variabloj: 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 Tuj kiam oni komencas vidi ĉi redundo, ĉi kopii kaj bati de kodo, 945 00:59:06,870 --> 00:59:09,810 ĝi devus komenci fari vi deziras, ke estis iam pli bona vojo. 946 00:59:09,810 --> 00:59:13,610 Kaj dankeme, pro tabeloj ekzistas. Do ni faru ĉi. 947 00:59:13,610 --> 00:59:16,700 Unue, lasu min enkonduki tre simpla afero, ke ni ne uzas tiel malproksime, 948 00:59:16,700 --> 00:59:18,820 sed vi vidos ĝin foje en kodo. 949 00:59:18,820 --> 00:59:21,270 >> Tio estas kio ĝenerale nomis konstanto. 950 00:59:21,270 --> 00:59:24,410 Do ĝi estas konstanto en la senco ke ĉi tiu valoro neniam ŝanĝas. 951 00:59:24,410 --> 00:59:26,450 La homa konvencio kiam kreante konstantan 952 00:59:26,450 --> 00:59:30,420 estas uzi cxiujn majusklojn nur por ke ĝi vere elstaras en via kodo, 953 00:59:30,420 --> 00:59:34,270 kaj la speciala ŝlosilvorto ke vi uzas en C estas # difini. 954 00:59:34,270 --> 00:59:39,970 Do ni diru # difini, tiam spaco, tiam la vorto, kiun vi volas uzi por la konstanta nomo 955 00:59:39,970 --> 00:59:41,730 kaj tiam la valoro de la konstanta. 956 00:59:41,730 --> 00:59:44,710 Rimarku ĉi estas malsama de asignanta ion al variablo. 957 00:59:44,710 --> 00:59:46,430 Ne egalas subskribi, ne estas punktokomo. 958 00:59:46,430 --> 00:59:49,140 Tio estas kio ĝenerale konata kiel antaŭtraktilo direktivo, 959 00:59:49,140 --> 00:59:50,840 sed pli por ke alia tempo. 960 00:59:50,840 --> 00:59:56,350 Por la momento, ĉi kreas _unchanging_ valoro nomis Testi 961 00:59:56,350 --> 00:59:58,290 kies reala nombra valoro estas 2. 962 00:59:58,290 --> 01:00:02,180 Do ajn vi vidas kvizojn, kvizojn, kvizojn laŭlonge de ĉi tiu dosiero, 963 01:00:02,180 --> 01:00:04,230 tio estas nur la numero 2. 964 01:00:04,230 --> 01:00:06,550 Se mi rigardas ĉefa nun, ni vidos kiel tio funkcias. 965 01:00:06,550 --> 01:00:09,770 Unue ĝi aspektas iom enigmaj, sed estas ĉiuj aĵoj de semajno 1. 966 01:00:09,770 --> 01:00:12,210 Demandu la uzanto por notoj. Kiel ni faru tion? 967 01:00:12,210 --> 01:00:17,350 En linio 22 - tiu ĉi estas vere la suka parto - mi deklaras kaleŝego 968 01:00:17,350 --> 01:00:23,240 sed ne nur sola kaleŝego. Mi deklaras, pli ĝuste, tabelo de glitpunkta, glitkoma valoroj. 969 01:00:23,240 --> 01:00:27,700 Ke variablo tuj nomos gradoj, kiel implicita tie, 970 01:00:27,700 --> 01:00:31,420 sed la sola peco de nova sintakso tiam estas tiuj rektaj krampoj. 971 01:00:31,420 --> 01:00:37,280 La fakto ke mi diris kaleŝego gradoj kaj poste malfermita krampo kaj poste numeron - 972 01:00:37,280 --> 01:00:40,980 rimarki se ĉi estas konstanto ĉi estas kiel ni faris ĉi - 973 01:00:40,980 --> 01:00:46,840 ĉi signifas, "Hej komputilo, donu al mi 2 flosas kaj ni kolektive nomas ilin notoj." 974 01:00:46,840 --> 01:00:51,780 >> Ĉi tiu estas en kontrasto al multe pli teda proceso tiamaniere: float grade1; 975 01:00:51,780 --> 01:00:54,580 flosi grade2; ks. 976 01:00:54,580 --> 01:00:58,310 Do tabelo nin permesas apliki tiun ideon sed multe malpli messily, 977 01:00:58,310 --> 01:01:04,560 en tia maniero, ke ni povas skribi 1 linio de kodo anstataŭ, ekzemple, 16 di 16-semajno semestro. 978 01:01:04,560 --> 01:01:09,060 Mi ne volis malmola kodo 2 ĉar se vi pensas pri tiu nun logike, 979 01:01:09,060 --> 01:01:12,560 supozi venontjare CS50 ŝanĝojn al 3 kvizojn anstataŭ 980 01:01:12,560 --> 01:01:15,010 kaj mi havis la numero 2 tien, mi havis la numero 2 ĉi tie, 981 01:01:15,010 --> 01:01:17,210 Mi havis la numero 2 tie, la numero 2 tie. 982 01:01:17,210 --> 01:01:19,890 Ĝi iĝas tre teda kaj tre facile ŝraŭbo supren 983 01:01:19,890 --> 01:01:26,550 kaj hazarde ŝanĝi 1 valoro al 3 kaj perdi iu alia valoro de 2. 984 01:01:26,550 --> 01:01:30,660 Do mi tuj anstataŭ abstrakta ĉi for kaj uzi tiun konstantan ke, 985 01:01:30,660 --> 01:01:32,520 kiel ĝia nomo sugestas, neniam ŝanĝas. 986 01:01:32,520 --> 01:01:35,870 Kaj nun ne gravas ĉu ni havas malsamajn kvizojn ĉi tiu jaro aŭ apud, 987 01:01:35,870 --> 01:01:39,380 Mi nur devas ŝanĝi ĝin en unu loko ĝis tie en supro. 988 01:01:39,380 --> 01:01:41,230 Do jen ĉio konstanta estas. 989 01:01:41,230 --> 01:01:47,100 Dume, la nova koncepta trajto estas tiu de tabelo. 990 01:01:47,100 --> 01:01:55,030 Do la rektaj krampoj donu al mi ĉi tio multaj flosas kaj lasas min kolektive nomas ilin gradoj tie. 991 01:01:55,030 --> 01:01:56,720 Do nun ni vidu kion mi faros. 992 01:01:56,720 --> 01:01:59,220 Tie en linio 24 estas la komenco de a por buklo. 993 01:01:59,220 --> 01:02:03,380 >> Tiu estas vere nenio kaprico. Ĝi simple uzante kvizojn anstataŭ malmola-kodita nombro. 994 01:02:03,380 --> 01:02:06,740 Sed estas nenio intelekte malsamaj tie pasintsemajne. 995 01:02:06,740 --> 01:02:11,650 Tiu estas nur printf, do printf ("Kvizo #% d de% d:") 996 01:02:11,650 --> 01:02:16,670 ĉar mi nur volas presi donu al mi kvizon numero 1 de 2 kaj tiam 2 de 2. 997 01:02:16,670 --> 01:02:18,480 Do ĉi tiu estas pure estetika afero. 998 01:02:18,480 --> 01:02:21,000 Sed la interesa parto nun estas en linio 27. 999 01:02:21,000 --> 01:02:27,840 Por plenigi unu el la du anstataŭiloj kun flosanta punkto valoro, 1000 01:02:27,840 --> 01:02:29,640 vi denove uzos kvadrataj krampoj. 1001 01:02:29,640 --> 01:02:35,170 En ĉi tiu kazo, Mi uzas i ĉar ĉi por buklo komencis kun i egalante kio valoro, ŝajne? 1002 01:02:35,170 --> 01:02:36,670 [Studento] 0. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Do en la unua ripeto de ĉi maŝo, estas kvazaŭ mi skribis tion en kodo, 1004 01:02:40,990 --> 01:02:46,310 sed en la dua iteracio de ĉi maŝo, estas kvazaŭ mi skribis tion en mia kodo. 1005 01:02:46,310 --> 01:02:49,970 Sed la fakto, ke Mi uzas variablo estas perfekta ĉar, kiel la nomo sugestas, 1006 01:02:49,970 --> 01:02:52,600 ĝi estas varianta ĝia valoro en ĉiu ripeto, 1007 01:02:52,600 --> 01:02:55,900 tial Mi plenigi tiun tabelo unu loko samtempe. 1008 01:02:55,900 --> 01:02:57,380 Kion tio tabelo aspektas? 1009 01:02:57,380 --> 01:03:01,570 La kialo mi tiris la super simpla rektangulo sur la ekrano tie antaŭe estis por tiu kialo. 1010 01:03:01,570 --> 01:03:05,590 Tabelo estas nur eron de memoro sekvita de alia bloko de memoro 1011 01:03:05,590 --> 01:03:08,570 sekvata de alia bloko de memoro kaj tiel plu. 1012 01:03:08,570 --> 01:03:13,120 Do, se miaj tabelo estas de amplekso 2 en ĉi tiu kazo tie, ĉiuj mi farus 1013 01:03:13,120 --> 01:03:20,200 tajpante en mia kvizo partituroj like tie - mi atingis 100 sur ĉi tiu kaj tiam mi ricevis 99 en ĉi tiu - 1014 01:03:20,200 --> 01:03:24,970 tiam ĉi memoro povus eĉ esti uzata ĉar mi nur demandis la komputilo 1015 01:03:24,970 --> 01:03:26,840 por tabelo de amplekso 2. 1016 01:03:26,840 --> 01:03:28,600 Tiuj kvadratoj estas ankoraŭ tie, ĉu ne? 1017 01:03:28,600 --> 01:03:32,670 Vi ankoraŭ havas 2 gigabajtoj de RAM eĉ se vi nur petante 2 flosas. 1018 01:03:32,670 --> 01:03:36,840 Do la ideo malantaŭ tabeloj estas ke la komputilo nur prenas eron de memoro 1019 01:03:36,840 --> 01:03:41,340 kaj tiam apportions malgrandaj pecoj malantaŭo al malantaŭo al malantaŭo al malantaŭo. 1020 01:03:41,340 --> 01:03:43,310 Kaj por ke ĉio tabelo estas. 1021 01:03:43,310 --> 01:03:47,350 >> Ĝi estas bela eron de memoro ene de kiuj vi povas meti tion. 1022 01:03:47,350 --> 01:03:50,700 Ĉi tio okazas al tiam faru nur iuj enuigaj aritmetiko. 1023 01:03:50,700 --> 01:03:54,640 Se mi rulumu malsupren tie, ĉi tiu estas kie mi tiam ankaŭ persisti super la tabelo. 1024 01:03:54,640 --> 01:03:58,020 Mi venis kun la sumado de ĉiuj el la valoroj en la tabelo, 1025 01:03:58,020 --> 01:04:02,470 kaj tiam mi uzas la ronda funkcio ĉi tie por reale fari la sumo dividita per kvizoj. 1026 01:04:02,470 --> 01:04:06,320 Sed lasu min skuos mian manon en tiu kiel speco de sufiĉe aritmetiko por nun. 1027 01:04:06,320 --> 01:04:08,370 Sed ĉiuj ke tio faras por mi finfine estas komputanta kun mezala. 1028 01:04:08,370 --> 01:04:13,580 Do unue kvizo plus dua kvizo dividita per 2 kaj poste presi ĝin kiel int. 1029 01:04:13,580 --> 01:04:17,280 Sed estu la nun transiro al malsama ekzemple nomita string1, 1030 01:04:17,280 --> 01:04:20,700 kiu pentras similan bildon sed uzante ŝnurojn. 1031 01:04:20,700 --> 01:04:23,940 Lasu min kaj simpligi ĉi por nur momento. 1032 01:04:23,940 --> 01:04:27,090 Pardonu la deŝovon por nun. 1033 01:04:27,090 --> 01:04:30,870 Avizo en linio 19 de ĉi tiu ekzemplo, mi alvenas ĉenon de la uzanto. 1034 01:04:30,870 --> 01:04:34,640 Sed rimarki kion mi sekva faras en linioj 22 antaŭen. 1035 01:04:34,640 --> 01:04:41,250 Mi vere ripetanta el i supren al - kaj ĉi estas nova lertaĵo - strlen, kordoj longa. 1036 01:04:41,250 --> 01:04:44,880 Tiu estas funkcio kiu venas kun C ke se vi pasas ĝin ĉenon, 1037 01:04:44,880 --> 01:04:47,730 rakontas al vi kiom da karakteroj estas en tiu linio. Tio estas ĉio. 1038 01:04:47,730 --> 01:04:51,550 Kaj la fakto ke ĝi estas strlen anstataŭ ĉenon longo estas nur ĉar ĝi estas pli konciza. 1039 01:04:51,550 --> 01:04:55,100 Tridek jarojn, homo ŝatis skribi aĵojn kiel koncize kiom eblas, 1040 01:04:55,100 --> 01:04:57,630 do ni tenis ke konvencion tie. 1041 01:04:57,630 --> 01:05:00,660 i + + nur signifas pliigo i en ĉiu ripeto. 1042 01:05:00,660 --> 01:05:02,990 Kaj nun rimarkis tion, kio estas vere interesa. 1043 01:05:02,990 --> 01:05:09,180 En linio 24, mi diras, "Komputilo, donu al mi karaktero, 8 bitoj, kaj nomas ĝin c". 1044 01:05:09,180 --> 01:05:12,630 Sed kio estas tio sur la dekstra flanko dirante? 1045 01:05:13,490 --> 01:05:16,530 En la angla, kio faras ke reprezenti? 1046 01:05:16,530 --> 01:05:18,730 [Studento] La unua signo en la tabelo. 1047 01:05:18,730 --> 01:05:20,790 Ekzakte. Donu al mi la unua gravulo en la tabelo. 1048 01:05:20,790 --> 01:05:24,090 Aŭ, pli ĝenerale, donu al mi la th,-a signo en la tabelo. 1049 01:05:24,090 --> 01:05:26,100 Kaj realigi gravas nun ke kiel komputilo sciencistoj, 1050 01:05:26,100 --> 01:05:27,890 ni vere rakontante de 0. 1051 01:05:27,890 --> 01:05:29,720 >> Vi ne havas la bontrovo nun komenci fari ĉi tion. 1052 01:05:29,720 --> 01:05:34,160 Vi nun devas konduti konforme al la komputilo atendoj kaj kalkulu de 0 1053 01:05:34,160 --> 01:05:38,180 ĉar [0] tuj estos la unua gravulo en ĉeno, 1054 01:05:38,180 --> 01:05:42,150 [1] tuj estos la dua, [2] tuj estos la tria, kaj tiel plu. 1055 01:05:42,150 --> 01:05:49,720 Do ĉi tiu programo, se mi kompili ĝin, tiu estas denove string1, do fari string1, 1056 01:05:49,720 --> 01:05:54,670 kaj nun mi kuros string1 en mia fina fenestro. 1057 01:05:54,670 --> 01:05:58,330 Oni atendas enigo, do mi tuj tajpi en David, Enter, 1058 01:05:58,330 --> 01:06:02,540 kaj nun presas Davido ĉiuj en malsamaj linioj ĉar avizo kion mi faras. 1059 01:06:02,540 --> 01:06:05,820 Mi presi unu signo samtempe. 1060 01:06:05,820 --> 01:06:10,100 Ni ne eniros en detalo hodiaŭ en ĉi tio, sed mi forviŝita antaŭ momento ĉi ĉeko tie. 1061 01:06:10,100 --> 01:06:15,480 Rezultas, ke se la uzanto estas misbehaving, adversarial, aŭ nur konfuzita, 1062 01:06:15,480 --> 01:06:20,210 vi povas reale malsukcesas doni ĉenon de iu longa. 1063 01:06:20,210 --> 01:06:22,860 Se vi batis la malĝustan klavon sur la klavaro, vi eble ne donu ŝnuro tute ne, 1064 01:06:22,860 --> 01:06:26,950 aŭ se vi estas malica, eble vi provu almeti en gigabajto la valoron de eseo 1065 01:06:26,950 --> 01:06:29,290 plenigi ĉi ŝnuro, kaj se la komputilo funkcias el memoro, 1066 01:06:29,290 --> 01:06:32,710 ĝi rezultas ke ni tuj reiri tiu speciala valoro nomis NULL. 1067 01:06:32,710 --> 01:06:35,580 Do nuntempe, nur scias, ke tie estas tio specialan valoron nomis NULL 1068 01:06:35,580 --> 01:06:39,580 ke ni permesos kontroli kiam ni estas el memoro, inter aliaj aferoj. 1069 01:06:39,580 --> 01:06:45,630 Sed se mi malfermas nun string2, rimarkos unu diferenco ĉi tie. 1070 01:06:45,630 --> 01:06:48,210 Rimarku unu diferenco tie kun string2. 1071 01:06:48,210 --> 01:06:51,340 Kun string2, ĉi por buklo estas iom malsama. 1072 01:06:51,340 --> 01:06:55,010 >> Lasu min forigi la NULLs tiel ke ni povas paroli pri tiuj alia tempo. 1073 01:06:55,010 --> 01:06:57,800 Kio estas malsama pri la por buklo tiu tempo? 1074 01:06:59,620 --> 01:07:01,670 Mi povas reiri al la antaŭa ekzemplo. 1075 01:07:01,670 --> 01:07:08,580 Do jen la versio 2, ĉi tiu estas versio 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 La strlen alvoko estas kie? 1078 01:07:16,660 --> 01:07:18,860 Ĝi estas en la unua parto de la por buklo. 1079 01:07:18,860 --> 01:07:21,830 Ajna pensojn sur kial mi faras tion? Yeah. 1080 01:07:21,830 --> 01:07:24,560 [Studento] Do vi ne nomas la funkcion ĉiu unuopa tempo. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Do ni ne nomas la funkcion ĉiu unuopa tempo. Ekzakte. 1082 01:07:26,440 --> 01:07:28,300 Memori el por maŝojn kiuj ili estas super simpla 1083 01:07:28,300 --> 01:07:31,770 iam vi ia kompreni ke tiu estas la inicialización, la kondiĉo, kaj la ĝisdatigon. 1084 01:07:31,770 --> 01:07:34,750 La problemo estas, ke la kondiĉo okazas en ĉiu ripeto de la ciklo. 1085 01:07:34,750 --> 01:07:40,010 Kaj tial en ĉi tiu ekzemplo tie, kio estas malbona pri la fakto ke ĉi tiu estas mia kondiĉo? 1086 01:07:40,010 --> 01:07:41,830 [Studento] Vi nomas strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] Vi nomas strlen denove kaj denove kaj denove. 1088 01:07:44,340 --> 01:07:47,410 Sed iam mi tajpis en David, la longo de tiu linio estas 5, 1089 01:07:47,410 --> 01:07:49,650 kaj tio ne iras por ŝanĝi en ĉiu ripeto de la ciklo 1090 01:07:49,650 --> 01:07:51,670 ĉar la ŝnuro estas ankoraŭ D-a-v-i-d. 1091 01:07:51,670 --> 01:07:55,320 Do ĉi tiu estas aludo al kio okazos al ĉiufoje grava ideo 1092 01:07:55,320 --> 01:08:00,410 konata kiel dezajno decido kie nur ne faras la komputilo faras nenecesa laboro. 1093 01:08:00,410 --> 01:08:03,920 >> Ĝuste kiel sneak preview de pset2, pset2 en la normo eldono 1094 01:08:03,920 --> 01:08:07,030 tuj defias vin al reale efektivigi iujn numero de ĉifroj, 1095 01:08:07,030 --> 01:08:10,410 iu nombro de ĉifrado algoritmoj, tiel ke vi povas ambaŭ ĉifri 1096 01:08:10,410 --> 01:08:13,840 kaj deĉifri sekretajn mesaĝojn multe kiel la Ralphie tie malkoditaj. 1097 01:08:13,840 --> 01:08:16,810 En la hacker eldono de pset2, ni tuj iru iom pli. 1098 01:08:16,810 --> 01:08:19,649 Ni tuj transdonos vin dosiero de reala komputilo sistemo 1099 01:08:19,649 --> 01:08:23,479 kiu enhavas tutan faskon da usernames kaj realaj ĉifrita pasvortoj, 1100 01:08:23,479 --> 01:08:26,939 kaj la defio por la hacker eldono tuj estos al fendi tiuj pasvortoj 1101 01:08:26,939 --> 01:08:33,200 kaj elkompreni kiel ĉifriko aŭ kio sekreta estis uzita por reale generi tiuj pasvortoj. 1102 01:08:33,200 --> 01:08:36,109 Kaj ni tuj faros ĉi uzante nova funkcio ĉi tie de C 1103 01:08:36,109 --> 01:08:40,630 ke mi donos al vi nur la demo de konata kiel komando-linia argumentoj. 1104 01:08:40,630 --> 01:08:44,229 Rezultas, kiel kelkaj el vi eble vidis en sekcio aŭ en lernolibroj, 1105 01:08:44,229 --> 01:08:48,260 ĉefa ne ĉiam devas esti malplena en krampoj. 1106 01:08:48,260 --> 01:08:52,430 Ĝi rezultas ke ĉefa povas ankaŭ esti skribita kiel ĉi tiu, kun du argumentoj, 1107 01:08:52,430 --> 01:08:56,870 argc kaj argv, kie argc estas la nombro de vortoj 1108 01:08:56,870 --> 01:09:00,020 ke vi entajpas post la programo la nomon en via komanda linio 1109 01:09:00,020 --> 01:09:03,420 kaj argv estas la reala vortoj. 1110 01:09:03,420 --> 01:09:07,540 Kaj kiel la rektaj krampoj tie sugestas, argv estas ŝajne tabelo. 1111 01:09:07,540 --> 01:09:12,210 Ĝi tuj estos ĉeno post ĉeno post ĉenon en memoro. 1112 01:09:12,210 --> 01:09:16,010 >> Do kion ni tuj povos fari ekde pset 2 estas io tiamaniere. 1113 01:09:16,010 --> 01:09:21,350 Se mi faras argv1, kiu estas ekzemplo ni revenos al lundon, kaj ruli ĝin, 1114 01:09:21,350 --> 01:09:23,370 rimarkas, ke ĝi ne similas al fari ion ankoraŭ. 1115 01:09:23,370 --> 01:09:25,490 Ĝi simple presas el lia propra nomo. 1116 01:09:25,490 --> 01:09:31,479 Sed se mi diras adiaŭ klaso, avertas ke ĉi tiu programo ŝajne iterates 1117 01:09:31,479 --> 01:09:35,479 super cxiu el la vortoj kiuj tajpis ĉe la prompto. 1118 01:09:35,479 --> 01:09:41,630 Kaj la rimedoj, per kiuj ni gajnos aliro al vortoj, ke la uzanto tajpas ĉe la prompto 1119 01:09:41,630 --> 01:09:49,160 estas ŝanĝante ĉefa ekde ĉi semajnfino de int main (void) al Mez ĉefa (argc, argv) 1120 01:09:49,160 --> 01:09:52,050 kaj tiel estos naskita komand-linio argumentoj. 1121 01:09:52,050 --> 01:09:57,100 Kaj iam vi ricevas vere kompleksa pro tio, vi povos skribi vere trippy programoj 1122 01:09:57,100 --> 01:09:59,610 kiel ĉi tiu tie, kiuj iras super kaj trans 1123 01:09:59,610 --> 01:10:03,940 kelkaj el la funkcioj ni faris ĝis nun sed ĉiuj sufiĉe potencaj. 1124 01:10:03,940 --> 01:10:08,950 >> Do ni lasos tion kun tiu en la ekrano, kaj ni vidos vin lunde. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]