[Powered by Google Translate] [Semèn 4]
[David J. Malan] [Inivèsite Harvard]
[Sa a se CS50.] [CS50.TV]
>> Tout dwa, sa a se CS50, e sa se kòmansman an nan semèn 4,
ak sa a se youn nan algoritm yo klasman plus posib.
Ki youn te ye ke nou fèk sòt gade a?
Sa yo ki te sòt jarèt, nan lòd gwo O (n ^ 2) + sòm,
ak tout bon nou se pa yo menm sèlman nan mond sa a sanble yo konnen
sa ki sòt jarèt se oswa tan kouri li yo.
Vreman vre, sa a te yon entèvyou ak Eric Schmidt nan Google
ak ansyen senatè Barack Obama jis yon kèk ane de sa.
>> Koulye a, Senatè, w ap isit la nan Google,
ak mwen renmen panse a prezidans lan kòm yon entèvyou travay.
Koulye a, li difisil a jwenn yon travay kòm prezidan, ak yon w ap ale atravè tout rigoureux yo kounye a.
Li la tou difisil yo jwenn yon travay nan Google.
Nou gen kesyon, epi nou poze kesyon kandida nou an,
ak sa a se yon sèl soti nan Larry Schwimmer.
Ou nèg panse mwen plèzantri? Li nan dwa isit la.
Ki sa ki se yon fason a ki pi efikas sòt yon milyon nonm antye relatif 32-bit?
[Ri]
Ki byen
Mwen regrèt. >> Non, pa gen okenn, pa gen okenn, pa gen okenn.
Mwen panse ke sòt nan jarèt ta dwe fason a mal yo ale.
>> Vini non sou, ki moun ki te di l 'sa a?
Semèn pase a sonje nou te pran yon repo nan kòd, omwen pou yon jou,
e li te kòmanse konsantre sou kèk ide pi wo nivo ak pou rezoud pwoblèm plis jeneralman
nan yon kontèks chèche ak Fouye,
epi nou prezante yon bagay ki nou pa t 'kalòt sa a non sou semèn sot pase yo,
men asenptotik notasyon, O a Big, Omega an Big,
epi pafwa Big Theta notasyon a, ak sa yo ki te tou senpleman fason
nan ki dekri tan an kouri nan algoritm,
konbyen tan li pran pou yon algorithm nan kouri.
>> Epi ou ka sonje ke ou te pale osijè de tan nan kouri an tèm de gwosè a
nan opinyon la, ki nou jeneralman rele n, kèlkeswa pwoblèm yo kapab,
kote n se kantite moun ki nan sal la,
ki kantite paj nan yon liv telefòn, epi nou kòmanse ekri bagay sa yo deyò
tankou O (n ^ 2) oswa O (n) oswa O (n boutèy demi lit n),
e menm lè matematik la pa t 'byen travay deyò konsa parfe
epi li te n ² - n / 2 oswa yon bagay tankou sa
nou ta olye jis jete kèk nan tèm yo lòd pi ba,
ak motivasyon an gen se ke nou vreman vle yon
sòt de fason objektif nan evalye
pèfòmans nan pwogram oswa pèfòmans de algoritm
ki nan fen jou a, pa gen anyen fè, pou egzanp,
ak vitès la nan òdinatè w lan jodi a.
>> Pou egzanp, si ou aplike sòt bil,
oswa ou aplike rantre sòt oswa seleksyon sòt sou òdinatè jodi a,
yon 2 GHz òdinatè, ak ou kouri li,
epi li pran kèk kantite segonn, ane pwochèn gen yon GHz 3
oswa yon 4 GHz òdinatè, ak ou ta ka Lè sa a, reklamasyon ke "Wow, algorithm mwen
se kounye a de fwa osi vit, "lè an reyalite sa a, se evidamman pa ka a.
Se jis te kenkayri a te vinn pi vit, men òdinatè w lan
pa te, ak pou nou reyèlman vle jete bagay sa yo tankou
multiples nan 2 oswa miltip nan 3 lè li rive ki dekri
konbyen vit oswa ki jan ralanti yon algorithm se ak reyèlman jis konsantre
sou n oswa kèk faktè ladan l ',
kèk pouvwa ladan l 'tankou nan ka a nan kalite ki soti nan semèn dènye a.
Ak rapel ki avèk èd nan sòt unifye
nou tout nou te kapab fè tèlman pi bon pase sòt jarèt ak sòt seleksyon
e menm ensèsyon zèl.
>> Nou te jwenn desann nan n boutèy demi lit n, e ankò,
rapel ki n log jeneralman vle di yon bagay ki ap grandi
pi dousman Lè sa a, n, se konsa n boutèy demi lit n konsa byen lwen te bon
paske li te mwens pase ² n.
Men, reyalize n ale n ak sòt unifye
ki sa ki te jèm la debaz nan yon lide ke nou te ogmante
ki nou menm tou nou exploitées tounen nan semèn 0?
Ki jan nou atake pwoblèm nan klasman malen ak sòt unifye?
Ki sa ki te insight nan kle, petèt?
Nenpòt moun ki nan tout.
Okay, kite a pran yon etap tounen.
Dekri rantre sòt nan mo pwòp ou yo.
Kouman li travay?
Okay, nou pral tounen nan ranje 0 semèn.
Okay, yeah.
[Fèbl-elèv]
Okay, bon, konsa nou divize etalaj la nan nimewo nan 2 moso.
Nou klase chak de moso sa yo, ak Lè sa a, nou fizyone yo,
epi nou te wè ide sa a anvan pou yo pran yon pwoblèm ki nan sa a gwo
ak découper li moute nan yon pwoblèm ki nan sa a gwo oswa sa a gwo.
>> Sonje egzanp lan liv telefòn nan.
Sonje algorithm nan tèt-konte nan semèn de sa,
te tèlman rantre sòt rezime sa a pseudocode isit la.
Lè w ap bay eleman n, premye li te saniti tcheke.
Si n <2 Lè sa a, pa fè anyen nan tout
paske si n <2 Lè sa a, n se evidamman 0 oswa 1,
epi konsa si li nan swa 0 oswa 1 pa gen anyen yo sòt.
W ap fè.
Se lis ou a deja trivyalman Ranje.
Men, otreman si ou te gen 2 oubyen plis eleman ale pi devan epi divize yo
nan 2 mwatye, kite la ak dwa.
Sòt chak nan sa yo mwatye, ak Lè sa a, fizyone mwatye nan Klase.
Men, pwoblèm nan isit la se ke nan zye premye sa a santi l tankou nou ap punting.
Sa a se yon definisyon sikilè nan ke si mwen te mande ou pou'w sòt eleman sa yo n
ak w ap di m '"Tout dwa, amann, nou pral klase sa yo eleman n / 2, ak moun ki n / 2,"
Lè sa a, kesyon pwochen m 'a pwal "Fine, ki jan ou sòt n nan / 2 eleman?"
>> Men, paske se nan estrikti a nan pwogram sa a,
paske gen ka sa a baz, se konsa pale,
ka sa a espesyal ki di si n ap <kèk valè fiks tankou 2 retounen imedyatman.
pa reponn ak sa repons menm sikilè.
Pwosesis sa a, sa a siklisite pral evantyèlman fini.
Si m 'mande ou "Triye eleman sa yo n," epi ou di, "Fine, sòt sa yo n / 2,"
Lè sa a, ou di, "Fine, sòt sa yo n / 4, n / 8, n/16,"
evantyèlman ou pral divize pa yon nimewo gwo ase
ki ou pral gen jis 1 gòch eleman, nan ki pwen ou ka di,
"Isit la, isit la se yon eleman Ranje yon sèl."
Lè sa a, briyans sa a algorithm moute isit la se yo dériver de la lefèt
ke yon fwa ou gen tout moun sa yo bay lis endividyèlman Ranje,
tout nan yo ki yo se nan gwosè 1, ki sanble ap initil,
yon fwa ou kòmanse Fusion yo ak fusion yo
ou bati finalman kòm Rob te fè nan videyo a yon lis finalman Ranje.
>> Men, ide sa a fin lwen lwen pase klasman.
Gen ide sa a entegre nan pwogram sa a ke yo rekonèt kòm rkursyon,
lide a kote ou se yon pwogram nan,
ak yo rezoud kèk pwoblèm ou rele tèt ou,
oubyen yo mete li nan yon kontèks lang programmation ou se yon fonksyon,
ak yo nan lòd yo rezoud yon pwoblèm, ou fonksyon an rele tèt ou
ankò, li ankò e ankò, men ou fonksyon an
pa ka rele tèt ou fwa enfiniman anpil.
Evantyèlman ou gen anba soti, sa yo pale,
epi gen kèk kondisyon baz difisil-kode ki di
nan pwen sa a sispann rele tèt ou pou ke pwosesis la tout antye
finalman an reyalite sispann.
Ki sa sa reyèlman vle di, nan recurse?
>> Ann gade pou wè, si nou ka fè yon senp, trivial egzanp ak, di,
3 moun avè m 'moute isit la sou sèn, si yon moun se konfòtab.
1, vini sou moute 2, ak 3.
Si ou 3 vle vini isit la.
Si ou vle kanpe dwat pwochen m 'isit la nan yon liy, sipoze ke pwoblèm nan nan men
trè trivyalman konte kantite moun ki gen isit la.
Men, franchman, mwen fatige nan tout egzanp sa yo konte.
Sa a se pral pran kèk tan, 1, 2, ak dot, dot, dot.
Li nan pral pran pou tout tan.
Mwen ta pito jis bote pwoblèm sa a tout ansanm avèk èd nan-sa ki nan non ou?
Sara. >> Sara, tout dwa.
Kelly. >> Kelly ak?
>> Willy. >> Willy, Sara, Kelly, ak Willy.
Dwa koulye a, mwen te poze kesyon sa a pa yon moun
konbyen moun ki moute sou etap sa a, epi mwen pa gen okenn lide.
Sa a se yon lis reyèlman long, ak Se konsa, olye mwen pral fè sa a jwe fent.
Mwen pral mande moun nan pwochen pou m 'fè pifò nan travay la,
epi yon fwa li se fè ap fè pi fò nan travay la
Mwen pral fè pi piti kantite travay posib ak jis ajoute 1
mèt fè tout sa repons li bay la, se konsa isit la nou ale.
Mwen te mande konbyen moun ki sou sèn.
Konbyen moun ki se sou sèn nan kite nan ou?
Bò gòch la nan m 'konsa? >> Okay, men se pa tronpe.
Sa a bon, sa se kòrèk, men si nou vle kontinye sa a lojik
kite a asime ke ou menm vle bote pwoblèm sa a nan kite nan nou, nou menm
konsa olye ke repons dirèkteman ale pi devan epi jis pase Buck la.
Oh, konbyen moun ki nan kite nan m 'konsa?
Konbyen moun ki yo se sou bò goch la?
1.
[Ri]
Oke, kidonk 0 konsa, sa ki kounye a Willy te fè
se ou te tounen repons ou an direksyon sa a li di 0.
Koulye a, ki sa ou ta dwe fè? >> 1.
Oke, kidonk ou ap 1 a, se konsa ou di, "Tout dwa, mwen pral ajoute 1
mèt fè tout sa konte Willy a te ", defason 1 + 0.
Ou se kounye a 1 pou repons ou a sou bò dwat la se kounye a-
1. >> Epi m 'ta dwe 2.
Bon, se konsa w ap pran repons la anvan nan 1,
ajoute kantite lajan an minimòm nan travay ou vle fè, ki se +1.
Ou kounye a gen 2, epi ou Lè sa a, lage m 'ki valè?
3, Mwen vle di, regrèt, 2.
Bon.
>> Oke, nou te gen 0 a bò gòch li.
Lè sa a, nou te gen 1, ak Lè sa a, nou ajoute 2,
e kounye a, w ap rmiz m 'nimewo 2 a,
ak sa m ap di, oke, +1, 3.
Genyen nan tout bon 3 moun kanpe akote m 'sou etap sa a,
Se konsa nou te ka genyen evidamman fè sa trè linear,
anpil nan menm jan an nan evidan, men nou sa nou te reyèlman fè?
Nou te pran yon pwoblèm nan gwosè 3 okòmansman.
Nou Lè sa a, li kase l 'desann nan yon pwoblèm nan gwosè 2,
Lè sa a, yon pwoblèm nan gwosè 1, ak Lè sa a, finalman ka a baz
te reyèlman, o, gen nan pa gen yon sèl la,
nan ki pwen Willy tounen efektivman yon repons difisil-kode yon koup de fwa,
epi yo te yon sèl nan dezyèm Lè sa a, bul leve, bul leve, bul leve,
ak Lè sa a, pa ajoute nan sa a 1 yon lòt
nou te aplike ide sa a debaz nan rkursyon.
>> Koulye a, nan ka sa a li pa t 'reyèlman rezoud yon pwoblèm
nenpòt ki plis efikasite Lè sa a, nou te wè konsa byen lwen.
Men, panse osijè de algoritm yo nou te fè sou sèn konsa byen lwen.
Nou te gen 8 moso papye sou tablo a,
sou videyo lè Sean te kap chèche nimewo a, 7yèm, ak ki sa l 'te fè vrèman fè?
Oke, li pa t 'fè nenpòt kalite separe ak konkeri.
Li pa t 'fè nenpòt kalite rkursyon.
Olye de sa li jis te fè sa algorithm lineyè.
Men, lè nou prezante lide nan Ranje nimewo sou sèn viv semèn pase a
Lè sa a, nou te gen sa a ensten pou yo ale nan mitan an,
nan ki pwen nou te gen yon lis ki pi piti nan gwosè 4 oswa yon lòt lis nan gwosè 4,
ak Lè sa a, nou te gen egzak menm pwoblèm lan, se konsa nou repete, repete, repete.
Nan lòt mo, nou recursed.
Mèsi anpil nan 3 volontè nou yo isit la pou demontre rkursyon avèk nou.
>> Ann wè si nou pa ka fè sa a kounye a yon ti kras pi plis konkrè,
rezoud yon pwoblèm ki ankò nou te kapab fè bèl byen fasil,
men nou pwal sèvi ak li kòm yon wòch kite nan aplikasyon sa a lide debaz.
Si m 'vle kalkile somasyon an yon pakèt moun sou chif,
pou egzanp, si w pase nan kantite 3,
Mwen vle ba ou valè a nan sigma 3,
Se konsa sòm total la nan 3 + 2 + 1 + 0.
Mwen vle jwenn tounen repons lan, 6,
se konsa nou pral aplike sa a fonksyon sigma, sa a fonksyon somasyon
sa, ankò, pran nan D ', ak Lè sa a, retounen somasyon an
nan nimewo sa a tout wout la desann nan 0.
Nou ta ka fè sa a bèl tou senpleman, dwa?
Nou ta ka fè sa ak kèk kalite estrikti loupin,
Se konsa, kite m 'ale pi devan epi pou yo jwenn sa a te kòmanse.
>> Mete stdio.h.
Kite m 'jwenn tèt mwen nan prensipal yo travay avèk isit la.
Se pou nou sove sa a kòm sigma.c.
Lè sa a, mwen pral ale nan isit la, ak mwen pral deklare yon n Int,
ak mwen pral fè bagay sa yo pandan y ap itilizatè a pa kolabore.
Pandan ke itilizatè a pa ban m 'yon chif pozitif
kite m 'ale pi devan epi akselere yo pou GetInt n =,
ak kite m 'ba yo kèk enstriksyon tankou sa ki fè,
Se konsa printf ("pozitif nonm antye tanpri").
Jis yon bagay relativman senp tankou sa a pou ke nan moman an nou frape liy 14
nou genyen kounye a yon antye relatif pozitif prezimableman nan n.
>> Koulye a, kite a fè yon bagay avèk li.
Kite m 'ale pi devan epi kalkile somasyon a, se konsa int sòm = sigma (n).
Sigma se jis somasyon, se konsa mwen jis ekri l 'nan wout la amateur.
Nou pral jis rele li sigma la.
Sa a se sòm total la, epi kounye a mwen pral enprime soti rezilta a,
printf ("sòm la, se pousantaj% d, \ n", sòm).
Lè sa a, mwen pral tounen 0 pou mezire bon.
Nou te fè tout bagay ki nan pwogram sa a egzije pou eksepte pati nan enteresan,
ki se yo aktyèlman aplike fonksyon an sigma.
>> Kite m 'ale desann isit la jouk anba a, ak kite m' deklare fonksyon sigma.
Li nan te rive nan pran yon varyab ki nan nonb antye relatif nan kalite,
epi ki sa done kalite mwen vle retounen prezimableman soti nan sigma?
Int, paske mwen vle li matche ak atant mwen sou liyn 15.
Nan isit la, kite m 'ale pi devan epi aplike sa a
nan yon fason trè dwat.
>> Se pou nou ale pi devan epi di Int sòm = 0,
e kounye a, mwen pral ale gen yon ti kras pou riban isit la
ki nan pral di yon bagay tankou sa a,
pou (Int mwen = 0; mwen <= nimewo; mwen + +) sòm + = mwen.
Lè sa a, mwen pral tounen sòm.
Mwen te kapab aplike sa a nan nenpòt ki nimewo nan fason.
Mwen te kapab itilize yon riban pandan y ap.
Mwen te kapab sote lè l sèvi avèk varyab la sòm si mwen reyèlman te vle,
men nan ti bout tan, nou jis gen yon fonksyon ke si mwen pa t 'gafe Se mwen menm sòm se 0.
Lè sa a, li iterates ki ant 0 sou moute nan nimewo a,
yo, epi sou chak iterasyon li ajoute ke valè aktyèl a sòm ak Lè sa a, retounen sòm.
>> Koulye a, gen yon Optimization ti tay isit la.
Sa a se pwobableman yon etap gaspiye, men se la pou li. Sa a se amann pou kounye a.
Nou se omwen yo te konplè e byen pral 0 tout wout la sou yo.
Pa trè di, e trè dwat,
men li sanble ke ak fonksyon nan sigma nou gen opòtinite nan menm
tankou nou te fè isit la sou sèn.
Sou sèn nou jis konte konbyen moun ki te bò kote m ',
men olye si nou te vle konte kantite 3 + 2 + 1
sou desann nan 0 nou te kapab menm jan bote nan yon fonksyon
ke mwen pral olye dekri tankou se te repetitif.
Mwen kite nan yon saniti rapid tcheke, epi fè sèten mwen pa t 'gafe.
>> Mwen konnen gen nan omwen youn nan bagay nan pwogram sa a ke mwen t 'fè sa ki mal.
Lè m 'frape antre nan mwen pral jwenn nenpòt kalite tap rele ke nan m' konsa?
Kisa mwen pwal yo dwe rele nan sou?
Yeah, mwen bliye pwototip a, se konsa mwen lè l sèvi avèk yon fonksyon rele sigma sou liy 15,
men li pa la te deklare jiskaske liy 22, Se konsa, mwen pi bon dinamik moute isit la
epi deklare yon pwototip, epi mwen pral di Int sigma (Int nimewo), ak sa a, se li.
Li nan aplike nan pati anba nan.
>> Oswa yon lòt fason mwen te kapab rezoud sa a,
Mwen te kapab deplase fonksyon an 'kanpe, ki se pa move,
men omwen lè pwogram ou kòmanse jwenn long, franchman,
Mwen panse ke gen nan kèk valè nan toujou gen prensipal nan tèt la
pou ke ou nan lektè a ka louvri dosye a epi Lè sa a, imedyatman wè
sa ki pwogram la ap fè san yo pa gen nan rechèch atravè li
kap chèche ki fonksyon prensipal.
Ann al desann nan fenèt tèminal mwen isit la, eseye fè sigma fè sigma,
epi mwen vise jouk la a tou.
Deklarasyon enplisit nan GetInt fonksyon vle di mwen te bliye fè sa lòt bagay?
[Fèbl-elèv]
Bon, se konsa aparamman yon erè komen, se konsa kite a mete sa a moute isit la,
cs50.h, ak kounye a kite a tounen nan fenèt tèminal m 'yo.
>> Mwen pral klè ekran an, epi mwen pral relance fè sigma.
Li sanble yo te konpile. Kite m 'kouri sigma.
Mwen pral tape nan nimewo a 3, e mwen t 'jwenn, 6, Se konsa, pa yon chèk rijid,
men omwen li sanble yo dwe ap travay nan zye premye, men kounye a kite a RIP l 'apa,
e kite yo aktyèlman ogmante lide nan rkursyon, ankò,
nan yon kontèks trè senp pou ke nan tan yon kèk semèn '
lè nou kòmanse eksplore amateur estrikti done pase ranje
nou gen yon lòt zouti nan bwat zouti a ak ki
manipile estrikti ki done kòm nou pral wè.
Sa a se apwòch la repete, apwòch la riban ki baze sou.
>> Kite m 'olye kounye a fè sa.
Kite m 'olye di ke somasyon an kantite
sou desann nan 0 se reyèlman menm bagay la kòm
nimewo + sigma (nimewo - 1).
Nan lòt mo, jis tankou sou sèn mwen punted nan chak moun nan pèp la akote m ',
epi yo nan vire te kenbe punting jiskaske nou finalman fon soti nan Willy,
ki te gen retounen yon repons difisil-kode tankou 0.
Isit la kounye a nou ap menm punting sigma
fonksyon an menm jan sa te orijinal rele, men insight nan kle isit la
se ke nou pa rele sigma idantik.
Nou pa pase nan n.
Nou ap byen klè pase nan nimewo - 1,
Se konsa yon pwoblèm yon ti kras pi piti, yon ti jan pi piti pwoblèm.
>> Malerezman, sa a se pa byen yon solisyon ankò, epi anvan nou ranje
sa ki ta ka sote deyò tankou evidan nan kèk nan ou
kite m 'ale pi devan epi relance fè.
Li sanble te rekeyi oke.
Kite m 'relance sigma ak 6.
Whoops, kite m 'relance sigma ak 6.
Nou te wè sa a anvan, kwake tan aksidantèlman dènye kòm byen.
Poukisa mwen jwenn sa a fòt segmentation skre? Yeah.
[Fèbl-elèv]
Gen nan pa gen ka baz, ak plis espesyalman, ki sa ki pwobableman te pase?
Sa a se yon sentòm nan ki kalite konpòtman?
Di li yon ti kras pi fò.
[Fèbl-elèv]
Se yon riban enfini efektivman, ak pwoblèm nan ki gen pasan enfini
lè yo gen ladan yo rkursyon nan ka sa a, yon fonksyon rele tèt li,
kisa k ap rive chak fwa ou rele yon fonksyon?
Oke, panse tounen nan ki jan nou mete deyò memwa a nan yon òdinatè.
Nou te di ke gen nan sa a ti moso nan memwa rele pil la ki nan nan pati anba a,
ak vin chak fwa ou rele yon fonksyon yon ti kras plis memwa mete
sa a sou chemine sa yo rele ki gen varyab lokal ki fonksyon a oswa paramèt,
Se konsa, si sigma rele sigma apèl sigma rele sigma
rele sigma ki kote sa fen istwa?
>> Oke, li evantyèlman Depatman kantite total
nan memwa ki di ou gen disponib nan òdinatè ou.
Ou anvahi segman nan ke w ap sipoze fè rete nan,
epi ou jwenn sa a fòt segmentation, nwayo fatra a,
epi ki sa debaz jete vle di se ke mwen kounye a gen yon dosye rele nwayo
ki se yon dosye ki gen zewo ak moun yo
ki aktyèlman nan tan kap vini an pral diagnostically itil.
Si li pa evidan ak ou ki kote ensèk ou a se
ou ka aktyèlman fè yon ti jan nan analiz legal, se konsa pale,
sou sa a ranpli pil fatra nwayo, ki, ankò, se jis yon pakèt antye nan zewo ak moun yo
ki esansyèlman reprezante eta a nan pwogram ou an nan memwa
moman sa a li te fè kolizyon nan fason sa.
>> Ranje a isit la se ke nou pa kapab jis je fèmen retounen sigma,
nimewo a + sigma nan yon pwoblèm yon ti kras pi piti.
Nou bezwen gen kèk kalite ka baz isit la,
epi ki sa yo ta dwe ka a baz pwobableman ta dwe ye?
[Fèbl-elèv]
Okay, toutotan nimewo a se pozitif nou ta dwe aktyèlman retounen sa a,
oubyen yo mete li yon lòt fason, si nonb ki se, di, <= a 0
ou konnen ki sa, mwen pral ale pi devan epi retounen 0,
anpil tankou Willy te fè, ak lòt bagay, mwen pral ale pi devan
epi retounen sa a, se konsa li pa ke anpil ki pi kout
pase vèsyon an repete ke nou te vide premye lè l sèvi avèk yon pou riban,
men remake ke gen nan sa a sòt de distenksyon li.
Olye pou yo retounen kèk nimewo ak fè tout sa a matematik
epi ajoute bagay yo ak varyab lokal
w ap olye li di: "Oke, si sa a se yon pwoblèm Super fasil,
tankou nimewo a se <0, kite m 'imedyatman retounen 0. "
>> Nou pa pwal santi yo deranje sipòte nimewo negatif,
se konsa mwen pral kòd difisil valè a 0.
Men, otreman, aplike ide sa a nan adisyon
tout nimewo sa yo ansanm ou ka efektivman pran yon mòde ti
soti nan pwoblèm nan, anpil tankou nou te fè sa isit la sou sèn,
Lè sa a, bote rès la nan pwoblèm lan nan moun kap vini an,
men nan ka sa a moun nan pwochen se tèt ou.
Li nan yon fonksyon idantik yo te rele.
Jis pase l yon pwoblèm ki pi piti ak pi piti ak pi piti chak fwa,
e menm si nou gen pa byen ofisyèlman bagay sa yo nan kòd isit la
sa a se egzakteman sa ki te ap pase nan semèn 0 ak liv la telefòn nan.
Sa a se egzakteman sa ki te ap pase nan semèn sot pase ak Sean
e avèk manifestasyon nou an pou chèche nimewo yo.
Li nan ap pran yon pwoblèm epi divize li ankò epi ankò.
>> Nan lòt mo, gen nan yon fason kounye a nan tradui
sa a aranje mond reyèl, sa a aranje nivo ki pi wo
nan separe ak konkeri ak fè yon bagay ankò e ankò
nan kòd, kidonk sa a se yon bagay nou pral wè ankò sou tan.
Koulye a, kòm yon sou kote, si ou nouvo nan rkursyon ou ta dwe omwen konprann kounye a
poukisa sa a se komik.
Mwen pral pou yo ale nan google.com,
ak mwen pral pou fè rechèch pou kèk konsèy ak ke trik nouvèl sou rkursyon, antre.
Di moun nan kap vini jwenn ou si yo pa te ri jis kounye a.
Eske ou te vle di rkursyon?
Eske ou te vle di-ah, gen nou ale.
Okay, kounye a ki nan rès la nan tout moun.
Yon ti kras Pak ze embedded yon kote gen nan Google.
Kòm yon sou kote, youn nan lyen yo nou mete sou sit entènèt kou a nan
pou jodi a se jis gri sa a nan algoritm klasman divès kalite,
kèk nan yo ki nou gade semèn dènye, men sa ki nan bon sou sa a vizyalizasyon
menm jan ou eseye vlope tèt ou tout bagay nou divès kalite ki gen rapò ak algoritm
konnen ke ou ka trè fasil kounye a kòmanse ak diferan kalite entrain.
Entrain yo tout ranvèse, entrain yo ki sitou Ranje, entrain yo o aza ak pou fè.
Menm jan ou eseye, ankò, distenge bagay sa yo nan tèt ou
reyalize ke sa a URL sou sit entènèt kou a la sou paj la Konferans
ta ka ede ou rezon ki fè nan kèk nan moun yo.
>> Jodi a nou finalman jwenn yo rezoud pwoblèm sa a ki sòti nan yon pandan y ap tounen,
ki te ke sa a fonksyon swap jis pa t 'travay,
ak ki sa ki te pwoblèm nan fondamantal ak sa a swap fonksyon,
objektif la nan yo ki te ye a, ankò, fè echanj yon valè isit la ak isit la
sa yo ki sa a k ap pase?
Sa a pa t 'aktyèlman ap travay. Poukisa?
Yeah.
[Fèbl-elèv]
Egzakteman, eksplikasyon a pou sa a bugginess
tou senpleman se te paske lè w rele fonksyon nan C
ak moun ki fonksyon pran agiman, tankou a ak b isit la,
w ap pase nan kopi kèlkeswa valè w ap bay ak sa yo ki fonksyon.
Ou pa yo ap bay valè orijinal yo tèt yo,
Se konsa nou te wè sa a nan yon kontèks buggyc,
buggy3.c, ki te gade yon ti kras yon bagay tankou sa a.
>> Sonje byen, nou te gen x ak y inisyalizèd 1 ak 2, respektivman.
Nou Lè sa a, enprime konnen ki sa ki yo te ye.
Mwen Lè sa a, te deklare ke mwen te échanjé yo lè ou rele swap nan x, y.
Men, pwoblèm lan te ke échanjé a te travay,
men se sèlman nan sijè ki abòde lan swap a fonksyone tèt li.
Osito ke nou frape liy 40 valè sa yo échanges
yo te voye jete lwen, epi konsa pa gen anyen
nan fonksyon orijinal la prensipal te aktyèlman chanje nan tout,
Se konsa, si ou panse tounen Lè sa a, tankou sa ki sa a sanble an tèm de memwa nou
si sa a bò gòch-men nan tablo a reprezante-
ak, m pral fè pi byen m 'pou tout moun yo wè sa a-si sa a bò gòch-men nan tablo a
reprezante, di, RAM ou a, ak chemine a pral grandi sou moute fason sa a,
epi nou ka rele yon fonksyon tankou prensipal yo, ak prensipal gen 2 varyab lokal yo, x ak y,
kite a dekri moun kòm x isit la, e kite yo dekri sa yo tankou y isit la,
e kite yo mete nan 1 valè yo ak 2, kidonk sa a isit la se prensipal yo,
ak ki lè prensipal rele fonksyon an swap sistèm nan fonksyone
bay fonksyon an swap band pwòp li yo nan memwa sou chemine a,
ankadreman pwòp li yo sou chemine a, se konsa pale.
Li te tou repati 32 Bits pou sa yo antye.
Li k ap pase nan rele yo a ak b, men sa a totalman abitrè.
Li kapab yo rele yo tou sa li vle, men ki sa k ap pase lè prensipal
apèl swap se li pran sa a 1, mete yon kopi a, mete yon kopi a.
>> Gen 1 varyab lòt lokal yo nan swap, menm si, yo rele sa? >> Tan.
Tan, se konsa, kite m 'bay tèt mwen yon lòt Bits 32 isit la,
epi ki sa mwen te fè nan sa a fonksyon?
M 'te di tan int jwenn yon, konsa yon gen 1, se konsa mwen te fè sa lè nou dènye te jwe ak egzanp sa a.
Lè sa a, yon vin b, se konsa b se 2, pou kounye a sa a vin tounen 2,
e kounye a, b vin tanporèr, se konsa tanporèr se 1,
konsa koulye a b vin sa a.
Sa a se gwo. Li te travay.
Men, Lè sa a, le pli vit ke retounen yo fonksyon
memwa swap a efektivman disparèt konsa ke li kapab itilize yo ankò
pa kèk fonksyon lòt nan tan kap vini an, ak prensipal se evidamman konplètman chanje.
Nou bezwen yon fason pou fondamantalman rezoud pwoblèm sa a,
ak jodi a nou pral finalman gen yon fason pou fè sa kote
nou ka prezante yon bagay yo rele yon konsèy.
Li sanble ke nou ka rezoud pwoblèm sa a
pa si yo pase nan kopi x ak y
men olye si yo pase nan sa, ou panse ke, nan fonksyon an swap?
Yeah, sa ki sou adrès sa a?
Nou pa t vreman pale de adrès an detay anpil,
Men, si sa a tablo reprezante memwa òdinatè mwen an
nou te ka sètènman kòmanse Genyen bytes yo nan RAM mwen
epi di sa a se multiple # 1, sa a se multiple # 2, multiple # 3,
multiple # 4, multiple # ... 2 milya dola si mwen gen 2 jigokte nan RAM,
pou nou te kapab sètènman vini ak kèk konplo abitrè numerotasyon
pou tout bytes endividyèl yo nan memwa òdinatè mwen an.
>> E si olye lè m 'rele swap
olye ke pas nan kopi x ak y
poukisa m pa olye pase nan adrès ki nan x isit la,
adrès ki nan y isit la, esansyèlman adrès lapòs la
nan x ak y paske lè sa a swap, si li te enfòme
adrès la nan memwa nan x ak y,
Lè sa a, boukante, si nou ki resevwa fòmasyon l 'yon ti jan,
li te kapab potansyèlman kondwi ak sa yo ki adrès, se konsa pale,
x, ak chanje nimewo a la, Lè sa a, kondwi nan adrès ki nan y,
chanje nimewo a la, menm pandan pa aktyèlman ap resevwa kopi valè sa yo tèt li,
se konsa menm si nou te pale osijè de sa a tankou se te memwa prensipal la
ak memwa sa a swap tankou se te nan pwisan an ak pati nan danjere nan C
se ke nenpòt fonksyon kapab touche memwa nan nenpòt kote nan òdinatè a,
ak sa a se pwisan nan ke ou ka fè bagay sa yo trè anpenpan ak pwogram òdinatè nan C.
Sa a se danjere paske ou ka tou vis moute nan trè fasil.
An reyalite, youn nan fason yo pou pwogram ki pi komen jou sa yo yo dwe eksplwate
toujou, se pou yon pwogramè pa reyalize
ke li se pèmèt yon done
Ou dwe ekri nan yon kote nan memwa ki pa te gen entansyon.
>> Pou egzanp, li oswa li deklare yon etalaj de gwosè 10
men Lè sa a, aksidantèlman ap eseye mete 11 bytes nan ki etalaj la memwa,
epi ou kòmanse manyen pati nan memwa ki pa valab.
Jis kontèks sa a, kèk nan ou ta ka konnen ke
lojisyèl souvan envit ou pou nimewo seri oswa kle enskripsyon,
Photoshop ak Pawòl ak pwogram tankou sa a.
Egziste Gen fant yo, jan kèk nan nou konnen, sou entènèt kote ou ka kouri nan yon pwogram ti kras,
ak vwala, pa gen okenn demann plis pou yon nimewo seri.
Kouman yo ki ap travay?
Nan anpil ka tout bagay sa yo yo se tou senpleman jwenn nan òdinatè yo
tèks segments nan zewo reyèl òdinatè a nan ak moun yo
kote se ke fonksyon kote nimewo seri a mande l,
epi ou recouvrir espas sa a, oswa pandan y ap pwogram nan ap kouri
ou kapab konnen ki kote se kle nan aktyèlman estoke
lè l sèvi avèk yon bagay yo rele yon debugjeur, epi ou ka krak lojisyèl ki fason.
Sa a se pa vle di ke sa a se objektif nou an pou koup la pwochen nan jou,
men li gen anpil ramifications mond reyèl la.
Ke youn k ap pase nan enplike vòl nan lojisyèl,
, men tou genyen tou konpwomi nan machin tout antye.
>> An reyalite, lè sit entènèt jou sa yo yo eksplwate
ak konpwomèt ak done se fwit ak modpas yo yo vòlè li
sa a trè souvan gen rapò ak jesyon pòv nan memwa yon sèl la,
oswa, nan ka a nan bazdone, echèk yo prevwa
konfwontasyon D ', se konsa pi plis sou sa nan semèn kap vini yo
men pou kounye a jis yon preview glisman nan sòt nan nan domaj ke ou ka fè
yo lè li pa byen konprann ki jan bagay yo travay anba kapo a.
Ann al sou konprann poukisa sa a se kase
ak yon zouti ki pral vin pi plis ak plis itil
kòm pwogram nou jwenn plis konplèks.
Se konsa, lwen lè ou te gen yon ensèk nan pwogram ou an
kòman ou ale sou debogaj li?
Ki sa ki te teknik ou a te konsa byen lwen, si anseye pa tf ou
oswa jis tèt yo anseye yo?
[Elèv] printf.
Printf, se konsa printf te pwobableman te zanmi ou a nan ke si ou vle wè
sa k ap pase sou andedan nan pwogram ou an
ou jis mete printf isit la, printf isit la, printf isit la.
Lè sa a, ou kouri l ', epi ou jwenn yon pakèt antye nan bagay sou ekran an
ke ou ka itilize Lè sa a, enferyè ki sa ki aktyèlman pral mal nan pwogram ou an.
>> Printf gen tandans ka yon bagay trè pwisan,
men li la yon pwosesis ki trè manyèl.
Ou gen yo mete yon printf isit la, yon printf isit la,
epi si ou mete l 'andedan yon riban ou ta ka jwenn 100 liy
nan pwodiksyon ke ou Lè sa a, gen pase atravè.
Li pa yon mekanis trè user-zanmitay oswa entèaktif pou debogaj pwogram yo,
men Erezman gen egziste altènatif.
Genyen nan yon pwogram, pou egzanp, rele gdb, debogeur an gnou,
ki se yon ti kras Esoteric nan fason ou sèvi ak li.
Li se yon konplèks ti kras, men franchman,
sa a se youn nan bagay sa yo kote si ou mete nan semèn sa a ak pwochen
èdtan siplemantè a yo konprann yon bagay tankou gdb
li pral delivre ou pwobableman dè dizèn de èdtan nan kouri long la,
Se konsa ak sa, kite m 'ba ou yon kol sou kouman bagay sa a travay.
>> Mwen nan fenèt tèminal m 'yo.
Kite m 'ale pi devan epi pou konpile tout pwogram sa a, buggy3.
Li nan deja jiska dat sa a.
Kite m 'kouri li jis tankou nou te fè sa yon tounen pandan y ap, ak tout bon, li te kase.
Men, poukisa sa a ye? Petèt mwen vise moute fonksyon an swap.
Petèt li nan yon ak b. Mwen pa byen k ap deplase yo alantou kòrèkteman.
Kite m 'ale pi devan epi fè sa.
Olye ke sèlman kouri buggy3 kite m 'olye kouri sa a gdb pwogram nan,
ak mwen pral di l 'bay kouri buggy3,
ak mwen pral genyen ladan yo yon agiman liy lòd,-twi,
epi n ap mete sa a nan pwoblèm nan fiti nan espèk fè sonje.
Epi, koulye a sa a koòdone nwa ak blan déja moute sa, ankò,
se yon ti kras akablan nan premye paske gen nan tout bagay sa a
enfòmasyon garanti desann isit la, men omwen gen nan yon bagay yo konnen yo.
Nan tèt la nan fenèt la se kòd aktyèl m 'yo,
ak si mwen woulo liv moute isit la, kite m 'woulo liv nan tèt la anpil nan dosye mwen,
ak tout bon, gen nan buggy3.c, ak avi nan fon an nan fenèt sa a
Mwen gen sa a èd memwa gdb.
>> Sa a se pa menm bagay la tou kòm nòmal mwen John Harvard èd memwa.
Sa a se yon èd memwa ki k ap pase pou pou pèmèt mwen kontwole gdb.
Gdb se yon debugjeur.
Yon debugjeur se yon pwogram ki pèmèt ou mache nan
ekzekisyon nan liy pwogram ou an pa liy pa liy,
nan tout wout la fè anyen ou vle pwogram nan,
te menm rele fonksyon, oswa kap, plis enpòtan,
nan valè divès varyab la.
Se pou nou ale pi devan epi fè sa.
Mwen pral ale pi devan epi tape nan kouri nan èd memwa gdb a,
Se konsa remake nan pati anba a kite nan ekran an mwen te tape kouri,
epi mwen te frape antre nan, ak kisa nou te ke fè?
Li literalman kouri pwogram m ', men mwen pa t' aktyèlman wè anpil ale nan isit la
paske mwen pa gen aktyèlman te di debugjeur a
pran yon poz nan yon moman patikilye nan tan.
Jis tape kouri kouri pwogram nan.
Mwen pa wè aktyèlman anyen. Mwen pa ka manipile li.
>> Olye de sa, kite m 'fè sa.
Lè sa a gdb èd memwa, kite m 'olye tape repo, antre.
Sa se pa sa m 'vle di ke yo tape.
Se pou nou olye tape repo prensipal la.
Nan lòt mo, mwen vle yo mete yon bagay yo rele yon breakpoint,
ki se jistèman rele paske li pral kraze oswa pran yon poz
ekzekisyon nan pwogram ou an nan kote sa a an patikilye.
Main se non an nan fonksyon m 'yo.
Remake gdb se trè entelijan.
Li kalkile soti ke prensipal k ap pase nan kòmanse apeprè nan liy 18
nan buggy3.c, ak Lè sa a, remake isit la sou bò gòch tèt
b + se dwa pwochen nan liy 18.
Sa se raple m 'ke mwen te mete yon breakpoint nan liyn 18.
Fwa sa a, lè m 'tape kouri, mwen pral kouri pwogram mwen
moute jiskaske li frape ki breakpoint,
Se konsa pwogram lan pral pran yon poz pou m 'nan liyn 18.
Isit la nou ale, kouri.
Pa gen anyen sanble li te rive, men avi nan pati anba kite
kòmanse pwogram nan, buggy3, breakpoint 1 nan prensipal nan liy buggy3.c 18.
Ki sa mwen ka fè kounye a?
>> Avi mwen ka kòmanse sezisman bagay sa yo tankou ekri ak lèt ​​detache,
pa printf, x ekri ak lèt ​​detache, epi kounye a ki nan etranj.
$ A 1 se jis yon kiryozite, menm jan nou pral wè
chak fwa ou enprime yon bagay ou jwenn yon nouvo $ valè.
Sa a pou ke ou ka al gade tounen nan valè anvan jis nan ka,
men pou kounye a sa ki ekri ak lèt ​​detache a di m 'se ke valè x nan pwen sa a nan istwa a
se aparamman 134514032.
Ki sa? Ki kote t 'ke menm soti?
[Fèbl-elèv]
Vreman vre, sa a se ki sa nou ap rele yon valè fatra, epi nou pa te deja pale sou sa a ankò,
men rezon ki fè la ke ou inisyalize varyab
se evidamman sa yo ke yo gen kèk valè ke ou vle yo genyen.
Men, trape an se sonje ke ou ka deklare varyab
tankou m 'te fè yon ti moman Anons sa pibliye depi nan egzanp sigma mwen
san aktyèlman ba yo yon valè.
Chèche sonje sa m 'te fè plis pase isit la nan sigma.
Mwen te deklare n, men ki sa valè mwen te ba ou li?
Okenn, paske mwen te konnen ke nan liy kap vini yo
GetInt ta pran swen nan pwoblèm lan nan mete yon valè andedan nan n.
>> Men, nan pwen sa a nan istwa a nan liy 11
ak liy 12 ak liy 13 ak liy 14
nan tout liy sa yo plizyè ki sa ki valè n?
Nan C ou jis pa konnen.
Li nan jeneralman kèk valè fatra, gen kèk nimewo konplètman o aza
ki nan rete sou esansyèlman nan kèk fonksyon anvan
ke nou fin kouri, se konsa kòm pwogram ou an kouri
rapel ki fonksyon vin fonksyon, fonksyon, fonksyon.
Tout moun sa yo ankadreman jwenn mete yo sou memwa, ak Lè sa a, moun ki retounen fonksyon,
ak jis tankou mwen sijere ak gonm la ap memwa yo evantyèlman ankò.
Oke, li jis pou k ap pase ke sa a x varyab nan pwogram sa a
sanble li te genyen kèk valè fatra tankou 134514032
nan kèk fonksyon anvan, pa gen yon sèl ke mwen te ekri.
Li ta ka yon bagay ki vini avèk efikasite avèk sistèm nan fonksyone,
kèk fonksyon anba kapo a.
>> Okay, sa a, se bon, men kite a kounye a avanse nan liy kap vini an.
Si m 'tape "pwochen" nan èd memwa gdb mwen epi mwen frape antre nan,
avi ke a en mouvman desann nan liy 19,
men enplikasyon a ki lojik se ke liy 18
gen kounye a fin egzekite, se konsa si mwen ankò tape "ekri ak lèt ​​detache x"
M 'ta dwe wè koulye a 1, ak tout bon, m' fè.
Yon fwa ankò, bagay la $ se yon fason pou gdb fè ou sonje
ki sa istwa a nan simagri yo se ke ou te fè a.
Koulye a, kite m 'ale pi devan epi enprime soti y, ak annefè, y se kèk valè fou kòm byen,
men okenn kontra gwo paske nan liy 19 nou ap sou yo asiyen li
valè a 2, ki fè, kite m 'tape "pwochen" ankò.
Epi, koulye a nou ap sou liy lan printf.
Kite m 'fè x ekri ak lèt ​​detache.
Kite m 'fè y ekri ak lèt ​​detache. Franchman, m ap jwenn yon ti kras fatige nan enprime sa a.
Kite m 'olye tape "ekspozisyon x" ak "ekspozisyon y,"
e kounye a, chak fwa mwen tape yon kòmann nan lavni an
Mwen pral fè yo sonje sa ki x ak y, sa ki nan x ak y, sa ki nan x ak y.
>> Mwen kapab tou, kòm yon sou kote kalite, nan "moun nan lokalite info."
Info se yon lòd espesyal.
Moun nan lokalite vle di li montre m 'varyab lokal yo.
Jis nan ka m bliye oswa sa a se yon fou, fonksyon konplike
ke mwen oswa yon lòt moun te ekri moun nan lokalite info ap fè w konnen
ki sa yo se tout varyab yo lokal andedan sa a fonksyon lokal
ke ou ta ka pran swen sou si ou vle pike alantou.
Koulye a, printf se sou yo egzekite, se konsa, kite m 'ale pi devan ak jis kalite "kap vini an."
Paske nou se nan anviwonman sa a nou pa aktyèlman wè li
egzekite desann isit la, men remake li a ap resevwa yon ti kras mangled isit la.
Men, remake li nan aksyon net ekran an la,
Se konsa li pa yon pwogram pafè isit la, men sa a oke paske mwen ka toujou pike alantou
lè l sèvi avèk ekri ak lèt ​​detache si mwen vle.
>> Kite m 'tape pwochen ankò, e kounye a, isit la nan pati a ki enteresan.
Nan pwen sa a nan istwa a y se 2, ak x se 1,
kòm sijere la a, e ankò,
rezon ki fè yo sa a se otomatikman montre kounye a se paske mwen te itilize yo lòd, ki
ekspozisyon x ak ekspozisyon y, se konsa moman sa mwen tape pwochen
nan teyori x ak y yo ta dwe vin échanges.
Koulye a, nou deja konnen ki pa k ap pase yo dwe ka a,
men nou pral wè nan yon moman ki jan nou ka plonje pi fon konpwan poukisa sa a, se vre.
Next, e malerezman, y se toujou 2 ak x se toujou 1, e mwen ka konfime kòm anpil.
Ekri an lèt detache x, ekri ak lèt ​​detache y.
Vreman vre, yo pa gen okenn échanjé gen aktyèlman te pase, se konsa kite la kòmanse sa a sou.
Klèman swap ap kase.
Se pou nou olye tape "kouri" ankò.
Kite m 'di wi, mwen vle rekòmanse li depi nan konmansman an, antre.
>> Koulye a, mwen tounen moute nan liyn 18.
Koulye a, remake x ak y yo se valè fatra ankò.
Apre, pwochèn nan, apre, pwochèn nan.
Si mwen resevwa anwiye mwen ka tou jis tape n la pou vini yo.
Ou ka abreje li nan sekans lan nan karaktè pi kout posib.
Boukantay se kounye a kase.
Se pou nou plonje nan, konsa olye pou yo sezisman vini yo,
kounye a mwen pral tape etap pou ke mwen kite andedan sa a fonksyon
pou ke mwen ka mache atravè li, se konsa mwen frape etap ak Lè sa a, antre.
Remake so yo en desann pi ba nan pwogram mwen an liy 36.
Kounye a ki sa yo se varyab yo lokal yo?
Info moun nan lokalite.
Pa gen anyen jis ankò paske nou pa te vinn ak sa yo ki liy,
kidonk kite a ale pi devan epi di "kap vini an."
Koulye a, nou sanble gen tan, tan ekri ak lèt ​​detache.
Valè fatra, dwa? Mwen panse sa.
Kouman sou enprime yon, ekri ak lèt ​​detache b, 1 ak 2?
Nan yon moman, kòm pli vit ke mwen tape pwochen ankò
tan ki pral pran sou yon valè de 1, èspere ke,
paske tan yo pral plase nan valè a nan yon.
>> Koulye a, kite a enprime yon, ekri ak lèt ​​detache b,
Men, koulye a enprime tan, epi li tout bon 1.
Kite m 'fè pwochen. Kite m 'fè pwochen.
Mwen te fini fonksyon an swap.
Mwen toujou anndan a li nan liy 40, se konsa, kite m 'enprime yon,
ekri ak lèt ​​detache b, ak m 'pa pran swen sa ki tan se.
Li sanble ke swap ki kòrèk lè li rive échanjé yon b ak.
Men, si mwen kounye a tape pwochen, mwen sote tounen nan liy 25,
ak nan kou, si mwen kalite nan x ak ekri ak lèt ​​detache y
yo ap toujou chanje, se konsa nou pa gen fiks pwoblèm nan.
Men, koulye a, petèt diagnostically ak pwogram sa a gdb
nou te omwen vinn yon sèl etap pi pre konpreyansyon
sa k ap pase sa ki mal san yo pa gen fatra kòd nou pa mete yon printf isit la,
printf isit la, printf isit la ak Lè sa a, kouri li ankò e ankò
eseye dekouvri sa k ap pase sa ki mal.
>> Mwen pral ale pi devan epi kite soti nan sa a tout ansanm ak kite fimen.
Li nan ale nan Lè sa a, di, "Kite de tout fason?" Wi.
Koulye a, mwen tounen nan èd memwa nòmal mwen an, epi m ap fè lè l sèvi avèk gdb.
Kòm yon sou kote, ou pa bezwen sèvi ak sa a-twi drapo.
An reyalite, si ou retire okenn pati sa a, nou jwenn esansyèlman mwatye a anba nan ekran an.
Si m 'Lè sa a, tape repo prensipal ak Lè sa a, kouri
Mwen ka toujou kouri pwogram m 'yo, men ki sa li pral fè se pi plis tèkstuelman
jis montre m yon sèl nan liy aktyèl nan yon tan.
Twi-a, textuelle koòdone itilizatè,
jis montre ou plis nan pwogram nan nan yon fwa, ki se pwobableman yon ti jan concept pi fasil.
Men, tout bon, mwen ka jis fè apre, pwochèn nan, apre,
ak mwen pral wè yon liy nan yon moman, epi si mwen reyèlman vle wè sa k ap pase sou
Mwen ka tape lis ak wè yon pakèt antye nan liy vwazen.
>> Genyen nan yon videyo ki nou te mande pou w siveye pwoblèm kouche 3
nan ki Nate kouvri kèk nan sibtilite ki nan gdb,
ak sa a se youn nan bagay sa yo, franchman, kote kèk pousantaj ki pa trivial nan nou
pa janm ap manyen gdb, e ke yo pral yon move bagay
paske literalman ou pral fini depanse plis tan pita sa a semès
kouri dèyè desann pinèz Lè sa a, ou ta si ou mete nan ke demi èdtan / è
semèn sa a ak nan aprantisaj li pwochen jwenn konfòtab ak gdb.
Printf te zanmi ou yo.
Gdb ta dwe kounye a gen zanmi ou yo.
>> Nenpòt kesyon sou gdb?
Ak isit la a yon lis rapid nan kèk nan kòmandman yo ki pi pwisan ak itil.
Yeah. >> Èske ou ka enprime yon kòd?
Èske ou ka enprime yon kòd? Absoliman.
Li pa gen yo jis pou nonm antye relatif.
Si yon s varyab se yon fisèl jis kalite nan ekri ak lèt ​​detache nan.
Li pral montre w ki sa sa varyab fisèl se.
[Fèbl-elèv]
Li pral ba ou adrès la ak tout kòd nan tèt li.
Li pral montre w tou de.
Ak yon dènye bagay, jis paske sa yo, se bon konnen tou.
Baktras ak ankadreman, kite m 'plonje nan sa a yon sèl fwa sot pase yo,
menm pwogram egzak ak gdb.
Kite m 'ale pi devan epi kouri itilizatè textuelle vèsyon an koòdone,
kraze prensipal la.
Kite m 'ale pi devan epi kouri ankò. Men mwen wi.
Koulye a, kite m 'ale apre, pwochèn nan, apre, pwochèn nan, apre, etap, antre.
>> Epi, koulye a ta kwè mwen kounye a nan swap fè espre, men mwen tankou "modi, sa ki te valè x?"
Mwen pa kapab fè x ankò.
Mwen pa kapab fè y paske yo ap pa nan dimansyon.
Yo ap pa nan yon kontèks, men pwoblèm pa gen okenn.
Mwen ka tape baktras.
Ki montre m 'tout nan fonksyon sa yo ki te egzekite jiska pwen sa a nan tan.
Remake yon sèl la sou anba a, prensipal, liy moute ak prensipal
yo te sou anba a nan foto nou yo isit la.
Lefèt ke swap se pi wo pase l liy moute ak swap yo te pi wo pase l nan memwa isit la,
ak si mwen vle jwenn tounen nan prensipal tanporèman mwen kapab di "ankadreman."
Ki nonb ki? Main se ankadreman # 1.
Mwen pral ale pi devan epi di "ankadreman 1."
>> Koulye a, mwen tounen nan prensipal yo, e mwen ka enprime x, e mwen ka enprime y,
men mwen pa ka enprime yon b oswa.
Men, mwen ka si mwen di, "Oke, rete tann yon minit. Kote yo te swap a?"
Kite m 'ale pi devan epi di "ankadreman 0."
Koulye a, mwen tounen kote mwen vle yo, ak kòm yon sou kote,
gen nan kòmandman lòt tou, tankou si w ap reyèlman ap resevwa anwiye sezisman apre, pwochèn nan, apre, pwochèn nan,
ou ka jeneralman di bagay sa yo tankou "10 pwochen," epi ki pral etap jiska 10 liy kap vini yo.
Ou kapab tou ekri "kontinye" lè ou reyèlman jwenn fed anlË ak kite atravè li.
Kontinye pral kouri pwogram ou an san entèripsyon jiskaske li frape yon lòt breakpoint,
si nan yon riban oswa bese atè a nan pwogram ou an.
>> Nan ka sa a nou kontinye nan fen a, ak pwogram nan soti nan nòmalman.
Sa a se yon fason anpenpan, enferyè pwosesis.
Jis pwogram ou an soti nan nòmalman.
Plis sou sa nan videyo a ak nan debogaj sesyon ap vini yo.
Sa se te yon anpil.
Kite a pran repo-5 minit nou yo isit la, epi nou pral retounen ak strukt ak dosye.
>> Si ou te plonje nan pset semèn sa a nan deja
ou pral konnen ke nou itilize nan kòd la distribisyon,
sous la kòd ki nou ba ou kòm yon pwen depa, gen kèk nouvo teknik.
An patikilye, nou prezante sa a mo kle nouvo rele struct, pou estrikti,
pou nou ka kreye varyab Customized nan kalite.
Nou menm tou nou prezante nosyon de opinyon dosye dosye Mwen / O, ak pwodiksyon,
ak sa a se pou nou ka sove eta a
nan tablo Goumen ou a nan yon dosye sou disk
pou ke zanmi yo ansèyman ak mwen ka konprann
sa k ap pase sou andedan nan pwogram ou an san yo pa gen manuelman jwe
plizyè douzèn jwèt nan Goumen.
Nou ka fè sa a pi plis automatedly.
>> Ide sa a nan yon struct rezoud yon pwoblèm jistis irezistib.
Sipoze ke nou vle aplike kèk pwogram
ki yon jan kanmenm kenbe yon dosye sou enfòmasyon sou elèv yo,
yo ak elèv yo ta ka gen, pou egzanp, yon ID, yon non
ak yon kay nan yon kote tankou Harvard, se konsa sa yo, se 3 moso nan enfòmasyon
nou vle kenbe otou, se konsa, kite m 'ale pi devan epi kòmanse ekri yon pwogram ti kras isit la,
gen ladan yo stdio.h.
Kite m 'fè gen ladan yo cs50.h.
Lè sa a, kòmanse fonksyon prensipal m 'yo.
Mwen pa pral deranje ak nenpòt ki agiman liy lòd,
ak isit la mwen vle gen yon elèv, se konsa mwen pral di
yon elèv gen yon non, se konsa mwen pral di "non fisèl."
Lè sa a, mwen pral di yon elèv genyen tou yon ID, id konsa Int,
ak yon elèv gen yon kay, se konsa mwen tou pral di "kay fisèl."
Lè sa a, mwen pral bay lòd pou sa yo ti kras yon plis propr tankou sa a.
Okay, koulye a, mwen gen 3 varyab ak ki reprezante yon elèv, se konsa "yon elèv."
>> Epi, koulye a mwen vle peple valè sa yo, se konsa, kite m 'ale pi devan epi di yon bagay tankou
"Id = 123."
Non se pral jwenn David.
Se pou nou di kay la pral jwenn Mather,
ak Lè sa a, mwen pral fè yon bagay abitrèman tankou printf ("% s,
ki gen ID se d%, ap viv nan% s.
Epi, koulye a, ki sa mwen vle ploge nan isit la, youn apre lòt la?
Non, id, kay; retou 0.
Okay, sof si mwen vise moute yon kote isit la
Mwen panse ke nou gen yon pwogram trè bon ki estoke yon sèl elèv yo.
Natirèlman, sa a se pa tout sa ki enteresan. E si mwen vle gen 2 elèv?
Sa a pa gen okenn kontra gwo. Mwen ka sipòte 2 moun.
Kite m 'ale pi devan epi mete aksan sou sa a epi ale desann isit la,
e mwen kapab di "id = 456" pou yon moun tankou Rob ki abite nan Kirkland.
>> Oke, rete tann, men mwen pa ka rele sa yo menm bagay la,
ak li sanble m pral gen a kapab bay kopi sa a,
Se konsa, kite m 'di ke sa yo pral varyab David la,
ak kite m 'jwenn kèk kopi sa yo pou Rob.
Nou pral rele sa yo nan Rob men sa a pa pral nan travay kounye a
paske mwen te rete tann-, kite la chanje m 'nan id1, name1 ak house1.
Rob yo pral 2, 2.
Mwen te gen chanje sa a isit la, isit la, isit la, isit la, isit la, isit la.
Rete tann, sa ki sou Tommy? Se pou nou fè sa ankò.
Li evidan, si ou toujou panse ke sa a se yon bon fason pou fè sa, li la se pa sa,
Se konsa yon kopi / keratin move.
Men, nou te rezoud sa a yon semèn de sa.
>> Ki sa ki te solisyon nou an lè nou te vle gen sikonstans plizyè kalite nan menm done?
[Elèv yo] Yon etalaj.
Yon etalaj, se konsa, kite m 'eseye netwaye sa a leve.
Kite m 'fè kèk chanm pou tèt mwen nan tèt la, epi kite m' olye fè sa isit la.
Nou pral rele moun sa yo, ak olye l mwen pral di "idantifikasyon Int,"
ak mwen pral sipòte 3 nan nou pou kounye a.
Mwen pral di "non fisèl," epi mwen pral sipòte 3 nan nou,
ak Lè sa a, mwen pral di "kay fisèl," epi mwen pral sipòte 3 nan nou.
Koulye a, nan isit la olye pou yo David resevwa varyab pwòp li lokal
nou ka debarase m de sa yo.
Ki santi l bon ke nou ap netwaye sa a leve.
Mwen ka Lè sa a, di David a pwal [0] ak non [0]
ak kay [0].
Lè sa a, Rob nou ka menm sove sou sa.
Se pou nou mete sa a desann isit la, se konsa li te ale nan abitrèman dwe idantifikasyon [1].
Li pral fè non [1],
ak Lè sa a, alafen, kay [1].
>> Toujou yon ti kras fatigan, ak koulye a, mwen gen figi sa a soti,
kidonk kite a di "non [0], id [0], kay [0],
e kite yo pluralize sa a.
Idantifikasyon, idantite, idantite.
Epi ankò, m ap fè li, se konsa ankò, mwen deja rkour a kapab bay kopi / keratin ankò,
se konsa chans yo se gen nan yon lòt solisyon isit la.
Mwen ka pwobableman netwaye sa a moute pi lwen ak yon riban oswa yon bagay tankou sa,
sa nan ti bout tan, li nan yon ti kras pi byen men yo toujou santi l tankou
Mwen rkour a kapab bay kopi / keratin, men menm sa a, mwen fè reklamasyon,
se pa reyèlman fondamantalman solisyon an dwa paske
ki sa si nenpòt moman n ap deside ou konnen ki sa?
Nou vrèman ta dwe estoke adrès imel pou David ak Rob
ak tout lòt moun nan pwogram sa a.
Nou ta dwe tou mete nimewo telefòn.
Nou ta dwe tou mete nimewo kontak ijans.
Nou gen tout bagay sa yo moso nan done ke nou vle nan magazen,
Se konsa, kouman ou ale sou fè sa?
>> Ou deklare yon lòt etalaj nan tèt la, epi lè sa a ou manuelman ajoute
yon adrès imel [0], adrès imel [1]
pou David ak Rob ak pou fè.
Men, gen se vrèman jis yon sipozisyon kache sa a konsepsyon
ke mwen sèvi ak sistèm la onè konnen ke
[Mwen] nan chak nan ranje yo plizyè
jis pou k ap pase nan gade nan moun ki nan menm,
Se konsa [0] nan idantite se nimewo 123,
ak mwen pral asime ke non [0]
se non moun ki nan menm a ak kay [0]
se kay moun ki nan menm la ak pou fè pou tout moun nan ranje yo divès kalite ke mwen kreye.
Men, remake ke gen nan pa gen koneksyon fondamantal
nan mitan 3 moso sa yo nan enfòmasyon, id non, ak kay,
menm si antite a nou ap eseye modèl nan pwogram sa a se pa ranje.
Matris yo se jis fason sa a pwogramatik nan fè sa.
Ki sa nou vrèman vle modèl nan pwogram nou an se yon moun ki
tankou David, yon moun tankou Rob andedan nan yo ki
oswa ankapsule se yon non ak ID ak kay yon.
>> Èske nou ka yon jan kanmenm eksprime ide sa a nan ANKAPSILASYON
kote yon moun gen yon ID, non yon ak kay yon
epi yo pa Resort reyèlman Hack sa a kote nou jis
fè konfyans ke yon bagay bracket
refere a antite nan menm imen nan chak nan sa yo ranje disparate?
Nou ka aktyèlman fè sa.
Kite m 'ale pi wo a prensipal pou kounye a, ak kite m' kreye pwòp mwen done kalite
pou reyèlman premye fwa a.
Nou itilize teknik sa a nan Goumen,
men isit la mwen pral ale pi devan epi kreye yon kalite done,
epi ou konnen ki sa, mwen pral rele li elèv oswa moun,
ak mwen pral sèvi ak tipedèf pou defini yon kalite.
Mwen pral di ke sa a se yon estrikti,
ak Lè sa a, estrikti sa a a pwal nan elèv kalite, nou pral di,
menm si li nan yon ti kras ki date kounye a pou mwen.
Nou pral di "int id."
Nou pral di "non fisèl."
Lè sa a, nou pral di "fisèl kay,"
konsa koulye a nan fen liy sa yo kèk nan kòd
Mwen te jis anseye rezone ke gen egziste
yon kalite done san konte antye, san konte strings, san konte double, san konte flote.
>> Kòm nan moman sa a nan liy tan 11, gen se kounye a yon nouvo done kalite rele elèv yo,
ak koulye a, mwen ka deklare yon varyab elèv nenpòt kote mwen vle,
Se konsa, kite m 'desann isit la bay moun.
Koulye a, mwen ka debarase m de sa a, e mwen ka ale tounen desann bay David isit la,
ak pou David mwen ka aktyèlman di ke David la,
nou ka literalman non varyab a apre tèt mwen,
a pwal nan elèv ki kalite.
Sa a ta ka gade yon etranj ti kras, men sa a se pa tout sa ki diferan
soti nan deklare yon bagay kòm yon int oswa fisèl yon oswa flote yon.
Li jis konsa k ap pase yo dwe rele elèv kounye a,
ak si mwen vle mete yon bagay andedan nan estrikti sa a
Mwen kounye a gen yo sèvi ak yon moso nouvo sou sentaks, men li la trè dwat,
david.id = 123, david.name = "David" nan kapital D,
ak david.house = "Mather,"
ak koulye a, mwen ka debarase m de bagay sa a isit la.
Notifikasyon ke nou te kounye a reamenaje pwogram nou an nan vrèman fason yon pi bon
nan sa koulye a pwogram nou an miwa mond reyèl la.
>> Genyen nan yon nosyon mond reyèl la nan yon moun oswa yon elèv yon.
Isit la nou gen kounye a yon vèsyon C nan yon moun oswa yon plis espesyalman elèv yo tounen yon.
Anndan nan moun sa yo se karakteristik sa yo enpòtan,
ID, non ak kay, se konsa Rob esansyèlman vin menm bagay la desann isit la,
pou elèv piye, epi kounye a rob.id = 456,
rob.name = "Rob."
Reyalite a ki se varyab la rele Rob se sòt de sans.
Nou te ka yo te rele l 'x oswa y oswa z.
Nou jis li rele l 'Rob yo dwe Semantics ki konsistan,
men vrèman non an se andedan nan ki jaden tèt li,
Se konsa koulye a, mwen gen sa a.
Sa a tou pa santi tankou desen an pi byen nan ke mwen te difisil kode David.
Mwen te di kode Rob.
Apre sa, mwen toujou gen Resort nan kèk kopi ak keratin chak fwa mwen vle varyab nouvo.
Anplis, mwen dwe aparamman bay chak nan sa yo varyab yon non,
menm si mwen ta anpil olye dekri sa yo varyab
plis generic kòm elèv yo.
>> Koulye a, nou ka rantre ide yo ki te travay byen pou nou
ak olye l di, "Ou konnen ki sa, ban m 'yon varyab elèv yo rele,
e kite yo te li ka nan gwosè 3, "se konsa koulye a, mwen ka amelyore sa a pi lwen,
debarase m de manuelman te deklare David la,
e mwen ka olye di yon bagay tankou elèv yo [0] isit la.
Mwen ka Lè sa a, di elèv yo [0] isit la,
elèv yo [0] isit la, ak pou fè, e mwen ka ale nan
epi netwaye ki moute pou Rob.
Mwen te kapab ale tou sou kounye a petèt ajoute yon riban
ak lè l sèvi avèk GetString ak GetInt aktyèlman jwenn valè sa yo soti nan itilizatè lan.
Mwen te kapab ale sou ajoute yon konstan paske sa a se jeneralman pratik move
difisil kòd kèk nimewo abitrè tankou 3 dwa isit la
ak Lè sa a, jis sonje ke ou ta dwe mete pa gen okenn plis pase 3 elèv yo nan li.
Li ta kapab pwobableman pi bon yo sèvi ak # defini nan tèt la nan dosye mwen
ak faktè ki soti, sa tout bon, kite m 'ale pi devan epi jeneralizasyon sa a.
>> Kite m 'louvri moute yon egzanp sa a, se nan mitan jodi a
egzanp an avanse, structs1.
Sa a se yon pwogram pi konplè ki itilize # defini moute isit la
e li di nou pral gen 3 elèv pa defo.
Isit la mwen deklare yon vo klas elèv yo,
Se konsa yon klas ki gen elèv yo, e kounye a, mwen sèvi ak yon riban
jis asire kòd la yon ti kras plis elegant, peple klas la
l anplas ak patisipasyon itilizatè a, se konsa répétèr soti nan mwen 0 = sou jiska elèv yo, ki se 3.
Lè sa a, mwen rapid itilizatè a nan vèsyon sa-a
sa ki nan ID elèv la, ak mwen jwenn li avèk GetInt.
Ki sa ki nan non elèv la, ak Lè sa a, mwen jwenn li avèk GetString.
Ki sa ki nan kay elèv la? Mwen jwenn li avèk GetString.
Lè sa a, nan pati anba a isit la mwen jis deside chanje
ki jan m ap enprime sa yo deyò epi yo aktyèlman sèvi ak yon riban,
epi ki mwen enprime?
Dapre kòmantè a mwen enprime nenpòt moun ki nan Mather,
ak sa a, se li tèlman Rob ak Tommy ak pou fè-aktyèlman nan Tommy nan Mather.
Tommy ak David ta dwe enprime nan ka sa a, men ki jan sa a ap travay?
Nou pa t 'wè sa a fonksyon anvan, men pran yon devine tankou sa ki sa a ap fè.
Konpare strings.
>> Li se yon ti kras ki pa evidan fason li konpare strings paske li vire soti
si li retounen 0 sa vle di strings yo egal.
Si li retounen yon -1 sa vle di yon sèl vini lòd avèk lèt ​​alfabè anvan lòt la,
epi si li retounen +1 sa vle di mo a lòt vini lòd avèk lèt ​​alfabè
anvan lòt la, epi ou ka gade sou entènèt oswa nan paj la nonm
yo wè egzakteman ki fason ki ki, men tout sa a se kounye a ap fè se li nan di
si [mwen]. kay la ki egal a "Mather"
Lè sa a, ale pi devan epi enprime soti sa, epi se konsa nan Mather.
Men, isit la nan yon bagay nou pa t 'wè anvan, epi nou pral tounen vin jwenn sa a.
Mwen pa sonje janm gen yo fè sa nan youn nan pwogram mwen an.
Gratis ki aparamman refere li a memwa, libere memwa,
men ki sa memwa mwen aparamman libere nan sa a riban nan fon an nan pwogram sa a?
Li sanble ke mwen libere non yon moun nan
ak kay yon moun nan, men poukisa se sa?
>> Li vire soti pandan tout semèn sa yo ke ou ve yo te lè l sèvi avèk GetString
nou te kalite te entwodwi yon ensèk nan tout youn nan pwogram ou an.
GetString pa memwa konsepsyon rezèvè konsa ke li kapab tounen vin jwenn nou yon kòd,
tankou David,, oswa Rob, epi ou ka Lè sa a, fè tou sa ou vle
ak ki fisèl nan pwogram ou an paske nou te rezève memwa a pou ou.
Pwoblèm lan se tout tan sa a chak fwa ou rele GetString
nou, otè yo nan GetString, yo te mande sistèm nan fonksyone
ba nou yon ti jan nan RAM pou sa a fisèl.
Ban nou yon ti jan nan RAM pou sa a fil kap vini an.
Ban nou ti gout plis RAM pou sa a fil kap vini an.
Ki sa ou, pwogramè a, pa janm yo te fè
an, ap ban nou ke tounen memwa,
Se konsa pou sa yo plizyè semèn tout pwogram yo ou te ekri
te gen sa ki rele yon leap memwa kote yo kenbe lè l sèvi avèk
pi plis ak plis memwa chak fwa ou rele GetString, ak sa a, se amann.
Nou fè espre fè sa nan premye semèn yo paske li nan pa sa ki enteresan
gen enkyete sou kote fisèl la ap vini soti nan.
Tout sa ou vle se pawòl Bondye a Rob tounen vin lè itilizatè a kalite li pous
>> Men, fè pi devan nou genyen kounye a yo kòmanse ap resevwa pi plis sofistike sou sa a.
Nenpòt ki lè nou asiyen memwa nou pi bon evantyèlman lage l 'tounen.
Otreman nan mond reyèl la sou Mac ou a oswa PC ou ta ka genyen detanzantan ki gen eksperyans
sentòm kote òdinatè ou a ap pile grenn nan yon kanpe evantyèlman
oswa estipid boul la bondi plaj se jis okipe a nan òdinatè
tout atansyon yo epi li ou pa kapab fè bagay sa yo.
Ki ka eksplike a nenpòt ki kantite pinèz, men nan mitan moun pinèz posib
yo bagay sa yo rele fwit memwa kote yon moun ki te ekri ki moso nan lojisyèl
w ap itilize pa t 'sonje memwa gratis
ke li te oswa li te mande sistèm nan fonksyone pou li a,
pa lè l sèvi avèk GetString, paske sa se yon bagay CS50, men lè l sèvi avèk fonksyon sanblab
ki mande sistèm nan fonksyone pou memwa.
Si ou menm oswa yo vis moute nan epi pa janm aktyèlman retounen ke memwa
yon sentòm nan ki ka ke yon pwogram ralanti ak ralanti epi li ralanti
sof si ou sonje yo rele gratis.
>> Nou pral tounen vin jwenn lè ak poukisa ou ta ka rele gratis,
Men, kite a ale pi devan jis pou bon mezi epi eseye kouri pwogram sa a an patikilye.
Sa a te rele structs1, antre.
Kite m 'ale pi devan epi kouri structs1, 123, David Mather,
456, Rob Kirkland, 789,
Tommy Mather, epi nou wè nan David nan Mather, nan Tommy nan Mather.
Sa a se jis yon chèk saniti ti ke pwogram nan ap travay.
Koulye a, malerezman, pwogram sa a se yon ti kras fwistre nan ki
Mwen t 'tout sa ki travay, mwen tape nan 9 strings diferan, frape antre nan,
te di ki te nan Mather, ankò evidamman mwen te konnen ki moun ki te nan Mather deja paske mwen tape li.
Li ta omwen bèl si pwogram sa a se plis tankou yon baz done
epi li aktyèlman sonje sa mwen te tape nan
Se konsa, mwen pa janm ankò gen opinyon sa yo dosye elèv yo.
Petèt li nan tankou yon sistèm registrarial.
>> Nou ka fè sa a lè l sèvi avèk teknik sa a li te ye tankou D 'dosye dosye Mwen / O, ak pwodiksyon,
yon fason trè enerik pou m di nenpòt ki lè ou vle li dosye oswa ekri dosye
ou ka fè sa a ak yon seri sèten nan fonksyon.
Kite m 'ale pi devan epi louvri sa a structs2.c egzanp,
ki se prèske ki idantik, men kite a wè sa ki li kounye a ap fè.
Nan tèt la nan dosye a Mwen deklare yon klas elèv yo.
Mwen Lè sa a, peple klas la ak D 'itilizatè a la,
se konsa liy sa yo nan kòd yo egzakteman tankou anvan an.
Lè sa a, si mwen desann isit la mwen enprime tout moun ki nan Mather abitrèman renmen anvan,
men sa a se yon karakteristik enteresan nouvo.
Liy sa yo nan kòd se nouvo, epi yo prezante yon bagay isit la,
DOSYE, tout kaskèt, ak li gen * nan isit la tou.
Kite m 'deplase sa a sou isit la, yon * sou isit la tou.
>> Sa a fonksyon nou pa t 'wè anvan, fopen,
men li vle di dosye louvri, kidonk kite a koudèy nan sa yo,
ak sa a se yon bagay nou pral tounen vin jwenn nan psets nan lavni,
men liy sa a isit la esansyèlman ouvè yon dosye rele baz done,
epi li espesyalman ouvè li nan yon fason ke li ka fè sa yo dwe li?
[Fèbl-elèv]
Dwa, se konsa "W" jis vle di li te di sistèm nan fonksyone
louvri sa a dosye ki nan yon fason ke mwen ka ekri nou nan li.
Mwen pa vle li li l '. Mwen pa vle jis gade nan li.
Mwen vle chanje li epi ajoute bagay potansyèlman sou li,
ak dosye a yo pral rele baz done.
Sa a te ka rele anyen.
Sa a te kapab database.txt. Sa a te kapab. Db.
Sa a te kapab yon mo tankou foo, men mwen te chwazi abitrèman nan non baz done a dosye.
Sa a se yon chèk saniti ti ke nou pral tounen vin jwenn nan gwo detay sou tan,
si Fp, pou konsèy ranpli, fè sa ki pa nil egal sa vle di tout bagay byen.
>> Long istwa kout, fonksyon tankou fopen pafwa echwe.
Petèt dosye a pa egziste. Petèt w ap soti nan espas disk.
Petèt ou pa gen pèmisyon ak sa yo ki folder,
Se konsa, si fopen retounen yon bagay nil move rive.
Kontrèman, si fopen pa retounen nil tout se byen
e mwen ka kòmanse ekri nan sa a dosye.
Isit la nan yon Trick nouvo.
Sa a se yon riban pou ki nan iteration sou chak nan elèv yo m 'yo,
ak sa a sanble se konsa menm jan ak sa nou te fè anvan,
men sa a fonksyon se yon kouzen li nan printf rele fprintf pou dosye printf,
ak avi li a diferan nan sèlman 2 fason.
Youn nan, li kòmanse ak f olye pou yo p,
men Lè sa a, agiman premye li yo se aparamman ki sa?
[Elèv yo] dosye-a. >> Li se yon dosye.
Bagay sa yo rele Fp, ki nou pral evantyèlman toumante apa ki sa yon konsèy dosye se,
men pou kounye a Fp tou senpleman reprezante dosye a ke mwen te louvri,
Se konsa fprintf isit la ap di enprime ID sa a itilizatè a nan dosye a, nou pa ekran an.
Ekri an lèt detache non itilizatè a nan dosye a, nou pa ekran an,
kay la nan dosye a, nou pa ekran an, ak Lè sa a, desann isit la, evidamman,
fèmen dosye a, ak Lè sa a, desann isit la gratis memwa a.
>> Sèl diferans ki genyen ant sa a vèsyon 2 ak vèsyon 1
se entwodiksyon an fopen ak sa a DOSYE ak *
ak sa a nosyon nan fprintf, kidonk kite a wè sa ki rezilta nan fen se.
Kite m 'ale nan fenèt tèminal m' yo.
Kite m 'kouri structs2, antre.
Sanble tout se byen. Se pou nou relance structs2.
123, David Mather, 456, Rob Kirkland,
789, Tommy Mather, antre.
Sanble li Konpòte menm bagay la tou, men si mwen fè kounye a ls
remake ki sa dosye se nan isit la nan mitan tout kòd m 'yo, baz done,
kidonk kite la louvri sa, jdi nan baz done, ak gade nan sa.
Li pa sèksi a nan fòma dosye-a.
Li reyèlman se youn moso nan liy done pou chak liy pou chak liy,
men moun nan nou ki sèvi ak Excel oswa CSV dosye, vigil separe valè,
Mwen te kapab sètènman te itilize fprintf olye petèt fè yon bagay tankou sa a
pou ke mwen te ka aktyèlman kreye ekivalan a nan yon dosye Excel
pa separe bagay ak vigil, pa sèlman nouvo liy.
>> Nan ka sa a si mwen te olye yo itilize vigil olye pou yo nouvo liy
Mwen te kapab literalman louvri sa a ranpli baz done nan Excel si mwen olye te fè li gade tankou sa a.
Nan ti bout tan, kounye a ke nou gen pouvwa a yo pou yo ekri dosye
nou kapab kounye a kòmanse done pèsistan, kenbe l 'nan sou disk
pou nou ka kenbe enfòmasyon alantou ankò epi ankò.
Avi yon koup la lòt bagay ki se kounye a yon ti jan pi plis yo konnen yo.
Nan tèt sa a ranpli C a nou genyen yon tipedèf
paske nou te vle kreye yon kalite done ki reprezante yon mo,
Se konsa sa a se tip ki rele mo, ak andedan nan estrikti sa a
li nan yon ti kras amateur kounye a.
Poukisa se yon mo te fè leve nan aparamman etalaj yon?
Ki sa ki se yon mo jis entwitivman?
>> Li nan yon etalaj de karaktè.
Li se yon sekans nan karaktè tounen nan fè bak nan do.
LÈT nan tout kapsil k ap pase yo nou abitrèman di longè a maksimòm
nan nenpòt ki pawòl nan diksyonè a ke nou ap sèvi ak pou Goumen.
Poukisa mwen gen yon +1?
Pèsonaj la nil.
Sonje lè nou te fè sa egzanp lan Bananagrams nou bezwen yon valè espesyal
nan fen mo a yo nan lòd yo kenbe tras
nan kote mo aktyèlman te fini, e kòm spesifikasyon la ansanm pwoblèm di
isit la nou ap asosye ak yon mo bay yon valè Boolean,
yon drapo, se konsa pale, vre oubyen fo.
Èske ou te jwenn mo sa a deja, paske nou reyalize
nou reyèlman bezwen yon fason pou sonje se pa sèlman sa ki yon mo se nan Goumen
men si ou pa ou, moun lan, te jwenn li
pou ke si ou fè jwenn pawòl Bondye a "" ou pa kapab jis tape nan la, antre nan,, antre a,, antre nan
epi pou yo jwenn 3 pwen, 3 pwen, 3 pwen, 3 pwen.
Nou vle pou kapab lis nwa mo sa a pa mete yon bouleen
vre si ou te deja jwenn li, ak pou ki nan rezon sa a nou
enklizyon li nan estrikti sa a.
>> Koulye a, desann isit la nan Goumen gen nan sa a struct lòt yo rele diksyonè.
KI PA LA isit la se pawòl Bondye a tipedèf paske nan ka sa a
nou bezwen ankapsulasyon lide a nan yon diksyonè, diksyonè
ak yon diksyonè gen yon pakèt antye nan mo,
kòm enplisit sa a etalaj, ak kouman anpil nan mo sa yo ki genyen?
Oke, kèlkeswa sa sa a gwosè varyab rele di.
Men, nou jis bezwen youn diksyonè.
Nou pa bezwen yon kalite done yo rele diksyonè.
Nou jis bezwen youn nan yo, se konsa li vire soti nan C
ke si ou pa di tipedèf, ou jis di struct, lè sa a andedan aparèy òtopedik yo Curly
ou mete varyab ou a, lè sa a ou mete non an.
Sa a se deklare yon varyab diksyonè rele
ki sanble tankou sa a.
Nan kontras, liy sa yo ap kreye yon estrikti done ki kapab itilize ankò rele mo
ke ou ka kreye plizyè kopi, jis tankou nou te kreye
plizyè kopi elèv yo.
>> Ki sa sa finalman pèmèt nou fè?
Kite m 'ale tounen nan, kite la di, yon egzanp ki pi senp nan pi senp fwa,
ak kite m 'louvri moute, kite la di, compare1.c.
Pwoblèm nan isit la nan men se aktyèlman kale tounen
kouch la nan yon fisèl ak kòmanse pran nan sa yo wou fòmasyon
paske li sanble ke yon fisèl tout tan sa a
se jan nou te pwomèt nan semèn 1 vrèman jis yon tinon,
yon sinonim nan bibliyotèk la CS50 pou yon bagay ki sanble yon ti kras plis skre,
Char *, epi nou te wè sa a zetwal anvan.
Nou te wè li nan yon kontèks dosye.
>> Se pou nou wè koulye a poukisa nou ve yo te kache sa a detay pou kèk tan kounye a.
Isit la se yon dosye rele compare1.c,
epi li aparamman mande itilizatè a pou 2 strings, s ak t,
ak Lè sa a, li ap eseye konpare sa yo strings pou egalite nan liy 26,
epi si yo ap egal li di, "Ou tape menm bagay la,"
epi si yo ap pa egal li di, "Ou tape bagay diferan."
Kite m 'ale pi devan epi kouri pwogram sa a.
Kite m 'ale nan anyè sous m' yo, fè yon compare1. Li konpile oke.
Kite m 'kouri compare1.
Mwen pral rale nan, antre.
Di yon bagay. Hello.
Mwen pral di yon bagay ankò. Hello.
Mwen definitivman pa t 'tape bagay diferan.
>> Kite m 'eseye sa a ankò. BYE BYE.
Definitivman pa diferan, se konsa sa k ap pase sou isit la?
Oke, sa se reyèlman yo te konpare nan liy 26?
[Fèbl-elèv]
Wi, se konsa li sanble ke yon fisèl, done kalite, se kalite yon manti blan.
Yon fil se yon * Char, men ki sa se yon * Char?
A * Char, menm jan yo di, se yon konsèy,
ak yon konsèy se efektivman yon adrès,
yon sòm kote nan memwa, epi si ou rive gen tape nan yon mo tankou HELLO,
sonje soti nan diskisyon sot pase a strings
sa a se tankou pawòl Bondye a HELLO.
Sonje ke ka yon mo tankou HELLO ap reprezante
kòm yon etalaj de karaktè tankou sa a
ak Lè sa a, ak yon gwo karaktè espesyal nan fen a yo rele karaktè a nil,
kòm reprezant yo \.
Ki sa ki se aktyèlman yon fisèl?
Avi ke sa a se sègman miltip nan memwa,
ak nan reyalite, se nan fen li sèlman li te ye yon fwa ou gade nan fisèl la tout antye
kap chèche pèsonaj la nil espesyal.
Men, si sa a se yon ti moso nan memwa nan memwa òdinatè mwen an,
kite a abitrèman di ke sa a fisèl jis te gen chans,
epi li te resevwa mete nan kòmansman la anpil nan RAM òdinatè mwen an.
Sa a se, 0 multiple 1, 2, 3, 4, 5, 6 ...
>> Lè m 'di yon bagay tankou GetString ak m' fè fisèl s = GetString
sa ki vrèman ke yo te tounen?
Pou semèn sa yo sot pase plizyè, sa ki vrèman ke yo te ki estoke nan s
se pa sa a fisèl se pou chak, men nan ka sa a sa k ap estoke se
nimewo 0 a paske sa GetString aktyèlman fè sa ki
se li pa fizikman retounen yon kòd.
Ki pa menm vrèman fè konseptyèl ekspresyon sans.
Ki sa li fè retou se yon nimewo.
Nimewo a se adrès ki nan HELLO nan memwa,
ak tout kòd yo lè sa a, si nou kale tounen kouch sa a, fisèl pa reyèlman egziste.
Li nan sèlman yon senplifikasyon nan bibliyotèk la CS50.
>> Sa a vrèman se yon bagay yo rele Char *.
Char fè sans paske sa ki nan yon mo, tankou HELLO?
Oke, li nan yon seri de charaktèr, yon seri de karaktè.
* Char vle di adrès ki nan yon karaktè,
Se konsa, sa sa vle di retounen yon kòd?
Yon bèl, senp fason pou retounen yon fisèl
se olye ke eseye figi konnen kouman mwen retounen 5 oswa 6 bytes diferan
kite m 'tounen nan adrès ki nan yo ki multiple?
Yon sèl la an premye.
Nan lòt mo, kite m ba w adrès ki nan yon karaktè nan memwa.
Sa a ki sa * Char reprezante, adrès la nan yon karaktè sèl nan memwa.
Rele ki nan varyab.
Store li nan s ki adrès patikilye, nan Tanp kote mwen te di se abitrèman 0,
jis kenbe bagay sa ki senp, men nan reyalite li nan jeneralman yon nimewo pi gran.
>> Tann yon minit.
Si w ap sèlman bay m 'adrès ki nan karaktè a an premye, ki jan mwen konnen ki sa ki adrès la se
nan karaktè, dezyèm lan, twazyèm lan, katriyèm lan ak senkyèm lan?
[Fèbl-elèv]
Ou sèlman konnen ki kote nan fen fisèl la se pa fason pou sa a jwe fent sou lamen,
Se konsa, lè ou itilize yon bagay tankou printf, ki sa ki printf literalman pran kòm agiman li yo,
sonje ke nou itilize kontneur sa a% s, ak Lè sa a, ou pase nan
varyab la ki nan estoke yon kòd.
Ki sa w ap reyèlman pase se adrès ki nan karaktè an premye nan ki fisèl.
Printf Lè sa a, sèvi ak yon riban pou oswa yon riban pandan y ap yo lè li resevwa ke adrès,
pou egzanp, 0, se konsa, kite m 'fè sa, koulye a,
printf ("% s \ n," yo);
Lè m 'rele printf ("% s \ n," yo); sa m ap vrèman bay printf ak
se adrès ki nan pèsonaj la an premye nan yo, ki nan ka sa a abitrè se H.
>> Ki jan printf konnen ki sa egzakteman yo montre sou ekran an?
Moun ki aplike printf aplike yon riban pandan y ap oswa yon pou riban
ki di sa a karaktè egal pèsonaj la nil espesyal?
Si ou pa, enprime li. Kouman sou yon sèl sa a?
Si ou pa enprime li, enprime li, enprime li, enprime li.
Oh, sa a se yon sèl espesyal. One Stop enprime yo epi retounen nan itilizatè a.
Epi sa a, literalman tout sa ki nan te pase anba kapo machin lan,
epi se yon anpil nan dijere nan premye jou nan yon klas,
men pou kounye a li vrèman blòk la bilding nan tout bagay konpreyansyon
ki te konn mete pral sou andedan nan memwa òdinatè nou an,
ak evantyèlman nou pral toumante sa a apa ak yon ti èd
nan youn nan zanmi nou an nan Stanford.
>> Pwofesè Nick Parlante nan Stanford ki fè sa sekans videyo bèl bagay
soti nan tout kalite lang diferan ki prezante
sa a ti kras karaktè Claymation Binky.
Vwa a ou se sou tande nan jis yon preview kèk glisman dezyèm
se sa yo ki an yon Stanford pwofesè, ak w ap vin
sèlman 5 oswa 6 segonn dwa sa a kounye a,
men sa a se nòt la ki te sou nou pral konkli jodi a
epi kòmanse nan Mèkredi.
M 'ba ou Fun pwente ak Binky, preview la.
[♪ ♪ Klas Mizik] [Pwofesè Parlante] Hey, Binky.
Reveye. Li lè pou plezi konsèy.
[Binky] Ki sa ki nan sa? Aprann sou pwent?
Oh, chokola!
>> Nou pral wè ou nan Mèkredi.
[CS50.TV]