[Powered by Google Translate] Se pou nou pale sou ranje. Se konsa, poukisa nou ta janm vle itilize ranje? Oke kite a di ou gen yon pwogram ki bezwen nan magazen 5 idantifikasyon elèv yo. Li ta ka sanble rezonab gen 5 varyab apa. Pou rezon nou pral wè nan yon ti jan, nou pral kòmanse konte soti nan 0. Varyab yo n ap gen yo pral int id0, id1 Int, ak sou sa. Nenpòt lojik nou vle fè sou yon ID elèv pral bezwen dwe kopye ak kole pou chak nan sa yo idantifikasyon elèv yo. Si nou vle tcheke pou ki elèv yo rive yo dwe nan CS50, nou pral premye bezwen tcheke si id0 reprezante elèv la nan kou a. Lè sa a, fè menm bagay la pou elèv la vini yo, nou pral bezwen yon kopi ak keratin kòd la pou id0 epi ranplase tout evènman nan id0 ak id1 yo ak sou sa pou id2 3,, ak 4. Osito ke ou tande ke nou bezwen yon kopi ak keratin, ou ta dwe kòmanse panse ke gen se yon solisyon pi byen. Kounye a ki sa si ou reyalize ou pa bezwen 5 idantifikasyon elèv men pito 7 la? Ou bezwen ale tounen nan kòd sous ou a epi ajoute nan yon id5, yon id6, ak fè kopi ak keratin lojik la pou tcheke si idantite yo apatni a klas la pou sa yo 2 idantite nouvo. Pa gen anyen ki konekte tout bagay sa yo idantifikasyon ansanm, epi kidonk pa genyen okenn fason pou mande pwogram lan fè sa pou idantifikasyon 0 jiska 6. Oke kounye a ou reyalize ou gen 100 idantifikasyon elèv yo. Li nan kòmanse sanble mwens pase ideyal yo bezwen separeman deklare chak nan sa yo idantifikasyon, ak fè kopi ak keratin nenpòt lojik pou moun idantite nouvo. Men, petèt nou yo detèmine, epi nou fè li pou 100 tout elèv yo. Men, sa ki si ou pa konnen konbyen elèv ki gen aktyèlman yo? Gen yo se jis kèk elèv n ak pwogram ou a gen mande itilizatè a ki sa sa n se. Uh oh. Sa a pa pral travay trè byen. Pwogram ou an travay sèlman pou kèk nimewo konstan nan elèv yo. Kouman pou Rezoud tout nan pwoblèm sa yo se bote nan ranje. Se konsa, sa a se yon etalaj? Nan kèk lang programmation yon lòt kalite etalaj ka kapab fè yon ti jan pi plis, men isit la nou pral konsantre sou estrikti nan etalaj de baz done jis kòm ou pral wè l 'nan C. Yon etalaj se jis yon blòk gwo memwa. Sa a li. Lè nou di nou gen yon etalaj de 10 nonm antye yo, ki jis vle di nou gen kèk blòk nan memwa ki se gwo ase yo kenbe 10 nonm antye relatif ki apa a. Nou asime ke yon nonb antye relatif se 4 bytes, sa a vle di ke yon etalaj de 10 nonm antye relatif se yon blòk kontinyèl nan 40 bytes nan memwa. Menm lè w itilize ranje pluridimansyonèl, ki nou pa pral antre al isit la, li la toujou jis yon blòk gwo memwa. Notasyon a pluridimansyonèl se jis yon konvenyans. Si ou gen yon 3 pa 3 etalaj pluridimansyonèl nan nonm antye yo, Lè sa a, pwogram ou an pral reyèlman jis konsidere sa tankou yon blòk gwo 36 bytes. Kantite total nonm antye relatif se 3 fwa 3, epi chak nonb antye relatif pran moute 4 bytes. Se pou nou pran yon gade nan yon egzanp de baz yo. Nou ka wè isit la 2 diferan fason pou deklare ranje. Nou pwal genyen fè kòmantè 1 nan yo soti pou pwogram lan te rekeyi depi nou deklare x de fwa. Nou pral pran yon gade nan kèk nan diferans ki genyen ant 2 sa yo kalite deklarasyon nan yon ti jan. Tou de nan liy sa yo deklare yon etalaj la N gwosè, kote nou te # defini N kòm 10. Nou te ka menm jan fasil te mande itilizatè a pou yon nonb antye relatif pozitif ak itilize ke nonb antye relatif kòm yon nimewo eleman nan yon etalaj nou an. Renmen egzanp elèv ID nou an avan, sa a se kalite tankou deklare 10 konplètman separe varyab imajinè; x0, x1, x2, ak sou sa jiska ksen 1-. Inyore liy ki kote nou deklare etalaj la, remake parantèz yo kare entak andedan an pou pasan. Lè nou ekri yon bagay tankou x [3], ki mwen pral jis li kòm x bracket 3, ou ka panse a li renmen mande pou imajinè x3 la. Avi pase ak yon etalaj de N gwosè, sa vle di nimewo a anndan nan parantèz yo, ki nou ap rele endèks la, yo ka anyen ki ant 0 a 1-N, ki se yon total de N endis. Panse osijè de ki jan sa sa a aktyèlman ap travay sonje ke etalaj la se yon blòk gwo memwa. Nou asime ke yon nonb antye relatif se 4 bytes, x nan etalaj tout se yon blòk 40 multiple nan memwa. Se konsa, x0 refere a bytes yo trè premye 4 nan blòk la. X [1] refere a bytes kap vini yo 4 ak sou sa. Sa vle di ke nan kòmansman an pou x se tout pwogram nan janm bezwen nan kenbe tras nan. Si ou vle sèvi ak x [400], Lè sa a, pwogram lan konnen ke sa a se ekivalan jis 1,600 bytes apre kòmansman an pou x. Where'd nou jwenn 1,600 bytes soti nan? Se jis nan 400 fwa 4 bytes pou chak antye ki pè. Anvan ou deplase sou li a, li trè enpòtan reyalize ke nan C pa gen okenn aplikasyon nan endèks la ke nou itilize nan etalaj la. Blòk gwo nou an se sèlman 10 nonm antye relatif ki long, men pa gen anyen ap rele nan nou si nou ekri x [20] oswa menm x [-5]. Endèks la pa menm gen yo dwe yon nimewo. Li kapab gen nenpòt ki ekspresyon abitrè. Nan pwogram nan nou itilize mwen an soti nan varyab la pou riban endèks nan etalaj la. Sa a se yon modèl komen anpil, loupin soti nan mwen 0 = longè nan etalaj la, ak Lè sa a, lè l sèvi avèk mwen kòm endèks la pou etalaj la. Nan fason sa a ou efektivman riban sou etalaj la an antye, epi ou ka swa bay chak plas nan etalaj la oswa sèvi ak li pou kèk kalkil. Nan premye a pou riban, mwen kòmanse nan 0, ak konsa li pral transfere bay plas la 0 nan etalaj la, valè 0 fwa 2. Lè sa a, mwen ogmantasyon yo, epi nou bay plas la an premye nan etalaj la, valè a 1 fwa 2. Lè sa a, mwen ogmantasyon ankò ak sou sa moute jiskaske nou bay nan pozisyon N-1 nan etalaj la valè a N-1 fwa 2. Se konsa, nou te kreye yon etalaj ak 10 premye chif yo menm. Petèt Evens ta gen yon non ti jan pi bon pou varyab la pase x, men sa ki ta ba bagay sa yo ale. Dezyèm lan pou riban Lè sa a, jis simagri valè sa yo ke nou te deja estoke andedan nan etalaj la. Ann eseye kouri pwogram nan ak tou de kalite deklarasyon etalaj ak pran yon gade nan pwodiksyon an nan pwogram nan. Osi lwen ke nou ka wè, pwogram nan konpòte li yo menm jan an pou tou de kalite deklarasyon. Se pou nou tou pran yon gade nan ki sa ki rive si nou chanje riban an premye pa kanpe nan N men pito di 10,000. Fason pi lwen pase nan fen etalaj la. Wouch. Petèt ou te wè sa a anvan. Yon fay segmentation vle di pwogram ou an te fè aksidan te. Ou kòmanse wè sa yo lè w manyen zòn nan memwa ou pa ta dwe manyen. Isit la nou yo manyen 10,000 kote pi lwen pase nan kòmansman an nan x, ki aparamman se yon kote nan memwa nou pa ta dwe manyen. Se konsa, pifò nan nou pwobableman pa ta aksidantèlman mete 10,000 olye pou yo N, men ki sa si nou fè yon bagay plis sibtil tankou di ekri mwens pase oswa egal N nan yon kondisyon pou riban pou kòm opoze a pi piti pase N. Sonje ke yon etalaj sèlman gen endis ki ant 0 N 1-, ki vle di ke N endèks ale pi lwen nan fen etalaj la. Pwogram nan pa ta ka aksidan nan ka sa a, men li la toujou yon erè. An reyalite, sa a erè se konsa komen ke li gen pwòp non li a, yon koupe pa 1 erè. Sa a se li pou Basics yo. Se konsa, sa yo se diferans ki genyen pi gwo ant 2 ki kalite deklarasyon etalaj? Yon diferans ki genyen se kote blòk an gwo nan memwa ale. Nan deklarasyon a an premye, ki m ap rele kalite nan bracket-etalaj, menm si sa a se pa pa gen okenn vle di yon non konvansyonèl yo, li pral ale sou pil la. Lè nou konsidere ke nan dezyèm lan, ki m ap rele kalite nan konsèy-etalaj, li pral ale sou pil la. Sa vle di lè retounen yo fonksyon, yo pral etalaj la bracket otomatikman dwe deallocated, Lè nou konsidere ke kòm ou dwe explicitily rele gratis sou etalaj la konsèy oswa lòt moun ou gen yon fwit memwa. Anplis de sa, etalaj la bracket se pa aktyèlman yon varyab. Sa a se enpòtan. Se jis nan yon senbòl. Ou ka panse a li kòm yon konstan ki du a chwazi pou ou. Sa vle di ke nou pa kapab fè yon bagay tankou x + + ak kalite a bracket, menm si sa se yon bagay ki valab ak kalite a konsèy. Kalite nan konsèy se yon varyab. Pou di ki kalite a konsèy, nou gen 2 plizye memwa. X nan varyab li menm ap estoke nan chemine a ak se jis yon konsèy sèl, men se blòk an gwo nan memwa ki estoke sou pil la. X nan varyab sou pil la jis estoke adrès la nan blòk la gwo nan memwa sou pil la. Youn nan enplikasyon nan sa a se ak gwosè a nan operatè. Si w mande pou gwosè a nan etalaj la bracket, li pral ba ou gwosè a nan blòk la gwo nan memwa, yon bagay tankou 40 bytes, Men, si ou mande pou ou gwosè a nan kalite a konsèy nan etalaj, li pral ba ou gwosè a nan x la varyab tèt li, ki sou aparèy la gen anpil chans jis 4 bytes. Lè l sèvi avèk kalite nan konsèy-etalaj, li enposib dirèkteman mande pou gwosè a nan blòk la gwo nan memwa. Sa a se pa anjeneral anpil nan yon restriksyon depi nou trè raman vle gwosè a nan blòk la gwo nan memwa, epi nou ka anjeneral kalkile li si nou bezwen li. Finalman, etalaj la bracket k ap pase nan ba nou yon chemen kout pou inisyalizin yon etalaj. Ann gade pou wè ki jan nou ta ka ekri premye 10 nonm antye relatif yo menm lè l sèvi avèk initilization a rakoursi. Avèk etalaj nan konsèy, gen se pa yon fason yo fè yon chemen kout tankou sa a. Sa a se jis yon entwodiksyon sou sa ou kapab fè avèk ranje. Yo montre moute nan prèske chak pwogram w ekri. Èspere ke ou ka wè koulye a yon pi bon fason pou fè elèv idantifikasyon egzanp lan depi nan konmansman an nan videyo a. Non mwen se Rob Bowden, ak sa a se CS50.