1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Astea 4] 2 00:00:03,000 --> 00:00:05,000 [David J. Malan] [Harvardeko Unibertsitateko] 3 00:00:05,000 --> 00:00:08,000 [Hau da CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Ondo da, hau CS50 da, eta hau da aste 4 Irteeran, 5 00:00:12,000 --> 00:00:16,000 eta honen arabera ordenatzeko algoritmo geldoena posible bat da. 6 00:00:16,000 --> 00:00:19,000 Zein izan zen besterik ez da han ikusi dugu? 7 00:00:19,000 --> 00:00:24,000 Burbuila sort zen, big O (n ^ 2) + batura, 8 00:00:24,000 --> 00:00:28,000 eta, hain zuzen ere, ez gara mundu honetan dauden bakarrak jakin dirudi 9 00:00:28,000 --> 00:00:30,000 zer da burbuila sort edo bere denborak. 10 00:00:30,000 --> 00:00:33,000 Izan ere, Eric Schmidt Google-ekin elkarrizketa bat izan zen 11 00:00:33,000 --> 00:00:45,000 ohia eta senatari Barack Obama Duela urte gutxi batzuk besterik ez. 12 00:00:45,000 --> 00:00:48,000 >> Orain, senatariak, hemen duzu Google 13 00:00:48,000 --> 00:00:54,000 eta lan-elkarrizketa bat lehendakaritza pentsatzea gustatzen zait. 14 00:00:54,000 --> 00:00:58,000 Orain, gogorra da presidente gisa lan bat aurkitzeko, eta rigors bidez joan zaren. 15 00:00:58,000 --> 00:01:00,000 Da zaila, halaber, Google-lan bat lortzeko. 16 00:01:00,000 --> 00:01:05,000 Galdera bat daukagu, eta gure hautagaien galderak ditugu, 17 00:01:05,000 --> 00:01:10,000 eta Larry Schwimmer da. 18 00:01:10,000 --> 00:01:14,000 You guys uste Txantxetan ari naiz? Hemen da. 19 00:01:14,000 --> 00:01:18,000 32-bit milioi bat zenbaki osoen ordenatzeko modurik eraginkorrena Zer da? 20 00:01:18,000 --> 00:01:21,000 [Barreak] 21 00:01:21,000 --> 00:01:24,000 Beno- 22 00:01:24,000 --> 00:01:26,000 Sentitzen dut. >> Ez, ez, ez, ez. 23 00:01:26,000 --> 00:01:34,000 Bubble sort litzateke gaizki joan dela uste dut. 24 00:01:34,000 --> 00:01:39,000 >> Goazen, nork esan zion hau? 25 00:01:39,000 --> 00:01:43,000 Azken aste gogorarazten kodea atseden bat hartu dugu, gutxienez egun bat, 26 00:01:43,000 --> 00:01:46,000 eta batzuk maila altuagoa ideia gehiago, oro har, eta arazoa konpontzeko ardaztuta hasi zen 27 00:01:46,000 --> 00:01:49,000 bilatu eta ordenatzeko testuinguruan, 28 00:01:49,000 --> 00:01:53,000 eta zerbait ez dugu izen hori ez Slap azken astean sartu gara, 29 00:01:53,000 --> 00:01:56,000 notazioa, baina asymptotic Big O, Big Omega 30 00:01:56,000 --> 00:02:00,000 eta, batzuetan, Big Theta notazioa, eta horiek izan ziren, besterik gabe, modu 31 00:02:00,000 --> 00:02:02,000 algoritmoak iraupena deskribatzeko, 32 00:02:02,000 --> 00:02:05,000 zenbat denbora exekutatu algoritmo bat da. 33 00:02:05,000 --> 00:02:08,000 >> Eta gogoratzen denborak buruz hitz egin ahal izango duzu tamaina 34 00:02:08,000 --> 00:02:11,000 sarrera, deitu dugu, oro har, n, edozein arazoa izan daiteke, 35 00:02:11,000 --> 00:02:13,000 non n gelan pertsonen kopurua da, 36 00:02:13,000 --> 00:02:17,000 telefono-liburuaren orrialde kopurua, eta hasi ginen gauzak idazteko 37 00:02:17,000 --> 00:02:21,000 O bezala (n ^ 2) edo O (n) edo O (n log n), 38 00:02:21,000 --> 00:02:24,000 eta math, nahiz eta ez nahiko lan egin, beraz, ezin hobeto 39 00:02:24,000 --> 00:02:28,000 eta n izan zen ² - n / 2 edo horrelako zerbait 40 00:02:28,000 --> 00:02:31,000 ordez genuke bota ordena beheko termino batzuk, 41 00:02:31,000 --> 00:02:34,000 eta motibazioa ez da benetan nahi dugun 42 00:02:34,000 --> 00:02:37,000 ebaluatzeko modu objektiboa sort 43 00:02:37,000 --> 00:02:39,000 programen errendimendua edo algoritmoak errendimendua 44 00:02:39,000 --> 00:02:42,000 egunaren bukaeran, ezer egin du, esate baterako, 45 00:02:42,000 --> 00:02:45,000 zure ordenagailuaren abiadura gaur egun. 46 00:02:45,000 --> 00:02:47,000 >> Esate baterako, ezartzeko burbuila sort izanez gero, 47 00:02:47,000 --> 00:02:50,000 edo batu sort edo hautapena gaur egungo ordenagailuan ordenatu ezartzeko, 48 00:02:50,000 --> 00:02:53,000 2 GHz ordenagailuan, eta exekutatu, 49 00:02:53,000 --> 00:02:56,000 eta segundo batzuk hartzen du, eta datorren urtean 3 GHz 50 00:02:56,000 --> 00:02:59,000 edo 4 GHz ordenagailua, eta agian gero erreklamatzeko, "Wow, nire algoritmoa 51 00:02:59,000 --> 00:03:03,000 birritan azkar gisa, "denean errealitatea hori da, jakina, ez da kasua. 52 00:03:03,000 --> 00:03:06,000 Hardwarea ahaztuak azkarragoa da, baina zure ordenagailuan 53 00:03:06,000 --> 00:03:10,000 ez du, eta, beraz, nahi dugu gauzak bezala urrun bota 54 00:03:10,000 --> 00:03:13,000 multiploak 2 edo 3 multiplo orduan deskribatzen 55 00:03:13,000 --> 00:03:17,000 nola azkarra edo motela algoritmo bat da eta benetan besterik ez fokua 56 00:03:17,000 --> 00:03:20,000 n edo horien faktore batzuk, 57 00:03:20,000 --> 00:03:24,000 botere batzuk kontratuan astetik mota kasuan bezala. 58 00:03:24,000 --> 00:03:27,000 Eta gogoratzen merge sort laguntza 59 00:03:27,000 --> 00:03:31,000 gai burbuila sort eta aukeraketa sort baino askoz hobeto egin ginen 60 00:03:31,000 --> 00:03:33,000 eta are txertatzeko sort. 61 00:03:33,000 --> 00:03:36,000 >> N log n behera lortu dugu, eta, berriro ere, 62 00:03:36,000 --> 00:03:39,000 gogoratzen log n, oro har, zerbait hazten aipatzen 63 00:03:39,000 --> 00:03:43,000 poliki-poliki, gero n, eta, beraz, n log n, beraz, orain arte ona izan zen 64 00:03:43,000 --> 00:03:45,000 izan zen n ² baino gutxiago delako. 65 00:03:45,000 --> 00:03:47,000 Baina n lortzeko saioa n merge sort 66 00:03:47,000 --> 00:03:51,000 zer izan zen ideia bat germen oinarrizko izan dugun leverage 67 00:03:51,000 --> 00:03:54,000 ere egiten dugu aste 0 back leveraged? 68 00:03:54,000 --> 00:03:58,000 Nolatan ordenatzeko arazoari aurre cleverly merge sort? 69 00:03:58,000 --> 00:04:04,000 Zer da gako insight izan, agian? 70 00:04:04,000 --> 00:04:07,000 Edonork guztiak. 71 00:04:07,000 --> 00:04:09,000 Ados, dezagun urrats bat atzera. 72 00:04:09,000 --> 00:04:11,000 Azaldu zure hitzetan sort batu. 73 00:04:11,000 --> 00:04:15,000 Nola egin du lan? 74 00:04:15,000 --> 00:04:17,000 Ados, aste 0 errenkadan itzuliko gara. 75 00:04:17,000 --> 00:04:19,000 Ados, bai. 76 00:04:19,000 --> 00:04:22,000 [Inaudible-ikaslea] 77 00:04:22,000 --> 00:04:26,000 Ongi, ona da, beraz, zenbaki-array 2 zatitan banatu dugu. 78 00:04:26,000 --> 00:04:29,000 Pieza horietako bakoitzean horrela antolatu dugu, eta gero batu ditugu, 79 00:04:29,000 --> 00:04:33,000 eta aurretik ikusi dugu ideia hori arazo bat handi hau hartu 80 00:04:33,000 --> 00:04:36,000 eta Tajadura sortu den arazo bat da hau handia edo handi honetan sartu. 81 00:04:36,000 --> 00:04:38,000 >> Gogoratu telefono book adibidez. 82 00:04:38,000 --> 00:04:42,000 Gogoratu aste ago algoritmoa auto-zenbaketa 83 00:04:42,000 --> 00:04:45,000 beraz batu sort pseudocode hau hemen laburbildu zen. 84 00:04:45,000 --> 00:04:48,000 Duzunean n elementuak eman, eta lehen behatu egiaztatu zen. 85 00:04:48,000 --> 00:04:51,000 N <2 ondoren ez bada ez du ezer guztiak 86 00:04:51,000 --> 00:04:55,000 n <2 ondoren n da, jakina, 0 edo 1 bada delako, 87 00:04:55,000 --> 00:04:57,000 eta, beraz, bai bada 0 edo 1 ez dago ezer ordenatzeko. 88 00:04:57,000 --> 00:04:59,000 Egin duzu. 89 00:04:59,000 --> 00:05:01,000 Zure zerrenda dagoeneko kenduz ordenatuko da. 90 00:05:01,000 --> 00:05:04,000 Baina bestela duzun got elementu 2 edo gehiago aurrera eta horiek zatitzeko 91 00:05:04,000 --> 00:05:06,000 2 halves sartu, ezkerreko eta eskuineko. 92 00:05:06,000 --> 00:05:09,000 Sort halves horietako bakoitzean, eta ondoren ordenatuko halves batu. 93 00:05:09,000 --> 00:05:13,000 Baina hemen arazoa da, hasiera batean hori sentitzen ari gara punting bezala. 94 00:05:13,000 --> 00:05:17,000 Horretan definizio zirkular bat da eskatu Nik baduzu n elementu horiek ordenatzeko 95 00:05:17,000 --> 00:05:22,000 eta ni ari zaren kontatzea "All right, fina, n / 2 eta n duten / 2 elementu horiek ordenatzeko dugu" 96 00:05:22,000 --> 00:05:27,000 ondoren, nire galdera hurrengoa da izango "Ederren, nola n / 2 elementuak ordenatzeko duzu?" 97 00:05:27,000 --> 00:05:30,000 >> Hala ere, programa honen egitura, 98 00:05:30,000 --> 00:05:33,000 oinarri kasu honetan delako, eta, beraz, hitz egiten, 99 00:05:33,000 --> 00:05:39,000 Kasu berezi hau dioen n bueltan 2 bezalako balio finko batzuk 00:05:42,000 Ez erantzun bera zirkular hori erantzuteko. 101 00:05:42,000 --> 00:05:46,000 Prozesu honek, cyclicity honetan joango amaituko da. 102 00:05:46,000 --> 00:05:50,000 Eskatzen dut baduzu "Sort n elementu hauek," eta, esan duzu? "Ederren, n horiek ordenatzeko / 2" 103 00:05:50,000 --> 00:05:53,000 Ondoren, esan duzu "Ondo, horiek sort n / 4, n / 8, n/16," 104 00:05:53,000 --> 00:05:56,000 azkenean zenbaki bat big nahikoa duzu zatitzea 105 00:05:56,000 --> 00:05:59,000 1 elementu ezker duzula izango da, eta esan dezakezu, 106 00:05:59,000 --> 00:06:02,000 "Hemen, hemen ordenatuko elementu bakar bat da." 107 00:06:02,000 --> 00:06:06,000 Ondoren, algoritmo honen distira hemen da Izan ere, ondorioz 108 00:06:06,000 --> 00:06:09,000 horietako bakoitzak ordenatuko zerrendak behin guztia duzu, 109 00:06:09,000 --> 00:06:12,000 tamaina 1, Ezertarako izango dela dirudi, 110 00:06:12,000 --> 00:06:15,000 hasten zara batuz, eta horiek batuz behin 111 00:06:15,000 --> 00:06:19,000 sortu, azkenik, Rob azkenik ordenatuko bideo zerrenda bat egin zuen. 112 00:06:19,000 --> 00:06:22,000 >> Baina ideia hori urrun Ordenatzeko haratago hedatzen da. 113 00:06:22,000 --> 00:06:26,000 Errekurtsibitate izenez ezagutzen den programa hau kapsulatutako ideia hau da, 114 00:06:26,000 --> 00:06:29,000 ideia horren bidez programa bat dira, 115 00:06:29,000 --> 00:06:32,000 eta zuk zeuk deitu arazo batzuk konpondu ahal izateko, 116 00:06:32,000 --> 00:06:36,000 edo funtzio bat dira programazio-lengoaia testuinguruan jarri 117 00:06:36,000 --> 00:06:39,000 eta ordena arazo bat konpontzeko, funtzioa deitzen zuri 118 00:06:39,000 --> 00:06:42,000 behin eta berriro, eta berriro, baina funtzio 119 00:06:42,000 --> 00:06:44,000 ezin deitu zaitez infinituki hainbat aldiz. 120 00:06:44,000 --> 00:06:47,000 Azkenean beheko izarrekin duzu, eta, beraz, hitz egiten, 121 00:06:47,000 --> 00:06:49,000 eta hard-kodetuak zenbait-base baldintza dioen 122 00:06:49,000 --> 00:06:53,000 Puntu honetan gelditu zeure burua deituz, beraz, prozesu osoa 123 00:06:53,000 --> 00:06:56,000 Izan ere azkenik ez gelditzeko. 124 00:06:56,000 --> 00:06:58,000 Zer esan nahi du benetan esan nahi, recurse? 125 00:06:58,000 --> 00:07:01,000 >> Ikus dezagun, adibide sinple bat, trivial dugu bada, esan, 126 00:07:01,000 --> 00:07:03,000 3 me up Hemen agertokian, norbait eroso bada. 127 00:07:03,000 --> 00:07:06,000 1, sortu, 2 eta 3 dira. 128 00:07:06,000 --> 00:07:09,000 3 nahi baduzu ... etorri hemen. 129 00:07:09,000 --> 00:07:12,000 Ondoan nahi duzun me hemen stand-lerro batean bada, demagun arazo eskuz 130 00:07:12,000 --> 00:07:15,000 Oso kenduz, hemen diren pertsona kopurua zenbatzea. 131 00:07:15,000 --> 00:07:18,000 Baina, Egia, hauek kontatuta adibide guztien nekatuta nago. 132 00:07:18,000 --> 00:07:21,000 Hau da, denbora pixka bat, 1, 2, eta hartu dot, dot, dot joan. 133 00:07:21,000 --> 00:07:23,000 Betiko hartzeko. 134 00:07:23,000 --> 00:07:25,000 Nahiago dut punt arazo hau guztiz laguntza-Zein da zure izena? 135 00:07:25,000 --> 00:07:27,000 Sara. >> Sara, eskubidea. 136 00:07:27,000 --> 00:07:29,000 Kelly. >> Kelly eta? 137 00:07:29,000 --> 00:07:31,000 >> Willy. >> Willy, Sara, Kelly, eta Willy. 138 00:07:31,000 --> 00:07:34,000 Oraintxe bertan jaso dut norbaitek galdera 139 00:07:34,000 --> 00:07:37,000 zenbat pertsona dira fase honetan, eta ez dut ideia. 140 00:07:37,000 --> 00:07:40,000 Hau benetan zerrenda luzea da, eta, beraz, trikimailu hau egin nahi dut ordez. 141 00:07:40,000 --> 00:07:43,000 Pertsona me ondoan lana egiteko eskatu dut, 142 00:07:43,000 --> 00:07:46,000 eta behin zuen egiten da lan gehien egiten 143 00:07:46,000 --> 00:07:49,000 Lan gutxien posible egin dut eta bakarrik 1 gehitu 144 00:07:49,000 --> 00:07:51,000 edozein izanik ere bere erantzuna da, eta, beraz, hemen goaz. 145 00:07:51,000 --> 00:07:54,000 Dut galdetuko zenbat pertsona eszenatokian. 146 00:07:54,000 --> 00:07:57,000 Zenbat pertsona eszenatokian ezkerreko? 147 00:07:57,000 --> 00:08:00,000 Nire ezker? >> Ados, baina ez tranparik. 148 00:08:00,000 --> 00:08:04,000 Hori ona da, zuzena da, baina nahi dugu logika hori jarraitu nahi izanez gero 149 00:08:04,000 --> 00:08:08,000 Demagun, era berean, nahi duzun punt arazo hau ezkerreko 150 00:08:08,000 --> 00:08:11,000 beraz, ez erantzun baino zuzenean joan aurretik eta Buck pasatzeko. 151 00:08:11,000 --> 00:08:14,000 Oh, zenbat pertsona me ezkerreko dira? 152 00:08:14,000 --> 00:08:16,000 Zenbat pertsona ezkerretara daude? 153 00:08:16,000 --> 00:08:18,000 1. 154 00:08:18,000 --> 00:08:27,000 [Barreak] 155 00:08:27,000 --> 00:08:30,000 Ongi da, eta, beraz, 0, eta, beraz, orain Willy egin du 156 00:08:30,000 --> 00:08:33,000 itzuliko da duzun zure erantzuna norabide honetan 0 esanez. 157 00:08:33,000 --> 00:08:36,000 Orain, zer egin behar? >> 1. 158 00:08:36,000 --> 00:08:39,000 Ongi da, beraz, 1 Oraindik duzu, beraz, esan duzu, "eskubidea guztiak, 1. Gehitzeko naiz joan 159 00:08:39,000 --> 00:08:41,000 edozein Willy-en kopuruan izan zen, beraz, 1 + 0. 160 00:08:41,000 --> 00:08:43,000 Zara orain 1 eskubidea erantzuna da, beraz, gaur egun- 161 00:08:43,000 --> 00:08:45,000 1. >> Eta nirea 2 izango litzateke. 162 00:08:45,000 --> 00:08:48,000 Ona, eta, beraz, aurreko 1 erantzun hartzen ari zarela, 163 00:08:48,000 --> 00:08:51,000 egin nahi duzu lan gutxieneko zenbatekoa gehituz, +1 da. 164 00:08:51,000 --> 00:08:55,000 Orain 2, eta gero entregatu me balio? 165 00:08:55,000 --> 00:08:57,000 3, esan nahi dut, barkatu, 2. 166 00:08:57,000 --> 00:08:59,000 Good. 167 00:08:59,000 --> 00:09:02,000 >> Beno, 0 izan dugu ezkerretara. 168 00:09:02,000 --> 00:09:05,000 Ondoren, 1 izan dugu, eta, ondoren, 2 gehitu dugu, 169 00:09:05,000 --> 00:09:07,000 eta, gaur egun, me ari zaren kopurua 2 gozamenerako, 170 00:09:07,000 --> 00:09:10,000 eta, beraz, naiz esaten ados, +1, 3. 171 00:09:10,000 --> 00:09:13,000 Dago, hain zuzen ere 3 pertsona me ondoan zutik etapa honetan, 172 00:09:13,000 --> 00:09:16,000 ondorioz, jakina, genezake egin hau oso linealki 173 00:09:16,000 --> 00:09:19,000 Oso nabarmenak moda asko, baina zer egin dugu benetan? 174 00:09:19,000 --> 00:09:21,000 3 tamaina arazo bat hartu genuen hasieran. 175 00:09:21,000 --> 00:09:24,000 Hautsi dugu tamaina 2 arazo bat sartu, 176 00:09:24,000 --> 00:09:27,000 ondoren, tamaina 1 arazoa, eta, ondoren, behin betiko oinarri kasuan 177 00:09:27,000 --> 00:09:29,000 izan zen benetan, oh, ez inork ez dago, 178 00:09:29,000 --> 00:09:33,000 puntua Willy itzuli eraginkortasunez hard-kodetuak erantzun pare bat aldiz, 179 00:09:33,000 --> 00:09:36,000 eta bigarrena izan zen, ondoren bubbled, bubbled, bubbled sortu 180 00:09:36,000 --> 00:09:39,000 eta, ondoren, hau 1 gehiago gehituz 181 00:09:39,000 --> 00:09:41,000 inplementatu dugu errekurtsio oinarrizko ideia hau. 182 00:09:41,000 --> 00:09:44,000 >> Orain, baina kasu honetan ez da benetan arazo bat konpontzen 183 00:09:44,000 --> 00:09:46,000 gehiago eraginkortasunez ondoren ikusi dugu, beraz, oso urrun. 184 00:09:46,000 --> 00:09:48,000 Baina algoritmo etapa egin dugu horrela, orain arte pentsatzen. 185 00:09:48,000 --> 00:09:51,000 8 paper-pieza Edukien gainean izan genuen, 186 00:09:51,000 --> 00:09:55,000 video Sean zen kopurua 7 bila, eta zer egin ez benetan? 187 00:09:55,000 --> 00:09:58,000 Beno, ez zuen egin arrail edozein motatako eta konkistatzeko. 188 00:09:58,000 --> 00:10:01,000 Ez zuen egin errekurtsio edozein motatako. 189 00:10:01,000 --> 00:10:03,000 Deigarria egin zuen algoritmo lineal hau. 190 00:10:03,000 --> 00:10:07,000 Baina etapa horrela antolatu zenbakiak ideia sartu dugu bizi azken astean 191 00:10:07,000 --> 00:10:09,000 ondoren instinto hau erditik joan behar izan genuen, 192 00:10:09,000 --> 00:10:13,000 eta amaitzen da tamaina tamaina 4 4 edo zerrenda beste zerrenda txikiagoa izan genuen, 193 00:10:13,000 --> 00:10:17,000 zehatza eta, ondoren, arazo bera izan genuen, eta, beraz, behin eta berriz errepikatzen dugu, behin eta berriz, behin eta berriz errepikatzen. 194 00:10:17,000 --> 00:10:19,000 Beste era batera esanda, recursed. 195 00:10:19,000 --> 00:10:24,000 Eskerrik asko gure 3 boluntario hemen gurekin errekurtsio erakutsiz. 196 00:10:24,000 --> 00:10:28,000 >> Ikus dezagun ezin dugu egin orain apur bat gehiago hormigoi, 197 00:10:28,000 --> 00:10:30,000 arazo bat berriro egin genezake nahiko erraz konpontzeko, 198 00:10:30,000 --> 00:10:34,000 baina oinarrizko ideia hori ezarrita harri hurrats gisa erabiliko dugu. 199 00:10:34,000 --> 00:10:37,000 Nahi dut zenbaki-sorta bat summation konputatu nahi izanez gero, 200 00:10:37,000 --> 00:10:39,000 Adibidez, 3 zenbakia pasatzen bada, 201 00:10:39,000 --> 00:10:42,000 Sigma 3 balioa eman nahi dut 202 00:10:42,000 --> 00:10:46,000 beraz, batura 3 + 2 + 1 + 0. 203 00:10:46,000 --> 00:10:48,000 Erantzun 6 itzuli nahi dut, 204 00:10:48,000 --> 00:10:51,000 beraz, hau sigma funtzioa, summation funtzio hau gauzatzeko dugu 205 00:10:51,000 --> 00:10:54,000 eta, berriro ere, sarrera hartzen du, eta, ondoren, summation itzultzen 206 00:10:54,000 --> 00:10:57,000 zenbaki hori modu behera 0. 207 00:10:57,000 --> 00:10:59,000 Horretarako izan dugu nahiko besterik gabe, ezta? 208 00:10:59,000 --> 00:11:01,000 Begizta batean egitura mota batzuk egin izan dugu, 209 00:11:01,000 --> 00:11:04,000 beraz aurrera nau eta hau hasi. 210 00:11:04,000 --> 00:11:07,000 >> Artean, besteak beste stdio.h. 211 00:11:07,000 --> 00:11:09,000 Neure burua me nagusitan hemen lan egiteko. 212 00:11:09,000 --> 00:11:12,000 Dezagun, gorde hau sigma.c gisa. 213 00:11:12,000 --> 00:11:14,000 Orduan hemen joan naiz joan, eta int n bat deklaratzen dut, 214 00:11:14,000 --> 00:11:18,000 eta honako hauek egin ahal izateko, erabiltzaileak ez du kooperatu noa. 215 00:11:18,000 --> 00:11:22,000 Erabiltzaileak ez du zenbaki positibo bat eman dit 216 00:11:22,000 --> 00:11:26,000 utzi aurrera eta gonbita n = GetInt 217 00:11:26,000 --> 00:11:28,000 eta utzi eman dit zer egin argibideak batzuk, 218 00:11:28,000 --> 00:11:33,000 beraz, printf ("zenbaki oso positiboak mesedez"). 219 00:11:33,000 --> 00:11:39,000 Just zerbait nahiko simple hau atsegin dute denbora line 14 hit dugu 220 00:11:39,000 --> 00:11:42,000 zenbaki oso positibo bat ustez n. 221 00:11:42,000 --> 00:11:44,000 >> Orain egin dezagun zerbait. 222 00:11:44,000 --> 00:11:50,000 Dezagun aurrera eta summation kalkulatzeko, beraz, int batura = sigma (n). 223 00:11:50,000 --> 00:11:54,000 Sigma besterik ez da summation, beraz, besterik ez dut idatzi modu fancier. 224 00:11:54,000 --> 00:11:56,000 Deitu besterik ez dugu han sigma da. 225 00:11:56,000 --> 00:11:58,000 Batura da, eta gaur egun, emaitza inprimatu dut joan, 226 00:11:58,000 --> 00:12:08,000 printf ("batura% d \ n", batura). 227 00:12:08,000 --> 00:12:11,000 Eta gero, 0-ra itzuliko dut neurri ona. 228 00:12:11,000 --> 00:12:15,000 Programa behar hori guztia egin dugu interesgarria zatian izan ezik, 229 00:12:15,000 --> 00:12:18,000 hau da, benetan ezartzeko sigma funtzioa. 230 00:12:18,000 --> 00:12:22,000 >> Behera joan me hemen beheraino, eta utzi Funtzio sigma deklaratzeko me. 231 00:12:22,000 --> 00:12:26,000 Handia lortu aldagai mota osokoa, 232 00:12:26,000 --> 00:12:30,000 eta zer datu-mota ez sigma from zentzuzkoa itzuli nahi dut? 233 00:12:30,000 --> 00:12:34,000 Int, nire itxaropenak dator line 15 nahi dudalako. 234 00:12:34,000 --> 00:12:37,000 Hemen utzi aurrera, eta hau ezartzeko 235 00:12:37,000 --> 00:12:41,000 modu nahiko sinplea da. 236 00:12:41,000 --> 00:12:45,000 >> Dezagun aurrera eta esan int batura = 0, 237 00:12:45,000 --> 00:12:47,000 eta, gaur egun, begizta txiki bat hemen joan noa 238 00:12:47,000 --> 00:12:50,000 den honen antzeko zerbait esan nahi du, 239 00:12:50,000 --> 00:13:01,000 for (int i = 0; I <= kopurua; i + +) batura + = i. 240 00:13:01,000 --> 00:13:05,000 Eta gero, batura itzuli egingo naiz. 241 00:13:05,000 --> 00:13:07,000 Ezarri nuen modu edozein zenbaki. 242 00:13:07,000 --> 00:13:09,000 Erabili nuen bitartean begizta bat. 243 00:13:09,000 --> 00:13:11,000 Saltatu nuen batura aldagaia erabiltzen dut nahi izanez gero, 244 00:13:11,000 --> 00:13:15,000 baina azken finean, funtzio bat besterik ez dugu egin ez badut goof adierazten batura 0 da. 245 00:13:15,000 --> 00:13:18,000 Ondoren iterates 0-tik gora zenbaki bidez, 246 00:13:18,000 --> 00:13:23,000 eta iterazio bakoitzean uneko balioa hori gehitzen da batura, eta ondoren batura itzultzen du. 247 00:13:23,000 --> 00:13:25,000 >> Orain, ez optimizazioa apur bat hemen. 248 00:13:25,000 --> 00:13:29,000 Hau da, ziur aski urrats bat alferrik galtzen da, baina hala izan da. Hori da orain ongi. 249 00:13:29,000 --> 00:13:32,000 Gara, gutxienez, sakon eta 0 modu guztiak joan gora. 250 00:13:32,000 --> 00:13:34,000 Ez da oso gogorra eta nahiko erraza da, 251 00:13:34,000 --> 00:13:37,000 baina bihurtzen da sigma funtzioa duten aukera bera dugu 252 00:13:37,000 --> 00:13:39,000 egin dugun bezala, hemen eszenatokian. 253 00:13:39,000 --> 00:13:42,000 Etapa On zenbatuko dugu zenbat pertsona izan ziren ondoan me, 254 00:13:42,000 --> 00:13:47,000 baizik eta nahi izan dugu, 3 + 2 + 1 zenbatu nahi izanez gero 255 00:13:47,000 --> 00:13:51,000 0 behera, era berean, ezin izan dugu punt funtzio 256 00:13:51,000 --> 00:13:55,000 egingo duten I ordez recursive bezala deskribatzeko. 257 00:13:55,000 --> 00:13:57,000 Hemen dezagun behatu ez azkar bat egiaztatu eta ziurtatu ez nuen goof. 258 00:13:57,000 --> 00:14:00,000 >> Gutxienez programa honetan gauza bat oker I egin ez da ezagutzen dut. 259 00:14:00,000 --> 00:14:04,000 Noiz sartu hit I am me at yelling edozein motatako lortu nahi dut? 260 00:14:04,000 --> 00:14:06,000 Zer egingo buruz behar yelled dut? 261 00:14:06,000 --> 00:14:11,000 Bai, prototipoa ahaztu dut, deitu sigma 15 on line funtzio bat erabiltzen dut, beraz, 262 00:14:11,000 --> 00:14:16,000 baina ez line 22 arte deklaratu eta, beraz, onena modu proaktiboan sortu dut hemen 263 00:14:16,000 --> 00:14:22,000 eta prototipo bat aldarrikatu, eta int sigma (int zenbakia) esan dut, eta hori da. 264 00:14:22,000 --> 00:14:24,000 Beheko aldean ezarri da. 265 00:14:24,000 --> 00:14:27,000 >> Edo hau konpontzeko beste modu bat izan nuen, 266 00:14:27,000 --> 00:14:30,000 Funtzio eraman izan dut sortu, hau da, ez da txarra, 267 00:14:30,000 --> 00:14:32,000 baina, gutxienez, zure programak hasten luze lortzeko, Egia, 268 00:14:32,000 --> 00:14:35,000 Nik uste dut beti nagusia izatea goialdean balio batzuk 269 00:14:35,000 --> 00:14:38,000 beraz, fitxategi irakurlea ireki daiteke eta, ondoren, berehala ikusiko 270 00:14:38,000 --> 00:14:40,000 programa horren bidez bilatzeko beharrik gabe egiten 271 00:14:40,000 --> 00:14:42,000 duten funtzio nagusia bila. 272 00:14:42,000 --> 00:14:49,000 Goazen behera nire terminal leihoa Hemen, sigma egin sigma egiten saiatu, 273 00:14:49,000 --> 00:14:51,000 eta dena izorratu nuen hemen ere. 274 00:14:51,000 --> 00:14:55,000 Funtzioa GetInt adierazpen inplizitua ahaztu dut zer gehiago egin esan nahi du? 275 00:14:55,000 --> 00:14:57,000 [Inaudible-ikaslea] 276 00:14:57,000 --> 00:15:00,000 Ona, beraz, itxuraz, eta, beraz, komun akats bat jarri hau hemen utzi, 277 00:15:00,000 --> 00:15:04,000 cs50.h, eta, orain, goazen atzera nire terminal leihoa. 278 00:15:04,000 --> 00:15:08,000 >> Pantaila garbitu dut, eta berrabiarazi egin sigma dut. 279 00:15:08,000 --> 00:15:11,000 Konpilatu dirudi. Dezagun exekutatu me now sigma. 280 00:15:11,000 --> 00:15:15,000 3 zenbakia idatzi dut, eta 6 lortu nuen, beraz, ez da txeke bat zorrotza, 281 00:15:15,000 --> 00:15:18,000 baina, gutxienez, hasiera batean lan egiten ari dela dirudi, baina gaur egun dezagun rip gain, 282 00:15:18,000 --> 00:15:21,000 dezagun benetan errekurtsio ideia leverage, berriz, 283 00:15:21,000 --> 00:15:24,000 testuinguruan oso erraza da, beraz, aste batzuk denbora 284 00:15:24,000 --> 00:15:27,000 fancier datu egiturak aztertuz hasten gara array baino 285 00:15:27,000 --> 00:15:30,000 toolkit, beste tresna dugu eta horrek 286 00:15:30,000 --> 00:15:33,000 manipulatzeko datuen egitura horiek ikusi dugu. 287 00:15:33,000 --> 00:15:36,000 Etorriko ikuspegia, loop-oinarritutako hurbilketa bat da. 288 00:15:36,000 --> 00:15:39,000 >> Let me ordez orain hau. 289 00:15:39,000 --> 00:15:44,000 Let me ordez esan zenbakiaren summation 290 00:15:44,000 --> 00:15:48,000 : 0 behera benetan gauza bera 291 00:15:48,000 --> 00:15:53,000 zenbakia + sigma (zenbakia - 1). 292 00:15:53,000 --> 00:15:57,000 Beste era batera esanda, etapa on bezala punted me ondoan bakoitzaren I, 293 00:15:57,000 --> 00:16:00,000 eta aldi berean mantendu dute azkenik dugu bottomed arte Willy at punting, 294 00:16:00,000 --> 00:16:03,000 0 bezala erantzun gogor kodetuak itzuli zuten. 295 00:16:03,000 --> 00:16:07,000 Hemen ari gara gaur egun, era berean, sigma punting 296 00:16:07,000 --> 00:16:10,000 Halaber, funtzio bera izan zen jatorriz izenekoa,, baina funtsezko ezagutzeko hemen 297 00:16:10,000 --> 00:16:12,000 ari garen ez sigma berdinean deituz. 298 00:16:12,000 --> 00:16:14,000 Ez ari gara n pasatzerakoan. 299 00:16:14,000 --> 00:16:17,000 Kopurua argi eta garbi ari gara pasatzen - 1, 300 00:16:17,000 --> 00:16:20,000 beraz, apur bat txikiagoak arazoa, apur bat txikiagoak arazoa. 301 00:16:20,000 --> 00:16:23,000 >> Zoritxarrez, hori ez da oraindik nahiko irtenbide bat, eta konpondu aurretik 302 00:16:23,000 --> 00:16:26,000 zer jauzi baliteke out bistako batzuk 303 00:16:26,000 --> 00:16:28,000 utzi aurretik joan eta berrabiarazi egin. 304 00:16:28,000 --> 00:16:30,000 Ongi konpilatu dirudi. 305 00:16:30,000 --> 00:16:32,000 Sigma berrabiarazi me 6. 306 00:16:32,000 --> 00:16:37,000 Whoops, utzi sigma berrabiarazi me 6. 307 00:16:37,000 --> 00:16:42,000 Ikusi dugu, aurretik denbora ustekabean a izan arren ere. 308 00:16:42,000 --> 00:16:48,000 Zergatik segmentaziuo hutsegitea críptica hau lortu dut? Bai. 309 00:16:48,000 --> 00:16:50,000 [Inaudible-ikaslea] 310 00:16:50,000 --> 00:16:53,000 Base kasuan ez da, eta, zehazki, zer ziurrenik gertatu da? 311 00:16:53,000 --> 00:16:58,000 Zer portaera sintoma bat da? 312 00:16:58,000 --> 00:17:00,000 Esan apur bat altuagoa. 313 00:17:00,000 --> 00:17:02,000 [Inaudible-ikaslea] 314 00:17:02,000 --> 00:17:05,000 Begizta infinitu eraginkortasunez eta loops infinitua arazoa da 315 00:17:05,000 --> 00:17:08,000 errekurtsio inplikatzen dute, kasu honetan, funtzio bat bera deituz, 316 00:17:08,000 --> 00:17:10,000 bakoitzak funtzio bat deitu zer gertatzen da? 317 00:17:10,000 --> 00:17:13,000 Beno, uste atzera nola ordenagailu batean memoria ezarri dugu. 318 00:17:13,000 --> 00:17:16,000 Ez dagoela, pila, behealdean izeneko zatia memoria esan dugu, 319 00:17:16,000 --> 00:17:19,000 eta bakoitzak funtzio bat deitu apur bat gehiago memoria lortzen jarri 320 00:17:19,000 --> 00:17:24,000 funtzioa aldagai lokalak edo parametroak duten deiturikoak pila honetan, 321 00:17:24,000 --> 00:17:27,000 hala badagokio sigma sigma deiak dei sigma sigma deiak 322 00:17:27,000 --> 00:17:29,000  deiak sigma non istorioa hau? 323 00:17:29,000 --> 00:17:31,000 >> Beno, azkenean overruns guztizko zenbatekoa 324 00:17:31,000 --> 00:17:33,000 memoria duzula zure ordenagailuan eskuragarri. 325 00:17:33,000 --> 00:17:37,000 Ari ustezko lo barruan segmentu inbaditu, 326 00:17:37,000 --> 00:17:40,000 segmentaziuo hutsegitea hau, core isuritako 327 00:17:40,000 --> 00:17:43,000 eta zer core iraultzeko esan nahi dut orain dela core izeneko fitxategi bat 328 00:17:43,000 --> 00:17:46,000 fitxategi bat da zeroen eta bai duten 329 00:17:46,000 --> 00:17:49,000 benetan etorkizunean diagnostikoan erabilgarria izango da. 330 00:17:49,000 --> 00:17:52,000 Begi-bistakoa da ez bada non zure bug 331 00:17:52,000 --> 00:17:54,000 benetan egin dezakezu auzitegiko azterketa apur bat, eta, beraz, hitz egiten, 332 00:17:54,000 --> 00:17:58,000 core dump fitxategia hau, eta, berriro ere, besterik ez da zeroen eta bai sorta osoa 333 00:17:58,000 --> 00:18:02,000 funtsean zure programaren memoria egoera adierazten 334 00:18:02,000 --> 00:18:05,000 une kraskatu modu honetan. 335 00:18:05,000 --> 00:18:11,000 >> Fix Hemen da ezin dugula besterik ez blindly itzultzeko sigma, 336 00:18:11,000 --> 00:18:14,000 kopurua + apur bat txikiagoak arazoa sigma. 337 00:18:14,000 --> 00:18:16,000 Base kasuan nolabaiteko izan behar dugu hemen, 338 00:18:16,000 --> 00:18:19,000 eta zer egin behar oinarriaren kasuan seguruenik izango ote da? 339 00:18:19,000 --> 00:18:22,000 [Inaudible-ikaslea] 340 00:18:22,000 --> 00:18:25,000 Ongi da, eta, beraz, zenbaki positiboa da benetan behar dugu itzuli honetan, 341 00:18:25,000 --> 00:18:29,000 edo beste modu bat jarri, kopurua bada, esan, <= 0 342 00:18:29,000 --> 00:18:32,000 badakizu zer, aurrera eta 0-ra itzuliko naiz, 343 00:18:32,000 --> 00:18:36,000 askoz ere atsegin Willy egin, eta bestela, aurretik joan naiz joan 344 00:18:36,000 --> 00:18:41,000 eta itzuli honetan, beraz, ez da askoz laburragoa 345 00:18:41,000 --> 00:18:44,000 etorriko bertsioa harrotua dugun lehen erabiliz loop bat baino, 346 00:18:44,000 --> 00:18:48,000 baina ez da dotorezia mota da hau. 347 00:18:48,000 --> 00:18:51,000 Zenbaki batzuk itzuli eta math hau guztia eszenikoen ordez 348 00:18:51,000 --> 00:18:54,000 eta gauzak gehituz aldagai tokiko 349 00:18:54,000 --> 00:18:57,000 ordez, esaten ari zaren "Ados, hau da super erraza arazo bat bada, 350 00:18:57,000 --> 00:19:01,000 zenbakia <0 bezala, let me berehala itzultzeko 0. " 351 00:19:01,000 --> 00:19:03,000 >> Ez dugu onartzen negatiboa zenbakiak sartuko 352 00:19:03,000 --> 00:19:05,000 hain gogorra kodea 0 balioa joan naiz. 353 00:19:05,000 --> 00:19:08,000 Baina, bestela, summing ideia hau martxan jarri ahal izateko 354 00:19:08,000 --> 00:19:11,000 zenbaki horiek guztiak elkarrekin eraginkortasunez dezakezu txiki ziztadak hartu 355 00:19:11,000 --> 00:19:14,000 arazoa da, askoz ere atsegin Hemen genuen agertokian, 356 00:19:14,000 --> 00:19:18,000 ondoren, punt arazoa gainerako pertsona hurrengo 357 00:19:18,000 --> 00:19:20,000 baina kasu honetan hurrengo pertsona bakarrik da. 358 00:19:20,000 --> 00:19:22,000 Berdinean izeneko funtzio bat da. 359 00:19:22,000 --> 00:19:25,000 Just aldi bakoitzean gainditu txikiagoak eta txikiagoak eta arazo bat txikiagoa da, 360 00:19:25,000 --> 00:19:28,000 eta nahiz eta ez nahiko formalizatu kodea gauzak dugu hemen 361 00:19:28,000 --> 00:19:33,000 hau da, zehazki zer izan zen telefonoaren liburua aste 0. 362 00:19:33,000 --> 00:19:36,000 Hau da, zehazki zer zen joan aste iraganeko Sean 363 00:19:36,000 --> 00:19:39,000 eta gure zenbakiak bilatzen manifestazioak. 364 00:19:39,000 --> 00:19:42,000 Arazo bat da, hartu eta zatituz behin eta berriro. 365 00:19:42,000 --> 00:19:44,000 >> Beste era batera esanda, ez dago modu bat da, gaur egun itzultzeko 366 00:19:44,000 --> 00:19:47,000 mundu honetan benetako eraikuntza, goi-mailako eraikuntza 367 00:19:47,000 --> 00:19:51,000 zatitzea eta konkistatzeko, eta gauza behin eta berriro 368 00:19:51,000 --> 00:19:56,000 kodea, eta, beraz, ikusi ahal izango dugu berriro, denboran zehar zerbait da. 369 00:19:56,000 --> 00:20:00,000 Orain, bat alde batera utzita, Oraindik errekurtsio berri bada, gutxienez, behar duzu ulertzen gaur egun 370 00:20:00,000 --> 00:20:02,000 zergatik hau dibertigarria da. 371 00:20:02,000 --> 00:20:05,000 Google.com joan noa, 372 00:20:05,000 --> 00:20:17,000 eta zenbait aholku eta trikimailuak errekurtsio bilatzeko noa, sartu. 373 00:20:17,000 --> 00:20:21,000 Esan pertsona duzu ondoan ziren ez bada oraintxe barre. 374 00:20:21,000 --> 00:20:23,000 Ba al errekurtsio esan nahi al duzu? 375 00:20:23,000 --> 00:20:25,000 Esan nahi zenuen-ah, ez gara. 376 00:20:25,000 --> 00:20:28,000 Ongi da, orain dela gainerako guztientzat. 377 00:20:28,000 --> 00:20:30,000 Un poco de Pazko arrautza Txertatutako nonbait dago Google. 378 00:20:30,000 --> 00:20:33,000 Bat alde batera utzita, estekak ikastaroaren web orrian jarri dugu 379 00:20:33,000 --> 00:20:36,000 gaur egun Ordenatzeko hainbat algoritmo sareta hau da, 380 00:20:36,000 --> 00:20:39,000 horietako batzuk, astetik begiratu ditugu, baina zer nice bistaratze honi buruz 381 00:20:39,000 --> 00:20:43,000 saiatu zure kontuan itzulbiratu, algoritmoak zerikusia inguruan hainbat gauza 382 00:20:43,000 --> 00:20:46,000 ezagutu ahal izango dituzu oso erraz sarrera-mota ezberdinak hasteko. 383 00:20:46,000 --> 00:20:50,000 Sarrerek trukatuta, batez ere input ordenatuta, input ausazko eta abar. 384 00:20:50,000 --> 00:20:53,000 Da, saiatu berriz, bereizteko gauza horiek zure kontuan 385 00:20:53,000 --> 00:20:57,000 konturatzen ikastaroa Hitzaldiak orrian web orrian URL honetan 386 00:20:57,000 --> 00:21:00,000 horietako batzuetan zehar arrazoia lagun dezake. 387 00:21:00,000 --> 00:21:05,000 >> Gaur egun, azkenik, lortu dugu arazo hau konpondu ahal izateko pixka bat atzera, 388 00:21:05,000 --> 00:21:08,000 izan zen swap funtzioa besterik ez du funtzionatzen. 389 00:21:08,000 --> 00:21:12,000 eta zer funtzio swap honekin funtsezko arazoa zen, 390 00:21:12,000 --> 00:21:15,000 helburua izan zen, berriz, balio bat trukatzeko hemen eta hemen 391 00:21:15,000 --> 00:21:17,000 hala nola, hori gertatzen da? 392 00:21:17,000 --> 00:21:20,000 Hau ez da ondo lan egitea. Zergatik? 393 00:21:20,000 --> 00:21:22,000 Bai. 394 00:21:22,000 --> 00:21:28,000 [Inaudible-ikaslea] 395 00:21:28,000 --> 00:21:31,000 Zehazki, bugginess honen azalpen 396 00:21:31,000 --> 00:21:34,000 besterik ez zen C funtzioak deitzen duzulako 397 00:21:34,000 --> 00:21:38,000 eta funtzioak horiek argumenturik hartzen, a eta b hemen bezala, 398 00:21:38,000 --> 00:21:42,000 edozein izanda ere balio du funtzio hori ari zaren eskaintzen kopiak pasatzen ari zaren. 399 00:21:42,000 --> 00:21:46,000 Ez zara jatorrizko balioak bere burua, 400 00:21:46,000 --> 00:21:49,000 beraz, hau ikusi genuen buggyc testuinguruan, 401 00:21:49,000 --> 00:21:52,000 buggy3.c, pixka bat begiratu honen antzeko zerbait. 402 00:21:52,000 --> 00:21:57,000 >> Gogoratu izan ditugu, x eta y 1 eta 2 hasieratu, hurrenez hurren. 403 00:21:57,000 --> 00:21:59,000 Inprimatutako dugu zer izan ziren. 404 00:21:59,000 --> 00:22:03,000 Erreklamatu ondoren nintzen ditut aldaketa x, y swap telefonora deituz. 405 00:22:03,000 --> 00:22:06,000 Baina arazoa zen aldaketa hori lan egin zuen, 406 00:22:06,000 --> 00:22:10,000 swap-esparrua, baina soilik funtzionatzen bera. 407 00:22:10,000 --> 00:22:13,000 Bezain laster line 40 truka balio horiek hit 408 00:22:13,000 --> 00:22:16,000 ziren bota, eta, beraz, ez da ezer 409 00:22:16,000 --> 00:22:21,000 jatorrizko funtzio nagusia izan zen benetan aldatu guztiak 410 00:22:21,000 --> 00:22:26,000 hala badagokio uste baduzu, orduan zer itxura gure memoria dagokionez 411 00:22:26,000 --> 00:22:29,000 taula ezkerreko eskuko hau adierazten du-bada 412 00:22:29,000 --> 00:22:33,000 eta nire onena egingo dut guztiontzat ikus-taula ezkerreko eskuko hau 413 00:22:33,000 --> 00:22:37,000 adierazten du, esan, zure RAM, eta pila hazten da modu honetan, 414 00:22:37,000 --> 00:22:43,000 eta nagusiak bezalako funtzio bat deitu dugu, eta nagusia 2 aldagai lokalak, x eta y, 415 00:22:43,000 --> 00:22:48,000 dezagun deskribatzeko x bai hemen, eta utzi hauek deskribatzeko y hemen, 416 00:22:48,000 --> 00:22:55,000 dezagun balioak 1 eta 2 jarri, hau hemen nagusia da, beraz, 417 00:22:55,000 --> 00:22:58,000 eta nagusiak swap funtzioa deiak sistema eragilearen 418 00:22:58,000 --> 00:23:02,000 swap funtzioa ematen bere memoria swath propioa pilaketan 419 00:23:02,000 --> 00:23:04,000 bere pilaketan markoa propioa, eta, beraz, hitz egiten. 420 00:23:04,000 --> 00:23:08,000 Era berean, 32 ints horiek bit esleitzen. 421 00:23:08,000 --> 00:23:11,000 Horietako bat, eta b deitu gertatzen da, baina hori erabat arbitrarioa da. 422 00:23:11,000 --> 00:23:13,000 Deitu daiteke edozein izanda ere nahi, baina zer gertatzen da nagusiak 423 00:23:13,000 --> 00:23:19,000 deiak swap hau 1 hartzen du, kopia bat han jartzen, kopia bat jartzen du. 424 00:23:19,000 --> 00:23:23,000 >> 1 swap tokiko beste aldagaia da, baina, deitu zer? >> Tmp. 425 00:23:23,000 --> 00:23:27,000 Aurkitu, eta, beraz, neure burua ematen dit beste 32 bit hemen utzi, 426 00:23:27,000 --> 00:23:29,000 eta zer ez egin funtzio honetan I? 427 00:23:29,000 --> 00:23:34,000 Int tmp lortzen, eta, beraz, du 1 esan dut, beraz, hau egin nuen adibide honetan azken aldiz jokatu dugu. 428 00:23:34,000 --> 00:23:39,000 Ondoren lortzen b, beraz, b 2, eta, beraz, gaur egun hau bihurtzen da: 2, 429 00:23:39,000 --> 00:23:42,000 eta gaur egun b lortzen temp, beraz, temp 1 430 00:23:42,000 --> 00:23:44,000 beraz, gaur egun b bihurtzen da. 431 00:23:44,000 --> 00:23:46,000 Hori handia da. Lan egin. 432 00:23:46,000 --> 00:23:49,000 Baina orduan bezain laster, funtzioak 433 00:23:49,000 --> 00:23:52,000 swap memoria eraginkortasunez desagertzen beraz, berrerabili daiteke 434 00:23:52,000 --> 00:23:58,000 etorkizunean beste funtzio batzuk, eta nagusietako bat da, jakina, erabat aldatu gabe. 435 00:23:58,000 --> 00:24:00,000 Funtsean, arazo hau konpontzeko modu bat behar dugu, 436 00:24:00,000 --> 00:24:03,000 eta, azkenik, gaur egun hau egiten Horren bidez, modu bat izan dugu 437 00:24:03,000 --> 00:24:06,000 zerbait erakuslea izeneko aurkeztu ahal izango dugu. 438 00:24:06,000 --> 00:24:09,000 Bihurtzen da, arazo hau konpondu ahal izango dugu 439 00:24:09,000 --> 00:24:12,000 x eta y kopiak ez pasa 440 00:24:12,000 --> 00:24:18,000 baina zer pasatu ordez, ez, uste duzu swap funtzioa? 441 00:24:18,000 --> 00:24:20,000 Bai, helbide buruzko zer? 442 00:24:20,000 --> 00:24:22,000 Ez dugu benetan helbide buruzko xehetasun askoz ere hitz egin zuen, 443 00:24:22,000 --> 00:24:25,000 baina arbel hau nire ordenagailuko memorian adierazten badu 444 00:24:25,000 --> 00:24:28,000 zalantzarik gabe izan dugu bytes nire RAM zenbakikuntza 445 00:24:28,000 --> 00:24:31,000 eta esan byte # 1 da, hau da, byte # 2 # 3 byte 446 00:24:31,000 --> 00:24:35,000 byte # 4 byte # ... 2 milioi daukat 2 RAM gigabyte bada, 447 00:24:35,000 --> 00:24:38,000 beraz, zalantzarik gabe izan dugu batzuk zenbakitze arbitrarioak eskema 448 00:24:38,000 --> 00:24:41,000 nire ordenagailuaren memoria banakako bytes guztiak. 449 00:24:41,000 --> 00:24:43,000 >> Zer ordez bada swap deitzen I 450 00:24:43,000 --> 00:24:47,000 x eta y kopiak gainditu baino 451 00:24:47,000 --> 00:24:51,000 zergatik ez x helbidea hemen ordez igaroko da, 452 00:24:51,000 --> 00:24:55,000 y helbidea hemen, funtsean posta helbidea 453 00:24:55,000 --> 00:24:59,000 Ondoren, x eta y swap delako, baina informatuta 454 00:24:59,000 --> 00:25:01,000 x eta y memoria helbidea, 455 00:25:01,000 --> 00:25:04,000 ondoren, trukatu, entrenatu dugu berarekin pixka bat, 456 00:25:04,000 --> 00:25:07,000 potentzialki helbidea gidatuko izan zuen, eta, beraz, hitz egiten, 457 00:25:07,000 --> 00:25:11,000 x, eta bertan kopurua aldatzeko, eta gero y helbidea gidatu 458 00:25:11,000 --> 00:25:16,000 zenbakia aldatu bitartean, nahiz eta ez benetan balio horiek berak kopiak, 459 00:25:16,000 --> 00:25:19,000 beraz, nahiz eta hitz honi buruz nagusia memoria bezala 460 00:25:19,000 --> 00:25:23,000 eta hau ari swap memoria indartsu eta C zati arriskutsua 461 00:25:23,000 --> 00:25:28,000 funtzio edozein memoria ukitu edozein ordenagailuan, 462 00:25:28,000 --> 00:25:32,000 eta hau indartsua da oso fancy gauza egin dezakezu ordenagailua C. programak 463 00:25:32,000 --> 00:25:36,000 Arriskutsua da dezakezu ere hondatzeko oso erraz. 464 00:25:36,000 --> 00:25:39,000 Izan ere, egun hauetan programetan modu ohikoena bat ustiatu ahal izateko 465 00:25:39,000 --> 00:25:42,000 oraindik programatzailea ez egiteko konturatzen 466 00:25:42,000 --> 00:25:45,000 zuen datuak bat egitea ahalbidetzen 467 00:25:45,000 --> 00:25:49,000 helburua ez zen memoria kokalekua idatzi behar da. 468 00:25:49,000 --> 00:25:51,000 >> Esate baterako, bere 10. Tamaina array bat adierazten 469 00:25:51,000 --> 00:25:56,000 baina gero, ustekabean array hori memoria 11 byte jarri saiatzen da, 470 00:25:56,000 --> 00:25:59,000 eta memoria zati ez diren baliozko ukitu hasten zara. 471 00:25:59,000 --> 00:26:02,000 Just contextual honetan, batzuk baliteke jakin 472 00:26:02,000 --> 00:26:06,000 software askotan galdetzen serie zenbakiak, edo izena emateko gakoak, 473 00:26:06,000 --> 00:26:08,000 Photoshop eta Word eta programa hau atsegin dute. 474 00:26:08,000 --> 00:26:12,000 Existitzen arrailak, batzuk bezala ezagutzen, online programa txiki bat exekutatu ahal izango duzu, 475 00:26:12,000 --> 00:26:14,000 eta voila, serie-zenbakia eskaera gehiago ez. 476 00:26:14,000 --> 00:26:16,000 Nola lan? 477 00:26:16,000 --> 00:26:21,000 Kasu askotan, gauza horiek, besterik gabe, ordenagailu aurkitzeko 478 00:26:21,000 --> 00:26:24,000 ordenagailuaren zeroen eta bai testu-segmentu 479 00:26:24,000 --> 00:26:28,000 non funtzio hori non serie-zenbakia eskatu da, 480 00:26:28,000 --> 00:26:31,000 eta espazio hori guztia "" gainidatziko duzu, edo programa exekutatzen ari den bitartean 481 00:26:31,000 --> 00:26:33,000 irudikatu dezakezu gakoa da benetan non gordetzen 482 00:26:33,000 --> 00:26:37,000 zerbait izeneko araztaileak erabiliz, eta software modu crack dezakezu. 483 00:26:37,000 --> 00:26:40,000 Hau ez da, hori da gure helburua esan hurrengo bi egun, 484 00:26:40,000 --> 00:26:42,000 baina oso mundu real-Adar askoko du. 485 00:26:42,000 --> 00:26:45,000 Hori gertatzen da software lapurreta inplikatzeko, 486 00:26:45,000 --> 00:26:47,000 baina ez da makina osoa konpromisoa ere. 487 00:26:47,000 --> 00:26:50,000 >> Izan ere, webgune egun horiek ustiatzen 488 00:26:50,000 --> 00:26:53,000 eta arriskutsua eta datuak leaked eta pasahitzak lapurtzen dira 489 00:26:53,000 --> 00:26:58,000 hau askotan oso bat memoria kudeaketa txarra dagokio, 490 00:26:58,000 --> 00:27:01,000 edo, datu-base kasuan, porrota aurrea 491 00:27:01,000 --> 00:27:03,000 adversarial sarrera, horrela gehiago datozen asteetan, 492 00:27:03,000 --> 00:27:07,000 baina orain kalteak sort preview Sneak ahal izango duzu 493 00:27:07,000 --> 00:27:11,000 ez da gauzak nola kanpaia azpian lan ulertzeko. 494 00:27:11,000 --> 00:27:14,000 Dezagun zergatik hori hautsi ulertzeko 495 00:27:14,000 --> 00:27:17,000 tresna bat duten, gero eta gehiago erabilgarria izango da 496 00:27:17,000 --> 00:27:19,000 gure programak lortu konplexuagoak. 497 00:27:19,000 --> 00:27:21,000 Horrela urrun denean zure programaren akats bat izan duzun 498 00:27:21,000 --> 00:27:23,000 nola joan arazteko buruzko duzu? 499 00:27:23,000 --> 00:27:25,000 Zein da zure teknika izan dira, beraz, orain arte, zure TF ez irakasten 500 00:27:25,000 --> 00:27:27,000 edo, besterik gabe, autodidakta? 501 00:27:27,000 --> 00:27:29,000 [Student] printf. 502 00:27:29,000 --> 00:27:31,000 Printf, eta, beraz, printf du ziurrenik zure laguna izan duten ikusi nahi izanez gero 503 00:27:31,000 --> 00:27:33,000 zer gertatzen da zure programa barruan 504 00:27:33,000 --> 00:27:36,000 jarri besterik ez duzu printf hemen, printf hemen, printf hemen. 505 00:27:36,000 --> 00:27:38,000 Ondoren, exekutatu, eta stuff sorta pantailan oso bat lortuko duzu 506 00:27:38,000 --> 00:27:43,000 ondoren ondorioztatzea zer da benetan okerra zure programa erabil dezakezu. 507 00:27:43,000 --> 00:27:45,000 >> Printf joera oso indartsua gauza bat izango da, 508 00:27:45,000 --> 00:27:47,000 baina oso eskuzko prozesu bat da. 509 00:27:47,000 --> 00:27:49,000 Printf bat jarri hemen duzu, printf hemen 510 00:27:49,000 --> 00:27:51,000 eta jartzen baduzu begizta baten barruan 100 lerro dezakezu 511 00:27:51,000 --> 00:27:53,000 irteera orduan duzu sift bidez. 512 00:27:53,000 --> 00:27:58,000 Ez da programa arazteko user-friendly edo oso mekanismo interaktiboa, 513 00:27:58,000 --> 00:28:00,000 baina zorionez ez badago alternatiba. 514 00:28:00,000 --> 00:28:03,000 Programa bat, esate baterako, deitu GDB, GNU Debugger, 515 00:28:03,000 --> 00:28:06,000 nola erabiltzen duzun arcane txiki bat da. 516 00:28:06,000 --> 00:28:08,000 Txiki konplexu bat da, baina Egia, 517 00:28:08,000 --> 00:28:11,000 gauza horiek non aste honetan jarri da, eta hurrengo 518 00:28:11,000 --> 00:28:14,000 GDB antzeko zerbait ulertzeko aparteko ordu 519 00:28:14,000 --> 00:28:18,000 gordetzeko aukera izango da, ziurrenik ordu hamarnaka epe luzera, 520 00:28:18,000 --> 00:28:21,000 horrela, utzi dizu me gauza hau nola funtzionatzen teaser bat. 521 00:28:21,000 --> 00:28:23,000 >> Nire terminal-leiho batean nago. 522 00:28:23,000 --> 00:28:26,000 Dezagun aurrera eta programa hau, buggy3 konpilatu. 523 00:28:26,000 --> 00:28:28,000 Dagoeneko da data. 524 00:28:28,000 --> 00:28:31,000 Dezagun exekutatu niri bezala, berriz, atzera egin dugu, eta, hain zuzen ere, hautsi. 525 00:28:31,000 --> 00:28:34,000 Baina zergatik da hau? Agian dena izorratu nuen swap funtzioa. 526 00:28:34,000 --> 00:28:37,000 Agian eta b da. Ez dut nahiko mugitu inguruan behar bezala. 527 00:28:37,000 --> 00:28:39,000 Dezagun aurrera eta hau egin. 528 00:28:39,000 --> 00:28:43,000 Baino aski da buggy3 utzi ordez exekutatu me programa GDB, 529 00:28:43,000 --> 00:28:48,000 eta kontatzeko buggy3 exekutatu noa, 530 00:28:48,000 --> 00:28:52,000 eta besteak beste, komando-lerroko argumentu, Tui noa, 531 00:28:52,000 --> 00:28:55,000 eta hau jarri dugu zehaztapenak etorkizuneko arazoak gogorarazteko. 532 00:28:55,000 --> 00:28:57,000 Eta orain, zuri-beltza eta interfaze hau popped sortu hori, berriz, 533 00:28:57,000 --> 00:28:59,000 pixka bat jasanezinak lehen ez da hori guztia delako 534 00:28:59,000 --> 00:29:02,000 Hemen bermerik behera informazioa, baina, gutxienez, zerbait ezagutzen. 535 00:29:02,000 --> 00:29:04,000 Leihoaren goiko, nire benetako kodea da, 536 00:29:04,000 --> 00:29:08,000 eta joan I bada hemen utzi joan nire fitxategia goiko Oso me, 537 00:29:08,000 --> 00:29:11,000 eta, hain zuzen ere, ez da buggy3.c, eta oharra leiho honen behealdeko 538 00:29:11,000 --> 00:29:13,000 GDB galdera hau egin behar dut. 539 00:29:13,000 --> 00:29:16,000 >> Hau ez da nire normal John Harvard gonbitean bezala. 540 00:29:16,000 --> 00:29:19,000 Gonbitean bat GDB kontrolatzeko me ahal izateko. 541 00:29:19,000 --> 00:29:21,000 GDB araztailea da. 542 00:29:21,000 --> 00:29:24,000 Araztaileak ibiltzeko aukera ematen dizu programa bat da 543 00:29:24,000 --> 00:29:27,000 zure programa-line exekuzioa lerroz lerro, 544 00:29:27,000 --> 00:29:30,000 Bidean ezer nahi programa egiten batera, 545 00:29:30,000 --> 00:29:33,000 are funtzio telefonora deituz, edo bilatzen, are garrantzitsuagoa dena, 546 00:29:33,000 --> 00:29:35,000 hainbat aldagai balio. 547 00:29:35,000 --> 00:29:37,000 Dezagun aurrera, eta hori egin. 548 00:29:37,000 --> 00:29:40,000 Aurretik joan eta GDB en gonbitean run idatzi dut, 549 00:29:40,000 --> 00:29:43,000 beraz, idatzi dut exekutatu pantaila behealdeko ezkerreko nabarituko, 550 00:29:43,000 --> 00:29:45,000 eta sakatu dut sartu, eta zer egin horretarako? 551 00:29:45,000 --> 00:29:50,000 Ran literalki nire programa, baina ez nuen benetan ikusi hemen askoz joan 552 00:29:50,000 --> 00:29:55,000 dut ez delako benetan esan araztailea 553 00:29:55,000 --> 00:29:57,000 bereziki denbora une batean gelditu. 554 00:29:57,000 --> 00:29:59,000 Just run idazten programa exekutatzen da. 555 00:29:59,000 --> 00:30:01,000 Benetan, ez dut ezer ikusi. Ezin dut manipulatzeko. 556 00:30:01,000 --> 00:30:03,000 >> Horren ordez utzi Horretarako me. 557 00:30:03,000 --> 00:30:08,000 At GDB galdera hau utzi ordez idatzi me emateko, sartu. 558 00:30:08,000 --> 00:30:10,000 Hori ez da zer idatzi esan nahi dut. 559 00:30:10,000 --> 00:30:13,000 Dezagun ordez idatzi break nagusia. 560 00:30:13,000 --> 00:30:15,000 Beste era batera esanda, zerbait izeneko etendura bat ezarri nahi dut, 561 00:30:15,000 --> 00:30:18,000 egokiekin izendatzen den edo apurtu delako eteteko 562 00:30:18,000 --> 00:30:21,000 leku jakin hori zure programaren exekuzioa. 563 00:30:21,000 --> 00:30:23,000 Main nire funtzioaren izena da. 564 00:30:23,000 --> 00:30:25,000 Oharra GDB pretty smart da. 565 00:30:25,000 --> 00:30:28,000 Hurrena nagusia gertatzen den gutxi gorabehera hasteko line 18 566 00:30:28,000 --> 00:30:32,000 buggy3.c, eta gero konturatu hemen goiko ezkerreko 567 00:30:32,000 --> 00:30:34,000 b + line 18 hurrengo. 568 00:30:34,000 --> 00:30:38,000 Hori me gogoraraziz etendura ezarri dudan line 18. 569 00:30:38,000 --> 00:30:42,000 Oraingo honetan run idatzi dut, nire programa exekutatzen noa 570 00:30:42,000 --> 00:30:45,000 arte etendura hori hits, 571 00:30:45,000 --> 00:30:48,000 beraz, programa me eteteko line 18. 572 00:30:48,000 --> 00:30:50,000 Hemen, gara exekutatu. 573 00:30:50,000 --> 00:30:53,000 Ez da ezer gertatu agertzen dute, baina beheko oharra utzi 574 00:30:53,000 --> 00:30:58,000 hasierako programa, buggy3, 1 etendura nagusian buggy3.c line 18. 575 00:30:58,000 --> 00:31:00,000 Zer egin dezaket orain? 576 00:31:00,000 --> 00:31:03,000 >> Iragarki hasteko inprimatu bezalako gauzak idazten dut, 577 00:31:03,000 --> 00:31:08,000 ez printf, inprimatu x, eta gaur egun hori da arraroa. 578 00:31:08,000 --> 00:31:11,000 $ 1 besterik ez da jakin-mina, ikusten dugu 579 00:31:11,000 --> 00:31:14,000 aldi bakoitzean zerbait inprimatu berri bat $ balioa lortuko duzu. 580 00:31:14,000 --> 00:31:18,000 Hori da, beraz, atzera duzula erreferentzia badaezpada aurreko balioak, 581 00:31:18,000 --> 00:31:21,000 baina orain zer inprimatu me kontatzea da x balioa istorioa Puntu honetan 582 00:31:21,000 --> 00:31:26,000 itxuraz 134514032. 583 00:31:26,000 --> 00:31:29,000 Zer? Non zuen ere etorri? 584 00:31:29,000 --> 00:31:31,000 [Inaudible-ikaslea] 585 00:31:31,000 --> 00:31:34,000 Izan ere, hau da, zer da zabor balio bat deitu dugu, eta ez dugu honi buruz hitz egin gabe, 586 00:31:34,000 --> 00:31:37,000 baina arrazoia hasieratu duzula aldagai 587 00:31:37,000 --> 00:31:40,000 da, jakina, beraz, nahi duzu horietako batzuk balio dute. 588 00:31:40,000 --> 00:31:44,000 Baina harrapatzen duen aldagai gogoratzen deklaratu ahal izango da 589 00:31:44,000 --> 00:31:46,000 nuen, duela une bat bezala nire Adibidez sigma 590 00:31:46,000 --> 00:31:48,000 benetan balio bat emanez gabe. 591 00:31:48,000 --> 00:31:50,000 Gogoratu zer egin nuen hemen sigma. 592 00:31:50,000 --> 00:31:52,000 N deklaratu nuen, baina zer balio zuen ematen dut? 593 00:31:52,000 --> 00:31:56,000 None, bazekien dudalako datozen lerro 594 00:31:56,000 --> 00:31:59,000 GetInt zaindu n barruan balio bat jarriz arazoa. 595 00:31:59,000 --> 00:32:02,000 >> Baina istorioa line 11 puntu honetan 596 00:32:02,000 --> 00:32:05,000 eta lerro 12 eta 13 lerro eta 14 lerro 597 00:32:05,000 --> 00:32:08,000 duten hainbat lerro zehar n balioa zer da? 598 00:32:08,000 --> 00:32:10,000 C ez besterik ez duzu ez dakit. 599 00:32:10,000 --> 00:32:14,000 Da, oro har, zenbait zabor balioa, erabat ausazko zenbaki batzuk 600 00:32:14,000 --> 00:32:17,000 utzi baino gehiago funtsean, batzuk aurreko funtzioa 601 00:32:17,000 --> 00:32:21,000 ondoren exekutatu da, beraz, zure programa exekutatzen 602 00:32:21,000 --> 00:32:24,000 gogora ekarri funtzioa funtzioa, funtzio, funtzio lortzen. 603 00:32:24,000 --> 00:32:27,000 Fotograma horiek guztiak jarri get memoria, eta, ondoren, duten funtzio bueltan, 604 00:32:27,000 --> 00:32:31,000 eta bezala suggested Eraser, azkenean, beren memoria berrerabili dut. 605 00:32:31,000 --> 00:32:37,000 Beno, eta, beraz, besterik ez da x aldagaia hori gertatzen da programa honetan 606 00:32:37,000 --> 00:32:41,000 badirudi jasotako 134514032 atsegin dute balio zabor batzuk 607 00:32:41,000 --> 00:32:44,000 batzuk aurreko funtzioa, ez dut idatzi. 608 00:32:44,000 --> 00:32:47,000 Zerbait eraginkortasunez dator sistema eragilea izan daiteke, 609 00:32:47,000 --> 00:32:49,000 kanpaia azpian funtzio batzuk. 610 00:32:49,000 --> 00:32:52,000 >> Ados, fina, baina utzi gaur egun hurrengo lerroan aurrera. 611 00:32:52,000 --> 00:32:55,000 Idatzi dut nire GDB gonbitean "next" bada, eta sartu hit I, 612 00:32:55,000 --> 00:32:58,000 nabarituko dela mugitzen da nabarmenduz line 19, 613 00:32:58,000 --> 00:33:01,000 baina logikoa inplikazioa da 18 lerro horretan 614 00:33:01,000 --> 00:33:06,000 gaur egun amaitu exekutatzean, hala bada berriz idatzi dut "print x" 615 00:33:06,000 --> 00:33:10,000 Behar dut orain, 1, eta, hain zuzen ere, egin dut. 616 00:33:10,000 --> 00:33:14,000 Berriz ere, $ stuff GDB duzu gogoraraziz modu bat da 617 00:33:14,000 --> 00:33:17,000 grabatuak historia duzula egin. 618 00:33:17,000 --> 00:33:21,000 Orain aurrera eta inprimatu y me utzi, eta, hain zuzen ere, y balioa batzuk crazy da baita, 619 00:33:21,000 --> 00:33:24,000 baina big aurre ez line 19 buruz esleitzeko Oraindik dugulako 620 00:33:24,000 --> 00:33:27,000 2 balioa, eta, beraz, "next" idatzi me berriro. 621 00:33:27,000 --> 00:33:29,000 Eta orain printf line on Oraindik dugu. 622 00:33:29,000 --> 00:33:31,000 Inprimatu x do me. 623 00:33:31,000 --> 00:33:34,000 Let inprimatu y do me. Egia, hau inprimatzeko apur bat nekatuta nago. 624 00:33:34,000 --> 00:33:38,000 Idatzi ordez me "display x" eta "display y," 625 00:33:38,000 --> 00:33:41,000 eta une bakoitzean etorkizunean komando bat idatzi nuen 626 00:33:41,000 --> 00:33:45,000 I gogorazi nahi zaie, x eta y, zer da zer izango x eta y, x eta y. 627 00:33:45,000 --> 00:33:48,000 >> I ere, bat alde batera utzita, mota "info locals." 628 00:33:48,000 --> 00:33:50,000 Info komando bat berezia da. 629 00:33:50,000 --> 00:33:52,000 Locals esan nahi du me erakusten du aldagai lokalak. 630 00:33:52,000 --> 00:33:55,000 Badaezpada, edo ahaztu dut zoro bat, funtzio korapilatsu 631 00:33:55,000 --> 00:33:57,000 I edo beste norbaitek idatzi info locals esango dizu 632 00:33:57,000 --> 00:34:00,000 zer dira, tokiko funtzio honen barruan aldagai tokiko guztiak 633 00:34:00,000 --> 00:34:03,000 baliteke duzula nahi duzun ikutu zaintzeko. 634 00:34:03,000 --> 00:34:07,000 Orain, printf exekutatu behar da, eta, beraz, utzi Animatu eta idatzi me "hurrengo". 635 00:34:07,000 --> 00:34:10,000 Ingurumena honetan Oraindik ez delako ari gara benetan ikusten 636 00:34:10,000 --> 00:34:14,000 exekutatu behera hemen, baina apur bat Kudeatutako lortzean hemen da nabarituko. 637 00:34:14,000 --> 00:34:17,000 Baina konturatu pantaila gainidazteko da bertan, 638 00:34:17,000 --> 00:34:21,000 beraz, ez da perfektua programa hemen, baina ados naiz ni beti delako Poke inguruan 639 00:34:21,000 --> 00:34:23,000 inprimatu nahi badut. 640 00:34:23,000 --> 00:34:26,000 >> Dezagun hurrengo berriro idatzi, eta, orain, hemen parte interesgarria da. 641 00:34:26,000 --> 00:34:29,000 Y 2 istorioa Puntu honetan da, eta x 1, 642 00:34:29,000 --> 00:34:32,000 iradoki hemen, eta, berriro ere, 643 00:34:32,000 --> 00:34:35,000 arrazoia hau da automatikoki bistaratzeko erabiltzen dut komandoa duelako 644 00:34:35,000 --> 00:34:40,000 display x eta display y, beraz, une idatzi dut hurrengo 645 00:34:40,000 --> 00:34:43,000 x eta y teoria truka izan behar du. 646 00:34:43,000 --> 00:34:45,000 Orain, badakigu hori ez da kasua izango da, 647 00:34:45,000 --> 00:34:49,000 baina une batean ikusi dugu nola murgiltze sakonago dezakegu irudikatu zergatik da hori egia. 648 00:34:49,000 --> 00:34:54,000 Ondoren, eta zoritxarrez, y oraindik 2 eta x da oraindik 1, eta berretsi bezain dezaket. 649 00:34:54,000 --> 00:34:56,000 Inprimatu x, y inprimatu. 650 00:34:56,000 --> 00:34:59,000 Izan ere, ez da aldaketa benetan gertatu da, eta, beraz, utzi hasiko honetan zehar. 651 00:34:59,000 --> 00:35:01,000 Begi bistakoa da swap hondatuta dago. 652 00:35:01,000 --> 00:35:04,000 Dezagun ordez idatzi "run" berriro. 653 00:35:04,000 --> 00:35:07,000 Demagun baietz me, hasieratik berrabiarazi nahi dut, idatzi. 654 00:35:07,000 --> 00:35:09,000 >> Orain atzera line 18 naiz. 655 00:35:09,000 --> 00:35:11,000 Orain konturatu x eta y dira zabor balioak berriro. 656 00:35:11,000 --> 00:35:15,000 Ondoren, hurrengo, hurrengo, hurrengo. 657 00:35:15,000 --> 00:35:17,000 Lortu dut aspertzen bada ere ezin dut idatzi n etorkizunean. 658 00:35:17,000 --> 00:35:21,000 Karaktere-sekuentzia laburrena posible laburtu ahal izango duzu. 659 00:35:21,000 --> 00:35:23,000 Swap dago orain hautsita. 660 00:35:23,000 --> 00:35:25,000 Dezagun dive, beraz, ordez hurrengo idatziz, 661 00:35:25,000 --> 00:35:30,000 urratsa idatzi dut, beraz, barruan dut hurrats funtzio honen 662 00:35:30,000 --> 00:35:33,000 horrela barrena oinez I, step sakatu eta, ondoren, idatzi, beraz. 663 00:35:33,000 --> 00:35:37,000 Iragarki nabarmenduz jauzi behera nire programa txikiagoa line 36. 664 00:35:37,000 --> 00:35:39,000 Orain zer aldagai lokalak? 665 00:35:39,000 --> 00:35:41,000 Info locals. 666 00:35:41,000 --> 00:35:43,000 Ezer ez besterik ez oraindik Nik ez dugulako lerroa ahaztuak, 667 00:35:43,000 --> 00:35:47,000 beraz, goazen Animatu eta esan "hurrengo". 668 00:35:47,000 --> 00:35:50,000 Orain tmp, inprimatu tmp izan dirudi dugu. 669 00:35:50,000 --> 00:35:52,000 Garbage balioa, ezta? Baietz uste dut. 670 00:35:52,000 --> 00:35:55,000 Nola buruz inprimatu inprimatu b, 1 eta 2? 671 00:35:55,000 --> 00:35:58,000 Une batean, ahalik eta azkarren idatzi dut hurrengo berriz 672 00:35:58,000 --> 00:36:02,000 tmp 1 balioa hartu, zorionez, 673 00:36:02,000 --> 00:36:05,000 tmp esleitutako balioa joan delako. 674 00:36:05,000 --> 00:36:08,000 >> Dezagun, inprimatu b inprimatzeko ez, 675 00:36:08,000 --> 00:36:11,000 baina orain tmp inprimatu, eta, hain zuzen ere, 1. 676 00:36:11,000 --> 00:36:14,000 Dezagun hurrengo do me. Dezagun hurrengo do me. 677 00:36:14,000 --> 00:36:16,000 Swap funtzioa amaitu dut. 678 00:36:16,000 --> 00:36:19,000 Naiz oraindik barruan line 40, eta, beraz, utzi inprimatzeko me, 679 00:36:19,000 --> 00:36:22,000 inprimatu b, eta ez dut axola zer tmp da. 680 00:36:22,000 --> 00:36:27,000 Swap da zuzena bezala orduan eta b aldaketa dirudi. 681 00:36:27,000 --> 00:36:31,000 Baina orain badut idatzi ondoan, atzera salto egin dut line 25, 682 00:36:31,000 --> 00:36:34,000 eta, jakina, mota y x eta inprimatu badut 683 00:36:34,000 --> 00:36:38,000 Oraindik ez da aldatu, beraz, ez dugu arazoa konpondu. 684 00:36:38,000 --> 00:36:41,000 Baina diagnostikoan orain agian GDB programa honen 685 00:36:41,000 --> 00:36:44,000 gutxienez dugu ahaztuak urrats bat ulertzeko hurbilago 686 00:36:44,000 --> 00:36:47,000 Zer gertatzen da zaborrik gure kodea printf jarri beharrik gabe, 687 00:36:47,000 --> 00:36:50,000 printf hemen printf hemen, eta, ondoren, exekutatzen ari da behin eta berriro 688 00:36:50,000 --> 00:36:52,000 zer oker joan irudikatu nahian. 689 00:36:52,000 --> 00:36:55,000 >> Aurrera joan eta irten hau guztiz irten batera noa. 690 00:36:55,000 --> 00:36:57,000 Ondoren esan, "Irten hala ere?" Bai. 691 00:36:57,000 --> 00:37:00,000 Orain itzuli naiz nire gonbitean normal, eta egin dut GDB erabiliz. 692 00:37:00,000 --> 00:37:03,000 Bat alde batera utzita, behar ez baduzu, hau-Tui Ez erabili. 693 00:37:03,000 --> 00:37:07,000 Izan ere, alde izanez gero, funtsean, lortuko duzu beheko pantailaren erdia. 694 00:37:07,000 --> 00:37:11,000 Dut gero idatzi bada break nagusia eta, ondoren, exekutatu 695 00:37:11,000 --> 00:37:15,000 Oraindik ezin dut nire programa exekutatu, baina zer egingo da, textually 696 00:37:15,000 --> 00:37:18,000 show me uneko lerroa ko denbora batean. 697 00:37:18,000 --> 00:37:21,000 Tui, textual erabiltzaile-interfazea, 698 00:37:21,000 --> 00:37:25,000 erakusten dizu programaren behin, hau da, ziurrenik pixka bat kontzeptualki errazagoa. 699 00:37:25,000 --> 00:37:27,000 Baina, hain zuzen ere, besterik gabe, ez dut hurrengo, hurrengo, hurrengo, 700 00:37:27,000 --> 00:37:30,000 naiz eta aldi berean lerro bat ikusteko joan, eta benetan nahi izanez gero, zer ari den gertatzen 701 00:37:30,000 --> 00:37:35,000 Zerrenda idatzi ahal izango dut, eta lerro inguruko sorta osoa ikusteko. 702 00:37:35,000 --> 00:37:39,000 >> Bideo bat ikusi duzun arazoa ezartzen du 3. Eskatu ditudan dugu 703 00:37:39,000 --> 00:37:43,000 Nate estaltzen GDB-intricacies batzuk, 704 00:37:43,000 --> 00:37:46,000 eta hau gauza horietako bat da, zintzotasunez, non ehunekoa ez-hutsala batzuk 705 00:37:46,000 --> 00:37:49,000 GDB ez da inoiz ukitu, eta hori txarra izango da 706 00:37:49,000 --> 00:37:53,000 literalki amaitzeko sortu duzulako denbora gehiago gastua geroago seihileko honetan 707 00:37:53,000 --> 00:37:56,000 behera jarraitzen bugs gero nahi duzun hori ordu erdi / ordu jarri bada 708 00:37:56,000 --> 00:38:00,000 aste honetan eta hurrengo ikaskuntza GDB eroso. 709 00:38:00,000 --> 00:38:02,000 Printf zure laguna izan zen. 710 00:38:02,000 --> 00:38:05,000 GDB behar orain zure laguna izan. 711 00:38:05,000 --> 00:38:08,000 >> GDB edozein galdera? 712 00:38:08,000 --> 00:38:12,000 Eta hemen zerrenda azkar bat da indartsua eta erabilgarria komandoak batzuk. 713 00:38:12,000 --> 00:38:15,000 Bai. >> Kate bat inprimatzeko duzu? 714 00:38:15,000 --> 00:38:17,000 Ezin kate bat inprimatzeko duzu? Absolutely. 715 00:38:17,000 --> 00:38:19,000 Ez du zenbaki osoen izan nahiko luke. 716 00:38:19,000 --> 00:38:22,000 Aldakorra s kate bat inprimatu s mota bada. 717 00:38:22,000 --> 00:38:24,000 Erakutsiko dizu zer katea aldagaia dela. 718 00:38:24,000 --> 00:38:26,000 [Inaudible-ikaslea] 719 00:38:26,000 --> 00:38:28,000 Helbidea eta katea bera emango dizu. 720 00:38:28,000 --> 00:38:32,000 Duzu, bai erakutsiko ditu. 721 00:38:32,000 --> 00:38:34,000 Eta azken gauza bat, besterik gabe, horiek onak dira ere jakin nahi duelako. 722 00:38:34,000 --> 00:38:37,000 Backtrace eta markoaren, murgiltze hau azken aldiz sartu me, 723 00:38:37,000 --> 00:38:39,000 berean GDB programa zehatza. 724 00:38:39,000 --> 00:38:44,000 Dezagun aurrera eta erabiltzaile-interfazearen bertsioa textual exekutatu, 725 00:38:44,000 --> 00:38:46,000 apurtu nagusia. 726 00:38:46,000 --> 00:38:49,000 Dezagun aurrera eta berriro exekutatu. Here I am. 727 00:38:49,000 --> 00:38:55,000 Orain hurrengo, hurrengo, hurrengo, hurrengo, hurrengo me, step, idatzi. 728 00:38:55,000 --> 00:39:00,000 >> Eta orain, suposatzen dut orain swap en nahita, baina nago atsegin dut "Damn, x balioa zer zen?" 729 00:39:00,000 --> 00:39:02,000 Ezin dut egin x jada. 730 00:39:02,000 --> 00:39:05,000 Ezin dut egin y Esparru Oraindik ez direlako. 731 00:39:05,000 --> 00:39:07,000 Oraindik ez dute testuinguruan, baina inolako arazorik gabe. 732 00:39:07,000 --> 00:39:09,000 Backtrace idatzi ahal izango dut. 733 00:39:09,000 --> 00:39:13,000 Hori erakusten du me exekutatu duten une honetan funtzio guztiak. 734 00:39:13,000 --> 00:39:16,000 Hasiera behean, nagusia, lerro nagusi 735 00:39:16,000 --> 00:39:18,000 hemen gure argazkia beheko izanik. 736 00:39:18,000 --> 00:39:22,000 Izan ere, swap da lerro gainetik dago swap gainean memoria izan hemen, 737 00:39:22,000 --> 00:39:26,000 eta itzuli nahi badut nagusira aldi baterako esan dezaket "markoa." 738 00:39:26,000 --> 00:39:30,000 Zein zenbaki? # 1 Main markoa da. 739 00:39:30,000 --> 00:39:32,000 Aurretik joan eta esan dut "frame 1." 740 00:39:32,000 --> 00:39:36,000 >> Orain itzuli naiz nagusian, eta x inprimatu ahal izango dut, eta y inprimatu ahal izango dut, 741 00:39:36,000 --> 00:39:40,000 baina ezin dut inprimatu edo b. 742 00:39:40,000 --> 00:39:43,000 Baina esan badut ezin dut, "Ongi da, minutu bat itxaron. Non izan da swap?" 743 00:39:43,000 --> 00:39:46,000 Dezagun aurrera me eta esan "0 markoa." 744 00:39:46,000 --> 00:39:48,000 Orain itzuli naiz non izan nahi dut, eta bat alde batera gisa, 745 00:39:48,000 --> 00:39:52,000 beste komandoak ere, bada atsegin benetan ari zaren aspertuta Idazteko hurrengo, hurrengo, ondoren, hurrengo 746 00:39:52,000 --> 00:39:56,000 oro har, esan dezakezu gauzak bezala "10 hurrengoa," eta hori egingo hurrengo 10 lerro bidez urratsa. 747 00:39:56,000 --> 00:39:59,000 Ere egin dezakezu, "jarraitu" duzunean, benetan elikatzen sortu bidez hurrats idatzi. 748 00:39:59,000 --> 00:40:05,000 Jarraitu zure programa exekutatu egingo da etenik gabe hits etendura beste arte, 749 00:40:05,000 --> 00:40:07,000 begizta batean edo jaistea behera programan. 750 00:40:07,000 --> 00:40:11,000 >> Kasu honetan, jarraitu bukatu dugu, eta programa amaitu da normalean. 751 00:40:11,000 --> 00:40:13,000 Hau Fancy modu bat, beheko prozesua da. 752 00:40:13,000 --> 00:40:16,000 Just zure programa amaitu da normalean. 753 00:40:16,000 --> 00:40:24,000 Horretan gehiago bideo eta saioak arazteko etorri. 754 00:40:24,000 --> 00:40:26,000 Asko izan zen. 755 00:40:26,000 --> 00:40:35,000 Dezagun gure 5 minutuko break hemen, eta itzuli dugu structs eta fitxategiak. 756 00:40:35,000 --> 00:40:38,000 >> Duzu aste honetan pset, bada dived dagoeneko 757 00:40:38,000 --> 00:40:41,000 banaketa-kodea erabiltzen dugun jakin beharko duzu, 758 00:40:41,000 --> 00:40:45,000 iturburua kodea duzun ditugu abiapuntu, teknika batzuk berriak. 759 00:40:45,000 --> 00:40:50,000 Hain zuzen ere, deitzen struct hitz hori berria sartu dugu, egitura, 760 00:40:50,000 --> 00:40:53,000 beraz, era askotako aldagai pertsonalizatuak sor ditzake. 761 00:40:53,000 --> 00:40:57,000 I / O, fitxategi fitxategi-sarrera eta irteera nozioa ere sartu dugu, 762 00:40:57,000 --> 00:41:00,000 eta hau da beraz, egoera gorde ahal izango dugu. 763 00:41:00,000 --> 00:41:03,000 Scramble taula disc fitxategi batean 764 00:41:03,000 --> 00:41:06,000 beraz, irakaskuntza bekadun modura eta nik ulertzen 765 00:41:06,000 --> 00:41:09,000 zer zure programaren barruan, eskuz jolasteko beharrik gabe joan 766 00:41:09,000 --> 00:41:11,000 Scramble jokoak dozenaka. 767 00:41:11,000 --> 00:41:13,000 Hau egin ahal izango dugu gehiago automatedly. 768 00:41:13,000 --> 00:41:18,000 >> Eta egitura baten ideia hori nahiko sinesgarria arazoa konpontzen. 769 00:41:18,000 --> 00:41:21,000 Demagun programa batzuk ezartzea nahi dugun 770 00:41:21,000 --> 00:41:25,000 nolabait mantentzen pista ikasle buruzko informazioa 771 00:41:25,000 --> 00:41:28,000 eta ikasleek, esate baterako, izan dezake ID bat, izen bat 772 00:41:28,000 --> 00:41:31,000 eta Harvard bezalako leku batean etxe bat, eta, beraz, informazio horiek 3 zuzenak dira 773 00:41:31,000 --> 00:41:34,000 mantendu nahi dugu, eta, beraz, utzi aurretik, joan eta programa txiki bat idazten hasteko, 774 00:41:34,000 --> 00:41:38,000 besteak beste, stdio.h. 775 00:41:38,000 --> 00:41:42,000 Besteak beste, do me cs50.h. 776 00:41:42,000 --> 00:41:44,000 Eta gero, nire funtzio nagusia. 777 00:41:44,000 --> 00:41:46,000 Ez dut traba edozein komando-lerroko argumentuak, 778 00:41:46,000 --> 00:41:49,000 eta hemen ikasle bat izan nahi dut, beraz, esan nahi dut 779 00:41:49,000 --> 00:41:54,000 ikasleak izen bat dauka, beraz, esan nahi dut "izena katea." 780 00:41:54,000 --> 00:41:59,000 Ondoren, ikasle batek ere, ID bat du, beraz, int id esan nahi dut, 781 00:41:59,000 --> 00:42:03,000 eta ikasleen etxe bat du, beraz, esan nahi dut, halaber, "katea etxea". 782 00:42:03,000 --> 00:42:06,000 Ondoren, pixka bat hauek eskatu dut gehiago garbian hau atsegin dute. 783 00:42:06,000 --> 00:42:11,000 Ongi da, orain 3 aldagai dituen ikasle bat irudikatu nahi izan dut, eta, beraz, "ikasle bat". 784 00:42:11,000 --> 00:42:15,000 >> Eta orain, balio horiek populatu nahi dut, beraz aurrera eta antzeko zerbait esan 785 00:42:15,000 --> 00:42:18,000 "Id = 123." 786 00:42:18,000 --> 00:42:21,000 Izena David iritsi. 787 00:42:21,000 --> 00:42:24,000 Demagun etxea Mather iritsi, 788 00:42:24,000 --> 00:42:31,000 eta, ondoren, zerbait egin arbitrarioki printf atsegin dut ("% s, 789 00:42:31,000 --> 00:42:37,000 horren ID% d,% s bizi da. 790 00:42:37,000 --> 00:42:41,000 Eta orain, zer hemen entxufatu nahi dut, bata bestearen ondoren? 791 00:42:41,000 --> 00:42:47,000 Izena, id, etxea; bueltan 0. 792 00:42:47,000 --> 00:42:50,000 Ados, izorratu ezean dut nonbait hemen 793 00:42:50,000 --> 00:42:54,000 Pretty good-programa bat da, ikasle batek gordetzen dugu uste dut. 794 00:42:54,000 --> 00:42:57,000 Jakina, hori ez da interesgarria guztiak. Zer egin behar dut 2 ikasle izatea? 795 00:42:57,000 --> 00:42:59,000 Big aurre ez da. 2 pertsonek onartzen dut. 796 00:42:59,000 --> 00:43:03,000 Dezagun aurrera, eta hau nabarmendu eta joan behera hemen, 797 00:43:03,000 --> 00:43:09,000 eta esan "id = 456" I Rob bezalako norbait Kirkland bizi. 798 00:43:09,000 --> 00:43:12,000 >> Ongi, itxaron, baina ezin dut deitu horiek gauza bera 799 00:43:12,000 --> 00:43:15,000 dut kopiatu behar bezala ikusten da, 800 00:43:15,000 --> 00:43:19,000 beraz esan me horiek Daviden aldagai izango da, 801 00:43:19,000 --> 00:43:23,000 eta horien kopia batzuk get me Rob utzi. 802 00:43:23,000 --> 00:43:27,000 Rob hauek deitu dugu, baina hau ez da lanera joan gaur egun 803 00:43:27,000 --> 00:43:33,000 dudalako itxaron, dezagun aldatu me id1, NAME1 eta house1. 804 00:43:33,000 --> 00:43:35,000 Rob 2 izango da, 2. 805 00:43:35,000 --> 00:43:42,000 Dut hau aldatzeko hemen, hemen, hemen, hemen, hemen, hemen. 806 00:43:42,000 --> 00:43:45,000 Itxaron, zer Tommy buruz? Egin dezagun berriro. 807 00:43:45,000 --> 00:43:49,000 Jakina bada oraindik uste duzu, hau da hori egiteko modu ona da, ez da, 808 00:43:49,000 --> 00:43:52,000 beraz, kopiatu / itsatsi txarra. 809 00:43:52,000 --> 00:43:55,000 Baina hau konpondu Duela aste bat. 810 00:43:55,000 --> 00:43:59,000 >> Zein izan da gure konponbidea datu mota bereko hainbat instantzia izan nahi dugu? 811 00:43:59,000 --> 00:44:01,000 [Ikasleak] array bat. 812 00:44:01,000 --> 00:44:03,000 Array bat, eta, beraz, utzi saiatu me up hau garbitzeko. 813 00:44:03,000 --> 00:44:07,000 Dezagun batzuk niretzat gela goialdean me, eta utzi egin ordez me hau hemen. 814 00:44:07,000 --> 00:44:12,000 Pertsona horiek deitu dugu, eta horren ordez, esan nahi dut "ids int," 815 00:44:12,000 --> 00:44:14,000 eta orain gurekin 3 onartzen dut. 816 00:44:14,000 --> 00:44:18,000 Esan nahi "katea izenak," eta gurekin 3 onartzen dut noa, 817 00:44:18,000 --> 00:44:22,000 eta gero esan nahi "katea etxeak," eta gurekin 3 onartzen dut noa. 818 00:44:22,000 --> 00:44:26,000 Orain ordez, David eta bere tokian tokiko aldagai hemen 819 00:44:26,000 --> 00:44:28,000 horiek kentzeko ahal izango dugu. 820 00:44:28,000 --> 00:44:30,000 Hori sentitzen ona ari garen honetan garbitzeko. 821 00:44:30,000 --> 00:44:35,000 Esan dezaket, orduan, David [0] eta izenak [0] izango da 822 00:44:35,000 --> 00:44:38,000 eta etxeak [0]. 823 00:44:38,000 --> 00:44:41,000 Eta gero, Rob, era berean, hau gorde ahal izango dugu. 824 00:44:41,000 --> 00:44:46,000 Dezagun jarri hau behera hemen, eta, beraz, arbitrarioki ids [1] ditu. 825 00:44:46,000 --> 00:44:50,000 Izenak izan du [1], 826 00:44:50,000 --> 00:44:53,000 eta, ondoren, azkenik, etxe [1]. 827 00:44:53,000 --> 00:44:57,000 >> Oraindik apur bat lapurtera, eta orain hau irudikatu behar dut, 828 00:44:57,000 --> 00:45:03,000 beraz, demagun "izenak [0], id [0], etxe [0] 829 00:45:03,000 --> 00:45:06,000 eta dezagun pluralize hau. 830 00:45:06,000 --> 00:45:09,000 Identifikadoreak ids, ids. 831 00:45:09,000 --> 00:45:12,000 Eta berriro ere, egiten ari naiz, eta, beraz, berriro ere, dagoeneko ari naiz berriro / kopiatu itsatsi jo 832 00:45:12,000 --> 00:45:14,000 beraz, odds dira beste irtenbide bat da hemen. 833 00:45:14,000 --> 00:45:18,000 Ziurrenik I garbitu sortu begizta bat edo horrelako zerbait, 834 00:45:18,000 --> 00:45:21,000 beraz, azken finean, pixka bat hobea da, baina oraindik ere sentitzen atsegin 835 00:45:21,000 --> 00:45:24,000 Kopiatu / itsatsi dut jo, baina, nahiz eta hau, diotenez, I, 836 00:45:24,000 --> 00:45:27,000 ez da benetan, batez ere, irtenbide egokia baita 837 00:45:27,000 --> 00:45:29,000 zer erabakitzen dugu noizbait bada zer ezagutzen duzu? 838 00:45:29,000 --> 00:45:32,000 Dira benetan ditugu helbide elektronikoak gordetzeko David eta Rob 839 00:45:32,000 --> 00:45:34,000 eta gainontzeko programa honetan. 840 00:45:34,000 --> 00:45:36,000 Telefono zenbakiak ere gorde behar dugu. 841 00:45:36,000 --> 00:45:39,000 Larrialdi kontaktua zenbakiak ere gorde behar dugu. 842 00:45:39,000 --> 00:45:41,000 Datu-pieza horiek guztiak gorde nahi dugun izan dugu, 843 00:45:41,000 --> 00:45:43,000 beraz, nola egiten duzu? 844 00:45:43,000 --> 00:45:46,000 >> Array beste deklaratzeko duzu goialdean, eta, ondoren, zuk eskuz 845 00:45:46,000 --> 00:45:49,000 helbide elektroniko bat [0], e-posta helbidea [1] 846 00:45:49,000 --> 00:45:51,000 David eta Rob eta abar. 847 00:45:51,000 --> 00:45:56,000 Baina ez da benetan suposizio bat besterik ez diseinu hau azpiko 848 00:45:56,000 --> 00:45:59,000 ohorea dudan sistema erabiltzen duten jakin nahi 849 00:45:59,000 --> 00:46:03,000 [I] hainbat array bakoitzean 850 00:46:03,000 --> 00:46:06,000 besterik ez, beraz, gertatzen da pertsona bera aipatzeko, 851 00:46:06,000 --> 00:46:10,000 [0] ids zenbakia 123 da, 852 00:46:10,000 --> 00:46:13,000 eta izen hori bereganatzeko noa [0] 853 00:46:13,000 --> 00:46:16,000 pertsona beraren izena eta etxe [0] 854 00:46:16,000 --> 00:46:21,000 pertsona bera etxe eta abarren matrizeak sortzen dut hainbat. 855 00:46:21,000 --> 00:46:24,000 Baina ez dagoela funtsezko batzeko ez da 856 00:46:24,000 --> 00:46:27,000 informazioa, id, izena eta etxe pieza 3 artean, 857 00:46:27,000 --> 00:46:32,000 nahiz eta erakunde eredu saiatzen ari gara programa hau ez da array. 858 00:46:32,000 --> 00:46:35,000 Arrayak hau egiteko modu programazioko hau. 859 00:46:35,000 --> 00:46:38,000 Zer nahi dugu gure programa eredua pertsona bat da 860 00:46:38,000 --> 00:46:41,000 David, Rob bezalako pertsona horietatik barruan bezalako 861 00:46:41,000 --> 00:46:46,000 edo izen bat eta ID encapsulating eta etxe bat da. 862 00:46:46,000 --> 00:46:49,000 >> Ezin dugu nolabait adierazteko kapsulatzea ideia hau 863 00:46:49,000 --> 00:46:52,000 Horren bidez, pertsona bat ID bat, izen bat eta etxe bat 864 00:46:52,000 --> 00:46:55,000 eta ez benetan hack jotzea horren bidez dugu 865 00:46:55,000 --> 00:46:58,000 fidatzen bracket zerbait 866 00:46:58,000 --> 00:47:02,000 horiek desberdinak array bakoitzean giza berarentzat aipatzen? 867 00:47:02,000 --> 00:47:04,000 Benetan egin ahal izango dugu hau. 868 00:47:04,000 --> 00:47:08,000 Goiko joan me nagusia orain, eta utzi nire datu-mota sortzeko me 869 00:47:08,000 --> 00:47:10,000 benetan lehen aldiz. 870 00:47:10,000 --> 00:47:14,000 Teknika hau erabiliko dugu Scramble 871 00:47:14,000 --> 00:47:17,000 baina hemen aurretik joan eta datu-mota bat sortu dut, 872 00:47:17,000 --> 00:47:19,000 eta badakizu zer, ikasle edo pertsona deitu noa, 873 00:47:19,000 --> 00:47:23,000 typedef define mota noa. 874 00:47:23,000 --> 00:47:25,000 Hau egitura bat da, esan nahi dut, 875 00:47:25,000 --> 00:47:29,000 eta, ondoren, egitura hori mota ikaslea, esan dugu, 876 00:47:29,000 --> 00:47:31,000 nahiz eta datatua me now txiki bat da. 877 00:47:31,000 --> 00:47:33,000 Esan dugu "int id." 878 00:47:33,000 --> 00:47:35,000 Esan dugu "izena katea." 879 00:47:35,000 --> 00:47:37,000 Ondoren, "katea etxea," esan dugu 880 00:47:37,000 --> 00:47:40,000 beraz, gaur egun kode batzuk lerro hauen amaieran 881 00:47:40,000 --> 00:47:45,000 Irakasten dut clang existitzen dela 882 00:47:45,000 --> 00:47:49,000 ints gain, datu mota bat, kateak, gainera, bikoiztu gain, karroza gain. 883 00:47:49,000 --> 00:47:54,000 >> Denbora line 11 une honetan bezala, ez dago datu-mota berri bat izeneko ikasle, 884 00:47:54,000 --> 00:47:58,000 eta gaur egun edozein lekutan ikasleen aldagai bat deklaratzeko I nahi dut, 885 00:47:58,000 --> 00:48:01,000 beraz hemen behera joan me to pertsona. 886 00:48:01,000 --> 00:48:05,000 Orain kentzeko I, eta joan I behera David hemen 887 00:48:05,000 --> 00:48:10,000 eta David benetan esan dezaket David dela, 888 00:48:10,000 --> 00:48:13,000 literalki izena eman dezakegu aldagai neure burua ondoren, 889 00:48:13,000 --> 00:48:16,000 mota ikaslea izango da. 890 00:48:16,000 --> 00:48:18,000 Txiki hau bitxi bat begiratu daiteke, baina hau ez da hori, hainbat 891 00:48:18,000 --> 00:48:22,000 int bat edo kate bat edo mugikor bat zerbait geratuko. 892 00:48:22,000 --> 00:48:24,000 Beraz, zerbait gertatzen deitzen zaio ikasleari gaur egun, 893 00:48:24,000 --> 00:48:28,000 eta egitura honen barruan zerbait jarri nahi dut 894 00:48:28,000 --> 00:48:31,000 Dute gaur egun I sintaxia pieza berri bat erabili ahal izateko, baina nahiko erraza da, 895 00:48:31,000 --> 00:48:39,000 david.id = 123, david.name = "David" D hiriburua, 896 00:48:39,000 --> 00:48:42,000 eta david.house = "Mather," 897 00:48:42,000 --> 00:48:46,000 eta, orain, stuff hau kentzeko dut hemen. 898 00:48:46,000 --> 00:48:51,000 Nabarituko dugu orain gure programa benetan askoz hobeto birmoldatu 899 00:48:51,000 --> 00:48:54,000 hori gaur egun gure programa benetako mundua islatzen. 900 00:48:54,000 --> 00:48:57,000 >> Ez dago benetako pertsona bat edo ikaslea ideia-mundu bat da. 901 00:48:57,000 --> 00:49:02,000 Hemen dugu orain C pertsona bat edo gehiago bereziki ikasle baten bertsio bat. 902 00:49:02,000 --> 00:49:05,000 Pertsona horren Inside ezaugarri hauek garrantzitsuak dira, 903 00:49:05,000 --> 00:49:10,000 ID, izena eta etxea, eta, beraz, Rob funtsean gauza bera bihurtzen behera hemen, 904 00:49:10,000 --> 00:49:14,000 ikaslea rob, beraz, eta, gaur egun, = 456 rob.id 905 00:49:14,000 --> 00:49:17,000 rob.name = "Rob". 906 00:49:17,000 --> 00:49:20,000 Izan ere, aldagai deritzo Rob zentzugabeak moduko da. 907 00:49:20,000 --> 00:49:22,000 Deitu genezake x edo y edo z. 908 00:49:22,000 --> 00:49:25,000 Izendatu besterik ez dugu semantikoki koherentea izan Rob da, 909 00:49:25,000 --> 00:49:28,000 baina benetan izena da barruan, eremu horretan bertan, 910 00:49:28,000 --> 00:49:30,000 beraz, gaur egun hau dut. 911 00:49:30,000 --> 00:49:33,000 Honek ere ez du horretan gogor Nik kodetuta David diseinu onena bezala sentitzen. 912 00:49:33,000 --> 00:49:35,000 Gogor Nik kodetuta Rob. 913 00:49:35,000 --> 00:49:39,000 Eta oraindik kopia batzuk jotzea eta aldagai berriak nahi ditut bakoitzean denbora itsatsi. 914 00:49:39,000 --> 00:49:43,000 Gainera, itxuraz ematen aldagai horietako bakoitzak izen bat behar dut, 915 00:49:43,000 --> 00:49:46,000 nahiz eta askoz ere nahiago dut deskribatzeko aldagai horiek 916 00:49:46,000 --> 00:49:48,000  oro gisa gehiagotan ikasleak. 917 00:49:48,000 --> 00:49:52,000 >> Orain duten ideiak ongi Gurekin lan batu ahal izango dugu. 918 00:49:52,000 --> 00:49:56,000 eta horren ordez, esan, "Badakizu zer, emaidazu aldakorreko izenekoa ikasle, 919 00:49:56,000 --> 00:50:01,000 eta dezagun dituzte tamaina 3 ", beraz, gaur egun birfin hau gehiago, 920 00:50:01,000 --> 00:50:04,000 eskuz izendatu David kentzeko, 921 00:50:04,000 --> 00:50:08,000 eta horren ordez, ikasleek antzeko zerbait esan dezaket [0] hemen. 922 00:50:08,000 --> 00:50:11,000 Esan dezaket, orduan ikasle [0] hemen, 923 00:50:11,000 --> 00:50:14,000 ikasleak [0] hemen, eta abar, eta I joan daiteke inguruan 924 00:50:14,000 --> 00:50:16,000 garbitu eta hori sortu Rob. 925 00:50:16,000 --> 00:50:19,000 Ere izan dut, orain agian begizta bat gehituz joan 926 00:50:19,000 --> 00:50:23,000 eta benetan balio hauek erabiltzaileak, GetString eta GetInt erabiliz. 927 00:50:23,000 --> 00:50:27,000 Konstante bat gehituz joan izan dut hau txarra da, oro har, baita praktika 928 00:50:27,000 --> 00:50:29,000 3 gogor kodea bezalako zenbaki arbitrarioak hementxe batzuk 929 00:50:29,000 --> 00:50:33,000 eta, ondoren, gogoratu 3 ikasle baino gehiago jarri beharko luke. 930 00:50:33,000 --> 00:50:36,000 Ziurrenik izango litzateke hobeto # define nire fitxategiaren goialdean 931 00:50:36,000 --> 00:50:40,000 faktorea dela, eta, beraz, hain zuzen ere, aurrera eta hau orokortu. 932 00:50:40,000 --> 00:50:43,000 >> Dezagun adibide bat ireki me gaur egungo artean 933 00:50:43,000 --> 00:50:46,000 adibide lehenago, structs1. 934 00:50:46,000 --> 00:50:49,000 Osoagoa # define Hemen erabiltzen duen programa bat da 935 00:50:49,000 --> 00:50:51,000 dio 3 ikasle default goaz. 936 00:50:51,000 --> 00:50:54,000 Hemen ikasle klase bat merezi naiz geratuko, 937 00:50:54,000 --> 00:50:57,000 ikasleek ikasgelan, beraz, eta orain loop bat erabiltzen dut 938 00:50:57,000 --> 00:51:00,000 kodea apur bat gehiago dotorea egiteko, populatu klase 939 00:51:00,000 --> 00:51:05,000 erabiltzailearen sarrera, eta, beraz, 0 = i batetik bestera joateko ikasleek, hau da, 3. 940 00:51:05,000 --> 00:51:07,000 Eta gero, bertsio honetan erabiltzaileari galdetuko dut 941 00:51:07,000 --> 00:51:10,000  ikaslearen ID, eta I GetInt. 942 00:51:10,000 --> 00:51:13,000 Zer da ikaslearen izen-abizenak, eta, ondoren, GetString duten I. 943 00:51:13,000 --> 00:51:15,000 Zein da ikaslearen etxea? I GetString. 944 00:51:15,000 --> 00:51:19,000 Eta gero, behean hemen erabaki dut aldatu 945 00:51:19,000 --> 00:51:22,000 hauek nola naiz inprimatzeko eta benetan loop bat erabili, 946 00:51:22,000 --> 00:51:24,000 eta nor naiz inprimatzeko? 947 00:51:24,000 --> 00:51:27,000 Iruzkina arabera Mather edonork dut inprimatzea, 948 00:51:27,000 --> 00:51:30,000 eta hori izan da Rob eta Tommy beraz, eta abar-benetan Tommy Mather. 949 00:51:30,000 --> 00:51:34,000 Tommy eta David kasu honetan izango litzateke inprimatuta, baina nola lan? 950 00:51:34,000 --> 00:51:40,000 Ez dugu funtzio hau ikusi aurretik, baina zer hau da, etxebizitza bat hartu. 951 00:51:40,000 --> 00:51:42,000 Konparatzen kateak. 952 00:51:42,000 --> 00:51:45,000 >> Apur bat ez-bistako da nola kateak konparatzen bihurtzen da delako 953 00:51:45,000 --> 00:51:49,000 itzultzen du 0 bada horrek esan nahi du kateak berdinak dira. 954 00:51:49,000 --> 00:51:53,000 Itzultzen du -1 bat bada, horrek esan nahi du alfabetikoki dator bat bestea baino lehen, 955 00:51:53,000 --> 00:51:57,000 eta itzultzen du +1 bada beste hitz esan nahi du datorren alfabetikoki 956 00:51:57,000 --> 00:52:00,000 aurretik, eta begiratu online edo man orrialdean dezakezu 957 00:52:00,000 --> 00:52:04,000 zehazki modu bat da hori, baina hori guztia gaur egun egiten da, esaten da 958 00:52:04,000 --> 00:52:09,000 [i]. etxea da "Mather" berdina bada 959 00:52:09,000 --> 00:52:13,000 gero aurrera eta inprimatu, beraz, eta, beraz, Mather da. 960 00:52:13,000 --> 00:52:16,000 Baina hemen zerbait ez dugu ikusi aurretik, eta itzuli dugu hau. 961 00:52:16,000 --> 00:52:21,000 Ez dut gogoratzen inoiz Horretarako nire programak edozein izatea. 962 00:52:21,000 --> 00:52:24,000 Free da itxuraz: memoria, aipatuz memoria askatzeaz, 963 00:52:24,000 --> 00:52:31,000 baina zer memoria am begizta honetan itxuraz programa honen behealdeko libre uzten? 964 00:52:31,000 --> 00:52:34,000 Dut pertsona baten izena bezala askatzeaz dirudi 965 00:52:34,000 --> 00:52:37,000 eta pertsona baten etxea, baina zergatik da hori? 966 00:52:37,000 --> 00:52:41,000 >> Bihurtzen da aste horiek guztiak izan duzula GetString erabiliz 967 00:52:41,000 --> 00:52:45,000 mota dugu bug bat sartzea, behin zure programak batean. 968 00:52:45,000 --> 00:52:51,000 Diseinu esleitzen memoria GetString, beraz, kate bat itzuli, 969 00:52:51,000 --> 00:52:55,000 David bezala, edo Rob, eta ondoren egin dezakezu nahi duzuna 970 00:52:55,000 --> 00:52:59,000 hori zure programa katea dugu gordeak memoria dugulako. 971 00:52:59,000 --> 00:53:02,000 Arazoa denbora hori guztia denbora GetString deitu bakoitzean 972 00:53:02,000 --> 00:53:05,000 dugu, GetString egileek, izan dira sistema eragilearen eskatuz 973 00:53:05,000 --> 00:53:07,000 ezagutzera emango RAM apur bat kate honetan. 974 00:53:07,000 --> 00:53:09,000 Emaiguzu RAM apur bat hau hurrengo Kate. 975 00:53:09,000 --> 00:53:11,000 Emaiguzu batzuk gehiago hurrengo kate honen RAM. 976 00:53:11,000 --> 00:53:13,000 Zer programatzailea, inoiz ez dira egiten 977 00:53:13,000 --> 00:53:15,000 emango digu memoria-back hori, 978 00:53:15,000 --> 00:53:17,000 beraz, zenbait aste hauetan programak guztiak, idatzitakoa 979 00:53:17,000 --> 00:53:20,000 izan dute zer izeneko memoria horren bidez, jauzi bat erabiliz mantentzen dute 980 00:53:20,000 --> 00:53:24,000 gero eta memoria gehiago aldi bakoitzean GetString deitu, eta hori fina. 981 00:53:24,000 --> 00:53:27,000 Nahita egiten dugu, lehen asteetan ez delako interesgarria dela 982 00:53:27,000 --> 00:53:29,000 non katea da datozen kezkatu. 983 00:53:29,000 --> 00:53:34,000 Nahi duzun guztia gertatzen da, hain zuzen ere, hitza Rob itzuli erabiltzaile mota sartu 984 00:53:34,000 --> 00:53:38,000 >> Baina aurrera gaur egun honi buruz gehiago sofistikatu hasteko. 985 00:53:38,000 --> 00:53:42,000 Edonoiz memoria esleitu dugu azkenean hobeto entregatu dugu berriro. 986 00:53:42,000 --> 00:53:45,000 Bestela, zure Mac edo PC mundu errealaren noizean behin esperientzia izan dezakezu 987 00:53:45,000 --> 00:53:50,000 sintomak non ordenagailua gelditu azkenean artezketa 988 00:53:50,000 --> 00:53:54,000 edo ergelak spinning hondartza (e) k besterik ez da ordenagailuaren okupatuko 989 00:53:54,000 --> 00:53:56,000 arreta osoa eta ezin gauzak. 990 00:53:56,000 --> 00:54:00,000 Bugs kopuru edozein daiteke azaldu, baina horiek ahalik eta bugs artean 991 00:54:00,000 --> 00:54:03,000 deitzen dira gauzak memoria ihesak horren bidez norbait software pieza idatzi 992 00:54:03,000 --> 00:54:07,000 memoria libratzeko ez gogoratzeko erabiltzen ari zaren 993 00:54:07,000 --> 00:54:10,000 zuen galdetu sistema eragilea, 994 00:54:10,000 --> 00:54:14,000 ez GetString erabiliz, CS50 gauza bat delako, baina antzeko funtzioak erabiliz 995 00:54:14,000 --> 00:54:16,000 eskatzen memoria sistema eragilearen. 996 00:54:16,000 --> 00:54:19,000 Edo hondatzeko bada, eta inoiz ez benetan itzultzeko memoria hori 997 00:54:19,000 --> 00:54:24,000 diren programa bat motelduz, eta slows eta moteldu sintoma bat izan daiteke 998 00:54:24,000 --> 00:54:26,000 gogoratu free deitzeko ezean. 999 00:54:26,000 --> 00:54:28,000 >> Itzuli dugu noiz eta zergatik deitu nahi duzun, 1000 00:54:28,000 --> 00:54:32,000 baina dezagun aurrera neurri ona eta saiatu bereziki programa hau abiarazi. 1001 00:54:32,000 --> 00:54:35,000 Deitzen zen structs1, sartu. 1002 00:54:35,000 --> 00:54:40,000 Dezagun aurrera eta exekutatu structs1, 123, David Mather, 1003 00:54:40,000 --> 00:54:47,000 456, 789, Rob Kirkland 1004 00:54:47,000 --> 00:54:50,000 Tommy Mather, eta David-en ikusiko dugu Mather, Tommy Mather. 1005 00:54:50,000 --> 00:54:53,000 Apur bat behatu kontrol-programa lan hori. 1006 00:54:53,000 --> 00:54:56,000 Orain, zoritxarrez, programa hau da, pixka bat horretan frustrating 1007 00:54:56,000 --> 00:55:00,000 Lan hori guztia ez dut 9 kateak hainbat idatzi, sakatu sartu, 1008 00:55:00,000 --> 00:55:04,000 izan zen esan Mather izan zen, eta, hala ere, jakina, Mather zen dagoeneko idatzi dut delako banekien. 1009 00:55:04,000 --> 00:55:07,000 Gutxienez nice litzateke programa hau datu-base bat bezala gehiago bada 1010 00:55:07,000 --> 00:55:10,000 eta gogoratzen da benetan zer idatzi dut 1011 00:55:10,000 --> 00:55:12,000 beraz, berriro inoiz ez dut sarrera ikaslea erregistro horiek. 1012 00:55:12,000 --> 00:55:15,000 Agian da sistema bat registrarial bezala da. 1013 00:55:15,000 --> 00:55:21,000 >> Hau egin ahal izango dugu, I / O, fitxategi fitxategi-sarrera eta irteera gisa ezagutzen den teknika hau erabiliz, 1014 00:55:21,000 --> 00:55:24,000 fitxategiak irakurri edo idatzi fitxategiak nahi duzun edozein unetan esaten Oso modu generic 1015 00:55:24,000 --> 00:55:26,000 zenbait funtzio multzo bat egin ahal izango duzu. 1016 00:55:26,000 --> 00:55:29,000 Dezagun aurrera me eta adibide structs2.c hau ireki 1017 00:55:29,000 --> 00:55:33,000 hau da, ia-ia berdinak, baina zer ez gaur egun ikus dezagun. 1018 00:55:33,000 --> 00:55:36,000 Fitxategia goialdean ikasle klase bat deklaratzen dut. 1019 00:55:36,000 --> 00:55:38,000 Erabiltzailearen sarrera klase populatu ondoren I 1020 00:55:38,000 --> 00:55:41,000 beraz, kode lerro horiek zehatz-mehatz nahi aurretik. 1021 00:55:41,000 --> 00:55:45,000 Ondoren, joan I erorita badago hemen inprimatu guztioi Mather da arbitrarioki nahi baino lehen, 1022 00:55:45,000 --> 00:55:47,000 baina hau ezaugarri berri interesgarri bat da. 1023 00:55:47,000 --> 00:55:51,000 Kode lerro hauek berriak dira, eta zerbait aurkeztu dute hemen, 1024 00:55:51,000 --> 00:55:55,000 FITXATEGIA, txanoak guztiak, eta * du hemen baita. 1025 00:55:55,000 --> 00:55:58,000 Dezagun hau mugitu me hemen, * hemen baita. 1026 00:55:58,000 --> 00:56:00,000 >> Funtzio hau ez da ikusi ditugu aurretik, fopen, 1027 00:56:00,000 --> 00:56:03,000 baina fitxategia esan nahi du irekita, eta, beraz dezagun gaingabetuak horien bidez, 1028 00:56:03,000 --> 00:56:05,000 eta hau da zerbait itzuli dugu psets etorkizuneko 1029 00:56:05,000 --> 00:56:10,000 baina lerro hau hemen, funtsean, datu-basea izeneko fitxategi bat irekitzen du 1030 00:56:10,000 --> 00:56:13,000 eta irekitzen berariazko modu bat da zer egin dezake, hala nola? 1031 00:56:13,000 --> 00:56:15,000 [Inaudible-ikaslea] 1032 00:56:15,000 --> 00:56:19,000 Eskuin, eta, beraz, "w", besterik gabe esan nahi du sistema eragilea, kontatzea 1033 00:56:19,000 --> 00:56:21,000 fitxategi hau ireki dut idatzi. 1034 00:56:21,000 --> 00:56:23,000 Ez dut nahi, irakurtzeko. Ez dut nahi begiratu besterik ez da. 1035 00:56:23,000 --> 00:56:26,000 Aldatzeko eta stuff gehitu potentzialki nahi dut, 1036 00:56:26,000 --> 00:56:28,000 eta fitxategi izeneko datu-basean. 1037 00:56:28,000 --> 00:56:30,000 Deitu behar izan ezer. 1038 00:56:30,000 --> 00:56:32,000 Database.txt izan daiteke. Izan daiteke. Db. 1039 00:56:32,000 --> 00:56:37,000 Hau foo bezalako hitz bat izan daiteke, baina aukeratu zuen, arbitrarioki I fitxategia datu-basean izena. 1040 00:56:37,000 --> 00:56:42,000 Apur bat behatu check itzuli garela etorri egingo zehaztasun handiz denborak aurrera egin ahala, 1041 00:56:42,000 --> 00:56:47,000 LH, erakuslea fitxategi bada, ez du horrek esan nahi du berdintasuna NULL guztiak ongi dago. 1042 00:56:47,000 --> 00:56:51,000 >> Long Narrazio laburren, fopen bezala funtzio batzuetan huts egin. 1043 00:56:51,000 --> 00:56:53,000 Agian fitxategia ez da existitzen. Agian disko leku Oraindik duzu. 1044 00:56:53,000 --> 00:56:55,000 Agian ez duzu baimenik karpeta horretan, 1045 00:56:55,000 --> 00:56:58,000 beraz bada fopen null zerbait txarra gertatu itzultzen. 1046 00:56:58,000 --> 00:57:02,000 Aitzitik, fopen ez badu itzultzeko null guztiak ongi 1047 00:57:02,000 --> 00:57:04,000 eta hasi fitxategi hau idazten dut. 1048 00:57:04,000 --> 00:57:06,000 Hona hemen beste trikimailu bat da. 1049 00:57:06,000 --> 00:57:08,000 Begizta bat baino gehiago errepikatzean nire ikasle bakoitzak, 1050 00:57:08,000 --> 00:57:10,000 eta antzeko itxura, beraz, zer egin dugu aurretik, 1051 00:57:10,000 --> 00:57:15,000 baina funtzio hau printf fitxategi printf fprintf izeneko lehengusu bat da, 1052 00:57:15,000 --> 00:57:18,000 eta 2 bakarrik modu desberdina da. 1053 00:57:18,000 --> 00:57:20,000 One, ordez p f hasten da, 1054 00:57:20,000 --> 00:57:23,000 baina gero, bere lehen argumentua da itxuraz zer? 1055 00:57:23,000 --> 00:57:25,000 [Ikasleak] fitxategia. >> Fitxategi bat da. 1056 00:57:25,000 --> 00:57:30,000 Izeneko gauza hau LH, azkenean dugu tease gain fitxategi erakuslea da, 1057 00:57:30,000 --> 00:57:35,000 baina orain LH besterik ez dut ireki fitxategia adierazten du, 1058 00:57:35,000 --> 00:57:41,000 fprintf hemen erabiltzaile hau inprimatu fitxategi ID esaten, ez pantailan. 1059 00:57:41,000 --> 00:57:44,000 Inprimatu erabiltzailearen fitxategi izena, ez pantaila 1060 00:57:44,000 --> 00:57:47,000 fitxategia, ez da pantailan, eta, ondoren, behera hemen, jakina, etxea, 1061 00:57:47,000 --> 00:57:50,000 fitxategia itxi, eta gero behera hemen memoria libre. 1062 00:57:50,000 --> 00:57:53,000 >> Bertsio honetan 2 eta version 1 arteko desberdintasun bakarra 1063 00:57:53,000 --> 00:57:58,000 fopen sarrera eta * FITXATEGIA hau da 1064 00:57:58,000 --> 00:58:01,000 eta fprintf nozioa, beraz, zer da azken emaitza. 1065 00:58:01,000 --> 00:58:03,000 Utzi nire terminal leiho me. 1066 00:58:03,000 --> 00:58:06,000 Structs2 exekutatu me, sartu. 1067 00:58:06,000 --> 00:58:09,000 Looks guztiak ongi bezala. Dezagun berrabiarazi structs2. 1068 00:58:09,000 --> 00:58:15,000 123, David Mather, 456, Rob Kirkland, 1069 00:58:15,000 --> 00:58:19,000 789, Tommy Mather, sartu. 1070 00:58:19,000 --> 00:58:23,000 Looks portaera bera bezala, baina orain ez dut bada ls 1071 00:58:23,000 --> 00:58:28,000 nabarituko zer fitxategia hemen da nire kode guztien artean, datu-basea, 1072 00:58:28,000 --> 00:58:32,000 beraz, datu-base gedit, eta begirada ireki. 1073 00:58:32,000 --> 00:58:34,000 Fitxategi-formatuak ez da sexiest. 1074 00:58:34,000 --> 00:58:38,000 Benetan datuak pieza lerro bakoitzeko lerro bakoitzeko lerro bat, 1075 00:58:38,000 --> 00:58:42,000 baina duzun Excel edo CSV fitxategiak erabiltzen dutenen artean, komaz bereiztutako balioak, 1076 00:58:42,000 --> 00:58:47,000 Nuen, zalantzarik gabe erabili dute fprintf ordez agian honen antzeko zerbait egin 1077 00:58:47,000 --> 00:58:50,000 Excel fitxategi bat baliokidea beraz, benetan izan dut sortu 1078 00:58:50,000 --> 00:58:53,000 gauzak banantzen koma, ez bakarrik ildo berriak. 1079 00:58:53,000 --> 00:58:56,000 >> Kasu honetan nuen ordez erabiltzen bada koma lerro berriak ordez 1080 00:58:56,000 --> 00:59:01,000 Literalki izan dut hau Excel datu-base fitxategia ireki ordez egin nuen gero begiratu hau atsegin dute. 1081 00:59:01,000 --> 00:59:03,000 Azken finean, gaur egun dugun fitxategiak idaztea 1082 00:59:03,000 --> 00:59:07,000 has dezakegu persisting datuak mantenduz inguruan Diskoko 1083 00:59:07,000 --> 00:59:10,000 beraz, informazio gorde ahal izango dugu, behin eta berriro inguruan. 1084 00:59:10,000 --> 00:59:14,000 Ohartu, orain pixka bat gehiago ezagutzen diren beste gauza pare bat. 1085 00:59:14,000 --> 00:59:16,000 C fitxategi honen goialdean typedef dugu 1086 00:59:16,000 --> 00:59:21,000 nahi izan dugu, datu-mota bat sortzeko hitz bat adierazten du delako, 1087 00:59:21,000 --> 00:59:25,000 beraz mota honetako deritzo hitza, eta honen barruan egitura 1088 00:59:25,000 --> 00:59:27,000 apur bat fancier da orain. 1089 00:59:27,000 --> 00:59:30,000 Zergatik hitz bat osatzen da, itxuraz array bat? 1090 00:59:30,000 --> 00:59:33,000 Zer da hitz bat intuizioz? 1091 00:59:33,000 --> 00:59:35,000 >> Karaktere array bat da. 1092 00:59:35,000 --> 00:59:37,000 Karaktere-sekuentzia bat da Itzuli. 1093 00:59:37,000 --> 00:59:41,000 Txanoak guztietan CARTAS gertatzen esan arbitrarioki dugu gehienezko luzera 1094 00:59:41,000 --> 00:59:44,000 dictionary Scramble erabiltzen ari garen edozein hitz. 1095 00:59:44,000 --> 00:59:46,000 Zergatik +1 behar dut? 1096 00:59:46,000 --> 00:59:48,000 Karakterea nulua. 1097 00:59:48,000 --> 00:59:51,000 Gogoratu Bananagrams Adibidez genuen balio berezi bat behar dugu 1098 00:59:51,000 --> 00:59:55,000 hitzaren amaieran ordena pista mantentzeko 1099 00:59:55,000 --> 00:59:59,000 non hitz benetan amaitu, eta arazo multzo zehaztapen dio 1100 00:59:59,000 --> 01:00:03,000 Hemen emandako hitza boolear bat lotzen ari gara, 1101 01:00:03,000 --> 01:00:05,000 Ez, beraz, hitz egiteko, egia edo gezurra. 1102 01:00:05,000 --> 01:00:09,000 Dute hitz hau aurkitu duzu dagoeneko, konturatzen garelako 1103 01:00:09,000 --> 01:00:13,000 benetan behar dugu gogoratzeko modu bat ez da bakarrik hitz bat Scramble 1104 01:00:13,000 --> 01:00:15,000 baina ala ez duzu, giza, aurkitu du 1105 01:00:15,000 --> 01:00:20,000 beraz, hitz egiten aurkituko dituzu izanez gero, "" ezin duzu idatzi, idatzi, idatzi, idatzi 1106 01:00:20,000 --> 01:00:23,000 eta 3 puntu, 3 puntu, 3 puntu, 3 puntu lortu. 1107 01:00:23,000 --> 01:00:26,000 Hitz zerrenda beltza boolearra ezarriz gai izan nahi dugu 1108 01:00:26,000 --> 01:00:29,000 eta egia duzun dagoeneko aurkitu du, eta, beraz, hori zergatik egiten dugun 1109 01:00:29,000 --> 01:00:31,000 kapsulatuaren egitura honetan. 1110 01:00:31,000 --> 01:00:35,000 >> Orain, behera hemen Scramble izeneko beste hiztegi eta egitura hau. 1111 01:00:35,000 --> 01:00:39,000 Absenteak hemen hitza typedef kasu honetan delako 1112 01:00:39,000 --> 01:00:43,000 hiztegi baten ideia enkapsulatu behar dugu, 1113 01:00:43,000 --> 01:00:46,000 eta hiztegi bat hitz sorta osoa dauka, 1114 01:00:46,000 --> 01:00:49,000 array hau engaiatuko, eta nola hitz horiek asko daude? 1115 01:00:49,000 --> 01:00:51,000 Beno, edozein izeneko hau aldakorra tamaina dio. 1116 01:00:51,000 --> 01:00:53,000 Baina besterik ez dugu behar hiztegi bat. 1117 01:00:53,000 --> 01:00:55,000 Ez dugu behar izeneko hiztegi datu-mota bat. 1118 01:00:55,000 --> 01:00:58,000 Besterik ez dugu behar horietako bat, beraz, bihurtzen da C 1119 01:00:58,000 --> 01:01:03,000 ez baduzu, esan typedef, esan besterik ez duzu eta egitura, eta, ondoren, kizkur giltza barruan 1120 01:01:03,000 --> 01:01:05,000 zure aldagai jarri gero, izena jarri behar duzu. 1121 01:01:05,000 --> 01:01:09,000 Aldagai bat izeneko hiztegi geratuko 1122 01:01:09,000 --> 01:01:11,000 itxura hau. 1123 01:01:11,000 --> 01:01:16,000 Por el contrario, lerro hauek berrerabilgarriak sortzeko izeneko datu egitura hitza 1124 01:01:16,000 --> 01:01:19,000 anitz kopiak sor ditzakezula bezala sortu dugu 1125 01:01:19,000 --> 01:01:22,000 ikasleek hainbat kopia. 1126 01:01:22,000 --> 01:01:24,000 >> Zer esan nahi du, azken finean, egiten uzten digu? 1127 01:01:24,000 --> 01:01:30,000 Dezagun atzera me, demagun, errazagoa da adibide bat aldiz errazagoa, 1128 01:01:30,000 --> 01:01:34,000 eta utzi ireki me,, demagun, compare1.c. 1129 01:01:34,000 --> 01:01:38,000 Arazoa hemen ibili da benetan itzuli zuritu 1130 01:01:38,000 --> 01:01:41,000 kate baten geruza eta prestakuntza gurpilak horiek ari 1131 01:01:41,000 --> 01:01:44,000 bihurtzen da, kate bat dela denbora hori guztia 1132 01:01:44,000 --> 01:01:47,000 aste 1 benetan agindu ezizen bat besterik ez, 1133 01:01:47,000 --> 01:01:51,000 sinonimo, zerbait itxura apur bat gehiago críptica liburutegia CS50 1134 01:01:51,000 --> 01:01:53,000 char *, eta ikusi dugu star hau baino lehen. 1135 01:01:53,000 --> 01:01:55,000 Fitxategiak testuinguruan ikusi dugu. 1136 01:01:55,000 --> 01:01:59,000 >> Dezagun zergatik izan dugu zehatz-mehatz hau ezkutatzen denbora pixka bat ikusteko. 1137 01:01:59,000 --> 01:02:02,000 Here compare1.c izeneko fitxategi bat da, 1138 01:02:02,000 --> 01:02:07,000 eta galdetzen itxuraz erabiltzaileak 2 kateak, s eta t 1139 01:02:07,000 --> 01:02:11,000 eta, ondoren, kateak horiek alderatu line 26 berdintasuna saiatzen da, 1140 01:02:11,000 --> 01:02:14,000 ari dira eta berdina esaten baldin bada, "gauza bera idatzi duzu," 1141 01:02:14,000 --> 01:02:17,000 Oraindik ez badira berdinak, esaten du "gauza desberdinak idatzi duzu." 1142 01:02:17,000 --> 01:02:19,000 Dezagun aurrera eta programa hau exekutatzeko. 1143 01:02:19,000 --> 01:02:23,000 Dezagun joan nire iturburu direktorioan sartu Niri, compare1. Ados konpilatu da. 1144 01:02:23,000 --> 01:02:25,000 Dezagun compare1 exekutatu me. 1145 01:02:25,000 --> 01:02:27,000 Mapan handiago dut, sartu. 1146 01:02:27,000 --> 01:02:29,000 Esan zerbait. HELLO. 1147 01:02:29,000 --> 01:02:32,000 Zerbait esan dut berriro. HELLO. 1148 01:02:32,000 --> 01:02:34,000 Ez dut behin betiko ez idatzi gauza desberdinak. 1149 01:02:34,000 --> 01:02:37,000 >> Dezagun honetan saiatu berriro. Bye Bye. 1150 01:02:37,000 --> 01:02:40,000 Definitely ez da desberdina, beraz, zer gertatzen da hemen? 1151 01:02:40,000 --> 01:02:44,000 Beno, zer da benetan ari line 26 alderatuta? 1152 01:02:44,000 --> 01:02:46,000 [Inaudible-ikaslea] 1153 01:02:46,000 --> 01:02:49,000 Bai, eta, beraz, kate bat, datu-mota bihurtzen da zuri gezur mota da. 1154 01:02:49,000 --> 01:02:53,000 Katea A char * bat da, baina zer da char *? 1155 01:02:53,000 --> 01:02:56,000 Char * A, esan bezala, erakusle bat da, 1156 01:02:56,000 --> 01:03:00,000 eta erakuslea da helbide bat eraginkortasunez 1157 01:03:00,000 --> 01:03:05,000 memoria kokapena batura, eta gertatuko HELLO bezalako hitz batean idatzitako bada, 1158 01:03:05,000 --> 01:03:08,000 kate eztabaidak iraganeko gogoratzen 1159 01:03:08,000 --> 01:03:16,000 hitza bezala HELLO da. 1160 01:03:16,000 --> 01:03:19,000 Gogoratu HELLO bezalako hitz bat irudikatzen daiteke 1161 01:03:19,000 --> 01:03:22,000 karaktere array hau atsegin dute 1162 01:03:22,000 --> 01:03:25,000 eta, ondoren, bukaeran, karaktere berezi bat izeneko pertsonaia null 1163 01:03:25,000 --> 01:03:27,000 \ lu byte irakurtzerakoan gisa. 1164 01:03:27,000 --> 01:03:29,000 Zer da benetan kate bat? 1165 01:03:29,000 --> 01:03:32,000 Iragarki hau dela memoria zatiak baino gehiago, 1166 01:03:32,000 --> 01:03:36,000 eta hain zuzen ere, amaieran ezagun bakarra kate osoan zehar behin 1167 01:03:36,000 --> 01:03:38,000 null karaktere berezi bila. 1168 01:03:38,000 --> 01:03:41,000 Baina hau nire ordenagailuko memorian memoria zatia bada, 1169 01:03:41,000 --> 01:03:44,000 dezagun arbitrarioki esan Kate hori inoiz baino zortea, 1170 01:03:44,000 --> 01:03:47,000 eta got nire ordenagailuaren RAM hasieran kokatzen da. 1171 01:03:47,000 --> 01:03:54,000 Byte 0, 1, 2, 3, 4, 5, 6 ... 1172 01:03:54,000 --> 01:04:02,000 >> Noiz GetString antzeko zerbait esan dut, eta katea s = GetString do I 1173 01:04:02,000 --> 01:04:04,000 zer benetan ari itzuli? 1174 01:04:04,000 --> 01:04:08,000 Hainbat astez hauek, zer da benetan ari s gordetzen 1175 01:04:08,000 --> 01:04:13,000 kate hau berez ez da, baina, kasu honetan, zer gordetzen da 1176 01:04:13,000 --> 01:04:18,000 zer GetString benetan ez delako 0 zenbakia 1177 01:04:18,000 --> 01:04:20,000 da, fisikoki ez du itzuli kate bat. 1178 01:04:20,000 --> 01:04:22,000 Horrek ez du, nahiz eta benetan kontzeptuala zentzua. 1179 01:04:22,000 --> 01:04:24,000 Zer bueltan zenbaki bat du. 1180 01:04:24,000 --> 01:04:28,000 HELLO memoria helbidea, 1181 01:04:28,000 --> 01:04:32,000 eta katea s ondoren, atzera zuritu geruza hau bada, katea ez da benetan existitzen. 1182 01:04:32,000 --> 01:04:35,000 CS50 liburutegia sinplifikazio bat besterik ez da. 1183 01:04:35,000 --> 01:04:38,000 >> Honek benetan zerbait char * izenekoa da. 1184 01:04:38,000 --> 01:04:41,000 Char zentzua hitz bat delako, HELLO bezala? 1185 01:04:41,000 --> 01:04:44,000 Beno, bat karakteretan serieak, pertsonaia multzo bat da. 1186 01:04:44,000 --> 01:04:47,000 * Char pertsonaia baten helbidea esan nahi du, 1187 01:04:47,000 --> 01:04:50,000 beraz, zer du kate bat itzuli esan nahi du? 1188 01:04:50,000 --> 01:04:53,000 A nice, kate bat itzultzeko modu sinple 1189 01:04:53,000 --> 01:04:57,000 baino gehiago saiatu figura nola itzuli, 5 edo 6 byte I 1190 01:04:57,000 --> 01:05:01,000 utzi duen byte helbidea itzultzeko me? 1191 01:05:01,000 --> 01:05:03,000 Lehena. 1192 01:05:03,000 --> 01:05:06,000 Beste era batera esanda, memorian pertsonaia bat emateko me helbidea. 1193 01:05:06,000 --> 01:05:10,000 Horixe adierazten char *, helbidea memoria pertsonaia bakarra. 1194 01:05:10,000 --> 01:05:12,000 Dei aldakorreko s hori. 1195 01:05:12,000 --> 01:05:15,000 S denda helbidea, jakin esan arbitrarioki I 0 da, 1196 01:05:15,000 --> 01:05:19,000 gauza simple mantentzeko, baina errealitatean, oro har, handiagoa da zenbaki bat. 1197 01:05:19,000 --> 01:05:21,000 >> Itxaron minutu bat. 1198 01:05:21,000 --> 01:05:23,000 Ari zaren besterik ez bada me lehen karaktere helbidea ematea, nola ezagutzen dut zer da helbidea 1199 01:05:23,000 --> 01:05:25,000 pertsonaia bigarren, hirugarren, laugarren eta bosgarren? 1200 01:05:25,000 --> 01:05:27,000 [Inaudible-ikaslea] 1201 01:05:27,000 --> 01:05:31,000 Bakarrik ezagutzen duzu non katearen amaieran handy trikimailu honen bidez, 1202 01:05:31,000 --> 01:05:35,000 beraz, zerbait erabiltzen duzun printf bezala, zer printf literalki bere argumentu gisa hartzen du, 1203 01:05:35,000 --> 01:05:39,000 gogoratzen erabiliko dugu% s biltegian, eta, ondoren, gainditu duzu 1204 01:05:39,000 --> 01:05:41,000 kate bat gordetzeko aldagaia. 1205 01:05:41,000 --> 01:05:47,000 Zer da benetan ari zaren pasatzen kate horretako lehen karaktere helbidea da. 1206 01:05:47,000 --> 01:05:50,000 Printf ondoren erabiltzen loop edo, berriz, begizta bat helbidea jaso gainean, 1207 01:05:50,000 --> 01:05:53,000 esate baterako, 0, beraz Horretarako me now, 1208 01:05:53,000 --> 01:06:02,000 printf ("% s \ n"); 1209 01:06:02,000 --> 01:06:07,000 When I deitzen printf ("% s \ n", s); benetan zer naiz printf emanez 1210 01:06:07,000 --> 01:06:13,000 s lehen karaktere helbidea, arbitrarioak kasu honetan, H. 1211 01:06:13,000 --> 01:06:16,000 >> Nola ez dakit zer erakutsi pantailan printf? 1212 01:06:16,000 --> 01:06:19,000 Duen pertsonak jarri du martxan, printf bitartean loop bat inplementatu edo bat loop 1213 01:06:19,000 --> 01:06:23,000 esaten duen pertsonaia hau ez dira berdinak null karaktere berezi? 1214 01:06:23,000 --> 01:06:25,000 Hala ez bada, inprimatu. Nola honi buruz? 1215 01:06:25,000 --> 01:06:28,000 Ez bada inprimatu, inprimatu, inprimatu, inprimatu. 1216 01:06:28,000 --> 01:06:32,000 Oh, hau berezia da. Gelditu inprimatzeko eta erabiltzaileari itzultzeko. 1217 01:06:32,000 --> 01:06:35,000 Eta hori da, hitzez hitz guztiak kanpaia azpian gertatzen ari, 1218 01:06:35,000 --> 01:06:38,000 eta horrek asko klase baten lehenengo egunean digeritzen 1219 01:06:38,000 --> 01:06:43,000 baina orain benetan eraikin guztia ulertzeko bloke 1220 01:06:43,000 --> 01:06:46,000 gure ordenagailuaren memoria barruan joan 1221 01:06:46,000 --> 01:06:49,000 eta, azkenean, hau tease dugu gain laguntza apur bat 1222 01:06:49,000 --> 01:06:51,000 gure lagun bat Stanford at. 1223 01:06:51,000 --> 01:06:56,000 >> Irakaslea Nick Stanford Parlante bideo sekuentzia zoragarri honetan egin du 1224 01:06:56,000 --> 01:06:58,000 hizkuntza ezberdinetan sartu era guztietako 1225 01:06:58,000 --> 01:07:00,000 Claymation pertsonaia Binky txiki honetan. 1226 01:07:00,000 --> 01:07:03,000 Buruz Oraindik duzu ahots bat besterik ez gutxi bigarren Sneak preview entzun 1227 01:07:03,000 --> 01:07:05,000 Stanford irakasle batek, eta lortzean ari zaren 1228 01:07:05,000 --> 01:07:07,000 5 edo 6 segundotan eskubide hori gaur egun, 1229 01:07:07,000 --> 01:07:09,000 baina ohar hau horren gainean amaituko dugu 1230 01:07:09,000 --> 01:07:11,000 eta asteazkenean hasiko da. 1231 01:07:11,000 --> 01:07:15,000 Erakuslea Binky, preview Fun ematen dizut. 1232 01:07:15,000 --> 01:07:18,000 [♪ Music ♪] [irakaslea Parlante] Hey, Binky. 1233 01:07:18,000 --> 01:07:21,000 Esnatu. Erakuslea fun denbora da. 1234 01:07:21,000 --> 01:07:24,000 [Binky] Zer da hori? Erakusleak buruz ikasi? 1235 01:07:24,000 --> 01:07:26,000 Oh, GOODY! 1236 01:07:26,000 --> 01:07:29,000 >> Asteazkenean ikusiko dugu. 1237 01:07:29,000 --> 01:07:32,000 [CS50.TV]