[Powered by Google Translate] Artikulua Arazoa Ezarri 2: Hacker edizioa Rob Bowden, Harvard Unibertsitatea Hau CS50 da. CS50.TV Beraz, Rob naiz. Kirkland senior bat naiz. Hau nire, urteko hirugarren CS50 TFing da. Lehen aldiz tradizionala-antzerkia-style atala aldatzen ari garela da, , non berrikuspena besterik ez dugu mota hitzaldia gertatu zen, eta, ondoren, guys galderak, Gaur egun, askoz ere gehiago arazo-oinarritutako izanik, non Espazioak erabiltzen dugu, eta - Oh, eta, beraz, ideia bidali I lotura duten joan da eta, ondoren, nire Space izango dituzu. Does Edozeinek ez dute ordenagailu eramangarri bat? Ongi da. Beraz, erabiltzen ari den honetan ari dugu, eta behar egiteko arazoak goaz atalean bizi eta eztabaidatzen eta kalkulatzen zer gertatzen eta tira I baliteke zure kodea, eta zure ideiak eztabaidatzeko ditzake. Beraz, edonork du zailtasun izan? Aldean dezakezu chat, ez dakit horren arrazoia dugu egingo. Orain, aurreko supersection bezala, klase hartan balitz, zer esan buruz badakizu. P multzo guztietan ez da atal hauetan izango da. P-set 2 Beraz, zehaztapenak, P-set 1 ikusi duzu dagoeneko uste dut. Baina, P-set 2 dugu, gaur egun baino gehiago egingo dugu. Eta galdera atal bat ikusiko duzu. Beraz, hau da P-multzo guztietan; galdera atal bat izango da. Orain arte esan dugu, "Demagun hau lantzeko aukera." Ez dizu eskatuko programa hau aurkeztu behar dute. Ideia horiek lagunduko duzu arazoa multzoa hasi mota ustezko. Hacker edizioan guess I, horietako asko dira ustezko berria izan nahiko luke, gauza interesgarri ikasteko. Agian ez dira zuzenean arazoa multzoa aplikagarri. Eta une honetan ez gabiltza aurkeztu duzu, baina teorian, arazoa geroago multzo, aurkeztu dezakezu, eta, horrela, bi aukera hauek dituzu atal edo ikusi atalean erantzunak lortzeko, edo, besterik gabe, ahal izango dituzu zeure ez baduzu, nire presentzia gozatzeko sentitzen. Beraz, hau da, lehen bat dela uste dut. Oh. Era berean, galdera-atal hauen pean ere dizugu eskatu film labur buruzko galderak. Beraz, I guess, teorian, zu ustezko horiek ikusi ahal izateko atal etorri aurretik, baina fina da, ez baduzu, hala ere joan dugu haien gainean. Beraz, ezin dugu hasteko: "Nola, berriz, begizta bat du do-bitartean begizta bat datoz? Bigarrenak, berriz, bereziki erabilgarria da? " Beraz, edonork izan edozein? [Student] do bitartean-loop beti izango da gutxienez behin exekutatu. Bai. Beraz, desberdintasuna da. A bitartean loop - I'll do it hemen loop, berriz, baldintza dugu hemen, berriz, do-, berriz, ez duzu egoera bat lortu arte hemen. Eta, beraz, zure programa da, exekutatzean lortzen, eta bitartean loop egiaztatzen berehala baldintza egia bada. Baldintza hori ez da Egia bada, aski izango da saltatzeko baino gehiago begizta oso-osorik. Do-bitartean loop, programa exekutatzean gisa, "egin." Egingo du Ezer ez da puntu honetan gertatzen da, besterik gabe jarraitzen du exekutatzean. Orduan ", berriz," hits baldintza egia bada, begizta izango da atzera, eta berriro egin eta behin eta berriz baldintza arte ez da egia, eta, ondoren, soilik erortzen bidez. Beraz, aldea, hori oso Irteeran eskubidea salta dezakezu. Nahitaez exekutatzen behin eta, ondoren, aldiz gehiago exekutatu baldintza egia da, oraindik ere bada. Beraz, berriz, loop bakarrik egin ondoren, edo, berriz, loop - Agian ez dugu egin beharko, bezala iritsi bezain laster, geroztik, baldintza faltsua bada, besterik ez dugu saltatzeko eskubidea baino gehiago. Do-bitartean, berriz, loop, exekutatu egingo dugu behin, nahitaez. Ondoren, lortu dugun baldintza da, egia edo gezurra bada egiaztatu dugu. Egia da, bada, ez dugu berriro, bestela, besterik ez dugu jarraitzea. Beraz, azken hori bereziki erabilgarria? Beraz, esan daiteke, 4 urte osoa, 3 urte, edozein. egin dudan programazioa, erabiltzen dut hau, atsegin 10 aldiz pean. Eta, ziurrenik, horietako 5 CS50 dira-, berriz, loops ari gara sartuz. Beraz, ez loops-erabiltzen duzu? Denean - bai? [Student] erabiltzaile sarrera, edo zerbait egiaztatu nahi duzun iritsi saiatzen ari zaren Bai. Horretarako, berriz, loops, erabiltzaileak sarrera handi bat da. Horregatik, lehenengo bikoteak arazo multzo, erabiltzaileak eskatu, nahi duzun "Eman dit kate," ezin jarraitu kate hori lortu arte. Eta, beraz, nahitaez, duzu, katea eskatu behar gutxienez behin. Baina gero, erantzuten du zerbait txarra izanez gero, eta ondoren behar loop atzera eta galdetu berriro. Baina beste erabiltzailearen sarrera baino, oso arraroa da aurkitzen dut kasu bat non nahi loop dut "gutxienez behin", baina ziurrenik gehiago. Galdera edo -? Erabiltzen du edonork do bitartean-begizta bat beste inon? Ongi da. Hurrengo Beraz, "Zer esan nahi du undeclared identifikatzailea normalean adierazten clang by outputted bada? " Beraz, zer nolako kode iritsi idazten dut 'undeclared identifikatzailea?' [Student] x = 2? Beraz, saiatu egin behar dugu hemen, x = 2. Hau abiarazi dugu - oh, ez nuen egin klik. Hortaz, hona hemen jaso dugu eskubidea. : "Identifikatzailea undeclared x Erabili". Beraz, undeclared identifikatzailea, aldagai bat da. Identifikatzaile bat aldakorra maiz deitu izango da. Beraz, agian ez daki benetan aldagai bat da, ez daki zer den. Beraz, identifikatzaile bat da. Beraz, zergatik da undeclared? Bai. Beraz, argi eta garbi izan behar du terminologia, aldagai baten aitorpena "int x," edo "kate y," edozein dela ere esan duzu. Aldagaia hasieratzeko, edo aldagaia esleipena, duzunean esan "x = 2." Beraz, honako hauek egin ahal izango dugu, urrats desberdinetan, int x, x = 2, eta arte stuff sorta bat izan dezakegu hemen baina lerro hau gertatzen den arte, x dago oraindik uninitialized, baina izendatu du. Eta horrela, jakina, ezin dugu egin lerro 1, eta, gaur egun, eta ari gara geratuko hasieratzean. Zalantzak dituzu? Eta, azkenik, "Caesar Cipher Zergatik ez da oso segurua?" Beraz, lehenik eta behin, ez du edonork nahi Caesar Cipher zer esan nahi da? [Student] Caesar Cipher mapa duzun besterik ez da, letra bakoitzak mugitzeko, letrak kopuru jakin bat joan, eta eraman baino gehiago, eta ez da oso segurua delako ez da bakarrik 26 aukera, eta horietako bakoitzean 1 saiatu besterik ez duzu lortu arte. Oh. Beraz, errepikatu egin behar dut? Caesar Cipher, it's - Esan nahi dut, daiteke duzu arazoak aurre - edo arazo-multzo hori ez da hacker edizioan edizio estandarra uste dut. Beraz, arazoa multzoa estandarra edizioan, mezu bat lortuko duzu, hala nola, "Kaixo mundua" Horrez gain, 6 bezalako zenbaki bat, eta mezu hori hartuko duzu, eta pertsonaia bakoitzak banakako, biratu alfabetoaren 6 posizio. Beraz, 'h' kaixo h-i-j-k-l-m-n bihurtuko litzateke. Beraz, lehenengo letra n izango litzateke. Gauza bera egiten dugu, e. Dugu bada, nahi, z edo zerbait, eta gero itzuli itzulbiratu dugu inguruan 'A' Baina pertsonaia bakoitzak lortzen cycled alfabetoaren 6 karaktere geroago, eta ez da oso segurua zenbat modu bakarra gutun bat biltzeko ezin duzu bakarrik 26 aukera daude. Beraz, besterik gabe, saiatu guztiak, horietako 26, eta, ustez, long message nahikoa horiek ahalik eta 26 gauza 1 bakarrik irakurgarri izango da, eta irakurgarri bat da jatorrizko mezua izango da. Beraz, ez da ezer guztiak at enkriptatzeko modu oso ona. Film labur horiek zerikusirik, "Zer funtzio bat da?" Beraz, zer funtzio bat da? Bai. [Student] kode joan bidez, eta, ondoren, edozein izanda ere balio itzulera deitu ahal duzu aparteko pieza bat bezalakoa da. Bai. Beraz, erantzun dut ere hurrengo erantzunez edo errepikatu ere, besterik gabe, hurrengo erantzunez. Funtzioak erabili ditzakezu ordez kodea kopiatu eta itsasteko baino gehiago eta gehiagoko berriro. Just kodea duten fuction batean jarri, eta, ondoren, besterik gabe, ezin duzu funtzioa deitu lekuan izan zara kopiatu eta itsasten. Beraz, funtzio erabilgarria. Beraz, orain benetako arazo egin dugu. Lehena. Lehenengo ideia Beraz, pasatzen duzu kate bat, eta edozein edo minuskulaz guztiak ez esan? Horrek ez du esan minuskulaz guztiak. Beraz, mezua ezer izan daiteke, eta - oh ez. Egiten du. "Sinpletasuna, demagun erabiltzaileak sarrera minuskulak eta zuriuneak bakarrik ahal izango duzu." Beraz, letrak minuskulaz mezu bat gainditu dugu eta, ondoren, Ordezko kapitala eta minuskulaz arteko kate kapitala eta minuskulaz, txandaka aldatzen dugu. Beraz, eman aurretik dizugu bigarren arazoa ere murgiltzea, zer egin behar dugun lehenengo gauza da? Oh, zer egin klik egin besterik ez dut? Oh, hemen mezu elektroniko bat besterik ez dut, bertan klik eginez. Beraz, lehenengo gauza egin behar dugu, am bilatzen dut oker bat? , Hau da hau? Ez, horiek oraindik ez dago, baina. Ados, oraindik hemen. Orain, ezin dugu bere gain hartzen? Bai. Hemen ezin dugu bere gain hartzen dela soilik minuskulaz eta espazioak. Beraz, orain Izan ere, letrak edozein izan nahi dugu izan daiteke aurre egin behar dugu. Eta horrela, lehenengo gauza egin nahi dugu, besterik ez da mezua. Kate bat lortu behar dugu, kate s = GetString, ados. Orain arazo hau, hura egiteko moduak pare bat dira. Baina hemen bitekin operadoreak erabil nahi dugu. Ba bai ziren ez supersection hartan, edo horrelako zerbait, eta ez dakit zer bitekin operadoreak dira? Edo nola ASCII dute inolaz ere? [Student] ez zen dut supersection da, baina ezagutzen dut zer bitekin operadoreak dira. Ongi da. Orduan ez daukat horien oinarriak baino gehiago joan dira, baina azalduko dut Hemen zer erabili nahi dugu. Beraz, 'A': Binary hiriburua A ordezkaritza, kopurua 65 izango da. Begiratu besterik ez naiz - 41 01000001 izango da. Beraz, 65 hamartarrean izan behar du, beraz, pertsonaia hiriburua A. ordezkaritza bitarra da Orain, pertsonaia ordezkaritza bitarra minuskula 'a' gauza bera izan da, eta ia-ia. Dela - 6, bai. Eskubidea da. Beraz, bitar hiriburua, bitar minuskulaz '.' Beraz, A eta 'a' bit hau bakarra da. Arteko aldea nabarituko Eta hau gertatzen da 32 bit bit kopurua 32 ordezkari izan. Eta zentzua A 65 geroztik, 'a' 97. Bien arteko aldea 32. Beraz, gaur egun A 'a' bihur dezakegu A hartuz badakigu eta bitekin ORing, - duten itxura bat 1. Bitekin EDO, 00100000 da, eta hori eman egingo '.' Eta 'a' gaitezke A bitekin ANDing 11, leku horretan, 11111 0. , Beraz, hau izango da, ondoren ematen diguten zehazki zer 'a' izan zen, baina bertan behera utzi banakako bit hau, beraz, 01000001 izan dugu, ez dakit zenbatuko diot. Baina teknika hau bitekin ORing kapitalaren minuskula eta bitekin minuskulaz kapital ANDing ez da A. esklusiboa Letrak guztiak, vs k K, Z vs z, horien guztien besterik ez dira single bit desberdinak. Eta, beraz, hau erabili ahal izango duzu, edozein letra minuskulaz from maiuskulaz edozein eta alderantziz aldatzeko. Ongi da. Beraz, horretatik lortzeko modu erraz bat, beraz, ordez beharrik idatzi edozein izanda ere 1011111 - Zenbaki hau adierazten modu erraza da, eta hau ez da bat joan dela ditut supersection en, baina Tilde (~) bitekin operadorea bat da. Zer ~ ez da bit ordezkaritza itxura da. Dezagun edozein zenbaki. Zenbaki bitar batzuk besterik ez da, eta zer ~ ez da flips besterik ez bit-guztiak. Beraz, 1, 0 da, hau da, 0, 1, 010100. Beraz, ~ guztiak ez. Kentzeko - Beraz, 32 zenbakia izango da - beraz, 32 zenbakia 00100000 joan, eta, beraz, hau ~ izango da zenbaki hau hemen ANDed I 'a'. Denek ikusi hori? Nahiko ohikoa da, hau da, irudikatu nahi duzun bezala dugun ikusteko agian, ikusi nahi dugu gauzak geroago - edo nahi dugun guztia, bit multzo bakoitza 1 izan ezik bit dugu ez dutela nahi ezarri ~ egin ohi duzu. Beraz, ez dugu nahi, ez dugu 32 ~ 32 bit multzo beraz. Ongi da. Beraz, horiek guztiak erabili ahal izango dugu hemen. Ondo da, beraz, fina egiten ari ez bada, poliki-poliki egingo dugu, oinez baino gehiago elkarrekin, edo horren gainean ibiltzea, eta, beraz, honen bidez. Ibili honen bidez. Beraz, gure katea dugu, eta kate horretan pertsonaia besteen gainetik loop nahi dugu, eta ez da zerbait. Beraz, nola egin dugun kate bat baino gehiago loop? Zer erabili behar dugu? Ez dut hemen egin behar. Bai. Beraz, nire iterator daukat, eta esan zuen, baina nola egiten da zenbat karaktere katea ezagutzen dut? (S), Strlen gero i + +. Beraz, zer egin dut hemen ez da gauzak egiteko modurik onena. Does Edozeinek daki zergatik? Ari zaren hizkuntza katea aldi bakoitzean bakarra delako egiaztapena. Ari gara strlen eraman nahi, beraz, esan nuen hemen, int luzera = strlen (s), eta, ondoren, > 1 bit. 1 bit baino gehiago izan daiteke, betiere, jarrera hori azpian bit guztiak berdinak dira. Beraz, gutxienez 26 karaktere behar dugu, edo, ez dira 26 karaktere. Beraz, gutxienez 26 zenbakiak behar dugu desberdintasuna adierazteko A eta 'a' gutxienez 26 izan ditu, arteko aldea edo, bestela, ez genuke dute irudikatzen hiriburua zenbaki guztiak. Horrek esan nahi du A, 1 hasten badugu, bit horiek guztiak erabili egingo horiek lehen 5 bit, dena irudikatzeko Z. Horregatik, hurrengo apur bat, edo bit hau da, hurrengo apur bat aukeratu duten A eta artean bereizteko da 'a.' Hori da, gainera, zergatik, ASCII taulan, 5 sinboloak daude letrak minuskulaz maiuskulaz banantzen. Duten sinboloak, aparteko 5 dituen 32 bien arteko aldea dira geroztik. [Student] Beraz, egin izan dugu, ASCII da, era horretan diseinatuta baitago. Bai. Baina ASCII aldea izan ere bi bit horiek. Like A ziren 10000001 bada, eta 'a' 11100001 -, ahaztu dut, edozein izanda ere. Baina hori izanez gero, ondoren, oraindik ezin dugu erabili 'a' - A. Oraintxe da A eta 'a' oraindik 2 bit horien arteko aldea. Idatzi 48 uste dut. Da 32 + 64? Uste dut? Pertsonaia bakoitza,, Z eta z, K eta k, oraindik 2 bit izango litzateke oraindik 2 bit horiek izan ezik, ezarritako bit zehatza berean nahi dute. Beraz, betiere hori beti egia, edozein ari gara ASCII edo beste sistema batzuk erabiliz gero, luzea izan ere, soilik desberdinak dira, eta pertsonaia bakoitzari bit kopurua multzo bat bezala, Orduan, ongi funtzionatzen duen. Besterik ez da, 32 sortu zen lehen bat delako, seguru asko erabili izan dugu. >> Cool. Ohi dut, nahiago bada, ez duzu ikusten, bloke baino ez da lerro bakar bat, kizkur giltza kendu dezakezu, beraz, hau egiteko asmoak ohi dut. Gainera, gauzak nola egin dezakegun s [i] + = 1 bezala ezagutzen duzu? Ere egin dezakezu s [i] bitekin ETA = 32. Eta bitekin OR = 32. Era berean, zenbatu mod 2 == 0. Beraz, gogoratu ez dut idazteko ez-zero balioa edozein, egia da, eta 0 faltsua. Beraz, "bada Aldaketa mod 2 == 0" esatea bezala da "ez zenbatu mod 2 arazorik badago." Besterik ez seguruenik izango litzateke trukatuta lerro eta hau esan du, "count bada mod 2 ez OR 1, bestela ez ETA 1, "beraz, ez dut behar" ez. " Baina hori bezain ondo funtzionatzen. Eta zer gehiago egin nahi dut? Konbinatu izan duzu, hirutarra adibidez, zuk nahi izanez gero, baina gero litzaidake besterik ez gauzak Messier eta seguruenik zailagoa irakurri, eta, beraz, ezin izango dugu. Edonork beste edozein iradokizun? Da arazo guztiak eskatu? Oh yeah. Beraz, lerro huts horiek kentzeko, f,% s inprimatu dugu bat izateaz kateak, F inprimatu egingo dugu, s. Orain dezagun exekutatu da. Ba ezer txarrik egin behar dut? Hori \ "; n bat egin nahi dut. Ongi da. Orain abiarazi dugu. Yell at me ziurrenik izango da. Strlen string.h da. Buruz gauza atsegina Clang Beraz kontatzen du, zer da, ordez GCC besterik ez dio, "Hey, zerbait ahaztu duzu, ez dakit zer izan zen." Baina hau esan du, "string.h besteak beste, esan nahi duzu." Beraz, ez nuen ezer galdetuko, beraz, ez da ezer esaten. Baina euren Adibidez egin dugu ", 4 gehigarri Eskerrik asko". Hori itxura eskuineko. Hooray. Beraz, zure nagusira itzuli, inoiz ez dut ia egin du. Aukerakoa da. Eta nagusia aukerakoa da funtzio bakarra da. Itzuli ez baduzu ezer nagusia, bere gain hartu zuen, ondorioz, 0-ra itzuliko. Zalantzak dituzu? Ongi da. Beraz, gaur egun, bigarren arazoa. "2 aste-en hitzaldia bigarren aldaketa, 2 aldagai 'balioak Gogoratu pasatuz funtzio bat (nahiz eta deitu swap) 2 aldagai horiek ez dira zehazki lan egiteko, ez behintzat gabe 'erakusleak. " Eta alde batetara utzi erakusleak horiek iritsi arte. 2 aldagai swap nahi dugu, ez dugu funtzio bat erabiliz egin. Oraindik ari gara egin nagusian dioen bezala. Baina 2 aldagai horiek erabili ahal izateko, ez dugu nahi aldi baterako aldagai bat erabili. 2 modu daude hau egiteko. Egin ahal izango duzu, zure bitar operadore tradizionalak erabiliz. Beraz, ez du edonork egiten modu azkar eta zikin bat ezagutzen? Hartu Litekeena da pentsamendu minutu bat benetan. Dut Arazoa ezartzeko dut eskatu dute. Beraz, 2 aldagai I, A, eta hori besterik ez da zenbaki oso bat eman ninduten, eta batura aldagai B, beste I, naiz eman osokoa da. Beraz, bada, 2 aldagai horiek, gaur egun horietako swap nahi dut. Tradizionala, zure bitar operadore erregularra erabiliz, esan nahi dut, + bezala, -, ÷. Ez bitekin operadore den bitar jarduteko. , +, ÷, eta horiek - Beraz erabiliz. Gauza bezala swap izan dugu a = a + b, eta b = a - b, a = a - b. Beraz, behatu egiaztatu, eta gero ikusiko dugu zergatik duten lanak. Demagun = 7, b = 3, eta gero + b 10 izango da. Beraz, gaur egun ari gara = 10 bat ezartzea, eta ondoren, b = a ari gara egiten - b. Beraz, egiten ari garen b = a - b, hau da, 7 izango da, eta b = a - b berriz, edo a = a - b. 7 hau da, 3 - Zein da 10 izango da. Beraz, gaur egun, behar bezala, 'a' 7 izan zen, b 3, eta, gaur egun, b 7 da, eta 'a' 3. Beraz, mota horretako zentzua; 'a', 2 zenbakiak konbinazioa da. Puntu honetan, 'a' konbinazioa da, eta, ondoren, jatorrizko b ari gara kenduz, eta, ondoren, ari gara kenduz zer izan zen jatorrizko 'a.' Baina horrek ez du zenbaki guztietan lan egiteko. Hori ikusteko, dezagun, sistema bat, beraz, 32 bit gisa osoko zenbakien normalean uste dugu. Dezagun zerbait soilik 4 bit bezala lan egiten. Zorionez adibide on batekin sortu naiz oraintxe bertan. Beraz, badakit, erraza izango da. Demagun gure 2 zenbakiak dira, 1111, eta 1111; bitarra dugu, beraz, oraintxe bertan. Hamarren esan nahi duzun pentsatu ahal izateko, era horretan, = 15 eta b = 15. Eta, beraz, espero dugu trukatu ditugu ondoren, ez dute ere zenbakiek berdinak izan, baina egin nuen modu honetan. Dezagun dituzten zenbakiak ez dira berdinak. Egin dezagun 1111 eta 0001. Beraz, = 15 eta b = 1. Trukatu ditugu ondoren, 'a' 1 eta b 15 izatea espero dugu. Beraz, gure lehen urratsa da, a = a + b. Gure zenbakiak soilik 4 bit zabal dira, eta, beraz, 'a, hau da, 1111, + b, hau da, 0001, amaitzeko 10000 izateaz, baina 4 bit besterik ez dugu. Beraz, a = 0. B - benetan, hau da, oraindik ere lan egiten du bikain, eta gaur egun, b = a ezarri nahi dugu. = a - b - Ikus dezagun honetan lan egiten badu, ezin hobeto. Orduan b = 0 - 1, eta horrek oraindik ere 15, eta, ondoren, a = a - b, eta horrek 1 izango litzateke. Agian, horrek egiten du lan. Ez dago arrazoirik ez du lan erregularra erabiliz bezala sentitzen dut. Ongi da, eta, beraz, ez dela binary erregularra eragiketak lan hipotesi lan, eta itxura izango dut Google dela egia bada egingo dut. Beraz, zer egin nahi dugu, bitekin operadoreak erabiliz, eta hemen arrastoren XOR. Beraz, XOR (^) sartuz ikusi ez baduzu oraindik. Da, berriro ere, bitekin operadorea pixka bat jarduten du, beraz, apur bat, eta it's Bitak 0 eta 1 bada, orduan hau 1 izango da. Bit 1 eta 0 bada, 1 izango da, 0 eta 0 bit izan 0 izango duzu, eta 1 eta 1 bit baduzu 0 izango da. Horrela da OR. Bit-bai dira egia bada, 1 da, baina OR ez bezala, ezin da bit bai benetakoak direla. OR hau litzateke 1, XOR honetan 0 izango litzateke. Beraz XOR hemen erabiltzeko nahi dugu. Pentsatu minutu bat; Google noa. Beno, ezin duzu irakurri. Gaur egun naiz XOR swap algoritmoa orrian. Zorionez zergatik I can't azalduko Hau da, zehazki algoritmoa besterik ez genuen. Ez dut ikusi zergatik izan behar dut bildu adibide txarra, baina kasu honetan, 'a' gertatu 0 bihurtzeko, 5 bit iritsi ondoren, eta, beraz, orain 'a' 0 dela deritzo, "zenbaki oso gainezkatze bat." Wikipedia arabera, "XOR swap ez bezala, aldakuntza hori eskatzen erabiltzen duen metodo batzuk x + y zenbaki oso gainezkatze bat sor ez dela bermatzeko ". Beraz, hau da, arazorik izan; hau zenbaki oso gainezkatze bat izan zen, baina zerbait gaizki egin nuen. Ez nago ziur. Beste bat etorri saiatu naiz. [Student] Beno, ez da zenbaki oso gainezkatze bat dago zenbaki bat jartzen saiatzen ari zaren esleitu duzu bit zenbatekoa baino handiagoa da? Bai. 4 bit daukagu. That's - 4 bit izan genuen, saiatu ondoren, 1 gehitzeko, eta, beraz, 5 bit amaituko dugu. Baina bosgarren bit lortzen moztu, bai. Benetan gerta daiteke - [Student] ez duela bota errore bat, edo hori ez zela errore bat bota? N º Beraz, ez dago error. Muntaia maila, apur bat berezia nonbait ezarri esan gainezkatzea bat izan zen, baina C mota horretako ez duten aurre egiteko. Benetan ez duzu aurre berezia muntaketa C. argibideak ezean Dezagun XOR swap pentsatzen. Eta Wikipedia article ere izan liteke izan dela esaten uste dut Beraz, ekarri ere modular aritmetika, beraz, I izan zen uste dut, teoria, aritmetika modularra egiten 1 15 berriro - 0 esan dut. Beraz, agian benetan - 1 = 15 - prozesadore erregularra du 0. 0 bukatzen dugu sortu zenetik, 1 kentzen dugu, eta, beraz, ondoren, wraps besterik ez da inguruan 1111. Beraz, algoritmoa benetan lan hori, a + b, a - b, b - a; fina izan daiteke. Baina ez da prozesadore batzuk ez dela, eta beraz, ez litzateke ondo egongo litzateke horiek jakin batzuk. XOR swap-prozesadore edozein lan egiteko. Ongi da. Ideia da gauza bera izango da, nahiz eta ustezko. Non XOR erabiltzen ari gara, nolabait, bai informazio aldagai 1 sartu eta, ondoren, tira banakako aldagai informazio berriro. Beraz, ez da inor izan ideia / erantzuna? [Ikasleentzako erantzuna, ulertezina] Beraz, lan egin behar du, eta, gainera, XOR commutative da. Kontuan hartu gabe 2 eta ordena zenbaki horiek gertatuko hemen, emaitza hori bera izango da. Beraz ^ b da b ^ a. Hau idatzi gisa ere ikus dezakezu ^ = b, b ^ = a, a ^ = b berriro. Beraz, hau da, eskuinera, eta, zergatik obra hau, bit, uste ikusteko. Smallish zenbaki bat erabiliz, demagun 11001, eta 01100. Beraz, hau 'a' da, hau da, b. Beraz ^ = b. Ezartzen 'a' = 2 gauza horiek XOR gara. 1 Beraz ^ 0 1 1 ^ 1 0 0 ^ 1 1 eta 0 ^ 0 da 0; 1 ^ 0 da 1. Beraz ',' zenbaki hamartar begiratzen baduzu, izan da joan ez duzu jatorrizko 'a' eta berriaren arteko harremana askoz ere ikusteko ',' baina bit da, 'a' da gaur egun informazio-sare bat bezala bai jatorrizko 'a' eta jatorrizko b. Beraz, bada b ^, ikusiko dugu sortu dugun amaituko dugu jatorrizko '.' Hartuko dugu Eta hartzen badugu jatorrizko 'a' ^ berria ',' amaitzeko dugu jatorrizko b ikusiko dugu. Beraz, (a ^ b) ^ b = jatorrizko '.' Eta (a ^ b) ^ a = b original. Ez dago ezer XOR bera ikusteko beste modu bat da beti, 0. ^ 1101, 1101 Beraz, bit guztiak ez dira berdinak izango. Beraz, ez da inoiz kasu bat, non 1 0 bat da, eta beste 1 izango da. Beraz, hau da 0000. Bera. (A ^ b) ^ b da atsegin ^ (b ^ b). (B ^ b) 0 izango da; ^ 0 besterik ez da ',' bit guztiak 0 geroztik. Beraz, diren bakarrak izango da non 'a' jatorriz 1 - izan dira. Eta ideia bera hemen; nahiko ziur da commutative naiz. Bai. Esan nuen, horren aurretik commutative zen. ^ ',' Eta elkartze da, eta, beraz, gaur egun (b ^ a) ^ a. Eta ez b ^ (^ a) ahal izango dugu. Eta, beraz, berriro ere, jatorrizko b lortuko dugu. Beraz, 'a', 'a' eta b konbinazio elkarrekin. Gure konbinazio berriak erabiliz 'a' esan b = konbinazio 'a' ^ b original, jatorrizko lortuko dugu 'a.' Eta = konbinazio bat 'a' ^ berri b, hain zuzen, jatorrizko - edo gaur egun zer zen 'a' edo b. Kasu honetan behera hemen. = B, b zaharra da. Beraz, gaur egun dena truka ordena. Bit, bada benetan begiratu, b = a ^ b, horiek 2 XOR joan eta erantzuna hau izan da, eta, ondoren, a = a ^ b 2 horiek XORing eta erantzuna da hau. Zalantzak dituzu? Ongi da. Beraz, azkena zertxobait nabarmen zailagoa da. [Student] buruzko galdera bat du uste dut. >> Oh, barkatu. [Student] Zer da benetan azkarrago? XOR hau erabiltzen bada, edo beste aldagai bat deklaratzeko bada? Beraz, zer da, benetan azkarrago, beste aldagai bat deklaratzen edo XOR erabiliz swap? Erantzuna ez da, aukera guztiak, behin-behineko aldagai bat. Eta hori da, behin delako konpilatu behera - beraz muntaia mailan, ez dago, tokiko aldagai edo aldagai edozein aldi baterako edo stuff honen edozein gauza, hala nola. Besterik ez ari dira, ez da memoria, eta badira erregistroak. Erregistroen non gauzak ez dira modu aktiboan gertatzen ari dira. Ez duzu 2 memoria gauzak gehitu; 2 erregistro gauzak gehitu. Eta gauzak ekarri erregistro sartu memoria ondoren gehitu eta gero jarri dezakezu atzera memorian, baina ekintza guztien erregistroak gertatzen da. Beraz, aldi baterako ikuspegi aldakorra erabiltzen ari zara, normalean, zer gertatzen da 2 zenbakiak honako hauek dira dagoeneko erregistro. Eta, ondoren, puntu horretan, trukatu egin dugu ondoren horiek, bakarrik izango da beste erregistro erabiliz. Anywhere izan b erabiliz, aski izango da erabili erregistro dagoeneko gordetzeko 'a.' Beraz, ez du benetan egiten swap ezer egin behar. Bai? [Student] Baina ere memoria gehiago hartzen du, ezta? Bakarrik hartuko du memoria gehiago behar da aldagai hori aldi baterako gorde nahi izanez gero. Atsegin dut aurrerago erabiltzen baduzu aldi baterako aldagaia berriro nonbait, ondoren edo aldi baterako aldagaia zerbait esleitzeko duzu. Beraz, denbora ',' aldi baterako b edozein unetan bada, balio desberdin edo zerbait, gero desberdin kokapenak memoria egingo da, baina egia da tokian tokiko aldagai asko daude bakarrik erregistroak existitzen. Kasu horretan, inoiz memorian jarri, eta, beraz, inoiz ez zaren memoria galdu. Ongi da. Azken galdera da pixka bat gehiago. Beraz, hemen, CS50 tresna honetan, hiztegi bat da. Eta horren arrazoia dagoelako [? B66] spell checker non idazten duzu hash taulak edo saiatzen edo datu-egitura batzuk erabiliz. Idatziz spell checker ari zara, eta erabiltzen ari da hiztegi hau horretarako ari zaren. Baina arazo hau, besterik gabe, ari gara hitz bakar bat dago hiztegian bilatuko du. Beraz, hiztegi osoa gordetzeko datuak egitura batzuetan ordez eta gero, dokumentu osoa baino gehiago bilatzen da ezer gaizki idatzitako bada ikusteko, 1 word aurkitu nahi dugu. Beraz, ezin dugu hiztegi osoa eskaneatu baino gehiago osoan hiztegian hitza inoiz ez dugu aurkituko bada, orduan ez zen hor. Hiztegi osoa baino gehiago eskaneatu bada, eta hitza ez, gero onak, aurkitu dugu. Hemen dio, nahi dugun C fitxategi-manipulazio funtzioa begira hasteko, hiztegia irakurri nahi dugu aurrera, baina aholkua emango dut hemen, zein funtzio uste behar duzu. Espazioak on idatzi dut. Beraz, nagusiak direnak f ireki eta gero, ezinbestean, f itxita begiratu nahi duzu, zure programaren amaieran, eta f f eskaneatu. F irakurri ere erabil dezakezu, baina seguruenik ez duzu nahi hori delako ez duzu amaituko dela beharrik. F eskaneaketa f da zer erabiltzen da hiztegi baino gehiago eskaneatu ari zaren. Eta, beraz, ez duzu behar konponbidea kodea, besterik ez saiatu eta nahi sasi-kodea zure bidea irtenbide bat, eta, ondoren, eztabaidatu dugu. Eta, izatez, dagoeneko eman dut geroztik hauek, terminal edo zure tresnaren shell sartu joan bada, I normalean - nuke ikusi ez baduzu oraindik, I ez jakin klasean egin bada, baina gizona, eta, beraz, man orriak, pretty pretty askoz edozein funtzio begira erabilgarria. Horretarako, I can bezala, gizon f, f eskaneatu. Hau da, eskaneatu f funtzio familia buruzko informazio gehiago. Man f, ireki ere egin izan dut, eta ni neu ere emango dugu horren xehetasunak. Beraz, bada zer funtzioa, erabiltzen ari zaren edo kode irakurtzen ari zaren badakizu eta funtzio batzuk ikusiko duzu, eta, hala nola Oraindik duzu, "Zer esan nahi du hori egin?" Just gizon funtzioa izenarekin. Badira pare bat adibide bitxi bat, non esan liteke nahi. man 2 funtzio-izena, edo man 3 funtzio-izen hori, baina besterik ez duzu gizon bada funtzio izena ez da lehen aldiz lan egiteko. [Student] Beraz, eskuliburuko orrialdea naiz irakurtzen irekita, baina oraindik nola eta programa erabili dut nahastu. Ongi da. Man orriak asko A lagungarria baino gutxiago dira. Lagungarria Oraindik dute dagoeneko badakizu zer egiten eta, ondoren, besterik ez duzu, argumentuak edo zerbait ordena gogoratzeko. Edo ematen dizute orokor bat, baina horietako batzuk oso jasanezinak dira. F f eskaneatu bezala, gainera. Funtzio horiek guztiak buruzko informazioa ematen du, eta lerro 1 behera hemen gertatzen da, hots, "F eskaneaketa f katea edo korrontea irakurtzen du." Baina f ireki. Beraz, nola f irekita erabili dugu? Fitxategia egin behar den programa bat ideia I / O dela lehenik gauza egin nahi duzun fitxategia ireki, eta, ezinbestean, gauza fitxategi hori irakurri eta stuff egin haiekin. F irekita dago zer erabiltzen dugu fitxategia irekitzeko. Gauza hartu behar dugu, zer fitxategia ireki, beraz, nahi dugu, ematen digu - Hemen "/ user / share / dict / hitzak.", dio Fitxategia ireki nahi dugu, eta ireki nahi dugu irakurri edo ireki nahi dugu idazteko ireki nahi ala ez dugu esplizituki zehaztu behar dugu. Konbinazioak eta stuff pare bat da, baina hori irakurtzeko ireki nahi dugu. Fitxategia irakurri nahi dugu. Beraz, zer da bueltan hau? File star (*) itzultzen da, eta besterik ez dut erakutsi aldagaia f dena, eta, beraz, *, berriz, erakusle bat da, baina ez dugu nahi erakusleak aurre egiteko. F dela pentsa dezakezu, f aldagaia fitxategia adierazteko erabiltzen ari zaren. Beraz, bada fitxategia irakurri nahi baduzu, irakurri f duzu. Nahi duzun fitxategia itxi egiten bada, f itxi duzu. Beraz, programaren amaieran ezinbestean nahi dugu fitxategia itxi, zer egin behar dugu? F itxi nahi dugu. Beraz, gaur egun ari gara azken fitxategi funtzioa erabili nahi eskaneatzea f, f eskaneatu f da. Eta zer esan du arakatzen fitxategia eredu bat dator bila. Man orri hemen begira, int f eskaneatu f ikusiko dugu, ez ikusi egin oraingoz balioa itzultzeko. Lehen argumentua file * korrontea, eta, beraz, lehen argumentua pasatzea nahi dugu f da, beraz. F baino gehiago ari gara bila. Bigarren argumentua formatu katea da. Emango dizut formatu katea oraintxe. , Esan 127s \ n, hori alferrikako asko gertatuko dela uste dut. Formatu katea hori da ideia, eskaneatu f inprimatu f kontrakoa uste dezakezu gisa. Beraz, inprimatu f, inprimatu f formatu parametroaren mota hau ere erabiltzen dugu, baina inprimatu f zer egiten ari garen dezagun begiratu baliokidea. Beraz, f inprimatu, eta benetan ere ez da f inprimatu f, non lehen argumentua f izango da. F inprimatu duzunean, esan zerbait genezake, "inprimatu 127s \ n" eta, ondoren, pasatzen badugu kate batzuk, katea hau eta gero, linea berri bat inprimatu. Zer 127 bitartez, nahiko ziur naiz, baina inoiz ez dut neure burua mugatzen da, Ez luke ere behar '127 'esan inprimatu f baina zer esan nahi duen lehen 127 karaktereak inprimatzeko. Beraz, nahiko ziur kasu naiz. Google horretarako dezakezu. Baina ia positiboa dela esan nahi du, hurrengo batean nago. Beraz, hau da, lehen 127 karaktereak, ondoren lerro berri bat inprimatzeko. F eskaneaketa f ordez, aldagai batean begiratu eta inprimatzeko, kate batzuk begiratu, eta aldagai sartu eredua gordetzeko. Dezagun benetan erabili eskaneatzea f beste adibide bat. Hargatik esaten int batzuk izan ditugu, x = 4, eta egindako kate bat sortu nahi dugu, katea sortu nahi bezala, hau askoz beranduago etorriko da, zerbait besterik ez 4.jpg bezala. Programa bat non batura counter izango duzu, beraz, hau izan daiteke, Laburbilduz kontraerasoan i, eta irudi-sorta bat gorde nahi duzun. Beraz i.jpg, non zure begizta-iterazio bat da i gorde nahi duzun. Beraz, nola ez JPEG hori kate hau egin dugu? Nahi duzun da 4.jpg inprimatu nahi baduzu, bakarrik esan izan dugu inprimatu f,% d.jpg eta, ondoren, JPEG hori inprima litzateke. Baina nahi dugu katea 4.jpg gorde nahi izanez gero, eskaneatzea f erabiltzen dugu. Katea s Beraz, benetan dugu can't pertsonaia, char s, goazen 100. Beraz, deklaratu, 100 karaktere array bat besterik ez dut, eta hori da, ezinbestean ari gara gordetzeko JPEG horretan sartu joan Beraz eskaneatu f erabili dugu, eta formatua,% d.jpg nola esango genuke 4.jpg inprimatu ahal izateko, honen formatua% d.jpg izango da. Beraz, formatu% d.jpg ordeztu% d nahi dugu x da, eta, orain, kate hori gorde behar dugu nonbait. Eta non kate hau gordetzea goaz array s da. Beraz, kodea, s-lerro honen ondoren, inprimatu f, aldagaiak s% s bada, 4.jpg inprimatu. Beraz, f eskaneatu f eskaneatu f berdina da, gaur egun fitxategi hau baino gehiago begiratzen ez zer s gorde. Hori da azken argumentua izango da. "Scan f funtzioak bilaketen familia bai formatua arabera behean saiatu gisa gorde nahi dugu. Edozein kokapena puntu gordeta izanez gero itzultzeko dakizukeela - " Ez, ona izango dugu agian. Uste bigarren bat me. Beraz, eskaneatu f ez du zer heck ez duten funtzioa? Beraz, eskaneatu f ez da zenbaki oso bat hartu eta dot jpg egin du. [Mumbles] da. Gorde katea int C. aldagai int Zer da aldagai hau da, edo zer funtzio deitzen zaio? Bai. That's - bai. Beraz, zer nahi duzun nintzen definitzeko aurretik inprimatu f izan zen, zein zentzu askoz gehiago, zergatik inprimatu f bezala askoz ere gehiago izan zen esan dut egiten. Scan f oraindik mota inprimatu f bezala, baina s inprimatu f da eskaneatu pasa eta ordezkatu aldagai eta gaur egun kate batean gorde. Inprimatzeko beharrean, kate bat gordetzen du. Beraz, alde batetara utzi erabat. Formatu - adierazlea uste jarrai dezakezu inprimatu f bezala. Beraz, gaur egun, nahi dugu 4.jpg gauza egin nahi izanez gero, s inprimatu f ez genuke, honen x. Beraz, zer eskaneatu f egiten ari da zer izan zen zure galdera izango da? [Student] besterik ez dut hemen egiten saiatzen ari gara nahastu. JPEG hori. 1 gehiago denbora azaltzeko Ezin duzu? Honetan, beraz, f eskaneatu f gaur egun relevent gutxiago da; zorionez, ate atzera izango da modu bat. Baina, zer izan zen hasiera batean erakusteko asmorik izan da, hau da, benetan zuzenean [horietan garrantzitsua? F5] S inprimatu f erabiltzen ari zara, non, esan 100 irudiak ditugu, eta irakurri nahi duzun irudia. 1.jpg, 2.jpg, 3.jpg. Beraz, ordena Horretarako, f open behar duzu, eta ondoren ireki nahi duzun katea pasatzen duzu. Beraz 1.jpg ireki nahi genuke; Kate dela 1.jpg s egiten dugu d.jpg inprimatu% f-dugu ez int i = 0. i <40, i + +. Beraz, s inprimatu f% i d.jpg. Beraz, lerro honen ostean, gaur egun aldagai edo array s da 1.jpg joan. Edo, 0.jpg, 1.jpg, 2.jpg. Eta, beraz, ireki, ezin dugu aldi berean, irudi bakoitza irakurtzeko. Beraz, f ez inprimatu s. F zer da gaur egun egiten inprimatu s ikusten duzu? [Student] Ados, beraz, hartu - kate bat sortzen da, something.jpg, eta gero gordetzen. Bai. Sortzen du beste formatu katea da, eskaneatu, f eta inprimatu f bezala, non aldagai guztiak txertatzen bigarren argumentua, s i aurka izan daiteke. Beharbada, esan nahi dut, kasu. Baina edozein izanda ere, argumentuak ordena da. Aldagai guztiak sartu formatu katea sartu da eta, ondoren, gure buffer batean gorde; buffer bat da, non katea gordetzeko ari gara deitzen diogu. Beraz, s barruan ari gara kate-formatu behar bezala gordetzeko,% d izan ordez 4. [Student] Beraz, hau genuen, besterik ez reassigned egingo aldakorreko f da? Bai. Beraz, jatorrizko f itxi behar dugu hau egin aurretik. Baina - eta gero, gainera, ez ziren bada f ireki hemen, eta gero esan beharko genuke Bai. Baina ehun desberdinak fitxategiak irekitzeko litzateke. [Student] Baina ez genuke egin ahal izango duzu edo sartzeko ados. Ongi da. Beraz, eskaneatu f, f eskaneatu f, ideia bera antzeko zerbait da, baina horren ordez, kate batean gorde ordez, orain egiten ari zaren bezala Sting eta eredua katea aurka parekatzen joan eta emaitzak gordetzeko aldagai sartu. 4.jpg antzeko zerbait baino gehiago analizatu, eta zenbaki oso gordetzeko batura int x 4 eskaneatzea f erabili ahal izango duzu. Horixe eskaneatzea f erabili ahal izango dugu. F eskaneaketa f Horretarako komando-lerroan. Benetan naiz nahiko ziur hau da, zer CS50 liburutegi du. Beraz, esan duzunean, "lortu int," eskaneatu f-ing baino gehiago eskaneatu f erabiltzailearen sarrera lortuko duzu. F eskaneaketa f da gauza bera egin du, baina fitxategi bat erabiliz eskaneatu. Hortaz, hona hemen, fitxategi hau baino gehiago ari gara bila. Eredua dator saiatzen ari gara kate batzuk 127 karaktere luze da ondoren lerro berri bat Beraz, nahiz eta besterik ez izan esan nahiko ziur nago "dator s" hiztegian geroztik izan gertatuko dugu, luzea da hori bermatzen hitza ez gaude, eta f eskaneatu f ere, uste dut, egingo lerro berria gelditzeko ez du axola zer. Baina partidan lerro berria sartu dugu, eta - [Student] ez badugu linea berri, ez litzateke hitz baten zatiak aurkitu? - Bakoitzean hiztegian begiratzeko - Beraz, hiztegian, hauek dira gure hitz guztiak. Bakoitzak lerro berri bat da. Eskaneatu f da hitz hau jasotzeko. Linea berri ez badugu, ondoren, posible da hurrengo eskaneatzea f den linea berri irakurri. Baina linea berri barne Ondoren ahaztu lerro berria. Baina inoiz ez dugu hitz baten zati bat, beti ari gara geroztik sortu linea berri bat irakurtzen, ez du axola zer. [Student] Baina, zer da hitza "cissa," cissa atsegin baduzu bilaketa. Izango dela, eta esan Partidu bat da? Beraz, hemen dugu - irakurtzeko izango da, hau da, benetan ona puntu bat. Inoiz ez gara egungo erabiliz - komando-lerroko argumentu lehen hitza bilatzen ari gara. Beraz, katea, hitza = argv 1. Beraz, katea bilatzen ari gara argv 1. Ez gara gure eskaneatzea f hitz bat bilatzen. Zer eskaneatu f egiten ari ginen hitz bakoitza hiztegian, eta, ondoren, behin strcmp erabili alderatu dugu hitz egin behar dugu. Gure hitza alderatu gara eta zer irakurri besterik ez dugu sartu Beraz, ezinbestean, amaitzeko eskaneatu fs sorta bat egiten dugu besterik ez da, beraz, arte gertatzen eskaneatzea f itzultzeko itzuliko da, betiere, bat datorren bezala, hitz berri bat, eta beste zerbait itzuliko da ahalik eta azkarren, huts egin du hitza dator. Hiztegi osoa baino gehiago irakurtzen ari gara, line gordetzeko line hitz bakoitzaren aldagaia s. Ondoren, hitza ari gara alderatuz s, eta konparazioa == 0 bada, strcmp gertatzen 0 ekartzea Partidu bat egin zen. Beraz, 0 bada, eta gero f inprimatu ahal izango dugu, bat datoz, edo hitza hiztegian da, edo dena delakoa f inprimatu nahi duzun. Eta gero, ez dugu nahi f ixteko behin eta berriro. Mota egin nahi dugun gauza da, eta ez dugu hiztegian hitz bila. Beraz, hori egin ahal izan genuen, bere eredua, cissa bila nahi badugu, esan nahi duzu aurretik. nahi izan dugu, eredu hori bilatzeko, bada, kasua litzateke huts egin hori ez da benetan hitz bat, baina hiztegian hitz bat gertatzen da bertan izan delako. Beraz, hitz hau bat izango litzateke, baina hitza azpimultzo hau ez da hitz bat bera. Baina hori ez da nola erabiltzen ari gara; hitz bakoitzean irakurtzen ari gara eta, ondoren, hitz horren dugun hitza alderatuz. Beraz, beti ari gara full hitzak alderatuz. Bidaliko dut bukatu irtenbide geroago. Ia eskuineko erantzun mota da, nire ustez. [Student comment, ulertezina] Oh, ez kentzeko I aurretik? Char s, 127 esan uste dut ahaztu dut zer handiena da. 128 besterik ez dugu egin, beraz, gaur egun, nahikoa luzea da s. Ezer inprimatu beharrik ez dugu. Ari gara, halaber, gure fitxategia itxi nahi izan nahi du, eta hori erantzunik egokiena egin behar. CS50.TV