1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Java 4] 2 00:00:03,000 --> 00:00:05,000 [David J. Malan] [Universiteti i Harvardit] 3 00:00:05,000 --> 00:00:08,000 [Kjo është CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Të gjithë të drejtë, kjo është CS50, dhe ky është fillimi i javës 4, 5 00:00:12,000 --> 00:00:16,000 dhe kjo është një nga algoritme zgjidhja slowest të jetë e mundur. 6 00:00:16,000 --> 00:00:19,000 Cili ishte ajo që ne vetëm shikuar atje? 7 00:00:19,000 --> 00:00:24,000 Kjo ishte lloj flluskë, në mënyrë madhe O (n ^ 2) + shuma, 8 00:00:24,000 --> 00:00:28,000 dhe në të vërtetë ne nuk jemi të vetmit në këtë botë për të duket të dini 9 00:00:28,000 --> 00:00:30,000 çfarë lloj flluskë është ose koha e tij drejtimin. 10 00:00:30,000 --> 00:00:33,000 Në të vërtetë, kjo ishte një intervistë me Eric Schmidt e Google 11 00:00:33,000 --> 00:00:45,000 dhe ish-senatori Barack Obama vetëm disa vite më parë. 12 00:00:45,000 --> 00:00:48,000 >> Tani, senatori, ju jeni këtu në Google, 13 00:00:48,000 --> 00:00:54,000 dhe unë doja të mendoj për presidencën si një intervistë për punë. 14 00:00:54,000 --> 00:00:58,000 Tani, është e vështirë për të marrë një punë si president, dhe ju jeni duke kaluar nëpër masa të rrepta tani. 15 00:00:58,000 --> 00:01:00,000 Është gjithashtu e vështirë për të marrë një punë në Google. 16 00:01:00,000 --> 00:01:05,000 Ne kemi pyetje dhe ne pyetje kandidatët tanë, 17 00:01:05,000 --> 00:01:10,000 dhe kjo është nga Larry Schwimmer. 18 00:01:10,000 --> 00:01:14,000 Ju djema mendoni se unë jam kidding? Kjo është e drejtë këtu. 19 00:01:14,000 --> 00:01:18,000 Cila është mënyra më efikase për të zgjidhur një milion 32-bit integers? 20 00:01:18,000 --> 00:01:21,000 [Qeshura] 21 00:01:21,000 --> 00:01:24,000 Well- 22 00:01:24,000 --> 00:01:26,000 Unë jam i keq. >> Jo, jo, jo, jo. 23 00:01:26,000 --> 00:01:34,000 Unë mendoj se lloj flluskë do të jetë mënyra e gabuar për të shkuar. 24 00:01:34,000 --> 00:01:39,000 >> Come on, i cili i tha atij këtë? 25 00:01:39,000 --> 00:01:43,000 Javën e kaluar kujtohet ne e mori një pushim nga kodi, të paktën për një ditë, 26 00:01:43,000 --> 00:01:46,000 dhe filloi duke u fokusuar në disa ide të nivelit të lartë dhe zgjidhjen e problemeve në përgjithësi 27 00:01:46,000 --> 00:01:49,000 në kontekstin e kërkimit dhe klasifikim, 28 00:01:49,000 --> 00:01:53,000 dhe ne kemi prezantuar diçka që ne nuk mu këtë emër në javën e kaluar, 29 00:01:53,000 --> 00:01:56,000 por simbol asymptotic, O Big, Big Omega, 30 00:01:56,000 --> 00:02:00,000 dhe nganjëherë Big simbol Theta, dhe këto ishin thjesht mënyra 31 00:02:00,000 --> 00:02:02,000 për të përshkruar kohën drejtimin e algoritmeve, 32 00:02:02,000 --> 00:02:05,000 sa kohë ajo merr për një algoritmi për të kandiduar. 33 00:02:05,000 --> 00:02:08,000 >> Dhe ju mund të kujtojnë se keni folur në lidhje me kohën që kalon në aspektin e madhësisë 34 00:02:08,000 --> 00:02:11,000 të dhëna, të cilat ne zakonisht e quajmë n, çfarëdo problemi mund të jetë, 35 00:02:11,000 --> 00:02:13,000 ku n është numri i njerëzve në dhomë, 36 00:02:13,000 --> 00:02:17,000 numri i faqeve në një libër telefoni, dhe kemi filluar të shkruaj gjëra jashtë 37 00:02:17,000 --> 00:02:21,000 si O (n ^ 2) ose O (n) ose O (n log n), 38 00:02:21,000 --> 00:02:24,000 dhe madje edhe kur matematikë nuk ka mjaft të punojnë jashtë në mënyrë të përkryer 39 00:02:24,000 --> 00:02:28,000 dhe ajo ishte n ² - n / 2 ose diçka si kjo 40 00:02:28,000 --> 00:02:31,000 ne do të në vend të vetëm hedhin larg disa nga termat e rendit më të ulët, 41 00:02:31,000 --> 00:02:34,000 dhe motivimi nuk është që ne të vërtetë duan një 42 00:02:34,000 --> 00:02:37,000 lloj mënyrë objektive të vlerësimit 43 00:02:37,000 --> 00:02:39,000 performanca e programeve ose kryerjen e algoritmeve 44 00:02:39,000 --> 00:02:42,000 që në fund të ditës nuk ka asgjë për të bërë, për shembull, 45 00:02:42,000 --> 00:02:45,000 me shpejtësinë e kompjuterit tuaj sot. 46 00:02:45,000 --> 00:02:47,000 >> Për shembull, në qoftë se ju të zbatuar lloj flluskë, 47 00:02:47,000 --> 00:02:50,000 ose keni zbatuar bashkojë lloj lloj ose të përzgjedhjes në kompjuterin e sotme, 48 00:02:50,000 --> 00:02:53,000 2 GHz një kompjuter, dhe ju drejtuar atë, 49 00:02:53,000 --> 00:02:56,000 dhe kjo merr disa numrin e sekondave, vitin e ardhshëm ka një 3 GHz 50 00:02:56,000 --> 00:02:59,000 ose një kompjuter 4 GHz, dhe pastaj ju mund të pretendojnë se "Wow, algoritmi im 51 00:02:59,000 --> 00:03:03,000 tani është dy herë më shpejt ", kur në realitet që nuk është padyshim rasti. 52 00:03:03,000 --> 00:03:06,000 Është vetëm hardware ka marrë të shpejtë, por kompjuteri juaj 53 00:03:06,000 --> 00:03:10,000 nuk ka, dhe kështu që ne të vërtetë duan të hedhin larg gjëra të tilla si 54 00:03:10,000 --> 00:03:13,000 multiples e 2 ose shumëfisha të 3 kur është fjala për të përshkruar 55 00:03:13,000 --> 00:03:17,000 se sa shpejt apo sa i ngadalshëm një algoritmi është dhe me të vërtetë vetëm të përqëndrohet 56 00:03:17,000 --> 00:03:20,000 on n apo ndonjë faktor të saj, 57 00:03:20,000 --> 00:03:24,000 disa fuqi të tyre si në rastin e llojeve nga java e fundit. 58 00:03:24,000 --> 00:03:27,000 Dhe kujtojnë se me ndihmën e lloj Merge 59 00:03:27,000 --> 00:03:31,000 ne kemi qenë në gjendje të bëjë shumë më mirë se lloj lloj flluskë dhe përzgjedhjes 60 00:03:31,000 --> 00:03:33,000 dhe madje edhe lloj futje. 61 00:03:33,000 --> 00:03:36,000 >> Ne mori poshtë për të n log n, dhe përsëri, 62 00:03:36,000 --> 00:03:39,000 kujtojnë se log n në përgjithësi i referohet diçkaje që rritet 63 00:03:39,000 --> 00:03:43,000 më ngadalë, atëherë n, kështu që n log n deri tani ka qenë i mirë 64 00:03:43,000 --> 00:03:45,000 sepse ajo ishte më pak se n ². 65 00:03:45,000 --> 00:03:47,000 Por për të arritur n log n me lloj Merge 66 00:03:47,000 --> 00:03:51,000 çfarë ishte embrion themelor i një ide që ne kishim për të levave 67 00:03:51,000 --> 00:03:54,000 se ne leveraged të kthehet në javë 0? 68 00:03:54,000 --> 00:03:58,000 Si e kemi trajtuar këtë problem zgjidhja cleverly me lloj Merge? 69 00:03:58,000 --> 00:04:04,000 Cili ishte çelësi pasqyrë, ndoshta? 70 00:04:04,000 --> 00:04:07,000 Çdokush në të gjitha. 71 00:04:07,000 --> 00:04:09,000 Mirë, le të marrin një hap prapa. 72 00:04:09,000 --> 00:04:11,000 Përshkruani bashkojë lloj në fjalët tuaja. 73 00:04:11,000 --> 00:04:15,000 Si e bëri atë punë? 74 00:04:15,000 --> 00:04:17,000 Mirë, ne do të kthehet në rresht 0 javë. 75 00:04:17,000 --> 00:04:19,000 Mirë, po. 76 00:04:19,000 --> 00:04:22,000 [E padëgjueshme-studenti] 77 00:04:22,000 --> 00:04:26,000 Mirë, mirë, kështu që ne ndarë rrjet të numrave në 2 copa. 78 00:04:26,000 --> 00:04:29,000 Ne renditura secilin nga këto copa, dhe pastaj ne u bashkua atyre, 79 00:04:29,000 --> 00:04:33,000 dhe ne kemi parë këtë ide para se të marrë një problem që kjo të mëdha 80 00:04:33,000 --> 00:04:36,000 dhe i shëndoshë atë në një problem që është ky i madh apo kjo e madhe. 81 00:04:36,000 --> 00:04:38,000 >> Kujtojnë shembullin librin e telefonit. 82 00:04:38,000 --> 00:04:42,000 Kujtojnë algorithm vetë-llogaritur nga javë më parë, 83 00:04:42,000 --> 00:04:45,000 kështu renditjes bashkojë ishte përmbledhur nga ky pseudokod këtu. 84 00:04:45,000 --> 00:04:48,000 Kur ju jeni të dhënë elemente n, së pari kontrolloni mendje e shëndoshë ajo ishte. 85 00:04:48,000 --> 00:04:51,000 Nëse n <2 atëherë nuk bëni asgjë në të gjitha 86 00:04:51,000 --> 00:04:55,000 sepse në qoftë se n <2 pastaj n është padyshim 0 ose 1, 87 00:04:55,000 --> 00:04:57,000 dhe kështu që nëse kjo është ose 0 ose 1 nuk ka asgjë për të zgjidhur. 88 00:04:57,000 --> 00:04:59,000 Ju jeni bërë. 89 00:04:59,000 --> 00:05:01,000 Lista juaj tashmë është renditur trivially. 90 00:05:01,000 --> 00:05:04,000 Por ndryshe qoftë se ju keni marrë 2 ose më shumë elemente të shkojnë përpara dhe të ndani ato 91 00:05:04,000 --> 00:05:06,000 në 2 gjysmave, majtas dhe djathtas. 92 00:05:06,000 --> 00:05:09,000 Lloj secili prej atyre gjysmave, dhe pastaj bashkojë gjysmave renditen. 93 00:05:09,000 --> 00:05:13,000 Por problemi këtu është se në shikim të parë kjo duket si ne jemi punting. 94 00:05:13,000 --> 00:05:17,000 Ky është një përkufizim rrethore në se në qoftë se unë kam pyetur ju për të zgjidhur këto elemente n 95 00:05:17,000 --> 00:05:22,000 dhe ju jeni duke thënë mua "Në rregull, në rregull, ne do të zgjidhim ato elemente n / 2 dhe ato n / 2," 96 00:05:22,000 --> 00:05:27,000 atëherë pyetja ime e ardhshme do të jetë "Fine, si ju zgjidhur n / 2 elemente?" 97 00:05:27,000 --> 00:05:30,000 >> Por për shkak të strukturës së këtij programi, 98 00:05:30,000 --> 00:05:33,000 sepse nuk është ky rasti bazë, në mënyrë që të flasin, 99 00:05:33,000 --> 00:05:39,000 Në këtë rast të veçantë që thotë se nëse n është 00:05:42,000 A nuk përgjigjen me të njëjtën përgjigje që rrethore. 101 00:05:42,000 --> 00:05:46,000 Ky proces, kjo cikliciteti përfundimisht do të përfundojë. 102 00:05:46,000 --> 00:05:50,000 Nëse unë ju pyes "Renditur këto elemente n", dhe ju thoni: "Fine, këto lloj n / 2," 103 00:05:50,000 --> 00:05:53,000 pastaj ju thoni, "Fine, lloj këto n / 4, n / 8, n/16" 104 00:05:53,000 --> 00:05:56,000 në fund ju do të ndani me një numër mjaft i madh 105 00:05:56,000 --> 00:05:59,000 se ju do të keni vetëm 1 element majtë, në të cilën pikë ju mund të thoni, 106 00:05:59,000 --> 00:06:02,000 "Këtu, këtu është një element i renditur të vetme." 107 00:06:02,000 --> 00:06:06,000 Pastaj madhështi e këtij algoritmi deri këtu është që të nxjerrin nga fakti 108 00:06:06,000 --> 00:06:09,000 se një herë ju keni të gjitha këto lista të renditura në mënyrë individuale, 109 00:06:09,000 --> 00:06:12,000 të gjithë nga të cilat janë të madhësisë 1, e cila duket te jetë padobishme, 110 00:06:12,000 --> 00:06:15,000 sapo ju të filloni bashkimin e tyre dhe bashkimin e tyre 111 00:06:15,000 --> 00:06:19,000 keni ndërtuar deri në fund si Rob bëri në video një listë të renditura në fund. 112 00:06:19,000 --> 00:06:22,000 >> Por kjo ide shtrihet përtej klasifikim. 113 00:06:22,000 --> 00:06:26,000 Nuk është kjo ide mishëruar në këtë program të njohur si recursion, 114 00:06:26,000 --> 00:06:29,000 Ideja ku ju jeni një program, 115 00:06:29,000 --> 00:06:32,000 dhe për të zgjidhur disa probleme që ju e quani veten, 116 00:06:32,000 --> 00:06:36,000 ose të vënë në kontekstin e gjuhëve të programimit ju jeni një funksion, 117 00:06:36,000 --> 00:06:39,000 dhe me qëllim për të zgjidhur një problem, ju funksioni quajnë veten 118 00:06:39,000 --> 00:06:42,000 përsëri dhe përsëri dhe përsëri, por ju funksioni 119 00:06:42,000 --> 00:06:44,000 nuk mund të telefononi veten pafundësisht shumë herë. 120 00:06:44,000 --> 00:06:47,000 Përfundimisht ju duhet të poshtme jashtë, kështu që të flasin, 121 00:06:47,000 --> 00:06:49,000 dhe kanë pak gjendjen e vështirë-koduar bazë që thotë se 122 00:06:49,000 --> 00:06:53,000 në këtë pikë të ndaluar duke e quajtur veten në mënyrë që i gjithë procesi 123 00:06:53,000 --> 00:06:56,000 më në fund ka në fakt ndalet. 124 00:06:56,000 --> 00:06:58,000 Çfarë e bën këtë të vërtetë do të thotë, për të recurse? 125 00:06:58,000 --> 00:07:01,000 >> Le të shohim, nëse ne mund të bëjmë një shembull të thjeshtë, me parëndësishëm, të themi, 126 00:07:01,000 --> 00:07:03,000 3 persona me mua deri këtu në skenë, në qoftë se dikush është e rehatshme. 127 00:07:03,000 --> 00:07:06,000 1, vijnë më lart, 2 dhe 3. 128 00:07:06,000 --> 00:07:09,000 Në qoftë se ju doni të vijnë 3 deri këtu. 129 00:07:09,000 --> 00:07:12,000 Nëse ju doni të qëndrojnë të drejtë tjetër për mua këtu në një linjë, mendoj se problemi në dorë 130 00:07:12,000 --> 00:07:15,000 është shumë trivially të numëruar numrin e njerëzve që janë këtu. 131 00:07:15,000 --> 00:07:18,000 Por sinqerisht, unë jam i lodhur nga të gjitha këto shembuj numërimit. 132 00:07:18,000 --> 00:07:21,000 Kjo do të marrë disa kohë, 1, 2, dhe dot, dot, dot. 133 00:07:21,000 --> 00:07:23,000 Ajo do të marrë përgjithmonë. 134 00:07:23,000 --> 00:07:25,000 Unë do të vetëm sandall këtë problem së bashku me ndihmën e-çfarë është emri juaj? 135 00:07:25,000 --> 00:07:27,000 Sara. >> Sara, të gjithë të drejtë. 136 00:07:27,000 --> 00:07:29,000 Kelly. >> Kelly dhe? 137 00:07:29,000 --> 00:07:31,000 >> Willy. >> Willy, Sara, Kelly, dhe Willy. 138 00:07:31,000 --> 00:07:34,000 Tani për tani unë kam qenë i kërkuar pyetje nga dikush 139 00:07:34,000 --> 00:07:37,000 sa njerëz janë deri në këtë fazë, dhe unë nuk kam asnjë ide. 140 00:07:37,000 --> 00:07:40,000 Kjo është një listë të gjatë me të vërtetë, dhe kështu në vend që unë jam duke shkuar për të bërë këtë mashtrim. 141 00:07:40,000 --> 00:07:43,000 Unë jam duke shkuar për të kërkuar personin tjetër për mua për të bërë më të madhe të punës, 142 00:07:43,000 --> 00:07:46,000 dhe një herë ajo është bërë bërë më të madhe të punës 143 00:07:46,000 --> 00:07:49,000 Unë jam duke shkuar për të bërë sa më pak të jetë e mundur e punës dhe vetëm të shtoni 1 144 00:07:49,000 --> 00:07:51,000 për çdo gjë e saj është përgjigje, kështu që këtu ne do të shkojmë. 145 00:07:51,000 --> 00:07:54,000 Unë kam qenë i pyetur se sa shumë njerëz janë në skenë. 146 00:07:54,000 --> 00:07:57,000 Sa njerëz janë në skenë në të majtë të ju? 147 00:07:57,000 --> 00:08:00,000 E majta prej meje? >> Mirë, por nuk mashtrojnë. 148 00:08:00,000 --> 00:08:04,000 Kjo është e mirë, kjo është e saktë, por në qoftë se ne duam të vazhdojmë këtë logjikë 149 00:08:04,000 --> 00:08:08,000 le të supozojmë që ju doni të ngjashme sandall këtë problem në të majtë prej jush, 150 00:08:08,000 --> 00:08:11,000 kështu që në vend se përgjigje të drejtpërdrejtë të shkojnë përpara dhe vetëm të kalojë dollar. 151 00:08:11,000 --> 00:08:14,000 Oh, sa njerëz janë në të majtë të mua? 152 00:08:14,000 --> 00:08:16,000 Sa njerëz janë në të majtë? 153 00:08:16,000 --> 00:08:18,000 1. 154 00:08:18,000 --> 00:08:27,000 [Qeshura] 155 00:08:27,000 --> 00:08:30,000 Mirë, kështu 0, kështu që çfarë tani Willy ka bërë 156 00:08:30,000 --> 00:08:33,000 po ju keni kthyer përgjigjen tuaj këtë drejtim duke thënë 0. 157 00:08:33,000 --> 00:08:36,000 Tani, çfarë duhet të bëni? >> 1. 158 00:08:36,000 --> 00:08:39,000 Mirë, kështu që ju jeni 1, kështu që ju thonë: "Në rregull, unë jam duke shkuar për të shtuar 1 159 00:08:39,000 --> 00:08:41,000 për çfarëdo numërimin Willy ishte, "kështu që 1 + 0. 160 00:08:41,000 --> 00:08:43,000 Ju jeni tani 1 deri përgjigjja juaj për të drejtën tani është- 161 00:08:43,000 --> 00:08:45,000 1. >> Dhe minave do të jetë 2. 162 00:08:45,000 --> 00:08:48,000 Mirë, kështu që ju jeni duke marrë përgjigjen e mëparshme 1, 163 00:08:48,000 --> 00:08:51,000 duke shtuar sasinë minimale të punës që ju doni të bëni, e cila është +1. 164 00:08:51,000 --> 00:08:55,000 Ju tani keni 2, dhe ju pastaj të dorëzojnë mua cilat vlera? 165 00:08:55,000 --> 00:08:57,000 3, Unë do të thotë, sorry, 2. 166 00:08:57,000 --> 00:08:59,000 Mirë. 167 00:08:59,000 --> 00:09:02,000 >> E pra, ne kishim 0 të majtë. 168 00:09:02,000 --> 00:09:05,000 Pastaj kemi pasur 1, dhe pastaj ne shtoni 2, 169 00:09:05,000 --> 00:09:07,000 dhe tani ju jeni dorëzimin mua numrin 2, 170 00:09:07,000 --> 00:09:10,000 dhe kështu që unë jam duke thënë, në rregull, +1, 3. 171 00:09:10,000 --> 00:09:13,000 Ka të vërtetë 3 persona duke qëndruar pranë meje në këtë fazë, 172 00:09:13,000 --> 00:09:16,000 kështu që ne mund të kemi bërë këtë shumë të qartë linear, 173 00:09:16,000 --> 00:09:19,000 shumë në mënyrë të dukshme, por çfarë nuk kemi të vërtetë? 174 00:09:19,000 --> 00:09:21,000 Ne patëm marrë një problem të madhësisë 3 fillimisht. 175 00:09:21,000 --> 00:09:24,000 Ne pastaj e thyen atë në një problem të madhësisë 2, 176 00:09:24,000 --> 00:09:27,000 pastaj një problem i madhësisë 1, dhe pastaj në fund rasti bazë 177 00:09:27,000 --> 00:09:29,000 ishte me të vërtetë, oh, nuk ka një atje, 178 00:09:29,000 --> 00:09:33,000 në të cilën pikë Willy kthye në mënyrë efektive një hard-coded përgjigja disa herë, 179 00:09:33,000 --> 00:09:36,000 dhe e dyta u bubbled pastaj, bubbled lart, bubbled deri, 180 00:09:36,000 --> 00:09:39,000 dhe pastaj duke shtuar në këtë 1 një shtesë 181 00:09:39,000 --> 00:09:41,000 ne kemi zbatuar këtë ide bazë të recursion. 182 00:09:41,000 --> 00:09:44,000 >> Tani, në këtë rast ajo nuk ka të vërtetë të zgjidhur një problem 183 00:09:44,000 --> 00:09:46,000 më efektive, atëherë ne kemi parë deri tani. 184 00:09:46,000 --> 00:09:48,000 Por mendoj rreth algoritmeve ne kemi bërë në skenë deri tani. 185 00:09:48,000 --> 00:09:51,000 Ne kemi pasur 8 copa letre në dërrasë, 186 00:09:51,000 --> 00:09:55,000 në video kur Sean ishte në kërkim për numrin 7, dhe çfarë bëri ai me të vërtetë të bëjë? 187 00:09:55,000 --> 00:09:58,000 E pra, ai nuk ka bërë asnjë lloj përçaj dhe sundo. 188 00:09:58,000 --> 00:10:01,000 Ai nuk e ka bërë asnjë lloj recursion. 189 00:10:01,000 --> 00:10:03,000 Përkundrazi ai vetëm e bëri këtë algorithm linear. 190 00:10:03,000 --> 00:10:07,000 Por kur kemi futur idenë e numrave të renditura në skenë jetojnë javën e kaluar 191 00:10:07,000 --> 00:10:09,000 atëherë kemi pasur këtë instinkt për të shkuar në mes, 192 00:10:09,000 --> 00:10:13,000 në të cilën pikë kemi pasur një listë të vogël të madhësisë 4 apo në një tjetër listë të madhësisë 4, 193 00:10:13,000 --> 00:10:17,000 dhe pastaj kemi pasur problemin e saktë të njëjta, kështu që ne kemi përsëritur, përsëritet, përsëritet. 194 00:10:17,000 --> 00:10:19,000 Me fjalë të tjera, ne recursed. 195 00:10:19,000 --> 00:10:24,000 Thank you very much për vullnetarët 3 tanë këtu për demonstrimin recursion me ne. 196 00:10:24,000 --> 00:10:28,000 >> Le të shohim nëse ne nuk mund të bëjë këtë tani betonit e një pak më shumë, 197 00:10:28,000 --> 00:10:30,000 zgjidhjen e një problemi që përsëri ne mund të bëjmë shumë lehtë, 198 00:10:30,000 --> 00:10:34,000 por ne do të përdorin atë si një hap drejt zbatimit këtë ide themelore. 199 00:10:34,000 --> 00:10:37,000 Në qoftë se unë dua të llogaritur përmbledhje e një bandë të numrave, 200 00:10:37,000 --> 00:10:39,000 për shembull, në qoftë se ju të kalojë në numrin 3, 201 00:10:39,000 --> 00:10:42,000 Unë dua të ju jap vlerën e 3 Sigma, 202 00:10:42,000 --> 00:10:46,000 kështu që shuma e 3 + 2 + 1 + 0. 203 00:10:46,000 --> 00:10:48,000 Unë dua të të marrë përsëri përgjigjen 6, 204 00:10:48,000 --> 00:10:51,000 kështu që ne do të zbatojë këtë funksion SIGMA, ky funksion përmbledhje 205 00:10:51,000 --> 00:10:54,000 që, përsëri, merr në të dhëna, dhe pastaj kthehet mbledhje 206 00:10:54,000 --> 00:10:57,000 e këtij numri të gjithë rrugën poshtë për 0. 207 00:10:57,000 --> 00:10:59,000 Ne mund të bëjmë këtë mjaft thjesht, apo jo? 208 00:10:59,000 --> 00:11:01,000 Ne mund të bëjmë këtë me një lloj të strukturës looping, 209 00:11:01,000 --> 00:11:04,000 kështu që le të shkoj përpara dhe të marrë këtë filluar. 210 00:11:04,000 --> 00:11:07,000 >> Përfshijnë stdio.h. 211 00:11:07,000 --> 00:11:09,000 Më lejoni të merrni veten në kryesore për të punuar me këtu. 212 00:11:09,000 --> 00:11:12,000 Le të ruani këtë si sigma.c. 213 00:11:12,000 --> 00:11:14,000 Atëherë unë jam duke shkuar për të shkuar në këtu, dhe unë jam duke shkuar për të deklaruar një int n, 214 00:11:14,000 --> 00:11:18,000 dhe unë jam duke shkuar për të bërë në vijim, ndërsa përdoruesi nuk bashkëpunon. 215 00:11:18,000 --> 00:11:22,000 Ndërsa përdoruesi nuk ka dhënë mua një numër pozitiv 216 00:11:22,000 --> 00:11:26,000 më lejoni të shkoj përpara dhe të nxisë ata për n = GetInt, 217 00:11:26,000 --> 00:11:28,000 dhe më lejoni t'u dhënë atyre disa udhëzime se çfarë të bëjë, 218 00:11:28,000 --> 00:11:33,000 kështu printf ("numër i plotë pozitiv lutem"). 219 00:11:33,000 --> 00:11:39,000 Vetëm diçka relativisht e thjeshtë si kjo në mënyrë që me kohë kemi goditur vijën 14 220 00:11:39,000 --> 00:11:42,000 ne tani kemi një numër i plotë pozitiv me sa duket në n. 221 00:11:42,000 --> 00:11:44,000 >> Tani le të bëjë diçka me të. 222 00:11:44,000 --> 00:11:50,000 Më lejoni të shkoj përpara dhe të llogaritin përmbledhje, kështu int shuma = SIGMA (n). 223 00:11:50,000 --> 00:11:54,000 Sigma është vetëm përmbledhje, kështu që unë jam vetëm duke e shkruar atë në mënyrë njohës. 224 00:11:54,000 --> 00:11:56,000 Ne vetëm do të thërrasë atë SIGMA atje. 225 00:11:56,000 --> 00:11:58,000 Kjo është shuma, dhe tani unë jam duke shkuar për të shtypur jashtë rezultatin, 226 00:11:58,000 --> 00:12:08,000 printf ("Shuma eshte% d \ n", shuma). 227 00:12:08,000 --> 00:12:11,000 Dhe atëherë unë do të kthehet 0 për masë të mirë. 228 00:12:11,000 --> 00:12:15,000 Ne kemi bërë gjithçka që ky program kërkon përveç pjesën interesante, 229 00:12:15,000 --> 00:12:18,000 e cila është në fakt zbatojë funksionin SIGMA. 230 00:12:18,000 --> 00:12:22,000 >> Më lejoni të shkoj këtu poshtë në fund, dhe më lejoni të deklaroj funksion SIGMA. 231 00:12:22,000 --> 00:12:26,000 Është marrë për të marrë një ndryshore që është numër i plotë i tipit, 232 00:12:26,000 --> 00:12:30,000 dhe çfarë lloji të dhënave nuk dua të kthehen me sa duket nga Sigma? 233 00:12:30,000 --> 00:12:34,000 Int, sepse unë dua që ajo të shkojë pritjet e mia on line 15. 234 00:12:34,000 --> 00:12:37,000 Këtu më lejoni të shkoj përpara dhe të zbatojnë këtë 235 00:12:37,000 --> 00:12:41,000 në një mënyrë mjaft të thjeshtë. 236 00:12:41,000 --> 00:12:45,000 >> Le të shkojnë përpara dhe të thonë se shuma int = 0, 237 00:12:45,000 --> 00:12:47,000 dhe tani unë jam duke shkuar për të shkuar të ketë një pak për lak këtu 238 00:12:47,000 --> 00:12:50,000 që do të thotë diçka si kjo, 239 00:12:50,000 --> 00:13:01,000 për (int i = 0; I <= numri; i + +) shuma + = i. 240 00:13:01,000 --> 00:13:05,000 Dhe atëherë unë jam duke shkuar për të kthyer shumën. 241 00:13:05,000 --> 00:13:07,000 Unë mund të ketë zbatuar këtë në çdo numër të mënyra. 242 00:13:07,000 --> 00:13:09,000 Unë mund të ketë përdorur një lak kohë. 243 00:13:09,000 --> 00:13:11,000 Unë mund të ketë skipped duke përdorur ndryshore shuma në qoftë se unë me të vërtetë të kërkuar për të, 244 00:13:11,000 --> 00:13:15,000 por në të shkurtër, ne vetëm kemi një funksion që në qoftë se unë nuk e kam budalla deklaron shuma është 0. 245 00:13:15,000 --> 00:13:18,000 Pastaj ai iterates nga 0 në UP përmes numrit, 246 00:13:18,000 --> 00:13:23,000 dhe në çdo përsëritje ajo shton se vlera aktuale të shumës dhe pastaj kthehet shumë. 247 00:13:23,000 --> 00:13:25,000 >> Tani, ka një optimization të vogël këtu. 248 00:13:25,000 --> 00:13:29,000 Kjo është ndoshta një hap tretur, por kështu të jetë ajo. Kjo është në rregull tani për tani. 249 00:13:29,000 --> 00:13:32,000 Ne jemi të paktën të qenë të plotë dhe do 0 të gjithë rrugën deri në. 250 00:13:32,000 --> 00:13:34,000 Jo shumë e vështirë dhe shumë e drejtpërdrejtë, 251 00:13:34,000 --> 00:13:37,000 por kjo rezulton se me funksionin Sigma kemi të njëjtën mundësi 252 00:13:37,000 --> 00:13:39,000 si ne e bëmë këtu në skenë. 253 00:13:39,000 --> 00:13:42,000 Në skenë llogaritet ne vetëm sa njerëz ishin pranë meje, 254 00:13:42,000 --> 00:13:47,000 por në qoftë se ne të kërkuar për të numëruar numrin 3 + 2 + 1 255 00:13:47,000 --> 00:13:51,000 më poshtë për të 0 ne mund ngjashme sandall në një funksion 256 00:13:51,000 --> 00:13:55,000 se unë do të në vend të përshkruar si rekursive. 257 00:13:55,000 --> 00:13:57,000 Këtu le të bëjë një mendje e shëndoshë të shpejtë të kontrolluar dhe të sigurt nuk e kam budalla. 258 00:13:57,000 --> 00:14:00,000 >> Unë e di se ka të paktën një gjë në këtë program që unë kam bërë gabim. 259 00:14:00,000 --> 00:14:04,000 Kur unë goditi të hyjë jam unë do të marrë ndonjë lloj të yelling në mua? 260 00:14:04,000 --> 00:14:06,000 Çfarë jam unë do të yelled në rreth? 261 00:14:06,000 --> 00:14:11,000 Po, kam harruar prototip, kështu që unë jam duke përdorur një funksion të quajtur sigma on line 15, 262 00:14:11,000 --> 00:14:16,000 por kjo nuk është deklaruar deri më 22 linjë, kështu që unë më mirë të shkojnë deri këtu në mënyrë proaktive 263 00:14:16,000 --> 00:14:22,000 dhe të deklarojë një prototip, dhe unë do të them int SIGMA (int numri), dhe kjo është ajo. 264 00:14:22,000 --> 00:14:24,000 Është realizuar në pjesën e poshtme. 265 00:14:24,000 --> 00:14:27,000 >> Ose në një tjetër mënyrë unë mund të zgjidhur këtë, 266 00:14:27,000 --> 00:14:30,000 Unë mund të lëvizin funksionin deri atje, e cila nuk është e keqe, 267 00:14:30,000 --> 00:14:32,000 por të paktën kur programet tuaja të fillojë të marrë shumë kohë, sinqerisht, 268 00:14:32,000 --> 00:14:35,000 Unë mendoj se ka disa vlera në gjithmonë duke pasur kryesor në krye 269 00:14:35,000 --> 00:14:38,000 kështu që ju lexuesi në mund të hapur dosjen dhe pastaj menjëherë të parë 270 00:14:38,000 --> 00:14:40,000 çfarë programi është bërë pa pasur nevojë për të kërkuar nëpërmjet saj 271 00:14:40,000 --> 00:14:42,000 kërkoni për atë funksion kryesor. 272 00:14:42,000 --> 00:14:49,000 Le të shkojë poshtë në dritaren time terminal këtu, provoni duke bërë SIGMA bëjë Sigma, 273 00:14:49,000 --> 00:14:51,000 dhe unë i dehur deri këtu shumë. 274 00:14:51,000 --> 00:14:55,000 Deklarata e nënkuptuar GetInt funksion do të thotë unë kam harruar të bëj çfarë tjetër? 275 00:14:55,000 --> 00:14:57,000 [E padëgjueshme-studenti] 276 00:14:57,000 --> 00:15:00,000 Mirë, kështu që me sa duket një gabim i përbashkët, kështu që le të vënë këtë deri këtu, 277 00:15:00,000 --> 00:15:04,000 cs50.h, dhe tani le të kthehemi në dritaren time terminal. 278 00:15:04,000 --> 00:15:08,000 >> Unë do të qartë në ekran, dhe unë do të bëjë përsëritje SIGMA. 279 00:15:08,000 --> 00:15:11,000 Kjo duket të ketë hartuar. Më lejoni tani të drejtuar SIGMA. 280 00:15:11,000 --> 00:15:15,000 Unë do të shkruani në numrin 3, dhe unë kam marrë 6, kështu që nuk është një kontroll rigoroz, 281 00:15:15,000 --> 00:15:18,000 por të paktën kjo duket të jetë duke punuar në shikim të parë, por tani le të shqyej atë larg, 282 00:15:18,000 --> 00:15:21,000 dhe le të levave të vërtetë idenë e recursion, përsëri, 283 00:15:21,000 --> 00:15:24,000 në një kontekst shumë të thjeshtë në mënyrë që në kohë disa javësh " 284 00:15:24,000 --> 00:15:27,000 kur ne fillojmë eksplorimin strukturat njohës të dhënave se vargjeve 285 00:15:27,000 --> 00:15:30,000 ne kemi një tjetër mjet në veglën me të cilin do të 286 00:15:30,000 --> 00:15:33,000 manipuluar ato struktura të dhënave si ne do të shohim. 287 00:15:33,000 --> 00:15:36,000 Kjo është qasja përsëritës, lak-bazuar qasje. 288 00:15:36,000 --> 00:15:39,000 >> Më lejoni tani në vend që të bëjë këtë. 289 00:15:39,000 --> 00:15:44,000 Më lejoni të them se në vend të kësaj përmbledhje e numrit 290 00:15:44,000 --> 00:15:48,000 më poshtë për 0 është me të vërtetë e njëjta gjë si 291 00:15:48,000 --> 00:15:53,000 Numri + SIGMA (numër - 1). 292 00:15:53,000 --> 00:15:57,000 Me fjalë të tjera, ashtu si në skenë unë punted për secilin nga njerëzit pranë meje, 293 00:15:57,000 --> 00:16:00,000 dhe ata nga ana e punting mbahen deri ne fund u ndal në Willy, 294 00:16:00,000 --> 00:16:03,000 i cili kishte për t'u kthyer një përgjigje vështirë-koduar si 0. 295 00:16:03,000 --> 00:16:07,000 Ja tani ne jemi në mënyrë të ngjashme për të punting Sigma 296 00:16:07,000 --> 00:16:10,000 funksioni njëjtë si u quajt fillimisht, por pasqyrë kyçe këtu 297 00:16:10,000 --> 00:16:12,000 është se ne nuk jemi duke bërë thirrje Sigma identike. 298 00:16:12,000 --> 00:16:14,000 Ne nuk jemi duke kaluar n. 299 00:16:14,000 --> 00:16:17,000 Ne jemi të qartë duke kaluar në numër - 1, 300 00:16:17,000 --> 00:16:20,000 kështu një problem pak më e vogël, problemi pak më e vogël. 301 00:16:20,000 --> 00:16:23,000 >> Për fat të keq, kjo nuk është mjaft e një zgjidhje ende, dhe para se ne të rregullojmë 302 00:16:23,000 --> 00:16:26,000 çfarë mund të jetë hedhur jashtë si të dukshme në disa prej jush 303 00:16:26,000 --> 00:16:28,000 më lejoni të shkoj përpara dhe të bëjë përsëritje. 304 00:16:28,000 --> 00:16:30,000 Kjo duket të përpilojë rregull. 305 00:16:30,000 --> 00:16:32,000 Më lejoni përsëritje Sigma me 6. 306 00:16:32,000 --> 00:16:37,000 Uh, më lejoni përsëritje Sigma me 6. 307 00:16:37,000 --> 00:16:42,000 Ne kemi parë këtë më parë, edhe pse koha e kaluar si edhe aksidentalisht. 308 00:16:42,000 --> 00:16:48,000 Pse nuk kam marrë këtë faj fshehtë segmentimit? Po. 309 00:16:48,000 --> 00:16:50,000 [E padëgjueshme-studenti] 310 00:16:50,000 --> 00:16:53,000 Nuk ka asnjë rast bazë, dhe më konkretisht, çfarë ka ndodhur ndoshta? 311 00:16:53,000 --> 00:16:58,000 Kjo është një simptomë e asaj sjellje? 312 00:16:58,000 --> 00:17:00,000 Thuaj atë pak louder. 313 00:17:00,000 --> 00:17:02,000 [E padëgjueshme-studenti] 314 00:17:02,000 --> 00:17:05,000 Kjo është një loop pafund në mënyrë efektive, dhe problemi me sythe pafund 315 00:17:05,000 --> 00:17:08,000 kur ato përfshijnë recursion në këtë rast, një funksion që e quan veten, 316 00:17:08,000 --> 00:17:10,000 çfarë ndodh çdo herë që të thërrasë një funksion? 317 00:17:10,000 --> 00:17:13,000 E pra, mendoj se mbrapa se si kemi hedhur jashtë kujtesës në një kompjuter. 318 00:17:13,000 --> 00:17:16,000 Ne thamë se nuk është kjo copë e kujtesës quajtur stack që është në fund, 319 00:17:16,000 --> 00:17:19,000 dhe çdo herë që të thërrasë një funksion memorie pak më merr vënë 320 00:17:19,000 --> 00:17:24,000 në këtë turrë të ashtuquajturës përmban variablat lokale që funksionojnë ose parametrat, 321 00:17:24,000 --> 00:17:27,000 kështu që nëse SIGMA SIGMA SIGMA thirrje thirrje thirrje SIGMA 322 00:17:27,000 --> 00:17:29,000  Sigma quan ku ka marrë fund kjo histori? 323 00:17:29,000 --> 00:17:31,000 >> E pra, ajo përfundimisht overruns shuma totale 324 00:17:31,000 --> 00:17:33,000 e kujtesës që ju keni në dispozicion në kompjuterin tuaj. 325 00:17:33,000 --> 00:17:37,000 Ju muar segmentin që ju jeni menduar për të qëndruar brenda, 326 00:17:37,000 --> 00:17:40,000 dhe ju merrni këtë fajin segmentimit, core hedhur, 327 00:17:40,000 --> 00:17:43,000 dhe çfarë thelbi hedhur të thotë është se unë tani kam një skedar të quajtur thelbësore 328 00:17:43,000 --> 00:17:46,000 cila është një file që përmban zero dhe ato 329 00:17:46,000 --> 00:17:49,000 që në fakt në të ardhmen do të jetë e dobishme diagnostikuese. 330 00:17:49,000 --> 00:17:52,000 Nëse kjo nuk është e qartë për ju se ku bug juaj është 331 00:17:52,000 --> 00:17:54,000 ju mund të bëjë në fakt një grimë e analizave mjeko-ligjore, në mënyrë që të flasin, 332 00:17:54,000 --> 00:17:58,000 në këtë skedar hale bazë, e cila, përsëri, është vetëm një bandë e tërë e zero dhe ato 333 00:17:58,000 --> 00:18:02,000 që në thelb paraqet gjendjen e programit tuaj në kujtesë 334 00:18:02,000 --> 00:18:05,000 momenti ai u rrëzua në këtë mënyrë. 335 00:18:05,000 --> 00:18:11,000 >> Fix këtu është se ne nuk mund të kthehen vetëm verbërisht Sigma, 336 00:18:11,000 --> 00:18:14,000 numri + sigma një problem pak më të vogël. 337 00:18:14,000 --> 00:18:16,000 Ne duhet të ketë disa lloj e rastit bazë këtu, 338 00:18:16,000 --> 00:18:19,000 dhe çfarë duhet të rastit bazë ndoshta do të jetë? 339 00:18:19,000 --> 00:18:22,000 [E padëgjueshme-studenti] 340 00:18:22,000 --> 00:18:25,000 Mirë, për sa kohë që numri është pozitive që ne duhet të vërtetë të kthehet kjo, 341 00:18:25,000 --> 00:18:29,000 ose të vënë një tjetër mënyrë, nëse numri është, të themi, <= 0 për 342 00:18:29,000 --> 00:18:32,000 ju e dini se çfarë, unë do të shkoj përpara dhe të kthehen 0, 343 00:18:32,000 --> 00:18:36,000 shumë si Willy bëri, dhe tjetër, unë jam duke shkuar për të shkuar përpara 344 00:18:36,000 --> 00:18:41,000 dhe të kthehet këtë, kështu që nuk është se shumë më e shkurtër 345 00:18:41,000 --> 00:18:44,000 se versioni përsëritës që ne whipped up e parë duke përdorur një për lak, 346 00:18:44,000 --> 00:18:48,000 por vëreni se ekziston kjo lloj hijeshi ndaj saj. 347 00:18:48,000 --> 00:18:51,000 Në vend që të kthehen disa numrin dhe kryerjen e të gjitha matematikë këtë 348 00:18:51,000 --> 00:18:54,000 dhe duke shtuar gjëra me variablat lokale 349 00:18:54,000 --> 00:18:57,000 ju jeni në vend duke thënë: "Mirë, në qoftë se ky është një problem i super i lehtë, 350 00:18:57,000 --> 00:19:01,000 si numri është <0, më lejoni të kthehen menjëherë 0 ". 351 00:19:01,000 --> 00:19:03,000 >> Ne nuk do të shqetësojë numrat negative mbështetëse, 352 00:19:03,000 --> 00:19:05,000 kështu që unë jam duke shkuar për kodin vështirë vlerën e 0. 353 00:19:05,000 --> 00:19:08,000 Por ndryshe, për të zbatuar këtë ide të mbledhur 354 00:19:08,000 --> 00:19:11,000 të gjitha këto së bashku numrat që ju mund të në mënyrë efektive të marrë një pickim të vogël 355 00:19:11,000 --> 00:19:14,000 nga e problemit, ashtu si ne e bëmë këtu në skenë, 356 00:19:14,000 --> 00:19:18,000 pastaj sandall pjesa tjetër e problemit tek personi tjetër, 357 00:19:18,000 --> 00:19:20,000 por në këtë rast personi tjetër është vetë. 358 00:19:20,000 --> 00:19:22,000 Kjo është një funksion të quajtur identike. 359 00:19:22,000 --> 00:19:25,000 Vetëm të kalojë një problem të vogël dhe më të vogla dhe të vogla çdo kohë, 360 00:19:25,000 --> 00:19:28,000 dhe edhe pse ne nuk e kemi formalizuar gjëra mjaft në kodin këtu 361 00:19:28,000 --> 00:19:33,000 kjo është pikërisht ajo që po ndodhte në javën 0 me librin e telefonit. 362 00:19:33,000 --> 00:19:36,000 Kjo është pikërisht ajo që po ndodhte në javët e fundit me Sean 363 00:19:36,000 --> 00:19:39,000 dhe me demonstratat tona të kërkoni për numrat. 364 00:19:39,000 --> 00:19:42,000 Është marrë një problem dhe ndarë atë përsëri dhe përsëri. 365 00:19:42,000 --> 00:19:44,000 >> Me fjalë të tjera, ka një mënyrë tani e përkthyer 366 00:19:44,000 --> 00:19:47,000 ky konstrukt reale botë, ky konstrukt të nivelit të lartë 367 00:19:47,000 --> 00:19:51,000 i përça dhe sundo dhe duke bërë diçka përsëri dhe përsëri 368 00:19:51,000 --> 00:19:56,000 në kodin, kështu që kjo është diçka që ne do të shohim sërish me kalimin e kohës. 369 00:19:56,000 --> 00:20:00,000 Tani, si një mënjanë, në qoftë se ju jeni e re në recursion ju duhet të paktën të kuptojnë tani 370 00:20:00,000 --> 00:20:02,000 pse kjo është qesharake. 371 00:20:02,000 --> 00:20:05,000 Unë jam duke shkuar për të shkuar në google.com, 372 00:20:05,000 --> 00:20:17,000 dhe unë jam duke shkuar për të kërkuar për disa këshilla dhe truket për recursion, të hyjë. 373 00:20:17,000 --> 00:20:21,000 Tregoj personin tjetër për ju, nëse ata nuk ishin të qeshur vetëm tani. 374 00:20:21,000 --> 00:20:23,000 Did you mean recursion? 375 00:20:23,000 --> 00:20:25,000 Did you mean-ah, atje ne do të shkojmë. 376 00:20:25,000 --> 00:20:28,000 Mirë, tani që është pjesa tjetër e të gjithëve. 377 00:20:28,000 --> 00:20:30,000 Pak vezë të Pashkëve ngulitur diku atje në Google. 378 00:20:30,000 --> 00:20:33,000 Si një mënjanë, një nga lidhjet ne kemi vënë në faqen e internetit të kursit të 379 00:20:33,000 --> 00:20:36,000 për sot është vetëm ky rrjet e algoritme zgjidhja ndryshme, 380 00:20:36,000 --> 00:20:39,000 disa prej të cilave kemi shikuar në javën e kaluar, por ajo që është e bukur në lidhje me këtë vizualizimit 381 00:20:39,000 --> 00:20:43,000 si ju të përpiqet të përfundojë mendjen tuaj rreth gjërave të ndryshme që lidhen me algoritme 382 00:20:43,000 --> 00:20:46,000 dini se ju mund shumë lehtë të filloni tani me lloje të ndryshme të inputeve. 383 00:20:46,000 --> 00:20:50,000 Inputeve të gjitha përmbyset, inputet renditura më së shumti, të inputeve të rastit dhe kështu me radhë. 384 00:20:50,000 --> 00:20:53,000 Si ju përpiqeni për të, përsëri, dallojnë këto gjëra në mendjen tuaj 385 00:20:53,000 --> 00:20:57,000 kuptojnë se kjo URL në faqen e internetit të kursit mbi faqen e leksione 386 00:20:57,000 --> 00:21:00,000 mund të ju ndihmojë arsyeja nëpër disa nga ato. 387 00:21:00,000 --> 00:21:05,000 >> Sot ne të merrni në fund të zgjidhur këtë problem nga një kohë prapa, 388 00:21:05,000 --> 00:21:08,000 e cila ishte se ky funksion swap thjesht nuk keni punuar, 389 00:21:08,000 --> 00:21:12,000 dhe çfarë ishte problemi themelor me këtë shkëmbim funksion, 390 00:21:12,000 --> 00:21:15,000 qëllimi i së cilës ishte, përsëri, për të shkëmbyer një vlerë këtu dhe këtu 391 00:21:15,000 --> 00:21:17,000 tillë që të ndodhë kjo? 392 00:21:17,000 --> 00:21:20,000 Kjo nuk ka të vërtetë punojnë. Pse? 393 00:21:20,000 --> 00:21:22,000 Po. 394 00:21:22,000 --> 00:21:28,000 [E padëgjueshme-studenti] 395 00:21:28,000 --> 00:21:31,000 Pikërisht, shpjegimi për këtë bugginess 396 00:21:31,000 --> 00:21:34,000 thjesht ishte sepse kur ju telefononi funksionet në C 397 00:21:34,000 --> 00:21:38,000 dhe ato funksione të marrë argumente, si a dhe b këtu, 398 00:21:38,000 --> 00:21:42,000 ju jeni duke kaluar në kopje të çfarëdo vlerë që ju jeni të siguruar në atë funksion. 399 00:21:42,000 --> 00:21:46,000 Ju nuk janë duke ofruar vlera origjinale veten, 400 00:21:46,000 --> 00:21:49,000 kështu që ne pamë këtë në kontekstin e buggyc, 401 00:21:49,000 --> 00:21:52,000 buggy3.c, i cili dukej një diçka të vogël si kjo. 402 00:21:52,000 --> 00:21:57,000 >> Kujtojnë se ne kishim x dhe y nisur me 1 dhe 2, përkatësisht. 403 00:21:57,000 --> 00:21:59,000 Ne pastaj të shtypura atë që ata ishin. 404 00:21:59,000 --> 00:22:03,000 Unë pastaj pretendoi se unë u shkëmbejnë ato me thirrjen shkëmbim të x, y. 405 00:22:03,000 --> 00:22:06,000 Por problemi ishte se shkëmbejnë punuar, 406 00:22:06,000 --> 00:22:10,000 por vetëm në kuadër të swap-it të funksionojnë vetë. 407 00:22:10,000 --> 00:22:13,000 Sa më shpejt që ne e goditi linjë 40 atyre vlerave swapped 408 00:22:13,000 --> 00:22:16,000 u hodhën larg, dhe kështu asgjë 409 00:22:16,000 --> 00:22:21,000 në funksion të origjinal kryesor është ndryshuar në të vërtetë në të gjitha, 410 00:22:21,000 --> 00:22:26,000 kështu që nëse ju mendoni atëherë se çfarë kjo duket si në aspektin e kujtesës sonë 411 00:22:26,000 --> 00:22:29,000 nëse kjo majtë anë e bordit përfaqëson- 412 00:22:29,000 --> 00:22:33,000 dhe unë do të bëj çmos për të gjithë për të parë këtë, nëse kjo majtë anë e bordit 413 00:22:33,000 --> 00:22:37,000 përfaqëson, të themi, RAM tuaj dhe rafte do të rritet në dorë këtë mënyrë, 414 00:22:37,000 --> 00:22:43,000 dhe ne e quajmë si një funksion kryesor, dhe kryesore ka 2 variabla lokale, x dhe y, 415 00:22:43,000 --> 00:22:48,000 le të përshkruajnë ato si x këtu, dhe le të përshkruajnë këto si y këtu, 416 00:22:48,000 --> 00:22:55,000 dhe le të vënë në vlerat 1 dhe 2, kështu që kjo këtu është kryesore, 417 00:22:55,000 --> 00:22:58,000 dhe kur funksioni kryesor i quan shkëmbim të sistemit operativ 418 00:22:58,000 --> 00:23:02,000 jep funksioni Swap brez i kositur e vet të kujtesës në rafte, 419 00:23:02,000 --> 00:23:04,000 kornizë e vet në rafte, në mënyrë që të flasin. 420 00:23:04,000 --> 00:23:08,000 Ajo gjithashtu ndan 32 bit për këto ints. 421 00:23:08,000 --> 00:23:11,000 Kjo ndodh për të thirrur ata a dhe b, por kjo është krejtësisht arbitrare. 422 00:23:11,000 --> 00:23:13,000 Ajo mund të ketë thirri çfarëdo që dëshiron, por çfarë ndodh kur kryesore 423 00:23:13,000 --> 00:23:19,000 thirrjet swap-i është ai merr këtë 1, vë një kopje atje, vë një kopje atje. 424 00:23:19,000 --> 00:23:23,000 >> Ka 1 ndryshueshme tjera lokale në shkëmbim, pse, quhet ajo? Tmp. >> 425 00:23:23,000 --> 00:23:27,000 Tmp, kështu që më lejoni t'ju jap vetes një tjetër 32 bit këtu, 426 00:23:27,000 --> 00:23:29,000 dhe çfarë nuk kam bërë në këtë funksion? 427 00:23:29,000 --> 00:23:34,000 Unë i thashë tmp int merr, kështu që një ka 1, kështu që unë e bëri këtë, kur ne kemi luajtur kaluar me këtë shembull. 428 00:23:34,000 --> 00:23:39,000 Pastaj një merr b, kështu që është 2 b, kështu që tani kjo bëhet 2, 429 00:23:39,000 --> 00:23:42,000 dhe tani merr temp b, kështu temp është 1, 430 00:23:42,000 --> 00:23:44,000 kështu që tani b bëhet kjo. 431 00:23:44,000 --> 00:23:46,000 Kjo është e madhe. Ajo ka punuar. 432 00:23:46,000 --> 00:23:49,000 Por pastaj sa më shpejt të kthimit funksion 433 00:23:49,000 --> 00:23:52,000 kujtesës swap efektivisht zhduket në mënyrë që ajo të mund të ripërdoren 434 00:23:52,000 --> 00:23:58,000 disa nga funksioni tjetër në të ardhmen, dhe kryesore është padyshim plotësisht e pandryshuar. 435 00:23:58,000 --> 00:24:00,000 Ne kemi nevojë për një mënyrë për të krejtësisht të zgjidhur këtë problem, 436 00:24:00,000 --> 00:24:03,000 dhe sot ne do të kemi më në fund një mënyrë për të bërë këtë të cilën 437 00:24:03,000 --> 00:24:06,000 ne mund të vendosë diçka që quhet një akrep. 438 00:24:06,000 --> 00:24:09,000 Ajo rezulton se ne mund të zgjidhur këtë problem 439 00:24:09,000 --> 00:24:12,000 jo duke kaluar në formë të x dhe y 440 00:24:12,000 --> 00:24:18,000 por në vend duke kaluar në atë, a mendoni se, në funksion swap? 441 00:24:18,000 --> 00:24:20,000 Po, çka në lidhje me adresën e? 442 00:24:20,000 --> 00:24:22,000 Ne nuk kemi biseduar me të vërtetë në lidhje me adresat në detaje shumë, 443 00:24:22,000 --> 00:24:25,000 por në qoftë se kjo dërrasë e zezë paraqet kujtesën e kompjuterit tim 444 00:24:25,000 --> 00:24:28,000 ne me siguri mund të fillojnë të numërojnë bytes në RAM e mia 445 00:24:28,000 --> 00:24:31,000 dhe thonë se kjo është # 1 byte, kjo është bajt # 2, # 3 bajt, 446 00:24:31,000 --> 00:24:35,000 bajt # 4, # bajt ... 2 miliard nëse kam 2 gigabajt RAM, 447 00:24:35,000 --> 00:24:38,000 kështu që ne me siguri mund të dalë me disa skemë arbitrare numeracionit 448 00:24:38,000 --> 00:24:41,000 për të gjitha bytes individuale në kujtesë të kompjuterit tim. 449 00:24:41,000 --> 00:24:43,000 >> Çka nëse në vend kur unë e quaj swap 450 00:24:43,000 --> 00:24:47,000 në vend se të kalojë në kopje të x dhe y 451 00:24:47,000 --> 00:24:51,000 pse nuk kam vend të kalojë në adresën e x këtu, 452 00:24:51,000 --> 00:24:55,000 adresa e y këtu, në thelb adresën postare 453 00:24:55,000 --> 00:24:59,000 nga x dhe y, sepse atëherë bie në ujdi, në qoftë se ai është i informuar 454 00:24:59,000 --> 00:25:01,000 e adresës në kujtim të x dhe y, 455 00:25:01,000 --> 00:25:04,000 pastaj swap, në qoftë se ne të trajnuar atë pak, 456 00:25:04,000 --> 00:25:07,000 ai potencialisht mund të përzënë në atë adresë, kështu që të flasin, 457 00:25:07,000 --> 00:25:11,000 x, dhe për të ndryshuar numrin e atje, pastaj me makinë në adresën e y, 458 00:25:11,000 --> 00:25:16,000 ndryshojë numrin atje, edhe kur në të vërtetë nuk bëhet kopje e atyre vlerave veten, 459 00:25:16,000 --> 00:25:19,000 kështu që edhe pse kemi biseduar në lidhje me këtë si memorie kryesore e 460 00:25:19,000 --> 00:25:23,000 dhe kujtesës Kete swap si të fuqishëm dhe një pjesë e rrezikshme e C 461 00:25:23,000 --> 00:25:28,000 është se çdo funksion mund të prekë kujtesën kudo në kompjuter, 462 00:25:28,000 --> 00:25:32,000 dhe kjo është e fuqishme në atë që ju mund të bëni shumë gjëra të dashuroj me programe kompjuterike në C. 463 00:25:32,000 --> 00:25:36,000 Kjo është e rrezikshme, sepse ju gjithashtu mund të vidhos deri shumë lehtë. 464 00:25:36,000 --> 00:25:39,000 Në fakt, një nga mënyrat më të zakonshme për programet këto ditë për t'u shfrytëzuar 465 00:25:39,000 --> 00:25:42,000 ende është për të mos një programues për të realizuar 466 00:25:42,000 --> 00:25:45,000 se ai ose ajo është e lejuar një të dhënave 467 00:25:45,000 --> 00:25:49,000 të jetë e shkruar në një vend në kujtesën që nuk ishte menduar. 468 00:25:49,000 --> 00:25:51,000 >> Për shembull, ai ose ajo deklaron një rrjet të madhësisë 10 469 00:25:51,000 --> 00:25:56,000 por pastaj përpiqet për të vënë aksidentalisht 11 bytes në atë grup të kujtesës, 470 00:25:56,000 --> 00:25:59,000 dhe ju filloni duke prekur pjesët e kujtesës që nuk janë më të vlefshme. 471 00:25:59,000 --> 00:26:02,000 Vetëm për kontekstuale këtë, disa nga ju mund të dini se 472 00:26:02,000 --> 00:26:06,000 software shpesh ju bën për numrat serik ose çelësat e regjistrimit, 473 00:26:06,000 --> 00:26:08,000 Photoshop dhe Word dhe programet e pëlqejnë këtë. 474 00:26:08,000 --> 00:26:12,000 Ekzistojnë të çara, si disa nga ju e dini, online ku ju mund të kandidojë një program pak, 475 00:26:12,000 --> 00:26:14,000 dhe voila, asnjë kërkesë më shumë për një numër serial. 476 00:26:14,000 --> 00:26:16,000 Si është se duke punuar? 477 00:26:16,000 --> 00:26:21,000 Në shumë raste këto gjëra janë thjesht të gjetur në kompjuter 478 00:26:21,000 --> 00:26:24,000 segmente tekst në zero aktuale e kompjuterit dhe atyre 479 00:26:24,000 --> 00:26:28,000 ku është se funksioni ku numri serik është kërkuar, 480 00:26:28,000 --> 00:26:31,000 dhe ju të prishësh atë hapësirë, ose kur programi është i rrjedhshëm 481 00:26:31,000 --> 00:26:33,000 ju mund të kuptoj se ku çelësi është ruajtur në të vërtetë 482 00:26:33,000 --> 00:26:37,000 duke përdorur diçka që quhet Rregullues, dhe ju mund të goditur në këtë mënyrë software. 483 00:26:37,000 --> 00:26:40,000 Kjo nuk do të thotë se ky është objektivi ynë për të dy ditëve të ardhshme, 484 00:26:40,000 --> 00:26:42,000 por ajo ka shumë e vërtetë të botës degëzime. 485 00:26:42,000 --> 00:26:45,000 Se një ndodh të përfshijë vjedhjen e software, 486 00:26:45,000 --> 00:26:47,000 por ka edhe kompromisi i makinave të tëra. 487 00:26:47,000 --> 00:26:50,000 >> Në fakt, kur faqet e internetit këto ditë janë shfrytëzuar 488 00:26:50,000 --> 00:26:53,000 dhe komprometuar dhe të dhënat është zbuluar dhe fjalëkalimet janë vjedhur 489 00:26:53,000 --> 00:26:58,000 kjo shpesh lidhet me menaxhimin e dobët të kujtesës së dikujt, 490 00:26:58,000 --> 00:27:01,000 ose, në rastin e të dhënave, dështimi tek parashikojnë 491 00:27:01,000 --> 00:27:03,000 input kundërshtuese, kështu që më shumë se në javët që do të vijnë, 492 00:27:03,000 --> 00:27:07,000 por tani për tani vetëm një vrojtim vjedhës i lloj e dëmit që ju mund të bëni 493 00:27:07,000 --> 00:27:11,000 duke mos kuptuar mjaft se si gjërat punojnë nën kapuç. 494 00:27:11,000 --> 00:27:14,000 Le të shkojë në lidhje me të kuptuarit se pse kjo është e thyer 495 00:27:14,000 --> 00:27:17,000 me një mjet që do të bëhet gjithnjë e më e dobishme 496 00:27:17,000 --> 00:27:19,000 si programet tona të merrni më shumë komplekse. 497 00:27:19,000 --> 00:27:21,000 Deri tani, kur ju keni pasur një bug në programin tuaj 498 00:27:21,000 --> 00:27:23,000 si keni shkuar për debugging atë? 499 00:27:23,000 --> 00:27:25,000 Cilat kanë qenë teknikat tuaja deri më tani, qoftë mësohet nga TF tuaj 500 00:27:25,000 --> 00:27:27,000 ose thjesht vetë-mësohet? 501 00:27:27,000 --> 00:27:29,000 [Student] printf. 502 00:27:29,000 --> 00:27:31,000 Printf, kështu printf ka qenë ndoshta miku juaj në se në qoftë se ju doni të shihni 503 00:27:31,000 --> 00:27:33,000 çfarë po ndodh në brendësi të programit tuaj 504 00:27:33,000 --> 00:27:36,000 ju vetëm të vënë printf këtu, printf këtu, printf këtu. 505 00:27:36,000 --> 00:27:38,000 Pastaj ju drejtuar atë, dhe ju merrni një bandë e tërë e gjëra në ekran 506 00:27:38,000 --> 00:27:43,000 që ju mund të përdorni për të nxjerr një përfundim se çfarë është, atëherë vërtetë do të gabuar në programin tuaj. 507 00:27:43,000 --> 00:27:45,000 >> Printf tenton të jetë një gjë shumë e fuqishme, 508 00:27:45,000 --> 00:27:47,000 por kjo është një proces shumë manual. 509 00:27:47,000 --> 00:27:49,000 Ju keni për të vënë një printf këtu, një printf këtu, 510 00:27:49,000 --> 00:27:51,000 dhe në qoftë se keni vënë atë në brendësi të një lak që ju mund të merrni 100 linja 511 00:27:51,000 --> 00:27:53,000 e prodhimit që atëherë ju duhet të shosh përmes. 512 00:27:53,000 --> 00:27:58,000 Kjo nuk është një mekanizëm shumë përdorues-miqësor apo për programe interaktive debugging, 513 00:27:58,000 --> 00:28:00,000 por fatmirësisht ekziston alternativa. 514 00:28:00,000 --> 00:28:03,000 Ka një program, për shembull, i quajtur GDB, Debugger GNU, 515 00:28:03,000 --> 00:28:06,000 e cila është një misterioze pak në atë se si ta përdorni atë. 516 00:28:06,000 --> 00:28:08,000 Është një kompleks pak, por sinqerisht, 517 00:28:08,000 --> 00:28:11,000 kjo është një nga ato gjëra ku në qoftë se ju vendosni në këtë javë dhe të ardhshëm 518 00:28:11,000 --> 00:28:14,000 orë shtesë për të kuptuar diçka si gdb 519 00:28:14,000 --> 00:28:18,000 ajo do të ju kursejnë ndoshta dhjetëra orë në afat të gjatë, 520 00:28:18,000 --> 00:28:21,000 Pra, me këtë, më lejoni t'ju jap një ngacmues të asaj se si funksionon kjo gjë. 521 00:28:21,000 --> 00:28:23,000 >> Unë jam në dritaren time terminal. 522 00:28:23,000 --> 00:28:26,000 Më lejoni të shkojnë përpara dhe të hartojnë këtë program, buggy3. 523 00:28:26,000 --> 00:28:28,000 Kjo është tashmë deri në datën. 524 00:28:28,000 --> 00:28:31,000 Më lejoni të drejtuar atë ashtu si ne e bëmë një prapa kohë, dhe në të vërtetë, ajo është e thyer. 525 00:28:31,000 --> 00:28:34,000 Por pse është kjo? Ndoshta unë dehur funksionin swap. 526 00:28:34,000 --> 00:28:37,000 Ndoshta ajo është a dhe b. Unë nuk jam mjaft i lëvizur rreth tyre të saktë. 527 00:28:37,000 --> 00:28:39,000 Më lejoni të shkojnë përpara dhe të bëjë këtë. 528 00:28:39,000 --> 00:28:43,000 Në vend se vetëm të drejtuar buggy3 lejoni të drejtuar këtë vend GDB program, 529 00:28:43,000 --> 00:28:48,000 dhe unë jam duke shkuar për të treguar atë për të kandiduar buggy3, 530 00:28:48,000 --> 00:28:52,000 dhe unë jam duke shkuar për të përfshirë një argument command line,-TUI, 531 00:28:52,000 --> 00:28:55,000 dhe ne do të vënë këtë në të ardhmen probleme në spekulim për t'i kujtuar. 532 00:28:55,000 --> 00:28:57,000 Dhe tani kjo ndërfaqe të zezë dhe të bardhë popped up se, përsëri, 533 00:28:57,000 --> 00:28:59,000 është pak më e madhe në fillim, sepse nuk është e gjitha kjo 534 00:28:59,000 --> 00:29:02,000 Informacioni garanci poshtë këtu, por të paktën ka diçka të njohur. 535 00:29:02,000 --> 00:29:04,000 Në krye të dritares është kodi im aktuale, 536 00:29:04,000 --> 00:29:08,000 dhe në qoftë se unë lëviz deri këtu më lejoni të shkoni në krye të dosjes sime, 537 00:29:08,000 --> 00:29:11,000 dhe në të vërtetë, nuk ka buggy3.c, dhe njoftim në fund të kësaj dritare 538 00:29:11,000 --> 00:29:13,000 Unë kam këtë Prompt GDB. 539 00:29:13,000 --> 00:29:16,000 >> Kjo nuk është njëjtë si prompt time normale John Harvard. 540 00:29:16,000 --> 00:29:19,000 Kjo është një shpejtë që do të më lejoni të kontrolluar GDB. 541 00:29:19,000 --> 00:29:21,000 Gdb është një korrigjuesin. 542 00:29:21,000 --> 00:29:24,000 Një Rregullues është një program që ju lejon të ecin nëpër 543 00:29:24,000 --> 00:29:27,000 Ekzekutimi i linjës tuaj të programit duke rresht pas rreshti, 544 00:29:27,000 --> 00:29:30,000 bashku mënyrë duke bërë çdo gjë që ju dëshironi të programit, 545 00:29:30,000 --> 00:29:33,000 edhe funksionet e quajtur, ose në kërkim, më e rëndësishmja, 546 00:29:33,000 --> 00:29:35,000 në vlerat e ndryshueshme të ndryshme së. 547 00:29:35,000 --> 00:29:37,000 Le të shkojnë përpara dhe të bëjë këtë. 548 00:29:37,000 --> 00:29:40,000 Unë jam duke shkuar për të shkuar përpara dhe të shkruani në afat të shpejtë në GDB-së, 549 00:29:40,000 --> 00:29:43,000 kështu njoftim në pjesën e poshtme të majtë të ekranit kam shtypur të kandiduar, 550 00:29:43,000 --> 00:29:45,000 dhe unë kam goditur të hyjë, dhe çfarë bëri që të bëni? 551 00:29:45,000 --> 00:29:50,000 Është fjalë për fjalë u zhvillua programin tim, por unë në fakt nuk shoh shumë të shkojnë në këtu 552 00:29:50,000 --> 00:29:55,000 sepse unë nuk kam fakt tha Rregullues 553 00:29:55,000 --> 00:29:57,000 për pauzë në një moment të veçantë në kohë. 554 00:29:57,000 --> 00:29:59,000 Vetëm shtypni kandidojë shkon programin. 555 00:29:59,000 --> 00:30:01,000 Unë nuk shoh asgjë të vërtetë. Unë nuk mund ta manipulojë atë. 556 00:30:01,000 --> 00:30:03,000 >> Në vend të kësaj më lejoni të bëjë këtë. 557 00:30:03,000 --> 00:30:08,000 Në këtë prompt Gdb lejoni vend shkruani pushim, të hyjë. 558 00:30:08,000 --> 00:30:10,000 Kjo nuk është ajo që unë do të thotë të tipit. 559 00:30:10,000 --> 00:30:13,000 Le të shkruani në vend pushim kryesore. 560 00:30:13,000 --> 00:30:15,000 Me fjalë të tjera, unë dua të vendosur diçka të quajtur një breakpoint, 561 00:30:15,000 --> 00:30:18,000 e cila është quajtur me vend, sepse ajo do të thyejnë apo pauzë 562 00:30:18,000 --> 00:30:21,000 Ekzekutimi i programit tuaj në atë vend të veçantë. 563 00:30:21,000 --> 00:30:23,000 Kryesor është emri i funksionit tim. 564 00:30:23,000 --> 00:30:25,000 Vini re se Gdb është shumë i zgjuar. 565 00:30:25,000 --> 00:30:28,000 Është realizuar artistikisht se ndodh kryesore për të filluar afërsisht në linjë 18 566 00:30:28,000 --> 00:30:32,000 e buggy3.c, dhe pastaj të vini re këtu në të majtë krye 567 00:30:32,000 --> 00:30:34,000 b + është e drejtë tjetër të linjës 18. 568 00:30:34,000 --> 00:30:38,000 Kjo është kujtuar mua se unë kam vendosur një breakpoint në linjë 18. 569 00:30:38,000 --> 00:30:42,000 Këtë herë, kur unë lloji të kandidojë, unë jam duke shkuar për të drejtuar programin tim 570 00:30:42,000 --> 00:30:45,000 deri ajo godet atë breakpoint, 571 00:30:45,000 --> 00:30:48,000 kështu që programi do të pauzë për mua në linjë 18. 572 00:30:48,000 --> 00:30:50,000 Këtu ne do të shkojmë, e drejtuar. 573 00:30:50,000 --> 00:30:53,000 Asgjë nuk duket të ketë ndodhur, por në fund u largua njoftim 574 00:30:53,000 --> 00:30:58,000 Programi filluar, buggy3, 1 në breakpoint kryesor në përputhje buggy3.c 18. 575 00:30:58,000 --> 00:31:00,000 Çfarë mund të bëj unë tani? 576 00:31:00,000 --> 00:31:03,000 >> Njoftim unë mund të filloni të shtypni gjëra të tilla si të shtypura, 577 00:31:03,000 --> 00:31:08,000 Nuk printf, x shtypura, dhe tani që është e çuditshme. 578 00:31:08,000 --> 00:31:11,000 $ 1 është vetëm një kuriozitet, si ne do të shohim 579 00:31:11,000 --> 00:31:14,000 çdo herë që të shtypura diçka që ju të merrni një të ri vlerë $. 580 00:31:14,000 --> 00:31:18,000 Kjo është kështu që ju mund t'i referohet përsëri në vlerat e mëparshme vetëm në rast, 581 00:31:18,000 --> 00:31:21,000 por tani për tani ajo shtyp është thënë mua është se vlera e x në këtë pikë në histori 582 00:31:21,000 --> 00:31:26,000 është me sa duket 134.514.032. 583 00:31:26,000 --> 00:31:29,000 Çfarë? Ku ka që vijnë edhe nga? 584 00:31:29,000 --> 00:31:31,000 [E padëgjueshme-studenti] 585 00:31:31,000 --> 00:31:34,000 Në të vërtetë, kjo është ajo që ne do të thërrasë një vlerë plehrash, dhe ne nuk kemi biseduar në lidhje me këtë ende, 586 00:31:34,000 --> 00:31:37,000 por arsyeja që ju nisja variabla 587 00:31:37,000 --> 00:31:40,000 është e qartë në mënyrë që ata të kenë disa vlera që ju dëshironi që ata të kenë. 588 00:31:40,000 --> 00:31:44,000 Por kapur është kujtojnë se ju mund të deklarojë variablave 589 00:31:44,000 --> 00:31:46,000 si unë e bëri një moment më parë në shembullin tim SIGMA 590 00:31:46,000 --> 00:31:48,000 pa të vërtetë duke u dhënë atyre një vlerë. 591 00:31:48,000 --> 00:31:50,000 Kujtojnë se çfarë kam bërë këtu në Sigma. 592 00:31:50,000 --> 00:31:52,000 I shpallur n, por çfarë vlerë nuk kam dhënë atë? 593 00:31:52,000 --> 00:31:56,000 Asnjë, sepse e dija se në linjat e ardhshme 594 00:31:56,000 --> 00:31:59,000 GetInt do të marrë kujdesin e problemit të vënë një vlerë brenda n. 595 00:31:59,000 --> 00:32:02,000 >> Por në këtë pikë në historinë e linjës 11 596 00:32:02,000 --> 00:32:05,000 dhe 12 e linjës dhe linjës 13 dhe 14 linja 597 00:32:05,000 --> 00:32:08,000 gjithë atyre disa linja çfarë është vlera e n? 598 00:32:08,000 --> 00:32:10,000 Në C që ju thjesht nuk e di. 599 00:32:10,000 --> 00:32:14,000 Kjo është në përgjithësi disa vlera plehrash, disa Numri krejtësisht të rastit 600 00:32:14,000 --> 00:32:17,000 që e la mbi thelb nga një funksion mëparshme 601 00:32:17,000 --> 00:32:21,000 duke qenë të drejtuar, në mënyrë që programi juaj shkon 602 00:32:21,000 --> 00:32:24,000 kujtojmë se funksioni i merr, funksion funksion funksion,. 603 00:32:24,000 --> 00:32:27,000 Të gjitha këto korniza të merrni vënë në memorie, dhe pastaj ato kthimin funksioneve, 604 00:32:27,000 --> 00:32:31,000 dhe ashtu si kam sugjeruar me gomë kujtimi i tyre është ripërdoren përfundimisht. 605 00:32:31,000 --> 00:32:37,000 E pra, kjo ndodh pikërisht kështu që X Kjo variabël në këtë program 606 00:32:37,000 --> 00:32:41,000 duket të ketë të përfshira disa vlera si mbeturina 134514032 607 00:32:41,000 --> 00:32:44,000 nga disa funksion të kaluar, jo ai që kam shkruar. 608 00:32:44,000 --> 00:32:47,000 Kjo mund të jetë diçka që vjen në mënyrë efektive me sistemin operativ, 609 00:32:47,000 --> 00:32:49,000 disa funksion nën kapuç. 610 00:32:49,000 --> 00:32:52,000 >> Mirë, kjo është në rregull, por tani le të përparuar në linjë tjetër. 611 00:32:52,000 --> 00:32:55,000 Nëse unë tipit "tjetër" në ftim tim GDB dhe unë goditi të hyjë, 612 00:32:55,000 --> 00:32:58,000 vëreni se duke theksuar lëviz poshtë në linjë 19, 613 00:32:58,000 --> 00:33:01,000 por implikimi logjik është se linja 18 614 00:33:01,000 --> 00:33:06,000 ka mbaruar tani ekzekutimin, kështu që nëse unë përsëri shkruani "print x" 615 00:33:06,000 --> 00:33:10,000 Unë tani duhet të shihni 1, dhe në të vërtetë, unë bëj. 616 00:33:10,000 --> 00:33:14,000 Përsëri, $ stuff është një mënyrë për të kujtuar ju GDB 617 00:33:14,000 --> 00:33:17,000 ajo historia e printime janë që ju keni bërë. 618 00:33:17,000 --> 00:33:21,000 Tani më lejoni të shkoj përpara dhe të shtypura nga y, dhe në të vërtetë, y disa vlera çmendur, si edhe, 619 00:33:21,000 --> 00:33:24,000 por jo e madhe, sepse në përputhje 19 ne jemi gati për të caktojë atë 620 00:33:24,000 --> 00:33:27,000 vlera 2, kështu që më lejoni të tipit "tjetër" përsëri. 621 00:33:27,000 --> 00:33:29,000 Dhe tani ne jemi në përputhje printf. 622 00:33:29,000 --> 00:33:31,000 Më lejoni të bëj x shtypura. 623 00:33:31,000 --> 00:33:34,000 Më lejoni të bëj y shtypura. Sinqerisht, unë jam duke marrë një pak të lodhur e shtypjes këtë. 624 00:33:34,000 --> 00:33:38,000 Më lejoni në vend të tipit "ekranit x" dhe "y", ekranit 625 00:33:38,000 --> 00:33:41,000 dhe tani çdo herë që unë të shkruani një komandë në të ardhmen 626 00:33:41,000 --> 00:33:45,000 Unë do të kujtoi se çka është x dhe y, çfarë është x dhe y, çfarë është x dhe y. 627 00:33:45,000 --> 00:33:48,000 >> Unë gjithashtu mund të, si një lloj mënjanë, në "vendasit info." 628 00:33:48,000 --> 00:33:50,000 Info është një komandë të veçantë. 629 00:33:50,000 --> 00:33:52,000 Vendorët do të thotë kjo tregon mua variablave lokale. 630 00:33:52,000 --> 00:33:55,000 Vetëm në rast se të harroj apo kjo është një i çmendur, funksioni i komplikuar 631 00:33:55,000 --> 00:33:57,000 që unë apo dikush tjetër shkruante vendasit info do ju them 632 00:33:57,000 --> 00:34:00,000 çfarë janë të gjitha variablat lokale brenda këtij funksioni lokale 633 00:34:00,000 --> 00:34:03,000 që ju mund të kujdesen për ju, nëse doni të thes rreth. 634 00:34:03,000 --> 00:34:07,000 Tani, printf është gati për të ekzekutuar, kështu që më lejoni të shkoj përpara dhe vetëm lloji "tjetër." 635 00:34:07,000 --> 00:34:10,000 Sepse ne jemi në këtë mjedis, ne nuk jeni në të vërtetë duke parë atë 636 00:34:10,000 --> 00:34:14,000 ekzekutuar poshtë këtu, por vini re se është duke marrë një pak të coptuar këtu. 637 00:34:14,000 --> 00:34:17,000 Por vini re kjo është thelbësore në ekran atje, 638 00:34:17,000 --> 00:34:21,000 kështu që nuk është një program i përsosur këtu, por kjo është në rregull, sepse unë gjithmonë mund të thes rreth 639 00:34:21,000 --> 00:34:23,000 përdorimin e shtypura në qoftë se unë dua. 640 00:34:23,000 --> 00:34:26,000 >> Më lejoni të shkruani tjetër përsëri, dhe tani këtu është pjesa interesante. 641 00:34:26,000 --> 00:34:29,000 Në këtë moment në histori y është 2, dhe x është 1, 642 00:34:29,000 --> 00:34:32,000 siç sugjerohet këtu, dhe përsëri, 643 00:34:32,000 --> 00:34:35,000 Arsyeja e kësaj është automatikisht shfaqur tani është për shkak se kam përdorur komandën 644 00:34:35,000 --> 00:34:40,000 Ekran x dhe y ekranit, kështu që momenti unë lloji tjetër 645 00:34:40,000 --> 00:34:43,000 Në teori x dhe y duhet të bëhet swapped. 646 00:34:43,000 --> 00:34:45,000 Tani, ne tashmë e dimë se nuk do të jetë rasti, 647 00:34:45,000 --> 00:34:49,000 por ne do të shohim në një moment se si ne mund të zhyten më thellë të kuptoj se pse kjo është e vërtetë. 648 00:34:49,000 --> 00:34:54,000 Ardhshëm, dhe për fat të keq, është ende y 2 dhe x është ende 1, dhe unë mund të konfirmojë sa më shumë. 649 00:34:54,000 --> 00:34:56,000 Print x, y shtypura. 650 00:34:56,000 --> 00:34:59,000 Në të vërtetë, nuk shkëmbejnë ka ndodhur në të vërtetë, kështu që le të fillojnë këtë gjatë. 651 00:34:59,000 --> 00:35:01,000 Swap është prishur në mënyrë të qartë. 652 00:35:01,000 --> 00:35:04,000 Le vend tipit "drejtuar" përsëri. 653 00:35:04,000 --> 00:35:07,000 Më lejoni të them po, unë dua për të rifilluar atë nga fillimi, të hyjë. 654 00:35:07,000 --> 00:35:09,000 >> Tani unë jam mbrapa deri në vijën 18. 655 00:35:09,000 --> 00:35:11,000 Tani njoftim x dhe y janë vlera mbeturina përsëri. 656 00:35:11,000 --> 00:35:15,000 Tjetra, tjetër, tjetër, tjetër. 657 00:35:15,000 --> 00:35:17,000 Nëse unë të mërzitem unë gjithashtu mund të shkruani vetëm n për të ardhshëm. 658 00:35:17,000 --> 00:35:21,000 Ju mund të shkurtoj atë në rend të shkurtër të mundshme të karaktereve. 659 00:35:21,000 --> 00:35:23,000 Swap është prishur tani. 660 00:35:23,000 --> 00:35:25,000 Le pikiatë në, kështu që në vend të shtypni tjetër, 661 00:35:25,000 --> 00:35:30,000 tani unë jam duke shkuar për të tipit hap në mënyrë që unë jam shkelën në brendësi të këtij funksioni 662 00:35:30,000 --> 00:35:33,000 në mënyrë që unë mund të ecin nëpër atë, kështu që unë goditi hap dhe pastaj të hyjë. 663 00:35:33,000 --> 00:35:37,000 Vini re se hedhje poshtë theksuar ulët në programin tim të vijë 36. 664 00:35:37,000 --> 00:35:39,000 Tani çfarë janë variablat lokale? 665 00:35:39,000 --> 00:35:41,000 Vendasit info. 666 00:35:41,000 --> 00:35:43,000 Asgjë vetëm ende, sepse ne nuk kemi marrë në atë linjë, 667 00:35:43,000 --> 00:35:47,000 kështu që le të shkojnë përpara dhe të thonë "tjetër." 668 00:35:47,000 --> 00:35:50,000 Tani ne duket të ketë, tmp tmp shtypura. 669 00:35:50,000 --> 00:35:52,000 Garbage vlera, e drejtë? Unë mendoj kështu. 670 00:35:52,000 --> 00:35:55,000 Si për të shkruar një të shtypura, b, 1 dhe 2? 671 00:35:55,000 --> 00:35:58,000 Në një moment, sa më shpejt që unë lloji tjetër përsëri 672 00:35:58,000 --> 00:36:02,000 tmp do të marrë në një vlerë prej 1, me shpresë, 673 00:36:02,000 --> 00:36:05,000 sepse tmp do të caktohet vlera e a. 674 00:36:05,000 --> 00:36:08,000 >> Tani le të mos shtypur një B, të shtypura, 675 00:36:08,000 --> 00:36:11,000 por tani shtypura tmp, dhe kjo është me të vërtetë 1. 676 00:36:11,000 --> 00:36:14,000 Më lejoni të bëjë tjetër. Më lejoni të bëjë tjetër. 677 00:36:14,000 --> 00:36:16,000 Unë kam mbaruar funksionin swap. 678 00:36:16,000 --> 00:36:19,000 Unë jam ende në brendësi të saj, në përputhje 40, kështu që më lejoni të shtypur një, 679 00:36:19,000 --> 00:36:22,000 b shtypura, dhe unë nuk bëj kujdes atë që tmp është. 680 00:36:22,000 --> 00:36:27,000 Ajo duket si swap-i është i saktë kur është fjala për një shkëmbimi dhe b. 681 00:36:27,000 --> 00:36:31,000 Por në qoftë se unë tani lloji tjetër, unë kërcej prapa në linjë 25, 682 00:36:31,000 --> 00:36:34,000 dhe natyrisht, në qoftë se unë lloji në x dhe y të shtypura 683 00:36:34,000 --> 00:36:38,000 ata janë ende të pandryshuara, kështu që ne nuk kemi fiksuar problemin. 684 00:36:38,000 --> 00:36:41,000 Por diagnostikuese tani ndoshta me këtë program GDB 685 00:36:41,000 --> 00:36:44,000 ne kemi marrë të paktën një hap më afër për të kuptuar 686 00:36:44,000 --> 00:36:47,000 çfarë po ndodh gabuar pa pasur nevojë për të pjellë kodin tonë duke vënë një printf këtu, 687 00:36:47,000 --> 00:36:50,000 printf këtu, këtu dhe pastaj printf drejtimin atë përsëri dhe përsëri 688 00:36:50,000 --> 00:36:52,000 duke u përpjekur të kuptoj se çfarë po ndodh gabuar. 689 00:36:52,000 --> 00:36:55,000 >> Unë jam duke shkuar për të shkuar përpara dhe u largua nga kjo së bashku me lë. 690 00:36:55,000 --> 00:36:57,000 Kjo do të thotë, atëherë, "Quit anyway?" Po. 691 00:36:57,000 --> 00:37:00,000 Tani unë jam kthyer në prompt time normale, dhe unë jam bërë duke përdorur gdb. 692 00:37:00,000 --> 00:37:03,000 Si një mënjanë, ju nuk keni nevojë të përdorni këtë TUI-flamur. 693 00:37:03,000 --> 00:37:07,000 Në fakt, në qoftë se ju heq atë që ju merrni në thelb gjysmën e poshtme të ekranit. 694 00:37:07,000 --> 00:37:11,000 Nëse unë pastaj shtypni pushim kryesore dhe pastaj të drejtuar 695 00:37:11,000 --> 00:37:15,000 Unë ende mund të drejtuar programin tim, por ajo që do të bëjë më shumë tekstualisht 696 00:37:15,000 --> 00:37:18,000 vetëm tregoni mua një linjë aktual në një kohë. 697 00:37:18,000 --> 00:37:21,000 -TUI, ndërfaqe tekstuale përdoruesit, 698 00:37:21,000 --> 00:37:25,000 vetëm tregon se ju më e programit në të njëjtën kohë, e cila është ndoshta pak më e lehtë konceptualisht. 699 00:37:25,000 --> 00:37:27,000 Por në të vërtetë, unë vetëm mund të bëjë tjetër, tjetër, tjetër, 700 00:37:27,000 --> 00:37:30,000 dhe unë jam duke shkuar për të parë një linjë në një kohë, dhe në qoftë se unë me të vërtetë duan të shohin se çfarë po ndodh 701 00:37:30,000 --> 00:37:35,000 Unë mund të shtypni listë dhe shoh një bandë e tërë e linjave fqinje. 702 00:37:35,000 --> 00:37:39,000 >> Ka një video që ne kemi kërkuar që ju të shikojnë për problemi përcakton 3 703 00:37:39,000 --> 00:37:43,000 në të cilën Nate mbulon disa prej intricacies e GDB, 704 00:37:43,000 --> 00:37:46,000 dhe kjo është një nga ato gjëra, sinqerisht, ku disa jo-parëndësishëm përqindje prej jush 705 00:37:46,000 --> 00:37:49,000 kurrë nuk do të prekë GDB, dhe se do të jetë një gjë e keqe 706 00:37:49,000 --> 00:37:53,000 sepse fjalë për fjalë ju do të përfundojë duke shpenzuar më shumë kohë më vonë këtë semestër 707 00:37:53,000 --> 00:37:56,000 ndiqte poshtë mete atëherë ju do të qoftë se keni vënë në atë orë e gjysmë / orë 708 00:37:56,000 --> 00:38:00,000 këtë javë dhe të mësuarit e ardhshme për të marrë të kënaqur me GDB. 709 00:38:00,000 --> 00:38:02,000 Printf ishte shoku juaj. 710 00:38:02,000 --> 00:38:05,000 Gdb tani duhet të jetë miku juaj. 711 00:38:05,000 --> 00:38:08,000 >> Çdo pyetje në GDB? 712 00:38:08,000 --> 00:38:12,000 Dhe këtu është një listë e shpejtë të disa nga komandat më të fuqishme dhe të dobishme. 713 00:38:12,000 --> 00:38:15,000 Po. >> Mund të shkruar një varg? 714 00:38:15,000 --> 00:38:17,000 Ju mund të shtypura një varg? Absolutisht. 715 00:38:17,000 --> 00:38:19,000 Ajo nuk duhet të jetë vetëm integers. 716 00:38:19,000 --> 00:38:22,000 Nëse një s ndryshueshme është një varg vetëm lloji në s shtypura. 717 00:38:22,000 --> 00:38:24,000 Kjo do të ju tregojnë se çfarë është e ndryshueshme string. 718 00:38:24,000 --> 00:38:26,000 [E padëgjueshme-studenti] 719 00:38:26,000 --> 00:38:28,000 Kjo do t'ju japë adresën dhe string vetë. 720 00:38:28,000 --> 00:38:32,000 Ajo do të tregojë që ju të dy. 721 00:38:32,000 --> 00:38:34,000 Dhe një gjë e fundit, vetëm për shkak se këto janë të mira për të dini shumë. 722 00:38:34,000 --> 00:38:37,000 Backtrace dhe kornizë, më lejoni të zhyten në këtë kohë të fundit, 723 00:38:37,000 --> 00:38:39,000 programi i njëjtë me GDB saktë. 724 00:38:39,000 --> 00:38:44,000 Më lejoni të shkoj përpara dhe të drejtuar ndërfaqe tekstuale versionin e përdoruesit, 725 00:38:44,000 --> 00:38:46,000 thyejnë kryesore. 726 00:38:46,000 --> 00:38:49,000 Më lejoni të shkoj përpara dhe të kandidojë përsëri. Unë jam këtu. 727 00:38:49,000 --> 00:38:55,000 Tani më lejoni të shkoj tjetër, tjetër, tjetër, tjetër, tjetër, hap, të hyjë. 728 00:38:55,000 --> 00:39:00,000 >> Dhe tani mendoj unë jam tani në shkëmbim me dashje, por unë jam si "Damn, çfarë ishte vlera e x?" 729 00:39:00,000 --> 00:39:02,000 Unë nuk mund të bëjë x më. 730 00:39:02,000 --> 00:39:05,000 Unë nuk mund ta bëjë y, sepse ata nuk janë në fushëveprimin. 731 00:39:05,000 --> 00:39:07,000 Ata nuk janë në kontekst, por nuk ka problem. 732 00:39:07,000 --> 00:39:09,000 Unë mund të shtypni backtrace. 733 00:39:09,000 --> 00:39:13,000 Kjo tregon mua të gjitha funksionet që kanë ekzekutuar deri në këtë moment në kohë. 734 00:39:13,000 --> 00:39:16,000 Vini re se një në pjesën e poshtme, kryesore, linjat deri me kryesore 735 00:39:16,000 --> 00:39:18,000 qenë në fund të foto tonë këtu. 736 00:39:18,000 --> 00:39:22,000 Fakti që swap-i është e mësipërme linjave me shkëmbim të qenit më lart atë në kujtesë këtu, 737 00:39:22,000 --> 00:39:26,000 dhe në qoftë se unë dua të merrni Kthehu tek Qendrori përkohësisht mund të them "kornizë". 738 00:39:26,000 --> 00:39:30,000 Çfarë numri? Kryesor është kornizë # 1. 739 00:39:30,000 --> 00:39:32,000 Unë jam duke shkuar për të shkuar përpara dhe të thonë "kornizë 1." 740 00:39:32,000 --> 00:39:36,000 >> Tani unë jam kthyer në kryesore, dhe unë mund të shtypura X, dhe unë mund të shtypura y, 741 00:39:36,000 --> 00:39:40,000 por unë nuk mund të shtypura një ose b. 742 00:39:40,000 --> 00:39:43,000 Por unë mund të, nëse unë them: "Mirë, prisni një minutë. Swap Ku ishte?" 743 00:39:43,000 --> 00:39:46,000 Më lejoni të shkojnë përpara dhe të thonë "0 frame." 744 00:39:46,000 --> 00:39:48,000 Tani unë jam kthyer aty ku unë dua të jem, dhe si një mënjanë, 745 00:39:48,000 --> 00:39:52,000 ka komanda të tjera shumë, si në qoftë se ju jeni me të vërtetë duke shtypur mërzitur tjetër, tjetër, tjetër, tjetër, 746 00:39:52,000 --> 00:39:56,000 ju mund të në përgjithësi thonë gjëra të tilla si "10 vitet e ardhshme", dhe se do të hap përmes 10 linjave ardhshme. 747 00:39:56,000 --> 00:39:59,000 Ju gjithashtu mund të shkruani "vazhdojnë" kur ju me të vërtetë të merrni ngopur me rrit nëpërmjet saj. 748 00:39:59,000 --> 00:40:05,000 Vazhdo do të drejtuar programin tuaj pa ndërprerje deri sa ajo godet një tjetër breakpoint, 749 00:40:05,000 --> 00:40:07,000 nëse në një lak ose ulur poshtë në programin tuaj. 750 00:40:07,000 --> 00:40:11,000 >> Në këtë rast ne kemi vazhduar deri në fund, dhe programi exited normalisht. 751 00:40:11,000 --> 00:40:13,000 Kjo është një mënyrë e sofistikuar, procesi inferiore. 752 00:40:13,000 --> 00:40:16,000 Vetëm programi juaj exited normalisht. 753 00:40:16,000 --> 00:40:24,000 Më shumë se në video dhe në debugging seanca që do të vijnë. 754 00:40:24,000 --> 00:40:26,000 Kjo ishte një shumë. 755 00:40:26,000 --> 00:40:35,000 Le të marrin 5-minutësh pushim tonë këtu, dhe ne do të kthehemi me structs dhe fotografi. 756 00:40:35,000 --> 00:40:38,000 >> Nëse keni fetar në pset kësaj jave tashmë 757 00:40:38,000 --> 00:40:41,000 ju do të dini që ne i përdorim në kodin e shpërndarjes, 758 00:40:41,000 --> 00:40:45,000 burim kodin që ne ofrojmë për ju si një pikënisje, disa teknika të reja. 759 00:40:45,000 --> 00:40:50,000 Në veçanti, ne kemi prezantuar këtë fjalen ri të quajtur struct, për strukturën, 760 00:40:50,000 --> 00:40:53,000 kështu që ne mund të krijojë customized variablave të terezi. 761 00:40:53,000 --> 00:40:57,000 Ne gjithashtu paraqiti idenë e I / O, e file input output file dhe, 762 00:40:57,000 --> 00:41:00,000 dhe kjo është në mënyrë që ne mund të shpëtojë shtetin 763 00:41:00,000 --> 00:41:03,000 i bordit tuaj ngjitem në një skedar në disk 764 00:41:03,000 --> 00:41:06,000 në mënyrë që miqtë e mësimdhënies dhe unë mund ta kuptoj 765 00:41:06,000 --> 00:41:09,000 çfarë po ndodh në brendësi të programit tuaj, pa pasur në dorë të luajtur 766 00:41:09,000 --> 00:41:11,000 dhjetra e lojrave të Scramble. 767 00:41:11,000 --> 00:41:13,000 Ne mund të bëjmë këtë më automatedly. 768 00:41:13,000 --> 00:41:18,000 >> Kjo ide e një struct zgjidh një problem mjaft bindëse. 769 00:41:18,000 --> 00:41:21,000 Supozoni se ne duam të zbatojë ndonjë program 770 00:41:21,000 --> 00:41:25,000 që në njëfarë mënyre mban gjurmët e informacionit për studentët, 771 00:41:25,000 --> 00:41:28,000 dhe studentët mund të ketë, për shembull, një ID, një emër 772 00:41:28,000 --> 00:41:31,000 dhe një shtëpi në një vend si Harvard, kështu që këto janë 3 pjesë të informacionit 773 00:41:31,000 --> 00:41:34,000 ne duam të mbajnë përreth, kështu që më lejoni të shkoj përpara dhe të filloni të shkruani një program të vogël këtu, 774 00:41:34,000 --> 00:41:38,000 përfshijnë stdio.h. 775 00:41:38,000 --> 00:41:42,000 Më lejoni të bëj përfshijnë cs50.h. 776 00:41:42,000 --> 00:41:44,000 Dhe pastaj të fillojë funksionin tim kryesor. 777 00:41:44,000 --> 00:41:46,000 Unë nuk do të shqetësojë me ndonjë argumente command line, 778 00:41:46,000 --> 00:41:49,000 dhe këtu unë dua që të ketë një student, kështu që unë jam duke shkuar për të thënë 779 00:41:49,000 --> 00:41:54,000 një student ka një emër, kështu që unë jam duke shkuar për të thonë "emrin string." 780 00:41:54,000 --> 00:41:59,000 Atëherë unë jam duke shkuar për të thonë se një nxënës ka gjithashtu një ID, ID kështu int, 781 00:41:59,000 --> 00:42:03,000 dhe një student ka një shtëpi, kështu që unë jam gjithashtu do të thotë "shtëpi string." 782 00:42:03,000 --> 00:42:06,000 Atëherë unë do të urdhërojë këto pak më të pastër si kjo. 783 00:42:06,000 --> 00:42:11,000 Mirë, tani kam 3 variablave me të cilën të paraqesin një student, kështu që "një nxënës." 784 00:42:11,000 --> 00:42:15,000 >> Dhe tani unë dua të populloj këto vlera, kështu që më lejoni të shkoj përpara dhe të thonë diçka si 785 00:42:15,000 --> 00:42:18,000 "Id = 123." 786 00:42:18,000 --> 00:42:21,000 Emri është duke shkuar për të marrë Davidin. 787 00:42:21,000 --> 00:42:24,000 Le të thonë se shtëpia do të merrni Mather, 788 00:42:24,000 --> 00:42:31,000 dhe atëherë unë jam duke shkuar për të bërë diçka në mënyrë arbitrare si printf ("% s, 789 00:42:31,000 --> 00:42:37,000 të cilit është ID% d, jeton në% s. 790 00:42:37,000 --> 00:42:41,000 Dhe tani, çfarë unë dua të vihet në prizë këtu, njëri pas tjetrit? 791 00:42:41,000 --> 00:42:47,000 Emri, id, shtëpi; kthim 0. 792 00:42:47,000 --> 00:42:50,000 Mirë, nëse unë dehur diku këtu 793 00:42:50,000 --> 00:42:54,000 Unë mendoj se ne kemi një program mjaft të mirë që ruan një student. 794 00:42:54,000 --> 00:42:57,000 Sigurisht, kjo nuk është e gjitha që interesante. Çka nëse unë dua që të ketë 2 studentëve? 795 00:42:57,000 --> 00:42:59,000 Kjo nuk është punë e madhe. Unë mund të mbështesin 2 persona. 796 00:42:59,000 --> 00:43:03,000 Më lejoni të shkojnë përpara dhe të nxjerrë në pah këtë dhe të shkojnë poshtë këtu, 797 00:43:03,000 --> 00:43:09,000 dhe unë mund të them "id = 456" për dikë si Rob që jeton në Kirkland. 798 00:43:09,000 --> 00:43:12,000 >> Mirë, prisni, por unë nuk mund të telefononi këto njëjta gjë, 799 00:43:12,000 --> 00:43:15,000 dhe kjo duket si unë jam do të duhet të kopjoni këtë, 800 00:43:15,000 --> 00:43:19,000 kështu që më lejoni të them se këto do të jenë variabla e Davidit, 801 00:43:19,000 --> 00:43:23,000 dhe më lejoni të merrni disa kopje të këtyre për Rob. 802 00:43:23,000 --> 00:43:27,000 Ne do të quajmë këto të Rob, por kjo nuk do të punojë tani 803 00:43:27,000 --> 00:43:33,000 sepse kam-pritur, le të ndryshojë mua id1, name1 dhe house1. 804 00:43:33,000 --> 00:43:35,000 Rob do të jetë 2, 2. 805 00:43:35,000 --> 00:43:42,000 Unë kam marrë për të ndryshuar këtë këtu, këtu, këtu, këtu, këtu, këtu. 806 00:43:42,000 --> 00:43:45,000 Prisni, çfarë lidhje Tommy? Le ta bëjmë këtë përsëri. 807 00:43:45,000 --> 00:43:49,000 Natyrisht, nëse ju ende mendoni se kjo është një mënyrë e mirë për ta bërë këtë, nuk është, 808 00:43:49,000 --> 00:43:52,000 kështu kopje / paste keqe. 809 00:43:52,000 --> 00:43:55,000 Por ne zgjidhur këtë një javë më parë. 810 00:43:55,000 --> 00:43:59,000 >> Cila ishte zgjidhja jonë kur kemi dashur të kemi raste të shumta të të njëjtit lloj të të dhënave? 811 00:43:59,000 --> 00:44:01,000 [Studentët] Një grup. 812 00:44:01,000 --> 00:44:03,000 Një grup, kështu që më lejoni të përpiqen për të pastruar këtë ide. 813 00:44:03,000 --> 00:44:07,000 Më lejoni të bëjë disa hapësirë ​​për veten time në krye, dhe më lejoni të bëjë këtë në vend këtu. 814 00:44:07,000 --> 00:44:12,000 Ne do të quajmë këta njerëz, dhe në vend që unë jam duke shkuar për të thonë "ID int," 815 00:44:12,000 --> 00:44:14,000 dhe unë jam duke shkuar për të mbështetur 3 prej nesh tani për tani. 816 00:44:14,000 --> 00:44:18,000 Unë jam duke shkuar për të thënë "emrat string," dhe unë do të mbështes 3 prej nesh, 817 00:44:18,000 --> 00:44:22,000 dhe atëherë unë jam duke shkuar për të thënë "shtëpi string", dhe unë jam duke shkuar për të mbështetur 3 prej nesh. 818 00:44:22,000 --> 00:44:26,000 Tani në këtu në vend të gjetjes së David variablave veta lokale 819 00:44:26,000 --> 00:44:28,000 ne mund të shpëtoj nga ata. 820 00:44:28,000 --> 00:44:30,000 Që ndihet mirë që ne jemi pastrimin ky lart. 821 00:44:30,000 --> 00:44:35,000 Unë pastaj mund të them David do të jetë [0] dhe emrat [0] 822 00:44:35,000 --> 00:44:38,000 dhe shtëpitë [0]. 823 00:44:38,000 --> 00:44:41,000 Dhe pastaj Rob ne mund të ruani në mënyrë të ngjashme me këtë. 824 00:44:41,000 --> 00:44:46,000 Le të vënë këtë këtu poshtë, kështu që ai do të jetë në mënyrë arbitrare IDS [1]. 825 00:44:46,000 --> 00:44:50,000 Ai do të jetë emra [1], 826 00:44:50,000 --> 00:44:53,000 dhe pastaj së fundi, shtëpitë [1]. 827 00:44:53,000 --> 00:44:57,000 >> Ende pak i lodhshëm, dhe tani unë duhet të kuptoj këtë, 828 00:44:57,000 --> 00:45:03,000 kështu që le të themi "Emrat [0], id [0], shtëpitë [0] 829 00:45:03,000 --> 00:45:06,000 dhe le të bëj shumës këtë. 830 00:45:06,000 --> 00:45:09,000 IDS, IDS, IDS. 831 00:45:09,000 --> 00:45:12,000 Dhe përsëri, unë jam duke bërë atë, kështu që përsëri, unë tashmë jam përdorur për të kopje / paste përsëri, 832 00:45:12,000 --> 00:45:14,000 kështu që shanset janë ka një tjetër zgjidhje këtu. 833 00:45:14,000 --> 00:45:18,000 Unë ndoshta mund të pastruar këtë deri tej me një lak ose diçka si kjo, 834 00:45:18,000 --> 00:45:21,000 kështu që në pak fjalë, kjo është një pak më të mirë, por ende ndjehet si 835 00:45:21,000 --> 00:45:24,000 Unë jam përdorur për të kopje / paste, por edhe kjo, unë pretendojnë, 836 00:45:24,000 --> 00:45:27,000 nuk është me të vërtetë krejtësisht zgjidhje e drejtë, sepse 837 00:45:27,000 --> 00:45:29,000 çka nëse ne vendosim diku ju e dini se çfarë? 838 00:45:29,000 --> 00:45:32,000 Ne me të vërtetë duhet të ketë qenë ruajtjen adresat e-mail për Davidin dhe Rob 839 00:45:32,000 --> 00:45:34,000 dhe të gjithë të tjerët në këtë program. 840 00:45:34,000 --> 00:45:36,000 Ne gjithashtu duhet të ruajtur numrat e telefonit. 841 00:45:36,000 --> 00:45:39,000 Ne gjithashtu duhet të ruajtur numrat e kontaktit emergjente. 842 00:45:39,000 --> 00:45:41,000 Ne kemi të gjitha këto pjesë të të dhënave që ne duam për të ruajtur, 843 00:45:41,000 --> 00:45:43,000 kështu si bëni ju shkoni për të bërë këtë? 844 00:45:43,000 --> 00:45:46,000 >> Ju deklarojë një tjetër grup në krye, dhe pastaj ju shtuar manualisht 845 00:45:46,000 --> 00:45:49,000 një adresë e-mail [0], adresë e-mail [1] 846 00:45:49,000 --> 00:45:51,000 për Davidin dhe Rob dhe kështu me radhë. 847 00:45:51,000 --> 00:45:56,000 Por ka të vërtetë vetëm një supozim themelor këtë dizajn 848 00:45:56,000 --> 00:45:59,000 se unë jam duke përdorur sistemin e nderit të dini se 849 00:45:59,000 --> 00:46:03,000 [I] në secilin prej vargjeve disa 850 00:46:03,000 --> 00:46:06,000 pikërisht kështu ndodh për t'iu referuar të njëjtit person, 851 00:46:06,000 --> 00:46:10,000 kështu [0] në kartat e identitetit është numri 123, 852 00:46:10,000 --> 00:46:13,000 dhe unë jam duke shkuar për të marrë se emrat [0] 853 00:46:13,000 --> 00:46:16,000 është emri i njëjti person dhe shtëpitë [0] 854 00:46:16,000 --> 00:46:21,000 është shtëpia njëjti person dhe kështu me radhë për të gjitha vargjeve të ndryshme që kam krijuar. 855 00:46:21,000 --> 00:46:24,000 Por vini re se nuk ka asnjë lidhje themelore 856 00:46:24,000 --> 00:46:27,000 në mesin e atyre 3 copa e informacionit, id, emri dhe shtëpi, 857 00:46:27,000 --> 00:46:32,000 edhe pse njësia ekonomike ne jemi duke u përpjekur për të modelit në këtë program nuk është vargjeve. 858 00:46:32,000 --> 00:46:35,000 Vargjeve janë vetëm në këtë mënyrë programatike për ta bërë këtë. 859 00:46:35,000 --> 00:46:38,000 Ajo që ne të vërtetë duan të modeluar në programin tonë është një person 860 00:46:38,000 --> 00:46:41,000 si Davidi, një person si Rob brenda të cilave 861 00:46:41,000 --> 00:46:46,000 ose encapsulating është një Emri dhe ID dhe një shtëpi. 862 00:46:46,000 --> 00:46:49,000 >> Mund ta shprehim këtë ide disi e encapsulation 863 00:46:49,000 --> 00:46:52,000 ku një person ka një ID, një emër dhe një shtëpi 864 00:46:52,000 --> 00:46:55,000 dhe nuk mbështeten në të vërtetë këtë hack ku ne vetëm 865 00:46:55,000 --> 00:46:58,000 besojnë se diçka parantezë 866 00:46:58,000 --> 00:47:02,000 referohet subjektit të njëjtë të njeriut në secilën prej këtyre vargjeve të ndryshëm? 867 00:47:02,000 --> 00:47:04,000 Ne fakt mund ta bëjë këtë. 868 00:47:04,000 --> 00:47:08,000 Më lejoni të shkoj më lart kryesor tani për tani, dhe më lejoni të krijojnë llojin mi dhënave 869 00:47:08,000 --> 00:47:10,000 për herë të parë me të vërtetë. 870 00:47:10,000 --> 00:47:14,000 Ne kemi përdorur këtë teknikë në Scramble, 871 00:47:14,000 --> 00:47:17,000 por këtu unë jam duke shkuar për të shkuar përpara dhe për të krijuar një lloj të dhënave, 872 00:47:17,000 --> 00:47:19,000 dhe ju e dini se çfarë, unë jam duke shkuar për të thirrur atë student ose person, 873 00:47:19,000 --> 00:47:23,000 dhe unë jam duke shkuar për të përdorur për të përcaktuar typedef një lloj. 874 00:47:23,000 --> 00:47:25,000 Unë jam duke shkuar për të thonë se kjo është një strukturë, 875 00:47:25,000 --> 00:47:29,000 dhe pastaj kjo strukturë do të jetë e tipit studenti, ne do të themi, 876 00:47:29,000 --> 00:47:31,000 edhe pse kjo është një datë pak tani për mua. 877 00:47:31,000 --> 00:47:33,000 Ne do të thonë: "int id". 878 00:47:33,000 --> 00:47:35,000 Ne do të thonë: "emrin string." 879 00:47:35,000 --> 00:47:37,000 Atëherë ne do të themi "shtëpi" string, 880 00:47:37,000 --> 00:47:40,000 kështu që tani deri në fund të këtyre disa rreshta të kodit 881 00:47:40,000 --> 00:47:45,000 Unë kam mësuar vetëm tingulli që ekziston 882 00:47:45,000 --> 00:47:49,000 një lloj të dhënave përveç ints, përveç vargjet, përveç dyshe, përveç gjithandej. 883 00:47:49,000 --> 00:47:54,000 >> Që nga ky moment në linjë kohore 11, tani ka një lloj të ri të dhënave të quajtur studentë, 884 00:47:54,000 --> 00:47:58,000 dhe tani unë mund të deklarojë një ndryshore studentore kudo që unë dua, 885 00:47:58,000 --> 00:48:01,000 kështu që më lejoni të lëvizni poshtë këtu për njerëzit. 886 00:48:01,000 --> 00:48:05,000 Tani unë mund të shpëtoj nga kjo, dhe unë mund të shkojnë përsëri poshtë Davidit këtu, 887 00:48:05,000 --> 00:48:10,000 dhe për Davidin unë në fakt mund të them se David, 888 00:48:10,000 --> 00:48:13,000 ne mund të vërtetë emrin e ndryshueshme pas vetes, 889 00:48:13,000 --> 00:48:16,000 do të jetë e tipit studenti. 890 00:48:16,000 --> 00:48:18,000 Kjo mund të duket pak i çuditshëm, por kjo nuk është e gjitha që të ndryshme 891 00:48:18,000 --> 00:48:22,000 nga shpallja e diçka si një int ose një varg ose një noton. 892 00:48:22,000 --> 00:48:24,000 Kjo ndodh pikërisht kështu që të quhet nxënës tani, 893 00:48:24,000 --> 00:48:28,000 dhe në qoftë se unë dua të vënë diçka në brendësi të kësaj strukture 894 00:48:28,000 --> 00:48:31,000 Unë tani duhet të përdorni një pjesë të re të sintaksës, por kjo është goxha e drejtpërdrejtë, 895 00:48:31,000 --> 00:48:39,000 david.id = 123, david.name = "Davidi" në kryeqytetin D, 896 00:48:39,000 --> 00:48:42,000 dhe david.house = "Mather" 897 00:48:42,000 --> 00:48:46,000 dhe tani unë mund të shpëtoj të këtij stuff këtu. 898 00:48:46,000 --> 00:48:51,000 Njoftim ne kemi redesigned tani programin tonë në të vërtetë një mënyrë shumë më të mirë 899 00:48:51,000 --> 00:48:54,000 se tani në programin tonë pasqyron botën reale. 900 00:48:54,000 --> 00:48:57,000 >> Ka një të vërtetë të botës nocioni i një personi ose një student. 901 00:48:57,000 --> 00:49:02,000 Këtu ne kemi tani një version C e një personi apo më saktësisht një student. 902 00:49:02,000 --> 00:49:05,000 Brenda atij personi janë këto karakteristika të rëndësishme, 903 00:49:05,000 --> 00:49:10,000 ID, emri dhe shtëpi, kështu Rob thelb bëhet e njëjta gjë këtu poshtë, 904 00:49:10,000 --> 00:49:14,000 kështu që studenti rob, dhe tani rob.id = 456, 905 00:49:14,000 --> 00:49:17,000 rob.name = "Rob". 906 00:49:17,000 --> 00:49:20,000 Fakti që është e ndryshueshme quajtur Rob është lloj i pakuptimtë. 907 00:49:20,000 --> 00:49:22,000 Ne mund të e kanë quajtur atë x ose y ose Z. 908 00:49:22,000 --> 00:49:25,000 Ne vetëm e quajti atë Rob të jetë në përputhje semantike, 909 00:49:25,000 --> 00:49:28,000 por me të vërtetë emri është brenda vetë këtë fushë, 910 00:49:28,000 --> 00:49:30,000 kështu që tani unë kam këtë. 911 00:49:30,000 --> 00:49:33,000 Kjo shumë nuk do të ndjehen si dizajn të mirë në atë që unë e kam të vështirë koduar Davidin. 912 00:49:33,000 --> 00:49:35,000 Unë e kam të vështirë koduar Rob. 913 00:49:35,000 --> 00:49:39,000 Dhe unë ende duhet të mbështetet në disa kopje dhe ngjitur çdo herë që unë dua variablave të reja. 914 00:49:39,000 --> 00:49:43,000 Për më tepër, unë kam për të të dhënë duket secili prej këtyre variablave një emër, 915 00:49:43,000 --> 00:49:46,000 edhe pse unë do të shumë më tepër të përshkruar këto variabla 916 00:49:46,000 --> 00:49:48,000  Nxënësit më generically si. 917 00:49:48,000 --> 00:49:52,000 >> Tani ne mund të bashkojë idetë që kanë qenë duke punuar mirë për ne 918 00:49:52,000 --> 00:49:56,000 dhe në vend të thonë, "Ju e dini se çfarë, më jep mua një nxënës ndryshueshme quajtur, 919 00:49:56,000 --> 00:50:01,000 dhe le të ketë jetë të madhësisë 3 ", kështu që tani unë mund të përsosin më tej këtë, 920 00:50:01,000 --> 00:50:04,000 të hequr qafe të Davidit deklaruar dorë, 921 00:50:04,000 --> 00:50:08,000 dhe unë mund të them diçka në vend si studentët [0] këtu. 922 00:50:08,000 --> 00:50:11,000 Unë pastaj mund të them studentët [0] këtu, 923 00:50:11,000 --> 00:50:14,000 studentët [0] këtu, dhe kështu me radhë, dhe unë mund të shkojnë rreth 924 00:50:14,000 --> 00:50:16,000 dhe të pastër që për Rob. 925 00:50:16,000 --> 00:50:19,000 Unë mund të shkoni edhe për tani ndoshta duke shtuar një lak 926 00:50:19,000 --> 00:50:23,000 dhe duke përdorur getString dhe GetInt që në fakt të marrë këto vlera nga përdoruesi. 927 00:50:23,000 --> 00:50:27,000 Unë mund të shkoni në lidhje me shtimin e një konstante, sepse kjo është në përgjithësi praktikë e keqe 928 00:50:27,000 --> 00:50:29,000 të kodit të vështirë disa numër arbitrar si 3 drejtë këtu 929 00:50:29,000 --> 00:50:33,000 dhe pastaj vetëm mos harroni se ju duhet të vënë jo më shumë se 3 studentë në të. 930 00:50:33,000 --> 00:50:36,000 Kjo ndoshta do të jetë më mirë për të përdorur # define në krye të dosjes sime 931 00:50:36,000 --> 00:50:40,000 dhe faktor që jashtë, kështu që në të vërtetë, më lejoni të shkoj përpara dhe të përgjithësojmë këtë. 932 00:50:40,000 --> 00:50:43,000 >> Më lejoni të hapur një shembull që është në mesin e sotme 933 00:50:43,000 --> 00:50:46,000 shembuj paraprakisht, structs1. 934 00:50:46,000 --> 00:50:49,000 Ky është një program më i plotë që përdor # përcaktojë deri këtu 935 00:50:49,000 --> 00:50:51,000 dhe thotë se ne do të kemi 3 studentët by default. 936 00:50:51,000 --> 00:50:54,000 Këtu unë jam deklaruar një vlerë klasë të nxënësve, 937 00:50:54,000 --> 00:50:57,000 kështu që një klasë të nxënësve, dhe tani unë jam duke përdorur një lak 938 00:50:57,000 --> 00:51:00,000 vetëm për të bërë kodin pak më elegante, populloj klasë 939 00:51:00,000 --> 00:51:05,000 me kontributin e përdoruesit, kështu që iterate nga i = 0 deri në për studentët, e cila është 3. 940 00:51:05,000 --> 00:51:07,000 Dhe atëherë unë shpejtë e përdoruesit në këtë version 941 00:51:07,000 --> 00:51:10,000  çfarë është ID e nxënësit, dhe unë të marrë atë me GetInt. 942 00:51:10,000 --> 00:51:13,000 Çfarë është emri i nxënësit, dhe atëherë unë të marrë atë me getString. 943 00:51:13,000 --> 00:51:15,000 Çfarë është shtëpia e studentit? Unë të marrë atë me getString. 944 00:51:15,000 --> 00:51:19,000 Dhe pastaj në fund këtu unë vetëm vendosi të ndryshojë 945 00:51:19,000 --> 00:51:22,000 se si unë jam shtypjen këto jashtë dhe që në fakt përdorin një lak, 946 00:51:22,000 --> 00:51:24,000 dhe kush jam unë shtypjes? 947 00:51:24,000 --> 00:51:27,000 Sipas komentit që unë jam shtypjen askënd në Mather, 948 00:51:27,000 --> 00:51:30,000 dhe kjo është ajo mënyrë Rob dhe revole dhe kështu me radhë, në fakt e Tommy në Mather. 949 00:51:30,000 --> 00:51:34,000 Tommy dhe David do të shtypen në këtë rast, por sa është kjo pune? 950 00:51:34,000 --> 00:51:40,000 Ne nuk kemi parë këtë funksion më parë, por të marrë një guess si për atë që këtë e bën. 951 00:51:40,000 --> 00:51:42,000 Krahason vargjet. 952 00:51:42,000 --> 00:51:45,000 >> Kjo është një jo-pak e qartë se si ajo krahason vargjet sepse ai del 953 00:51:45,000 --> 00:51:49,000 në qoftë se ajo kthehet 0 do të thotë se vargjet janë të barabartë. 954 00:51:49,000 --> 00:51:53,000 Në qoftë se kjo kthen një -1 që do të thotë një fjalë alfabetike para të tjera, 955 00:51:53,000 --> 00:51:57,000 dhe nëse ajo kthehet 1 që do të thotë fjalën tjetër vjen alfabetik 956 00:51:57,000 --> 00:52:00,000 para të tjera, dhe ju mund të shikoni online ose në faqen e njeriut 957 00:52:00,000 --> 00:52:04,000 për të parë saktësisht se cilat rrugë është që, por e gjithë kjo tani është bërë është ajo e thënë 958 00:52:04,000 --> 00:52:09,000 nëse [i]. Shtëpia është e barabartë me "Mather" 959 00:52:09,000 --> 00:52:13,000 pastaj të shkojnë përpara dhe të shtypura jashtë kështu dhe kështu është në Mather. 960 00:52:13,000 --> 00:52:16,000 Por këtu është diçka që ne nuk e kemi parë më parë, dhe ne do të kthehen në këtë. 961 00:52:16,000 --> 00:52:21,000 Unë nuk e kujtojnë kurrë që të bëni këtë në ndonjë nga programet e mia. 962 00:52:21,000 --> 00:52:24,000 Lirë është me sa duket i referohet kujtesës, çlirimin e kujtesës, 963 00:52:24,000 --> 00:52:31,000 por çfarë memorie jam unë duket liruar në këtë lak në fund të këtij programi? 964 00:52:31,000 --> 00:52:34,000 Ajo duket si unë jam liruar emrin e një personi 965 00:52:34,000 --> 00:52:37,000 dhe shtëpia e një personi, por pse është kjo? 966 00:52:37,000 --> 00:52:41,000 >> Kjo rezulton nga të gjitha këto javë që ju keni qenë duke përdorur getString 967 00:52:41,000 --> 00:52:45,000 ne kemi qenë të futur lloj i një bug në çdo një nga programet tuaja. 968 00:52:45,000 --> 00:52:51,000 GetString nga shpërndan kujtesës projektimit në mënyrë që ajo mund të kthehet tek ju një varg, 969 00:52:51,000 --> 00:52:55,000 si Davidi, ose Rob, dhe pastaj ju mund të bëni çfarë të doni 970 00:52:55,000 --> 00:52:59,000 me këtë varg në programin tuaj, sepse ne kemi rezervuar e kujtesës për ju. 971 00:52:59,000 --> 00:53:02,000 Problemi është e gjitha kjo kohë çdo kohë që ju e quani getString 972 00:53:02,000 --> 00:53:05,000 Ne, autorët e getString, kanë qenë duke kërkuar të sistemit operativ 973 00:53:05,000 --> 00:53:07,000 për të na dhënë një grimë e RAM për këtë varg. 974 00:53:07,000 --> 00:53:09,000 Na jep një grimë e RAM për këtë vargun e ardhshëm. 975 00:53:09,000 --> 00:53:11,000 Na jep disa RAM më shumë për këtë vargun e ardhshëm. 976 00:53:11,000 --> 00:53:13,000 Çfarë ju, programues, kurrë nuk janë bërë 977 00:53:13,000 --> 00:53:15,000 është duke na dhënë atë prapa kujtesës, 978 00:53:15,000 --> 00:53:17,000 kështu që për këto disa javë të gjitha programet që ju keni shkruar 979 00:53:17,000 --> 00:53:20,000 kanë pasur atë që quhet një hap të kujtesës ku ata mbajnë përdorur 980 00:53:20,000 --> 00:53:24,000 më shumë memorie dhe më shumë çdo herë që ju e quani getString, dhe kjo është në rregull. 981 00:53:24,000 --> 00:53:27,000 Ne qëllimisht të bëjë që në javët e para, sepse ajo nuk është se interesante 982 00:53:27,000 --> 00:53:29,000 të ketë për t'u shqetësuar rreth ku vargu po vjen nga. 983 00:53:29,000 --> 00:53:34,000 Të gjithë ju duan është fjala Rob të kthehen kur përdoruesi lloje atë in 984 00:53:34,000 --> 00:53:38,000 >> Por duke shkuar përpara, ne tani duhet të filloni të keni më të sofistikuar në lidhje me këtë. 985 00:53:38,000 --> 00:53:42,000 Çdo herë kemi kujtesës kemi të mirë përfundimisht dorë atë. 986 00:53:42,000 --> 00:53:45,000 Ndryshe në botën reale në Mac apo PC tuaj ju mund të ketë herë pas here me përvojë 987 00:53:45,000 --> 00:53:50,000 Simptomat ku kompjuteri juaj është i rëndë për të ndalur një fund 988 00:53:50,000 --> 00:53:54,000 ose budallaqe topin tjerrje plazh është vetëm zënë kompjuteri të 989 00:53:54,000 --> 00:53:56,000 Vëmendje e tërë dhe ju nuk mund të bëni gjëra. 990 00:53:56,000 --> 00:54:00,000 Kjo mund të shpjegohet me ndonjë numër të mete, por në mesin e atyre mete e mundshme 991 00:54:00,000 --> 00:54:03,000 janë gjëra të quajtur rrjedhjet e kujtesës ku dikush që shkruan se pjesë e software 992 00:54:03,000 --> 00:54:07,000 ju jeni duke përdorur nuk mbani mend në kujtesën e lirë 993 00:54:07,000 --> 00:54:10,000 se ai ose ajo i kërkoi sistemit operativ, 994 00:54:10,000 --> 00:54:14,000 mos përdorur getString, sepse kjo është një gjë e CS50, por duke përdorur funksione të ngjashme 995 00:54:14,000 --> 00:54:16,000 që të kërkojë sistemit operativ për kujtesën. 996 00:54:16,000 --> 00:54:19,000 Nëse ju apo ata vidhos deri dhe në fakt nuk kthehet se kujtesa 997 00:54:19,000 --> 00:54:24,000 një simptomë e që mund të jetë që një program ngadalëson dhe ngadalëson dhe ngadalëson 998 00:54:24,000 --> 00:54:26,000 nëse nuk ju kujtohet për të thirrur të lirë. 999 00:54:26,000 --> 00:54:28,000 >> Ne do të vijnë përsëri në kur dhe pse ju do të telefononi lirë, 1000 00:54:28,000 --> 00:54:32,000 por le të shkojë përpara vetëm për masë të mirë dhe të përpiqemi për drejtimin e këtij programi të veçantë. 1001 00:54:32,000 --> 00:54:35,000 Kjo u quajt structs1, të hyjë. 1002 00:54:35,000 --> 00:54:40,000 Më lejoni të shkojnë përpara dhe për të drejtuar structs1, 123, David Mather, 1003 00:54:40,000 --> 00:54:47,000 456, Rob Kirkland, 789, 1004 00:54:47,000 --> 00:54:50,000 Tommy Mather, dhe ne shohim e Davidit në Mather, e Tommy në Mather. 1005 00:54:50,000 --> 00:54:53,000 Kjo është vetëm një kontroll pak mendje e shëndoshë se programi është duke punuar. 1006 00:54:53,000 --> 00:54:56,000 Tani, për fat të keq, ky program është pak frustruese në atë 1007 00:54:56,000 --> 00:55:00,000 Unë kam të gjitha që punojnë, i shtypur në 9 strings ndryshme, goditi të hyjë, 1008 00:55:00,000 --> 00:55:04,000 u tha që ishte në Mather, por natyrisht unë e dija që ishte në Mather tashmë, sepse kam shtypur atë. 1009 00:55:04,000 --> 00:55:07,000 Ajo do të jetë mirë në qoftë se paku ky program është më shumë si një bazë të dhënash 1010 00:55:07,000 --> 00:55:10,000 dhe në fakt ajo kujton atë që kam shtypur në 1011 00:55:10,000 --> 00:55:12,000 kështu që unë kurrë nuk përsëri duhet të input këto shënime studentore. 1012 00:55:12,000 --> 00:55:15,000 Ndoshta kjo është si një sistem registrarial. 1013 00:55:15,000 --> 00:55:21,000 >> Ne mund të bëjmë këtë duke përdorur këtë teknikë e njohur si I / O, e file input output file dhe, 1014 00:55:21,000 --> 00:55:24,000 një mënyrë shumë të përgjithshme për të thënë çdo kohë që ju dëshironi për të lexuar fotografi ose shkruani fotografi 1015 00:55:24,000 --> 00:55:26,000 ju mund ta bëni këtë me një grup të caktuar të funksioneve. 1016 00:55:26,000 --> 00:55:29,000 Më lejoni të shkojnë përpara dhe hapni këtë structs2.c shembull, 1017 00:55:29,000 --> 00:55:33,000 e cila është pothuajse identik, por le të shohim se çfarë ajo tani bën. 1018 00:55:33,000 --> 00:55:36,000 Në krye të dosjes Unë deklaroj një klasë të nxënësve. 1019 00:55:36,000 --> 00:55:38,000 Unë pastaj populloj klasë me kontributin e përdoruesit, 1020 00:55:38,000 --> 00:55:41,000 kështu ato rreshta të kodit janë saktësisht si më parë. 1021 00:55:41,000 --> 00:55:45,000 Pastaj në qoftë se unë lëviz nëpër këtu kam shkruar të gjithë ata që është në Mather arbitrarisht si më parë, 1022 00:55:45,000 --> 00:55:47,000 por kjo është një tipar interesant i ri. 1023 00:55:47,000 --> 00:55:51,000 Këto rreshta të kodit janë të reja, dhe ata të futur diçka këtu, 1024 00:55:51,000 --> 00:55:55,000 File, të gjithë kapele, dhe ajo ka * në edhe këtu. 1025 00:55:55,000 --> 00:55:58,000 Më lejoni të lëvizë mbi këtë këtu, një * mbi këtu si. 1026 00:55:58,000 --> 00:56:00,000 >> Ky funksion nuk kemi parë më parë, fopen, 1027 00:56:00,000 --> 00:56:03,000 por kjo do të thotë fotografi të hapur, kështu që le të skremuar me këto, 1028 00:56:03,000 --> 00:56:05,000 dhe kjo është diçka që ne do të kthehemi në psets ardhshme, 1029 00:56:05,000 --> 00:56:10,000 por kjo linjë këtu thelb hap një dosje të quajtur Baza e të dhënave, 1030 00:56:10,000 --> 00:56:13,000 dhe kjo veçanërisht hap atë në një mënyrë të tillë që ajo mund të bëjë çfarë të saj? 1031 00:56:13,000 --> 00:56:15,000 [E padëgjueshme-studenti] 1032 00:56:15,000 --> 00:56:19,000 Drejtë, kështu që "w" thjesht do të thotë se është thënë e sistemit operativ 1033 00:56:19,000 --> 00:56:21,000 hapur këtë file në një mënyrë të tillë që unë mund të shkruaj për të. 1034 00:56:21,000 --> 00:56:23,000 Unë nuk duan të lexojnë atë. Unë nuk dua të vetëm të shikojnë atë. 1035 00:56:23,000 --> 00:56:26,000 Unë dua të ndryshojë atë dhe shtoni sende potencialisht të, 1036 00:56:26,000 --> 00:56:28,000 dhe dosja do të quhet database. 1037 00:56:28,000 --> 00:56:30,000 Kjo mund të quhet asgjë. 1038 00:56:30,000 --> 00:56:32,000 Kjo mund të jetë database.txt. Kjo mund të jetë. Db. 1039 00:56:32,000 --> 00:56:37,000 Kjo mund të jetë një fjalë si foo, por unë në mënyrë arbitrare zgjodhi për emrin e bazës së të dhënave file. 1040 00:56:37,000 --> 00:56:42,000 Kjo është një kontroll pak mendje e shëndoshë se ne do të kthehen në hollësi të madhe me kalimin e kohës, 1041 00:56:42,000 --> 00:56:47,000 nëse FP, për treguesin e file, nuk NULL barabartë do të thotë se të gjitha është e mirë. 1042 00:56:47,000 --> 00:56:51,000 >> Histori të gjatë të shkurtër, funksionon si fopen ndonjëherë dështojnë. 1043 00:56:51,000 --> 00:56:53,000 Ndoshta nuk ekziston. Ndoshta ju jeni nga hapësira disk. 1044 00:56:53,000 --> 00:56:55,000 Ndoshta ju nuk keni leje për atë dosje, 1045 00:56:55,000 --> 00:56:58,000 kështu që nëse diçka kthehet fopen null ndodhur keqe. 1046 00:56:58,000 --> 00:57:02,000 Në anën tjetër, në qoftë se nuk ka kthim fopen null gjithë është mirë 1047 00:57:02,000 --> 00:57:04,000 dhe unë mund të filloni të shkruani tek kjo skedë. 1048 00:57:04,000 --> 00:57:06,000 Këtu ka një mashtrim të ri. 1049 00:57:06,000 --> 00:57:08,000 Kjo është një lak për të që është mbi çdo iterating nga nxënësit e mi, 1050 00:57:08,000 --> 00:57:10,000 dhe kjo duket aq e ngjashme me atë që ne kemi bërë më parë, 1051 00:57:10,000 --> 00:57:15,000 por ky funksion është një kushëri i quajtur printf fprintf për dosjen printf, 1052 00:57:15,000 --> 00:57:18,000 dhe vini re kjo është e ndryshme vetëm në 2 mënyra. 1053 00:57:18,000 --> 00:57:20,000 Një, ajo fillon me vend të f p, 1054 00:57:20,000 --> 00:57:23,000 por pastaj argumenti i saj i parë është me sa duket ajo? 1055 00:57:23,000 --> 00:57:25,000 [Studentët] dokumentit. >> Kjo është një file. 1056 00:57:25,000 --> 00:57:30,000 Kjo gjë quhet FP, të cilat ne përfundimisht do të vë në lojë përveç asaj një tregues skedë është, 1057 00:57:30,000 --> 00:57:35,000 por tani për tani fp thjesht paraqet dosjen që kam hapur, 1058 00:57:35,000 --> 00:57:41,000 kështu që këtu është thënë fprintf shtypura ID ky përdorues ndaj dosjen, jo në ekran. 1059 00:57:41,000 --> 00:57:44,000 Print emrin e përdoruesit në dosjen, jo në ekran, 1060 00:57:44,000 --> 00:57:47,000 Shtëpia në dosjen, jo në ekran, dhe pastaj poshtë këtu, natyrisht, 1061 00:57:47,000 --> 00:57:50,000 mbyllur dosjen, dhe pastaj këtu poshtë pa memorie. 1062 00:57:50,000 --> 00:57:53,000 >> Dallimi i vetëm në mes këtë version 2 dhe versionin 1 1063 00:57:53,000 --> 00:57:58,000 është futja e fopen dhe kjo skedë me * 1064 00:57:58,000 --> 00:58:01,000 dhe ky nocion i fprintf, kështu që le të shohim se çfarë rezultati përfundimtar është. 1065 00:58:01,000 --> 00:58:03,000 Më lejoni të shkoj në dritaren time terminal. 1066 00:58:03,000 --> 00:58:06,000 Më lejoni të drejtuar structs2, të hyjë. 1067 00:58:06,000 --> 00:58:09,000 Duket si të gjitha është mirë. Le përsëritje structs2. 1068 00:58:09,000 --> 00:58:15,000 123, David Mather, 456, Rob Kirkland, 1069 00:58:15,000 --> 00:58:19,000 789, Tommy Mather, shkruani. 1070 00:58:19,000 --> 00:58:23,000 Duket si ajo sillen njëjtë, por në qoftë se unë tani bëj ls 1071 00:58:23,000 --> 00:58:28,000 njoftim se çfarë file është këtu në mesin e të gjithë kodin tim, bazës së të dhënave, 1072 00:58:28,000 --> 00:58:32,000 kështu që le të hapur atë, duken Gedit i bazës së të dhënave, dhe në atë. 1073 00:58:32,000 --> 00:58:34,000 Kjo nuk është sexiest e file formats. 1074 00:58:34,000 --> 00:58:38,000 Kjo është me të vërtetë një pjesë e linjës të dhënave për linjë për linjë, 1075 00:58:38,000 --> 00:58:42,000 por ata prej jush që e përdorin Excel ose CSV fotografi, të ndara me presje vlerat, 1076 00:58:42,000 --> 00:58:47,000 Unë me siguri mund të ketë përdorur për të fprintf vend ndoshta bëni diçka si kjo 1077 00:58:47,000 --> 00:58:50,000 kështu që unë në fakt mund të krijojnë ekuivalentin e një file Excel 1078 00:58:50,000 --> 00:58:53,000 duke i ndarë gjërat me presje, jo vetëm linjat e reja. 1079 00:58:53,000 --> 00:58:56,000 >> Në këtë rast, nëse unë kam përdorur në vend commas në vend të linjave të reja 1080 00:58:56,000 --> 00:59:01,000 Unë mund të vërtetë të hapur këtë file bazës së të dhënave në Excel, nëse unë e bëri atë në vend të duket si ky. 1081 00:59:01,000 --> 00:59:03,000 Me pak fjalë, tani që ne kemi fuqinë për të shkruar në fotografi 1082 00:59:03,000 --> 00:59:07,000 ne tani mund të fillojnë të dhënave të vazhdueshme, duke e mbajtur atë rreth në disk 1083 00:59:07,000 --> 00:59:10,000 kështu që ne mund të mbajë informacion rreth përsëri dhe përsëri. 1084 00:59:10,000 --> 00:59:14,000 Vini re disa gjëra të tjera që janë tani pak më shumë të njohur. 1085 00:59:14,000 --> 00:59:16,000 Në krye të këtij file C ne kemi një typedef 1086 00:59:16,000 --> 00:59:21,000 sepse ne të kërkuar për të krijuar një lloj të dhënave që përfaqëson një fjalë, 1087 00:59:21,000 --> 00:59:25,000 kështu që kjo lloj quhet fjala, dhe brenda kësaj strukture 1088 00:59:25,000 --> 00:59:27,000 kjo është pak fancier tani. 1089 00:59:27,000 --> 00:59:30,000 Pse është një fjalë e përbërë nga një grup me sa duket? 1090 00:59:30,000 --> 00:59:33,000 Çfarë është një fjalë vetëm intuitive? 1091 00:59:33,000 --> 00:59:35,000 >> Kjo është një grup të karaktereve. 1092 00:59:35,000 --> 00:59:37,000 Kjo është një sekuencë e karaktereve të kthehet prapa për të mbështetur. 1093 00:59:37,000 --> 00:59:41,000 LETRA në të gjitha shkronja kapitale ndodh të jetë ne themi arbitrarisht gjatësia maksimale 1094 00:59:41,000 --> 00:59:44,000 e ndonjë fjale në fjalorin që ne jemi duke përdorur për Scramble. 1095 00:59:44,000 --> 00:59:46,000 Pse nuk kam një 1? 1096 00:59:46,000 --> 00:59:48,000 Karakteri null. 1097 00:59:48,000 --> 00:59:51,000 Kujtoj kur ne e bëmë shembull Bananagrams kishim nevojë për një vlerë të veçantë 1098 00:59:51,000 --> 00:59:55,000 në fund të fjalës në mënyrë që të mbajnë gjurmët 1099 00:59:55,000 --> 00:59:59,000 e ku fjalët përfundoi në fakt, dhe si grup problemi specifikimet thotë 1100 00:59:59,000 --> 01:00:03,000 këtu ne jemi shoqëruar me një fjalë të caktuar një vlerë boolean, 1101 01:00:03,000 --> 01:00:05,000 një flamur, në mënyrë që të flasin, e vërtetë apo e rreme. 1102 01:00:05,000 --> 01:00:09,000 A keni gjetur këtë fjalë tashmë, pasi ne kemi realizuar 1103 01:00:09,000 --> 01:00:13,000 ne me të vërtetë nevojë për një mënyrë për të kujtuar jo vetëm atë që një fjalë është në Scramble 1104 01:00:13,000 --> 01:00:15,000 por nëse janë apo jo ju, e njeriut, kanë gjetur atë 1105 01:00:15,000 --> 01:00:20,000 kështu që nëse ju do të gjeni fjala "e" ju nuk mund të shtypni, shkruani, të, hyjë, të, hyjë 1106 01:00:20,000 --> 01:00:23,000 dhe për të marrë 3 pikë, 3 pikë, 3 pikë, 3 pikë. 1107 01:00:23,000 --> 01:00:26,000 Ne duam që të jetë në gjendje për të listën atë fjalë duke vendosur një bool 1108 01:00:26,000 --> 01:00:29,000 të vërtetë në qoftë se ju keni gjetur tashmë atë, dhe kështu që kjo është arsyeja pse ne 1109 01:00:29,000 --> 01:00:31,000 encapsulated atë në këtë strukturë. 1110 01:00:31,000 --> 01:00:35,000 >> Tani, këtu poshtë në Scramble ka kjo struct tjetër quhet fjalor. 1111 01:00:35,000 --> 01:00:39,000 Mungon këtu është fjala typedef sepse në këtë rast 1112 01:00:39,000 --> 01:00:43,000 kemi nevojë për të encapsulate idenë e një fjalori, 1113 01:00:43,000 --> 01:00:46,000 dhe një fjalor përmban një bandë e tërë e fjalëve, 1114 01:00:46,000 --> 01:00:49,000 nënkuptohet nga ky grup, dhe sa prej atyre fjalëve janë atje? 1115 01:00:49,000 --> 01:00:51,000 E pra, çdo gjë këtë madhësi të ndryshueshme quajtur thotë. 1116 01:00:51,000 --> 01:00:53,000 Por ne vetëm duhet një fjalor. 1117 01:00:53,000 --> 01:00:55,000 Ne nuk kemi nevojë për një lloj të dhënave të quajtur fjalor. 1118 01:00:55,000 --> 01:00:58,000 Ne vetëm duhet një prej tyre, kështu që rezulton në C 1119 01:00:58,000 --> 01:01:03,000 se në qoftë se ju nuk e thoni typedef, ju them vetëm struct, atëherë brenda formatimin e teksteve kaçurrel 1120 01:01:03,000 --> 01:01:05,000 ju vënë variablave tuaja, atëherë ju vënë emrin. 1121 01:01:05,000 --> 01:01:09,000 Kjo është deklaruar nga një fjalor ndryshueshme quajtur 1122 01:01:09,000 --> 01:01:11,000 që duket si kjo. 1123 01:01:11,000 --> 01:01:16,000 Në të kundërt, këto linja janë duke krijuar një strukturë të quajtur Fjala reusable dhënave 1124 01:01:16,000 --> 01:01:19,000 që ju mund të krijojë kopje të shumta të, ashtu si kemi krijuar 1125 01:01:19,000 --> 01:01:22,000 kopje të shumta të nxënësve. 1126 01:01:22,000 --> 01:01:24,000 >> Çfarë e bën këtë në fund të fundit na lejojnë të bëjmë? 1127 01:01:24,000 --> 01:01:30,000 Më lejoni të shkoj përsëri në, le të themi, një shembull të thjeshtë nga kohët më të thjeshta, 1128 01:01:30,000 --> 01:01:34,000 dhe më lejoni të hapur, le të themi, compare1.c. 1129 01:01:34,000 --> 01:01:38,000 Problemi këtu në dorë është që në fakt të zhvishem përsëri 1130 01:01:38,000 --> 01:01:41,000 shtresa e një varg dhe të fillojë të marrë jashtë këtyre rrota trajnimit 1131 01:01:41,000 --> 01:01:44,000 sepse kjo rezulton se një varg gjithë këtë kohë 1132 01:01:44,000 --> 01:01:47,000 është si ne premtuar në të vërtetë vetëm 1 javë pseudonimin një, 1133 01:01:47,000 --> 01:01:51,000 një sinonim nga biblioteka CS50 për diçka që duket pak më i fshehtë, 1134 01:01:51,000 --> 01:01:53,000 * char, dhe ne kemi parë këtë yll më parë. 1135 01:01:53,000 --> 01:01:55,000 Ne pamë atë në kontekstin e dosjeve. 1136 01:01:55,000 --> 01:01:59,000 >> Le të shohim tani se pse ne kemi qenë të fshehur këtë detaj për një kohë tani. 1137 01:01:59,000 --> 01:02:02,000 Këtu është një file i quajtur compare1.c, 1138 01:02:02,000 --> 01:02:07,000 dhe kjo me sa duket kërkon të përdoruesit për 2 vargjet, s dhe t, 1139 01:02:07,000 --> 01:02:11,000 dhe pastaj ajo përpiqet për të krahasuar këto vargje për barazi në linjë 26, 1140 01:02:11,000 --> 01:02:14,000 dhe në qoftë se ata janë të barabartë ai thotë, "Ju shtypen njëjtën gjë", 1141 01:02:14,000 --> 01:02:17,000 dhe në qoftë se ata nuk janë të barabartë ai thotë, "Ju shtypur gjëra të ndryshme." 1142 01:02:17,000 --> 01:02:19,000 Më lejoni të shkojnë përpara dhe për të drejtuar këtë program. 1143 01:02:19,000 --> 01:02:23,000 Më lejoni të shkoj në directory burim tim, të bëjë një compare1. Ajo përpiluar në rregull. 1144 01:02:23,000 --> 01:02:25,000 Më lejoni të drejtuar compare1. 1145 01:02:25,000 --> 01:02:27,000 Unë do të zoom në, të hyjë. 1146 01:02:27,000 --> 01:02:29,000 Thuaj diçka. HELLO. 1147 01:02:29,000 --> 01:02:32,000 Unë do të them diçka përsëri. HELLO. 1148 01:02:32,000 --> 01:02:34,000 Unë definitivisht nuk shkruani gjëra të ndryshme. 1149 01:02:34,000 --> 01:02:37,000 >> Më lejoni të provoni këtë përsëri. BYE BYE. 1150 01:02:37,000 --> 01:02:40,000 Definitivisht nuk e ndryshme, kështu që ajo që po ndodh këtu? 1151 01:02:40,000 --> 01:02:44,000 E pra, ajo që është me të vërtetë duke u krahasuar në linjë 26? 1152 01:02:44,000 --> 01:02:46,000 [E padëgjueshme-studenti] 1153 01:02:46,000 --> 01:02:49,000 Po, kështu rezulton se një varg, të dhënat lloji, është lloj i një gënjeshtër të bardhë. 1154 01:02:49,000 --> 01:02:53,000 Një varg është një char *, por ajo është një char *? 1155 01:02:53,000 --> 01:02:56,000 A * char, siç thonë ata, është një tregues, 1156 01:02:56,000 --> 01:03:00,000 dhe një akrep është efektivisht një adresë, 1157 01:03:00,000 --> 01:03:05,000 një vend shumë në kujtesë, dhe nëse ju ndodh që të keni shtypur në një fjalë si HELLO, 1158 01:03:05,000 --> 01:03:08,000 kujtojnë nga diskutimet e fundit të strings 1159 01:03:08,000 --> 01:03:16,000 kjo është si fjala HELLO. 1160 01:03:16,000 --> 01:03:19,000 Mos harroni se si një fjalë përshëndetje mund të përfaqësohen 1161 01:03:19,000 --> 01:03:22,000 si një grup të karaktereve si kjo 1162 01:03:22,000 --> 01:03:25,000 dhe pastaj me një karakter të veçantë në fund të quajtur karakterin null, 1163 01:03:25,000 --> 01:03:27,000 si tregon \. 1164 01:03:27,000 --> 01:03:29,000 Çfarë është në të vërtetë një varg? 1165 01:03:29,000 --> 01:03:32,000 Vini re se kjo është chunks e shumta të kujtesës, 1166 01:03:32,000 --> 01:03:36,000 dhe në fakt, fundi i tij është i njohur vetëm një herë ju shikoni nëpër varg të tërë 1167 01:03:36,000 --> 01:03:38,000 kërkoni për karakterin null veçantë. 1168 01:03:38,000 --> 01:03:41,000 Por në qoftë se kjo është një copë e kujtesës nga kujtesën e kompjuterit tim, 1169 01:03:41,000 --> 01:03:44,000 le të thonë se kjo mënyrë arbitrare string mori vetëm fat, 1170 01:03:44,000 --> 01:03:47,000 dhe ajo u vendosur në fillim të RAM kompjuterit tim. 1171 01:03:47,000 --> 01:03:54,000 Kjo është bajt 0, 1, 2, 3, 4, 5, 6 ... 1172 01:03:54,000 --> 01:04:02,000 >> Kur them diçka si getString dhe bëj String s = getString 1173 01:04:02,000 --> 01:04:04,000 çfarë është me të vërtetë duke u kthyer? 1174 01:04:04,000 --> 01:04:08,000 Për këto disa javëve të fundit, çfarë është me të vërtetë duke u ruajtur në s 1175 01:04:08,000 --> 01:04:13,000 nuk është ky varg në vetvete, por në këtë rast ajo është duke u ruajtur është 1176 01:04:13,000 --> 01:04:18,000 0 Numri sepse ajo që në fakt nuk getString 1177 01:04:18,000 --> 01:04:20,000 po ajo nuk kthehet fizikisht një varg. 1178 01:04:20,000 --> 01:04:22,000 Kjo nuk ka edhe kuptim konceptual të vërtetë. 1179 01:04:22,000 --> 01:04:24,000 Çfarë ajo nuk kthimi është një numër. 1180 01:04:24,000 --> 01:04:28,000 Ky numër është adresa e PËRSHËNDETJE në kujtesë, 1181 01:04:28,000 --> 01:04:32,000 dhe string s atëherë, në qoftë se ne zhvishem përsëri kjo shtresë, string nuk ekziston në të vërtetë. 1182 01:04:32,000 --> 01:04:35,000 Kjo është vetëm një thjeshtësim në bibliotekë CS50. 1183 01:04:35,000 --> 01:04:38,000 >> Kjo është me të vërtetë diçka që quhet * char. 1184 01:04:38,000 --> 01:04:41,000 Char ka kuptim, sepse ajo është një fjalë, si HELLO? 1185 01:04:41,000 --> 01:04:44,000 E pra, kjo është një seri e karaktere, një seri e karaktereve. 1186 01:04:44,000 --> 01:04:47,000 * Char thotë adresën e një karakter, 1187 01:04:47,000 --> 01:04:50,000 Pra, çfarë do të thotë të kthehet një varg? 1188 01:04:50,000 --> 01:04:53,000 A nice, mënyrë e thjeshtë për të kthyer një varg 1189 01:04:53,000 --> 01:04:57,000 është vend se të përpiqet të kuptoj se si ta kthej në 5 ose 6 bytes ndryshme 1190 01:04:57,000 --> 01:05:01,000 më lejoni të kthehet në adresën e cila bajt? 1191 01:05:01,000 --> 01:05:03,000 I pari. 1192 01:05:03,000 --> 01:05:06,000 Me fjalë të tjera, më lejoni t'ju jap një adresë të një karakter në kujtesë. 1193 01:05:06,000 --> 01:05:10,000 Kjo është ajo që përfaqëson * char, adresa e një karakter të vetëm në kujtesë. 1194 01:05:10,000 --> 01:05:12,000 Telefononi Kjo është e ndryshueshme. 1195 01:05:12,000 --> 01:05:15,000 Shitore në s që adresa të veçantë, që unë në mënyrë arbitrare thënë është 0, 1196 01:05:15,000 --> 01:05:19,000 vetëm për të mbajtur gjërat e thjeshta, por në realitet kjo është në përgjithësi një numër më i madh. 1197 01:05:19,000 --> 01:05:21,000 >> Prisni një minutë. 1198 01:05:21,000 --> 01:05:23,000 Në qoftë se ju jeni vetëm duke i dhënë mua adresën e karakterit të parë, si mund ta di se çfarë është adresa 1199 01:05:23,000 --> 01:05:25,000 të karakterit të dytë, të tretë, të katërt dhe të pestë? 1200 01:05:25,000 --> 01:05:27,000 [E padëgjueshme-studenti] 1201 01:05:27,000 --> 01:05:31,000 Ju vetëm e di se ku fundi i vargut është me anë të këtij mashtrim i dobishëm, 1202 01:05:31,000 --> 01:05:35,000 kështu që kur ju përdorni diçka si printf, çfarë printf fjalë për fjalë merr si argument të saj, 1203 01:05:35,000 --> 01:05:39,000 kujtojnë se ne përdorim placeholder Kete% s, dhe pastaj ju kaloni në 1204 01:05:39,000 --> 01:05:41,000 ndryshore që është ruajtjen e një varg. 1205 01:05:41,000 --> 01:05:47,000 Çfarë ju jeni me të vërtetë kalon është adresa e parë të karakterit atë varg. 1206 01:05:47,000 --> 01:05:50,000 Printf pastaj përdor një për lak ose një lak, ndërsa pas marrjes atë adresë, 1207 01:05:50,000 --> 01:05:53,000 për shembull, 0, kështu që më lejoni të bëjë këtë tani, 1208 01:05:53,000 --> 01:06:02,000 printf ("% s \ n", s); 1209 01:06:02,000 --> 01:06:07,000 Kur unë e quaj printf ("% s \ n", s); ajo që unë jam me të vërtetë duke siguruar me printf 1210 01:06:07,000 --> 01:06:13,000 është adresa e parë në karakterin s, e cila në këtë rast është arbitrare H. 1211 01:06:13,000 --> 01:06:16,000 >> Si nuk e dini se çfarë saktësisht printf për të shfaqur në ekran? 1212 01:06:16,000 --> 01:06:19,000 Personi i cili zbatohet zbatuar printf një lak, ndërsa për ose një lak 1213 01:06:19,000 --> 01:06:23,000 që thotë se e bën këtë karakter e barabartë me karakter të veçantë null? 1214 01:06:23,000 --> 01:06:25,000 Nëse jo, të shtypura atë. Si në lidhje me këtë? 1215 01:06:25,000 --> 01:06:28,000 Nëse jo të shtypura atë, print it, të shtypura, të shtypura atë. 1216 01:06:28,000 --> 01:06:32,000 Oh, kjo është e veçantë. Ndaluar shtypjen dhe të kthehet në të përdoruesit. 1217 01:06:32,000 --> 01:06:35,000 Dhe kjo është fjalë për fjalë të gjitha ato që po ndodh është nën kapuç, 1218 01:06:35,000 --> 01:06:38,000 dhe që është një shumë të tretet në ditën e parë të një klasë, 1219 01:06:38,000 --> 01:06:43,000 por tani për tani kjo është me të vërtetë bllok ndërtimi i çdo gjëje të kuptuarit 1220 01:06:43,000 --> 01:06:46,000 që është në vazhdim e sipër brenda kujtesën e kompjuterit tonë, 1221 01:06:46,000 --> 01:06:49,000 dhe përfundimisht ne do të vë në lojë përveç kësaj me një ndihmë të vogël 1222 01:06:49,000 --> 01:06:51,000 nga një prej miqve tanë në Stanford. 1223 01:06:51,000 --> 01:06:56,000 >> Profesor Nick Parlante në Stanford ka bërë këtë rend mrekullueshme video 1224 01:06:56,000 --> 01:06:58,000 nga të gjitha llojet e gjuhëve të ndryshme që futur 1225 01:06:58,000 --> 01:07:00,000 kjo pak karakter Claymation Binky. 1226 01:07:00,000 --> 01:07:03,000 Zëri ju jeni gati për të dëgjuar në vetëm një vrojtim vjedhës të dytë disa 1227 01:07:03,000 --> 01:07:05,000 është ai i një profesor Stanford, dhe ju jeni duke marrë 1228 01:07:05,000 --> 01:07:07,000 vetëm 5 ose 6 sekonda e kësaj të drejte tani, 1229 01:07:07,000 --> 01:07:09,000 por ky është shënim në të cilën ne do të përfundojë sot 1230 01:07:09,000 --> 01:07:11,000 dhe të fillojë të mërkurën. 1231 01:07:11,000 --> 01:07:15,000 Unë ju jap Fun treguesin me Binky, preview. 1232 01:07:15,000 --> 01:07:18,000 [♪ ♪ Music] [Profesor Parlante] Hej, Binky. 1233 01:07:18,000 --> 01:07:21,000 Zgjoheni. Është koha për argëtim akrep. 1234 01:07:21,000 --> 01:07:24,000 [Binky] Çfarë është ajo? Mësoni rreth pointers? 1235 01:07:24,000 --> 01:07:26,000 Oh, me mirësi të shtrirë! 1236 01:07:26,000 --> 01:07:29,000 >> Ne do të shohim se të mërkurën. 1237 01:07:29,000 --> 01:07:32,000 [CS50.TV]