Rob Bowden: Hi, unë jam Rob Bowden, dhe le të flasim për quiz0. Pra, pyetja e parë. Kjo është pyetja, ku ju nevojitet për kodin numrin 127 në bulbs binare. Në qoftë se ju të kërkuar, ju mund të të bëjë konvertimin rregullt nga bi-- ose, nga decimal në binar. Por kjo ndoshta do për të marrë një shumë kohë. Unë do të thotë, që ju mund të kuptoj se, OK, 1 është në atje, 2 në atje, 4 është në atje, 8 është në atje. Mënyra më e lehtë, 127 është 128 minus një. Kjo llambë drita pari nga e majta është 128-bit. Pra, 127 është me të vërtetë vetëm të gjitha nga llamba të tjera të lehta, pasi kjo është pari nga e majta llambë të lehta minus 1. Kjo është ajo për këtë pyetje. Pyetje një. Pra, me 3 copa që ju mund të paraqesin 8 vlera të dallueshme. Pse, atëherë, është 7 më e madhe e jo-negative integer decimal ju mund të përfaqësojë? E pra, në qoftë se ne vetëm mund të paraqesin 8 vlera të dallueshme, atëherë ajo që ne jemi duke shkuar për të përfaqëson eshte 0 deri 7. 0 merr një nga vlerat. Pyetje dy. Me copa n, sa të dallueshme Vlerat mund të ju përfaqësoni? Pra, me copa n, ju keni 2 Vlerat e mundshme për çdo grimë. Pra, ne kemi 2 vlerat e mundshme për bit e parë, 2 Vlerat e mundëshme për të dytë, 2 është e mundur për të tretën. Dhe kështu që është 2 herë 2 herë 2, dhe në fund të fundit përgjigja është 2 deri në n. Pyetje tre. Çfarë është 0x50 në binar? Pra mos harroni se heksadecimal ka një shumë të konvertimit të drejtpërdrejtë në binar. Pra këtu, ne vetëm duhet të shikoni në 5 dhe 0 pavarur. Pra, çfarë është 5 në binar? 0101, që është 1 bit dhe 4 bit. Çfarë është 0 në binar? Jo ndërlikuar. 0000. Pra, vetëm të vënë ata së bashku, dhe që është numri i plotë në binar. 01.010.000. Dhe në qoftë se ju të kërkuar që ju mund të ik se pari nga e majta zero. Është e parëndësishme. Pra, atëherë si alternativë, çfarë është 0x50 në decimal? Në qoftë se ju të kërkuar, ju could-- qoftë se ju jeni më të rehatshme me binar, ju mund të merrni atë përgjigje binar dhe kthyer atë në decimal. Ose ne mund vetëm të kujtojmë se heksadecimal. Kështu që 0 është në vendin e 0-të, dhe 5 është në 16 në vend të parë. Kështu që këtu, kemi 5 herë 16 për parë, plus 0 herë 16 me zero, është 80. Dhe në qoftë se ju shikuar Titulli në pyetjen, ajo ishte CS 80, e cila ishte lloj i një aluzion në përgjigje të këtij problemi. Pyetje pesë. Ne kemi këtë skenar Scratch, e cila është përsëritur 4 herë gjalpë badiava pelte. Pra, si nuk kemi tani kodin që në C? E pra, ne kemi here-- pjesë në bold është vetëm një pjesë e keni pasur për të zbatuar. Pra, ne kemi një lak 4 që është looping 4 herë, printf-ing badiava gjalpë pelte, me linjë të re si problemi kërkon. Pyetja e gjashtë, një tjetër problem Scratch. Ne e shohim se ne jemi në një lak përgjithmonë. Ne jemi duke thënë se i ndryshueshme dhe pastaj bën rritjen i nga 1. Tani ne duam të bëjmë atë në C. Ka mënyra të shumta që mund të ketë bërë këtë. Këtu ne ndodhi me kodin përgjithmonë loop si një kohë (të vërtetë). Pra, ne deklarojmë ndryshorja i, vetëm ashtu si kemi pasur i ndryshueshëm në Scratch. Deklaroj i ndryshueshme, dhe përgjithmonë ndërsa (e vërtetë), ne themi variablin i. Pra printf% i-- ose ju mund të keni përdorur% d. Ne themi se ndryshore, dhe pastaj rrisim atë, i ++. Pyetje shtatë. Tani ne duam të bëjmë diçka shumë të ngjashme për Mario dot c nga problemi vendosur një të tillë. Ne duam për të shkruar këto hashtags, ne duam për të shkruar një pesë nga tre drejtkëndësh i këtyre hashes. Pra, si do të shkojmë për të bërë këtë? E pra, ne ju jap një e tërë bandë të kodit, dhe ju vetëm duhet të plotësoni në funksion të rrjetit të shtypura. Pra, çfarë e bën PrintGrid duken si? Edhe ju jeni e kaluara gjerësi dhe lartësi. Pra, ne kemi një Outer 4 loop, kjo është looping mbi të gjithë rreshtat e këtij rrjetit që ne duam të shtypura jashtë. Pastaj kemi ndër-rrjetore 4 loop, kjo është shtypje mbi çdo kolonë. Pra, për çdo rresht, kemi shkruar për çdo kolonë, një hash vetëm. Pastaj në fund të rreshtit kemi shkruar a linjë të vetme të reja për të shkuar në rreshtin tjetër. Dhe kjo është ajo për të gjithë rrjetin. Pyetje tetë. Një funksion si PrintGrid është e thënë të kanë një efekt anësor, por jo një kthim Vlera. Shpjegoni dallimin. Pra, kjo mbështetet në ju kujtohet çfarë është një efekt anësor është. E pra, një kthim value-- ne e dimë PrintGrid nuk kanë vlerë të kthimit, pasi që këtu ai thotë pavlefshëm. Pra, çdo gjë që të kthehet pavlefshëm me të vërtetë nuk ka kthim asgjë. Pra, çfarë është efekt anësor? E pra, një efekt anësor është çdo gjë që lloj i vazhdon pas përfundimit të funksionit kjo nuk ishte vetëm u kthye, dhe kjo nuk ishte vetëm nga inputeve. Kështu, për shembull, ne mund të ndryshojë një ndryshore globale. Kjo do të jetë një efekt anësor. Në këtë rast të veçantë, një efekt shumë të rëndësishëm anësor është shtypje në ekran. Kështu që është një efekt anësor që PrintGrid ka. Ne shkruar këto gjëra në ekran. Dhe ju mund të mendoni se si një efekt anësor, pasi kjo është diçka që vazhdon pas përfundimit të këtij funksioni. Kjo është diçka jashtë fushës i këtij funksioni që në fund të fundit është duke u ndryshuar, Përmbajtja e ekranit. Pyetje nëntë. Konsideroni programin më poshtë, në të cilën numrat linjë janë shtuar për hir të diskutimit. Pra, në këtë program, ne jemi të vetëm thirrje GetString, ruajtjen atë në këtë ndryshueshme s, dhe pastaj shtypjen se ndryshueshme s. OK. Pra, të shpjegojë se pse një linjë është i pranishëm. #include CS50 dot h. Pse nuk kemi nevojë për të #include CS50 dot h? E pra ne jemi duke bërë thirrje GetString funksion, dhe GetString është përcaktuar në bibliotekë CS50. Pra, nëse ne nuk kemi #include CS50 dot h, ne do të merrni atë deklaratë të nënkuptuar e gabimit funksionit GetString nga përpiluesit. Pra, ne kemi nevojë për të përfshirë library-- ne kemi nevojë për të përfshirë header fotografi, ose tjetër përpilues nuk do të njohin se GetString ekziston. Shpjegoni se përse linjë dy është i pranishëm. Pra, standardi io dot h. Kjo është pikërisht njëjtë si problemin e mëparshme, përveç në vend të që kanë të bëjnë me GetString, ne jemi duke folur në lidhje me printf. Pra, nëse ne nuk themi se duhet të përfshijë standarde io dot h, atëherë ne nuk do të jetë në gjendje për të përdorur funksionin printf, sepse përpiluesit nuk do të dinë për të. Why-- çfarë është rëndësia i pavlefshëm në përputhje katër? Pra, këtu kemi int kryesor (i pavlefshëm). Kjo është vetëm duke thënë se ne nuk janë duke marrë ndonjë command line Argumentet në kryesore. Mos harroni se ne mund të themi int INT argc kllapa kryesore string argv. Pra, këtu ne vetëm themi të pavlefshme për të thënë ne janë injoruar argumente command line. Shpjegoni, në lidhje me kujtesën, pikërisht çfarë GetString në përputhje gjashtë kthimit. GetString është kthyer një bllok të memorie, një grup të karaktereve. Është me të vërtetë kthehen a treguesin e karakterit të parë. Mos harroni se një varg është një yll char. Pra, s, është një tregues për të parë karakter në çfarëdo string është se përdoruesi ka hyrë në tastierë. Dhe kjo memorie ndodh të jetë malloced, kështu që kujtesa është në grumbull. Pyetja 13. Konsideroni programin më poshtë. Pra, e gjithë ky program është duke bërë është printf-ing 1 pjesëtuar me 10. Pra, kur hartuar dhe ekzekutuar, ky program rezultatet 0.0, edhe pse 1 i ndarë nga 10 është 0.1. Pra, pse është 0.0? E pra, kjo është për shkak se e ndarjes integer. Kështu 1 është një numër i plotë, 10 është një numër i plotë. Pra, 1 i ndarë nga 10, gjithçka trajtohet si integers, dhe C, kur ne bëjmë ndarje integer, ne shkurtoj çdo pikë dhjetore. Pra, 1 i ndarë nga 10 është 0, dhe pastaj ne jemi duke u përpjekur për të shkruar se si noton, kështu zero të shtypura si një noton është 0.0. Dhe kjo është arsyeja pse ne kemi marrë 0.0. Konsideroni programin më poshtë. Tani ne jemi shtypjen 0.1. Pra, nuk ka ndarje numër i plotë, ne jemi vetëm shtypjen 0.1, por ne jemi shtypjen atë në 28 numra pas presjes dhjetore. Dhe ne kemi marrë këtë 0,1000, një bandë e tërë nga zero, 5 5 5, blah blah blah. Pra, pyetja këtu është arsyeja pse e bën atë shtypura atë, në vend që të saktësisht 0.1? Pra, arsyeja që këtu është tani lundrues pikë pasaktësi. Mos harroni se një noton është vetëm 32 bit. Pra, ne vetëm mund të përfaqësojnë një numër i caktuar i lundrues vlerave pikë me ato 32 bit. E pra nuk ka fund pafundësisht shumë vlera lundrues pikë, dhe ka pafundësisht shumë lundrues Vlerat pikë në mes të 0 dhe 1, dhe ne jemi padyshim në gjendje të paraqesin edhe më shumë vlera se kaq. Pra, ne duhet të bëjmë sakrifica për të të jenë në gjendje për të përfaqësuar vlerat më. Pra, një vlerë si 0.1, me sa duket ne nuk mund të përfaqësojë atë saktësisht. Pra, në vend të përfaqësojnë 0.1 bëjmë më të mirë ne mund të përfaqësojë këtë 0.100000 5 5 5. Dhe kjo është shumë afër, por për një shumë të aplikacioneve ju keni për t'u shqetësuar në lidhje me lundrues pikë pasaktësi, sepse ne thjesht nuk mund të përfaqësojë të gjitha pikat lundrues saktësisht. Pyetja 15. Konsideroni kodin më poshtë. Ne jemi vetëm shtypje 1 plus 1. Kështu që nuk ka mashtrim këtu. 1 plus 1 vlerësimin në 2, dhe atëherë ne jemi shtypjen se. Kjo thjesht shtyp 2. Pyetja 16. Tani ne jemi shtypjen karakter 1 plus 1 karakter. Pra, pse e bën këtë jo shtypura të njëjtën gjë? Well karakter 1 plus karakteri 1, karakteri 1 ka vlerë ASCII 49. Pra, kjo është me të vërtetë duke thënë se 49 plus 49, dhe në fund të fundit kjo do të shtypura 98. Pra, kjo nuk ka shkruar 2. Pyetja 17. Përfundimin e zbatimit i rastësishëm më poshtë në mënyrë të tillë se funksioni kthen true nëse n është i rastësishëm dhe të rreme, nëse n është edhe. Ky është një qëllim i madh për operatorin mod. Pra, kemi marrë argumenti n tonë, nëse n mod 2 është e barabartë me 1, dhe që nënkupton se n ndarë me 2 kishte një mbetur. Nëse n ndarë nga 2 kishte një mbetur, që do të thotë se n është i rastësishëm, kështu që ne kthehemi vërtetë. Else kthehemi false. Ju gjithashtu mund të keni bërë n mod 2 barabartëve zero, kthimit të rreme, të tjerët kthehen vërtetë. Konsideroni funksionin rekursive poshtë. Kështu nëse n është më pak se, ose barabarte me 1, kthehen 1, tjetër Kthimi n herë f i n minus 1. Pra, çfarë është ky funksion? E pra, kjo është vetëm funksioni faktorial. Kjo është e përfaqësuar mirë si n faktorial. Pra pyetja 19 Tani, ne duam të marrë këtë funksion gjithkund rekursive. Ne duam të bëjmë atë përsëritës. Pra, si do të bëjmë këtë? Edhe për stafin zgjidhje, dhe përsëri ka mënyra të shumta që mund të ketë bërë se, ne fillim me këtë produkt int është e barabartë me 1. Dhe të gjithë këtë për lak, ne jemi duke shkuar për t'u shumëzuar produktin në fund të fundit të përfundojë me faktoriale plotë. Pra, për int i barabartë me 2, i është më pak se ose e barabartë me N, i ++. Ju mund të pyesin se pse i barabartë me 2. E pra, mos harroni se këtu kemi të sigurohuni që rasti ynë bazë është i saktë. Kështu nëse n është më pak se ose e barabartë për 1, ne jemi vetëm duke u kthyer 1. Pra këtu, ne të fillojë në i barabartë me 2. Edhe në qoftë se i ishin 1, atëherë the-- ose nëse n ishin 1, atëherë për lak nuk do të ekzekutojë në të gjitha. Dhe kështu që ne vetëm do të Produkti kthimi, e cila është 1. Në mënyrë të ngjashme, në qoftë se n ishin asgjë më pak se 1-- nëse do të ishte 0, negative 1, whatever-- ne ende do të kthehen 1, e cila është pikërisht ajo që i version rekursive është duke bërë. Tani, nëse n është më i madh se 1, atëherë ne jemi duke shkuar për të bërë të paktën një përsëritje të këtij loop. Pra, le të thonë se n është 5, atëherë ne jemi do të bëjë herë produkt barabartë 2. Deri tani produkt është 2. Tani ne jemi duke shkuar për të bërë herë produkt barabartë 3. Tani është 6. Herë produktit barabartë 4, tani është e 24. Herë produktit barabartë 5, tani kjo është 120. Pra, atëherë në fund të fundit, ne jemi duke u kthyer 120, e cila është të saktë 5 Faktoriali. Pyetja 20. Kjo është ajo ku ju duhet të plotësoni në këtë tryezë me ndonjë algoritëm të caktuar, çdo gjë që ne kemi parë, se përshtatet këtyre drejtuar algorithmic herë këto herë asymptotic drejtuar. Pra, çfarë është një algoritmi që është omega e 1, por O i madh n? Pra, nuk mund të jetë pafundësisht shumë përgjigje këtu. Ai që ne kemi parë ndoshta më shpesh është vetëm kërko linear. Pra, në rastin më të mirë skenar, pika që ne jemi duke kërkuar për të është në fillimi i listës dhe kështu në omega e 1 hapave, gjëja e parë që të shikoni, ne vetëm të kthehen menjëherë që ne kemi gjetur pika. Në rastin më të keq, pika është në fund, ose pika nuk është në lista aspak. Pra, ne kemi për të kërkuar gjithë listën, të gjitha n elemente, dhe kjo është arsyeja pse ajo është o të n. Deri tani kjo është diçka që është dy omega e log n n, dhe O e madhe e log n n. E pra gjëja më e rëndësishme ne kemi parë këtu është të bashkohen lloj. Pra shkrihen lloj, mos harroni, është në fund të fundit Theta e n log n, ku theta është përcaktuar nëse dy omega dhe O madh janë njëjtë. Si n log n. Çfarë është diçka që është omega i N, O dhe e n katror? E pra, përsëri ka përgjigjet e shumëfishta të mundshme. Këtu ne të ndodhë të themi flluskë lloj. Futja lloj do të punojë këtu. Mos harroni se flluskë lloj ka se ku optimization, në qoftë se ju jeni në gjendje për të marrë përmes gjithë lista pa pasur nevojë për të bërë çdo këmbime, atëherë, mirë, ne mund të kthehen menjëherë se lista është renditur për të filluar me. Pra, në rastin më të mirë, kjo është vetëm omega e n. Në qoftë se kjo nuk është vetëm një e bukur renditura listë për të filluar me të, atëherë ne kemi O i n katror këmbime. Dhe në fund, ne kemi përzgjedhjes lloj për n katror, ​​si dhe omega O. madh Pyetja 21. Çfarë është numër i plotë overflow? Well përsëri, të ngjashme me herët, ne kemi vetëm finitely shumë bit për të përfaqësuar një numër të plotë, kështu që ndoshta 32 bit. Le të themi se kemi një numër të plotë të nënshkruar. Pastaj në fund të fundit të lartë Numri pozitiv ne mund të përfaqësojë është 2 deri 31 minus 1. Pra, çfarë ndodh nëse ne përpiqemi të pastaj rrisim këtë numër i plotë? E pra, ne jemi duke shkuar për të shkuar nga 2 deri në 31 minus 1, gjatë gjithë rrugës deri në negativ 2 në 31. Pra, kjo del nga shtrati numër i plotë është Kur ju mbani bën rritjen, dhe në fund të fundit nuk mund të merrni ndonjë më të larta dhe vetëm ajo përfundon të gjithë rrugën prapa rreth një vlerë negative. Po në lidhje me një tampon del nga shtrati? Pra, një tampon overflow-- mbani mend se çfarë një buffer është. Kjo është vetëm një copë e kujtesës. Diçka si një grup, është një tampon. Pra, a del nga shtrati tampon është kur ju përpiqeni për të hyrë në kujtesën përtej fund të këtij vektorit. Pra, nëse ju keni një Grup i madhësisë 5 dhe ju përpiqen për të hyrë në array kllapa 5 ose 6 ose grupim grupim 7, apo ndonjë gjë përtej fund, apo edhe ndonjë gjë kllapa below-- array negative 1-- të gjithë ata që janë përplot tampon. Ju jeni duke prekur kujtesën në mënyra të këqija. Pyetja 23. Pra, në këtë që ju nevojitet për të zbatuar strlen. Dhe ne ju them se ju mund të supozojmë s nuk do të jetë i pavlefshëm, kështu që ju nuk keni për të të bëjë ndonjë kontroll për null. Dhe ka mënyra të shumta ju mund të keni bërë këtë. Këtu kemi marrë vetëm thjeshtë. Ne fillojmë me një kundër, n. n është numëruar sa karaktere janë. Pra, ne të fillojë në 0, dhe pastaj ne iterate mbi të gjithë listën. S eshte e barabarte me 0 grupim null karakter Terminator? Mos harroni ne jemi duke kërkuar për karakteri null terminator për të përcaktuar se sa kohë string tonë është. Që do të përfundojë çdo string relevant. Pra, është s kllapa 0 barabartë në terminator pavlefshëm? Nëse nuk është, atëherë ne jemi duke shkuar për shikoni në s kllapa 1, s kllapa 2. Ne do të mbajë deri ne gjeni terminator null. Pasi ne kemi gjetur atë, atëherë n përmban Gjatësia totale e vargut, dhe ne vetëm mund të kthehen atë. Pyetja 24. Pra, kjo është ajo ku ju duhet të bëjë tregti off. Pra, një gjë është e mirë në një mënyrë, por në atë mënyrë është e keqe? Kështu që këtu, shkrihen lloj tenton të jetë më shpejt se flluskë lloji. Duke thënë that-- mirë, atje janë përgjigje të shumta këtu. Por kryesori është se flluskë lloj është omega e n për një listë të renditura. Mos harroni se tabelë që sapo pamë më herët. Pra flluskë llojet omega e n, skenari më i mirë është është në gjendje të vetëm të shkojnë më shumë se lista dikur, të përcaktojë hey kjo gjë është tashmë e të renditura, dhe kthimi. Merge lloj, pa marrë parasysh se çfarë ju bëni, është omega e log n n. Pra, për lista të renditura, flluskë lloj do të jetë më i shpejtë. Tani çfarë në lidhje me listat e lidhur? Pra, një listë e lidhur mund të rritet dhe tkurret të përshtaten sa më shumë elemente si të nevojshme. Duke thënë kështu that-- zakonisht krahasim i drejtpërdrejtë do të jetë një i lidhur lista me një grup. Pra, edhe pse mund të vargjeve të lehtë të rritet dhe tkurret të përshtaten sa më shumë elemente sipas nevojës, një listë të lidhura krahasuar me një array-- An array ka qasje të rastit. Ne mund të indeksit në çdo element të veçantë të vektorit. Pra, për një listë të lidhura, ne nuk mund të thjesht shkoni në elementin e pestë, ne duhet të kaloj nga fillimi deri sa të kemi në elementin e pestë. Dhe kjo do të na pengojë nga duke bërë diçka të tillë kërkim binar. Duke folur për kërkim binar, kërko binar ka tendencë të jetë më i shpejtë sesa kërkim linear. Duke thënë that-- kështu që, një gjë është e mundur është se ju nuk mund të bëni binar kërko në listat e lidhura, ju mund të bëni vetëm atë në vargjeve. Por ndoshta më e rëndësishmja, ju nuk mund të bëni kërkim binar në një grup që nuk është renditura. Upfront ju mund të kenë nevojë për të zgjidhur array, dhe vetëm atëherë mund të ju bëni kërkim binar. Pra, nëse një gjë e juaj nuk është e Renditur për të filluar me të, pastaj kërko linear mund të jetë më i shpejtë. Pyetja 27. Kështu që e konsiderojnë programin më poshtë, cila do të jetë në rrëshqitje tjetër. Dhe kjo është ajo ku ne jemi do të duan për të deklaruar në mënyrë eksplicite vlerat për variabla të ndryshme. Pra, le të shohim në atë. Pra, një linjë. Ne kemi int x është e barabartë me 1. Kjo është e vetmja gjë që ka ndodhur. Pra, në vijë të parë, ne e shohim në tonë Tabela, që y, a, b, dhe tmp janë të gjithë blacked jashtë. Pra, çfarë është x? Dhe ne vetëm vendosur ajo e barabartë me 1. Dhe pastaj të vijë me dy, mirë, ne shohim se y është vendosur në 2, dhe tabela tashmë është plotësuar për ne. Kështu x eshte 1 dhe y eshte 2. Tani, linja tre, ne jemi tani brenda funksionit shkëmbim. Çfarë kemi kaluar të bie në ujdi? Kemi kaluar ampersand x për a, dhe y simbol për b. Ku problemi më parë deklaroi se adresa e x është 0x10, dhe adresa e y është 0x14. Kështu a dhe b janë të barabartë tek 0x10 dhe 0x14, përkatësisht. Tani në vijën tre, çfarë janë x dhe y? E pra, asgjë nuk ka ndryshuar për x dhe y në këtë pikë. Edhe pse ata janë brenda një kuadri kryesor rafte, ata ende kanë të njëjtën Vlerat e ata kanë para. Ne nuk kemi modifikuar asnjë memorie. Kështu x eshte 1, y eshte 2. Dakord. Deri tani kemi thënë int tmp barabartë me yll a. Pra, në linjë të katër, gjithçka është e njëjtë me përjashtim të tmp. Ne nuk kemi ndryshuar ndonjë vlerat e asgjë, përveç për tmp. Ne jemi të vendosur tmp barabartë me yll a. Çfarë është yll a? E pra, një pikë për të x, pra yll a do te barabarte X, i cili eshte 1. Pra, çdo gjë është e kopjuar poshtë, dhe tmp është vendosur në 1. Tani linjë tjetër. Star a është e barabartë me yll b. Pra, duke linjës five-- mirë përsëri, gjithçka është e njëjtë me përjashtim çfarëdo yll a eshte. Çfarë është yll a? E pra, ne vetëm tha se ylli a është x. Pra, ne jemi duke ndryshuar x yllit të barabartë b. Çfarë është yll b? y. pika b të y. Pra yll b është y. Pra, ne jemi vendosjen x barabartë me y, dhe çdo gjë tjetër është e njëjtë. Pra, ne shohim në rreshtin tjetër që x është tani 2, dhe pjesa tjetër janë kopjuar vetëm poshtë. Tani në rreshtin tjetër, ylli b barabartë tmp. E pra, ne vetëm tha se ylli b është y, kështu që ne jemi ngritjen y barabartë me tmp. Çdo gjë tjetër është e njëjtë, kështu që çdo gjë merr kopjuar poshtë. Ne jemi ngritjen y barabartë me tmp, e cila është një, dhe çdo gjë tjetër është e njëjtë. Tani së fundi, linjë shtatë. Ne jemi duke u kthyer në funksion kryesor. Ne jemi pas swap ka mbaruar. Ne kemi humbur një, b, dhe tmp, por në fund të fundit ne kemi nuk janë ndryshuar asnjë vlera nga çdo gjë në këtë pikë, ne vetëm kopje x dhe y poshtë. Dhe ne shohim se x dhe y janë tani 2 dhe 1 vend 1 dhe 2. Swap ka ekzekutuar me sukses. Pyetja 28. Supozoni se ju të hasni mesazhet e gabimit më poshtë gjatë orarit të punës vitin e ardhshëm si AK apo TF. Këshillojë se si për të rregulluar secilën nga këto gabime. Referencë në mënyrë të papërcaktuar për GetString. Pse mund të shihni këtë? E pra, në qoftë se një student është duke përdorur GetString në kodin e tyre, ata kanë siç hash përfshira CS50 dot h për të përfshirë bibliotekën CS50. E pra, çfarë bëjnë ata nevojë për të rregulluar këtë gabim? Ata kanë nevojë për të bërë një lcs50 dash në command line, kur ata janë hartimin. Pra, në qoftë se ata nuk do të kalojnë lcs50 tingëllimë dash, ata janë nuk do të ketë aktuale kodin që zbaton GetString. Pyetja 29. Implicite deklaruar Funksioni bibliotekë strlen. E pra këtë tani, ata nuk kanë bërë hash duhur përfshijnë. Në këtë rast të veçantë, header fotografi ata kanë nevojë për të përfshirë është string dot h, dhe duke përfshirë string dot h, tani student-- tani përpiluesit ka qasje në deklaratat e strlen, dhe ai e di se kodin tuaj është duke përdorur strlen saktë. Pyetja 30. Më qind conversions se argumente të dhënave. Pra, çfarë është kjo? E pra mos harroni se këto qind signs-- se si ata janë të rëndësishme për printf. Pra, në printf, ne mund percent-- ne mund të shtypura diçka si përqind i backslash n. Ose ne mund të shtypura si për qind i, hapësirë, për qind i, hapësira, për qind i. Pra, për secilin nga ata shenja për qind, ne kemi nevojë të kalojë një variabël në fund të printf. Pra, nëse ne themi Paren printf për qind i backslash Paren n ngushtë, mirë, ne themi se jemi shkuar për të shkruar një numër të plotë, por atëherë ne nuk do të kalojë printf një numër i plotë që në fakt të shtypur. Kështu që këtu më shumë për qind conversions se argumentet e të dhënave? Kjo është thënë se ne kemi një bandë e tërë e përqindje, dhe ne nuk kemi variablave të mjaftueshme që në fakt të mbushur në këto përqindje. Dhe atëherë patjetër, për pyetjen 31, patjetër të humbur 40 bytes në një blloqe. Pra, ky është një gabim Valgrind. Kjo është thënë se diku në kodin tuaj, ju keni një shpërndarje që është 40 bytes mëdha kështu që ju malloced 40 bytes, dhe ju kurrë nuk e liruan atë. Më shumë gjasa që ju vetëm duhet për të gjetur disa rrjedhje kujtesës, dhe për të gjetur se ku keni nevojë për të të lirë këtë bllok të memories. Dhe pyetje 32, shkruaj invalid i madhësisë 4. Përsëri kjo është një gabim Valgrind. Kjo nuk ka të bëjë me rrjedhjet tani kujtesës. Kjo është, më e likely-- dua të them, se është një lloj i të drejtave të pavlefshme kujtesës. Dhe ka shumë të ngjarë kjo është një lloj tampon del nga shtrati. Ku ju keni një rrjet, ndoshta nje array numër i plotë, dhe le thonë se kjo është e madhësisë 5, dhe ju përpiqen për të prekur array kllapa 5. Pra, nëse ju përpiqeni për të shkruar për këtë vlera, kjo nuk është një copë e kujtesës që në fakt ju keni qasje në, dhe kështu që ju jeni do të merrni këtë gabim, duke thënë se shkruaj pavlefshme të madhësisë 4. Valgrind do të njohin që ju jeni duke u përpjekur për të prekur kujtesën papërshtatshme. Dhe kjo është ajo për quiz0. Unë jam Rob Bowden, dhe kjo është CS50.